aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2022-09-21 20:17:38 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2022-09-21 20:17:38 +0300
commite6c9b17192c56494adba359d5e132c431b241191 (patch)
tree6f2449871a118a0e8919ce842b1174e06cb470ef
parent285021ab1aac39e84b269d9bacd4deee69cf63fc (diff)
downloadydb-e6c9b17192c56494adba359d5e132c431b241191.tar.gz
Ydb stable 22-4-2122.4.21
x-stable-origin-commit: e89099581237299a132feafb5b58af59ebd0468a
-rw-r--r--CMakeLists.darwin.txt1343
-rw-r--r--CMakeLists.linux.txt1364
-rw-r--r--CMakeLists.txt2
-rw-r--r--build/scripts/check_config_h.py89
-rw-r--r--build/scripts/clang_wrapper.py53
-rw-r--r--build/scripts/compile_java.py102
-rwxr-xr-xbuild/scripts/configure_file.py59
-rw-r--r--build/scripts/copy_docs_files_to_dir.py138
-rw-r--r--build/scripts/extract_docs.py43
-rwxr-xr-xbuild/scripts/fetch_from.py375
-rwxr-xr-xbuild/scripts/fetch_from_sandbox.py269
-rw-r--r--build/scripts/fs_tools.py104
-rw-r--r--build/scripts/gen_py3_reg.py34
-rw-r--r--build/scripts/gen_py_protos.py67
-rw-r--r--build/scripts/gen_py_reg.py32
-rw-r--r--build/scripts/link_dyn_lib.py335
-rw-r--r--build/scripts/link_exe.py130
-rw-r--r--build/scripts/link_lib.py85
-rw-r--r--build/scripts/llvm_opt_wrapper.py18
-rw-r--r--build/scripts/merge_files.py8
-rw-r--r--build/scripts/preprocess.py48
-rw-r--r--build/scripts/process_command_files.pycbin0 -> 1726 bytes
-rwxr-xr-xbuild/scripts/py_compile.py24
-rw-r--r--build/scripts/rodata2asm.py31
-rw-r--r--build/scripts/run_llvm_dsymutil.py11
-rw-r--r--build/scripts/stdout2stderr.py6
-rw-r--r--build/scripts/tar_sources.py41
-rw-r--r--build/scripts/tared_protoc.py31
-rwxr-xr-xbuild/scripts/touch.py50
-rw-r--r--build/scripts/xargs.py18
-rw-r--r--build/scripts/yield_line.py7
-rw-r--r--cmake/global_flags.cmake69
-rw-r--r--cmake/global_vars.cmake2
-rw-r--r--cmake/yandex_common.cmake43
-rw-r--r--contrib/CMakeLists.txt11
-rw-r--r--contrib/libs/CMakeLists.darwin.txt53
-rw-r--r--contrib/libs/CMakeLists.linux.txt57
-rw-r--r--contrib/libs/CMakeLists.txt13
-rw-r--r--contrib/libs/apache/CMakeLists.darwin.txt10
-rw-r--r--contrib/libs/apache/CMakeLists.linux.txt11
-rw-r--r--contrib/libs/apache/CMakeLists.txt13
-rw-r--r--contrib/libs/apache/avro/CMakeLists.txt2
-rw-r--r--contrib/libs/aws-sdk-cpp/CMakeLists.txt10
-rw-r--r--contrib/libs/base64/CMakeLists.txt14
-rw-r--r--contrib/libs/brotli/CMakeLists.txt11
-rw-r--r--contrib/libs/cctz/CMakeLists.darwin.txt1
-rw-r--r--contrib/libs/cctz/CMakeLists.linux.txt1
-rw-r--r--contrib/libs/cctz/CMakeLists.txt2
-rw-r--r--contrib/libs/curl/CMakeLists.txt2
-rw-r--r--contrib/libs/cxxsupp/CMakeLists.txt4
-rw-r--r--contrib/libs/cxxsupp/builtins/CMakeLists.txt2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/all.h82
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/common_view.h135
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/copyable_box.h178
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/counted.h81
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/drop_view.h127
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h82
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/empty_view.h45
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h408
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/join_view.h350
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/non_propagating_cache.h114
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/owning_view.h81
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/range_adaptor.h73
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h130
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/ref_view.h86
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h134
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h190
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/single_view.h81
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h289
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/take_view.h185
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/transform_view.h440
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h195
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/views.h35
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/ranges275
-rw-r--r--contrib/libs/expat/CMakeLists.txt2
-rw-r--r--contrib/libs/farmhash/CMakeLists.txt1
-rw-r--r--contrib/libs/farmhash/arch/CMakeLists.txt11
-rw-r--r--contrib/libs/grpc/CMakeLists.txt4
-rw-r--r--contrib/libs/grpc/src/CMakeLists.txt10
-rw-r--r--contrib/libs/grpc/src/compiler/CMakeLists.txt9
-rw-r--r--contrib/libs/grpc/src/core/CMakeLists.txt9
-rw-r--r--contrib/libs/grpc/third_party/CMakeLists.txt10
-rw-r--r--contrib/libs/highwayhash/CMakeLists.txt1
-rw-r--r--contrib/libs/highwayhash/arch/CMakeLists.txt10
-rw-r--r--contrib/libs/hyperscan/CMakeLists.txt4
-rw-r--r--contrib/libs/icu/CMakeLists.txt475
-rw-r--r--contrib/libs/jemalloc/CMakeLists.txt2
-rw-r--r--contrib/libs/libc_compat/CMakeLists.txt2
-rw-r--r--contrib/libs/libevent/CMakeLists.txt4
-rw-r--r--contrib/libs/libevent/event_core/CMakeLists.txt2
-rw-r--r--contrib/libs/libunwind/CMakeLists.txt2
-rw-r--r--contrib/libs/linuxvdso/CMakeLists.linux.txt1
-rw-r--r--contrib/libs/linuxvdso/CMakeLists.txt2
-rw-r--r--contrib/libs/linuxvdso/original/CMakeLists.txt2
-rw-r--r--contrib/libs/llvm12/CMakeLists.txt3
-rw-r--r--contrib/libs/llvm12/include/epilogue.cmake3
-rw-r--r--contrib/libs/llvm12/lib/Bitcode/CMakeLists.txt10
-rw-r--r--contrib/libs/llvm12/lib/Bitstream/CMakeLists.txt9
-rw-r--r--contrib/libs/llvm12/lib/CMakeLists.txt30
-rw-r--r--contrib/libs/llvm12/lib/CodeGen/CMakeLists.txt3
-rw-r--r--contrib/libs/llvm12/lib/DebugInfo/CMakeLists.txt13
-rw-r--r--contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.darwin.txt36
-rw-r--r--contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.linux.txt37
-rw-r--r--contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.txt31
-rw-r--r--contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents/CMakeLists.txt2
-rw-r--r--contrib/libs/llvm12/lib/Frontend/CMakeLists.txt9
-rw-r--r--contrib/libs/llvm12/lib/Frontend/OpenMP/epilogue.cmake2
-rw-r--r--contrib/libs/llvm12/lib/Frontend/OpenMP/prologue.cmake3
-rw-r--r--contrib/libs/llvm12/lib/MC/CMakeLists.txt2
-rw-r--r--contrib/libs/llvm12/lib/Target/CMakeLists.txt1
-rw-r--r--contrib/libs/llvm12/lib/Target/X86/CMakeLists.txt4
-rw-r--r--contrib/libs/llvm12/lib/TextAPI/CMakeLists.txt9
-rw-r--r--contrib/libs/llvm12/lib/Transforms/CMakeLists.txt17
-rw-r--r--contrib/libs/llvm12/utils/CMakeLists.txt9
-rw-r--r--contrib/libs/llvm12/utils/TableGen/CMakeLists.darwin.txt1
-rw-r--r--contrib/libs/llvm12/utils/TableGen/CMakeLists.linux.txt1
-rw-r--r--contrib/libs/llvm12/utils/TableGen/CMakeLists.txt2
-rw-r--r--contrib/libs/lz4/CMakeLists.txt1
-rw-r--r--contrib/libs/lzma/CMakeLists.txt2
-rw-r--r--contrib/libs/nayuki_md5/CMakeLists.txt2
-rw-r--r--contrib/libs/pcre/CMakeLists.txt2
-rw-r--r--contrib/libs/pdqsort/CMakeLists.txt2
-rw-r--r--contrib/libs/poco/CMakeLists.linux.txt15
-rw-r--r--contrib/libs/poco/CMakeLists.txt11
-rw-r--r--contrib/libs/poco/Crypto/CMakeLists.txt2
-rw-r--r--contrib/libs/poco/Foundation/CMakeLists.txt2
-rw-r--r--contrib/libs/poco/JSON/CMakeLists.txt2
-rw-r--r--contrib/libs/poco/Net/CMakeLists.txt2
-rw-r--r--contrib/libs/poco/NetSSL_OpenSSL/CMakeLists.txt2
-rw-r--r--contrib/libs/poco/Util/CMakeLists.txt2
-rw-r--r--contrib/libs/poco/XML/CMakeLists.txt2
-rw-r--r--contrib/libs/protobuf_std/src/google/protobuf/util/time_util.h313
-rw-r--r--contrib/libs/tcmalloc/CMakeLists.darwin.txt9
-rw-r--r--contrib/libs/tcmalloc/CMakeLists.linux.txt2
-rw-r--r--contrib/libs/tcmalloc/CMakeLists.txt4
-rw-r--r--contrib/libs/tcmalloc/no_percpu_cache/CMakeLists.txt2
-rw-r--r--contrib/libs/tcmalloc/ya.make39
-rw-r--r--contrib/restricted/CMakeLists.darwin.txt16
-rw-r--r--contrib/restricted/CMakeLists.linux.txt18
-rw-r--r--contrib/restricted/CMakeLists.txt13
-rw-r--r--contrib/restricted/abseil-cpp-tstring/CMakeLists.txt9
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/CMakeLists.txt26
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/base/CMakeLists.txt2
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/CMakeLists.txt12
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/container/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/container/internal/CMakeLists.txt10
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/debugging/CMakeLists.txt2
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/hash/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/profiling/CMakeLists.txt9
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/profiling/internal/CMakeLists.txt9
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/status/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/strings/CMakeLists.txt2
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/CMakeLists.txt14
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/synchronization/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/time/CMakeLists.txt2
-rw-r--r--contrib/restricted/abseil-cpp-tstring/y_absl/types/CMakeLists.txt3
-rw-r--r--contrib/restricted/abseil-cpp/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp/absl/CMakeLists.txt28
-rw-r--r--contrib/restricted/abseil-cpp/absl/base/CMakeLists.txt2
-rw-r--r--contrib/restricted/abseil-cpp/absl/base/internal/CMakeLists.txt14
-rw-r--r--contrib/restricted/abseil-cpp/absl/container/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp/absl/container/internal/CMakeLists.txt10
-rw-r--r--contrib/restricted/abseil-cpp/absl/debugging/CMakeLists.txt6
-rw-r--r--contrib/restricted/abseil-cpp/absl/flags/CMakeLists.txt7
-rw-r--r--contrib/restricted/abseil-cpp/absl/flags/internal/CMakeLists.txt13
-rw-r--r--contrib/restricted/abseil-cpp/absl/hash/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp/absl/profiling/CMakeLists.txt9
-rw-r--r--contrib/restricted/abseil-cpp/absl/profiling/internal/CMakeLists.txt10
-rw-r--r--contrib/restricted/abseil-cpp/absl/random/CMakeLists.txt12
-rw-r--r--contrib/restricted/abseil-cpp/absl/random/internal/CMakeLists.txt16
-rw-r--r--contrib/restricted/abseil-cpp/absl/status/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp/absl/strings/CMakeLists.txt2
-rw-r--r--contrib/restricted/abseil-cpp/absl/strings/internal/CMakeLists.txt15
-rw-r--r--contrib/restricted/abseil-cpp/absl/synchronization/CMakeLists.txt1
-rw-r--r--contrib/restricted/abseil-cpp/absl/time/CMakeLists.txt2
-rw-r--r--contrib/restricted/abseil-cpp/absl/types/CMakeLists.txt4
-rw-r--r--contrib/restricted/aws/CMakeLists.txt14
-rw-r--r--contrib/restricted/aws/aws-c-common/CMakeLists.txt2
-rw-r--r--contrib/restricted/aws/aws-c-io/CMakeLists.txt2
-rw-r--r--contrib/restricted/aws/s2n/CMakeLists.txt2
-rw-r--r--contrib/restricted/boost/.yandex_meta/devtools.copyrights.report38573
-rw-r--r--contrib/restricted/boost/.yandex_meta/devtools.licenses.report19360
-rw-r--r--contrib/restricted/boost/.yandex_meta/licenses.list.txt10142
-rw-r--r--contrib/restricted/boost/CMakeLists.txt1
-rw-r--r--contrib/restricted/boost/libs/.yandex_meta/licenses.list.txt72
-rw-r--r--contrib/restricted/boost/libs/CMakeLists.darwin.txt11
-rw-r--r--contrib/restricted/boost/libs/CMakeLists.linux.txt13
-rw-r--r--contrib/restricted/boost/libs/CMakeLists.txt13
-rw-r--r--contrib/restricted/boost/libs/atomic/.yandex_meta/licenses.list.txt39
-rw-r--r--contrib/restricted/boost/libs/chrono/.yandex_meta/licenses.list.txt86
-rw-r--r--contrib/restricted/boost/libs/chrono/CMakeLists.txt2
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches.hpp24
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp66
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_sequence_container.hpp65
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/last_lap.hpp42
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/no_memory.hpp36
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/dont_start.hpp32
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/accumulator_set_formatter.hpp133
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/base_formatter.hpp65
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/elapsed_formatter.hpp109
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp117
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/laps_stopwatch.hpp442
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/clock_default_formatter.hpp31
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp34
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopclock.hpp176
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp37
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/process_default_formatter.hpp42
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopclock.hpp175
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp259
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp31
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/strict_stopclock.hpp143
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/system_default_formatter.hpp19
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/thread_default_formatter.hpp26
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/simple_stopwatch.hpp110
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch.hpp444
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch_scoped.hpp142
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/strict_stopwatch.hpp115
-rw-r--r--contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/suspendable_stopwatch.hpp334
-rw-r--r--contrib/restricted/boost/libs/container/.yandex_meta/licenses.list.txt65
-rw-r--r--contrib/restricted/boost/libs/context/.yandex_meta/licenses.list.txt91
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S113
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S109
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_elf_gas.S86
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_macho_gas.S95
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_pe_armasm.asm81
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_pe_armasm.masm81
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_combined_sysv_macho_gas.S20
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_gas.asm117
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_masm.asm116
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_masm.masm116
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_i386_sysv_elf_gas.S92
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_i386_sysv_macho_gas.S74
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S16
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_mips32_o32_elf_gas.S118
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S16
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_elf_gas.S206
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_macho_gas.S201
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_xcoff_gas.S203
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_elf_gas.S220
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_macho_gas.S164
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_xcoff_gas.S84
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_gas.asm209
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_masm.asm205
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_masm.masm205
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_arm64_aapcs_elf_gas.S84
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_arm64_aapcs_macho_gas.S88
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_elf_gas.S79
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_macho_gas.S71
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_pe_armasm.asm77
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_pe_armasm.masm77
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_combined_sysv_macho_gas.S20
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_gas.asm147
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_masm.asm140
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_masm.masm140
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_i386_sysv_elf_gas.S112
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_i386_sysv_macho_gas.S90
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S16
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_mips32_o32_elf_gas.S96
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S16
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_elf_gas.S142
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_macho_gas.S137
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_xcoff_gas.S138
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_elf_gas.S176
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_macho_gas.S126
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_xcoff_gas.S62
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_gas.asm174
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_masm.asm163
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_masm.masm163
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S112
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_arm64_aapcs_macho_gas.S108
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_elf_gas.S91
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_macho_gas.S100
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_pe_armasm.asm86
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_pe_armasm.masm86
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_combined_sysv_macho_gas.S20
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_gas.asm125
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_masm.asm124
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_masm.masm124
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_i386_sysv_elf_gas.S99
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_i386_sysv_macho_gas.S81
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S16
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_mips32_o32_elf_gas.S119
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S16
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_elf_gas.S206
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_macho_gas.S201
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S203
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_elf_gas.S240
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_macho_gas.S151
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_xcoff_gas.S83
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm211
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm207
-rw-r--r--contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_masm.masm207
-rw-r--r--contrib/restricted/boost/libs/context/src/continuation.cpp60
-rw-r--r--contrib/restricted/boost/libs/context/src/dummy.cpp0
-rw-r--r--contrib/restricted/boost/libs/context/src/execution_context.cpp69
-rw-r--r--contrib/restricted/boost/libs/context/src/fiber.cpp58
-rw-r--r--contrib/restricted/boost/libs/context/src/untested.cpp7
-rw-r--r--contrib/restricted/boost/libs/context/src/windows/stack_traits.cpp116
-rw-r--r--contrib/restricted/boost/libs/coroutine/.yandex_meta/licenses.list.txt36
-rw-r--r--contrib/restricted/boost/libs/coroutine/src/windows/stack_traits.cpp114
-rw-r--r--contrib/restricted/boost/libs/date_time/.yandex_meta/licenses.list.txt50
-rw-r--r--contrib/restricted/boost/libs/date_time/src/gregorian/gregorian_types.cpp62
-rw-r--r--contrib/restricted/boost/libs/date_time/src/posix_time/posix_time_types.cpp35
-rw-r--r--contrib/restricted/boost/libs/exception/.yandex_meta/licenses.list.txt33
-rw-r--r--contrib/restricted/boost/libs/filesystem/.yandex_meta/licenses.list.txt80
-rw-r--r--contrib/restricted/boost/libs/iostreams/.yandex_meta/licenses.list.txt67
-rw-r--r--contrib/restricted/boost/libs/iostreams/CMakeLists.txt2
-rw-r--r--contrib/restricted/boost/libs/iostreams/src/bzip2.cpp168
-rw-r--r--contrib/restricted/boost/libs/iostreams/src/lzma.cpp147
-rw-r--r--contrib/restricted/boost/libs/locale/.yandex_meta/licenses.list.txt38
-rw-r--r--contrib/restricted/boost/libs/locale/src/win32/all_generator.hpp45
-rw-r--r--contrib/restricted/boost/libs/locale/src/win32/api.hpp357
-rw-r--r--contrib/restricted/boost/libs/locale/src/win32/collate.cpp127
-rw-r--r--contrib/restricted/boost/libs/locale/src/win32/converter.cpp106
-rw-r--r--contrib/restricted/boost/libs/locale/src/win32/lcid.cpp127
-rw-r--r--contrib/restricted/boost/libs/locale/src/win32/numeric.cpp245
-rw-r--r--contrib/restricted/boost/libs/locale/src/win32/win_backend.cpp153
-rw-r--r--contrib/restricted/boost/libs/log/.yandex_meta/licenses.list.txt66
-rw-r--r--contrib/restricted/boost/libs/log/config/atomic-int32/atomic_int32.cpp17
-rw-r--r--contrib/restricted/boost/libs/log/config/native-syslog/native_syslog.cpp26
-rw-r--r--contrib/restricted/boost/libs/log/config/pthread-mutex-robust/pthread_mutex_robust.cpp37
-rw-r--r--contrib/restricted/boost/libs/log/config/visibility/visibility.cpp16
-rw-r--r--contrib/restricted/boost/libs/log/config/x86-ext/avx2.cpp16
-rw-r--r--contrib/restricted/boost/libs/log/config/x86-ext/ssse3.cpp15
-rw-r--r--contrib/restricted/boost/libs/log/config/xopen-source-600/xopen_source_600.cpp17
-rw-r--r--contrib/restricted/boost/libs/log/src/dump_avx2.cpp349
-rw-r--r--contrib/restricted/boost/libs/log/src/dump_ssse3.cpp311
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/auto_handle.hpp79
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/debug_output_backend.cpp78
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/event_log_backend.cpp635
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/event_log_registry.hpp491
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/ipc_reliable_message_queue.cpp818
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/ipc_sync_wrappers.cpp544
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/ipc_sync_wrappers.hpp652
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/light_rw_mutex.cpp201
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/mapped_shared_memory.cpp251
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/mapped_shared_memory.hpp102
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/object_name.cpp227
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/simple_event_log.h95
-rw-r--r--contrib/restricted/boost/libs/log/src/windows/utf_code_conversion.hpp42
-rw-r--r--contrib/restricted/boost/libs/program_options/.yandex_meta/licenses.list.txt55
-rw-r--r--contrib/restricted/boost/libs/program_options/CMakeLists.txt2
-rw-r--r--contrib/restricted/boost/libs/python/.yandex_meta/licenses.list.txt120
-rw-r--r--contrib/restricted/boost/libs/python/arcadia_test/mod/module.cpp11
-rw-r--r--contrib/restricted/boost/libs/python/arcadia_test/py2/test_hello.py5
-rw-r--r--contrib/restricted/boost/libs/python/arcadia_test/py3/test_hello.py5
-rw-r--r--contrib/restricted/boost/libs/python/src/numpy/dtype.cpp220
-rw-r--r--contrib/restricted/boost/libs/python/src/numpy/matrix.cpp63
-rw-r--r--contrib/restricted/boost/libs/python/src/numpy/ndarray.cpp301
-rw-r--r--contrib/restricted/boost/libs/python/src/numpy/numpy.cpp33
-rw-r--r--contrib/restricted/boost/libs/python/src/numpy/scalars.cpp36
-rw-r--r--contrib/restricted/boost/libs/python/src/numpy/ufunc.cpp65
-rw-r--r--contrib/restricted/boost/libs/random/.yandex_meta/licenses.list.txt43
-rw-r--r--contrib/restricted/boost/libs/regex/.yandex_meta/licenses.list.txt51
-rw-r--r--contrib/restricted/boost/libs/serialization/.yandex_meta/licenses.list.txt87
-rw-r--r--contrib/restricted/boost/libs/serialization/src/binary_wiarchive.cpp47
-rw-r--r--contrib/restricted/boost/libs/serialization/src/binary_woarchive.cpp44
-rw-r--r--contrib/restricted/boost/libs/system/.yandex_meta/licenses.list.txt36
-rw-r--r--contrib/restricted/boost/libs/system/CMakeLists.txt2
-rw-r--r--contrib/restricted/boost/libs/thread/.yandex_meta/licenses.list.txt116
-rw-r--r--contrib/restricted/boost/libs/thread/CMakeLists.txt2
-rw-r--r--contrib/restricted/boost/libs/thread/src/tss_null.cpp38
-rw-r--r--contrib/restricted/boost/libs/thread/src/win32/thread.cpp973
-rw-r--r--contrib/restricted/boost/libs/thread/src/win32/thread_primitives.cpp140
-rw-r--r--contrib/restricted/boost/libs/thread/src/win32/tss_dll.cpp85
-rw-r--r--contrib/restricted/boost/libs/thread/src/win32/tss_pe.cpp337
-rw-r--r--contrib/restricted/boost/libs/timer/.yandex_meta/licenses.list.txt42
-rw-r--r--contrib/restricted/boost/stacktrace/.yandex_meta/devtools.copyrights.report100
-rw-r--r--contrib/restricted/boost/stacktrace/.yandex_meta/devtools.licenses.report96
-rw-r--r--contrib/restricted/boost/stacktrace/.yandex_meta/licenses.list.txt27
-rw-r--r--contrib/restricted/boost/stacktrace/include/boost/stacktrace.hpp19
-rw-r--r--contrib/restricted/boost/stacktrace/include/boost/stacktrace/stacktrace.hpp422
-rw-r--r--contrib/restricted/boost/stacktrace/include/boost/stacktrace/stacktrace_fwd.hpp28
-rw-r--r--contrib/restricted/boost/stacktrace/src/windbg.cpp10
-rw-r--r--contrib/restricted/cityhash-1.0.2/CMakeLists.txt2
-rw-r--r--contrib/restricted/dragonbox/CMakeLists.txt2
-rw-r--r--contrib/restricted/googletest/CMakeLists.txt10
-rw-r--r--contrib/tools/CMakeLists.txt9
-rw-r--r--contrib/tools/protoc/CMakeLists.txt10
-rw-r--r--contrib/tools/protoc/bin/CMakeLists.txt2
-rw-r--r--contrib/tools/protoc/bin/ya.make26
-rw-r--r--contrib/tools/protoc/plugins/CMakeLists.txt10
-rw-r--r--contrib/tools/protoc/plugins/cpp_styleguide/CMakeLists.txt2
-rw-r--r--contrib/tools/protoc/plugins/cpp_styleguide/bin/ya.make21
-rw-r--r--contrib/tools/protoc/plugins/grpc_cpp/CMakeLists.txt2
-rw-r--r--contrib/tools/protoc/plugins/grpc_cpp/bin/ya.make30
-rw-r--r--contrib/tools/protoc/plugins/grpc_java/bin/ya.make21
-rw-r--r--contrib/tools/protoc/plugins/grpc_python/bin/ya.make28
-rw-r--r--contrib/tools/ragel6/bin/ya.make116
-rw-r--r--contrib/tools/yasm/bin/ya.make120
-rw-r--r--library/CMakeLists.txt9
-rw-r--r--library/cpp/CMakeLists.txt88
-rw-r--r--library/cpp/actors/CMakeLists.txt20
-rw-r--r--library/cpp/actors/core/event_pb.h4
-rw-r--r--library/cpp/actors/core/log.cpp41
-rw-r--r--library/cpp/actors/core/log.h1
-rw-r--r--library/cpp/actors/http/http_ut.cpp1
-rw-r--r--library/cpp/actors/interconnect/CMakeLists.darwin.txt1
-rw-r--r--library/cpp/actors/interconnect/CMakeLists.linux.txt1
-rw-r--r--library/cpp/actors/interconnect/CMakeLists.txt2
-rw-r--r--library/cpp/actors/interconnect/interconnect_handshake.cpp7
-rw-r--r--library/cpp/actors/interconnect/ut/large.cpp2
-rw-r--r--library/cpp/actors/wilson/CMakeLists.txt1
-rw-r--r--library/cpp/balloc/CMakeLists.txt2
-rw-r--r--library/cpp/balloc/lib/CMakeLists.txt2
-rw-r--r--library/cpp/blockcodecs/CMakeLists.txt2
-rw-r--r--library/cpp/blockcodecs/codecs/CMakeLists.txt17
-rw-r--r--library/cpp/codecs/CMakeLists.txt1
-rw-r--r--library/cpp/containers/CMakeLists.txt24
-rw-r--r--library/cpp/coroutine/CMakeLists.txt10
-rw-r--r--library/cpp/deprecated/CMakeLists.txt13
-rw-r--r--library/cpp/digest/CMakeLists.txt15
-rw-r--r--library/cpp/digest/argonish/CMakeLists.txt1
-rw-r--r--library/cpp/digest/argonish/internal/CMakeLists.txt13
-rw-r--r--library/cpp/digest/argonish/internal/proxies/CMakeLists.txt14
-rw-r--r--library/cpp/digest/old_crc/CMakeLists.txt1
-rw-r--r--library/cpp/digest/old_crc/gencrc/CMakeLists.txt2
-rw-r--r--library/cpp/getopt/CMakeLists.txt1
-rw-r--r--library/cpp/grpc/CMakeLists.txt10
-rw-r--r--library/cpp/grpc/server/CMakeLists.txt1
-rw-r--r--library/cpp/grpc/server/grpc_request.h39
-rw-r--r--library/cpp/histogram/CMakeLists.txt10
-rw-r--r--library/cpp/histogram/adaptive/CMakeLists.txt1
-rw-r--r--library/cpp/html/CMakeLists.txt10
-rw-r--r--library/cpp/http/CMakeLists.txt12
-rw-r--r--library/cpp/json/CMakeLists.txt5
-rw-r--r--library/cpp/lfalloc/CMakeLists.darwin.txt23
-rw-r--r--library/cpp/lfalloc/CMakeLists.linux.txt22
-rw-r--r--library/cpp/lfalloc/CMakeLists.txt17
-rw-r--r--library/cpp/logger/CMakeLists.txt1
-rw-r--r--library/cpp/lwtrace/CMakeLists.txt2
-rw-r--r--library/cpp/lwtrace/mon/CMakeLists.txt1
-rw-r--r--library/cpp/malloc/CMakeLists.darwin.txt10
-rw-r--r--library/cpp/malloc/CMakeLists.linux.txt11
-rw-r--r--library/cpp/malloc/CMakeLists.txt13
-rw-r--r--library/cpp/malloc/tcmalloc/CMakeLists.txt2
-rw-r--r--library/cpp/messagebus/CMakeLists.txt7
-rw-r--r--library/cpp/mime/CMakeLists.txt9
-rw-r--r--library/cpp/monlib/CMakeLists.txt15
-rw-r--r--library/cpp/monlib/deprecated/CMakeLists.txt9
-rw-r--r--library/cpp/monlib/dynamic_counters/CMakeLists.txt1
-rw-r--r--library/cpp/monlib/dynamic_counters/page.cpp4
-rw-r--r--library/cpp/monlib/encode/CMakeLists.txt6
-rw-r--r--library/cpp/monlib/encode/legacy_protobuf/CMakeLists.txt9
-rw-r--r--library/cpp/monlib/service/CMakeLists.txt1
-rw-r--r--library/cpp/monlib/service/pages/CMakeLists.txt1
-rw-r--r--library/cpp/monlib/service/pages/templates.h24
-rw-r--r--library/cpp/on_disk/CMakeLists.txt9
-rw-r--r--library/cpp/openssl/CMakeLists.txt12
-rw-r--r--library/cpp/protobuf/CMakeLists.txt11
-rw-r--r--library/cpp/protobuf/json/json2proto.cpp3
-rw-r--r--library/cpp/protobuf/util/CMakeLists.txt1
-rw-r--r--library/cpp/regex/CMakeLists.txt11
-rw-r--r--library/cpp/retry/CMakeLists.txt1
-rw-r--r--library/cpp/streams/CMakeLists.txt13
-rw-r--r--library/cpp/string_utils/CMakeLists.txt17
-rw-r--r--library/cpp/testing/CMakeLists.txt15
-rw-r--r--library/cpp/testing/benchmark/CMakeLists.txt1
-rw-r--r--library/cpp/threading/CMakeLists.txt18
-rw-r--r--library/cpp/unicode/CMakeLists.txt10
-rw-r--r--library/cpp/xml/CMakeLists.txt10
-rw-r--r--library/cpp/yaml/CMakeLists.txt9
-rw-r--r--library/cpp/yson/CMakeLists.txt2
-rw-r--r--library/cpp/yt/CMakeLists.txt18
-rw-r--r--library/cpp/ytalloc/CMakeLists.txt9
-rw-r--r--library/python/cores/__init__.py6
-rw-r--r--tools/CMakeLists.txt10
-rw-r--r--tools/enum_parser/CMakeLists.txt11
-rw-r--r--tools/enum_parser/enum_parser/CMakeLists.txt9
-rw-r--r--tools/enum_parser/enum_parser/bin/CMakeLists.txt2
-rw-r--r--tools/enum_parser/enum_parser/bin/ya.make23
-rw-r--r--tools/fix_elf/bin/ya.make17
-rw-r--r--tools/rescompiler/CMakeLists.txt9
-rw-r--r--tools/rescompiler/bin/CMakeLists.txt2
-rw-r--r--tools/rescompressor/bin/ya.make17
-rw-r--r--tools/rorescompiler/bin/ya.make19
-rw-r--r--util/CMakeLists.darwin.txt2
-rw-r--r--util/CMakeLists.linux.txt2
-rw-r--r--util/CMakeLists.txt2
-rw-r--r--util/datetime/cputimer.cpp17
-rw-r--r--util/datetime/cputimer.h4
-rw-r--r--util/datetime/cputimer_ut.cpp10
-rw-r--r--util/system/hostname.cpp37
-rw-r--r--ydb/CMakeLists.txt13
-rw-r--r--ydb/apps/CMakeLists.txt10
-rw-r--r--ydb/apps/ydb/CMakeLists.darwin.txt1
-rw-r--r--ydb/apps/ydb/CMakeLists.linux.txt1
-rw-r--r--ydb/apps/ydb/CMakeLists.txt2
-rw-r--r--ydb/apps/ydbd/CMakeLists.txt2
-rw-r--r--ydb/apps/ydbd/sqs.cpp2
-rw-r--r--ydb/apps/ydbd/sqs.h2
-rw-r--r--ydb/core/CMakeLists.txt56
-rw-r--r--ydb/core/actorlib_impl/CMakeLists.txt1
-rw-r--r--ydb/core/actorlib_impl/ut/CMakeLists.txt2
-rw-r--r--ydb/core/base/CMakeLists.txt2
-rw-r--r--ydb/core/base/appdata.h5
-rw-r--r--ydb/core/base/counters.cpp2
-rw-r--r--ydb/core/base/counters.h6
-rw-r--r--ydb/core/base/grpc_service_factory.h6
-rw-r--r--ydb/core/base/pool_stats_collector.cpp10
-rw-r--r--ydb/core/base/pool_stats_collector.h2
-rw-r--r--ydb/core/base/shared_quota.h8
-rw-r--r--ydb/core/base/statestorage_monitoring.cpp2
-rw-r--r--ydb/core/base/tablet_pipecache.h2
-rw-r--r--ydb/core/base/tracing.h2
-rw-r--r--ydb/core/base/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blob_depot/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/CMakeLists.txt19
-rw-r--r--ydb/core/blobstorage/backpressure/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/backpressure/event.cpp4
-rw-r--r--ydb/core/blobstorage/backpressure/event.h8
-rw-r--r--ydb/core/blobstorage/backpressure/queue.cpp2
-rw-r--r--ydb/core/blobstorage/backpressure/queue.h48
-rw-r--r--ydb/core/blobstorage/backpressure/queue_backpressure_client.cpp8
-rw-r--r--ydb/core/blobstorage/backpressure/queue_backpressure_client.h2
-rw-r--r--ydb/core/blobstorage/backpressure/queue_backpressure_client_ut.cpp8
-rw-r--r--ydb/core/blobstorage/backpressure/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/backpressure/ut_client/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/backpressure/ut_client/loader.h4
-rw-r--r--ydb/core/blobstorage/base/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/base/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/crypto/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/crypto/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/docs/pdisk_chunk_state.graphml817
-rw-r--r--ydb/core/blobstorage/dsproxy/CMakeLists.txt3
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_get_impl.h1
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_mon.cpp8
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_mon.h116
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_nodemon.cpp4
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_nodemon.h50
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_state.cpp6
-rw-r--r--ydb/core/blobstorage/dsproxy/group_sessions.cpp2
-rw-r--r--ydb/core/blobstorage/dsproxy/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/dsproxy/ut/dsproxy_env_mock_ut.h10
-rw-r--r--ydb/core/blobstorage/dsproxy/ut/dsproxy_fault_tolerance_ut_runtime.h4
-rw-r--r--ydb/core/blobstorage/dsproxy/ut/dsproxy_put_ut.cpp6
-rw-r--r--ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/dsproxy/ut_fat/dsproxy_ut.cpp14
-rw-r--r--ydb/core/blobstorage/groupinfo/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/groupinfo/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/incrhuge/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/incrhuge/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/incrhuge/ut/incrhuge_basic_ut.cpp2
-rw-r--r--ydb/core/blobstorage/nodewarden/CMakeLists.txt3
-rw-r--r--ydb/core/blobstorage/nodewarden/node_warden_impl.cpp4
-rw-r--r--ydb/core/blobstorage/nodewarden/node_warden_mon.cpp12
-rw-r--r--ydb/core/blobstorage/nodewarden/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/pdisk/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk.h2
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_actor.cpp10
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_actorsystem_creator.h4
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_ut.cpp10
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_completion_impl.h4
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.cpp2
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.h2
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_free_chunks.h4
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp68
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h2
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_http.cpp30
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp28
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.cpp4
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.h224
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_state.h3
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.cpp4
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp136
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_helpers.cpp12
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_run.cpp10
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_yard.cpp2
-rw-r--r--ydb/core/blobstorage/pdisk/blobstorage_pdisk_util_ut.cpp8
-rw-r--r--ydb/core/blobstorage/pdisk/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/storagepoolmon/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/storagepoolmon/storagepool_counters.h20
-rw-r--r--ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/testload/test_load_actor.cpp6
-rw-r--r--ydb/core/blobstorage/testload/test_load_actor.h16
-rw-r--r--ydb/core/blobstorage/testload/test_load_keyvalue_write.cpp8
-rw-r--r--ydb/core/blobstorage/testload/test_load_kqp.cpp10
-rw-r--r--ydb/core/blobstorage/testload/test_load_memory.cpp4
-rw-r--r--ydb/core/blobstorage/testload/test_load_pdisk_log.cpp10
-rw-r--r--ydb/core/blobstorage/testload/test_load_pdisk_read.cpp12
-rw-r--r--ydb/core/blobstorage/testload/test_load_pdisk_write.cpp14
-rw-r--r--ydb/core/blobstorage/testload/test_load_quantile.h8
-rw-r--r--ydb/core/blobstorage/testload/test_load_vdisk_write.cpp2
-rw-r--r--ydb/core/blobstorage/testload/test_load_write.cpp12
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/CMakeLists.darwin.txt7
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/CMakeLists.linux.txt7
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/lib/env.h6
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/ut_blob_depot/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/ut_donor/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/ut_group_reconfiguration/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/ut_osiris/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/ut_replication/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_blobstorage/ut_scrub/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_group/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_group/main.cpp4
-rw-r--r--ydb/core/blobstorage/ut_mirror3of4/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_mirror3of4/main.cpp4
-rw-r--r--ydb/core/blobstorage/ut_pdiskfit/CMakeLists.darwin.txt9
-rw-r--r--ydb/core/blobstorage/ut_pdiskfit/CMakeLists.linux.txt11
-rw-r--r--ydb/core/blobstorage/ut_pdiskfit/CMakeLists.txt13
-rw-r--r--ydb/core/blobstorage/ut_pdiskfit/lib/basic_test.h2
-rw-r--r--ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h4
-rw-r--r--ydb/core/blobstorage/ut_pdiskfit/pdiskfit/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_pdiskfit/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt1
-rw-r--r--ydb/core/blobstorage/ut_vdisk/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_vdisk/lib/astest.h4
-rw-r--r--ydb/core/blobstorage/ut_vdisk/lib/helpers.cpp4
-rw-r--r--ydb/core/blobstorage/ut_vdisk/lib/prepare.cpp6
-rw-r--r--ydb/core/blobstorage/ut_vdisk/lib/prepare.h6
-rw-r--r--ydb/core/blobstorage/ut_vdisk/lib/test_huge.cpp4
-rw-r--r--ydb/core/blobstorage/ut_vdisk/lib/test_repl.cpp2
-rw-r--r--ydb/core/blobstorage/ut_vdisk/lib/test_synclog.cpp2
-rw-r--r--ydb/core/blobstorage/ut_vdisk/lib/vdisk_mock.cpp2
-rw-r--r--ydb/core/blobstorage/ut_vdisk2/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/ut_vdisk2/env.h4
-rw-r--r--ydb/core/blobstorage/vdisk/CMakeLists.txt15
-rw-r--r--ydb/core/blobstorage/vdisk/anubis_osiris/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/anubis_osiris/blobstorage_anubis_osiris.h2
-rw-r--r--ydb/core/blobstorage/vdisk/anubis_osiris/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/common/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/common/memusage.h8
-rw-r--r--ydb/core/blobstorage/vdisk/common/memusage_ut.cpp10
-rw-r--r--ydb/core/blobstorage/vdisk/common/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_context.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_context.h8
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_events.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_events.h50
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.cpp4
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.h4
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_histograms.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_histograms.h2
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_mongroups.h22
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_private_events.h2
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_queues.h2
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.cpp14
-rw-r--r--ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.h2
-rw-r--r--ydb/core/blobstorage/vdisk/defrag/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/defrag/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/huge/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/huge/blobstorage_hullhuge_ut.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/huge/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/CMakeLists.txt7
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/barriers/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/barriers/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/base/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.cpp43
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.h4
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier_ut.cpp8
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/base/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/compstrat/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/compstrat/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/fresh/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix.h2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix_ut.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_data_ut.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_ut.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/fresh/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/generic/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/generic/hullds_idx.cpp4
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/generic/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/hulldb/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/hullop/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/hullop/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/ingress/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/ingress/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp36
-rw-r--r--ydb/core/blobstorage/vdisk/query/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/query/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/repl/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp4
-rw-r--r--ydb/core/blobstorage/vdisk/repl/blobstorage_replrecoverymachine_ut.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/repl/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/scrub/blob_recovery.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/scrub/blob_recovery.h2
-rw-r--r--ydb/core/blobstorage/vdisk/scrub/blob_recovery_impl.h4
-rw-r--r--ydb/core/blobstorage/vdisk/scrub/scrub_actor_impl.h20
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/blobstorage_monactors.cpp39
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeleton.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonerr.h54
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp36
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.h2
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.cpp6
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.h2
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.cpp6
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.h2
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.cpp12
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.h4
-rw-r--r--ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/syncer/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_localwriter.h2
-rw-r--r--ydb/core/blobstorage/vdisk/syncer/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/synclog/CMakeLists.txt1
-rw-r--r--ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogdata_ut.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogkeeper_ut.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/synclog/ut/CMakeLists.txt2
-rw-r--r--ydb/core/blobstorage/vdisk/vdisk_actor.cpp2
-rw-r--r--ydb/core/blobstorage/vdisk/vdisk_actor.h2
-rw-r--r--ydb/core/blockstore/CMakeLists.txt1
-rw-r--r--ydb/core/client/CMakeLists.txt6
-rw-r--r--ydb/core/client/flat_ut.cpp63
-rw-r--r--ydb/core/client/locks_ut.cpp10
-rw-r--r--ydb/core/client/metadata/CMakeLists.txt1
-rw-r--r--ydb/core/client/metadata/ut/CMakeLists.txt2
-rw-r--r--ydb/core/client/minikql_compile/CMakeLists.txt1
-rw-r--r--ydb/core/client/minikql_compile/db_key_resolver.h1
-rw-r--r--ydb/core/client/minikql_compile/mkql_compile_service.cpp2
-rw-r--r--ydb/core/client/minikql_compile/ut/CMakeLists.txt2
-rw-r--r--ydb/core/client/minikql_compile/yql_expr_minikql.cpp13
-rw-r--r--ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp12
-rw-r--r--ydb/core/client/minikql_result_lib/CMakeLists.txt1
-rw-r--r--ydb/core/client/minikql_result_lib/ut/CMakeLists.txt2
-rw-r--r--ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp5
-rw-r--r--ydb/core/client/server/CMakeLists.txt1
-rw-r--r--ydb/core/client/server/grpc_server.cpp30
-rw-r--r--ydb/core/client/server/grpc_server.h4
-rw-r--r--ydb/core/client/server/msgbus_http_server.h24
-rw-r--r--ydb/core/client/server/msgbus_server_db.cpp16
-rw-r--r--ydb/core/client/server/msgbus_server_persqueue.cpp41
-rw-r--r--ydb/core/client/server/msgbus_server_persqueue.h2
-rw-r--r--ydb/core/client/server/msgbus_server_pq_metacache.cpp89
-rw-r--r--ydb/core/client/server/msgbus_server_pq_metacache.h8
-rw-r--r--ydb/core/client/server/msgbus_server_pq_metarequest.cpp19
-rw-r--r--ydb/core/client/server/msgbus_server_proxy.h6
-rw-r--r--ydb/core/client/server/ut/CMakeLists.txt2
-rw-r--r--ydb/core/client/ut/CMakeLists.txt2
-rw-r--r--ydb/core/cms/CMakeLists.txt4
-rw-r--r--ydb/core/cms/cluster_info.h15
-rw-r--r--ydb/core/cms/cms.cpp167
-rw-r--r--ydb/core/cms/cms.h18
-rw-r--r--ydb/core/cms/cms_impl.h45
-rw-r--r--ydb/core/cms/cms_tx_store_walle_task.cpp30
-rw-r--r--ydb/core/cms/cms_ut.cpp112
-rw-r--r--ydb/core/cms/cms_ut_common.cpp43
-rw-r--r--ydb/core/cms/cms_ut_common.h15
-rw-r--r--ydb/core/cms/console/CMakeLists.txt2
-rw-r--r--ydb/core/cms/console/configs_cache.h2
-rw-r--r--ydb/core/cms/console/console_impl.h2
-rw-r--r--ydb/core/cms/console/console_tenants_manager.h4
-rw-r--r--ydb/core/cms/console/console_ut_tenants.cpp2
-rw-r--r--ydb/core/cms/console/net_classifier_updater.cpp35
-rw-r--r--ydb/core/cms/console/net_classifier_updater_ut.cpp201
-rw-r--r--ydb/core/cms/console/ut/CMakeLists.txt2
-rw-r--r--ydb/core/cms/console/validators/CMakeLists.txt1
-rw-r--r--ydb/core/cms/console/validators/ut/CMakeLists.txt2
-rw-r--r--ydb/core/cms/erasure_checkers.cpp222
-rw-r--r--ydb/core/cms/erasure_checkers.h109
-rw-r--r--ydb/core/cms/info_collector.cpp1
-rw-r--r--ydb/core/cms/sentinel.cpp4
-rw-r--r--ydb/core/cms/ut/CMakeLists.txt2
-rw-r--r--ydb/core/cms/ut_sentinel/CMakeLists.txt2
-rw-r--r--ydb/core/cms/walle_create_task_adapter.cpp4
-rw-r--r--ydb/core/control/CMakeLists.txt1
-rw-r--r--ydb/core/control/immediate_control_board_actor.cpp10
-rw-r--r--ydb/core/control/immediate_control_board_actor.h2
-rw-r--r--ydb/core/control/immediate_control_board_actor_ut.cpp4
-rw-r--r--ydb/core/control/ut/CMakeLists.txt2
-rw-r--r--ydb/core/driver_lib/CMakeLists.txt13
-rw-r--r--ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp77
-rw-r--r--ydb/core/driver_lib/run/CMakeLists.txt1
-rw-r--r--ydb/core/driver_lib/run/factories.h2
-rw-r--r--ydb/core/driver_lib/run/kikimr_services_initializers.cpp22
-rw-r--r--ydb/core/driver_lib/run/kikimr_services_initializers.h2
-rw-r--r--ydb/core/driver_lib/run/log_backend.cpp2
-rw-r--r--ydb/core/driver_lib/run/log_backend.h4
-rw-r--r--ydb/core/driver_lib/run/run.cpp171
-rw-r--r--ydb/core/driver_lib/run/run.h2
-rw-r--r--ydb/core/driver_lib/run/ut/CMakeLists.txt2
-rw-r--r--ydb/core/driver_lib/run/version.cpp5
-rw-r--r--ydb/core/engine/CMakeLists.txt2
-rw-r--r--ydb/core/engine/kikimr_program_builder.cpp10
-rw-r--r--ydb/core/engine/kikimr_program_builder.h5
-rw-r--r--ydb/core/engine/kikimr_program_builder_ut.cpp34
-rw-r--r--ydb/core/engine/minikql/flat_local_tx_minikql.h3
-rw-r--r--ydb/core/engine/minikql/minikql_engine_host.cpp7
-rw-r--r--ydb/core/engine/mkql_engine_flat_ut.cpp296
-rw-r--r--ydb/core/engine/mkql_keys.cpp3
-rw-r--r--ydb/core/engine/ut/CMakeLists.txt2
-rw-r--r--ydb/core/erasure/CMakeLists.txt3
-rw-r--r--ydb/core/erasure/ut/CMakeLists.txt2
-rw-r--r--ydb/core/erasure/ut_perf/CMakeLists.txt2
-rw-r--r--ydb/core/erasure/ut_rope/CMakeLists.txt2
-rw-r--r--ydb/core/filestore/CMakeLists.txt1
-rw-r--r--ydb/core/formats/CMakeLists.txt6
-rw-r--r--ydb/core/formats/arrow_helpers.cpp27
-rw-r--r--ydb/core/formats/arrow_helpers.h9
-rw-r--r--ydb/core/formats/custom_registry.cpp29
-rw-r--r--ydb/core/formats/program.cpp468
-rw-r--r--ydb/core/formats/program.h45
-rw-r--r--ydb/core/formats/ssa_program_optimizer.cpp36
-rw-r--r--ydb/core/formats/ssa_program_optimizer.h12
-rw-r--r--ydb/core/formats/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/formats/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/formats/ut/CMakeLists.txt2
-rw-r--r--ydb/core/formats/ut_program_step.cpp8
-rw-r--r--ydb/core/grpc_services/CMakeLists.txt5
-rw-r--r--ydb/core/grpc_services/base/base.h22
-rw-r--r--ydb/core/grpc_services/base/base_service.h66
-rw-r--r--ydb/core/grpc_services/counters/counters.cpp88
-rw-r--r--ydb/core/grpc_services/counters/counters.h10
-rw-r--r--ydb/core/grpc_services/counters/proxy_counters.cpp30
-rw-r--r--ydb/core/grpc_services/counters/proxy_counters.h6
-rw-r--r--ydb/core/grpc_services/grpc_request_check_actor.h11
-rw-r--r--ydb/core/grpc_services/grpc_request_proxy.cpp2
-rw-r--r--ydb/core/grpc_services/grpc_request_proxy.h2
-rw-r--r--ydb/core/grpc_services/rpc_alter_table.cpp2
-rw-r--r--ydb/core/grpc_services/rpc_calls.h14
-rw-r--r--ydb/core/grpc_services/rpc_create_table.cpp2
-rw-r--r--ydb/core/grpc_services/rpc_describe_path.cpp68
-rw-r--r--ydb/core/grpc_services/rpc_describe_table_options.cpp2
-rw-r--r--ydb/core/grpc_services/rpc_kqp_base.h2
-rw-r--r--ydb/core/grpc_services/service_datastreams.h1
-rw-r--r--ydb/core/grpc_services/table_settings.cpp4
-rw-r--r--ydb/core/grpc_services/table_settings.h7
-rw-r--r--ydb/core/grpc_services/ut/CMakeLists.txt2
-rw-r--r--ydb/core/grpc_streaming/CMakeLists.txt1
-rw-r--r--ydb/core/grpc_streaming/grpc_streaming_ut.cpp6
-rw-r--r--ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/grpc_streaming/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/grpc_streaming/ut/CMakeLists.txt2
-rw-r--r--ydb/core/health_check/CMakeLists.txt1
-rw-r--r--ydb/core/health_check/health_check.cpp24
-rw-r--r--ydb/core/health_check/ut/CMakeLists.txt2
-rw-r--r--ydb/core/http_proxy/CMakeLists.txt8
-rw-r--r--ydb/core/http_proxy/grpc_service.cpp2
-rw-r--r--ydb/core/http_proxy/grpc_service.h4
-rw-r--r--ydb/core/http_proxy/http_req.cpp397
-rw-r--r--ydb/core/http_proxy/http_req.h45
-rw-r--r--ydb/core/http_proxy/http_service.cpp152
-rw-r--r--ydb/core/http_proxy/json_proto_conversion.h279
-rw-r--r--ydb/core/http_proxy/metrics_actor.h2
-rw-r--r--ydb/core/kesus/CMakeLists.txt10
-rw-r--r--ydb/core/kesus/proxy/CMakeLists.txt1
-rw-r--r--ydb/core/kesus/proxy/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kesus/tablet/CMakeLists.txt2
-rw-r--r--ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.txt2
-rw-r--r--ydb/core/kesus/tablet/quoter_resource_tree.cpp14
-rw-r--r--ydb/core/kesus/tablet/quoter_resource_tree.h32
-rw-r--r--ydb/core/kesus/tablet/rate_accounting.cpp6
-rw-r--r--ydb/core/kesus/tablet/rate_accounting.h12
-rw-r--r--ydb/core/kesus/tablet/tablet_html.cpp34
-rw-r--r--ydb/core/kesus/tablet/tablet_ut.cpp35
-rw-r--r--ydb/core/kesus/tablet/tx_semaphore_release.cpp2
-rw-r--r--ydb/core/kesus/tablet/ut/CMakeLists.txt2
-rw-r--r--ydb/core/keyvalue/CMakeLists.txt2
-rw-r--r--ydb/core/keyvalue/keyvalue_collector.cpp286
-rw-r--r--ydb/core/keyvalue/keyvalue_collector_ut.cpp34
-rw-r--r--ydb/core/keyvalue/keyvalue_events.h11
-rw-r--r--ydb/core/keyvalue/keyvalue_flat_impl.h9
-rw-r--r--ydb/core/keyvalue/keyvalue_state.cpp109
-rw-r--r--ydb/core/keyvalue/keyvalue_state.h23
-rw-r--r--ydb/core/keyvalue/keyvalue_state_collect.cpp54
-rw-r--r--ydb/core/keyvalue/keyvalue_ut.cpp22
-rw-r--r--ydb/core/keyvalue/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/CMakeLists.txt15
-rw-r--r--ydb/core/kqp/compile/kqp_compile.cpp10
-rw-r--r--ydb/core/kqp/compile/kqp_olap_compiler.cpp74
-rw-r--r--ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp44
-rw-r--r--ydb/core/kqp/counters/kqp_counters.cpp16
-rw-r--r--ydb/core/kqp/counters/kqp_counters.h192
-rw-r--r--ydb/core/kqp/executer/CMakeLists.txt1
-rw-r--r--ydb/core/kqp/executer/kqp_data_executer.cpp53
-rw-r--r--ydb/core/kqp/executer/kqp_executer_impl.h2
-rw-r--r--ydb/core/kqp/executer/kqp_literal_executer.cpp20
-rw-r--r--ydb/core/kqp/executer/kqp_partition_helper.cpp30
-rw-r--r--ydb/core/kqp/executer/kqp_partition_helper.h5
-rw-r--r--ydb/core/kqp/executer/kqp_scan_executer.cpp54
-rw-r--r--ydb/core/kqp/executer/kqp_shards_resolver.cpp93
-rw-r--r--ydb/core/kqp/executer/kqp_shards_resolver.h3
-rw-r--r--ydb/core/kqp/executer/kqp_table_resolver.cpp28
-rw-r--r--ydb/core/kqp/executer/kqp_tasks_graph.h22
-rw-r--r--ydb/core/kqp/executer/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/expr_nodes/kqp_expr_nodes.json23
-rw-r--r--ydb/core/kqp/host/kqp_host.cpp10
-rw-r--r--ydb/core/kqp/host/kqp_host_impl.h2
-rw-r--r--ydb/core/kqp/kqp_ic_gateway.cpp7
-rw-r--r--ydb/core/kqp/kqp_session_actor.cpp196
-rw-r--r--ydb/core/kqp/kqp_worker_actor.cpp139
-rw-r--r--ydb/core/kqp/node/CMakeLists.txt1
-rw-r--r--ydb/core/kqp/node/kqp_node_ut.cpp4
-rw-r--r--ydb/core/kqp/node/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/opt/CMakeLists.txt3
-rw-r--r--ydb/core/kqp/opt/kqp_opt_kql.cpp98
-rw-r--r--ydb/core/kqp/opt/logical/CMakeLists.txt1
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log.cpp11
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log_indexes.cpp62
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log_join.cpp8
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp48
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp2
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log_rules.h3
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log_sort.cpp52
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log_sqlin.cpp25
-rw-r--r--ydb/core/kqp/opt/peephole/kqp_opt_peephole.cpp21
-rw-r--r--ydb/core/kqp/opt/peephole/kqp_opt_peephole.h2
-rw-r--r--ydb/core/kqp/opt/physical/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/opt/physical/kqp_opt_phy.cpp40
-rw-r--r--ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp74
-rw-r--r--ydb/core/kqp/opt/physical/kqp_opt_phy_olap_agg.cpp294
-rw-r--r--ydb/core/kqp/opt/physical/kqp_opt_phy_rules.h6
-rw-r--r--ydb/core/kqp/prepare/kqp_query_plan.cpp98
-rw-r--r--ydb/core/kqp/prepare/kqp_type_ann.cpp83
-rw-r--r--ydb/core/kqp/provider/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/provider/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_datasink.cpp2
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_opt.cpp15
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_opt_utils.cpp6
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_provider.cpp127
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_provider.h173
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_provider_impl.h8
-rw-r--r--ydb/core/kqp/proxy/CMakeLists.txt1
-rw-r--r--ydb/core/kqp/proxy/kqp_proxy_service.cpp324
-rw-r--r--ydb/core/kqp/proxy/kqp_proxy_service.h140
-rw-r--r--ydb/core/kqp/proxy/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/rm/CMakeLists.txt1
-rw-r--r--ydb/core/kqp/rm/kqp_rm_ut.cpp4
-rw-r--r--ydb/core/kqp/rm/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/runtime/CMakeLists.txt1
-rw-r--r--ydb/core/kqp/runtime/kqp_read_table.cpp57
-rw-r--r--ydb/core/kqp/runtime/kqp_read_table.h6
-rw-r--r--ydb/core/kqp/runtime/kqp_scan_data.cpp64
-rw-r--r--ydb/core/kqp/runtime/kqp_scan_data.h17
-rw-r--r--ydb/core/kqp/runtime/kqp_scan_data_ut.cpp147
-rw-r--r--ydb/core/kqp/runtime/kqp_spilling_file.cpp8
-rw-r--r--ydb/core/kqp/runtime/kqp_spilling_file_ut.cpp4
-rw-r--r--ydb/core/kqp/runtime/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/core/kqp/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/core/kqp/ut/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/ut/common/kqp_ut_common.cpp2
-rw-r--r--ydb/core/kqp/ut/common/kqp_ut_common.h1
-rw-r--r--ydb/core/kqp/ut/fat/CMakeLists.txt2
-rw-r--r--ydb/core/kqp/ut/fat/kqp_force_newengine_ut.cpp2
-rw-r--r--ydb/core/kqp/ut/kqp_acl_ut.cpp6
-rw-r--r--ydb/core/kqp/ut/kqp_explain_ut.cpp20
-rw-r--r--ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp152
-rw-r--r--ydb/core/kqp/ut/kqp_limits_ut.cpp54
-rw-r--r--ydb/core/kqp/ut/kqp_locks_ut.cpp88
-rw-r--r--ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp9
-rw-r--r--ydb/core/kqp/ut/kqp_ne_ut.cpp160
-rw-r--r--ydb/core/kqp/ut/kqp_not_null_columns_ut.cpp329
-rw-r--r--ydb/core/kqp/ut/kqp_olap_ut.cpp325
-rw-r--r--ydb/core/kqp/ut/kqp_query_ut.cpp48
-rw-r--r--ydb/core/kqp/ut/kqp_scan_ut.cpp93
-rw-r--r--ydb/core/kqp/ut/kqp_scheme_ut.cpp76
-rw-r--r--ydb/core/kqp/ut/kqp_sort_ut.cpp28
-rw-r--r--ydb/core/kqp/ut/kqp_stats_ut.cpp16
-rw-r--r--ydb/core/kqp/ut/kqp_sys_view_ut.cpp7
-rw-r--r--ydb/core/kqp/ut/kqp_tx_ut.cpp175
-rw-r--r--ydb/core/kqp/ut/kqp_yql_ut.cpp34
-rw-r--r--ydb/core/metering/CMakeLists.txt2
-rw-r--r--ydb/core/metering/stream_ru_calculator.cpp34
-rw-r--r--ydb/core/metering/stream_ru_calculator.h23
-rw-r--r--ydb/core/metering/stream_ru_calculator_ut.cpp34
-rw-r--r--ydb/core/metering/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/metering/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/core/metering/ut/CMakeLists.txt2
-rw-r--r--ydb/core/mind/CMakeLists.txt5
-rw-r--r--ydb/core/mind/address_classification/CMakeLists.txt1
-rw-r--r--ydb/core/mind/address_classification/ut/CMakeLists.txt2
-rw-r--r--ydb/core/mind/bscontroller/CMakeLists.txt3
-rw-r--r--ydb/core/mind/bscontroller/monitoring.cpp12
-rw-r--r--ydb/core/mind/bscontroller/scrub.cpp2
-rw-r--r--ydb/core/mind/bscontroller/self_heal.cpp2
-rw-r--r--ydb/core/mind/bscontroller/storage_pool_stat.h36
-rw-r--r--ydb/core/mind/bscontroller/storage_stats_calculator.cpp101
-rw-r--r--ydb/core/mind/bscontroller/storage_stats_calculator.h15
-rw-r--r--ydb/core/mind/bscontroller/sys_view.cpp57
-rw-r--r--ydb/core/mind/bscontroller/sys_view.h25
-rw-r--r--ydb/core/mind/bscontroller/ut/CMakeLists.txt2
-rw-r--r--ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.txt2
-rw-r--r--ydb/core/mind/bscontroller/ut_selfheal/CMakeLists.txt2
-rw-r--r--ydb/core/mind/hive/CMakeLists.txt1
-rw-r--r--ydb/core/mind/hive/hive_impl.cpp16
-rw-r--r--ydb/core/mind/hive/hive_ut.cpp41
-rw-r--r--ydb/core/mind/hive/monitoring.cpp12
-rw-r--r--ydb/core/mind/hive/ut/CMakeLists.txt2
-rw-r--r--ydb/core/mind/labels_maintainer.cpp4
-rw-r--r--ydb/core/mind/local.cpp48
-rw-r--r--ydb/core/mind/tenant_slot_broker_impl.h4
-rw-r--r--ydb/core/mind/tenant_ut_pool.cpp10
-rw-r--r--ydb/core/mind/ut/CMakeLists.txt2
-rw-r--r--ydb/core/mind/ut_fat/CMakeLists.txt2
-rw-r--r--ydb/core/mon/async_http_mon.cpp2
-rw-r--r--ydb/core/mon/async_http_mon.h2
-rw-r--r--ydb/core/mon/mon.h2
-rw-r--r--ydb/core/mon/sync_http_mon.h2
-rw-r--r--ydb/core/mon_alloc/monitor.cpp12
-rw-r--r--ydb/core/mon_alloc/monitor.h2
-rw-r--r--ydb/core/mon_alloc/profiler.cpp4
-rw-r--r--ydb/core/mon_alloc/profiler.h2
-rw-r--r--ydb/core/mon_alloc/stats.cpp4
-rw-r--r--ydb/core/mon_alloc/stats.h2
-rw-r--r--ydb/core/mon_alloc/tcmalloc.cpp10
-rw-r--r--ydb/core/mon_alloc/tcmalloc.h4
-rw-r--r--ydb/core/persqueue/CMakeLists.txt7
-rw-r--r--ydb/core/persqueue/actor_persqueue_client_iface.h24
-rw-r--r--ydb/core/persqueue/events/internal.h43
-rw-r--r--ydb/core/persqueue/metering_sink.cpp79
-rw-r--r--ydb/core/persqueue/metering_sink.h17
-rw-r--r--ydb/core/persqueue/metering_sink_ut.cpp8
-rw-r--r--ydb/core/persqueue/mirrorer.cpp79
-rw-r--r--ydb/core/persqueue/mirrorer.h12
-rw-r--r--ydb/core/persqueue/partition.cpp81
-rw-r--r--ydb/core/persqueue/partition.h4
-rw-r--r--ydb/core/persqueue/percentile_counter.cpp6
-rw-r--r--ydb/core/persqueue/percentile_counter.h8
-rw-r--r--ydb/core/persqueue/pq_impl.cpp103
-rw-r--r--ydb/core/persqueue/pq_impl.h2
-rw-r--r--ydb/core/persqueue/pq_l2_cache.cpp2
-rw-r--r--ydb/core/persqueue/pq_l2_cache.h24
-rw-r--r--ydb/core/persqueue/pq_l2_service.h2
-rw-r--r--ydb/core/persqueue/read_balancer.cpp20
-rw-r--r--ydb/core/persqueue/sourceid.cpp9
-rw-r--r--ydb/core/persqueue/subscriber.h11
-rw-r--r--ydb/core/persqueue/user_info.cpp14
-rw-r--r--ydb/core/persqueue/user_info.h12
-rw-r--r--ydb/core/persqueue/ut/CMakeLists.txt2
-rw-r--r--ydb/core/persqueue/ut_slow/CMakeLists.txt2
-rw-r--r--ydb/core/persqueue/working_time_counter.h6
-rw-r--r--ydb/core/protos/CMakeLists.txt1
-rw-r--r--ydb/core/protos/config.proto14
-rw-r--r--ydb/core/protos/flat_scheme_op.proto1
-rw-r--r--ydb/core/protos/kqp_physical.proto4
-rw-r--r--ydb/core/protos/msgbus_pq.proto3
-rw-r--r--ydb/core/protos/node_whiteboard.proto6
-rw-r--r--ydb/core/protos/pqconfig.proto25
-rw-r--r--ydb/core/protos/services.proto5
-rw-r--r--ydb/core/protos/ssa.proto5
-rw-r--r--ydb/core/protos/tx_datashard.proto8
-rw-r--r--ydb/core/quoter/CMakeLists.txt2
-rw-r--r--ydb/core/quoter/kesus_quoter_proxy.cpp28
-rw-r--r--ydb/core/quoter/quoter_service.cpp2
-rw-r--r--ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.txt2
-rw-r--r--ydb/core/quoter/quoter_service_impl.h34
-rw-r--r--ydb/core/quoter/ut/CMakeLists.txt2
-rw-r--r--ydb/core/scheme/CMakeLists.txt1
-rw-r--r--ydb/core/scheme/scheme_tabledefs.cpp44
-rw-r--r--ydb/core/scheme/scheme_tabledefs.h11
-rw-r--r--ydb/core/scheme/ut/CMakeLists.txt2
-rw-r--r--ydb/core/security/CMakeLists.txt1
-rw-r--r--ydb/core/security/ticket_parser.cpp24
-rw-r--r--ydb/core/security/ut/CMakeLists.txt2
-rw-r--r--ydb/core/sys_view/CMakeLists.txt9
-rw-r--r--ydb/core/sys_view/common/events.h1
-rw-r--r--ydb/core/sys_view/partition_stats/CMakeLists.txt1
-rw-r--r--ydb/core/sys_view/partition_stats/ut/CMakeLists.txt2
-rw-r--r--ydb/core/sys_view/processor/processor_impl.cpp8
-rw-r--r--ydb/core/sys_view/processor/processor_impl.h4
-rw-r--r--ydb/core/sys_view/query_stats/CMakeLists.txt1
-rw-r--r--ydb/core/sys_view/query_stats/ut/CMakeLists.txt2
-rw-r--r--ydb/core/sys_view/service/CMakeLists.txt1
-rw-r--r--ydb/core/sys_view/service/ext_counters.cpp2
-rw-r--r--ydb/core/sys_view/service/ut/CMakeLists.txt2
-rw-r--r--ydb/core/sys_view/ut_counters.cpp4
-rw-r--r--ydb/core/sys_view/ut_kqp.cpp2
-rw-r--r--ydb/core/sys_view/ut_kqp/CMakeLists.txt2
-rw-r--r--ydb/core/tablet/CMakeLists.txt1
-rw-r--r--ydb/core/tablet/node_tablet_monitor.cpp6
-rw-r--r--ydb/core/tablet/node_whiteboard.cpp55
-rw-r--r--ydb/core/tablet/resource_broker.cpp16
-rw-r--r--ydb/core/tablet/resource_broker.h2
-rw-r--r--ydb/core/tablet/resource_broker_impl.h28
-rw-r--r--ydb/core/tablet/resource_broker_ut.cpp34
-rw-r--r--ydb/core/tablet/tablet_counters.cpp6
-rw-r--r--ydb/core/tablet/tablet_counters_aggregator.cpp56
-rw-r--r--ydb/core/tablet/tablet_counters_aggregator.h4
-rw-r--r--ydb/core/tablet/tablet_counters_aggregator_ut.cpp4
-rw-r--r--ydb/core/tablet/tablet_list_renderer.cpp2
-rw-r--r--ydb/core/tablet/tablet_monitoring_proxy.cpp2
-rw-r--r--ydb/core/tablet/tablet_pipecache.cpp22
-rw-r--r--ydb/core/tablet/tablet_req_reset.cpp20
-rw-r--r--ydb/core/tablet/tablet_resolver.cpp16
-rw-r--r--ydb/core/tablet/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tablet_flat/CMakeLists.txt4
-rw-r--r--ydb/core/tablet_flat/flat_database.cpp44
-rw-r--r--ydb/core/tablet_flat/flat_executor.cpp20
-rw-r--r--ydb/core/tablet_flat/flat_executor_borrowlogic.cpp4
-rw-r--r--ydb/core/tablet_flat/flat_executor_compaction_logic.cpp2
-rw-r--r--ydb/core/tablet_flat/flat_iterator.h59
-rw-r--r--ydb/core/tablet_flat/flat_load_blob_queue.h2
-rw-r--r--ydb/core/tablet_flat/shared_sausagecache.cpp2
-rw-r--r--ydb/core/tablet_flat/shared_sausagecache.h4
-rw-r--r--ydb/core/tablet_flat/test/CMakeLists.txt10
-rw-r--r--ydb/core/tablet_flat/test/libs/CMakeLists.txt11
-rw-r--r--ydb/core/tablet_flat/test/libs/table/CMakeLists.txt1
-rw-r--r--ydb/core/tablet_flat/test/libs/table/test_dbase.h9
-rw-r--r--ydb/core/tablet_flat/test/libs/table/wrap_dbase.h9
-rw-r--r--ydb/core/tablet_flat/test/tool/CMakeLists.txt10
-rw-r--r--ydb/core/tablet_flat/test/tool/perf/CMakeLists.txt2
-rw-r--r--ydb/core/tablet_flat/test/tool/surg/CMakeLists.txt2
-rw-r--r--ydb/core/tablet_flat/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tablet_flat/ut/ut_db_iface.cpp109
-rw-r--r--ydb/core/tablet_flat/ut_large/CMakeLists.txt2
-rw-r--r--ydb/core/testlib/CMakeLists.txt3
-rw-r--r--ydb/core/testlib/actors/CMakeLists.txt1
-rw-r--r--ydb/core/testlib/actors/test_runtime.cpp4
-rw-r--r--ydb/core/testlib/actors/test_runtime.h2
-rw-r--r--ydb/core/testlib/actors/ut/CMakeLists.txt2
-rw-r--r--ydb/core/testlib/basics/appdata.cpp7
-rw-r--r--ydb/core/testlib/basics/appdata.h1
-rw-r--r--ydb/core/testlib/basics/feature_flags.h2
-rw-r--r--ydb/core/testlib/basics/services.cpp2
-rw-r--r--ydb/core/testlib/mock_pq_metacache.h10
-rw-r--r--ydb/core/testlib/test_client.cpp48
-rw-r--r--ydb/core/testlib/test_client.h7
-rw-r--r--ydb/core/testlib/test_pq_client.h13
-rw-r--r--ydb/core/tracing/tablet_info.cpp18
-rw-r--r--ydb/core/tracing/trace_collection.cpp4
-rw-r--r--ydb/core/tracing/trace_collection.h10
-rw-r--r--ydb/core/tx/CMakeLists.txt16
-rw-r--r--ydb/core/tx/balance_coverage/CMakeLists.txt1
-rw-r--r--ydb/core/tx/balance_coverage/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/columnshard/CMakeLists.txt2
-rw-r--r--ydb/core/tx/columnshard/blob_cache.cpp6
-rw-r--r--ydb/core/tx/columnshard/blob_cache.h2
-rw-r--r--ydb/core/tx/columnshard/columnshard.cpp1
-rw-r--r--ydb/core/tx/columnshard/columnshard.h1
-rw-r--r--ydb/core/tx/columnshard/columnshard__index_scan.h10
-rw-r--r--ydb/core/tx/columnshard/columnshard__progress_tx.cpp6
-rw-r--r--ydb/core/tx/columnshard/columnshard__read.cpp28
-rw-r--r--ydb/core/tx/columnshard/columnshard__scan.cpp3
-rw-r--r--ydb/core/tx/columnshard/columnshard__stats_scan.h3
-rw-r--r--ydb/core/tx/columnshard/columnshard__write.cpp11
-rw-r--r--ydb/core/tx/columnshard/columnshard__write_index.cpp5
-rw-r--r--ydb/core/tx/columnshard/columnshard_common.cpp79
-rw-r--r--ydb/core/tx/columnshard/columnshard_common.h81
-rw-r--r--ydb/core/tx/columnshard/columnshard_impl.cpp61
-rw-r--r--ydb/core/tx/columnshard/columnshard_impl.h16
-rw-r--r--ydb/core/tx/columnshard/columnshard_txs.h6
-rw-r--r--ydb/core/tx/columnshard/columnshard_ut_common.cpp18
-rw-r--r--ydb/core/tx/columnshard/columnshard_ut_common.h38
-rw-r--r--ydb/core/tx/columnshard/engines/CMakeLists.txt1
-rw-r--r--ydb/core/tx/columnshard/engines/column_engine.h2
-rw-r--r--ydb/core/tx/columnshard/engines/column_engine_logs.cpp27
-rw-r--r--ydb/core/tx/columnshard/engines/column_engine_logs.h3
-rw-r--r--ydb/core/tx/columnshard/engines/indexed_read_data.cpp23
-rw-r--r--ydb/core/tx/columnshard/engines/indexed_read_data.h13
-rw-r--r--ydb/core/tx/columnshard/engines/insert_table.h1
-rw-r--r--ydb/core/tx/columnshard/engines/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/columnshard/indexing_actor.cpp5
-rw-r--r--ydb/core/tx/columnshard/read_actor.cpp16
-rw-r--r--ydb/core/tx/columnshard/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/columnshard/ut_columnshard_read_write.cpp372
-rw-r--r--ydb/core/tx/columnshard/ut_columnshard_schema.cpp11
-rw-r--r--ydb/core/tx/columnshard/write_actor.cpp2
-rw-r--r--ydb/core/tx/coordinator/CMakeLists.txt1
-rw-r--r--ydb/core/tx/coordinator/coordinator__plan_step.cpp4
-rw-r--r--ydb/core/tx/coordinator/coordinator_impl.cpp2
-rw-r--r--ydb/core/tx/coordinator/coordinator_impl.h36
-rw-r--r--ydb/core/tx/coordinator/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/CMakeLists.txt27
-rw-r--r--ydb/core/tx/datashard/alter_cdc_stream_unit.cpp1
-rw-r--r--ydb/core/tx/datashard/change_sender_cdc_stream.cpp1
-rw-r--r--ydb/core/tx/datashard/create_cdc_stream_unit.cpp1
-rw-r--r--ydb/core/tx/datashard/datashard.cpp23
-rw-r--r--ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp4
-rw-r--r--ydb/core/tx/datashard/datashard__engine_host.cpp23
-rw-r--r--ydb/core/tx/datashard/datashard__engine_host.h10
-rw-r--r--ydb/core/tx/datashard/datashard__s3.cpp7
-rw-r--r--ydb/core/tx/datashard/datashard_dep_tracker.cpp18
-rw-r--r--ydb/core/tx/datashard/datashard_impl.h2
-rw-r--r--ydb/core/tx/datashard/datashard_kqp.cpp95
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_compute.cpp24
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_compute.h2
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp12
-rw-r--r--ydb/core/tx/datashard/datashard_kqp_read_table.cpp8
-rw-r--r--ydb/core/tx/datashard/datashard_pipeline.h10
-rw-r--r--ydb/core/tx/datashard/datashard_schema_snapshots.cpp36
-rw-r--r--ydb/core/tx/datashard/datashard_schema_snapshots.h1
-rw-r--r--ydb/core/tx/datashard/datashard_ut_change_exchange.cpp253
-rw-r--r--ydb/core/tx/datashard/datashard_ut_common.cpp375
-rw-r--r--ydb/core/tx/datashard/datashard_ut_common.h4
-rw-r--r--ydb/core/tx/datashard/datashard_ut_common_kqp.h58
-rw-r--r--ydb/core/tx/datashard/datashard_ut_kqp_errors.cpp9
-rw-r--r--ydb/core/tx/datashard/datashard_ut_minikql.cpp44
-rw-r--r--ydb/core/tx/datashard/datashard_ut_order.cpp156
-rw-r--r--ydb/core/tx/datashard/datashard_ut_rs.cpp4
-rw-r--r--ydb/core/tx/datashard/drop_cdc_stream_unit.cpp1
-rw-r--r--ydb/core/tx/datashard/export_s3_base_uploader.h14
-rw-r--r--ydb/core/tx/datashard/export_scan.cpp6
-rw-r--r--ydb/core/tx/datashard/move_index_unit.cpp34
-rw-r--r--ydb/core/tx/datashard/move_table_unit.cpp35
-rw-r--r--ydb/core/tx/datashard/s3_common.h4
-rw-r--r--ydb/core/tx/datashard/upload_stats.h4
-rw-r--r--ydb/core/tx/datashard/ut_background_compaction/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_build_index/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_change_collector/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt1
-rw-r--r--ydb/core/tx/datashard/ut_change_exchange/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_compaction/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_erase_rows/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_followers/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_init/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_keys/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_locks/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_minikql/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_minstep/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_order/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_ops/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_range_treap/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_read_iterator/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_read_table/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_reassign/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_replication/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_rs/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_snapshot/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_stats/CMakeLists.txt2
-rw-r--r--ydb/core/tx/datashard/ut_upload_rows/CMakeLists.txt2
-rw-r--r--ydb/core/tx/long_tx_service/CMakeLists.txt2
-rw-r--r--ydb/core/tx/long_tx_service/long_tx_service_ut.cpp2
-rw-r--r--ydb/core/tx/long_tx_service/public/CMakeLists.txt1
-rw-r--r--ydb/core/tx/long_tx_service/public/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/long_tx_service/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/mediator/tablet_queue.cpp2
-rw-r--r--ydb/core/tx/replication/CMakeLists.txt10
-rw-r--r--ydb/core/tx/replication/controller/dst_creator.cpp3
-rw-r--r--ydb/core/tx/replication/ydb_proxy/CMakeLists.txt1
-rw-r--r--ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/scheme_board/CMakeLists.txt6
-rw-r--r--ydb/core/tx/scheme_board/cache.cpp4
-rw-r--r--ydb/core/tx/scheme_board/cache_ut.cpp2
-rw-r--r--ydb/core/tx/scheme_board/load_test.cpp12
-rw-r--r--ydb/core/tx/scheme_board/load_test.h4
-rw-r--r--ydb/core/tx/scheme_board/monitoring.cpp2
-rw-r--r--ydb/core/tx/scheme_board/ut_cache/CMakeLists.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_double_indexed/CMakeLists.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_populator/CMakeLists.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_replica/CMakeLists.txt2
-rw-r--r--ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.txt2
-rw-r--r--ydb/core/tx/scheme_cache/scheme_cache.cpp2
-rw-r--r--ydb/core/tx/scheme_cache/scheme_cache.h8
-rw-r--r--ydb/core/tx/schemeshard/CMakeLists.txt44
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__init.cpp36
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__monitoring.cpp66
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation.cpp61
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation.h1
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_alter_pq.cpp1
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_alter_table.cpp5
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_copy_table.cpp21
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_build_index.cpp2
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp32
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_indexed_table.cpp42
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp27
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp8
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_drop_table.cpp6
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_move_index.cpp15
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_move_table.cpp7
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_move_tables.cpp9
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__operation_part.h18
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__table_stats.cpp32
-rw-r--r--ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp7
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.cpp513
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.h34
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_export_flow_proposals.cpp4
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_impl.cpp86
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_impl.h16
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_import.cpp7
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_import__create.cpp52
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_import_flow_proposals.cpp3
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_info_types.cpp38
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_info_types.h35
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_path.cpp41
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_path.h2
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_path_element.cpp366
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_path_element.h407
-rw-r--r--ydb/core/tx/schemeshard/schemeshard_schema.h5
-rw-r--r--ydb/core/tx/schemeshard/ut_async_index/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_backup/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_base.cpp264
-rw-r--r--ydb/core/tx/schemeshard/ut_base/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream.cpp191
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt1
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction.cpp13
-rw-r--r--ydb/core/tx/schemeshard/ut_compaction/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export.cpp93
-rw-r--r--ydb/core/tx/schemeshard/ut_export/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_helpers/helpers.cpp16
-rw-r--r--ydb/core/tx/schemeshard/ut_helpers/helpers.h7
-rw-r--r--ydb/core/tx/schemeshard/ut_helpers/test_env.cpp6
-rw-r--r--ydb/core/tx/schemeshard/ut_helpers/test_env.h2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_login/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move.cpp23
-rw-r--r--ydb/core/tx/schemeshard/ut_move/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_restore.cpp9
-rw-r--r--ydb/core/tx/schemeshard/ut_restore/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_serverless/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_stats/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_ttl/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.txt2
-rw-r--r--ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.txt2
-rw-r--r--ydb/core/tx/sequenceproxy/CMakeLists.txt2
-rw-r--r--ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp2
-rw-r--r--ydb/core/tx/sequenceproxy/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/sequenceshard/CMakeLists.txt2
-rw-r--r--ydb/core/tx/sequenceshard/public/CMakeLists.txt1
-rw-r--r--ydb/core/tx/sequenceshard/public/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/sequenceshard/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/time_cast/CMakeLists.txt1
-rw-r--r--ydb/core/tx/time_cast/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/tx_allocator/CMakeLists.txt1
-rw-r--r--ydb/core/tx/tx_allocator/txallocator_impl.h6
-rw-r--r--ydb/core/tx/tx_allocator/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/tx_allocator_client/CMakeLists.txt1
-rw-r--r--ydb/core/tx/tx_allocator_client/ut/CMakeLists.txt2
-rw-r--r--ydb/core/tx/tx_proxy/CMakeLists.txt4
-rw-r--r--ydb/core/tx/tx_proxy/datareq.cpp15
-rw-r--r--ydb/core/tx/tx_proxy/mon.cpp2
-rw-r--r--ydb/core/tx/tx_proxy/mon.h172
-rw-r--r--ydb/core/tx/tx_proxy/proxy_impl.cpp2
-rw-r--r--ydb/core/tx/tx_proxy/read_table_impl.cpp23
-rw-r--r--ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.txt2
-rw-r--r--ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.txt2
-rw-r--r--ydb/core/util/CMakeLists.txt2
-rw-r--r--ydb/core/util/btree_benchmark/CMakeLists.txt2
-rw-r--r--ydb/core/util/cache_cache.h2
-rw-r--r--ydb/core/util/memory_tracker.cpp2
-rw-r--r--ydb/core/util/memory_tracker.h2
-rw-r--r--ydb/core/util/testactorsys.h2
-rw-r--r--ydb/core/util/throughput_meter.h6
-rw-r--r--ydb/core/util/ut/CMakeLists.txt2
-rw-r--r--ydb/core/viewer/CMakeLists.txt5
-rw-r--r--ydb/core/viewer/epilogue.cmake35
-rw-r--r--ydb/core/viewer/json_nodes.h420
-rw-r--r--ydb/core/viewer/json_query.h139
-rw-r--r--ydb/core/viewer/json_storage.h65
-rw-r--r--ydb/core/viewer/protos/viewer.proto1
-rw-r--r--ydb/core/viewer/ut/CMakeLists.txt2
-rw-r--r--ydb/core/viewer/wb_merge.h7
-rw-r--r--ydb/core/wrappers/CMakeLists.txt2
-rw-r--r--ydb/core/wrappers/ut/CMakeLists.txt2
-rw-r--r--ydb/core/ydb_convert/CMakeLists.txt2
-rw-r--r--ydb/core/ydb_convert/table_description.cpp47
-rw-r--r--ydb/core/ydb_convert/table_description.h5
-rw-r--r--ydb/core/ydb_convert/table_profiles.cpp (renamed from ydb/core/grpc_services/table_profiles.cpp)6
-rw-r--r--ydb/core/ydb_convert/table_profiles.h (renamed from ydb/core/grpc_services/table_profiles.h)4
-rw-r--r--ydb/core/ydb_convert/ut/CMakeLists.txt2
-rw-r--r--ydb/core/ymq/CMakeLists.txt15
-rw-r--r--ydb/core/ymq/actor/CMakeLists.txt6
-rw-r--r--ydb/core/ymq/actor/action.h10
-rw-r--r--ydb/core/ymq/actor/cleanup_queue_data.cpp319
-rw-r--r--ydb/core/ymq/actor/cleanup_queue_data.h78
-rw-r--r--ydb/core/ymq/actor/delete_queue.cpp8
-rw-r--r--ydb/core/ymq/actor/delete_user.cpp11
-rw-r--r--ydb/core/ymq/actor/events.h45
-rw-r--r--ydb/core/ymq/actor/executor.cpp9
-rw-r--r--ydb/core/ymq/actor/executor.h2
-rw-r--r--ydb/core/ymq/actor/fifo_cleanup.cpp9
-rw-r--r--ydb/core/ymq/actor/fifo_cleanup.h1
-rw-r--r--ydb/core/ymq/actor/garbage_collector.cpp4
-rw-r--r--ydb/core/ymq/actor/migration.cpp366
-rw-r--r--ydb/core/ymq/actor/migration.h57
-rw-r--r--ydb/core/ymq/actor/monitoring.cpp69
-rw-r--r--ydb/core/ymq/actor/monitoring.h51
-rw-r--r--ydb/core/ymq/actor/node_tracker.cpp394
-rw-r--r--ydb/core/ymq/actor/node_tracker.h121
-rw-r--r--ydb/core/ymq/actor/proxy_actor.h6
-rw-r--r--ydb/core/ymq/actor/proxy_service.cpp9
-rw-r--r--ydb/core/ymq/actor/proxy_service.h7
-rw-r--r--ydb/core/ymq/actor/purge.cpp9
-rw-r--r--ydb/core/ymq/actor/purge.h1
-rw-r--r--ydb/core/ymq/actor/queue_leader.cpp24
-rw-r--r--ydb/core/ymq/actor/queue_leader.h2
-rw-r--r--ydb/core/ymq/actor/queue_schema.cpp185
-rw-r--r--ydb/core/ymq/actor/queue_schema.h6
-rw-r--r--ydb/core/ymq/actor/queues_list_reader.cpp1
-rw-r--r--ydb/core/ymq/actor/retention.cpp9
-rw-r--r--ydb/core/ymq/actor/retention.h1
-rw-r--r--ydb/core/ymq/actor/service.cpp269
-rw-r--r--ydb/core/ymq/actor/service.h20
-rw-r--r--ydb/core/ymq/actor/ut/CMakeLists.txt2
-rw-r--r--ydb/core/ymq/actor/yc_search_ut/CMakeLists.txt2
-rw-r--r--ydb/core/ymq/base/CMakeLists.txt3
-rw-r--r--ydb/core/ymq/base/counters.cpp34
-rw-r--r--ydb/core/ymq/base/counters.h88
-rw-r--r--ydb/core/ymq/base/debug_info.cpp22
-rw-r--r--ydb/core/ymq/base/debug_info.h102
-rw-r--r--ydb/core/ymq/base/events_writer_iface.h2
-rw-r--r--ydb/core/ymq/base/run_query.cpp49
-rw-r--r--ydb/core/ymq/base/run_query.h20
-rw-r--r--ydb/core/ymq/base/ut/CMakeLists.txt2
-rw-r--r--ydb/core/ymq/base/ut/counters_ut.cpp42
-rw-r--r--ydb/core/ymq/client/CMakeLists.txt10
-rw-r--r--ydb/core/ymq/client/bin/CMakeLists.txt2
-rw-r--r--ydb/core/ymq/http/CMakeLists.txt1
-rw-r--r--ydb/core/ymq/http/http.cpp14
-rw-r--r--ydb/core/ymq/http/http.h4
-rw-r--r--ydb/core/ymq/http/ut/CMakeLists.txt2
-rw-r--r--ydb/core/ymq/queues/CMakeLists.txt11
-rw-r--r--ydb/core/ymq/queues/std/queries.cpp1
-rw-r--r--ydb/core/ymq/ut/CMakeLists.txt2
-rw-r--r--ydb/core/yq/CMakeLists.txt9
-rw-r--r--ydb/core/yq/libs/CMakeLists.txt39
-rw-r--r--ydb/core/yq/libs/actors/CMakeLists.txt1
-rw-r--r--ydb/core/yq/libs/actors/pending_fetcher.cpp10
-rw-r--r--ydb/core/yq/libs/actors/proxy.h2
-rw-r--r--ydb/core/yq/libs/actors/proxy_private.cpp6
-rw-r--r--ydb/core/yq/libs/actors/proxy_private.h10
-rw-r--r--ydb/core/yq/libs/actors/run_actor.cpp2
-rw-r--r--ydb/core/yq/libs/actors/run_actor_params.cpp2
-rw-r--r--ydb/core/yq/libs/actors/run_actor_params.h4
-rw-r--r--ydb/core/yq/libs/audit/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/audit/mock/yq_mock_audit_service.cpp2
-rw-r--r--ydb/core/yq/libs/audit/mock/yq_mock_audit_service.h2
-rw-r--r--ydb/core/yq/libs/checkpoint_storage/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/checkpointing/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/checkpointing/checkpoint_coordinator.cpp4
-rw-r--r--ydb/core/yq/libs/checkpointing/checkpoint_coordinator.h36
-rw-r--r--ydb/core/yq/libs/checkpointing/ut/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/checkpointing/ut/checkpoint_coordinator_ut.cpp2
-rw-r--r--ydb/core/yq/libs/common/CMakeLists.txt1
-rw-r--r--ydb/core/yq/libs/common/ut/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/config/CMakeLists.txt1
-rw-r--r--ydb/core/yq/libs/control_plane_proxy/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp28
-rw-r--r--ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.h2
-rw-r--r--ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/control_plane_proxy/ut/control_plane_proxy_ut.cpp2
-rw-r--r--ydb/core/yq/libs/control_plane_storage/CMakeLists.txt3
-rw-r--r--ydb/core/yq/libs/control_plane_storage/control_plane_storage.h2
-rw-r--r--ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.cpp4
-rw-r--r--ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.h28
-rw-r--r--ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp2
-rw-r--r--ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h6
-rw-r--r--ydb/core/yq/libs/events/event_subspace.h1
-rw-r--r--ydb/core/yq/libs/graph_params/CMakeLists.txt9
-rw-r--r--ydb/core/yq/libs/health/health.cpp4
-rw-r--r--ydb/core/yq/libs/health/health.h2
-rw-r--r--ydb/core/yq/libs/hmac/CMakeLists.txt1
-rw-r--r--ydb/core/yq/libs/hmac/ut/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/init/init.cpp4
-rw-r--r--ydb/core/yq/libs/init/init.h4
-rw-r--r--ydb/core/yq/libs/private_client/internal_service.cpp6
-rw-r--r--ydb/core/yq/libs/private_client/internal_service.h2
-rw-r--r--ydb/core/yq/libs/private_client/loopback_service.cpp6
-rw-r--r--ydb/core/yq/libs/private_client/loopback_service.h2
-rw-r--r--ydb/core/yq/libs/private_client/private_client.cpp6
-rw-r--r--ydb/core/yq/libs/private_client/private_client.h2
-rw-r--r--ydb/core/yq/libs/protos/yq_private.proto10
-rw-r--r--ydb/core/yq/libs/quota_manager/CMakeLists.txt1
-rw-r--r--ydb/core/yq/libs/quota_manager/quota_manager.cpp6
-rw-r--r--ydb/core/yq/libs/quota_manager/quota_manager.h2
-rw-r--r--ydb/core/yq/libs/rate_limiter/CMakeLists.txt10
-rw-r--r--ydb/core/yq/libs/rate_limiter/events/CMakeLists.txt19
-rw-r--r--ydb/core/yq/libs/rate_limiter/events/events.cpp1
-rw-r--r--ydb/core/yq/libs/rate_limiter/events/events.h64
-rw-r--r--ydb/core/yq/libs/result_formatter/CMakeLists.txt1
-rw-r--r--ydb/core/yq/libs/result_formatter/ut/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/shared_resources/CMakeLists.txt1
-rw-r--r--ydb/core/yq/libs/shared_resources/db_pool.cpp10
-rw-r--r--ydb/core/yq/libs/shared_resources/db_pool.h10
-rw-r--r--ydb/core/yq/libs/shared_resources/shared_resources.cpp6
-rw-r--r--ydb/core/yq/libs/shared_resources/shared_resources.h2
-rw-r--r--ydb/core/yq/libs/signer/CMakeLists.txt1
-rw-r--r--ydb/core/yq/libs/signer/ut/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/test_connection/CMakeLists.txt2
-rw-r--r--ydb/core/yq/libs/test_connection/counters.cpp2
-rw-r--r--ydb/core/yq/libs/test_connection/counters.h8
-rw-r--r--ydb/core/yq/libs/test_connection/test_connection.cpp8
-rw-r--r--ydb/core/yq/libs/test_connection/test_connection.h2
-rw-r--r--ydb/core/yq/libs/test_connection/ut/CMakeLists.txt2
-rw-r--r--ydb/library/CMakeLists.txt29
-rw-r--r--ydb/library/aclib/CMakeLists.txt2
-rw-r--r--ydb/library/aclib/ut/CMakeLists.txt2
-rw-r--r--ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionAvg.h199
-rw-r--r--ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionCount.h94
-rw-r--r--ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionMinMaxAny.h684
-rw-r--r--ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionSum.h303
-rw-r--r--ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionWrapper.h243
-rw-r--r--ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.cpp31
-rw-r--r--ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.h520
-rw-r--r--ydb/library/arrow_clickhouse/AggregationCommon.h337
-rw-r--r--ydb/library/arrow_clickhouse/Aggregator.cpp1554
-rw-r--r--ydb/library/arrow_clickhouse/Aggregator.h912
-rw-r--r--ydb/library/arrow_clickhouse/CMakeLists.txt34
-rw-r--r--ydb/library/arrow_clickhouse/Columns/CMakeLists.txt23
-rw-r--r--ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.cpp31
-rw-r--r--ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.h147
-rw-r--r--ydb/library/arrow_clickhouse/Columns/ColumnsCommon.cpp575
-rw-r--r--ydb/library/arrow_clickhouse/Columns/ColumnsCommon.h135
-rw-r--r--ydb/library/arrow_clickhouse/Columns/ColumnsHashing.h293
-rw-r--r--ydb/library/arrow_clickhouse/Columns/ColumnsHashingImpl.h375
-rw-r--r--ydb/library/arrow_clickhouse/Common/Allocator.cpp35
-rw-r--r--ydb/library/arrow_clickhouse/Common/Allocator.h346
-rw-r--r--ydb/library/arrow_clickhouse/Common/Allocator_fwd.h19
-rw-r--r--ydb/library/arrow_clickhouse/Common/Arena.h311
-rw-r--r--ydb/library/arrow_clickhouse/Common/CMakeLists.txt23
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/FixedHashMap.h186
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/FixedHashTable.h497
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/Hash.h417
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/HashMap.h314
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/HashSet.h124
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/HashTable.h1311
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/HashTableAllocator.h22
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/HashTableKeyHolder.h127
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/StringHashMap.h198
-rw-r--r--ydb/library/arrow_clickhouse/Common/HashTable/StringHashTable.h444
-rw-r--r--ydb/library/arrow_clickhouse/Common/PODArray.cpp23
-rw-r--r--ydb/library/arrow_clickhouse/Common/PODArray.h803
-rw-r--r--ydb/library/arrow_clickhouse/Common/PODArray_fwd.h40
-rw-r--r--ydb/library/arrow_clickhouse/Common/SipHash.h219
-rw-r--r--ydb/library/arrow_clickhouse/Common/memcpySmall.h78
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.cpp127
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.h49
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/CMakeLists.txt24
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.cpp90
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.h118
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/IBlockStream_fwd.h21
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.cpp43
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.h42
-rw-r--r--ydb/library/arrow_clickhouse/DataStreams/OneBlockInputStream.h49
-rw-r--r--ydb/library/arrow_clickhouse/README.md16
-rw-r--r--ydb/library/arrow_clickhouse/arrow_clickhouse_types.h180
-rw-r--r--ydb/library/arrow_clickhouse/ut/CMakeLists.darwin.txt41
-rw-r--r--ydb/library/arrow_clickhouse/ut/CMakeLists.linux.txt47
-rw-r--r--ydb/library/arrow_clickhouse/ut/CMakeLists.txt13
-rw-r--r--ydb/library/arrow_clickhouse/ut_aggregator.cpp365
-rw-r--r--ydb/library/backup/CMakeLists.txt1
-rw-r--r--ydb/library/backup/ut/CMakeLists.txt2
-rw-r--r--ydb/library/binary_json/CMakeLists.txt1
-rw-r--r--ydb/library/binary_json/read.cpp7
-rw-r--r--ydb/library/binary_json/ut/CMakeLists.txt2
-rw-r--r--ydb/library/dynumber/CMakeLists.txt1
-rw-r--r--ydb/library/dynumber/ut/CMakeLists.txt2
-rw-r--r--ydb/library/folder_service/CMakeLists.txt2
-rw-r--r--ydb/library/http_proxy/CMakeLists.txt10
-rw-r--r--ydb/library/http_proxy/authorization/CMakeLists.txt1
-rw-r--r--ydb/library/http_proxy/authorization/ut/CMakeLists.txt2
-rw-r--r--ydb/library/keys/CMakeLists.txt1
-rw-r--r--ydb/library/keys/ut/CMakeLists.txt2
-rw-r--r--ydb/library/login/CMakeLists.txt2
-rw-r--r--ydb/library/login/ut/CMakeLists.txt2
-rw-r--r--ydb/library/mkql_proto/CMakeLists.txt2
-rw-r--r--ydb/library/mkql_proto/mkql_proto.cpp6
-rw-r--r--ydb/library/mkql_proto/mkql_proto_ut.cpp34
-rw-r--r--ydb/library/mkql_proto/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/library/mkql_proto/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/library/mkql_proto/ut/CMakeLists.txt2
-rw-r--r--ydb/library/naming_conventions/CMakeLists.txt1
-rw-r--r--ydb/library/naming_conventions/ut/CMakeLists.txt2
-rw-r--r--ydb/library/pdisk_io/CMakeLists.darwin.txt1
-rw-r--r--ydb/library/pdisk_io/CMakeLists.linux.txt1
-rw-r--r--ydb/library/pdisk_io/CMakeLists.txt2
-rw-r--r--ydb/library/pdisk_io/buffer_pool.h8
-rw-r--r--ydb/library/pdisk_io/buffers.h4
-rw-r--r--ydb/library/persqueue/CMakeLists.txt13
-rw-r--r--ydb/library/persqueue/topic_parser/CMakeLists.txt1
-rw-r--r--ydb/library/persqueue/topic_parser/counters.cpp4
-rw-r--r--ydb/library/persqueue/topic_parser/counters.h4
-rw-r--r--ydb/library/persqueue/topic_parser/topic_parser.cpp109
-rw-r--r--ydb/library/persqueue/topic_parser/topic_parser.h19
-rw-r--r--ydb/library/persqueue/topic_parser/ut/CMakeLists.txt2
-rw-r--r--ydb/library/persqueue/topic_parser/ut/topic_names_converter_ut.cpp104
-rw-r--r--ydb/library/pretty_types_print/CMakeLists.txt10
-rw-r--r--ydb/library/protobuf_printer/CMakeLists.txt1
-rw-r--r--ydb/library/protobuf_printer/ut/CMakeLists.txt2
-rw-r--r--ydb/library/schlab/CMakeLists.txt7
-rw-r--r--ydb/library/schlab/mon/CMakeLists.txt2
-rw-r--r--ydb/library/schlab/mon/static/CMakeLists.txt2
-rw-r--r--ydb/library/schlab/mon/test/CMakeLists.txt2
-rw-r--r--ydb/library/schlab/ut/CMakeLists.txt2
-rw-r--r--ydb/library/security/CMakeLists.txt1
-rw-r--r--ydb/library/security/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yaml_config/yaml_config_parser.cpp146
-rw-r--r--ydb/library/yql/CMakeLists.txt19
-rw-r--r--ydb/library/yql/ast/CMakeLists.txt2
-rw-r--r--ydb/library/yql/ast/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/core/CMakeLists.txt14
-rw-r--r--ydb/library/yql/core/common_opt/yql_co_extr_members.cpp12
-rw-r--r--ydb/library/yql/core/common_opt/yql_co_flow1.cpp146
-rw-r--r--ydb/library/yql/core/common_opt/yql_co_flow2.cpp43
-rw-r--r--ydb/library/yql/core/expr_nodes/yql_expr_nodes.json29
-rw-r--r--ydb/library/yql/core/file_storage/CMakeLists.txt5
-rw-r--r--ydb/library/yql/core/file_storage/http_download/CMakeLists.txt1
-rw-r--r--ydb/library/yql/core/file_storage/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/core/issue/CMakeLists.txt2
-rw-r--r--ydb/library/yql/core/issue/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp33
-rw-r--r--ydb/library/yql/core/services/CMakeLists.txt1
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_core.cpp1
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_list.cpp101
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_list.h1
-rw-r--r--ydb/library/yql/core/yql_aggregate_expander.cpp (renamed from ydb/library/yql/core/yql_opt_aggregate.cpp)1995
-rw-r--r--ydb/library/yql/core/yql_aggregate_expander.h113
-rw-r--r--ydb/library/yql/core/yql_opt_aggregate.h12
-rw-r--r--ydb/library/yql/core/yql_opt_rewrite_io.cpp5
-rw-r--r--ydb/library/yql/core/yql_opt_utils.cpp12
-rw-r--r--ydb/library/yql/core/yql_opt_utils.h4
-rw-r--r--ydb/library/yql/core/yql_opt_window.cpp19
-rw-r--r--ydb/library/yql/core/yql_opt_window.h33
-rw-r--r--ydb/library/yql/dq/CMakeLists.txt19
-rw-r--r--ydb/library/yql/dq/actors/CMakeLists.txt3
-rw-r--r--ydb/library/yql/dq/actors/compute/CMakeLists.txt1
-rw-r--r--ydb/library/yql/dq/actors/compute/dq_compute_actor_channels.cpp47
-rw-r--r--ydb/library/yql/dq/actors/compute/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/dq/actors/dq.cpp6
-rw-r--r--ydb/library/yql/dq/actors/protos/dq_status_codes.proto1
-rw-r--r--ydb/library/yql/dq/expr_nodes/dq_expr_nodes.json9
-rw-r--r--ydb/library/yql/dq/opt/dq_opt.cpp40
-rw-r--r--ydb/library/yql/dq/opt/dq_opt.h1
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_log.cpp7
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_log.h2
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_peephole.cpp32
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_peephole.h1
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_phy.cpp441
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_phy.h8
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_phy_finalizing.cpp3
-rw-r--r--ydb/library/yql/dq/proto/dq_tasks.proto2
-rw-r--r--ydb/library/yql/dq/runtime/CMakeLists.txt1
-rw-r--r--ydb/library/yql/dq/runtime/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/dq/state/CMakeLists.txt1
-rw-r--r--ydb/library/yql/dq/state/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/dq/type_ann/dq_type_ann.cpp19
-rw-r--r--ydb/library/yql/minikql/CMakeLists.txt10
-rw-r--r--ydb/library/yql/minikql/aligned_page_pool.cpp4
-rw-r--r--ydb/library/yql/minikql/aligned_page_pool.h10
-rw-r--r--ydb/library/yql/minikql/benchmark/CMakeLists.txt9
-rw-r--r--ydb/library/yql/minikql/benchmark/pack_num/CMakeLists.txt2
-rw-r--r--ydb/library/yql/minikql/codegen/CMakeLists.txt2
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp2
-rw-r--r--ydb/library/yql/minikql/computation/presort.cpp4
-rw-r--r--ydb/library/yql/minikql/jsonpath/CMakeLists.txt1
-rw-r--r--ydb/library/yql/minikql/jsonpath/benchmark/CMakeLists.txt2
-rw-r--r--ydb/library/yql/minikql/mkql_runtime_version.h9
-rw-r--r--ydb/library/yql/minikql/perf/CMakeLists.txt13
-rw-r--r--ydb/library/yql/minikql/perf/alloc/CMakeLists.txt2
-rw-r--r--ydb/library/yql/minikql/perf/mt_param/CMakeLists.txt2
-rw-r--r--ydb/library/yql/minikql/perf/packer/CMakeLists.txt2
-rw-r--r--ydb/library/yql/minikql/perf/param/CMakeLists.txt2
-rw-r--r--ydb/library/yql/minikql/perf/presort/CMakeLists.txt2
-rw-r--r--ydb/library/yql/minikql/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/parser/CMakeLists.txt11
-rw-r--r--ydb/library/yql/parser/lexer_common/CMakeLists.txt1
-rw-r--r--ydb/library/yql/parser/lexer_common/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/parser/pg_catalog/CMakeLists.txt1
-rw-r--r--ydb/library/yql/parser/pg_catalog/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/parser/proto_ast/CMakeLists.txt2
-rw-r--r--ydb/library/yql/parser/proto_ast/gen/CMakeLists.txt13
-rw-r--r--ydb/library/yql/parser/proto_ast/gen/v1/epilogue.cmake9
-rw-r--r--ydb/library/yql/parser/proto_ast/gen/v1_ansi/epilogue.cmake10
-rw-r--r--ydb/library/yql/parser/proto_ast/gen/v1_proto/epilogue.cmake9
-rw-r--r--ydb/library/yql/providers/CMakeLists.txt18
-rw-r--r--ydb/library/yql/providers/clickhouse/CMakeLists.txt12
-rw-r--r--ydb/library/yql/providers/common/CMakeLists.txt25
-rw-r--r--ydb/library/yql/providers/common/codec/CMakeLists.txt1
-rw-r--r--ydb/library/yql/providers/common/codec/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/providers/common/codec/yql_codec.cpp8
-rw-r--r--ydb/library/yql/providers/common/http_gateway/CMakeLists.txt1
-rw-r--r--ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp46
-rw-r--r--ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h2
-rw-r--r--ydb/library/yql/providers/common/metrics/CMakeLists.txt1
-rw-r--r--ydb/library/yql/providers/common/metrics/sensors_group.h2
-rw-r--r--ydb/library/yql/providers/common/metrics/service_counters.cpp6
-rw-r--r--ydb/library/yql/providers/common/metrics/service_counters.h16
-rw-r--r--ydb/library/yql/providers/common/mkql/parser.cpp128
-rw-r--r--ydb/library/yql/providers/common/mkql/parser.h3
-rw-r--r--ydb/library/yql/providers/common/schema/CMakeLists.txt4
-rw-r--r--ydb/library/yql/providers/common/structured_token/CMakeLists.txt1
-rw-r--r--ydb/library/yql/providers/common/structured_token/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/providers/common/token_accessor/CMakeLists.txt10
-rw-r--r--ydb/library/yql/providers/dq/CMakeLists.txt24
-rw-r--r--ydb/library/yql/providers/dq/actors/executer_actor.cpp6
-rw-r--r--ydb/library/yql/providers/dq/actors/executer_actor.h2
-rw-r--r--ydb/library/yql/providers/dq/actors/resource_allocator.cpp6
-rw-r--r--ydb/library/yql/providers/dq/actors/resource_allocator.h2
-rw-r--r--ydb/library/yql/providers/dq/actors/task_controller.cpp2
-rw-r--r--ydb/library/yql/providers/dq/api/CMakeLists.txt10
-rw-r--r--ydb/library/yql/providers/dq/api/protos/service.proto2
-rw-r--r--ydb/library/yql/providers/dq/opt/dqs_opt.cpp1
-rw-r--r--ydb/library/yql/providers/dq/opt/logical_optimize.cpp28
-rw-r--r--ydb/library/yql/providers/dq/opt/physical_optimize.cpp16
-rw-r--r--ydb/library/yql/providers/dq/provider/CMakeLists.txt1
-rw-r--r--ydb/library/yql/providers/dq/provider/yql_dq_datasink.cpp4
-rw-r--r--ydb/library/yql/providers/dq/worker_manager/CMakeLists.txt1
-rw-r--r--ydb/library/yql/providers/dq/worker_manager/interface/counters.cpp4
-rw-r--r--ydb/library/yql/providers/dq/worker_manager/interface/counters.h10
-rw-r--r--ydb/library/yql/providers/dq/worker_manager/interface/worker_info.h4
-rw-r--r--ydb/library/yql/providers/function/CMakeLists.txt13
-rw-r--r--ydb/library/yql/providers/pq/CMakeLists.txt16
-rw-r--r--ydb/library/yql/providers/pq/gateway/CMakeLists.txt10
-rw-r--r--ydb/library/yql/providers/result/CMakeLists.txt10
-rw-r--r--ydb/library/yql/providers/s3/CMakeLists.txt14
-rw-r--r--ydb/library/yql/providers/s3/actors/CMakeLists.txt2
-rw-r--r--ydb/library/yql/providers/s3/actors/yql_s3_read_actor.cpp120
-rw-r--r--ydb/library/yql/providers/s3/actors/yql_s3_read_actor.h2
-rw-r--r--ydb/library/yql/providers/s3/actors/yql_s3_source_factory.cpp2
-rw-r--r--ydb/library/yql/providers/s3/compressors/CMakeLists.txt2
-rw-r--r--ydb/library/yql/providers/s3/expr_nodes/yql_s3_expr_nodes.json2
-rw-r--r--ydb/library/yql/providers/s3/path_generator/CMakeLists.txt1
-rw-r--r--ydb/library/yql/providers/s3/path_generator/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/providers/s3/proto/range.proto1
-rw-r--r--ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp227
-rw-r--r--ydb/library/yql/providers/s3/provider/yql_s3_dq_integration.cpp37
-rw-r--r--ydb/library/yql/providers/s3/provider/yql_s3_io_discovery.cpp180
-rw-r--r--ydb/library/yql/providers/solomon/CMakeLists.txt13
-rw-r--r--ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.cpp20
-rw-r--r--ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.h2
-rw-r--r--ydb/library/yql/providers/ydb/CMakeLists.txt13
-rw-r--r--ydb/library/yql/public/CMakeLists.txt12
-rw-r--r--ydb/library/yql/public/decimal/CMakeLists.txt1
-rw-r--r--ydb/library/yql/public/decimal/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/public/decimal/ut/yql_decimal_ut.cpp4
-rw-r--r--ydb/library/yql/public/decimal/yql_decimal_serialize.cpp6
-rw-r--r--ydb/library/yql/public/decimal/yql_decimal_serialize.h2
-rw-r--r--ydb/library/yql/public/issue/CMakeLists.txt2
-rw-r--r--ydb/library/yql/public/issue/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/public/udf/CMakeLists.txt4
-rw-r--r--ydb/library/yql/public/udf/service/CMakeLists.txt11
-rw-r--r--ydb/library/yql/public/udf/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/sql/CMakeLists.txt4
-rw-r--r--ydb/library/yql/sql/v0/CMakeLists.txt1
-rw-r--r--ydb/library/yql/sql/v1/CMakeLists.txt3
-rw-r--r--ydb/library/yql/sql/v1/aggregation.cpp21
-rw-r--r--ydb/library/yql/sql/v1/context.cpp16
-rw-r--r--ydb/library/yql/sql/v1/context.h7
-rw-r--r--ydb/library/yql/sql/v1/perf/CMakeLists.txt2
-rw-r--r--ydb/library/yql/sql/v1/sql.cpp19
-rw-r--r--ydb/library/yql/udfs/CMakeLists.txt10
-rw-r--r--ydb/library/yql/udfs/common/CMakeLists.txt29
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/CMakeLists.txt9
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.linux.txt2
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.txt2
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/clickhouse_client_udf.cpp364
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/src/Formats/registerFormats.cpp2
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.cpp142
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.h41
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.cpp157
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.h47
-rw-r--r--ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/InputStreamFromInputFormat.h (renamed from ydb/library/yql/udfs/common/clickhouse/client/src/Formats/InputStreamFromInputFormat.h)0
-rw-r--r--ydb/library/yql/udfs/common/hyperscan/CMakeLists.txt2
-rw-r--r--ydb/library/yql/udfs/common/ip_base/CMakeLists.txt1
-rw-r--r--ydb/library/yql/udfs/common/math/CMakeLists.txt1
-rw-r--r--ydb/library/yql/udfs/common/stat/CMakeLists.txt2
-rw-r--r--ydb/library/yql/udfs/common/stat/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/udfs/common/topfreq/CMakeLists.txt2
-rw-r--r--ydb/library/yql/udfs/common/topfreq/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/udfs/common/unicode_base/CMakeLists.txt1
-rw-r--r--ydb/library/yql/udfs/common/url_base/CMakeLists.txt1
-rw-r--r--ydb/library/yql/udfs/logs/CMakeLists.txt9
-rw-r--r--ydb/library/yql/utils/CMakeLists.txt8
-rw-r--r--ydb/library/yql/utils/actors/CMakeLists.txt1
-rw-r--r--ydb/library/yql/utils/actors/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/utils/failure_injector/CMakeLists.txt1
-rw-r--r--ydb/library/yql/utils/failure_injector/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/utils/log/CMakeLists.txt1
-rw-r--r--ydb/library/yql/utils/log/ut/CMakeLists.txt2
-rw-r--r--ydb/library/yql/utils/ut/CMakeLists.txt2
-rw-r--r--ydb/public/CMakeLists.txt11
-rw-r--r--ydb/public/api/CMakeLists.txt10
-rw-r--r--ydb/public/api/grpc/CMakeLists.txt2
-rw-r--r--ydb/public/api/grpc/draft/CMakeLists.txt1
-rw-r--r--ydb/public/api/grpc/draft/ydb_datastreams_v1.proto2
-rw-r--r--ydb/public/api/grpc/ydb_topic_v1.proto (renamed from ydb/public/api/grpc/draft/ydb_topic_v1.proto)0
-rw-r--r--ydb/public/api/protos/CMakeLists.txt2
-rw-r--r--ydb/public/api/protos/draft/datastreams.proto45
-rw-r--r--ydb/public/api/protos/ydb_export.proto3
-rw-r--r--ydb/public/api/protos/ydb_table.proto5
-rw-r--r--ydb/public/api/protos/ydb_topic.proto23
-rw-r--r--ydb/public/lib/CMakeLists.txt21
-rw-r--r--ydb/public/lib/deprecated/CMakeLists.txt10
-rw-r--r--ydb/public/lib/deprecated/kicli/CMakeLists.txt1
-rw-r--r--ydb/public/lib/deprecated/kicli/cpp_ut.cpp13
-rw-r--r--ydb/public/lib/deprecated/kicli/ut/CMakeLists.txt2
-rw-r--r--ydb/public/lib/idx_test/CMakeLists.txt1
-rw-r--r--ydb/public/lib/idx_test/ut/CMakeLists.txt2
-rw-r--r--ydb/public/lib/json_value/CMakeLists.txt1
-rw-r--r--ydb/public/lib/json_value/ut/CMakeLists.txt2
-rw-r--r--ydb/public/lib/operation_id/CMakeLists.txt2
-rw-r--r--ydb/public/lib/operation_id/ut/CMakeLists.txt2
-rw-r--r--ydb/public/lib/validation/CMakeLists.darwin.txt1
-rw-r--r--ydb/public/lib/validation/CMakeLists.linux.txt1
-rw-r--r--ydb/public/lib/validation/CMakeLists.txt2
-rw-r--r--ydb/public/lib/validation/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/public/lib/validation/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/public/lib/validation/ut/CMakeLists.txt2
-rw-r--r--ydb/public/lib/ydb_cli/CMakeLists.txt12
-rw-r--r--ydb/public/lib/ydb_cli/commands/ydb_profile.cpp32
-rw-r--r--ydb/public/lib/ydb_cli/commands/ydb_profile.h3
-rw-r--r--ydb/public/lib/ydb_cli/common/CMakeLists.txt1
-rw-r--r--ydb/public/lib/ydb_cli/common/command.h39
-rw-r--r--ydb/public/lib/ydb_cli/common/ut/CMakeLists.txt2
-rw-r--r--ydb/public/lib/ydb_cli/dump/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/CMakeLists.txt9
-rw-r--r--ydb/public/sdk/cpp/CMakeLists.txt10
-rw-r--r--ydb/public/sdk/cpp/client/CMakeLists.txt33
-rw-r--r--ydb/public/sdk/cpp/client/draft/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/draft/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/extensions/CMakeLists.txt10
-rw-r--r--ydb/public/sdk/cpp/client/extensions/discovery_mutator/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/extensions/discovery_mutator/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/impl/CMakeLists.txt11
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_endpoints/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_endpoints/endpoints.h6
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_endpoints/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_internal/CMakeLists.txt16
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_internal/db_driver_state/state.h2
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_internal/grpc_connections/grpc_connections.h6
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_internal/internal_client/client.h4
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_internal/stats_extractor/extractor.h2
-rw-r--r--ydb/public/sdk/cpp/client/impl/ydb_stats/stats.h102
-rw-r--r--ydb/public/sdk/cpp/client/ydb_common_client/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_coordination/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_coordination/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp40
-rw-r--r--ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h14
-rw-r--r--ydb/public/sdk/cpp/client/ydb_driver/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_driver/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_extension/extension.h4
-rw-r--r--ydb/public/sdk/cpp/client/ydb_monitoring/CMakeLists.txt27
-rw-r--r--ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.cpp99
-rw-r--r--ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.h58
-rw-r--r--ydb/public/sdk/cpp/client/ydb_params/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_params/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/CMakeLists.txt5
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.cpp29
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h43
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.cpp1745
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h757
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.ipp2462
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session_messages.cpp4
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.cpp14
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.h5
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/persqueue.h55
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt3
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt3
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/basic_usage_ut.cpp10
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp3
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compression_ut.cpp14
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/read_session_ut.cpp131
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/test_server.h4
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.cpp (renamed from ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.cpp)0
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h (renamed from ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.h)0
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.linux.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_public/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.cpp23
-rw-r--r--ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.h3
-rw-r--r--ydb/public/sdk/cpp/client/ydb_proto/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_proto/accessor.h5
-rw-r--r--ydb/public/sdk/cpp/client/ydb_result/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_result/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_table/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/client/ydb_table/table.cpp23
-rw-r--r--ydb/public/sdk/cpp/client/ydb_table/table.h10
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/CMakeLists.txt3
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/CMakeLists.txt9
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/counters.cpp29
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/deferred_commit.cpp131
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/event_handlers.cpp142
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/executor.cpp91
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/executor.h88
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.cpp344
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.h136
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/read_session_event.cpp392
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp83
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.cpp36
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.h23
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/proto_accessor.cpp26
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/topic.h766
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt56
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt60
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.txt13
-rw-r--r--ydb/public/sdk/cpp/client/ydb_topic/ut/basic_usage_ut.cpp97
-rw-r--r--ydb/public/sdk/cpp/client/ydb_types/CMakeLists.txt5
-rw-r--r--ydb/public/sdk/cpp/client/ydb_types/credentials/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_value/CMakeLists.txt1
-rw-r--r--ydb/public/sdk/cpp/client/ydb_value/ut/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/examples/CMakeLists.txt15
-rw-r--r--ydb/public/sdk/cpp/examples/basic_example/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/examples/bulk_upsert_simple/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/examples/pagination/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/examples/secondary_index/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/examples/secondary_index_builtin/CMakeLists.txt2
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/CMakeLists.txt10
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.darwin.txt29
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.linux.txt33
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.txt13
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/eventloop/main.cpp114
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.darwin.txt29
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.linux.txt33
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.txt13
-rw-r--r--ydb/public/sdk/cpp/examples/topic_reader/simple/main.cpp99
-rw-r--r--ydb/public/sdk/cpp/examples/ttl/CMakeLists.txt2
-rw-r--r--ydb/services/CMakeLists.txt21
-rw-r--r--ydb/services/auth/grpc_service.cpp27
-rw-r--r--ydb/services/auth/grpc_service.h20
-rw-r--r--ydb/services/cms/CMakeLists.txt1
-rw-r--r--ydb/services/cms/grpc_service.cpp30
-rw-r--r--ydb/services/cms/grpc_service.h24
-rw-r--r--ydb/services/cms/ut/CMakeLists.txt2
-rw-r--r--ydb/services/datastreams/CMakeLists.txt1
-rw-r--r--ydb/services/datastreams/datastreams_proxy.cpp383
-rw-r--r--ydb/services/datastreams/datastreams_proxy.h1
-rw-r--r--ydb/services/datastreams/datastreams_ut.cpp579
-rw-r--r--ydb/services/datastreams/grpc_service.cpp107
-rw-r--r--ydb/services/datastreams/grpc_service.h21
-rw-r--r--ydb/services/datastreams/put_records_actor.h59
-rw-r--r--ydb/services/datastreams/ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/services/datastreams/ut/CMakeLists.linux.txt1
-rw-r--r--ydb/services/datastreams/ut/CMakeLists.txt2
-rw-r--r--ydb/services/discovery/grpc_service.cpp31
-rw-r--r--ydb/services/discovery/grpc_service.h23
-rw-r--r--ydb/services/kesus/grpc_service.cpp50
-rw-r--r--ydb/services/kesus/grpc_service.h25
-rw-r--r--ydb/services/lib/CMakeLists.txt10
-rw-r--r--ydb/services/lib/actors/CMakeLists.txt5
-rw-r--r--ydb/services/lib/actors/pq_rl_helpers.cpp70
-rw-r--r--ydb/services/lib/actors/pq_rl_helpers.h40
-rw-r--r--ydb/services/lib/actors/pq_schema_actor.cpp255
-rw-r--r--ydb/services/lib/actors/pq_schema_actor.h19
-rw-r--r--ydb/services/lib/actors/type_definitions.h3
-rw-r--r--ydb/services/local_discovery/grpc_service.cpp2
-rw-r--r--ydb/services/local_discovery/grpc_service.h5
-rw-r--r--ydb/services/monitoring/grpc_service.cpp27
-rw-r--r--ydb/services/monitoring/grpc_service.h23
-rw-r--r--ydb/services/persqueue_cluster_discovery/CMakeLists.txt2
-rw-r--r--ydb/services/persqueue_cluster_discovery/cluster_discovery_service.cpp6
-rw-r--r--ydb/services/persqueue_cluster_discovery/cluster_discovery_service.h2
-rw-r--r--ydb/services/persqueue_cluster_discovery/grpc_service.cpp2
-rw-r--r--ydb/services/persqueue_cluster_discovery/grpc_service.h4
-rw-r--r--ydb/services/persqueue_cluster_discovery/ut/CMakeLists.txt2
-rw-r--r--ydb/services/persqueue_v1/CMakeLists.txt3
-rw-r--r--ydb/services/persqueue_v1/actors/CMakeLists.txt1
-rw-r--r--ydb/services/persqueue_v1/actors/events.h57
-rw-r--r--ydb/services/persqueue_v1/actors/partition_actor.cpp30
-rw-r--r--ydb/services/persqueue_v1/actors/read_info_actor.cpp2
-rw-r--r--ydb/services/persqueue_v1/actors/read_info_actor.h4
-rw-r--r--ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp17
-rw-r--r--ydb/services/persqueue_v1/actors/read_init_auth_actor.h4
-rw-r--r--ydb/services/persqueue_v1/actors/read_session_actor.h39
-rw-r--r--ydb/services/persqueue_v1/actors/read_session_actor.ipp352
-rw-r--r--ydb/services/persqueue_v1/actors/schema_actors.cpp60
-rw-r--r--ydb/services/persqueue_v1/actors/schema_actors.h4
-rw-r--r--ydb/services/persqueue_v1/actors/write_session_actor.h159
-rw-r--r--ydb/services/persqueue_v1/actors/write_session_actor.ipp (renamed from ydb/services/persqueue_v1/actors/write_session_actor.cpp)744
-rw-r--r--ydb/services/persqueue_v1/grpc_pq_read.cpp4
-rw-r--r--ydb/services/persqueue_v1/grpc_pq_read.h6
-rw-r--r--ydb/services/persqueue_v1/grpc_pq_schema.cpp4
-rw-r--r--ydb/services/persqueue_v1/grpc_pq_schema.h6
-rw-r--r--ydb/services/persqueue_v1/grpc_pq_write.cpp64
-rw-r--r--ydb/services/persqueue_v1/grpc_pq_write.h77
-rw-r--r--ydb/services/persqueue_v1/persqueue.cpp80
-rw-r--r--ydb/services/persqueue_v1/persqueue.h19
-rw-r--r--ydb/services/persqueue_v1/persqueue_common_ut.cpp44
-rw-r--r--ydb/services/persqueue_v1/persqueue_compat_ut.cpp10
-rw-r--r--ydb/services/persqueue_v1/persqueue_new_schemecache_ut.cpp4
-rw-r--r--ydb/services/persqueue_v1/persqueue_ut.cpp883
-rw-r--r--ydb/services/persqueue_v1/topic.cpp74
-rw-r--r--ydb/services/persqueue_v1/topic.h19
-rw-r--r--ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt4
-rw-r--r--ydb/services/persqueue_v1/ut/CMakeLists.linux.txt4
-rw-r--r--ydb/services/persqueue_v1/ut/CMakeLists.txt2
-rw-r--r--ydb/services/persqueue_v1/ut/functions_executor_wrapper.cpp56
-rw-r--r--ydb/services/persqueue_v1/ut/functions_executor_wrapper.h34
-rw-r--r--ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt1
-rw-r--r--ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt1
-rw-r--r--ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.txt2
-rw-r--r--ydb/services/rate_limiter/CMakeLists.txt1
-rw-r--r--ydb/services/rate_limiter/grpc_service.cpp2
-rw-r--r--ydb/services/rate_limiter/grpc_service.h4
-rw-r--r--ydb/services/rate_limiter/ut/CMakeLists.txt2
-rw-r--r--ydb/services/ydb/CMakeLists.txt3
-rw-r--r--ydb/services/ydb/index_ut/CMakeLists.txt2
-rw-r--r--ydb/services/ydb/sdk_credprovider_ut/CMakeLists.txt2
-rw-r--r--ydb/services/ydb/ut/CMakeLists.darwin.txt2
-rw-r--r--ydb/services/ydb/ut/CMakeLists.linux.txt2
-rw-r--r--ydb/services/ydb/ut/CMakeLists.txt2
-rw-r--r--ydb/services/ydb/ydb_bulk_upsert_ut.cpp46
-rw-r--r--ydb/services/ydb/ydb_clickhouse_internal.cpp30
-rw-r--r--ydb/services/ydb/ydb_clickhouse_internal.h20
-rw-r--r--ydb/services/ydb/ydb_dummy.cpp2
-rw-r--r--ydb/services/ydb/ydb_dummy.h4
-rw-r--r--ydb/services/ydb/ydb_experimental.cpp24
-rw-r--r--ydb/services/ydb/ydb_experimental.h18
-rw-r--r--ydb/services/ydb/ydb_export.cpp24
-rw-r--r--ydb/services/ydb/ydb_export.h17
-rw-r--r--ydb/services/ydb/ydb_import.cpp24
-rw-r--r--ydb/services/ydb/ydb_import.h18
-rw-r--r--ydb/services/ydb/ydb_index_table_ut.cpp104
-rw-r--r--ydb/services/ydb/ydb_logstore.cpp25
-rw-r--r--ydb/services/ydb/ydb_logstore.h20
-rw-r--r--ydb/services/ydb/ydb_long_tx.cpp27
-rw-r--r--ydb/services/ydb/ydb_long_tx.h19
-rw-r--r--ydb/services/ydb/ydb_monitoring_ut.cpp27
-rw-r--r--ydb/services/ydb/ydb_operation.cpp26
-rw-r--r--ydb/services/ydb/ydb_operation.h18
-rw-r--r--ydb/services/ydb/ydb_s3_internal.cpp24
-rw-r--r--ydb/services/ydb/ydb_s3_internal.h18
-rw-r--r--ydb/services/ydb/ydb_scheme.cpp26
-rw-r--r--ydb/services/ydb/ydb_scheme.h16
-rw-r--r--ydb/services/ydb/ydb_scripting.cpp30
-rw-r--r--ydb/services/ydb/ydb_scripting.h19
-rw-r--r--ydb/services/ydb/ydb_table.cpp32
-rw-r--r--ydb/services/ydb/ydb_table.h19
-rw-r--r--ydb/services/ydb/ydb_ut.cpp2
-rw-r--r--ydb/services/yq/CMakeLists.txt1
-rw-r--r--ydb/services/yq/grpc_service.cpp2
-rw-r--r--ydb/services/yq/grpc_service.h4
-rw-r--r--ydb/services/yq/private_grpc.cpp2
-rw-r--r--ydb/services/yq/private_grpc.h4
-rw-r--r--ydb/services/yq/ut_integration/CMakeLists.txt2
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan14
-rw-r--r--ydb/tests/functional/rename/test.py3
-rw-r--r--ydb/tests/functional/serverless/test.py4
-rw-r--r--ydb/tests/functional/sqs/common/test_account_actions.py7
-rw-r--r--ydb/tests/functional/sqs/common/test_counters.py18
-rw-r--r--ydb/tests/functional/sqs/common/test_format_without_version.py97
-rw-r--r--ydb/tests/functional/sqs/common/test_queues_managing.py83
-rw-r--r--ydb/tests/functional/sqs/merge_split_common_table/__init__.py0
-rw-r--r--ydb/tests/functional/sqs/merge_split_common_table/fifo/test.py6
-rw-r--r--ydb/tests/functional/sqs/merge_split_common_table/std/test.py6
-rw-r--r--ydb/tests/functional/sqs/merge_split_common_table/test.py144
-rw-r--r--ydb/tests/functional/sqs/messaging/test_fifo_messaging.py68
-rw-r--r--ydb/tests/functional/sqs/messaging/test_generic_messaging.py4
-rw-r--r--ydb/tests/functional/sqs/multinode/test_multinode_cluster.py15
-rw-r--r--ydb/tests/functional/sqs/multinode/test_recompiles_requests.py8
-rw-r--r--ydb/tests/functional/sqs/with_quotas/test_quoting.py26
-rw-r--r--ydb/tests/library/harness/resources/default_yaml.yml1
-rw-r--r--ydb/tests/library/sqs/tables.py169
-rw-r--r--ydb/tests/library/sqs/test_base.py76
2067 files changed, 142351 insertions, 18780 deletions
diff --git a/CMakeLists.darwin.txt b/CMakeLists.darwin.txt
index 4a495cabf1..cd6d87e652 100644
--- a/CMakeLists.darwin.txt
+++ b/CMakeLists.darwin.txt
@@ -6,1344 +6,9 @@
# original buildsystem will not be accepted.
-add_subdirectory(tools/rescompiler/bin)
-add_subdirectory(contrib/libs/cxxsupp)
-add_subdirectory(contrib/libs/cxxsupp/libcxx)
-add_subdirectory(contrib/libs/cxxsupp/libcxxabi-parts)
-add_subdirectory(contrib/libs/cxxsupp/libcxxrt)
-add_subdirectory(contrib/libs/libunwind)
-add_subdirectory(contrib/libs/cxxsupp/builtins)
+add_subdirectory(tools)
+add_subdirectory(contrib)
add_subdirectory(util)
-add_subdirectory(util/charset)
-add_subdirectory(contrib/libs/double-conversion)
-add_subdirectory(contrib/libs/libc_compat)
-add_subdirectory(library/cpp/cpuid_check)
-add_subdirectory(library/cpp/resource)
-add_subdirectory(library/cpp/blockcodecs/core)
-add_subdirectory(library/cpp/blockcodecs/codecs/zstd)
-add_subdirectory(contrib/libs/zstd)
-add_subdirectory(contrib/libs/xxhash)
-add_subdirectory(ydb/apps/ydbd)
-add_subdirectory(library/cpp/lfalloc/yt)
-add_subdirectory(library/cpp/malloc/api)
-add_subdirectory(ydb/library/yql/sql/pg_dummy)
-add_subdirectory(ydb/library/yql/ast)
-add_subdirectory(library/cpp/colorizer)
-add_subdirectory(library/cpp/containers/sorted_vector)
-add_subdirectory(library/cpp/containers/stack_vector)
-add_subdirectory(library/cpp/deprecated/enum_codegen)
-add_subdirectory(library/cpp/enumbitset)
-add_subdirectory(library/cpp/string_utils/levenshtein_diff)
-add_subdirectory(util/draft)
-add_subdirectory(library/cpp/yson)
-add_subdirectory(library/cpp/yt/misc)
-add_subdirectory(library/cpp/yt/exception)
-add_subdirectory(library/cpp/yt/yson)
-add_subdirectory(library/cpp/yt/yson_string)
-add_subdirectory(library/cpp/yt/assert)
-add_subdirectory(library/cpp/yt/coding)
-add_subdirectory(library/cpp/yt/string)
-add_subdirectory(library/cpp/yt/small_containers)
-add_subdirectory(library/cpp/yt/malloc)
-add_subdirectory(library/cpp/yt/memory)
-add_subdirectory(library/cpp/ytalloc/api)
-add_subdirectory(ydb/library/yql/public/udf)
-add_subdirectory(ydb/library/yql/public/decimal)
-add_subdirectory(ydb/library/yql/public/types)
-add_subdirectory(contrib/libs/protobuf)
-add_subdirectory(contrib/tools/protoc/bin)
-add_subdirectory(contrib/libs/protoc)
-add_subdirectory(contrib/tools/protoc/plugins/cpp_styleguide)
-add_subdirectory(library/cpp/deprecated/atomic)
-add_subdirectory(ydb/library/yql/utils)
-add_subdirectory(library/cpp/digest/md5)
-add_subdirectory(contrib/libs/nayuki_md5)
-add_subdirectory(library/cpp/string_utils/base64)
-add_subdirectory(contrib/libs/base64/avx2)
-add_subdirectory(contrib/libs/base64/ssse3)
-add_subdirectory(contrib/libs/base64/neon32)
-add_subdirectory(contrib/libs/base64/neon64)
-add_subdirectory(contrib/libs/base64/plain32)
-add_subdirectory(contrib/libs/base64/plain64)
-add_subdirectory(library/cpp/messagebus)
-add_subdirectory(contrib/libs/sparsehash)
-add_subdirectory(library/cpp/codecs)
-add_subdirectory(library/cpp/bit_io)
-add_subdirectory(library/cpp/deprecated/accessors)
-add_subdirectory(library/cpp/blockcodecs)
-add_subdirectory(library/cpp/blockcodecs/codecs/brotli)
-add_subdirectory(contrib/libs/brotli/enc)
-add_subdirectory(contrib/libs/brotli/common)
-add_subdirectory(contrib/libs/brotli/dec)
-add_subdirectory(library/cpp/blockcodecs/codecs/bzip)
-add_subdirectory(contrib/libs/libbz2)
-add_subdirectory(library/cpp/blockcodecs/codecs/fastlz)
-add_subdirectory(contrib/libs/fastlz)
-add_subdirectory(library/cpp/blockcodecs/codecs/legacy_zstd06)
-add_subdirectory(contrib/libs/zstd06)
-add_subdirectory(library/cpp/blockcodecs/codecs/lz4)
-add_subdirectory(contrib/libs/lz4)
-add_subdirectory(contrib/libs/lz4/generated)
-add_subdirectory(library/cpp/blockcodecs/codecs/lzma)
-add_subdirectory(contrib/libs/lzmasdk)
-add_subdirectory(library/cpp/blockcodecs/codecs/snappy)
-add_subdirectory(contrib/libs/snappy)
-add_subdirectory(library/cpp/blockcodecs/codecs/zlib)
-add_subdirectory(library/cpp/codecs/greedy_dict)
-add_subdirectory(library/cpp/containers/comptrie)
-add_subdirectory(library/cpp/packers)
-add_subdirectory(library/cpp/containers/compact_vector)
-add_subdirectory(library/cpp/on_disk/chunks)
-add_subdirectory(library/cpp/string_utils/relaxed_escaper)
-add_subdirectory(library/cpp/comptable)
-add_subdirectory(library/cpp/compproto)
-add_subdirectory(library/cpp/getopt/small)
-add_subdirectory(library/cpp/lwtrace)
-add_subdirectory(library/cpp/lwtrace/protos)
-add_subdirectory(library/cpp/messagebus/actor)
-add_subdirectory(library/cpp/messagebus/config)
-add_subdirectory(library/cpp/getopt)
-add_subdirectory(library/cpp/svnversion)
-add_subdirectory(library/cpp/build_info)
-add_subdirectory(library/cpp/messagebus/monitoring)
-add_subdirectory(library/cpp/monlib/encode/legacy_protobuf/protos)
-add_subdirectory(library/cpp/messagebus/scheduler)
-add_subdirectory(library/cpp/threading/future)
-add_subdirectory(library/cpp/string_utils/indent_text)
-add_subdirectory(library/cpp/string_utils/quote)
-add_subdirectory(ydb/library/yql/core/issue)
-add_subdirectory(ydb/library/yql/public/issue)
-add_subdirectory(ydb/public/api/protos)
-add_subdirectory(ydb/public/api/protos/annotations)
-add_subdirectory(tools/enum_parser/enum_serialization_runtime)
-add_subdirectory(ydb/public/lib/validation)
-add_subdirectory(tools/enum_parser/enum_parser/bin)
-add_subdirectory(tools/enum_parser/parse_enum)
-add_subdirectory(library/cpp/cppparser)
-add_subdirectory(ydb/library/yql/public/issue/protos)
-add_subdirectory(ydb/library/yql/core/issue/protos)
-add_subdirectory(ydb/library/yql/parser/pg_catalog)
-add_subdirectory(ydb/library/yql/sql/settings)
-add_subdirectory(library/cpp/deprecated/split)
-add_subdirectory(library/cpp/deprecated/kmp)
-add_subdirectory(ydb/library/yql/providers/common/codec)
-add_subdirectory(ydb/library/yql/minikql)
-add_subdirectory(contrib/libs/apache/arrow)
-add_subdirectory(contrib/libs/apache/orc)
-add_subdirectory(contrib/libs/re2)
-add_subdirectory(contrib/libs/utf8proc)
-add_subdirectory(contrib/restricted/boost)
-add_subdirectory(contrib/restricted/fast_float)
-add_subdirectory(contrib/restricted/thrift)
-add_subdirectory(contrib/libs/libevent)
-add_subdirectory(contrib/libs/libevent/event_core)
-add_subdirectory(contrib/libs/libevent/event_extra)
-add_subdirectory(contrib/libs/libevent/event_openssl)
-add_subdirectory(contrib/libs/libevent/event_thread)
-add_subdirectory(contrib/restricted/boost/libs/system)
-add_subdirectory(contrib/restricted/boost/libs/thread)
-add_subdirectory(contrib/restricted/boost/libs/chrono)
-add_subdirectory(contrib/restricted/uriparser)
-add_subdirectory(contrib/libs/cctz/tzdata)
-add_subdirectory(contrib/libs/cctz)
-add_subdirectory(library/cpp/actors/util)
-add_subdirectory(library/cpp/monlib/dynamic_counters)
-add_subdirectory(library/cpp/monlib/encode/json)
-add_subdirectory(library/cpp/monlib/encode)
-add_subdirectory(library/cpp/monlib/metrics)
-add_subdirectory(library/cpp/monlib/encode/buffered)
-add_subdirectory(library/cpp/monlib/exception)
-add_subdirectory(library/cpp/json)
-add_subdirectory(contrib/libs/rapidjson)
-add_subdirectory(library/cpp/json/common)
-add_subdirectory(library/cpp/json/fast_sax)
-add_subdirectory(library/cpp/json/writer)
-add_subdirectory(library/cpp/monlib/encode/spack)
-add_subdirectory(library/cpp/monlib/encode/prometheus)
-add_subdirectory(library/cpp/monlib/service/pages)
-add_subdirectory(library/cpp/monlib/service)
-add_subdirectory(library/cpp/coroutine/engine)
-add_subdirectory(library/cpp/containers/intrusive_rb_tree)
-add_subdirectory(library/cpp/coroutine/listener)
-add_subdirectory(library/cpp/http/fetch)
-add_subdirectory(library/cpp/charset)
-add_subdirectory(library/cpp/http/misc)
-add_subdirectory(library/cpp/case_insensitive_string)
-add_subdirectory(library/cpp/digest/murmur)
-add_subdirectory(library/cpp/cgiparam)
-add_subdirectory(library/cpp/iterator)
-add_subdirectory(library/cpp/string_utils/scan)
-add_subdirectory(library/cpp/digest/lower_case)
-add_subdirectory(library/cpp/logger)
-add_subdirectory(library/cpp/mime/types)
-add_subdirectory(library/cpp/uri)
-add_subdirectory(library/cpp/http/server)
-add_subdirectory(library/cpp/http/io)
-add_subdirectory(library/cpp/streams/brotli)
-add_subdirectory(library/cpp/streams/bzip2)
-add_subdirectory(library/cpp/streams/lzma)
-add_subdirectory(library/cpp/threading/equeue)
-add_subdirectory(library/cpp/monlib/encode/text)
-add_subdirectory(library/cpp/threading/light_rw_lock)
-add_subdirectory(library/cpp/packedtypes)
-add_subdirectory(library/cpp/streams/zc_memory_input)
-add_subdirectory(ydb/library/binary_json)
-add_subdirectory(ydb/library/yql/minikql/dom)
-add_subdirectory(library/cpp/yson_pull)
-add_subdirectory(ydb/library/dynumber)
-add_subdirectory(ydb/library/yql/public/udf/tz)
-add_subdirectory(ydb/library/yql/minikql/computation)
-add_subdirectory(library/cpp/random_provider)
-add_subdirectory(library/cpp/time_provider)
-add_subdirectory(ydb/library/yql/minikql/arrow)
-add_subdirectory(ydb/library/yql/minikql/codegen)
-add_subdirectory(contrib/libs/llvm12/lib/IR)
-add_subdirectory(contrib/libs/llvm12)
-add_subdirectory(contrib/libs/llvm12/include)
-add_subdirectory(contrib/libs/llvm12/utils/TableGen)
-add_subdirectory(contrib/libs/llvm12/lib/Demangle)
-add_subdirectory(contrib/libs/llvm12/lib/Support)
-add_subdirectory(contrib/libs/llvm12/lib/TableGen)
-add_subdirectory(contrib/libs/llvm12/utils/TableGen/GlobalISel)
-add_subdirectory(contrib/libs/llvm12/lib/BinaryFormat)
-add_subdirectory(contrib/libs/llvm12/lib/Remarks)
-add_subdirectory(contrib/libs/llvm12/lib/Bitstream/Reader)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/MCJIT)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/RuntimeDyld)
-add_subdirectory(contrib/libs/llvm12/lib/MC)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/CodeView)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/MSF)
-add_subdirectory(contrib/libs/llvm12/lib/Object)
-add_subdirectory(contrib/libs/llvm12/lib/Bitcode/Reader)
-add_subdirectory(contrib/libs/llvm12/lib/MC/MCParser)
-add_subdirectory(contrib/libs/llvm12/lib/TextAPI/MachO)
-add_subdirectory(contrib/libs/llvm12/lib/Target)
-add_subdirectory(contrib/libs/llvm12/lib/Analysis)
-add_subdirectory(contrib/libs/llvm12/lib/ProfileData)
-add_subdirectory(contrib/libs/llvm12/lib/Linker)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Utils)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen)
-add_subdirectory(contrib/libs/llvm12/lib/Bitcode/Writer)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Scalar)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/AggressiveInstCombine)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/InstCombine)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/AsmPrinter)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/DWARF)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/GlobalISel)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/SelectionDAG)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/MCTargetDesc)
-add_subdirectory(contrib/libs/llvm12/lib/MC/MCDisassembler)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/TargetInfo)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/CFGuard)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/AsmParser)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/Disassembler)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/IPO)
-add_subdirectory(contrib/libs/llvm12/lib/Frontend/OpenMP)
-add_subdirectory(contrib/libs/llvm12/lib/IRReader)
-add_subdirectory(contrib/libs/llvm12/lib/AsmParser)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Instrumentation)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Vectorize)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/ObjCARC)
-add_subdirectory(ydb/library/yql/providers/common/mkql)
-add_subdirectory(ydb/library/yql/core)
-add_subdirectory(library/cpp/yson/node)
-add_subdirectory(library/cpp/yson/json)
-add_subdirectory(ydb/library/yql/core/file_storage)
-add_subdirectory(library/cpp/cache)
-add_subdirectory(library/cpp/logger/global)
-add_subdirectory(library/cpp/regex/pcre)
-add_subdirectory(contrib/libs/pcre)
-add_subdirectory(contrib/libs/pcre/pcre16)
-add_subdirectory(contrib/libs/pcre/pcre32)
-add_subdirectory(library/cpp/containers/stack_array)
-add_subdirectory(library/cpp/protobuf/util)
-add_subdirectory(library/cpp/binsaver)
-add_subdirectory(library/cpp/containers/2d_array)
-add_subdirectory(library/cpp/protobuf/util/proto)
-add_subdirectory(ydb/library/yql/core/file_storage/proto)
-add_subdirectory(ydb/library/yql/core/file_storage/defs)
-add_subdirectory(ydb/library/yql/core/file_storage/download)
-add_subdirectory(ydb/library/yql/utils/log)
-add_subdirectory(ydb/library/yql/utils/fetch)
-add_subdirectory(library/cpp/openssl/io)
+add_subdirectory(library)
+add_subdirectory(ydb)
add_subdirectory(certs)
-add_subdirectory(library/cpp/openssl/init)
-add_subdirectory(library/cpp/openssl/method)
-add_subdirectory(library/cpp/openssl/holders)
-add_subdirectory(ydb/library/yql/core/sql_types)
-add_subdirectory(ydb/library/yql/protos)
-add_subdirectory(ydb/library/yql/core/expr_nodes)
-add_subdirectory(ydb/library/yql/core/expr_nodes_gen)
-add_subdirectory(ydb/library/yql/providers/common/proto)
-add_subdirectory(ydb/library/yql/providers/common/schema/expr)
-add_subdirectory(ydb/library/yql/providers/common/schema/parser)
-add_subdirectory(ydb/library/yql/providers/dq/expr_nodes)
-add_subdirectory(ydb/core/driver_lib/run)
-add_subdirectory(library/cpp/actors/core)
-add_subdirectory(library/cpp/actors/memory_log)
-add_subdirectory(library/cpp/threading/queue)
-add_subdirectory(contrib/libs/linuxvdso)
-add_subdirectory(library/cpp/actors/prof)
-add_subdirectory(contrib/libs/tcmalloc/malloc_extension)
-add_subdirectory(contrib/restricted/abseil-cpp)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/algorithm)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/raw_logging)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/log_severity)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/spinlock_wait)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/low_level_alloc)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/scoped_set_env)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/strerror)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/throw_delegate)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/city)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/container)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/container/internal/absl_hashtablez_sampler)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/stacktrace)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/symbolize)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/demangle)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/numeric)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/absl_strings_internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/profiling/internal/exponential_biased)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/synchronization)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/synchronization/internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/time)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/time/civil_time)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/time/time_zone)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/container/internal/raw_hash_set)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/hash)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/hash/internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types/bad_optional_access)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types/bad_variant_access)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types/internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/failure_signal_handler)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/leak_check)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/leak_check_disable)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/commandlineflag)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/commandlineflag)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/flag)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/program_name)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/marshalling)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/str_format)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/usage_config)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/private_handle_accessor)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/reflection)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/cord)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/functional)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/absl_cord_internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/cordz_functions)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/cordz_handle)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/cordz_info)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/utility)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/usage)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/parse)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/usage)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/memory)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/meta)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/profiling/internal/periodic_sampler)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/absl_random_distributions)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/absl_random_internal_distribution_test_util)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/pool_urbg)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen_detect)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen_hwaes)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen_round_keys)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen_slow)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/seed_material)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/seed_gen_exception)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/seed_sequences)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/status)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/status/statusor)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/cordz_sample_token)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types/bad_any_cast)
-add_subdirectory(library/cpp/containers/atomizer)
-add_subdirectory(library/cpp/containers/str_map)
-add_subdirectory(library/cpp/actors/protos)
-add_subdirectory(library/cpp/execprofile)
-add_subdirectory(library/cpp/actors/dnsresolver)
-add_subdirectory(library/cpp/actors/interconnect)
-add_subdirectory(library/cpp/actors/dnscachelib)
-add_subdirectory(library/cpp/actors/helpers)
-add_subdirectory(library/cpp/actors/wilson)
-add_subdirectory(library/cpp/actors/wilson/protos)
-add_subdirectory(contrib/libs/grpc)
-add_subdirectory(contrib/libs/grpc/grpc)
-add_subdirectory(contrib/libs/grpc/src/core/lib)
-add_subdirectory(contrib/libs/grpc/third_party/upb)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/spinlock_wait)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/container)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/memory)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/meta)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/raw_logging)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/log_severity)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/status)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/low_level_alloc)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/throw_delegate)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/debugging)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/debugging/stacktrace)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/debugging/symbolize)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/demangle)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/numeric)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/absl_strings_internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/profiling/internal/exponential_biased)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/cord)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/algorithm)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/functional)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/absl_cord_internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/cordz_functions)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/cordz_handle)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/synchronization)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/synchronization/internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/time)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/time/civil_time)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/time/time_zone)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/cordz_info)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/types)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/types/bad_optional_access)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/utility)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/str_format)
-add_subdirectory(contrib/libs/grpc/third_party/address_sorting)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/hash)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/city)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/hash/internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/types/bad_variant_access)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/types/internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/status/statusor)
-add_subdirectory(contrib/libs/grpc/grpc++)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/container/internal/raw_hash_set)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/container/internal/absl_hashtablez_sampler)
-add_subdirectory(contrib/tools/protoc/plugins/grpc_cpp)
-add_subdirectory(contrib/libs/grpc/src/compiler/grpc_plugin_support)
-add_subdirectory(library/cpp/digest/crc32c)
-add_subdirectory(contrib/libs/crcutil)
-add_subdirectory(library/cpp/monlib/service/pages/tablesorter)
-add_subdirectory(library/cpp/grpc/client)
-add_subdirectory(library/cpp/grpc/server)
-add_subdirectory(library/cpp/monlib/dynamic_counters/percentile)
-add_subdirectory(library/cpp/grpc/server/actors)
-add_subdirectory(library/cpp/monlib/messagebus)
-add_subdirectory(library/cpp/messagebus/www)
-add_subdirectory(library/cpp/html/pcdata)
-add_subdirectory(library/cpp/messagebus/oldmodule)
-add_subdirectory(library/cpp/monlib/deprecated/json)
-add_subdirectory(library/cpp/sighandler)
-add_subdirectory(library/cpp/string_utils/parse_size)
-add_subdirectory(ydb/core/actorlib_impl)
-add_subdirectory(library/cpp/lwtrace/mon)
-add_subdirectory(library/cpp/lwtrace/mon/analytics)
-add_subdirectory(library/cpp/sliding_window)
-add_subdirectory(ydb/core/base)
-add_subdirectory(ydb/core/base/services)
-add_subdirectory(ydb/core/debug)
-add_subdirectory(ydb/core/erasure)
-add_subdirectory(library/cpp/digest/old_crc)
-add_subdirectory(library/cpp/digest/old_crc/gencrc)
-add_subdirectory(ydb/core/protos)
-add_subdirectory(ydb/core/yq/libs/config/protos)
-add_subdirectory(ydb/library/folder_service/proto)
-add_subdirectory(ydb/library/yql/dq/actors/protos)
-add_subdirectory(ydb/library/yql/dq/proto)
-add_subdirectory(ydb/library/yql/providers/s3/proto)
-add_subdirectory(ydb/library/login/protos)
-add_subdirectory(ydb/library/mkql_proto/protos)
-add_subdirectory(ydb/core/protos/out)
-add_subdirectory(ydb/library/aclib)
-add_subdirectory(ydb/library/aclib/protos)
-add_subdirectory(ydb/library/login)
-add_subdirectory(contrib/libs/jwt-cpp)
-add_subdirectory(library/cpp/digest/argonish)
-add_subdirectory(library/cpp/threading/poor_man_openmp)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/avx2)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/macro)
-add_subdirectory(library/cpp/digest/argonish/internal/argon2)
-add_subdirectory(library/cpp/digest/argonish/internal/blamka)
-add_subdirectory(library/cpp/digest/argonish/internal/rotations)
-add_subdirectory(library/cpp/digest/argonish/internal/blake2b)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/ref)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/sse2)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/sse41)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/ssse3)
-add_subdirectory(ydb/library/pdisk_io)
-add_subdirectory(ydb/library/pdisk_io/protos)
-add_subdirectory(ydb/library/pretty_types_print/protobuf)
-add_subdirectory(ydb/public/api/protos/out)
-add_subdirectory(ydb/core/mon)
-add_subdirectory(library/cpp/string_utils/url)
-add_subdirectory(ydb/core/node_whiteboard)
-add_subdirectory(ydb/core/blobstorage/base)
-add_subdirectory(ydb/core/blobstorage/groupinfo)
-add_subdirectory(library/cpp/pop_count)
-add_subdirectory(ydb/core/blobstorage/crypto)
-add_subdirectory(contrib/libs/t1ha)
-add_subdirectory(library/cpp/sse)
-add_subdirectory(ydb/core/blobstorage/vdisk/ingress)
-add_subdirectory(ydb/core/util)
-add_subdirectory(library/cpp/actors/interconnect/mock)
-add_subdirectory(library/cpp/html/escape)
-add_subdirectory(library/cpp/ipmath)
-add_subdirectory(library/cpp/ipv6_address)
-add_subdirectory(library/cpp/int128)
-add_subdirectory(ydb/core/blob_depot)
-add_subdirectory(ydb/core/tablet_flat)
-add_subdirectory(ydb/core/control)
-add_subdirectory(ydb/core/tablet)
-add_subdirectory(ydb/core/mon_alloc)
-add_subdirectory(library/cpp/lfalloc/alloc_profiler)
-add_subdirectory(library/cpp/lfalloc/dbg_info)
-add_subdirectory(ydb/core/scheme)
-add_subdirectory(library/cpp/containers/bitseq)
-add_subdirectory(ydb/core/scheme_types)
-add_subdirectory(ydb/public/lib/scheme_types)
-add_subdirectory(ydb/core/sys_view/service)
-add_subdirectory(ydb/core/tracing)
-add_subdirectory(ydb/library/persqueue/topic_parser)
-add_subdirectory(ydb/library/persqueue/topic_parser_public)
-add_subdirectory(ydb/core/tablet_flat/protos)
-add_subdirectory(ydb/core/blobstorage)
-add_subdirectory(ydb/core/blobstorage/backpressure)
-add_subdirectory(ydb/core/blobstorage/lwtrace_probes)
-add_subdirectory(ydb/core/blobstorage/dsproxy)
-add_subdirectory(ydb/core/blobstorage/storagepoolmon)
-add_subdirectory(ydb/core/blobstorage/incrhuge)
-add_subdirectory(ydb/core/blobstorage/nodewarden)
-add_subdirectory(ydb/core/blob_depot/agent)
-add_subdirectory(ydb/core/blobstorage/pdisk)
-add_subdirectory(ydb/library/schlab)
-add_subdirectory(ydb/library/schlab/schine)
-add_subdirectory(ydb/library/schlab/probes)
-add_subdirectory(ydb/library/schlab/mon)
-add_subdirectory(ydb/library/schlab/schemu)
-add_subdirectory(ydb/library/schlab/schoot)
-add_subdirectory(library/cpp/protobuf/json)
-add_subdirectory(ydb/library/schlab/protos)
-add_subdirectory(ydb/core/blobstorage/other)
-add_subdirectory(ydb/core/blobstorage/testload)
-add_subdirectory(ydb/core/keyvalue)
-add_subdirectory(ydb/core/engine/minikql)
-add_subdirectory(ydb/core/client/minikql_compile)
-add_subdirectory(ydb/core/engine)
-add_subdirectory(ydb/library/mkql_proto)
-add_subdirectory(ydb/library/mkql_proto/ut/helpers)
-add_subdirectory(ydb/library/yql/minikql/comp_nodes)
-add_subdirectory(ydb/library/yql/minikql/invoke_builtins)
-add_subdirectory(library/cpp/testing/unittest)
-add_subdirectory(library/cpp/dbg_output)
-add_subdirectory(library/cpp/diff)
-add_subdirectory(library/cpp/lcs)
-add_subdirectory(library/cpp/containers/paged_vector)
-add_subdirectory(library/cpp/testing/common)
-add_subdirectory(library/cpp/testing/hook)
-add_subdirectory(ydb/core/kqp/provider)
-add_subdirectory(ydb/core/kqp/provider/mkql)
-add_subdirectory(ydb/library/yql/core/services)
-add_subdirectory(ydb/library/yql/ast/serialize)
-add_subdirectory(ydb/library/yql/sql)
-add_subdirectory(ydb/library/yql/sql/v0)
-add_subdirectory(ydb/library/yql/parser/proto_ast)
-add_subdirectory(contrib/libs/antlr3_cpp_runtime)
-add_subdirectory(ydb/library/yql/parser/proto_ast/collect_issues)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/v0)
-add_subdirectory(ydb/library/yql/sql/v0/lexer)
-add_subdirectory(ydb/library/yql/sql/v1)
-add_subdirectory(ydb/library/yql/parser/lexer_common)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/v1)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/v1_proto)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/v1_ansi)
-add_subdirectory(ydb/library/yql/sql/v1/lexer)
-add_subdirectory(ydb/library/yql/sql/v1/proto_parser)
-add_subdirectory(ydb/library/yql/core/common_opt)
-add_subdirectory(ydb/library/yql/core/peephole_opt)
-add_subdirectory(ydb/library/yql/core/type_ann)
-add_subdirectory(ydb/library/yql/providers/common/provider)
-add_subdirectory(ydb/library/yql/providers/result/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/common/config)
-add_subdirectory(ydb/library/yql/providers/common/gateway)
-add_subdirectory(ydb/library/yql/providers/result/provider)
-add_subdirectory(ydb/core/formats)
-add_subdirectory(ydb/core/keyvalue/protos)
-add_subdirectory(ydb/core/tx)
-add_subdirectory(ydb/core/persqueue/config)
-add_subdirectory(ydb/public/lib/base)
-add_subdirectory(library/cpp/messagebus/protobuf)
-add_subdirectory(ydb/library/workload)
-add_subdirectory(ydb/public/lib/operation_id)
-add_subdirectory(ydb/public/lib/operation_id/protos)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_proto)
-add_subdirectory(ydb/public/api/grpc/draft)
-add_subdirectory(ydb/core/yq/libs/protos)
-add_subdirectory(ydb/core/blobstorage/vdisk)
-add_subdirectory(ydb/core/blobstorage/vdisk/anubis_osiris)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/barriers)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/base)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/generic)
-add_subdirectory(ydb/core/blobstorage/vdisk/common)
-add_subdirectory(ydb/core/blobstorage/vdisk/defrag)
-add_subdirectory(ydb/core/blobstorage/vdisk/handoff)
-add_subdirectory(ydb/core/blobstorage/vdisk/huge)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/compstrat)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/fresh)
-add_subdirectory(ydb/core/blobstorage/vdisk/hullop)
-add_subdirectory(ydb/core/blobstorage/vdisk/localrecovery)
-add_subdirectory(ydb/core/blobstorage/vdisk/query)
-add_subdirectory(ydb/core/blobstorage/vdisk/repl)
-add_subdirectory(ydb/core/blobstorage/vdisk/scrub)
-add_subdirectory(ydb/core/blobstorage/vdisk/skeleton)
-add_subdirectory(ydb/core/blobstorage/vdisk/syncer)
-add_subdirectory(ydb/core/blobstorage/vdisk/synclog)
-add_subdirectory(library/cpp/containers/intrusive_avl_tree)
-add_subdirectory(ydb/core/client/scheme_cache_lib)
-add_subdirectory(ydb/core/client/server)
-add_subdirectory(ydb/core/client/metadata)
-add_subdirectory(ydb/core/grpc_services)
-add_subdirectory(ydb/core/grpc_services/counters)
-add_subdirectory(ydb/core/grpc_services/local_rpc)
-add_subdirectory(ydb/core/grpc_services/base)
-add_subdirectory(ydb/core/grpc_streaming)
-add_subdirectory(ydb/public/sdk/cpp/client/resources)
-add_subdirectory(ydb/core/health_check)
-add_subdirectory(ydb/public/api/grpc)
-add_subdirectory(ydb/core/io_formats)
-add_subdirectory(ydb/core/kesus/tablet)
-add_subdirectory(ydb/core/metering)
-add_subdirectory(ydb/core/sys_view)
-add_subdirectory(ydb/core/kqp/runtime)
-add_subdirectory(ydb/core/kqp/common)
-add_subdirectory(ydb/core/kqp/expr_nodes)
-add_subdirectory(ydb/library/yql/dq/expr_nodes)
-add_subdirectory(ydb/core/tx/long_tx_service/public)
-add_subdirectory(ydb/library/yql/dq/actors)
-add_subdirectory(ydb/library/yql/dq/common)
-add_subdirectory(ydb/core/ydb_convert)
-add_subdirectory(ydb/library/yql/dq/runtime)
-add_subdirectory(ydb/library/yql/dq/type_ann)
-add_subdirectory(ydb/library/yql/providers/common/schema/mkql)
-add_subdirectory(ydb/core/sys_view/common)
-add_subdirectory(ydb/core/sys_view/nodes)
-add_subdirectory(ydb/core/sys_view/partition_stats)
-add_subdirectory(ydb/core/sys_view/query_stats)
-add_subdirectory(ydb/core/sys_view/storage)
-add_subdirectory(ydb/core/sys_view/tablets)
-add_subdirectory(ydb/core/tx/datashard)
-add_subdirectory(library/cpp/containers/flat_hash)
-add_subdirectory(library/cpp/json/yson)
-add_subdirectory(ydb/core/persqueue/partition_key_range)
-add_subdirectory(ydb/core/persqueue/writer)
-add_subdirectory(ydb/core/persqueue/events)
-add_subdirectory(ydb/core/wrappers)
-add_subdirectory(contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3)
-add_subdirectory(contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core)
-add_subdirectory(contrib/libs/curl)
-add_subdirectory(contrib/libs/nghttp2)
-add_subdirectory(contrib/restricted/aws/aws-c-common)
-add_subdirectory(contrib/restricted/aws/aws-c-event-stream)
-add_subdirectory(contrib/restricted/aws/aws-c-io)
-add_subdirectory(contrib/restricted/aws/aws-c-cal)
-add_subdirectory(contrib/restricted/aws/s2n)
-add_subdirectory(contrib/restricted/aws/aws-checksums)
-add_subdirectory(ydb/core/wrappers/ut_helpers)
-add_subdirectory(library/cpp/xml/document)
-add_subdirectory(library/cpp/xml/init)
-add_subdirectory(contrib/libs/libxml)
-add_subdirectory(library/cpp/string_utils/ztstrbuf)
-add_subdirectory(ydb/public/lib/deprecated/kicli)
-add_subdirectory(ydb/public/lib/deprecated/client)
-add_subdirectory(ydb/public/lib/value)
-add_subdirectory(ydb/library/yql/dq/actors/compute)
-add_subdirectory(ydb/library/yql/dq/tasks)
-add_subdirectory(ydb/services/lib/sharding)
-add_subdirectory(ydb/core/yq/libs/actors)
-add_subdirectory(ydb/core/yq/libs/actors/logging)
-add_subdirectory(ydb/core/yq/libs/checkpointing)
-add_subdirectory(ydb/core/yq/libs/checkpointing_common)
-add_subdirectory(ydb/core/yq/libs/graph_params/proto)
-add_subdirectory(ydb/library/yql/providers/dq/api/protos)
-add_subdirectory(ydb/library/yql/providers/common/metrics/protos)
-add_subdirectory(ydb/core/yq/libs/checkpoint_storage/events)
-add_subdirectory(ydb/core/yq/libs/events)
-add_subdirectory(ydb/library/yql/core/facade)
-add_subdirectory(ydb/library/yql/core/extract_predicate)
-add_subdirectory(ydb/library/yql/providers/common/udf_resolve)
-add_subdirectory(ydb/library/yql/providers/config)
-add_subdirectory(ydb/public/lib/yq)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_table)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/make_request)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_driver)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/common)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/grpc_connections)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/db_driver_state)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_endpoints)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/logger)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/plain_status)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/credentials)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/status)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/fatal_error_handlers)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/exceptions)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/thread_pool)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_stats)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_common_client)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_params)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_value)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/value_helpers)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_result)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_table/impl)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_table/query_stats)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/operation)
-add_subdirectory(ydb/library/yql/providers/common/db_id_async_resolver)
-add_subdirectory(ydb/library/yql/providers/dq/provider)
-add_subdirectory(library/cpp/threading/task_scheduler)
-add_subdirectory(ydb/public/lib/yson_value)
-add_subdirectory(ydb/library/yql/dq/transform)
-add_subdirectory(ydb/library/yql/providers/common/metrics)
-add_subdirectory(ydb/library/yql/providers/common/transform)
-add_subdirectory(ydb/library/yql/providers/dq/api/grpc)
-add_subdirectory(ydb/library/yql/providers/dq/backtrace)
-add_subdirectory(ydb/library/yql/utils/backtrace)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/Symbolize)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/PDB)
-add_subdirectory(ydb/library/yql/providers/dq/common)
-add_subdirectory(ydb/library/yql/providers/dq/config)
-add_subdirectory(ydb/library/yql/providers/dq/interface)
-add_subdirectory(ydb/library/yql/providers/dq/opt)
-add_subdirectory(ydb/library/yql/dq/opt)
-add_subdirectory(ydb/library/yql/providers/dq/planner)
-add_subdirectory(ydb/library/yql/providers/dq/mkql)
-add_subdirectory(ydb/core/yq/libs/checkpoint_storage/proto)
-add_subdirectory(ydb/library/yql/dq/state)
-add_subdirectory(ydb/library/yql/providers/pq/proto)
-add_subdirectory(ydb/library/yql/providers/pq/task_meta)
-add_subdirectory(ydb/core/yq/libs/db_id_async_resolver_impl)
-add_subdirectory(ydb/library/yql/providers/dq/actors)
-add_subdirectory(ydb/library/yql/core/services/mounts)
-add_subdirectory(ydb/library/yql/core/user_data)
-add_subdirectory(ydb/library/yql/utils/actors)
-add_subdirectory(ydb/library/yql/providers/common/token_accessor/client)
-add_subdirectory(library/cpp/threading/atomic)
-add_subdirectory(ydb/library/yql/providers/common/structured_token)
-add_subdirectory(ydb/library/yql/providers/common/token_accessor/grpc)
-add_subdirectory(ydb/library/yql/providers/solomon/proto)
-add_subdirectory(ydb/library/yql/utils/actor_log)
-add_subdirectory(ydb/library/yql/utils/failure_injector)
-add_subdirectory(ydb/library/yql/providers/dq/counters)
-add_subdirectory(ydb/library/yql/providers/dq/task_runner)
-add_subdirectory(ydb/library/yql/providers/dq/task_runner_actor)
-add_subdirectory(ydb/library/yql/dq/actors/task_runner)
-add_subdirectory(ydb/library/yql/providers/dq/runtime)
-add_subdirectory(ydb/library/yql/providers/dq/worker_manager)
-add_subdirectory(ydb/library/yql/providers/dq/worker_manager/interface)
-add_subdirectory(ydb/core/yq/libs/common)
-add_subdirectory(ydb/core/yq/libs/control_plane_storage/events)
-add_subdirectory(ydb/core/yq/libs/control_plane_storage/proto)
-add_subdirectory(ydb/core/yq/libs/quota_manager/events)
-add_subdirectory(ydb/core/yq/libs/control_plane_storage)
-add_subdirectory(library/cpp/protobuf/interop)
-add_subdirectory(ydb/core/yq/libs/config)
-add_subdirectory(ydb/core/yq/libs/control_plane_storage/internal)
-add_subdirectory(ydb/core/yq/libs/ydb)
-add_subdirectory(library/cpp/retry)
-add_subdirectory(library/cpp/retry/protos)
-add_subdirectory(ydb/library/security)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_coordination)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_common_client/impl)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_scheme)
-add_subdirectory(ydb/core/yq/libs/db_schema)
-add_subdirectory(ydb/core/yq/libs/shared_resources)
-add_subdirectory(ydb/core/yq/libs/shared_resources/interface)
-add_subdirectory(ydb/library/logger)
-add_subdirectory(ydb/core/yq/libs/private_client)
-add_subdirectory(ydb/core/yq/libs/result_formatter)
-add_subdirectory(ydb/core/yq/libs/signer)
-add_subdirectory(ydb/core/yq/libs/hmac)
-add_subdirectory(ydb/library/yql/providers/clickhouse/provider)
-add_subdirectory(ydb/library/yql/providers/clickhouse/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/clickhouse/proto)
-add_subdirectory(ydb/library/yql/providers/common/dq)
-add_subdirectory(ydb/library/yql/providers/common/http_gateway)
-add_subdirectory(ydb/library/yql/providers/common/comp_nodes)
-add_subdirectory(ydb/library/yql/providers/dq/provider/exec)
-add_subdirectory(ydb/library/yql/providers/pq/cm_client)
-add_subdirectory(ydb/library/yql/providers/pq/provider)
-add_subdirectory(ydb/library/yql/providers/pq/common)
-add_subdirectory(ydb/library/yql/providers/pq/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/s3/provider)
-add_subdirectory(ydb/library/yql/providers/s3/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/ydb/provider)
-add_subdirectory(ydb/public/lib/experimental)
-add_subdirectory(ydb/library/yql/providers/ydb/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/ydb/proto)
-add_subdirectory(ydb/core/yq/libs/control_plane_proxy)
-add_subdirectory(ydb/core/yq/libs/control_plane_proxy/events)
-add_subdirectory(ydb/library/folder_service)
-add_subdirectory(ydb/core/persqueue)
-add_subdirectory(ydb/core/persqueue/codecs)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core/impl)
-add_subdirectory(library/cpp/containers/disjoint_interval_tree)
-add_subdirectory(ydb/library/persqueue/obfuscate)
-add_subdirectory(ydb/library/persqueue/counter_time_keeper)
-add_subdirectory(ydb/core/ymq/actor)
-add_subdirectory(library/cpp/scheme)
-add_subdirectory(ydb/core/mind/address_classification)
-add_subdirectory(ydb/core/cms/console)
-add_subdirectory(library/cpp/actors/http)
-add_subdirectory(library/cpp/dns)
-add_subdirectory(ydb/core/cms/console/validators)
-add_subdirectory(ydb/core/mind)
-add_subdirectory(ydb/core/blobstorage/dsproxy/mock)
-add_subdirectory(ydb/core/mind/bscontroller)
-add_subdirectory(ydb/core/tx/tx_proxy)
-add_subdirectory(ydb/core/tx/balance_coverage)
-add_subdirectory(ydb/core/tx/scheme_cache)
-add_subdirectory(ydb/core/tx/schemeshard)
-add_subdirectory(ydb/core/blockstore/core)
-add_subdirectory(ydb/core/filestore/core)
-add_subdirectory(ydb/core/tx/scheme_board)
-add_subdirectory(ydb/core/tx/tx_allocator_client)
-add_subdirectory(ydb/core/tx/tx_allocator)
-add_subdirectory(ydb/core/sys_view/processor)
-add_subdirectory(ydb/core/kqp/counters)
-add_subdirectory(ydb/core/test_tablet)
-add_subdirectory(ydb/core/tx/replication/controller)
-add_subdirectory(ydb/core/tx/replication/ydb_proxy)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/credentials/login)
-add_subdirectory(ydb/core/ymq/base)
-add_subdirectory(ydb/core/ymq/proto)
-add_subdirectory(ydb/library/http_proxy/authorization)
-add_subdirectory(ydb/library/http_proxy/error)
-add_subdirectory(ydb/library/protobuf_printer)
-add_subdirectory(ydb/core/ymq/queues/common)
-add_subdirectory(ydb/core/ymq/queues/fifo)
-add_subdirectory(ydb/core/ymq/queues/std)
-add_subdirectory(ydb/services/persqueue_v1)
-add_subdirectory(ydb/core/kqp)
-add_subdirectory(ydb/core/kqp/compute_actor)
-add_subdirectory(ydb/core/kqp/executer)
-add_subdirectory(ydb/core/kqp/compile)
-add_subdirectory(ydb/core/kqp/rm)
-add_subdirectory(ydb/core/kqp/host)
-add_subdirectory(ydb/core/kqp/opt)
-add_subdirectory(ydb/core/kqp/opt/logical)
-add_subdirectory(ydb/core/kqp/opt/peephole)
-add_subdirectory(ydb/library/naming_conventions)
-add_subdirectory(ydb/core/kqp/opt/physical)
-add_subdirectory(ydb/core/kqp/opt/physical/effects)
-add_subdirectory(ydb/core/kqp/prepare)
-add_subdirectory(ydb/core/kqp/node)
-add_subdirectory(ydb/core/kqp/proxy)
-add_subdirectory(ydb/library/persqueue/tests)
-add_subdirectory(ydb/services/lib/actors)
-add_subdirectory(ydb/public/lib/jwt)
-add_subdirectory(ydb/services/persqueue_v1/actors)
-add_subdirectory(ydb/core/cms)
-add_subdirectory(ydb/core/driver_lib/base_utils)
-add_subdirectory(ydb/core/driver_lib/cli_config_base)
-add_subdirectory(ydb/core/driver_lib/cli_utils)
-add_subdirectory(ydb/core/driver_lib/cli_base)
-add_subdirectory(ydb/public/lib/ydb_cli/common)
-add_subdirectory(library/cpp/yaml/as)
-add_subdirectory(contrib/libs/yaml-cpp)
-add_subdirectory(ydb/public/lib/json_value)
-add_subdirectory(ydb/public/sdk/cpp/client/draft)
-add_subdirectory(ydb/library/yaml_config)
-add_subdirectory(ydb/core/http_proxy)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_datastreams)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs)
-add_subdirectory(library/cpp/streams/zstd)
-add_subdirectory(ydb/services/datastreams)
-add_subdirectory(ydb/services/ydb)
-add_subdirectory(ydb/core/client)
-add_subdirectory(ydb/core/kesus/proxy)
-add_subdirectory(ydb/core/mind/hive)
-add_subdirectory(ydb/core/quoter)
-add_subdirectory(library/cpp/containers/ring_buffer)
-add_subdirectory(ydb/core/security)
-add_subdirectory(ydb/core/tx/columnshard)
-add_subdirectory(ydb/core/tx/columnshard/engines)
-add_subdirectory(ydb/library/yql/public/udf/service/exception_policy)
-add_subdirectory(ydb/core/tx/coordinator)
-add_subdirectory(ydb/core/tx/long_tx_service)
-add_subdirectory(ydb/core/tx/mediator)
-add_subdirectory(ydb/core/tx/time_cast)
-add_subdirectory(ydb/core/tx/sequenceproxy)
-add_subdirectory(ydb/core/tx/sequenceproxy/public)
-add_subdirectory(ydb/core/tx/sequenceshard/public)
-add_subdirectory(ydb/core/tx/sequenceshard)
-add_subdirectory(ydb/core/viewer)
-add_subdirectory(library/cpp/archive)
-add_subdirectory(ydb/core/viewer/json)
-add_subdirectory(ydb/core/viewer/protos)
-add_subdirectory(ydb/core/ymq/http)
-add_subdirectory(ydb/core/yq/libs/init)
-add_subdirectory(ydb/core/yq/libs/audit)
-add_subdirectory(ydb/core/yq/libs/checkpoint_storage)
-add_subdirectory(contrib/libs/fmt)
-add_subdirectory(ydb/core/yq/libs/gateway)
-add_subdirectory(ydb/core/yq/libs/read_rule)
-add_subdirectory(ydb/core/yq/libs/tasks_packer)
-add_subdirectory(ydb/core/yq/libs/health)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_discovery)
-add_subdirectory(ydb/core/yq/libs/quota_manager)
-add_subdirectory(ydb/core/yq/libs/rate_limiter/control_plane_service)
-add_subdirectory(ydb/core/yq/libs/test_connection)
-add_subdirectory(ydb/core/yq/libs/test_connection/events)
-add_subdirectory(ydb/library/yql/providers/solomon/async_io)
-add_subdirectory(library/cpp/json/easy_parse)
-add_subdirectory(ydb/library/yql/dq/comp_nodes)
-add_subdirectory(ydb/library/yql/providers/clickhouse/actors)
-add_subdirectory(ydb/library/yql/providers/pq/async_io)
-add_subdirectory(ydb/library/yql/providers/pq/gateway/native)
-add_subdirectory(ydb/library/yql/providers/s3/actors)
-add_subdirectory(ydb/library/yql/providers/solomon/gateway)
-add_subdirectory(ydb/library/yql/providers/solomon/provider)
-add_subdirectory(ydb/library/yql/providers/solomon/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/ydb/actors)
-add_subdirectory(ydb/library/yql/providers/ydb/comp_nodes)
-add_subdirectory(ydb/core/yq/libs/logs)
-add_subdirectory(ydb/services/auth)
-add_subdirectory(ydb/services/cms)
-add_subdirectory(ydb/services/discovery)
-add_subdirectory(ydb/services/kesus)
-add_subdirectory(ydb/services/local_discovery)
-add_subdirectory(ydb/services/monitoring)
-add_subdirectory(ydb/services/persqueue_cluster_discovery)
-add_subdirectory(ydb/services/persqueue_cluster_discovery/cluster_ordering)
-add_subdirectory(ydb/services/rate_limiter)
-add_subdirectory(ydb/services/yq)
-add_subdirectory(ydb/core/yq/libs/audit/mock)
-add_subdirectory(ydb/core/yq/libs/audit/events)
-add_subdirectory(ydb/library/folder_service/mock)
-add_subdirectory(ydb/library/keys)
-add_subdirectory(ydb/library/yql/udfs/common/clickhouse/client)
-add_subdirectory(ydb/library/yql/udfs/common/datetime)
-add_subdirectory(ydb/library/yql/public/udf/support)
-add_subdirectory(library/cpp/timezone_conversion)
-add_subdirectory(ydb/library/yql/udfs/common/datetime2)
-add_subdirectory(ydb/library/yql/udfs/common/digest)
-add_subdirectory(contrib/libs/farmhash)
-add_subdirectory(contrib/libs/farmhash/arch/sse41)
-add_subdirectory(contrib/libs/farmhash/arch/sse42)
-add_subdirectory(contrib/libs/farmhash/arch/sse42_aesni)
-add_subdirectory(contrib/libs/highwayhash)
-add_subdirectory(contrib/libs/highwayhash/arch/avx2)
-add_subdirectory(contrib/libs/highwayhash/arch/sse41)
-add_subdirectory(library/cpp/digest/sfh)
-add_subdirectory(ydb/library/yql/udfs/common/histogram)
-add_subdirectory(library/cpp/histogram/adaptive)
-add_subdirectory(library/cpp/histogram/adaptive/protos)
-add_subdirectory(ydb/library/yql/udfs/common/hyperloglog)
-add_subdirectory(library/cpp/hyperloglog)
-add_subdirectory(ydb/library/yql/udfs/common/hyperscan)
-add_subdirectory(ydb/library/yql/udfs/common/ip_base)
-add_subdirectory(ydb/library/yql/udfs/common/ip_base/lib)
-add_subdirectory(ydb/library/yql/udfs/common/json)
-add_subdirectory(ydb/library/yql/udfs/common/json2)
-add_subdirectory(ydb/library/yql/minikql/jsonpath)
-add_subdirectory(library/cpp/regex/hyperscan)
-add_subdirectory(contrib/libs/hyperscan)
-add_subdirectory(contrib/libs/hyperscan/runtime_core2)
-add_subdirectory(contrib/libs/hyperscan/runtime_corei7)
-add_subdirectory(contrib/libs/hyperscan/runtime_avx2)
-add_subdirectory(contrib/libs/hyperscan/runtime_avx512)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/jsonpath)
-add_subdirectory(ydb/library/yql/udfs/common/math)
-add_subdirectory(ydb/library/yql/udfs/common/math/lib)
-add_subdirectory(ydb/library/yql/udfs/common/pire)
-add_subdirectory(library/cpp/regex/pire)
-add_subdirectory(ydb/library/yql/udfs/common/re2)
-add_subdirectory(ydb/library/yql/udfs/common/set)
-add_subdirectory(ydb/library/yql/udfs/common/stat)
-add_subdirectory(ydb/library/yql/udfs/common/stat/static)
-add_subdirectory(ydb/library/yql/udfs/common/string)
-add_subdirectory(ydb/library/yql/udfs/common/top)
-add_subdirectory(library/cpp/containers/top_keeper)
-add_subdirectory(ydb/library/yql/udfs/common/topfreq)
-add_subdirectory(ydb/library/yql/udfs/common/topfreq/static)
-add_subdirectory(ydb/library/yql/udfs/common/unicode_base)
-add_subdirectory(ydb/library/yql/udfs/common/unicode_base/lib)
-add_subdirectory(library/cpp/unicode/normalization)
-add_subdirectory(ydb/library/yql/udfs/common/url_base)
-add_subdirectory(ydb/library/yql/udfs/common/url_base/lib)
-add_subdirectory(library/cpp/tld)
-add_subdirectory(library/cpp/unicode/punycode)
-add_subdirectory(ydb/library/yql/udfs/common/yson2)
-add_subdirectory(ydb/library/yql/udfs/logs/dsv)
-add_subdirectory(ydb/apps/ydb)
-add_subdirectory(ydb/apps/ydb/commands)
-add_subdirectory(ydb/public/lib/ydb_cli/commands)
-add_subdirectory(library/cpp/histogram/hdr)
-add_subdirectory(contrib/libs/hdr_histogram)
-add_subdirectory(library/cpp/threading/local_executor)
-add_subdirectory(contrib/libs/tbb)
-add_subdirectory(ydb/library/backup)
-add_subdirectory(library/cpp/bucket_quoter)
-add_subdirectory(ydb/public/lib/ydb_cli/dump/util)
-add_subdirectory(ydb/public/lib/ydb_cli/dump)
-add_subdirectory(ydb/public/lib/ydb_cli/import)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_export)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_import)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_operation)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_public)
-add_subdirectory(ydb/core/testlib)
-add_subdirectory(library/cpp/testing/gmock_in_unittest)
-add_subdirectory(contrib/restricted/googletest/googlemock)
-add_subdirectory(contrib/restricted/googletest/googletest)
-add_subdirectory(library/cpp/testing/gtest_extensions)
-add_subdirectory(ydb/core/testlib/actors)
-add_subdirectory(library/cpp/actors/testlib)
-add_subdirectory(ydb/core/testlib/basics)
-add_subdirectory(ydb/core/yq/libs/mock)
-add_subdirectory(ydb/core/blockstore)
-add_subdirectory(ydb/core/filestore)
-add_subdirectory(ydb/core/grpc_caching)
-add_subdirectory(ydb/core/yql_testlib)
-add_subdirectory(ydb/core/actorlib_impl/ut)
-add_subdirectory(library/cpp/testing/unittest_main)
-add_subdirectory(library/cpp/terminate_handler)
-add_subdirectory(ydb/core/base/ut)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/lib)
-add_subdirectory(ydb/core/blobstorage/pdisk/mock)
-add_subdirectory(ydb/library/yql/public/udf/service/stub)
-add_subdirectory(ydb/core/blobstorage/ut_group)
-add_subdirectory(ydb/core/blobstorage/ut_mirror3of4)
-add_subdirectory(ydb/core/blobstorage/ut_vdisk)
-add_subdirectory(ydb/core/blobstorage/ut_vdisk/lib)
-add_subdirectory(ydb/core/blobstorage/ut_vdisk2)
-add_subdirectory(ydb/core/client/ut)
-add_subdirectory(ydb/core/tablet_flat/test/libs/rows)
-add_subdirectory(ydb/core/client/minikql_result_lib)
-add_subdirectory(ydb/core/cms/ut)
-add_subdirectory(ydb/core/cms/ut_sentinel)
-add_subdirectory(ydb/core/control/ut)
-add_subdirectory(ydb/core/engine/ut)
-add_subdirectory(library/cpp/malloc/jemalloc)
-add_subdirectory(contrib/libs/jemalloc)
-add_subdirectory(ydb/core/kqp/ut/common)
-add_subdirectory(ydb/core/tablet_flat/test/libs/table)
-add_subdirectory(ydb/core/tablet_flat/test/libs/table/model)
-add_subdirectory(ydb/core/erasure/ut)
-add_subdirectory(ydb/core/erasure/ut_rope)
-add_subdirectory(ydb/core/erasure/ut_perf)
-add_subdirectory(ydb/core/formats/ut)
-add_subdirectory(ydb/core/grpc_services/ut)
-add_subdirectory(ydb/core/grpc_streaming/ut)
-add_subdirectory(ydb/core/grpc_streaming/ut/grpc)
-add_subdirectory(ydb/core/health_check/ut)
-add_subdirectory(ydb/core/keyvalue/ut)
-add_subdirectory(ydb/core/kqp/ut)
-add_subdirectory(ydb/core/metering/ut)
-add_subdirectory(ydb/core/mind/ut)
-add_subdirectory(ydb/core/mind/ut_fat)
-add_subdirectory(ydb/core/persqueue/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils)
-add_subdirectory(library/cpp/threading/chunk_queue)
-add_subdirectory(ydb/core/persqueue/ut_slow)
-add_subdirectory(ydb/core/quoter/ut)
-add_subdirectory(ydb/core/quoter/quoter_service_bandwidth_test)
-add_subdirectory(ydb/core/scheme/ut)
-add_subdirectory(ydb/core/security/ut)
-add_subdirectory(ydb/core/sys_view/ut_kqp)
-add_subdirectory(ydb/core/tablet/ut)
-add_subdirectory(ydb/core/tablet_flat/ut)
-add_subdirectory(ydb/core/tablet_flat/test/libs/exec)
-add_subdirectory(ydb/core/tablet_flat/ut_large)
-add_subdirectory(ydb/core/util/btree_benchmark)
-add_subdirectory(library/cpp/lfalloc)
-add_subdirectory(library/cpp/testing/benchmark/main)
-add_subdirectory(library/cpp/testing/benchmark)
-add_subdirectory(library/cpp/linear_regression)
-add_subdirectory(library/cpp/accurate_accumulate)
-add_subdirectory(library/cpp/threading/skip_list)
-add_subdirectory(ydb/core/util/ut)
-add_subdirectory(ydb/core/viewer/ut)
-add_subdirectory(ydb/core/wrappers/ut)
-add_subdirectory(ydb/core/ydb_convert/ut)
-add_subdirectory(ydb/core/ymq/ut)
-add_subdirectory(ydb/library/aclib/ut)
-add_subdirectory(ydb/library/backup/ut)
-add_subdirectory(ydb/library/binary_json/ut)
-add_subdirectory(ydb/library/dynumber/ut)
-add_subdirectory(ydb/library/keys/ut)
-add_subdirectory(ydb/library/login/ut)
-add_subdirectory(ydb/library/mkql_proto/ut)
-add_subdirectory(ydb/library/naming_conventions/ut)
-add_subdirectory(ydb/library/pretty_types_print/wilson)
-add_subdirectory(ydb/library/protobuf_printer/ut)
-add_subdirectory(ydb/library/schlab/ut)
-add_subdirectory(ydb/library/security/ut)
-add_subdirectory(ydb/public/lib/idx_test)
-add_subdirectory(ydb/services/cms/ut)
-add_subdirectory(ydb/services/datastreams/ut)
-add_subdirectory(ydb/services/persqueue_cluster_discovery/ut)
-add_subdirectory(ydb/services/persqueue_v1/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_topic)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_topic/impl)
-add_subdirectory(ydb/services/persqueue_v1/ut/new_schemecache_ut)
-add_subdirectory(ydb/services/rate_limiter/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_rate_limiter)
-add_subdirectory(ydb/services/ydb/index_ut)
-add_subdirectory(ydb/services/ydb/sdk_credprovider_ut)
-add_subdirectory(ydb/services/ydb/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_extension)
-add_subdirectory(ydb/services/yq/ut_integration)
-add_subdirectory(ydb/library/yql/minikql/jsonpath/benchmark)
-add_subdirectory(ydb/library/yql/minikql/perf/alloc)
-add_subdirectory(ydb/library/yql/minikql/perf/mt_param)
-add_subdirectory(ydb/library/yql/minikql/perf/packer)
-add_subdirectory(ydb/library/yql/minikql/perf/param)
-add_subdirectory(ydb/library/yql/minikql/perf/presort)
-add_subdirectory(library/cpp/presort)
-add_subdirectory(ydb/library/yql/sql/v1/perf)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_blob_depot)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_donor)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_group_reconfiguration)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_osiris)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_replication)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_scrub)
-add_subdirectory(ydb/core/blobstorage/ut_pdiskfit/lib)
-add_subdirectory(ydb/core/blobstorage/backpressure/ut)
-add_subdirectory(ydb/core/blobstorage/backpressure/ut_client)
-add_subdirectory(ydb/core/blobstorage/base/ut)
-add_subdirectory(ydb/core/blobstorage/crypto/ut)
-add_subdirectory(ydb/core/blobstorage/dsproxy/ut)
-add_subdirectory(ydb/core/blobstorage/dsproxy/ut_fat)
-add_subdirectory(ydb/core/blobstorage/groupinfo/ut)
-add_subdirectory(ydb/core/blobstorage/incrhuge/ut)
-add_subdirectory(ydb/core/blobstorage/nodewarden/ut)
-add_subdirectory(ydb/core/blobstorage/nodewarden/ut_sequence)
-add_subdirectory(ydb/core/blobstorage/pdisk/ut)
-add_subdirectory(ydb/core/blobstorage/storagepoolmon/ut)
-add_subdirectory(ydb/library/schlab/mon/test)
-add_subdirectory(ydb/library/schlab/mon/static)
-add_subdirectory(ydb/library/schlab/mon/static/css)
-add_subdirectory(ydb/library/schlab/mon/static/js)
-add_subdirectory(ydb/core/tx/balance_coverage/ut)
-add_subdirectory(ydb/core/tx/columnshard/ut)
-add_subdirectory(ydb/core/tx/coordinator/ut)
-add_subdirectory(ydb/core/tx/datashard/ut_background_compaction)
-add_subdirectory(ydb/core/tx/datashard/ut_build_index)
-add_subdirectory(ydb/core/tx/datashard/ut_change_collector)
-add_subdirectory(ydb/core/tx/datashard/ut_change_exchange)
-add_subdirectory(ydb/core/tx/datashard/ut_compaction)
-add_subdirectory(ydb/core/tx/datashard/ut_erase_rows)
-add_subdirectory(ydb/core/tx/datashard/ut_followers)
-add_subdirectory(ydb/core/tx/datashard/ut_init)
-add_subdirectory(ydb/core/tx/datashard/ut_keys)
-add_subdirectory(ydb/core/tx/datashard/ut_kqp)
-add_subdirectory(ydb/core/tx/datashard/ut_kqp_errors)
-add_subdirectory(ydb/core/tx/datashard/ut_kqp_scan)
-add_subdirectory(ydb/core/tx/datashard/ut_locks)
-add_subdirectory(ydb/core/tx/datashard/ut_minikql)
-add_subdirectory(ydb/core/tx/datashard/ut_minstep)
-add_subdirectory(ydb/core/tx/datashard/ut_order)
-add_subdirectory(ydb/core/tx/datashard/ut_range_avl_tree)
-add_subdirectory(ydb/core/tx/datashard/ut_range_ops)
-add_subdirectory(ydb/core/tx/datashard/ut_range_treap)
-add_subdirectory(ydb/core/tx/datashard/ut_read_iterator)
-add_subdirectory(ydb/core/tx/datashard/ut_read_table)
-add_subdirectory(ydb/core/tx/datashard/ut_reassign)
-add_subdirectory(ydb/core/tx/datashard/ut_replication)
-add_subdirectory(ydb/core/tx/datashard/ut_rs)
-add_subdirectory(ydb/core/tx/datashard/ut_snapshot)
-add_subdirectory(ydb/core/tx/datashard/ut_stats)
-add_subdirectory(ydb/core/tx/datashard/ut_upload_rows)
-add_subdirectory(ydb/core/tx/long_tx_service/ut)
-add_subdirectory(ydb/core/tx/long_tx_service/public/ut)
-add_subdirectory(ydb/core/tx/scheme_board/ut_cache)
-add_subdirectory(ydb/core/tx/schemeshard/ut_helpers)
-add_subdirectory(ydb/core/tx/scheme_board/ut_double_indexed)
-add_subdirectory(ydb/core/tx/scheme_board/ut_monitoring)
-add_subdirectory(ydb/core/tx/scheme_board/ut_populator)
-add_subdirectory(ydb/core/tx/scheme_board/ut_replica)
-add_subdirectory(ydb/core/tx/scheme_board/ut_subscriber)
-add_subdirectory(ydb/core/tx/schemeshard/ut_async_index)
-add_subdirectory(ydb/core/tx/schemeshard/ut_backup)
-add_subdirectory(ydb/core/tx/schemeshard/ut_base)
-add_subdirectory(ydb/core/tx/schemeshard/ut_base_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_bsvolume)
-add_subdirectory(ydb/core/tx/schemeshard/ut_bsvolume_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_cdc_stream)
-add_subdirectory(ydb/core/tx/schemeshard/ut_cdc_stream_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_compaction)
-add_subdirectory(ydb/core/tx/schemeshard/ut_export)
-add_subdirectory(ydb/core/tx/schemeshard/ut_export_reboots_s3)
-add_subdirectory(ydb/core/tx/schemeshard/ut_extsubdomain)
-add_subdirectory(ydb/core/tx/schemeshard/ut_extsubdomain_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_filestore_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_index_build)
-add_subdirectory(ydb/core/tx/schemeshard/ut_index_build_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_login)
-add_subdirectory(ydb/core/tx/schemeshard/ut_move)
-add_subdirectory(ydb/core/tx/schemeshard/ut_move_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_olap)
-add_subdirectory(ydb/core/tx/schemeshard/ut_olap_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_pq)
-add_subdirectory(ydb/core/tx/schemeshard/ut_pq_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_replication)
-add_subdirectory(ydb/core/tx/schemeshard/ut_replication_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_restore)
-add_subdirectory(ydb/core/tx/schemeshard/ut_rtmr)
-add_subdirectory(ydb/core/tx/schemeshard/ut_rtmr_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_ru_calculator)
-add_subdirectory(ydb/core/tx/schemeshard/ut_sequence)
-add_subdirectory(ydb/core/tx/schemeshard/ut_sequence_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_serverless)
-add_subdirectory(ydb/core/tx/schemeshard/ut_stats)
-add_subdirectory(ydb/core/tx/schemeshard/ut_split_merge)
-add_subdirectory(ydb/core/tx/schemeshard/ut_split_merge_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_subdomain)
-add_subdirectory(ydb/core/tx/schemeshard/ut_subdomain_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_ttl)
-add_subdirectory(ydb/core/tx/schemeshard/ut_user_attributes)
-add_subdirectory(ydb/core/tx/schemeshard/ut_user_attributes_reboots)
-add_subdirectory(ydb/core/tx/sequenceproxy/ut)
-add_subdirectory(ydb/core/tx/sequenceshard/ut)
-add_subdirectory(ydb/core/tx/time_cast/ut)
-add_subdirectory(ydb/core/tx/tx_allocator/ut)
-add_subdirectory(ydb/core/tx/tx_allocator_client/ut)
-add_subdirectory(ydb/core/tx/tx_proxy/ut_base_tenant)
-add_subdirectory(ydb/core/tx/tx_proxy/ut_encrypted_storage)
-add_subdirectory(ydb/core/tx/tx_proxy/ut_ext_tenant)
-add_subdirectory(ydb/core/tx/tx_proxy/ut_storage_tenant)
-add_subdirectory(ydb/core/blobstorage/vdisk/anubis_osiris/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/common/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/defrag/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/huge/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/test)
-add_subdirectory(ydb/core/blobstorage/vdisk/hullop/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/ingress/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/query/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/repl/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/skeleton/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/syncer/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/synclog/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/barriers/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/base/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/compstrat/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/fresh/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/generic/ut)
-add_subdirectory(ydb/core/sys_view/partition_stats/ut)
-add_subdirectory(ydb/core/sys_view/query_stats/ut)
-add_subdirectory(ydb/core/sys_view/service/ut)
-add_subdirectory(ydb/core/mind/address_classification/ut)
-add_subdirectory(ydb/core/mind/bscontroller/ut)
-add_subdirectory(ydb/core/mind/bscontroller/ut_bscontroller)
-add_subdirectory(ydb/core/mind/bscontroller/ut_selfheal)
-add_subdirectory(ydb/core/mind/hive/ut)
-add_subdirectory(ydb/core/kqp/ut/fat)
-add_subdirectory(ydb/core/kqp/rm/ut)
-add_subdirectory(ydb/core/kqp/proxy/ut)
-add_subdirectory(ydb/core/kqp/runtime/ut)
-add_subdirectory(ydb/core/kqp/executer/ut)
-add_subdirectory(ydb/core/kqp/node/ut)
-add_subdirectory(ydb/core/kqp/provider/ut)
-add_subdirectory(ydb/core/cms/console/ut)
-add_subdirectory(ydb/core/cms/console/validators/ut)
-add_subdirectory(ydb/core/client/metadata/ut)
-add_subdirectory(ydb/core/client/minikql_compile/ut)
-add_subdirectory(ydb/core/client/minikql_result_lib/ut)
-add_subdirectory(ydb/core/client/server/ut)
-add_subdirectory(ydb/core/tx/columnshard/engines/ut)
-add_subdirectory(ydb/core/tx/sequenceshard/public/ut)
-add_subdirectory(ydb/core/testlib/actors/ut)
-add_subdirectory(ydb/core/kesus/proxy/ut)
-add_subdirectory(ydb/core/kesus/tablet/ut)
-add_subdirectory(ydb/core/kesus/tablet/quoter_performance_test)
-add_subdirectory(ydb/core/ymq/actor/ut)
-add_subdirectory(ydb/core/ymq/actor/yc_search_ut)
-add_subdirectory(ydb/core/ymq/base/ut)
-add_subdirectory(ydb/core/ymq/client/bin)
-add_subdirectory(ydb/core/ymq/client/cpp)
-add_subdirectory(ydb/core/ymq/http/ut)
-add_subdirectory(ydb/core/driver_lib/run/ut)
-add_subdirectory(ydb/core/yq/libs/pretty_printers)
-add_subdirectory(ydb/library/http_proxy/authorization/ut)
-add_subdirectory(ydb/library/persqueue/topic_parser/ut)
-add_subdirectory(ydb/library/yql/ast/ut)
-add_subdirectory(ydb/library/yql/core/file_storage/ut)
-add_subdirectory(ydb/library/yql/core/file_storage/http_download)
-add_subdirectory(ydb/library/yql/core/file_storage/http_download/proto)
-add_subdirectory(ydb/library/yql/core/issue/ut)
-add_subdirectory(ydb/library/yql/minikql/ut)
-add_subdirectory(ydb/library/yql/public/udf/service/terminate_policy)
-add_subdirectory(ydb/library/yql/utils/ut)
-add_subdirectory(ydb/library/yql/utils/threading)
-add_subdirectory(ydb/library/yql/utils/actors/ut)
-add_subdirectory(ydb/library/yql/utils/failure_injector/ut)
-add_subdirectory(ydb/library/yql/utils/log/ut)
-add_subdirectory(ydb/public/lib/idx_test/ut)
-add_subdirectory(ydb/public/lib/json_value/ut)
-add_subdirectory(ydb/public/lib/operation_id/ut)
-add_subdirectory(ydb/public/lib/validation/ut)
-add_subdirectory(ydb/public/lib/validation/ut/protos)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_driver/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_value/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_result/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_params/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_coordination/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_endpoints/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/draft/ut)
-add_subdirectory(ydb/library/yql/minikql/benchmark/pack_num)
-add_subdirectory(library/cpp/balloc)
-add_subdirectory(library/cpp/balloc/lib)
-add_subdirectory(library/cpp/balloc/setup)
-add_subdirectory(ydb/core/tablet_flat/test/tool/surg)
-add_subdirectory(ydb/core/tablet_flat/test/tool/perf)
-add_subdirectory(ydb/core/tx/replication/ydb_proxy/ut)
-add_subdirectory(ydb/core/yq/libs/checkpointing/ut)
-add_subdirectory(ydb/core/yq/libs/checkpointing/events)
-add_subdirectory(ydb/core/yq/libs/common/ut)
-add_subdirectory(ydb/core/yq/libs/control_plane_proxy/ut)
-add_subdirectory(ydb/core/yq/libs/hmac/ut)
-add_subdirectory(ydb/core/yq/libs/result_formatter/ut)
-add_subdirectory(ydb/core/yq/libs/signer/ut)
-add_subdirectory(ydb/core/yq/libs/test_connection/ut)
-add_subdirectory(ydb/library/yql/dq/actors/compute/ut)
-add_subdirectory(ydb/library/yql/dq/runtime/ut)
-add_subdirectory(ydb/library/yql/dq/state/ut)
-add_subdirectory(ydb/library/yql/parser/pg_catalog/ut)
-add_subdirectory(ydb/library/yql/parser/lexer_common/ut)
-add_subdirectory(ydb/library/yql/providers/common/schema)
-add_subdirectory(ydb/library/yql/providers/common/schema/skiff)
-add_subdirectory(ydb/library/yql/providers/common/ut_helpers)
-add_subdirectory(ydb/library/yql/providers/s3/compressors)
-add_subdirectory(ydb/library/yql/providers/s3/path_generator)
-add_subdirectory(ydb/library/yql/providers/function/common)
-add_subdirectory(ydb/library/yql/providers/function/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/function/gateway)
-add_subdirectory(ydb/library/yql/providers/function/proto)
-add_subdirectory(ydb/library/yql/providers/function/provider)
-add_subdirectory(ydb/library/yql/public/decimal/ut)
-add_subdirectory(ydb/library/yql/public/issue/ut)
-add_subdirectory(ydb/library/yql/public/udf/ut)
-add_subdirectory(ydb/public/lib/deprecated/kicli/ut)
-add_subdirectory(ydb/public/lib/ydb_cli/common/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/extensions/solomon_stats)
-add_subdirectory(ydb/public/sdk/cpp/client/extensions/discovery_mutator)
-add_subdirectory(ydb/public/sdk/cpp/examples/basic_example)
-add_subdirectory(ydb/public/sdk/cpp/examples/bulk_upsert_simple)
-add_subdirectory(ydb/public/sdk/cpp/examples/pagination)
-add_subdirectory(ydb/public/sdk/cpp/examples/secondary_index)
-add_subdirectory(ydb/public/sdk/cpp/examples/secondary_index_builtin)
-add_subdirectory(ydb/public/sdk/cpp/examples/ttl)
-add_subdirectory(ydb/library/yql/providers/common/codec/ut)
-add_subdirectory(ydb/library/yql/providers/common/http_gateway/mock)
-add_subdirectory(ydb/library/yql/providers/common/structured_token/ut)
-add_subdirectory(ydb/library/yql/providers/pq/gateway/dummy)
-add_subdirectory(ydb/library/yql/providers/s3/path_generator/ut)
-add_subdirectory(ydb/library/yql/udfs/common/stat/ut)
-add_subdirectory(ydb/library/yql/udfs/common/topfreq/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/extensions/discovery_mutator/ut)
diff --git a/CMakeLists.linux.txt b/CMakeLists.linux.txt
index 1e8c6079cc..cd6d87e652 100644
--- a/CMakeLists.linux.txt
+++ b/CMakeLists.linux.txt
@@ -6,1365 +6,9 @@
# original buildsystem will not be accepted.
-add_subdirectory(tools/rescompiler/bin)
-add_subdirectory(contrib/libs/cxxsupp)
-add_subdirectory(contrib/libs/cxxsupp/libcxx)
-add_subdirectory(contrib/libs/cxxsupp/libcxxabi-parts)
-add_subdirectory(contrib/libs/cxxsupp/libcxxrt)
-add_subdirectory(contrib/libs/libunwind)
-add_subdirectory(contrib/libs/cxxsupp/builtins)
+add_subdirectory(tools)
+add_subdirectory(contrib)
add_subdirectory(util)
-add_subdirectory(util/charset)
-add_subdirectory(contrib/libs/double-conversion)
-add_subdirectory(contrib/libs/libc_compat)
-add_subdirectory(library/cpp/malloc/tcmalloc)
-add_subdirectory(library/cpp/malloc/api)
-add_subdirectory(contrib/libs/tcmalloc/malloc_extension)
-add_subdirectory(contrib/restricted/abseil-cpp)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/algorithm)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/raw_logging)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/log_severity)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/spinlock_wait)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/low_level_alloc)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/scoped_set_env)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/strerror)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/base/internal/throw_delegate)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/city)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/container)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/container/internal/absl_hashtablez_sampler)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/stacktrace)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/symbolize)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/demangle)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/numeric)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/absl_strings_internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/profiling/internal/exponential_biased)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/synchronization)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/synchronization/internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/time)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/time/civil_time)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/time/time_zone)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/container/internal/raw_hash_set)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/hash)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/hash/internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types/bad_optional_access)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types/bad_variant_access)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types/internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/failure_signal_handler)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/leak_check)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/debugging/leak_check_disable)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/commandlineflag)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/commandlineflag)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/flag)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/program_name)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/marshalling)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/str_format)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/usage_config)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/private_handle_accessor)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/reflection)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/cord)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/functional)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/absl_cord_internal)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/cordz_functions)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/cordz_handle)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/cordz_info)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/utility)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/internal/usage)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/parse)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/flags/usage)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/memory)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/meta)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/profiling/internal/periodic_sampler)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/absl_random_distributions)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/absl_random_internal_distribution_test_util)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/pool_urbg)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen_detect)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen_hwaes)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen_round_keys)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/randen_slow)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/internal/seed_material)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/seed_gen_exception)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/random/seed_sequences)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/status)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/status/statusor)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/strings/internal/cordz_sample_token)
-add_subdirectory(contrib/restricted/abseil-cpp/absl/types/bad_any_cast)
-add_subdirectory(contrib/libs/tcmalloc/no_percpu_cache)
-add_subdirectory(library/cpp/cpuid_check)
-add_subdirectory(library/cpp/resource)
-add_subdirectory(library/cpp/blockcodecs/core)
-add_subdirectory(library/cpp/blockcodecs/codecs/zstd)
-add_subdirectory(contrib/libs/zstd)
-add_subdirectory(contrib/libs/xxhash)
-add_subdirectory(ydb/apps/ydbd)
-add_subdirectory(contrib/libs/tcmalloc)
-add_subdirectory(ydb/library/yql/sql/pg_dummy)
-add_subdirectory(ydb/library/yql/ast)
-add_subdirectory(library/cpp/colorizer)
-add_subdirectory(library/cpp/containers/sorted_vector)
-add_subdirectory(library/cpp/containers/stack_vector)
-add_subdirectory(library/cpp/deprecated/enum_codegen)
-add_subdirectory(library/cpp/enumbitset)
-add_subdirectory(library/cpp/string_utils/levenshtein_diff)
-add_subdirectory(util/draft)
-add_subdirectory(library/cpp/yson)
-add_subdirectory(library/cpp/yt/misc)
-add_subdirectory(library/cpp/yt/exception)
-add_subdirectory(library/cpp/yt/yson)
-add_subdirectory(library/cpp/yt/yson_string)
-add_subdirectory(library/cpp/yt/assert)
-add_subdirectory(library/cpp/yt/coding)
-add_subdirectory(library/cpp/yt/string)
-add_subdirectory(library/cpp/yt/small_containers)
-add_subdirectory(library/cpp/yt/malloc)
-add_subdirectory(library/cpp/yt/memory)
-add_subdirectory(library/cpp/ytalloc/api)
-add_subdirectory(ydb/library/yql/public/udf)
-add_subdirectory(ydb/library/yql/public/decimal)
-add_subdirectory(ydb/library/yql/public/types)
-add_subdirectory(contrib/libs/protobuf)
-add_subdirectory(contrib/tools/protoc/bin)
-add_subdirectory(contrib/libs/protoc)
-add_subdirectory(contrib/tools/protoc/plugins/cpp_styleguide)
-add_subdirectory(library/cpp/deprecated/atomic)
-add_subdirectory(ydb/library/yql/utils)
-add_subdirectory(library/cpp/digest/md5)
-add_subdirectory(contrib/libs/nayuki_md5)
-add_subdirectory(library/cpp/string_utils/base64)
-add_subdirectory(contrib/libs/base64/avx2)
-add_subdirectory(contrib/libs/base64/ssse3)
-add_subdirectory(contrib/libs/base64/neon32)
-add_subdirectory(contrib/libs/base64/neon64)
-add_subdirectory(contrib/libs/base64/plain32)
-add_subdirectory(contrib/libs/base64/plain64)
-add_subdirectory(library/cpp/messagebus)
-add_subdirectory(contrib/libs/sparsehash)
-add_subdirectory(library/cpp/codecs)
-add_subdirectory(library/cpp/bit_io)
-add_subdirectory(library/cpp/deprecated/accessors)
-add_subdirectory(library/cpp/blockcodecs)
-add_subdirectory(library/cpp/blockcodecs/codecs/brotli)
-add_subdirectory(contrib/libs/brotli/enc)
-add_subdirectory(contrib/libs/brotli/common)
-add_subdirectory(contrib/libs/brotli/dec)
-add_subdirectory(library/cpp/blockcodecs/codecs/bzip)
-add_subdirectory(contrib/libs/libbz2)
-add_subdirectory(library/cpp/blockcodecs/codecs/fastlz)
-add_subdirectory(contrib/libs/fastlz)
-add_subdirectory(library/cpp/blockcodecs/codecs/legacy_zstd06)
-add_subdirectory(contrib/libs/zstd06)
-add_subdirectory(library/cpp/blockcodecs/codecs/lz4)
-add_subdirectory(contrib/libs/lz4)
-add_subdirectory(contrib/libs/lz4/generated)
-add_subdirectory(library/cpp/blockcodecs/codecs/lzma)
-add_subdirectory(contrib/libs/lzmasdk)
-add_subdirectory(library/cpp/blockcodecs/codecs/snappy)
-add_subdirectory(contrib/libs/snappy)
-add_subdirectory(library/cpp/blockcodecs/codecs/zlib)
-add_subdirectory(library/cpp/codecs/greedy_dict)
-add_subdirectory(library/cpp/containers/comptrie)
-add_subdirectory(library/cpp/packers)
-add_subdirectory(library/cpp/containers/compact_vector)
-add_subdirectory(library/cpp/on_disk/chunks)
-add_subdirectory(library/cpp/string_utils/relaxed_escaper)
-add_subdirectory(library/cpp/comptable)
-add_subdirectory(library/cpp/compproto)
-add_subdirectory(library/cpp/getopt/small)
-add_subdirectory(library/cpp/lwtrace)
-add_subdirectory(library/cpp/lwtrace/protos)
-add_subdirectory(library/cpp/messagebus/actor)
-add_subdirectory(library/cpp/messagebus/config)
-add_subdirectory(library/cpp/getopt)
-add_subdirectory(library/cpp/svnversion)
-add_subdirectory(library/cpp/build_info)
-add_subdirectory(library/cpp/messagebus/monitoring)
-add_subdirectory(library/cpp/monlib/encode/legacy_protobuf/protos)
-add_subdirectory(library/cpp/messagebus/scheduler)
-add_subdirectory(library/cpp/threading/future)
-add_subdirectory(library/cpp/string_utils/indent_text)
-add_subdirectory(library/cpp/string_utils/quote)
-add_subdirectory(ydb/library/yql/core/issue)
-add_subdirectory(ydb/library/yql/public/issue)
-add_subdirectory(ydb/public/api/protos)
-add_subdirectory(ydb/public/api/protos/annotations)
-add_subdirectory(tools/enum_parser/enum_serialization_runtime)
-add_subdirectory(ydb/public/lib/validation)
-add_subdirectory(tools/enum_parser/enum_parser/bin)
-add_subdirectory(tools/enum_parser/parse_enum)
-add_subdirectory(library/cpp/cppparser)
-add_subdirectory(ydb/library/yql/public/issue/protos)
-add_subdirectory(ydb/library/yql/core/issue/protos)
-add_subdirectory(ydb/library/yql/parser/pg_catalog)
-add_subdirectory(ydb/library/yql/sql/settings)
-add_subdirectory(library/cpp/deprecated/split)
-add_subdirectory(library/cpp/deprecated/kmp)
-add_subdirectory(ydb/library/yql/providers/common/codec)
-add_subdirectory(ydb/library/yql/minikql)
-add_subdirectory(contrib/libs/apache/arrow)
-add_subdirectory(contrib/libs/apache/orc)
-add_subdirectory(contrib/libs/re2)
-add_subdirectory(contrib/libs/utf8proc)
-add_subdirectory(contrib/restricted/boost)
-add_subdirectory(contrib/restricted/fast_float)
-add_subdirectory(contrib/restricted/thrift)
-add_subdirectory(contrib/libs/libevent)
-add_subdirectory(contrib/libs/libevent/event_core)
-add_subdirectory(contrib/libs/libevent/event_extra)
-add_subdirectory(contrib/libs/libevent/event_openssl)
-add_subdirectory(contrib/libs/libevent/event_thread)
-add_subdirectory(contrib/restricted/boost/libs/system)
-add_subdirectory(contrib/restricted/boost/libs/thread)
-add_subdirectory(contrib/restricted/boost/libs/chrono)
-add_subdirectory(contrib/restricted/uriparser)
-add_subdirectory(contrib/libs/cctz/tzdata)
-add_subdirectory(contrib/libs/cctz)
-add_subdirectory(library/cpp/actors/util)
-add_subdirectory(library/cpp/monlib/dynamic_counters)
-add_subdirectory(library/cpp/monlib/encode/json)
-add_subdirectory(library/cpp/monlib/encode)
-add_subdirectory(library/cpp/monlib/metrics)
-add_subdirectory(library/cpp/monlib/encode/buffered)
-add_subdirectory(library/cpp/monlib/exception)
-add_subdirectory(library/cpp/json)
-add_subdirectory(contrib/libs/rapidjson)
-add_subdirectory(library/cpp/json/common)
-add_subdirectory(library/cpp/json/fast_sax)
-add_subdirectory(library/cpp/json/writer)
-add_subdirectory(library/cpp/monlib/encode/spack)
-add_subdirectory(library/cpp/monlib/encode/prometheus)
-add_subdirectory(library/cpp/monlib/service/pages)
-add_subdirectory(library/cpp/monlib/service)
-add_subdirectory(library/cpp/coroutine/engine)
-add_subdirectory(library/cpp/containers/intrusive_rb_tree)
-add_subdirectory(library/cpp/coroutine/listener)
-add_subdirectory(library/cpp/http/fetch)
-add_subdirectory(library/cpp/charset)
-add_subdirectory(library/cpp/http/misc)
-add_subdirectory(library/cpp/case_insensitive_string)
-add_subdirectory(library/cpp/digest/murmur)
-add_subdirectory(library/cpp/cgiparam)
-add_subdirectory(library/cpp/iterator)
-add_subdirectory(library/cpp/string_utils/scan)
-add_subdirectory(library/cpp/digest/lower_case)
-add_subdirectory(library/cpp/logger)
-add_subdirectory(library/cpp/mime/types)
-add_subdirectory(library/cpp/uri)
-add_subdirectory(library/cpp/http/server)
-add_subdirectory(library/cpp/http/io)
-add_subdirectory(library/cpp/streams/brotli)
-add_subdirectory(library/cpp/streams/bzip2)
-add_subdirectory(library/cpp/streams/lzma)
-add_subdirectory(library/cpp/threading/equeue)
-add_subdirectory(library/cpp/monlib/encode/text)
-add_subdirectory(library/cpp/threading/light_rw_lock)
-add_subdirectory(library/cpp/packedtypes)
-add_subdirectory(library/cpp/streams/zc_memory_input)
-add_subdirectory(ydb/library/binary_json)
-add_subdirectory(ydb/library/yql/minikql/dom)
-add_subdirectory(library/cpp/yson_pull)
-add_subdirectory(ydb/library/dynumber)
-add_subdirectory(ydb/library/yql/public/udf/tz)
-add_subdirectory(ydb/library/yql/minikql/computation)
-add_subdirectory(library/cpp/random_provider)
-add_subdirectory(library/cpp/time_provider)
-add_subdirectory(ydb/library/yql/minikql/arrow)
-add_subdirectory(ydb/library/yql/minikql/codegen)
-add_subdirectory(contrib/libs/llvm12/lib/IR)
-add_subdirectory(contrib/libs/llvm12)
-add_subdirectory(contrib/libs/llvm12/include)
-add_subdirectory(contrib/libs/llvm12/utils/TableGen)
-add_subdirectory(contrib/libs/llvm12/lib/Demangle)
-add_subdirectory(contrib/libs/llvm12/lib/Support)
-add_subdirectory(contrib/libs/llvm12/lib/TableGen)
-add_subdirectory(contrib/libs/llvm12/utils/TableGen/GlobalISel)
-add_subdirectory(contrib/libs/llvm12/lib/BinaryFormat)
-add_subdirectory(contrib/libs/llvm12/lib/Remarks)
-add_subdirectory(contrib/libs/llvm12/lib/Bitstream/Reader)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/MCJIT)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/RuntimeDyld)
-add_subdirectory(contrib/libs/llvm12/lib/MC)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/CodeView)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/MSF)
-add_subdirectory(contrib/libs/llvm12/lib/Object)
-add_subdirectory(contrib/libs/llvm12/lib/Bitcode/Reader)
-add_subdirectory(contrib/libs/llvm12/lib/MC/MCParser)
-add_subdirectory(contrib/libs/llvm12/lib/TextAPI/MachO)
-add_subdirectory(contrib/libs/llvm12/lib/Target)
-add_subdirectory(contrib/libs/llvm12/lib/Analysis)
-add_subdirectory(contrib/libs/llvm12/lib/ProfileData)
-add_subdirectory(contrib/libs/llvm12/lib/Linker)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Utils)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen)
-add_subdirectory(contrib/libs/llvm12/lib/Bitcode/Writer)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Scalar)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/AggressiveInstCombine)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/InstCombine)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/AsmPrinter)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/DWARF)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/GlobalISel)
-add_subdirectory(contrib/libs/llvm12/lib/CodeGen/SelectionDAG)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/MCTargetDesc)
-add_subdirectory(contrib/libs/llvm12/lib/MC/MCDisassembler)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/TargetInfo)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/CFGuard)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/AsmParser)
-add_subdirectory(contrib/libs/llvm12/lib/Target/X86/Disassembler)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/IPO)
-add_subdirectory(contrib/libs/llvm12/lib/Frontend/OpenMP)
-add_subdirectory(contrib/libs/llvm12/lib/IRReader)
-add_subdirectory(contrib/libs/llvm12/lib/AsmParser)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Instrumentation)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/Vectorize)
-add_subdirectory(contrib/libs/llvm12/lib/Transforms/ObjCARC)
-add_subdirectory(contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents)
-add_subdirectory(ydb/library/yql/providers/common/mkql)
-add_subdirectory(ydb/library/yql/core)
-add_subdirectory(library/cpp/yson/node)
-add_subdirectory(library/cpp/yson/json)
-add_subdirectory(ydb/library/yql/core/file_storage)
-add_subdirectory(library/cpp/cache)
-add_subdirectory(library/cpp/logger/global)
-add_subdirectory(library/cpp/regex/pcre)
-add_subdirectory(contrib/libs/pcre)
-add_subdirectory(contrib/libs/pcre/pcre16)
-add_subdirectory(contrib/libs/pcre/pcre32)
-add_subdirectory(library/cpp/containers/stack_array)
-add_subdirectory(library/cpp/protobuf/util)
-add_subdirectory(library/cpp/binsaver)
-add_subdirectory(library/cpp/containers/2d_array)
-add_subdirectory(library/cpp/protobuf/util/proto)
-add_subdirectory(ydb/library/yql/core/file_storage/proto)
-add_subdirectory(ydb/library/yql/core/file_storage/defs)
-add_subdirectory(ydb/library/yql/core/file_storage/download)
-add_subdirectory(ydb/library/yql/utils/log)
-add_subdirectory(ydb/library/yql/utils/fetch)
-add_subdirectory(library/cpp/openssl/io)
+add_subdirectory(library)
+add_subdirectory(ydb)
add_subdirectory(certs)
-add_subdirectory(library/cpp/openssl/init)
-add_subdirectory(library/cpp/openssl/method)
-add_subdirectory(library/cpp/openssl/holders)
-add_subdirectory(ydb/library/yql/core/sql_types)
-add_subdirectory(ydb/library/yql/protos)
-add_subdirectory(ydb/library/yql/core/expr_nodes)
-add_subdirectory(ydb/library/yql/core/expr_nodes_gen)
-add_subdirectory(ydb/library/yql/providers/common/proto)
-add_subdirectory(ydb/library/yql/providers/common/schema/expr)
-add_subdirectory(ydb/library/yql/providers/common/schema/parser)
-add_subdirectory(ydb/library/yql/providers/dq/expr_nodes)
-add_subdirectory(ydb/core/driver_lib/run)
-add_subdirectory(library/cpp/actors/core)
-add_subdirectory(library/cpp/actors/memory_log)
-add_subdirectory(library/cpp/threading/queue)
-add_subdirectory(contrib/libs/linuxvdso)
-add_subdirectory(contrib/libs/linuxvdso/original)
-add_subdirectory(library/cpp/actors/prof)
-add_subdirectory(library/cpp/containers/atomizer)
-add_subdirectory(library/cpp/containers/str_map)
-add_subdirectory(library/cpp/actors/protos)
-add_subdirectory(library/cpp/execprofile)
-add_subdirectory(library/cpp/actors/dnsresolver)
-add_subdirectory(library/cpp/actors/interconnect)
-add_subdirectory(library/cpp/actors/dnscachelib)
-add_subdirectory(library/cpp/actors/helpers)
-add_subdirectory(library/cpp/actors/wilson)
-add_subdirectory(library/cpp/actors/wilson/protos)
-add_subdirectory(contrib/libs/grpc)
-add_subdirectory(contrib/libs/grpc/grpc)
-add_subdirectory(contrib/libs/grpc/src/core/lib)
-add_subdirectory(contrib/libs/grpc/third_party/upb)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/spinlock_wait)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/container)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/memory)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/meta)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/raw_logging)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/log_severity)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/status)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/low_level_alloc)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/throw_delegate)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/debugging)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/debugging/stacktrace)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/debugging/symbolize)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/demangle)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/numeric)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/absl_strings_internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/profiling/internal/exponential_biased)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/cord)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/algorithm)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/functional)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/absl_cord_internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/cordz_functions)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/cordz_handle)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/synchronization)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/synchronization/internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/time)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/time/civil_time)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/time/time_zone)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/cordz_info)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/types)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/types/bad_optional_access)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/utility)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/str_format)
-add_subdirectory(contrib/libs/grpc/third_party/address_sorting)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/hash)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/city)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/hash/internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/types/bad_variant_access)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/types/internal)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/status/statusor)
-add_subdirectory(contrib/libs/grpc/grpc++)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/container/internal/raw_hash_set)
-add_subdirectory(contrib/restricted/abseil-cpp-tstring/y_absl/container/internal/absl_hashtablez_sampler)
-add_subdirectory(contrib/tools/protoc/plugins/grpc_cpp)
-add_subdirectory(contrib/libs/grpc/src/compiler/grpc_plugin_support)
-add_subdirectory(library/cpp/digest/crc32c)
-add_subdirectory(contrib/libs/crcutil)
-add_subdirectory(library/cpp/monlib/service/pages/tablesorter)
-add_subdirectory(library/cpp/grpc/client)
-add_subdirectory(library/cpp/grpc/server)
-add_subdirectory(library/cpp/monlib/dynamic_counters/percentile)
-add_subdirectory(library/cpp/grpc/server/actors)
-add_subdirectory(library/cpp/monlib/messagebus)
-add_subdirectory(library/cpp/messagebus/www)
-add_subdirectory(library/cpp/html/pcdata)
-add_subdirectory(library/cpp/messagebus/oldmodule)
-add_subdirectory(library/cpp/monlib/deprecated/json)
-add_subdirectory(library/cpp/sighandler)
-add_subdirectory(library/cpp/string_utils/parse_size)
-add_subdirectory(ydb/core/actorlib_impl)
-add_subdirectory(library/cpp/lwtrace/mon)
-add_subdirectory(library/cpp/lwtrace/mon/analytics)
-add_subdirectory(library/cpp/sliding_window)
-add_subdirectory(ydb/core/base)
-add_subdirectory(ydb/core/base/services)
-add_subdirectory(ydb/core/debug)
-add_subdirectory(ydb/core/erasure)
-add_subdirectory(library/cpp/digest/old_crc)
-add_subdirectory(library/cpp/digest/old_crc/gencrc)
-add_subdirectory(ydb/core/protos)
-add_subdirectory(ydb/core/yq/libs/config/protos)
-add_subdirectory(ydb/library/folder_service/proto)
-add_subdirectory(ydb/library/yql/dq/actors/protos)
-add_subdirectory(ydb/library/yql/dq/proto)
-add_subdirectory(ydb/library/yql/providers/s3/proto)
-add_subdirectory(ydb/library/login/protos)
-add_subdirectory(ydb/library/mkql_proto/protos)
-add_subdirectory(ydb/core/protos/out)
-add_subdirectory(ydb/library/aclib)
-add_subdirectory(ydb/library/aclib/protos)
-add_subdirectory(ydb/library/login)
-add_subdirectory(contrib/libs/jwt-cpp)
-add_subdirectory(library/cpp/digest/argonish)
-add_subdirectory(library/cpp/threading/poor_man_openmp)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/avx2)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/macro)
-add_subdirectory(library/cpp/digest/argonish/internal/argon2)
-add_subdirectory(library/cpp/digest/argonish/internal/blamka)
-add_subdirectory(library/cpp/digest/argonish/internal/rotations)
-add_subdirectory(library/cpp/digest/argonish/internal/blake2b)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/ref)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/sse2)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/sse41)
-add_subdirectory(library/cpp/digest/argonish/internal/proxies/ssse3)
-add_subdirectory(ydb/library/pdisk_io)
-add_subdirectory(ydb/library/pdisk_io/protos)
-add_subdirectory(ydb/library/pretty_types_print/protobuf)
-add_subdirectory(ydb/public/api/protos/out)
-add_subdirectory(ydb/core/mon)
-add_subdirectory(library/cpp/string_utils/url)
-add_subdirectory(ydb/core/node_whiteboard)
-add_subdirectory(ydb/core/blobstorage/base)
-add_subdirectory(ydb/core/blobstorage/groupinfo)
-add_subdirectory(library/cpp/pop_count)
-add_subdirectory(ydb/core/blobstorage/crypto)
-add_subdirectory(contrib/libs/t1ha)
-add_subdirectory(library/cpp/sse)
-add_subdirectory(ydb/core/blobstorage/vdisk/ingress)
-add_subdirectory(ydb/core/util)
-add_subdirectory(library/cpp/actors/interconnect/mock)
-add_subdirectory(library/cpp/html/escape)
-add_subdirectory(library/cpp/ipmath)
-add_subdirectory(library/cpp/ipv6_address)
-add_subdirectory(library/cpp/int128)
-add_subdirectory(ydb/core/blob_depot)
-add_subdirectory(ydb/core/tablet_flat)
-add_subdirectory(ydb/core/control)
-add_subdirectory(ydb/core/tablet)
-add_subdirectory(ydb/core/mon_alloc)
-add_subdirectory(library/cpp/lfalloc/alloc_profiler)
-add_subdirectory(library/cpp/lfalloc/dbg_info)
-add_subdirectory(ydb/core/scheme)
-add_subdirectory(library/cpp/containers/bitseq)
-add_subdirectory(ydb/core/scheme_types)
-add_subdirectory(ydb/public/lib/scheme_types)
-add_subdirectory(ydb/core/sys_view/service)
-add_subdirectory(ydb/core/tracing)
-add_subdirectory(ydb/library/persqueue/topic_parser)
-add_subdirectory(ydb/library/persqueue/topic_parser_public)
-add_subdirectory(ydb/core/tablet_flat/protos)
-add_subdirectory(ydb/core/blobstorage)
-add_subdirectory(ydb/core/blobstorage/backpressure)
-add_subdirectory(ydb/core/blobstorage/lwtrace_probes)
-add_subdirectory(ydb/core/blobstorage/dsproxy)
-add_subdirectory(ydb/core/blobstorage/storagepoolmon)
-add_subdirectory(ydb/core/blobstorage/incrhuge)
-add_subdirectory(ydb/core/blobstorage/nodewarden)
-add_subdirectory(ydb/core/blob_depot/agent)
-add_subdirectory(ydb/core/blobstorage/pdisk)
-add_subdirectory(ydb/library/schlab)
-add_subdirectory(ydb/library/schlab/schine)
-add_subdirectory(ydb/library/schlab/probes)
-add_subdirectory(ydb/library/schlab/mon)
-add_subdirectory(ydb/library/schlab/schemu)
-add_subdirectory(ydb/library/schlab/schoot)
-add_subdirectory(library/cpp/protobuf/json)
-add_subdirectory(ydb/library/schlab/protos)
-add_subdirectory(ydb/core/blobstorage/other)
-add_subdirectory(ydb/core/blobstorage/testload)
-add_subdirectory(ydb/core/keyvalue)
-add_subdirectory(ydb/core/engine/minikql)
-add_subdirectory(ydb/core/client/minikql_compile)
-add_subdirectory(ydb/core/engine)
-add_subdirectory(ydb/library/mkql_proto)
-add_subdirectory(ydb/library/mkql_proto/ut/helpers)
-add_subdirectory(ydb/library/yql/minikql/comp_nodes)
-add_subdirectory(ydb/library/yql/minikql/invoke_builtins)
-add_subdirectory(library/cpp/testing/unittest)
-add_subdirectory(library/cpp/dbg_output)
-add_subdirectory(library/cpp/diff)
-add_subdirectory(library/cpp/lcs)
-add_subdirectory(library/cpp/containers/paged_vector)
-add_subdirectory(library/cpp/testing/common)
-add_subdirectory(library/cpp/testing/hook)
-add_subdirectory(ydb/core/kqp/provider)
-add_subdirectory(ydb/core/kqp/provider/mkql)
-add_subdirectory(ydb/library/yql/core/services)
-add_subdirectory(ydb/library/yql/ast/serialize)
-add_subdirectory(ydb/library/yql/sql)
-add_subdirectory(ydb/library/yql/sql/v0)
-add_subdirectory(ydb/library/yql/parser/proto_ast)
-add_subdirectory(contrib/libs/antlr3_cpp_runtime)
-add_subdirectory(ydb/library/yql/parser/proto_ast/collect_issues)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/v0)
-add_subdirectory(ydb/library/yql/sql/v0/lexer)
-add_subdirectory(ydb/library/yql/sql/v1)
-add_subdirectory(ydb/library/yql/parser/lexer_common)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/v1)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/v1_proto)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/v1_ansi)
-add_subdirectory(ydb/library/yql/sql/v1/lexer)
-add_subdirectory(ydb/library/yql/sql/v1/proto_parser)
-add_subdirectory(ydb/library/yql/core/common_opt)
-add_subdirectory(ydb/library/yql/core/peephole_opt)
-add_subdirectory(ydb/library/yql/core/type_ann)
-add_subdirectory(ydb/library/yql/providers/common/provider)
-add_subdirectory(ydb/library/yql/providers/result/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/common/config)
-add_subdirectory(ydb/library/yql/providers/common/gateway)
-add_subdirectory(ydb/library/yql/providers/result/provider)
-add_subdirectory(ydb/core/formats)
-add_subdirectory(ydb/core/keyvalue/protos)
-add_subdirectory(ydb/core/tx)
-add_subdirectory(ydb/core/persqueue/config)
-add_subdirectory(ydb/public/lib/base)
-add_subdirectory(library/cpp/messagebus/protobuf)
-add_subdirectory(ydb/library/workload)
-add_subdirectory(ydb/public/lib/operation_id)
-add_subdirectory(ydb/public/lib/operation_id/protos)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_proto)
-add_subdirectory(ydb/public/api/grpc/draft)
-add_subdirectory(ydb/core/yq/libs/protos)
-add_subdirectory(ydb/core/blobstorage/vdisk)
-add_subdirectory(ydb/core/blobstorage/vdisk/anubis_osiris)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/barriers)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/base)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/generic)
-add_subdirectory(ydb/core/blobstorage/vdisk/common)
-add_subdirectory(ydb/core/blobstorage/vdisk/defrag)
-add_subdirectory(ydb/core/blobstorage/vdisk/handoff)
-add_subdirectory(ydb/core/blobstorage/vdisk/huge)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/compstrat)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/fresh)
-add_subdirectory(ydb/core/blobstorage/vdisk/hullop)
-add_subdirectory(ydb/core/blobstorage/vdisk/localrecovery)
-add_subdirectory(ydb/core/blobstorage/vdisk/query)
-add_subdirectory(ydb/core/blobstorage/vdisk/repl)
-add_subdirectory(ydb/core/blobstorage/vdisk/scrub)
-add_subdirectory(ydb/core/blobstorage/vdisk/skeleton)
-add_subdirectory(ydb/core/blobstorage/vdisk/syncer)
-add_subdirectory(ydb/core/blobstorage/vdisk/synclog)
-add_subdirectory(library/cpp/containers/intrusive_avl_tree)
-add_subdirectory(ydb/core/client/scheme_cache_lib)
-add_subdirectory(ydb/core/client/server)
-add_subdirectory(ydb/core/client/metadata)
-add_subdirectory(ydb/core/grpc_services)
-add_subdirectory(ydb/core/grpc_services/counters)
-add_subdirectory(ydb/core/grpc_services/local_rpc)
-add_subdirectory(ydb/core/grpc_services/base)
-add_subdirectory(ydb/core/grpc_streaming)
-add_subdirectory(ydb/public/sdk/cpp/client/resources)
-add_subdirectory(ydb/core/health_check)
-add_subdirectory(ydb/public/api/grpc)
-add_subdirectory(ydb/core/io_formats)
-add_subdirectory(ydb/core/kesus/tablet)
-add_subdirectory(ydb/core/metering)
-add_subdirectory(ydb/core/sys_view)
-add_subdirectory(ydb/core/kqp/runtime)
-add_subdirectory(ydb/core/kqp/common)
-add_subdirectory(ydb/core/kqp/expr_nodes)
-add_subdirectory(ydb/library/yql/dq/expr_nodes)
-add_subdirectory(ydb/core/tx/long_tx_service/public)
-add_subdirectory(ydb/library/yql/dq/actors)
-add_subdirectory(ydb/library/yql/dq/common)
-add_subdirectory(ydb/core/ydb_convert)
-add_subdirectory(ydb/library/yql/dq/runtime)
-add_subdirectory(ydb/library/yql/dq/type_ann)
-add_subdirectory(ydb/library/yql/providers/common/schema/mkql)
-add_subdirectory(ydb/core/sys_view/common)
-add_subdirectory(ydb/core/sys_view/nodes)
-add_subdirectory(ydb/core/sys_view/partition_stats)
-add_subdirectory(ydb/core/sys_view/query_stats)
-add_subdirectory(ydb/core/sys_view/storage)
-add_subdirectory(ydb/core/sys_view/tablets)
-add_subdirectory(ydb/core/tx/datashard)
-add_subdirectory(library/cpp/containers/flat_hash)
-add_subdirectory(library/cpp/json/yson)
-add_subdirectory(ydb/core/persqueue/partition_key_range)
-add_subdirectory(ydb/core/persqueue/writer)
-add_subdirectory(ydb/core/persqueue/events)
-add_subdirectory(ydb/core/wrappers)
-add_subdirectory(contrib/libs/aws-sdk-cpp/aws-cpp-sdk-s3)
-add_subdirectory(contrib/libs/aws-sdk-cpp/aws-cpp-sdk-core)
-add_subdirectory(contrib/libs/curl)
-add_subdirectory(contrib/libs/nghttp2)
-add_subdirectory(contrib/restricted/aws/aws-c-common)
-add_subdirectory(contrib/restricted/aws/aws-c-event-stream)
-add_subdirectory(contrib/restricted/aws/aws-c-io)
-add_subdirectory(contrib/restricted/aws/aws-c-cal)
-add_subdirectory(contrib/restricted/aws/s2n)
-add_subdirectory(contrib/restricted/aws/aws-checksums)
-add_subdirectory(ydb/core/wrappers/ut_helpers)
-add_subdirectory(library/cpp/xml/document)
-add_subdirectory(library/cpp/xml/init)
-add_subdirectory(contrib/libs/libxml)
-add_subdirectory(library/cpp/string_utils/ztstrbuf)
-add_subdirectory(ydb/public/lib/deprecated/kicli)
-add_subdirectory(ydb/public/lib/deprecated/client)
-add_subdirectory(ydb/public/lib/value)
-add_subdirectory(ydb/library/yql/dq/actors/compute)
-add_subdirectory(ydb/library/yql/dq/tasks)
-add_subdirectory(ydb/services/lib/sharding)
-add_subdirectory(ydb/core/yq/libs/actors)
-add_subdirectory(ydb/core/yq/libs/actors/logging)
-add_subdirectory(ydb/core/yq/libs/checkpointing)
-add_subdirectory(ydb/core/yq/libs/checkpointing_common)
-add_subdirectory(ydb/core/yq/libs/graph_params/proto)
-add_subdirectory(ydb/library/yql/providers/dq/api/protos)
-add_subdirectory(ydb/library/yql/providers/common/metrics/protos)
-add_subdirectory(ydb/core/yq/libs/checkpoint_storage/events)
-add_subdirectory(ydb/core/yq/libs/events)
-add_subdirectory(ydb/library/yql/core/facade)
-add_subdirectory(ydb/library/yql/core/extract_predicate)
-add_subdirectory(ydb/library/yql/providers/common/udf_resolve)
-add_subdirectory(ydb/library/yql/providers/config)
-add_subdirectory(ydb/public/lib/yq)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_table)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/make_request)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_driver)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/common)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/grpc_connections)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/db_driver_state)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_endpoints)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/logger)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/plain_status)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/credentials)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/status)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/fatal_error_handlers)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/exceptions)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/thread_pool)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_stats)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_common_client)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_params)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_value)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_internal/value_helpers)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_result)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_table/impl)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_table/query_stats)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/operation)
-add_subdirectory(ydb/library/yql/providers/common/db_id_async_resolver)
-add_subdirectory(ydb/library/yql/providers/dq/provider)
-add_subdirectory(library/cpp/threading/task_scheduler)
-add_subdirectory(ydb/public/lib/yson_value)
-add_subdirectory(ydb/library/yql/dq/transform)
-add_subdirectory(ydb/library/yql/providers/common/metrics)
-add_subdirectory(ydb/library/yql/providers/common/transform)
-add_subdirectory(ydb/library/yql/providers/dq/api/grpc)
-add_subdirectory(ydb/library/yql/providers/dq/backtrace)
-add_subdirectory(ydb/library/yql/utils/backtrace)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/Symbolize)
-add_subdirectory(contrib/libs/llvm12/lib/DebugInfo/PDB)
-add_subdirectory(ydb/library/yql/providers/dq/common)
-add_subdirectory(ydb/library/yql/providers/dq/config)
-add_subdirectory(ydb/library/yql/providers/dq/interface)
-add_subdirectory(ydb/library/yql/providers/dq/opt)
-add_subdirectory(ydb/library/yql/dq/opt)
-add_subdirectory(ydb/library/yql/providers/dq/planner)
-add_subdirectory(ydb/library/yql/providers/dq/mkql)
-add_subdirectory(ydb/core/yq/libs/checkpoint_storage/proto)
-add_subdirectory(ydb/library/yql/dq/state)
-add_subdirectory(ydb/library/yql/providers/pq/proto)
-add_subdirectory(ydb/library/yql/providers/pq/task_meta)
-add_subdirectory(ydb/core/yq/libs/db_id_async_resolver_impl)
-add_subdirectory(ydb/library/yql/providers/dq/actors)
-add_subdirectory(ydb/library/yql/core/services/mounts)
-add_subdirectory(ydb/library/yql/core/user_data)
-add_subdirectory(ydb/library/yql/utils/actors)
-add_subdirectory(ydb/library/yql/providers/common/token_accessor/client)
-add_subdirectory(library/cpp/threading/atomic)
-add_subdirectory(ydb/library/yql/providers/common/structured_token)
-add_subdirectory(ydb/library/yql/providers/common/token_accessor/grpc)
-add_subdirectory(ydb/library/yql/providers/solomon/proto)
-add_subdirectory(ydb/library/yql/utils/actor_log)
-add_subdirectory(ydb/library/yql/utils/failure_injector)
-add_subdirectory(ydb/library/yql/providers/dq/counters)
-add_subdirectory(ydb/library/yql/providers/dq/task_runner)
-add_subdirectory(ydb/library/yql/providers/dq/task_runner_actor)
-add_subdirectory(ydb/library/yql/dq/actors/task_runner)
-add_subdirectory(ydb/library/yql/providers/dq/runtime)
-add_subdirectory(ydb/library/yql/providers/dq/worker_manager)
-add_subdirectory(ydb/library/yql/providers/dq/worker_manager/interface)
-add_subdirectory(ydb/core/yq/libs/common)
-add_subdirectory(ydb/core/yq/libs/control_plane_storage/events)
-add_subdirectory(ydb/core/yq/libs/control_plane_storage/proto)
-add_subdirectory(ydb/core/yq/libs/quota_manager/events)
-add_subdirectory(ydb/core/yq/libs/control_plane_storage)
-add_subdirectory(library/cpp/protobuf/interop)
-add_subdirectory(ydb/core/yq/libs/config)
-add_subdirectory(ydb/core/yq/libs/control_plane_storage/internal)
-add_subdirectory(ydb/core/yq/libs/ydb)
-add_subdirectory(library/cpp/retry)
-add_subdirectory(library/cpp/retry/protos)
-add_subdirectory(ydb/library/security)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_coordination)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_common_client/impl)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_scheme)
-add_subdirectory(ydb/core/yq/libs/db_schema)
-add_subdirectory(ydb/core/yq/libs/shared_resources)
-add_subdirectory(ydb/core/yq/libs/shared_resources/interface)
-add_subdirectory(ydb/library/logger)
-add_subdirectory(ydb/core/yq/libs/private_client)
-add_subdirectory(ydb/core/yq/libs/result_formatter)
-add_subdirectory(ydb/core/yq/libs/signer)
-add_subdirectory(ydb/core/yq/libs/hmac)
-add_subdirectory(ydb/library/yql/providers/clickhouse/provider)
-add_subdirectory(ydb/library/yql/providers/clickhouse/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/clickhouse/proto)
-add_subdirectory(ydb/library/yql/providers/common/dq)
-add_subdirectory(ydb/library/yql/providers/common/http_gateway)
-add_subdirectory(ydb/library/yql/providers/common/comp_nodes)
-add_subdirectory(ydb/library/yql/providers/dq/provider/exec)
-add_subdirectory(ydb/library/yql/providers/pq/cm_client)
-add_subdirectory(ydb/library/yql/providers/pq/provider)
-add_subdirectory(ydb/library/yql/providers/pq/common)
-add_subdirectory(ydb/library/yql/providers/pq/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/s3/provider)
-add_subdirectory(ydb/library/yql/providers/s3/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/ydb/provider)
-add_subdirectory(ydb/public/lib/experimental)
-add_subdirectory(ydb/library/yql/providers/ydb/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/ydb/proto)
-add_subdirectory(ydb/core/yq/libs/control_plane_proxy)
-add_subdirectory(ydb/core/yq/libs/control_plane_proxy/events)
-add_subdirectory(ydb/library/folder_service)
-add_subdirectory(ydb/core/persqueue)
-add_subdirectory(ydb/core/persqueue/codecs)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core/impl)
-add_subdirectory(library/cpp/containers/disjoint_interval_tree)
-add_subdirectory(ydb/library/persqueue/obfuscate)
-add_subdirectory(ydb/library/persqueue/counter_time_keeper)
-add_subdirectory(ydb/core/ymq/actor)
-add_subdirectory(library/cpp/scheme)
-add_subdirectory(ydb/core/mind/address_classification)
-add_subdirectory(ydb/core/cms/console)
-add_subdirectory(library/cpp/actors/http)
-add_subdirectory(library/cpp/dns)
-add_subdirectory(ydb/core/cms/console/validators)
-add_subdirectory(ydb/core/mind)
-add_subdirectory(ydb/core/blobstorage/dsproxy/mock)
-add_subdirectory(ydb/core/mind/bscontroller)
-add_subdirectory(ydb/core/tx/tx_proxy)
-add_subdirectory(ydb/core/tx/balance_coverage)
-add_subdirectory(ydb/core/tx/scheme_cache)
-add_subdirectory(ydb/core/tx/schemeshard)
-add_subdirectory(ydb/core/blockstore/core)
-add_subdirectory(ydb/core/filestore/core)
-add_subdirectory(ydb/core/tx/scheme_board)
-add_subdirectory(ydb/core/tx/tx_allocator_client)
-add_subdirectory(ydb/core/tx/tx_allocator)
-add_subdirectory(ydb/core/sys_view/processor)
-add_subdirectory(ydb/core/kqp/counters)
-add_subdirectory(ydb/core/test_tablet)
-add_subdirectory(ydb/core/tx/replication/controller)
-add_subdirectory(ydb/core/tx/replication/ydb_proxy)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_types/credentials/login)
-add_subdirectory(ydb/core/ymq/base)
-add_subdirectory(ydb/core/ymq/proto)
-add_subdirectory(ydb/library/http_proxy/authorization)
-add_subdirectory(ydb/library/http_proxy/error)
-add_subdirectory(ydb/library/protobuf_printer)
-add_subdirectory(ydb/core/ymq/queues/common)
-add_subdirectory(ydb/core/ymq/queues/fifo)
-add_subdirectory(ydb/core/ymq/queues/std)
-add_subdirectory(ydb/services/persqueue_v1)
-add_subdirectory(ydb/core/kqp)
-add_subdirectory(ydb/core/kqp/compute_actor)
-add_subdirectory(ydb/core/kqp/executer)
-add_subdirectory(ydb/core/kqp/compile)
-add_subdirectory(ydb/core/kqp/rm)
-add_subdirectory(ydb/core/kqp/host)
-add_subdirectory(ydb/core/kqp/opt)
-add_subdirectory(ydb/core/kqp/opt/logical)
-add_subdirectory(ydb/core/kqp/opt/peephole)
-add_subdirectory(ydb/library/naming_conventions)
-add_subdirectory(ydb/core/kqp/opt/physical)
-add_subdirectory(ydb/core/kqp/opt/physical/effects)
-add_subdirectory(ydb/core/kqp/prepare)
-add_subdirectory(ydb/core/kqp/node)
-add_subdirectory(ydb/core/kqp/proxy)
-add_subdirectory(ydb/library/persqueue/tests)
-add_subdirectory(ydb/services/lib/actors)
-add_subdirectory(ydb/public/lib/jwt)
-add_subdirectory(ydb/services/persqueue_v1/actors)
-add_subdirectory(ydb/core/cms)
-add_subdirectory(ydb/core/driver_lib/base_utils)
-add_subdirectory(ydb/core/driver_lib/cli_config_base)
-add_subdirectory(ydb/core/driver_lib/cli_utils)
-add_subdirectory(ydb/core/driver_lib/cli_base)
-add_subdirectory(ydb/public/lib/ydb_cli/common)
-add_subdirectory(library/cpp/yaml/as)
-add_subdirectory(contrib/libs/yaml-cpp)
-add_subdirectory(ydb/public/lib/json_value)
-add_subdirectory(ydb/public/sdk/cpp/client/draft)
-add_subdirectory(ydb/library/yaml_config)
-add_subdirectory(ydb/core/http_proxy)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_datastreams)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs)
-add_subdirectory(library/cpp/streams/zstd)
-add_subdirectory(ydb/services/datastreams)
-add_subdirectory(ydb/services/ydb)
-add_subdirectory(ydb/core/client)
-add_subdirectory(ydb/core/kesus/proxy)
-add_subdirectory(ydb/core/mind/hive)
-add_subdirectory(ydb/core/quoter)
-add_subdirectory(library/cpp/containers/ring_buffer)
-add_subdirectory(ydb/core/security)
-add_subdirectory(ydb/core/tx/columnshard)
-add_subdirectory(ydb/core/tx/columnshard/engines)
-add_subdirectory(ydb/library/yql/public/udf/service/exception_policy)
-add_subdirectory(ydb/core/tx/coordinator)
-add_subdirectory(ydb/core/tx/long_tx_service)
-add_subdirectory(ydb/core/tx/mediator)
-add_subdirectory(ydb/core/tx/time_cast)
-add_subdirectory(ydb/core/tx/sequenceproxy)
-add_subdirectory(ydb/core/tx/sequenceproxy/public)
-add_subdirectory(ydb/core/tx/sequenceshard/public)
-add_subdirectory(ydb/core/tx/sequenceshard)
-add_subdirectory(ydb/core/viewer)
-add_subdirectory(library/cpp/archive)
-add_subdirectory(ydb/core/viewer/json)
-add_subdirectory(ydb/core/viewer/protos)
-add_subdirectory(ydb/core/ymq/http)
-add_subdirectory(ydb/core/yq/libs/init)
-add_subdirectory(ydb/core/yq/libs/audit)
-add_subdirectory(ydb/core/yq/libs/checkpoint_storage)
-add_subdirectory(contrib/libs/fmt)
-add_subdirectory(ydb/core/yq/libs/gateway)
-add_subdirectory(ydb/core/yq/libs/read_rule)
-add_subdirectory(ydb/core/yq/libs/tasks_packer)
-add_subdirectory(ydb/core/yq/libs/health)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_discovery)
-add_subdirectory(ydb/core/yq/libs/quota_manager)
-add_subdirectory(ydb/core/yq/libs/rate_limiter/control_plane_service)
-add_subdirectory(ydb/core/yq/libs/test_connection)
-add_subdirectory(ydb/core/yq/libs/test_connection/events)
-add_subdirectory(ydb/library/yql/providers/solomon/async_io)
-add_subdirectory(library/cpp/json/easy_parse)
-add_subdirectory(ydb/library/yql/dq/comp_nodes)
-add_subdirectory(ydb/library/yql/providers/clickhouse/actors)
-add_subdirectory(ydb/library/yql/providers/pq/async_io)
-add_subdirectory(ydb/library/yql/providers/pq/gateway/native)
-add_subdirectory(ydb/library/yql/providers/s3/actors)
-add_subdirectory(contrib/libs/poco/Util)
-add_subdirectory(contrib/libs/expat)
-add_subdirectory(contrib/libs/poco/Foundation)
-add_subdirectory(contrib/libs/poco/JSON)
-add_subdirectory(contrib/libs/poco/XML)
-add_subdirectory(ydb/library/yql/providers/s3/compressors)
-add_subdirectory(contrib/libs/lzma)
-add_subdirectory(ydb/library/yql/udfs/common/clickhouse/client)
-add_subdirectory(ydb/library/yql/public/udf/support)
-add_subdirectory(contrib/restricted/boost/libs/program_options)
-add_subdirectory(contrib/restricted/cityhash-1.0.2)
-add_subdirectory(contrib/libs/pdqsort)
-add_subdirectory(contrib/restricted/dragonbox)
-add_subdirectory(contrib/libs/poco/Net)
-add_subdirectory(contrib/libs/poco/NetSSL_OpenSSL)
-add_subdirectory(contrib/libs/poco/Crypto)
-add_subdirectory(contrib/libs/apache/avro)
-add_subdirectory(contrib/restricted/boost/libs/iostreams)
-add_subdirectory(ydb/library/yql/providers/solomon/gateway)
-add_subdirectory(ydb/library/yql/providers/solomon/provider)
-add_subdirectory(ydb/library/yql/providers/solomon/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/ydb/actors)
-add_subdirectory(ydb/library/yql/providers/ydb/comp_nodes)
-add_subdirectory(ydb/core/yq/libs/logs)
-add_subdirectory(ydb/services/auth)
-add_subdirectory(ydb/services/cms)
-add_subdirectory(ydb/services/discovery)
-add_subdirectory(ydb/services/kesus)
-add_subdirectory(ydb/services/local_discovery)
-add_subdirectory(ydb/services/monitoring)
-add_subdirectory(ydb/services/persqueue_cluster_discovery)
-add_subdirectory(ydb/services/persqueue_cluster_discovery/cluster_ordering)
-add_subdirectory(ydb/services/rate_limiter)
-add_subdirectory(ydb/services/yq)
-add_subdirectory(ydb/core/yq/libs/audit/mock)
-add_subdirectory(ydb/core/yq/libs/audit/events)
-add_subdirectory(ydb/library/folder_service/mock)
-add_subdirectory(ydb/library/keys)
-add_subdirectory(ydb/library/yql/udfs/common/datetime)
-add_subdirectory(library/cpp/timezone_conversion)
-add_subdirectory(ydb/library/yql/udfs/common/datetime2)
-add_subdirectory(ydb/library/yql/udfs/common/digest)
-add_subdirectory(contrib/libs/farmhash)
-add_subdirectory(contrib/libs/farmhash/arch/sse41)
-add_subdirectory(contrib/libs/farmhash/arch/sse42)
-add_subdirectory(contrib/libs/farmhash/arch/sse42_aesni)
-add_subdirectory(contrib/libs/highwayhash)
-add_subdirectory(contrib/libs/highwayhash/arch/avx2)
-add_subdirectory(contrib/libs/highwayhash/arch/sse41)
-add_subdirectory(library/cpp/digest/sfh)
-add_subdirectory(ydb/library/yql/udfs/common/histogram)
-add_subdirectory(library/cpp/histogram/adaptive)
-add_subdirectory(library/cpp/histogram/adaptive/protos)
-add_subdirectory(ydb/library/yql/udfs/common/hyperloglog)
-add_subdirectory(library/cpp/hyperloglog)
-add_subdirectory(ydb/library/yql/udfs/common/hyperscan)
-add_subdirectory(library/cpp/regex/hyperscan)
-add_subdirectory(contrib/libs/hyperscan)
-add_subdirectory(contrib/libs/hyperscan/runtime_core2)
-add_subdirectory(contrib/libs/hyperscan/runtime_corei7)
-add_subdirectory(contrib/libs/hyperscan/runtime_avx2)
-add_subdirectory(contrib/libs/hyperscan/runtime_avx512)
-add_subdirectory(ydb/library/yql/udfs/common/ip_base)
-add_subdirectory(ydb/library/yql/udfs/common/ip_base/lib)
-add_subdirectory(ydb/library/yql/udfs/common/json)
-add_subdirectory(ydb/library/yql/udfs/common/json2)
-add_subdirectory(ydb/library/yql/minikql/jsonpath)
-add_subdirectory(ydb/library/yql/parser/proto_ast/gen/jsonpath)
-add_subdirectory(ydb/library/yql/udfs/common/math)
-add_subdirectory(ydb/library/yql/udfs/common/math/lib)
-add_subdirectory(ydb/library/yql/udfs/common/pire)
-add_subdirectory(library/cpp/regex/pire)
-add_subdirectory(ydb/library/yql/udfs/common/re2)
-add_subdirectory(ydb/library/yql/udfs/common/set)
-add_subdirectory(ydb/library/yql/udfs/common/stat)
-add_subdirectory(ydb/library/yql/udfs/common/stat/static)
-add_subdirectory(ydb/library/yql/udfs/common/string)
-add_subdirectory(ydb/library/yql/udfs/common/top)
-add_subdirectory(library/cpp/containers/top_keeper)
-add_subdirectory(ydb/library/yql/udfs/common/topfreq)
-add_subdirectory(ydb/library/yql/udfs/common/topfreq/static)
-add_subdirectory(ydb/library/yql/udfs/common/unicode_base)
-add_subdirectory(ydb/library/yql/udfs/common/unicode_base/lib)
-add_subdirectory(library/cpp/unicode/normalization)
-add_subdirectory(ydb/library/yql/udfs/common/url_base)
-add_subdirectory(ydb/library/yql/udfs/common/url_base/lib)
-add_subdirectory(library/cpp/tld)
-add_subdirectory(library/cpp/unicode/punycode)
-add_subdirectory(ydb/library/yql/udfs/common/yson2)
-add_subdirectory(ydb/library/yql/udfs/logs/dsv)
-add_subdirectory(ydb/apps/ydb)
-add_subdirectory(ydb/apps/ydb/commands)
-add_subdirectory(ydb/public/lib/ydb_cli/commands)
-add_subdirectory(library/cpp/histogram/hdr)
-add_subdirectory(contrib/libs/hdr_histogram)
-add_subdirectory(library/cpp/threading/local_executor)
-add_subdirectory(contrib/libs/tbb)
-add_subdirectory(ydb/library/backup)
-add_subdirectory(library/cpp/bucket_quoter)
-add_subdirectory(ydb/public/lib/ydb_cli/dump/util)
-add_subdirectory(ydb/public/lib/ydb_cli/dump)
-add_subdirectory(ydb/public/lib/ydb_cli/import)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_export)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_import)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_operation)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_public)
-add_subdirectory(ydb/core/testlib)
-add_subdirectory(library/cpp/testing/gmock_in_unittest)
-add_subdirectory(contrib/restricted/googletest/googlemock)
-add_subdirectory(contrib/restricted/googletest/googletest)
-add_subdirectory(library/cpp/testing/gtest_extensions)
-add_subdirectory(ydb/core/testlib/actors)
-add_subdirectory(library/cpp/actors/testlib)
-add_subdirectory(ydb/core/testlib/basics)
-add_subdirectory(ydb/core/yq/libs/mock)
-add_subdirectory(ydb/core/blockstore)
-add_subdirectory(ydb/core/filestore)
-add_subdirectory(ydb/core/grpc_caching)
-add_subdirectory(ydb/core/yql_testlib)
-add_subdirectory(ydb/core/actorlib_impl/ut)
-add_subdirectory(library/cpp/testing/unittest_main)
-add_subdirectory(library/cpp/terminate_handler)
-add_subdirectory(ydb/core/base/ut)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/lib)
-add_subdirectory(ydb/core/blobstorage/pdisk/mock)
-add_subdirectory(ydb/library/yql/public/udf/service/stub)
-add_subdirectory(ydb/core/blobstorage/ut_group)
-add_subdirectory(ydb/core/blobstorage/ut_mirror3of4)
-add_subdirectory(ydb/core/blobstorage/ut_vdisk)
-add_subdirectory(ydb/core/blobstorage/ut_vdisk/lib)
-add_subdirectory(ydb/core/blobstorage/ut_vdisk2)
-add_subdirectory(ydb/core/client/ut)
-add_subdirectory(ydb/core/tablet_flat/test/libs/rows)
-add_subdirectory(ydb/core/client/minikql_result_lib)
-add_subdirectory(ydb/core/cms/ut)
-add_subdirectory(ydb/core/cms/ut_sentinel)
-add_subdirectory(ydb/core/control/ut)
-add_subdirectory(ydb/core/engine/ut)
-add_subdirectory(library/cpp/malloc/jemalloc)
-add_subdirectory(contrib/libs/jemalloc)
-add_subdirectory(ydb/core/kqp/ut/common)
-add_subdirectory(ydb/core/tablet_flat/test/libs/table)
-add_subdirectory(ydb/core/tablet_flat/test/libs/table/model)
-add_subdirectory(ydb/core/erasure/ut)
-add_subdirectory(ydb/core/erasure/ut_rope)
-add_subdirectory(ydb/core/erasure/ut_perf)
-add_subdirectory(ydb/core/formats/ut)
-add_subdirectory(ydb/core/grpc_services/ut)
-add_subdirectory(ydb/core/grpc_streaming/ut)
-add_subdirectory(ydb/core/grpc_streaming/ut/grpc)
-add_subdirectory(ydb/core/health_check/ut)
-add_subdirectory(ydb/core/keyvalue/ut)
-add_subdirectory(ydb/core/kqp/ut)
-add_subdirectory(ydb/core/metering/ut)
-add_subdirectory(ydb/core/mind/ut)
-add_subdirectory(ydb/core/mind/ut_fat)
-add_subdirectory(ydb/core/persqueue/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils)
-add_subdirectory(library/cpp/threading/chunk_queue)
-add_subdirectory(ydb/core/persqueue/ut_slow)
-add_subdirectory(ydb/core/quoter/ut)
-add_subdirectory(ydb/core/quoter/quoter_service_bandwidth_test)
-add_subdirectory(ydb/core/scheme/ut)
-add_subdirectory(ydb/core/security/ut)
-add_subdirectory(ydb/core/sys_view/ut_kqp)
-add_subdirectory(ydb/core/tablet/ut)
-add_subdirectory(ydb/core/tablet_flat/ut)
-add_subdirectory(ydb/core/tablet_flat/test/libs/exec)
-add_subdirectory(ydb/core/tablet_flat/ut_large)
-add_subdirectory(ydb/core/util/btree_benchmark)
-add_subdirectory(library/cpp/lfalloc)
-add_subdirectory(library/cpp/testing/benchmark/main)
-add_subdirectory(library/cpp/testing/benchmark)
-add_subdirectory(library/cpp/linear_regression)
-add_subdirectory(library/cpp/accurate_accumulate)
-add_subdirectory(library/cpp/threading/skip_list)
-add_subdirectory(ydb/core/util/ut)
-add_subdirectory(ydb/core/viewer/ut)
-add_subdirectory(ydb/core/wrappers/ut)
-add_subdirectory(ydb/core/ydb_convert/ut)
-add_subdirectory(ydb/core/ymq/ut)
-add_subdirectory(ydb/library/aclib/ut)
-add_subdirectory(ydb/library/backup/ut)
-add_subdirectory(ydb/library/binary_json/ut)
-add_subdirectory(ydb/library/dynumber/ut)
-add_subdirectory(ydb/library/keys/ut)
-add_subdirectory(ydb/library/login/ut)
-add_subdirectory(ydb/library/mkql_proto/ut)
-add_subdirectory(ydb/library/naming_conventions/ut)
-add_subdirectory(ydb/library/pretty_types_print/wilson)
-add_subdirectory(ydb/library/protobuf_printer/ut)
-add_subdirectory(ydb/library/schlab/ut)
-add_subdirectory(ydb/library/security/ut)
-add_subdirectory(ydb/public/lib/idx_test)
-add_subdirectory(ydb/services/cms/ut)
-add_subdirectory(ydb/services/datastreams/ut)
-add_subdirectory(ydb/services/persqueue_cluster_discovery/ut)
-add_subdirectory(ydb/services/persqueue_v1/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_topic)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_topic/impl)
-add_subdirectory(ydb/services/persqueue_v1/ut/new_schemecache_ut)
-add_subdirectory(ydb/services/rate_limiter/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_rate_limiter)
-add_subdirectory(ydb/services/ydb/index_ut)
-add_subdirectory(ydb/services/ydb/sdk_credprovider_ut)
-add_subdirectory(ydb/services/ydb/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_extension)
-add_subdirectory(ydb/services/yq/ut_integration)
-add_subdirectory(ydb/library/yql/minikql/jsonpath/benchmark)
-add_subdirectory(ydb/library/yql/minikql/perf/alloc)
-add_subdirectory(ydb/library/yql/minikql/perf/mt_param)
-add_subdirectory(ydb/library/yql/minikql/perf/packer)
-add_subdirectory(ydb/library/yql/minikql/perf/param)
-add_subdirectory(ydb/library/yql/minikql/perf/presort)
-add_subdirectory(library/cpp/presort)
-add_subdirectory(ydb/library/yql/sql/v1/perf)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_blob_depot)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_donor)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_group_reconfiguration)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_osiris)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_replication)
-add_subdirectory(ydb/core/blobstorage/ut_blobstorage/ut_scrub)
-add_subdirectory(ydb/core/blobstorage/ut_pdiskfit/ut)
-add_subdirectory(ydb/core/blobstorage/ut_pdiskfit/lib)
-add_subdirectory(ydb/core/blobstorage/ut_pdiskfit/pdiskfit)
-add_subdirectory(ydb/core/blobstorage/backpressure/ut)
-add_subdirectory(ydb/core/blobstorage/backpressure/ut_client)
-add_subdirectory(ydb/core/blobstorage/base/ut)
-add_subdirectory(ydb/core/blobstorage/crypto/ut)
-add_subdirectory(ydb/core/blobstorage/dsproxy/ut)
-add_subdirectory(ydb/core/blobstorage/dsproxy/ut_fat)
-add_subdirectory(ydb/core/blobstorage/groupinfo/ut)
-add_subdirectory(ydb/core/blobstorage/incrhuge/ut)
-add_subdirectory(ydb/core/blobstorage/nodewarden/ut)
-add_subdirectory(ydb/core/blobstorage/nodewarden/ut_sequence)
-add_subdirectory(ydb/core/blobstorage/pdisk/ut)
-add_subdirectory(ydb/core/blobstorage/storagepoolmon/ut)
-add_subdirectory(ydb/library/schlab/mon/test)
-add_subdirectory(ydb/library/schlab/mon/static)
-add_subdirectory(ydb/library/schlab/mon/static/css)
-add_subdirectory(ydb/library/schlab/mon/static/js)
-add_subdirectory(ydb/core/tx/balance_coverage/ut)
-add_subdirectory(ydb/core/tx/columnshard/ut)
-add_subdirectory(ydb/core/tx/coordinator/ut)
-add_subdirectory(ydb/core/tx/datashard/ut_background_compaction)
-add_subdirectory(ydb/core/tx/datashard/ut_build_index)
-add_subdirectory(ydb/core/tx/datashard/ut_change_collector)
-add_subdirectory(ydb/core/tx/datashard/ut_change_exchange)
-add_subdirectory(ydb/core/tx/datashard/ut_compaction)
-add_subdirectory(ydb/core/tx/datashard/ut_erase_rows)
-add_subdirectory(ydb/core/tx/datashard/ut_followers)
-add_subdirectory(ydb/core/tx/datashard/ut_init)
-add_subdirectory(ydb/core/tx/datashard/ut_keys)
-add_subdirectory(ydb/core/tx/datashard/ut_kqp)
-add_subdirectory(ydb/core/tx/datashard/ut_kqp_errors)
-add_subdirectory(ydb/core/tx/datashard/ut_kqp_scan)
-add_subdirectory(ydb/core/tx/datashard/ut_locks)
-add_subdirectory(ydb/core/tx/datashard/ut_minikql)
-add_subdirectory(ydb/core/tx/datashard/ut_minstep)
-add_subdirectory(ydb/core/tx/datashard/ut_order)
-add_subdirectory(ydb/core/tx/datashard/ut_range_avl_tree)
-add_subdirectory(ydb/core/tx/datashard/ut_range_ops)
-add_subdirectory(ydb/core/tx/datashard/ut_range_treap)
-add_subdirectory(ydb/core/tx/datashard/ut_read_iterator)
-add_subdirectory(ydb/core/tx/datashard/ut_read_table)
-add_subdirectory(ydb/core/tx/datashard/ut_reassign)
-add_subdirectory(ydb/core/tx/datashard/ut_replication)
-add_subdirectory(ydb/core/tx/datashard/ut_rs)
-add_subdirectory(ydb/core/tx/datashard/ut_snapshot)
-add_subdirectory(ydb/core/tx/datashard/ut_stats)
-add_subdirectory(ydb/core/tx/datashard/ut_upload_rows)
-add_subdirectory(ydb/core/tx/long_tx_service/ut)
-add_subdirectory(ydb/core/tx/long_tx_service/public/ut)
-add_subdirectory(ydb/core/tx/scheme_board/ut_cache)
-add_subdirectory(ydb/core/tx/schemeshard/ut_helpers)
-add_subdirectory(ydb/core/tx/scheme_board/ut_double_indexed)
-add_subdirectory(ydb/core/tx/scheme_board/ut_monitoring)
-add_subdirectory(ydb/core/tx/scheme_board/ut_populator)
-add_subdirectory(ydb/core/tx/scheme_board/ut_replica)
-add_subdirectory(ydb/core/tx/scheme_board/ut_subscriber)
-add_subdirectory(ydb/core/tx/schemeshard/ut_async_index)
-add_subdirectory(ydb/core/tx/schemeshard/ut_backup)
-add_subdirectory(ydb/core/tx/schemeshard/ut_base)
-add_subdirectory(ydb/core/tx/schemeshard/ut_base_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_bsvolume)
-add_subdirectory(ydb/core/tx/schemeshard/ut_bsvolume_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_cdc_stream)
-add_subdirectory(ydb/core/tx/schemeshard/ut_cdc_stream_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_compaction)
-add_subdirectory(ydb/core/tx/schemeshard/ut_export)
-add_subdirectory(ydb/core/tx/schemeshard/ut_export_reboots_s3)
-add_subdirectory(ydb/core/tx/schemeshard/ut_extsubdomain)
-add_subdirectory(ydb/core/tx/schemeshard/ut_extsubdomain_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_filestore_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_index_build)
-add_subdirectory(ydb/core/tx/schemeshard/ut_index_build_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_login)
-add_subdirectory(ydb/core/tx/schemeshard/ut_move)
-add_subdirectory(ydb/core/tx/schemeshard/ut_move_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_olap)
-add_subdirectory(ydb/core/tx/schemeshard/ut_olap_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_pq)
-add_subdirectory(ydb/core/tx/schemeshard/ut_pq_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_replication)
-add_subdirectory(ydb/core/tx/schemeshard/ut_replication_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_restore)
-add_subdirectory(ydb/core/tx/schemeshard/ut_rtmr)
-add_subdirectory(ydb/core/tx/schemeshard/ut_rtmr_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_ru_calculator)
-add_subdirectory(ydb/core/tx/schemeshard/ut_sequence)
-add_subdirectory(ydb/core/tx/schemeshard/ut_sequence_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_serverless)
-add_subdirectory(ydb/core/tx/schemeshard/ut_stats)
-add_subdirectory(ydb/core/tx/schemeshard/ut_split_merge)
-add_subdirectory(ydb/core/tx/schemeshard/ut_split_merge_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_subdomain)
-add_subdirectory(ydb/core/tx/schemeshard/ut_subdomain_reboots)
-add_subdirectory(ydb/core/tx/schemeshard/ut_ttl)
-add_subdirectory(ydb/core/tx/schemeshard/ut_user_attributes)
-add_subdirectory(ydb/core/tx/schemeshard/ut_user_attributes_reboots)
-add_subdirectory(ydb/core/tx/sequenceproxy/ut)
-add_subdirectory(ydb/core/tx/sequenceshard/ut)
-add_subdirectory(ydb/core/tx/time_cast/ut)
-add_subdirectory(ydb/core/tx/tx_allocator/ut)
-add_subdirectory(ydb/core/tx/tx_allocator_client/ut)
-add_subdirectory(ydb/core/tx/tx_proxy/ut_base_tenant)
-add_subdirectory(ydb/core/tx/tx_proxy/ut_encrypted_storage)
-add_subdirectory(ydb/core/tx/tx_proxy/ut_ext_tenant)
-add_subdirectory(ydb/core/tx/tx_proxy/ut_storage_tenant)
-add_subdirectory(ydb/core/blobstorage/vdisk/anubis_osiris/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/common/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/defrag/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/huge/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/test)
-add_subdirectory(ydb/core/blobstorage/vdisk/hullop/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/ingress/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/query/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/repl/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/skeleton/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/syncer/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/synclog/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/barriers/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/base/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/compstrat/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/fresh/ut)
-add_subdirectory(ydb/core/blobstorage/vdisk/hulldb/generic/ut)
-add_subdirectory(ydb/core/sys_view/partition_stats/ut)
-add_subdirectory(ydb/core/sys_view/query_stats/ut)
-add_subdirectory(ydb/core/sys_view/service/ut)
-add_subdirectory(ydb/core/mind/address_classification/ut)
-add_subdirectory(ydb/core/mind/bscontroller/ut)
-add_subdirectory(ydb/core/mind/bscontroller/ut_bscontroller)
-add_subdirectory(ydb/core/mind/bscontroller/ut_selfheal)
-add_subdirectory(ydb/core/mind/hive/ut)
-add_subdirectory(ydb/core/kqp/ut/fat)
-add_subdirectory(ydb/core/kqp/rm/ut)
-add_subdirectory(ydb/core/kqp/proxy/ut)
-add_subdirectory(ydb/core/kqp/runtime/ut)
-add_subdirectory(ydb/core/kqp/executer/ut)
-add_subdirectory(ydb/core/kqp/node/ut)
-add_subdirectory(ydb/core/kqp/provider/ut)
-add_subdirectory(ydb/core/cms/console/ut)
-add_subdirectory(ydb/core/cms/console/validators/ut)
-add_subdirectory(ydb/core/client/metadata/ut)
-add_subdirectory(ydb/core/client/minikql_compile/ut)
-add_subdirectory(ydb/core/client/minikql_result_lib/ut)
-add_subdirectory(ydb/core/client/server/ut)
-add_subdirectory(ydb/core/tx/columnshard/engines/ut)
-add_subdirectory(ydb/core/tx/sequenceshard/public/ut)
-add_subdirectory(ydb/core/testlib/actors/ut)
-add_subdirectory(ydb/core/kesus/proxy/ut)
-add_subdirectory(ydb/core/kesus/tablet/ut)
-add_subdirectory(ydb/core/kesus/tablet/quoter_performance_test)
-add_subdirectory(ydb/core/ymq/actor/ut)
-add_subdirectory(ydb/core/ymq/actor/yc_search_ut)
-add_subdirectory(ydb/core/ymq/base/ut)
-add_subdirectory(ydb/core/ymq/client/bin)
-add_subdirectory(ydb/core/ymq/client/cpp)
-add_subdirectory(ydb/core/ymq/http/ut)
-add_subdirectory(ydb/core/driver_lib/run/ut)
-add_subdirectory(ydb/core/yq/libs/pretty_printers)
-add_subdirectory(ydb/library/http_proxy/authorization/ut)
-add_subdirectory(ydb/library/persqueue/topic_parser/ut)
-add_subdirectory(ydb/library/yql/ast/ut)
-add_subdirectory(ydb/library/yql/core/file_storage/ut)
-add_subdirectory(ydb/library/yql/core/file_storage/http_download)
-add_subdirectory(ydb/library/yql/core/file_storage/http_download/proto)
-add_subdirectory(ydb/library/yql/core/issue/ut)
-add_subdirectory(ydb/library/yql/minikql/ut)
-add_subdirectory(ydb/library/yql/public/udf/service/terminate_policy)
-add_subdirectory(ydb/library/yql/utils/ut)
-add_subdirectory(ydb/library/yql/utils/threading)
-add_subdirectory(ydb/library/yql/utils/actors/ut)
-add_subdirectory(ydb/library/yql/utils/failure_injector/ut)
-add_subdirectory(ydb/library/yql/utils/log/ut)
-add_subdirectory(ydb/public/lib/idx_test/ut)
-add_subdirectory(ydb/public/lib/json_value/ut)
-add_subdirectory(ydb/public/lib/operation_id/ut)
-add_subdirectory(ydb/public/lib/validation/ut)
-add_subdirectory(ydb/public/lib/validation/ut/protos)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_driver/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_value/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_persqueue_core/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_result/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_params/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/ydb_coordination/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/impl/ydb_endpoints/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/draft/ut)
-add_subdirectory(ydb/library/yql/minikql/benchmark/pack_num)
-add_subdirectory(library/cpp/balloc)
-add_subdirectory(library/cpp/balloc/lib)
-add_subdirectory(library/cpp/balloc/setup)
-add_subdirectory(ydb/core/tablet_flat/test/tool/surg)
-add_subdirectory(ydb/core/tablet_flat/test/tool/perf)
-add_subdirectory(ydb/core/tx/replication/ydb_proxy/ut)
-add_subdirectory(ydb/core/yq/libs/checkpointing/ut)
-add_subdirectory(ydb/core/yq/libs/checkpointing/events)
-add_subdirectory(ydb/core/yq/libs/common/ut)
-add_subdirectory(ydb/core/yq/libs/control_plane_proxy/ut)
-add_subdirectory(ydb/core/yq/libs/hmac/ut)
-add_subdirectory(ydb/core/yq/libs/result_formatter/ut)
-add_subdirectory(ydb/core/yq/libs/signer/ut)
-add_subdirectory(ydb/core/yq/libs/test_connection/ut)
-add_subdirectory(ydb/library/yql/dq/actors/compute/ut)
-add_subdirectory(ydb/library/yql/dq/runtime/ut)
-add_subdirectory(ydb/library/yql/dq/state/ut)
-add_subdirectory(ydb/library/yql/parser/pg_catalog/ut)
-add_subdirectory(ydb/library/yql/parser/lexer_common/ut)
-add_subdirectory(ydb/library/yql/providers/common/schema)
-add_subdirectory(ydb/library/yql/providers/common/schema/skiff)
-add_subdirectory(ydb/library/yql/providers/common/ut_helpers)
-add_subdirectory(ydb/library/yql/providers/s3/path_generator)
-add_subdirectory(ydb/library/yql/providers/function/common)
-add_subdirectory(ydb/library/yql/providers/function/expr_nodes)
-add_subdirectory(ydb/library/yql/providers/function/gateway)
-add_subdirectory(ydb/library/yql/providers/function/proto)
-add_subdirectory(ydb/library/yql/providers/function/provider)
-add_subdirectory(ydb/library/yql/public/decimal/ut)
-add_subdirectory(ydb/library/yql/public/issue/ut)
-add_subdirectory(ydb/library/yql/public/udf/ut)
-add_subdirectory(ydb/public/lib/deprecated/kicli/ut)
-add_subdirectory(ydb/public/lib/ydb_cli/common/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/extensions/solomon_stats)
-add_subdirectory(ydb/public/sdk/cpp/client/extensions/discovery_mutator)
-add_subdirectory(ydb/public/sdk/cpp/examples/basic_example)
-add_subdirectory(ydb/public/sdk/cpp/examples/bulk_upsert_simple)
-add_subdirectory(ydb/public/sdk/cpp/examples/pagination)
-add_subdirectory(ydb/public/sdk/cpp/examples/secondary_index)
-add_subdirectory(ydb/public/sdk/cpp/examples/secondary_index_builtin)
-add_subdirectory(ydb/public/sdk/cpp/examples/ttl)
-add_subdirectory(ydb/library/yql/providers/common/codec/ut)
-add_subdirectory(ydb/library/yql/providers/common/http_gateway/mock)
-add_subdirectory(ydb/library/yql/providers/common/structured_token/ut)
-add_subdirectory(ydb/library/yql/providers/pq/gateway/dummy)
-add_subdirectory(ydb/library/yql/providers/s3/path_generator/ut)
-add_subdirectory(ydb/library/yql/udfs/common/stat/ut)
-add_subdirectory(ydb/library/yql/udfs/common/topfreq/ut)
-add_subdirectory(ydb/public/sdk/cpp/client/extensions/discovery_mutator/ut)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea2139cfbb..5116fe445c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -56,7 +56,7 @@ conan_cmake_install(
SETTINGS ${settings}
)
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
elseif (APPLE)
include(CMakeLists.darwin.txt)
diff --git a/build/scripts/check_config_h.py b/build/scripts/check_config_h.py
deleted file mode 100644
index 07bc12e230..0000000000
--- a/build/scripts/check_config_h.py
+++ /dev/null
@@ -1,89 +0,0 @@
-import sys
-
-data = """
-#if defined(SIZEOF_LONG)
-static_assert(sizeof(long) == SIZEOF_LONG, "fixme 1");
-#endif
-
-#if defined(SIZEOF_PTHREAD_T)
-#include <pthread.h>
-
-static_assert(sizeof(pthread_t) == SIZEOF_PTHREAD_T, "fixme 2");
-#endif
-
-#if defined(SIZEOF_SIZE_T)
-#include <stddef.h>
-
-static_assert(sizeof(size_t) == SIZEOF_SIZE_T, "fixme 3");
-#endif
-
-#if defined(SIZEOF_TIME_T)
-#include <time.h>
-
-static_assert(sizeof(time_t) == SIZEOF_TIME_T, "fixme 4");
-#endif
-
-#if defined(SIZEOF_UINTPTR_T)
-#include <stdint.h>
-
-static_assert(sizeof(uintptr_t) == SIZEOF_UINTPTR_T, "fixme 5");
-#endif
-
-#if defined(SIZEOF_VOID_P)
-static_assert(sizeof(void*) == SIZEOF_VOID_P, "fixme 6");
-#endif
-
-#if defined(SIZEOF_FPOS_T)
-#include <stdio.h>
-
-static_assert(sizeof(fpos_t) == SIZEOF_FPOS_T, "fixme 7");
-#endif
-
-#if defined(SIZEOF_DOUBLE)
-static_assert(sizeof(double) == SIZEOF_DOUBLE, "fixme 8");
-#endif
-
-#if defined(SIZEOF_LONG_DOUBLE)
-static_assert(sizeof(long double) == SIZEOF_LONG_DOUBLE, "fixme 9");
-#endif
-
-#if defined(SIZEOF_FLOAT)
-static_assert(sizeof(float) == SIZEOF_FLOAT, "fixme 10");
-#endif
-
-#if defined(SIZEOF_INT)
-static_assert(sizeof(int) == SIZEOF_INT, "fixme 11");
-#endif
-
-#if defined(SIZEOF_LONG_LONG)
-static_assert(sizeof(long long) == SIZEOF_LONG_LONG, "fixme 12");
-#endif
-
-#if defined(SIZEOF_OFF_T)
-#include <stdio.h>
-
-static_assert(sizeof(off_t) == SIZEOF_OFF_T, "fixme 13");
-#endif
-
-#if defined(SIZEOF_PID_T)
-#include <unistd.h>
-
-static_assert(sizeof(pid_t) == SIZEOF_PID_T, "fixme 14");
-#endif
-
-#if defined(SIZEOF_SHORT)
-static_assert(sizeof(short) == SIZEOF_SHORT, "fixme 15");
-#endif
-
-#if defined(SIZEOF_WCHAR_T)
-static_assert(sizeof(wchar_t) == SIZEOF_WCHAR_T, "fixme 16");
-#endif
-
-#if defined(SIZEOF__BOOL)
-//TODO
-#endif
-"""
-if __name__ == '__main__':
- with open(sys.argv[2], 'w') as f:
- f.write('#include <' + sys.argv[1] + '>\n\n')
- f.write(data)
diff --git a/build/scripts/clang_wrapper.py b/build/scripts/clang_wrapper.py
deleted file mode 100644
index af3869f789..0000000000
--- a/build/scripts/clang_wrapper.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import subprocess
-import sys
-
-
-def fix(s):
- # disable dbg DEVTOOLS-2744
- if s == '-g':
- return None
- if s == '/Z7' or s == '/Od' or s == '/Ob0' or s == '/D_DEBUG':
- return None
-
- # disable sanitizers for generated code
- if s.startswith('-fsanitize') or s == '-Dmemory_sanitizer_enabled' or s.startswith('-fsanitize-blacklist'):
- return None
-
- # strip gcc toolchain flags (appear when crosscompiling)
- if s.startswith('-fabi-version'):
- return None
-
- # remove arguments unknown to clang-cl
- if s == '-fcase-insensitive-paths': # or s == '-fno-lto': # DEVTOOLSSUPPORT-3966
- return None
-
- # Paths under .ya/tools/v3/.../msvc/include are divided with '\'
- return s.replace('\\', '/')
-
-
-def fix_path(p):
- try:
- i = p.rfind('/bin/clang')
- p = p[:i] + '/bin/clang-cl'
- except ValueError:
- pass
- return p
-
-
-if __name__ == '__main__':
- is_on_win = sys.argv[1] == 'yes'
- path = sys.argv[2]
- args = filter(None, [fix(s) for s in sys.argv[3:]])
- if is_on_win:
- path = fix_path(path)
- try:
- i = args.index('-emit-llvm')
- args[i:i+1] = ['-Xclang', '-emit-llvm']
- except ValueError:
- pass
- args.append('-fms-compatibility-version=19')
-
- cmd = [path] + args
-
- rc = subprocess.call(cmd, shell=False, stderr=sys.stderr, stdout=sys.stdout)
- sys.exit(rc)
diff --git a/build/scripts/compile_java.py b/build/scripts/compile_java.py
deleted file mode 100644
index e95869e853..0000000000
--- a/build/scripts/compile_java.py
+++ /dev/null
@@ -1,102 +0,0 @@
-import optparse
-import contextlib
-import os
-import shutil
-import subprocess as sp
-import tarfile
-import zipfile
-import sys
-
-
-def parse_args(args):
- parser = optparse.OptionParser()
- parser.add_option('--javac-bin')
- parser.add_option('--jar-bin')
- parser.add_option('--vcs-mf')
- parser.add_option('--package-prefix')
- parser.add_option('--jar-output')
- parser.add_option('--srcs-jar-output')
- return parser.parse_args(args)
-
-
-def mkdir_p(directory):
- if not os.path.exists(directory):
- os.makedirs(directory)
-
-
-def split_cmd_by_delim(cmd, delim='DELIM'):
- result = [[]]
- for arg in cmd:
- if arg == delim:
- result.append([])
- else:
- result[-1].append(arg)
- return result
-
-
-def main():
- cmd_parts = split_cmd_by_delim(sys.argv)
- assert len(cmd_parts) == 3
- args, javac_opts, peers = cmd_parts
- opts, jsrcs = parse_args(args)
-
- jsrcs += list(filter(lambda x: x.endswith('.jsrc'), peers))
- peers = list(filter(lambda x: not x.endswith('.jsrc'), peers))
-
- sources_dir = 'src'
- mkdir_p(sources_dir)
- for s in jsrcs:
- if s.endswith('.jsrc'):
- with contextlib.closing(tarfile.open(s, 'r')) as tf:
- tf.extractall(sources_dir)
-
- srcs = []
- for r, _, files in os.walk(sources_dir):
- for f in files:
- srcs.append(os.path.join(r, f))
- srcs += jsrcs
- srcs = list(filter(lambda x: x.endswith('.java'), srcs))
-
- classes_dir = 'cls'
- mkdir_p(classes_dir)
- classpath = os.pathsep.join(peers)
-
- if srcs:
- temp_sources_file = 'temp.sources.list'
- with open(temp_sources_file, 'w') as ts:
- ts.write(' '.join(srcs))
- sp.check_call([opts.javac_bin, '-nowarn', '-g', '-classpath', classpath, '-encoding', 'UTF-8', '-d', classes_dir] + javac_opts + ['@' + temp_sources_file])
-
- for s in jsrcs:
- if s.endswith('-sources.jar'):
- with zipfile.ZipFile(s) as zf:
- zf.extractall(sources_dir)
-
- elif s.endswith('.jar'):
- with zipfile.ZipFile(s) as zf:
- zf.extractall(classes_dir)
-
- if opts.vcs_mf:
- sp.check_call([opts.jar_bin, 'cfm', opts.jar_output, opts.vcs_mf, os.curdir], cwd=classes_dir)
- else:
- sp.check_call([opts.jar_bin, 'cfM', opts.jar_output, os.curdir], cwd=classes_dir)
-
- if opts.srcs_jar_output:
- for s in jsrcs:
- if s.endswith('.java'):
- if opts.package_prefix:
- d = os.path.join(sources_dir, *(opts.package_prefix.split('.') + [os.path.basename(s)]))
-
- else:
- d = os.path.join(sources_dir, os.path.basename(s))
-
- shutil.copyfile(s, d)
-
- if opts.vcs_mf:
- sp.check_call([opts.jar_bin, 'cfm', opts.srcs_jar_output, opts.vcs_mf, os.curdir], cwd=sources_dir)
- else:
- sp.check_call([opts.jar_bin, 'cfM', opts.srcs_jar_output, os.curdir], cwd=sources_dir)
-
-
-if __name__ == '__main__':
- main()
diff --git a/build/scripts/configure_file.py b/build/scripts/configure_file.py
deleted file mode 100755
index 1873ed70eb..0000000000
--- a/build/scripts/configure_file.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env python2.7
-
-import sys
-import os.path
-import re
-
-cmakeDef01 = "#cmakedefine01"
-cmakeDef = "#cmakedefine"
-
-
-def replaceLine(l, varDict, define):
- words = l.split()
- if words:
- if words[0] == cmakeDef:
- sPos = l.find(cmakeDef)
- ePos = sPos + len(cmakeDef)
- l = l[:sPos] + define + l[ePos:] + '\n'
- if words[0] == cmakeDef01:
- var = words[1]
- cmakeValue = varDict.get(var)
- if cmakeValue == 'yes':
- val = '1'
- else:
- val = '0'
- sPos = l.find(cmakeDef01)
- ePos = l.find(var) + len(var)
- l = l[:sPos] + define + ' ' + var + ' ' + val + l[ePos + 1:] + '\n'
-
- finder = re.compile(".*?(@[a-zA-Z0-9_]+@).*")
- while True:
- re_result = finder.match(l)
- if not re_result:
- return l
- key = re_result.group(1)[1:-1]
- l = l[:re_result.start(1)] + varDict.get(key, '') + l[re_result.end(1):]
-
-
-def main(inputPath, outputPath, varDict):
- define = '#define' if os.path.splitext(outputPath)[1] != '.asm' else '%define'
- with open(outputPath, 'w') as output:
- with open(inputPath, 'r') as input:
- for l in input:
- output.write(replaceLine(l, varDict, define))
-
-
-def usage():
- print "usage: configure_file.py inputPath outputPath key1=value1 ..."
- exit(1)
-
-
-if __name__ == "__main__":
- if len(sys.argv) < 3:
- usage()
- varDict = {}
- for x in sys.argv[3:]:
- key, value = str(x).split('=', 1)
- varDict[key] = value
-
- main(sys.argv[1], sys.argv[2], varDict)
diff --git a/build/scripts/copy_docs_files_to_dir.py b/build/scripts/copy_docs_files_to_dir.py
deleted file mode 100644
index 27fd171ee6..0000000000
--- a/build/scripts/copy_docs_files_to_dir.py
+++ /dev/null
@@ -1,138 +0,0 @@
-import argparse
-import errno
-import os
-import process_command_files as pcf
-import shutil
-import sys
-
-
-def parse_args():
- parser = argparse.ArgumentParser()
- parser.add_argument('--bin-dir', nargs='*')
- parser.add_argument('--build-root', required=True)
- parser.add_argument('--dest-dir', required=True)
- parser.add_argument('--docs-dir', action='append', nargs=2, dest='docs_dirs', default=None)
- parser.add_argument('--existing', choices=('skip', 'overwrite'), default='overwrite')
- parser.add_argument('--source-root', required=True)
- parser.add_argument('--src-dir', action='append', nargs='*', dest='src_dirs', default=None)
- parser.add_argument('files', nargs='*')
- return parser.parse_args(pcf.get_args(sys.argv[1:]))
-
-
-def makedirs(dirname):
- try:
- os.makedirs(dirname)
- except OSError as e:
- if e.errno == errno.EEXIST and os.path.isdir(dirname):
- pass
- else:
- raise
-
-
-def copy_file(src, dst, overwrite=False, orig_path=None, generated=False):
- if os.path.exists(dst) and not overwrite:
- return
-
- makedirs(os.path.dirname(dst))
-
- with open(src, 'r') as fsrc, open(dst, 'w') as fdst:
- # if (orig_path or generated) and src.endswith('.md'):
- # fdst.write('---\n{}\n\n---\n'.format('generated: true' if generated else 'vcsPath: {}'.format(orig_path)))
- shutil.copyfileobj(fsrc, fdst)
-
-
-def main():
- args = parse_args()
-
- dest_dir = os.path.normpath(args.dest_dir)
- makedirs(dest_dir)
-
- source_root = os.path.normpath(args.source_root) + os.path.sep
- build_root = os.path.normpath(args.build_root) + os.path.sep
-
- is_overwrite_existing = args.existing == 'overwrite'
-
- if args.docs_dirs:
- for item in args.docs_dirs:
- assert len(item) == 2
- docs_dir, nm = item[0], item[1]
- assert not os.path.isabs(docs_dir)
- if nm and nm != '.':
- assert not os.path.isabs(nm)
- dst = os.path.join(dest_dir, nm)
- else:
- dst = dest_dir
-
- abs_docs_dir = os.path.join(args.source_root, docs_dir)
-
- for root, _, files in os.walk(abs_docs_dir):
- for f in files:
- if os.path.islink(os.path.join(root, f)):
- continue
- file_src = os.path.join(root, f)
- assert file_src.startswith(source_root)
- file_dst = os.path.join(dst, os.path.relpath(root, abs_docs_dir), f)
- copy_file(file_src, file_dst, overwrite=is_overwrite_existing, orig_path=file_src[len(source_root):])
-
- if args.src_dirs:
- for item in args.src_dirs:
- assert len(item) > 1
- src_dir, nm = os.path.normpath(item[0]), item[1]
- assert os.path.isabs(src_dir)
- if nm and nm != '.':
- assert not os.path.isabs(nm)
- dst = os.path.join(dest_dir, nm)
- else:
- dst = dest_dir
-
- if src_dir.startswith(source_root):
- root = source_root
- is_from_source_root = True
- else:
- assert src_dir.startswith(build_root)
- root = build_root
- is_from_source_root = False
-
- for f in item[2:]:
- file_src = os.path.normpath(f)
- assert file_src.startswith(root)
- rel_path = file_src[len(root):] if is_from_source_root else None
- file_dst = os.path.join(dst, file_src[len(src_dir):])
- copy_file(file_src, file_dst, overwrite=is_overwrite_existing, orig_path=rel_path)
-
- if args.bin_dir:
- assert len(args.bin_dir) > 1
- bin_dir, bin_dir_namespace = os.path.normpath(args.bin_dir[0]) + os.path.sep, args.bin_dir[1]
- assert bin_dir.startswith(build_root)
- if bin_dir_namespace and bin_dir_namespace != '.':
- assert not os.path.isabs(bin_dir_namespace)
- dst = os.path.join(dest_dir, bin_dir_namespace)
- else:
- dst = dest_dir
-
- for file_src in args.bin_dir[2:]:
- assert os.path.isfile(file_src)
- assert file_src.startswith(bin_dir)
- file_dst = os.path.join(dst, file_src[len(bin_dir):])
- copy_file(file_src, file_dst, overwrite=is_overwrite_existing, orig_path=None)
-
- for src in args.files:
- generated = False
- file_src = os.path.normpath(src)
- assert os.path.isfile(file_src), 'File [{}] does not exist...'.format(file_src)
- rel_path = file_src
- if file_src.startswith(source_root):
- rel_path = file_src[len(source_root):]
- elif file_src.startswith(build_root):
- # generated = True
- # rel_path = file_src[len(build_root):]
- rel_path = None
- else:
- raise Exception('Unexpected file path [{}].'.format(file_src))
- assert not os.path.isabs(rel_path)
- file_dst = os.path.join(args.dest_dir, rel_path)
- copy_file(file_src, file_dst, is_overwrite_existing, rel_path, generated)
-
-
-if __name__ == '__main__':
- main()
diff --git a/build/scripts/extract_docs.py b/build/scripts/extract_docs.py
deleted file mode 100644
index 20e8311346..0000000000
--- a/build/scripts/extract_docs.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import argparse
-import os
-import process_command_files as pcf
-import tarfile
-import sys
-
-
-def parse_args():
- parser = argparse.ArgumentParser()
- parser.add_argument('--dest-dir', required=True)
- parser.add_argument('--skip-prefix', dest='skip_prefixes', action='append', default=[])
- parser.add_argument('docs', nargs='*')
- return parser.parse_args(pcf.get_args(sys.argv[1:]))
-
-
-def main():
- args = parse_args()
-
- prefixes = ['{}{}'.format(os.path.normpath(p), os.path.sep) for p in args.skip_prefixes]
-
- def _valid_docslib(path):
- base = os.path.basename(path)
- return base.endswith(('.docslib', '.docslib.fake')) or base == 'preprocessed.tar.gz'
-
- for src in [p for p in args.docs if _valid_docslib(p)]:
- if src == 'preprocessed.tar.gz':
- rel_dst = os.path.dirname(os.path.normpath(src))
- for prefix in prefixes:
- if src.startswith(prefix):
- rel_dst = rel_dst[len(prefix):]
- continue
- assert not os.path.isabs(rel_dst)
- dest_dir = os.path.join(args.dest_dir, rel_dst)
- else:
- dest_dir = args.dest_dir
- if not os.path.exists(dest_dir):
- os.makedirs(dest_dir)
- with tarfile.open(src, 'r') as tar_file:
- tar_file.extractall(dest_dir)
-
-
-if __name__ == '__main__':
- main()
diff --git a/build/scripts/fetch_from.py b/build/scripts/fetch_from.py
deleted file mode 100755
index aa04f816b5..0000000000
--- a/build/scripts/fetch_from.py
+++ /dev/null
@@ -1,375 +0,0 @@
-import datetime as dt
-import errno
-import hashlib
-import json
-import logging
-import os
-import platform
-import random
-import shutil
-import socket
-import string
-import sys
-import tarfile
-import urllib2
-
-import retry
-
-
-def make_user_agent():
- return 'fetch_from: {host}'.format(host=socket.gethostname())
-
-
-def add_common_arguments(parser):
- parser.add_argument('--copy-to') # used by jbuild in fetch_resource
- parser.add_argument('--rename-to') # used by test_node in inject_mds_resource_to_graph
- parser.add_argument('--copy-to-dir')
- parser.add_argument('--untar-to')
- parser.add_argument('--rename', action='append', default=[], metavar='FILE', help='rename FILE to the corresponding output')
- parser.add_argument('--executable', action='store_true', help='make outputs executable')
- parser.add_argument('--log-path')
- parser.add_argument('-v', '--verbose', action='store_true', default=os.environ.get('YA_VERBOSE_FETCHER'), help='increase stderr verbosity')
- parser.add_argument('outputs', nargs='*', default=[])
-
-
-def ensure_dir(path):
- if not (path == '' or os.path.isdir(path)):
- os.makedirs(path)
-
-
-# Reference code: library/python/fs/__init__.py
-def hardlink_or_copy(src, dst):
- ensure_dir(os.path.dirname(dst))
-
- if os.name == 'nt':
- shutil.copy(src, dst)
- else:
- try:
- os.link(src, dst)
- except OSError as e:
- if e.errno == errno.EEXIST:
- return
- elif e.errno in (errno.EXDEV, errno.EMLINK, errno.EINVAL, errno.EACCES):
- sys.stderr.write("Can't make hardlink (errno={}) - fallback to copy: {} -> {}\n".format(e.errno, src, dst))
- shutil.copy(src, dst)
- else:
- raise
-
-
-def rename_or_copy_and_remove(src, dst):
- ensure_dir(os.path.dirname(dst))
-
- try:
- os.rename(src, dst)
- except OSError:
- shutil.copy(src, dst)
- os.remove(src)
-
-
-class BadChecksumFetchError(Exception):
- pass
-
-
-class IncompleteFetchError(Exception):
- pass
-
-
-class ResourceUnpackingError(Exception):
- pass
-
-
-class ResourceIsDirectoryError(Exception):
- pass
-
-
-class OutputIsDirectoryError(Exception):
- pass
-
-
-class OutputNotExistError(Exception):
- pass
-
-
-def setup_logging(args, base_name):
- def makedirs(path):
- try:
- os.makedirs(path)
- except OSError:
- pass
-
- if args.log_path:
- log_file_name = args.log_path
- else:
- log_file_name = base_name + ".log"
-
- args.abs_log_path = os.path.abspath(log_file_name)
- makedirs(os.path.dirname(args.abs_log_path))
- logging.basicConfig(filename=args.abs_log_path, level=logging.DEBUG)
- if args.verbose:
- logging.getLogger().addHandler(logging.StreamHandler(sys.stderr))
-
-
-def is_temporary(e):
-
- def is_broken(e):
- return isinstance(e, urllib2.HTTPError) and e.code in (410, 404)
-
- if is_broken(e):
- return False
-
- if isinstance(e, (BadChecksumFetchError, IncompleteFetchError, urllib2.URLError, socket.error)):
- return True
-
- import error
-
- return error.is_temporary_error(e)
-
-
-def uniq_string_generator(size=6, chars=string.ascii_lowercase + string.digits):
- return ''.join(random.choice(chars) for _ in range(size))
-
-
-def report_to_snowden(value):
- def inner():
- body = {
- 'namespace': 'ygg',
- 'key': 'fetch-from-sandbox',
- 'value': json.dumps(value),
- }
-
- urllib2.urlopen(
- 'https://back-snowden.qloud.yandex-team.ru/report/add',
- json.dumps([body, ]),
- timeout=5,
- )
-
- try:
- inner()
- except Exception as e:
- logging.warning('report_to_snowden failed: %s', e)
-
-
-def copy_stream(read, *writers, **kwargs):
- chunk_size = kwargs.get('size', 1024*1024)
- while True:
- data = read(chunk_size)
- if not data:
- break
- for write in writers:
- write(data)
-
-
-def md5file(fname):
- res = hashlib.md5()
- with open(fname, 'rb') as f:
- copy_stream(f.read, res.update)
- return res.hexdigest()
-
-
-def git_like_hash_with_size(filepath):
- """
- Calculate git like hash for path
- """
- sha = hashlib.sha1()
-
- file_size = 0
-
- with open(filepath, 'rb') as f:
- while True:
- block = f.read(2 ** 16)
-
- if not block:
- break
-
- file_size += len(block)
- sha.update(block)
-
- sha.update('\0')
- sha.update(str(file_size))
-
- return sha.hexdigest(), file_size
-
-
-def size_printer(display_name, size):
- sz = [0]
- last_stamp = [dt.datetime.now()]
-
- def printer(chunk):
- sz[0] += len(chunk)
- now = dt.datetime.now()
- if last_stamp[0] + dt.timedelta(seconds=10) < now:
- if size:
- print >>sys.stderr, "##status##{} - [[imp]]{:.1f}%[[rst]]".format(display_name, 100.0 * sz[0] / size if size else 0)
- last_stamp[0] = now
-
- return printer
-
-
-def fetch_url(url, unpack, resource_file_name, expected_md5=None, expected_sha1=None, tries=10, writers=None):
- logging.info('Downloading from url %s name %s and expected md5 %s', url, resource_file_name, expected_md5)
- tmp_file_name = uniq_string_generator()
-
- request = urllib2.Request(url, headers={'User-Agent': make_user_agent()})
- req = retry.retry_func(lambda: urllib2.urlopen(request, timeout=30), tries=tries, delay=5, backoff=1.57079)
- logging.debug('Headers: %s', req.headers.headers)
- expected_file_size = int(req.headers.get('Content-Length', 0))
- real_md5 = hashlib.md5()
- real_sha1 = hashlib.sha1()
-
- with open(tmp_file_name, 'wb') as fp:
- copy_stream(
- req.read,
- fp.write,
- real_md5.update,
- real_sha1.update,
- size_printer(resource_file_name, expected_file_size),
- *([] if writers is None else writers)
- )
-
- real_md5 = real_md5.hexdigest()
- real_file_size = os.path.getsize(tmp_file_name)
- real_sha1.update('\0')
- real_sha1.update(str(real_file_size))
- real_sha1 = real_sha1.hexdigest()
-
- if unpack:
- tmp_dir = tmp_file_name + '.dir'
- os.makedirs(tmp_dir)
- with tarfile.open(tmp_file_name, mode="r|gz") as tar:
- tar.extractall(tmp_dir)
- tmp_file_name = os.path.join(tmp_dir, resource_file_name)
- real_md5 = md5file(tmp_file_name)
-
- logging.info('File size %s (expected %s)', real_file_size, expected_file_size or "UNKNOWN")
- logging.info('File md5 %s (expected %s)', real_md5, expected_md5)
- logging.info('File sha1 %s (expected %s)', real_sha1, expected_sha1)
-
- if expected_md5 and real_md5 != expected_md5:
- report_to_snowden(
- {
- 'headers': req.headers.headers,
- 'expected_md5': expected_md5,
- 'real_md5': real_md5
- }
- )
-
- raise BadChecksumFetchError(
- 'Downloaded {}, but expected {} for {}'.format(
- real_md5,
- expected_md5,
- url,
- )
- )
-
- if expected_sha1 and real_sha1 != expected_sha1:
- report_to_snowden(
- {
- 'headers': req.headers.headers,
- 'expected_sha1': expected_sha1,
- 'real_sha1': real_sha1
- }
- )
-
- raise BadChecksumFetchError(
- 'Downloaded {}, but expected {} for {}'.format(
- real_sha1,
- expected_sha1,
- url,
- )
- )
-
- if expected_file_size and expected_file_size != real_file_size:
- report_to_snowden({'headers': req.headers.headers, 'file_size': real_file_size})
-
- raise IncompleteFetchError(
- 'Downloaded {}, but expected {} for {}'.format(
- real_file_size,
- expected_file_size,
- url,
- )
- )
-
- return tmp_file_name
-
-
-def chmod(filename, mode):
- if platform.system().lower() == 'windows':
- # https://docs.microsoft.com/en-us/windows/win32/fileio/hard-links-and-junctions:
- # hard to reset read-only attribute for removal if there are multiple hardlinks
- return
- stat = os.stat(filename)
- if stat.st_mode & 0o777 != mode:
- try:
- os.chmod(filename, mode)
- except OSError:
- import pwd
- sys.stderr.write("{} st_mode: {} pwuid: {}\n".format(filename, stat.st_mode, pwd.getpwuid(os.stat(filename).st_uid)))
- raise
-
-
-def process(fetched_file, file_name, args, remove=True):
- assert len(args.rename) <= len(args.outputs), (
- 'too few outputs to rename', args.rename, 'into', args.outputs)
-
- # Forbid changes to the loaded resource
- chmod(fetched_file, 0o444)
-
- if not os.path.isfile(fetched_file):
- raise ResourceIsDirectoryError('Resource must be a file, not a directory: %s' % fetched_file)
-
- if args.copy_to:
- hardlink_or_copy(fetched_file, args.copy_to)
- if not args.outputs:
- args.outputs = [args.copy_to]
-
- if args.rename_to:
- args.rename.append(fetched_file)
- if not args.outputs:
- args.outputs = [args.rename_to]
-
- if args.copy_to_dir:
- hardlink_or_copy(fetched_file, os.path.join(args.copy_to_dir, file_name))
-
- if args.untar_to:
- ensure_dir(args.untar_to)
- # Extract only requested files
- try:
- with tarfile.open(fetched_file, mode='r:*') as tar:
- inputs = set(map(os.path.normpath, args.rename + args.outputs[len(args.rename):]))
- members = [entry for entry in tar if os.path.normpath(os.path.join(args.untar_to, entry.name)) in inputs]
- tar.extractall(args.untar_to, members=members)
- # Forbid changes to the loaded resource data
- for root, _, files in os.walk(args.untar_to):
- for filename in files:
- chmod(os.path.join(root, filename), 0o444)
- except tarfile.ReadError as e:
- logging.exception(e)
- raise ResourceUnpackingError('File {} cannot be untared'.format(fetched_file))
-
- for src, dst in zip(args.rename, args.outputs):
- if src == 'RESOURCE':
- src = fetched_file
- if os.path.abspath(src) == os.path.abspath(fetched_file):
- logging.info('Copying %s to %s', src, dst)
- hardlink_or_copy(src, dst)
- else:
- logging.info('Renaming %s to %s', src, dst)
- if os.path.exists(dst):
- raise ResourceUnpackingError("Target file already exists ({} -> {})".format(src, dst))
- if remove:
- rename_or_copy_and_remove(src, dst)
- else:
- hardlink_or_copy(src, dst)
-
- for path in args.outputs:
- if not os.path.exists(path):
- raise OutputNotExistError('Output does not exist: %s' % os.path.abspath(path))
- if not os.path.isfile(path):
- raise OutputIsDirectoryError('Output must be a file, not a directory: %s' % os.path.abspath(path))
- if args.executable:
- chmod(path, os.stat(path).st_mode | 0o111)
- if os.path.abspath(path) == os.path.abspath(fetched_file):
- remove = False
-
- if remove:
- os.remove(fetched_file)
diff --git a/build/scripts/fetch_from_sandbox.py b/build/scripts/fetch_from_sandbox.py
deleted file mode 100755
index a99542e174..0000000000
--- a/build/scripts/fetch_from_sandbox.py
+++ /dev/null
@@ -1,269 +0,0 @@
-import itertools
-import json
-import logging
-import argparse
-import os
-import random
-import subprocess
-import sys
-import time
-import urllib2
-import uuid
-
-import fetch_from
-
-
-ORIGIN_SUFFIX = '?origin=fetch-from-sandbox'
-MDS_PREFIX = 'http://storage-int.mds.yandex.net/get-sandbox/'
-TEMPORARY_ERROR_CODES = (429, 500, 503, 504)
-
-
-def parse_args():
- parser = argparse.ArgumentParser()
- fetch_from.add_common_arguments(parser)
- parser.add_argument('--resource-id', type=int, required=True)
- parser.add_argument('--custom-fetcher')
- parser.add_argument('--resource-file')
- return parser.parse_args()
-
-
-class ResourceInfoError(Exception):
- pass
-
-
-class UnsupportedProtocolException(Exception):
- pass
-
-
-def _sky_path():
- return "/usr/local/bin/sky"
-
-
-def _is_skynet_avaliable():
- if not os.path.exists(_sky_path()):
- return False
- try:
- subprocess.check_output([_sky_path(), "--version"])
- return True
- except subprocess.CalledProcessError:
- return False
- except OSError:
- return False
-
-
-def download_by_skynet(resource_info, file_name):
- def sky_get(skynet_id, target_dir, timeout=None):
- cmd_args = [_sky_path(), 'get', "-N", "Backbone", "--user", "--wait", "--dir", target_dir, skynet_id]
- if timeout is not None:
- cmd_args += ["--timeout", str(timeout)]
- logging.info('Call skynet with args: %s', cmd_args)
- stdout = subprocess.check_output(cmd_args).strip()
- logging.debug('Skynet call with args %s is finished, result is %s', cmd_args, stdout)
- return stdout
-
- if not _is_skynet_avaliable():
- raise UnsupportedProtocolException("Skynet is not available")
-
- skynet_id = resource_info.get("skynet_id")
- if not skynet_id:
- raise ValueError("Resource does not have skynet_id")
-
- temp_dir = os.path.abspath(fetch_from.uniq_string_generator())
- os.mkdir(temp_dir)
- sky_get(skynet_id, temp_dir)
- return os.path.join(temp_dir, file_name)
-
-
-def _urlopen(url, data=None, headers=None):
- n = 10
- tout = 30
- started = time.time()
- reqid = uuid.uuid4()
-
- request = urllib2.Request(url, data=data, headers=headers or {})
- request.add_header('X-Request-Timeout', str(tout))
- request.add_header('X-Request-Id', str(reqid))
- request.add_header('User-Agent', 'fetch_from_sandbox.py')
- for i in xrange(n):
- retry_after = i
- try:
- request.add_header('X-Request-Duration', str(int(time.time() - started)))
- return urllib2.urlopen(request, timeout=tout).read()
-
- except urllib2.HTTPError as e:
- logging.warning('failed to fetch URL %s with HTTP code %d: %s', url, e.code, e)
- retry_after = int(e.headers.get('Retry-After', str(retry_after)))
-
- if e.code not in TEMPORARY_ERROR_CODES:
- raise
-
- except Exception as e:
- logging.warning('failed to fetch URL %s: %s', url, e)
-
- if i + 1 == n:
- raise e
-
- time.sleep(retry_after)
-
-
-def _query(url):
- return json.loads(_urlopen(url))
-
-
-_SANDBOX_BASE_URL = 'https://sandbox.yandex-team.ru/api/v1.0'
-
-
-def get_resource_info(resource_id, touch=False, no_links=False):
- url = ''.join((_SANDBOX_BASE_URL, '/resource/', str(resource_id)))
- headers = {}
- if touch:
- headers.update({'X-Touch-Resource': '1'})
- if no_links:
- headers.update({'X-No-Links': '1'})
- return _query(url)
-
-
-def get_resource_http_links(resource_id):
- url = ''.join((_SANDBOX_BASE_URL, '/resource/', str(resource_id), '/data/http'))
- return [r['url'] + ORIGIN_SUFFIX for r in _query(url)]
-
-
-def fetch_via_script(script, resource_id):
- return subprocess.check_output([script, str(resource_id)]).rstrip()
-
-
-def fetch(resource_id, custom_fetcher):
- try:
- resource_info = get_resource_info(resource_id, touch=True, no_links=True)
- except Exception as e:
- sys.stderr.write(
- "Failed to fetch resource {}: {}\n".format(resource_id, str(e))
- )
- raise
-
- if resource_info.get('state', 'DELETED') != 'READY':
- raise ResourceInfoError("Resource {} is not READY".format(resource_id))
-
- logging.info('Resource %s info %s', str(resource_id), json.dumps(resource_info))
-
- resource_file_name = os.path.basename(resource_info["file_name"])
- expected_md5 = resource_info.get('md5')
-
- proxy_link = resource_info['http']['proxy'] + ORIGIN_SUFFIX
-
- mds_id = resource_info.get('attributes', {}).get('mds')
- mds_link = MDS_PREFIX + mds_id if mds_id else None
-
- def get_storage_links():
- storage_links = get_resource_http_links(resource_id)
- random.shuffle(storage_links)
- return storage_links
-
- skynet = _is_skynet_avaliable()
-
- if not skynet:
- logging.info("Skynet is not available, will try other protocols")
-
- def iter_tries():
- if skynet:
- yield lambda: download_by_skynet(resource_info, resource_file_name)
-
- if custom_fetcher:
- yield lambda: fetch_via_script(custom_fetcher, resource_id)
-
- # Don't try too hard here: we will get back to proxy later on
- yield lambda: fetch_from.fetch_url(proxy_link, False, resource_file_name, expected_md5, tries=2)
- for x in get_storage_links():
- # Don't spend too much time connecting single host
- yield lambda: fetch_from.fetch_url(x, False, resource_file_name, expected_md5, tries=1)
- if mds_link is not None:
- # Don't try too hard here: we will get back to MDS later on
- yield lambda: fetch_from.fetch_url(mds_link, True, resource_file_name, expected_md5, tries=2)
- yield lambda: fetch_from.fetch_url(proxy_link, False, resource_file_name, expected_md5)
- if mds_link is not None:
- yield lambda: fetch_from.fetch_url(mds_link, True, resource_file_name, expected_md5)
-
- if resource_info.get('attributes', {}).get('ttl') != 'inf':
- sys.stderr.write('WARNING: resource {} ttl is not "inf".\n'.format(resource_id))
-
- exc_info = None
- for i, action in enumerate(itertools.islice(iter_tries(), 0, 10)):
- try:
- fetched_file = action()
- break
- except UnsupportedProtocolException:
- pass
- except subprocess.CalledProcessError as e:
- logging.warning('failed to fetch resource %s with subprocess: %s', resource_id, e)
- time.sleep(i)
- except urllib2.HTTPError as e:
- logging.warning('failed to fetch resource %s with HTTP code %d: %s', resource_id, e.code, e)
- if e.code not in TEMPORARY_ERROR_CODES:
- exc_info = exc_info or sys.exc_info()
- time.sleep(i)
- except Exception as e:
- logging.exception(e)
- exc_info = exc_info or sys.exc_info()
- time.sleep(i)
- else:
- if exc_info:
- raise exc_info[0], exc_info[1], exc_info[2]
- else:
- raise Exception("No available protocol and/or server to fetch resource")
-
- return fetched_file, resource_info['file_name']
-
-
-def _get_resource_info_from_file(resource_file):
- if resource_file is None or not os.path.exists(resource_file):
- return None
-
- RESOURCE_INFO_JSON = "resource_info.json"
- RESOURCE_CONTENT_FILE_NAME = "resource"
-
- resource_dir, resource_file = os.path.split(resource_file)
- if resource_file != RESOURCE_CONTENT_FILE_NAME:
- return None
-
- resource_json = os.path.join(resource_dir, RESOURCE_INFO_JSON)
- if not os.path.isfile(resource_json):
- return None
-
- try:
- with open(resource_json, 'r') as j:
- resource_info = json.load(j)
- resource_info['file_name'] # check consistency
- return resource_info
- except:
- logging.debug('Invalid %s in %s', RESOURCE_INFO_JSON, resource_dir)
-
- return None
-
-
-def main(args):
- custom_fetcher = os.environ.get('YA_CUSTOM_FETCHER')
-
- resource_info = _get_resource_info_from_file(args.resource_file)
- if resource_info:
- fetched_file = args.resource_file
- file_name = resource_info['file_name']
- else:
- # This code should be merged to ya and removed.
- fetched_file, file_name = fetch(args.resource_id, custom_fetcher)
-
- fetch_from.process(fetched_file, file_name, args, remove=not custom_fetcher and not resource_info)
-
-
-if __name__ == '__main__':
- args = parse_args()
- fetch_from.setup_logging(args, os.path.basename(__file__))
-
- try:
- main(args)
- except Exception as e:
- logging.exception(e)
- print >>sys.stderr, open(args.abs_log_path).read()
- sys.stderr.flush()
-
- import error
- sys.exit(error.ExitCodes.INFRASTRUCTURE_ERROR if fetch_from.is_temporary(e) else 1)
diff --git a/build/scripts/fs_tools.py b/build/scripts/fs_tools.py
deleted file mode 100644
index dec4c349c8..0000000000
--- a/build/scripts/fs_tools.py
+++ /dev/null
@@ -1,104 +0,0 @@
-from __future__ import print_function
-
-import os
-import platform
-import sys
-import shutil
-import errno
-
-import process_command_files as pcf
-
-
-def link_or_copy(src, dst):
- try:
- if platform.system().lower() == 'windows':
- shutil.copy(src, dst)
- else:
- os.link(src, dst)
- except OSError as e:
- if e.errno == errno.EEXIST:
- print('link_or_copy: destination file already exists: {}'.format(dst), file=sys.stderr)
- if e.errno == errno.ENOENT:
- print('link_or_copy: source file doesn\'t exists: {}'.format(src), file=sys.stderr)
- raise
-
-
-if __name__ == '__main__':
- mode = sys.argv[1]
- args = pcf.get_args(sys.argv[2:])
-
- if mode == 'copy':
- shutil.copy(args[0], args[1])
- elif mode == 'copy_tree_no_link':
- dst = args[1]
- shutil.copytree(args[0], dst, ignore=lambda dirname, names: [n for n in names if os.path.islink(os.path.join(dirname, n))])
- elif mode == 'copy_files':
- src = args[0]
- dst = args[1]
- files = open(args[2]).read().strip().split()
- for f in files:
- s = os.path.join(src, f)
- d = os.path.join(dst, f)
- if os.path.exists(d):
- continue
- try:
- os.makedirs(os.path.dirname(d))
- except OSError:
- pass
- shutil.copy(s, d)
- elif mode == 'copy_all_files':
- src = args[0]
- dst = args[1]
- for root, _, files in os.walk(src):
- for f in files:
- if os.path.islink(os.path.join(root, f)):
- continue
- file_dst = os.path.join(dst, os.path.relpath(root, src), f)
- if os.path.exists(file_dst):
- continue
- try:
- os.makedirs(os.path.dirname(file_dst))
- except OSError:
- pass
- shutil.copy(os.path.join(root, f), file_dst)
- elif mode == 'rename_if_exists':
- if os.path.exists(args[0]):
- shutil.move(args[0], args[1])
- elif mode == 'rename':
- targetdir = os.path.dirname(args[1])
- if targetdir and not os.path.exists(targetdir):
- os.makedirs(os.path.dirname(args[1]))
- shutil.move(args[0], args[1])
- elif mode == 'remove':
- for f in args:
- try:
- if os.path.isfile(f) or os.path.islink(f):
- os.remove(f)
- else:
- shutil.rmtree(f)
- except OSError:
- pass
- elif mode == 'link_or_copy':
- link_or_copy(args[0], args[1])
- elif mode == 'link_or_copy_to_dir':
- assert len(args) > 1
- start = 0
- if args[0] == '--no-check':
- if args == 2:
- sys.exit()
- start = 1
- dst = args[-1]
- for src in args[start:-1]:
- link_or_copy(src, os.path.join(dst, os.path.basename(src)))
- elif mode == 'cat':
- with open(args[0], 'w') as dst:
- for input_name in args[1:]:
- with open(input_name) as src:
- dst.write(src.read())
- elif mode == 'md':
- try:
- os.makedirs(args[0])
- except OSError:
- pass
- else:
- raise Exception('unsupported tool %s' % mode)
diff --git a/build/scripts/gen_py3_reg.py b/build/scripts/gen_py3_reg.py
deleted file mode 100644
index 149c094898..0000000000
--- a/build/scripts/gen_py3_reg.py
+++ /dev/null
@@ -1,34 +0,0 @@
-import sys
-
-template = '''
-struct PyObject;
-extern "C" int PyImport_AppendInittab(const char* name, PyObject* (*initfunc)());
-extern "C" PyObject* {1}();
-
-namespace {
- struct TRegistrar {
- inline TRegistrar() {
- // TODO Collect all modules and call PyImport_ExtendInittab once
- PyImport_AppendInittab("{0}", {1});
- }
- } REG;
-}
-'''
-
-
-def mangle(name):
- if '.' not in name:
- return name
- return ''.join('{}{}'.format(len(s), s) for s in name.split('.'))
-
-if __name__ == '__main__':
- if len(sys.argv) != 3:
- print >>sys.stderr, 'Usage: <path/to/gen_py_reg.py> <python_module_name> <output_file>'
- print >>sys.stderr, 'Passed: ' + ' '.join(sys.argv)
- sys.exit(1)
-
- with open(sys.argv[2], 'w') as f:
- modname = sys.argv[1]
- initname = 'PyInit_' + mangle(modname)
- code = template.replace('{0}', modname).replace('{1}', initname)
- f.write(code)
diff --git a/build/scripts/gen_py_protos.py b/build/scripts/gen_py_protos.py
deleted file mode 100644
index 08397472f9..0000000000
--- a/build/scripts/gen_py_protos.py
+++ /dev/null
@@ -1,67 +0,0 @@
-import os
-from os import path
-import shutil
-import subprocess
-import sys
-import tempfile
-import argparse
-import re
-
-
-OUT_DIR_ARG = '--python_out='
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument("--suffixes", nargs="*", default=[])
- parser.add_argument("protoc_args", nargs=argparse.REMAINDER)
- script_args = parser.parse_args()
-
- args = script_args.protoc_args
-
- if args[0] == "--":
- args = args[1:]
-
- out_dir_orig = None
- out_dir_temp = None
- plugin_out_dirs_orig = {}
- for i in range(len(args)):
- if args[i].startswith(OUT_DIR_ARG):
- assert not out_dir_orig, 'Duplicate "{0}" param'.format(OUT_DIR_ARG)
- out_dir_orig = args[i][len(OUT_DIR_ARG):]
- out_dir_temp = tempfile.mkdtemp(dir=out_dir_orig)
- args[i] = OUT_DIR_ARG + out_dir_temp
- continue
-
- match = re.match(r"^(--(\w+)_out=).*", args[i])
- if match:
- plugin_out_dir_arg = match.group(1)
- plugin = match.group(2)
- assert plugin not in plugin_out_dirs_orig, 'Duplicate "{0}" param'.format(plugin_out_dir_arg)
- plugin_out_dirs_orig[plugin] = args[i][len(plugin_out_dir_arg):]
- assert plugin_out_dirs_orig[plugin] == out_dir_orig, 'Params "{0}" and "{1}" expected to have the same value'.format(OUT_DIR_ARG, plugin_out_dir_arg)
- args[i] = plugin_out_dir_arg + out_dir_temp
-
- assert out_dir_temp, 'Param "{0}" not found'.format(OUT_DIR_ARG)
-
- retcode = subprocess.call(args)
- assert not retcode, 'Protoc failed for command {}'.format(' '.join(args))
-
- for root_temp, dirs, files in os.walk(out_dir_temp):
- sub_dir = path.relpath(root_temp, out_dir_temp)
- root_orig = path.join(out_dir_orig, sub_dir)
- for d in dirs:
- d_orig = path.join(root_orig, d)
- if not path.exists(d_orig):
- os.mkdir(d_orig)
- for f in files:
- f_orig = f
- for suf in script_args.suffixes:
- if f.endswith(suf):
- f_orig = f[:-len(suf)] + "__int__" + suf
- break
- os.rename(path.join(root_temp, f), path.join(root_orig, f_orig))
- shutil.rmtree(out_dir_temp)
-
-
-if __name__ == '__main__':
- main()
diff --git a/build/scripts/gen_py_reg.py b/build/scripts/gen_py_reg.py
deleted file mode 100644
index 1560135ae8..0000000000
--- a/build/scripts/gen_py_reg.py
+++ /dev/null
@@ -1,32 +0,0 @@
-import sys
-
-template = '''
-extern "C" void PyImport_AppendInittab(const char* name, void (*fn)(void));
-extern "C" void {1}();
-
-namespace {
- struct TRegistrar {
- inline TRegistrar() {
- PyImport_AppendInittab("{0}", {1});
- }
- } REG;
-}
-'''
-
-
-def mangle(name):
- if '.' not in name:
- return name
- return ''.join('{}{}'.format(len(s), s) for s in name.split('.'))
-
-if __name__ == '__main__':
- if len(sys.argv) != 3:
- print >>sys.stderr, 'Usage: <path/to/gen_py_reg.py> <python_module_name> <output_file>'
- print >>sys.stderr, 'Passed: ' + ' '.join(sys.argv)
- sys.exit(1)
-
- with open(sys.argv[2], 'w') as f:
- modname = sys.argv[1]
- initname = 'init' + mangle(modname)
- code = template.replace('{0}', modname).replace('{1}', initname)
- f.write(code)
diff --git a/build/scripts/link_dyn_lib.py b/build/scripts/link_dyn_lib.py
deleted file mode 100644
index 918c23293c..0000000000
--- a/build/scripts/link_dyn_lib.py
+++ /dev/null
@@ -1,335 +0,0 @@
-import sys
-import os
-import subprocess
-import tempfile
-import collections
-import optparse
-import pipes
-
-from process_whole_archive_option import ProcessWholeArchiveOption
-
-
-def shlex_join(cmd):
- # equivalent to shlex.join() in python 3
- return ' '.join(
- pipes.quote(part)
- for part in cmd
- )
-
-
-def parse_export_file(p):
- with open(p, 'r') as f:
- for l in f:
- l = l.strip()
-
- if l and '#' not in l:
- words = l.split()
- if len(words) == 2 and words[0] == 'linux_version':
- yield {'linux_version': words[1]}
- elif len(words) == 2:
- yield {'lang': words[0], 'sym': words[1]}
- elif len(words) == 1:
- yield {'lang': 'C', 'sym': words[0]}
- else:
- raise Exception('unsupported exports line: ' + l)
-
-
-def to_c(sym):
- symbols = collections.deque(sym.split('::'))
- c_prefixes = [ # demangle prefixes for c++ symbols
- '_ZN', # namespace
- '_ZTIN', # typeinfo for
- '_ZTSN', # typeinfo name for
- '_ZTTN', # VTT for
- '_ZTVN', # vtable for
- '_ZNK', # const methods
- ]
- c_sym = ''
- while symbols:
- s = symbols.popleft()
- if s == '*':
- c_sym += '*'
- break
- if '*' in s and len(s) > 1:
- raise Exception('Unsupported format, cannot guess length of symbol: ' + s)
- c_sym += str(len(s)) + s
- if symbols:
- raise Exception('Unsupported format: ' + sym)
- if c_sym[-1] != '*':
- c_sym += 'E*'
- return ['{prefix}{sym}'.format(prefix=prefix, sym=c_sym) for prefix in c_prefixes]
-
-
-def fix_darwin_param(ex):
- for item in ex:
- if item.get('linux_version'):
- continue
-
- if item['lang'] == 'C':
- yield '-Wl,-exported_symbol,_' + item['sym']
- elif item['lang'] == 'C++':
- for sym in to_c(item['sym']):
- yield '-Wl,-exported_symbol,_' + sym
- else:
- raise Exception('unsupported lang: ' + item['lang'])
-
-
-def fix_gnu_param(arch, ex):
- d = collections.defaultdict(list)
- version = None
- for item in ex:
- if item.get('linux_version'):
- if not version:
- version = item.get('linux_version')
- else:
- raise Exception('More than one linux_version defined')
- elif item['lang'] == 'C++':
- d['C'].extend(to_c(item['sym']))
- else:
- d[item['lang']].append(item['sym'])
-
- with tempfile.NamedTemporaryFile(mode='wt', delete=False) as f:
- if version:
- f.write('{} {{\nglobal:\n'.format(version))
- else:
- f.write('{\nglobal:\n')
-
- for k, v in d.items():
- f.write(' extern "' + k + '" {\n')
-
- for x in v:
- f.write(' ' + x + ';\n')
-
- f.write(' };\n')
-
- f.write('local: *;\n};\n')
-
- ret = ['-Wl,--version-script=' + f.name]
-
- if arch == 'ANDROID':
- ret += ['-Wl,--export-dynamic']
-
- return ret
-
-
-def fix_windows_param(ex):
- with tempfile.NamedTemporaryFile(delete=False) as def_file:
- exports = []
- for item in ex:
- if item.get('lang') == 'C':
- exports.append(item.get('sym'))
- def_file.write('EXPORTS\n')
- for export in exports:
- def_file.write(' {}\n'.format(export))
- return ['/DEF:{}'.format(def_file.name)]
-
-
-MUSL_LIBS = '-lc', '-lcrypt', '-ldl', '-lm', '-lpthread', '-lrt', '-lutil'
-
-CUDA_LIBRARIES = {
- '-lcublas_static': '-lcublas',
- '-lcublasLt_static': '-lcublasLt',
- '-lcudart_static': '-lcudart',
- '-lcudnn_static': '-lcudnn',
- '-lcufft_static_nocallback': '-lcufft',
- '-lcurand_static': '-lcurand',
- '-lcusolver_static': '-lcusolver',
- '-lcusparse_static': '-lcusparse',
- '-lmyelin_compiler_static': '-lmyelin',
- '-lmyelin_executor_static': '-lnvcaffe_parser',
- '-lmyelin_pattern_library_static': '',
- '-lmyelin_pattern_runtime_static': '',
- '-lnvinfer_static': '-lnvinfer',
- '-lnvinfer_plugin_static': '-lnvinfer_plugin',
- '-lnvonnxparser_static': '-lnvonnxparser',
- '-lnvparsers_static': '-lnvparsers'
-}
-
-
-def fix_cmd(arch, c):
- if arch == 'WINDOWS':
- prefix = '/DEF:'
- f = fix_windows_param
- else:
- prefix = '-Wl,--version-script='
- if arch in ('DARWIN', 'IOS', 'IOSSIM'):
- f = fix_darwin_param
- else:
- f = lambda x: fix_gnu_param(arch, x)
-
- def do_fix(p):
- if p.startswith(prefix) and p.endswith('.exports'):
- fname = p[len(prefix):]
-
- return list(f(list(parse_export_file(fname))))
-
- if p.endswith('.supp'):
- return []
-
- if p.endswith('.pkg.fake'):
- return []
-
- return [p]
-
- return sum((do_fix(x) for x in c), [])
-
-
-def fix_cmd_for_musl(cmd):
- flags = []
- for flag in cmd:
- if flag not in MUSL_LIBS:
- flags.append(flag)
- return flags
-
-
-def fix_cmd_for_dynamic_cuda(cmd):
- flags = []
- for flag in cmd:
- if flag in CUDA_LIBRARIES:
- flags.append(CUDA_LIBRARIES[flag])
- else:
- flags.append(flag)
- return flags
-
-
-def parse_args():
- parser = optparse.OptionParser()
- parser.disable_interspersed_args()
- parser.add_option('--arch')
- parser.add_option('--target')
- parser.add_option('--soname')
- parser.add_option('--fix-elf')
- parser.add_option('--linker-output')
- parser.add_option('--musl', action='store_true')
- parser.add_option('--dynamic-cuda', action='store_true')
- parser.add_option('--whole-archive-peers', action='append')
- parser.add_option('--whole-archive-libs', action='append')
- return parser.parse_args()
-
-
-if __name__ == '__main__':
- opts, args = parse_args()
-
- assert opts.arch
- assert opts.target
-
- cmd = fix_cmd(opts.arch, args)
-
- if opts.musl:
- cmd = fix_cmd_for_musl(cmd)
- if opts.dynamic_cuda:
- cmd = fix_cmd_for_dynamic_cuda(cmd)
-
- cmd = ProcessWholeArchiveOption(opts.arch, opts.whole_archive_peers, opts.whole_archive_libs).construct_cmd(cmd)
-
- if opts.linker_output:
- stdout = open(opts.linker_output, 'w')
- else:
- stdout = sys.stdout
-
- proc = subprocess.Popen(cmd, shell=False, stderr=sys.stderr, stdout=stdout)
- proc.communicate()
-
- if proc.returncode:
- print >>sys.stderr, 'linker has failed with retcode:', proc.returncode
- print >>sys.stderr, 'linker command:', shlex_join(cmd)
- sys.exit(proc.returncode)
-
- if opts.fix_elf:
- cmd = [opts.fix_elf, opts.target]
- proc = subprocess.Popen(cmd, shell=False, stderr=sys.stderr, stdout=sys.stdout)
- proc.communicate()
-
- if proc.returncode:
- print >>sys.stderr, 'fix_elf has failed with retcode:', proc.returncode
- print >>sys.stderr, 'fix_elf command:', shlex_join(cmd)
- sys.exit(proc.returncode)
-
- if opts.soname and opts.soname != opts.target:
- if os.path.exists(opts.soname):
- os.unlink(opts.soname)
- os.link(opts.target, opts.soname)
-
-
-# -----------------Test---------------- #
-def write_temp_file(content):
- import yatest.common as yc
- filename = yc.output_path('test.exports')
- with open(filename, 'w') as f:
- f.write(content)
- return filename
-
-
-def test_fix_cmd_darwin():
- export_file_content = """
-C++ geobase5::details::lookup_impl::*
-C++ geobase5::hardcoded_service
-"""
- filename = write_temp_file(export_file_content)
- args = ['-Wl,--version-script={}'.format(filename)]
- assert fix_cmd('DARWIN', args) == [
- '-Wl,-exported_symbol,__ZN8geobase57details11lookup_impl*',
- '-Wl,-exported_symbol,__ZTIN8geobase57details11lookup_impl*',
- '-Wl,-exported_symbol,__ZTSN8geobase57details11lookup_impl*',
- '-Wl,-exported_symbol,__ZTTN8geobase57details11lookup_impl*',
- '-Wl,-exported_symbol,__ZTVN8geobase57details11lookup_impl*',
- '-Wl,-exported_symbol,__ZNK8geobase57details11lookup_impl*',
- '-Wl,-exported_symbol,__ZN8geobase517hardcoded_serviceE*',
- '-Wl,-exported_symbol,__ZTIN8geobase517hardcoded_serviceE*',
- '-Wl,-exported_symbol,__ZTSN8geobase517hardcoded_serviceE*',
- '-Wl,-exported_symbol,__ZTTN8geobase517hardcoded_serviceE*',
- '-Wl,-exported_symbol,__ZTVN8geobase517hardcoded_serviceE*',
- '-Wl,-exported_symbol,__ZNK8geobase517hardcoded_serviceE*',
- ]
-
-
-def run_fix_gnu_param(export_file_content):
- filename = write_temp_file(export_file_content)
- result = fix_gnu_param('LINUX', list(parse_export_file(filename)))[0]
- version_script_path = result[len('-Wl,--version-script='):]
- with open(version_script_path) as f:
- content = f.read()
- return content
-
-
-def test_fix_gnu_param():
- export_file_content = """
-C++ geobase5::details::lookup_impl::*
-C getFactoryMap
-"""
- assert run_fix_gnu_param(export_file_content) == """{
-global:
- extern "C" {
- _ZN8geobase57details11lookup_impl*;
- _ZTIN8geobase57details11lookup_impl*;
- _ZTSN8geobase57details11lookup_impl*;
- _ZTTN8geobase57details11lookup_impl*;
- _ZTVN8geobase57details11lookup_impl*;
- _ZNK8geobase57details11lookup_impl*;
- getFactoryMap;
- };
-local: *;
-};
-"""
-
-
-def test_fix_gnu_param_with_linux_version():
- export_file_content = """
-C++ geobase5::details::lookup_impl::*
-linux_version ver1.0
-C getFactoryMap
-"""
- assert run_fix_gnu_param(export_file_content) == """ver1.0 {
-global:
- extern "C" {
- _ZN8geobase57details11lookup_impl*;
- _ZTIN8geobase57details11lookup_impl*;
- _ZTSN8geobase57details11lookup_impl*;
- _ZTTN8geobase57details11lookup_impl*;
- _ZTVN8geobase57details11lookup_impl*;
- _ZNK8geobase57details11lookup_impl*;
- getFactoryMap;
- };
-local: *;
-};
-"""
diff --git a/build/scripts/link_exe.py b/build/scripts/link_exe.py
deleted file mode 100644
index aa96818851..0000000000
--- a/build/scripts/link_exe.py
+++ /dev/null
@@ -1,130 +0,0 @@
-import sys
-import subprocess
-import optparse
-
-from process_whole_archive_option import ProcessWholeArchiveOption
-
-
-def get_leaks_suppressions(cmd):
- supp, newcmd = [], []
- for arg in cmd:
- if arg.endswith(".supp"):
- supp.append(arg)
- else:
- newcmd.append(arg)
- return supp, newcmd
-
-
-MUSL_LIBS = '-lc', '-lcrypt', '-ldl', '-lm', '-lpthread', '-lrt', '-lutil'
-
-
-CUDA_LIBRARIES = {
- '-lcublas_static': '-lcublas',
- '-lcublasLt_static': '-lcublasLt',
- '-lcudart_static': '-lcudart',
- '-lcudnn_static': '-lcudnn',
- '-lcufft_static_nocallback': '-lcufft',
- '-lcurand_static': '-lcurand',
- '-lcusolver_static': '-lcusolver',
- '-lcusparse_static': '-lcusparse',
- '-lmyelin_compiler_static': '-lmyelin',
- '-lmyelin_executor_static': '-lnvcaffe_parser',
- '-lmyelin_pattern_library_static': '',
- '-lmyelin_pattern_runtime_static': '',
- '-lnvinfer_static': '-lnvinfer',
- '-lnvinfer_plugin_static': '-lnvinfer_plugin',
- '-lnvonnxparser_static': '-lnvonnxparser',
- '-lnvparsers_static': '-lnvparsers'
-}
-
-
-def remove_excessive_flags(cmd):
- flags = []
- for flag in cmd:
- if not flag.endswith('.ios.interface') and not flag.endswith('.pkg.fake'):
- flags.append(flag)
- return flags
-
-
-def fix_cmd_for_musl(cmd):
- flags = []
- for flag in cmd:
- if flag not in MUSL_LIBS:
- flags.append(flag)
- return flags
-
-
-def fix_cmd_for_dynamic_cuda(cmd):
- flags = []
- for flag in cmd:
- if flag in CUDA_LIBRARIES:
- flags.append(CUDA_LIBRARIES[flag])
- else:
- flags.append(flag)
- return flags
-
-
-def gen_default_suppressions(inputs, output, source_root):
- import collections
- import os
-
- supp_map = collections.defaultdict(set)
- for filename in inputs:
- sanitizer = os.path.basename(filename).split('.', 1)[0]
- with open(os.path.join(source_root, filename)) as src:
- for line in src:
- line = line.strip()
- if not line or line.startswith('#'):
- continue
- supp_map[sanitizer].add(line)
-
- with open(output, "wb") as dst:
- for supp_type, supps in supp_map.items():
- dst.write('extern "C" const char *__%s_default_suppressions() {\n' % supp_type)
- dst.write(' return "{}";\n'.format('\\n'.join(sorted(supps))))
- dst.write('}\n')
-
-
-def parse_args():
- parser = optparse.OptionParser()
- parser.disable_interspersed_args()
- parser.add_option('--musl', action='store_true')
- parser.add_option('--custom-step')
- parser.add_option('--python')
- parser.add_option('--source-root')
- parser.add_option('--dynamic-cuda', action='store_true')
- parser.add_option('--arch')
- parser.add_option('--linker-output')
- parser.add_option('--whole-archive-peers', action='append')
- parser.add_option('--whole-archive-libs', action='append')
- return parser.parse_args()
-
-
-if __name__ == '__main__':
- opts, args = parse_args()
-
- cmd = remove_excessive_flags(args)
- if opts.musl:
- cmd = fix_cmd_for_musl(cmd)
-
- if opts.dynamic_cuda:
- cmd = fix_cmd_for_dynamic_cuda(cmd)
- cmd = ProcessWholeArchiveOption(opts.arch, opts.whole_archive_peers, opts.whole_archive_libs).construct_cmd(cmd)
-
- if opts.custom_step:
- assert opts.python
- subprocess.check_call([opts.python] + [opts.custom_step] + args)
-
- supp, cmd = get_leaks_suppressions(cmd)
- if supp:
- src_file = "default_suppressions.cpp"
- gen_default_suppressions(supp, src_file, opts.source_root)
- cmd += [src_file]
-
- if opts.linker_output:
- stdout = open(opts.linker_output, 'w')
- else:
- stdout = sys.stdout
-
- rc = subprocess.call(cmd, shell=False, stderr=sys.stderr, stdout=stdout)
- sys.exit(rc)
diff --git a/build/scripts/link_lib.py b/build/scripts/link_lib.py
deleted file mode 100644
index 5ca50ef844..0000000000
--- a/build/scripts/link_lib.py
+++ /dev/null
@@ -1,85 +0,0 @@
-import sys
-import subprocess
-import tempfile
-import os
-
-
-class Opts(object):
- def __init__(self, args):
- self.archiver = args[0]
- self.arch_type = args[1]
- self.llvm_ar_format = args[2]
- self.build_root = args[3]
- self.plugin = args[4]
- self.output = args[5]
- auto_input = args[6:]
-
- if self.arch_type == 'GNU_AR':
- self.create_flags = ['rcs']
- self.modify_flags = ['-M']
- elif self.arch_type == 'LLVM_AR':
- self.create_flags = ['rcs', '--format=%s' % self.llvm_ar_format]
- self.modify_flags = ['-M']
- elif self.arch_type == 'LIBTOOL':
- self.create_flags = ['-static', '-o']
- self.modify_flags = []
-
- need_modify = self.arch_type != 'LIBTOOL' and any(item.endswith('.a') for item in auto_input)
- if need_modify:
- self.objs = filter(lambda x: x.endswith('.o'), auto_input)
- self.libs = filter(lambda x: x.endswith('.a'), auto_input)
- else:
- self.objs = auto_input
- self.libs = []
-
- self.plugin_flags = ['--plugin', self.plugin] if self.plugin != 'None' else []
-
-
-def get_opts(args):
- return Opts(args)
-
-
-if __name__ == "__main__":
- opts = get_opts(sys.argv[1:])
-
- # There is a bug in llvm-ar. Some files with size slightly greater 2^32
- # still have GNU format instead of GNU64 and cause link problems.
- # Workaround just lowers llvm-ar's GNU64 threshold to 2^31.
- if opts.arch_type == 'LLVM_AR':
- os.environ['SYM64_THRESHOLD'] = '31'
-
- def call():
- try:
- p = subprocess.Popen(cmd, stdin=stdin, cwd=opts.build_root)
- rc = p.wait()
- return rc
- except OSError as e:
- raise Exception('while running %s: %s' % (' '.join(cmd), e))
-
- try:
- os.unlink(opts.output)
- except OSError:
- pass
-
- if not opts.libs:
- cmd = [opts.archiver] + opts.create_flags + opts.plugin_flags + [opts.output] + opts.objs
- stdin = None
- exit_code = call()
- else:
- temp = tempfile.NamedTemporaryFile(dir=os.path.dirname(opts.output), delete=False)
-
- with open(temp.name, 'w') as tmp:
- tmp.write('CREATE {0}\n'.format(opts.output))
- for lib in opts.libs:
- tmp.write('ADDLIB {0}\n'.format(lib))
- for obj in opts.objs:
- tmp.write('ADDMOD {0}\n'.format(obj))
- tmp.write('SAVE\n')
- tmp.write('END\n')
- cmd = [opts.archiver] + opts.modify_flags + opts.plugin_flags
- stdin = open(temp.name)
- exit_code = call()
- os.remove(temp.name)
-
- if exit_code != 0:
- raise Exception('{0} returned non-zero exit code {1}. Stop.'.format(' '.join(cmd), exit_code))
diff --git a/build/scripts/llvm_opt_wrapper.py b/build/scripts/llvm_opt_wrapper.py
deleted file mode 100644
index 38ca3004af..0000000000
--- a/build/scripts/llvm_opt_wrapper.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import subprocess
-import sys
-
-
-def fix(s):
- # we use '#' instead of ',' because ymake always splits args by comma
- if 'internalize' in s:
- return s.replace('#', ',')
-
- return s
-
-
-if __name__ == '__main__':
- path = sys.argv[1]
- args = [fix(s) for s in [path] + sys.argv[2:]]
-
- rc = subprocess.call(args, shell=False, stderr=sys.stderr, stdout=sys.stdout)
- sys.exit(rc)
diff --git a/build/scripts/merge_files.py b/build/scripts/merge_files.py
deleted file mode 100644
index d42d6a2139..0000000000
--- a/build/scripts/merge_files.py
+++ /dev/null
@@ -1,8 +0,0 @@
-import sys
-
-
-if __name__ == "__main__":
- with open(sys.argv[1], "w") as f:
- for appended in sys.argv[2:]:
- with open(appended) as a:
- f.write(a.read())
diff --git a/build/scripts/preprocess.py b/build/scripts/preprocess.py
deleted file mode 100644
index 4657bef732..0000000000
--- a/build/scripts/preprocess.py
+++ /dev/null
@@ -1,48 +0,0 @@
-import sys
-import os
-
-
-def load_file(p):
- with open(p, 'r') as f:
- return f.read()
-
-
-def step(base, data, hh):
- def flt():
- for l in data.split('\n'):
- if l in hh:
- pp = os.path.join(base, hh[l])
-
- yield '\n\n' + load_file(pp) + '\n\n'
-
- os.unlink(pp)
- else:
- yield l
-
- return '\n'.join(flt())
-
-
-def subst_headers(path, headers):
- hh = dict()
-
- for h in headers:
- hh['# include "' + h + '"'] = h
-
- data = load_file(path)
- prev = data
-
- while True:
- ret = step(os.path.dirname(path), prev, hh)
-
- if ret == prev:
- break
-
- prev = ret
-
- if data != prev:
- with open(path, 'w') as f:
- f.write(prev)
-
-
-if __name__ == '__main__':
- subst_headers(sys.argv[1], ['stack.hh', 'position.hh', 'location.hh'])
diff --git a/build/scripts/process_command_files.pyc b/build/scripts/process_command_files.pyc
new file mode 100644
index 0000000000..0ae0d97df0
--- /dev/null
+++ b/build/scripts/process_command_files.pyc
Binary files differ
diff --git a/build/scripts/py_compile.py b/build/scripts/py_compile.py
deleted file mode 100755
index 936dbe8816..0000000000
--- a/build/scripts/py_compile.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-from __future__ import print_function, absolute_import, division
-
-import marshal
-import sys
-
-
-def main():
- srcpathx, in_fname, out_fname = sys.argv[1:]
- srcpath = srcpathx[:-1]
-
- with open(in_fname, 'r') as in_file:
- source = in_file.read()
-
- code = compile(source, srcpath, 'exec', dont_inherit=True)
-
- with open(out_fname, 'wb') as out_file:
- marshal.dump(code, out_file)
-
-
-if __name__ == "__main__":
- main()
diff --git a/build/scripts/rodata2asm.py b/build/scripts/rodata2asm.py
deleted file mode 100644
index 555639499f..0000000000
--- a/build/scripts/rodata2asm.py
+++ /dev/null
@@ -1,31 +0,0 @@
-import os
-import argparse
-
-
-def main():
- parser = argparse.ArgumentParser(description='Convert rodata into asm source with embedded file content')
- parser.add_argument('symbol', help='symvol name exported from generated filr')
- parser.add_argument('rodata', help='input .rodata file path')
- parser.add_argument('asm', type=argparse.FileType('w', encoding='UTF-8'), help='destination .asm file path')
- parser.add_argument('--elf', action='store_true')
-
- args = parser.parse_args()
-
- file_size = os.path.getsize(args.rodata)
-
- args.asm.write('global ' + args.symbol + '\n')
- args.asm.write('global ' + args.symbol + 'Size' + '\n')
- args.asm.write('SECTION .rodata ALIGN=16\n')
- args.asm.write(args.symbol + ':\nincbin "' + args.rodata + '"\n')
- args.asm.write('align 4, db 0\n')
- args.asm.write(args.symbol + 'Size:\ndd ' + str(file_size) + '\n')
-
- if args.elf:
- args.asm.write('size ' + args.symbol + ' ' + str(file_size) + '\n')
- args.asm.write('size ' + args.symbol + 'Size 4\n')
-
- args.asm.close()
-
-
-if __name__ == '__main__':
- main()
diff --git a/build/scripts/run_llvm_dsymutil.py b/build/scripts/run_llvm_dsymutil.py
deleted file mode 100644
index 4f43362ad9..0000000000
--- a/build/scripts/run_llvm_dsymutil.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import os
-import sys
-import subprocess
-
-
-if __name__ == '__main__':
- with open(os.devnull, 'w') as fnull:
- p = subprocess.Popen(sys.argv[1:], shell=False, stderr=fnull, stdout=sys.stdout)
-
- p.communicate()
- sys.exit(p.returncode)
diff --git a/build/scripts/stdout2stderr.py b/build/scripts/stdout2stderr.py
deleted file mode 100644
index d7861fdda3..0000000000
--- a/build/scripts/stdout2stderr.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import subprocess
-import sys
-
-if __name__ == '__main__':
- assert len(sys.argv) > 1
- sys.exit(subprocess.Popen(sys.argv[1:], stdout=sys.stderr).wait())
diff --git a/build/scripts/tar_sources.py b/build/scripts/tar_sources.py
deleted file mode 100644
index 54e2839a69..0000000000
--- a/build/scripts/tar_sources.py
+++ /dev/null
@@ -1,41 +0,0 @@
-import argparse
-import os
-import tarfile
-
-
-def parse_args():
- parser = argparse.ArgumentParser()
- parser.add_argument('--exts', nargs='*', default=None)
- parser.add_argument('--flat', action='store_true')
- parser.add_argument('--input', required=True)
- parser.add_argument('--output', required=True)
- parser.add_argument('--prefix', default=None)
-
- return parser.parse_args()
-
-
-def main():
- args = parse_args()
-
- py_srcs = []
- for root, _, files in os.walk(args.input):
- for f in files:
- if not args.exts or f.endswith(tuple(args.exts)):
- py_srcs.append(os.path.join(root, f))
-
- compression_mode = ''
- if args.output.endswith(('.tar.gz', '.tgz')):
- compression_mode = 'gz'
- elif args.output.endswith('.bzip2'):
- compression_mode = 'bz2'
-
- with tarfile.open(args.output, 'w:{}'.format(compression_mode)) as out:
- for f in py_srcs:
- arcname = os.path.basename(f) if args.flat else os.path.relpath(f, args.input)
- if args.prefix:
- arcname = os.path.join(args.prefix, arcname)
- out.add(f, arcname=arcname)
-
-
-if __name__ == '__main__':
- main()
diff --git a/build/scripts/tared_protoc.py b/build/scripts/tared_protoc.py
deleted file mode 100644
index 7643e1dbfe..0000000000
--- a/build/scripts/tared_protoc.py
+++ /dev/null
@@ -1,31 +0,0 @@
-import os
-import optparse
-import tarfile
-import contextlib
-import subprocess as sp
-
-
-def parse_args():
- parser = optparse.OptionParser()
- parser.disable_interspersed_args()
- parser.add_option('--tar-output')
- parser.add_option('--protoc-out-dir')
- return parser.parse_args()
-
-
-def main():
- opts, args = parse_args()
- assert opts.tar_output
- assert opts.protoc_out_dir
-
- if not os.path.exists(opts.protoc_out_dir):
- os.makedirs(opts.protoc_out_dir)
-
- sp.check_call(args)
-
- with contextlib.closing(tarfile.open(opts.tar_output, 'w')) as tf:
- tf.add(opts.protoc_out_dir, arcname='')
-
-
-if __name__ == '__main__':
- main()
diff --git a/build/scripts/touch.py b/build/scripts/touch.py
deleted file mode 100755
index e01ba7f86b..0000000000
--- a/build/scripts/touch.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-
-import optparse
-import os
-import sys
-import time
-
-
-def main(argv):
- parser = optparse.OptionParser(add_help_option=False)
- parser.disable_interspersed_args()
-
- parser.add_option('-?', '--help', dest='help',
- action='store_true', default=None, help='print help')
- parser.add_option('-t', dest='t', action='store', default=None)
-
- opts, argv_rest = parser.parse_args(argv)
- if getattr(opts, 'help', False):
- parser.print_help()
- return 0
-
- tspec = opts.t
- if tspec is None:
- times = None
- else:
- head, sep, tail = tspec.partition('.')
- if 8 > len(head):
- raise Exception("time spec must follow format [[CC]YY]MMDDhhmm[.SS]: " + tspec + '; ' + head)
- tfmt = ''
- if 12 == len(head):
- tfmt += '%Y'
- elif 10 == len(head):
- tfmt += '%y'
- tfmt += '%m%d%H%M'
- if 2 == len(tail):
- tfmt += '.%S'
- mtime = time.mktime(time.strptime(tspec, tfmt))
- times = (mtime, mtime)
-
- for file in argv_rest:
- try:
- os.utime(file, times)
- except:
- open(file, 'w').close()
- if times is not None:
- os.utime(file, times)
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))
diff --git a/build/scripts/xargs.py b/build/scripts/xargs.py
deleted file mode 100644
index 5d68929ecc..0000000000
--- a/build/scripts/xargs.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import sys
-import os
-import subprocess
-
-if __name__ == '__main__':
- pos = sys.argv.index('--')
- fname = sys.argv[pos + 1]
- cmd = sys.argv[pos + 2:]
-
- with open(fname, 'r') as f:
- args = [x.strip() for x in f]
-
- os.remove(fname)
-
- p = subprocess.Popen(cmd + args, shell=False, stderr=sys.stderr, stdout=sys.stdout)
- p.communicate()
-
- sys.exit(p.returncode)
diff --git a/build/scripts/yield_line.py b/build/scripts/yield_line.py
deleted file mode 100644
index 9c1c539146..0000000000
--- a/build/scripts/yield_line.py
+++ /dev/null
@@ -1,7 +0,0 @@
-import sys
-
-if __name__ == '__main__':
- pos = sys.argv.index('--')
-
- with open(sys.argv[pos + 1], 'a') as f:
- f.write(' '.join(sys.argv[pos + 2:]) + '\n')
diff --git a/cmake/global_flags.cmake b/cmake/global_flags.cmake
index dc68e42d12..653c6c1afa 100644
--- a/cmake/global_flags.cmake
+++ b/cmake/global_flags.cmake
@@ -1,5 +1,4 @@
set(CMAKE_C_FLAGS "\
- -m64 \
-fexceptions \
-fno-common \
-fcolor-diagnostics \
@@ -21,26 +20,11 @@ set(CMAKE_C_FLAGS "\
-D_GNU_SOURCE \
-D_YNDX_LIBUNWIND_ENABLE_EXCEPTION_BACKTRACE \
-D__LONG_LONG_SUPPORTED \
- -DSSE_ENABLED=1 \
- -DSSE3_ENABLED=1 \
- -DSSSE3_ENABLED=1 \
- -DSSE41_ENABLED=1 \
- -DSSE42_ENABLED=1 \
- -DPOPCNT_ENABLED=1 \
- -DCX16_ENABLED=1 \
-D_libunwind_ \
-DLIBCXX_BUILDING_LIBCXXRT \
- -msse2 \
- -msse3 \
- -mssse3 \
- -msse4.1 \
- -msse4.2 \
- -mpopcnt \
- -mcx16 \
"
)
set(CMAKE_CXX_FLAGS "\
- -m64 \
-fexceptions \
-fno-common \
-fcolor-diagnostics \
@@ -62,22 +46,8 @@ set(CMAKE_CXX_FLAGS "\
-D_GNU_SOURCE \
-D_YNDX_LIBUNWIND_ENABLE_EXCEPTION_BACKTRACE \
-D__LONG_LONG_SUPPORTED \
- -DSSE_ENABLED=1 \
- -DSSE3_ENABLED=1 \
- -DSSSE3_ENABLED=1 \
- -DSSE41_ENABLED=1 \
- -DSSE42_ENABLED=1 \
- -DPOPCNT_ENABLED=1 \
- -DCX16_ENABLED=1 \
-D_libunwind_ \
-DLIBCXX_BUILDING_LIBCXXRT \
- -msse2 \
- -msse3 \
- -mssse3 \
- -msse4.1 \
- -msse4.2 \
- -mpopcnt \
- -mcx16 \
-Woverloaded-virtual \
-Wimport-preprocessor-directive-pedantic \
-Wno-undefined-var-template \
@@ -104,3 +74,42 @@ elseif(UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-init-array")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-init-array")
endif()
+
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+ set(CMAKE_CXX_FLAGS "\
+ ${CMAKE_CXX_FLAGS} \
+ -m64 \
+ -DSSE_ENABLED=1 \
+ -DSSE3_ENABLED=1 \
+ -DSSSE3_ENABLED=1 \
+ -DSSE41_ENABLED=1 \
+ -DSSE42_ENABLED=1 \
+ -DPOPCNT_ENABLED=1 \
+ -DCX16_ENABLED=1 \
+ -msse2 \
+ -msse3 \
+ -mssse3 \
+ -msse4.1 \
+ -msse4.2 \
+ -mpopcnt \
+ -mcx16 \
+ ")
+ set(CMAKE_C_FLAGS "\
+ ${CMAKE_C_FLAGS} \
+ -m64 \
+ -msse2 \
+ -msse3 \
+ -mssse3 \
+ -msse4.1 \
+ -msse4.2 \
+ -mpopcnt \
+ -mcx16 \
+ -DSSE_ENABLED=1 \
+ -DSSE3_ENABLED=1 \
+ -DSSSE3_ENABLED=1 \
+ -DSSE41_ENABLED=1 \
+ -DSSE42_ENABLED=1 \
+ -DPOPCNT_ENABLED=1 \
+ -DCX16_ENABLED=1 \
+ ")
+endif()
diff --git a/cmake/global_vars.cmake b/cmake/global_vars.cmake
index 9b3d4248d2..71eab249d2 100644
--- a/cmake/global_vars.cmake
+++ b/cmake/global_vars.cmake
@@ -6,7 +6,7 @@
# original buildsystem will not be accepted.
-if(UNIX AND NOT APPLE)
+if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
set(YASM_FLAGS -f elf64 -D UNIX -D _x86_64_ -D_YASM_ -g dwarf2)
set(BISON_FLAGS -v)
set(RAGEL_FLAGS -L -I ${CMAKE_SOURCE_DIR}/)
diff --git a/cmake/yandex_common.cmake b/cmake/yandex_common.cmake
index f54398077e..c422bd7766 100644
--- a/cmake/yandex_common.cmake
+++ b/cmake/yandex_common.cmake
@@ -11,7 +11,7 @@ function(target_ragel_lexers TgtName Key Src)
string(APPEND OutPath .cpp)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OutPath}
- COMMAND Python2::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py -- ${RAGEL_BIN} ${RAGEL_FLAGS} ${ARGN} -o ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} ${Src}
+ COMMAND Python3::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py -- ${RAGEL_BIN} ${RAGEL_FLAGS} ${ARGN} -o ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} ${Src}
DEPENDS ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py ${Src}
)
target_sources(${TgtName} ${Key} ${CMAKE_CURRENT_BINARY_DIR}/${OutPath})
@@ -23,7 +23,7 @@ function(target_yasm_source TgtName Key Src)
string(APPEND OutPath .o)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OutPath}
- COMMAND Python2::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py -- ${YASM_BIN} ${YASM_FLAGS} ${ARGN} -o ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} ${Src}
+ COMMAND Python3::Interpreter ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py -- ${YASM_BIN} ${YASM_FLAGS} ${ARGN} -o ${CMAKE_CURRENT_BINARY_DIR}/${OutPath} ${Src}
DEPENDS ${CMAKE_SOURCE_DIR}/build/scripts/run_tool.py ${Src}
)
target_sources(${TgtName} ${Key} ${CMAKE_CURRENT_BINARY_DIR}/${OutPath})
@@ -42,6 +42,45 @@ function(target_joined_source TgtName Out)
target_sources(${TgtName} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${Out})
endfunction()
+function(target_sources_custom TgtName CompileOutSuffix)
+ set(opts "")
+ set(oneval_args "")
+ set(multival_args SRCS CUSTOM_FLAGS)
+ cmake_parse_arguments(TARGET_SOURCES_CUSTOM
+ "${opts}"
+ "${oneval_args}"
+ "${multival_args}"
+ ${ARGN}
+ )
+
+ foreach(Src ${TARGET_SOURCES_CUSTOM_SRCS})
+ file(RELATIVE_PATH SrcRealPath ${CMAKE_SOURCE_DIR} ${Src})
+ get_filename_component(SrcDir ${SrcRealPath} DIRECTORY)
+ get_filename_component(SrcName ${SrcRealPath} NAME_WLE)
+ get_filename_component(SrcExt ${SrcRealPath} LAST_EXT)
+ set(SrcCopy "${CMAKE_BINARY_DIR}/${SrcDir}/${SrcName}${CompileOutSuffix}${SrcExt}")
+ add_custom_command(
+ OUTPUT ${SrcCopy}
+ COMMAND ${CMAKE_COMMAND} -E copy ${Src} ${SrcCopy}
+ DEPENDS ${Src}
+ )
+ list(APPEND PreparedSrc ${SrcCopy})
+ set_property(
+ SOURCE
+ ${SrcCopy}
+ APPEND PROPERTY COMPILE_OPTIONS
+ ${TARGET_SOURCES_CUSTOM_CUSTOM_FLAGS}
+ -I${CMAKE_SOURCE_DIR}/${SrcDir}
+ )
+ endforeach()
+
+ target_sources(
+ ${TgtName}
+ PRIVATE
+ ${PreparedSrc}
+ )
+endfunction()
+
function(generate_enum_serilization Tgt Input)
set(opts "")
set(oneval_args INCLUDE_HEADERS)
diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
new file mode 100644
index 0000000000..180cdc8bdc
--- /dev/null
+++ b/contrib/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(libs)
+add_subdirectory(restricted)
+add_subdirectory(tools)
diff --git a/contrib/libs/CMakeLists.darwin.txt b/contrib/libs/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..db4d5e7fb8
--- /dev/null
+++ b/contrib/libs/CMakeLists.darwin.txt
@@ -0,0 +1,53 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(antlr3_cpp_runtime)
+add_subdirectory(apache)
+add_subdirectory(aws-sdk-cpp)
+add_subdirectory(base64)
+add_subdirectory(brotli)
+add_subdirectory(cctz)
+add_subdirectory(crcutil)
+add_subdirectory(curl)
+add_subdirectory(cxxsupp)
+add_subdirectory(double-conversion)
+add_subdirectory(farmhash)
+add_subdirectory(fastlz)
+add_subdirectory(fmt)
+add_subdirectory(grpc)
+add_subdirectory(hdr_histogram)
+add_subdirectory(highwayhash)
+add_subdirectory(hyperscan)
+add_subdirectory(jemalloc)
+add_subdirectory(jwt-cpp)
+add_subdirectory(libbz2)
+add_subdirectory(libc_compat)
+add_subdirectory(libevent)
+add_subdirectory(libunwind)
+add_subdirectory(libxml)
+add_subdirectory(linuxvdso)
+add_subdirectory(llvm12)
+add_subdirectory(lz4)
+add_subdirectory(lzmasdk)
+add_subdirectory(nayuki_md5)
+add_subdirectory(nghttp2)
+add_subdirectory(pcre)
+add_subdirectory(protobuf)
+add_subdirectory(protoc)
+add_subdirectory(rapidjson)
+add_subdirectory(re2)
+add_subdirectory(snappy)
+add_subdirectory(sparsehash)
+add_subdirectory(t1ha)
+add_subdirectory(tbb)
+add_subdirectory(tcmalloc)
+add_subdirectory(utf8proc)
+add_subdirectory(xxhash)
+add_subdirectory(yaml-cpp)
+add_subdirectory(zstd)
+add_subdirectory(zstd06)
diff --git a/contrib/libs/CMakeLists.linux.txt b/contrib/libs/CMakeLists.linux.txt
new file mode 100644
index 0000000000..804ea5a55f
--- /dev/null
+++ b/contrib/libs/CMakeLists.linux.txt
@@ -0,0 +1,57 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(antlr3_cpp_runtime)
+add_subdirectory(apache)
+add_subdirectory(aws-sdk-cpp)
+add_subdirectory(base64)
+add_subdirectory(brotli)
+add_subdirectory(cctz)
+add_subdirectory(crcutil)
+add_subdirectory(curl)
+add_subdirectory(cxxsupp)
+add_subdirectory(double-conversion)
+add_subdirectory(expat)
+add_subdirectory(farmhash)
+add_subdirectory(fastlz)
+add_subdirectory(fmt)
+add_subdirectory(grpc)
+add_subdirectory(hdr_histogram)
+add_subdirectory(highwayhash)
+add_subdirectory(hyperscan)
+add_subdirectory(jemalloc)
+add_subdirectory(jwt-cpp)
+add_subdirectory(libbz2)
+add_subdirectory(libc_compat)
+add_subdirectory(libevent)
+add_subdirectory(libunwind)
+add_subdirectory(libxml)
+add_subdirectory(linuxvdso)
+add_subdirectory(llvm12)
+add_subdirectory(lz4)
+add_subdirectory(lzma)
+add_subdirectory(lzmasdk)
+add_subdirectory(nayuki_md5)
+add_subdirectory(nghttp2)
+add_subdirectory(pcre)
+add_subdirectory(pdqsort)
+add_subdirectory(poco)
+add_subdirectory(protobuf)
+add_subdirectory(protoc)
+add_subdirectory(rapidjson)
+add_subdirectory(re2)
+add_subdirectory(snappy)
+add_subdirectory(sparsehash)
+add_subdirectory(t1ha)
+add_subdirectory(tbb)
+add_subdirectory(tcmalloc)
+add_subdirectory(utf8proc)
+add_subdirectory(xxhash)
+add_subdirectory(yaml-cpp)
+add_subdirectory(zstd)
+add_subdirectory(zstd06)
diff --git a/contrib/libs/CMakeLists.txt b/contrib/libs/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/contrib/libs/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/contrib/libs/apache/CMakeLists.darwin.txt b/contrib/libs/apache/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..d0743a109b
--- /dev/null
+++ b/contrib/libs/apache/CMakeLists.darwin.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(arrow)
+add_subdirectory(orc)
diff --git a/contrib/libs/apache/CMakeLists.linux.txt b/contrib/libs/apache/CMakeLists.linux.txt
new file mode 100644
index 0000000000..e1bf69d210
--- /dev/null
+++ b/contrib/libs/apache/CMakeLists.linux.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(arrow)
+add_subdirectory(avro)
+add_subdirectory(orc)
diff --git a/contrib/libs/apache/CMakeLists.txt b/contrib/libs/apache/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/contrib/libs/apache/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/contrib/libs/apache/avro/CMakeLists.txt b/contrib/libs/apache/avro/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/apache/avro/CMakeLists.txt
+++ b/contrib/libs/apache/avro/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/aws-sdk-cpp/CMakeLists.txt b/contrib/libs/aws-sdk-cpp/CMakeLists.txt
new file mode 100644
index 0000000000..cbf8273ba6
--- /dev/null
+++ b/contrib/libs/aws-sdk-cpp/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(aws-cpp-sdk-core)
+add_subdirectory(aws-cpp-sdk-s3)
diff --git a/contrib/libs/base64/CMakeLists.txt b/contrib/libs/base64/CMakeLists.txt
new file mode 100644
index 0000000000..5744b7efd3
--- /dev/null
+++ b/contrib/libs/base64/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(avx2)
+add_subdirectory(neon32)
+add_subdirectory(neon64)
+add_subdirectory(plain32)
+add_subdirectory(plain64)
+add_subdirectory(ssse3)
diff --git a/contrib/libs/brotli/CMakeLists.txt b/contrib/libs/brotli/CMakeLists.txt
new file mode 100644
index 0000000000..69449669e8
--- /dev/null
+++ b/contrib/libs/brotli/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(common)
+add_subdirectory(dec)
+add_subdirectory(enc)
diff --git a/contrib/libs/cctz/CMakeLists.darwin.txt b/contrib/libs/cctz/CMakeLists.darwin.txt
index 0e28714675..6068d1079a 100644
--- a/contrib/libs/cctz/CMakeLists.darwin.txt
+++ b/contrib/libs/cctz/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(tzdata)
add_library(contrib-libs-cctz)
target_compile_options(contrib-libs-cctz PRIVATE
diff --git a/contrib/libs/cctz/CMakeLists.linux.txt b/contrib/libs/cctz/CMakeLists.linux.txt
index fa995d5000..01e6420897 100644
--- a/contrib/libs/cctz/CMakeLists.linux.txt
+++ b/contrib/libs/cctz/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(tzdata)
add_library(contrib-libs-cctz)
target_compile_options(contrib-libs-cctz PRIVATE
diff --git a/contrib/libs/cctz/CMakeLists.txt b/contrib/libs/cctz/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/cctz/CMakeLists.txt
+++ b/contrib/libs/cctz/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/curl/CMakeLists.txt b/contrib/libs/curl/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/curl/CMakeLists.txt
+++ b/contrib/libs/curl/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/cxxsupp/CMakeLists.txt b/contrib/libs/cxxsupp/CMakeLists.txt
index aa4ccf6398..236767d79f 100644
--- a/contrib/libs/cxxsupp/CMakeLists.txt
+++ b/contrib/libs/cxxsupp/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(builtins)
+add_subdirectory(libcxx)
+add_subdirectory(libcxxabi-parts)
+add_subdirectory(libcxxrt)
add_library(contrib-libs-cxxsupp INTERFACE)
target_link_libraries(contrib-libs-cxxsupp INTERFACE
diff --git a/contrib/libs/cxxsupp/builtins/CMakeLists.txt b/contrib/libs/cxxsupp/builtins/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/cxxsupp/builtins/CMakeLists.txt
+++ b/contrib/libs/cxxsupp/builtins/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/all.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/all.h
new file mode 100644
index 0000000000..54916fd476
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/all.h
@@ -0,0 +1,82 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_ALL_H
+#define _LIBCPP___RANGES_ALL_H
+
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__iterator/iterator_traits.h>
+#include <__ranges/access.h>
+#include <__ranges/concepts.h>
+#include <__ranges/owning_view.h>
+#include <__ranges/range_adaptor.h>
+#include <__ranges/ref_view.h>
+#include <__utility/auto_cast.h>
+#include <__utility/declval.h>
+#include <__utility/forward.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges::views {
+
+namespace __all {
+ struct __fn : __range_adaptor_closure<__fn> {
+ template<class _Tp>
+ requires ranges::view<decay_t<_Tp>>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(_LIBCPP_AUTO_CAST(std::forward<_Tp>(__t))))
+ {
+ return _LIBCPP_AUTO_CAST(std::forward<_Tp>(__t));
+ }
+
+ template<class _Tp>
+ requires (!ranges::view<decay_t<_Tp>>) &&
+ requires (_Tp&& __t) { ranges::ref_view{std::forward<_Tp>(__t)}; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::ref_view{std::forward<_Tp>(__t)}))
+ {
+ return ranges::ref_view{std::forward<_Tp>(__t)};
+ }
+
+ template<class _Tp>
+ requires (!ranges::view<decay_t<_Tp>> &&
+ !requires (_Tp&& __t) { ranges::ref_view{std::forward<_Tp>(__t)}; } &&
+ requires (_Tp&& __t) { ranges::owning_view{std::forward<_Tp>(__t)}; })
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::owning_view{std::forward<_Tp>(__t)}))
+ {
+ return ranges::owning_view{std::forward<_Tp>(__t)};
+ }
+ };
+} // namespace __all
+
+inline namespace __cpo {
+ inline constexpr auto all = __all::__fn{};
+} // namespace __cpo
+
+template<ranges::viewable_range _Range>
+using all_t = decltype(views::all(declval<_Range>()));
+
+} // namespace ranges::views
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_ALL_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/common_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/common_view.h
new file mode 100644
index 0000000000..3f58dafeb0
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/common_view.h
@@ -0,0 +1,135 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_COMMON_VIEW_H
+#define _LIBCPP___RANGES_COMMON_VIEW_H
+
+#include <__config>
+#include <__iterator/common_iterator.h>
+#include <__iterator/iterator_traits.h>
+#include <__ranges/access.h>
+#include <__ranges/all.h>
+#include <__ranges/concepts.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/range_adaptor.h>
+#include <__ranges/size.h>
+#include <__ranges/view_interface.h>
+#include <__utility/forward.h>
+#include <__utility/move.h>
+#include <concepts>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+
+template<view _View>
+ requires (!common_range<_View> && copyable<iterator_t<_View>>)
+class common_view : public view_interface<common_view<_View>> {
+ _View __base_ = _View();
+
+public:
+ _LIBCPP_HIDE_FROM_ABI
+ common_view() requires default_initializable<_View> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit common_view(_View __v) : __base_(std::move(__v)) { }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() const& requires copy_constructible<_View> { return __base_; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() && { return std::move(__base_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin() {
+ if constexpr (random_access_range<_View> && sized_range<_View>)
+ return ranges::begin(__base_);
+ else
+ return common_iterator<iterator_t<_View>, sentinel_t<_View>>(ranges::begin(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin() const requires range<const _View> {
+ if constexpr (random_access_range<const _View> && sized_range<const _View>)
+ return ranges::begin(__base_);
+ else
+ return common_iterator<iterator_t<const _View>, sentinel_t<const _View>>(ranges::begin(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() {
+ if constexpr (random_access_range<_View> && sized_range<_View>)
+ return ranges::begin(__base_) + ranges::size(__base_);
+ else
+ return common_iterator<iterator_t<_View>, sentinel_t<_View>>(ranges::end(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() const requires range<const _View> {
+ if constexpr (random_access_range<const _View> && sized_range<const _View>)
+ return ranges::begin(__base_) + ranges::size(__base_);
+ else
+ return common_iterator<iterator_t<const _View>, sentinel_t<const _View>>(ranges::end(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() requires sized_range<_View> {
+ return ranges::size(__base_);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() const requires sized_range<const _View> {
+ return ranges::size(__base_);
+ }
+};
+
+template<class _Range>
+common_view(_Range&&)
+ -> common_view<views::all_t<_Range>>;
+
+template<class _View>
+inline constexpr bool enable_borrowed_range<common_view<_View>> = enable_borrowed_range<_View>;
+
+namespace views {
+namespace __common {
+ struct __fn : __range_adaptor_closure<__fn> {
+ template<class _Range>
+ requires common_range<_Range>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(views::all(std::forward<_Range>(__range))))
+ -> decltype( views::all(std::forward<_Range>(__range)))
+ { return views::all(std::forward<_Range>(__range)); }
+
+ template<class _Range>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(common_view{std::forward<_Range>(__range)}))
+ -> decltype( common_view{std::forward<_Range>(__range)})
+ { return common_view{std::forward<_Range>(__range)}; }
+ };
+} // namespace __common
+
+inline namespace __cpo {
+ inline constexpr auto common = __common::__fn{};
+} // namespace __cpo
+} // namespace views
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_COMMON_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/copyable_box.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/copyable_box.h
new file mode 100644
index 0000000000..8b7f227925
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/copyable_box.h
@@ -0,0 +1,178 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___RANGES_COPYABLE_BOX_H
+#define _LIBCPP___RANGES_COPYABLE_BOX_H
+
+#include <__config>
+#include <__memory/addressof.h>
+#include <__memory/construct_at.h>
+#include <__utility/move.h>
+#include <concepts>
+#include <optional>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+// __copyable_box allows turning a type that is copy-constructible (but maybe not copy-assignable) into
+// a type that is both copy-constructible and copy-assignable. It does that by introducing an empty state
+// and basically doing destroy-then-copy-construct in the assignment operator. The empty state is necessary
+// to handle the case where the copy construction fails after destroying the object.
+//
+// In some cases, we can completely avoid the use of an empty state; we provide a specialization of
+// __copyable_box that does this, see below for the details.
+
+template<class _Tp>
+concept __copy_constructible_object = copy_constructible<_Tp> && is_object_v<_Tp>;
+
+namespace ranges {
+ // Primary template - uses std::optional and introduces an empty state in case assignment fails.
+ template<__copy_constructible_object _Tp>
+ class __copyable_box {
+ _LIBCPP_NO_UNIQUE_ADDRESS optional<_Tp> __val_;
+
+ public:
+ template<class ..._Args>
+ requires is_constructible_v<_Tp, _Args...>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit __copyable_box(in_place_t, _Args&& ...__args)
+ noexcept(is_nothrow_constructible_v<_Tp, _Args...>)
+ : __val_(in_place, std::forward<_Args>(__args)...)
+ { }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __copyable_box() noexcept(is_nothrow_default_constructible_v<_Tp>)
+ requires default_initializable<_Tp>
+ : __val_(in_place)
+ { }
+
+ _LIBCPP_HIDE_FROM_ABI __copyable_box(__copyable_box const&) = default;
+ _LIBCPP_HIDE_FROM_ABI __copyable_box(__copyable_box&&) = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __copyable_box& operator=(__copyable_box const& __other)
+ noexcept(is_nothrow_copy_constructible_v<_Tp>)
+ {
+ if (this != std::addressof(__other)) {
+ if (__other.__has_value()) __val_.emplace(*__other);
+ else __val_.reset();
+ }
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ __copyable_box& operator=(__copyable_box&&) requires movable<_Tp> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __copyable_box& operator=(__copyable_box&& __other)
+ noexcept(is_nothrow_move_constructible_v<_Tp>)
+ {
+ if (this != std::addressof(__other)) {
+ if (__other.__has_value()) __val_.emplace(std::move(*__other));
+ else __val_.reset();
+ }
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr _Tp const& operator*() const noexcept { return *__val_; }
+ _LIBCPP_HIDE_FROM_ABI constexpr _Tp& operator*() noexcept { return *__val_; }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr const _Tp *operator->() const noexcept { return __val_.operator->(); }
+ _LIBCPP_HIDE_FROM_ABI constexpr _Tp *operator->() noexcept { return __val_.operator->(); }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr bool __has_value() const noexcept { return __val_.has_value(); }
+ };
+
+ // This partial specialization implements an optimization for when we know we don't need to store
+ // an empty state to represent failure to perform an assignment. For copy-assignment, this happens:
+ //
+ // 1. If the type is copyable (which includes copy-assignment), we can use the type's own assignment operator
+ // directly and avoid using std::optional.
+ // 2. If the type is not copyable, but it is nothrow-copy-constructible, then we can implement assignment as
+ // destroy-and-then-construct and we know it will never fail, so we don't need an empty state.
+ //
+ // The exact same reasoning can be applied for move-assignment, with copyable replaced by movable and
+ // nothrow-copy-constructible replaced by nothrow-move-constructible. This specialization is enabled
+ // whenever we can apply any of these optimizations for both the copy assignment and the move assignment
+ // operator.
+ template<class _Tp>
+ concept __doesnt_need_empty_state_for_copy = copyable<_Tp> || is_nothrow_copy_constructible_v<_Tp>;
+
+ template<class _Tp>
+ concept __doesnt_need_empty_state_for_move = movable<_Tp> || is_nothrow_move_constructible_v<_Tp>;
+
+ template<__copy_constructible_object _Tp>
+ requires __doesnt_need_empty_state_for_copy<_Tp> && __doesnt_need_empty_state_for_move<_Tp>
+ class __copyable_box<_Tp> {
+ _LIBCPP_NO_UNIQUE_ADDRESS _Tp __val_;
+
+ public:
+ template<class ..._Args>
+ requires is_constructible_v<_Tp, _Args...>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit __copyable_box(in_place_t, _Args&& ...__args)
+ noexcept(is_nothrow_constructible_v<_Tp, _Args...>)
+ : __val_(std::forward<_Args>(__args)...)
+ { }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __copyable_box() noexcept(is_nothrow_default_constructible_v<_Tp>)
+ requires default_initializable<_Tp>
+ : __val_()
+ { }
+
+ _LIBCPP_HIDE_FROM_ABI __copyable_box(__copyable_box const&) = default;
+ _LIBCPP_HIDE_FROM_ABI __copyable_box(__copyable_box&&) = default;
+
+ // Implementation of assignment operators in case we perform optimization (1)
+ _LIBCPP_HIDE_FROM_ABI __copyable_box& operator=(__copyable_box const&) requires copyable<_Tp> = default;
+ _LIBCPP_HIDE_FROM_ABI __copyable_box& operator=(__copyable_box&&) requires movable<_Tp> = default;
+
+ // Implementation of assignment operators in case we perform optimization (2)
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __copyable_box& operator=(__copyable_box const& __other) noexcept {
+ static_assert(is_nothrow_copy_constructible_v<_Tp>);
+ if (this != std::addressof(__other)) {
+ std::destroy_at(std::addressof(__val_));
+ std::construct_at(std::addressof(__val_), __other.__val_);
+ }
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __copyable_box& operator=(__copyable_box&& __other) noexcept {
+ static_assert(is_nothrow_move_constructible_v<_Tp>);
+ if (this != std::addressof(__other)) {
+ std::destroy_at(std::addressof(__val_));
+ std::construct_at(std::addressof(__val_), std::move(__other.__val_));
+ }
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr _Tp const& operator*() const noexcept { return __val_; }
+ _LIBCPP_HIDE_FROM_ABI constexpr _Tp& operator*() noexcept { return __val_; }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr const _Tp *operator->() const noexcept { return std::addressof(__val_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr _Tp *operator->() noexcept { return std::addressof(__val_); }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr bool __has_value() const noexcept { return true; }
+ };
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_COPYABLE_BOX_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/counted.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/counted.h
new file mode 100644
index 0000000000..400284c48e
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/counted.h
@@ -0,0 +1,81 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_COUNTED_H
+#define _LIBCPP___RANGES_COUNTED_H
+
+#include <__concepts/convertible_to.h>
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__iterator/counted_iterator.h>
+#include <__iterator/default_sentinel.h>
+#include <__iterator/incrementable_traits.h>
+#include <__iterator/iterator_traits.h>
+#include <__memory/pointer_traits.h>
+#include <__ranges/subrange.h>
+#include <__utility/forward.h>
+#include <__utility/move.h>
+#include <span>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges::views {
+
+namespace __counted {
+
+ struct __fn {
+ template<contiguous_iterator _It>
+ _LIBCPP_HIDE_FROM_ABI
+ static constexpr auto __go(_It __it, iter_difference_t<_It> __count)
+ noexcept(noexcept(span(std::to_address(__it), static_cast<size_t>(__count))))
+ // Deliberately omit return-type SFINAE, because to_address is not SFINAE-friendly
+ { return span(std::to_address(__it), static_cast<size_t>(__count)); }
+
+ template<random_access_iterator _It>
+ _LIBCPP_HIDE_FROM_ABI
+ static constexpr auto __go(_It __it, iter_difference_t<_It> __count)
+ noexcept(noexcept(subrange(__it, __it + __count)))
+ -> decltype( subrange(__it, __it + __count))
+ { return subrange(__it, __it + __count); }
+
+ template<class _It>
+ _LIBCPP_HIDE_FROM_ABI
+ static constexpr auto __go(_It __it, iter_difference_t<_It> __count)
+ noexcept(noexcept(subrange(counted_iterator(std::move(__it), __count), default_sentinel)))
+ -> decltype( subrange(counted_iterator(std::move(__it), __count), default_sentinel))
+ { return subrange(counted_iterator(std::move(__it), __count), default_sentinel); }
+
+ template<class _It, convertible_to<iter_difference_t<_It>> _Diff>
+ requires input_or_output_iterator<decay_t<_It>>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_It&& __it, _Diff&& __count) const
+ noexcept(noexcept(__go(std::forward<_It>(__it), std::forward<_Diff>(__count))))
+ -> decltype( __go(std::forward<_It>(__it), std::forward<_Diff>(__count)))
+ { return __go(std::forward<_It>(__it), std::forward<_Diff>(__count)); }
+ };
+
+} // namespace __counted
+
+inline namespace __cpo {
+ inline constexpr auto counted = __counted::__fn{};
+} // namespace __cpo
+
+} // namespace ranges::views
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_COUNTED_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/drop_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/drop_view.h
new file mode 100644
index 0000000000..0e5b68b11d
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/drop_view.h
@@ -0,0 +1,127 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_DROP_VIEW_H
+#define _LIBCPP___RANGES_DROP_VIEW_H
+
+#include <__config>
+#include <__debug>
+#include <__iterator/concepts.h>
+#include <__iterator/iterator_traits.h>
+#include <__iterator/next.h>
+#include <__ranges/access.h>
+#include <__ranges/all.h>
+#include <__ranges/concepts.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/non_propagating_cache.h>
+#include <__ranges/size.h>
+#include <__ranges/view_interface.h>
+#include <__utility/move.h>
+#include <concepts>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<view _View>
+ class drop_view
+ : public view_interface<drop_view<_View>>
+ {
+ // We cache begin() whenever ranges::next is not guaranteed O(1) to provide an
+ // amortized O(1) begin() method. If this is an input_range, then we cannot cache
+ // begin because begin is not equality preserving.
+ // Note: drop_view<input-range>::begin() is still trivially amortized O(1) because
+ // one can't call begin() on it more than once.
+ static constexpr bool _UseCache = forward_range<_View> && !(random_access_range<_View> && sized_range<_View>);
+ using _Cache = _If<_UseCache, __non_propagating_cache<iterator_t<_View>>, __empty_cache>;
+ _LIBCPP_NO_UNIQUE_ADDRESS _Cache __cached_begin_ = _Cache();
+ range_difference_t<_View> __count_ = 0;
+ _View __base_ = _View();
+
+public:
+ drop_view() requires default_initializable<_View> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr drop_view(_View __base, range_difference_t<_View> __count)
+ : __count_(__count)
+ , __base_(std::move(__base))
+ {
+ _LIBCPP_ASSERT(__count_ >= 0, "count must be greater than or equal to zero.");
+ }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr _View base() const& requires copy_constructible<_View> { return __base_; }
+ _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin()
+ requires (!(__simple_view<_View> &&
+ random_access_range<const _View> && sized_range<const _View>))
+ {
+ if constexpr (_UseCache)
+ if (__cached_begin_.__has_value())
+ return *__cached_begin_;
+
+ auto __tmp = ranges::next(ranges::begin(__base_), __count_, ranges::end(__base_));
+ if constexpr (_UseCache)
+ __cached_begin_.__emplace(__tmp);
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin() const
+ requires random_access_range<const _View> && sized_range<const _View>
+ {
+ return ranges::next(ranges::begin(__base_), __count_, ranges::end(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end()
+ requires (!__simple_view<_View>)
+ { return ranges::end(__base_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() const
+ requires range<const _View>
+ { return ranges::end(__base_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ static constexpr auto __size(auto& __self) {
+ const auto __s = ranges::size(__self.__base_);
+ const auto __c = static_cast<decltype(__s)>(__self.__count_);
+ return __s < __c ? 0 : __s - __c;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size()
+ requires sized_range<_View>
+ { return __size(*this); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() const
+ requires sized_range<const _View>
+ { return __size(*this); }
+ };
+
+ template<class _Range>
+ drop_view(_Range&&, range_difference_t<_Range>) -> drop_view<views::all_t<_Range>>;
+
+ template<class _Tp>
+ inline constexpr bool enable_borrowed_range<drop_view<_Tp>> = enable_borrowed_range<_Tp>;
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_DROP_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h
new file mode 100644
index 0000000000..c83cdd7482
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h
@@ -0,0 +1,82 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_EMPTY_H
+#define _LIBCPP___RANGES_EMPTY_H
+
+#include <__concepts/class_or_enum.h>
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__ranges/access.h>
+#include <__ranges/size.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+// [range.prim.empty]
+
+namespace ranges {
+namespace __empty {
+ template <class _Tp>
+ concept __member_empty =
+ __workaround_52970<_Tp> &&
+ requires(_Tp&& __t) {
+ bool(__t.empty());
+ };
+
+ template<class _Tp>
+ concept __can_invoke_size =
+ !__member_empty<_Tp> &&
+ requires(_Tp&& __t) { ranges::size(__t); };
+
+ template <class _Tp>
+ concept __can_compare_begin_end =
+ !__member_empty<_Tp> &&
+ !__can_invoke_size<_Tp> &&
+ requires(_Tp&& __t) {
+ bool(ranges::begin(__t) == ranges::end(__t));
+ { ranges::begin(__t) } -> forward_iterator;
+ };
+
+ struct __fn {
+ template <__member_empty _Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()(_Tp&& __t) const
+ noexcept(noexcept(bool(__t.empty()))) {
+ return bool(__t.empty());
+ }
+
+ template <__can_invoke_size _Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::size(__t))) {
+ return ranges::size(__t) == 0;
+ }
+
+ template<__can_compare_begin_end _Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()(_Tp&& __t) const
+ noexcept(noexcept(bool(ranges::begin(__t) == ranges::end(__t)))) {
+ return ranges::begin(__t) == ranges::end(__t);
+ }
+ };
+} // namespace __empty
+
+inline namespace __cpo {
+ inline constexpr auto empty = __empty::__fn{};
+} // namespace __cpo
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_EMPTY_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/empty_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/empty_view.h
new file mode 100644
index 0000000000..232b0b8fad
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/empty_view.h
@@ -0,0 +1,45 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_EMPTY_VIEW_H
+#define _LIBCPP___RANGES_EMPTY_VIEW_H
+
+#include <__config>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/view_interface.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<class _Tp>
+ requires is_object_v<_Tp>
+ class empty_view : public view_interface<empty_view<_Tp>> {
+ public:
+ _LIBCPP_HIDE_FROM_ABI static constexpr _Tp* begin() noexcept { return nullptr; }
+ _LIBCPP_HIDE_FROM_ABI static constexpr _Tp* end() noexcept { return nullptr; }
+ _LIBCPP_HIDE_FROM_ABI static constexpr _Tp* data() noexcept { return nullptr; }
+ _LIBCPP_HIDE_FROM_ABI static constexpr size_t size() noexcept { return 0; }
+ _LIBCPP_HIDE_FROM_ABI static constexpr bool empty() noexcept { return true; }
+ };
+
+ template<class _Tp>
+ inline constexpr bool enable_borrowed_range<empty_view<_Tp>> = true;
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_EMPTY_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h
new file mode 100644
index 0000000000..2fbc607789
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h
@@ -0,0 +1,408 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_IOTA_VIEW_H
+#define _LIBCPP___RANGES_IOTA_VIEW_H
+
+#include <__compare/three_way_comparable.h>
+#include <__concepts/arithmetic.h>
+#include <__concepts/constructible.h>
+#include <__concepts/convertible_to.h>
+#include <__concepts/copyable.h>
+#include <__concepts/equality_comparable.h>
+#include <__concepts/invocable.h>
+#include <__concepts/same_as.h>
+#include <__concepts/semiregular.h>
+#include <__concepts/totally_ordered.h>
+#include <__config>
+#include <__debug>
+#include <__functional/ranges_operations.h>
+#include <__iterator/concepts.h>
+#include <__iterator/incrementable_traits.h>
+#include <__iterator/iterator_traits.h>
+#include <__iterator/unreachable_sentinel.h>
+#include <__ranges/copyable_box.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/view_interface.h>
+#include <__utility/forward.h>
+#include <__utility/move.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<class _Int>
+ struct __get_wider_signed {
+ static auto __call() {
+ if constexpr (sizeof(_Int) < sizeof(short)) return type_identity<short>{};
+ else if constexpr (sizeof(_Int) < sizeof(int)) return type_identity<int>{};
+ else if constexpr (sizeof(_Int) < sizeof(long)) return type_identity<long>{};
+ else return type_identity<long long>{};
+
+ static_assert(sizeof(_Int) <= sizeof(long long),
+ "Found integer-like type that is bigger than largest integer like type.");
+ }
+
+ using type = typename decltype(__call())::type;
+ };
+
+ template<class _Start>
+ using _IotaDiffT = typename _If<
+ (!integral<_Start> || sizeof(iter_difference_t<_Start>) > sizeof(_Start)),
+ type_identity<iter_difference_t<_Start>>,
+ __get_wider_signed<_Start>
+ >::type;
+
+ template<class _Iter>
+ concept __decrementable = incrementable<_Iter> && requires(_Iter __i) {
+ { --__i } -> same_as<_Iter&>;
+ { __i-- } -> same_as<_Iter>;
+ };
+
+ template<class _Iter>
+ concept __advanceable =
+ __decrementable<_Iter> && totally_ordered<_Iter> &&
+ requires(_Iter __i, const _Iter __j, const _IotaDiffT<_Iter> __n) {
+ { __i += __n } -> same_as<_Iter&>;
+ { __i -= __n } -> same_as<_Iter&>;
+ _Iter(__j + __n);
+ _Iter(__n + __j);
+ _Iter(__j - __n);
+ { __j - __j } -> convertible_to<_IotaDiffT<_Iter>>;
+ };
+
+ template<class>
+ struct __iota_iterator_category {};
+
+ template<incrementable _Tp>
+ struct __iota_iterator_category<_Tp> {
+ using iterator_category = input_iterator_tag;
+ };
+
+ template<weakly_incrementable _Start, semiregular _Bound = unreachable_sentinel_t>
+ requires __weakly_equality_comparable_with<_Start, _Bound> && copyable<_Start>
+ class iota_view : public view_interface<iota_view<_Start, _Bound>> {
+ struct __iterator : public __iota_iterator_category<_Start> {
+ friend class iota_view;
+
+ using iterator_concept =
+ _If<__advanceable<_Start>, random_access_iterator_tag,
+ _If<__decrementable<_Start>, bidirectional_iterator_tag,
+ _If<incrementable<_Start>, forward_iterator_tag,
+ /*Else*/ input_iterator_tag>>>;
+
+ using value_type = _Start;
+ using difference_type = _IotaDiffT<_Start>;
+
+ _Start __value_ = _Start();
+
+ _LIBCPP_HIDE_FROM_ABI
+ __iterator() requires default_initializable<_Start> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit __iterator(_Start __value) : __value_(std::move(__value)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Start operator*() const noexcept(is_nothrow_copy_constructible_v<_Start>) {
+ return __value_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator++() {
+ ++__value_;
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr void operator++(int) { ++*this; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator operator++(int) requires incrementable<_Start> {
+ auto __tmp = *this;
+ ++*this;
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator--() requires __decrementable<_Start> {
+ --__value_;
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator operator--(int) requires __decrementable<_Start> {
+ auto __tmp = *this;
+ --*this;
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator+=(difference_type __n)
+ requires __advanceable<_Start>
+ {
+ if constexpr (__integer_like<_Start> && !__signed_integer_like<_Start>) {
+ if (__n >= difference_type(0)) {
+ __value_ += static_cast<_Start>(__n);
+ } else {
+ __value_ -= static_cast<_Start>(-__n);
+ }
+ } else {
+ __value_ += __n;
+ }
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator-=(difference_type __n)
+ requires __advanceable<_Start>
+ {
+ if constexpr (__integer_like<_Start> && !__signed_integer_like<_Start>) {
+ if (__n >= difference_type(0)) {
+ __value_ -= static_cast<_Start>(__n);
+ } else {
+ __value_ += static_cast<_Start>(-__n);
+ }
+ } else {
+ __value_ -= __n;
+ }
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Start operator[](difference_type __n) const
+ requires __advanceable<_Start>
+ {
+ return _Start(__value_ + __n);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
+ requires equality_comparable<_Start>
+ {
+ return __x.__value_ == __y.__value_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator<(const __iterator& __x, const __iterator& __y)
+ requires totally_ordered<_Start>
+ {
+ return __x.__value_ < __y.__value_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator>(const __iterator& __x, const __iterator& __y)
+ requires totally_ordered<_Start>
+ {
+ return __y < __x;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator<=(const __iterator& __x, const __iterator& __y)
+ requires totally_ordered<_Start>
+ {
+ return !(__y < __x);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator>=(const __iterator& __x, const __iterator& __y)
+ requires totally_ordered<_Start>
+ {
+ return !(__x < __y);
+ }
+
+ friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
+ requires totally_ordered<_Start> && three_way_comparable<_Start>
+ {
+ return __x.__value_ <=> __y.__value_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr __iterator operator+(__iterator __i, difference_type __n)
+ requires __advanceable<_Start>
+ {
+ __i += __n;
+ return __i;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr __iterator operator+(difference_type __n, __iterator __i)
+ requires __advanceable<_Start>
+ {
+ return __i + __n;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr __iterator operator-(__iterator __i, difference_type __n)
+ requires __advanceable<_Start>
+ {
+ __i -= __n;
+ return __i;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr difference_type operator-(const __iterator& __x, const __iterator& __y)
+ requires __advanceable<_Start>
+ {
+ if constexpr (__integer_like<_Start>) {
+ if constexpr (__signed_integer_like<_Start>) {
+ return difference_type(difference_type(__x.__value_) - difference_type(__y.__value_));
+ }
+ if (__y.__value_ > __x.__value_) {
+ return difference_type(-difference_type(__y.__value_ - __x.__value_));
+ }
+ return difference_type(__x.__value_ - __y.__value_);
+ }
+ return __x.__value_ - __y.__value_;
+ }
+ };
+
+ struct __sentinel {
+ friend class iota_view;
+
+ private:
+ _Bound __bound_ = _Bound();
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI
+ __sentinel() = default;
+ constexpr explicit __sentinel(_Bound __bound) : __bound_(std::move(__bound)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator==(const __iterator& __x, const __sentinel& __y) {
+ return __x.__value_ == __y.__bound_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr iter_difference_t<_Start> operator-(const __iterator& __x, const __sentinel& __y)
+ requires sized_sentinel_for<_Bound, _Start>
+ {
+ return __x.__value_ - __y.__bound_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr iter_difference_t<_Start> operator-(const __sentinel& __x, const __iterator& __y)
+ requires sized_sentinel_for<_Bound, _Start>
+ {
+ return -(__y - __x);
+ }
+ };
+
+ _Start __value_ = _Start();
+ _Bound __bound_ = _Bound();
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI
+ iota_view() requires default_initializable<_Start> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit iota_view(_Start __value) : __value_(std::move(__value)) { }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr iota_view(type_identity_t<_Start> __value, type_identity_t<_Bound> __bound)
+ : __value_(std::move(__value)), __bound_(std::move(__bound)) {
+ // Validate the precondition if possible.
+ if constexpr (totally_ordered_with<_Start, _Bound>) {
+ _LIBCPP_ASSERT(ranges::less_equal()(__value_, __bound_),
+ "Precondition violated: value is greater than bound.");
+ }
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr iota_view(__iterator __first, __iterator __last)
+ requires same_as<_Start, _Bound>
+ : iota_view(std::move(__first.__value_), std::move(__last.__value_)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr iota_view(__iterator __first, _Bound __last)
+ requires same_as<_Bound, unreachable_sentinel_t>
+ : iota_view(std::move(__first.__value_), std::move(__last)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr iota_view(__iterator __first, __sentinel __last)
+ requires (!same_as<_Start, _Bound> && !same_as<_Start, unreachable_sentinel_t>)
+ : iota_view(std::move(__first.__value_), std::move(__last.__bound_)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator begin() const { return __iterator{__value_}; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() const {
+ if constexpr (same_as<_Bound, unreachable_sentinel_t>)
+ return unreachable_sentinel;
+ else
+ return __sentinel{__bound_};
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator end() const requires same_as<_Start, _Bound> {
+ return __iterator{__bound_};
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() const
+ requires (same_as<_Start, _Bound> && __advanceable<_Start>) ||
+ (integral<_Start> && integral<_Bound>) ||
+ sized_sentinel_for<_Bound, _Start>
+ {
+ if constexpr (__integer_like<_Start> && __integer_like<_Bound>) {
+ if (__value_ < 0) {
+ if (__bound_ < 0) {
+ return std::__to_unsigned_like(-__value_) - std::__to_unsigned_like(-__bound_);
+ }
+ return std::__to_unsigned_like(__bound_) + std::__to_unsigned_like(-__value_);
+ }
+ return std::__to_unsigned_like(__bound_) - std::__to_unsigned_like(__value_);
+ }
+ return std::__to_unsigned_like(__bound_ - __value_);
+ }
+ };
+
+ template<class _Start, class _Bound>
+ requires (!__integer_like<_Start> || !__integer_like<_Bound> ||
+ (__signed_integer_like<_Start> == __signed_integer_like<_Bound>))
+ iota_view(_Start, _Bound) -> iota_view<_Start, _Bound>;
+
+ template<class _Start, class _Bound>
+ inline constexpr bool enable_borrowed_range<iota_view<_Start, _Bound>> = true;
+
+namespace views {
+namespace __iota {
+ struct __fn {
+ template<class _Start>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Start&& __start) const
+ noexcept(noexcept(ranges::iota_view(std::forward<_Start>(__start))))
+ -> decltype( ranges::iota_view(std::forward<_Start>(__start)))
+ { return ranges::iota_view(std::forward<_Start>(__start)); }
+
+ template<class _Start, class _Bound>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Start&& __start, _Bound&& __bound) const
+ noexcept(noexcept(ranges::iota_view(std::forward<_Start>(__start), std::forward<_Bound>(__bound))))
+ -> decltype( ranges::iota_view(std::forward<_Start>(__start), std::forward<_Bound>(__bound)))
+ { return ranges::iota_view(std::forward<_Start>(__start), std::forward<_Bound>(__bound)); }
+ };
+} // namespace __iota
+
+inline namespace __cpo {
+ inline constexpr auto iota = __iota::__fn{};
+} // namespace __cpo
+} // namespace views
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_IOTA_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/join_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/join_view.h
new file mode 100644
index 0000000000..18180984d1
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/join_view.h
@@ -0,0 +1,350 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_JOIN_VIEW_H
+#define _LIBCPP___RANGES_JOIN_VIEW_H
+
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__iterator/iterator_traits.h>
+#include <__ranges/access.h>
+#include <__ranges/all.h>
+#include <__ranges/concepts.h>
+#include <__ranges/non_propagating_cache.h>
+#include <__ranges/ref_view.h>
+#include <__ranges/subrange.h>
+#include <__ranges/view_interface.h>
+#include <__utility/declval.h>
+#include <__utility/forward.h>
+#include <optional>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<class>
+ struct __join_view_iterator_category {};
+
+ template<class _View>
+ requires is_reference_v<range_reference_t<_View>> &&
+ forward_range<_View> &&
+ forward_range<range_reference_t<_View>>
+ struct __join_view_iterator_category<_View> {
+ using _OuterC = typename iterator_traits<iterator_t<_View>>::iterator_category;
+ using _InnerC = typename iterator_traits<iterator_t<range_reference_t<_View>>>::iterator_category;
+
+ using iterator_category = _If<
+ derived_from<_OuterC, bidirectional_iterator_tag> && derived_from<_InnerC, bidirectional_iterator_tag>,
+ bidirectional_iterator_tag,
+ _If<
+ derived_from<_OuterC, forward_iterator_tag> && derived_from<_InnerC, forward_iterator_tag>,
+ forward_iterator_tag,
+ input_iterator_tag
+ >
+ >;
+ };
+
+ template<input_range _View>
+ requires view<_View> && input_range<range_reference_t<_View>>
+ class join_view
+ : public view_interface<join_view<_View>> {
+ private:
+ using _InnerRange = range_reference_t<_View>;
+
+ template<bool> struct __iterator;
+ template<bool> struct __sentinel;
+
+ static constexpr bool _UseCache = !is_reference_v<_InnerRange>;
+ using _Cache = _If<_UseCache, __non_propagating_cache<remove_cvref_t<_InnerRange>>, __empty_cache>;
+ _LIBCPP_NO_UNIQUE_ADDRESS _Cache __cache_;
+ _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI
+ join_view() requires default_initializable<_View> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit join_view(_View __base)
+ : __base_(std::move(__base)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() const& requires copy_constructible<_View> { return __base_; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() && { return std::move(__base_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin() {
+ constexpr bool __use_const = __simple_view<_View> &&
+ is_reference_v<range_reference_t<_View>>;
+ return __iterator<__use_const>{*this, ranges::begin(__base_)};
+ }
+
+ template<class _V2 = _View>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin() const
+ requires input_range<const _V2> &&
+ is_reference_v<range_reference_t<const _V2>>
+ {
+ return __iterator<true>{*this, ranges::begin(__base_)};
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() {
+ if constexpr (forward_range<_View> &&
+ is_reference_v<_InnerRange> &&
+ forward_range<_InnerRange> &&
+ common_range<_View> &&
+ common_range<_InnerRange>)
+ return __iterator<__simple_view<_View>>{*this, ranges::end(__base_)};
+ else
+ return __sentinel<__simple_view<_View>>{*this};
+ }
+
+ template<class _V2 = _View>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() const
+ requires input_range<const _V2> &&
+ is_reference_v<range_reference_t<const _V2>>
+ {
+ using _ConstInnerRange = range_reference_t<const _View>;
+ if constexpr (forward_range<const _View> &&
+ is_reference_v<_ConstInnerRange> &&
+ forward_range<_ConstInnerRange> &&
+ common_range<const _View> &&
+ common_range<_ConstInnerRange>) {
+ return __iterator<true>{*this, ranges::end(__base_)};
+ } else {
+ return __sentinel<true>{*this};
+ }
+ }
+ };
+
+ template<input_range _View>
+ requires view<_View> && input_range<range_reference_t<_View>>
+ template<bool _Const> struct join_view<_View>::__sentinel {
+ template<bool> friend struct __sentinel;
+
+ private:
+ using _Parent = __maybe_const<_Const, join_view>;
+ using _Base = __maybe_const<_Const, _View>;
+ sentinel_t<_Base> __end_ = sentinel_t<_Base>();
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI
+ __sentinel() = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit __sentinel(_Parent& __parent)
+ : __end_(ranges::end(__parent.__base_)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __sentinel(__sentinel<!_Const> __s)
+ requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
+ : __end_(std::move(__s.__end_)) {}
+
+ template<bool _OtherConst>
+ requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
+ return __x.__outer_ == __y.__end_;
+ }
+ };
+
+ template<input_range _View>
+ requires view<_View> && input_range<range_reference_t<_View>>
+ template<bool _Const> struct join_view<_View>::__iterator
+ : public __join_view_iterator_category<__maybe_const<_Const, _View>> {
+
+ template<bool> friend struct __iterator;
+
+ private:
+ using _Parent = __maybe_const<_Const, join_view>;
+ using _Base = __maybe_const<_Const, _View>;
+ using _Outer = iterator_t<_Base>;
+ using _Inner = iterator_t<range_reference_t<_Base>>;
+
+ static constexpr bool __ref_is_glvalue = is_reference_v<range_reference_t<_Base>>;
+
+ public:
+ _Outer __outer_ = _Outer();
+
+ private:
+ optional<_Inner> __inner_;
+ _Parent *__parent_ = nullptr;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr void __satisfy() {
+ for (; __outer_ != ranges::end(__parent_->__base_); ++__outer_) {
+ auto&& __inner = [&]() -> auto&& {
+ if constexpr (__ref_is_glvalue)
+ return *__outer_;
+ else
+ return __parent_->__cache_.__emplace_from([&]() -> decltype(auto) { return *__outer_; });
+ }();
+ __inner_ = ranges::begin(__inner);
+ if (*__inner_ != ranges::end(__inner))
+ return;
+ }
+
+ if constexpr (__ref_is_glvalue)
+ __inner_.reset();
+ }
+
+ public:
+ using iterator_concept = _If<
+ __ref_is_glvalue && bidirectional_range<_Base> && bidirectional_range<range_reference_t<_Base>>,
+ bidirectional_iterator_tag,
+ _If<
+ __ref_is_glvalue && forward_range<_Base> && forward_range<range_reference_t<_Base>>,
+ forward_iterator_tag,
+ input_iterator_tag
+ >
+ >;
+
+ using value_type = range_value_t<range_reference_t<_Base>>;
+
+ using difference_type = common_type_t<
+ range_difference_t<_Base>, range_difference_t<range_reference_t<_Base>>>;
+
+ _LIBCPP_HIDE_FROM_ABI
+ __iterator() requires default_initializable<_Outer> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator(_Parent& __parent, _Outer __outer)
+ : __outer_(std::move(__outer))
+ , __parent_(std::addressof(__parent)) {
+ __satisfy();
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator(__iterator<!_Const> __i)
+ requires _Const &&
+ convertible_to<iterator_t<_View>, _Outer> &&
+ convertible_to<iterator_t<_InnerRange>, _Inner>
+ : __outer_(std::move(__i.__outer_))
+ , __inner_(std::move(__i.__inner_))
+ , __parent_(__i.__parent_) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) operator*() const {
+ return **__inner_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Inner operator->() const
+ requires __has_arrow<_Inner> && copyable<_Inner>
+ {
+ return *__inner_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator++() {
+ auto&& __inner = [&]() -> auto&& {
+ if constexpr (__ref_is_glvalue)
+ return *__outer_;
+ else
+ return *__parent_->__cache_;
+ }();
+ if (++*__inner_ == ranges::end(__inner)) {
+ ++__outer_;
+ __satisfy();
+ }
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr void operator++(int) {
+ ++*this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator operator++(int)
+ requires __ref_is_glvalue &&
+ forward_range<_Base> &&
+ forward_range<range_reference_t<_Base>>
+ {
+ auto __tmp = *this;
+ ++*this;
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator--()
+ requires __ref_is_glvalue &&
+ bidirectional_range<_Base> &&
+ bidirectional_range<range_reference_t<_Base>> &&
+ common_range<range_reference_t<_Base>>
+ {
+ if (__outer_ == ranges::end(__parent_->__base_))
+ __inner_ = ranges::end(*--__outer_);
+
+ // Skip empty inner ranges when going backwards.
+ while (*__inner_ == ranges::begin(*__outer_)) {
+ __inner_ = ranges::end(*--__outer_);
+ }
+
+ --*__inner_;
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator operator--(int)
+ requires __ref_is_glvalue &&
+ bidirectional_range<_Base> &&
+ bidirectional_range<range_reference_t<_Base>> &&
+ common_range<range_reference_t<_Base>>
+ {
+ auto __tmp = *this;
+ --*this;
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
+ requires __ref_is_glvalue &&
+ equality_comparable<iterator_t<_Base>> &&
+ equality_comparable<iterator_t<range_reference_t<_Base>>>
+ {
+ return __x.__outer_ == __y.__outer_ && __x.__inner_ == __y.__inner_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr decltype(auto) iter_move(const __iterator& __i)
+ noexcept(noexcept(ranges::iter_move(*__i.__inner_)))
+ {
+ return ranges::iter_move(*__i.__inner_);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr void iter_swap(const __iterator& __x, const __iterator& __y)
+ noexcept(noexcept(ranges::iter_swap(*__x.__inner_, *__y.__inner_)))
+ requires indirectly_swappable<_Inner>
+ {
+ return ranges::iter_swap(*__x.__inner_, *__y.__inner_);
+ }
+ };
+
+ template<class _Range>
+ explicit join_view(_Range&&) -> join_view<views::all_t<_Range>>;
+
+} // namespace ranges
+
+#undef _CONSTEXPR_TERNARY
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_JOIN_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/non_propagating_cache.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/non_propagating_cache.h
new file mode 100644
index 0000000000..30fcd9f11e
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/non_propagating_cache.h
@@ -0,0 +1,114 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_NON_PROPAGATING_CACHE_H
+#define _LIBCPP___RANGES_NON_PROPAGATING_CACHE_H
+
+#include <__config>
+#include <__iterator/concepts.h> // indirectly_readable
+#include <__iterator/iterator_traits.h> // iter_reference_t
+#include <__memory/addressof.h>
+#include <__utility/forward.h>
+#include <concepts> // constructible_from
+#include <optional>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ // __non_propagating_cache is a helper type that allows storing an optional value in it,
+ // but which does not copy the source's value when it is copy constructed/assigned to,
+ // and which resets the source's value when it is moved-from.
+ //
+ // This type is used as an implementation detail of some views that need to cache the
+ // result of `begin()` in order to provide an amortized O(1) begin() method. Typically,
+ // we don't want to propagate the value of the cache upon copy because the cached iterator
+ // may refer to internal details of the source view.
+ template<class _Tp>
+ requires is_object_v<_Tp>
+ class _LIBCPP_TEMPLATE_VIS __non_propagating_cache {
+ struct __from_tag { };
+ struct __forward_tag { };
+
+ // This helper class is needed to perform copy and move elision when
+ // constructing the contained type from an iterator.
+ struct __wrapper {
+ template<class ..._Args>
+ constexpr explicit __wrapper(__forward_tag, _Args&& ...__args) : __t_(std::forward<_Args>(__args)...) { }
+ template<class _Fn>
+ constexpr explicit __wrapper(__from_tag, _Fn const& __f) : __t_(__f()) { }
+ _Tp __t_;
+ };
+
+ optional<__wrapper> __value_ = nullopt;
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI __non_propagating_cache() = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __non_propagating_cache(__non_propagating_cache const&) noexcept
+ : __value_(nullopt)
+ { }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __non_propagating_cache(__non_propagating_cache&& __other) noexcept
+ : __value_(nullopt)
+ {
+ __other.__value_.reset();
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __non_propagating_cache& operator=(__non_propagating_cache const& __other) noexcept {
+ if (this != std::addressof(__other)) {
+ __value_.reset();
+ }
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __non_propagating_cache& operator=(__non_propagating_cache&& __other) noexcept {
+ __value_.reset();
+ __other.__value_.reset();
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Tp& operator*() { return __value_->__t_; }
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Tp const& operator*() const { return __value_->__t_; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr bool __has_value() const { return __value_.has_value(); }
+
+ template<class _Fn>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Tp& __emplace_from(_Fn const& __f) {
+ return __value_.emplace(__from_tag{}, __f).__t_;
+ }
+
+ template<class ..._Args>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Tp& __emplace(_Args&& ...__args) {
+ return __value_.emplace(__forward_tag{}, std::forward<_Args>(__args)...).__t_;
+ }
+ };
+
+ struct __empty_cache { };
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_NON_PROPAGATING_CACHE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/owning_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/owning_view.h
new file mode 100644
index 0000000000..322152d7ca
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/owning_view.h
@@ -0,0 +1,81 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_OWNING_VIEW_H
+#define _LIBCPP___RANGES_OWNING_VIEW_H
+
+#include <__concepts/constructible.h>
+#include <__concepts/movable.h>
+#include <__config>
+#include <__ranges/access.h>
+#include <__ranges/concepts.h>
+#include <__ranges/data.h>
+#include <__ranges/empty.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/size.h>
+#include <__ranges/view_interface.h>
+#include <__utility/move.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<range _Rp>
+ requires movable<_Rp> && (!__is_std_initializer_list<remove_cvref_t<_Rp>>)
+ class owning_view : public view_interface<owning_view<_Rp>> {
+ _Rp __r_ = _Rp();
+
+public:
+ owning_view() requires default_initializable<_Rp> = default;
+ _LIBCPP_HIDE_FROM_ABI constexpr owning_view(_Rp&& __r) : __r_(std::move(__r)) {}
+
+ owning_view(owning_view&&) = default;
+ owning_view& operator=(owning_view&&) = default;
+
+ _LIBCPP_HIDE_FROM_ABI constexpr _Rp& base() & noexcept { return __r_; }
+ _LIBCPP_HIDE_FROM_ABI constexpr const _Rp& base() const& noexcept { return __r_; }
+ _LIBCPP_HIDE_FROM_ABI constexpr _Rp&& base() && noexcept { return std::move(__r_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr const _Rp&& base() const&& noexcept { return std::move(__r_); }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_Rp> begin() { return ranges::begin(__r_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Rp> end() { return ranges::end(__r_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const requires range<const _Rp> { return ranges::begin(__r_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr auto end() const requires range<const _Rp> { return ranges::end(__r_); }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr bool empty() requires requires { ranges::empty(__r_); }
+ { return ranges::empty(__r_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const requires requires { ranges::empty(__r_); }
+ { return ranges::empty(__r_); }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr auto size() requires sized_range<_Rp>
+ { return ranges::size(__r_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr auto size() const requires sized_range<const _Rp>
+ { return ranges::size(__r_); }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr auto data() requires contiguous_range<_Rp>
+ { return ranges::data(__r_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr auto data() const requires contiguous_range<const _Rp>
+ { return ranges::data(__r_); }
+ };
+
+ template<class _Tp>
+ inline constexpr bool enable_borrowed_range<owning_view<_Tp>> = enable_borrowed_range<_Tp>;
+
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_OWNING_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/range_adaptor.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/range_adaptor.h
new file mode 100644
index 0000000000..9b456b18f0
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/range_adaptor.h
@@ -0,0 +1,73 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___RANGES_RANGE_ADAPTOR_H
+#define _LIBCPP___RANGES_RANGE_ADAPTOR_H
+
+#include <__config>
+#include <__functional/compose.h>
+#include <__functional/invoke.h>
+#include <__ranges/concepts.h>
+#include <__utility/forward.h>
+#include <__utility/move.h>
+#include <concepts>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+// CRTP base that one can derive from in order to be considered a range adaptor closure
+// by the library. When deriving from this class, a pipe operator will be provided to
+// make the following hold:
+// - `x | f` is equivalent to `f(x)`
+// - `f1 | f2` is an adaptor closure `g` such that `g(x)` is equivalent to `f2(f1(x))`
+template <class _Tp>
+struct __range_adaptor_closure;
+
+// Type that wraps an arbitrary function object and makes it into a range adaptor closure,
+// i.e. something that can be called via the `x | f` notation.
+template <class _Fn>
+struct __range_adaptor_closure_t : _Fn, __range_adaptor_closure<__range_adaptor_closure_t<_Fn>> {
+ constexpr explicit __range_adaptor_closure_t(_Fn&& __f) : _Fn(std::move(__f)) { }
+};
+
+template <class _Tp>
+concept _RangeAdaptorClosure = derived_from<remove_cvref_t<_Tp>, __range_adaptor_closure<remove_cvref_t<_Tp>>>;
+
+template <class _Tp>
+struct __range_adaptor_closure {
+ template <ranges::viewable_range _View, _RangeAdaptorClosure _Closure>
+ requires same_as<_Tp, remove_cvref_t<_Closure>> &&
+ invocable<_Closure, _View>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ friend constexpr decltype(auto) operator|(_View&& __view, _Closure&& __closure)
+ noexcept(is_nothrow_invocable_v<_Closure, _View>)
+ { return std::invoke(std::forward<_Closure>(__closure), std::forward<_View>(__view)); }
+
+ template <_RangeAdaptorClosure _Closure, _RangeAdaptorClosure _OtherClosure>
+ requires same_as<_Tp, remove_cvref_t<_Closure>> &&
+ constructible_from<decay_t<_Closure>, _Closure> &&
+ constructible_from<decay_t<_OtherClosure>, _OtherClosure>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ friend constexpr auto operator|(_Closure&& __c1, _OtherClosure&& __c2)
+ noexcept(is_nothrow_constructible_v<decay_t<_Closure>, _Closure> &&
+ is_nothrow_constructible_v<decay_t<_OtherClosure>, _OtherClosure>)
+ { return __range_adaptor_closure_t(std::__compose(std::forward<_OtherClosure>(__c2), std::forward<_Closure>(__c1))); }
+};
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_RANGE_ADAPTOR_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h
new file mode 100644
index 0000000000..cc4c0582cc
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h
@@ -0,0 +1,130 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_RBEGIN_H
+#define _LIBCPP___RANGES_RBEGIN_H
+
+#include <__concepts/class_or_enum.h>
+#include <__concepts/same_as.h>
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__iterator/readable_traits.h>
+#include <__iterator/reverse_iterator.h>
+#include <__ranges/access.h>
+#include <__utility/auto_cast.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+// [ranges.access.rbegin]
+
+namespace ranges {
+namespace __rbegin {
+template <class _Tp>
+concept __member_rbegin =
+ __can_borrow<_Tp> &&
+ __workaround_52970<_Tp> &&
+ requires(_Tp&& __t) {
+ { _LIBCPP_AUTO_CAST(__t.rbegin()) } -> input_or_output_iterator;
+ };
+
+void rbegin(auto&) = delete;
+void rbegin(const auto&) = delete;
+
+template <class _Tp>
+concept __unqualified_rbegin =
+ !__member_rbegin<_Tp> &&
+ __can_borrow<_Tp> &&
+ __class_or_enum<remove_cvref_t<_Tp>> &&
+ requires(_Tp&& __t) {
+ { _LIBCPP_AUTO_CAST(rbegin(__t)) } -> input_or_output_iterator;
+ };
+
+template <class _Tp>
+concept __can_reverse =
+ __can_borrow<_Tp> &&
+ !__member_rbegin<_Tp> &&
+ !__unqualified_rbegin<_Tp> &&
+ requires(_Tp&& __t) {
+ { ranges::begin(__t) } -> same_as<decltype(ranges::end(__t))>;
+ { ranges::begin(__t) } -> bidirectional_iterator;
+ };
+
+struct __fn {
+ template <class _Tp>
+ requires __member_rbegin<_Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.rbegin())))
+ {
+ return _LIBCPP_AUTO_CAST(__t.rbegin());
+ }
+
+ template <class _Tp>
+ requires __unqualified_rbegin<_Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(_LIBCPP_AUTO_CAST(rbegin(__t))))
+ {
+ return _LIBCPP_AUTO_CAST(rbegin(__t));
+ }
+
+ template <class _Tp>
+ requires __can_reverse<_Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::end(__t)))
+ {
+ return std::make_reverse_iterator(ranges::end(__t));
+ }
+
+ void operator()(auto&&) const = delete;
+};
+} // namespace __rbegin
+
+inline namespace __cpo {
+ inline constexpr auto rbegin = __rbegin::__fn{};
+} // namespace __cpo
+} // namespace ranges
+
+// [range.access.crbegin]
+
+namespace ranges {
+namespace __crbegin {
+struct __fn {
+ template <class _Tp>
+ requires is_lvalue_reference_v<_Tp&&>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::rbegin(static_cast<const remove_reference_t<_Tp>&>(__t))))
+ -> decltype( ranges::rbegin(static_cast<const remove_reference_t<_Tp>&>(__t)))
+ { return ranges::rbegin(static_cast<const remove_reference_t<_Tp>&>(__t)); }
+
+ template <class _Tp>
+ requires is_rvalue_reference_v<_Tp&&>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::rbegin(static_cast<const _Tp&&>(__t))))
+ -> decltype( ranges::rbegin(static_cast<const _Tp&&>(__t)))
+ { return ranges::rbegin(static_cast<const _Tp&&>(__t)); }
+};
+} // namespace __crbegin
+
+inline namespace __cpo {
+ inline constexpr auto crbegin = __crbegin::__fn{};
+} // namespace __cpo
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_RBEGIN_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/ref_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/ref_view.h
new file mode 100644
index 0000000000..90fb5c1832
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/ref_view.h
@@ -0,0 +1,86 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_REF_VIEW_H
+#define _LIBCPP___RANGES_REF_VIEW_H
+
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__iterator/incrementable_traits.h>
+#include <__iterator/iterator_traits.h>
+#include <__memory/addressof.h>
+#include <__ranges/access.h>
+#include <__ranges/concepts.h>
+#include <__ranges/data.h>
+#include <__ranges/empty.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/size.h>
+#include <__ranges/view_interface.h>
+#include <__utility/forward.h>
+#include <concepts>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<range _Range>
+ requires is_object_v<_Range>
+ class ref_view : public view_interface<ref_view<_Range>> {
+ _Range *__range_;
+
+ static void __fun(_Range&);
+ static void __fun(_Range&&) = delete;
+
+public:
+ template<class _Tp>
+ requires __different_from<_Tp, ref_view> &&
+ convertible_to<_Tp, _Range&> && requires { __fun(declval<_Tp>()); }
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr ref_view(_Tp&& __t)
+ : __range_(std::addressof(static_cast<_Range&>(std::forward<_Tp>(__t))))
+ {}
+
+ _LIBCPP_HIDE_FROM_ABI constexpr _Range& base() const { return *__range_; }
+
+ _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_Range> begin() const { return ranges::begin(*__range_); }
+ _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Range> end() const { return ranges::end(*__range_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr bool empty() const
+ requires requires { ranges::empty(*__range_); }
+ { return ranges::empty(*__range_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() const
+ requires sized_range<_Range>
+ { return ranges::size(*__range_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto data() const
+ requires contiguous_range<_Range>
+ { return ranges::data(*__range_); }
+ };
+
+ template<class _Range>
+ ref_view(_Range&) -> ref_view<_Range>;
+
+ template<class _Tp>
+ inline constexpr bool enable_borrowed_range<ref_view<_Tp>> = true;
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_REF_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h
new file mode 100644
index 0000000000..cd7826021d
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h
@@ -0,0 +1,134 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_REND_H
+#define _LIBCPP___RANGES_REND_H
+
+#include <__concepts/class_or_enum.h>
+#include <__concepts/same_as.h>
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__iterator/readable_traits.h>
+#include <__iterator/reverse_iterator.h>
+#include <__ranges/access.h>
+#include <__ranges/rbegin.h>
+#include <__utility/auto_cast.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+// [range.access.rend]
+
+namespace ranges {
+namespace __rend {
+template <class _Tp>
+concept __member_rend =
+ __can_borrow<_Tp> &&
+ __workaround_52970<_Tp> &&
+ requires(_Tp&& __t) {
+ ranges::rbegin(__t);
+ { _LIBCPP_AUTO_CAST(__t.rend()) } -> sentinel_for<decltype(ranges::rbegin(__t))>;
+ };
+
+void rend(auto&) = delete;
+void rend(const auto&) = delete;
+
+template <class _Tp>
+concept __unqualified_rend =
+ !__member_rend<_Tp> &&
+ __can_borrow<_Tp> &&
+ __class_or_enum<remove_cvref_t<_Tp>> &&
+ requires(_Tp&& __t) {
+ ranges::rbegin(__t);
+ { _LIBCPP_AUTO_CAST(rend(__t)) } -> sentinel_for<decltype(ranges::rbegin(__t))>;
+ };
+
+template <class _Tp>
+concept __can_reverse =
+ __can_borrow<_Tp> &&
+ !__member_rend<_Tp> &&
+ !__unqualified_rend<_Tp> &&
+ requires(_Tp&& __t) {
+ { ranges::begin(__t) } -> same_as<decltype(ranges::end(__t))>;
+ { ranges::begin(__t) } -> bidirectional_iterator;
+ };
+
+class __fn {
+public:
+ template <class _Tp>
+ requires __member_rend<_Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.rend())))
+ {
+ return _LIBCPP_AUTO_CAST(__t.rend());
+ }
+
+ template <class _Tp>
+ requires __unqualified_rend<_Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(_LIBCPP_AUTO_CAST(rend(__t))))
+ {
+ return _LIBCPP_AUTO_CAST(rend(__t));
+ }
+
+ template <class _Tp>
+ requires __can_reverse<_Tp>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::begin(__t)))
+ {
+ return std::make_reverse_iterator(ranges::begin(__t));
+ }
+
+ void operator()(auto&&) const = delete;
+};
+} // namespace __rend
+
+inline namespace __cpo {
+ inline constexpr auto rend = __rend::__fn{};
+} // namespace __cpo
+} // namespace ranges
+
+// [range.access.crend]
+
+namespace ranges {
+namespace __crend {
+struct __fn {
+ template <class _Tp>
+ requires is_lvalue_reference_v<_Tp&&>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t))))
+ -> decltype( ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t)))
+ { return ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t)); }
+
+ template <class _Tp>
+ requires is_rvalue_reference_v<_Tp&&>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Tp&& __t) const
+ noexcept(noexcept(ranges::rend(static_cast<const _Tp&&>(__t))))
+ -> decltype( ranges::rend(static_cast<const _Tp&&>(__t)))
+ { return ranges::rend(static_cast<const _Tp&&>(__t)); }
+};
+} // namespace __crend
+
+inline namespace __cpo {
+ inline constexpr auto crend = __crend::__fn{};
+} // namespace __cpo
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_REND_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h
new file mode 100644
index 0000000000..59b8289a23
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/reverse_view.h
@@ -0,0 +1,190 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_REVERSE_VIEW_H
+#define _LIBCPP___RANGES_REVERSE_VIEW_H
+
+#include <__concepts/constructible.h>
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__iterator/next.h>
+#include <__iterator/reverse_iterator.h>
+#include <__ranges/access.h>
+#include <__ranges/all.h>
+#include <__ranges/concepts.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/non_propagating_cache.h>
+#include <__ranges/range_adaptor.h>
+#include <__ranges/size.h>
+#include <__ranges/subrange.h>
+#include <__ranges/view_interface.h>
+#include <__utility/forward.h>
+#include <__utility/move.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<view _View>
+ requires bidirectional_range<_View>
+ class reverse_view : public view_interface<reverse_view<_View>> {
+ // We cache begin() whenever ranges::next is not guaranteed O(1) to provide an
+ // amortized O(1) begin() method.
+ static constexpr bool _UseCache = !random_access_range<_View> && !common_range<_View>;
+ using _Cache = _If<_UseCache, __non_propagating_cache<reverse_iterator<iterator_t<_View>>>, __empty_cache>;
+ _LIBCPP_NO_UNIQUE_ADDRESS _Cache __cached_begin_ = _Cache();
+ _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI
+ reverse_view() requires default_initializable<_View> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit reverse_view(_View __view) : __base_(std::move(__view)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() const& requires copy_constructible<_View> { return __base_; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() && { return std::move(__base_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr reverse_iterator<iterator_t<_View>> begin() {
+ if constexpr (_UseCache)
+ if (__cached_begin_.__has_value())
+ return *__cached_begin_;
+
+ auto __tmp = std::make_reverse_iterator(ranges::next(ranges::begin(__base_), ranges::end(__base_)));
+ if constexpr (_UseCache)
+ __cached_begin_.__emplace(__tmp);
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr reverse_iterator<iterator_t<_View>> begin() requires common_range<_View> {
+ return std::make_reverse_iterator(ranges::end(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin() const requires common_range<const _View> {
+ return std::make_reverse_iterator(ranges::end(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr reverse_iterator<iterator_t<_View>> end() {
+ return std::make_reverse_iterator(ranges::begin(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() const requires common_range<const _View> {
+ return std::make_reverse_iterator(ranges::begin(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() requires sized_range<_View> {
+ return ranges::size(__base_);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() const requires sized_range<const _View> {
+ return ranges::size(__base_);
+ }
+ };
+
+ template<class _Range>
+ reverse_view(_Range&&) -> reverse_view<views::all_t<_Range>>;
+
+ template<class _Tp>
+ inline constexpr bool enable_borrowed_range<reverse_view<_Tp>> = enable_borrowed_range<_Tp>;
+
+ namespace views {
+ namespace __reverse {
+ template<class _Tp>
+ constexpr bool __is_reverse_view = false;
+
+ template<class _Tp>
+ constexpr bool __is_reverse_view<reverse_view<_Tp>> = true;
+
+ template<class _Tp>
+ constexpr bool __is_sized_reverse_subrange = false;
+
+ template<class _Iter>
+ constexpr bool __is_sized_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, subrange_kind::sized>> = true;
+
+ template<class _Tp>
+ constexpr bool __is_unsized_reverse_subrange = false;
+
+ template<class _Iter, subrange_kind _Kind>
+ constexpr bool __is_unsized_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, _Kind>> = _Kind == subrange_kind::unsized;
+
+ template<class _Tp>
+ struct __unwrapped_reverse_subrange {
+ using type = void; // avoid SFINAE-ing out the overload below -- let the concept requirements do it for better diagnostics
+ };
+
+ template<class _Iter, subrange_kind _Kind>
+ struct __unwrapped_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, _Kind>> {
+ using type = subrange<_Iter, _Iter, _Kind>;
+ };
+
+ struct __fn : __range_adaptor_closure<__fn> {
+ template<class _Range>
+ requires __is_reverse_view<remove_cvref_t<_Range>>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(std::forward<_Range>(__range).base()))
+ -> decltype( std::forward<_Range>(__range).base())
+ { return std::forward<_Range>(__range).base(); }
+
+ template<class _Range,
+ class _UnwrappedSubrange = typename __unwrapped_reverse_subrange<remove_cvref_t<_Range>>::type>
+ requires __is_sized_reverse_subrange<remove_cvref_t<_Range>>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(_UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size())))
+ -> decltype( _UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size()))
+ { return _UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size()); }
+
+ template<class _Range,
+ class _UnwrappedSubrange = typename __unwrapped_reverse_subrange<remove_cvref_t<_Range>>::type>
+ requires __is_unsized_reverse_subrange<remove_cvref_t<_Range>>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(_UnwrappedSubrange(__range.end().base(), __range.begin().base())))
+ -> decltype( _UnwrappedSubrange(__range.end().base(), __range.begin().base()))
+ { return _UnwrappedSubrange(__range.end().base(), __range.begin().base()); }
+
+ template<class _Range>
+ requires (!__is_reverse_view<remove_cvref_t<_Range>> &&
+ !__is_sized_reverse_subrange<remove_cvref_t<_Range>> &&
+ !__is_unsized_reverse_subrange<remove_cvref_t<_Range>>)
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range) const
+ noexcept(noexcept(reverse_view{std::forward<_Range>(__range)}))
+ -> decltype( reverse_view{std::forward<_Range>(__range)})
+ { return reverse_view{std::forward<_Range>(__range)}; }
+ };
+ } // namespace __reverse
+
+ inline namespace __cpo {
+ inline constexpr auto reverse = __reverse::__fn{};
+ } // namespace __cpo
+ } // namespace views
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_REVERSE_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/single_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/single_view.h
new file mode 100644
index 0000000000..5347b78da9
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/single_view.h
@@ -0,0 +1,81 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_SINGLE_VIEW_H
+#define _LIBCPP___RANGES_SINGLE_VIEW_H
+
+#include <__config>
+#include <__ranges/copyable_box.h>
+#include <__ranges/view_interface.h>
+#include <__utility/forward.h>
+#include <__utility/in_place.h>
+#include <__utility/move.h>
+#include <concepts>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<copy_constructible _Tp>
+ requires is_object_v<_Tp>
+ class single_view : public view_interface<single_view<_Tp>> {
+ __copyable_box<_Tp> __value_;
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI
+ single_view() requires default_initializable<_Tp> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit single_view(const _Tp& __t) : __value_(in_place, __t) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit single_view(_Tp&& __t) : __value_(in_place, std::move(__t)) {}
+
+ template<class... _Args>
+ requires constructible_from<_Tp, _Args...>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit single_view(in_place_t, _Args&&... __args)
+ : __value_{in_place, std::forward<_Args>(__args)...} {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Tp* begin() noexcept { return data(); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr const _Tp* begin() const noexcept { return data(); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Tp* end() noexcept { return data() + 1; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr const _Tp* end() const noexcept { return data() + 1; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ static constexpr size_t size() noexcept { return 1; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Tp* data() noexcept { return __value_.operator->(); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr const _Tp* data() const noexcept { return __value_.operator->(); }
+ };
+
+ template<class _Tp>
+ single_view(_Tp) -> single_view<_Tp>;
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_SINGLE_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h
new file mode 100644
index 0000000000..4593205aef
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h
@@ -0,0 +1,289 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_SUBRANGE_H
+#define _LIBCPP___RANGES_SUBRANGE_H
+
+#include <__concepts/constructible.h>
+#include <__concepts/convertible_to.h>
+#include <__concepts/copyable.h>
+#include <__concepts/derived_from.h>
+#include <__concepts/different_from.h>
+#include <__config>
+#include <__debug>
+#include <__iterator/advance.h>
+#include <__iterator/concepts.h>
+#include <__iterator/incrementable_traits.h>
+#include <__iterator/iterator_traits.h>
+#include <__ranges/access.h>
+#include <__ranges/concepts.h>
+#include <__ranges/dangling.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/size.h>
+#include <__ranges/view_interface.h>
+#include <__tuple>
+#include <__utility/move.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<class _From, class _To>
+ concept __uses_nonqualification_pointer_conversion =
+ is_pointer_v<_From> && is_pointer_v<_To> &&
+ !convertible_to<remove_pointer_t<_From>(*)[], remove_pointer_t<_To>(*)[]>;
+
+ template<class _From, class _To>
+ concept __convertible_to_non_slicing =
+ convertible_to<_From, _To> &&
+ !__uses_nonqualification_pointer_conversion<decay_t<_From>, decay_t<_To>>;
+
+ template<class _Tp>
+ concept __pair_like =
+ !is_reference_v<_Tp> && requires(_Tp __t) {
+ typename tuple_size<_Tp>::type; // Ensures `tuple_size<T>` is complete.
+ requires derived_from<tuple_size<_Tp>, integral_constant<size_t, 2>>;
+ typename tuple_element_t<0, remove_const_t<_Tp>>;
+ typename tuple_element_t<1, remove_const_t<_Tp>>;
+ { std::get<0>(__t) } -> convertible_to<const tuple_element_t<0, _Tp>&>;
+ { std::get<1>(__t) } -> convertible_to<const tuple_element_t<1, _Tp>&>;
+ };
+
+ template<class _Pair, class _Iter, class _Sent>
+ concept __pair_like_convertible_from =
+ !range<_Pair> && __pair_like<_Pair> &&
+ constructible_from<_Pair, _Iter, _Sent> &&
+ __convertible_to_non_slicing<_Iter, tuple_element_t<0, _Pair>> &&
+ convertible_to<_Sent, tuple_element_t<1, _Pair>>;
+
+ enum class _LIBCPP_ENUM_VIS subrange_kind : bool { unsized, sized };
+
+ template<input_or_output_iterator _Iter, sentinel_for<_Iter> _Sent = _Iter,
+ subrange_kind _Kind = sized_sentinel_for<_Sent, _Iter>
+ ? subrange_kind::sized
+ : subrange_kind::unsized>
+ requires (_Kind == subrange_kind::sized || !sized_sentinel_for<_Sent, _Iter>)
+ class _LIBCPP_TEMPLATE_VIS subrange
+ : public view_interface<subrange<_Iter, _Sent, _Kind>>
+ {
+ private:
+ static constexpr bool _StoreSize = (_Kind == subrange_kind::sized && !sized_sentinel_for<_Sent, _Iter>);
+ static constexpr bool _MustProvideSizeAtConstruction = !_StoreSize; // just to improve compiler diagnostics
+ struct _Empty { constexpr _Empty(auto) noexcept { } };
+ using _Size = conditional_t<_StoreSize, make_unsigned_t<iter_difference_t<_Iter>>, _Empty>;
+ _LIBCPP_NO_UNIQUE_ADDRESS _Iter __begin_ = _Iter();
+ _LIBCPP_NO_UNIQUE_ADDRESS _Sent __end_ = _Sent();
+ _LIBCPP_NO_UNIQUE_ADDRESS _Size __size_ = 0;
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI
+ subrange() requires default_initializable<_Iter> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr subrange(__convertible_to_non_slicing<_Iter> auto __iter, _Sent __sent)
+ requires _MustProvideSizeAtConstruction
+ : __begin_(std::move(__iter)), __end_(std::move(__sent))
+ { }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr subrange(__convertible_to_non_slicing<_Iter> auto __iter, _Sent __sent,
+ make_unsigned_t<iter_difference_t<_Iter>> __n)
+ requires (_Kind == subrange_kind::sized)
+ : __begin_(std::move(__iter)), __end_(std::move(__sent)), __size_(__n)
+ {
+ if constexpr (sized_sentinel_for<_Sent, _Iter>)
+ _LIBCPP_ASSERT((__end_ - __begin_) == static_cast<iter_difference_t<_Iter>>(__n),
+ "std::ranges::subrange was passed an invalid size hint");
+ }
+
+ template<__different_from<subrange> _Range>
+ requires borrowed_range<_Range> &&
+ __convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
+ convertible_to<sentinel_t<_Range>, _Sent>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr subrange(_Range&& __range)
+ requires (!_StoreSize)
+ : subrange(ranges::begin(__range), ranges::end(__range))
+ { }
+
+ template<__different_from<subrange> _Range>
+ requires borrowed_range<_Range> &&
+ __convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
+ convertible_to<sentinel_t<_Range>, _Sent>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr subrange(_Range&& __range)
+ requires _StoreSize && sized_range<_Range>
+ : subrange(__range, ranges::size(__range))
+ { }
+
+ template<borrowed_range _Range>
+ requires __convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
+ convertible_to<sentinel_t<_Range>, _Sent>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr subrange(_Range&& __range, make_unsigned_t<iter_difference_t<_Iter>> __n)
+ requires (_Kind == subrange_kind::sized)
+ : subrange(ranges::begin(__range), ranges::end(__range), __n)
+ { }
+
+ template<__different_from<subrange> _Pair>
+ requires __pair_like_convertible_from<_Pair, const _Iter&, const _Sent&>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr operator _Pair() const {
+ return _Pair(__begin_, __end_);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Iter begin() const requires copyable<_Iter> {
+ return __begin_;
+ }
+
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter begin() requires (!copyable<_Iter>) {
+ return std::move(__begin_);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Sent end() const {
+ return __end_;
+ }
+
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const {
+ return __begin_ == __end_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr make_unsigned_t<iter_difference_t<_Iter>> size() const
+ requires (_Kind == subrange_kind::sized)
+ {
+ if constexpr (_StoreSize)
+ return __size_;
+ else
+ return std::__to_unsigned_like(__end_ - __begin_);
+ }
+
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange next(iter_difference_t<_Iter> __n = 1) const&
+ requires forward_iterator<_Iter>
+ {
+ auto __tmp = *this;
+ __tmp.advance(__n);
+ return __tmp;
+ }
+
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange next(iter_difference_t<_Iter> __n = 1) && {
+ advance(__n);
+ return std::move(*this);
+ }
+
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange prev(iter_difference_t<_Iter> __n = 1) const
+ requires bidirectional_iterator<_Iter>
+ {
+ auto __tmp = *this;
+ __tmp.advance(-__n);
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr subrange& advance(iter_difference_t<_Iter> __n) {
+ if constexpr (bidirectional_iterator<_Iter>) {
+ if (__n < 0) {
+ ranges::advance(__begin_, __n);
+ if constexpr (_StoreSize)
+ __size_ += std::__to_unsigned_like(-__n);
+ return *this;
+ }
+ }
+
+ auto __d = __n - ranges::advance(__begin_, __n, __end_);
+ if constexpr (_StoreSize)
+ __size_ -= std::__to_unsigned_like(__d);
+ return *this;
+ }
+ };
+
+ template<input_or_output_iterator _Iter, sentinel_for<_Iter> _Sent>
+ subrange(_Iter, _Sent) -> subrange<_Iter, _Sent>;
+
+ template<input_or_output_iterator _Iter, sentinel_for<_Iter> _Sent>
+ subrange(_Iter, _Sent, make_unsigned_t<iter_difference_t<_Iter>>)
+ -> subrange<_Iter, _Sent, subrange_kind::sized>;
+
+ template<borrowed_range _Range>
+ subrange(_Range&&) -> subrange<iterator_t<_Range>, sentinel_t<_Range>,
+ (sized_range<_Range> || sized_sentinel_for<sentinel_t<_Range>, iterator_t<_Range>>)
+ ? subrange_kind::sized : subrange_kind::unsized>;
+
+ template<borrowed_range _Range>
+ subrange(_Range&&, make_unsigned_t<range_difference_t<_Range>>)
+ -> subrange<iterator_t<_Range>, sentinel_t<_Range>, subrange_kind::sized>;
+
+ template<size_t _Index, class _Iter, class _Sent, subrange_kind _Kind>
+ requires ((_Index == 0 && copyable<_Iter>) || _Index == 1)
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto get(const subrange<_Iter, _Sent, _Kind>& __subrange) {
+ if constexpr (_Index == 0)
+ return __subrange.begin();
+ else
+ return __subrange.end();
+ }
+
+ template<size_t _Index, class _Iter, class _Sent, subrange_kind _Kind>
+ requires (_Index < 2)
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto get(subrange<_Iter, _Sent, _Kind>&& __subrange) {
+ if constexpr (_Index == 0)
+ return __subrange.begin();
+ else
+ return __subrange.end();
+ }
+
+ template<class _Ip, class _Sp, subrange_kind _Kp>
+ inline constexpr bool enable_borrowed_range<subrange<_Ip, _Sp, _Kp>> = true;
+
+ template<range _Rp>
+ using borrowed_subrange_t = _If<borrowed_range<_Rp>, subrange<iterator_t<_Rp>>, dangling>;
+} // namespace ranges
+
+// [range.subrange.general]
+
+using ranges::get;
+
+// [ranges.syn]
+
+template<class _Ip, class _Sp, ranges::subrange_kind _Kp>
+struct tuple_size<ranges::subrange<_Ip, _Sp, _Kp>> : integral_constant<size_t, 2> {};
+
+template<class _Ip, class _Sp, ranges::subrange_kind _Kp>
+struct tuple_element<0, ranges::subrange<_Ip, _Sp, _Kp>> {
+ using type = _Ip;
+};
+
+template<class _Ip, class _Sp, ranges::subrange_kind _Kp>
+struct tuple_element<1, ranges::subrange<_Ip, _Sp, _Kp>> {
+ using type = _Sp;
+};
+
+template<class _Ip, class _Sp, ranges::subrange_kind _Kp>
+struct tuple_element<0, const ranges::subrange<_Ip, _Sp, _Kp>> {
+ using type = _Ip;
+};
+
+template<class _Ip, class _Sp, ranges::subrange_kind _Kp>
+struct tuple_element<1, const ranges::subrange<_Ip, _Sp, _Kp>> {
+ using type = _Sp;
+};
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_SUBRANGE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/take_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/take_view.h
new file mode 100644
index 0000000000..0b0f9c3744
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/take_view.h
@@ -0,0 +1,185 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_TAKE_VIEW_H
+#define _LIBCPP___RANGES_TAKE_VIEW_H
+
+#include <__algorithm/min.h>
+#include <__config>
+#include <__iterator/concepts.h>
+#include <__iterator/counted_iterator.h>
+#include <__iterator/default_sentinel.h>
+#include <__iterator/iterator_traits.h>
+#include <__ranges/access.h>
+#include <__ranges/all.h>
+#include <__ranges/concepts.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/size.h>
+#include <__ranges/view_interface.h>
+#include <__utility/move.h>
+#include <concepts>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+ template<view _View>
+ class take_view : public view_interface<take_view<_View>> {
+ _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
+ range_difference_t<_View> __count_ = 0;
+
+ template<bool> class __sentinel;
+
+ public:
+ _LIBCPP_HIDE_FROM_ABI
+ take_view() requires default_initializable<_View> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr take_view(_View __base, range_difference_t<_View> __count)
+ : __base_(std::move(__base)), __count_(__count) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() const& requires copy_constructible<_View> { return __base_; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() && { return std::move(__base_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin() requires (!__simple_view<_View>) {
+ if constexpr (sized_range<_View>) {
+ if constexpr (random_access_range<_View>) {
+ return ranges::begin(__base_);
+ } else {
+ using _DifferenceT = range_difference_t<_View>;
+ auto __size = size();
+ return counted_iterator(ranges::begin(__base_), static_cast<_DifferenceT>(__size));
+ }
+ } else {
+ return counted_iterator(ranges::begin(__base_), __count_);
+ }
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto begin() const requires range<const _View> {
+ if constexpr (sized_range<const _View>) {
+ if constexpr (random_access_range<const _View>) {
+ return ranges::begin(__base_);
+ } else {
+ using _DifferenceT = range_difference_t<const _View>;
+ auto __size = size();
+ return counted_iterator(ranges::begin(__base_), static_cast<_DifferenceT>(__size));
+ }
+ } else {
+ return counted_iterator(ranges::begin(__base_), __count_);
+ }
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() requires (!__simple_view<_View>) {
+ if constexpr (sized_range<_View>) {
+ if constexpr (random_access_range<_View>) {
+ return ranges::begin(__base_) + size();
+ } else {
+ return default_sentinel;
+ }
+ } else {
+ return __sentinel<false>{ranges::end(__base_)};
+ }
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto end() const requires range<const _View> {
+ if constexpr (sized_range<const _View>) {
+ if constexpr (random_access_range<const _View>) {
+ return ranges::begin(__base_) + size();
+ } else {
+ return default_sentinel;
+ }
+ } else {
+ return __sentinel<true>{ranges::end(__base_)};
+ }
+ }
+
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() requires sized_range<_View> {
+ auto __n = ranges::size(__base_);
+ // TODO: use ranges::min here.
+ return std::min(__n, static_cast<decltype(__n)>(__count_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() const requires sized_range<const _View> {
+ auto __n = ranges::size(__base_);
+ // TODO: use ranges::min here.
+ return std::min(__n, static_cast<decltype(__n)>(__count_));
+ }
+ };
+
+ template<view _View>
+ template<bool _Const>
+ class take_view<_View>::__sentinel {
+ using _Base = __maybe_const<_Const, _View>;
+ template<bool _OtherConst>
+ using _Iter = counted_iterator<iterator_t<__maybe_const<_OtherConst, _View>>>;
+ _LIBCPP_NO_UNIQUE_ADDRESS sentinel_t<_Base> __end_ = sentinel_t<_Base>();
+
+ template<bool>
+ friend class take_view<_View>::__sentinel;
+
+public:
+ _LIBCPP_HIDE_FROM_ABI
+ __sentinel() = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit __sentinel(sentinel_t<_Base> __end) : __end_(std::move(__end)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __sentinel(__sentinel<!_Const> __s)
+ requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
+ : __end_(std::move(__s.__end_)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr sentinel_t<_Base> base() const { return __end_; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator==(const _Iter<_Const>& __lhs, const __sentinel& __rhs) {
+ return __lhs.count() == 0 || __lhs.base() == __rhs.__end_;
+ }
+
+ template<bool _OtherConst = !_Const>
+ requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator==(const _Iter<_Const>& __lhs, const __sentinel& __rhs) {
+ return __lhs.count() == 0 || __lhs.base() == __rhs.__end_;
+ }
+ };
+
+ template<class _Range>
+ take_view(_Range&&, range_difference_t<_Range>) -> take_view<views::all_t<_Range>>;
+
+ template<class _Tp>
+ inline constexpr bool enable_borrowed_range<take_view<_Tp>> = enable_borrowed_range<_Tp>;
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+_LIBCPP_POP_MACROS
+
+#endif // _LIBCPP___RANGES_TAKE_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/transform_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/transform_view.h
new file mode 100644
index 0000000000..42ea1b82c7
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/transform_view.h
@@ -0,0 +1,440 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_TRANSFORM_VIEW_H
+#define _LIBCPP___RANGES_TRANSFORM_VIEW_H
+
+#include <__compare/three_way_comparable.h>
+#include <__concepts/constructible.h>
+#include <__concepts/convertible_to.h>
+#include <__concepts/copyable.h>
+#include <__concepts/derived_from.h>
+#include <__concepts/equality_comparable.h>
+#include <__concepts/invocable.h>
+#include <__config>
+#include <__functional/bind_back.h>
+#include <__functional/invoke.h>
+#include <__iterator/concepts.h>
+#include <__iterator/iterator_traits.h>
+#include <__memory/addressof.h>
+#include <__ranges/access.h>
+#include <__ranges/all.h>
+#include <__ranges/concepts.h>
+#include <__ranges/copyable_box.h>
+#include <__ranges/empty.h>
+#include <__ranges/range_adaptor.h>
+#include <__ranges/size.h>
+#include <__ranges/view_interface.h>
+#include <__utility/forward.h>
+#include <__utility/in_place.h>
+#include <__utility/move.h>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+
+template<class _Fn, class _View>
+concept __regular_invocable_with_range_ref =
+ regular_invocable<_Fn, range_reference_t<_View>>;
+
+template<class _View, class _Fn>
+concept __transform_view_constraints =
+ view<_View> && is_object_v<_Fn> &&
+ regular_invocable<_Fn&, range_reference_t<_View>> &&
+ __can_reference<invoke_result_t<_Fn&, range_reference_t<_View>>>;
+
+template<input_range _View, copy_constructible _Fn>
+ requires __transform_view_constraints<_View, _Fn>
+class transform_view : public view_interface<transform_view<_View, _Fn>> {
+ template<bool> class __iterator;
+ template<bool> class __sentinel;
+
+ _LIBCPP_NO_UNIQUE_ADDRESS __copyable_box<_Fn> __func_;
+ _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
+
+public:
+ _LIBCPP_HIDE_FROM_ABI
+ transform_view()
+ requires default_initializable<_View> && default_initializable<_Fn> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr transform_view(_View __base, _Fn __func)
+ : __func_(std::in_place, std::move(__func)), __base_(std::move(__base)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() const& requires copy_constructible<_View> { return __base_; }
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _View base() && { return std::move(__base_); }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator<false> begin() {
+ return __iterator<false>{*this, ranges::begin(__base_)};
+ }
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator<true> begin() const
+ requires range<const _View> &&
+ __regular_invocable_with_range_ref<const _Fn&, const _View>
+ {
+ return __iterator<true>(*this, ranges::begin(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __sentinel<false> end() {
+ return __sentinel<false>(ranges::end(__base_));
+ }
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator<false> end()
+ requires common_range<_View>
+ {
+ return __iterator<false>(*this, ranges::end(__base_));
+ }
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __sentinel<true> end() const
+ requires range<const _View> &&
+ __regular_invocable_with_range_ref<const _Fn&, const _View>
+ {
+ return __sentinel<true>(ranges::end(__base_));
+ }
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator<true> end() const
+ requires common_range<const _View> &&
+ __regular_invocable_with_range_ref<const _Fn&, const _View>
+ {
+ return __iterator<true>(*this, ranges::end(__base_));
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() requires sized_range<_View> { return ranges::size(__base_); }
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() const requires sized_range<const _View> { return ranges::size(__base_); }
+};
+
+template<class _Range, class _Fn>
+transform_view(_Range&&, _Fn) -> transform_view<views::all_t<_Range>, _Fn>;
+
+template<class _View>
+struct __transform_view_iterator_concept { using type = input_iterator_tag; };
+
+template<random_access_range _View>
+struct __transform_view_iterator_concept<_View> { using type = random_access_iterator_tag; };
+
+template<bidirectional_range _View>
+struct __transform_view_iterator_concept<_View> { using type = bidirectional_iterator_tag; };
+
+template<forward_range _View>
+struct __transform_view_iterator_concept<_View> { using type = forward_iterator_tag; };
+
+template<class, class>
+struct __transform_view_iterator_category_base {};
+
+template<forward_range _View, class _Fn>
+struct __transform_view_iterator_category_base<_View, _Fn> {
+ using _Cat = typename iterator_traits<iterator_t<_View>>::iterator_category;
+
+ using iterator_category = conditional_t<
+ is_lvalue_reference_v<invoke_result_t<_Fn&, range_reference_t<_View>>>,
+ conditional_t<
+ derived_from<_Cat, contiguous_iterator_tag>,
+ random_access_iterator_tag,
+ _Cat
+ >,
+ input_iterator_tag
+ >;
+};
+
+template<input_range _View, copy_constructible _Fn>
+ requires __transform_view_constraints<_View, _Fn>
+template<bool _Const>
+class transform_view<_View, _Fn>::__iterator
+ : public __transform_view_iterator_category_base<_View, _Fn> {
+
+ using _Parent = __maybe_const<_Const, transform_view>;
+ using _Base = __maybe_const<_Const, _View>;
+
+ _Parent *__parent_ = nullptr;
+
+ template<bool>
+ friend class transform_view<_View, _Fn>::__iterator;
+
+ template<bool>
+ friend class transform_view<_View, _Fn>::__sentinel;
+
+public:
+ iterator_t<_Base> __current_ = iterator_t<_Base>();
+
+ using iterator_concept = typename __transform_view_iterator_concept<_View>::type;
+ using value_type = remove_cvref_t<invoke_result_t<_Fn&, range_reference_t<_Base>>>;
+ using difference_type = range_difference_t<_Base>;
+
+ _LIBCPP_HIDE_FROM_ABI
+ __iterator() requires default_initializable<iterator_t<_Base>> = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator(_Parent& __parent, iterator_t<_Base> __current)
+ : __parent_(std::addressof(__parent)), __current_(std::move(__current)) {}
+
+ // Note: `__i` should always be `__iterator<false>`, but directly using
+ // `__iterator<false>` is ill-formed when `_Const` is false
+ // (see http://wg21.link/class.copy.ctor#5).
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator(__iterator<!_Const> __i)
+ requires _Const && convertible_to<iterator_t<_View>, iterator_t<_Base>>
+ : __parent_(__i.__parent_), __current_(std::move(__i.__current_)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr const iterator_t<_Base>& base() const& noexcept {
+ return __current_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr iterator_t<_Base> base() && {
+ return std::move(__current_);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) operator*() const
+ noexcept(noexcept(std::invoke(*__parent_->__func_, *__current_)))
+ {
+ return std::invoke(*__parent_->__func_, *__current_);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator++() {
+ ++__current_;
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr void operator++(int) { ++__current_; }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator operator++(int)
+ requires forward_range<_Base>
+ {
+ auto __tmp = *this;
+ ++*this;
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator--()
+ requires bidirectional_range<_Base>
+ {
+ --__current_;
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator operator--(int)
+ requires bidirectional_range<_Base>
+ {
+ auto __tmp = *this;
+ --*this;
+ return __tmp;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator+=(difference_type __n)
+ requires random_access_range<_Base>
+ {
+ __current_ += __n;
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __iterator& operator-=(difference_type __n)
+ requires random_access_range<_Base>
+ {
+ __current_ -= __n;
+ return *this;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) operator[](difference_type __n) const
+ noexcept(noexcept(std::invoke(*__parent_->__func_, __current_[__n])))
+ requires random_access_range<_Base>
+ {
+ return std::invoke(*__parent_->__func_, __current_[__n]);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
+ requires equality_comparable<iterator_t<_Base>>
+ {
+ return __x.__current_ == __y.__current_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator<(const __iterator& __x, const __iterator& __y)
+ requires random_access_range<_Base>
+ {
+ return __x.__current_ < __y.__current_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator>(const __iterator& __x, const __iterator& __y)
+ requires random_access_range<_Base>
+ {
+ return __x.__current_ > __y.__current_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator<=(const __iterator& __x, const __iterator& __y)
+ requires random_access_range<_Base>
+ {
+ return __x.__current_ <= __y.__current_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator>=(const __iterator& __x, const __iterator& __y)
+ requires random_access_range<_Base>
+ {
+ return __x.__current_ >= __y.__current_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
+ requires random_access_range<_Base> && three_way_comparable<iterator_t<_Base>>
+ {
+ return __x.__current_ <=> __y.__current_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr __iterator operator+(__iterator __i, difference_type __n)
+ requires random_access_range<_Base>
+ {
+ return __iterator{*__i.__parent_, __i.__current_ + __n};
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr __iterator operator+(difference_type __n, __iterator __i)
+ requires random_access_range<_Base>
+ {
+ return __iterator{*__i.__parent_, __i.__current_ + __n};
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr __iterator operator-(__iterator __i, difference_type __n)
+ requires random_access_range<_Base>
+ {
+ return __iterator{*__i.__parent_, __i.__current_ - __n};
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr difference_type operator-(const __iterator& __x, const __iterator& __y)
+ requires sized_sentinel_for<iterator_t<_Base>, iterator_t<_Base>>
+ {
+ return __x.__current_ - __y.__current_;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr decltype(auto) iter_move(const __iterator& __i)
+ noexcept(noexcept(*__i))
+ {
+ if constexpr (is_lvalue_reference_v<decltype(*__i)>)
+ return std::move(*__i);
+ else
+ return *__i;
+ }
+};
+
+template<input_range _View, copy_constructible _Fn>
+ requires __transform_view_constraints<_View, _Fn>
+template<bool _Const>
+class transform_view<_View, _Fn>::__sentinel {
+ using _Parent = __maybe_const<_Const, transform_view>;
+ using _Base = __maybe_const<_Const, _View>;
+
+ sentinel_t<_Base> __end_ = sentinel_t<_Base>();
+
+ template<bool>
+ friend class transform_view<_View, _Fn>::__iterator;
+
+ template<bool>
+ friend class transform_view<_View, _Fn>::__sentinel;
+
+public:
+ _LIBCPP_HIDE_FROM_ABI
+ __sentinel() = default;
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit __sentinel(sentinel_t<_Base> __end) : __end_(__end) {}
+
+ // Note: `__i` should always be `__sentinel<false>`, but directly using
+ // `__sentinel<false>` is ill-formed when `_Const` is false
+ // (see http://wg21.link/class.copy.ctor#5).
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr __sentinel(__sentinel<!_Const> __i)
+ requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
+ : __end_(std::move(__i.__end_)) {}
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr sentinel_t<_Base> base() const { return __end_; }
+
+ template<bool _OtherConst>
+ requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
+ return __x.__current_ == __y.__end_;
+ }
+
+ template<bool _OtherConst>
+ requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr range_difference_t<__maybe_const<_OtherConst, _View>>
+ operator-(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
+ return __x.__current_ - __y.__end_;
+ }
+
+ template<bool _OtherConst>
+ requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
+ _LIBCPP_HIDE_FROM_ABI
+ friend constexpr range_difference_t<__maybe_const<_OtherConst, _View>>
+ operator-(const __sentinel& __x, const __iterator<_OtherConst>& __y) {
+ return __x.__end_ - __y.__current_;
+ }
+};
+
+namespace views {
+namespace __transform {
+ struct __fn {
+ template<class _Range, class _Fn>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Range&& __range, _Fn&& __f) const
+ noexcept(noexcept(transform_view(std::forward<_Range>(__range), std::forward<_Fn>(__f))))
+ -> decltype( transform_view(std::forward<_Range>(__range), std::forward<_Fn>(__f)))
+ { return transform_view(std::forward<_Range>(__range), std::forward<_Fn>(__f)); }
+
+ template<class _Fn>
+ requires constructible_from<decay_t<_Fn>, _Fn>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
+ constexpr auto operator()(_Fn&& __f) const
+ noexcept(is_nothrow_constructible_v<decay_t<_Fn>, _Fn>)
+ { return __range_adaptor_closure_t(std::__bind_back(*this, std::forward<_Fn>(__f))); }
+ };
+} // namespace __transform
+
+inline namespace __cpo {
+ inline constexpr auto transform = __transform::__fn{};
+} // namespace __cpo
+} // namespace views
+
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_TRANSFORM_VIEW_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h
new file mode 100644
index 0000000000..91ae4bde7d
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h
@@ -0,0 +1,195 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP___RANGES_VIEW_INTERFACE_H
+#define _LIBCPP___RANGES_VIEW_INTERFACE_H
+
+#include <__config>
+#include <__debug>
+#include <__iterator/concepts.h>
+#include <__iterator/iterator_traits.h>
+#include <__iterator/prev.h>
+#include <__memory/pointer_traits.h>
+#include <__ranges/access.h>
+#include <__ranges/concepts.h>
+#include <__ranges/empty.h>
+#include <concepts>
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+namespace ranges {
+
+template<class _Tp>
+concept __can_empty = requires(_Tp __t) { ranges::empty(__t); };
+
+template<class _Tp>
+void __implicitly_convert_to(type_identity_t<_Tp>) noexcept;
+
+template<class _Derived>
+ requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>>
+class view_interface {
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Derived& __derived() noexcept {
+ static_assert(sizeof(_Derived) && derived_from<_Derived, view_interface> && view<_Derived>);
+ return static_cast<_Derived&>(*this);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr _Derived const& __derived() const noexcept {
+ static_assert(sizeof(_Derived) && derived_from<_Derived, view_interface> && view<_Derived>);
+ return static_cast<_Derived const&>(*this);
+ }
+
+public:
+ template<class _D2 = _Derived>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty()
+ noexcept(noexcept(__implicitly_convert_to<bool>(ranges::begin(__derived()) == ranges::end(__derived()))))
+ requires forward_range<_D2>
+ {
+ return ranges::begin(__derived()) == ranges::end(__derived());
+ }
+
+ template<class _D2 = _Derived>
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const
+ noexcept(noexcept(__implicitly_convert_to<bool>(ranges::begin(__derived()) == ranges::end(__derived()))))
+ requires forward_range<const _D2>
+ {
+ return ranges::begin(__derived()) == ranges::end(__derived());
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit operator bool()
+ noexcept(noexcept(ranges::empty(declval<_D2>())))
+ requires __can_empty<_D2>
+ {
+ return !ranges::empty(__derived());
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr explicit operator bool() const
+ noexcept(noexcept(ranges::empty(declval<const _D2>())))
+ requires __can_empty<const _D2>
+ {
+ return !ranges::empty(__derived());
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto data()
+ noexcept(noexcept(std::to_address(ranges::begin(__derived()))))
+ requires contiguous_iterator<iterator_t<_D2>>
+ {
+ return std::to_address(ranges::begin(__derived()));
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto data() const
+ noexcept(noexcept(std::to_address(ranges::begin(__derived()))))
+ requires range<const _D2> && contiguous_iterator<iterator_t<const _D2>>
+ {
+ return std::to_address(ranges::begin(__derived()));
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size()
+ noexcept(noexcept(ranges::end(__derived()) - ranges::begin(__derived())))
+ requires forward_range<_D2>
+ && sized_sentinel_for<sentinel_t<_D2>, iterator_t<_D2>>
+ {
+ return ranges::end(__derived()) - ranges::begin(__derived());
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr auto size() const
+ noexcept(noexcept(ranges::end(__derived()) - ranges::begin(__derived())))
+ requires forward_range<const _D2>
+ && sized_sentinel_for<sentinel_t<const _D2>, iterator_t<const _D2>>
+ {
+ return ranges::end(__derived()) - ranges::begin(__derived());
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) front()
+ noexcept(noexcept(*ranges::begin(__derived())))
+ requires forward_range<_D2>
+ {
+ _LIBCPP_ASSERT(!empty(),
+ "Precondition `!empty()` not satisfied. `.front()` called on an empty view.");
+ return *ranges::begin(__derived());
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) front() const
+ noexcept(noexcept(*ranges::begin(__derived())))
+ requires forward_range<const _D2>
+ {
+ _LIBCPP_ASSERT(!empty(),
+ "Precondition `!empty()` not satisfied. `.front()` called on an empty view.");
+ return *ranges::begin(__derived());
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) back()
+ noexcept(noexcept(*ranges::prev(ranges::end(__derived()))))
+ requires bidirectional_range<_D2> && common_range<_D2>
+ {
+ _LIBCPP_ASSERT(!empty(),
+ "Precondition `!empty()` not satisfied. `.back()` called on an empty view.");
+ return *ranges::prev(ranges::end(__derived()));
+ }
+
+ template<class _D2 = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) back() const
+ noexcept(noexcept(*ranges::prev(ranges::end(__derived()))))
+ requires bidirectional_range<const _D2> && common_range<const _D2>
+ {
+ _LIBCPP_ASSERT(!empty(),
+ "Precondition `!empty()` not satisfied. `.back()` called on an empty view.");
+ return *ranges::prev(ranges::end(__derived()));
+ }
+
+ template<random_access_range _RARange = _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) operator[](range_difference_t<_RARange> __index)
+ noexcept(noexcept(ranges::begin(__derived())[__index]))
+ {
+ return ranges::begin(__derived())[__index];
+ }
+
+ template<random_access_range _RARange = const _Derived>
+ _LIBCPP_HIDE_FROM_ABI
+ constexpr decltype(auto) operator[](range_difference_t<_RARange> __index) const
+ noexcept(noexcept(ranges::begin(__derived())[__index]))
+ {
+ return ranges::begin(__derived())[__index];
+ }
+};
+
+} // namespace ranges
+
+#endif // !defined(_LIBCPP_HAS_NO_CONCEPTS)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_VIEW_INTERFACE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/views.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/views.h
new file mode 100644
index 0000000000..8cc5ba3d2a
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/views.h
@@ -0,0 +1,35 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___RANGES_VIEWS
+#define _LIBCPP___RANGES_VIEWS
+
+#include <__config>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
+
+namespace ranges {
+
+namespace views { }
+
+} // namespace ranges
+
+namespace views = ranges::views;
+
+#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___RANGES_VIEWS
diff --git a/contrib/libs/cxxsupp/libcxx/include/ranges b/contrib/libs/cxxsupp/libcxx/include/ranges
new file mode 100644
index 0000000000..2bc9121cd6
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/ranges
@@ -0,0 +1,275 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_RANGES
+#define _LIBCPP_RANGES
+
+/*
+
+#include <compare> // see [compare.syn]
+#include <initializer_list> // see [initializer.list.syn]
+#include <iterator> // see [iterator.synopsis]
+
+namespace std::ranges {
+ inline namespace unspecified {
+ // [range.access], range access
+ inline constexpr unspecified begin = unspecified;
+ inline constexpr unspecified end = unspecified;
+ inline constexpr unspecified cbegin = unspecified;
+ inline constexpr unspecified cend = unspecified;
+
+ inline constexpr unspecified size = unspecified;
+ inline constexpr unspecified ssize = unspecified;
+ }
+
+ // [range.range], ranges
+ template<class T>
+ concept range = see below;
+
+ template<class T>
+ inline constexpr bool enable_borrowed_range = false;
+
+ template<class T>
+ using iterator_t = decltype(ranges::begin(declval<T&>()));
+ template<range R>
+ using sentinel_t = decltype(ranges::end(declval<R&>()));
+ template<range R>
+ using range_difference_t = iter_difference_t<iterator_t<R>>;
+ template<sized_range R>
+ using range_size_t = decltype(ranges::size(declval<R&>()));
+ template<range R>
+ using range_value_t = iter_value_t<iterator_t<R>>;
+ template<range R>
+ using range_reference_t = iter_reference_t<iterator_t<R>>;
+ template<range R>
+ using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<R>>;
+
+ // [range.sized], sized ranges
+ template<class>
+ inline constexpr bool disable_sized_range = false;
+
+ template<class T>
+ concept sized_range = ...;
+
+ // [range.view], views
+ template<class T>
+ inline constexpr bool enable_view = ...;
+
+ struct view_base { };
+
+ template<class T>
+ concept view = ...;
+
+ // [range.refinements], other range refinements
+ template<class R, class T>
+ concept output_range = see below;
+
+ template<class T>
+ concept input_range = see below;
+
+ template<class T>
+ concept forward_range = see below;
+
+ template<class T>
+ concept bidirectional_range = see below;
+
+ template<class T>
+ concept random_access_range = see below;
+
+ template<class T>
+ concept contiguous_range = see below;
+
+ template <class _Tp>
+ concept common_range = see below;
+
+ template<class T>
+ concept viewable_range = see below;
+
+ // [view.interface], class template view_interface
+ template<class D>
+ requires is_class_v<D> && same_as<D, remove_cv_t<D>>
+ class view_interface;
+
+ // [range.subrange], sub-ranges
+ enum class subrange_kind : bool { unsized, sized };
+
+ template<input_or_output_iterator I, sentinel_for<I> S = I, subrange_kind K = see below>
+ requires (K == subrange_kind::sized || !sized_sentinel_for<S, I>)
+ class subrange;
+
+ template<class I, class S, subrange_kind K>
+ inline constexpr bool enable_borrowed_range<subrange<I, S, K>> = true;
+
+ // [range.dangling], dangling iterator handling
+ struct dangling;
+
+ template<range R>
+ using borrowed_iterator_t = see below;
+
+ template<range R>
+ using borrowed_subrange_t = see below;
+
+ // [range.empty], empty view
+ template<class T>
+ requires is_object_v<T>
+ class empty_view;
+
+ // [range.all], all view
+ namespace views {
+ inline constexpr unspecified all = unspecified;
+
+ template<viewable_range R>
+ using all_t = decltype(all(declval<R>()));
+ }
+
+ template<range R>
+ requires is_object_v<R>
+ class ref_view;
+
+ template<class T>
+ inline constexpr bool enable_borrowed_range<ref_view<T>> = true;
+
+ template<range R>
+ requires see below
+ class owning_view;
+
+ template<class T>
+ inline constexpr bool enable_borrowed_range<owning_view<T>> = enable_borrowed_range<T>;
+
+ // [range.drop], drop view
+ template<view V>
+ class drop_view;
+
+ template<class T>
+ inline constexpr bool enable_borrowed_range<drop_view<T>> = enable_borrowed_range<T>;
+
+ // [range.transform], transform view
+ template<input_range V, copy_constructible F>
+ requires view<V> && is_object_v<F> &&
+ regular_invocable<F&, range_reference_t<V>> &&
+ can-reference<invoke_result_t<F&, range_reference_t<V>>>
+ class transform_view;
+
+ // [range.counted], counted view
+ namespace views { inline constexpr unspecified counted = unspecified; }
+
+ // [range.common], common view
+ template<view V>
+ requires (!common_range<V> && copyable<iterator_t<V>>)
+ class common_view;
+
+ // [range.reverse], reverse view
+ template<view V>
+ requires bidirectional_range<V>
+ class reverse_view;
+
+ template<class T>
+ inline constexpr bool enable_borrowed_range<reverse_view<T>> = enable_borrowed_range<T>;
+
+ template<class T>
+ inline constexpr bool enable_borrowed_range<common_view<T>> = enable_borrowed_range<T>;
+
+ // [range.take], take view
+ template<view> class take_view;
+
+ template<class T>
+ inline constexpr bool enable_borrowed_range<take_view<T>> = enable_borrowed_range<T>;
+
+ template<copy_constructible T>
+ requires is_object_v<T>
+ class single_view;
+
+ template<weakly_incrementable W, semiregular Bound = unreachable_sentinel_t>
+ requires weakly-equality-comparable-with<W, Bound> && copyable<W>
+ class iota_view;
+
+ template<class W, class Bound>
+ inline constexpr bool enable_borrowed_range<iota_view<W, Bound>> = true;
+
+ // [range.join], join view
+ template<input_range V>
+ requires view<V> && input_range<range_reference_t<V>>
+ class join_view;
+}
+
+namespace std {
+ namespace views = ranges::views;
+
+ template<class T> struct tuple_size;
+ template<size_t I, class T> struct tuple_element;
+
+ template<class I, class S, ranges::subrange_kind K>
+ struct tuple_size<ranges::subrange<I, S, K>>
+ : integral_constant<size_t, 2> {};
+
+ template<class I, class S, ranges::subrange_kind K>
+ struct tuple_element<0, ranges::subrange<I, S, K>> {
+ using type = I;
+ };
+
+ template<class I, class S, ranges::subrange_kind K>
+ struct tuple_element<1, ranges::subrange<I, S, K>> {
+ using type = S;
+ };
+
+ template<class I, class S, ranges::subrange_kind K>
+ struct tuple_element<0, const ranges::subrange<I, S, K>> {
+ using type = I;
+ };
+
+ template<class I, class S, ranges::subrange_kind K>
+ struct tuple_element<1, const ranges::subrange<I, S, K>> {
+ using type = S;
+ };
+}
+*/
+
+// Make sure all feature-test macros are available.
+#include <version>
+// Enable the contents of the header only when libc++ was built with LIBCXX_ENABLE_INCOMPLETE_FEATURES.
+#if !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
+
+#include <__config>
+#include <__ranges/access.h>
+#include <__ranges/all.h>
+#include <__ranges/common_view.h>
+#include <__ranges/concepts.h>
+#include <__ranges/counted.h>
+#include <__ranges/dangling.h>
+#include <__ranges/data.h>
+#include <__ranges/drop_view.h>
+#include <__ranges/empty.h>
+#include <__ranges/empty_view.h>
+#include <__ranges/enable_borrowed_range.h>
+#include <__ranges/enable_view.h>
+#include <__ranges/iota_view.h>
+#include <__ranges/join_view.h>
+#include <__ranges/rbegin.h>
+#include <__ranges/ref_view.h>
+#include <__ranges/rend.h>
+#include <__ranges/reverse_view.h>
+#include <__ranges/single_view.h>
+#include <__ranges/size.h>
+#include <__ranges/subrange.h>
+#include <__ranges/take_view.h>
+#include <__ranges/transform_view.h>
+#include <__ranges/view_interface.h>
+#include <__ranges/views.h>
+#include <compare> // Required by the standard.
+#include <initializer_list> // Required by the standard.
+#include <iterator> // Required by the standard.
+#include <type_traits>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+#endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_RANGES)
+
+#endif // _LIBCPP_RANGES
diff --git a/contrib/libs/expat/CMakeLists.txt b/contrib/libs/expat/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/expat/CMakeLists.txt
+++ b/contrib/libs/expat/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/farmhash/CMakeLists.txt b/contrib/libs/farmhash/CMakeLists.txt
index 948de22915..28ba97595e 100644
--- a/contrib/libs/farmhash/CMakeLists.txt
+++ b/contrib/libs/farmhash/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(arch)
add_library(contrib-libs-farmhash)
target_compile_options(contrib-libs-farmhash PRIVATE
diff --git a/contrib/libs/farmhash/arch/CMakeLists.txt b/contrib/libs/farmhash/arch/CMakeLists.txt
new file mode 100644
index 0000000000..8a05f09d4b
--- /dev/null
+++ b/contrib/libs/farmhash/arch/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(sse41)
+add_subdirectory(sse42)
+add_subdirectory(sse42_aesni)
diff --git a/contrib/libs/grpc/CMakeLists.txt b/contrib/libs/grpc/CMakeLists.txt
index b53da127bc..4f25d8832f 100644
--- a/contrib/libs/grpc/CMakeLists.txt
+++ b/contrib/libs/grpc/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(grpc)
+add_subdirectory(grpc++)
+add_subdirectory(src)
+add_subdirectory(third_party)
add_library(contrib-libs-grpc INTERFACE)
target_link_libraries(contrib-libs-grpc INTERFACE
diff --git a/contrib/libs/grpc/src/CMakeLists.txt b/contrib/libs/grpc/src/CMakeLists.txt
new file mode 100644
index 0000000000..e78afa34c8
--- /dev/null
+++ b/contrib/libs/grpc/src/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(compiler)
+add_subdirectory(core)
diff --git a/contrib/libs/grpc/src/compiler/CMakeLists.txt b/contrib/libs/grpc/src/compiler/CMakeLists.txt
new file mode 100644
index 0000000000..0a445ac050
--- /dev/null
+++ b/contrib/libs/grpc/src/compiler/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(grpc_plugin_support)
diff --git a/contrib/libs/grpc/src/core/CMakeLists.txt b/contrib/libs/grpc/src/core/CMakeLists.txt
new file mode 100644
index 0000000000..0396db380f
--- /dev/null
+++ b/contrib/libs/grpc/src/core/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(lib)
diff --git a/contrib/libs/grpc/third_party/CMakeLists.txt b/contrib/libs/grpc/third_party/CMakeLists.txt
new file mode 100644
index 0000000000..450719d3ba
--- /dev/null
+++ b/contrib/libs/grpc/third_party/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(address_sorting)
+add_subdirectory(upb)
diff --git a/contrib/libs/highwayhash/CMakeLists.txt b/contrib/libs/highwayhash/CMakeLists.txt
index 52a595a707..b8b5c58b9f 100644
--- a/contrib/libs/highwayhash/CMakeLists.txt
+++ b/contrib/libs/highwayhash/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(arch)
add_library(contrib-libs-highwayhash)
target_compile_options(contrib-libs-highwayhash PRIVATE
diff --git a/contrib/libs/highwayhash/arch/CMakeLists.txt b/contrib/libs/highwayhash/arch/CMakeLists.txt
new file mode 100644
index 0000000000..fc6e7a4a0e
--- /dev/null
+++ b/contrib/libs/highwayhash/arch/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(avx2)
+add_subdirectory(sse41)
diff --git a/contrib/libs/hyperscan/CMakeLists.txt b/contrib/libs/hyperscan/CMakeLists.txt
index a7a2cc5e5a..ce01188f26 100644
--- a/contrib/libs/hyperscan/CMakeLists.txt
+++ b/contrib/libs/hyperscan/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(runtime_avx2)
+add_subdirectory(runtime_avx512)
+add_subdirectory(runtime_core2)
+add_subdirectory(runtime_corei7)
add_library(contrib-libs-hyperscan)
target_compile_options(contrib-libs-hyperscan PRIVATE
diff --git a/contrib/libs/icu/CMakeLists.txt b/contrib/libs/icu/CMakeLists.txt
new file mode 100644
index 0000000000..e637671c46
--- /dev/null
+++ b/contrib/libs/icu/CMakeLists.txt
@@ -0,0 +1,475 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(contrib-libs-icu)
+target_compile_options(contrib-libs-icu PRIVATE
+ -DU_COMMON_IMPLEMENTATION
+ -DU_I18N_IMPLEMENTATION
+ -DU_IO_IMPLEMENTATION
+ -DU_STATIC_IMPLEMENTATION
+ -std=c++17
+)
+target_include_directories(contrib-libs-icu PUBLIC
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/include
+)
+target_include_directories(contrib-libs-icu PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io
+)
+target_link_libraries(contrib-libs-icu PUBLIC
+ contrib-libs-cxxsupp
+)
+target_sources(contrib-libs-icu PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/appendable.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/bmpset.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/brkeng.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/brkiter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/bytesinkutil.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/bytestream.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/bytestrie.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/bytestriebuilder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/bytestrieiterator.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/caniter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/characterproperties.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/chariter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/charstr.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/cmemory.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/cstr.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/cstring.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/cwchar.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/dictbe.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/dictionarydata.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/dtintrv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/edits.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/errorcode.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/filteredbrk.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/filterednormalizer2.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/icudataver.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/icuplug.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/loadednormalizer2impl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/localebuilder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/localematcher.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/localeprioritylist.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locavailable.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locbased.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locdispnames.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locdistance.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locdspnm.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locid.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/loclikely.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/loclikelysubtags.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locmap.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locresdata.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/locutil.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/lsr.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/messagepattern.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/normalizer2.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/normalizer2impl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/normlzr.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/parsepos.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/patternprops.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/pluralmap.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/propname.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/propsvec.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/punycode.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/putil.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbi.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbi_cache.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbidata.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbinode.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbirb.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbiscan.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbisetb.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbistbl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/rbbitblb.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/resbund.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/resbund_cnv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/resource.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/restrace.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ruleiter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/schriter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/serv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/servlk.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/servlkf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/servls.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/servnotf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/servrbf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/servslkf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/sharedobject.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/simpleformatter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/static_unicode_sets.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/stringpiece.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/stringtriebuilder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uarrsort.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ubidi.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ubidi_props.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ubidiln.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ubiditransform.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ubidiwrt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ubrk.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucase.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucasemap.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucasemap_titlecase_brkiter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucat.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uchar.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucharstrie.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucharstriebuilder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucharstrieiterator.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uchriter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucln_cmn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucmndata.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv2022.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_bld.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_cb.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_cnv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_ct.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_err.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_ext.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_io.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_lmb.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_set.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_u16.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_u32.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_u7.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnv_u8.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnvbocu.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnvdisp.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnvhz.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnvisci.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnvlat1.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnvmbcs.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnvscsu.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucnvsel.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucol_swp.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucptrie.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ucurr.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/udata.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/udatamem.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/udataswp.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uenum.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uhash.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uhash_us.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uidna.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uinit.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uinvchar.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uiter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ulist.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uloc.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uloc_keytype.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uloc_tag.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/umapfile.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/umath.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/umutablecptrie.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/umutex.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unames.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unifiedcache.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unifilt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unifunct.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uniset.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uniset_closure.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uniset_props.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unisetspan.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unistr.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unistr_case.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unistr_case_locale.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unistr_cnv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unistr_props.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unistr_titlecase_brkiter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unorm.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/unormcmp.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uobject.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uprops.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ures_cnv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uresbund.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uresdata.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/usc_impl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uscript.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uscript_props.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uset.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uset_props.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/usetiter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ushape.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/usprep.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustack.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustr_cnv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustr_titlecase_brkiter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustr_wcs.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustrcase.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustrcase_locale.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustrenum.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustrfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustring.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/ustrtrns.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/utext.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/utf_impl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/util.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/util_props.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/utrace.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/utrie.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/utrie2.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/utrie2_builder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/utrie_swap.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uts46.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/utypes.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uvector.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uvectr32.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/uvectr64.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/common/wintz.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/alphaindex.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/anytrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/astro.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/basictz.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/bocsu.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/brktrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/buddhcal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/calendar.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/casetrn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/cecal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/chnsecal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/choicfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/coleitr.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/coll.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collation.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationbuilder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationcompare.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationdata.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationdatabuilder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationdatareader.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationdatawriter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationfastlatin.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationfastlatinbuilder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationfcd.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationiterator.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationkeys.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationroot.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationrootelements.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationruleparser.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationsets.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationsettings.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationtailoring.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/collationweights.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/compactdecimalformat.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/coptccal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/cpdtrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/csdetect.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/csmatch.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/csr2022.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/csrecog.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/csrmbcs.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/csrsbcs.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/csrucode.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/csrutf8.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/curramt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/currfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/currpinf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/currunit.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/dangical.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/datefmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/dayperiodrules.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/dcfmtsym.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/decContext.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/decNumber.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/decimfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/double-conversion-bignum-dtoa.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/double-conversion-bignum.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/double-conversion-cached-powers.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/double-conversion-double-to-string.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/double-conversion-fast-dtoa.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/double-conversion-string-to-double.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/double-conversion-strtod.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/dtfmtsym.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/dtitvfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/dtitvinf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/dtptngen.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/dtrule.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/erarules.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/esctrn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ethpccal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/fmtable.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/fmtable_cnv.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/format.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/formatted_string_builder.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/formattedval_iterimpl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/formattedval_sbimpl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/formattedvalue.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/fphdlimp.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/fpositer.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/funcrepl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/gender.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/gregocal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/gregoimp.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/hebrwcal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/indiancal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/inputext.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/islamcal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/japancal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/listformatter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/measfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/measunit.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/measunit_extra.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/measure.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/msgfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/name2uni.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/nfrs.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/nfrule.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/nfsubs.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/nortrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/nounit.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/nultrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_affixutils.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_asformat.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_capi.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_compact.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_currencysymbols.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_decimalquantity.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_decimfmtprops.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_fluent.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_formatimpl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_grouping.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_integerwidth.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_longnames.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_mapper.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_modifiers.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_multiplier.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_notation.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_output.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_padding.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_patternmodifier.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_patternstring.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_rounding.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_scientific.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_skeletons.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/number_utils.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_affixes.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_compositions.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_currency.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_decimal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_impl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_parsednumber.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_scientific.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_symbols.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numparse_validators.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numrange_fluent.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numrange_impl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/numsys.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/olsontz.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/persncal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/plurfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/plurrule.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/quant.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/quantityformatter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rbnf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rbt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rbt_data.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rbt_pars.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rbt_rule.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rbt_set.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rbtz.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/regexcmp.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/regeximp.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/regexst.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/regextxt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/region.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/reldatefmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/reldtfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rematch.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/remtrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/repattrn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/rulebasedcollator.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/scientificnumberformatter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/scriptset.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/search.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/selfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/sharedbreakiterator.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/simpletz.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/smpdtfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/smpdtfst.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/sortkey.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/standardplural.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/string_segment.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/strmatch.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/strrepl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/stsearch.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/taiwncal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/timezone.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/titletrn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tmunit.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tmutamt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tmutfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tolowtrn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/toupptrn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/translit.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/transreg.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tridpars.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tzfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tzgnames.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tznames.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tznames_impl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tzrule.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/tztrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ucal.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ucln_in.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ucol.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ucol_res.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ucol_sit.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ucoleitr.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ucsdet.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/udat.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/udateintervalformat.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/udatpg.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ufieldpositer.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uitercollationiterator.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ulistformatter.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ulocdata.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/umsg.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/unesctrn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uni2name.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/unum.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/unumsys.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/upluralrules.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uregex.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uregexc.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uregion.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/usearch.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uspoof.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uspoof_build.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uspoof_conf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/uspoof_impl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/utf16collationiterator.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/utf8collationiterator.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/utmscale.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/utrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/vtzone.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/vzone.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/windtfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/winnmfmt.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/wintzimpl.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/zonemeta.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/zrule.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/i18n/ztrans.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/locbund.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/sprintf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/sscanf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/ucln_io.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/ufile.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/ufmt_cmn.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/uprintf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/uprntf_p.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/uscanf.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/uscanf_p.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/ustdio.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/io/ustream.cpp
+)
+target_rodata_sources(contrib-libs-icu
+ PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/icu/icudt67_dat.rodata
+)
diff --git a/contrib/libs/jemalloc/CMakeLists.txt b/contrib/libs/jemalloc/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/jemalloc/CMakeLists.txt
+++ b/contrib/libs/jemalloc/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/libc_compat/CMakeLists.txt b/contrib/libs/libc_compat/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/libc_compat/CMakeLists.txt
+++ b/contrib/libs/libc_compat/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/libevent/CMakeLists.txt b/contrib/libs/libevent/CMakeLists.txt
index 8f682d4097..1090ce426d 100644
--- a/contrib/libs/libevent/CMakeLists.txt
+++ b/contrib/libs/libevent/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(event_core)
+add_subdirectory(event_extra)
+add_subdirectory(event_openssl)
+add_subdirectory(event_thread)
add_library(contrib-libs-libevent INTERFACE)
target_include_directories(contrib-libs-libevent INTERFACE
diff --git a/contrib/libs/libevent/event_core/CMakeLists.txt b/contrib/libs/libevent/event_core/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/libevent/event_core/CMakeLists.txt
+++ b/contrib/libs/libevent/event_core/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/libunwind/CMakeLists.txt b/contrib/libs/libunwind/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/libunwind/CMakeLists.txt
+++ b/contrib/libs/libunwind/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/linuxvdso/CMakeLists.linux.txt b/contrib/libs/linuxvdso/CMakeLists.linux.txt
index 1a9a6ed70c..c9d397538d 100644
--- a/contrib/libs/linuxvdso/CMakeLists.linux.txt
+++ b/contrib/libs/linuxvdso/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(original)
add_library(contrib-libs-linuxvdso)
target_link_libraries(contrib-libs-linuxvdso PUBLIC
diff --git a/contrib/libs/linuxvdso/CMakeLists.txt b/contrib/libs/linuxvdso/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/linuxvdso/CMakeLists.txt
+++ b/contrib/libs/linuxvdso/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/linuxvdso/original/CMakeLists.txt b/contrib/libs/linuxvdso/original/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/linuxvdso/original/CMakeLists.txt
+++ b/contrib/libs/linuxvdso/original/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/llvm12/CMakeLists.txt b/contrib/libs/llvm12/CMakeLists.txt
index e664110afd..ee668ea149 100644
--- a/contrib/libs/llvm12/CMakeLists.txt
+++ b/contrib/libs/llvm12/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(include)
+add_subdirectory(lib)
+add_subdirectory(utils)
add_library(contrib-libs-llvm12 INTERFACE)
target_include_directories(contrib-libs-llvm12 INTERFACE
diff --git a/contrib/libs/llvm12/include/epilogue.cmake b/contrib/libs/llvm12/include/epilogue.cmake
deleted file mode 100644
index a35e76c107..0000000000
--- a/contrib/libs/llvm12/include/epilogue.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-add_custom_target(OpenMP-gen-srcs-stealing
- DEPENDS ${CMAKE_BINARY_DIR}/contrib/libs/llvm12/lib/Frontend/OpenMP/OMP.cpp
-)
diff --git a/contrib/libs/llvm12/lib/Bitcode/CMakeLists.txt b/contrib/libs/llvm12/lib/Bitcode/CMakeLists.txt
new file mode 100644
index 0000000000..2c4b89cdf6
--- /dev/null
+++ b/contrib/libs/llvm12/lib/Bitcode/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(Reader)
+add_subdirectory(Writer)
diff --git a/contrib/libs/llvm12/lib/Bitstream/CMakeLists.txt b/contrib/libs/llvm12/lib/Bitstream/CMakeLists.txt
new file mode 100644
index 0000000000..cd07ec46be
--- /dev/null
+++ b/contrib/libs/llvm12/lib/Bitstream/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(Reader)
diff --git a/contrib/libs/llvm12/lib/CMakeLists.txt b/contrib/libs/llvm12/lib/CMakeLists.txt
new file mode 100644
index 0000000000..7eb0a3dec9
--- /dev/null
+++ b/contrib/libs/llvm12/lib/CMakeLists.txt
@@ -0,0 +1,30 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(Analysis)
+add_subdirectory(AsmParser)
+add_subdirectory(BinaryFormat)
+add_subdirectory(Bitcode)
+add_subdirectory(Bitstream)
+add_subdirectory(CodeGen)
+add_subdirectory(DebugInfo)
+add_subdirectory(Demangle)
+add_subdirectory(ExecutionEngine)
+add_subdirectory(Frontend)
+add_subdirectory(IR)
+add_subdirectory(IRReader)
+add_subdirectory(Linker)
+add_subdirectory(MC)
+add_subdirectory(Object)
+add_subdirectory(ProfileData)
+add_subdirectory(Remarks)
+add_subdirectory(Support)
+add_subdirectory(TableGen)
+add_subdirectory(Target)
+add_subdirectory(TextAPI)
+add_subdirectory(Transforms)
diff --git a/contrib/libs/llvm12/lib/CodeGen/CMakeLists.txt b/contrib/libs/llvm12/lib/CodeGen/CMakeLists.txt
index e9be0827ee..1fa45f425d 100644
--- a/contrib/libs/llvm12/lib/CodeGen/CMakeLists.txt
+++ b/contrib/libs/llvm12/lib/CodeGen/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(AsmPrinter)
+add_subdirectory(GlobalISel)
+add_subdirectory(SelectionDAG)
add_library(llvm12-lib-CodeGen)
target_compile_options(llvm12-lib-CodeGen PRIVATE
diff --git a/contrib/libs/llvm12/lib/DebugInfo/CMakeLists.txt b/contrib/libs/llvm12/lib/DebugInfo/CMakeLists.txt
new file mode 100644
index 0000000000..865d0ebbff
--- /dev/null
+++ b/contrib/libs/llvm12/lib/DebugInfo/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(CodeView)
+add_subdirectory(DWARF)
+add_subdirectory(MSF)
+add_subdirectory(PDB)
+add_subdirectory(Symbolize)
diff --git a/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.darwin.txt b/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..40aae59a90
--- /dev/null
+++ b/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.darwin.txt
@@ -0,0 +1,36 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(MCJIT)
+add_subdirectory(RuntimeDyld)
+
+add_library(llvm12-lib-ExecutionEngine)
+target_compile_options(llvm12-lib-ExecutionEngine PRIVATE
+ -Wno-everything
+)
+target_include_directories(llvm12-lib-ExecutionEngine PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine
+)
+target_link_libraries(llvm12-lib-ExecutionEngine PUBLIC
+ contrib-libs-cxxsupp
+ contrib-libs-llvm12
+ libs-llvm12-include
+ lib-ExecutionEngine-RuntimeDyld
+ llvm12-lib-IR
+ llvm12-lib-MC
+ llvm12-lib-Object
+ llvm12-lib-Support
+ llvm12-lib-Target
+)
+target_sources(llvm12-lib-ExecutionEngine PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/ExecutionEngine.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/ExecutionEngineBindings.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/GDBRegistrationListener.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/SectionMemoryManager.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/TargetSelect.cpp
+)
diff --git a/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.linux.txt b/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.linux.txt
new file mode 100644
index 0000000000..74965dc236
--- /dev/null
+++ b/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.linux.txt
@@ -0,0 +1,37 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(MCJIT)
+add_subdirectory(PerfJITEvents)
+add_subdirectory(RuntimeDyld)
+
+add_library(llvm12-lib-ExecutionEngine)
+target_compile_options(llvm12-lib-ExecutionEngine PRIVATE
+ -Wno-everything
+)
+target_include_directories(llvm12-lib-ExecutionEngine PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine
+)
+target_link_libraries(llvm12-lib-ExecutionEngine PUBLIC
+ contrib-libs-cxxsupp
+ contrib-libs-llvm12
+ libs-llvm12-include
+ lib-ExecutionEngine-RuntimeDyld
+ llvm12-lib-IR
+ llvm12-lib-MC
+ llvm12-lib-Object
+ llvm12-lib-Support
+ llvm12-lib-Target
+)
+target_sources(llvm12-lib-ExecutionEngine PRIVATE
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/ExecutionEngine.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/ExecutionEngineBindings.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/GDBRegistrationListener.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/SectionMemoryManager.cpp
+ ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/TargetSelect.cpp
+)
diff --git a/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.txt b/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.txt
index e26a6ef664..dbfe6fa2c4 100644
--- a/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.txt
+++ b/contrib/libs/llvm12/lib/ExecutionEngine/CMakeLists.txt
@@ -6,29 +6,8 @@
# original buildsystem will not be accepted.
-
-add_library(llvm12-lib-ExecutionEngine)
-target_compile_options(llvm12-lib-ExecutionEngine PRIVATE
- -Wno-everything
-)
-target_include_directories(llvm12-lib-ExecutionEngine PRIVATE
- ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine
-)
-target_link_libraries(llvm12-lib-ExecutionEngine PUBLIC
- contrib-libs-cxxsupp
- contrib-libs-llvm12
- libs-llvm12-include
- lib-ExecutionEngine-RuntimeDyld
- llvm12-lib-IR
- llvm12-lib-MC
- llvm12-lib-Object
- llvm12-lib-Support
- llvm12-lib-Target
-)
-target_sources(llvm12-lib-ExecutionEngine PRIVATE
- ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/ExecutionEngine.cpp
- ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/ExecutionEngineBindings.cpp
- ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/GDBRegistrationListener.cpp
- ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/SectionMemoryManager.cpp
- ${CMAKE_SOURCE_DIR}/contrib/libs/llvm12/lib/ExecutionEngine/TargetSelect.cpp
-)
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents/CMakeLists.txt b/contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents/CMakeLists.txt
+++ b/contrib/libs/llvm12/lib/ExecutionEngine/PerfJITEvents/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/llvm12/lib/Frontend/CMakeLists.txt b/contrib/libs/llvm12/lib/Frontend/CMakeLists.txt
new file mode 100644
index 0000000000..8c1b874e3c
--- /dev/null
+++ b/contrib/libs/llvm12/lib/Frontend/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(OpenMP)
diff --git a/contrib/libs/llvm12/lib/Frontend/OpenMP/epilogue.cmake b/contrib/libs/llvm12/lib/Frontend/OpenMP/epilogue.cmake
deleted file mode 100644
index 571389aff2..0000000000
--- a/contrib/libs/llvm12/lib/Frontend/OpenMP/epilogue.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-
-add_dependencies(lib-Frontend-OpenMP OpenMP-gen-srcs-stealing)
diff --git a/contrib/libs/llvm12/lib/Frontend/OpenMP/prologue.cmake b/contrib/libs/llvm12/lib/Frontend/OpenMP/prologue.cmake
deleted file mode 100644
index 3ddc6f594c..0000000000
--- a/contrib/libs/llvm12/lib/Frontend/OpenMP/prologue.cmake
+++ /dev/null
@@ -1,3 +0,0 @@
-set_property(SOURCE ${CMAKE_BINARY_DIR}/contrib/libs/llvm12/lib/Frontend/OpenMP/OMP.cpp
- PROPERTY GENERATED On
-)
diff --git a/contrib/libs/llvm12/lib/MC/CMakeLists.txt b/contrib/libs/llvm12/lib/MC/CMakeLists.txt
index e30f70c19b..9daf06006e 100644
--- a/contrib/libs/llvm12/lib/MC/CMakeLists.txt
+++ b/contrib/libs/llvm12/lib/MC/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(MCDisassembler)
+add_subdirectory(MCParser)
add_library(llvm12-lib-MC)
target_compile_options(llvm12-lib-MC PRIVATE
diff --git a/contrib/libs/llvm12/lib/Target/CMakeLists.txt b/contrib/libs/llvm12/lib/Target/CMakeLists.txt
index 0506e18714..a2d54963f0 100644
--- a/contrib/libs/llvm12/lib/Target/CMakeLists.txt
+++ b/contrib/libs/llvm12/lib/Target/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(X86)
add_library(llvm12-lib-Target)
target_compile_options(llvm12-lib-Target PRIVATE
diff --git a/contrib/libs/llvm12/lib/Target/X86/CMakeLists.txt b/contrib/libs/llvm12/lib/Target/X86/CMakeLists.txt
index 82de35d9e8..ed1fc6d50e 100644
--- a/contrib/libs/llvm12/lib/Target/X86/CMakeLists.txt
+++ b/contrib/libs/llvm12/lib/Target/X86/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(AsmParser)
+add_subdirectory(Disassembler)
+add_subdirectory(MCTargetDesc)
+add_subdirectory(TargetInfo)
add_library(lib-Target-X86)
target_compile_options(lib-Target-X86 PRIVATE
diff --git a/contrib/libs/llvm12/lib/TextAPI/CMakeLists.txt b/contrib/libs/llvm12/lib/TextAPI/CMakeLists.txt
new file mode 100644
index 0000000000..e510446281
--- /dev/null
+++ b/contrib/libs/llvm12/lib/TextAPI/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(MachO)
diff --git a/contrib/libs/llvm12/lib/Transforms/CMakeLists.txt b/contrib/libs/llvm12/lib/Transforms/CMakeLists.txt
new file mode 100644
index 0000000000..bc8c9460d5
--- /dev/null
+++ b/contrib/libs/llvm12/lib/Transforms/CMakeLists.txt
@@ -0,0 +1,17 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(AggressiveInstCombine)
+add_subdirectory(CFGuard)
+add_subdirectory(IPO)
+add_subdirectory(InstCombine)
+add_subdirectory(Instrumentation)
+add_subdirectory(ObjCARC)
+add_subdirectory(Scalar)
+add_subdirectory(Utils)
+add_subdirectory(Vectorize)
diff --git a/contrib/libs/llvm12/utils/CMakeLists.txt b/contrib/libs/llvm12/utils/CMakeLists.txt
new file mode 100644
index 0000000000..96eb85cbfb
--- /dev/null
+++ b/contrib/libs/llvm12/utils/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(TableGen)
diff --git a/contrib/libs/llvm12/utils/TableGen/CMakeLists.darwin.txt b/contrib/libs/llvm12/utils/TableGen/CMakeLists.darwin.txt
index fbd169466f..a90cbd7db3 100644
--- a/contrib/libs/llvm12/utils/TableGen/CMakeLists.darwin.txt
+++ b/contrib/libs/llvm12/utils/TableGen/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(GlobalISel)
add_executable(llvm-tblgen)
target_compile_options(llvm-tblgen PRIVATE
diff --git a/contrib/libs/llvm12/utils/TableGen/CMakeLists.linux.txt b/contrib/libs/llvm12/utils/TableGen/CMakeLists.linux.txt
index b21240ea2f..8482d8f5bc 100644
--- a/contrib/libs/llvm12/utils/TableGen/CMakeLists.linux.txt
+++ b/contrib/libs/llvm12/utils/TableGen/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(GlobalISel)
add_executable(llvm-tblgen)
target_compile_options(llvm-tblgen PRIVATE
diff --git a/contrib/libs/llvm12/utils/TableGen/CMakeLists.txt b/contrib/libs/llvm12/utils/TableGen/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/llvm12/utils/TableGen/CMakeLists.txt
+++ b/contrib/libs/llvm12/utils/TableGen/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/lz4/CMakeLists.txt b/contrib/libs/lz4/CMakeLists.txt
index 183471d07e..b73d70e8af 100644
--- a/contrib/libs/lz4/CMakeLists.txt
+++ b/contrib/libs/lz4/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(generated)
add_library(contrib-libs-lz4)
target_include_directories(contrib-libs-lz4 PRIVATE
diff --git a/contrib/libs/lzma/CMakeLists.txt b/contrib/libs/lzma/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/lzma/CMakeLists.txt
+++ b/contrib/libs/lzma/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/nayuki_md5/CMakeLists.txt b/contrib/libs/nayuki_md5/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/libs/nayuki_md5/CMakeLists.txt
+++ b/contrib/libs/nayuki_md5/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/pcre/CMakeLists.txt b/contrib/libs/pcre/CMakeLists.txt
index 8c18cb2e24..93c0fd5ad0 100644
--- a/contrib/libs/pcre/CMakeLists.txt
+++ b/contrib/libs/pcre/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(pcre16)
+add_subdirectory(pcre32)
add_library(contrib-libs-pcre)
target_compile_options(contrib-libs-pcre PUBLIC
diff --git a/contrib/libs/pdqsort/CMakeLists.txt b/contrib/libs/pdqsort/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/pdqsort/CMakeLists.txt
+++ b/contrib/libs/pdqsort/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/poco/CMakeLists.linux.txt b/contrib/libs/poco/CMakeLists.linux.txt
new file mode 100644
index 0000000000..5ad2ad4720
--- /dev/null
+++ b/contrib/libs/poco/CMakeLists.linux.txt
@@ -0,0 +1,15 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(Crypto)
+add_subdirectory(Foundation)
+add_subdirectory(JSON)
+add_subdirectory(Net)
+add_subdirectory(NetSSL_OpenSSL)
+add_subdirectory(Util)
+add_subdirectory(XML)
diff --git a/contrib/libs/poco/CMakeLists.txt b/contrib/libs/poco/CMakeLists.txt
new file mode 100644
index 0000000000..97368e369c
--- /dev/null
+++ b/contrib/libs/poco/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/contrib/libs/poco/Crypto/CMakeLists.txt b/contrib/libs/poco/Crypto/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/poco/Crypto/CMakeLists.txt
+++ b/contrib/libs/poco/Crypto/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/poco/Foundation/CMakeLists.txt b/contrib/libs/poco/Foundation/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/poco/Foundation/CMakeLists.txt
+++ b/contrib/libs/poco/Foundation/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/poco/JSON/CMakeLists.txt b/contrib/libs/poco/JSON/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/poco/JSON/CMakeLists.txt
+++ b/contrib/libs/poco/JSON/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/poco/Net/CMakeLists.txt b/contrib/libs/poco/Net/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/poco/Net/CMakeLists.txt
+++ b/contrib/libs/poco/Net/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/poco/NetSSL_OpenSSL/CMakeLists.txt b/contrib/libs/poco/NetSSL_OpenSSL/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/poco/NetSSL_OpenSSL/CMakeLists.txt
+++ b/contrib/libs/poco/NetSSL_OpenSSL/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/poco/Util/CMakeLists.txt b/contrib/libs/poco/Util/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/poco/Util/CMakeLists.txt
+++ b/contrib/libs/poco/Util/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/poco/XML/CMakeLists.txt b/contrib/libs/poco/XML/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/poco/XML/CMakeLists.txt
+++ b/contrib/libs/poco/XML/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/protobuf_std/src/google/protobuf/util/time_util.h b/contrib/libs/protobuf_std/src/google/protobuf/util/time_util.h
deleted file mode 100644
index 96b1aac46b..0000000000
--- a/contrib/libs/protobuf_std/src/google/protobuf/util/time_util.h
+++ /dev/null
@@ -1,313 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc. All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Defines utilities for the Timestamp and Duration well known types.
-
-#ifndef GOOGLE_PROTOBUF_UTIL_TIME_UTIL_H__
-#define GOOGLE_PROTOBUF_UTIL_TIME_UTIL_H__
-
-#include <cstdint>
-#include <ctime>
-#include <ostream>
-#include <string>
-#ifdef _MSC_VER
-#ifdef _XBOX_ONE
-struct timeval {
- int64 tv_sec; /* seconds */
- int64 tv_usec; /* and microseconds */
-};
-#else
-#include <winsock2.h>
-#endif // _XBOX_ONE
-#else
-#include <sys/time.h>
-#endif
-
-#include <google/protobuf/duration.pb.h>
-#include <google/protobuf/timestamp.pb.h>
-
-#include <google/protobuf/port_def.inc>
-
-namespace google {
-namespace protobuf {
-namespace util {
-
-// Utility functions for Timestamp and Duration.
-class PROTOBUF_EXPORT TimeUtil {
- typedef google::protobuf::Timestamp Timestamp;
- typedef google::protobuf::Duration Duration;
-
- public:
- // The min/max Timestamp/Duration values we support.
- //
- // For "0001-01-01T00:00:00Z".
- static const int64_t kTimestampMinSeconds = -62135596800LL;
- // For "9999-12-31T23:59:59.999999999Z".
- static const int64_t kTimestampMaxSeconds = 253402300799LL;
- static const int64_t kDurationMinSeconds = -315576000000LL;
- static const int64_t kDurationMaxSeconds = 315576000000LL;
-
- // Converts Timestamp to/from RFC 3339 date string format.
- // Generated output will always be Z-normalized and uses 3, 6 or 9
- // fractional digits as required to represent the exact time. When
- // parsing, any fractional digits (or none) and any offset are
- // accepted as long as they fit into nano-seconds precision.
- // Note that Timestamp can only represent time from
- // 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. Converting
- // a Timestamp outside of this range is undefined behavior.
- // See https://www.ietf.org/rfc/rfc3339.txt
- //
- // Example of generated format:
- // "1972-01-01T10:00:20.021Z"
- //
- // Example of accepted format:
- // "1972-01-01T10:00:20.021-05:00"
- static std::string ToString(const Timestamp& timestamp);
- static bool FromString(const std::string& value, Timestamp* timestamp);
-
- // Converts Duration to/from string format. The string format will contains
- // 3, 6, or 9 fractional digits depending on the precision required to
- // represent the exact Duration value. For example:
- // "1s", "1.010s", "1.000000100s", "-3.100s"
- // The range that can be represented by Duration is from -315,576,000,000
- // to +315,576,000,000 inclusive (in seconds).
- static std::string ToString(const Duration& duration);
- static bool FromString(const std::string& value, Duration* timestamp);
-
-#ifdef GetCurrentTime
-#undef GetCurrentTime // Visual Studio has macro GetCurrentTime
-#endif
- // Gets the current UTC time.
- static Timestamp GetCurrentTime();
- // Returns the Time representing "1970-01-01 00:00:00".
- static Timestamp GetEpoch();
-
- // Converts between Duration and integer types. The behavior is undefined if
- // the input value is not in the valid range of Duration.
- static Duration NanosecondsToDuration(int64_t nanos);
- static Duration MicrosecondsToDuration(int64_t micros);
- static Duration MillisecondsToDuration(int64_t millis);
- static Duration SecondsToDuration(int64_t seconds);
- static Duration MinutesToDuration(int64_t minutes);
- static Duration HoursToDuration(int64_t hours);
- // Result will be truncated towards zero. For example, "-1.5s" will be
- // truncated to "-1s", and "1.5s" to "1s" when converting to seconds.
- // It's undefined behavior if the input duration is not valid or the result
- // exceeds the range of int64. A duration is not valid if it's not in the
- // valid range of Duration, or have an invalid nanos value (i.e., larger
- // than 999999999, less than -999999999, or have a different sign from the
- // seconds part).
- static int64_t DurationToNanoseconds(const Duration& duration);
- static int64_t DurationToMicroseconds(const Duration& duration);
- static int64_t DurationToMilliseconds(const Duration& duration);
- static int64_t DurationToSeconds(const Duration& duration);
- static int64_t DurationToMinutes(const Duration& duration);
- static int64_t DurationToHours(const Duration& duration);
- // Creates Timestamp from integer types. The integer value indicates the
- // time elapsed from Epoch time. The behavior is undefined if the input
- // value is not in the valid range of Timestamp.
- static Timestamp NanosecondsToTimestamp(int64_t nanos);
- static Timestamp MicrosecondsToTimestamp(int64_t micros);
- static Timestamp MillisecondsToTimestamp(int64_t millis);
- static Timestamp SecondsToTimestamp(int64_t seconds);
- // Result will be truncated down to the nearest integer value. For example,
- // with "1969-12-31T23:59:59.9Z", TimestampToMilliseconds() returns -100
- // and TimestampToSeconds() returns -1. It's undefined behavior if the input
- // Timestamp is not valid (i.e., its seconds part or nanos part does not fall
- // in the valid range) or the return value doesn't fit into int64.
- static int64_t TimestampToNanoseconds(const Timestamp& timestamp);
- static int64_t TimestampToMicroseconds(const Timestamp& timestamp);
- static int64_t TimestampToMilliseconds(const Timestamp& timestamp);
- static int64_t TimestampToSeconds(const Timestamp& timestamp);
-
- // Conversion to/from other time/date types. Note that these types may
- // have a different precision and time range from Timestamp/Duration.
- // When converting to a lower precision type, the value will be truncated
- // to the nearest value that can be represented. If the value is
- // out of the range of the result type, the return value is undefined.
- //
- // Conversion to/from time_t
- static Timestamp TimeTToTimestamp(time_t value);
- static time_t TimestampToTimeT(const Timestamp& value);
-
- // Conversion to/from timeval
- static Timestamp TimevalToTimestamp(const timeval& value);
- static timeval TimestampToTimeval(const Timestamp& value);
- static Duration TimevalToDuration(const timeval& value);
- static timeval DurationToTimeval(const Duration& value);
-};
-
-} // namespace util
-} // namespace protobuf
-} // namespace google
-
-namespace google {
-namespace protobuf {
-// Overloaded operators for Duration.
-//
-// Assignment operators.
-PROTOBUF_EXPORT Duration& operator+=(Duration& d1,
- const Duration& d2); // NOLINT
-PROTOBUF_EXPORT Duration& operator-=(Duration& d1,
- const Duration& d2); // NOLINT
-PROTOBUF_EXPORT Duration& operator*=(Duration& d, int64_t r); // NOLINT
-PROTOBUF_EXPORT Duration& operator*=(Duration& d, double r); // NOLINT
-PROTOBUF_EXPORT Duration& operator/=(Duration& d, int64_t r); // NOLINT
-PROTOBUF_EXPORT Duration& operator/=(Duration& d, double r); // NOLINT
-// Overload for other integer types.
-template <typename T>
-Duration& operator*=(Duration& d, T r) { // NOLINT
- int64_t x = r;
- return d *= x;
-}
-template <typename T>
-Duration& operator/=(Duration& d, T r) { // NOLINT
- int64_t x = r;
- return d /= x;
-}
-PROTOBUF_EXPORT Duration& operator%=(Duration& d1,
- const Duration& d2); // NOLINT
-// Relational operators.
-inline bool operator<(const Duration& d1, const Duration& d2) {
- if (d1.seconds() == d2.seconds()) {
- return d1.nanos() < d2.nanos();
- }
- return d1.seconds() < d2.seconds();
-}
-inline bool operator>(const Duration& d1, const Duration& d2) {
- return d2 < d1;
-}
-inline bool operator>=(const Duration& d1, const Duration& d2) {
- return !(d1 < d2);
-}
-inline bool operator<=(const Duration& d1, const Duration& d2) {
- return !(d2 < d1);
-}
-inline bool operator==(const Duration& d1, const Duration& d2) {
- return d1.seconds() == d2.seconds() && d1.nanos() == d2.nanos();
-}
-inline bool operator!=(const Duration& d1, const Duration& d2) {
- return !(d1 == d2);
-}
-// Additive operators
-inline Duration operator-(const Duration& d) {
- Duration result;
- result.set_seconds(-d.seconds());
- result.set_nanos(-d.nanos());
- return result;
-}
-inline Duration operator+(const Duration& d1, const Duration& d2) {
- Duration result = d1;
- return result += d2;
-}
-inline Duration operator-(const Duration& d1, const Duration& d2) {
- Duration result = d1;
- return result -= d2;
-}
-// Multiplicative operators
-template <typename T>
-inline Duration operator*(Duration d, T r) {
- return d *= r;
-}
-template <typename T>
-inline Duration operator*(T r, Duration d) {
- return d *= r;
-}
-template <typename T>
-inline Duration operator/(Duration d, T r) {
- return d /= r;
-}
-PROTOBUF_EXPORT int64_t operator/(const Duration& d1, const Duration& d2);
-
-inline Duration operator%(const Duration& d1, const Duration& d2) {
- Duration result = d1;
- return result %= d2;
-}
-
-inline std::ostream& operator<<(std::ostream& out, const Duration& d) {
- out << ::PROTOBUF_NAMESPACE_ID::util::TimeUtil::ToString(d);
- return out;
-}
-
-// Overloaded operators for Timestamp
-//
-// Assignment operators.
-PROTOBUF_EXPORT Timestamp& operator+=(Timestamp& t,
- const Duration& d); // NOLINT
-PROTOBUF_EXPORT Timestamp& operator-=(Timestamp& t,
- const Duration& d); // NOLINT
-// Relational operators.
-inline bool operator<(const Timestamp& t1, const Timestamp& t2) {
- if (t1.seconds() == t2.seconds()) {
- return t1.nanos() < t2.nanos();
- }
- return t1.seconds() < t2.seconds();
-}
-inline bool operator>(const Timestamp& t1, const Timestamp& t2) {
- return t2 < t1;
-}
-inline bool operator>=(const Timestamp& t1, const Timestamp& t2) {
- return !(t1 < t2);
-}
-inline bool operator<=(const Timestamp& t1, const Timestamp& t2) {
- return !(t2 < t1);
-}
-inline bool operator==(const Timestamp& t1, const Timestamp& t2) {
- return t1.seconds() == t2.seconds() && t1.nanos() == t2.nanos();
-}
-inline bool operator!=(const Timestamp& t1, const Timestamp& t2) {
- return !(t1 == t2);
-}
-// Additive operators.
-inline Timestamp operator+(const Timestamp& t, const Duration& d) {
- Timestamp result = t;
- return result += d;
-}
-inline Timestamp operator+(const Duration& d, const Timestamp& t) {
- Timestamp result = t;
- return result += d;
-}
-inline Timestamp operator-(const Timestamp& t, const Duration& d) {
- Timestamp result = t;
- return result -= d;
-}
-PROTOBUF_EXPORT Duration operator-(const Timestamp& t1, const Timestamp& t2);
-
-inline std::ostream& operator<<(std::ostream& out, const Timestamp& t) {
- out << ::PROTOBUF_NAMESPACE_ID::util::TimeUtil::ToString(t);
- return out;
-}
-
-} // namespace protobuf
-} // namespace google
-
-#include <google/protobuf/port_undef.inc>
-
-#endif // GOOGLE_PROTOBUF_UTIL_TIME_UTIL_H__
diff --git a/contrib/libs/tcmalloc/CMakeLists.darwin.txt b/contrib/libs/tcmalloc/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..7898448e35
--- /dev/null
+++ b/contrib/libs/tcmalloc/CMakeLists.darwin.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(malloc_extension)
diff --git a/contrib/libs/tcmalloc/CMakeLists.linux.txt b/contrib/libs/tcmalloc/CMakeLists.linux.txt
index 8f96b977ae..51a7593d3c 100644
--- a/contrib/libs/tcmalloc/CMakeLists.linux.txt
+++ b/contrib/libs/tcmalloc/CMakeLists.linux.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(malloc_extension)
+add_subdirectory(no_percpu_cache)
add_library(contrib-libs-tcmalloc)
target_compile_options(contrib-libs-tcmalloc PRIVATE
diff --git a/contrib/libs/tcmalloc/CMakeLists.txt b/contrib/libs/tcmalloc/CMakeLists.txt
index e8c98bfd99..dbfe6fa2c4 100644
--- a/contrib/libs/tcmalloc/CMakeLists.txt
+++ b/contrib/libs/tcmalloc/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/tcmalloc/no_percpu_cache/CMakeLists.txt b/contrib/libs/tcmalloc/no_percpu_cache/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/libs/tcmalloc/no_percpu_cache/CMakeLists.txt
+++ b/contrib/libs/tcmalloc/no_percpu_cache/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/libs/tcmalloc/ya.make b/contrib/libs/tcmalloc/ya.make
deleted file mode 100644
index b2e00ef0b7..0000000000
--- a/contrib/libs/tcmalloc/ya.make
+++ /dev/null
@@ -1,39 +0,0 @@
-LIBRARY()
-
-LICENSE(Apache-2.0)
-
-LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-
-OWNER(
- ayles
- prime
- g:cpp-contrib
-)
-
-# https://github.com/google/tcmalloc
-VERSION(2021-10-04-45c59ccbc062ac96d83710205033c656e490d376)
-
-SRCS(
- # Options
- tcmalloc/want_hpaa.cc
-)
-
-INCLUDE(common.inc)
-
-CFLAGS(
- -DTCMALLOC_256K_PAGES
-)
-
-END()
-
-IF (NOT DLL_FOR)
- RECURSE(
- default
- dynamic
- malloc_extension
- no_percpu_cache
- numa_256k
- numa_large_pages
- small_but_slow
- )
-ENDIF()
diff --git a/contrib/restricted/CMakeLists.darwin.txt b/contrib/restricted/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..88d1d03c2d
--- /dev/null
+++ b/contrib/restricted/CMakeLists.darwin.txt
@@ -0,0 +1,16 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(abseil-cpp)
+add_subdirectory(abseil-cpp-tstring)
+add_subdirectory(aws)
+add_subdirectory(boost)
+add_subdirectory(fast_float)
+add_subdirectory(googletest)
+add_subdirectory(thrift)
+add_subdirectory(uriparser)
diff --git a/contrib/restricted/CMakeLists.linux.txt b/contrib/restricted/CMakeLists.linux.txt
new file mode 100644
index 0000000000..c2bcf2edef
--- /dev/null
+++ b/contrib/restricted/CMakeLists.linux.txt
@@ -0,0 +1,18 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(abseil-cpp)
+add_subdirectory(abseil-cpp-tstring)
+add_subdirectory(aws)
+add_subdirectory(boost)
+add_subdirectory(cityhash-1.0.2)
+add_subdirectory(dragonbox)
+add_subdirectory(fast_float)
+add_subdirectory(googletest)
+add_subdirectory(thrift)
+add_subdirectory(uriparser)
diff --git a/contrib/restricted/CMakeLists.txt b/contrib/restricted/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/contrib/restricted/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/contrib/restricted/abseil-cpp-tstring/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/CMakeLists.txt
new file mode 100644
index 0000000000..c03b62d32c
--- /dev/null
+++ b/contrib/restricted/abseil-cpp-tstring/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(y_absl)
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/CMakeLists.txt
new file mode 100644
index 0000000000..52c183ff4f
--- /dev/null
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/CMakeLists.txt
@@ -0,0 +1,26 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(algorithm)
+add_subdirectory(base)
+add_subdirectory(city)
+add_subdirectory(container)
+add_subdirectory(debugging)
+add_subdirectory(demangle)
+add_subdirectory(functional)
+add_subdirectory(hash)
+add_subdirectory(memory)
+add_subdirectory(meta)
+add_subdirectory(numeric)
+add_subdirectory(profiling)
+add_subdirectory(status)
+add_subdirectory(strings)
+add_subdirectory(synchronization)
+add_subdirectory(time)
+add_subdirectory(types)
+add_subdirectory(utility)
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/base/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/base/CMakeLists.txt
index 26bf1b68a8..6026f6e6f9 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/base/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/base/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
+add_subdirectory(log_severity)
add_library(yabseil-cpp-tstring-y_absl-base)
target_compile_options(yabseil-cpp-tstring-y_absl-base PRIVATE
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/CMakeLists.txt
new file mode 100644
index 0000000000..88b6bf0a3b
--- /dev/null
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/base/internal/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(low_level_alloc)
+add_subdirectory(raw_logging)
+add_subdirectory(spinlock_wait)
+add_subdirectory(throw_delegate)
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/container/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/container/CMakeLists.txt
index 19e2bc893e..3f055ad862 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/container/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/container/CMakeLists.txt
@@ -6,5 +6,6 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
add_library(abseil-cpp-tstring-y_absl-container INTERFACE)
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/container/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/container/internal/CMakeLists.txt
new file mode 100644
index 0000000000..377678a185
--- /dev/null
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/container/internal/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(absl_hashtablez_sampler)
+add_subdirectory(raw_hash_set)
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/debugging/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/debugging/CMakeLists.txt
index 4b3cd7b259..f78d791cc1 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/debugging/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/debugging/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(stacktrace)
+add_subdirectory(symbolize)
add_library(yabseil-cpp-tstring-y_absl-debugging)
target_compile_options(yabseil-cpp-tstring-y_absl-debugging PRIVATE
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/hash/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/hash/CMakeLists.txt
index 3507682846..aa3d19d6f0 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/hash/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/hash/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
add_library(yabseil-cpp-tstring-y_absl-hash)
target_compile_options(yabseil-cpp-tstring-y_absl-hash PRIVATE
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/profiling/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/profiling/CMakeLists.txt
new file mode 100644
index 0000000000..a339089aea
--- /dev/null
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/profiling/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(internal)
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/profiling/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/profiling/internal/CMakeLists.txt
new file mode 100644
index 0000000000..c008130d0f
--- /dev/null
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/profiling/internal/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(exponential_biased)
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/status/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/status/CMakeLists.txt
index 027ae28b9a..92e6c38950 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/status/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/status/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(statusor)
add_library(yabseil-cpp-tstring-y_absl-status)
target_compile_options(yabseil-cpp-tstring-y_absl-status PRIVATE
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/strings/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/strings/CMakeLists.txt
index a5df46fd83..6214c883be 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/strings/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/strings/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(cord)
+add_subdirectory(internal)
add_library(yabseil-cpp-tstring-y_absl-strings)
target_compile_options(yabseil-cpp-tstring-y_absl-strings PRIVATE
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/CMakeLists.txt
new file mode 100644
index 0000000000..57cfe0a7cc
--- /dev/null
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/strings/internal/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(absl_cord_internal)
+add_subdirectory(absl_strings_internal)
+add_subdirectory(cordz_functions)
+add_subdirectory(cordz_handle)
+add_subdirectory(cordz_info)
+add_subdirectory(str_format)
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/synchronization/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/synchronization/CMakeLists.txt
index 3cb09caec8..66d7ce675c 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/synchronization/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/synchronization/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
add_library(yabseil-cpp-tstring-y_absl-synchronization)
target_compile_options(yabseil-cpp-tstring-y_absl-synchronization PRIVATE
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/time/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/time/CMakeLists.txt
index 75a6461a78..7d6a20bca2 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/time/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/time/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(civil_time)
+add_subdirectory(time_zone)
add_library(yabseil-cpp-tstring-y_absl-time)
target_compile_options(yabseil-cpp-tstring-y_absl-time PRIVATE
diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/types/CMakeLists.txt b/contrib/restricted/abseil-cpp-tstring/y_absl/types/CMakeLists.txt
index 885607e13e..910a995a17 100644
--- a/contrib/restricted/abseil-cpp-tstring/y_absl/types/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp-tstring/y_absl/types/CMakeLists.txt
@@ -6,5 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(bad_optional_access)
+add_subdirectory(bad_variant_access)
+add_subdirectory(internal)
add_library(abseil-cpp-tstring-y_absl-types INTERFACE)
diff --git a/contrib/restricted/abseil-cpp/CMakeLists.txt b/contrib/restricted/abseil-cpp/CMakeLists.txt
index 5252bb9cb7..31c2484988 100644
--- a/contrib/restricted/abseil-cpp/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(absl)
add_library(contrib-restricted-abseil-cpp INTERFACE)
target_link_libraries(contrib-restricted-abseil-cpp INTERFACE
diff --git a/contrib/restricted/abseil-cpp/absl/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/CMakeLists.txt
new file mode 100644
index 0000000000..6b663fea8e
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/CMakeLists.txt
@@ -0,0 +1,28 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(algorithm)
+add_subdirectory(base)
+add_subdirectory(city)
+add_subdirectory(container)
+add_subdirectory(debugging)
+add_subdirectory(demangle)
+add_subdirectory(flags)
+add_subdirectory(functional)
+add_subdirectory(hash)
+add_subdirectory(memory)
+add_subdirectory(meta)
+add_subdirectory(numeric)
+add_subdirectory(profiling)
+add_subdirectory(random)
+add_subdirectory(status)
+add_subdirectory(strings)
+add_subdirectory(synchronization)
+add_subdirectory(time)
+add_subdirectory(types)
+add_subdirectory(utility)
diff --git a/contrib/restricted/abseil-cpp/absl/base/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/base/CMakeLists.txt
index 8ff5c8c5f2..d53905ea73 100644
--- a/contrib/restricted/abseil-cpp/absl/base/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/base/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
+add_subdirectory(log_severity)
add_library(abseil-cpp-absl-base)
target_compile_options(abseil-cpp-absl-base PRIVATE
diff --git a/contrib/restricted/abseil-cpp/absl/base/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/base/internal/CMakeLists.txt
new file mode 100644
index 0000000000..e32cdd70be
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/base/internal/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(low_level_alloc)
+add_subdirectory(raw_logging)
+add_subdirectory(scoped_set_env)
+add_subdirectory(spinlock_wait)
+add_subdirectory(strerror)
+add_subdirectory(throw_delegate)
diff --git a/contrib/restricted/abseil-cpp/absl/container/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/container/CMakeLists.txt
index 3f71875a2a..ee52ca4a20 100644
--- a/contrib/restricted/abseil-cpp/absl/container/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/container/CMakeLists.txt
@@ -6,5 +6,6 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
add_library(abseil-cpp-absl-container INTERFACE)
diff --git a/contrib/restricted/abseil-cpp/absl/container/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/container/internal/CMakeLists.txt
new file mode 100644
index 0000000000..377678a185
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/container/internal/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(absl_hashtablez_sampler)
+add_subdirectory(raw_hash_set)
diff --git a/contrib/restricted/abseil-cpp/absl/debugging/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/debugging/CMakeLists.txt
index a73ff5ab2f..65240b53b9 100644
--- a/contrib/restricted/abseil-cpp/absl/debugging/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/debugging/CMakeLists.txt
@@ -6,6 +6,12 @@
# original buildsystem will not be accepted.
+add_subdirectory(failure_signal_handler)
+add_subdirectory(internal)
+add_subdirectory(leak_check)
+add_subdirectory(leak_check_disable)
+add_subdirectory(stacktrace)
+add_subdirectory(symbolize)
add_library(abseil-cpp-absl-debugging)
target_compile_options(abseil-cpp-absl-debugging PRIVATE
diff --git a/contrib/restricted/abseil-cpp/absl/flags/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/flags/CMakeLists.txt
index b0b286edbd..e79b24e3ae 100644
--- a/contrib/restricted/abseil-cpp/absl/flags/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/flags/CMakeLists.txt
@@ -6,6 +6,13 @@
# original buildsystem will not be accepted.
+add_subdirectory(commandlineflag)
+add_subdirectory(internal)
+add_subdirectory(marshalling)
+add_subdirectory(parse)
+add_subdirectory(reflection)
+add_subdirectory(usage)
+add_subdirectory(usage_config)
add_library(abseil-cpp-absl-flags)
target_compile_options(abseil-cpp-absl-flags PRIVATE
diff --git a/contrib/restricted/abseil-cpp/absl/flags/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/flags/internal/CMakeLists.txt
new file mode 100644
index 0000000000..406ed60168
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/flags/internal/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(commandlineflag)
+add_subdirectory(flag)
+add_subdirectory(private_handle_accessor)
+add_subdirectory(program_name)
+add_subdirectory(usage)
diff --git a/contrib/restricted/abseil-cpp/absl/hash/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/hash/CMakeLists.txt
index 23d66a6f73..373b7b6f97 100644
--- a/contrib/restricted/abseil-cpp/absl/hash/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/hash/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
add_library(abseil-cpp-absl-hash)
target_compile_options(abseil-cpp-absl-hash PRIVATE
diff --git a/contrib/restricted/abseil-cpp/absl/profiling/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/profiling/CMakeLists.txt
new file mode 100644
index 0000000000..a339089aea
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/profiling/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(internal)
diff --git a/contrib/restricted/abseil-cpp/absl/profiling/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/profiling/internal/CMakeLists.txt
new file mode 100644
index 0000000000..eddcd1b715
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/profiling/internal/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(exponential_biased)
+add_subdirectory(periodic_sampler)
diff --git a/contrib/restricted/abseil-cpp/absl/random/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/random/CMakeLists.txt
new file mode 100644
index 0000000000..9432969f95
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/random/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(absl_random_distributions)
+add_subdirectory(internal)
+add_subdirectory(seed_gen_exception)
+add_subdirectory(seed_sequences)
diff --git a/contrib/restricted/abseil-cpp/absl/random/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/random/internal/CMakeLists.txt
new file mode 100644
index 0000000000..8f9757666c
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/random/internal/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(absl_random_internal_distribution_test_util)
+add_subdirectory(pool_urbg)
+add_subdirectory(randen)
+add_subdirectory(randen_detect)
+add_subdirectory(randen_hwaes)
+add_subdirectory(randen_round_keys)
+add_subdirectory(randen_slow)
+add_subdirectory(seed_material)
diff --git a/contrib/restricted/abseil-cpp/absl/status/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/status/CMakeLists.txt
index 2323eb9d29..c0a245a93c 100644
--- a/contrib/restricted/abseil-cpp/absl/status/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/status/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(statusor)
add_library(abseil-cpp-absl-status)
target_compile_options(abseil-cpp-absl-status PRIVATE
diff --git a/contrib/restricted/abseil-cpp/absl/strings/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/strings/CMakeLists.txt
index 1c450b7de5..4e0bd985eb 100644
--- a/contrib/restricted/abseil-cpp/absl/strings/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/strings/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(cord)
+add_subdirectory(internal)
add_library(abseil-cpp-absl-strings)
target_compile_options(abseil-cpp-absl-strings PRIVATE
diff --git a/contrib/restricted/abseil-cpp/absl/strings/internal/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/strings/internal/CMakeLists.txt
new file mode 100644
index 0000000000..4bc41c3fc3
--- /dev/null
+++ b/contrib/restricted/abseil-cpp/absl/strings/internal/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(absl_cord_internal)
+add_subdirectory(absl_strings_internal)
+add_subdirectory(cordz_functions)
+add_subdirectory(cordz_handle)
+add_subdirectory(cordz_info)
+add_subdirectory(cordz_sample_token)
+add_subdirectory(str_format)
diff --git a/contrib/restricted/abseil-cpp/absl/synchronization/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/synchronization/CMakeLists.txt
index e63479baed..4e2193ede2 100644
--- a/contrib/restricted/abseil-cpp/absl/synchronization/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/synchronization/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
add_library(abseil-cpp-absl-synchronization)
target_compile_options(abseil-cpp-absl-synchronization PRIVATE
diff --git a/contrib/restricted/abseil-cpp/absl/time/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/time/CMakeLists.txt
index a5919760af..b7d3ee3b8f 100644
--- a/contrib/restricted/abseil-cpp/absl/time/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/time/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(civil_time)
+add_subdirectory(time_zone)
add_library(abseil-cpp-absl-time)
target_compile_options(abseil-cpp-absl-time PRIVATE
diff --git a/contrib/restricted/abseil-cpp/absl/types/CMakeLists.txt b/contrib/restricted/abseil-cpp/absl/types/CMakeLists.txt
index d9ca280d08..856b3c8efb 100644
--- a/contrib/restricted/abseil-cpp/absl/types/CMakeLists.txt
+++ b/contrib/restricted/abseil-cpp/absl/types/CMakeLists.txt
@@ -6,5 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(bad_any_cast)
+add_subdirectory(bad_optional_access)
+add_subdirectory(bad_variant_access)
+add_subdirectory(internal)
add_library(abseil-cpp-absl-types INTERFACE)
diff --git a/contrib/restricted/aws/CMakeLists.txt b/contrib/restricted/aws/CMakeLists.txt
new file mode 100644
index 0000000000..d9e752ac46
--- /dev/null
+++ b/contrib/restricted/aws/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(aws-c-cal)
+add_subdirectory(aws-c-common)
+add_subdirectory(aws-c-event-stream)
+add_subdirectory(aws-c-io)
+add_subdirectory(aws-checksums)
+add_subdirectory(s2n)
diff --git a/contrib/restricted/aws/aws-c-common/CMakeLists.txt b/contrib/restricted/aws/aws-c-common/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/restricted/aws/aws-c-common/CMakeLists.txt
+++ b/contrib/restricted/aws/aws-c-common/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/aws/aws-c-io/CMakeLists.txt b/contrib/restricted/aws/aws-c-io/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/restricted/aws/aws-c-io/CMakeLists.txt
+++ b/contrib/restricted/aws/aws-c-io/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/aws/s2n/CMakeLists.txt b/contrib/restricted/aws/s2n/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/restricted/aws/s2n/CMakeLists.txt
+++ b/contrib/restricted/aws/s2n/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/boost/.yandex_meta/devtools.copyrights.report b/contrib/restricted/boost/.yandex_meta/devtools.copyrights.report
new file mode 100644
index 0000000000..1685e066d9
--- /dev/null
+++ b/contrib/restricted/boost/.yandex_meta/devtools.copyrights.report
@@ -0,0 +1,38573 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# $ IGNORE_FILES {file1.ext1} {file2.ext2} - (optional) ignore listed files when generating license macro and credits
+# $
+# ${action} {license id} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
+
+KEEP COPYRIGHT_SERVICE_LABEL 000aa9c39050337adeb86ee6154db231
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multi_index/composite_key.hpp at line 3, boost/multi_index/detail/bucket_array.hpp at line 3, boost/multi_index/detail/index_loader.hpp at line 3, boost/multi_index/detail/index_matcher.hpp at line 3, boost/multi_index/detail/ord_index_impl_fwd.hpp at line 3, boost/multi_index/detail/raw_ptr.hpp at line 3, boost/multi_index/detail/rnd_index_ops.hpp at line 3, boost/multi_index/detail/value_compare.hpp at line 3, boost/multi_index/global_fun.hpp at line 3, boost/multi_index/identity.hpp at line 3, boost/multi_index/mem_fun.hpp at line 3, boost/multi_index/member.hpp at line 3, boost/multi_index/ordered_index.hpp at line 3, boost/multi_index/ordered_index_fwd.hpp at line 3, boost/multi_index/ranked_index_fwd.hpp at line 3
+ License text:
+ /* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multi_index/composite_key.hpp [1:3]
+ boost/multi_index/detail/bucket_array.hpp [1:3]
+ boost/multi_index/detail/index_loader.hpp [1:3]
+ boost/multi_index/detail/index_matcher.hpp [1:3]
+ boost/multi_index/detail/ord_index_impl_fwd.hpp [1:3]
+ boost/multi_index/detail/raw_ptr.hpp [1:3]
+ boost/multi_index/detail/rnd_index_ops.hpp [1:3]
+ boost/multi_index/detail/value_compare.hpp [1:3]
+ boost/multi_index/global_fun.hpp [1:3]
+ boost/multi_index/identity.hpp [1:3]
+ boost/multi_index/mem_fun.hpp [1:3]
+ boost/multi_index/member.hpp [1:3]
+ boost/multi_index/ordered_index.hpp [1:3]
+ boost/multi_index/ordered_index_fwd.hpp [1:3]
+ boost/multi_index/ranked_index_fwd.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 00306b5bf840cff6a0c995cf8f997dcc
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2006-7 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/once.hpp [6:6]
+ boost/thread/win32/recursive_mutex.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 003d8b667a2ab424cd911d3ea9c79f1c
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015 Seth Heeren
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dynamic_bitset/serialization.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 004e570060e5958e19d3656bdcba6398
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/common/util/algorithm.hpp at line 7, boost/sort/common/util/search.hpp at line 6, boost/sort/flat_stable_sort/flat_stable_sort.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/sort/common/util/algorithm.hpp [5:7]
+ boost/sort/common/util/search.hpp [4:6]
+ boost/sort/flat_stable_sort/flat_stable_sort.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 005b001f62b4974bcb9a98a2709f28e9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2012-2014 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/boost_tuple/detail/build_cons.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/convert_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/convert_impl.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 00605b5a81dc767ebe07ddba9503127e
+BELONGS ya.make
+ License text:
+ // Copyright (c) Intel Corporation 2008.
+ // Copyright (c) 2008-2012 Simonson Lucanus.
+ // Copyright (c) 2012-2012 Andrii Sydorchuk.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polygon/interval_concept.hpp [3:5]
+ boost/polygon/interval_data.hpp [3:5]
+ boost/polygon/interval_traits.hpp [3:5]
+ boost/polygon/point_concept.hpp [3:5]
+ boost/polygon/point_data.hpp [3:5]
+ boost/polygon/point_traits.hpp [3:5]
+ boost/polygon/segment_concept.hpp [3:5]
+ boost/polygon/segment_data.hpp [3:5]
+ boost/polygon/segment_traits.hpp [3:5]
+ boost/polygon/transform.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 006976ef6a7e45903db1f49fcdfcfe89
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/concept/detail/backward_compatibility.hpp at line 3
+ License text:
+ // Copyright David Abrahams 2009. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/concept/detail/backward_compatibility.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 008909fbac0a43c34e66df521b68c9a9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+ // Copyright (c) 2005-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/ssl/detail/impl/openssl_init.ipp [5:6]
+ boost/asio/ssl/impl/context.hpp [5:6]
+ boost/asio/ssl/impl/context.ipp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 008c19761ea52dc768a48cfd005fd5cc
+BELONGS ya.make
+ License text:
+ //Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/exception/detail/error_info_impl.hpp [1:1]
+ boost/exception/detail/type_info.hpp [1:1]
+ boost/exception/diagnostic_information.hpp [1:1]
+ boost/exception/info.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 00c7d0bb63cb71747e934511dcaa5bcc
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/attribute/parametric.hpp [2:3]
+ boost/spirit/home/classic/core/config.hpp [2:3]
+ boost/spirit/home/classic/core/nil.hpp [2:3]
+ boost/spirit/home/classic/error_handling.hpp [2:3]
+ boost/spirit/home/classic/error_handling/exceptions.hpp [2:3]
+ boost/spirit/home/classic/error_handling/impl/exceptions.ipp [2:3]
+ boost/spirit/home/classic/symbols.hpp [2:3]
+ boost/spirit/home/classic/symbols/impl/symbols.ipp [2:3]
+ boost/spirit/home/classic/symbols/impl/tst.ipp [2:3]
+ boost/spirit/home/classic/symbols/symbols.hpp [2:3]
+ boost/spirit/home/classic/utility/impl/chset/range_run.hpp [2:3]
+ boost/spirit/home/classic/utility/impl/chset/range_run.ipp [2:3]
+ boost/spirit/home/classic/utility/impl/chset_operators.ipp [2:3]
+ boost/xpressive/detail/utility/chset/range_run.hpp [2:3]
+ boost/xpressive/detail/utility/chset/range_run.ipp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 00d8c23eb547d50de392cb17b51e426e
+BELONGS ya.make
+ License text:
+ // Copyright 2002 Indiana University.
+ // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/adjacency_iterator.hpp [2:3]
+ boost/graph/create_condensation_graph.hpp [2:3]
+ boost/graph/dag_shortest_paths.hpp [2:3]
+ boost/graph/detail/incremental_components.hpp [2:4]
+ boost/graph/detail/list_base.hpp [2:3]
+ boost/graph/exception.hpp [2:3]
+ boost/graph/graph_archetypes.hpp [2:3]
+ boost/graph/graph_selectors.hpp [2:3]
+ boost/graph/graph_test.hpp [2:3]
+ boost/graph/iteration_macros_undef.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 00f2f63cf7fff1bf2785b395cad0229f
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/extreme_points.hpp [3:6]
+ boost/geometry/algorithms/point_on_surface.hpp [3:6]
+ boost/geometry/algorithms/remove_spikes.hpp [3:6]
+ boost/geometry/multi/algorithms/detail/extreme_points.hpp [3:6]
+ boost/geometry/multi/algorithms/remove_spikes.hpp [3:6]
+ boost/geometry/strategies/default_strategy.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 012123cc40ba5b305d1f81d16119631e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/uuid.hpp at line 5, boost/uuid/uuid_generators.hpp at line 5
+ License text:
+ // Copyright 2006 Andy Tompkins.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/uuid/uuid.hpp [3:5]
+ boost/uuid/uuid_generators.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 015cf966dafcca62c9e1b1bcd80c627a
+BELONGS ya.make
+ License text:
+ Copyright (c) 2010-2010: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/associative_element_container.hpp [2:2]
+ boost/icl/associative_interval_container.hpp [2:2]
+ boost/icl/closed_interval.hpp [2:2]
+ boost/icl/concept/comparable.hpp [2:2]
+ boost/icl/concept/container.hpp [2:2]
+ boost/icl/concept/element_associator.hpp [2:2]
+ boost/icl/concept/element_map.hpp [2:2]
+ boost/icl/concept/element_set.hpp [2:2]
+ boost/icl/concept/element_set_value.hpp [2:2]
+ boost/icl/concept/interval.hpp [2:2]
+ boost/icl/concept/interval_associator.hpp [2:2]
+ boost/icl/concept/interval_bounds.hpp [2:2]
+ boost/icl/concept/interval_map.hpp [2:2]
+ boost/icl/concept/interval_set.hpp [2:2]
+ boost/icl/concept/interval_set_value.hpp [2:2]
+ boost/icl/concept/joinable.hpp [2:2]
+ boost/icl/concept/map_value.hpp [2:2]
+ boost/icl/concept/set_value.hpp [2:2]
+ boost/icl/continuous_interval.hpp [2:2]
+ boost/icl/detail/associated_value.hpp [2:2]
+ boost/icl/detail/boost_config.hpp [2:2]
+ boost/icl/detail/exclusive_less_than.hpp [2:2]
+ boost/icl/detail/on_absorbtion.hpp [2:2]
+ boost/icl/discrete_interval.hpp [2:2]
+ boost/icl/dynamic_interval_traits.hpp [2:2]
+ boost/icl/interval.hpp [2:2]
+ boost/icl/interval_bounds.hpp [2:2]
+ boost/icl/interval_combining_style.hpp [2:2]
+ boost/icl/interval_traits.hpp [2:2]
+ boost/icl/left_open_interval.hpp [2:2]
+ boost/icl/open_interval.hpp [2:2]
+ boost/icl/predicates/distinct_equal.hpp [2:2]
+ boost/icl/predicates/element_equal.hpp [2:2]
+ boost/icl/predicates/std_equal.hpp [2:2]
+ boost/icl/predicates/sub_super_set.hpp [2:2]
+ boost/icl/right_open_interval.hpp [2:2]
+ boost/icl/type_traits/adds_inversely.hpp [2:2]
+ boost/icl/type_traits/interval_type_default.hpp [2:2]
+ boost/icl/type_traits/interval_type_of.hpp [2:2]
+ boost/icl/type_traits/is_asymmetric_interval.hpp [2:2]
+ boost/icl/type_traits/is_container.hpp [2:2]
+ boost/icl/type_traits/is_continuous_interval.hpp [2:2]
+ boost/icl/type_traits/is_discrete_interval.hpp [2:2]
+ boost/icl/type_traits/is_icl_container.hpp [2:2]
+ boost/icl/type_traits/is_interval.hpp [2:2]
+ boost/icl/type_traits/is_key_container_of.hpp [2:2]
+ boost/icl/type_traits/is_numeric.hpp [2:2]
+ boost/icl/type_traits/predicate.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 017c21e27a172eb4c0008445cc078b79
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2005-2006.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tools/precision.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 019f9d2744b88cfb03364a38055e9d75
+BELONGS ya.make
+ License text:
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval.hpp [3:4]
+ boost/numeric/interval/checking.hpp [3:3]
+ boost/numeric/interval/compare.hpp [3:3]
+ boost/numeric/interval/compare/explicit.hpp [3:4]
+ boost/numeric/interval/constants.hpp [3:3]
+ boost/numeric/interval/detail/bcc_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/bugs.hpp [3:4]
+ boost/numeric/interval/detail/c99_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/c99sub_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/interval_prototype.hpp [3:3]
+ boost/numeric/interval/detail/msvc_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/ppc_rounding_control.hpp [3:5]
+ boost/numeric/interval/detail/sparc_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/test_input.hpp [3:3]
+ boost/numeric/interval/detail/x86_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/x86gcc_rounding_control.hpp [3:4]
+ boost/numeric/interval/ext/x86_fast_rounding_control.hpp [10:10]
+ boost/numeric/interval/hw_rounding.hpp [3:4]
+ boost/numeric/interval/transc.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 01a2263079db6c047536246d78a1333b
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2006.
+ // (C) Copyright Paul A. Bristow 2006.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/complement.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 01a81ecb910aed6636479751cf7bb623
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007, 2008, 2012 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/make_shared.hpp [6:6]
+ boost/smart_ptr/make_shared_object.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 01a965702801bb82d96654951bc19d2d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Piotr Wyderski
+ // Copyright (c) 2006 Tomas Puverle
+ // Copyright (c) 2006 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp [12:14]
+ boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp [11:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 01ee5bf19060374ef2efda82af9fc108
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/r_c_shortest_paths.hpp at line 5
+ License text:
+ // Copyright Michael Drexl 2005, 2006.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/r_c_shortest_paths.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0248c07689d63f8e0b5cff0f09a2737a
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2012 Flavio De Lorenzi (fdlorenzi@gmail.com)
+ // Copyright (C) 2013 Jakob Lykke Andersen, University of Southern Denmark (jlandersen@imada.sdu.dk)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/vf2_sub_graph_iso.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 027d3eda5b4664a02a1aa3f742e0b4a6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/framework/accumulators/value_accumulator.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/framework/accumulators/value_accumulator.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 02cd524bdb42667b1b164094ec9971ea
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2007, 2014.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/zeta.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 02fd0bffdaa1688b60dc1f4a812b1f2f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2014 Ian Forbed
+ // Copyright (C) 2014-2015 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/executors/detail/scheduled_executor_base.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 030d372089b68ad5c0e8d7e26b7a2a49
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2016.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tools/convert_from_string.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 034715b672f9cdb0ea87a4cf900d1042
+BELONGS ya.make
+ License text:
+ @Copyright Barrett Adair 2015-2017
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/callable_traits.hpp [3:5]
+ boost/callable_traits/add_member_const.hpp [3:5]
+ boost/callable_traits/add_member_cv.hpp [3:5]
+ boost/callable_traits/add_member_lvalue_reference.hpp [3:5]
+ boost/callable_traits/add_member_rvalue_reference.hpp [3:5]
+ boost/callable_traits/add_member_volatile.hpp [3:5]
+ boost/callable_traits/add_noexcept.hpp [4:6]
+ boost/callable_traits/add_transaction_safe.hpp [4:6]
+ boost/callable_traits/add_varargs.hpp [3:5]
+ boost/callable_traits/apply_member_pointer.hpp [3:5]
+ boost/callable_traits/apply_return.hpp [3:5]
+ boost/callable_traits/args.hpp [3:5]
+ boost/callable_traits/class_of.hpp [3:5]
+ boost/callable_traits/detail/function.hpp [3:5]
+ boost/callable_traits/detail/function_object.hpp [3:5]
+ boost/callable_traits/detail/is_invocable_impl.hpp [4:6]
+ boost/callable_traits/detail/pmd.hpp [3:5]
+ boost/callable_traits/detail/pmf.hpp [3:5]
+ boost/callable_traits/detail/polyfills/disjunction.hpp [2:2]
+ boost/callable_traits/detail/qualifier_flags.hpp [4:6]
+ boost/callable_traits/detail/set_function_qualifiers.hpp [3:5]
+ boost/callable_traits/detail/traits.hpp [3:5]
+ boost/callable_traits/detail/utility.hpp [3:5]
+ boost/callable_traits/function_type.hpp [3:5]
+ boost/callable_traits/has_member_qualifiers.hpp [3:5]
+ boost/callable_traits/has_varargs.hpp [3:5]
+ boost/callable_traits/has_void_return.hpp [3:5]
+ boost/callable_traits/is_const_member.hpp [3:5]
+ boost/callable_traits/is_cv_member.hpp [3:5]
+ boost/callable_traits/is_invocable.hpp [3:5]
+ boost/callable_traits/is_lvalue_reference_member.hpp [3:5]
+ boost/callable_traits/is_noexcept.hpp [4:6]
+ boost/callable_traits/is_reference_member.hpp [3:3]
+ boost/callable_traits/is_rvalue_reference_member.hpp [3:3]
+ boost/callable_traits/is_transaction_safe.hpp [4:6]
+ boost/callable_traits/is_volatile_member.hpp [3:3]
+ boost/callable_traits/qualified_class_of.hpp [3:3]
+ boost/callable_traits/remove_member_const.hpp [3:5]
+ boost/callable_traits/remove_member_cv.hpp [3:3]
+ boost/callable_traits/remove_member_reference.hpp [3:5]
+ boost/callable_traits/remove_member_volatile.hpp [3:5]
+ boost/callable_traits/remove_noexcept.hpp [4:6]
+ boost/callable_traits/remove_transaction_safe.hpp [4:6]
+ boost/callable_traits/remove_varargs.hpp [3:3]
+ boost/callable_traits/return_type.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0363543e4aed1c58c00a8f58244269d4
+BELONGS ya.make
+ License text:
+ // Copyright 2010-2012, D. E. Shaw Research.
+ // All rights reserved.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/random/threefry_engine.hpp [80:81]
+
+KEEP COPYRIGHT_SERVICE_LABEL 037651105b599bc1d49f1042a7b6d202
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+ // Copyright 2015-2018 Antony Polukhin.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll/detail/windows/path_from_handle.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0386cefd02bec3ee844a68ba38b58c68
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/spreadsort/detail/constants.hpp at line 5, boost/sort/spreadsort/detail/float_sort.hpp at line 5, boost/sort/spreadsort/detail/integer_sort.hpp at line 5, boost/sort/spreadsort/detail/spreadsort_common.hpp at line 6, boost/sort/spreadsort/detail/string_sort.hpp at line 5, boost/sort/spreadsort/float_sort.hpp at line 5, boost/sort/spreadsort/integer_sort.hpp at line 5
+ License text:
+ // Copyright Steven J. Ross 2001 - 2014.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/sort/spreadsort/detail/constants.hpp [3:5]
+ boost/sort/spreadsort/detail/float_sort.hpp [3:5]
+ boost/sort/spreadsort/detail/integer_sort.hpp [3:5]
+ boost/sort/spreadsort/detail/spreadsort_common.hpp [4:6]
+ boost/sort/spreadsort/detail/string_sort.hpp [3:5]
+ boost/sort/spreadsort/float_sort.hpp [3:5]
+ boost/sort/spreadsort/integer_sort.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 03af5a3e74f77a31b0cec0862d4d7dd1
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ // Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lambda/algorithm.hpp [2:3]
+ boost/lambda/numeric.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 03b2ff3cf0103db53a801ebd894fc626
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2015, 2016.
+ // Modifications copyright (c) 2015-2016 Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/strategies/intersection_result.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 03e98967798bfa8e7483019102ccfc68
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011
+ // Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/hash_variant.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 03f0e9f3d8aaf581ab71989e093c5e31
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/extreme_points.hpp [3:6]
+ boost/geometry/algorithms/point_on_surface.hpp [3:6]
+ boost/geometry/algorithms/remove_spikes.hpp [3:6]
+ boost/geometry/multi/algorithms/detail/extreme_points.hpp [3:6]
+ boost/geometry/multi/algorithms/remove_spikes.hpp [3:6]
+ boost/geometry/strategies/default_strategy.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 03fc205eb6fb14f22d2d4775df350ecf
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001-2003
+ // William E. Kempf
+ // (C) Copyright 2008-9 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 03fecff746d0d56d59dcf795117b1f46
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/operators.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/operators.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0419fdd63b42fd26712eab44faf73a27
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2008-2009,2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/strict_lock.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 04ade67f404487552a34a699f18fc488
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio.hpp [5:5]
+ boost/asio/associated_allocator.hpp [5:5]
+ boost/asio/associated_executor.hpp [5:5]
+ boost/asio/async_result.hpp [5:5]
+ boost/asio/basic_datagram_socket.hpp [5:5]
+ boost/asio/basic_deadline_timer.hpp [5:5]
+ boost/asio/basic_io_object.hpp [5:5]
+ boost/asio/basic_raw_socket.hpp [5:5]
+ boost/asio/basic_seq_packet_socket.hpp [5:5]
+ boost/asio/basic_serial_port.hpp [5:6]
+ boost/asio/basic_signal_set.hpp [5:5]
+ boost/asio/basic_socket.hpp [5:5]
+ boost/asio/basic_socket_acceptor.hpp [5:5]
+ boost/asio/basic_socket_iostream.hpp [5:5]
+ boost/asio/basic_socket_streambuf.hpp [5:5]
+ boost/asio/basic_stream_socket.hpp [5:5]
+ boost/asio/basic_streambuf.hpp [5:5]
+ boost/asio/basic_streambuf_fwd.hpp [5:5]
+ boost/asio/basic_waitable_timer.hpp [5:5]
+ boost/asio/bind_executor.hpp [5:5]
+ boost/asio/buffer.hpp [5:5]
+ boost/asio/buffered_read_stream.hpp [5:5]
+ boost/asio/buffered_read_stream_fwd.hpp [5:5]
+ boost/asio/buffered_stream.hpp [5:5]
+ boost/asio/buffered_stream_fwd.hpp [5:5]
+ boost/asio/buffered_write_stream.hpp [5:5]
+ boost/asio/buffered_write_stream_fwd.hpp [5:5]
+ boost/asio/buffers_iterator.hpp [5:5]
+ boost/asio/completion_condition.hpp [5:5]
+ boost/asio/connect.hpp [5:5]
+ boost/asio/coroutine.hpp [5:5]
+ boost/asio/datagram_socket_service.hpp [5:5]
+ boost/asio/deadline_timer.hpp [5:5]
+ boost/asio/deadline_timer_service.hpp [5:5]
+ boost/asio/defer.hpp [5:5]
+ boost/asio/detail/array.hpp [5:5]
+ boost/asio/detail/array_fwd.hpp [5:5]
+ boost/asio/detail/assert.hpp [5:5]
+ boost/asio/detail/atomic_count.hpp [5:5]
+ boost/asio/detail/base_from_completion_cond.hpp [5:5]
+ boost/asio/detail/bind_handler.hpp [5:5]
+ boost/asio/detail/buffer_resize_guard.hpp [5:5]
+ boost/asio/detail/buffer_sequence_adapter.hpp [5:5]
+ boost/asio/detail/buffered_stream_storage.hpp [5:5]
+ boost/asio/detail/call_stack.hpp [5:5]
+ boost/asio/detail/chrono.hpp [5:5]
+ boost/asio/detail/chrono_time_traits.hpp [5:5]
+ boost/asio/detail/completion_handler.hpp [5:5]
+ boost/asio/detail/concurrency_hint.hpp [5:5]
+ boost/asio/detail/conditionally_enabled_event.hpp [5:5]
+ boost/asio/detail/conditionally_enabled_mutex.hpp [5:5]
+ boost/asio/detail/config.hpp [5:5]
+ boost/asio/detail/consuming_buffers.hpp [5:5]
+ boost/asio/detail/cstddef.hpp [5:5]
+ boost/asio/detail/cstdint.hpp [5:5]
+ boost/asio/detail/date_time_fwd.hpp [5:5]
+ boost/asio/detail/deadline_timer_service.hpp [5:5]
+ boost/asio/detail/dependent_type.hpp [5:5]
+ boost/asio/detail/descriptor_ops.hpp [5:5]
+ boost/asio/detail/descriptor_read_op.hpp [5:5]
+ boost/asio/detail/descriptor_write_op.hpp [5:5]
+ boost/asio/detail/dev_poll_reactor.hpp [5:5]
+ boost/asio/detail/epoll_reactor.hpp [5:5]
+ boost/asio/detail/event.hpp [5:5]
+ boost/asio/detail/eventfd_select_interrupter.hpp [5:6]
+ boost/asio/detail/executor_op.hpp [5:5]
+ boost/asio/detail/fd_set_adapter.hpp [5:5]
+ boost/asio/detail/fenced_block.hpp [5:5]
+ boost/asio/detail/functional.hpp [5:5]
+ boost/asio/detail/gcc_arm_fenced_block.hpp [5:5]
+ boost/asio/detail/gcc_hppa_fenced_block.hpp [5:5]
+ boost/asio/detail/gcc_sync_fenced_block.hpp [5:5]
+ boost/asio/detail/gcc_x86_fenced_block.hpp [5:5]
+ boost/asio/detail/global.hpp [5:5]
+ boost/asio/detail/handler_alloc_helpers.hpp [5:5]
+ boost/asio/detail/handler_cont_helpers.hpp [5:5]
+ boost/asio/detail/handler_invoke_helpers.hpp [5:5]
+ boost/asio/detail/handler_tracking.hpp [5:5]
+ boost/asio/detail/handler_type_requirements.hpp [5:5]
+ boost/asio/detail/handler_work.hpp [5:5]
+ boost/asio/detail/hash_map.hpp [5:5]
+ boost/asio/detail/impl/buffer_sequence_adapter.ipp [5:5]
+ boost/asio/detail/impl/descriptor_ops.ipp [5:5]
+ boost/asio/detail/impl/dev_poll_reactor.hpp [5:5]
+ boost/asio/detail/impl/dev_poll_reactor.ipp [5:5]
+ boost/asio/detail/impl/epoll_reactor.hpp [5:5]
+ boost/asio/detail/impl/epoll_reactor.ipp [5:5]
+ boost/asio/detail/impl/eventfd_select_interrupter.ipp [5:6]
+ boost/asio/detail/impl/handler_tracking.ipp [5:5]
+ boost/asio/detail/impl/kqueue_reactor.hpp [5:6]
+ boost/asio/detail/impl/kqueue_reactor.ipp [5:6]
+ boost/asio/detail/impl/null_event.ipp [5:5]
+ boost/asio/detail/impl/pipe_select_interrupter.ipp [5:5]
+ boost/asio/detail/impl/posix_event.ipp [5:5]
+ boost/asio/detail/impl/posix_mutex.ipp [5:5]
+ boost/asio/detail/impl/posix_thread.ipp [5:5]
+ boost/asio/detail/impl/posix_tss_ptr.ipp [5:5]
+ boost/asio/detail/impl/reactive_descriptor_service.ipp [5:5]
+ boost/asio/detail/impl/reactive_serial_port_service.ipp [5:6]
+ boost/asio/detail/impl/reactive_socket_service_base.ipp [5:5]
+ boost/asio/detail/impl/resolver_service_base.ipp [5:5]
+ boost/asio/detail/impl/scheduler.ipp [5:5]
+ boost/asio/detail/impl/select_reactor.hpp [5:5]
+ boost/asio/detail/impl/select_reactor.ipp [5:5]
+ boost/asio/detail/impl/service_registry.hpp [5:5]
+ boost/asio/detail/impl/service_registry.ipp [5:5]
+ boost/asio/detail/impl/signal_set_service.ipp [5:5]
+ boost/asio/detail/impl/socket_ops.ipp [5:5]
+ boost/asio/detail/impl/socket_select_interrupter.ipp [5:5]
+ boost/asio/detail/impl/strand_executor_service.hpp [5:5]
+ boost/asio/detail/impl/strand_executor_service.ipp [5:5]
+ boost/asio/detail/impl/strand_service.hpp [5:5]
+ boost/asio/detail/impl/strand_service.ipp [5:5]
+ boost/asio/detail/impl/throw_error.ipp [5:5]
+ boost/asio/detail/impl/timer_queue_ptime.ipp [5:5]
+ boost/asio/detail/impl/timer_queue_set.ipp [5:5]
+ boost/asio/detail/impl/win_event.ipp [5:5]
+ boost/asio/detail/impl/win_iocp_handle_service.ipp [5:6]
+ boost/asio/detail/impl/win_iocp_io_context.hpp [5:5]
+ boost/asio/detail/impl/win_iocp_io_context.ipp [5:5]
+ boost/asio/detail/impl/win_iocp_serial_port_service.ipp [5:6]
+ boost/asio/detail/impl/win_iocp_socket_service_base.ipp [5:5]
+ boost/asio/detail/impl/win_mutex.ipp [5:5]
+ boost/asio/detail/impl/win_object_handle_service.ipp [5:6]
+ boost/asio/detail/impl/win_static_mutex.ipp [5:5]
+ boost/asio/detail/impl/win_thread.ipp [5:5]
+ boost/asio/detail/impl/win_tss_ptr.ipp [5:5]
+ boost/asio/detail/impl/winrt_ssocket_service_base.ipp [5:5]
+ boost/asio/detail/impl/winrt_timer_scheduler.hpp [5:5]
+ boost/asio/detail/impl/winrt_timer_scheduler.ipp [5:5]
+ boost/asio/detail/impl/winsock_init.ipp [5:5]
+ boost/asio/detail/io_control.hpp [5:5]
+ boost/asio/detail/is_buffer_sequence.hpp [5:5]
+ boost/asio/detail/is_executor.hpp [5:5]
+ boost/asio/detail/keyword_tss_ptr.hpp [5:5]
+ boost/asio/detail/kqueue_reactor.hpp [5:6]
+ boost/asio/detail/local_free_on_block_exit.hpp [5:5]
+ boost/asio/detail/macos_fenced_block.hpp [5:5]
+ boost/asio/detail/memory.hpp [5:5]
+ boost/asio/detail/mutex.hpp [5:5]
+ boost/asio/detail/noncopyable.hpp [5:5]
+ boost/asio/detail/null_event.hpp [5:5]
+ boost/asio/detail/null_fenced_block.hpp [5:5]
+ boost/asio/detail/null_global.hpp [5:5]
+ boost/asio/detail/null_mutex.hpp [5:5]
+ boost/asio/detail/null_reactor.hpp [5:5]
+ boost/asio/detail/null_signal_blocker.hpp [5:5]
+ boost/asio/detail/null_socket_service.hpp [5:5]
+ boost/asio/detail/null_static_mutex.hpp [5:5]
+ boost/asio/detail/null_thread.hpp [5:5]
+ boost/asio/detail/null_tss_ptr.hpp [5:5]
+ boost/asio/detail/object_pool.hpp [5:5]
+ boost/asio/detail/old_win_sdk_compat.hpp [5:5]
+ boost/asio/detail/op_queue.hpp [5:5]
+ boost/asio/detail/operation.hpp [5:5]
+ boost/asio/detail/pipe_select_interrupter.hpp [5:5]
+ boost/asio/detail/pop_options.hpp [5:5]
+ boost/asio/detail/posix_event.hpp [5:5]
+ boost/asio/detail/posix_fd_set_adapter.hpp [5:5]
+ boost/asio/detail/posix_global.hpp [5:5]
+ boost/asio/detail/posix_mutex.hpp [5:5]
+ boost/asio/detail/posix_signal_blocker.hpp [5:5]
+ boost/asio/detail/posix_static_mutex.hpp [5:5]
+ boost/asio/detail/posix_thread.hpp [5:5]
+ boost/asio/detail/posix_tss_ptr.hpp [5:5]
+ boost/asio/detail/push_options.hpp [5:5]
+ boost/asio/detail/reactive_descriptor_service.hpp [5:5]
+ boost/asio/detail/reactive_null_buffers_op.hpp [5:5]
+ boost/asio/detail/reactive_serial_port_service.hpp [5:6]
+ boost/asio/detail/reactive_socket_accept_op.hpp [5:5]
+ boost/asio/detail/reactive_socket_connect_op.hpp [5:5]
+ boost/asio/detail/reactive_socket_recv_op.hpp [5:5]
+ boost/asio/detail/reactive_socket_recvfrom_op.hpp [5:5]
+ boost/asio/detail/reactive_socket_recvmsg_op.hpp [5:5]
+ boost/asio/detail/reactive_socket_send_op.hpp [5:5]
+ boost/asio/detail/reactive_socket_sendto_op.hpp [5:5]
+ boost/asio/detail/reactive_socket_service.hpp [5:5]
+ boost/asio/detail/reactive_socket_service_base.hpp [5:5]
+ boost/asio/detail/reactive_wait_op.hpp [5:5]
+ boost/asio/detail/reactor.hpp [5:5]
+ boost/asio/detail/reactor_fwd.hpp [5:5]
+ boost/asio/detail/reactor_op.hpp [5:5]
+ boost/asio/detail/reactor_op_queue.hpp [5:5]
+ boost/asio/detail/recycling_allocator.hpp [5:5]
+ boost/asio/detail/regex_fwd.hpp [5:5]
+ boost/asio/detail/resolve_endpoint_op.hpp [5:5]
+ boost/asio/detail/resolve_op.hpp [5:5]
+ boost/asio/detail/resolve_query_op.hpp [5:5]
+ boost/asio/detail/resolver_service.hpp [5:5]
+ boost/asio/detail/resolver_service_base.hpp [5:5]
+ boost/asio/detail/scheduler.hpp [5:5]
+ boost/asio/detail/scheduler_operation.hpp [5:5]
+ boost/asio/detail/scheduler_thread_info.hpp [5:5]
+ boost/asio/detail/scoped_lock.hpp [5:5]
+ boost/asio/detail/scoped_ptr.hpp [5:5]
+ boost/asio/detail/select_interrupter.hpp [5:5]
+ boost/asio/detail/select_reactor.hpp [5:5]
+ boost/asio/detail/service_registry.hpp [5:5]
+ boost/asio/detail/signal_blocker.hpp [5:5]
+ boost/asio/detail/signal_handler.hpp [5:5]
+ boost/asio/detail/signal_init.hpp [5:5]
+ boost/asio/detail/signal_op.hpp [5:5]
+ boost/asio/detail/signal_set_service.hpp [5:5]
+ boost/asio/detail/socket_holder.hpp [5:5]
+ boost/asio/detail/socket_ops.hpp [5:5]
+ boost/asio/detail/socket_option.hpp [5:5]
+ boost/asio/detail/socket_select_interrupter.hpp [5:5]
+ boost/asio/detail/socket_types.hpp [5:5]
+ boost/asio/detail/solaris_fenced_block.hpp [5:5]
+ boost/asio/detail/static_mutex.hpp [5:5]
+ boost/asio/detail/std_event.hpp [5:5]
+ boost/asio/detail/std_fenced_block.hpp [5:5]
+ boost/asio/detail/std_global.hpp [5:5]
+ boost/asio/detail/std_mutex.hpp [5:5]
+ boost/asio/detail/std_static_mutex.hpp [5:5]
+ boost/asio/detail/std_thread.hpp [5:5]
+ boost/asio/detail/strand_executor_service.hpp [5:5]
+ boost/asio/detail/strand_service.hpp [5:5]
+ boost/asio/detail/string_view.hpp [5:5]
+ boost/asio/detail/thread.hpp [5:5]
+ boost/asio/detail/thread_context.hpp [5:5]
+ boost/asio/detail/thread_group.hpp [5:5]
+ boost/asio/detail/thread_info_base.hpp [5:5]
+ boost/asio/detail/throw_error.hpp [5:5]
+ boost/asio/detail/throw_exception.hpp [5:5]
+ boost/asio/detail/timer_queue.hpp [5:5]
+ boost/asio/detail/timer_queue_base.hpp [5:5]
+ boost/asio/detail/timer_queue_ptime.hpp [5:5]
+ boost/asio/detail/timer_queue_set.hpp [5:5]
+ boost/asio/detail/timer_scheduler.hpp [5:5]
+ boost/asio/detail/timer_scheduler_fwd.hpp [5:5]
+ boost/asio/detail/tss_ptr.hpp [5:5]
+ boost/asio/detail/type_traits.hpp [5:5]
+ boost/asio/detail/variadic_templates.hpp [5:5]
+ boost/asio/detail/wait_handler.hpp [5:5]
+ boost/asio/detail/wait_op.hpp [5:5]
+ boost/asio/detail/win_event.hpp [5:5]
+ boost/asio/detail/win_fd_set_adapter.hpp [5:5]
+ boost/asio/detail/win_fenced_block.hpp [5:5]
+ boost/asio/detail/win_global.hpp [5:5]
+ boost/asio/detail/win_iocp_handle_read_op.hpp [5:6]
+ boost/asio/detail/win_iocp_handle_service.hpp [5:6]
+ boost/asio/detail/win_iocp_handle_write_op.hpp [5:6]
+ boost/asio/detail/win_iocp_io_context.hpp [5:5]
+ boost/asio/detail/win_iocp_null_buffers_op.hpp [5:5]
+ boost/asio/detail/win_iocp_operation.hpp [5:5]
+ boost/asio/detail/win_iocp_overlapped_op.hpp [5:5]
+ boost/asio/detail/win_iocp_overlapped_ptr.hpp [5:5]
+ boost/asio/detail/win_iocp_serial_port_service.hpp [5:6]
+ boost/asio/detail/win_iocp_socket_accept_op.hpp [5:5]
+ boost/asio/detail/win_iocp_socket_connect_op.hpp [5:5]
+ boost/asio/detail/win_iocp_socket_recv_op.hpp [5:5]
+ boost/asio/detail/win_iocp_socket_recvfrom_op.hpp [5:5]
+ boost/asio/detail/win_iocp_socket_recvmsg_op.hpp [5:5]
+ boost/asio/detail/win_iocp_socket_send_op.hpp [5:5]
+ boost/asio/detail/win_iocp_socket_service.hpp [5:5]
+ boost/asio/detail/win_iocp_socket_service_base.hpp [5:5]
+ boost/asio/detail/win_iocp_thread_info.hpp [5:5]
+ boost/asio/detail/win_iocp_wait_op.hpp [5:5]
+ boost/asio/detail/win_mutex.hpp [5:5]
+ boost/asio/detail/win_object_handle_service.hpp [5:6]
+ boost/asio/detail/win_static_mutex.hpp [5:5]
+ boost/asio/detail/win_thread.hpp [5:5]
+ boost/asio/detail/win_tss_ptr.hpp [5:5]
+ boost/asio/detail/winapp_thread.hpp [5:5]
+ boost/asio/detail/wince_thread.hpp [5:5]
+ boost/asio/detail/winrt_async_manager.hpp [5:5]
+ boost/asio/detail/winrt_async_op.hpp [5:5]
+ boost/asio/detail/winrt_resolve_op.hpp [5:5]
+ boost/asio/detail/winrt_resolver_service.hpp [5:5]
+ boost/asio/detail/winrt_socket_connect_op.hpp [5:5]
+ boost/asio/detail/winrt_socket_recv_op.hpp [5:5]
+ boost/asio/detail/winrt_socket_send_op.hpp [5:5]
+ boost/asio/detail/winrt_ssocket_service.hpp [5:5]
+ boost/asio/detail/winrt_ssocket_service_base.hpp [5:5]
+ boost/asio/detail/winrt_timer_scheduler.hpp [5:5]
+ boost/asio/detail/winrt_utils.hpp [5:5]
+ boost/asio/detail/winsock_init.hpp [5:5]
+ boost/asio/detail/work_dispatcher.hpp [5:5]
+ boost/asio/detail/wrapped_handler.hpp [5:5]
+ boost/asio/dispatch.hpp [5:5]
+ boost/asio/error.hpp [5:5]
+ boost/asio/execution_context.hpp [5:5]
+ boost/asio/executor.hpp [5:5]
+ boost/asio/executor_work_guard.hpp [5:5]
+ boost/asio/experimental/co_spawn.hpp [5:5]
+ boost/asio/experimental/detached.hpp [5:5]
+ boost/asio/experimental/impl/co_spawn.hpp [5:5]
+ boost/asio/experimental/impl/detached.hpp [5:5]
+ boost/asio/experimental/impl/redirect_error.hpp [5:5]
+ boost/asio/experimental/redirect_error.hpp [5:5]
+ boost/asio/generic/basic_endpoint.hpp [5:5]
+ boost/asio/generic/datagram_protocol.hpp [5:5]
+ boost/asio/generic/detail/endpoint.hpp [5:5]
+ boost/asio/generic/detail/impl/endpoint.ipp [5:5]
+ boost/asio/generic/raw_protocol.hpp [5:5]
+ boost/asio/generic/seq_packet_protocol.hpp [5:5]
+ boost/asio/generic/stream_protocol.hpp [5:5]
+ boost/asio/handler_alloc_hook.hpp [5:5]
+ boost/asio/handler_continuation_hook.hpp [5:5]
+ boost/asio/handler_invoke_hook.hpp [5:5]
+ boost/asio/handler_type.hpp [5:5]
+ boost/asio/high_resolution_timer.hpp [5:5]
+ boost/asio/impl/buffered_read_stream.hpp [5:5]
+ boost/asio/impl/buffered_write_stream.hpp [5:5]
+ boost/asio/impl/connect.hpp [5:5]
+ boost/asio/impl/defer.hpp [5:5]
+ boost/asio/impl/dispatch.hpp [5:5]
+ boost/asio/impl/error.ipp [5:5]
+ boost/asio/impl/execution_context.hpp [5:5]
+ boost/asio/impl/execution_context.ipp [5:5]
+ boost/asio/impl/executor.hpp [5:5]
+ boost/asio/impl/executor.ipp [5:5]
+ boost/asio/impl/handler_alloc_hook.ipp [5:5]
+ boost/asio/impl/io_context.hpp [5:5]
+ boost/asio/impl/io_context.ipp [5:5]
+ boost/asio/impl/post.hpp [5:5]
+ boost/asio/impl/read.hpp [5:5]
+ boost/asio/impl/read_at.hpp [5:5]
+ boost/asio/impl/read_until.hpp [5:5]
+ boost/asio/impl/serial_port_base.hpp [5:6]
+ boost/asio/impl/serial_port_base.ipp [5:6]
+ boost/asio/impl/spawn.hpp [5:5]
+ boost/asio/impl/src.cpp [5:5]
+ boost/asio/impl/src.hpp [5:5]
+ boost/asio/impl/system_context.hpp [5:5]
+ boost/asio/impl/system_context.ipp [5:5]
+ boost/asio/impl/system_executor.hpp [5:5]
+ boost/asio/impl/thread_pool.hpp [5:5]
+ boost/asio/impl/thread_pool.ipp [5:5]
+ boost/asio/impl/use_future.hpp [5:5]
+ boost/asio/impl/write.hpp [5:5]
+ boost/asio/impl/write_at.hpp [5:5]
+ boost/asio/io_context.hpp [5:5]
+ boost/asio/io_context_strand.hpp [5:5]
+ boost/asio/io_service.hpp [5:5]
+ boost/asio/io_service_strand.hpp [5:5]
+ boost/asio/ip/address.hpp [5:5]
+ boost/asio/ip/address_v4.hpp [5:5]
+ boost/asio/ip/address_v4_iterator.hpp [5:5]
+ boost/asio/ip/address_v4_range.hpp [5:5]
+ boost/asio/ip/address_v6.hpp [5:5]
+ boost/asio/ip/address_v6_iterator.hpp [5:6]
+ boost/asio/ip/address_v6_range.hpp [5:6]
+ boost/asio/ip/bad_address_cast.hpp [5:5]
+ boost/asio/ip/basic_endpoint.hpp [5:5]
+ boost/asio/ip/basic_resolver.hpp [5:5]
+ boost/asio/ip/basic_resolver_entry.hpp [5:5]
+ boost/asio/ip/basic_resolver_iterator.hpp [5:5]
+ boost/asio/ip/basic_resolver_query.hpp [5:5]
+ boost/asio/ip/basic_resolver_results.hpp [5:5]
+ boost/asio/ip/detail/endpoint.hpp [5:5]
+ boost/asio/ip/detail/impl/endpoint.ipp [5:5]
+ boost/asio/ip/detail/socket_option.hpp [5:5]
+ boost/asio/ip/host_name.hpp [5:5]
+ boost/asio/ip/icmp.hpp [5:5]
+ boost/asio/ip/impl/address.hpp [5:5]
+ boost/asio/ip/impl/address.ipp [5:5]
+ boost/asio/ip/impl/address_v4.hpp [5:5]
+ boost/asio/ip/impl/address_v4.ipp [5:5]
+ boost/asio/ip/impl/address_v6.hpp [5:5]
+ boost/asio/ip/impl/address_v6.ipp [5:5]
+ boost/asio/ip/impl/basic_endpoint.hpp [5:5]
+ boost/asio/ip/impl/host_name.ipp [5:5]
+ boost/asio/ip/impl/network_v4.hpp [5:6]
+ boost/asio/ip/impl/network_v4.ipp [5:6]
+ boost/asio/ip/impl/network_v6.hpp [5:5]
+ boost/asio/ip/impl/network_v6.ipp [5:6]
+ boost/asio/ip/multicast.hpp [5:5]
+ boost/asio/ip/network_v4.hpp [5:6]
+ boost/asio/ip/network_v6.hpp [5:6]
+ boost/asio/ip/resolver_base.hpp [5:5]
+ boost/asio/ip/resolver_query_base.hpp [5:5]
+ boost/asio/ip/resolver_service.hpp [5:5]
+ boost/asio/ip/tcp.hpp [5:5]
+ boost/asio/ip/udp.hpp [5:5]
+ boost/asio/ip/unicast.hpp [5:5]
+ boost/asio/ip/v6_only.hpp [5:5]
+ boost/asio/is_executor.hpp [5:5]
+ boost/asio/is_read_buffered.hpp [5:5]
+ boost/asio/is_write_buffered.hpp [5:5]
+ boost/asio/local/basic_endpoint.hpp [5:6]
+ boost/asio/local/connect_pair.hpp [5:5]
+ boost/asio/local/datagram_protocol.hpp [5:5]
+ boost/asio/local/detail/endpoint.hpp [5:6]
+ boost/asio/local/detail/impl/endpoint.ipp [5:6]
+ boost/asio/local/stream_protocol.hpp [5:5]
+ boost/asio/packaged_task.hpp [5:5]
+ boost/asio/placeholders.hpp [5:5]
+ boost/asio/posix/basic_descriptor.hpp [5:5]
+ boost/asio/posix/basic_stream_descriptor.hpp [5:5]
+ boost/asio/posix/descriptor.hpp [5:5]
+ boost/asio/posix/descriptor_base.hpp [5:5]
+ boost/asio/posix/stream_descriptor.hpp [5:5]
+ boost/asio/posix/stream_descriptor_service.hpp [5:5]
+ boost/asio/post.hpp [5:5]
+ boost/asio/raw_socket_service.hpp [5:5]
+ boost/asio/read.hpp [5:5]
+ boost/asio/read_at.hpp [5:5]
+ boost/asio/read_until.hpp [5:5]
+ boost/asio/seq_packet_socket_service.hpp [5:5]
+ boost/asio/serial_port.hpp [5:6]
+ boost/asio/serial_port_base.hpp [5:6]
+ boost/asio/serial_port_service.hpp [5:5]
+ boost/asio/signal_set.hpp [5:5]
+ boost/asio/signal_set_service.hpp [5:5]
+ boost/asio/socket_acceptor_service.hpp [5:5]
+ boost/asio/socket_base.hpp [5:5]
+ boost/asio/spawn.hpp [5:5]
+ boost/asio/ssl.hpp [5:5]
+ boost/asio/ssl/context.hpp [5:5]
+ boost/asio/ssl/context_base.hpp [5:5]
+ boost/asio/ssl/detail/buffered_handshake_op.hpp [5:5]
+ boost/asio/ssl/detail/engine.hpp [5:5]
+ boost/asio/ssl/detail/handshake_op.hpp [5:5]
+ boost/asio/ssl/detail/impl/engine.ipp [5:5]
+ boost/asio/ssl/detail/io.hpp [5:5]
+ boost/asio/ssl/detail/openssl_init.hpp [5:5]
+ boost/asio/ssl/detail/openssl_types.hpp [5:5]
+ boost/asio/ssl/detail/password_callback.hpp [5:5]
+ boost/asio/ssl/detail/read_op.hpp [5:5]
+ boost/asio/ssl/detail/shutdown_op.hpp [5:5]
+ boost/asio/ssl/detail/stream_core.hpp [5:5]
+ boost/asio/ssl/detail/verify_callback.hpp [5:5]
+ boost/asio/ssl/detail/write_op.hpp [5:5]
+ boost/asio/ssl/error.hpp [5:5]
+ boost/asio/ssl/impl/error.ipp [5:5]
+ boost/asio/ssl/impl/rfc2818_verification.ipp [5:5]
+ boost/asio/ssl/impl/src.hpp [5:5]
+ boost/asio/ssl/rfc2818_verification.hpp [5:5]
+ boost/asio/ssl/stream.hpp [5:5]
+ boost/asio/ssl/stream_base.hpp [5:5]
+ boost/asio/ssl/verify_context.hpp [5:5]
+ boost/asio/ssl/verify_mode.hpp [5:5]
+ boost/asio/steady_timer.hpp [5:5]
+ boost/asio/strand.hpp [5:5]
+ boost/asio/stream_socket_service.hpp [5:5]
+ boost/asio/streambuf.hpp [5:5]
+ boost/asio/system_context.hpp [5:5]
+ boost/asio/system_executor.hpp [5:5]
+ boost/asio/system_timer.hpp [5:5]
+ boost/asio/thread_pool.hpp [5:5]
+ boost/asio/time_traits.hpp [5:5]
+ boost/asio/ts/buffer.hpp [5:5]
+ boost/asio/ts/executor.hpp [5:5]
+ boost/asio/ts/internet.hpp [5:5]
+ boost/asio/ts/io_context.hpp [5:5]
+ boost/asio/ts/net.hpp [5:5]
+ boost/asio/ts/netfwd.hpp [5:5]
+ boost/asio/ts/socket.hpp [5:5]
+ boost/asio/ts/timer.hpp [5:5]
+ boost/asio/unyield.hpp [5:5]
+ boost/asio/use_future.hpp [5:5]
+ boost/asio/uses_executor.hpp [5:5]
+ boost/asio/version.hpp [5:5]
+ boost/asio/wait_traits.hpp [5:5]
+ boost/asio/waitable_timer_service.hpp [5:5]
+ boost/asio/windows/basic_handle.hpp [5:5]
+ boost/asio/windows/basic_object_handle.hpp [5:6]
+ boost/asio/windows/basic_random_access_handle.hpp [5:5]
+ boost/asio/windows/basic_stream_handle.hpp [5:5]
+ boost/asio/windows/object_handle.hpp [5:6]
+ boost/asio/windows/object_handle_service.hpp [5:6]
+ boost/asio/windows/overlapped_handle.hpp [5:5]
+ boost/asio/windows/overlapped_ptr.hpp [5:5]
+ boost/asio/windows/random_access_handle.hpp [5:5]
+ boost/asio/windows/random_access_handle_service.hpp [5:5]
+ boost/asio/windows/stream_handle.hpp [5:5]
+ boost/asio/windows/stream_handle_service.hpp [5:5]
+ boost/asio/write.hpp [5:5]
+ boost/asio/write_at.hpp [5:5]
+ boost/asio/yield.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 04c0ce13b53ae65fb4aacbc3f256260b
+BELONGS libs/thread/ya.make ya.make
+ License text:
+ // Copyright (C) 2002-2003
+ // David Moore, William E. Kempf
+ // Copyright (C) 2007-8 Anthony Williams
+ // (C) Copyright 2013 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/barrier.hpp [1:4]
+ boost/thread/xtime.hpp [1:3]
+ libs/thread/src/pthread/thread.cpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 04cecc1df68d72027d7355d714a17662
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017, Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/epsg.hpp [3:4]
+ boost/geometry/srs/esri.hpp [3:4]
+ boost/geometry/srs/iau2000.hpp [3:4]
+ boost/geometry/srs/projections/code.hpp [3:4]
+ boost/geometry/srs/projections/epsg_params.hpp [3:4]
+ boost/geometry/srs/projections/esri.hpp [3:4]
+ boost/geometry/srs/projections/esri_params.hpp [3:4]
+ boost/geometry/srs/projections/iau2000.hpp [3:4]
+ boost/geometry/srs/projections/iau2000_params.hpp [3:4]
+ boost/geometry/srs/projections/proj4.hpp [3:4]
+ boost/geometry/srs/projections/srid_traits.hpp [3:4]
+ boost/geometry/srs/transformation.hpp [3:4]
+ boost/geometry/strategies/densify.hpp [3:3]
+ boost/geometry/strategies/disjoint.hpp [3:5]
+ boost/geometry/strategies/geographic/parameters.hpp [3:4]
+ boost/geometry/strategies/relate.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 050be61242b0e0219d0b0f3ddd65a898
+BELONGS libs/container/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/allocator_version_traits.hpp at line 5, boost/container/throw_exception.hpp at line 5, boost/interprocess/sync/detail/common_algorithms.hpp at line 5, libs/container/src/alloc_lib.c at line 5, libs/container/src/dlmalloc.cpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/allocator_version_traits.hpp [3:5]
+ boost/container/throw_exception.hpp [3:5]
+ boost/interprocess/sync/detail/common_algorithms.hpp [3:5]
+ libs/container/src/alloc_lib.c [3:5]
+ libs/container/src/dlmalloc.cpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 05315046bb027181af9335ba79128e08
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute.hpp [2:2]
+ boost/compute/algorithm.hpp [2:2]
+ boost/compute/algorithm/accumulate.hpp [2:2]
+ boost/compute/algorithm/all_of.hpp [2:2]
+ boost/compute/algorithm/any_of.hpp [2:2]
+ boost/compute/algorithm/binary_search.hpp [2:2]
+ boost/compute/algorithm/copy.hpp [2:2]
+ boost/compute/algorithm/copy_if.hpp [2:2]
+ boost/compute/algorithm/copy_n.hpp [2:2]
+ boost/compute/algorithm/count.hpp [2:2]
+ boost/compute/algorithm/count_if.hpp [2:2]
+ boost/compute/algorithm/detail/copy_on_device.hpp [2:2]
+ boost/compute/algorithm/detail/copy_to_device.hpp [2:2]
+ boost/compute/algorithm/detail/copy_to_host.hpp [2:2]
+ boost/compute/algorithm/detail/count_if_with_ballot.hpp [2:2]
+ boost/compute/algorithm/detail/count_if_with_reduce.hpp [2:2]
+ boost/compute/algorithm/detail/count_if_with_threads.hpp [2:2]
+ boost/compute/algorithm/detail/find_extrema.hpp [2:2]
+ boost/compute/algorithm/detail/find_extrema_with_atomics.hpp [2:2]
+ boost/compute/algorithm/detail/find_if_with_atomics.hpp [2:2]
+ boost/compute/algorithm/detail/inplace_reduce.hpp [2:2]
+ boost/compute/algorithm/detail/insertion_sort.hpp [2:2]
+ boost/compute/algorithm/detail/radix_sort.hpp [2:2]
+ boost/compute/algorithm/detail/random_fill.hpp [2:2]
+ boost/compute/algorithm/detail/reduce_on_gpu.hpp [2:2]
+ boost/compute/algorithm/detail/scan.hpp [2:2]
+ boost/compute/algorithm/detail/scan_on_gpu.hpp [2:2]
+ boost/compute/algorithm/detail/serial_accumulate.hpp [2:2]
+ boost/compute/algorithm/detail/serial_count_if.hpp [2:2]
+ boost/compute/algorithm/detail/serial_find_extrema.hpp [2:2]
+ boost/compute/algorithm/detail/serial_merge.hpp [2:2]
+ boost/compute/algorithm/detail/serial_reduce.hpp [2:2]
+ boost/compute/algorithm/detail/serial_scan.hpp [2:2]
+ boost/compute/algorithm/equal.hpp [2:2]
+ boost/compute/algorithm/equal_range.hpp [2:2]
+ boost/compute/algorithm/exclusive_scan.hpp [2:2]
+ boost/compute/algorithm/fill.hpp [2:2]
+ boost/compute/algorithm/fill_n.hpp [2:2]
+ boost/compute/algorithm/find.hpp [2:2]
+ boost/compute/algorithm/find_if.hpp [2:2]
+ boost/compute/algorithm/find_if_not.hpp [2:2]
+ boost/compute/algorithm/for_each.hpp [2:2]
+ boost/compute/algorithm/gather.hpp [2:2]
+ boost/compute/algorithm/generate.hpp [2:2]
+ boost/compute/algorithm/generate_n.hpp [2:2]
+ boost/compute/algorithm/inclusive_scan.hpp [2:2]
+ boost/compute/algorithm/inner_product.hpp [2:2]
+ boost/compute/algorithm/inplace_merge.hpp [2:2]
+ boost/compute/algorithm/iota.hpp [2:2]
+ boost/compute/algorithm/is_partitioned.hpp [2:2]
+ boost/compute/algorithm/lower_bound.hpp [2:2]
+ boost/compute/algorithm/max_element.hpp [2:2]
+ boost/compute/algorithm/merge.hpp [2:2]
+ boost/compute/algorithm/min_element.hpp [2:2]
+ boost/compute/algorithm/minmax_element.hpp [2:2]
+ boost/compute/algorithm/mismatch.hpp [2:2]
+ boost/compute/algorithm/none_of.hpp [2:2]
+ boost/compute/algorithm/nth_element.hpp [2:2]
+ boost/compute/algorithm/partial_sum.hpp [2:2]
+ boost/compute/algorithm/partition.hpp [2:2]
+ boost/compute/algorithm/partition_copy.hpp [2:2]
+ boost/compute/algorithm/random_shuffle.hpp [2:2]
+ boost/compute/algorithm/reduce.hpp [2:2]
+ boost/compute/algorithm/remove.hpp [2:2]
+ boost/compute/algorithm/remove_if.hpp [2:2]
+ boost/compute/algorithm/replace.hpp [2:2]
+ boost/compute/algorithm/replace_copy.hpp [2:2]
+ boost/compute/algorithm/reverse.hpp [2:2]
+ boost/compute/algorithm/reverse_copy.hpp [2:2]
+ boost/compute/algorithm/scatter.hpp [2:2]
+ boost/compute/algorithm/sort.hpp [2:2]
+ boost/compute/algorithm/sort_by_key.hpp [2:2]
+ boost/compute/algorithm/stable_sort.hpp [2:2]
+ boost/compute/algorithm/swap_ranges.hpp [2:2]
+ boost/compute/algorithm/transform.hpp [2:2]
+ boost/compute/algorithm/transform_reduce.hpp [2:2]
+ boost/compute/algorithm/upper_bound.hpp [2:2]
+ boost/compute/async.hpp [2:2]
+ boost/compute/async/future.hpp [2:2]
+ boost/compute/buffer.hpp [2:2]
+ boost/compute/cl.hpp [2:2]
+ boost/compute/cl_ext.hpp [2:2]
+ boost/compute/command_queue.hpp [2:2]
+ boost/compute/config.hpp [2:2]
+ boost/compute/container.hpp [2:2]
+ boost/compute/container/array.hpp [2:2]
+ boost/compute/container/basic_string.hpp [2:2]
+ boost/compute/container/detail/scalar.hpp [2:2]
+ boost/compute/container/flat_map.hpp [2:2]
+ boost/compute/container/flat_set.hpp [2:2]
+ boost/compute/container/stack.hpp [2:2]
+ boost/compute/container/string.hpp [2:2]
+ boost/compute/container/valarray.hpp [2:2]
+ boost/compute/container/vector.hpp [2:2]
+ boost/compute/context.hpp [2:2]
+ boost/compute/detail/assert_cl_success.hpp [2:2]
+ boost/compute/detail/buffer_value.hpp [2:2]
+ boost/compute/detail/device_ptr.hpp [2:2]
+ boost/compute/detail/is_buffer_iterator.hpp [2:2]
+ boost/compute/detail/is_contiguous_iterator.hpp [2:2]
+ boost/compute/detail/iterator_plus_distance.hpp [2:2]
+ boost/compute/detail/iterator_range_size.hpp [2:2]
+ boost/compute/detail/iterator_traits.hpp [2:2]
+ boost/compute/detail/lru_cache.hpp [2:2]
+ boost/compute/detail/meta_kernel.hpp [2:2]
+ boost/compute/detail/mpl_vector_to_tuple.hpp [2:2]
+ boost/compute/detail/print_range.hpp [2:2]
+ boost/compute/detail/read_write_single_value.hpp [2:2]
+ boost/compute/device.hpp [2:2]
+ boost/compute/event.hpp [2:2]
+ boost/compute/exception.hpp [2:2]
+ boost/compute/exception/context_error.hpp [2:2]
+ boost/compute/exception/opencl_error.hpp [2:2]
+ boost/compute/experimental/clamp_range.hpp [2:2]
+ boost/compute/experimental/malloc.hpp [2:2]
+ boost/compute/experimental/sort_by_transform.hpp [2:2]
+ boost/compute/experimental/tabulate.hpp [2:2]
+ boost/compute/function.hpp [2:2]
+ boost/compute/functional.hpp [2:2]
+ boost/compute/functional/as.hpp [2:2]
+ boost/compute/functional/atomic.hpp [2:2]
+ boost/compute/functional/common.hpp [2:2]
+ boost/compute/functional/convert.hpp [2:2]
+ boost/compute/functional/detail/macros.hpp [2:2]
+ boost/compute/functional/detail/nvidia_ballot.hpp [2:2]
+ boost/compute/functional/detail/nvidia_popcount.hpp [2:2]
+ boost/compute/functional/detail/unpack.hpp [2:2]
+ boost/compute/functional/field.hpp [2:2]
+ boost/compute/functional/geometry.hpp [2:2]
+ boost/compute/functional/get.hpp [2:2]
+ boost/compute/functional/integer.hpp [2:2]
+ boost/compute/functional/logical.hpp [2:2]
+ boost/compute/functional/math.hpp [2:2]
+ boost/compute/functional/operator.hpp [2:2]
+ boost/compute/functional/relational.hpp [2:2]
+ boost/compute/iterator.hpp [2:2]
+ boost/compute/iterator/buffer_iterator.hpp [2:2]
+ boost/compute/iterator/constant_buffer_iterator.hpp [2:2]
+ boost/compute/iterator/constant_iterator.hpp [2:2]
+ boost/compute/iterator/counting_iterator.hpp [2:2]
+ boost/compute/iterator/detail/get_base_iterator_buffer.hpp [2:2]
+ boost/compute/iterator/detail/swizzle_iterator.hpp [2:2]
+ boost/compute/iterator/function_input_iterator.hpp [2:2]
+ boost/compute/iterator/permutation_iterator.hpp [2:2]
+ boost/compute/iterator/transform_iterator.hpp [2:2]
+ boost/compute/iterator/zip_iterator.hpp [2:2]
+ boost/compute/kernel.hpp [2:2]
+ boost/compute/lambda.hpp [2:2]
+ boost/compute/lambda/context.hpp [2:2]
+ boost/compute/lambda/functional.hpp [2:2]
+ boost/compute/lambda/placeholders.hpp [2:2]
+ boost/compute/lambda/result_of.hpp [2:2]
+ boost/compute/memory_object.hpp [2:2]
+ boost/compute/platform.hpp [2:2]
+ boost/compute/program.hpp [2:2]
+ boost/compute/random.hpp [2:2]
+ boost/compute/random/default_random_engine.hpp [2:2]
+ boost/compute/random/mersenne_twister_engine.hpp [2:2]
+ boost/compute/random/uniform_real_distribution.hpp [2:2]
+ boost/compute/system.hpp [2:2]
+ boost/compute/type_traits.hpp [2:2]
+ boost/compute/type_traits/common_type.hpp [2:2]
+ boost/compute/type_traits/is_vector_type.hpp [2:2]
+ boost/compute/type_traits/make_vector_type.hpp [2:2]
+ boost/compute/type_traits/scalar_type.hpp [2:2]
+ boost/compute/type_traits/type_name.hpp [2:2]
+ boost/compute/type_traits/vector_size.hpp [2:2]
+ boost/compute/types.hpp [2:2]
+ boost/compute/types/complex.hpp [2:2]
+ boost/compute/types/pair.hpp [2:2]
+ boost/compute/types/tuple.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 054553d0fbd7cb00c6d1e840b41b53ac
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2015 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/extra_ops_gcc_x86.hpp [6:6]
+ boost/atomic/detail/extra_ops_generic.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 057fa7d33dfe57ec2b0718b45c7b3317
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/error/unpaired.hpp at line 6, boost/metaparse/fail_at_first_char_expected.hpp at line 6, boost/metaparse/foldl_reject_incomplete.hpp at line 6, boost/metaparse/foldl_reject_incomplete1.hpp at line 6, boost/metaparse/foldl_reject_incomplete_start_with_parser.hpp at line 6, boost/metaparse/foldr_reject_incomplete.hpp at line 6, boost/metaparse/foldr_reject_incomplete1.hpp at line 6, boost/metaparse/optional.hpp at line 6, boost/metaparse/repeated_reject_incomplete.hpp at line 6, boost/metaparse/repeated_reject_incomplete1.hpp at line 6, boost/metaparse/sequence_apply.hpp at line 6, boost/metaparse/transform_error.hpp at line 6, boost/metaparse/transform_error_message.hpp at line 6, boost/metaparse/v1/error/expected_to_fail.hpp at line 6, boost/metaparse/v1/error/unpaired.hpp at line 6, boost/metaparse/v1/fail_at_first_char_expected.hpp at line 6, boost/metaparse/v1/foldl_reject_incomplete.hpp at line 6, boost/metaparse/v1/foldl_reject_incomplete1.hpp at line 6, boost/metaparse/v1/foldl_reject_incomplete_start_with_parser.hpp at line 6, boost/metaparse/v1/foldr_reject_incomplete.hpp at line 6, boost/metaparse/v1/foldr_reject_incomplete1.hpp at line 6, boost/metaparse/v1/impl/back_inserter.hpp at line 6, boost/metaparse/v1/impl/front_inserter.hpp at line 6, boost/metaparse/v1/impl/is_char_c.hpp at line 6, boost/metaparse/v1/impl/later_result.hpp at line 6, boost/metaparse/v1/impl/next_digit.hpp at line 6, boost/metaparse/v1/impl/one_of_fwd_op.hpp at line 6, boost/metaparse/v1/impl/void_.hpp at line 6, boost/metaparse/v1/optional.hpp at line 6, boost/metaparse/v1/repeated_reject_incomplete.hpp at line 6, boost/metaparse/v1/repeated_reject_incomplete1.hpp at line 6, boost/metaparse/v1/sequence_apply.hpp at line 6, boost/metaparse/v1/swap.hpp at line 6, boost/metaparse/v1/transform_error.hpp at line 6, boost/metaparse/v1/transform_error_message.hpp at line 6, boost/metaparse/version.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2015.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/error/unpaired.hpp [4:6]
+ boost/metaparse/fail_at_first_char_expected.hpp [4:6]
+ boost/metaparse/foldl_reject_incomplete.hpp [4:6]
+ boost/metaparse/foldl_reject_incomplete1.hpp [4:6]
+ boost/metaparse/foldl_reject_incomplete_start_with_parser.hpp [4:6]
+ boost/metaparse/foldr_reject_incomplete.hpp [4:6]
+ boost/metaparse/foldr_reject_incomplete1.hpp [4:6]
+ boost/metaparse/optional.hpp [4:6]
+ boost/metaparse/repeated_reject_incomplete.hpp [4:6]
+ boost/metaparse/repeated_reject_incomplete1.hpp [4:6]
+ boost/metaparse/sequence_apply.hpp [4:6]
+ boost/metaparse/transform_error.hpp [4:6]
+ boost/metaparse/transform_error_message.hpp [4:6]
+ boost/metaparse/v1/error/expected_to_fail.hpp [4:6]
+ boost/metaparse/v1/error/unpaired.hpp [4:6]
+ boost/metaparse/v1/fail_at_first_char_expected.hpp [4:6]
+ boost/metaparse/v1/foldl_reject_incomplete.hpp [4:6]
+ boost/metaparse/v1/foldl_reject_incomplete1.hpp [4:6]
+ boost/metaparse/v1/foldl_reject_incomplete_start_with_parser.hpp [4:6]
+ boost/metaparse/v1/foldr_reject_incomplete.hpp [4:6]
+ boost/metaparse/v1/foldr_reject_incomplete1.hpp [4:6]
+ boost/metaparse/v1/impl/back_inserter.hpp [4:6]
+ boost/metaparse/v1/impl/front_inserter.hpp [4:6]
+ boost/metaparse/v1/impl/is_char_c.hpp [4:6]
+ boost/metaparse/v1/impl/later_result.hpp [4:6]
+ boost/metaparse/v1/impl/next_digit.hpp [4:6]
+ boost/metaparse/v1/impl/one_of_fwd_op.hpp [4:6]
+ boost/metaparse/v1/impl/void_.hpp [4:6]
+ boost/metaparse/v1/optional.hpp [4:6]
+ boost/metaparse/v1/repeated_reject_incomplete.hpp [4:6]
+ boost/metaparse/v1/repeated_reject_incomplete1.hpp [4:6]
+ boost/metaparse/v1/sequence_apply.hpp [4:6]
+ boost/metaparse/v1/swap.hpp [4:6]
+ boost/metaparse/v1/transform_error.hpp [4:6]
+ boost/metaparse/v1/transform_error_message.hpp [4:6]
+ boost/metaparse/version.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0592d773c67a9f16004eb64838cdbaa8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/platform/cloudabi.h at line 4, boost/winapi/bcrypt.hpp at line 4, boost/winapi/config.hpp at line 4, boost/winapi/file_management.hpp at line 4, boost/winapi/file_mapping.hpp at line 4, boost/winapi/wait.hpp at line 4
+ License text:
+ Copyright 2017 James E. King, III
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/platform/cloudabi.h [2:4]
+ boost/winapi/bcrypt.hpp [2:2]
+ boost/winapi/config.hpp [2:3]
+ boost/winapi/file_management.hpp [2:5]
+ boost/winapi/file_mapping.hpp [2:5]
+ boost/winapi/wait.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 059623504befbc01814eabacf56f307c
+BELONGS ya.make
+ License text:
+ Copyright (c) 2016 Lee Clagett
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/support/detail/and.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 05adeceb37523fe0339d6f28b148cbe2
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2013 Ruslan Baratov
+ // Copyright (C) 2014 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/csbl/memory/shared_ptr.hpp [1:1]
+ boost/thread/executors/detail/priority_executor_base.hpp [1:2]
+ boost/thread/executors/generic_executor_ref.hpp [1:1]
+ boost/thread/executors/inline_executor.hpp [1:1]
+ boost/thread/executors/scheduled_thread_pool.hpp [1:2]
+ boost/thread/executors/scheduler.hpp [1:1]
+ boost/thread/executors/scheduling_adaptor.hpp [1:2]
+ boost/thread/executors/thread_executor.hpp [1:1]
+ boost/thread/with_lock_guard.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 05dea3cd629cf8ef88336fe0f07b458f
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2010, 2012.
+ // Copyright Paul A. Bristow 2011, 2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/constants/calculate_constants.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 05fd399cf249e99987c204a65eb75fba
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/special_functions/pow.hpp at line 6
+ License text:
+ // (C) Copyright Bruno Lalande 2008.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/pow.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 060d1c9a659248da572c61c592f7de28
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ Copyright (c) 2011 Bryce Lelbach
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/actor/ref_value_actor.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 061ba44b1c5a3d022ff7ae16bcd93f16
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2009 Daniel Nuffer
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/char_set/basic_chset.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 06270473adb0db5611666795418a7a03
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/io_fwd.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/io_fwd.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0629dfc80f2e34347ae3527a5b97c05b
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2014, 2016, 2017.
+ // Modifications copyright (c) 2014-2017, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/azimuth.hpp [5:6]
+ boost/geometry/algorithms/detail/intersection/interface.hpp [5:6]
+ boost/geometry/strategies/cartesian/intersection.hpp [6:7]
+ boost/geometry/strategies/spherical/distance_cross_track.hpp [5:6]
+ boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp [7:8]
+ boost/geometry/strategies/spherical/side_by_cross_track.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 063415ea5f4f1d2813797e674bb69bb4
+BELONGS ya.make
+ License text:
+ // Copyright (C) Christof Meerwald 2003
+ // Copyright (C) Dan Watkins 2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/digitalmars.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 063981378c5a34322f72710962459da2
+BELONGS ya.make
+ License text:
+ // Copyright 2005, 2014 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_interlocked.hpp [13:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0654c59b9150c6a73ad14057713552bf
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2015.
+ // Modifications copyright (c) 2015 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/overlay/clip_linestring.hpp [5:6]
+ boost/geometry/strategies/cartesian/centroid_average.hpp [8:9]
+ boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp [7:8]
+ boost/geometry/strategies/strategy_transform.hpp [7:8]
+ boost/geometry/strategies/transform/matrix_transformers.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 06752fed324925429c6bb59ddac9d673
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005 Matthew Calabrese
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility/binary.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 067cda0b5423326cdf3316f73f4b7ff5
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2002
+ // Joerg Walter, Mathias Koch
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/detail/concepts.hpp [2:3]
+ boost/numeric/ublas/detail/config.hpp [2:3]
+ boost/numeric/ublas/detail/definitions.hpp [2:3]
+ boost/numeric/ublas/detail/duff.hpp [2:3]
+ boost/numeric/ublas/detail/iterator.hpp [2:3]
+ boost/numeric/ublas/detail/matrix_assign.hpp [2:3]
+ boost/numeric/ublas/detail/temporary.hpp [2:3]
+ boost/numeric/ublas/detail/vector_assign.hpp [2:3]
+ boost/numeric/ublas/lu.hpp [2:3]
+ boost/numeric/ublas/matrix_expression.hpp [2:3]
+ boost/numeric/ublas/matrix_proxy.hpp [2:3]
+ boost/numeric/ublas/operation.hpp [2:3]
+ boost/numeric/ublas/operation_blocked.hpp [2:3]
+ boost/numeric/ublas/operation_sparse.hpp [2:3]
+ boost/numeric/ublas/storage.hpp [2:3]
+ boost/numeric/ublas/storage_sparse.hpp [2:3]
+ boost/numeric/ublas/symmetric.hpp [2:3]
+ boost/numeric/ublas/traits.hpp [2:3]
+ boost/numeric/ublas/triangular.hpp [2:3]
+ boost/numeric/ublas/vector_expression.hpp [2:3]
+ boost/numeric/ublas/vector_proxy.hpp [2:3]
+ boost/numeric/ublas/vector_sparse.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 06bdb153f7c9e585b90d3443f4a9ed60
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer/common_factor_ct.hpp at line 5
+ License text:
+ // (C) Copyright Daryle Walker and Stephen Cleary 2001-2002.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer/common_factor_ct.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 06bdc28468ac3b6b957b56a9c6096a82
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2014, 2017.
+ // Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/crosses.hpp [8:9]
+ boost/geometry/algorithms/detail/equals/implementation.hpp [8:9]
+ boost/geometry/algorithms/detail/equals/interface.hpp [8:9]
+ boost/geometry/algorithms/detail/overlaps/implementation.hpp [7:8]
+ boost/geometry/algorithms/detail/overlaps/interface.hpp [7:8]
+ boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/copy_segments.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/follow.hpp [6:9]
+ boost/geometry/algorithms/detail/overlay/get_turns.hpp [6:7]
+ boost/geometry/algorithms/detail/overlay/intersection_insert.hpp [5:6]
+ boost/geometry/algorithms/equals.hpp [8:9]
+ boost/geometry/algorithms/overlaps.hpp [7:8]
+ boost/geometry/algorithms/point_on_surface.hpp [8:9]
+ boost/geometry/algorithms/union.hpp [5:6]
+ boost/geometry/formulas/vincenty_direct.hpp [5:6]
+ boost/geometry/formulas/vincenty_inverse.hpp [6:7]
+ boost/geometry/strategies/geographic/distance_andoyer.hpp [5:6]
+ boost/geometry/strategies/geographic/distance_vincenty.hpp [5:6]
+ boost/geometry/strategies/geographic/mapping_ssf.hpp [5:6]
+ boost/geometry/strategies/geographic/side_andoyer.hpp [5:6]
+ boost/geometry/strategies/geographic/side_thomas.hpp [5:6]
+ boost/geometry/strategies/geographic/side_vincenty.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 06c37076487394ac3bd22a3705d78079
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014-2017, Oracle and/or its affiliates.
+ // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp [3:4]
+ boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp [3:3]
+ boost/geometry/algorithms/detail/is_simple/always_simple.hpp [3:3]
+ boost/geometry/algorithms/detail/is_simple/areal.hpp [3:3]
+ boost/geometry/algorithms/detail/is_simple/interface.hpp [3:3]
+ boost/geometry/algorithms/detail/is_simple/linear.hpp [3:3]
+ boost/geometry/algorithms/detail/is_simple/multipoint.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/box.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/has_spikes.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/linear.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/multipolygon.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/pointlike.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/polygon.hpp [5:5]
+ boost/geometry/algorithms/detail/is_valid/ring.hpp [5:5]
+ boost/geometry/algorithms/detail/is_valid/segment.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp [5:5]
+ boost/geometry/algorithms/detail/overlay/linear_linear.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/topology_check.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 06f12139423100c74c14f7a3021aabca
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/seq/variadic_seq_to_seq.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/seq/variadic_seq_to_seq.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 06f3ad25abe7d23073fb48ef1a22454e
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/enable_shared_from_this.hpp [7:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 07040e547c7cdfe59c684f2a324385cc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/date_duration_types.hpp at line 6, boost/date_time/date_generator_formatter.hpp at line 6, boost/date_time/filetime_functions.hpp at line 6, boost/date_time/gregorian/greg_duration_types.hpp at line 6, boost/date_time/local_time/date_duration_operators.hpp at line 6, boost/date_time/posix_time/date_duration_operators.hpp at line 6, boost/date_time/special_values_formatter.hpp at line 7, boost/date_time/strings_from_facet.hpp at line 6
+ License text:
+ /* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/date_duration_types.hpp [4:6]
+ boost/date_time/date_generator_formatter.hpp [4:6]
+ boost/date_time/filetime_functions.hpp [4:6]
+ boost/date_time/gregorian/greg_duration_types.hpp [4:8]
+ boost/date_time/local_time/date_duration_operators.hpp [4:6]
+ boost/date_time/posix_time/date_duration_operators.hpp [4:6]
+ boost/date_time/special_values_formatter.hpp [5:7]
+ boost/date_time/strings_from_facet.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 073058f74b270621d1207cca7c921e79
+BELONGS ya.make
+ License text:
+ // Copyright 2014 LASMEA UMR 6602 CNRS/Univ. Clermont II
+ // Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+ // Copyright 2014 MetaScale SAS
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/nt2/nt2_copy.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0741d2c1f3867245a3cb9d8c11260d78
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2011 Jan Frederick Eick
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/qi/numeric/detail/numeric_utils.hpp [2:6]
+ boost/spirit/home/qi/numeric/numeric_utils.hpp [2:3]
+ boost/spirit/home/qi/numeric/uint.hpp [2:4]
+ boost/spirit/home/x3/numeric/uint.hpp [2:3]
+ boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp [2:6]
+ boost/spirit/home/x3/support/numeric_utils/extract_int.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 07a69d34287d5174fbb91c1432623c73
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2013-2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/bs_set.hpp [3:3]
+ boost/intrusive/bstree.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 07b7558ba450b33ddac49fa00995dc34
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/export.hpp [19:21]
+
+KEEP COPYRIGHT_SERVICE_LABEL 083a405889ae781bc980f57de8b73aab
+BELONGS ya.make
+ License text:
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/algebra/detail/extract_value_type.hpp [9:10]
+ boost/numeric/odeint/algebra/detail/norm_inf.hpp [9:10]
+ boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/algebra/norm_result_type.hpp [9:10]
+ boost/numeric/odeint/algebra/operations_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/eigen/eigen_algebra.hpp [9:10]
+ boost/numeric/odeint/external/eigen/eigen_resize.hpp [9:10]
+ boost/numeric/odeint/external/mpi/mpi.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_state.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_vector_state.hpp [9:11]
+ boost/numeric/odeint/external/mtl4/mtl4.hpp [9:10]
+ boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/openmp/openmp.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_state.hpp [9:11]
+ boost/numeric/odeint/external/thrust/thrust.hpp [9:10]
+ boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp [9:10]
+ boost/numeric/odeint/util/n_ary_helper.hpp [7:9]
+ boost/numeric/odeint/util/split.hpp [9:11]
+ boost/numeric/odeint/util/split_adaptor.hpp [9:11]
+ boost/numeric/odeint/util/stepper_traits.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 085869bb2241cf9aeb5f050ee3cff8ce
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/return_arg.hpp at line 3
+ License text:
+ // Copyright David Abrahams and Nikolay Mladenov 2003.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/return_arg.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 086e913ebca204ed72c05a3607031c1d
+BELONGS ya.make
+ License text:
+ // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ // Copyright (C) 2001, 2002 Peter Dimov
+ // Copyright (C) 2002 David Abrahams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/ref.hpp [17:19]
+
+KEEP COPYRIGHT_SERVICE_LABEL 08a0499dcbbd5932fb9219dce6ebc084
+BELONGS ya.make
+ License text:
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/gsl/gsl_wrapper.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/rotating_buffer.hpp [9:10]
+ boost/numeric/odeint/stepper/generation.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp [10:11]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp [9:10]
+ boost/numeric/odeint/util/is_pair.hpp [9:10]
+ boost/numeric/odeint/util/resizer.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 08c8d8e87d3028ff1a5cda49cfd4276e
+BELONGS libs/locale/ya.make ya.make
+ License text:
+ // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/locale.hpp [2:2]
+ boost/locale/boundary.hpp [2:2]
+ boost/locale/boundary/boundary_point.hpp [2:2]
+ boost/locale/boundary/facets.hpp [2:2]
+ boost/locale/boundary/index.hpp [2:2]
+ boost/locale/boundary/segment.hpp [2:2]
+ boost/locale/boundary/types.hpp [2:2]
+ boost/locale/collator.hpp [2:2]
+ boost/locale/config.hpp [2:2]
+ boost/locale/conversion.hpp [2:2]
+ boost/locale/date_time.hpp [2:2]
+ boost/locale/date_time_facet.hpp [2:2]
+ boost/locale/definitions.hpp [2:2]
+ boost/locale/encoding.hpp [2:2]
+ boost/locale/encoding_errors.hpp [2:2]
+ boost/locale/encoding_utf.hpp [2:2]
+ boost/locale/format.hpp [2:2]
+ boost/locale/formatting.hpp [2:2]
+ boost/locale/generator.hpp [2:2]
+ boost/locale/gnu_gettext.hpp [2:2]
+ boost/locale/info.hpp [2:2]
+ boost/locale/localization_backend.hpp [2:2]
+ boost/locale/message.hpp [2:2]
+ boost/locale/time_zone.hpp [2:2]
+ boost/locale/utf.hpp [2:2]
+ boost/locale/util.hpp [2:2]
+ libs/locale/src/encoding/codepage.cpp [2:2]
+ libs/locale/src/encoding/conv.hpp [2:2]
+ libs/locale/src/encoding/iconv_codepage.ipp [2:2]
+ libs/locale/src/encoding/uconv_codepage.ipp [2:2]
+ libs/locale/src/encoding/wconv_codepage.ipp [2:2]
+ libs/locale/src/icu/all_generator.hpp [2:2]
+ libs/locale/src/icu/boundary.cpp [2:2]
+ libs/locale/src/icu/cdata.hpp [2:2]
+ libs/locale/src/icu/codecvt.cpp [2:2]
+ libs/locale/src/icu/codecvt.hpp [2:2]
+ libs/locale/src/icu/collator.cpp [2:2]
+ libs/locale/src/icu/conversion.cpp [2:2]
+ libs/locale/src/icu/date_time.cpp [2:2]
+ libs/locale/src/icu/formatter.cpp [2:2]
+ libs/locale/src/icu/formatter.hpp [2:2]
+ libs/locale/src/icu/icu_backend.cpp [2:2]
+ libs/locale/src/icu/icu_backend.hpp [2:2]
+ libs/locale/src/icu/icu_util.hpp [2:2]
+ libs/locale/src/icu/numeric.cpp [2:2]
+ libs/locale/src/icu/predefined_formatters.hpp [2:2]
+ libs/locale/src/icu/time_zone.cpp [2:2]
+ libs/locale/src/icu/time_zone.hpp [2:2]
+ libs/locale/src/icu/uconv.hpp [2:2]
+ libs/locale/src/posix/all_generator.hpp [2:2]
+ libs/locale/src/posix/codecvt.cpp [2:2]
+ libs/locale/src/posix/codecvt.hpp [2:2]
+ libs/locale/src/posix/collate.cpp [2:2]
+ libs/locale/src/posix/converter.cpp [2:2]
+ libs/locale/src/posix/numeric.cpp [2:2]
+ libs/locale/src/posix/posix_backend.cpp [2:2]
+ libs/locale/src/posix/posix_backend.hpp [2:2]
+ libs/locale/src/shared/date_time.cpp [2:2]
+ libs/locale/src/shared/format.cpp [2:2]
+ libs/locale/src/shared/formatting.cpp [2:2]
+ libs/locale/src/shared/generator.cpp [2:2]
+ libs/locale/src/shared/ids.cpp [2:2]
+ libs/locale/src/shared/ios_prop.hpp [2:2]
+ libs/locale/src/shared/localization_backend.cpp [2:2]
+ libs/locale/src/shared/mo_hash.hpp [2:2]
+ libs/locale/src/shared/mo_lambda.cpp [2:2]
+ libs/locale/src/shared/mo_lambda.hpp [2:2]
+ libs/locale/src/std/all_generator.hpp [2:2]
+ libs/locale/src/std/codecvt.cpp [2:2]
+ libs/locale/src/std/collate.cpp [2:2]
+ libs/locale/src/std/converter.cpp [2:2]
+ libs/locale/src/std/numeric.cpp [2:2]
+ libs/locale/src/std/std_backend.cpp [2:2]
+ libs/locale/src/std/std_backend.hpp [2:2]
+ libs/locale/src/util/codecvt_converter.cpp [2:2]
+ libs/locale/src/util/default_locale.cpp [2:2]
+ libs/locale/src/util/gregorian.cpp [2:2]
+ libs/locale/src/util/gregorian.hpp [2:2]
+ libs/locale/src/util/iconv.hpp [2:2]
+ libs/locale/src/util/info.cpp [2:2]
+ libs/locale/src/util/locale_data.cpp [2:2]
+ libs/locale/src/util/locale_data.hpp [2:2]
+ libs/locale/src/util/numeric.hpp [2:2]
+ libs/locale/src/util/timezone.hpp [2:2]
+ libs/locale/src/win32/all_generator.hpp [2:2]
+ libs/locale/src/win32/api.hpp [2:2]
+ libs/locale/src/win32/collate.cpp [2:2]
+ libs/locale/src/win32/converter.cpp [2:2]
+ libs/locale/src/win32/lcid.cpp [2:2]
+ libs/locale/src/win32/lcid.hpp [2:2]
+ libs/locale/src/win32/numeric.cpp [2:2]
+ libs/locale/src/win32/win_backend.cpp [2:2]
+ libs/locale/src/win32/win_backend.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 08f926507a475f95278bdc864b401b0a
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/object/stl_iterator_core.hpp at line 3, boost/python/stl_iterator.hpp at line 3, libs/python/src/object/stl_iterator.cpp at line 3
+ License text:
+ // Copyright Eric Niebler 2005.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/object/stl_iterator_core.hpp [1:3]
+ boost/python/stl_iterator.hpp [1:3]
+ libs/python/src/object/stl_iterator.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 095a19389e06f0d846d8f09e0b124d3a
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005-2006 Alain Miniussi <alain.miniussi -at- oca.eu>.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/inplace.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 096d8c5df1c32b2f75ba4a9a2e402de2
+BELONGS ya.make
+ License text:
+ // Copyright David Abrahams and Thomas Becker 2000-2006.
+ // Copyright Kohei Takahashi 2012-2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/zip_iterator.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 099f45e4dfce1e9a04cd9f0fc805912b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/detail/auto_link_archive.hpp at line 14, boost/archive/detail/auto_link_warchive.hpp at line 14, boost/archive/detail/decl.hpp at line 14, boost/serialization/config.hpp at line 8
+ License text:
+ // (c) Copyright Robert Ramey 2004
+ // Use, modification, and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/detail/auto_link_archive.hpp [12:14]
+ boost/archive/detail/auto_link_warchive.hpp [12:14]
+ boost/archive/detail/decl.hpp [12:14]
+ boost/serialization/config.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 09b747b5492c0054ccb0805469599656
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ // Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/detail/eventfd_select_interrupter.hpp [5:6]
+ boost/asio/detail/impl/eventfd_select_interrupter.ipp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 09ca8f5ea99b8a6ff33ed89df33c25be
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2001-2007
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/lambda_spec.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 09cc1fb7c33b7954947a92ced3ff6df1
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2009-2011 Frederic Bron, Robert Stewart, Steven Watanabe & Roman Perepelitsa.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/detail/has_binary_operator.hpp [1:1]
+ boost/type_traits/detail/has_postfix_operator.hpp [1:1]
+ boost/type_traits/detail/has_prefix_operator.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 09df97e99c4303bff1e87e8c1c9130b6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/process/detail/windows/locale.hpp at line 4, boost/process/locale.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process/detail/windows/locale.hpp [1:2]
+ boost/process/locale.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0a1956f795fb552dd3a4ff03d098c17c
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2003 Giovanni Bajo
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/iterator.hpp [2:4]
+ boost/spirit/home/classic/iterator/impl/position_iterator.ipp [2:5]
+ boost/spirit/home/classic/iterator/position_iterator.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0a1ddf2f633492698f29966f2ba00d47
+BELONGS ya.make
+ License text:
+ // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+ // Copyright (C) Vladimir Prus 2003
+ // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/random.hpp [2:4]
+ boost/property_map/parallel/vector_property_map.hpp [1:3]
+ boost/property_map/vector_property_map.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0a2a0abc8536e98547d88c1773f19fb5
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/is_convertible.hpp at line 5, boost/ptr_container/detail/static_move_ptr.hpp at line 5, libs/iostreams/src/mapped_file.cpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/detail/is_convertible.hpp [1:5]
+ boost/ptr_container/detail/static_move_ptr.hpp [1:5]
+ libs/iostreams/src/mapped_file.cpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0a2b5d5a0c0eaf639c779415c0484b22
+BELONGS ya.make
+ License text:
+ // Copyright Douglas Gregor 2004.
+ // Copyright 2005 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/interlocked.hpp [7:7]
+ boost/function_equal.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0a3175bc860cf11c874510bcf687df69
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2011 Joel de Guzman
+ // Copyright (c) 2001-2011 Hartmut Kaiser
+ // Copyright (c) 2009 Francois Barel
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/karma/nonterminal/detail/parameterized.hpp [1:3]
+ boost/spirit/home/qi/nonterminal/detail/parameterized.hpp [2:3]
+ boost/spirit/home/support/nonterminal/extract_param.hpp [2:4]
+ boost/spirit/repository/home/karma/nonterminal.hpp [1:3]
+ boost/spirit/repository/home/karma/nonterminal/subrule.hpp [1:3]
+ boost/spirit/repository/home/qi/nonterminal.hpp [1:3]
+ boost/spirit/repository/home/qi/nonterminal/subrule.hpp [2:3]
+ boost/spirit/repository/home/support/subrule_context.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0a88dd37543f88fab003f41788b3cf9b
+BELONGS ya.make
+ License text:
+ // (C) Copyright Dave Abrahams and Daniel Walker 1999-2003.
+ // Copyright (c) Andrey Semashev 2017
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/next_prior.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0a9a56c76c75046da6d531707b442246
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/swap.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0aa197418350ce1baad48ead251f36a4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/detail/move.hpp at line 5, boost/interprocess/detail/robust_emulation.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2010-2012.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/detail/move.hpp [3:5]
+ boost/interprocess/detail/robust_emulation.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0ac5ffd92b2d14f341279a5a1a133f45
+BELONGS ya.make
+ License text:
+ // Copyright 2003 (c) The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/enable_if.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0ac94d69700429ed83a5edaf872407cb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/tti/detail/ddeftype.hpp at line 4, boost/tti/detail/dnullptr.hpp at line 4, boost/tti/gen/has_data_gen.hpp at line 4, boost/tti/gen/has_function_gen.hpp at line 4
+ License text:
+ // (C) Copyright Edward Diener 2012
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/tti/detail/ddeftype.hpp [2:4]
+ boost/tti/detail/dnullptr.hpp [2:4]
+ boost/tti/gen/has_data_gen.hpp [2:4]
+ boost/tti/gen/has_function_gen.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0b275d928a7071063ea8fa601680fadd
+BELONGS ya.make
+ License text:
+ // (C) Copyright Jeremy Siek 2000.
+ // Copyright 2002 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/concept_check.hpp [2:3]
+ boost/multi_array.hpp [1:1]
+ boost/multi_array/algorithm.hpp [30:30]
+ boost/multi_array/base.hpp [1:1]
+ boost/multi_array/collection_concept.hpp [1:1]
+ boost/multi_array/concept_checks.hpp [1:1]
+ boost/multi_array/copy_array.hpp [1:1]
+ boost/multi_array/extent_gen.hpp [1:1]
+ boost/multi_array/extent_range.hpp [1:1]
+ boost/multi_array/index_gen.hpp [1:1]
+ boost/multi_array/index_range.hpp [1:1]
+ boost/multi_array/iterator.hpp [1:1]
+ boost/multi_array/multi_array_ref.hpp [1:1]
+ boost/multi_array/range_list.hpp [1:1]
+ boost/multi_array/storage_order.hpp [1:1]
+ boost/multi_array/subarray.hpp [1:1]
+ boost/multi_array/types.hpp [1:1]
+ boost/multi_array/view.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0b29116922cfef70c51094e6d835a79b
+BELONGS ya.make
+ License text:
+ // (C) Copyright Francois Faure, iMAGIS-GRAVIR / UJF, 2001.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/property_iter_range.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0b4299a09d63e96056991adca25384c1
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002-2006 Marcin Kalicinski
+ // Copyright (C) 2015 Sebastian Redl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_tree/json_parser.hpp [2:3]
+ boost/property_tree/json_parser/detail/read.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0b4c09f6f3b7c4c50019029022cf8605
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2004 Arkadiy Vertleyb
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/encode_decode.hpp [1:1]
+ boost/typeof/int_encoding.hpp [1:3]
+ boost/typeof/modifiers.hpp [1:3]
+ boost/typeof/pointers_data_members.hpp [1:3]
+ boost/typeof/register_functions.hpp [1:3]
+ boost/typeof/register_functions_iterate.hpp [1:3]
+ boost/typeof/register_fundamental.hpp [1:4]
+ boost/typeof/register_mem_functions.hpp [1:3]
+ boost/typeof/template_encoding.hpp [1:4]
+ boost/typeof/type_encoding.hpp [1:3]
+ boost/typeof/typeof.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0b5ce66fba7e15b3ae6b4fe603a6dfc7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/fiber/properties.hpp at line 3
+ License text:
+ // Copyright Nat Goodspeed 2014.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fiber/properties.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0b6f371227c9898f1ce2ae1a4a259a75
+BELONGS ya.make
+ License text:
+ // Copyright 2017 John Maddock
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tools/atomic.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0ba2ebe3ae8aa78b437fe4f53708d243
+BELONGS ya.make
+ License text:
+ Copyright 2020-2021 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/allocator_access.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0c190a3fed9f645e32983879cf237122
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2011 Brandon Kohn
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/map/detail/cpp03/at_impl.hpp [2:3]
+ boost/fusion/container/map/detail/cpp03/value_at_impl.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0c1af2120f5b2c990788a2bcf885bea8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/queue.hpp at line 14, boost/serialization/stack.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/queue.hpp [12:14]
+ boost/serialization/stack.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0c1af98e46f7afe05454a0ee32286f46
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/cpp98/nth_of.hpp at line 6, boost/metaparse/v1/repeated_one_of.hpp at line 6, boost/metaparse/v1/repeated_one_of1.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2010.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/cpp98/nth_of.hpp [4:6]
+ boost/metaparse/v1/repeated_one_of.hpp [4:6]
+ boost/metaparse/v1/repeated_one_of1.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0c2b8937b4dd7ffe9d6014b495d4300e
+BELONGS ya.make
+ License text:
+ // (C) Copyright Howard Hinnant
+ // Copyright 2011 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/ceil.hpp [3:4]
+ boost/chrono/chrono_io.hpp [4:7]
+ boost/chrono/floor.hpp [3:4]
+ boost/chrono/io/duration_get.hpp [1:4]
+ boost/chrono/io/duration_io.hpp [1:4]
+ boost/chrono/io/duration_put.hpp [1:4]
+ boost/chrono/io/duration_style.hpp [1:4]
+ boost/chrono/io/duration_units.hpp [1:4]
+ boost/chrono/io/time_point_get.hpp [1:4]
+ boost/chrono/io/time_point_io.hpp [1:4]
+ boost/chrono/io/time_point_put.hpp [1:4]
+ boost/chrono/io/time_point_units.hpp [1:5]
+ boost/chrono/io/timezone.hpp [1:4]
+ boost/chrono/io_v1/chrono_io.hpp [4:7]
+ boost/chrono/round.hpp [3:4]
+ boost/ratio/detail/ratio_io.hpp [3:6]
+ boost/ratio/ratio_io.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0c692f4ed0592b9e7538690f57796922
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/log/detail/allocator_traits.hpp at line 4
+ License text:
+ * Copyright Andrey Semashev 2018.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/log/detail/allocator_traits.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0c6b4a71af48e0c6aa05a5427f73c88f
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/cxx_composite.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0c99d75cb8a2efd9e835c9f7a2d6551d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/xpressive/detail/utility/counted_base.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/xpressive/detail/utility/counted_base.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0ca4d911fb09cf5ac4c97fc962a5c09a
+BELONGS ya.make
+ License text:
+ Copyright (C) 2004-2008 Rene Nyffenegger
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/beast/core/detail/base64.hpp [16:16]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0cb977594281ac92638c2f8b1e08d39d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/assign/ptr_map_inserter.hpp at line 5, boost/ptr_container/detail/throw_exception.hpp at line 6, boost/range/adaptors.hpp at line 5, boost/range/algorithm_ext.hpp at line 10, boost/range/as_array.hpp at line 5, boost/range/as_literal.hpp at line 5, boost/range/detail/as_literal.hpp at line 5, boost/range/detail/str_types.hpp at line 5
+ License text:
+ // Copyright Thorsten Ottosen 2006. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/assign/ptr_map_inserter.hpp [3:5]
+ boost/ptr_container/detail/throw_exception.hpp [4:6]
+ boost/range/adaptors.hpp [3:6]
+ boost/range/algorithm_ext.hpp [8:10]
+ boost/range/as_array.hpp [3:5]
+ boost/range/as_literal.hpp [3:5]
+ boost/range/detail/as_literal.hpp [3:5]
+ boost/range/detail/str_types.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0d425d37a7f3a1d0fc0a1ea34a2d4150
+BELONGS ya.make
+ License text:
+ Copyright (c) 2014 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/std_tuple/detail/build_std_tuple.hpp [2:2]
+ boost/fusion/container/generation/make_list.hpp [2:2]
+ boost/fusion/container/generation/vector_tie.hpp [2:2]
+ boost/fusion/container/list/list_fwd.hpp [2:2]
+ boost/fusion/container/set/set_fwd.hpp [2:2]
+ boost/fusion/container/vector/detail/value_at_impl.hpp [2:2]
+ boost/fusion/container/vector/vector10.hpp [2:2]
+ boost/fusion/container/vector/vector20.hpp [2:2]
+ boost/fusion/container/vector/vector30.hpp [2:2]
+ boost/fusion/container/vector/vector40.hpp [2:2]
+ boost/fusion/container/vector/vector50.hpp [2:2]
+ boost/fusion/include/std_tuple.hpp [2:4]
+ boost/fusion/support/config.hpp [2:3]
+ boost/fusion/tuple/make_tuple.hpp [2:2]
+ boost/fusion/tuple/tuple_tie.hpp [2:2]
+ boost/fusion/view/nview/detail/nview_impl.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0d692a3f4b84fd7a4a8cf39a7e86f0f8
+BELONGS ya.make
+ License text:
+ * Date: Sun Jun 22 14:23:12 MDT 2008
+ * Copyright: 2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/detail/file_handle.hpp [8:11]
+ boost/iostreams/detail/path.hpp [8:11]
+ boost/iostreams/filter/grep.hpp [8:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0d7aa5edb40002a9a9a2f814b7ccceea
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/append.hpp [3:5]
+ boost/geometry/algorithms/comparable_distance.hpp [3:5]
+ boost/geometry/algorithms/detail/comparable_distance/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/comparable_distance/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/counting.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/areal_areal.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_areal.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_linear.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/segment_box.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/backward_compatibility.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/default_strategies.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/interface.hpp [3:7]
+ boost/geometry/algorithms/detail/distance/point_to_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/collect_vectors.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/point_point.hpp [3:6]
+ boost/geometry/algorithms/detail/intersects/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/intersects/interface.hpp [3:5]
+ boost/geometry/algorithms/disjoint.hpp [3:6]
+ boost/geometry/algorithms/dispatch/disjoint.hpp [3:6]
+ boost/geometry/algorithms/dispatch/distance.hpp [3:6]
+ boost/geometry/algorithms/distance.hpp [3:6]
+ boost/geometry/algorithms/for_each.hpp [3:6]
+ boost/geometry/algorithms/intersects.hpp [3:5]
+ boost/geometry/algorithms/length.hpp [3:5]
+ boost/geometry/algorithms/num_geometries.hpp [3:5]
+ boost/geometry/algorithms/num_interior_rings.hpp [3:5]
+ boost/geometry/algorithms/num_points.hpp [3:6]
+ boost/geometry/algorithms/perimeter.hpp [3:5]
+ boost/geometry/core/cs.hpp [3:5]
+ boost/geometry/geometries/concepts/point_concept.hpp [3:5]
+ boost/geometry/geometries/point.hpp [3:6]
+ boost/geometry/multi/algorithms/append.hpp [3:5]
+ boost/geometry/multi/algorithms/distance.hpp [3:5]
+ boost/geometry/multi/algorithms/num_points.hpp [3:5]
+ boost/geometry/policies/disjoint_interrupt_policy.hpp [3:6]
+ boost/geometry/strategies/cartesian/disjoint_segment_box.hpp [3:6]
+ boost/geometry/strategies/cartesian/distance_projected_point.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp [3:5]
+ boost/geometry/strategies/concepts/distance_concept.hpp [3:5]
+ boost/geometry/strategies/default_comparable_distance_result.hpp [3:5]
+ boost/geometry/strategies/default_distance_result.hpp [3:5]
+ boost/geometry/strategies/default_length_result.hpp [3:5]
+ boost/geometry/strategies/distance.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0da62c9d547bc4ac9421f23ebfe03032
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/io/wkt/write.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0e00627118b1aa126c93a4d188f1689d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/containers/containers_fwd.hpp at line 5, boost/interprocess/detail/file_locking_helpers.hpp at line 5, boost/interprocess/detail/intermodule_singleton.hpp at line 5, boost/interprocess/detail/intermodule_singleton_common.hpp at line 5, boost/interprocess/detail/managed_global_memory.hpp at line 5, boost/interprocess/detail/portable_intermodule_singleton.hpp at line 5, boost/interprocess/detail/windows_intermodule_singleton.hpp at line 5, boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp at line 5, boost/interprocess/xsi_shared_memory.hpp at line 5, boost/move/move.hpp at line 5, boost/move/traits.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2009-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/containers/containers_fwd.hpp [3:5]
+ boost/interprocess/detail/file_locking_helpers.hpp [3:5]
+ boost/interprocess/detail/intermodule_singleton.hpp [3:5]
+ boost/interprocess/detail/intermodule_singleton_common.hpp [3:5]
+ boost/interprocess/detail/managed_global_memory.hpp [3:5]
+ boost/interprocess/detail/portable_intermodule_singleton.hpp [3:5]
+ boost/interprocess/detail/windows_intermodule_singleton.hpp [3:5]
+ boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp [3:5]
+ boost/interprocess/xsi_shared_memory.hpp [3:5]
+ boost/move/move.hpp [3:6]
+ boost/move/traits.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0e0690525ead371c9a42656f4d37ed28
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/poly_collection/algorithm.hpp at line 3, boost/poly_collection/detail/functional.hpp at line 3
+ License text:
+ /* Copyright 2016-2018 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/poly_collection/algorithm.hpp [1:3]
+ boost/poly_collection/detail/functional.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0e20cc85ddff90b5ad54f1b16cc40ada
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/container_or_allocator_rebind.hpp at line 5, boost/container/detail/container_rebind.hpp at line 5, boost/container/detail/is_container.hpp at line 5, boost/container/detail/is_contiguous_container.hpp at line 5, boost/container/detail/value_functors.hpp at line 7, boost/move/algo/detail/set_difference.hpp at line 5, boost/move/algo/unique.hpp at line 5, boost/move/detail/to_raw_pointer.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/container_or_allocator_rebind.hpp [3:5]
+ boost/container/detail/container_rebind.hpp [3:5]
+ boost/container/detail/is_container.hpp [3:5]
+ boost/container/detail/is_contiguous_container.hpp [3:5]
+ boost/container/detail/value_functors.hpp [5:7]
+ boost/move/algo/detail/set_difference.hpp [3:5]
+ boost/move/algo/unique.hpp [3:5]
+ boost/move/detail/to_raw_pointer.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0e38f662b528c9b976dd8c8d913034a2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/unordered_map.hpp at line 5, boost/unordered_set.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/unordered_map.hpp [2:5]
+ boost/unordered_set.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0e77ae1bd82b13815351a852b44ec0c8
+BELONGS ya.make
+ License text:
+ Copyright 2013-2014 Karsten Ahnert
+ Copyright 2013-2014 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0e77faac6c58d8b5ee5a53b520bcbfd5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/list/to_array.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/list/to_array.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0ea0e99567f30b36347bb495edfbcaa5
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2004-2006 The Trustees of Indiana University.
+ // Copyright (C) 2007 Douglas Gregor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/adjacency_list.hpp [1:2]
+ boost/graph/distributed/concepts.hpp [1:1]
+ boost/graph/distributed/connected_components.hpp [1:1]
+ boost/graph/distributed/connected_components_parallel_search.hpp [1:1]
+ boost/graph/distributed/crauser_et_al_shortest_paths.hpp [1:1]
+ boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp [1:1]
+ boost/graph/distributed/detail/dijkstra_shortest_paths.hpp [1:1]
+ boost/graph/distributed/detail/filtered_queue.hpp [1:1]
+ boost/graph/distributed/detail/queue.ipp [1:1]
+ boost/graph/distributed/dijkstra_shortest_paths.hpp [1:1]
+ boost/graph/distributed/eager_dijkstra_shortest_paths.hpp [1:1]
+ boost/graph/distributed/graphviz.hpp [1:1]
+ boost/graph/distributed/local_subgraph.hpp [1:1]
+ boost/graph/distributed/page_rank.hpp [1:2]
+ boost/graph/distributed/queue.hpp [1:1]
+ boost/graph/distributed/vertex_list_adaptor.hpp [1:1]
+ boost/graph/parallel/container_traits.hpp [1:1]
+ boost/property_map/parallel/impl/distributed_property_map.ipp [1:1]
+ boost/property_map/parallel/local_property_map.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0ef4f9780c88027fdd5a35ac2257715c
+BELONGS ya.make
+ License text:
+ Copyright (c) 2000-2003 Brian McNamara and Yannis Smaragdakis
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2015 John Fletcher
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/function/lazy_list.hpp [33:35]
+ boost/phoenix/function/lazy_operator.hpp [27:29]
+ boost/phoenix/function/lazy_prelude.hpp [115:117]
+ boost/phoenix/function/lazy_reuse.hpp [24:26]
+ boost/phoenix/function/lazy_signature.hpp [34:36]
+ boost/phoenix/function/lazy_smart.hpp [11:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0efd40a9062a85639e10344c951c8ddb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/floating_point_promotion.hpp at line 3, boost/type_traits/integral_promotion.hpp at line 3, boost/type_traits/promote.hpp at line 3
+ License text:
+ // Copyright 2005 Alexander Nasonov.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/floating_point_promotion.hpp [1:3]
+ boost/type_traits/integral_promotion.hpp [1:3]
+ boost/type_traits/promote.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0f30a097702291fdbe88b6aa88f9f744
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/cpp_dec_float.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/cpp_dec_float.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0f49b80837fdb112d7968c70aac5f973
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007 Douglas Gregor and Matthias Troyer
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/parallel/detail/property_holders.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0f9e47e05da12882f5597d4fb9a928c8
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003 Eric Friedman, Itay Maman
+ // Copyright (c) 2013-2016 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/variant_fwd.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 0ff3815935f307838940ff905e254cdb
+BELONGS libs/log/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/log/utility/permissions.hpp at line 5, libs/log/config/pthread-mutex-robust/pthread_mutex_robust.cpp at line 5, libs/log/src/permissions.cpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/log/utility/permissions.hpp [2:5]
+ libs/log/config/pthread-mutex-robust/pthread_mutex_robust.cpp [2:4]
+ libs/log/src/permissions.cpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 10118f8d4d61de7bd7c81e582f77bc87
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/platform/ios.h at line 5
+ License text:
+ Copyright Ruslan Baratov 2017
+ Copyright Rene Rivera 2017
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/platform/ios.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1017e4a7fef836fa656381426c398d61
+BELONGS ya.make
+ License text:
+ // Copyright Alexander Nasonov & Paul A. Bristow 2006.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/lcast_precision.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 102aeb9de0dd2b131e13f2e7b47e1c05
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/coroutine/detail/preallocated.hpp at line 4, boost/fiber/algo/work_stealing.hpp at line 4, boost/fiber/detail/context_spinlock_queue.hpp at line 4
+ License text:
+ // Copyright Oliver Kowalke 2015.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/coroutine/detail/preallocated.hpp [2:4]
+ boost/fiber/algo/work_stealing.hpp [2:4]
+ boost/fiber/detail/context_spinlock_queue.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1039b7b0a1f8cafe9e6caab87c5befcd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/common_factor_ct.hpp at line 5, boost/math/common_factor_rt.hpp at line 3, boost/type_traits/is_complete.hpp at line 4
+ License text:
+ // (C) Copyright John Maddock 2017.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/common_factor_ct.hpp [3:5]
+ boost/math/common_factor_rt.hpp [1:1]
+ boost/type_traits/is_complete.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 103fd6d712fb200d3b9147c6b7905af3
+BELONGS ya.make
+ License text:
+ Copyright 2015 NumScale SAS
+ Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/align/assume_aligned.hpp [2:3]
+ boost/align/detail/assume_aligned.hpp [2:3]
+ boost/align/detail/assume_aligned_gcc.hpp [2:3]
+ boost/align/detail/assume_aligned_intel.hpp [2:3]
+ boost/align/detail/assume_aligned_msvc.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 107d76075b5051c3bee20805223a5779
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2007, 2014 Peter Dimov
+ // Copyright (c) Beman Dawes 2011
+ // Copyright (c) 2015 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/assert.hpp [8:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1090d940152a2cbd19bfff58bf63a13f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/assume_abstract.hpp at line 14
+ License text:
+ // (C) Copyright 2008 Robert Ramey
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/assume_abstract.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 10fe4090228a0ea61bac45ce35c9177e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/utils/nullstream.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/test/utils/nullstream.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 11168ee38bde6d4aa685d70f5cf5cf68
+BELONGS ya.make
+ License text:
+ // Copyright 2016 Peter Dimov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mp11/detail/config.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 119aa64b6fe77bfc2f178e06b5ce8caa
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/index/detail/algorithms/bounds.hpp [5:5]
+ boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp [5:5]
+ boost/geometry/index/detail/algorithms/comparable_distance_far.hpp [5:5]
+ boost/geometry/index/detail/algorithms/comparable_distance_near.hpp [5:5]
+ boost/geometry/index/detail/algorithms/content.hpp [5:5]
+ boost/geometry/index/detail/algorithms/is_valid.hpp [5:5]
+ boost/geometry/index/detail/algorithms/margin.hpp [5:5]
+ boost/geometry/index/detail/algorithms/minmaxdist.hpp [5:5]
+ boost/geometry/index/detail/algorithms/segment_intersection.hpp [5:5]
+ boost/geometry/index/detail/exception.hpp [3:3]
+ boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp [5:6]
+ boost/geometry/index/detail/rtree/node/variant_visitor.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/weak_visitor.hpp [5:5]
+ boost/geometry/index/detail/rtree/options.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/count.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/destroy.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/distance_query.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/spatial_query.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 11c555b9f12ef58efab27df9bf8c2090
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2011
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cxx11_char_types.hpp [3:3]
+ boost/endian/detail/disable_warnings.hpp [3:3]
+ boost/endian/detail/disable_warnings_pop.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 11d429a7e0f83394f0cc86e5e9f3bb69
+BELONGS ya.make
+ License text:
+ // Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+ // Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)
+ // Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/conversion_traits.hpp [2:4]
+ boost/type_traits/is_convertible.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 11d90229b362526047d6924026cb8e28
+BELONGS ya.make
+ License text:
+ Copyright (c) Marshall Clow 2012-2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility/string_ref_fwd.hpp [2:2]
+ boost/utility/string_view_fwd.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 120d04eed9b07026548ea7929d94a3d9
+BELONGS ya.make
+ License text:
+ // Copyright 2004 The Trustees of Indiana University.
+ // Copyright 2005 Matthias Troyer.
+ // Copyright 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/datatype.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 122c8028bc01320e38f8296df292a785
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003, 2006 Gerald I. Evenden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/omerc.hpp [26:26]
+ boost/geometry/srs/projections/proj/rouss.hpp [26:26]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1239bb24dcc5d1bb31ea703a7cbe2574
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/variance.hpp at line 6, boost/accumulators/statistics/weighted_variance.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/variance.hpp [4:6]
+ boost/accumulators/statistics/weighted_variance.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1250adf3b1baad8098a59b613cec3ffe
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2012: Joachim Faulhaber
+ Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/interval_base_map.hpp [2:3]
+ boost/icl/split_interval_map.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 12743f021f74d5e841d401749523a04e
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/categories.hpp at line 4, boost/iostreams/chain.hpp at line 4, boost/iostreams/char_traits.hpp at line 4, boost/iostreams/close.hpp at line 4, boost/iostreams/code_converter.hpp at line 4, boost/iostreams/combine.hpp at line 4, boost/iostreams/concepts.hpp at line 4, boost/iostreams/constants.hpp at line 4, boost/iostreams/copy.hpp at line 4, boost/iostreams/detail/access_control.hpp at line 4, boost/iostreams/detail/adapter/concept_adapter.hpp at line 4, boost/iostreams/detail/adapter/direct_adapter.hpp at line 4, boost/iostreams/detail/adapter/mode_adapter.hpp at line 4, boost/iostreams/detail/adapter/output_iterator_adapter.hpp at line 4, boost/iostreams/detail/adapter/range_adapter.hpp at line 4, boost/iostreams/detail/add_facet.hpp at line 4, boost/iostreams/detail/bool_trait_def.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/forward.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/stream.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp at line 4, boost/iostreams/detail/buffer.hpp at line 4, boost/iostreams/detail/call_traits.hpp at line 4, boost/iostreams/detail/char_traits.hpp at line 4, boost/iostreams/detail/codecvt_helper.hpp at line 4, boost/iostreams/detail/codecvt_holder.hpp at line 4, boost/iostreams/detail/config/auto_link.hpp at line 4, boost/iostreams/detail/config/bzip2.hpp at line 4, boost/iostreams/detail/config/codecvt.hpp at line 4, boost/iostreams/detail/config/disable_warnings.hpp at line 4, boost/iostreams/detail/config/dyn_link.hpp at line 4, boost/iostreams/detail/config/enable_warnings.hpp at line 4, boost/iostreams/detail/config/gcc.hpp at line 4, boost/iostreams/detail/config/limits.hpp at line 4, boost/iostreams/detail/config/overload_resolution.hpp at line 4, boost/iostreams/detail/config/wide_streams.hpp at line 4, boost/iostreams/detail/config/zlib.hpp at line 4, boost/iostreams/detail/dispatch.hpp at line 4, boost/iostreams/detail/enable_if_stream.hpp at line 4, boost/iostreams/detail/error.hpp at line 4, boost/iostreams/detail/forward.hpp at line 4, boost/iostreams/detail/fstream.hpp at line 4, boost/iostreams/detail/ios.hpp at line 4, boost/iostreams/detail/iostream.hpp at line 4, boost/iostreams/detail/is_iterator_range.hpp at line 4, boost/iostreams/detail/param_type.hpp at line 4, boost/iostreams/detail/push.hpp at line 4, boost/iostreams/detail/push_params.hpp at line 4, boost/iostreams/detail/resolve.hpp at line 4, boost/iostreams/detail/select.hpp at line 4, boost/iostreams/detail/streambuf.hpp at line 4, boost/iostreams/detail/streambuf/chainbuf.hpp at line 4, boost/iostreams/detail/streambuf/direct_streambuf.hpp at line 4, boost/iostreams/detail/streambuf/indirect_streambuf.hpp at line 4, boost/iostreams/detail/streambuf/linked_streambuf.hpp at line 4, boost/iostreams/detail/template_params.hpp at line 4, boost/iostreams/detail/translate_int_type.hpp at line 4, boost/iostreams/detail/wrap_unwrap.hpp at line 4, boost/iostreams/device/back_inserter.hpp at line 4, boost/iostreams/device/file.hpp at line 4, boost/iostreams/device/file_descriptor.hpp at line 4, boost/iostreams/filter/aggregate.hpp at line 4, boost/iostreams/filter/bzip2.hpp at line 4, boost/iostreams/filter/gzip.hpp at line 4, boost/iostreams/filter/newline.hpp at line 4, boost/iostreams/filter/regex.hpp at line 4, boost/iostreams/filter/symmetric.hpp at line 4, boost/iostreams/filter/zlib.hpp at line 4, boost/iostreams/filtering_streambuf.hpp at line 4, boost/iostreams/flush.hpp at line 4, boost/iostreams/imbue.hpp at line 4, boost/iostreams/input_sequence.hpp at line 4, boost/iostreams/invert.hpp at line 4, boost/iostreams/operations_fwd.hpp at line 4, boost/iostreams/optimal_buffer_size.hpp at line 4, boost/iostreams/output_sequence.hpp at line 4, boost/iostreams/pipeline.hpp at line 4, boost/iostreams/positioning.hpp at line 4, boost/iostreams/seek.hpp at line 4, boost/iostreams/skip.hpp at line 4, boost/iostreams/stream.hpp at line 4, boost/iostreams/stream_buffer.hpp at line 4, boost/iostreams/traits.hpp at line 4, boost/iostreams/traits_fwd.hpp at line 4, boost/iostreams/write.hpp at line 4, libs/iostreams/src/bzip2.cpp at line 4, libs/iostreams/src/file_descriptor.cpp at line 4, libs/iostreams/src/gzip.cpp at line 4, libs/iostreams/src/zlib.cpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/categories.hpp [1:4]
+ boost/iostreams/chain.hpp [1:4]
+ boost/iostreams/char_traits.hpp [1:4]
+ boost/iostreams/close.hpp [1:4]
+ boost/iostreams/code_converter.hpp [1:4]
+ boost/iostreams/combine.hpp [1:4]
+ boost/iostreams/concepts.hpp [1:4]
+ boost/iostreams/constants.hpp [1:4]
+ boost/iostreams/copy.hpp [1:4]
+ boost/iostreams/detail/access_control.hpp [1:4]
+ boost/iostreams/detail/adapter/concept_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/direct_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/mode_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/output_iterator_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/range_adapter.hpp [1:4]
+ boost/iostreams/detail/add_facet.hpp [1:4]
+ boost/iostreams/detail/bool_trait_def.hpp [1:4]
+ boost/iostreams/detail/broken_overload_resolution/forward.hpp [1:4]
+ boost/iostreams/detail/broken_overload_resolution/stream.hpp [1:4]
+ boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp [1:4]
+ boost/iostreams/detail/buffer.hpp [1:4]
+ boost/iostreams/detail/call_traits.hpp [1:4]
+ boost/iostreams/detail/char_traits.hpp [1:4]
+ boost/iostreams/detail/codecvt_helper.hpp [1:4]
+ boost/iostreams/detail/codecvt_holder.hpp [1:4]
+ boost/iostreams/detail/config/auto_link.hpp [1:4]
+ boost/iostreams/detail/config/bzip2.hpp [1:4]
+ boost/iostreams/detail/config/codecvt.hpp [1:4]
+ boost/iostreams/detail/config/disable_warnings.hpp [1:4]
+ boost/iostreams/detail/config/dyn_link.hpp [1:4]
+ boost/iostreams/detail/config/enable_warnings.hpp [1:4]
+ boost/iostreams/detail/config/gcc.hpp [1:4]
+ boost/iostreams/detail/config/limits.hpp [1:4]
+ boost/iostreams/detail/config/overload_resolution.hpp [1:4]
+ boost/iostreams/detail/config/wide_streams.hpp [1:4]
+ boost/iostreams/detail/config/zlib.hpp [1:4]
+ boost/iostreams/detail/dispatch.hpp [1:4]
+ boost/iostreams/detail/enable_if_stream.hpp [1:4]
+ boost/iostreams/detail/error.hpp [1:4]
+ boost/iostreams/detail/forward.hpp [1:4]
+ boost/iostreams/detail/fstream.hpp [1:4]
+ boost/iostreams/detail/ios.hpp [1:4]
+ boost/iostreams/detail/iostream.hpp [1:4]
+ boost/iostreams/detail/is_iterator_range.hpp [1:4]
+ boost/iostreams/detail/param_type.hpp [1:4]
+ boost/iostreams/detail/push.hpp [1:4]
+ boost/iostreams/detail/push_params.hpp [1:4]
+ boost/iostreams/detail/resolve.hpp [1:4]
+ boost/iostreams/detail/select.hpp [1:4]
+ boost/iostreams/detail/streambuf.hpp [1:4]
+ boost/iostreams/detail/streambuf/chainbuf.hpp [1:4]
+ boost/iostreams/detail/streambuf/direct_streambuf.hpp [1:4]
+ boost/iostreams/detail/streambuf/indirect_streambuf.hpp [1:4]
+ boost/iostreams/detail/streambuf/linked_streambuf.hpp [1:4]
+ boost/iostreams/detail/template_params.hpp [1:4]
+ boost/iostreams/detail/translate_int_type.hpp [1:4]
+ boost/iostreams/detail/wrap_unwrap.hpp [1:4]
+ boost/iostreams/device/back_inserter.hpp [1:4]
+ boost/iostreams/device/file.hpp [1:4]
+ boost/iostreams/device/file_descriptor.hpp [1:4]
+ boost/iostreams/filter/aggregate.hpp [1:4]
+ boost/iostreams/filter/bzip2.hpp [1:4]
+ boost/iostreams/filter/gzip.hpp [1:4]
+ boost/iostreams/filter/newline.hpp [1:4]
+ boost/iostreams/filter/regex.hpp [1:4]
+ boost/iostreams/filter/symmetric.hpp [1:4]
+ boost/iostreams/filter/zlib.hpp [1:4]
+ boost/iostreams/filtering_streambuf.hpp [1:4]
+ boost/iostreams/flush.hpp [1:4]
+ boost/iostreams/imbue.hpp [1:4]
+ boost/iostreams/input_sequence.hpp [1:4]
+ boost/iostreams/invert.hpp [1:4]
+ boost/iostreams/operations_fwd.hpp [1:4]
+ boost/iostreams/optimal_buffer_size.hpp [1:4]
+ boost/iostreams/output_sequence.hpp [1:4]
+ boost/iostreams/pipeline.hpp [1:4]
+ boost/iostreams/positioning.hpp [1:4]
+ boost/iostreams/seek.hpp [1:4]
+ boost/iostreams/skip.hpp [1:4]
+ boost/iostreams/stream.hpp [1:4]
+ boost/iostreams/stream_buffer.hpp [1:4]
+ boost/iostreams/traits.hpp [1:4]
+ boost/iostreams/traits_fwd.hpp [1:4]
+ boost/iostreams/write.hpp [1:4]
+ libs/iostreams/src/bzip2.cpp [1:4]
+ libs/iostreams/src/file_descriptor.cpp [1:4]
+ libs/iostreams/src/gzip.cpp [1:4]
+ libs/iostreams/src/zlib.cpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 127686edf197d40f94d17cffcf6f5c4f
+BELONGS ya.make
+ License text:
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/default_operations.hpp [9:10]
+ boost/numeric/odeint/algebra/detail/for_each.hpp [9:10]
+ boost/numeric/odeint/algebra/detail/macros.hpp [9:10]
+ boost/numeric/odeint/algebra/vector_space_algebra.hpp [9:10]
+ boost/numeric/odeint/external/thrust/thrust_operations.hpp [9:10]
+ boost/numeric/odeint/stepper/implicit_euler.hpp [9:11]
+ boost/numeric/odeint/stepper/stepper_categories.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 127ca1debadc86c9870fadcd69654480
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2005 Peter Dimov
+ // Copyright 2007-2012 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp [12:14]
+ boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp [16:18]
+ boost/serialization/detail/shared_count_132.hpp [13:13]
+ boost/smart_ptr/bad_weak_ptr.hpp [13:13]
+ boost/smart_ptr/detail/shared_count.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_aix.hpp [8:10]
+ boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp [13:15]
+ boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp [7:9]
+ boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_nt.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_pt.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_solaris.hpp [8:10]
+ boost/smart_ptr/detail/sp_counted_base_spin.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp [8:11]
+ boost/smart_ptr/detail/sp_counted_base_w32.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_impl.hpp [13:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 12ca7f7ec40c36a05a70ff3f155d83bc
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2011 Hartmut Kaiser
+ Copyright (c) Christopher Diggins 2005
+ Copyright (c) Pablo Aguilar 2005
+ Copyright (c) Kevlin Henney 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/detail/hold_any.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 13087fd87820c611025de1f0f3ef01bf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/container_fwd.hpp at line 4
+ License text:
+ // Copyright 2005-2011 Daniel James.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/container_fwd.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 131a38df1eeda4b85ac98993b4ee9713
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2001 David Abrahams
+ // Copyright (c) 2005 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/bind.hpp [13:15]
+ boost/bind/mem_fn.hpp [13:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL 137964c7b2b6263415eb6109939370d9
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013, 2014.
+ // Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/multi/algorithms/covered_by.hpp [8:9]
+ boost/geometry/multi/algorithms/within.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 137f142bceff932c328791882d8815c5
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2000 Stephen Cleary
+ // Copyright (C) 2008 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/singleton.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1388a67a310afe61a99a5f1d1a487e61
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2012 Bruno Lalande, Paris, France.
+ // Copyright (c) 2012 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/util/bare_type.hpp [3:5]
+ boost/geometry/util/calculation_type.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 139227f655286fca021562ae1922e833
+BELONGS ya.make
+ License text:
+ // Copyright Robert Ramey 2007. Changes made to permit
+ // application throughout the serialization library.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/singleton.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 14119de8db705578a517c134230e8e03
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/reference_traits.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/reference_traits.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 142fae03f8cf7efe4031b5048d19b839
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/policies/robustness/get_rescale_policy.hpp [3:6]
+ boost/geometry/policies/robustness/rescale_policy.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 14331b282bfa08584de4f520cfbc1275
+BELONGS libs/system/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/system/detail/error_code.ipp at line 6, libs/system/src/error_code.cpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/detail/error_code.ipp [3:6]
+ libs/system/src/error_code.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 14ba6239150c08643e3cb26043015c00
+BELONGS ya.make
+ License text:
+ * Copyright 2013 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/thread_pool.hpp [2:2]
+ boost/winapi/tls.hpp [2:2]
+ boost/winapi/waitable_timer.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 14ca74a6c57686dced35dc7c6c99c615
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/delete.hpp [1:1]
+ boost/thread/detail/invoker.hpp [1:1]
+ boost/thread/detail/log.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 14effa07ccbb9b0cc19de7fad21ff8f9
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2014.
+ // Modifications copyright (c) 2014 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/centroid/translating_transformer.hpp [8:9]
+ boost/geometry/core/closure.hpp [7:8]
+ boost/geometry/core/point_order.hpp [7:8]
+ boost/geometry/core/radius.hpp [7:8]
+ boost/geometry/core/tags.hpp [7:8]
+ boost/geometry/strategies/agnostic/hull_graham_andrew.hpp [5:6]
+ boost/geometry/strategies/concepts/convex_hull_concept.hpp [7:8]
+ boost/geometry/util/bare_type.hpp [7:8]
+ boost/geometry/util/select_calculation_type.hpp [7:8]
+ boost/geometry/util/select_coordinate_type.hpp [7:8]
+ boost/geometry/util/select_most_precise.hpp [7:8]
+ boost/geometry/views/detail/normalized_view.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1503802c606bb498fc119fbf3329ccce
+BELONGS ya.make
+ License text:
+ // Copyright (c) Jeremy Siek 2001
+ // Copyright (c) Douglas Gregor 2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/biconnected_components.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 15236ff1a242179fe99b3db6441bef51
+BELONGS ya.make
+ License text:
+ // Copyright Howard Hinnant 2007-2010.
+ // Copyright Vicente J. Botet Escriba 2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/v2/shared_mutex.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1526a00d8f41c15b39466eff919d34bc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/numpy/config.hpp at line 3
+ License text:
+ // (C) Copyright Samuli-Petrus Korhonen 2017.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/numpy/config.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1545e811e1799589fc4bdfed4fdc284f
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/O1_size.hpp [5:5]
+ boost/mpl/O1_size_fwd.hpp [5:5]
+ boost/mpl/advance.hpp [5:5]
+ boost/mpl/advance_fwd.hpp [5:5]
+ boost/mpl/alias.hpp [5:5]
+ boost/mpl/and.hpp [5:5]
+ boost/mpl/apply.hpp [9:9]
+ boost/mpl/apply_fwd.hpp [9:9]
+ boost/mpl/arithmetic.hpp [5:5]
+ boost/mpl/at.hpp [5:5]
+ boost/mpl/at_fwd.hpp [5:5]
+ boost/mpl/aux_/O1_size_impl.hpp [5:5]
+ boost/mpl/aux_/advance_backward.hpp [9:9]
+ boost/mpl/aux_/advance_forward.hpp [9:9]
+ boost/mpl/aux_/arithmetic_op.hpp [4:4]
+ boost/mpl/aux_/at_impl.hpp [5:5]
+ boost/mpl/aux_/back_impl.hpp [5:5]
+ boost/mpl/aux_/begin_end_impl.hpp [5:5]
+ boost/mpl/aux_/clear_impl.hpp [5:5]
+ boost/mpl/aux_/comparison_op.hpp [4:4]
+ boost/mpl/aux_/config/ctps.hpp [5:5]
+ boost/mpl/aux_/config/msvc_typename.hpp [5:5]
+ boost/mpl/aux_/config/preprocessor.hpp [5:5]
+ boost/mpl/aux_/config/static_constant.hpp [5:5]
+ boost/mpl/aux_/config/ttp.hpp [5:5]
+ boost/mpl/aux_/config/use_preprocessed.hpp [5:5]
+ boost/mpl/aux_/count_args.hpp [4:4]
+ boost/mpl/aux_/count_impl.hpp [5:5]
+ boost/mpl/aux_/empty_impl.hpp [5:5]
+ boost/mpl/aux_/erase_impl.hpp [5:5]
+ boost/mpl/aux_/erase_key_impl.hpp [5:5]
+ boost/mpl/aux_/filter_iter.hpp [5:5]
+ boost/mpl/aux_/find_if_pred.hpp [5:6]
+ boost/mpl/aux_/fold_impl.hpp [5:5]
+ boost/mpl/aux_/fold_impl_body.hpp [6:6]
+ boost/mpl/aux_/front_impl.hpp [5:5]
+ boost/mpl/aux_/insert_impl.hpp [5:5]
+ boost/mpl/aux_/insert_range_impl.hpp [5:5]
+ boost/mpl/aux_/iter_fold_impl.hpp [5:5]
+ boost/mpl/aux_/joint_iter.hpp [5:5]
+ boost/mpl/aux_/lambda_no_ctps.hpp [9:9]
+ boost/mpl/aux_/largest_int.hpp [5:5]
+ boost/mpl/aux_/logical_op.hpp [2:2]
+ boost/mpl/aux_/msvc_dtw.hpp [2:2]
+ boost/mpl/aux_/msvc_never_true.hpp [5:5]
+ boost/mpl/aux_/nested_type_wknd.hpp [5:5]
+ boost/mpl/aux_/numeric_op.hpp [8:8]
+ boost/mpl/aux_/pop_back_impl.hpp [5:5]
+ boost/mpl/aux_/pop_front_impl.hpp [5:5]
+ boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/advance_backward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/advance_forward.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/and.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/apply.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/deque.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/divides.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/greater.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/greater_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/less.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/less_equal.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/list.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/list_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/map.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/minus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/modulus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/or.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/plus.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/set.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/set_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/times.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/vector.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessor/def_params_tail.hpp [5:5]
+ boost/mpl/aux_/preprocessor/enum.hpp [5:5]
+ boost/mpl/aux_/preprocessor/ext_params.hpp [5:5]
+ boost/mpl/aux_/preprocessor/filter_params.hpp [5:5]
+ boost/mpl/aux_/preprocessor/params.hpp [5:5]
+ boost/mpl/aux_/preprocessor/partial_spec_params.hpp [5:5]
+ boost/mpl/aux_/range_c/O1_size.hpp [5:5]
+ boost/mpl/aux_/range_c/back.hpp [5:5]
+ boost/mpl/aux_/range_c/empty.hpp [5:5]
+ boost/mpl/aux_/range_c/front.hpp [5:5]
+ boost/mpl/aux_/range_c/iterator.hpp [5:5]
+ boost/mpl/aux_/range_c/size.hpp [5:5]
+ boost/mpl/aux_/range_c/tag.hpp [5:5]
+ boost/mpl/aux_/reverse_fold_impl.hpp [5:5]
+ boost/mpl/aux_/reverse_fold_impl_body.hpp [6:6]
+ boost/mpl/aux_/reverse_iter_fold_impl.hpp [5:5]
+ boost/mpl/aux_/shift_op.hpp [4:4]
+ boost/mpl/aux_/single_element_iter.hpp [5:5]
+ boost/mpl/aux_/size_impl.hpp [5:5]
+ boost/mpl/aux_/transform_iter.hpp [5:5]
+ boost/mpl/aux_/type_wrapper.hpp [5:6]
+ boost/mpl/aux_/value_wknd.hpp [5:5]
+ boost/mpl/aux_/yes_no.hpp [5:5]
+ boost/mpl/back.hpp [5:5]
+ boost/mpl/back_fwd.hpp [5:5]
+ boost/mpl/base.hpp [5:5]
+ boost/mpl/begin_end.hpp [5:5]
+ boost/mpl/begin_end_fwd.hpp [5:5]
+ boost/mpl/bind_fwd.hpp [9:9]
+ boost/mpl/bitxor.hpp [5:6]
+ boost/mpl/bool.hpp [5:5]
+ boost/mpl/bool_fwd.hpp [5:5]
+ boost/mpl/clear.hpp [5:5]
+ boost/mpl/clear_fwd.hpp [5:5]
+ boost/mpl/comparison.hpp [5:5]
+ boost/mpl/copy.hpp [5:6]
+ boost/mpl/copy_if.hpp [5:6]
+ boost/mpl/count.hpp [5:5]
+ boost/mpl/count_fwd.hpp [5:5]
+ boost/mpl/deque.hpp [5:5]
+ boost/mpl/distance.hpp [5:5]
+ boost/mpl/distance_fwd.hpp [5:5]
+ boost/mpl/divides.hpp [5:5]
+ boost/mpl/empty.hpp [5:5]
+ boost/mpl/empty_fwd.hpp [5:5]
+ boost/mpl/equal.hpp [5:5]
+ boost/mpl/equal_to.hpp [5:5]
+ boost/mpl/erase.hpp [5:5]
+ boost/mpl/erase_fwd.hpp [5:5]
+ boost/mpl/erase_key.hpp [5:5]
+ boost/mpl/erase_key_fwd.hpp [5:5]
+ boost/mpl/eval_if.hpp [5:5]
+ boost/mpl/filter_view.hpp [5:5]
+ boost/mpl/find_if.hpp [5:5]
+ boost/mpl/front.hpp [5:5]
+ boost/mpl/front_fwd.hpp [5:5]
+ boost/mpl/greater.hpp [5:5]
+ boost/mpl/greater_equal.hpp [5:5]
+ boost/mpl/identity.hpp [5:5]
+ boost/mpl/if.hpp [5:5]
+ boost/mpl/insert.hpp [5:5]
+ boost/mpl/insert_fwd.hpp [5:5]
+ boost/mpl/insert_range.hpp [5:5]
+ boost/mpl/insert_range_fwd.hpp [5:5]
+ boost/mpl/int.hpp [5:5]
+ boost/mpl/int_fwd.hpp [5:5]
+ boost/mpl/iterator_category.hpp [5:5]
+ boost/mpl/iterator_tags.hpp [5:5]
+ boost/mpl/joint_view.hpp [5:5]
+ boost/mpl/less.hpp [5:5]
+ boost/mpl/less_equal.hpp [5:5]
+ boost/mpl/limits/arity.hpp [5:5]
+ boost/mpl/limits/list.hpp [5:5]
+ boost/mpl/limits/map.hpp [5:5]
+ boost/mpl/limits/set.hpp [5:5]
+ boost/mpl/limits/unrolling.hpp [5:5]
+ boost/mpl/limits/vector.hpp [5:5]
+ boost/mpl/list.hpp [5:5]
+ boost/mpl/list/aux_/O1_size.hpp [5:5]
+ boost/mpl/list/aux_/begin_end.hpp [5:5]
+ boost/mpl/list/aux_/clear.hpp [5:5]
+ boost/mpl/list/aux_/empty.hpp [5:5]
+ boost/mpl/list/aux_/front.hpp [5:5]
+ boost/mpl/list/aux_/item.hpp [5:5]
+ boost/mpl/list/aux_/iterator.hpp [5:5]
+ boost/mpl/list/aux_/numbered.hpp [4:5]
+ boost/mpl/list/aux_/numbered_c.hpp [4:4]
+ boost/mpl/list/aux_/pop_front.hpp [5:5]
+ boost/mpl/list/aux_/preprocessed/plain/list10.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list20.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list30.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list40.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list50.hpp [2:2]
+ boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp [2:2]
+ boost/mpl/list/aux_/push_back.hpp [5:5]
+ boost/mpl/list/aux_/push_front.hpp [5:5]
+ boost/mpl/list/aux_/size.hpp [5:5]
+ boost/mpl/list/aux_/tag.hpp [5:5]
+ boost/mpl/list/list0.hpp [5:5]
+ boost/mpl/list/list0_c.hpp [5:5]
+ boost/mpl/list/list10.hpp [5:5]
+ boost/mpl/list/list10_c.hpp [5:5]
+ boost/mpl/list/list20.hpp [5:5]
+ boost/mpl/list/list20_c.hpp [5:5]
+ boost/mpl/list/list30.hpp [5:5]
+ boost/mpl/list/list30_c.hpp [5:5]
+ boost/mpl/list/list40.hpp [5:5]
+ boost/mpl/list/list40_c.hpp [5:5]
+ boost/mpl/list/list50.hpp [5:5]
+ boost/mpl/list/list50_c.hpp [5:5]
+ boost/mpl/list_c.hpp [5:5]
+ boost/mpl/logical.hpp [5:5]
+ boost/mpl/long.hpp [5:5]
+ boost/mpl/long_fwd.hpp [5:5]
+ boost/mpl/map.hpp [5:5]
+ boost/mpl/map/aux_/numbered.hpp [6:6]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map10.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map20.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map30.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map40.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map50.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp [2:3]
+ boost/mpl/map/map10.hpp [5:6]
+ boost/mpl/map/map20.hpp [5:6]
+ boost/mpl/map/map30.hpp [5:6]
+ boost/mpl/map/map40.hpp [5:6]
+ boost/mpl/map/map50.hpp [5:6]
+ boost/mpl/math/fixed_c.hpp [5:5]
+ boost/mpl/math/is_even.hpp [5:5]
+ boost/mpl/math/rational_c.hpp [5:5]
+ boost/mpl/max_element.hpp [5:5]
+ boost/mpl/minus.hpp [5:5]
+ boost/mpl/modulus.hpp [5:5]
+ boost/mpl/multiplies.hpp [5:5]
+ boost/mpl/negate.hpp [5:5]
+ boost/mpl/next_prior.hpp [5:5]
+ boost/mpl/not.hpp [5:5]
+ boost/mpl/not_equal_to.hpp [5:5]
+ boost/mpl/or.hpp [5:5]
+ boost/mpl/plus.hpp [5:5]
+ boost/mpl/pop_back.hpp [5:5]
+ boost/mpl/pop_back_fwd.hpp [5:5]
+ boost/mpl/pop_front.hpp [5:5]
+ boost/mpl/pop_front_fwd.hpp [5:5]
+ boost/mpl/push_back.hpp [5:5]
+ boost/mpl/push_back_fwd.hpp [5:5]
+ boost/mpl/push_front.hpp [5:5]
+ boost/mpl/push_front_fwd.hpp [5:5]
+ boost/mpl/range_c.hpp [5:5]
+ boost/mpl/remove.hpp [5:6]
+ boost/mpl/remove_if.hpp [5:6]
+ boost/mpl/replace.hpp [5:7]
+ boost/mpl/replace_if.hpp [5:7]
+ boost/mpl/reverse.hpp [5:5]
+ boost/mpl/same_as.hpp [5:5]
+ boost/mpl/sequence_tag.hpp [5:5]
+ boost/mpl/sequence_tag_fwd.hpp [5:5]
+ boost/mpl/set.hpp [5:5]
+ boost/mpl/set/aux_/numbered.hpp [6:6]
+ boost/mpl/set/aux_/numbered_c.hpp [6:6]
+ boost/mpl/set/aux_/preprocessed/plain/set10.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set20.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set30.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set40.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set50.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp [2:3]
+ boost/mpl/set/set10.hpp [5:6]
+ boost/mpl/set/set10_c.hpp [5:6]
+ boost/mpl/set/set20.hpp [5:6]
+ boost/mpl/set/set20_c.hpp [5:6]
+ boost/mpl/set/set30.hpp [5:6]
+ boost/mpl/set/set30_c.hpp [5:6]
+ boost/mpl/set/set40.hpp [5:6]
+ boost/mpl/set/set40_c.hpp [5:6]
+ boost/mpl/set/set50.hpp [5:6]
+ boost/mpl/set/set50_c.hpp [5:6]
+ boost/mpl/set_c.hpp [5:5]
+ boost/mpl/shift_left.hpp [5:6]
+ boost/mpl/shift_right.hpp [5:6]
+ boost/mpl/single_view.hpp [5:5]
+ boost/mpl/size.hpp [5:5]
+ boost/mpl/size_fwd.hpp [5:5]
+ boost/mpl/size_t.hpp [5:5]
+ boost/mpl/size_t_fwd.hpp [5:5]
+ boost/mpl/times.hpp [5:5]
+ boost/mpl/transform.hpp [5:6]
+ boost/mpl/transform_view.hpp [5:5]
+ boost/mpl/unique.hpp [5:6]
+ boost/mpl/vector.hpp [5:5]
+ boost/mpl/vector/aux_/O1_size.hpp [5:5]
+ boost/mpl/vector/aux_/at.hpp [5:5]
+ boost/mpl/vector/aux_/back.hpp [5:5]
+ boost/mpl/vector/aux_/begin_end.hpp [5:5]
+ boost/mpl/vector/aux_/clear.hpp [5:5]
+ boost/mpl/vector/aux_/empty.hpp [5:5]
+ boost/mpl/vector/aux_/item.hpp [5:5]
+ boost/mpl/vector/aux_/iterator.hpp [5:5]
+ boost/mpl/vector/aux_/numbered.hpp [6:6]
+ boost/mpl/vector/aux_/numbered_c.hpp [6:6]
+ boost/mpl/vector/aux_/pop_back.hpp [5:5]
+ boost/mpl/vector/aux_/pop_front.hpp [5:5]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp [2:2]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp [2:2]
+ boost/mpl/vector/aux_/push_back.hpp [5:5]
+ boost/mpl/vector/aux_/push_front.hpp [5:5]
+ boost/mpl/vector/aux_/size.hpp [5:5]
+ boost/mpl/vector/aux_/tag.hpp [5:5]
+ boost/mpl/vector/aux_/vector0.hpp [5:5]
+ boost/mpl/vector/vector0.hpp [5:5]
+ boost/mpl/vector/vector0_c.hpp [5:5]
+ boost/mpl/vector/vector10.hpp [5:5]
+ boost/mpl/vector/vector10_c.hpp [5:5]
+ boost/mpl/vector/vector20.hpp [5:5]
+ boost/mpl/vector/vector20_c.hpp [5:5]
+ boost/mpl/vector/vector30.hpp [5:5]
+ boost/mpl/vector/vector30_c.hpp [5:5]
+ boost/mpl/vector/vector40.hpp [5:5]
+ boost/mpl/vector/vector40_c.hpp [5:5]
+ boost/mpl/vector/vector50.hpp [5:5]
+ boost/mpl/vector/vector50_c.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 15ae8814b00bf7c2e807dfdd8c253473
+BELONGS ya.make
+ License text:
+ * Copyright (c) 1998
+ * Silicon Graphics Computer Systems, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/streams/bufferstream.hpp [17:18]
+ boost/interprocess/streams/vectorstream.hpp [17:18]
+
+KEEP COPYRIGHT_SERVICE_LABEL 15d50536bcbda2f7a36d5d623fb19036
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2014, Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/bad_optional_access.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 15e7036f24a807be04d8a05d49c0ecb9
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005-2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/collectives.hpp [1:1]
+ boost/mpi/collectives/all_reduce.hpp [1:2]
+ boost/mpi/collectives_fwd.hpp [1:1]
+ boost/mpi/exception.hpp [1:1]
+ boost/mpi/operations.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 16032898d1264a298670223659b54ff0
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2015 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/csbl/queue.hpp [1:1]
+ boost/thread/executors/serial_executor_cont.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 160f7dd82fcdd6e80a6e06d84c5a5cca
+BELONGS ya.make
+ License text:
+ // Copyright Howard Hinnant 2007-2010.
+ // Copyright Vicente J. Botet Escriba 2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/v2/shared_mutex.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1638af8b9d8a13b7d2e95217a0492d14
+BELONGS ya.make
+ License text:
+ // (C) Copyright Andrew Sutton 2007
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/geodesic_distance.hpp [1:1]
+ boost/graph/property_maps/null_property_map.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 166fc3d16b64c3b6284ed28945c457da
+BELONGS ya.make
+ License text:
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/multi_array_algebra.hpp [9:10]
+ boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/blaze/blaze_resize.hpp [9:10]
+ boost/numeric/odeint/external/eigen/eigen.hpp [9:10]
+ boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp [9:10]
+ boost/numeric/odeint/stepper/velocity_verlet.hpp [9:10]
+ boost/numeric/odeint/util/multi_array_adaption.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1734766e3cba0021c51f6c2cd7aa54b1
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2011, 2016 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lockfree/detail/copy_payload.hpp [3:3]
+ boost/lockfree/detail/parameter.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 173fdc8f8d22cde2d6542e79b1d5d711
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/statechart/in_state_reaction.hpp at line 6
+ License text:
+ // Copyright 2005-2008 Andreas Huber Doenni
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/statechart/in_state_reaction.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 17933b826f084cbdab08e8129bb2d208
+BELONGS ya.make
+ License text:
+ Copyright (c) 2014 Christoph Weiss
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/include/hash.hpp [2:2]
+ boost/fusion/sequence/hash.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 17a7391070cb12a423a9e2dbf8d73e1f
+BELONGS ya.make
+ License text:
+ Copyright (c) 2011 Jamboree
+ Copyright (c) 2014 Lee Clagett
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/directive/seek.hpp [2:3]
+ boost/spirit/repository/home/qi/directive/seek.hpp [2:2]
+ boost/spirit/repository/home/support/seek.hpp [2:2]
+ boost/spirit/repository/include/qi_seek.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 17b350b3a7cc10d64ea2dfae64d3f340
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2004-2008 The Trustees of Indiana University.
+ // Copyright (C) 2007 Douglas Gregor <doug.gregor@gmail.com>
+ // Copyright (C) 2007 Matthias Troyer <troyer@boost-consulting.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/detail/mpi_process_group.ipp [3:5]
+ boost/graph/distributed/detail/tag_allocator.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 17b5775897efd9ca319340c209a0aa32
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/is_convertible.hpp at line 5, boost/ptr_container/detail/static_move_ptr.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/detail/is_convertible.hpp [1:5]
+ boost/ptr_container/detail/static_move_ptr.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 17fb6732a4d2890917643ed3e710bbe7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function/function_base.hpp at line 6, boost/function/function_template.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function/function_base.hpp [3:6]
+ boost/function/function_template.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 186be276c136601da52c329d686ef896
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/adjacent_filtered.hpp at line 5, boost/range/adaptor/argument_fwd.hpp at line 5, boost/range/adaptor/filtered.hpp at line 5, boost/range/adaptor/indirected.hpp at line 5, boost/range/adaptor/map.hpp at line 5, boost/range/adaptor/reversed.hpp at line 5, boost/range/adaptor/sliced.hpp at line 5, boost/range/adaptor/transformed.hpp at line 5, boost/range/adaptor/uniqued.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/adaptor/adjacent_filtered.hpp [3:5]
+ boost/range/adaptor/argument_fwd.hpp [3:5]
+ boost/range/adaptor/filtered.hpp [3:5]
+ boost/range/adaptor/indirected.hpp [3:5]
+ boost/range/adaptor/map.hpp [3:5]
+ boost/range/adaptor/reversed.hpp [3:5]
+ boost/range/adaptor/sliced.hpp [3:5]
+ boost/range/adaptor/transformed.hpp [3:5]
+ boost/range/adaptor/uniqued.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1877c8c0d80d7b1ea728c21778641fa6
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2000.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/type_traits.hpp [2:3]
+ boost/interprocess/detail/type_traits.hpp [2:3]
+ boost/move/detail/type_traits.hpp [2:3]
+ boost/static_assert.hpp [1:3]
+ boost/type_traits.hpp [1:3]
+ boost/type_traits/alignment_of.hpp [2:4]
+ boost/type_traits/alignment_traits.hpp [2:4]
+ boost/type_traits/is_polymorphic.hpp [1:3]
+ boost/type_traits/type_with_alignment.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 188ba6bce942da3ec5a7d3e219272d13
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002-2007 Marcin Kalicinski
+ // Copyright (C) 2007 Alexey Baskakov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_tree/detail/xml_parser_writer_settings.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 189d46e9447d77111b28e7945880691c
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2004
+ // Copyright Alexander Nasonov 2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/empty_sequence.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 18b9eb6943a3e523664fc674daba703a
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/test/impl/execution_monitor.ipp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 18bad9344d7cba762fbd435259d6301b
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/workaround.hpp at line 3, boost/detail/indirect_traits.hpp at line 3, boost/detail/workaround.hpp at line 3, boost/mpl/aux_/config/bind.hpp at line 7, boost/python.hpp at line 3, boost/python/arg_from_python.hpp at line 3, boost/python/args.hpp at line 3, boost/python/args_fwd.hpp at line 3, boost/python/back_reference.hpp at line 3, boost/python/base_type_traits.hpp at line 3, boost/python/bases.hpp at line 3, boost/python/borrowed.hpp at line 3, boost/python/call.hpp at line 5, boost/python/call_method.hpp at line 5, boost/python/cast.hpp at line 3, boost/python/class.hpp at line 3, boost/python/class_fwd.hpp at line 3, boost/python/converter/arg_from_python.hpp at line 3, boost/python/converter/arg_to_python.hpp at line 3, boost/python/converter/arg_to_python_base.hpp at line 3, boost/python/converter/as_to_python_function.hpp at line 3, boost/python/converter/builtin_converters.hpp at line 3, boost/python/converter/constructor_function.hpp at line 3, boost/python/converter/convertible_function.hpp at line 3, boost/python/converter/from_python.hpp at line 3, boost/python/converter/implicit.hpp at line 3, boost/python/converter/obj_mgr_arg_from_python.hpp at line 3, boost/python/converter/object_manager.hpp at line 3, boost/python/converter/pointer_type_id.hpp at line 3, boost/python/converter/pyobject_traits.hpp at line 3, boost/python/converter/pyobject_type.hpp at line 3, boost/python/converter/pytype_object_mgr_traits.hpp at line 3, boost/python/converter/registered.hpp at line 3, boost/python/converter/registered_pointee.hpp at line 3, boost/python/converter/registrations.hpp at line 3, boost/python/converter/return_from_python.hpp at line 3, boost/python/converter/rvalue_from_python_data.hpp at line 3, boost/python/converter/shared_ptr_deleter.hpp at line 3, boost/python/converter/shared_ptr_from_python.hpp at line 3, boost/python/converter/to_python_function_type.hpp at line 3, boost/python/copy_const_reference.hpp at line 3, boost/python/copy_non_const_reference.hpp at line 3, boost/python/data_members.hpp at line 3, boost/python/def.hpp at line 3, boost/python/default_call_policies.hpp at line 3, boost/python/detail/aix_init_module.hpp at line 3, boost/python/detail/api_placeholder.hpp at line 3, boost/python/detail/borrowed_ptr.hpp at line 5, boost/python/detail/caller.hpp at line 5, boost/python/detail/construct.hpp at line 3, boost/python/detail/convertible.hpp at line 3, boost/python/detail/cv_category.hpp at line 3, boost/python/detail/decorated_type_id.hpp at line 3, boost/python/detail/decref_guard.hpp at line 3, boost/python/detail/def_helper.hpp at line 3, boost/python/detail/dependent.hpp at line 3, boost/python/detail/destroy.hpp at line 3, boost/python/detail/exception_handler.hpp at line 3, boost/python/detail/force_instantiate.hpp at line 3, boost/python/detail/if_else.hpp at line 3, boost/python/detail/invoke.hpp at line 5, boost/python/detail/make_keyword_range_fn.hpp at line 3, boost/python/detail/make_tuple.hpp at line 4, boost/python/detail/map_entry.hpp at line 3, boost/python/detail/mpl_lambda.hpp at line 3, boost/python/detail/msvc_typeinfo.hpp at line 3, boost/python/detail/not_specified.hpp at line 3, boost/python/detail/operator_id.hpp at line 3, boost/python/detail/overloads_fwd.hpp at line 3, boost/python/detail/pointee.hpp at line 3, boost/python/detail/preprocessor.hpp at line 3, boost/python/detail/raw_pyobject.hpp at line 3, boost/python/detail/referent_storage.hpp at line 3, boost/python/detail/result.hpp at line 5, boost/python/detail/scope.hpp at line 3, boost/python/detail/signature.hpp at line 5, boost/python/detail/string_literal.hpp at line 3, boost/python/detail/target.hpp at line 5, boost/python/detail/translate_exception.hpp at line 3, boost/python/detail/type_list.hpp at line 3, boost/python/detail/type_list_impl.hpp at line 4, boost/python/detail/unwind_type.hpp at line 3, boost/python/detail/void_ptr.hpp at line 3, boost/python/detail/void_return.hpp at line 3, boost/python/dict.hpp at line 3, boost/python/enum.hpp at line 3, boost/python/exception_translator.hpp at line 3, boost/python/extract.hpp at line 3, boost/python/handle.hpp at line 3, boost/python/handle_fwd.hpp at line 3, boost/python/has_back_reference.hpp at line 3, boost/python/implicit.hpp at line 3, boost/python/instance_holder.hpp at line 3, boost/python/iterator.hpp at line 3, boost/python/list.hpp at line 3, boost/python/long.hpp at line 3, boost/python/lvalue_from_pytype.hpp at line 3, boost/python/manage_new_object.hpp at line 3, boost/python/module_init.hpp at line 3, boost/python/object.hpp at line 3, boost/python/object/add_to_namespace.hpp at line 3, boost/python/object/class_detail.hpp at line 3, boost/python/object/enum_base.hpp at line 3, boost/python/object/find_instance.hpp at line 3, boost/python/object/function_handle.hpp at line 3, boost/python/object/function_object.hpp at line 3, boost/python/object/inheritance.hpp at line 3, boost/python/object/instance.hpp at line 3, boost/python/object/iterator.hpp at line 3, boost/python/object/iterator_core.hpp at line 3, boost/python/object/life_support.hpp at line 3, boost/python/object/make_instance.hpp at line 3, boost/python/object/make_ptr_instance.hpp at line 3, boost/python/object/py_function.hpp at line 3, boost/python/object/value_holder_fwd.hpp at line 3, boost/python/object_attributes.hpp at line 3, boost/python/object_call.hpp at line 4, boost/python/object_core.hpp at line 3, boost/python/object_fwd.hpp at line 3, boost/python/object_items.hpp at line 3, boost/python/object_operators.hpp at line 3, boost/python/object_protocol.hpp at line 3, boost/python/object_protocol_core.hpp at line 3, boost/python/object_slices.hpp at line 3, boost/python/operators.hpp at line 3, boost/python/other.hpp at line 7, boost/python/overloads.hpp at line 3, boost/python/pointee.hpp at line 3, boost/python/proxy.hpp at line 3, boost/python/ptr.hpp at line 7, boost/python/refcount.hpp at line 3, boost/python/reference_existing_object.hpp at line 3, boost/python/register_ptr_to_python.hpp at line 3, boost/python/return_by_value.hpp at line 3, boost/python/return_internal_reference.hpp at line 3, boost/python/return_value_policy.hpp at line 3, boost/python/scope.hpp at line 3, boost/python/self.hpp at line 3, boost/python/slice_nil.hpp at line 3, boost/python/str.hpp at line 3, boost/python/tag.hpp at line 3, boost/python/to_python_converter.hpp at line 3, boost/python/to_python_indirect.hpp at line 3, boost/python/to_python_value.hpp at line 3, boost/python/tuple.hpp at line 3, boost/python/type_id.hpp at line 3, boost/python/with_custodian_and_ward.hpp at line 3, libs/python/src/converter/arg_to_python_base.cpp at line 3, libs/python/src/converter/builtin_converters.cpp at line 3, libs/python/src/converter/from_python.cpp at line 3, libs/python/src/list.cpp at line 3, libs/python/src/long.cpp at line 3, libs/python/src/object/enum.cpp at line 3, libs/python/src/object/inheritance.cpp at line 3, libs/python/src/object/iterator.cpp at line 3, libs/python/src/object/life_support.cpp at line 3, libs/python/src/object_operators.cpp at line 3, libs/python/src/object_protocol.cpp at line 3
+ License text:
+ // Copyright David Abrahams 2002.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/workaround.hpp [1:3]
+ boost/detail/indirect_traits.hpp [1:3]
+ boost/detail/workaround.hpp [1:3]
+ boost/mpl/aux_/config/bind.hpp [5:6]
+ boost/python.hpp [1:3]
+ boost/python/arg_from_python.hpp [1:3]
+ boost/python/args.hpp [1:3]
+ boost/python/args_fwd.hpp [1:3]
+ boost/python/back_reference.hpp [1:3]
+ boost/python/base_type_traits.hpp [1:3]
+ boost/python/bases.hpp [1:3]
+ boost/python/borrowed.hpp [1:3]
+ boost/python/call.hpp [3:5]
+ boost/python/call_method.hpp [3:5]
+ boost/python/cast.hpp [1:3]
+ boost/python/class.hpp [1:3]
+ boost/python/class_fwd.hpp [1:3]
+ boost/python/converter/arg_from_python.hpp [1:3]
+ boost/python/converter/arg_to_python.hpp [1:3]
+ boost/python/converter/arg_to_python_base.hpp [1:3]
+ boost/python/converter/as_to_python_function.hpp [1:3]
+ boost/python/converter/builtin_converters.hpp [1:3]
+ boost/python/converter/constructor_function.hpp [1:3]
+ boost/python/converter/convertible_function.hpp [1:3]
+ boost/python/converter/from_python.hpp [1:3]
+ boost/python/converter/implicit.hpp [1:3]
+ boost/python/converter/obj_mgr_arg_from_python.hpp [1:3]
+ boost/python/converter/object_manager.hpp [1:3]
+ boost/python/converter/pointer_type_id.hpp [1:3]
+ boost/python/converter/pyobject_traits.hpp [1:3]
+ boost/python/converter/pyobject_type.hpp [1:3]
+ boost/python/converter/pytype_object_mgr_traits.hpp [1:3]
+ boost/python/converter/registered.hpp [1:4]
+ boost/python/converter/registered_pointee.hpp [1:3]
+ boost/python/converter/registrations.hpp [1:3]
+ boost/python/converter/return_from_python.hpp [1:3]
+ boost/python/converter/rvalue_from_python_data.hpp [1:3]
+ boost/python/converter/shared_ptr_deleter.hpp [1:3]
+ boost/python/converter/shared_ptr_from_python.hpp [1:4]
+ boost/python/converter/to_python_function_type.hpp [1:3]
+ boost/python/copy_const_reference.hpp [1:3]
+ boost/python/copy_non_const_reference.hpp [1:3]
+ boost/python/data_members.hpp [1:3]
+ boost/python/def.hpp [1:3]
+ boost/python/default_call_policies.hpp [1:3]
+ boost/python/detail/aix_init_module.hpp [1:3]
+ boost/python/detail/api_placeholder.hpp [1:3]
+ boost/python/detail/borrowed_ptr.hpp [3:5]
+ boost/python/detail/caller.hpp [3:5]
+ boost/python/detail/construct.hpp [1:3]
+ boost/python/detail/convertible.hpp [1:3]
+ boost/python/detail/cv_category.hpp [1:3]
+ boost/python/detail/decorated_type_id.hpp [1:3]
+ boost/python/detail/decref_guard.hpp [1:3]
+ boost/python/detail/def_helper.hpp [1:3]
+ boost/python/detail/dependent.hpp [1:3]
+ boost/python/detail/destroy.hpp [1:3]
+ boost/python/detail/exception_handler.hpp [1:3]
+ boost/python/detail/force_instantiate.hpp [1:3]
+ boost/python/detail/if_else.hpp [1:3]
+ boost/python/detail/invoke.hpp [3:5]
+ boost/python/detail/make_keyword_range_fn.hpp [1:3]
+ boost/python/detail/make_tuple.hpp [2:4]
+ boost/python/detail/map_entry.hpp [1:3]
+ boost/python/detail/mpl_lambda.hpp [1:3]
+ boost/python/detail/msvc_typeinfo.hpp [1:3]
+ boost/python/detail/not_specified.hpp [1:3]
+ boost/python/detail/operator_id.hpp [1:3]
+ boost/python/detail/overloads_fwd.hpp [1:3]
+ boost/python/detail/pointee.hpp [1:3]
+ boost/python/detail/preprocessor.hpp [1:3]
+ boost/python/detail/raw_pyobject.hpp [1:3]
+ boost/python/detail/referent_storage.hpp [1:3]
+ boost/python/detail/result.hpp [3:5]
+ boost/python/detail/scope.hpp [1:3]
+ boost/python/detail/signature.hpp [3:5]
+ boost/python/detail/string_literal.hpp [1:3]
+ boost/python/detail/target.hpp [3:5]
+ boost/python/detail/translate_exception.hpp [1:3]
+ boost/python/detail/type_list.hpp [1:3]
+ boost/python/detail/type_list_impl.hpp [2:4]
+ boost/python/detail/unwind_type.hpp [1:3]
+ boost/python/detail/void_ptr.hpp [1:3]
+ boost/python/detail/void_return.hpp [1:3]
+ boost/python/dict.hpp [1:3]
+ boost/python/enum.hpp [1:3]
+ boost/python/exception_translator.hpp [1:3]
+ boost/python/extract.hpp [1:3]
+ boost/python/handle.hpp [1:3]
+ boost/python/handle_fwd.hpp [1:3]
+ boost/python/has_back_reference.hpp [1:3]
+ boost/python/implicit.hpp [1:3]
+ boost/python/instance_holder.hpp [1:3]
+ boost/python/iterator.hpp [1:3]
+ boost/python/list.hpp [1:3]
+ boost/python/long.hpp [1:3]
+ boost/python/lvalue_from_pytype.hpp [1:3]
+ boost/python/manage_new_object.hpp [1:3]
+ boost/python/module_init.hpp [1:3]
+ boost/python/object.hpp [1:3]
+ boost/python/object/add_to_namespace.hpp [1:3]
+ boost/python/object/class_detail.hpp [1:3]
+ boost/python/object/enum_base.hpp [1:3]
+ boost/python/object/find_instance.hpp [1:3]
+ boost/python/object/function_handle.hpp [1:3]
+ boost/python/object/function_object.hpp [1:3]
+ boost/python/object/inheritance.hpp [1:3]
+ boost/python/object/instance.hpp [1:3]
+ boost/python/object/iterator.hpp [1:3]
+ boost/python/object/iterator_core.hpp [1:3]
+ boost/python/object/life_support.hpp [1:3]
+ boost/python/object/make_instance.hpp [1:3]
+ boost/python/object/make_ptr_instance.hpp [1:3]
+ boost/python/object/py_function.hpp [1:3]
+ boost/python/object/value_holder_fwd.hpp [1:3]
+ boost/python/object_attributes.hpp [1:3]
+ boost/python/object_call.hpp [2:4]
+ boost/python/object_core.hpp [1:3]
+ boost/python/object_fwd.hpp [1:3]
+ boost/python/object_items.hpp [1:3]
+ boost/python/object_operators.hpp [1:3]
+ boost/python/object_protocol.hpp [1:3]
+ boost/python/object_protocol_core.hpp [1:3]
+ boost/python/object_slices.hpp [1:3]
+ boost/python/operators.hpp [1:3]
+ boost/python/other.hpp [5:7]
+ boost/python/overloads.hpp [1:3]
+ boost/python/pointee.hpp [1:3]
+ boost/python/proxy.hpp [1:3]
+ boost/python/ptr.hpp [5:7]
+ boost/python/refcount.hpp [1:3]
+ boost/python/reference_existing_object.hpp [1:3]
+ boost/python/register_ptr_to_python.hpp [1:3]
+ boost/python/return_by_value.hpp [1:3]
+ boost/python/return_internal_reference.hpp [1:3]
+ boost/python/return_value_policy.hpp [1:3]
+ boost/python/scope.hpp [1:3]
+ boost/python/self.hpp [1:3]
+ boost/python/slice_nil.hpp [1:3]
+ boost/python/str.hpp [1:3]
+ boost/python/tag.hpp [1:3]
+ boost/python/to_python_converter.hpp [1:3]
+ boost/python/to_python_indirect.hpp [1:3]
+ boost/python/to_python_value.hpp [1:4]
+ boost/python/tuple.hpp [1:3]
+ boost/python/type_id.hpp [1:3]
+ boost/python/with_custodian_and_ward.hpp [1:3]
+ libs/python/src/converter/arg_to_python_base.cpp [1:3]
+ libs/python/src/converter/builtin_converters.cpp [1:3]
+ libs/python/src/converter/from_python.cpp [1:3]
+ libs/python/src/list.cpp [1:3]
+ libs/python/src/long.cpp [1:3]
+ libs/python/src/object/enum.cpp [1:3]
+ libs/python/src/object/inheritance.cpp [1:3]
+ libs/python/src/object/iterator.cpp [1:3]
+ libs/python/src/object/life_support.cpp [1:3]
+ libs/python/src/object_operators.cpp [1:3]
+ libs/python/src/object_protocol.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 18db89d56f07e1620883cb27717f7211
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/fail_tag.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2012.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/fail_tag.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 18e0c3d28e19c9d848cf5c5d5be379bf
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/recalculate.hpp [3:6]
+ boost/geometry/index/detail/rtree/utilities/statistics.hpp [5:6]
+ boost/geometry/policies/robustness/no_rescale_policy.hpp [3:6]
+ boost/geometry/policies/robustness/robust_point_type.hpp [3:6]
+ boost/geometry/policies/robustness/segment_ratio_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 190342424801597afe0e19a4020a4dc9
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2005-2008.
+ // Copyright (c) 2006-2008 Johan Rade
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/fpclassify.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 190ae12968af08ba9e725d4fa3ab1c7b
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2016.
+ // Modifications copyright (c) 2016, Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/arithmetic/cross_product.hpp [7:9]
+ boost/geometry/io/svg/write.hpp [6:7]
+ boost/geometry/io/svg/write_svg.hpp [6:7]
+ boost/geometry/io/svg/write_svg_multi.hpp [5:6]
+ boost/geometry/strategies/spherical/ssf.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 19a141ac32c2d6744e67364352a18f40
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2008 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/thread_heap_alloc.hpp [6:6]
+ boost/thread/pthread/thread_heap_alloc.hpp [4:6]
+ boost/thread/win32/mfc_thread_init.hpp [6:7]
+ boost/thread/win32/thread_data.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 19a677ea551d13c9ed7c1861dbc9551b
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2014 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/exceptional_ptr.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1a0e7f0eeffa7515571f6386c345dfa0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2014 Thomas Bernard
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/directive/no_case.hpp [2:2]
+ boost/spirit/home/x3/directive/repeat.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1a243be6fc839e64391e9bd0d3aea29a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/edmunds_karp_max_flow.hpp at line 4
+ License text:
+ // (c) Copyright Juergen Hunold 2008
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/edmunds_karp_max_flow.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1a3253e5b49a77f2dc95004f816c7fa1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/detail/meta_utils.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2012-2015.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/detail/meta_utils.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1a3cdf7829fa3778821cc02be36b9488
+BELONGS ya.make
+ License text:
+ // Copyright 2010 John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/add_lvalue_reference.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1a5bfddf0b038e143ef61e1e55728936
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+ Copyright (c) 2010-2011 Christopher Schmidt
+ Copyright (c) 2013-2014 Damien Buhl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/adt/adapt_assoc_adt.hpp [2:5]
+ boost/fusion/adapted/struct/adapt_assoc_struct.hpp [2:4]
+ boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/fold.hpp [2:5]
+ boost/fusion/algorithm/iteration/fold.hpp [35:37]
+ boost/fusion/algorithm/iteration/for_each.hpp [2:3]
+ boost/fusion/algorithm/query/all.hpp [2:3]
+ boost/fusion/algorithm/query/any.hpp [2:4]
+ boost/fusion/algorithm/query/count_if.hpp [2:3]
+ boost/fusion/algorithm/query/detail/all.hpp [2:3]
+ boost/fusion/algorithm/query/detail/any.hpp [2:4]
+ boost/fusion/algorithm/query/detail/count_if.hpp [2:3]
+ boost/fusion/algorithm/query/detail/find_if.hpp [2:4]
+ boost/fusion/algorithm/query/none.hpp [2:3]
+ boost/fusion/view/transform_view/detail/apply_transform_result.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1a685e898b4592da150472c48fb0097e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2006 Daniel Wallin
+ Copyright (c) 2005 Dan Marsden
+ Copyright (c) 2007 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl.hpp [2:4]
+ boost/phoenix/stl/algorithm.hpp [2:5]
+ boost/phoenix/stl/container.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1a8332990a75c7d0ee74d02b5ac451fd
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2001 - 2003
+ // (C) Copyright Jens Maurer 2001
+ // (C) Copyright Peter Dimov 2001
+ // (C) Copyright Darin Adler 2001
+ // (C) Copyright Beman Dawes 2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/detail/macro_value.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1a93e11c2572326c6a8b7cbe63d4f6a3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/warning_disable.hpp at line 3, boost/math/bindings/e_float.hpp at line 3, boost/math/bindings/mpfr.hpp at line 3, boost/math/bindings/mpreal.hpp at line 3, boost/math/distributions/detail/generic_mode.hpp at line 3, boost/math/distributions/detail/generic_quantile.hpp at line 3, boost/math/distributions/laplace.hpp at line 3, boost/math/distributions/non_central_beta.hpp at line 5, boost/math/distributions/non_central_chi_squared.hpp at line 5, boost/math/distributions/non_central_f.hpp at line 5, boost/math/distributions/non_central_t.hpp at line 5, boost/math/special_functions/detail/round_fwd.hpp at line 3, boost/math/tr1.hpp at line 3
+ License text:
+ // Copyright John Maddock 2008
+ // Use, modification, and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/warning_disable.hpp [1:3]
+ boost/math/bindings/e_float.hpp [1:3]
+ boost/math/bindings/mpfr.hpp [1:3]
+ boost/math/bindings/mpreal.hpp [1:3]
+ boost/math/distributions/detail/generic_mode.hpp [1:1]
+ boost/math/distributions/detail/generic_quantile.hpp [1:3]
+ boost/math/distributions/laplace.hpp [1:3]
+ boost/math/distributions/non_central_beta.hpp [3:3]
+ boost/math/distributions/non_central_chi_squared.hpp [3:3]
+ boost/math/distributions/non_central_f.hpp [3:3]
+ boost/math/distributions/non_central_t.hpp [3:3]
+ boost/math/special_functions/detail/round_fwd.hpp [1:1]
+ boost/math/tr1.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1aaf18d7a866b2a0f3d63bce77bf1c79
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pending/iterator_tests.hpp at line 3
+ License text:
+ // Copyright David Abrahams and Jeremy Siek 2003.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pending/iterator_tests.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1ab986157400dd432a8bcb0c9a170495
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/meta_functions.hpp at line 6, boost/ptr_container/ptr_circular_buffer.hpp at line 6, boost/ptr_container/ptr_inserter.hpp at line 6, boost/ptr_container/ptr_unordered_map.hpp at line 6, boost/ptr_container/ptr_unordered_set.hpp at line 6, boost/ptr_container/serialize_ptr_circular_buffer.hpp at line 6, boost/ptr_container/serialize_ptr_unordered_map.hpp at line 6, boost/ptr_container/serialize_ptr_unordered_set.hpp at line 6
+ License text:
+ // Copyright Thorsten Ottosen 2008. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/detail/meta_functions.hpp [4:6]
+ boost/ptr_container/ptr_circular_buffer.hpp [4:6]
+ boost/ptr_container/ptr_inserter.hpp [4:6]
+ boost/ptr_container/ptr_unordered_map.hpp [4:6]
+ boost/ptr_container/ptr_unordered_set.hpp [4:6]
+ boost/ptr_container/serialize_ptr_circular_buffer.hpp [4:6]
+ boost/ptr_container/serialize_ptr_unordered_map.hpp [4:6]
+ boost/ptr_container/serialize_ptr_unordered_set.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1abc3fcba70e66cde30b4179bcb3f53f
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/variant_dynamic.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/variant_static.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/weak_dynamic.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/weak_static.hpp [5:5]
+ boost/geometry/index/predicates.hpp [5:5]
+ boost/geometry/index/rtree.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1b49b31378926fed6bad2e9e34790202
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pending/container_traits.hpp at line 5, boost/pending/detail/disjoint_sets.hpp at line 5, boost/pending/detail/property.hpp at line 5, boost/pending/fibonacci_heap.hpp at line 5, boost/pending/property.hpp at line 5, boost/pending/queue.hpp at line 5, boost/pending/stringtok.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pending/container_traits.hpp [1:5]
+ boost/pending/detail/disjoint_sets.hpp [1:3]
+ boost/pending/detail/property.hpp [1:3]
+ boost/pending/fibonacci_heap.hpp [1:3]
+ boost/pending/property.hpp [1:3]
+ boost/pending/queue.hpp [1:3]
+ boost/pending/stringtok.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1b648647338e7dfb30cf8f41aab9764b
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2011 Thomas Bernard
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/repository/home/support/kwd.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1b72a977bcabcebb1599cb0a79d665a2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/hyperexponential_distribution.hpp at line 5
+ License text:
+ * Copyright Marco Guazzone 2014
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/hyperexponential_distribution.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1b7cfe3c28b945889d356efeb8c494b0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/cpp11/first_of.hpp at line 6, boost/metaparse/v1/cpp11/impl/nth_of_c.hpp at line 6, boost/metaparse/v1/cpp11/impl/nth_of_c_skip_remaining.hpp at line 6, boost/metaparse/v1/cpp11/last_of.hpp at line 6, boost/metaparse/v1/cpp11/nth_of.hpp at line 6, boost/metaparse/v1/cpp11/nth_of_c.hpp at line 6, boost/metaparse/v1/first_of.hpp at line 6, boost/metaparse/v1/fwd/string.hpp at line 6, boost/metaparse/v1/last_of.hpp at line 6, boost/metaparse/v1/nth_of.hpp at line 6, boost/metaparse/v1/nth_of_c.hpp at line 6, boost/metaparse/v1/string.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2017.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/cpp11/first_of.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/nth_of_c.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/nth_of_c_skip_remaining.hpp [4:6]
+ boost/metaparse/v1/cpp11/last_of.hpp [4:6]
+ boost/metaparse/v1/cpp11/nth_of.hpp [4:6]
+ boost/metaparse/v1/cpp11/nth_of_c.hpp [4:6]
+ boost/metaparse/v1/first_of.hpp [4:6]
+ boost/metaparse/v1/fwd/string.hpp [4:6]
+ boost/metaparse/v1/last_of.hpp [4:6]
+ boost/metaparse/v1/nth_of.hpp [4:6]
+ boost/metaparse/v1/nth_of_c.hpp [4:6]
+ boost/metaparse/v1/string.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1b80c8e7f5a5f53532760a321c46060b
+BELONGS ya.make
+ License text:
+ // Copyright Pavol Droba 2002-2004.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/string.hpp [3:3]
+ boost/algorithm/string/find_iterator.hpp [3:3]
+ boost/algorithm/string_regex.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1b8dc6e6cec8ce31d4939e9ed0a1dbb8
+BELONGS ya.make
+ License text:
+ * Copyright Thijs van den Berg 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/non_central_chi_squared_distribution.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1b9e68c88d4d11c6efc3d2b7423c816c
+BELONGS ya.make
+ License text:
+ // (C) Copyright Noel Belcourt 2007.
+ // Copyright 2017, NVIDIA CORPORATION.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/pgi.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1bf87741a9385d7452ade49e1b079010
+BELONGS ya.make
+ License text:
+ // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+ // Copyright 2010 Thomas Claveirole
+ // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/adjacency_list.hpp [2:4]
+ boost/graph/bellman_ford_shortest_paths.hpp [3:4]
+ boost/graph/breadth_first_search.hpp [3:4]
+ boost/graph/cuthill_mckee_ordering.hpp [2:5]
+ boost/graph/depth_first_search.hpp [2:4]
+ boost/graph/detail/adj_list_edge_iterator.hpp [3:4]
+ boost/graph/detail/adjacency_list.hpp [3:5]
+ boost/graph/detail/array_binary_tree.hpp [3:4]
+ boost/graph/detail/connected_components.hpp [2:3]
+ boost/graph/detail/edge.hpp [3:4]
+ boost/graph/detail/incidence_iterator.hpp [3:4]
+ boost/graph/detail/self_avoiding_walk.hpp [2:3]
+ boost/graph/detail/sparse_ordering.hpp [2:5]
+ boost/graph/dijkstra_shortest_paths.hpp [2:3]
+ boost/graph/dijkstra_shortest_paths_no_color_map.hpp [2:4]
+ boost/graph/edge_list.hpp [2:3]
+ boost/graph/filtered_graph.hpp [2:3]
+ boost/graph/graph_as_tree.hpp [3:4]
+ boost/graph/graph_concepts.hpp [3:4]
+ boost/graph/graph_traits.hpp [2:3]
+ boost/graph/graph_utility.hpp [3:4]
+ boost/graph/johnson_all_pairs_shortest.hpp [2:3]
+ boost/graph/king_ordering.hpp [2:5]
+ boost/graph/kruskal_min_spanning_tree.hpp [3:4]
+ boost/graph/leda_graph.hpp [2:6]
+ boost/graph/matrix_as_graph.hpp [3:4]
+ boost/graph/named_function_params.hpp [2:3]
+ boost/graph/neighbor_bfs.hpp [3:4]
+ boost/graph/prim_minimum_spanning_tree.hpp [2:3]
+ boost/graph/properties.hpp [2:3]
+ boost/graph/random.hpp [2:4]
+ boost/graph/read_dimacs.hpp [2:3]
+ boost/graph/relax.hpp [2:3]
+ boost/graph/sequential_vertex_coloring.hpp [2:4]
+ boost/graph/smallest_last_ordering.hpp [2:3]
+ boost/graph/strong_components.hpp [3:4]
+ boost/graph/topological_sort.hpp [3:4]
+ boost/graph/transpose_graph.hpp [3:4]
+ boost/graph/undirected_dfs.hpp [3:4]
+ boost/graph/vector_as_graph.hpp [2:5]
+ boost/graph/visitors.hpp [2:3]
+ boost/pending/bucket_sorter.hpp [3:4]
+ boost/pending/disjoint_sets.hpp [3:4]
+ boost/pending/indirect_cmp.hpp [3:4]
+ boost/pending/is_heap.hpp [3:4]
+ boost/pending/mutable_heap.hpp [3:4]
+ boost/pending/mutable_queue.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1c034100ff11e3930ab970dbeb694450
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/hp_acc.hpp [1:8]
+ boost/config/platform/hpux.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1c03bc5dd84750a354e472dd50319748
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/constants/constants.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1c1008010a34f57eb6e59b47766f5371
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2002-2006
+ // Copyright David Abrahams 2002-2003
+ // Copyright Daniel Walker 2007
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/has_xxx.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1c18279f60677577782048946d4fcdc9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010 Thomas Heller
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/core/actor.hpp [2:5]
+ boost/phoenix/core/arity.hpp [2:3]
+ boost/phoenix/core/debug.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/actor_operator.hpp [24:25]
+ boost/phoenix/core/detail/cpp03/actor_result_of.hpp [25:26]
+ boost/phoenix/core/detail/cpp03/call.hpp [21:22]
+ boost/phoenix/core/detail/cpp03/expression.hpp [18:20]
+ boost/phoenix/core/detail/cpp03/function_equal.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/function_equal.hpp [21:23]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_10.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_20.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_30.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_40.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_50.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_10.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_20.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_30.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_40.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_50.hpp [2:4]
+ boost/phoenix/core/detail/expression.hpp [2:2]
+ boost/phoenix/core/function_equal.hpp [2:3]
+ boost/phoenix/core/is_nullary.hpp [2:4]
+ boost/phoenix/core/meta_grammar.hpp [2:4]
+ boost/phoenix/core/reference.hpp [2:3]
+ boost/phoenix/core/terminal.hpp [2:3]
+ boost/phoenix/core/terminal_fwd.hpp [2:3]
+ boost/phoenix/core/value.hpp [2:3]
+ boost/phoenix/core/visit_each.hpp [2:3]
+ boost/phoenix/function/adapt_function.hpp [2:4]
+ boost/phoenix/function/detail/cpp03/function_operator.hpp [21:22]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_10.hpp [2:3]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_20.hpp [2:3]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_30.hpp [2:3]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_40.hpp [2:3]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_50.hpp [2:3]
+ boost/phoenix/fusion.hpp [2:3]
+ boost/phoenix/fusion/at.hpp [2:4]
+ boost/phoenix/object.hpp [2:3]
+ boost/phoenix/object/const_cast.hpp [2:3]
+ boost/phoenix/object/construct.hpp [2:3]
+ boost/phoenix/object/delete.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/construct.hpp [21:22]
+ boost/phoenix/object/detail/cpp03/construct_eval.hpp [23:24]
+ boost/phoenix/object/detail/cpp03/new.hpp [21:22]
+ boost/phoenix/object/detail/cpp03/new_eval.hpp [23:24]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_10.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_20.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_30.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_40.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_50.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_10.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_20.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_30.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_40.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_50.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_10.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_20.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_30.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_40.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_50.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_10.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_20.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_30.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_40.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_50.hpp [2:3]
+ boost/phoenix/object/detail/target.hpp [2:3]
+ boost/phoenix/object/dynamic_cast.hpp [2:3]
+ boost/phoenix/object/new.hpp [2:3]
+ boost/phoenix/object/reinterpret_cast.hpp [2:3]
+ boost/phoenix/object/static_cast.hpp [2:3]
+ boost/phoenix/operator.hpp [2:3]
+ boost/phoenix/operator/arithmetic.hpp [2:3]
+ boost/phoenix/operator/bitwise.hpp [2:3]
+ boost/phoenix/operator/comparison.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval.hpp [15:17]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval_result_of.hpp [15:17]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_gen.hpp [15:16]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_10.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_20.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_30.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_40.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_50.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_10.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_20.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_30.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_40.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_50.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_10.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_20.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_30.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_40.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_50.hpp [2:3]
+ boost/phoenix/operator/detail/define_operator.hpp [2:3]
+ boost/phoenix/operator/detail/undef_operator.hpp [2:2]
+ boost/phoenix/operator/if_else.hpp [2:3]
+ boost/phoenix/operator/io.hpp [2:3]
+ boost/phoenix/operator/logical.hpp [2:3]
+ boost/phoenix/operator/member.hpp [2:4]
+ boost/phoenix/operator/self.hpp [2:3]
+ boost/phoenix/phoenix.hpp [2:3]
+ boost/phoenix/scope.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/dynamic.hpp [25:26]
+ boost/phoenix/scope/detail/cpp03/lambda.hpp [14:17]
+ boost/phoenix/scope/detail/cpp03/local_gen.hpp [3:4]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_10.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_20.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_30.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_40.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_50.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_10.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_20.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_30.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_40.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_50.hpp [2:5]
+ boost/phoenix/scope/dynamic.hpp [2:4]
+ boost/phoenix/scope/lambda.hpp [2:5]
+ boost/phoenix/scope/let.hpp [2:5]
+ boost/phoenix/scope/scoped_environment.hpp [2:3]
+ boost/phoenix/statement/detail/catch_push_back.hpp [20:21]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_10.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_20.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_30.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_40.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_50.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_10.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_20.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_30.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_40.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_50.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_10.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_20.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_30.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_40.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_50.hpp [2:3]
+ boost/phoenix/statement/detail/switch.hpp [25:26]
+ boost/phoenix/statement/detail/try_catch_eval.hpp [25:26]
+ boost/phoenix/statement/detail/try_catch_expression.hpp [25:26]
+ boost/phoenix/statement/do_while.hpp [2:3]
+ boost/phoenix/statement/for.hpp [2:3]
+ boost/phoenix/statement/sequence.hpp [2:4]
+ boost/phoenix/statement/switch.hpp [2:3]
+ boost/phoenix/statement/throw.hpp [2:4]
+ boost/phoenix/statement/try_catch.hpp [2:4]
+ boost/phoenix/statement/while.hpp [2:3]
+ boost/phoenix/support/detail/iterate.hpp [2:2]
+ boost/phoenix/support/detail/iterate_define.hpp [2:2]
+ boost/phoenix/support/detail/iterate_undef.hpp [2:2]
+ boost/phoenix/support/iterate.hpp [2:2]
+ boost/phoenix/support/preprocessed/vector_10.hpp [2:3]
+ boost/phoenix/support/preprocessed/vector_20.hpp [2:3]
+ boost/phoenix/support/preprocessed/vector_30.hpp [2:3]
+ boost/phoenix/support/preprocessed/vector_40.hpp [2:3]
+ boost/phoenix/support/preprocessed/vector_50.hpp [2:3]
+ boost/phoenix/support/vector.hpp [41:42]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1c595f63ea7712179f9a8b6862388b47
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/detail/limits.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1c9bd66a67f098d2c88bc6c83fae2eb5
+BELONGS libs/context/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/context/src/asm/jump_arm64_aapcs_elf_gas.S at line 4, libs/context/src/asm/jump_arm64_aapcs_macho_gas.S at line 4, libs/context/src/asm/make_arm64_aapcs_elf_gas.S at line 4, libs/context/src/asm/make_arm64_aapcs_macho_gas.S at line 4, libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S at line 4, libs/context/src/asm/ontop_arm64_aapcs_macho_gas.S at line 4
+ License text:
+ Copyright Edward Nevill + Oliver Kowalke 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/context/src/asm/jump_arm64_aapcs_elf_gas.S [2:4]
+ libs/context/src/asm/jump_arm64_aapcs_macho_gas.S [2:4]
+ libs/context/src/asm/make_arm64_aapcs_elf_gas.S [2:4]
+ libs/context/src/asm/make_arm64_aapcs_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S [2:4]
+ libs/context/src/asm/ontop_arm64_aapcs_macho_gas.S [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1ca91ef6f05ea3ed2297c8183c32193a
+BELONGS ya.make
+ License text:
+ Copyright (c) 2004 Angus Leeming
+ Copyright (c) 2004 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl/container/container.hpp [2:3]
+ boost/phoenix/stl/container/detail/container.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1ccfdb8c8e3f3c9ca15360e826c2e6d3
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2008-11.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tr1_c_macros.ipp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1ce35bdc48274a02cf4ec2773a903c47
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/detail/signed_unsigned_tools.hpp at line 5
+ License text:
+ * Copyright Jens Maurer 2006
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/detail/signed_unsigned_tools.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1d0d15a66be2e325955709e25d49dab9
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003-2009 Matthias Christian Schabel
+ // Copyright (C) 2007-2009 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/units/base_units/us/pound_force.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1d174c5ff96b62285624fb2326e00394
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/safe_bool.hpp at line 5
+ License text:
+ // Copyright (c) 2010 Neil Groves
+ // Distributed under the Boost Software License, Version 1.0.
+ // See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/detail/safe_bool.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1d32a7b49a04abb2fd3dbc34628bab5d
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes, 2009
+ // Copyright (C) 2011-2012 Vicente J. Botet Escriba
+ // Copyright (C) 2012 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/scoped_enum.hpp [3:5]
+ boost/core/underlying_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1d556732a0c7feaf3d0bed45f7e37a82
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009 Helge Bahmann
+ // Copyright (c) 2012 - 2014, 2017 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/interlocked.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1d83636a81c575d946d6e70ade01c4f9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2001-2010 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/include/karma_duplicate.hpp [2:4]
+ boost/spirit/include/karma_grammar.hpp [2:4]
+ boost/spirit/include/karma_rule.hpp [2:4]
+ boost/spirit/include/lex_char_token_def.hpp [2:4]
+ boost/spirit/include/lex_generate_static_lexertl.hpp [2:4]
+ boost/spirit/include/lex_plain_token.hpp [2:4]
+ boost/spirit/include/lex_primitives.hpp [2:4]
+ boost/spirit/include/lex_tokenize_and_parse_attr.hpp [2:4]
+ boost/spirit/include/qi_matches.hpp [2:4]
+ boost/spirit/include/qi_no_skip.hpp [2:4]
+ boost/spirit/include/support_adapt_adt_attributes.hpp [2:4]
+ boost/spirit/include/support_attributes_fwd.hpp [2:4]
+ boost/spirit/include/support_container.hpp [2:4]
+ boost/spirit/include/support_extended_variant.hpp [2:4]
+ boost/spirit/include/support_ostream_iterator.hpp [2:4]
+ boost/spirit/include/support_utree.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1daddaec4a141024c460f121eb640798
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/common_edg.hpp [1:7]
+ boost/config/compiler/kai.hpp [1:5]
+ boost/config/compiler/sunpro_cc.hpp [1:7]
+ boost/config/platform/hpux.hpp [1:7]
+ boost/config/stdlib/dinkumware.hpp [1:7]
+ boost/detail/iterator.hpp [1:3]
+ boost/iterator/detail/config_def.hpp [1:5]
+ boost/iterator/detail/enable_if.hpp [1:5]
+ boost/iterator/filter_iterator.hpp [1:5]
+ boost/iterator/indirect_iterator.hpp [1:5]
+ boost/iterator/interoperable.hpp [1:5]
+ boost/iterator/iterator_adaptor.hpp [1:5]
+ boost/iterator/iterator_facade.hpp [1:5]
+ boost/iterator/reverse_iterator.hpp [1:5]
+ boost/iterator/transform_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1dda61b33b296fd3f69276f5d576f7dd
+BELONGS libs/serialization/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/archive_exception.hpp at line 14, boost/archive/basic_archive.hpp at line 14, boost/archive/basic_binary_iarchive.hpp at line 21, boost/archive/basic_binary_iprimitive.hpp at line 25, boost/archive/basic_binary_oarchive.hpp at line 14, boost/archive/basic_binary_oprimitive.hpp at line 14, boost/archive/basic_text_iarchive.hpp at line 14, boost/archive/basic_text_iprimitive.hpp at line 14, boost/archive/basic_text_oarchive.hpp at line 14, boost/archive/basic_text_oprimitive.hpp at line 14, boost/archive/basic_xml_archive.hpp at line 14, boost/archive/basic_xml_iarchive.hpp at line 14, boost/archive/basic_xml_oarchive.hpp at line 14, boost/archive/binary_iarchive.hpp at line 14, boost/archive/binary_iarchive_impl.hpp at line 14, boost/archive/binary_oarchive.hpp at line 14, boost/archive/binary_oarchive_impl.hpp at line 14, boost/archive/binary_wiarchive.hpp at line 14, boost/archive/binary_woarchive.hpp at line 14, boost/archive/detail/abi_prefix.hpp at line 6, boost/archive/detail/abi_suffix.hpp at line 6, boost/archive/detail/basic_iarchive.hpp at line 14, boost/archive/detail/basic_iserializer.hpp at line 14, boost/archive/detail/basic_oarchive.hpp at line 14, boost/archive/detail/basic_oserializer.hpp at line 14, boost/archive/detail/basic_pointer_iserializer.hpp at line 15, boost/archive/detail/basic_pointer_oserializer.hpp at line 15, boost/archive/detail/basic_serializer.hpp at line 14, boost/archive/detail/basic_serializer_map.hpp at line 14, boost/archive/detail/common_iarchive.hpp at line 14, boost/archive/detail/common_oarchive.hpp at line 14, boost/archive/detail/interface_iarchive.hpp at line 18, boost/archive/detail/interface_oarchive.hpp at line 14, boost/archive/detail/iserializer.hpp at line 20, boost/archive/detail/oserializer.hpp at line 20, boost/archive/detail/polymorphic_iarchive_route.hpp at line 14, boost/archive/detail/polymorphic_oarchive_route.hpp at line 14, boost/archive/dinkumware.hpp at line 14, boost/archive/impl/archive_serializer_map.ipp at line 6, boost/archive/impl/basic_binary_iarchive.ipp at line 6, boost/archive/impl/basic_binary_iprimitive.ipp at line 6, boost/archive/impl/basic_binary_oarchive.ipp at line 6, boost/archive/impl/basic_binary_oprimitive.ipp at line 6, boost/archive/impl/basic_text_iarchive.ipp at line 6, boost/archive/impl/basic_text_iprimitive.ipp at line 6, boost/archive/impl/basic_text_oarchive.ipp at line 6, boost/archive/impl/basic_text_oprimitive.ipp at line 6, boost/archive/impl/basic_xml_grammar.hpp at line 14, boost/archive/impl/basic_xml_iarchive.ipp at line 6, boost/archive/impl/basic_xml_oarchive.ipp at line 6, boost/archive/impl/text_iarchive_impl.ipp at line 6, boost/archive/impl/text_oarchive_impl.ipp at line 6, boost/archive/impl/text_wiarchive_impl.ipp at line 6, boost/archive/impl/text_woarchive_impl.ipp at line 6, boost/archive/impl/xml_iarchive_impl.ipp at line 6, boost/archive/impl/xml_oarchive_impl.ipp at line 6, boost/archive/impl/xml_wiarchive_impl.ipp at line 6, boost/archive/impl/xml_woarchive_impl.ipp at line 6, boost/archive/iterators/base64_exception.hpp at line 14, boost/archive/iterators/base64_from_binary.hpp at line 14, boost/archive/iterators/binary_from_base64.hpp at line 14, boost/archive/iterators/dataflow.hpp at line 14, boost/archive/iterators/dataflow_exception.hpp at line 14, boost/archive/iterators/escape.hpp at line 14, boost/archive/iterators/insert_linebreaks.hpp at line 14, boost/archive/iterators/istream_iterator.hpp at line 14, boost/archive/iterators/mb_from_wchar.hpp at line 14, boost/archive/iterators/ostream_iterator.hpp at line 14, boost/archive/iterators/remove_whitespace.hpp at line 14, boost/archive/iterators/transform_width.hpp at line 14, boost/archive/iterators/unescape.hpp at line 14, boost/archive/iterators/wchar_from_mb.hpp at line 14, boost/archive/iterators/xml_escape.hpp at line 14, boost/archive/iterators/xml_unescape.hpp at line 14, boost/archive/iterators/xml_unescape_exception.hpp at line 14, boost/archive/polymorphic_binary_iarchive.hpp at line 14, boost/archive/polymorphic_binary_oarchive.hpp at line 14, boost/archive/polymorphic_iarchive.hpp at line 14, boost/archive/polymorphic_oarchive.hpp at line 14, boost/archive/polymorphic_text_iarchive.hpp at line 14, boost/archive/polymorphic_text_oarchive.hpp at line 14, boost/archive/polymorphic_text_wiarchive.hpp at line 14, boost/archive/polymorphic_text_woarchive.hpp at line 14, boost/archive/polymorphic_xml_iarchive.hpp at line 14, boost/archive/polymorphic_xml_oarchive.hpp at line 14, boost/archive/polymorphic_xml_wiarchive.hpp at line 14, boost/archive/polymorphic_xml_woarchive.hpp at line 14, boost/archive/text_iarchive.hpp at line 14, boost/archive/text_oarchive.hpp at line 14, boost/archive/text_wiarchive.hpp at line 14, boost/archive/text_woarchive.hpp at line 14, boost/archive/tmpdir.hpp at line 14, boost/archive/wcslen.hpp at line 14, boost/archive/xml_iarchive.hpp at line 14, boost/archive/xml_oarchive.hpp at line 14, boost/archive/xml_wiarchive.hpp at line 14, boost/archive/xml_woarchive.hpp at line 14, boost/serialization/access.hpp at line 14, boost/serialization/archive_input_unordered_map.hpp at line 15, boost/serialization/archive_input_unordered_set.hpp at line 14, boost/serialization/base_object.hpp at line 14, boost/serialization/binary_object.hpp at line 14, boost/serialization/boost_unordered_map.hpp at line 15, boost/serialization/boost_unordered_set.hpp at line 14, boost/serialization/collection_traits.hpp at line 14, boost/serialization/collections_load_imp.hpp at line 18, boost/serialization/collections_save_imp.hpp at line 14, boost/serialization/deque.hpp at line 14, boost/serialization/detail/is_default_constructible.hpp at line 14, boost/serialization/detail/stack_constructor.hpp at line 14, boost/serialization/export.hpp at line 14, boost/serialization/extended_type_info.hpp at line 14, boost/serialization/extended_type_info_no_rtti.hpp at line 16, boost/serialization/extended_type_info_typeid.hpp at line 16, boost/serialization/factory.hpp at line 14, boost/serialization/force_include.hpp at line 14, boost/serialization/forward_list.hpp at line 14, boost/serialization/hash_collections_load_imp.hpp at line 15, boost/serialization/hash_collections_save_imp.hpp at line 14, boost/serialization/hash_map.hpp at line 15, boost/serialization/hash_set.hpp at line 14, boost/serialization/level.hpp at line 14, boost/serialization/level_enum.hpp at line 14, boost/serialization/list.hpp at line 14, boost/serialization/nvp.hpp at line 14, boost/serialization/priority_queue.hpp at line 14, boost/serialization/serialization.hpp at line 21, boost/serialization/shared_ptr_132.hpp at line 14, boost/serialization/slist.hpp at line 14, boost/serialization/smart_cast.hpp at line 14, boost/serialization/split_free.hpp at line 14, boost/serialization/split_member.hpp at line 14, boost/serialization/string.hpp at line 15, boost/serialization/strong_typedef.hpp at line 14, boost/serialization/tracking.hpp at line 14, boost/serialization/tracking_enum.hpp at line 14, boost/serialization/traits.hpp at line 14, boost/serialization/type_info_implementation.hpp at line 14, boost/serialization/unique_ptr.hpp at line 14, boost/serialization/unordered_collections_load_imp.hpp at line 15, boost/serialization/unordered_collections_save_imp.hpp at line 14, boost/serialization/unordered_map.hpp at line 15, boost/serialization/unordered_set.hpp at line 14, boost/serialization/utility.hpp at line 15, boost/serialization/vector.hpp at line 14, boost/serialization/version.hpp at line 14, libs/serialization/src/basic_archive.cpp at line 6, libs/serialization/src/basic_iarchive.cpp at line 6, libs/serialization/src/basic_iserializer.cpp at line 6, libs/serialization/src/basic_oarchive.cpp at line 6, libs/serialization/src/basic_oserializer.cpp at line 6, libs/serialization/src/basic_pointer_iserializer.cpp at line 6, libs/serialization/src/basic_pointer_oserializer.cpp at line 6, libs/serialization/src/basic_serializer_map.cpp at line 6, libs/serialization/src/basic_text_iprimitive.cpp at line 6, libs/serialization/src/basic_text_wiprimitive.cpp at line 6, libs/serialization/src/basic_xml_archive.cpp at line 6, libs/serialization/src/basic_xml_grammar.ipp at line 6, libs/serialization/src/binary_iarchive.cpp at line 6, libs/serialization/src/binary_oarchive.cpp at line 6, libs/serialization/src/binary_wiarchive.cpp at line 6, libs/serialization/src/binary_woarchive.cpp at line 6, libs/serialization/src/extended_type_info.cpp at line 6, libs/serialization/src/extended_type_info_no_rtti.cpp at line 7, libs/serialization/src/extended_type_info_typeid.cpp at line 7, libs/serialization/src/polymorphic_iarchive.cpp at line 6, libs/serialization/src/polymorphic_oarchive.cpp at line 6, libs/serialization/src/text_iarchive.cpp at line 6, libs/serialization/src/text_oarchive.cpp at line 6, libs/serialization/src/text_wiarchive.cpp at line 6, libs/serialization/src/text_woarchive.cpp at line 6, libs/serialization/src/void_cast.cpp at line 6, libs/serialization/src/xml_grammar.cpp at line 6, libs/serialization/src/xml_iarchive.cpp at line 6, libs/serialization/src/xml_oarchive.cpp at line 6, libs/serialization/src/xml_wgrammar.cpp at line 6, libs/serialization/src/xml_wiarchive.cpp at line 6, libs/serialization/src/xml_woarchive.cpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/archive_exception.hpp [12:14]
+ boost/archive/basic_archive.hpp [12:14]
+ boost/archive/basic_binary_iarchive.hpp [19:21]
+ boost/archive/basic_binary_iprimitive.hpp [23:25]
+ boost/archive/basic_binary_oarchive.hpp [12:14]
+ boost/archive/basic_binary_oprimitive.hpp [12:14]
+ boost/archive/basic_text_iarchive.hpp [12:14]
+ boost/archive/basic_text_iprimitive.hpp [12:14]
+ boost/archive/basic_text_oarchive.hpp [12:14]
+ boost/archive/basic_text_oprimitive.hpp [12:14]
+ boost/archive/basic_xml_archive.hpp [12:14]
+ boost/archive/basic_xml_iarchive.hpp [12:14]
+ boost/archive/basic_xml_oarchive.hpp [12:14]
+ boost/archive/binary_iarchive.hpp [12:14]
+ boost/archive/binary_iarchive_impl.hpp [12:14]
+ boost/archive/binary_oarchive.hpp [12:14]
+ boost/archive/binary_oarchive_impl.hpp [12:14]
+ boost/archive/binary_wiarchive.hpp [12:14]
+ boost/archive/binary_woarchive.hpp [12:14]
+ boost/archive/detail/abi_prefix.hpp [4:6]
+ boost/archive/detail/abi_suffix.hpp [4:6]
+ boost/archive/detail/basic_iarchive.hpp [12:14]
+ boost/archive/detail/basic_iserializer.hpp [12:14]
+ boost/archive/detail/basic_oarchive.hpp [12:14]
+ boost/archive/detail/basic_oserializer.hpp [12:14]
+ boost/archive/detail/basic_pointer_iserializer.hpp [13:15]
+ boost/archive/detail/basic_pointer_oserializer.hpp [13:15]
+ boost/archive/detail/basic_serializer.hpp [12:14]
+ boost/archive/detail/basic_serializer_map.hpp [12:14]
+ boost/archive/detail/common_iarchive.hpp [12:14]
+ boost/archive/detail/common_oarchive.hpp [12:14]
+ boost/archive/detail/interface_iarchive.hpp [16:18]
+ boost/archive/detail/interface_oarchive.hpp [12:14]
+ boost/archive/detail/iserializer.hpp [18:20]
+ boost/archive/detail/oserializer.hpp [18:20]
+ boost/archive/detail/polymorphic_iarchive_route.hpp [12:14]
+ boost/archive/detail/polymorphic_oarchive_route.hpp [12:14]
+ boost/archive/dinkumware.hpp [12:14]
+ boost/archive/impl/archive_serializer_map.ipp [4:6]
+ boost/archive/impl/basic_binary_iarchive.ipp [4:6]
+ boost/archive/impl/basic_binary_iprimitive.ipp [4:6]
+ boost/archive/impl/basic_binary_oarchive.ipp [4:6]
+ boost/archive/impl/basic_binary_oprimitive.ipp [4:6]
+ boost/archive/impl/basic_text_iarchive.ipp [4:6]
+ boost/archive/impl/basic_text_iprimitive.ipp [4:6]
+ boost/archive/impl/basic_text_oarchive.ipp [4:6]
+ boost/archive/impl/basic_text_oprimitive.ipp [4:6]
+ boost/archive/impl/basic_xml_grammar.hpp [12:14]
+ boost/archive/impl/basic_xml_iarchive.ipp [4:6]
+ boost/archive/impl/basic_xml_oarchive.ipp [4:6]
+ boost/archive/impl/text_iarchive_impl.ipp [4:6]
+ boost/archive/impl/text_oarchive_impl.ipp [4:6]
+ boost/archive/impl/text_wiarchive_impl.ipp [4:6]
+ boost/archive/impl/text_woarchive_impl.ipp [4:6]
+ boost/archive/impl/xml_iarchive_impl.ipp [4:6]
+ boost/archive/impl/xml_oarchive_impl.ipp [4:6]
+ boost/archive/impl/xml_wiarchive_impl.ipp [4:6]
+ boost/archive/impl/xml_woarchive_impl.ipp [4:6]
+ boost/archive/iterators/base64_exception.hpp [12:14]
+ boost/archive/iterators/base64_from_binary.hpp [12:14]
+ boost/archive/iterators/binary_from_base64.hpp [12:14]
+ boost/archive/iterators/dataflow.hpp [12:14]
+ boost/archive/iterators/dataflow_exception.hpp [12:14]
+ boost/archive/iterators/escape.hpp [12:14]
+ boost/archive/iterators/insert_linebreaks.hpp [12:14]
+ boost/archive/iterators/istream_iterator.hpp [12:14]
+ boost/archive/iterators/mb_from_wchar.hpp [12:14]
+ boost/archive/iterators/ostream_iterator.hpp [12:14]
+ boost/archive/iterators/remove_whitespace.hpp [12:14]
+ boost/archive/iterators/transform_width.hpp [12:14]
+ boost/archive/iterators/unescape.hpp [12:14]
+ boost/archive/iterators/wchar_from_mb.hpp [12:14]
+ boost/archive/iterators/xml_escape.hpp [12:14]
+ boost/archive/iterators/xml_unescape.hpp [12:14]
+ boost/archive/iterators/xml_unescape_exception.hpp [12:14]
+ boost/archive/polymorphic_binary_iarchive.hpp [12:14]
+ boost/archive/polymorphic_binary_oarchive.hpp [12:14]
+ boost/archive/polymorphic_iarchive.hpp [12:14]
+ boost/archive/polymorphic_oarchive.hpp [12:14]
+ boost/archive/polymorphic_text_iarchive.hpp [12:14]
+ boost/archive/polymorphic_text_oarchive.hpp [12:14]
+ boost/archive/polymorphic_text_wiarchive.hpp [12:14]
+ boost/archive/polymorphic_text_woarchive.hpp [12:14]
+ boost/archive/polymorphic_xml_iarchive.hpp [12:14]
+ boost/archive/polymorphic_xml_oarchive.hpp [12:14]
+ boost/archive/polymorphic_xml_wiarchive.hpp [12:14]
+ boost/archive/polymorphic_xml_woarchive.hpp [12:14]
+ boost/archive/text_iarchive.hpp [12:14]
+ boost/archive/text_oarchive.hpp [12:14]
+ boost/archive/text_wiarchive.hpp [12:14]
+ boost/archive/text_woarchive.hpp [12:14]
+ boost/archive/tmpdir.hpp [12:14]
+ boost/archive/wcslen.hpp [12:14]
+ boost/archive/xml_iarchive.hpp [12:14]
+ boost/archive/xml_oarchive.hpp [12:14]
+ boost/archive/xml_wiarchive.hpp [12:14]
+ boost/archive/xml_woarchive.hpp [12:14]
+ boost/serialization/access.hpp [12:14]
+ boost/serialization/archive_input_unordered_map.hpp [13:16]
+ boost/serialization/archive_input_unordered_set.hpp [12:15]
+ boost/serialization/base_object.hpp [12:14]
+ boost/serialization/binary_object.hpp [12:14]
+ boost/serialization/boost_unordered_map.hpp [13:16]
+ boost/serialization/boost_unordered_set.hpp [12:15]
+ boost/serialization/collection_traits.hpp [12:14]
+ boost/serialization/collections_load_imp.hpp [16:18]
+ boost/serialization/collections_save_imp.hpp [12:14]
+ boost/serialization/deque.hpp [12:14]
+ boost/serialization/detail/is_default_constructible.hpp [12:14]
+ boost/serialization/detail/stack_constructor.hpp [12:14]
+ boost/serialization/export.hpp [12:14]
+ boost/serialization/extended_type_info.hpp [12:14]
+ boost/serialization/extended_type_info_no_rtti.hpp [14:16]
+ boost/serialization/extended_type_info_typeid.hpp [14:16]
+ boost/serialization/factory.hpp [12:14]
+ boost/serialization/force_include.hpp [12:14]
+ boost/serialization/forward_list.hpp [12:14]
+ boost/serialization/hash_collections_load_imp.hpp [13:15]
+ boost/serialization/hash_collections_save_imp.hpp [12:14]
+ boost/serialization/hash_map.hpp [13:15]
+ boost/serialization/hash_set.hpp [12:14]
+ boost/serialization/level.hpp [12:14]
+ boost/serialization/level_enum.hpp [12:14]
+ boost/serialization/list.hpp [12:14]
+ boost/serialization/nvp.hpp [12:14]
+ boost/serialization/priority_queue.hpp [12:14]
+ boost/serialization/serialization.hpp [19:21]
+ boost/serialization/shared_ptr_132.hpp [12:14]
+ boost/serialization/slist.hpp [12:14]
+ boost/serialization/smart_cast.hpp [12:14]
+ boost/serialization/split_free.hpp [12:14]
+ boost/serialization/split_member.hpp [12:14]
+ boost/serialization/string.hpp [13:15]
+ boost/serialization/strong_typedef.hpp [12:15]
+ boost/serialization/tracking.hpp [12:14]
+ boost/serialization/tracking_enum.hpp [12:14]
+ boost/serialization/traits.hpp [12:14]
+ boost/serialization/type_info_implementation.hpp [12:14]
+ boost/serialization/unique_ptr.hpp [12:14]
+ boost/serialization/unordered_collections_load_imp.hpp [13:16]
+ boost/serialization/unordered_collections_save_imp.hpp [12:15]
+ boost/serialization/unordered_map.hpp [13:16]
+ boost/serialization/unordered_set.hpp [12:15]
+ boost/serialization/utility.hpp [13:15]
+ boost/serialization/vector.hpp [12:15]
+ boost/serialization/version.hpp [12:14]
+ libs/serialization/src/basic_archive.cpp [4:6]
+ libs/serialization/src/basic_iarchive.cpp [4:6]
+ libs/serialization/src/basic_iserializer.cpp [4:6]
+ libs/serialization/src/basic_oarchive.cpp [4:6]
+ libs/serialization/src/basic_oserializer.cpp [4:6]
+ libs/serialization/src/basic_pointer_iserializer.cpp [4:6]
+ libs/serialization/src/basic_pointer_oserializer.cpp [4:6]
+ libs/serialization/src/basic_serializer_map.cpp [4:6]
+ libs/serialization/src/basic_text_iprimitive.cpp [4:6]
+ libs/serialization/src/basic_text_wiprimitive.cpp [4:6]
+ libs/serialization/src/basic_xml_archive.cpp [4:6]
+ libs/serialization/src/basic_xml_grammar.ipp [4:6]
+ libs/serialization/src/binary_iarchive.cpp [4:6]
+ libs/serialization/src/binary_oarchive.cpp [4:6]
+ libs/serialization/src/binary_wiarchive.cpp [4:6]
+ libs/serialization/src/binary_woarchive.cpp [4:6]
+ libs/serialization/src/extended_type_info.cpp [4:6]
+ libs/serialization/src/extended_type_info_no_rtti.cpp [5:7]
+ libs/serialization/src/extended_type_info_typeid.cpp [5:7]
+ libs/serialization/src/polymorphic_iarchive.cpp [4:6]
+ libs/serialization/src/polymorphic_oarchive.cpp [4:6]
+ libs/serialization/src/text_iarchive.cpp [4:6]
+ libs/serialization/src/text_oarchive.cpp [4:6]
+ libs/serialization/src/text_wiarchive.cpp [4:6]
+ libs/serialization/src/text_woarchive.cpp [4:6]
+ libs/serialization/src/void_cast.cpp [4:6]
+ libs/serialization/src/xml_grammar.cpp [4:6]
+ libs/serialization/src/xml_iarchive.cpp [4:6]
+ libs/serialization/src/xml_oarchive.cpp [4:6]
+ libs/serialization/src/xml_wgrammar.cpp [4:6]
+ libs/serialization/src/xml_wiarchive.cpp [4:6]
+ libs/serialization/src/xml_woarchive.cpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1de0b40eaac2964bd4fea60350b9dc66
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef.h at line 4, boost/predef/architecture.h at line 4, boost/predef/architecture/alpha.h at line 4, boost/predef/architecture/arm.h at line 4, boost/predef/architecture/ia64.h at line 4, boost/predef/architecture/m68k.h at line 4, boost/predef/architecture/mips.h at line 4, boost/predef/architecture/parisc.h at line 4, boost/predef/architecture/ppc.h at line 4, boost/predef/architecture/rs6k.h at line 4, boost/predef/architecture/sparc.h at line 4, boost/predef/architecture/superh.h at line 4, boost/predef/architecture/sys370.h at line 4, boost/predef/architecture/sys390.h at line 4, boost/predef/architecture/x86.h at line 4, boost/predef/architecture/x86/32.h at line 4, boost/predef/architecture/x86/64.h at line 4, boost/predef/architecture/z.h at line 4, boost/predef/compiler.h at line 4, boost/predef/compiler/borland.h at line 4, boost/predef/compiler/clang.h at line 4, boost/predef/compiler/comeau.h at line 4, boost/predef/compiler/compaq.h at line 4, boost/predef/compiler/diab.h at line 4, boost/predef/compiler/digitalmars.h at line 4, boost/predef/compiler/dignus.h at line 4, boost/predef/compiler/edg.h at line 4, boost/predef/compiler/ekopath.h at line 4, boost/predef/compiler/gcc.h at line 4, boost/predef/compiler/gcc_xml.h at line 4, boost/predef/compiler/greenhills.h at line 4, boost/predef/compiler/hp_acc.h at line 4, boost/predef/compiler/iar.h at line 4, boost/predef/compiler/ibm.h at line 4, boost/predef/compiler/kai.h at line 4, boost/predef/compiler/llvm.h at line 4, boost/predef/compiler/metaware.h at line 4, boost/predef/compiler/metrowerks.h at line 4, boost/predef/compiler/microtec.h at line 4, boost/predef/compiler/mpw.h at line 4, boost/predef/compiler/palm.h at line 4, boost/predef/compiler/pgi.h at line 4, boost/predef/compiler/sgi_mipspro.h at line 4, boost/predef/compiler/sunpro.h at line 4, boost/predef/compiler/tendra.h at line 4, boost/predef/compiler/visualc.h at line 4, boost/predef/compiler/watcom.h at line 4, boost/predef/library.h at line 4, boost/predef/library/c.h at line 4, boost/predef/library/c/gnu.h at line 4, boost/predef/library/c/uc.h at line 4, boost/predef/library/c/vms.h at line 4, boost/predef/library/c/zos.h at line 4, boost/predef/library/std.h at line 4, boost/predef/library/std/dinkumware.h at line 4, boost/predef/library/std/libcomo.h at line 4, boost/predef/library/std/modena.h at line 4, boost/predef/library/std/msl.h at line 4, boost/predef/library/std/roguewave.h at line 4, boost/predef/library/std/sgi.h at line 4, boost/predef/library/std/stdcpp3.h at line 4, boost/predef/library/std/stlport.h at line 4, boost/predef/library/std/vacpp.h at line 4, boost/predef/make.h at line 4, boost/predef/os.h at line 4, boost/predef/os/aix.h at line 4, boost/predef/os/amigaos.h at line 4, boost/predef/os/beos.h at line 4, boost/predef/os/bsd.h at line 4, boost/predef/os/cygwin.h at line 4, boost/predef/os/hpux.h at line 4, boost/predef/os/irix.h at line 4, boost/predef/os/linux.h at line 4, boost/predef/os/macos.h at line 4, boost/predef/os/qnxnto.h at line 4, boost/predef/os/solaris.h at line 4, boost/predef/os/unix.h at line 4, boost/predef/os/windows.h at line 4, boost/predef/platform/mingw.h at line 4, boost/predef/platform/mingw32.h at line 4, boost/predef/platform/mingw64.h at line 4
+ License text:
+ Copyright Rene Rivera 2008-2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef.h [2:4]
+ boost/predef/architecture.h [2:4]
+ boost/predef/architecture/alpha.h [2:4]
+ boost/predef/architecture/arm.h [2:6]
+ boost/predef/architecture/ia64.h [2:4]
+ boost/predef/architecture/m68k.h [2:4]
+ boost/predef/architecture/mips.h [2:4]
+ boost/predef/architecture/parisc.h [2:4]
+ boost/predef/architecture/ppc.h [2:4]
+ boost/predef/architecture/rs6k.h [2:4]
+ boost/predef/architecture/sparc.h [2:4]
+ boost/predef/architecture/superh.h [2:4]
+ boost/predef/architecture/sys370.h [2:4]
+ boost/predef/architecture/sys390.h [2:4]
+ boost/predef/architecture/x86.h [2:4]
+ boost/predef/architecture/x86/32.h [2:4]
+ boost/predef/architecture/x86/64.h [2:4]
+ boost/predef/architecture/z.h [2:4]
+ boost/predef/compiler.h [2:4]
+ boost/predef/compiler/borland.h [2:4]
+ boost/predef/compiler/clang.h [2:4]
+ boost/predef/compiler/comeau.h [2:4]
+ boost/predef/compiler/compaq.h [2:4]
+ boost/predef/compiler/diab.h [2:4]
+ boost/predef/compiler/digitalmars.h [2:4]
+ boost/predef/compiler/dignus.h [2:4]
+ boost/predef/compiler/edg.h [2:4]
+ boost/predef/compiler/ekopath.h [2:4]
+ boost/predef/compiler/gcc.h [2:4]
+ boost/predef/compiler/gcc_xml.h [2:4]
+ boost/predef/compiler/greenhills.h [2:4]
+ boost/predef/compiler/hp_acc.h [2:4]
+ boost/predef/compiler/iar.h [2:4]
+ boost/predef/compiler/ibm.h [2:4]
+ boost/predef/compiler/kai.h [2:4]
+ boost/predef/compiler/llvm.h [2:4]
+ boost/predef/compiler/metaware.h [2:4]
+ boost/predef/compiler/metrowerks.h [2:4]
+ boost/predef/compiler/microtec.h [2:4]
+ boost/predef/compiler/mpw.h [2:4]
+ boost/predef/compiler/palm.h [2:4]
+ boost/predef/compiler/pgi.h [2:4]
+ boost/predef/compiler/sgi_mipspro.h [2:4]
+ boost/predef/compiler/sunpro.h [2:4]
+ boost/predef/compiler/tendra.h [2:4]
+ boost/predef/compiler/visualc.h [2:4]
+ boost/predef/compiler/watcom.h [2:4]
+ boost/predef/library.h [2:4]
+ boost/predef/library/c.h [2:4]
+ boost/predef/library/c/gnu.h [2:4]
+ boost/predef/library/c/uc.h [2:4]
+ boost/predef/library/c/vms.h [2:4]
+ boost/predef/library/c/zos.h [2:4]
+ boost/predef/library/std.h [2:4]
+ boost/predef/library/std/dinkumware.h [2:4]
+ boost/predef/library/std/libcomo.h [2:4]
+ boost/predef/library/std/modena.h [2:4]
+ boost/predef/library/std/msl.h [2:4]
+ boost/predef/library/std/roguewave.h [2:4]
+ boost/predef/library/std/sgi.h [2:4]
+ boost/predef/library/std/stdcpp3.h [2:4]
+ boost/predef/library/std/stlport.h [2:4]
+ boost/predef/library/std/vacpp.h [2:4]
+ boost/predef/make.h [2:4]
+ boost/predef/os.h [2:5]
+ boost/predef/os/aix.h [2:4]
+ boost/predef/os/amigaos.h [2:4]
+ boost/predef/os/beos.h [2:4]
+ boost/predef/os/bsd.h [2:4]
+ boost/predef/os/cygwin.h [2:4]
+ boost/predef/os/hpux.h [2:4]
+ boost/predef/os/irix.h [2:4]
+ boost/predef/os/linux.h [2:4]
+ boost/predef/os/macos.h [2:5]
+ boost/predef/os/qnxnto.h [2:4]
+ boost/predef/os/solaris.h [2:4]
+ boost/predef/os/unix.h [2:4]
+ boost/predef/os/windows.h [2:4]
+ boost/predef/platform/mingw.h [2:4]
+ boost/predef/platform/mingw32.h [2:4]
+ boost/predef/platform/mingw64.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1df4aa5e098ec150d661f196ac67b29d
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2013,2014 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/executors/executor.hpp [1:1]
+ boost/thread/executors/executor_adaptor.hpp [1:1]
+ boost/thread/executors/loop_executor.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1e0252a183250dbead2100056224e072
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2004, 2005 Arkadiy Vertleyb
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/incr_registration_group.hpp [1:3]
+ boost/typeof/typeof_impl.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1e1a0b136d0d76d46590e27382b996fe
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/kurtosis.hpp at line 6, boost/accumulators/statistics/skewness.hpp at line 6, boost/accumulators/statistics/weighted_kurtosis.hpp at line 6, boost/accumulators/statistics/weighted_skewness.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/kurtosis.hpp [4:6]
+ boost/accumulators/statistics/skewness.hpp [4:6]
+ boost/accumulators/statistics/weighted_kurtosis.hpp [4:6]
+ boost/accumulators/statistics/weighted_skewness.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1e227e465060016245c6a170dc774086
+BELONGS ya.make
+ License text:
+ // Copyright 2015-2016 Klemens D. Morgenstern
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll/detail/import_mangled_helpers.hpp [1:1]
+ boost/dll/import_class.hpp [1:1]
+ boost/dll/import_mangled.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1e2707865abb88b57d7f50d04d628fe0
+BELONGS ya.make
+ License text:
+ // Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
+ // ETH Zurich, Center of Structure Technologies (www.imes.ethz.ch/st)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/profile.hpp [3:4]
+ boost/graph/sloan_ordering.hpp [3:4]
+ boost/graph/wavefront.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1e4a93fb00e3cd1b0e640d55d4067075
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2017, 2018.
+ // Modifications copyright (c) 2017-2018 Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/area.hpp [8:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1e6b42c37f484d428c0307a99878dd1e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/spirit/home/karma/numeric/int.hpp at line 3, boost/spirit/home/support/attributes.hpp at line 4, boost/spirit/home/support/iterators/detail/combine_policies.hpp at line 3, boost/spirit/repository/home/karma/nonterminal/subrule.hpp at line 3, boost/wave.hpp at line 10, boost/wave/cpp_context.hpp at line 9, boost/wave/cpp_exceptions.hpp at line 8, boost/wave/cpp_iteration_context.hpp at line 9, boost/wave/cpp_throw.hpp at line 8, boost/wave/cpplexer/convert_trigraphs.hpp at line 10, boost/wave/cpplexer/cpp_lex_interface.hpp at line 10, boost/wave/cpplexer/cpp_lex_interface_generator.hpp at line 10, boost/wave/cpplexer/cpp_lex_iterator.hpp at line 10, boost/wave/cpplexer/cpp_lex_token.hpp at line 10, boost/wave/cpplexer/cpplexer_exceptions.hpp at line 8, boost/wave/cpplexer/detect_include_guards.hpp at line 27, boost/wave/cpplexer/re2clex/aq.hpp at line 8, boost/wave/cpplexer/re2clex/cpp_re.hpp at line 10, boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp at line 10, boost/wave/cpplexer/re2clex/scanner.hpp at line 8, boost/wave/cpplexer/token_cache.hpp at line 8, boost/wave/cpplexer/validate_universal_char.hpp at line 10, boost/wave/grammars/cpp_chlit_grammar.hpp at line 8, boost/wave/grammars/cpp_defined_grammar.hpp at line 8, boost/wave/grammars/cpp_defined_grammar_gen.hpp at line 8, boost/wave/grammars/cpp_expression_grammar.hpp at line 8, boost/wave/grammars/cpp_expression_grammar_gen.hpp at line 8, boost/wave/grammars/cpp_expression_value.hpp at line 8, boost/wave/grammars/cpp_grammar.hpp at line 8, boost/wave/grammars/cpp_grammar_gen.hpp at line 8, boost/wave/grammars/cpp_intlit_grammar.hpp at line 8, boost/wave/grammars/cpp_literal_grammar_gen.hpp at line 8, boost/wave/grammars/cpp_predef_macros_gen.hpp at line 8, boost/wave/grammars/cpp_predef_macros_grammar.hpp at line 8, boost/wave/grammars/cpp_value_error.hpp at line 8, boost/wave/language_support.hpp at line 9, boost/wave/preprocessing_hooks.hpp at line 8, boost/wave/token_ids.hpp at line 10, boost/wave/util/cpp_ifblock.hpp at line 8, boost/wave/util/cpp_include_paths.hpp at line 8, boost/wave/util/cpp_iterator.hpp at line 10, boost/wave/util/cpp_macromap.hpp at line 10, boost/wave/util/cpp_macromap_predef.hpp at line 10, boost/wave/util/cpp_macromap_utils.hpp at line 10, boost/wave/util/file_position.hpp at line 10, boost/wave/util/filesystem_compatibility.hpp at line 8, boost/wave/util/functor_input.hpp at line 8, boost/wave/util/insert_whitespace_detection.hpp at line 10, boost/wave/util/interpret_pragma.hpp at line 8, boost/wave/util/iteration_context.hpp at line 8, boost/wave/util/macro_definition.hpp at line 8, boost/wave/util/macro_helpers.hpp at line 8, boost/wave/util/pattern_parser.hpp at line 10, boost/wave/util/symbol_table.hpp at line 8, boost/wave/util/time_conversion_helper.hpp at line 8, boost/wave/util/transform_iterator.hpp at line 8, boost/wave/util/unput_queue_iterator.hpp at line 10, boost/wave/wave_config.hpp at line 10, boost/wave/wave_config_constant.hpp at line 9, boost/wave/wave_version.hpp at line 10, boost/wave/whitespace_handling.hpp at line 9
+ License text:
+ Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/karma/numeric/int.hpp [1:1]
+ boost/spirit/home/support/attributes.hpp [2:3]
+ boost/spirit/home/support/iterators/detail/combine_policies.hpp [1:1]
+ boost/spirit/repository/home/karma/nonterminal/subrule.hpp [1:3]
+ boost/wave.hpp [8:10]
+ boost/wave/cpp_context.hpp [7:9]
+ boost/wave/cpp_exceptions.hpp [6:8]
+ boost/wave/cpp_iteration_context.hpp [7:9]
+ boost/wave/cpp_throw.hpp [6:8]
+ boost/wave/cpplexer/convert_trigraphs.hpp [8:10]
+ boost/wave/cpplexer/cpp_lex_interface.hpp [8:10]
+ boost/wave/cpplexer/cpp_lex_interface_generator.hpp [8:10]
+ boost/wave/cpplexer/cpp_lex_iterator.hpp [8:10]
+ boost/wave/cpplexer/cpp_lex_token.hpp [8:10]
+ boost/wave/cpplexer/cpplexer_exceptions.hpp [6:8]
+ boost/wave/cpplexer/detect_include_guards.hpp [25:27]
+ boost/wave/cpplexer/re2clex/aq.hpp [6:9]
+ boost/wave/cpplexer/re2clex/cpp_re.hpp [8:10]
+ boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp [8:10]
+ boost/wave/cpplexer/re2clex/scanner.hpp [6:9]
+ boost/wave/cpplexer/token_cache.hpp [6:8]
+ boost/wave/cpplexer/validate_universal_char.hpp [8:10]
+ boost/wave/grammars/cpp_chlit_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_defined_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_defined_grammar_gen.hpp [6:8]
+ boost/wave/grammars/cpp_expression_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_expression_grammar_gen.hpp [6:8]
+ boost/wave/grammars/cpp_expression_value.hpp [6:8]
+ boost/wave/grammars/cpp_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_grammar_gen.hpp [6:8]
+ boost/wave/grammars/cpp_intlit_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_literal_grammar_gen.hpp [6:8]
+ boost/wave/grammars/cpp_predef_macros_gen.hpp [6:8]
+ boost/wave/grammars/cpp_predef_macros_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_value_error.hpp [6:8]
+ boost/wave/language_support.hpp [7:9]
+ boost/wave/preprocessing_hooks.hpp [6:8]
+ boost/wave/token_ids.hpp [8:10]
+ boost/wave/util/cpp_ifblock.hpp [6:8]
+ boost/wave/util/cpp_include_paths.hpp [6:8]
+ boost/wave/util/cpp_iterator.hpp [8:10]
+ boost/wave/util/cpp_macromap.hpp [8:10]
+ boost/wave/util/cpp_macromap_predef.hpp [8:10]
+ boost/wave/util/cpp_macromap_utils.hpp [8:10]
+ boost/wave/util/file_position.hpp [8:10]
+ boost/wave/util/filesystem_compatibility.hpp [6:8]
+ boost/wave/util/functor_input.hpp [6:8]
+ boost/wave/util/insert_whitespace_detection.hpp [8:10]
+ boost/wave/util/interpret_pragma.hpp [6:8]
+ boost/wave/util/iteration_context.hpp [6:8]
+ boost/wave/util/macro_definition.hpp [6:8]
+ boost/wave/util/macro_helpers.hpp [6:8]
+ boost/wave/util/pattern_parser.hpp [8:10]
+ boost/wave/util/symbol_table.hpp [6:8]
+ boost/wave/util/time_conversion_helper.hpp [6:8]
+ boost/wave/util/transform_iterator.hpp [6:8]
+ boost/wave/util/unput_queue_iterator.hpp [8:10]
+ boost/wave/wave_config.hpp [8:10]
+ boost/wave/wave_config_constant.hpp [7:9]
+ boost/wave/wave_version.hpp [8:10]
+ boost/wave/whitespace_handling.hpp [7:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1e6c23354a6747a6c3eef56fb2537b44
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006, Stephan Diederich
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/boykov_kolmogorov_max_flow.hpp [1:1]
+ boost/graph/write_dimacs.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1e8d26cab4d9812b713114f1a99853c0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/statechart/detail/memory.hpp at line 6
+ License text:
+ // Copyright 2005-2006 Andreas Huber Doenni
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/statechart/detail/memory.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1ea9e3e41f1c35e81f47e425054ac689
+BELONGS ya.make
+ License text:
+ // Copyright Paul A. Bristow 2007, 2010, 2012, 2014.
+ // Copyright John Maddock 2007.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/fwd.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1ee6f833fe9b25524ebf6b687f10088c
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2015.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/quadrature/gauss.hpp [1:3]
+ boost/random/traits.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f04e771ae77a341bbc9ea094604bb99
+BELONGS ya.make
+ License text:
+ * Copyright (c) 1998-2000
+ * Dr John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex.h [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f0bef8fd2dab232c436a28951751d24
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/hp_acc.hpp [1:8]
+ boost/config/compiler/sunpro_cc.hpp [1:7]
+ boost/config/platform/hpux.hpp [1:7]
+ boost/config/platform/linux.hpp [1:4]
+ boost/config/platform/symbian.hpp [1:5]
+ boost/config/stdlib/sgi.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f37a51e40512369e14c67203766141f
+BELONGS libs/timer/ya.make
+ License text:
+ // Copyright Beman Dawes 1994-2006, 2011
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/timer/src/cpu_timer.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f468481901f0c282072e13f8120b9b9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2016 Frank Hein, maxence business consulting gmbh
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/qi/directive/expect.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f48b5f1ab3f8b394c86f6d510e964a3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/has_new_operator.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/has_new_operator.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f49c41ea9bc45c116f721f598e21ad0
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2015, 2016.
+ // Modifications copyright (c) 2015-2016, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/envelope/implementation.hpp [7:8]
+ boost/geometry/algorithms/detail/envelope/linear.hpp [7:8]
+ boost/geometry/algorithms/detail/envelope/point.hpp [7:8]
+ boost/geometry/algorithms/detail/envelope/range.hpp [7:8]
+ boost/geometry/algorithms/detail/expand/interface.hpp [8:9]
+ boost/geometry/io/svg/svg_mapper.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f4ce2837d476b6bed69d2f0d5589b4d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mem_fn.hpp [13:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f62725691895dcb03dacf98dc5c9129
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/crc.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/crc.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f6babe1b8dcf6fe0c732e78348e6377
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/statechart/detail/rtti_policy.hpp at line 6, boost/statechart/detail/state_base.hpp at line 6, boost/statechart/event_processor.hpp at line 6, boost/statechart/fifo_worker.hpp at line 6, boost/statechart/processor_container.hpp at line 6, boost/statechart/transition.hpp at line 6
+ License text:
+ // Copyright 2002-2008 Andreas Huber Doenni
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/statechart/detail/rtti_policy.hpp [4:6]
+ boost/statechart/detail/state_base.hpp [4:6]
+ boost/statechart/event_processor.hpp [4:6]
+ boost/statechart/fifo_worker.hpp [4:6]
+ boost/statechart/processor_container.hpp [4:6]
+ boost/statechart/transition.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1f81522578ed29184544e03bd9f0c559
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/core/noncopyable.hpp at line 5
+ License text:
+ // (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/noncopyable.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1fa0e333f3a4d9fcde07c8f7722f8e63
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005.
+ // Copyright (c) 2005 Peter Dimov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/bind.hpp [13:15]
+ boost/pointer_to_other.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 1fc39afc3821b9d8684b6e3cd7dd87ec
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2004 Gerald I. Evenden
+ // Copyright (c) 2012 Martin Raspaud
+ // See also (section 4.4.3.2):
+ // http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/geos.hpp [26:29]
+
+KEEP COPYRIGHT_SERVICE_LABEL 201ae7ed96845071c26629f049e390f6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/algorithm_ext/is_sorted.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/algorithm_ext/is_sorted.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2078d45a521e96133b21cbeeef583b2e
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001 Daniel C. Nuffer
+ // Copyright (c) 2001-2011 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/istream_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/lex_input_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/multi_pass.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/no_check_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp [1:2]
+ boost/wave/cpplexer/re2clex/aq.hpp [6:9]
+ boost/wave/cpplexer/re2clex/scanner.hpp [6:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 20879b64ae4df4b3c40306efb7928c57
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2014-2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/algorithm.hpp [3:3]
+ boost/container/detail/compare_functors.hpp [3:5]
+ boost/container/detail/construct_in_place.hpp [3:3]
+ boost/container/detail/iterator.hpp [3:3]
+ boost/container/detail/std_fwd.hpp [3:5]
+ boost/intrusive/detail/algo_type.hpp [3:3]
+ boost/intrusive/detail/algorithm.hpp [3:3]
+ boost/intrusive/detail/array_initializer.hpp [3:3]
+ boost/intrusive/detail/bstree_algorithms_base.hpp [3:3]
+ boost/intrusive/detail/default_header_holder.hpp [3:3]
+ boost/intrusive/detail/ebo_functor_holder.hpp [3:4]
+ boost/intrusive/detail/empty_node_checker.hpp [3:3]
+ boost/intrusive/detail/equal_to_value.hpp [3:3]
+ boost/intrusive/detail/exception_disposer.hpp [3:3]
+ boost/intrusive/detail/get_value_traits.hpp [3:3]
+ boost/intrusive/detail/has_member_function_callable_with.hpp [3:5]
+ boost/intrusive/detail/iterator.hpp [3:3]
+ boost/intrusive/detail/key_nodeptr_comp.hpp [3:3]
+ boost/intrusive/detail/math.hpp [3:3]
+ boost/intrusive/detail/node_cloner_disposer.hpp [3:3]
+ boost/intrusive/detail/node_holder.hpp [3:3]
+ boost/intrusive/detail/node_to_value.hpp [3:3]
+ boost/intrusive/detail/reverse_iterator.hpp [3:3]
+ boost/intrusive/detail/simple_disposers.hpp [3:3]
+ boost/intrusive/detail/size_holder.hpp [3:3]
+ boost/intrusive/detail/std_fwd.hpp [3:5]
+ boost/intrusive/pointer_rebind.hpp [3:5]
+ boost/move/algo/detail/insertion_sort.hpp [3:5]
+ boost/move/default_delete.hpp [3:5]
+ boost/move/detail/fwd_macros.hpp [3:5]
+ boost/move/detail/iterator_traits.hpp [3:5]
+ boost/move/detail/reverse_iterator.hpp [3:3]
+ boost/move/detail/workaround.hpp [3:5]
+ boost/move/unique_ptr.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 208a2831e190f76f08f28a8052c15716
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2002 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lambda/closures.hpp [5:5]
+ boost/lambda/if.hpp [3:5]
+ boost/lambda/loops.hpp [3:5]
+ boost/spirit/home/classic/phoenix.hpp [3:3]
+ boost/spirit/home/classic/phoenix/actor.hpp [3:3]
+ boost/spirit/home/classic/phoenix/binders.hpp [3:3]
+ boost/spirit/home/classic/phoenix/closures.hpp [3:4]
+ boost/spirit/home/classic/phoenix/composite.hpp [3:3]
+ boost/spirit/home/classic/phoenix/functions.hpp [3:3]
+ boost/spirit/home/classic/phoenix/operators.hpp [3:3]
+ boost/spirit/home/classic/phoenix/primitives.hpp [3:3]
+ boost/spirit/home/classic/phoenix/special_ops.hpp [3:3]
+ boost/spirit/home/classic/phoenix/statements.hpp [3:3]
+ boost/spirit/home/classic/phoenix/tuples.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 20a463d46bce9a241ea6c39dc4765269
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2013 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/deque/convert.hpp [2:3]
+ boost/fusion/container/deque/detail/build_deque.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/build_deque.hpp [2:2]
+ boost/fusion/container/map/detail/begin_impl.hpp [2:2]
+ boost/fusion/container/map/detail/build_map.hpp [2:2]
+ boost/fusion/container/map/detail/end_impl.hpp [2:2]
+ boost/fusion/container/map/detail/map_impl.hpp [2:2]
+ boost/fusion/container/map/detail/map_index.hpp [2:2]
+ boost/fusion/container/map/map_iterator.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 20aa2056ea9bde4ff4ad3360b783b1e7
+BELONGS ya.make
+ License text:
+ //Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/exception/all.hpp [1:1]
+ boost/exception/detail/shared_ptr.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 20e8e6135e1f61009ffaeaa23267908f
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/atomic.hpp [6:8]
+ boost/atomic/atomic_flag.hpp [6:8]
+ boost/atomic/detail/atomic_template.hpp [6:8]
+ boost/atomic/detail/caps_gcc_alpha.hpp [6:8]
+ boost/atomic/detail/caps_gcc_ppc.hpp [6:8]
+ boost/atomic/detail/caps_gcc_sparc.hpp [6:8]
+ boost/atomic/detail/caps_gcc_sync.hpp [6:8]
+ boost/atomic/detail/caps_msvc_arm.hpp [6:8]
+ boost/atomic/detail/caps_msvc_x86.hpp [6:8]
+ boost/atomic/detail/caps_windows.hpp [6:8]
+ boost/atomic/detail/ops_gcc_alpha.hpp [6:8]
+ boost/atomic/detail/ops_gcc_arm.hpp [6:8]
+ boost/atomic/detail/ops_gcc_arm_common.hpp [6:8]
+ boost/atomic/detail/ops_gcc_ppc.hpp [6:8]
+ boost/atomic/detail/ops_gcc_ppc_common.hpp [6:8]
+ boost/atomic/detail/ops_gcc_sparc.hpp [6:8]
+ boost/atomic/detail/ops_gcc_sync.hpp [6:8]
+ boost/atomic/fences.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 20fa0d171507903cccfbadda4fedb4d3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/empty.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2010 - 2011.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/empty.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2128f138a33452c58ca8d69d871d409b
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2016-2017.
+ // Modifications copyright (c) 2016-2017 Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2146c076a1c5302d8131f6c6c76f685d
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2014.
+ // Copyright Paul A. Bristow 2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/arcsine.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 214ba99e016d97577b7672e9e87aa6fa
+BELONGS libs/timer/ya.make
+ License text:
+ // Copyright Beman Dawes 2007, 2011
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/timer/src/auto_timers_construction.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 215698f0763c1492391d7be44eb56c21
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/centroid.hpp [3:6]
+ boost/geometry/algorithms/convex_hull.hpp [3:5]
+ boost/geometry/algorithms/detail/disjoint/box_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_point.hpp [3:6]
+ boost/geometry/algorithms/detail/envelope/box.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/linear.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/point.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/range.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/segment.hpp [3:5]
+ boost/geometry/algorithms/detail/equals/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/box.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/indexed.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/point.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/segment.hpp [3:6]
+ boost/geometry/algorithms/detail/not.hpp [3:5]
+ boost/geometry/algorithms/detail/overlaps/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/overlaps/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp [3:6]
+ boost/geometry/algorithms/detail/sections/sectionalize.hpp [3:6]
+ boost/geometry/algorithms/detail/throw_on_empty_input.hpp [3:6]
+ boost/geometry/algorithms/detail/touches/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/touches/interface.hpp [3:6]
+ boost/geometry/algorithms/dispatch/envelope.hpp [3:5]
+ boost/geometry/algorithms/dispatch/expand.hpp [3:6]
+ boost/geometry/algorithms/envelope.hpp [3:5]
+ boost/geometry/algorithms/equals.hpp [3:6]
+ boost/geometry/algorithms/expand.hpp [3:6]
+ boost/geometry/algorithms/not_implemented.hpp [3:5]
+ boost/geometry/algorithms/overlaps.hpp [3:5]
+ boost/geometry/algorithms/simplify.hpp [3:5]
+ boost/geometry/algorithms/touches.hpp [3:6]
+ boost/geometry/core/exception.hpp [3:5]
+ boost/geometry/core/radian_access.hpp [3:5]
+ boost/geometry/core/ring_type.hpp [3:5]
+ boost/geometry/geometry.hpp [3:5]
+ boost/geometry/multi/multi.hpp [3:5]
+ boost/geometry/strategies/cartesian/box_in_box.hpp [3:6]
+ boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp [3:5]
+ boost/geometry/strategies/cartesian/point_in_box.hpp [3:5]
+ boost/geometry/strategies/cartesian/side_by_triangle.hpp [3:5]
+ boost/geometry/strategies/distance_result.hpp [3:7]
+ boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp [3:5]
+ boost/geometry/strategies/strategy_transform.hpp [3:5]
+ boost/geometry/strategies/transform/matrix_transformers.hpp [3:5]
+ boost/geometry/util/compress_variant.hpp [3:5]
+ boost/geometry/util/math.hpp [3:5]
+ boost/geometry/util/transform_variant.hpp [3:5]
+ boost/geometry/views/detail/indexed_point_view.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 215bdc768306d436a8bb86e0c01115e8
+BELONGS ya.make
+ License text:
+ Copyright 2017-2018 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/pointer_traits.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 21722b4dae740deb7e1ccfab7745d62a
+BELONGS ya.make
+ License text:
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/detail/for_each.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/rotating_buffer.hpp [9:10]
+ boost/numeric/odeint/stepper/generation.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp [10:11]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp [9:10]
+ boost/numeric/odeint/util/is_pair.hpp [9:10]
+ boost/numeric/odeint/util/is_resizeable.hpp [9:10]
+ boost/numeric/odeint/util/resize.hpp [10:11]
+ boost/numeric/odeint/util/same_size.hpp [10:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2180ce6ee1e5aa9a5aeb7320a3a192e4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+ // Copyright (c) 2011-2013 Andrew Hundt.
+ // Copyright (c) 2013-2014 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/static_vector.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 219048af2eeea3f4c00902491fa57b67
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Howard Hinnant
+ // Copyright 2008 Beman Dawes
+ // Copyright 2009-2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/time_point.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 21959bbfabcef0c0a725190ceece57cb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/array/enum.hpp at line 6, boost/preprocessor/array/to_list.hpp at line 6, boost/preprocessor/array/to_seq.hpp at line 6, boost/preprocessor/array/to_tuple.hpp at line 6, boost/preprocessor/facilities/overload.hpp at line 6, boost/preprocessor/list/to_array.hpp at line 6, boost/preprocessor/seq/detail/binary_transform.hpp at line 6, boost/preprocessor/seq/to_list.hpp at line 6, boost/preprocessor/tuple/enum.hpp at line 6, boost/preprocessor/tuple/size.hpp at line 6, boost/preprocessor/tuple/to_array.hpp at line 6, boost/preprocessor/variadic.hpp at line 6, boost/preprocessor/variadic/elem.hpp at line 6, boost/preprocessor/variadic/size.hpp at line 6, boost/preprocessor/variadic/to_array.hpp at line 6, boost/preprocessor/variadic/to_list.hpp at line 6, boost/preprocessor/variadic/to_seq.hpp at line 6, boost/preprocessor/variadic/to_tuple.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/array/enum.hpp [3:6]
+ boost/preprocessor/array/to_list.hpp [3:6]
+ boost/preprocessor/array/to_seq.hpp [3:6]
+ boost/preprocessor/array/to_tuple.hpp [3:6]
+ boost/preprocessor/facilities/overload.hpp [3:6]
+ boost/preprocessor/list/to_array.hpp [3:6]
+ boost/preprocessor/seq/detail/binary_transform.hpp [3:5]
+ boost/preprocessor/seq/to_list.hpp [3:6]
+ boost/preprocessor/tuple/enum.hpp [3:6]
+ boost/preprocessor/tuple/size.hpp [3:6]
+ boost/preprocessor/tuple/to_array.hpp [3:6]
+ boost/preprocessor/variadic.hpp [3:6]
+ boost/preprocessor/variadic/elem.hpp [3:6]
+ boost/preprocessor/variadic/size.hpp [3:6]
+ boost/preprocessor/variadic/to_array.hpp [3:6]
+ boost/preprocessor/variadic/to_list.hpp [3:6]
+ boost/preprocessor/variadic/to_seq.hpp [3:6]
+ boost/preprocessor/variadic/to_tuple.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 21dd23f843f6e73e6d7975f4b3c676ff
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/foreach.hpp at line 6, boost/phoenix/stl/algorithm/detail/begin.hpp at line 11, boost/phoenix/stl/algorithm/detail/decay_array.hpp at line 10, boost/phoenix/stl/algorithm/detail/end.hpp at line 11, boost/phoenix/stl/algorithm/detail/has_equal_range.hpp at line 10, boost/phoenix/stl/algorithm/detail/has_find.hpp at line 12, boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp at line 10, boost/phoenix/stl/algorithm/detail/has_remove.hpp at line 10, boost/phoenix/stl/algorithm/detail/has_remove_if.hpp at line 10, boost/phoenix/stl/algorithm/detail/has_reverse.hpp at line 10, boost/phoenix/stl/algorithm/detail/has_sort.hpp at line 10, boost/phoenix/stl/algorithm/detail/has_unique.hpp at line 10, boost/phoenix/stl/algorithm/detail/has_upper_bound.hpp at line 10, boost/phoenix/stl/algorithm/detail/is_std_hash_map.hpp at line 10, boost/phoenix/stl/algorithm/detail/is_std_hash_set.hpp at line 10, boost/phoenix/stl/algorithm/detail/is_std_list.hpp at line 10, boost/phoenix/stl/algorithm/detail/is_std_map.hpp at line 10, boost/phoenix/stl/algorithm/detail/is_std_set.hpp at line 10, boost/phoenix/stl/algorithm/detail/is_unordered_set_or_map.hpp at line 13, boost/phoenix/stl/algorithm/iteration.hpp at line 11, boost/phoenix/stl/algorithm/querying.hpp at line 13, boost/phoenix/stl/algorithm/transformation.hpp at line 12, boost/range/numeric.hpp at line 13
+ License text:
+ // Copyright 2004 Eric Niebler.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/foreach.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/begin.hpp [9:9]
+ boost/phoenix/stl/algorithm/detail/decay_array.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/end.hpp [9:9]
+ boost/phoenix/stl/algorithm/detail/has_equal_range.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/has_find.hpp [10:10]
+ boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/has_remove.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/has_remove_if.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/has_reverse.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/has_sort.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/has_unique.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/has_upper_bound.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/is_std_hash_map.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/is_std_hash_set.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/is_std_list.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/is_std_map.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/is_std_set.hpp [8:8]
+ boost/phoenix/stl/algorithm/detail/is_unordered_set_or_map.hpp [11:11]
+ boost/phoenix/stl/algorithm/iteration.hpp [9:9]
+ boost/phoenix/stl/algorithm/querying.hpp [11:11]
+ boost/phoenix/stl/algorithm/transformation.hpp [10:10]
+ boost/range/numeric.hpp [11:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 21e959ad55799f0d703f33fa06e92175
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/remove_cv_ref.hpp at line 4
+ License text:
+ // (C) Copyright Peter Dimov 2017.
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/remove_cv_ref.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2225076000632a3d391f0c4252302237
+BELONGS ya.make
+ License text:
+ // Copyright 2007 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/sp_typeinfo.hpp [14:14]
+ boost/smart_ptr/detail/atomic_count_gcc_x86.hpp [9:9]
+ boost/smart_ptr/detail/atomic_count_sync.hpp [11:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 22282f4483789381ead4ca15608f28b1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/distributed/adjlist/serialization.hpp at line 3, boost/graph/distributed/shuffled_distribution.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/adjlist/serialization.hpp [1:3]
+ boost/graph/distributed/shuffled_distribution.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 22324db5d04de73bdfa0cbdd1c7b315e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/default_deleter.hpp at line 3
+ License text:
+ // (C) Copyright Jonathan Turkanis 2004-2005.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/detail/default_deleter.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 22403f1361a990fb6fd5cc8b876e046d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2004 Kristopher Beevers
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/astar_search.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 224ede317f83c513d1a68907e0d028bc
+BELONGS ya.make
+ License text:
+ // Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/any.hpp [331:331]
+
+KEEP COPYRIGHT_SERVICE_LABEL 224f57df16325dd91014dfc45580545f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001 Daryle Walker.
+ // Copyright (C) 2003 Vesa Karvonen.
+ // Copyright (C) 2003 Gennaro Prota.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer/static_log2.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 228235344a4eeb283fe723053ea024fd
+BELONGS libs/random/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/detail/int_float_pair.hpp at line 6, boost/random/detail/operators.hpp at line 6, boost/random/normal_distribution.hpp at line 6, boost/random/random_device.hpp at line 6, boost/uuid/detail/random_provider_posix.ipp at line 6, boost/uuid/detail/random_provider_wincrypt.ipp at line 6, libs/random/src/random_device.cpp at line 6
+ License text:
+ * Copyright Jens Maurer 2000-2001
+ * Copyright Steven Watanabe 2010-2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/detail/int_float_pair.hpp [3:6]
+ boost/random/detail/operators.hpp [3:5]
+ boost/random/normal_distribution.hpp [3:6]
+ boost/random/random_device.hpp [3:6]
+ boost/uuid/detail/random_provider_posix.ipp [3:6]
+ boost/uuid/detail/random_provider_wincrypt.ipp [3:6]
+ libs/random/src/random_device.cpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 22b8921218f5846e7fc7d4a2ac8c34c0
+BELONGS ya.make
+ License text:
+ // Copyright 2004-2006 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/plod_generator.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 22d1ca369e5c9145bc949ee6e4d45afd
+BELONGS ya.make
+ License text:
+ // (C) Copyright Stephen Cleary 2000
+ // (C) Copyright Ion Gaztanaga 2015-2017.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/mutex.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 234430fe848ce8d6594b231bd8e0cfb8
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001 Doug Gregor
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/generation/ignore.hpp [2:4]
+ boost/fusion/container/vector/detail/cpp03/vector_fwd.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/equal_to.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/greater.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/greater_equal.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/less.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/less_equal.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/not_equal_to.hpp [2:3]
+ boost/fusion/sequence/comparison/equal_to.hpp [2:3]
+ boost/fusion/sequence/comparison/greater.hpp [2:3]
+ boost/fusion/sequence/comparison/greater_equal.hpp [2:3]
+ boost/fusion/sequence/comparison/less.hpp [2:3]
+ boost/fusion/sequence/comparison/less_equal.hpp [2:3]
+ boost/fusion/sequence/comparison/not_equal_to.hpp [2:3]
+ boost/fusion/sequence/io/detail/in.hpp [2:4]
+ boost/fusion/sequence/io/detail/manip.hpp [2:4]
+ boost/fusion/sequence/io/detail/out.hpp [2:4]
+ boost/fusion/sequence/io/in.hpp [2:4]
+ boost/fusion/sequence/io/out.hpp [2:4]
+ boost/fusion/support/detail/as_fusion_element.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 235e1329bace813cd48f34c2ee344e77
+BELONGS libs/chrono/ya.make ya.make
+ License text:
+ // (C) Copyright Howard Hinnant
+ // Copyright 2011 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/ceil.hpp [3:4]
+ boost/chrono/floor.hpp [3:4]
+ boost/chrono/io/utility/ios_base_state_ptr.hpp [3:3]
+ boost/chrono/io/utility/manip_base.hpp [3:3]
+ boost/chrono/io/utility/to_string.hpp [3:5]
+ boost/chrono/round.hpp [3:4]
+ boost/ratio/include.hpp [3:3]
+ boost/ratio/mpl/arithmetic.hpp [3:3]
+ boost/ratio/mpl/comparison.hpp [3:3]
+ boost/ratio/mpl/rational_constant.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_sequence_container.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/last_lap.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/no_memory.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/dont_start.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/accumulator_set_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/base_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/elapsed_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/laps_stopwatch.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/clock_default_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopclock.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp [2:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/process_default_formatter.hpp [2:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopclock.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/strict_stopclock.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/system_default_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/thread_default_formatter.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/simple_stopwatch.hpp [2:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/strict_stopwatch.hpp [2:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/suspendable_stopwatch.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 23735cecfcf0a60c051f7faba5e89078
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/suite/indexing/container_utils.hpp at line 4, boost/python/suite/indexing/detail/indexing_suite_detail.hpp at line 3, boost/python/suite/indexing/indexing_suite.hpp at line 3, boost/python/suite/indexing/map_indexing_suite.hpp at line 3, boost/python/suite/indexing/vector_indexing_suite.hpp at line 3
+ License text:
+ // (C) Copyright Joel de Guzman 2003.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/suite/indexing/container_utils.hpp [2:4]
+ boost/python/suite/indexing/detail/indexing_suite_detail.hpp [1:3]
+ boost/python/suite/indexing/indexing_suite.hpp [1:3]
+ boost/python/suite/indexing/map_indexing_suite.hpp [1:3]
+ boost/python/suite/indexing/vector_indexing_suite.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 23778f87dcf85ae8b833451d958ec8be
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+ Copyright (c) 2009-2011 Christopher Schmidt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/struct/adapt_assoc_struct.hpp [2:4]
+ boost/fusion/adapted/struct/adapt_struct.hpp [2:4]
+ boost/fusion/adapted/struct/detail/adapt_base.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 23b27274909dd16fa48c4bb48b55b3aa
+BELONGS ya.make
+ License text:
+ // Copyright Peter Dimov 2001-2002
+ // Copyright Aleksey Gurtovoy 2001-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/arg.hpp [9:10]
+ boost/mpl/arg_fwd.hpp [5:6]
+ boost/mpl/aux_/preprocessed/bcc/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/arg.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 23c8bb4b26b422d99ac7ea9660dc580c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/strong_typedef.hpp at line 15
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/strong_typedef.hpp [12:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL 23ec45cdd65cf0f6b92e9f7c947851ad
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2010
+ // Joerg Walter, Mathias Koch, David Bellot
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/fwd.hpp [2:3]
+ boost/numeric/ublas/hermitian.hpp [2:3]
+ boost/numeric/ublas/io.hpp [2:3]
+ boost/numeric/ublas/vector.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 246b91667b5b03d6d465ceede376e098
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/property_map/property_map_iterator.hpp at line 3
+ License text:
+ // (C) Copyright Jeremy Siek, 2001.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_map/property_map_iterator.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 24912d75a8a2a76e1aa259b4b84a3c7b
+BELONGS ya.make
+ License text:
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2015 Mario Mulansky
+ Copyright 2012 Christoph Koke
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/stepper/controlled_runge_kutta.hpp [8:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2491de20f7a9d79855692fc382be811a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2008 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_spin.hpp [13:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 24d6214a4251073152717c9edc799703
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2010 Athanasios Iliopoulos
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/assignment.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 24f38140c8e89964345d550ec0c8c6e0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/attribute/closure_context.hpp [2:4]
+ boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp [2:4]
+ boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp [2:4]
+ boost/spirit/home/classic/core/non_terminal/parser_context.hpp [2:4]
+ boost/spirit/home/classic/core/non_terminal/subrule.hpp [2:4]
+ boost/spirit/home/classic/dynamic.hpp [2:5]
+ boost/spirit/home/classic/dynamic/for.hpp [2:4]
+ boost/spirit/home/classic/dynamic/if.hpp [2:5]
+ boost/spirit/home/classic/dynamic/while.hpp [2:4]
+ boost/spirit/home/classic/meta/as_parser.hpp [2:4]
+ boost/spirit/home/classic/meta/impl/parser_traits.ipp [2:5]
+ boost/spirit/home/classic/meta/impl/traverse.ipp [2:4]
+ boost/spirit/home/classic/meta/parser_traits.hpp [2:5]
+ boost/spirit/home/classic/meta/traverse.hpp [2:4]
+ boost/spirit/home/classic/utility/functor_parser.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 25101a2bf5bf72c9f5a65128f604df86
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/filesystem/convenience.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/convenience.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2516b6c5eb8aa8b5db5b35bc7391bd45
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2009
+ // Joerg Walter, Mathias Koch, Gunter Winkler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/functional.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2548a67b92ccb549f815c71fffedd824
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/detail/config/windows_posix.hpp at line 4, boost/iostreams/detail/double_object.hpp at line 4, boost/iostreams/detail/select_by_size.hpp at line 4, boost/iostreams/device/array.hpp at line 4, boost/iostreams/device/null.hpp at line 4, boost/iostreams/filtering_stream.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/detail/config/windows_posix.hpp [1:5]
+ boost/iostreams/detail/double_object.hpp [1:4]
+ boost/iostreams/detail/select_by_size.hpp [1:4]
+ boost/iostreams/device/array.hpp [1:4]
+ boost/iostreams/device/null.hpp [1:4]
+ boost/iostreams/filtering_stream.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 255723eed8c8f6b6ec5152864ce80e8a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/detail/result_type_wrapper.hpp at line 6, boost/signals2/detail/signals_common.hpp at line 6, boost/signals2/last_value.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/detail/result_type_wrapper.hpp [3:6]
+ boost/signals2/detail/signals_common.hpp [3:6]
+ boost/signals2/last_value.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 259fd9262673671b8cab0f903fbeabef
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007 Matthias Troyer
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/parallel/detail/untracked_pair.hpp [1:1]
+ boost/property_map/parallel/detail/untracked_pair.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 25e0eaeed6a114cd44e28e07f4bcf799
+BELONGS ya.make
+ License text:
+ Copyright 2008 Adobe Systems Incorporated
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/gather.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 25e4e91c7904dabe1db993d0a9d4c304
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/mfc_map.hpp at line 5
+ License text:
+ // Copyright Adam D. Walling 2012. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/mfc_map.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 260eda8e865b1ac44daf780b42e51c62
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005-2008 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/boman_et_al_graph_coloring.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 26559e960931b28891fa79dd8cbf7bd0
+BELONGS ya.make
+ License text:
+ // (c) 2008 Gordon Woodhull
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSEmpl::_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/msm/mpl_graph/mpl_graph.hpp [7:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 26692c9005ef6256aa7134eef5a4c2ed
+BELONGS ya.make
+ License text:
+ // Copyright Antony Polukhin, 2013-2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/multivisitors_cpp11_based.hpp [6:6]
+ boost/variant/detail/multivisitors_cpp14_based.hpp [7:7]
+ boost/variant/detail/multivisitors_preprocessor_based.hpp [6:6]
+ boost/variant/multivisitors.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 266d0bf761289539d88d2d0c479f3e6c
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+ // Copyright (c) 2005-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/ssl/detail/impl/openssl_init.ipp [5:6]
+ boost/asio/ssl/impl/context.hpp [5:6]
+ boost/asio/ssl/impl/context.ipp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 26ad08d832a34ee06ee9242a2e6f0191
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002-2006 Marcin Kalicinski
+ // Copyright (C) 2007 Alexey Baskakov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_tree/detail/info_parser_writer_settings.hpp [2:3]
+ boost/property_tree/detail/xml_parser_writer_settings.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 26c31cb23da28e487c480a209fc8f691
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2003, 2006, 2011
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/timer/config.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 26d8aac6fc547a1e5f51e33742e3d215
+BELONGS ya.make
+ License text:
+ Copyright (c) 2014 Eric Niebler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/include/nil.hpp [2:2]
+ boost/fusion/support/config.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 26ec38d4689211b14e2c5b53e9a78f76
+BELONGS ya.make
+ License text:
+ // Copyright 2009 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/detail/histogram_sort.hpp [1:1]
+ boost/graph/topology.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 27039f1014fc0cb087f4ed2a48c6ff74
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2007 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/tree/ast.hpp [2:4]
+ boost/spirit/home/classic/tree/parse_tree.hpp [2:4]
+ boost/spirit/home/classic/tree/parse_tree_utils.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 27100ec4a99cd9d80391674193d16ca4
+BELONGS ya.make
+ License text:
+ // Copyright 2003 - 2011 LASMEA UMR 6602 CNRS/Univ. Clermont II
+ // Copyright 2009 - 2011 LRI UMR 8623 CNRS/Univ Paris Sud XI
+ // Copyright 2011 Eric Niebler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/proto/detail/remove_typename.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 271724fafcb242b0c0f0c421b755f5aa
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002-2003
+ // David Moore, William E. Kempf
+ // Copyright (C) 2007-8 Anthony Williams
+ // (C) Copyright 2013 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/barrier.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2724c3ea346ae21b40b968119bcd1167
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/logic/tribool.hpp at line 5, boost/logic/tribool_fwd.hpp at line 5, boost/logic/tribool_io.hpp at line 5
+ License text:
+ // Copyright Douglas Gregor 2002-2004. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/logic/tribool.hpp [3:5]
+ boost/logic/tribool_fwd.hpp [3:5]
+ boost/logic/tribool_io.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 275365ad223b4477b2d7d0620fee65f5
+BELONGS ya.make
+ License text:
+ // Copyright 2002, 2009, 2014 Peter Dimov
+ // Copyright 2008-2009 Frank Mori Hess
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/enable_shared_from_raw.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 275d0865f693a03adf83bd0f3ac07c33
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/detail/config_def.hpp at line 5, boost/iterator/detail/enable_if.hpp at line 5, boost/iterator/filter_iterator.hpp at line 5, boost/iterator/indirect_iterator.hpp at line 5, boost/iterator/interoperable.hpp at line 5, boost/iterator/iterator_adaptor.hpp at line 5, boost/iterator/iterator_archetypes.hpp at line 5, boost/iterator/iterator_categories.hpp at line 5, boost/iterator/iterator_concepts.hpp at line 5, boost/iterator/iterator_facade.hpp at line 5, boost/iterator/reverse_iterator.hpp at line 5, boost/iterator/transform_iterator.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/detail/config_def.hpp [1:5]
+ boost/iterator/detail/enable_if.hpp [1:5]
+ boost/iterator/filter_iterator.hpp [1:5]
+ boost/iterator/indirect_iterator.hpp [1:5]
+ boost/iterator/interoperable.hpp [1:5]
+ boost/iterator/iterator_adaptor.hpp [1:5]
+ boost/iterator/iterator_archetypes.hpp [1:3]
+ boost/iterator/iterator_categories.hpp [1:3]
+ boost/iterator/iterator_concepts.hpp [1:3]
+ boost/iterator/iterator_facade.hpp [1:5]
+ boost/iterator/reverse_iterator.hpp [1:5]
+ boost/iterator/transform_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2778cda5aa02277520174bc9c4c37470
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2015, 2017.
+ // Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/direction_code.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/get_turn_info.hpp [6:7]
+ boost/geometry/algorithms/detail/partition.hpp [6:7]
+ boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp [8:9]
+ boost/geometry/algorithms/sym_difference.hpp [5:6]
+ boost/geometry/core/exception.hpp [7:8]
+ boost/geometry/strategies/geographic/distance_thomas.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 277e6a29d6f3bf8fec3732391a666d6e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/impl/cpp_main.ipp at line 4, boost/test/impl/test_main.ipp at line 4
+ License text:
+ // (C) Copyright Gennadiy Rozental 2001.
+ // (C) Copyright Beman Dawes 1995-2001.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/test/impl/cpp_main.ipp [1:4]
+ boost/test/impl/test_main.ipp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 27c670043b04bd7901f71bf63f139908
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/converter/pytype_function.hpp at line 3
+ License text:
+ // Copyright David Abrahams 2002, Nikolay Mladenov 2007.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/converter/pytype_function.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 27ddeabbafbaeb743985907331386107
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/vacpp.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2822e8ff52ff00b8c0b77a79618c0a15
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2010 Alfredo Correa
+ // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/geometries/adapted/boost_array.hpp [3:4]
+ boost/geometry/geometries/adapted/std_array.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 28467714d17407abf257b8ba02a977ef
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/architecture/arm.h at line 5, boost/predef/os.h at line 5, boost/predef/os/ios.h at line 5, boost/predef/os/macos.h at line 5
+ License text:
+ Copyright Rene Rivera 2008-2015
+ Copyright Franz Detro 2014
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/architecture/arm.h [2:6]
+ boost/predef/os.h [2:5]
+ boost/predef/os/ios.h [2:5]
+ boost/predef/os/macos.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 286ee6881d6fd5e754840b518ab1c541
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001, Daniel C. Nuffer
+ Copyright (c) 2003, Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/iterator/fixed_size_queue.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 28754ad9c0aa02276f0e2f7033f5dfc4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container_hash/hash.hpp at line 4
+ License text:
+ // Copyright 2005-2014 Daniel James.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container_hash/hash.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 28928198315325a81f74270ad06e5e12
+BELONGS ya.make
+ License text:
+ // Copyright Pavol Droba 2002-2006.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/string/compare.hpp [3:3]
+ boost/algorithm/string/detail/finder.hpp [3:3]
+ boost/algorithm/string/erase.hpp [3:3]
+ boost/algorithm/string/finder.hpp [3:3]
+ boost/algorithm/string/join.hpp [3:3]
+ boost/algorithm/string/replace.hpp [3:3]
+ boost/algorithm/string/split.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 28974520d6ba59cf881108b772eb6136
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, Thomas Flemming, tf@ttqv.com
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/healpix.hpp [32:32]
+ boost/geometry/srs/projections/proj/krovak.hpp [28:29]
+
+KEEP COPYRIGHT_SERVICE_LABEL 28c9c06c2cde233aee608a094110da18
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/detail/null_output_iterator.hpp at line 6, boost/signals2/detail/unique_lock.hpp at line 7, boost/signals2/dummy_mutex.hpp at line 8
+ License text:
+ // Copyright Frank Mori Hess 2008.
+ // Distributed under the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/detail/null_output_iterator.hpp [4:6]
+ boost/signals2/detail/unique_lock.hpp [5:7]
+ boost/signals2/dummy_mutex.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 28d732e1da2cbf52812dcc1844a4d2d4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/is_class.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_class.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 29b0154b5b9497e05eafdea58aee1ec9
+BELONGS ya.make
+ License text:
+ // Copyright 2000 University of Notre Dame.
+ // Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/edge_connectivity.hpp [2:3]
+ boost/graph/edmonds_karp_max_flow.hpp [2:3]
+ boost/graph/push_relabel_max_flow.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 29c2f268f49f1dca1203b60b9452f3b9
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2016 Andrzej Krzemienski
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/detail/optional_aligned_storage.hpp [1:2]
+ boost/optional/detail/optional_factory_support.hpp [1:2]
+ boost/optional/optional_fwd.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 29ef0d00b2aae64d2f0f466fcb3faa99
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2011 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/cv_status.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2a09550ee1639dbc41d6a39a2c375d5d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2013 John Maddock, Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/basic_pointerbuf.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2a0e77e759c8b880049f165423e4b6fb
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006-7 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tools/config.hpp [1:3]
+ boost/math/tools/workaround.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2a14a3997f9ef4f008c150826158909e
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2008-10 Anthony Williams
+ // (C) Copyright 2011-2015 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/future.hpp [1:2]
+ boost/thread/futures/future_error.hpp [1:2]
+ boost/thread/futures/future_error_code.hpp [1:2]
+ boost/thread/futures/future_status.hpp [1:2]
+ boost/thread/futures/is_future_type.hpp [1:2]
+ boost/thread/futures/launch.hpp [1:2]
+ boost/thread/futures/wait_for_all.hpp [1:2]
+ boost/thread/futures/wait_for_any.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2a1b9056b88c2a786bdb0458965a2f2e
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002, 2009, 2014 Peter Dimov
+ // Copyright (2) Beman Dawes 2010, 2011
+ // Copyright (3) Ion Gaztanaga 2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/lightweight_test.hpp [13:15]
+ boost/endian/detail/lightweight_test.hpp [13:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2a3b1092793f083bc8f7481a948c88cf
+BELONGS ya.make
+ License text:
+ // Copyright Kevlin Henney, 2000-2005.
+ // Copyright Alexander Nasonov, 2006-2010.
+ // Copyright Antony Polukhin, 2011-2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lexical_cast.hpp [1:3]
+ boost/lexical_cast/bad_lexical_cast.hpp [1:3]
+ boost/lexical_cast/detail/converter_lexical.hpp [1:3]
+ boost/lexical_cast/detail/converter_lexical_streams.hpp [1:3]
+ boost/lexical_cast/detail/converter_numeric.hpp [1:3]
+ boost/lexical_cast/detail/inf_nan.hpp [1:3]
+ boost/lexical_cast/detail/is_character.hpp [1:3]
+ boost/lexical_cast/detail/lcast_char_constants.hpp [1:3]
+ boost/lexical_cast/detail/lcast_unsigned_converters.hpp [1:3]
+ boost/lexical_cast/detail/widest_char.hpp [1:3]
+ boost/lexical_cast/lexical_cast_old.hpp [1:3]
+ boost/lexical_cast/try_lexical_convert.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2a74f5dc5adfaca2efc96baf17b67dd6
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010-2011 Thomas Heller
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix.hpp [2:3]
+ boost/phoenix/core/argument.hpp [2:4]
+ boost/phoenix/core/argument.hpp [86:87]
+ boost/phoenix/core/argument.hpp [117:118]
+ boost/phoenix/core/detail/argument.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_50.hpp [2:3]
+ boost/phoenix/core/environment.hpp [2:3]
+ boost/phoenix/scope/local_variable.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2af72a7e17537e33a1df9af7da221b72
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008 Gerald I. Evenden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/etmerc.hpp [26:26]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2b2af125915ba7065c8a686471913605
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/allocator_traits.hpp at line 11, boost/container/scoped_allocator.hpp at line 11, boost/container/uses_allocator.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/allocator_traits.hpp [9:11]
+ boost/container/scoped_allocator.hpp [9:11]
+ boost/container/uses_allocator.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2b5b2baa7c08899ee3f65704d7448b3d
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2017.
+ // Modifications copyright (c) 2017 Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/buffer.hpp [7:9]
+ boost/geometry/algorithms/correct.hpp [8:10]
+ boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp [5:7]
+ boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp [6:8]
+ boost/geometry/algorithms/detail/equals/collect_vectors.hpp [8:9]
+ boost/geometry/algorithms/detail/extreme_points.hpp [8:9]
+ boost/geometry/algorithms/detail/has_self_intersections.hpp [6:8]
+ boost/geometry/algorithms/detail/multi_modify.hpp [7:9]
+ boost/geometry/algorithms/detail/overlay/assign_parents.hpp [6:8]
+ boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp [6:7]
+ boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/get_relative_order.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/handle_colocations.hpp [6:7]
+ boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/ring_properties.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/select_rings.hpp [6:8]
+ boost/geometry/algorithms/detail/overlay/self_turn_points.hpp [6:7]
+ boost/geometry/algorithms/detail/overlay/sort_by_side.hpp [6:7]
+ boost/geometry/algorithms/detail/overlay/traversal.hpp [5:6]
+ boost/geometry/algorithms/detail/point_on_border.hpp [7:9]
+ boost/geometry/algorithms/is_convex.hpp [5:6]
+ boost/geometry/algorithms/remove_spikes.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2b6708129fdf91bd871f6ae1e2789611
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2012 - 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/caps_msvc_arm.hpp [6:8]
+ boost/atomic/detail/caps_msvc_x86.hpp [6:8]
+ boost/atomic/detail/caps_windows.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2bb7fde157effeae3f1e1e3100704f64
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2004 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/program_options/config.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2bc96828bf98197994f64f66a4a1efb4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/aea.hpp [7:7]
+ boost/geometry/srs/projections/proj/aeqd.hpp [7:7]
+ boost/geometry/srs/projections/proj/airy.hpp [7:7]
+ boost/geometry/srs/projections/proj/aitoff.hpp [7:7]
+ boost/geometry/srs/projections/proj/august.hpp [7:7]
+ boost/geometry/srs/projections/proj/bacon.hpp [7:7]
+ boost/geometry/srs/projections/proj/bipc.hpp [7:7]
+ boost/geometry/srs/projections/proj/boggs.hpp [7:7]
+ boost/geometry/srs/projections/proj/bonne.hpp [7:7]
+ boost/geometry/srs/projections/proj/cass.hpp [7:7]
+ boost/geometry/srs/projections/proj/cc.hpp [7:7]
+ boost/geometry/srs/projections/proj/cea.hpp [7:7]
+ boost/geometry/srs/projections/proj/chamb.hpp [7:7]
+ boost/geometry/srs/projections/proj/collg.hpp [7:7]
+ boost/geometry/srs/projections/proj/crast.hpp [7:7]
+ boost/geometry/srs/projections/proj/denoy.hpp [7:7]
+ boost/geometry/srs/projections/proj/eck1.hpp [7:7]
+ boost/geometry/srs/projections/proj/eck2.hpp [7:7]
+ boost/geometry/srs/projections/proj/eck3.hpp [7:7]
+ boost/geometry/srs/projections/proj/eck4.hpp [7:7]
+ boost/geometry/srs/projections/proj/eck5.hpp [7:7]
+ boost/geometry/srs/projections/proj/eqc.hpp [7:7]
+ boost/geometry/srs/projections/proj/eqdc.hpp [7:7]
+ boost/geometry/srs/projections/proj/etmerc.hpp [7:7]
+ boost/geometry/srs/projections/proj/fahey.hpp [7:7]
+ boost/geometry/srs/projections/proj/fouc_s.hpp [7:7]
+ boost/geometry/srs/projections/proj/gall.hpp [7:7]
+ boost/geometry/srs/projections/proj/geocent.hpp [7:7]
+ boost/geometry/srs/projections/proj/geos.hpp [7:7]
+ boost/geometry/srs/projections/proj/gins8.hpp [7:7]
+ boost/geometry/srs/projections/proj/gn_sinu.hpp [7:7]
+ boost/geometry/srs/projections/proj/gnom.hpp [7:7]
+ boost/geometry/srs/projections/proj/goode.hpp [7:7]
+ boost/geometry/srs/projections/proj/gstmerc.hpp [7:7]
+ boost/geometry/srs/projections/proj/hammer.hpp [7:7]
+ boost/geometry/srs/projections/proj/hatano.hpp [7:7]
+ boost/geometry/srs/projections/proj/healpix.hpp [7:7]
+ boost/geometry/srs/projections/proj/igh.hpp [7:7]
+ boost/geometry/srs/projections/proj/imw_p.hpp [7:7]
+ boost/geometry/srs/projections/proj/isea.hpp [7:7]
+ boost/geometry/srs/projections/proj/krovak.hpp [7:7]
+ boost/geometry/srs/projections/proj/labrd.hpp [7:7]
+ boost/geometry/srs/projections/proj/laea.hpp [7:7]
+ boost/geometry/srs/projections/proj/lagrng.hpp [7:7]
+ boost/geometry/srs/projections/proj/larr.hpp [7:7]
+ boost/geometry/srs/projections/proj/lask.hpp [7:7]
+ boost/geometry/srs/projections/proj/latlong.hpp [7:7]
+ boost/geometry/srs/projections/proj/lcc.hpp [7:7]
+ boost/geometry/srs/projections/proj/lcca.hpp [7:7]
+ boost/geometry/srs/projections/proj/loxim.hpp [7:7]
+ boost/geometry/srs/projections/proj/lsat.hpp [7:7]
+ boost/geometry/srs/projections/proj/mbt_fps.hpp [7:7]
+ boost/geometry/srs/projections/proj/mbtfpp.hpp [7:7]
+ boost/geometry/srs/projections/proj/mbtfpq.hpp [7:7]
+ boost/geometry/srs/projections/proj/merc.hpp [7:7]
+ boost/geometry/srs/projections/proj/mill.hpp [7:7]
+ boost/geometry/srs/projections/proj/mod_ster.hpp [7:7]
+ boost/geometry/srs/projections/proj/moll.hpp [7:7]
+ boost/geometry/srs/projections/proj/natearth.hpp [7:7]
+ boost/geometry/srs/projections/proj/nell.hpp [7:7]
+ boost/geometry/srs/projections/proj/nell_h.hpp [7:7]
+ boost/geometry/srs/projections/proj/nocol.hpp [7:7]
+ boost/geometry/srs/projections/proj/nsper.hpp [7:7]
+ boost/geometry/srs/projections/proj/nzmg.hpp [7:7]
+ boost/geometry/srs/projections/proj/ob_tran.hpp [7:7]
+ boost/geometry/srs/projections/proj/ocea.hpp [7:7]
+ boost/geometry/srs/projections/proj/oea.hpp [7:7]
+ boost/geometry/srs/projections/proj/omerc.hpp [7:7]
+ boost/geometry/srs/projections/proj/ortho.hpp [7:7]
+ boost/geometry/srs/projections/proj/poly.hpp [7:7]
+ boost/geometry/srs/projections/proj/putp2.hpp [7:7]
+ boost/geometry/srs/projections/proj/putp3.hpp [7:7]
+ boost/geometry/srs/projections/proj/putp4p.hpp [7:7]
+ boost/geometry/srs/projections/proj/putp5.hpp [7:7]
+ boost/geometry/srs/projections/proj/putp6.hpp [7:7]
+ boost/geometry/srs/projections/proj/qsc.hpp [7:7]
+ boost/geometry/srs/projections/proj/robin.hpp [7:7]
+ boost/geometry/srs/projections/proj/rouss.hpp [7:7]
+ boost/geometry/srs/projections/proj/rpoly.hpp [7:7]
+ boost/geometry/srs/projections/proj/sconics.hpp [7:7]
+ boost/geometry/srs/projections/proj/somerc.hpp [7:7]
+ boost/geometry/srs/projections/proj/stere.hpp [7:7]
+ boost/geometry/srs/projections/proj/sterea.hpp [7:7]
+ boost/geometry/srs/projections/proj/sts.hpp [7:7]
+ boost/geometry/srs/projections/proj/tcc.hpp [7:7]
+ boost/geometry/srs/projections/proj/tcea.hpp [7:7]
+ boost/geometry/srs/projections/proj/tmerc.hpp [7:7]
+ boost/geometry/srs/projections/proj/tpeqd.hpp [7:7]
+ boost/geometry/srs/projections/proj/urm5.hpp [7:7]
+ boost/geometry/srs/projections/proj/urmfps.hpp [7:7]
+ boost/geometry/srs/projections/proj/vandg.hpp [7:7]
+ boost/geometry/srs/projections/proj/vandg2.hpp [7:7]
+ boost/geometry/srs/projections/proj/vandg4.hpp [7:7]
+ boost/geometry/srs/projections/proj/wag2.hpp [7:7]
+ boost/geometry/srs/projections/proj/wag3.hpp [7:7]
+ boost/geometry/srs/projections/proj/wag7.hpp [7:7]
+ boost/geometry/srs/projections/proj/wink1.hpp [7:7]
+ boost/geometry/srs/projections/proj/wink2.hpp [7:7]
+ boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2be4c5530322f675f4699b1fecb8bdd0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/deque.hpp at line 5, boost/container/detail/flat_tree.hpp at line 5, boost/container/detail/tree.hpp at line 5, boost/container/detail/type_traits.hpp at line 4, boost/container/list.hpp at line 5, boost/container/string.hpp at line 5, boost/container/vector.hpp at line 5, boost/interprocess/detail/transform_iterator.hpp at line 5, boost/interprocess/detail/utilities.hpp at line 5, boost/interprocess/detail/win32_api.hpp at line 5, boost/interprocess/detail/workaround.hpp at line 5, boost/interprocess/exceptions.hpp at line 5, boost/interprocess/offset_ptr.hpp at line 5, boost/move/detail/type_traits.hpp at line 4
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/deque.hpp [3:5]
+ boost/container/detail/flat_tree.hpp [3:5]
+ boost/container/detail/tree.hpp [3:5]
+ boost/container/detail/type_traits.hpp [2:3]
+ boost/container/list.hpp [3:5]
+ boost/container/string.hpp [3:5]
+ boost/container/vector.hpp [3:5]
+ boost/interprocess/detail/transform_iterator.hpp [3:4]
+ boost/interprocess/detail/utilities.hpp [3:4]
+ boost/interprocess/detail/win32_api.hpp [3:5]
+ boost/interprocess/detail/workaround.hpp [3:5]
+ boost/interprocess/exceptions.hpp [3:5]
+ boost/interprocess/offset_ptr.hpp [3:5]
+ boost/move/detail/type_traits.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2c0cd8d92968f6ef02fc040acbde35eb
+BELONGS ya.make
+ License text:
+ // Copyright Eric Friedman 2002-2003
+ // Copyright Aleksey Gurtovoy 2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/sort_impl.hpp [5:5]
+ boost/mpl/partition.hpp [5:6]
+ boost/mpl/sort.hpp [5:6]
+ boost/mpl/stable_partition.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2c1fc4e14b8b85ff09dea84fb89e149a
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+ Copyright (c) 2009 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/view/nview.hpp [2:4]
+ boost/fusion/view/nview/detail/advance_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/at_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/begin_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/cpp03/nview_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/deref_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/distance_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/end_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/equal_to_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/next_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/prior_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/value_at_impl.hpp [2:2]
+ boost/fusion/view/nview/detail/value_of_impl.hpp [2:2]
+ boost/fusion/view/nview/nview.hpp [2:2]
+ boost/fusion/view/nview/nview_iterator.hpp [2:2]
+ boost/spirit/home/x3/numeric/bool.hpp [2:3]
+ boost/spirit/home/x3/numeric/bool_policies.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2c88da1eba82b7c18508f07d9fe9961e
+BELONGS ya.make
+ License text:
+ // Copyright Thijs van den Berg, 2008.
+ // Copyright John Maddock 2008.
+ // Copyright Paul A. Bristow 2008, 2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/laplace.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2c99b4b72f406545709ded88018c916a
+BELONGS ya.make
+ License text:
+ * Copyright 2006-2007 Boris Gubenko
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval/detail/ia64_rounding_control.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2cc8d0bd746b1af01391a996cc0b013e
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2002-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/as_sequence.hpp [5:5]
+ boost/mpl/aux_/adl_barrier.hpp [5:5]
+ boost/mpl/aux_/apply_1st.hpp [5:5]
+ boost/mpl/aux_/common_name_wknd.hpp [5:5]
+ boost/mpl/aux_/config/adl.hpp [5:5]
+ boost/mpl/aux_/config/bind.hpp [5:6]
+ boost/mpl/aux_/config/dependent_nttp.hpp [5:5]
+ boost/mpl/aux_/config/has_xxx.hpp [5:6]
+ boost/mpl/aux_/config/lambda.hpp [5:5]
+ boost/mpl/aux_/config/msvc.hpp [5:5]
+ boost/mpl/aux_/config/overload_resolution.hpp [5:5]
+ boost/mpl/aux_/config/workaround.hpp [5:5]
+ boost/mpl/aux_/has_begin.hpp [5:5]
+ boost/mpl/aux_/has_key_impl.hpp [5:6]
+ boost/mpl/aux_/has_rebind.hpp [5:5]
+ boost/mpl/aux_/has_size.hpp [5:5]
+ boost/mpl/aux_/has_tag.hpp [5:5]
+ boost/mpl/aux_/has_type.hpp [5:5]
+ boost/mpl/aux_/iter_apply.hpp [5:5]
+ boost/mpl/aux_/iter_push_front.hpp [5:5]
+ boost/mpl/aux_/msvc_is_class.hpp [5:5]
+ boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/unpack_args.hpp [2:2]
+ boost/mpl/aux_/preprocessor/add.hpp [5:5]
+ boost/mpl/aux_/preprocessor/default_params.hpp [5:5]
+ boost/mpl/aux_/preprocessor/range.hpp [5:5]
+ boost/mpl/aux_/preprocessor/repeat.hpp [5:5]
+ boost/mpl/aux_/preprocessor/sub.hpp [5:5]
+ boost/mpl/aux_/preprocessor/tuple.hpp [5:5]
+ boost/mpl/aux_/test.hpp [5:5]
+ boost/mpl/aux_/test/assert.hpp [5:5]
+ boost/mpl/aux_/test/data.hpp [5:5]
+ boost/mpl/aux_/test/test_case.hpp [5:5]
+ boost/mpl/deref.hpp [5:5]
+ boost/mpl/is_sequence.hpp [5:5]
+ boost/mpl/protect.hpp [5:6]
+ boost/mpl/unpack_args.hpp [9:9]
+ boost/type_traits/detail/bool_trait_def.hpp [4:4]
+ boost/type_traits/detail/bool_trait_undef.hpp [4:4]
+ boost/type_traits/detail/template_arity_spec.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2cd8eea57cf8e75ed826cc317dbed73d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ratio/mpl/plus.hpp at line 5
+ License text:
+ // (C) Copyright 2011Vicente J. Botet Escriba
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ratio/mpl/plus.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2d057debf051847a35d49ab03363b9c5
+BELONGS ya.make
+ License text:
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/compute/compute.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_abs.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp [9:10]
+ boost/numeric/odeint/integrate/detail/functors.hpp [9:10]
+ boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp [9:10]
+ boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/functors.hpp [9:10]
+ boost/numeric/odeint/iterator/n_step_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/n_step_time_iterator.hpp [11:12]
+ boost/numeric/odeint/iterator/times_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/times_time_iterator.hpp [11:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2d5f4cfed3e5b32b63312a117e31a283
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2010.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tools/tuple.hpp [1:3]
+ boost/type_traits/conditional.hpp [1:3]
+ boost/type_traits/is_rvalue_reference.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2d7bdc2251b6d91e3452c92975305ca5
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007, 2008 Peter Dimov
+ // Copyright (c) 2008 Michael Marcin
+ // Copyright (c) 2009 Frank Mori Hess
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/deconstruct.hpp [16:18]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2d88e144afca22b36e6ceefd1fc94687
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/random.hpp at line 6, boost/random/bernoulli_distribution.hpp at line 7, boost/random/chi_squared_distribution.hpp at line 7, boost/random/detail/generator_bits.hpp at line 7, boost/random/detail/integer_log2.hpp at line 7, boost/random/detail/large_arithmetic.hpp at line 7, boost/random/detail/uniform_int_float.hpp at line 7, boost/random/detail/vector_io.hpp at line 7, boost/random/exponential_distribution.hpp at line 7, boost/random/fisher_f_distribution.hpp at line 7, boost/random/generate_canonical.hpp at line 7, boost/random/geometric_distribution.hpp at line 7, boost/random/independent_bits.hpp at line 7, boost/random/linear_feedback_shift.hpp at line 7, boost/random/lognormal_distribution.hpp at line 7, boost/random/piecewise_constant_distribution.hpp at line 7, boost/random/piecewise_linear_distribution.hpp at line 7, boost/random/student_t_distribution.hpp at line 7, boost/random/taus88.hpp at line 7, boost/random/triangle_distribution.hpp at line 7, boost/random/uniform_int_distribution.hpp at line 7, boost/random/uniform_on_sphere.hpp at line 7, boost/random/uniform_real_distribution.hpp at line 7, boost/random/variate_generator.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/random.hpp [2:6]
+ boost/random/bernoulli_distribution.hpp [3:6]
+ boost/random/chi_squared_distribution.hpp [3:5]
+ boost/random/detail/generator_bits.hpp [3:5]
+ boost/random/detail/integer_log2.hpp [3:5]
+ boost/random/detail/large_arithmetic.hpp [3:5]
+ boost/random/detail/uniform_int_float.hpp [3:6]
+ boost/random/detail/vector_io.hpp [3:5]
+ boost/random/exponential_distribution.hpp [3:7]
+ boost/random/fisher_f_distribution.hpp [3:5]
+ boost/random/generate_canonical.hpp [3:5]
+ boost/random/geometric_distribution.hpp [3:6]
+ boost/random/independent_bits.hpp [3:5]
+ boost/random/linear_feedback_shift.hpp [3:6]
+ boost/random/lognormal_distribution.hpp [3:6]
+ boost/random/piecewise_constant_distribution.hpp [3:5]
+ boost/random/piecewise_linear_distribution.hpp [3:5]
+ boost/random/student_t_distribution.hpp [3:5]
+ boost/random/taus88.hpp [3:6]
+ boost/random/triangle_distribution.hpp [3:6]
+ boost/random/uniform_int_distribution.hpp [3:6]
+ boost/random/uniform_on_sphere.hpp [3:6]
+ boost/random/uniform_real_distribution.hpp [3:6]
+ boost/random/variate_generator.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2dbcd57de4b0ffd4eec81477eab5cebd
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/beast/core/detail/cpu_info.hpp [2:2]
+ boost/beast/core/detail/varint.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2dcf68e9cbb132ca617977536e4e8ad0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/vector_135.hpp at line 7
+ License text:
+ // (C) Copyright 2008 Matthias Troyer
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/vector_135.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2dfa333cc285f02a792246cce5434be0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/suffix.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/suffix.hpp [4:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2e2eca4e065b061f38c7eb91a69efda4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/index/detail/algorithms/intersection_content.hpp [5:5]
+ boost/geometry/index/detail/algorithms/path_intersection.hpp [5:5]
+ boost/geometry/index/detail/rtree/pack_create.hpp [5:5]
+ boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp [5:5]
+ boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/remove.hpp [5:5]
+ boost/geometry/index/indexable.hpp [3:3]
+ boost/geometry/index/parameters.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2e533278812c0422da43ad2a27ae7463
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/typeof/encode_decode_params.hpp at line 3, boost/typeof/integral_template_param.hpp at line 3, boost/typeof/message.hpp at line 3, boost/typeof/template_template_param.hpp at line 3, boost/typeof/type_template_param.hpp at line 3, boost/typeof/vector.hpp at line 3, boost/typeof/vector100.hpp at line 4, boost/typeof/vector150.hpp at line 4, boost/typeof/vector200.hpp at line 4, boost/typeof/vector50.hpp at line 4
+ License text:
+ // Copyright (C) 2005 Arkadiy Vertleyb
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/encode_decode_params.hpp [1:3]
+ boost/typeof/integral_template_param.hpp [1:3]
+ boost/typeof/message.hpp [1:3]
+ boost/typeof/template_template_param.hpp [1:4]
+ boost/typeof/type_template_param.hpp [1:3]
+ boost/typeof/vector.hpp [1:2]
+ boost/typeof/vector100.hpp [2:3]
+ boost/typeof/vector150.hpp [2:3]
+ boost/typeof/vector200.hpp [2:3]
+ boost/typeof/vector50.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2e768fc3f92b09309b782197c57b4c12
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/hp_acc.hpp [1:8]
+ boost/config/platform/hpux.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2e8dcaf45cebf21faa7919fcd5f00014
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Marco Guazzone (marco.guazzone@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/hyperexponential.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2e933bb084c95d7e3472974501e28c75
+BELONGS ya.make
+ License text:
+ // Copyright (c) Jeremy Siek 2001, Marc Wintermantel 2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/bandwidth.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2ea633020e201856dd71e03a0f2b2665
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005, 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+ // Copyright (C) 2016 K. Noel Belcourt <kbelco -at- sandia.gov>.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/communicator.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2eac2a7e626c242b613fa68d3431bb40
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 1994-2007, 2011
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/timer/timer.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2eed3999f484d8ee24370281109e7694
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/seq/detail/to_list_msvc.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/seq/detail/to_list_msvc.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2f10b4a340b310e0d17224ef1c7f517e
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2015 - 2017 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/detail/optional_config.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2f18f945ef63ba6be737d66cea2f20fe
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/numeric.hpp at line 3
+ License text:
+ // Copyright 2009-2014 Neil Groves.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/numeric.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2f932f342242efbf0d94bca33da3478f
+BELONGS ya.make
+ License text:
+ // Copyright Eric Friedman 2002
+ // Copyright Aleksey Gurtovoy 2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/contains_impl.hpp [5:6]
+ boost/mpl/aux_/find_if_pred.hpp [5:6]
+ boost/mpl/contains.hpp [5:6]
+ boost/mpl/contains_fwd.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2f9bade85a83ebe5d5af53237bf117ca
+BELONGS ya.make
+ License text:
+ Copyright (c) 2010 Bryce Lelbach
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/fenv.hpp [2:2]
+ boost/spirit/home/karma/char/char.hpp [1:2]
+ boost/spirit/home/karma/directive/as.hpp [1:2]
+ boost/spirit/home/karma/string/lit.hpp [1:2]
+ boost/spirit/home/lex/argument.hpp [1:4]
+ boost/spirit/home/lex/qi/state_switcher.hpp [1:2]
+ boost/spirit/home/qi/char/char.hpp [2:4]
+ boost/spirit/home/qi/directive/as.hpp [2:4]
+ boost/spirit/home/qi/string/lit.hpp [2:4]
+ boost/spirit/home/support/attributes_fwd.hpp [2:4]
+ boost/spirit/home/support/iterators/line_pos_iterator.hpp [2:4]
+ boost/spirit/home/support/string_traits.hpp [2:4]
+ boost/spirit/home/x3/support/traits/string_traits.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2f9fe99648dcd79bc25622757cf728cb
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009, Spirent Communications, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp [13:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2fac28b8e5c989f4eceb6a9bfa180fc3
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2006
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/assert.hpp [5:5]
+ boost/mpl/aux_/include_preprocessed.hpp [4:4]
+ boost/mpl/aux_/integral_wrapper.hpp [2:2]
+ boost/mpl/integral_c.hpp [5:5]
+ boost/mpl/integral_c_fwd.hpp [5:5]
+ boost/mpl/vector/aux_/include_preprocessed.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2fd1cb4c5bd0ad8ebd01444f50141363
+BELONGS ya.make
+ License text:
+ \# /* Copyright (C) 2001
+ \# * Housemarque Oy
+ \# * http://www.housemarque.com
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor.hpp [1:3]
+ boost/preprocessor/arithmetic.hpp [1:3]
+ boost/preprocessor/arithmetic/add.hpp [1:3]
+ boost/preprocessor/arithmetic/dec.hpp [1:3]
+ boost/preprocessor/arithmetic/detail/div_base.hpp [1:3]
+ boost/preprocessor/arithmetic/div.hpp [1:3]
+ boost/preprocessor/arithmetic/inc.hpp [1:3]
+ boost/preprocessor/arithmetic/mod.hpp [1:3]
+ boost/preprocessor/arithmetic/mul.hpp [1:3]
+ boost/preprocessor/arithmetic/sub.hpp [1:3]
+ boost/preprocessor/cat.hpp [1:3]
+ boost/preprocessor/comparison.hpp [1:3]
+ boost/preprocessor/comparison/equal.hpp [1:3]
+ boost/preprocessor/comparison/greater.hpp [1:3]
+ boost/preprocessor/comparison/greater_equal.hpp [1:3]
+ boost/preprocessor/comparison/less.hpp [1:3]
+ boost/preprocessor/comparison/less_equal.hpp [1:3]
+ boost/preprocessor/comparison/not_equal.hpp [1:3]
+ boost/preprocessor/config/limits.hpp [1:3]
+ boost/preprocessor/control/detail/dmc/while.hpp [1:3]
+ boost/preprocessor/control/detail/edg/while.hpp [1:3]
+ boost/preprocessor/control/detail/msvc/while.hpp [1:3]
+ boost/preprocessor/control/detail/while.hpp [1:3]
+ boost/preprocessor/control/expr_if.hpp [1:3]
+ boost/preprocessor/control/if.hpp [1:3]
+ boost/preprocessor/control/while.hpp [1:3]
+ boost/preprocessor/debug/assert.hpp [1:3]
+ boost/preprocessor/facilities/empty.hpp [1:3]
+ boost/preprocessor/facilities/expand.hpp [1:3]
+ boost/preprocessor/facilities/identity.hpp [1:3]
+ boost/preprocessor/list.hpp [1:3]
+ boost/preprocessor/list/adt.hpp [1:3]
+ boost/preprocessor/list/append.hpp [1:3]
+ boost/preprocessor/list/at.hpp [1:3]
+ boost/preprocessor/list/cat.hpp [1:3]
+ boost/preprocessor/list/detail/dmc/fold_left.hpp [1:3]
+ boost/preprocessor/list/detail/edg/fold_left.hpp [1:3]
+ boost/preprocessor/list/detail/edg/fold_right.hpp [1:3]
+ boost/preprocessor/list/detail/fold_left.hpp [1:3]
+ boost/preprocessor/list/detail/fold_right.hpp [1:3]
+ boost/preprocessor/list/enum.hpp [1:3]
+ boost/preprocessor/list/filter.hpp [1:3]
+ boost/preprocessor/list/first_n.hpp [1:3]
+ boost/preprocessor/list/fold_left.hpp [1:3]
+ boost/preprocessor/list/fold_right.hpp [1:3]
+ boost/preprocessor/list/for_each.hpp [1:3]
+ boost/preprocessor/list/for_each_i.hpp [1:3]
+ boost/preprocessor/list/for_each_product.hpp [1:3]
+ boost/preprocessor/list/rest_n.hpp [1:3]
+ boost/preprocessor/list/reverse.hpp [1:3]
+ boost/preprocessor/list/size.hpp [1:3]
+ boost/preprocessor/list/to_tuple.hpp [1:3]
+ boost/preprocessor/list/transform.hpp [1:3]
+ boost/preprocessor/logical.hpp [1:3]
+ boost/preprocessor/logical/and.hpp [1:3]
+ boost/preprocessor/logical/bool.hpp [1:3]
+ boost/preprocessor/logical/nor.hpp [1:3]
+ boost/preprocessor/logical/not.hpp [1:3]
+ boost/preprocessor/logical/or.hpp [1:3]
+ boost/preprocessor/logical/xor.hpp [1:3]
+ boost/preprocessor/punctuation/comma.hpp [1:3]
+ boost/preprocessor/punctuation/comma_if.hpp [1:3]
+ boost/preprocessor/repetition/detail/dmc/for.hpp [1:3]
+ boost/preprocessor/repetition/detail/edg/for.hpp [1:3]
+ boost/preprocessor/repetition/detail/for.hpp [1:3]
+ boost/preprocessor/repetition/detail/msvc/for.hpp [1:3]
+ boost/preprocessor/repetition/enum.hpp [1:3]
+ boost/preprocessor/repetition/enum_params.hpp [1:3]
+ boost/preprocessor/repetition/enum_params_with_a_default.hpp [1:3]
+ boost/preprocessor/repetition/enum_params_with_defaults.hpp [1:3]
+ boost/preprocessor/repetition/enum_shifted.hpp [1:3]
+ boost/preprocessor/repetition/enum_shifted_params.hpp [1:3]
+ boost/preprocessor/repetition/for.hpp [1:3]
+ boost/preprocessor/repetition/repeat.hpp [1:3]
+ boost/preprocessor/repetition/repeat_from_to.hpp [1:3]
+ boost/preprocessor/selection/max.hpp [1:3]
+ boost/preprocessor/selection/min.hpp [1:3]
+ boost/preprocessor/stringize.hpp [1:3]
+ boost/preprocessor/tuple.hpp [1:3]
+ boost/preprocessor/tuple/eat.hpp [1:3]
+ boost/preprocessor/tuple/elem.hpp [1:3]
+ boost/preprocessor/tuple/reverse.hpp [1:3]
+ boost/preprocessor/tuple/to_list.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 2fed25b670c142362976d681e20983d0
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Xiaogang Zhang
+ // Copyright (c) 2006 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/ellint_1.hpp [1:4]
+ boost/math/special_functions/ellint_2.hpp [1:4]
+ boost/math/special_functions/ellint_3.hpp [1:4]
+ boost/math/special_functions/ellint_d.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 302eb32d7e0c5743b68227dba3d17d14
+BELONGS ya.make
+ License text:
+ // Copyright 2001 John Maddock.
+ // Copyright 2017 Peter Dimov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/helper_macros.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3083c06d1d29086e1fb61a433a3fc94e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/extended_p_square.hpp at line 6, boost/accumulators/statistics/extended_p_square_quantile.hpp at line 6, boost/accumulators/statistics/p_square_quantile.hpp at line 6, boost/accumulators/statistics/weighted_extended_p_square.hpp at line 6, boost/accumulators/statistics/weighted_p_square_quantile.hpp at line 6
+ License text:
+ // Copyright 2005 Daniel Egloff. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/extended_p_square.hpp [4:6]
+ boost/accumulators/statistics/extended_p_square_quantile.hpp [4:6]
+ boost/accumulators/statistics/p_square_quantile.hpp [4:6]
+ boost/accumulators/statistics/weighted_extended_p_square.hpp [4:6]
+ boost/accumulators/statistics/weighted_p_square_quantile.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3097182274a2e77f502de94f323359af
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2007, 2014 Peter Dimov
+ // Copyright (c) Beman Dawes 2011
+ // Copyright (c) 2015 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/assert.hpp [8:11]
+ boost/bind/mem_fn.hpp [13:15]
+ boost/detail/atomic_count.hpp [13:13]
+ boost/geometry/core/assert.hpp [3:6]
+ boost/smart_ptr/detail/atomic_count.hpp [13:14]
+ boost/smart_ptr/detail/atomic_count_gcc.hpp [11:13]
+ boost/smart_ptr/detail/atomic_count_pt.hpp [7:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 30aa7d774a6abb0b7427386b7499cf8d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/allocator.hpp at line 5, boost/container/detail/auto_link.hpp at line 5, boost/container/detail/math_functions.hpp at line 5, boost/container/detail/singleton.hpp at line 16, boost/intrusive/avl_set_hook.hpp at line 5, boost/intrusive/avltree.hpp at line 5, boost/intrusive/bs_set_hook.hpp at line 5, boost/intrusive/detail/avltree_node.hpp at line 5, boost/intrusive/detail/generic_hook.hpp at line 5, boost/intrusive/detail/parent_from_member.hpp at line 5, boost/intrusive/detail/transform_iterator.hpp at line 5, boost/intrusive/detail/tree_iterator.hpp at line 5, boost/intrusive/detail/tree_node.hpp at line 5, boost/intrusive/intrusive_fwd.hpp at line 5, boost/intrusive/pointer_plus_bits.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/allocator.hpp [3:5]
+ boost/container/detail/auto_link.hpp [3:5]
+ boost/container/detail/math_functions.hpp [3:4]
+ boost/container/detail/singleton.hpp [14:16]
+ boost/intrusive/avl_set_hook.hpp [3:3]
+ boost/intrusive/avltree.hpp [3:3]
+ boost/intrusive/bs_set_hook.hpp [3:3]
+ boost/intrusive/detail/avltree_node.hpp [3:3]
+ boost/intrusive/detail/generic_hook.hpp [3:3]
+ boost/intrusive/detail/parent_from_member.hpp [3:3]
+ boost/intrusive/detail/transform_iterator.hpp [3:3]
+ boost/intrusive/detail/tree_iterator.hpp [3:3]
+ boost/intrusive/detail/tree_node.hpp [3:3]
+ boost/intrusive/intrusive_fwd.hpp [3:3]
+ boost/intrusive/pointer_plus_bits.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 30ed1e3bc7b2db873cea00f66576d6ee
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007, 2013 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp [12:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 30f1e4eeb829ff72f7b5b36badf44627
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/poly_collection/detail/is_equality_comparable.hpp at line 3
+ License text:
+ /* Copyright 2017-2018 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/poly_collection/detail/is_equality_comparable.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 30f81317a5922a3aa5dceece7b8dec9c
+BELONGS ya.make
+ License text:
+ // Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+ // Copyright 2014 NumScale SAS
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp [2:3]
+ boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp [2:3]
+ boost/numeric/odeint/external/nt2/nt2_resize.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 315a7554fc178f85d65ddbb338fd58a5
+BELONGS ya.make
+ License text:
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multi_index/detail/ord_index_impl.hpp [11:12]
+ boost/multi_index/detail/ord_index_node.hpp [11:12]
+ boost/multi_index/detail/ord_index_ops.hpp [11:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 318bb438497d2ba56543f1344417bbec
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2010.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/constants/info.hpp [1:3]
+ boost/math/distributions/geometric.hpp [3:4]
+ boost/math/distributions/inverse_chi_squared.hpp [1:2]
+ boost/math/distributions/inverse_gamma.hpp [3:6]
+ boost/math/distributions/inverse_gaussian.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 31944823e2ff50fe3a2c1ee16b2ac06e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/permutation_iterator.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/permutation_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 31a35255487eadf75eca876215e0cb5d
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003-2008 Matthias Christian Schabel
+ // Copyright (C) 2008 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/units/absolute.hpp [4:5]
+ boost/units/base_dimension.hpp [4:5]
+ boost/units/base_unit.hpp [4:5]
+ boost/units/base_units/angle/arcminute.hpp [4:5]
+ boost/units/base_units/angle/arcsecond.hpp [4:5]
+ boost/units/base_units/angle/degree.hpp [4:5]
+ boost/units/base_units/angle/gradian.hpp [4:5]
+ boost/units/base_units/angle/radian.hpp [4:5]
+ boost/units/base_units/angle/revolution.hpp [4:5]
+ boost/units/base_units/angle/steradian.hpp [4:5]
+ boost/units/base_units/astronomical/astronomical_unit.hpp [4:5]
+ boost/units/base_units/astronomical/light_day.hpp [4:5]
+ boost/units/base_units/astronomical/light_hour.hpp [4:5]
+ boost/units/base_units/astronomical/light_minute.hpp [4:5]
+ boost/units/base_units/astronomical/light_second.hpp [4:5]
+ boost/units/base_units/astronomical/light_year.hpp [4:5]
+ boost/units/base_units/astronomical/parsec.hpp [4:5]
+ boost/units/base_units/cgs/biot.hpp [4:5]
+ boost/units/base_units/cgs/centimeter.hpp [4:5]
+ boost/units/base_units/cgs/gram.hpp [4:5]
+ boost/units/base_units/imperial/conversions.hpp [4:5]
+ boost/units/base_units/imperial/drachm.hpp [4:5]
+ boost/units/base_units/imperial/fluid_ounce.hpp [4:5]
+ boost/units/base_units/imperial/foot.hpp [4:5]
+ boost/units/base_units/imperial/furlong.hpp [4:5]
+ boost/units/base_units/imperial/gallon.hpp [4:5]
+ boost/units/base_units/imperial/gill.hpp [4:5]
+ boost/units/base_units/imperial/grain.hpp [4:5]
+ boost/units/base_units/imperial/hundredweight.hpp [4:5]
+ boost/units/base_units/imperial/inch.hpp [4:5]
+ boost/units/base_units/imperial/league.hpp [4:5]
+ boost/units/base_units/imperial/mile.hpp [4:5]
+ boost/units/base_units/imperial/ounce.hpp [4:5]
+ boost/units/base_units/imperial/pint.hpp [4:5]
+ boost/units/base_units/imperial/pound.hpp [4:5]
+ boost/units/base_units/imperial/quart.hpp [4:5]
+ boost/units/base_units/imperial/quarter.hpp [4:5]
+ boost/units/base_units/imperial/stone.hpp [4:5]
+ boost/units/base_units/imperial/thou.hpp [4:5]
+ boost/units/base_units/imperial/ton.hpp [4:5]
+ boost/units/base_units/imperial/yard.hpp [4:5]
+ boost/units/base_units/metric/angstrom.hpp [4:5]
+ boost/units/base_units/metric/are.hpp [4:5]
+ boost/units/base_units/metric/atmosphere.hpp [4:5]
+ boost/units/base_units/metric/bar.hpp [4:5]
+ boost/units/base_units/metric/barn.hpp [4:5]
+ boost/units/base_units/metric/day.hpp [4:5]
+ boost/units/base_units/metric/fermi.hpp [4:5]
+ boost/units/base_units/metric/hectare.hpp [4:5]
+ boost/units/base_units/metric/hour.hpp [4:5]
+ boost/units/base_units/metric/knot.hpp [4:5]
+ boost/units/base_units/metric/liter.hpp [4:5]
+ boost/units/base_units/metric/micron.hpp [4:5]
+ boost/units/base_units/metric/minute.hpp [4:5]
+ boost/units/base_units/metric/mmHg.hpp [4:5]
+ boost/units/base_units/metric/nautical_mile.hpp [4:5]
+ boost/units/base_units/metric/ton.hpp [4:5]
+ boost/units/base_units/metric/torr.hpp [4:5]
+ boost/units/base_units/metric/year.hpp [4:5]
+ boost/units/base_units/si/ampere.hpp [4:5]
+ boost/units/base_units/si/candela.hpp [4:5]
+ boost/units/base_units/si/kelvin.hpp [4:5]
+ boost/units/base_units/si/kilogram.hpp [4:5]
+ boost/units/base_units/si/meter.hpp [4:5]
+ boost/units/base_units/si/mole.hpp [4:5]
+ boost/units/base_units/si/second.hpp [4:5]
+ boost/units/base_units/temperature/celsius.hpp [4:5]
+ boost/units/base_units/temperature/conversions.hpp [4:5]
+ boost/units/base_units/temperature/fahrenheit.hpp [4:5]
+ boost/units/base_units/us/cup.hpp [4:5]
+ boost/units/base_units/us/dram.hpp [4:5]
+ boost/units/base_units/us/fluid_dram.hpp [4:5]
+ boost/units/base_units/us/fluid_ounce.hpp [4:5]
+ boost/units/base_units/us/foot.hpp [4:5]
+ boost/units/base_units/us/gallon.hpp [4:5]
+ boost/units/base_units/us/gill.hpp [4:5]
+ boost/units/base_units/us/grain.hpp [4:5]
+ boost/units/base_units/us/hundredweight.hpp [4:5]
+ boost/units/base_units/us/inch.hpp [4:5]
+ boost/units/base_units/us/mil.hpp [4:5]
+ boost/units/base_units/us/mile.hpp [4:5]
+ boost/units/base_units/us/minim.hpp [4:5]
+ boost/units/base_units/us/ounce.hpp [4:5]
+ boost/units/base_units/us/pint.hpp [4:5]
+ boost/units/base_units/us/pound.hpp [4:5]
+ boost/units/base_units/us/quart.hpp [4:5]
+ boost/units/base_units/us/tablespoon.hpp [4:5]
+ boost/units/base_units/us/teaspoon.hpp [4:5]
+ boost/units/base_units/us/ton.hpp [4:5]
+ boost/units/base_units/us/yard.hpp [4:5]
+ boost/units/cmath.hpp [4:5]
+ boost/units/config.hpp [4:5]
+ boost/units/conversion.hpp [4:5]
+ boost/units/derived_dimension.hpp [4:5]
+ boost/units/detail/absolute_impl.hpp [4:5]
+ boost/units/detail/cmath_impl.hpp [4:5]
+ boost/units/detail/conversion_impl.hpp [4:5]
+ boost/units/detail/dim_impl.hpp [4:5]
+ boost/units/detail/dimension_impl.hpp [4:5]
+ boost/units/detail/dimension_list.hpp [4:5]
+ boost/units/detail/dimensionless_unit.hpp [4:5]
+ boost/units/detail/heterogeneous_conversion.hpp [4:5]
+ boost/units/detail/linear_algebra.hpp [4:5]
+ boost/units/detail/one.hpp [4:5]
+ boost/units/detail/ordinal.hpp [4:5]
+ boost/units/detail/prevent_redefinition.hpp [4:5]
+ boost/units/detail/push_front_if.hpp [4:5]
+ boost/units/detail/push_front_or_add.hpp [4:5]
+ boost/units/detail/sort.hpp [4:5]
+ boost/units/detail/static_rational_power.hpp [4:5]
+ boost/units/detail/unscale.hpp [4:5]
+ boost/units/detail/utility.hpp [4:5]
+ boost/units/dim.hpp [4:5]
+ boost/units/dimension.hpp [4:5]
+ boost/units/dimensionless_quantity.hpp [4:5]
+ boost/units/dimensionless_type.hpp [4:5]
+ boost/units/dimensionless_unit.hpp [4:5]
+ boost/units/get_dimension.hpp [4:5]
+ boost/units/get_system.hpp [4:5]
+ boost/units/heterogeneous_system.hpp [4:5]
+ boost/units/homogeneous_system.hpp [4:5]
+ boost/units/io.hpp [4:5]
+ boost/units/is_dim.hpp [4:5]
+ boost/units/is_dimension_list.hpp [4:5]
+ boost/units/is_dimensionless.hpp [4:5]
+ boost/units/is_dimensionless_quantity.hpp [4:5]
+ boost/units/is_dimensionless_unit.hpp [4:5]
+ boost/units/is_quantity.hpp [4:5]
+ boost/units/is_quantity_of_dimension.hpp [4:5]
+ boost/units/is_quantity_of_system.hpp [4:5]
+ boost/units/is_unit.hpp [4:5]
+ boost/units/is_unit_of_dimension.hpp [4:5]
+ boost/units/is_unit_of_system.hpp [4:5]
+ boost/units/lambda.hpp [4:5]
+ boost/units/limits.hpp [4:5]
+ boost/units/make_scaled_unit.hpp [4:5]
+ boost/units/make_system.hpp [4:5]
+ boost/units/operators.hpp [4:5]
+ boost/units/physical_dimensions.hpp [4:5]
+ boost/units/physical_dimensions/absorbed_dose.hpp [4:5]
+ boost/units/physical_dimensions/acceleration.hpp [4:5]
+ boost/units/physical_dimensions/action.hpp [4:5]
+ boost/units/physical_dimensions/activity.hpp [4:5]
+ boost/units/physical_dimensions/amount.hpp [4:5]
+ boost/units/physical_dimensions/angular_acceleration.hpp [4:5]
+ boost/units/physical_dimensions/angular_momentum.hpp [4:5]
+ boost/units/physical_dimensions/angular_velocity.hpp [4:5]
+ boost/units/physical_dimensions/area.hpp [4:5]
+ boost/units/physical_dimensions/capacitance.hpp [4:5]
+ boost/units/physical_dimensions/conductance.hpp [4:5]
+ boost/units/physical_dimensions/conductivity.hpp [4:5]
+ boost/units/physical_dimensions/current.hpp [4:5]
+ boost/units/physical_dimensions/dose_equivalent.hpp [4:5]
+ boost/units/physical_dimensions/dynamic_viscosity.hpp [4:5]
+ boost/units/physical_dimensions/electric_charge.hpp [4:5]
+ boost/units/physical_dimensions/electric_potential.hpp [4:5]
+ boost/units/physical_dimensions/energy.hpp [4:5]
+ boost/units/physical_dimensions/energy_density.hpp [4:5]
+ boost/units/physical_dimensions/force.hpp [4:5]
+ boost/units/physical_dimensions/frequency.hpp [4:5]
+ boost/units/physical_dimensions/heat_capacity.hpp [4:5]
+ boost/units/physical_dimensions/illuminance.hpp [4:5]
+ boost/units/physical_dimensions/impedance.hpp [4:5]
+ boost/units/physical_dimensions/inductance.hpp [4:5]
+ boost/units/physical_dimensions/kinematic_viscosity.hpp [4:5]
+ boost/units/physical_dimensions/length.hpp [4:5]
+ boost/units/physical_dimensions/luminance.hpp [4:5]
+ boost/units/physical_dimensions/luminous_flux.hpp [4:5]
+ boost/units/physical_dimensions/luminous_intensity.hpp [4:5]
+ boost/units/physical_dimensions/magnetic_field_intensity.hpp [4:5]
+ boost/units/physical_dimensions/magnetic_flux.hpp [4:5]
+ boost/units/physical_dimensions/magnetic_flux_density.hpp [4:5]
+ boost/units/physical_dimensions/mass.hpp [4:5]
+ boost/units/physical_dimensions/mass_density.hpp [4:5]
+ boost/units/physical_dimensions/molar_energy.hpp [4:5]
+ boost/units/physical_dimensions/molar_heat_capacity.hpp [4:5]
+ boost/units/physical_dimensions/moment_of_inertia.hpp [4:5]
+ boost/units/physical_dimensions/momentum.hpp [4:5]
+ boost/units/physical_dimensions/permeability.hpp [4:5]
+ boost/units/physical_dimensions/permittivity.hpp [4:5]
+ boost/units/physical_dimensions/plane_angle.hpp [4:5]
+ boost/units/physical_dimensions/power.hpp [4:5]
+ boost/units/physical_dimensions/pressure.hpp [4:5]
+ boost/units/physical_dimensions/reluctance.hpp [4:5]
+ boost/units/physical_dimensions/resistance.hpp [4:5]
+ boost/units/physical_dimensions/resistivity.hpp [4:5]
+ boost/units/physical_dimensions/solid_angle.hpp [4:5]
+ boost/units/physical_dimensions/specific_energy.hpp [4:5]
+ boost/units/physical_dimensions/specific_heat_capacity.hpp [4:5]
+ boost/units/physical_dimensions/specific_volume.hpp [4:5]
+ boost/units/physical_dimensions/stress.hpp [4:5]
+ boost/units/physical_dimensions/surface_density.hpp [4:5]
+ boost/units/physical_dimensions/surface_tension.hpp [4:5]
+ boost/units/physical_dimensions/temperature.hpp [4:5]
+ boost/units/physical_dimensions/thermal_conductivity.hpp [4:5]
+ boost/units/physical_dimensions/time.hpp [4:5]
+ boost/units/physical_dimensions/torque.hpp [4:5]
+ boost/units/physical_dimensions/velocity.hpp [4:5]
+ boost/units/physical_dimensions/volume.hpp [4:5]
+ boost/units/physical_dimensions/wavenumber.hpp [4:5]
+ boost/units/pow.hpp [4:5]
+ boost/units/quantity.hpp [4:5]
+ boost/units/reduce_unit.hpp [4:5]
+ boost/units/scale.hpp [4:5]
+ boost/units/scaled_base_unit.hpp [4:5]
+ boost/units/static_constant.hpp [4:5]
+ boost/units/static_rational.hpp [4:5]
+ boost/units/systems/abstract.hpp [4:5]
+ boost/units/systems/angle/degrees.hpp [4:5]
+ boost/units/systems/angle/gradians.hpp [4:5]
+ boost/units/systems/angle/revolutions.hpp [4:5]
+ boost/units/systems/cgs.hpp [4:5]
+ boost/units/systems/cgs/acceleration.hpp [4:5]
+ boost/units/systems/cgs/area.hpp [4:5]
+ boost/units/systems/cgs/base.hpp [4:5]
+ boost/units/systems/cgs/current.hpp [4:5]
+ boost/units/systems/cgs/dimensionless.hpp [4:5]
+ boost/units/systems/cgs/dynamic_viscosity.hpp [4:5]
+ boost/units/systems/cgs/energy.hpp [4:5]
+ boost/units/systems/cgs/force.hpp [4:5]
+ boost/units/systems/cgs/frequency.hpp [4:5]
+ boost/units/systems/cgs/io.hpp [4:5]
+ boost/units/systems/cgs/kinematic_viscosity.hpp [4:5]
+ boost/units/systems/cgs/length.hpp [4:5]
+ boost/units/systems/cgs/mass.hpp [4:5]
+ boost/units/systems/cgs/mass_density.hpp [4:5]
+ boost/units/systems/cgs/momentum.hpp [4:5]
+ boost/units/systems/cgs/power.hpp [4:5]
+ boost/units/systems/cgs/pressure.hpp [4:5]
+ boost/units/systems/cgs/time.hpp [4:5]
+ boost/units/systems/cgs/velocity.hpp [4:5]
+ boost/units/systems/cgs/volume.hpp [4:5]
+ boost/units/systems/cgs/wavenumber.hpp [4:5]
+ boost/units/systems/detail/constants.hpp [4:5]
+ boost/units/systems/si.hpp [4:5]
+ boost/units/systems/si/absorbed_dose.hpp [4:5]
+ boost/units/systems/si/acceleration.hpp [4:5]
+ boost/units/systems/si/action.hpp [4:5]
+ boost/units/systems/si/activity.hpp [4:5]
+ boost/units/systems/si/amount.hpp [4:5]
+ boost/units/systems/si/angular_acceleration.hpp [4:5]
+ boost/units/systems/si/angular_momentum.hpp [4:5]
+ boost/units/systems/si/angular_velocity.hpp [4:5]
+ boost/units/systems/si/area.hpp [4:5]
+ boost/units/systems/si/base.hpp [4:5]
+ boost/units/systems/si/capacitance.hpp [4:5]
+ boost/units/systems/si/catalytic_activity.hpp [4:5]
+ boost/units/systems/si/codata/alpha_constants.hpp [4:5]
+ boost/units/systems/si/codata/atomic-nuclear_constants.hpp [4:5]
+ boost/units/systems/si/codata/deuteron_constants.hpp [4:5]
+ boost/units/systems/si/codata/electromagnetic_constants.hpp [4:5]
+ boost/units/systems/si/codata/electron_constants.hpp [4:5]
+ boost/units/systems/si/codata/helion_constants.hpp [4:5]
+ boost/units/systems/si/codata/muon_constants.hpp [4:5]
+ boost/units/systems/si/codata/neutron_constants.hpp [4:5]
+ boost/units/systems/si/codata/physico-chemical_constants.hpp [4:5]
+ boost/units/systems/si/codata/proton_constants.hpp [4:5]
+ boost/units/systems/si/codata/tau_constants.hpp [4:5]
+ boost/units/systems/si/codata/triton_constants.hpp [4:5]
+ boost/units/systems/si/codata/typedefs.hpp [4:5]
+ boost/units/systems/si/codata/universal_constants.hpp [4:5]
+ boost/units/systems/si/codata_constants.hpp [4:5]
+ boost/units/systems/si/conductance.hpp [4:5]
+ boost/units/systems/si/conductivity.hpp [4:5]
+ boost/units/systems/si/current.hpp [4:5]
+ boost/units/systems/si/dimensionless.hpp [4:5]
+ boost/units/systems/si/dose_equivalent.hpp [4:5]
+ boost/units/systems/si/dynamic_viscosity.hpp [4:5]
+ boost/units/systems/si/electric_charge.hpp [4:5]
+ boost/units/systems/si/electric_potential.hpp [4:5]
+ boost/units/systems/si/energy.hpp [4:5]
+ boost/units/systems/si/force.hpp [4:5]
+ boost/units/systems/si/frequency.hpp [4:5]
+ boost/units/systems/si/illuminance.hpp [4:5]
+ boost/units/systems/si/impedance.hpp [4:5]
+ boost/units/systems/si/inductance.hpp [4:5]
+ boost/units/systems/si/io.hpp [4:5]
+ boost/units/systems/si/kinematic_viscosity.hpp [4:5]
+ boost/units/systems/si/length.hpp [4:5]
+ boost/units/systems/si/luminous_flux.hpp [4:5]
+ boost/units/systems/si/luminous_intensity.hpp [4:5]
+ boost/units/systems/si/magnetic_field_intensity.hpp [4:5]
+ boost/units/systems/si/magnetic_flux.hpp [4:5]
+ boost/units/systems/si/magnetic_flux_density.hpp [4:5]
+ boost/units/systems/si/mass.hpp [4:5]
+ boost/units/systems/si/mass_density.hpp [4:5]
+ boost/units/systems/si/moment_of_inertia.hpp [4:5]
+ boost/units/systems/si/momentum.hpp [4:5]
+ boost/units/systems/si/permeability.hpp [4:5]
+ boost/units/systems/si/permittivity.hpp [4:5]
+ boost/units/systems/si/plane_angle.hpp [4:5]
+ boost/units/systems/si/power.hpp [4:5]
+ boost/units/systems/si/prefixes.hpp [4:5]
+ boost/units/systems/si/pressure.hpp [4:5]
+ boost/units/systems/si/reluctance.hpp [4:5]
+ boost/units/systems/si/resistance.hpp [4:5]
+ boost/units/systems/si/resistivity.hpp [4:5]
+ boost/units/systems/si/solid_angle.hpp [4:5]
+ boost/units/systems/si/surface_density.hpp [4:5]
+ boost/units/systems/si/surface_tension.hpp [4:5]
+ boost/units/systems/si/temperature.hpp [4:5]
+ boost/units/systems/si/time.hpp [4:5]
+ boost/units/systems/si/torque.hpp [4:5]
+ boost/units/systems/si/velocity.hpp [4:5]
+ boost/units/systems/si/volume.hpp [4:5]
+ boost/units/systems/si/wavenumber.hpp [4:5]
+ boost/units/systems/temperature/celsius.hpp [4:5]
+ boost/units/systems/temperature/fahrenheit.hpp [4:5]
+ boost/units/unit.hpp [4:5]
+ boost/units/units_fwd.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 31dab43fa080cbb98017ca60b8536ab0
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/config.hpp [3:3]
+ boost/filesystem/exception.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 324d93d18dc0341b928695ee94a194af
+BELONGS ya.make
+ License text:
+ // Copyright 2010 Andy Tompkins.
+ // Copyright 2017 James E. King III
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/uuid/basic_name_generator.hpp [3:4]
+ boost/uuid/name_generator.hpp [3:4]
+ boost/uuid/name_generator_sha1.hpp [3:4]
+ boost/uuid/nil_generator.hpp [3:5]
+ boost/uuid/random_generator.hpp [3:6]
+ boost/uuid/string_generator.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 32511a369ceb9e80149621bddd200001
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ Copyright (c) 2011 Bryce Lelbach
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/actor/ref_value_actor.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 32573bc3a7b7bae58726fa77bfc61ebf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/times2_iterator.hpp at line 6
+ License text:
+ // Copyright 2006 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/times2_iterator.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3270284535e3fd146527a1723db5c829
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2014 Erik Erlandson
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/units/base_units/information/bit.hpp [4:4]
+ boost/units/base_units/information/byte.hpp [4:4]
+ boost/units/base_units/information/hartley.hpp [4:4]
+ boost/units/base_units/information/nat.hpp [4:4]
+ boost/units/base_units/information/shannon.hpp [4:4]
+ boost/units/physical_dimensions/information.hpp [4:4]
+ boost/units/systems/information.hpp [4:4]
+ boost/units/systems/information/bit.hpp [4:4]
+ boost/units/systems/information/byte.hpp [4:4]
+ boost/units/systems/information/hartley.hpp [4:4]
+ boost/units/systems/information/nat.hpp [4:4]
+ boost/units/systems/information/prefixes.hpp [4:4]
+ boost/units/systems/information/shannon.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 32d1f182852203e1af5656ce09a20b93
+BELONGS ya.make
+ License text:
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
+ Copyright 2012 Denis Demidov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/vexcl/vexcl_resize.hpp [9:11]
+ boost/numeric/odeint/external/viennacl/viennacl_operations.hpp [9:11]
+ boost/numeric/odeint/external/viennacl/viennacl_resize.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 32f3e9a485f1df17b5b5c669b5cf8a43
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/adaptive_pool.hpp at line 5, boost/container/detail/adaptive_node_pool.hpp at line 5, boost/container/detail/adaptive_node_pool_impl.hpp at line 5, boost/container/detail/alloc_lib.h at line 5, boost/container/detail/allocation_type.hpp at line 5, boost/container/detail/config_begin.hpp at line 5, boost/container/detail/config_end.hpp at line 5, boost/container/detail/copy_move_algo.hpp at line 5, boost/container/detail/destroyers.hpp at line 5, boost/container/detail/iterators.hpp at line 5, boost/container/detail/min_max.hpp at line 5, boost/container/detail/mpl.hpp at line 5, boost/container/detail/multiallocation_chain.hpp at line 5, boost/container/detail/node_alloc_holder.hpp at line 5, boost/container/detail/node_pool.hpp at line 5, boost/container/detail/node_pool_impl.hpp at line 5, boost/container/detail/pair.hpp at line 5, boost/container/detail/pair_key_mapped_of_value.hpp at line 5, boost/container/detail/pool_common.hpp at line 5, boost/container/detail/pool_common_alloc.hpp at line 5, boost/container/detail/transform_iterator.hpp at line 5, boost/container/detail/value_init.hpp at line 5, boost/container/detail/version_type.hpp at line 5, boost/container/detail/workaround.hpp at line 5, boost/container/flat_map.hpp at line 5, boost/container/flat_set.hpp at line 5, boost/container/map.hpp at line 5, boost/container/set.hpp at line 5, boost/interprocess/detail/os_thread_functions.hpp at line 5, boost/intrusive/detail/workaround.hpp at line 5, boost/move/adl_move_swap.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/adaptive_pool.hpp [3:5]
+ boost/container/detail/adaptive_node_pool.hpp [3:5]
+ boost/container/detail/adaptive_node_pool_impl.hpp [3:5]
+ boost/container/detail/alloc_lib.h [3:5]
+ boost/container/detail/allocation_type.hpp [3:5]
+ boost/container/detail/config_begin.hpp [3:5]
+ boost/container/detail/config_end.hpp [3:5]
+ boost/container/detail/copy_move_algo.hpp [3:5]
+ boost/container/detail/destroyers.hpp [3:3]
+ boost/container/detail/iterators.hpp [3:4]
+ boost/container/detail/min_max.hpp [3:5]
+ boost/container/detail/mpl.hpp [3:3]
+ boost/container/detail/multiallocation_chain.hpp [3:5]
+ boost/container/detail/node_alloc_holder.hpp [3:5]
+ boost/container/detail/node_pool.hpp [3:5]
+ boost/container/detail/node_pool_impl.hpp [3:5]
+ boost/container/detail/pair.hpp [3:3]
+ boost/container/detail/pair_key_mapped_of_value.hpp [3:5]
+ boost/container/detail/pool_common.hpp [3:5]
+ boost/container/detail/pool_common_alloc.hpp [3:5]
+ boost/container/detail/transform_iterator.hpp [3:4]
+ boost/container/detail/value_init.hpp [3:3]
+ boost/container/detail/version_type.hpp [3:5]
+ boost/container/detail/workaround.hpp [3:5]
+ boost/container/flat_map.hpp [3:5]
+ boost/container/flat_set.hpp [3:5]
+ boost/container/map.hpp [3:5]
+ boost/container/set.hpp [3:5]
+ boost/interprocess/detail/os_thread_functions.hpp [3:5]
+ boost/intrusive/detail/workaround.hpp [3:5]
+ boost/move/adl_move_swap.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 33055e91cf52f04ff1b51e16884cc15f
+BELONGS ya.make
+ License text:
+ Copyright (C) 2017 Glen Joseph Fernandes (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/addressof.hpp [7:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3333518f60a3b0b9277d7db70f8bc9fe
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+ // Copyright (c) 2003-2004, 2008 Gennaro Prota
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/dynamic_bitset.hpp [3:4]
+ boost/dynamic_bitset.hpp [3:4]
+ boost/dynamic_bitset/config.hpp [3:4]
+ boost/dynamic_bitset/dynamic_bitset.hpp [3:5]
+ boost/dynamic_bitset_fwd.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3362337951e7dc98a4141fb90ce0df41
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/block_indirect_sort/blk_detail/backbone.hpp at line 8, boost/sort/block_indirect_sort/blk_detail/block.hpp at line 8, boost/sort/block_indirect_sort/blk_detail/constants.hpp at line 7, boost/sort/block_indirect_sort/blk_detail/merge_blocks.hpp at line 8, boost/sort/block_indirect_sort/blk_detail/move_blocks.hpp at line 8, boost/sort/block_indirect_sort/blk_detail/parallel_sort.hpp at line 8, boost/sort/block_indirect_sort/block_indirect_sort.hpp at line 7, boost/sort/common/indirect.hpp at line 7, boost/sort/common/merge_block.hpp at line 8, boost/sort/common/merge_four.hpp at line 7, boost/sort/common/merge_vector.hpp at line 8, boost/sort/common/range.hpp at line 7, boost/sort/common/rearrange.hpp at line 7, boost/sort/common/sort_basic.hpp at line 7, boost/sort/common/util/atomic.hpp at line 6, boost/sort/common/util/insert.hpp at line 7, boost/sort/common/util/merge.hpp at line 7, boost/sort/common/util/traits.hpp at line 7, boost/sort/heap_sort/heap_sort.hpp at line 7, boost/sort/insert_sort/insert_sort.hpp at line 7, boost/sort/parallel_stable_sort/parallel_stable_sort.hpp at line 7, boost/sort/sample_sort/sample_sort.hpp at line 7, boost/sort/spinsort/spinsort.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/sort/block_indirect_sort/blk_detail/backbone.hpp [6:8]
+ boost/sort/block_indirect_sort/blk_detail/block.hpp [6:8]
+ boost/sort/block_indirect_sort/blk_detail/constants.hpp [5:7]
+ boost/sort/block_indirect_sort/blk_detail/merge_blocks.hpp [6:8]
+ boost/sort/block_indirect_sort/blk_detail/move_blocks.hpp [6:8]
+ boost/sort/block_indirect_sort/blk_detail/parallel_sort.hpp [6:8]
+ boost/sort/block_indirect_sort/block_indirect_sort.hpp [5:7]
+ boost/sort/common/indirect.hpp [5:7]
+ boost/sort/common/merge_block.hpp [6:8]
+ boost/sort/common/merge_four.hpp [5:7]
+ boost/sort/common/merge_vector.hpp [6:8]
+ boost/sort/common/range.hpp [5:7]
+ boost/sort/common/rearrange.hpp [5:7]
+ boost/sort/common/sort_basic.hpp [5:7]
+ boost/sort/common/util/atomic.hpp [4:6]
+ boost/sort/common/util/insert.hpp [5:7]
+ boost/sort/common/util/merge.hpp [5:7]
+ boost/sort/common/util/traits.hpp [5:7]
+ boost/sort/heap_sort/heap_sort.hpp [5:7]
+ boost/sort/insert_sort/insert_sort.hpp [5:7]
+ boost/sort/parallel_stable_sort/parallel_stable_sort.hpp [5:7]
+ boost/sort/sample_sort/sample_sort.hpp [5:7]
+ boost/sort/spinsort/spinsort.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3386ce257b7fdc192fc2c7a99846dd83
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013-2014.
+ // Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp [8:9]
+ boost/geometry/algorithms/detail/equals/point_point.hpp [8:9]
+ boost/geometry/algorithms/detail/single_geometry.hpp [5:6]
+ boost/geometry/algorithms/detail/sub_range.hpp [5:6]
+ boost/geometry/algorithms/disjoint.hpp [8:9]
+ boost/geometry/policies/disjoint_interrupt_policy.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 339fcf7433771e1324c39962a53efb58
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/algo/adaptive_merge.hpp at line 5, boost/move/algo/adaptive_sort.hpp at line 5, boost/move/algo/detail/adaptive_sort_merge.hpp at line 5, boost/move/algo/detail/basic_op.hpp at line 5, boost/move/algo/detail/merge.hpp at line 5, boost/move/algo/detail/merge_sort.hpp at line 5, boost/move/algo/predicate.hpp at line 5, boost/move/detail/destruct_n.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2015-2016.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/algo/adaptive_merge.hpp [3:5]
+ boost/move/algo/adaptive_sort.hpp [3:5]
+ boost/move/algo/detail/adaptive_sort_merge.hpp [3:5]
+ boost/move/algo/detail/basic_op.hpp [3:5]
+ boost/move/algo/detail/merge.hpp [3:5]
+ boost/move/algo/detail/merge_sort.hpp [3:5]
+ boost/move/algo/predicate.hpp [3:5]
+ boost/move/detail/destruct_n.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 33e18cfc20734ce255518bc39f4f9639
+BELONGS ya.make
+ License text:
+ // (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+ // Copyright (c) 2001-2008 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/shared_ptr.hpp [7:8]
+ boost/smart_ptr/shared_ptr.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 33fcb6432b4c5d83e447d6f2b8dd7cf8
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015-2016 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/formulas/result_inverse.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3430da63f6fba2e8b14a06b6618ef84f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/sort.hpp at line 5
+ License text:
+ // Copyright Steven J. Ross 2014
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/sort/sort.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 346c67fb4a777a0d04af25c1d1bd52dc
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2014, 2015 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/none.hpp [1:2]
+ boost/none_t.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3480f6f1e992412638387963c9a8bfe5
+BELONGS ya.make
+ License text:
+ // Copyright David Abrahams and Thomas Becker 2000-2006.
+ // Copyright Kohei Takahashi 2012-2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/zip_iterator.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 34a792da65f2f8745dcf28bc6c533356
+BELONGS ya.make
+ License text:
+ * Copyright 2000 Maarten Keijzer
+ * Copyright 2002 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval/detail/msvc_rounding_control.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 34ce55406b46dd8bed8401d40235f330
+BELONGS ya.make
+ License text:
+ // Copyright 2014 LASMEA UMR 6602 CNRS/Univ. Clermont II
+ // Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+ // Copyright 2014 MetaScale SAS
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/nt2/nt2_copy.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 351746b3263b8ecde03d30e68809a8c2
+BELONGS ya.make
+ License text:
+ // Copyright 2005 Trustees of Indiana University
+ // Authors: Andrew Lumsdaine, Douglas Gregor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/simple_point.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 354c2179cce41ffab59e14fbc4d8cbe0
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2017, 2018.
+ // Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/epsg_traits.hpp [5:7]
+ boost/geometry/srs/projections/impl/dms_parser.hpp [5:7]
+ boost/geometry/srs/projections/impl/pj_datum_set.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_ell_set.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_init.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_strerrno.hpp [4:6]
+ boost/geometry/srs/projections/impl/pj_transform.hpp [4:6]
+ boost/geometry/srs/projections/proj/aeqd.hpp [9:11]
+ boost/geometry/srs/projections/proj/cc.hpp [9:11]
+ boost/geometry/srs/projections/proj/gnom.hpp [9:11]
+ boost/geometry/srs/projections/proj/goode.hpp [9:11]
+ boost/geometry/srs/projections/proj/healpix.hpp [9:11]
+ boost/geometry/srs/projections/proj/isea.hpp [9:11]
+ boost/geometry/srs/projections/proj/laea.hpp [9:11]
+ boost/geometry/srs/projections/proj/lsat.hpp [9:11]
+ boost/geometry/srs/projections/proj/nsper.hpp [9:11]
+ boost/geometry/srs/projections/proj/ob_tran.hpp [9:11]
+ boost/geometry/srs/projections/proj/ortho.hpp [9:11]
+ boost/geometry/srs/projections/proj/stere.hpp [9:11]
+ boost/geometry/srs/projections/proj/tcc.hpp [9:11]
+ boost/geometry/srs/projections/proj/vandg2.hpp [9:11]
+ boost/geometry/strategies/spherical/distance_haversine.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 355b2ffcb48b6b4cc42ba88a8b3a4faf
+BELONGS ya.make
+ License text:
+ Copyright 2017 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/allocate_local_shared_array.hpp [2:3]
+ boost/smart_ptr/make_local_shared_array.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 356e94e4f4ffdf79ede13b61da73d082
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006.
+ // Copyright Paul A. Bristow 2006, 2012, 2017.
+ // Copyright Thomas Mang 2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/students_t.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 357355a40dea9ba097800691e11a08d7
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 1994, 2006, 2008
+ // Copyright Vicente J. Botet Escriba 2009
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp [3:4]
+ boost/chrono/detail/inlined/mac/thread_clock.hpp [3:5]
+ boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp [3:4]
+ boost/chrono/detail/inlined/posix/thread_clock.hpp [3:4]
+ boost/chrono/detail/inlined/win/process_cpu_clocks.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3597dd90b081d5668dabc2026c83961e
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2014 Glen Fernandes
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/checked_delete.hpp [2:2]
+ boost/detail/lightweight_test.hpp [2:2]
+ boost/detail/no_exceptions_support.hpp [2:2]
+ boost/noncopyable.hpp [2:2]
+ boost/ref.hpp [2:2]
+ boost/swap.hpp [2:2]
+ boost/utility/addressof.hpp [2:2]
+ boost/utility/enable_if.hpp [2:2]
+ boost/utility/explicit_operator_bool.hpp [2:2]
+ boost/utility/swap.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 35f3967788124fb1166bf637d6cd211a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/transitive_closure.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/transitive_closure.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 362e438ad12174e10c63f3ad9fa1ce0d
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/borland.hpp [1:5]
+ boost/config/compiler/codegear.hpp [1:5]
+ boost/config/compiler/gcc.hpp [1:9]
+ boost/config/compiler/hp_acc.hpp [1:8]
+ boost/config/compiler/intel.hpp [1:10]
+ boost/config/compiler/visualc.hpp [1:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 365adb3be0f210d54497c8792ef79936
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/detail/config.hpp at line 5, boost/random/detail/disable_warnings.hpp at line 5, boost/random/detail/enable_warnings.hpp at line 5, boost/random/detail/seed.hpp at line 5, boost/random/detail/seed_impl.hpp at line 5
+ License text:
+ * Copyright Steven Watanabe 2009
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/detail/config.hpp [3:5]
+ boost/random/detail/disable_warnings.hpp [3:5]
+ boost/random/detail/enable_warnings.hpp [3:5]
+ boost/random/detail/seed.hpp [3:5]
+ boost/random/detail/seed_impl.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3674cfd3d09da8cdf64d636540eedccb
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/get_max_size.hpp [3:6]
+ boost/geometry/policies/robustness/robust_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 368bc0676fed97d8e20cb5e9e1a4530f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2009 Andrew Sutton
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/detail/labeled_graph_traits.hpp [1:1]
+ boost/graph/graph_mutability_traits.hpp [1:1]
+ boost/graph/labeled_graph.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 36e9b1823d56fbd4e1710912ff2b784b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/detail/dealloc.hpp at line 3, boost/python/return_opaque_pointer.hpp at line 3
+ License text:
+ // Copyright Gottfried GanรŸauge 2003.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/detail/dealloc.hpp [1:3]
+ boost/python/return_opaque_pointer.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 36fea81184c5ae64a7624098ffc18c64
+BELONGS libs/thread/ya.make ya.make
+ License text:
+ // Copyright (C) 2001-2003
+ // William E. Kempf
+ // (C) Copyright 2008-9 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/sync/interprocess_recursive_mutex.hpp [15:16]
+ boost/interprocess/sync/posix/mutex.hpp [15:16]
+ boost/interprocess/sync/posix/recursive_mutex.hpp [15:16]
+ boost/interprocess/sync/spin/recursive_mutex.hpp [15:16]
+ boost/thread.hpp [1:3]
+ boost/thread/detail/config.hpp [1:3]
+ boost/thread/exceptions.hpp [1:4]
+ boost/thread/xtime.hpp [1:3]
+ libs/thread/src/pthread/thread.cpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 374b652d73bc75d45730b2239830c0a0
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002-2003
+ // Eric Friedman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/bad_visit.hpp [6:7]
+ boost/variant/detail/apply_visitor_binary.hpp [6:7]
+ boost/variant/detail/apply_visitor_delayed.hpp [6:7]
+ boost/variant/detail/apply_visitor_unary.hpp [6:7]
+ boost/variant/detail/move.hpp [6:8]
+ boost/variant/static_visitor.hpp [6:7]
+ boost/variant/visitor_ptr.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3754fd14fa62eae798d8325bcb41f0a7
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007 Marcin Kalicinski
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_tree/detail/xml_parser_read_rapidxml.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3761f0e38b5da4769378918141293e40
+BELONGS ya.make
+ License text:
+ // Copyright 2002 Rensselaer Polytechnic Institute
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/floyd_warshall_shortest.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3781454acc49374ec380053b507684cc
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2011 Hartmut Kaiser
+ // Copyright (c) 2001-2011 Joel de Guzman
+ // Copyright (c) 2011 Thomas Bernard
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/repository/home/qi/directive/kwd.hpp [2:3]
+ boost/spirit/repository/home/qi/operator.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3790b2f380ed5746f91d9f6f8e6a50b2
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006.
+ // Copyright Paul A. Bristow 2007.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/bernoulli.hpp [3:4]
+ boost/math/distributions/binomial.hpp [3:4]
+ boost/math/distributions/cauchy.hpp [1:2]
+ boost/math/distributions/find_location.hpp [1:2]
+ boost/math/distributions/find_scale.hpp [1:2]
+ boost/math/distributions/negative_binomial.hpp [3:4]
+ boost/math/distributions/poisson.hpp [3:4]
+ boost/math/distributions/rayleigh.hpp [1:3]
+ boost/math/policies/error_handling.hpp [1:2]
+ boost/math/special_functions/detail/ibeta_inverse.hpp [1:4]
+ boost/math/special_functions/detail/t_distribution_inv.hpp [1:4]
+ boost/math/tools/user.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 379d55304a225ee534790d8a1bfe4816
+BELONGS ya.make
+ License text:
+ // Copyright (c) 1995, 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 1995 Maarten Hilferink, Amsterdam, the Netherlands
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 37edcc5203bf2cbf44c6f524b2dd14d6
+BELONGS ya.make
+ License text:
+ // (C) Copyright Tobias Schwinger
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function_types/components.hpp [2:2]
+ boost/function_types/config/cc_names.hpp [2:2]
+ boost/function_types/config/compiler.hpp [2:2]
+ boost/function_types/config/config.hpp [2:2]
+ boost/function_types/detail/class_transform.hpp [2:2]
+ boost/function_types/detail/classifier.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity10_0.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity10_1.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity20_0.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity20_1.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity30_0.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity30_1.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity40_0.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity40_1.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity50_0.hpp [2:2]
+ boost/function_types/detail/classifier_impl/arity50_1.hpp [2:2]
+ boost/function_types/detail/classifier_impl/master.hpp [2:2]
+ boost/function_types/detail/components_as_mpl_sequence.hpp [2:2]
+ boost/function_types/detail/components_impl/arity10_0.hpp [2:2]
+ boost/function_types/detail/components_impl/arity10_1.hpp [2:2]
+ boost/function_types/detail/components_impl/arity20_0.hpp [2:2]
+ boost/function_types/detail/components_impl/arity20_1.hpp [2:2]
+ boost/function_types/detail/components_impl/arity30_0.hpp [2:2]
+ boost/function_types/detail/components_impl/arity30_1.hpp [2:2]
+ boost/function_types/detail/components_impl/arity40_0.hpp [2:2]
+ boost/function_types/detail/components_impl/arity40_1.hpp [2:2]
+ boost/function_types/detail/components_impl/arity50_0.hpp [2:2]
+ boost/function_types/detail/components_impl/arity50_1.hpp [2:2]
+ boost/function_types/detail/components_impl/master.hpp [2:2]
+ boost/function_types/detail/cv_traits.hpp [2:2]
+ boost/function_types/detail/encoding/aliases_def.hpp [2:2]
+ boost/function_types/detail/encoding/aliases_undef.hpp [2:2]
+ boost/function_types/detail/encoding/def.hpp [2:2]
+ boost/function_types/detail/encoding/undef.hpp [2:2]
+ boost/function_types/detail/pp_arity_loop.hpp [2:2]
+ boost/function_types/detail/pp_cc_loop/master.hpp [2:2]
+ boost/function_types/detail/pp_cc_loop/preprocessed.hpp [2:2]
+ boost/function_types/detail/pp_loop.hpp [2:2]
+ boost/function_types/detail/pp_retag_default_cc/master.hpp [2:2]
+ boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp [2:2]
+ boost/function_types/detail/pp_tags/cc_tag.hpp [2:2]
+ boost/function_types/detail/pp_tags/master.hpp [2:2]
+ boost/function_types/detail/pp_tags/preprocessed.hpp [2:2]
+ boost/function_types/detail/pp_variate_loop/master.hpp [2:2]
+ boost/function_types/detail/pp_variate_loop/preprocessed.hpp [2:2]
+ boost/function_types/detail/retag_default_cc.hpp [2:2]
+ boost/function_types/detail/synthesize.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity10_0.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity10_1.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity20_0.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity20_1.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity30_0.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity30_1.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity40_0.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity40_1.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity50_0.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/arity50_1.hpp [2:2]
+ boost/function_types/detail/synthesize_impl/master.hpp [2:2]
+ boost/function_types/detail/to_sequence.hpp [2:2]
+ boost/function_types/function_arity.hpp [2:2]
+ boost/function_types/function_pointer.hpp [2:2]
+ boost/function_types/function_reference.hpp [2:2]
+ boost/function_types/function_type.hpp [2:2]
+ boost/function_types/is_callable_builtin.hpp [2:2]
+ boost/function_types/is_function.hpp [2:2]
+ boost/function_types/is_function_pointer.hpp [2:2]
+ boost/function_types/is_function_reference.hpp [2:2]
+ boost/function_types/is_member_function_pointer.hpp [2:2]
+ boost/function_types/is_member_object_pointer.hpp [2:2]
+ boost/function_types/is_member_pointer.hpp [2:2]
+ boost/function_types/is_nonmember_callable_builtin.hpp [2:2]
+ boost/function_types/member_function_pointer.hpp [2:2]
+ boost/function_types/member_object_pointer.hpp [2:2]
+ boost/function_types/parameter_types.hpp [2:2]
+ boost/function_types/property_tags.hpp [2:2]
+ boost/function_types/result_type.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 37ef22160482a625f43027681621c621
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2003-2005
+ * John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex/v4/error_type.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3855da3f22dc989b1adc747b4e23a949
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ Copyright (c) 2003 Gustavo Guerra
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/debug/debug_node.hpp [2:5]
+ boost/spirit/home/classic/meta/impl/parser_traits.ipp [2:5]
+ boost/spirit/home/classic/meta/parser_traits.hpp [2:5]
+ boost/spirit/home/classic/phoenix/tuple_helpers.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3861126765089225a9c2f2aab3696667
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2011 Joerg Walter, Mathias Koch, David Bellot
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/blas.hpp [1:1]
+ boost/numeric/ublas/exception.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 386422ed6dcb6b59b9ac548256e71381
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/platform/macos.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 38b8d9f6332e5a688b471b92d217a79b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/adl_move_swap.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/adl_move_swap.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 38c7b8f60b51f597ba97b03f9715b4b9
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Peter Dimov
+ // Copyright 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/demangle.hpp [6:7]
+ boost/core/is_same.hpp [12:12]
+ boost/core/lightweight_test_trait.hpp [14:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 38d3ce2209a395c064c29e47dccce34b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/select_type.hpp at line 3, boost/type.hpp at line 3
+ License text:
+ // (C) Copyright David Abrahams 2001.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/select_type.hpp [1:3]
+ boost/type.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 39059a8eede404b2a251f7d030029784
+BELONGS ya.make
+ License text:
+ // (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+ // Copyright (c) 2001, 2002, 2012 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/shared_array.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 390adb9c382fea4ca3f3a24a08bc412b
+BELONGS ya.make
+ License text:
+ * Copyright Nick Thompson, 2018
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/quadrature/naive_monte_carlo.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 390b952a13e57b2a99a6fa849a00c0e7
+BELONGS ya.make
+ License text:
+ Copyright 2017 Glen Joseph Fernandes
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/make_void.hpp [2:2]
+ boost/type_traits/nonesuch.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3959375d23207bb679997771052de5cc
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2007-8.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/concepts/real_type_concept.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 39b86d305df61c4b16df80122d10f3af
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2018 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/bitwise_cast.hpp [6:8]
+ boost/atomic/detail/caps_gcc_x86.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86_dcas-linux.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86_dcas-osx.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86_dcas.hpp [6:8]
+ boost/atomic/detail/ops_msvc_arm.hpp [6:8]
+ boost/atomic/detail/ops_msvc_common.hpp [6:8]
+ boost/atomic/detail/ops_msvc_x86.hpp [6:8]
+ boost/atomic/detail/ops_windows.hpp [6:8]
+ boost/atomic/detail/storage_type.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 39ee4bcf7a682976231db184fa7886d3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/unordered/detail/fwd.hpp at line 4
+ License text:
+ // Copyright (C) 2008-2016 Daniel James.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/unordered/detail/fwd.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 39f186083461682d70be78cbf83e9b85
+BELONGS ya.make
+ License text:
+ // (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+ // Howard Hinnant and John Maddock 2000.
+ // (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_const.hpp [2:4]
+ boost/type_traits/is_lvalue_reference.hpp [2:4]
+ boost/type_traits/is_member_pointer.hpp [2:4]
+ boost/type_traits/is_pointer.hpp [2:4]
+ boost/type_traits/is_reference.hpp [2:4]
+ boost/type_traits/is_same.hpp [2:4]
+ boost/type_traits/is_volatile.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3a101448ab7ea5bb06f1fbcf1a910852
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/array/detail/get_data.hpp at line 6, boost/preprocessor/array/push_back.hpp at line 6, boost/preprocessor/array/push_front.hpp at line 6, boost/preprocessor/facilities/detail/is_empty.hpp at line 6, boost/preprocessor/facilities/is_empty.hpp at line 6, boost/preprocessor/facilities/is_empty_variadic.hpp at line 6, boost/preprocessor/punctuation/detail/is_begin_parens.hpp at line 6, boost/preprocessor/punctuation/is_begin_parens.hpp at line 6, boost/preprocessor/punctuation/remove_parens.hpp at line 6, boost/preprocessor/tuple/detail/is_single_return.hpp at line 6, boost/preprocessor/variadic/detail/is_single_return.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/array/detail/get_data.hpp [3:5]
+ boost/preprocessor/array/push_back.hpp [3:6]
+ boost/preprocessor/array/push_front.hpp [3:6]
+ boost/preprocessor/facilities/detail/is_empty.hpp [3:5]
+ boost/preprocessor/facilities/is_empty.hpp [3:6]
+ boost/preprocessor/facilities/is_empty_variadic.hpp [3:5]
+ boost/preprocessor/punctuation/detail/is_begin_parens.hpp [3:5]
+ boost/preprocessor/punctuation/is_begin_parens.hpp [3:5]
+ boost/preprocessor/punctuation/remove_parens.hpp [3:5]
+ boost/preprocessor/tuple/detail/is_single_return.hpp [3:5]
+ boost/preprocessor/variadic/detail/is_single_return.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3a820fb86d894dac775a728586b31286
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005 Douglas Gregor.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/detail/computation_tree.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3ab6090aa97ef6371f6b59c9148c4ea1
+BELONGS ya.make
+ License text:
+ // Copyright (c) David Abrahams 2001.
+ // Copyright (c) Jeremy Siek 2001-2003.
+ // Copyright (c) Thomas Witt 2002.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/new_iterator_tests.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3abe023357779f6d901fca15ed3388fa
+BELONGS ya.make
+ License text:
+ Copyright (c) 2011 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/call.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result.hpp [2:2]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/new.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen.hpp [2:2]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic.hpp [2:2]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda.hpp [2:2]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back.hpp [2:2]
+ boost/phoenix/statement/detail/preprocessed/switch.hpp [2:2]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval.hpp [2:2]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression.hpp [2:2]
+ boost/phoenix/support/preprocessed/vector.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3acc7446eae81a14ef8a0e37e54474da
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003-2008 Matthias Christian Schabel
+ // Copyright (C) 2007-2010 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/units/io.hpp [4:5]
+ boost/units/physical_dimensions.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3ae48219349a0c68f53a461b05d1ea28
+BELONGS ya.make
+ License text:
+ Copyright 2010-2014 Mario Mulansky
+ Copyright 2010-2011 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/thrust/thrust_resize.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3b16b7cedf0ca0a50b791ba8334e2d98
+BELONGS ya.make
+ License text:
+ // (C) Copyright Olaf Krzikalla 2004-2006.
+ // (C) Copyright Ion Gaztanaga 2006-2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/circular_list_algorithms.hpp [3:4]
+ boost/intrusive/circular_slist_algorithms.hpp [3:4]
+ boost/intrusive/detail/list_iterator.hpp [3:4]
+ boost/intrusive/detail/list_node.hpp [3:4]
+ boost/intrusive/detail/rbtree_node.hpp [3:4]
+ boost/intrusive/detail/slist_iterator.hpp [3:4]
+ boost/intrusive/detail/slist_node.hpp [3:4]
+ boost/intrusive/linear_slist_algorithms.hpp [3:4]
+ boost/intrusive/list.hpp [3:4]
+ boost/intrusive/list_hook.hpp [3:4]
+ boost/intrusive/rbtree_algorithms.hpp [3:4]
+ boost/intrusive/set.hpp [3:4]
+ boost/intrusive/set_hook.hpp [3:4]
+ boost/intrusive/slist.hpp [3:4]
+ boost/intrusive/slist_hook.hpp [3:4]
+ boost/intrusive/unordered_set.hpp [3:4]
+ boost/intrusive/unordered_set_hook.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3b219154e3b48fec8d2bee428f19860e
+BELONGS ya.make
+ License text:
+ * Copyright 2003 Guillaume Melquiond, Sylvain Pion
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval/detail/division.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3b6e3be8569ddd3a2e7d43c3cdc4ea63
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/copied.hpp at line 5, boost/range/adaptor/tokenized.hpp at line 5
+ License text:
+ // Copyright Thorsten Ottosen, Neil Groves 2006. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/adaptor/copied.hpp [3:5]
+ boost/range/adaptor/tokenized.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3b9900d7ac5a2e20a369cd2322bd3e92
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2015-2016 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/detail/optional_reference_spec.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3b9a2b448e2da4108191c7c48d83f81b
+BELONGS ya.make
+ License text:
+ // Copyright 2013 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/atomic_count_nt.hpp [11:11]
+ boost/smart_ptr/detail/atomic_count_std_atomic.hpp [9:9]
+ boost/smart_ptr/detail/sp_nullptr_t.hpp [12:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3be0bda1f8b025b84dcb5e929ac6425e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2016 Barrett Adair
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/callable_traits/detail/unguarded/function.hpp [2:2]
+ boost/callable_traits/detail/unguarded/function_2.hpp [2:2]
+ boost/callable_traits/detail/unguarded/function_3.hpp [2:2]
+ boost/callable_traits/detail/unguarded/function_ptr_2.hpp [2:2]
+ boost/callable_traits/detail/unguarded/function_ptr_varargs_2.hpp [2:2]
+ boost/callable_traits/detail/unguarded/pmf_2.hpp [2:2]
+ boost/callable_traits/detail/unguarded/pmf_3.hpp [2:2]
+ boost/callable_traits/detail/unguarded/pmf_4.hpp [2:2]
+ boost/callable_traits/detail/unguarded/pmf_varargs.hpp [2:2]
+ boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp [2:2]
+ boost/callable_traits/detail/unguarded/pmf_varargs_3.hpp [2:2]
+ boost/callable_traits/detail/unguarded/pmf_varargs_4.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3c3b5a72df0903cb1e8ee771593e69b5
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility/value_init.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3c6022a5a6a98ab812ff2265a476c832
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/borland.hpp [1:5]
+ boost/config/compiler/codegear.hpp [1:5]
+ boost/config/compiler/compaq_cxx.hpp [1:3]
+ boost/config/compiler/gcc.hpp [1:9]
+ boost/config/compiler/hp_acc.hpp [1:8]
+ boost/config/compiler/vacpp.hpp [1:7]
+ boost/config/compiler/visualc.hpp [1:8]
+ boost/config/detail/posix_features.hpp [1:3]
+ boost/config/detail/select_compiler_config.hpp [3:5]
+ boost/config/detail/select_stdlib_config.hpp [3:6]
+ boost/config/platform/bsd.hpp [1:5]
+ boost/config/platform/cygwin.hpp [1:3]
+ boost/config/platform/hpux.hpp [1:7]
+ boost/config/platform/irix.hpp [1:4]
+ boost/config/platform/linux.hpp [1:4]
+ boost/config/platform/macos.hpp [1:5]
+ boost/config/platform/solaris.hpp [1:4]
+ boost/config/platform/symbian.hpp [1:5]
+ boost/config/platform/win32.hpp [1:6]
+ boost/config/stdlib/dinkumware.hpp [1:7]
+ boost/config/stdlib/roguewave.hpp [1:6]
+ boost/config/stdlib/sgi.hpp [1:5]
+ boost/filesystem/detail/macro_value.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3c61b80726a42fa5277b95ae5fe62fe2
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2011 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/karma.hpp [1:1]
+ boost/spirit/home/karma/action.hpp [1:1]
+ boost/spirit/home/karma/action/action.hpp [1:1]
+ boost/spirit/home/karma/auto.hpp [1:1]
+ boost/spirit/home/karma/auto/auto.hpp [1:1]
+ boost/spirit/home/karma/auto/create_generator.hpp [1:1]
+ boost/spirit/home/karma/auto/meta_create.hpp [1:1]
+ boost/spirit/home/karma/auxiliary.hpp [1:1]
+ boost/spirit/home/karma/auxiliary/attr_cast.hpp [1:1]
+ boost/spirit/home/karma/auxiliary/eol.hpp [1:1]
+ boost/spirit/home/karma/auxiliary/eps.hpp [1:1]
+ boost/spirit/home/karma/auxiliary/lazy.hpp [1:2]
+ boost/spirit/home/karma/binary.hpp [1:1]
+ boost/spirit/home/karma/binary/binary.hpp [1:1]
+ boost/spirit/home/karma/binary/padding.hpp [1:1]
+ boost/spirit/home/karma/char.hpp [1:1]
+ boost/spirit/home/karma/char/char.hpp [1:2]
+ boost/spirit/home/karma/char/char_class.hpp [1:1]
+ boost/spirit/home/karma/char/char_generator.hpp [1:2]
+ boost/spirit/home/karma/delimit_flag.hpp [1:1]
+ boost/spirit/home/karma/delimit_out.hpp [1:1]
+ boost/spirit/home/karma/detail/alternative_function.hpp [1:2]
+ boost/spirit/home/karma/detail/as.hpp [1:1]
+ boost/spirit/home/karma/detail/attributes.hpp [1:2]
+ boost/spirit/home/karma/detail/default_width.hpp [1:1]
+ boost/spirit/home/karma/detail/enable_lit.hpp [1:1]
+ boost/spirit/home/karma/detail/extract_from.hpp [1:1]
+ boost/spirit/home/karma/detail/fail_function.hpp [1:2]
+ boost/spirit/home/karma/detail/generate.hpp [1:1]
+ boost/spirit/home/karma/detail/generate_auto.hpp [1:1]
+ boost/spirit/home/karma/detail/generate_to.hpp [1:1]
+ boost/spirit/home/karma/detail/get_casetag.hpp [1:2]
+ boost/spirit/home/karma/detail/get_stricttag.hpp [1:1]
+ boost/spirit/home/karma/detail/indirect_iterator.hpp [1:1]
+ boost/spirit/home/karma/detail/output_iterator.hpp [1:1]
+ boost/spirit/home/karma/detail/pass_container.hpp [2:3]
+ boost/spirit/home/karma/detail/string_compare.hpp [1:1]
+ boost/spirit/home/karma/detail/string_generate.hpp [1:1]
+ boost/spirit/home/karma/detail/unused_delimiter.hpp [1:1]
+ boost/spirit/home/karma/directive.hpp [1:1]
+ boost/spirit/home/karma/directive/as.hpp [1:2]
+ boost/spirit/home/karma/directive/buffer.hpp [1:1]
+ boost/spirit/home/karma/directive/center_alignment.hpp [1:1]
+ boost/spirit/home/karma/directive/columns.hpp [1:1]
+ boost/spirit/home/karma/directive/delimit.hpp [1:1]
+ boost/spirit/home/karma/directive/duplicate.hpp [1:1]
+ boost/spirit/home/karma/directive/encoding.hpp [1:2]
+ boost/spirit/home/karma/directive/left_alignment.hpp [1:1]
+ boost/spirit/home/karma/directive/maxwidth.hpp [1:1]
+ boost/spirit/home/karma/directive/no_delimit.hpp [1:1]
+ boost/spirit/home/karma/directive/omit.hpp [1:1]
+ boost/spirit/home/karma/directive/repeat.hpp [1:2]
+ boost/spirit/home/karma/directive/right_alignment.hpp [1:1]
+ boost/spirit/home/karma/directive/strict_relaxed.hpp [1:1]
+ boost/spirit/home/karma/directive/upper_lower_case.hpp [1:2]
+ boost/spirit/home/karma/directive/verbatim.hpp [1:1]
+ boost/spirit/home/karma/domain.hpp [1:2]
+ boost/spirit/home/karma/format.hpp [1:1]
+ boost/spirit/home/karma/format_auto.hpp [1:1]
+ boost/spirit/home/karma/generate.hpp [1:1]
+ boost/spirit/home/karma/generate_attr.hpp [1:1]
+ boost/spirit/home/karma/generator.hpp [1:2]
+ boost/spirit/home/karma/meta_compiler.hpp [1:2]
+ boost/spirit/home/karma/nonterminal.hpp [1:1]
+ boost/spirit/home/karma/nonterminal/debug_handler.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/debug_handler_state.hpp [1:1]
+ boost/spirit/home/karma/nonterminal/detail/fcall.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/detail/parameterized.hpp [1:3]
+ boost/spirit/home/karma/nonterminal/grammar.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp [1:1]
+ boost/spirit/home/karma/nonterminal/rule.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/simple_trace.hpp [1:2]
+ boost/spirit/home/karma/numeric.hpp [1:1]
+ boost/spirit/home/karma/numeric/bool.hpp [1:1]
+ boost/spirit/home/karma/numeric/bool_policies.hpp [1:1]
+ boost/spirit/home/karma/numeric/detail/bool_utils.hpp [1:1]
+ boost/spirit/home/karma/numeric/detail/numeric_utils.hpp [1:1]
+ boost/spirit/home/karma/numeric/detail/real_utils.hpp [1:1]
+ boost/spirit/home/karma/numeric/real.hpp [1:1]
+ boost/spirit/home/karma/numeric/real_policies.hpp [1:1]
+ boost/spirit/home/karma/numeric/uint.hpp [1:1]
+ boost/spirit/home/karma/operator.hpp [1:1]
+ boost/spirit/home/karma/operator/alternative.hpp [1:2]
+ boost/spirit/home/karma/operator/and_predicate.hpp [1:2]
+ boost/spirit/home/karma/operator/kleene.hpp [1:2]
+ boost/spirit/home/karma/operator/list.hpp [1:2]
+ boost/spirit/home/karma/operator/not_predicate.hpp [1:2]
+ boost/spirit/home/karma/operator/optional.hpp [1:2]
+ boost/spirit/home/karma/operator/plus.hpp [1:2]
+ boost/spirit/home/karma/operator/sequence.hpp [1:2]
+ boost/spirit/home/karma/phoenix_attributes.hpp [1:1]
+ boost/spirit/home/karma/reference.hpp [1:2]
+ boost/spirit/home/karma/stream.hpp [1:1]
+ boost/spirit/home/karma/stream/detail/format_manip.hpp [1:1]
+ boost/spirit/home/karma/stream/detail/format_manip_auto.hpp [1:1]
+ boost/spirit/home/karma/stream/detail/iterator_sink.hpp [1:1]
+ boost/spirit/home/karma/stream/format_manip.hpp [1:1]
+ boost/spirit/home/karma/stream/format_manip_attr.hpp [1:1]
+ boost/spirit/home/karma/stream/ostream_iterator.hpp [1:1]
+ boost/spirit/home/karma/stream/stream.hpp [1:1]
+ boost/spirit/home/karma/string.hpp [1:1]
+ boost/spirit/home/karma/string/lit.hpp [1:2]
+ boost/spirit/home/karma/string/symbols.hpp [1:1]
+ boost/spirit/home/karma/what.hpp [1:1]
+ boost/spirit/home/lex.hpp [1:1]
+ boost/spirit/home/lex/argument.hpp [1:4]
+ boost/spirit/home/lex/argument_phoenix.hpp [1:2]
+ boost/spirit/home/lex/detail/sequence_function.hpp [1:1]
+ boost/spirit/home/lex/domain.hpp [1:2]
+ boost/spirit/home/lex/lexer.hpp [1:1]
+ boost/spirit/home/lex/lexer/action.hpp [1:1]
+ boost/spirit/home/lex/lexer/char_token_def.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexer.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/functor.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/functor_data.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/iterator.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/lexer.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/position_token.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/static_functor_data.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/static_version.hpp [1:1]
+ boost/spirit/home/lex/lexer/lexertl/token.hpp [1:1]
+ boost/spirit/home/lex/lexer/pass_flags.hpp [1:1]
+ boost/spirit/home/lex/lexer/sequence.hpp [1:1]
+ boost/spirit/home/lex/lexer/string_token_def.hpp [1:1]
+ boost/spirit/home/lex/lexer/support_functions.hpp [1:1]
+ boost/spirit/home/lex/lexer/support_functions_expression.hpp [1:2]
+ boost/spirit/home/lex/lexer/terminals.hpp [1:1]
+ boost/spirit/home/lex/lexer/token_def.hpp [1:1]
+ boost/spirit/home/lex/lexer_lexertl.hpp [1:1]
+ boost/spirit/home/lex/lexer_static_lexertl.hpp [1:1]
+ boost/spirit/home/lex/lexer_type.hpp [1:2]
+ boost/spirit/home/lex/meta_compiler.hpp [1:2]
+ boost/spirit/home/lex/qi.hpp [1:1]
+ boost/spirit/home/lex/qi/in_state.hpp [1:1]
+ boost/spirit/home/lex/qi/plain_raw_token.hpp [1:1]
+ boost/spirit/home/lex/qi/plain_token.hpp [1:1]
+ boost/spirit/home/lex/qi/plain_tokenid.hpp [1:1]
+ boost/spirit/home/lex/qi/plain_tokenid_mask.hpp [1:1]
+ boost/spirit/home/lex/qi/state_switcher.hpp [1:2]
+ boost/spirit/home/lex/reference.hpp [1:2]
+ boost/spirit/home/lex/tokenize_and_parse.hpp [1:1]
+ boost/spirit/home/lex/tokenize_and_parse_attr.hpp [1:3]
+ boost/spirit/home/qi/auto.hpp [2:2]
+ boost/spirit/home/qi/auto/auto.hpp [1:1]
+ boost/spirit/home/qi/auto/create_parser.hpp [1:1]
+ boost/spirit/home/qi/auto/meta_create.hpp [1:1]
+ boost/spirit/home/qi/auxiliary.hpp [2:3]
+ boost/spirit/home/qi/auxiliary/attr.hpp [2:3]
+ boost/spirit/home/qi/auxiliary/attr_cast.hpp [1:1]
+ boost/spirit/home/qi/auxiliary/eoi.hpp [2:3]
+ boost/spirit/home/qi/auxiliary/eol.hpp [2:3]
+ boost/spirit/home/qi/binary.hpp [2:2]
+ boost/spirit/home/qi/binary/binary.hpp [2:3]
+ boost/spirit/home/qi/char/char.hpp [2:4]
+ boost/spirit/home/qi/detail/alternative_function.hpp [2:2]
+ boost/spirit/home/qi/detail/attributes.hpp [1:2]
+ boost/spirit/home/qi/detail/enable_lit.hpp [1:1]
+ boost/spirit/home/qi/detail/parse.hpp [2:2]
+ boost/spirit/home/qi/detail/parse_auto.hpp [2:2]
+ boost/spirit/home/qi/detail/pass_container.hpp [2:3]
+ boost/spirit/home/qi/detail/unused_skipper.hpp [1:1]
+ boost/spirit/home/qi/directive/as.hpp [2:4]
+ boost/spirit/home/qi/directive/matches.hpp [2:2]
+ boost/spirit/home/qi/directive/no_skip.hpp [2:3]
+ boost/spirit/home/qi/directive/repeat.hpp [2:3]
+ boost/spirit/home/qi/match.hpp [1:1]
+ boost/spirit/home/qi/match_auto.hpp [1:1]
+ boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp [1:1]
+ boost/spirit/home/qi/nonterminal/simple_trace.hpp [2:3]
+ boost/spirit/home/qi/numeric/bool.hpp [2:3]
+ boost/spirit/home/qi/numeric/bool_policies.hpp [2:2]
+ boost/spirit/home/qi/numeric/detail/numeric_utils.hpp [2:6]
+ boost/spirit/home/qi/numeric/real_policies.hpp [2:3]
+ boost/spirit/home/qi/operator/alternative.hpp [2:3]
+ boost/spirit/home/qi/operator/expect.hpp [2:3]
+ boost/spirit/home/qi/operator/kleene.hpp [2:3]
+ boost/spirit/home/qi/operator/list.hpp [2:3]
+ boost/spirit/home/qi/operator/optional.hpp [2:3]
+ boost/spirit/home/qi/operator/plus.hpp [2:3]
+ boost/spirit/home/qi/operator/sequence.hpp [2:3]
+ boost/spirit/home/qi/operator/sequence_base.hpp [2:3]
+ boost/spirit/home/qi/parse.hpp [2:3]
+ boost/spirit/home/qi/parse_attr.hpp [1:3]
+ boost/spirit/home/qi/skip_flag.hpp [2:2]
+ boost/spirit/home/qi/stream.hpp [2:2]
+ boost/spirit/home/qi/stream/detail/iterator_source.hpp [2:2]
+ boost/spirit/home/qi/stream/detail/match_manip.hpp [2:2]
+ boost/spirit/home/qi/stream/detail/match_manip_auto.hpp [2:2]
+ boost/spirit/home/qi/stream/match_manip.hpp [2:3]
+ boost/spirit/home/qi/stream/match_manip_attr.hpp [2:3]
+ boost/spirit/home/qi/stream/stream.hpp [2:2]
+ boost/spirit/home/qi/string/lit.hpp [2:4]
+ boost/spirit/home/support/adapt_adt_attributes.hpp [1:1]
+ boost/spirit/home/support/algorithm/any_if.hpp [2:3]
+ boost/spirit/home/support/algorithm/any_if_ns.hpp [2:3]
+ boost/spirit/home/support/algorithm/any_if_ns_so.hpp [2:3]
+ boost/spirit/home/support/argument.hpp [2:4]
+ boost/spirit/home/support/argument_expression.hpp [2:4]
+ boost/spirit/home/support/attributes_fwd.hpp [2:4]
+ boost/spirit/home/support/auto/meta_create.hpp [1:1]
+ boost/spirit/home/support/auxiliary/attr_cast.hpp [1:1]
+ boost/spirit/home/support/char_class.hpp [2:3]
+ boost/spirit/home/support/char_encoding/ascii.hpp [2:3]
+ boost/spirit/home/support/char_encoding/iso8859_1.hpp [2:3]
+ boost/spirit/home/support/char_encoding/standard.hpp [2:3]
+ boost/spirit/home/support/char_encoding/standard_wide.hpp [2:3]
+ boost/spirit/home/support/char_encoding/unicode.hpp [2:3]
+ boost/spirit/home/support/context.hpp [2:4]
+ boost/spirit/home/support/detail/get_encoding.hpp [1:2]
+ boost/spirit/home/support/detail/is_spirit_tag.hpp [2:2]
+ boost/spirit/home/support/handles_container.hpp [2:2]
+ boost/spirit/home/support/has_semantic_action.hpp [2:2]
+ boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/first_owner_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/functor_input_policy.hpp [1:1]
+ boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/istream_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/lex_input_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/multi_pass.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/no_check_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp [1:1]
+ boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/istream_iterator.hpp [1:1]
+ boost/spirit/home/support/iterators/ostream_iterator.hpp [1:1]
+ boost/spirit/home/support/limits.hpp [1:1]
+ boost/spirit/home/support/multi_pass_wrapper.hpp [1:1]
+ boost/spirit/home/support/nonterminal/extract_param.hpp [2:4]
+ boost/spirit/home/support/nonterminal/locals.hpp [2:3]
+ boost/spirit/home/support/numeric_traits.hpp [1:1]
+ boost/spirit/home/support/string_traits.hpp [2:4]
+ boost/spirit/home/support/terminal.hpp [2:4]
+ boost/spirit/home/support/terminal_expression.hpp [2:4]
+ boost/spirit/home/support/unused.hpp [2:3]
+ boost/spirit/home/support/utree/detail/utree_detail1.hpp [2:4]
+ boost/spirit/home/support/utree/detail/utree_detail2.hpp [2:4]
+ boost/spirit/home/support/utree/operators.hpp [2:4]
+ boost/spirit/home/support/utree/utree.hpp [2:4]
+ boost/spirit/home/support/utree/utree_traits.hpp [2:4]
+ boost/spirit/home/support/utree/utree_traits_fwd.hpp [2:2]
+ boost/spirit/home/x3/auxiliary.hpp [2:3]
+ boost/spirit/home/x3/auxiliary/attr.hpp [2:4]
+ boost/spirit/home/x3/auxiliary/eoi.hpp [2:3]
+ boost/spirit/home/x3/auxiliary/eol.hpp [2:3]
+ boost/spirit/home/x3/binary.hpp [2:2]
+ boost/spirit/home/x3/binary/binary.hpp [2:3]
+ boost/spirit/home/x3/char/detail/cast_char.hpp [2:3]
+ boost/spirit/home/x3/directive/matches.hpp [2:3]
+ boost/spirit/home/x3/directive/no_skip.hpp [2:4]
+ boost/spirit/home/x3/directive/repeat.hpp [2:4]
+ boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp [2:3]
+ boost/spirit/home/x3/nonterminal/simple_trace.hpp [2:3]
+ boost/spirit/home/x3/numeric/real_policies.hpp [2:3]
+ boost/spirit/home/x3/operator/kleene.hpp [2:3]
+ boost/spirit/home/x3/operator/list.hpp [2:3]
+ boost/spirit/home/x3/operator/optional.hpp [2:3]
+ boost/spirit/home/x3/operator/plus.hpp [2:3]
+ boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp [2:6]
+ boost/spirit/home/x3/support/traits/handles_container.hpp [2:3]
+ boost/spirit/home/x3/support/traits/numeric_traits.hpp [2:2]
+ boost/spirit/home/x3/support/traits/print_attribute.hpp [2:3]
+ boost/spirit/home/x3/support/traits/print_token.hpp [2:3]
+ boost/spirit/home/x3/support/traits/string_traits.hpp [2:4]
+ boost/spirit/home/x3/support/unused.hpp [2:3]
+ boost/spirit/repository/home/karma.hpp [1:2]
+ boost/spirit/repository/home/karma/directive.hpp [1:2]
+ boost/spirit/repository/home/karma/directive/confix.hpp [1:1]
+ boost/spirit/repository/home/karma/nonterminal.hpp [1:3]
+ boost/spirit/repository/home/qi.hpp [1:2]
+ boost/spirit/repository/home/qi/directive.hpp [1:2]
+ boost/spirit/repository/home/qi/directive/distinct.hpp [1:3]
+ boost/spirit/repository/home/qi/nonterminal.hpp [1:3]
+ boost/spirit/repository/home/qi/operator.hpp [1:3]
+ boost/spirit/repository/home/qi/primitive.hpp [1:2]
+ boost/spirit/repository/home/qi/primitive/flush_multi_pass.hpp [1:1]
+ boost/spirit/repository/home/qi/primitive/iter_pos.hpp [1:1]
+ boost/spirit/repository/home/support/confix.hpp [1:1]
+ boost/spirit/repository/home/support/distinct.hpp [1:1]
+ boost/spirit/repository/home/support/flush_multi_pass.hpp [1:1]
+ boost/spirit/repository/include/karma_nonterminal.hpp [2:5]
+ boost/spirit/repository/include/karma_subrule.hpp [2:5]
+ boost/spirit/repository/include/qi_keywords.hpp [2:5]
+ boost/spirit/repository/include/qi_kwd.hpp [2:5]
+ boost/spirit/repository/include/qi_kwd.hpp [21:24]
+ boost/spirit/repository/include/qi_subrule.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3c777ac4a9b304db66b4f876282e72d9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+ // Copyright (c) 2011-2013 Andrew Hundt.
+ // Copyright (c) 2013-2014 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/static_vector.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3c95823257cd1a88177b78d8469c4f71
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/mpi/cartesian_communicator.hpp at line 3, boost/mpi/detail/antiques.hpp at line 3, boost/mpi/detail/offsets.hpp at line 3
+ License text:
+ // Copyright Alain Miniussi 2014.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/cartesian_communicator.hpp [1:3]
+ boost/mpi/detail/antiques.hpp [1:3]
+ boost/mpi/detail/offsets.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3ca4379da2fa49ccbaaf67782ff8bd4f
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2008 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/bind_mf2_cc.hpp [6:7]
+ boost/detail/lightweight_thread.hpp [12:13]
+ boost/interprocess/detail/os_thread_functions.hpp [15:16]
+ boost/smart_ptr/detail/spinlock.hpp [13:13]
+ boost/smart_ptr/detail/spinlock_nt.hpp [11:11]
+ boost/smart_ptr/detail/spinlock_pool.hpp [13:13]
+ boost/smart_ptr/detail/spinlock_pt.hpp [11:11]
+ boost/smart_ptr/detail/spinlock_sync.hpp [11:11]
+ boost/smart_ptr/detail/spinlock_w32.hpp [11:11]
+ boost/smart_ptr/detail/yield_k.hpp [13:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3cd360abef8724897bbe8fc29b446350
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/platform/windows_server.h at line 4, boost/predef/platform/windows_system.h at line 4, boost/predef/platform/windows_uwp.h at line 4
+ License text:
+ Copyright James E. King III, 2017
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/platform/windows_server.h [2:4]
+ boost/predef/platform/windows_system.h [2:4]
+ boost/predef/platform/windows_uwp.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3d5351e8355a6ae64e654a6990c80b75
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2010 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/caps_gcc_sparc.hpp [6:8]
+ boost/atomic/detail/ops_gcc_sparc.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3d5daf332c9f492e493162df1943f759
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/tti/detail/dcomp_mem_fun.hpp at line 4, boost/tti/detail/dmem_data.hpp at line 4, boost/tti/detail/dmem_fun.hpp at line 4, boost/tti/detail/dmem_type.hpp at line 4, boost/tti/detail/dptmf.hpp at line 4, boost/tti/detail/dstatic_mem_data.hpp at line 4, boost/tti/detail/dstatic_mem_fun.hpp at line 4, boost/tti/detail/dtclass.hpp at line 4, boost/tti/detail/dtemplate.hpp at line 4, boost/tti/detail/dtemplate_params.hpp at line 4, boost/tti/detail/dtfunction.hpp at line 4, boost/tti/detail/dtype.hpp at line 4, boost/tti/detail/dvm_template_params.hpp at line 4, boost/tti/has_member_data.hpp at line 4, boost/tti/has_member_function.hpp at line 4, boost/tti/has_static_member_data.hpp at line 4, boost/tti/has_static_member_function.hpp at line 4, boost/tti/has_type.hpp at line 4, boost/tti/member_type.hpp at line 4
+ License text:
+ // (C) Copyright Edward Diener 2011,2012,2013
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/tti/detail/dcomp_mem_fun.hpp [2:4]
+ boost/tti/detail/dmem_data.hpp [2:4]
+ boost/tti/detail/dmem_fun.hpp [2:4]
+ boost/tti/detail/dmem_type.hpp [2:4]
+ boost/tti/detail/dptmf.hpp [2:4]
+ boost/tti/detail/dstatic_mem_data.hpp [2:4]
+ boost/tti/detail/dstatic_mem_fun.hpp [2:4]
+ boost/tti/detail/dtclass.hpp [2:4]
+ boost/tti/detail/dtemplate.hpp [2:4]
+ boost/tti/detail/dtemplate_params.hpp [2:4]
+ boost/tti/detail/dtfunction.hpp [2:4]
+ boost/tti/detail/dtype.hpp [2:4]
+ boost/tti/detail/dvm_template_params.hpp [2:4]
+ boost/tti/has_member_data.hpp [2:4]
+ boost/tti/has_member_function.hpp [2:4]
+ boost/tti/has_static_member_data.hpp [2:4]
+ boost/tti/has_static_member_function.hpp [2:4]
+ boost/tti/has_type.hpp [2:4]
+ boost/tti/member_type.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3d663bf6c460716f91893dd36efd47a3
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+ // Copyright (c) 2011-2013 Andrew Hundt.
+ // Copyright (c) 2013-2014 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/static_vector.hpp [3:5]
+ boost/geometry/index/detail/varray.hpp [3:4]
+ boost/geometry/index/detail/varray_detail.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3daf1cb1dc9e23adce33a58786a1f0f4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container_hash/detail/float_functions.hpp at line 4, boost/container_hash/detail/limits.hpp at line 4, boost/container_hash/extensions.hpp at line 4, boost/container_hash/hash_fwd.hpp at line 4, boost/functional/hash.hpp at line 4, boost/functional/hash/hash.hpp at line 4, boost/functional/hash/hash_fwd.hpp at line 4, boost/functional/hash_fwd.hpp at line 4
+ License text:
+ // Copyright 2005-2009 Daniel James.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container_hash/detail/float_functions.hpp [2:4]
+ boost/container_hash/detail/limits.hpp [2:4]
+ boost/container_hash/extensions.hpp [2:4]
+ boost/container_hash/hash_fwd.hpp [2:4]
+ boost/functional/hash.hpp [2:4]
+ boost/functional/hash/hash.hpp [2:4]
+ boost/functional/hash/hash_fwd.hpp [2:4]
+ boost/functional/hash_fwd.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3dc5f8196ad6953215b74b8ff501e3d1
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014-2017 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/strategies/agnostic/point_in_point.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3dd399fb0e33c0a28d7e33bf73823cd3
+BELONGS ya.make
+ License text:
+ // Copyright 2005 Daniel Wallin.
+ // Copyright 2005 Joel de Guzman.
+ // Copyright 2005 Dan Marsden.
+ // Copyright 2008 Hartmut Kaiser.
+ // Copyright 2015 John Fletcher.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl/algorithm/querying.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3e0c380c062104dfdc18c3bf4dc03287
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2010 Eric Niebler
+ Copyright (c) 2014-2015 John Fletcher
+ Copyright (c) 2016 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/config.hpp [2:5]
+ boost/phoenix/core/actor.hpp [2:5]
+ boost/phoenix/core/argument.hpp [2:4]
+ boost/phoenix/core/arity.hpp [2:3]
+ boost/phoenix/core/detail/argument.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/expression.hpp [18:20]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_10.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_20.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_30.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_40.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_50.hpp [2:4]
+ boost/phoenix/core/domain.hpp [2:3]
+ boost/phoenix/core/is_nullary.hpp [2:4]
+ boost/phoenix/core/meta_grammar.hpp [2:4]
+ boost/phoenix/function/function.hpp [2:4]
+ boost/phoenix/statement/if.hpp [2:3]
+ boost/phoenix/statement/sequence.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3e16d1b440a4ce72af6366ce0b5d944c
+BELONGS libs/regex/ya.make ya.make
+ License text:
+ * Copyright (c) 1998-2004 John Maddock
+ * Copyright 2011 Garmin Ltd. or its subsidiaries
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex/v4/basic_regex.hpp [3:4]
+ libs/regex/src/regex.cpp [3:4]
+ libs/regex/src/regex_debug.cpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3e17a582e15583acc6ff0339c8727826
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/repetition/enum_shifted_binary_params.hpp at line 5, boost/preprocessor/slot/counter.hpp at line 5, boost/preprocessor/slot/detail/counter.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/repetition/enum_shifted_binary_params.hpp [3:5]
+ boost/preprocessor/slot/counter.hpp [3:5]
+ boost/preprocessor/slot/detail/counter.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3e1af80126953168abcba7ece6794e0d
+BELONGS ya.make
+ License text:
+ // (C) Copyright Jim Douglas 2005.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/platform/qnxnto.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3e2898bfd0e0c23b76da51e6faea4b62
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2010 Bryce Lelbach
+ Copyright (c) 2014 Tomoki Imai
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/iterators/line_pos_iterator.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3e4aae35b13808fc1419bbb3b0f24431
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/beta_distribution.hpp at line 5, boost/random/detail/polynomial.hpp at line 5, boost/random/laplace_distribution.hpp at line 5
+ License text:
+ * Copyright Steven Watanabe 2014
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/beta_distribution.hpp [3:5]
+ boost/random/detail/polynomial.hpp [3:5]
+ boost/random/laplace_distribution.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3e8210b2d067c6fa6eca9745ccdb03df
+BELONGS ya.make
+ License text:
+ // Copyright 2008
+ // Author: Matyas W Egyhazy
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/metric_tsp_approx.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3ebe5469577bc9d9b871ed6f23b7567e
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/vacpp.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3eeaf5942d3d86ca753bc9e1493ee8f0
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/platform/win32.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3eeb9233d0c8faa3468506996fae389d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/compiler/common_edg.hpp at line 3, boost/config/compiler/intel.hpp at line 3, boost/config/detail/select_platform_config.hpp at line 5, boost/config/stdlib/dinkumware.hpp at line 3, boost/config/stdlib/libstdcpp3.hpp at line 3, boost/config/stdlib/modena.hpp at line 3, boost/config/stdlib/roguewave.hpp at line 3, boost/config/stdlib/stlport.hpp at line 3, boost/filesystem/detail/macro_value.hpp at line 5, boost/generator_iterator.hpp at line 3
+ License text:
+ // (C) Copyright Jens Maurer 2001.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/common_edg.hpp [1:7]
+ boost/config/compiler/intel.hpp [1:10]
+ boost/config/detail/select_platform_config.hpp [3:6]
+ boost/config/stdlib/dinkumware.hpp [1:7]
+ boost/config/stdlib/libstdcpp3.hpp [1:4]
+ boost/config/stdlib/modena.hpp [1:3]
+ boost/config/stdlib/roguewave.hpp [1:6]
+ boost/config/stdlib/stlport.hpp [1:5]
+ boost/filesystem/detail/macro_value.hpp [3:7]
+ boost/generator_iterator.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3f74953683124ccdec5f589c930961bc
+BELONGS ya.make
+ License text:
+ Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.by>, 2017.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/is_partitioned_until.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 3fcf5a465d4b251bec993ca09ec345f8
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2012 Joel de Guzman
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/include/qi_copy.hpp [2:3]
+ boost/spirit/include/support_auto.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4047300d625348707598991c59d561ac
+BELONGS ya.make
+ License text:
+ * Copyright (c) 1998-2004 John Maddock
+ * Copyright 2011 Garmin Ltd. or its subsidiaries
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex/v4/basic_regex.hpp [3:4]
+ boost/regex/v4/cpp_regex_traits.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 40fc4a79a5a6233c3e12d71d3efbbf3d
+BELONGS ya.make
+ License text:
+ * Copyright 2010 Vicente J. Botet Escriba
+ * Copyright 2015, 2017 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/event.hpp [2:3]
+ boost/winapi/heap_memory.hpp [2:3]
+ boost/winapi/mutex.hpp [2:3]
+ boost/winapi/time.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 410d88c2deabcc121514205f7b161f95
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2007-2010 Anthony Williams
+ // (C) Copyright 2011-2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/thread.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 419d0482c09d39b3ded1706d383f69bc
+BELONGS ya.make
+ License text:
+ Copyright (c) Marshall Clow 2017.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/cxx17/exclusive_scan.hpp [2:2]
+ boost/algorithm/cxx17/for_each_n.hpp [2:2]
+ boost/algorithm/cxx17/inclusive_scan.hpp [2:2]
+ boost/algorithm/cxx17/reduce.hpp [2:2]
+ boost/algorithm/cxx17/transform_exclusive_scan.hpp [2:2]
+ boost/algorithm/cxx17/transform_inclusive_scan.hpp [2:2]
+ boost/algorithm/cxx17/transform_reduce.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 419fa76220a5a1e9495033b491e46d24
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/detail/system_failure.hpp at line 5, libs/iostreams/src/mapped_file.cpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/detail/system_failure.hpp [1:5]
+ libs/iostreams/src/mapped_file.cpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 41ac9dd74fc90902a3b53ae84a5fc6aa
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/allocator_traits.hpp at line 5, boost/container/scoped_allocator.hpp at line 5, boost/intrusive/pointer_traits.hpp at line 5
+ License text:
+ // (C) Copyright Pablo Halpern 2009. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/allocator_traits.hpp [3:5]
+ boost/container/scoped_allocator.hpp [3:5]
+ boost/intrusive/pointer_traits.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 41b036495e268c76ccf3abe1eba9c58c
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001-2003
+ // Mac Murrett
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/force_cast.hpp [1:2]
+ boost/thread/detail/singleton.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 41f7c2c90271aeefb7ade2de29e316de
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2017 - 2018 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/extra_ops_gcc_arm.hpp [6:6]
+ boost/atomic/detail/extra_ops_gcc_ppc.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 424810709457bd927fc8316235ac3e85
+BELONGS ya.make
+ License text:
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/array_algebra.hpp [13:14]
+ boost/numeric/odeint/config.hpp [9:10]
+ boost/numeric/odeint/integrate/null_observer.hpp [9:10]
+ boost/numeric/odeint/integrate/observer_collection.hpp [9:10]
+ boost/numeric/odeint/stepper/adams_moulton.hpp [10:12]
+ boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp [9:11]
+ boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/make_controlled.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/make_dense_output.hpp [9:10]
+ boost/numeric/odeint/stepper/rosenbrock4_controller.hpp [9:11]
+ boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp [9:11]
+ boost/numeric/odeint/util/copy.hpp [9:10]
+ boost/numeric/odeint/util/is_resizeable.hpp [9:10]
+ boost/numeric/odeint/version.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 428ed72c988aa5a41b3bce1846bf3623
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2011 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2011 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 42a0e4b1cd46bc22e0b4299f63e2804a
+BELONGS libs/thread/ya.make
+ License text:
+ // (C) Copyright 2018 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/thread/src/win32/thread_primitives.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 42b54ba6cff5caeb1a52e89fb122c93c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/is_sorted.hpp at line 5, boost/container/node_handle.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2016-2016. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/is_sorted.hpp [3:5]
+ boost/container/node_handle.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 430a54b56b932f178c95ed08027f3b33
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2014, 2015.
+ // Modifications copyright (c) 2014-2015, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/intersection/multi.hpp [5:6]
+ boost/geometry/algorithms/length.hpp [7:8]
+ boost/geometry/strategies/distance_result.hpp [9:10]
+ boost/geometry/util/math.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 430fce41d4bc35ab3f5260a42cbede37
+BELONGS libs/date_time/ya.make ya.make
+ License text:
+ /* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/date_names_put.hpp [4:6]
+ boost/date_time/posix_time/conversion.hpp [4:6]
+ boost/date_time/posix_time/posix_time.hpp [4:6]
+ libs/date_time/src/gregorian/greg_month.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 43184d74bb6f0a9ca9f5562808734277
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+ // Copyright 2015-2016 Antony Polukhin.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll.hpp [1:2]
+ boost/dll/alias.hpp [1:2]
+ boost/dll/detail/aggressive_ptr_cast.hpp [1:2]
+ boost/dll/detail/elf_info.hpp [1:2]
+ boost/dll/detail/macho_info.hpp [1:2]
+ boost/dll/detail/pe_info.hpp [1:2]
+ boost/dll/detail/posix/program_location_impl.hpp [1:2]
+ boost/dll/detail/posix/shared_library_impl.hpp [1:2]
+ boost/dll/detail/system_error.hpp [1:1]
+ boost/dll/detail/windows/path_from_handle.hpp [1:2]
+ boost/dll/detail/windows/shared_library_impl.hpp [1:2]
+ boost/dll/detail/x_info_interface.hpp [1:2]
+ boost/dll/import.hpp [1:2]
+ boost/dll/library_info.hpp [1:2]
+ boost/dll/runtime_symbol_info.hpp [1:2]
+ boost/dll/shared_library.hpp [1:2]
+ boost/dll/shared_library_load_mode.hpp [1:2]
+ boost/stacktrace/detail/void_ptr_cast.hpp [1:2]
+ boost/winapi/dll.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 43faee6d148b38cb4ab05799e5690c79
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2010-2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/parent_from_member.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4421db499a383cfc0dfc20b42f4e9b92
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 1994, 2006, 2008
+ // Copyright Vicente J. Botet Escriba 2009-2011
+ // Copyright Christopher Brown 2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/detail/inlined/mac/thread_clock.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 442f2f8f459887138123433d42ec81bf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/fiber/algo/shared_work.hpp at line 4
+ License text:
+ // Copyright Nat Goodspeed + Oliver Kowalke 2015.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fiber/algo/shared_work.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4476312bde74e54ae89f7415fcb2f06a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/suffix.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/suffix.hpp [4:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 447bbe13cee58c6f98042ebf1a79d703
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/disjoint/areal_areal.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_areal.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_linear.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/segment_box.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/backward_compatibility.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/default_strategies.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/interface.hpp [3:7]
+ boost/geometry/algorithms/detail/distance/point_to_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/point_point.hpp [3:6]
+ boost/geometry/algorithms/disjoint.hpp [3:6]
+ boost/geometry/algorithms/dispatch/disjoint.hpp [3:6]
+ boost/geometry/algorithms/dispatch/distance.hpp [3:6]
+ boost/geometry/algorithms/distance.hpp [3:6]
+ boost/geometry/algorithms/remove_spikes.hpp [3:6]
+ boost/geometry/policies/disjoint_interrupt_policy.hpp [3:6]
+ boost/geometry/strategies/cartesian/disjoint_segment_box.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 44d4cf6912aa70fe8c223f9152d3c3bb
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/restrict.hpp [8:12]
+ boost/iostreams/slice.hpp [8:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 44f95982010e27ec7d1e8978f7263b0d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/detail/helper_collection.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/detail/helper_collection.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 451b638bc1cc4d0d8edae8f16c04a7a5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/is_abstract.hpp at line 13
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_abstract.hpp [11:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4558361acc5f85e157dfb7c9fc834eb1
+BELONGS ya.make
+ License text:
+ Copyright (arg) 2001-2014 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/core/action.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 458d13e6010c05b1dcca2572b1fc8217
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2010.
+ // Copyright Paul A. Bristow 2010.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/geometric.hpp [3:4]
+ boost/math/distributions/inverse_chi_squared.hpp [1:2]
+ boost/math/distributions/inverse_gamma.hpp [3:6]
+ boost/math/distributions/inverse_gaussian.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 45f740f785c84f3afefaf79c068dd3cb
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/envelope/initialize.hpp [3:3]
+ boost/geometry/algorithms/detail/envelope/intersects_antimeridian.hpp [3:3]
+ boost/geometry/algorithms/detail/envelope/transform_units.hpp [3:3]
+ boost/geometry/algorithms/detail/expand_by_epsilon.hpp [3:3]
+ boost/geometry/algorithms/detail/is_simple/failure_policy.hpp [3:3]
+ boost/geometry/algorithms/detail/max_interval_gap.hpp [3:3]
+ boost/geometry/algorithms/detail/sweep.hpp [3:3]
+ boost/geometry/algorithms/is_empty.hpp [3:3]
+ boost/geometry/algorithms/validity_failure_type.hpp [3:3]
+ boost/geometry/policies/is_valid/default_policy.hpp [3:3]
+ boost/geometry/policies/is_valid/failing_reason_policy.hpp [3:3]
+ boost/geometry/policies/is_valid/failure_type_policy.hpp [3:3]
+ boost/geometry/policies/robustness/rescale_policy.hpp [8:8]
+ boost/geometry/util/promote_integral.hpp [3:3]
+ boost/geometry/views/detail/boundary_view.hpp [3:3]
+ boost/geometry/views/detail/boundary_view/implementation.hpp [3:3]
+ boost/geometry/views/detail/boundary_view/interface.hpp [3:3]
+ boost/geometry/views/detail/two_dimensional_view.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 463b016af48ea73c5777ee172f1606d7
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2007, Tobias Schwinger.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility/detail/in_place_factory_prefix.hpp [1:2]
+ boost/utility/detail/in_place_factory_suffix.hpp [1:2]
+ boost/utility/in_place_factory.hpp [1:2]
+ boost/utility/typed_in_place_factory.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 465f2d3c2e755301a28bad2a637bfebe
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2006-8 Anthony Williams
+ // (C) Copyright 2011-2012,2017-2018 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/win32/basic_recursive_mutex.hpp [6:7]
+ boost/thread/win32/shared_mutex.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 466b8cae4ed2e64dacdfdd01d7b4a0b4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/detail/config_def.hpp at line 5, boost/iterator/detail/config_undef.hpp at line 5, boost/iterator/detail/enable_if.hpp at line 5, boost/iterator/filter_iterator.hpp at line 5, boost/iterator/indirect_iterator.hpp at line 5, boost/iterator/interoperable.hpp at line 5, boost/iterator/iterator_adaptor.hpp at line 5, boost/iterator/iterator_facade.hpp at line 5, boost/iterator/reverse_iterator.hpp at line 5, boost/iterator/transform_iterator.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/detail/config_def.hpp [1:5]
+ boost/iterator/detail/config_undef.hpp [1:3]
+ boost/iterator/detail/enable_if.hpp [1:5]
+ boost/iterator/filter_iterator.hpp [1:5]
+ boost/iterator/indirect_iterator.hpp [1:5]
+ boost/iterator/interoperable.hpp [1:5]
+ boost/iterator/iterator_adaptor.hpp [1:5]
+ boost/iterator/iterator_facade.hpp [1:5]
+ boost/iterator/reverse_iterator.hpp [1:5]
+ boost/iterator/transform_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4673e3c59eb568cdd3843c6e0b7a975b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/log/detail/attachable_sstream_buf.hpp at line 4, boost/log/utility/string_literal.hpp at line 4
+ License text:
+ * Copyright Andrey Semashev 2007 - 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/log/detail/attachable_sstream_buf.hpp [2:4]
+ boost/log/utility/string_literal.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4689ac45137f0bdbfe6f283f1939c73f
+BELONGS ya.make
+ License text:
+ Copyright 2009-2015 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/stepper/extrapolation_stepper.hpp [9:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 46d9e1f8aedb16cf722125fc124d9495
+BELONGS ya.make
+ License text:
+ // (C) Copyright Douglas Gregor 2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/clang.hpp [1:1]
+ boost/config/compiler/xlcpp.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 46f0fb8d5862fd2118206707d7f1b83f
+BELONGS ya.make
+ License text:
+ // Copyright John R. Bandela 2001.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/token_functions.hpp [3:3]
+ boost/token_iterator.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 471d4b0a42c396158389600e3135b118
+BELONGS ya.make
+ License text:
+ // Copyright 2001 University of Notre Dame.
+ // Copyright 2003 Jeremy Siek
+ // Authors: Lie-Quan Lee, Jeremy Siek, and Douglas Gregor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/dll_import_export.hpp [2:4]
+ boost/graph/graphviz.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 473df95368b6926b0b458aa203d049b0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2015 Paul Fultz II
+ alias.h
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hof/alias.hpp [2:4]
+ boost/hof/apply.hpp [2:4]
+ boost/hof/apply_eval.hpp [2:4]
+ boost/hof/capture.hpp [2:4]
+ boost/hof/combine.hpp [2:4]
+ boost/hof/construct.hpp [2:4]
+ boost/hof/decay.hpp [2:4]
+ boost/hof/decorate.hpp [2:4]
+ boost/hof/detail/and.hpp [2:4]
+ boost/hof/detail/callable_base.hpp [2:4]
+ boost/hof/detail/can_be_called.hpp [2:4]
+ boost/hof/detail/compressed_pair.hpp [2:4]
+ boost/hof/detail/constexpr_deduce.hpp [2:4]
+ boost/hof/detail/make.hpp [2:4]
+ boost/hof/detail/result_of.hpp [2:4]
+ boost/hof/detail/static_const_var.hpp [2:4]
+ boost/hof/eval.hpp [2:4]
+ boost/hof/flip.hpp [2:4]
+ boost/hof/flow.hpp [2:4]
+ boost/hof/fold.hpp [2:4]
+ boost/hof/if.hpp [2:4]
+ boost/hof/lift.hpp [2:4]
+ boost/hof/repeat.hpp [2:4]
+ boost/hof/repeat_while.hpp [2:4]
+ boost/hof/reverse_fold.hpp [2:4]
+ boost/hof/rotate.hpp [2:4]
+ boost/hof/unpack.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 47779174b2c82482d94f3ad0f87d0215
+BELONGS ya.make
+ License text:
+ Copyright (c) 2010-2011 Bryce Lelbach
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/is_sorted.hpp [2:2]
+ boost/spirit/home/support/utree/utree.hpp [2:4]
+ boost/spirit/home/support/utree/utree_traits.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4796f0d991d5859a560e32560b6e3163
+BELONGS ya.make
+ License text:
+ // Copyright Peter Dimov and Multi Media Ltd 2001, 2002
+ // Copyright David Abrahams 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/unwrap.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 47c01776d86f7e15fd4b146873ce1e38
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002-2006 Marcin Kalicinski
+ // Copyright (C) 2009 Sebastian Redl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_tree/detail/exception_implementation.hpp [2:3]
+ boost/property_tree/detail/file_parser_error.hpp [2:2]
+ boost/property_tree/detail/info_parser_error.hpp [2:2]
+ boost/property_tree/detail/info_parser_read.hpp [2:2]
+ boost/property_tree/detail/info_parser_utils.hpp [2:2]
+ boost/property_tree/detail/info_parser_write.hpp [2:2]
+ boost/property_tree/detail/info_parser_writer_settings.hpp [2:3]
+ boost/property_tree/detail/ptree_implementation.hpp [2:3]
+ boost/property_tree/detail/ptree_utils.hpp [2:2]
+ boost/property_tree/detail/xml_parser_error.hpp [2:2]
+ boost/property_tree/detail/xml_parser_flags.hpp [2:2]
+ boost/property_tree/detail/xml_parser_utils.hpp [2:2]
+ boost/property_tree/detail/xml_parser_write.hpp [2:3]
+ boost/property_tree/exceptions.hpp [2:3]
+ boost/property_tree/info_parser.hpp [2:2]
+ boost/property_tree/ini_parser.hpp [2:3]
+ boost/property_tree/json_parser.hpp [2:3]
+ boost/property_tree/json_parser/detail/write.hpp [2:2]
+ boost/property_tree/json_parser/error.hpp [2:2]
+ boost/property_tree/ptree.hpp [2:3]
+ boost/property_tree/ptree_fwd.hpp [2:3]
+ boost/property_tree/ptree_serialization.hpp [2:2]
+ boost/property_tree/xml_parser.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 47e3aa9b161ddf342ed17e6e3a194ad1
+BELONGS ya.make
+ License text:
+ // Copyright 2007, 2014 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/typeinfo.hpp [12:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 47f09c67ed73e45fb62566eb4d245310
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/filter/lzma.hpp at line 4, libs/iostreams/src/lzma.cpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/filter/lzma.hpp [1:4]
+ libs/iostreams/src/lzma.cpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 483fdf5158d0f8518198f5ac2c492f5f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/algorithm.hpp at line 3, boost/detail/named_template_params.hpp at line 3, boost/graph/detail/permutation.hpp at line 3, boost/graph/detail/set_adaptor.hpp at line 3, boost/graph/detail/shadow_iterator.hpp at line 3, boost/iterator/function_output_iterator.hpp at line 3, boost/range/detail/collection_traits.hpp at line 15
+ License text:
+ // (C) Copyright Jeremy Siek 2001.
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/algorithm.hpp [1:3]
+ boost/detail/named_template_params.hpp [1:3]
+ boost/graph/detail/permutation.hpp [1:3]
+ boost/graph/detail/set_adaptor.hpp [1:3]
+ boost/graph/detail/shadow_iterator.hpp [1:3]
+ boost/iterator/function_output_iterator.hpp [1:3]
+ boost/range/detail/collection_traits.hpp [13:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4846b8bf3ce57674103bf8bc473c1e01
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2016.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/detail/mpl.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4873fbbd8e15c957f3d516a5bf07bd9a
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003-2009 Matthias Christian Schabel
+ // Copyright (C) 2007-2009 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/units/base_units/us/pound_force.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 488900fa132971e55b2288b6adc90297
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/atomic.hpp [6:8]
+ boost/atomic/atomic_flag.hpp [6:8]
+ boost/atomic/capabilities.hpp [6:6]
+ boost/atomic/detail/atomic_flag.hpp [6:6]
+ boost/atomic/detail/atomic_template.hpp [6:8]
+ boost/atomic/detail/caps_gcc_alpha.hpp [6:8]
+ boost/atomic/detail/caps_gcc_arm.hpp [6:10]
+ boost/atomic/detail/caps_gcc_atomic.hpp [6:6]
+ boost/atomic/detail/caps_gcc_ppc.hpp [6:8]
+ boost/atomic/detail/caps_gcc_sparc.hpp [6:8]
+ boost/atomic/detail/caps_gcc_sync.hpp [6:8]
+ boost/atomic/detail/caps_linux_arm.hpp [6:10]
+ boost/atomic/detail/config.hpp [6:7]
+ boost/atomic/detail/int_sizes.hpp [6:6]
+ boost/atomic/detail/link.hpp [6:7]
+ boost/atomic/detail/operations.hpp [6:6]
+ boost/atomic/detail/operations_fwd.hpp [6:6]
+ boost/atomic/detail/operations_lockfree.hpp [6:6]
+ boost/atomic/detail/ops_cas_based.hpp [6:6]
+ boost/atomic/detail/ops_emulated.hpp [6:6]
+ boost/atomic/detail/ops_extending_cas_based.hpp [6:6]
+ boost/atomic/detail/ops_gcc_alpha.hpp [6:8]
+ boost/atomic/detail/ops_gcc_arm.hpp [6:8]
+ boost/atomic/detail/ops_gcc_arm_common.hpp [6:8]
+ boost/atomic/detail/ops_gcc_atomic.hpp [6:6]
+ boost/atomic/detail/ops_gcc_ppc.hpp [6:8]
+ boost/atomic/detail/ops_gcc_ppc_common.hpp [6:8]
+ boost/atomic/detail/ops_gcc_sparc.hpp [6:8]
+ boost/atomic/detail/ops_gcc_sync.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86.hpp [6:8]
+ boost/atomic/detail/ops_linux_arm.hpp [6:10]
+ boost/atomic/detail/ops_msvc_arm.hpp [6:8]
+ boost/atomic/detail/ops_msvc_common.hpp [6:8]
+ boost/atomic/detail/ops_msvc_x86.hpp [6:8]
+ boost/atomic/detail/ops_windows.hpp [6:8]
+ boost/atomic/detail/platform.hpp [6:7]
+ boost/atomic/fences.hpp [6:8]
+ boost/core/underlying_type.hpp [3:6]
+ boost/detail/scoped_enum_emulation.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 48a1e78c1776174852d8ecfdeb3d9a8e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/arg_list.hpp at line 3, boost/parameter/aux_/default.hpp at line 3, boost/parameter/aux_/parameter_requirements.hpp at line 3, boost/parameter/aux_/tagged_argument.hpp at line 3, boost/parameter/aux_/unwrap_cv_reference.hpp at line 3, boost/parameter/aux_/void.hpp at line 3, boost/parameter/aux_/yesno.hpp at line 3, boost/parameter/config.hpp at line 3, boost/parameter/keyword.hpp at line 3
+ License text:
+ // Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+ // distribution is subject to the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/parameter/aux_/arg_list.hpp [1:3]
+ boost/parameter/aux_/default.hpp [1:3]
+ boost/parameter/aux_/parameter_requirements.hpp [1:3]
+ boost/parameter/aux_/tagged_argument.hpp [1:3]
+ boost/parameter/aux_/unwrap_cv_reference.hpp [1:3]
+ boost/parameter/aux_/void.hpp [1:3]
+ boost/parameter/aux_/yesno.hpp [1:3]
+ boost/parameter/config.hpp [1:3]
+ boost/parameter/keyword.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 48a99b78ca07d64eafb7dfabd3abb686
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2006 Peter Dimov
+ // Copyright 2005 Ben Hutchings
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp [7:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 491150306a8e77a2b041e31096f69d80
+BELONGS libs/chrono/ya.make ya.make
+ License text:
+ // (C) Copyright Vicente J. Botet Escriba 2010.
+ // Distributed under the Boost
+ // Software License, Version 1.0.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4915b20164f09b341694cc223cf83586
+BELONGS ya.make
+ License text:
+ // Copyright 2006 Johan Rade
+ // Copyright 2012 K R Walker
+ // Copyright 2011, 2012 Paul A. Bristow
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/nonfinite_num_facets.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 493cc4e248ecb124fe372bf25e6ef2d4
+BELONGS ya.make
+ License text:
+ Copyright (c) 2013 Agustin Berge http://spirit.sourceforge.net
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/support/subcontext.hpp [2:4]
+ boost/spirit/home/x3/support/traits/attribute_of.hpp [2:4]
+ boost/spirit/home/x3/support/traits/has_attribute.hpp [2:4]
+ boost/spirit/home/x3/support/traits/move_to.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 495b1eefa32665dd65d30aa549ab40c5
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013.
+ // Modifications copyright (c) 2013, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/within/within_no_turns.hpp [7:8]
+ boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp [5:6]
+ boost/geometry/multi/algorithms/detail/point_on_border.hpp [7:8]
+ boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp [7:8]
+ boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp [7:8]
+ boost/geometry/multi/core/ring_type.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 498105f8cf77963aff3c856eb50c2341
+BELONGS libs/exception/ya.make ya.make
+ License text:
+ //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/exception/current_exception_cast.hpp [1:1]
+ boost/exception/detail/exception_ptr.hpp [1:1]
+ boost/exception/detail/is_output_streamable.hpp [1:1]
+ boost/exception/detail/object_hex_dump.hpp [1:1]
+ boost/exception/enable_current_exception.hpp [1:1]
+ boost/exception/enable_error_info.hpp [1:1]
+ boost/exception/errinfo_api_function.hpp [1:1]
+ boost/exception/errinfo_at_line.hpp [1:1]
+ boost/exception/errinfo_errno.hpp [1:1]
+ boost/exception/errinfo_file_handle.hpp [1:1]
+ boost/exception/errinfo_file_name.hpp [1:1]
+ boost/exception/errinfo_file_open_mode.hpp [1:1]
+ boost/exception/errinfo_nested_exception.hpp [1:1]
+ boost/exception/errinfo_type_info_name.hpp [1:1]
+ boost/exception/error_info.hpp [1:1]
+ boost/exception/exception.hpp [1:1]
+ boost/exception/get_error_info.hpp [1:1]
+ boost/exception/info_tuple.hpp [1:1]
+ boost/exception/to_string.hpp [1:1]
+ boost/exception/to_string_stub.hpp [1:1]
+ boost/exception_ptr.hpp [1:1]
+ libs/exception/src/clone_current_exception_non_intrusive.cpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4996bb2ca2b3ceeeafa025b3dbd3345e
+BELONGS ya.make
+ License text:
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
+ Copyright 2012 Denis Demidov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/vexcl/vexcl_resize.hpp [9:11]
+ boost/numeric/odeint/external/viennacl/viennacl_operations.hpp [9:11]
+ boost/numeric/odeint/external/viennacl/viennacl_resize.hpp [9:11]
+ boost/numeric/odeint/iterator/adaptive_iterator.hpp [10:11]
+ boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp [9:10]
+ boost/numeric/odeint/stepper/controlled_step_result.hpp [9:10]
+ boost/numeric/odeint/util/same_instance.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 49a34ce6db1b184c479aec023e28d0b4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/preprocessor/flatten.hpp at line 3, boost/parameter/aux_/preprocessor/for_each.hpp at line 3, boost/parameter/aux_/python/invoker.hpp at line 3, boost/parameter/aux_/python/invoker_iterate.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/parameter/aux_/preprocessor/flatten.hpp [1:3]
+ boost/parameter/aux_/preprocessor/for_each.hpp [1:3]
+ boost/parameter/aux_/python/invoker.hpp [1:3]
+ boost/parameter/aux_/python/invoker_iterate.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 49a63dac4d2a7520d366071cadc7cba7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/algo/detail/pdqsort.hpp at line 6
+ License text:
+ // (C) Copyright Orson Peters 2017.
+ // (C) Copyright Ion Gaztanaga 2017-2018.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/algo/detail/pdqsort.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 49a72a2565315c216c070d87731e33a4
+BELONGS ya.make
+ License text:
+ @copyright Jason Rice 2016
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hana/concept/hashable.hpp [5:8]
+ boost/hana/detail/hash_table.hpp [5:8]
+ boost/hana/fwd/concept/hashable.hpp [5:8]
+ boost/hana/fwd/hash.hpp [5:8]
+ boost/hana/hash.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 49ac6943b8a74ceee45637a0a87cd8c4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011 Aaron Graham
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/repository/home/qi/primitive/advance.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 49c85f9c3e9bb242a6e6dd6d3d306ae2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/seq/detail/is_empty.hpp at line 5, boost/vmd/array.hpp at line 4, boost/vmd/array/to_seq.hpp at line 4, boost/vmd/array/to_tuple.hpp at line 4, boost/vmd/list.hpp at line 4, boost/vmd/list/to_seq.hpp at line 4, boost/vmd/list/to_tuple.hpp at line 4, boost/vmd/seq.hpp at line 4, boost/vmd/seq/is_vmd_seq.hpp at line 4, boost/vmd/seq/pop_back.hpp at line 4, boost/vmd/seq/pop_front.hpp at line 4, boost/vmd/seq/push_back.hpp at line 4, boost/vmd/seq/push_front.hpp at line 4, boost/vmd/seq/remove.hpp at line 4, boost/vmd/seq/size.hpp at line 4, boost/vmd/seq/to_array.hpp at line 4, boost/vmd/seq/to_list.hpp at line 4, boost/vmd/seq/to_tuple.hpp at line 4, boost/vmd/tuple.hpp at line 4, boost/vmd/tuple/is_vmd_tuple.hpp at line 4, boost/vmd/tuple/pop_back.hpp at line 4, boost/vmd/tuple/pop_front.hpp at line 4, boost/vmd/tuple/push_back.hpp at line 4, boost/vmd/tuple/push_front.hpp at line 4, boost/vmd/tuple/remove.hpp at line 4, boost/vmd/tuple/size.hpp at line 4, boost/vmd/tuple/to_array.hpp at line 4, boost/vmd/tuple/to_list.hpp at line 4, boost/vmd/tuple/to_seq.hpp at line 4
+ License text:
+ \# * (C) Copyright Edward Diener 2015.
+ \# * Distributed under the Boost Software License, Version 1.0. (See
+ \# * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/seq/detail/is_empty.hpp [3:5]
+ boost/vmd/array.hpp [2:4]
+ boost/vmd/array/to_seq.hpp [2:4]
+ boost/vmd/array/to_tuple.hpp [2:4]
+ boost/vmd/list.hpp [2:4]
+ boost/vmd/list/to_seq.hpp [2:4]
+ boost/vmd/list/to_tuple.hpp [2:4]
+ boost/vmd/seq.hpp [2:4]
+ boost/vmd/seq/is_vmd_seq.hpp [2:4]
+ boost/vmd/seq/pop_back.hpp [2:4]
+ boost/vmd/seq/pop_front.hpp [2:4]
+ boost/vmd/seq/push_back.hpp [2:4]
+ boost/vmd/seq/push_front.hpp [2:4]
+ boost/vmd/seq/remove.hpp [2:4]
+ boost/vmd/seq/size.hpp [2:4]
+ boost/vmd/seq/to_array.hpp [2:4]
+ boost/vmd/seq/to_list.hpp [2:4]
+ boost/vmd/seq/to_tuple.hpp [2:4]
+ boost/vmd/tuple.hpp [2:4]
+ boost/vmd/tuple/is_vmd_tuple.hpp [2:4]
+ boost/vmd/tuple/pop_back.hpp [2:4]
+ boost/vmd/tuple/pop_front.hpp [2:4]
+ boost/vmd/tuple/push_back.hpp [2:4]
+ boost/vmd/tuple/push_front.hpp [2:4]
+ boost/vmd/tuple/remove.hpp [2:4]
+ boost/vmd/tuple/size.hpp [2:4]
+ boost/vmd/tuple/to_array.hpp [2:4]
+ boost/vmd/tuple/to_list.hpp [2:4]
+ boost/vmd/tuple/to_seq.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 49dd121655e5c734739cb54d9f69e91e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted.hpp [2:3]
+ boost/fusion/adapted/adt.hpp [2:4]
+ boost/fusion/adapted/array.hpp [2:4]
+ boost/fusion/adapted/boost_array.hpp [2:3]
+ boost/fusion/adapted/boost_array/array_iterator.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/at_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/begin_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/category_of_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/end_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/is_view_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/size_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/value_at_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/tag_of.hpp [2:3]
+ boost/fusion/adapted/boost_tuple.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/at_impl.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/category_of_impl.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/end_impl.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/size_impl.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp [2:2]
+ boost/fusion/adapted/boost_tuple/tag_of.hpp [2:2]
+ boost/fusion/adapted/mpl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/at_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/begin_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/category_of_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/empty_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/end_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/has_key_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/is_view_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/size_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/value_at_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/mpl_iterator.hpp [2:2]
+ boost/fusion/adapted/std_array.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/at_impl.hpp [2:3]
+ boost/fusion/adapted/std_array/detail/begin_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/category_of_impl.hpp [2:3]
+ boost/fusion/adapted/std_array/detail/end_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/is_sequence_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/is_view_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/size_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/value_at_impl.hpp [2:3]
+ boost/fusion/adapted/std_array/std_array_iterator.hpp [2:4]
+ boost/fusion/adapted/std_array/tag_of.hpp [2:3]
+ boost/fusion/adapted/std_pair.hpp [2:4]
+ boost/fusion/adapted/std_tuple.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/at_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/begin_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/end_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/size_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp [2:2]
+ boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp [2:2]
+ boost/fusion/adapted/std_tuple/tag_of.hpp [2:2]
+ boost/fusion/adapted/struct.hpp [2:4]
+ boost/fusion/adapted/struct/detail/at_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/begin_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/category_of_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/end_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/is_sequence_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/is_view_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/size_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/value_at_impl.hpp [2:4]
+ boost/fusion/algorithm.hpp [2:2]
+ boost/fusion/algorithm/auxiliary.hpp [2:2]
+ boost/fusion/algorithm/auxiliary/copy.hpp [2:2]
+ boost/fusion/algorithm/iteration.hpp [2:2]
+ boost/fusion/algorithm/iteration/accumulate.hpp [2:3]
+ boost/fusion/algorithm/iteration/detail/fold.hpp [2:5]
+ boost/fusion/algorithm/iteration/detail/for_each.hpp [2:2]
+ boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp [2:3]
+ boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp [2:3]
+ boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp [2:3]
+ boost/fusion/algorithm/iteration/fold.hpp [2:5]
+ boost/fusion/algorithm/iteration/fold.hpp [35:37]
+ boost/fusion/algorithm/iteration/iter_fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/iter_fold.hpp [37:38]
+ boost/fusion/algorithm/iteration/reverse_fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/reverse_fold.hpp [37:38]
+ boost/fusion/algorithm/iteration/reverse_iter_fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/reverse_iter_fold.hpp [37:38]
+ boost/fusion/algorithm/query.hpp [2:2]
+ boost/fusion/algorithm/query/all.hpp [2:3]
+ boost/fusion/algorithm/query/any.hpp [2:4]
+ boost/fusion/algorithm/query/count.hpp [2:3]
+ boost/fusion/algorithm/query/count_if.hpp [2:3]
+ boost/fusion/algorithm/query/detail/all.hpp [2:3]
+ boost/fusion/algorithm/query/detail/any.hpp [2:4]
+ boost/fusion/algorithm/query/detail/count.hpp [2:2]
+ boost/fusion/algorithm/query/detail/count_if.hpp [2:3]
+ boost/fusion/algorithm/query/detail/find_if.hpp [2:4]
+ boost/fusion/algorithm/query/find.hpp [2:3]
+ boost/fusion/algorithm/query/find_if.hpp [2:3]
+ boost/fusion/algorithm/query/none.hpp [2:3]
+ boost/fusion/algorithm/transformation.hpp [2:2]
+ boost/fusion/algorithm/transformation/clear.hpp [2:2]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip.hpp [2:2]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/replace.hpp [2:2]
+ boost/fusion/algorithm/transformation/detail/replace_if.hpp [2:2]
+ boost/fusion/algorithm/transformation/erase.hpp [2:2]
+ boost/fusion/algorithm/transformation/erase_key.hpp [2:2]
+ boost/fusion/algorithm/transformation/filter.hpp [2:3]
+ boost/fusion/algorithm/transformation/filter_if.hpp [2:2]
+ boost/fusion/algorithm/transformation/insert.hpp [2:2]
+ boost/fusion/algorithm/transformation/insert_range.hpp [2:2]
+ boost/fusion/algorithm/transformation/join.hpp [2:3]
+ boost/fusion/algorithm/transformation/pop_back.hpp [2:2]
+ boost/fusion/algorithm/transformation/pop_front.hpp [2:2]
+ boost/fusion/algorithm/transformation/push_back.hpp [2:2]
+ boost/fusion/algorithm/transformation/push_front.hpp [2:2]
+ boost/fusion/algorithm/transformation/remove.hpp [2:2]
+ boost/fusion/algorithm/transformation/remove_if.hpp [2:2]
+ boost/fusion/algorithm/transformation/replace.hpp [2:2]
+ boost/fusion/algorithm/transformation/replace_if.hpp [2:2]
+ boost/fusion/algorithm/transformation/reverse.hpp [2:2]
+ boost/fusion/algorithm/transformation/transform.hpp [2:2]
+ boost/fusion/algorithm/transformation/zip.hpp [2:3]
+ boost/fusion/algorithm/transformation/zip.hpp [43:44]
+ boost/fusion/container.hpp [2:2]
+ boost/fusion/container/deque.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/as_deque.hpp [66:66]
+ boost/fusion/container/deque/detail/cpp03/deque.hpp [51:51]
+ boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp [26:26]
+ boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp [35:35]
+ boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp [43:43]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp [2:2]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp [2:2]
+ boost/fusion/container/generation.hpp [2:2]
+ boost/fusion/container/generation/cons_tie.hpp [2:2]
+ boost/fusion/container/generation/detail/pp_deque_tie.hpp [2:3]
+ boost/fusion/container/generation/detail/pp_deque_tie.hpp [28:28]
+ boost/fusion/container/generation/detail/pp_list_tie.hpp [2:2]
+ boost/fusion/container/generation/detail/pp_list_tie.hpp [27:27]
+ boost/fusion/container/generation/detail/pp_make_deque.hpp [2:3]
+ boost/fusion/container/generation/detail/pp_make_deque.hpp [28:28]
+ boost/fusion/container/generation/detail/pp_make_list.hpp [2:2]
+ boost/fusion/container/generation/detail/pp_make_list.hpp [27:27]
+ boost/fusion/container/generation/detail/pp_make_map.hpp [2:2]
+ boost/fusion/container/generation/detail/pp_make_map.hpp [28:28]
+ boost/fusion/container/generation/detail/pp_make_set.hpp [2:2]
+ boost/fusion/container/generation/detail/pp_make_set.hpp [29:29]
+ boost/fusion/container/generation/detail/pp_make_vector.hpp [2:2]
+ boost/fusion/container/generation/detail/pp_make_vector.hpp [27:27]
+ boost/fusion/container/generation/detail/pp_map_tie.hpp [2:3]
+ boost/fusion/container/generation/detail/pp_map_tie.hpp [31:31]
+ boost/fusion/container/generation/detail/pp_vector_tie.hpp [2:2]
+ boost/fusion/container/generation/detail/pp_vector_tie.hpp [27:27]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/list_tie.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_deque.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_list.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_list10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_list20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_list30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_list40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_list50.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_map.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_map10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_map20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_map30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_map40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_map50.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_set.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_set10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_set20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_set30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_set40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_set50.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_vector.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/map_tie.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp [2:2]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp [2:2]
+ boost/fusion/container/generation/ignore.hpp [2:4]
+ boost/fusion/container/generation/make_cons.hpp [2:3]
+ boost/fusion/container/generation/pair_tie.hpp [2:3]
+ boost/fusion/container/list.hpp [2:2]
+ boost/fusion/container/list/cons.hpp [2:3]
+ boost/fusion/container/list/cons_fwd.hpp [2:3]
+ boost/fusion/container/list/cons_iterator.hpp [2:3]
+ boost/fusion/container/list/convert.hpp [2:2]
+ boost/fusion/container/list/detail/at_impl.hpp [2:2]
+ boost/fusion/container/list/detail/begin_impl.hpp [2:3]
+ boost/fusion/container/list/detail/build_cons.hpp [2:2]
+ boost/fusion/container/list/detail/convert_impl.hpp [2:3]
+ boost/fusion/container/list/detail/cpp03/limits.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/list.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/list.hpp [26:26]
+ boost/fusion/container/list/detail/cpp03/list_forward_ctor.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/list_fwd.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/list_fwd.hpp [22:22]
+ boost/fusion/container/list/detail/cpp03/list_to_cons.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/list_to_cons.hpp [34:34]
+ boost/fusion/container/list/detail/cpp03/list_to_cons_call.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list10.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list10_fwd.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list20.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list20_fwd.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list30.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list30_fwd.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list40.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list40_fwd.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list50.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list50_fwd.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_fwd.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons10.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons20.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons30.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons40.hpp [2:2]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons50.hpp [2:2]
+ boost/fusion/container/list/detail/deref_impl.hpp [2:3]
+ boost/fusion/container/list/detail/end_impl.hpp [2:3]
+ boost/fusion/container/list/detail/equal_to_impl.hpp [2:2]
+ boost/fusion/container/list/detail/next_impl.hpp [2:3]
+ boost/fusion/container/list/detail/value_at_impl.hpp [2:2]
+ boost/fusion/container/list/detail/value_of_impl.hpp [2:3]
+ boost/fusion/container/list/nil.hpp [2:3]
+ boost/fusion/container/map.hpp [2:2]
+ boost/fusion/container/map/convert.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/as_map.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/as_map.hpp [65:65]
+ boost/fusion/container/map/detail/cpp03/at_impl.hpp [2:3]
+ boost/fusion/container/map/detail/cpp03/begin_impl.hpp [2:3]
+ boost/fusion/container/map/detail/cpp03/convert.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/convert_impl.hpp [2:3]
+ boost/fusion/container/map/detail/cpp03/end_impl.hpp [2:3]
+ boost/fusion/container/map/detail/cpp03/limits.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/map.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/map.hpp [45:45]
+ boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/map_fwd.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/map_fwd.hpp [22:22]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map10.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map20.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map30.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map40.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map50.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map10.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map10_fwd.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map20.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map20_fwd.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map30.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map30_fwd.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map40.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map40_fwd.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map50.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map50_fwd.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map_fwd.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/value_at_impl.hpp [2:3]
+ boost/fusion/container/map/map.hpp [2:2]
+ boost/fusion/container/map/map_fwd.hpp [2:2]
+ boost/fusion/container/set.hpp [2:2]
+ boost/fusion/container/set/convert.hpp [2:2]
+ boost/fusion/container/set/detail/begin_impl.hpp [2:3]
+ boost/fusion/container/set/detail/convert_impl.hpp [2:3]
+ boost/fusion/container/set/detail/cpp03/as_set.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/as_set.hpp [65:65]
+ boost/fusion/container/set/detail/cpp03/limits.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set10.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set20.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set30.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set40.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set50.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set10.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set10_fwd.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set20.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set20_fwd.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set30.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set30_fwd.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set40.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set40_fwd.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set50.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set50_fwd.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set_fwd.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/set.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/set.hpp [38:38]
+ boost/fusion/container/set/detail/cpp03/set_forward_ctor.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/set_fwd.hpp [2:2]
+ boost/fusion/container/set/detail/cpp03/set_fwd.hpp [22:22]
+ boost/fusion/container/set/detail/end_impl.hpp [2:3]
+ boost/fusion/container/vector.hpp [2:2]
+ boost/fusion/container/vector/convert.hpp [2:2]
+ boost/fusion/container/vector/detail/advance_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/at_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/begin_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/convert_impl.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/as_vector.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/as_vector.hpp [65:65]
+ boost/fusion/container/vector/detail/cpp03/limits.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector10.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector20.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector30.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector40.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector50.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector10.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector10_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector20.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector20_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector30.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector30_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector40.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector40_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector50.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector50_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser10.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser20.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser30.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser40.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser50.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_fwd.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector10.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector10_fwd.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector20.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector20_fwd.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector30.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector30_fwd.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector40.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector40_fwd.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector50.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector50_fwd.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/value_at_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/vector.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/vector.hpp [70:70]
+ boost/fusion/container/vector/detail/cpp03/vector10.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/vector10.hpp [73:73]
+ boost/fusion/container/vector/detail/cpp03/vector10_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector10_fwd.hpp [31:32]
+ boost/fusion/container/vector/detail/cpp03/vector20.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/vector20.hpp [48:48]
+ boost/fusion/container/vector/detail/cpp03/vector20_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector20_fwd.hpp [25:26]
+ boost/fusion/container/vector/detail/cpp03/vector30.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/vector30.hpp [47:47]
+ boost/fusion/container/vector/detail/cpp03/vector30_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector30_fwd.hpp [25:26]
+ boost/fusion/container/vector/detail/cpp03/vector40.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/vector40.hpp [48:48]
+ boost/fusion/container/vector/detail/cpp03/vector40_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector40_fwd.hpp [25:26]
+ boost/fusion/container/vector/detail/cpp03/vector50.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/vector50.hpp [47:47]
+ boost/fusion/container/vector/detail/cpp03/vector50_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector50_fwd.hpp [25:26]
+ boost/fusion/container/vector/detail/cpp03/vector_forward_ctor.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/vector_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/vector_fwd.hpp [37:37]
+ boost/fusion/container/vector/detail/cpp03/vector_n.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp [48:48]
+ boost/fusion/container/vector/detail/deref_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/distance_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/end_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/equal_to_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/next_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/prior_impl.hpp [2:2]
+ boost/fusion/container/vector/detail/value_of_impl.hpp [2:2]
+ boost/fusion/container/vector/vector_iterator.hpp [2:2]
+ boost/fusion/include/auxiliary.hpp [2:2]
+ boost/fusion/include/copy.hpp [2:2]
+ boost/fusion/include/iterator_adapter.hpp [2:2]
+ boost/fusion/iterator.hpp [2:2]
+ boost/fusion/iterator/advance.hpp [2:2]
+ boost/fusion/iterator/deref.hpp [2:2]
+ boost/fusion/iterator/detail/adapt_deref_traits.hpp [2:2]
+ boost/fusion/iterator/detail/adapt_value_traits.hpp [2:2]
+ boost/fusion/iterator/detail/advance.hpp [2:2]
+ boost/fusion/iterator/detail/distance.hpp [2:2]
+ boost/fusion/iterator/distance.hpp [2:2]
+ boost/fusion/iterator/equal_to.hpp [2:2]
+ boost/fusion/iterator/iterator_adapter.hpp [2:2]
+ boost/fusion/iterator/iterator_facade.hpp [2:2]
+ boost/fusion/iterator/mpl.hpp [2:2]
+ boost/fusion/iterator/mpl/convert_iterator.hpp [2:2]
+ boost/fusion/iterator/mpl/fusion_iterator.hpp [2:2]
+ boost/fusion/iterator/next.hpp [2:2]
+ boost/fusion/iterator/prior.hpp [2:2]
+ boost/fusion/iterator/value_of.hpp [2:2]
+ boost/fusion/mpl.hpp [2:2]
+ boost/fusion/mpl/at.hpp [2:2]
+ boost/fusion/mpl/back.hpp [2:2]
+ boost/fusion/mpl/begin.hpp [2:2]
+ boost/fusion/mpl/clear.hpp [2:2]
+ boost/fusion/mpl/detail/clear.hpp [2:2]
+ boost/fusion/mpl/empty.hpp [2:2]
+ boost/fusion/mpl/end.hpp [2:2]
+ boost/fusion/mpl/erase.hpp [2:2]
+ boost/fusion/mpl/erase_key.hpp [2:2]
+ boost/fusion/mpl/front.hpp [2:2]
+ boost/fusion/mpl/has_key.hpp [2:2]
+ boost/fusion/mpl/insert.hpp [2:2]
+ boost/fusion/mpl/insert_range.hpp [2:2]
+ boost/fusion/mpl/pop_back.hpp [2:2]
+ boost/fusion/mpl/pop_front.hpp [2:2]
+ boost/fusion/mpl/push_back.hpp [2:2]
+ boost/fusion/mpl/push_front.hpp [2:2]
+ boost/fusion/mpl/size.hpp [2:2]
+ boost/fusion/sequence.hpp [2:2]
+ boost/fusion/sequence/comparison.hpp [2:2]
+ boost/fusion/sequence/comparison/detail/equal_to.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/greater.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/greater_equal.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/less.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/less_equal.hpp [2:3]
+ boost/fusion/sequence/comparison/detail/not_equal_to.hpp [2:3]
+ boost/fusion/sequence/comparison/enable_comparison.hpp [2:2]
+ boost/fusion/sequence/comparison/equal_to.hpp [2:3]
+ boost/fusion/sequence/comparison/greater.hpp [2:3]
+ boost/fusion/sequence/comparison/greater_equal.hpp [2:3]
+ boost/fusion/sequence/comparison/less.hpp [2:3]
+ boost/fusion/sequence/comparison/less_equal.hpp [2:3]
+ boost/fusion/sequence/comparison/not_equal_to.hpp [2:3]
+ boost/fusion/sequence/convert.hpp [2:2]
+ boost/fusion/sequence/intrinsic.hpp [2:2]
+ boost/fusion/sequence/intrinsic/at.hpp [2:2]
+ boost/fusion/sequence/intrinsic/at_c.hpp [2:2]
+ boost/fusion/sequence/intrinsic/at_key.hpp [2:3]
+ boost/fusion/sequence/intrinsic/back.hpp [2:2]
+ boost/fusion/sequence/intrinsic/begin.hpp [2:2]
+ boost/fusion/sequence/intrinsic/empty.hpp [2:2]
+ boost/fusion/sequence/intrinsic/end.hpp [2:2]
+ boost/fusion/sequence/intrinsic/front.hpp [2:2]
+ boost/fusion/sequence/intrinsic/has_key.hpp [2:2]
+ boost/fusion/sequence/intrinsic/size.hpp [2:2]
+ boost/fusion/sequence/intrinsic/swap.hpp [2:3]
+ boost/fusion/sequence/intrinsic/value_at.hpp [2:2]
+ boost/fusion/sequence/intrinsic/value_at_key.hpp [2:3]
+ boost/fusion/sequence/intrinsic_fwd.hpp [2:2]
+ boost/fusion/sequence/io.hpp [2:2]
+ boost/fusion/sequence/io/detail/in.hpp [2:4]
+ boost/fusion/sequence/io/detail/manip.hpp [2:4]
+ boost/fusion/sequence/io/detail/out.hpp [2:4]
+ boost/fusion/sequence/io/in.hpp [2:4]
+ boost/fusion/sequence/io/out.hpp [2:4]
+ boost/fusion/sequence/sequence_facade.hpp [2:2]
+ boost/fusion/support.hpp [2:2]
+ boost/fusion/support/category_of.hpp [2:2]
+ boost/fusion/support/detail/access.hpp [2:2]
+ boost/fusion/support/detail/as_fusion_element.hpp [2:3]
+ boost/fusion/support/detail/category_of.hpp [2:2]
+ boost/fusion/support/detail/is_mpl_sequence.hpp [2:3]
+ boost/fusion/support/detail/is_view.hpp [2:2]
+ boost/fusion/support/detail/mpl_iterator_category.hpp [2:2]
+ boost/fusion/support/detail/unknown_key.hpp [2:2]
+ boost/fusion/support/is_iterator.hpp [2:2]
+ boost/fusion/support/is_sequence.hpp [2:2]
+ boost/fusion/support/is_view.hpp [2:2]
+ boost/fusion/support/iterator_base.hpp [2:2]
+ boost/fusion/support/pair.hpp [2:3]
+ boost/fusion/support/sequence_base.hpp [2:3]
+ boost/fusion/support/tag_of.hpp [2:2]
+ boost/fusion/support/tag_of_fwd.hpp [2:3]
+ boost/fusion/support/unused.hpp [2:2]
+ boost/fusion/support/void.hpp [2:2]
+ boost/fusion/tuple.hpp [2:2]
+ boost/fusion/tuple/detail/make_tuple.hpp [2:2]
+ boost/fusion/tuple/detail/make_tuple.hpp [34:34]
+ boost/fusion/tuple/detail/preprocessed/make_tuple.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple10.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple10_fwd.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple20.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple20_fwd.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple30.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple30_fwd.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple40.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple40_fwd.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple50.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple50_fwd.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple_fwd.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp [2:2]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp [2:2]
+ boost/fusion/tuple/detail/tuple.hpp [2:2]
+ boost/fusion/tuple/detail/tuple.hpp [30:30]
+ boost/fusion/tuple/detail/tuple_expand.hpp [2:2]
+ boost/fusion/tuple/detail/tuple_fwd.hpp [2:2]
+ boost/fusion/tuple/detail/tuple_fwd.hpp [22:22]
+ boost/fusion/tuple/detail/tuple_tie.hpp [2:2]
+ boost/fusion/tuple/detail/tuple_tie.hpp [25:25]
+ boost/fusion/view.hpp [2:2]
+ boost/fusion/view/detail/strictest_traversal.hpp [2:3]
+ boost/fusion/view/filter_view.hpp [2:2]
+ boost/fusion/view/filter_view/detail/begin_impl.hpp [2:2]
+ boost/fusion/view/filter_view/detail/deref_impl.hpp [2:2]
+ boost/fusion/view/filter_view/detail/end_impl.hpp [2:2]
+ boost/fusion/view/filter_view/detail/equal_to_impl.hpp [2:3]
+ boost/fusion/view/filter_view/detail/next_impl.hpp [2:2]
+ boost/fusion/view/filter_view/detail/size_impl.hpp [2:2]
+ boost/fusion/view/filter_view/detail/value_of_impl.hpp [2:2]
+ boost/fusion/view/filter_view/filter_view.hpp [2:2]
+ boost/fusion/view/filter_view/filter_view_iterator.hpp [2:2]
+ boost/fusion/view/iterator_range.hpp [2:2]
+ boost/fusion/view/iterator_range/detail/begin_impl.hpp [2:2]
+ boost/fusion/view/iterator_range/detail/end_impl.hpp [2:2]
+ boost/fusion/view/iterator_range/iterator_range.hpp [2:2]
+ boost/fusion/view/joint_view.hpp [2:2]
+ boost/fusion/view/joint_view/detail/begin_impl.hpp [2:2]
+ boost/fusion/view/joint_view/detail/deref_impl.hpp [2:2]
+ boost/fusion/view/joint_view/detail/end_impl.hpp [2:2]
+ boost/fusion/view/joint_view/detail/next_impl.hpp [2:2]
+ boost/fusion/view/joint_view/detail/value_of_impl.hpp [2:2]
+ boost/fusion/view/joint_view/joint_view.hpp [2:2]
+ boost/fusion/view/joint_view/joint_view_iterator.hpp [2:2]
+ boost/fusion/view/nview.hpp [2:4]
+ boost/fusion/view/nview/detail/size_impl.hpp [2:2]
+ boost/fusion/view/reverse_view.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/advance_impl.hpp [2:3]
+ boost/fusion/view/reverse_view/detail/begin_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/deref_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/distance_impl.hpp [2:3]
+ boost/fusion/view/reverse_view/detail/end_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/next_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/prior_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/value_of_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/reverse_view.hpp [2:2]
+ boost/fusion/view/reverse_view/reverse_view_iterator.hpp [2:2]
+ boost/fusion/view/single_view.hpp [2:2]
+ boost/fusion/view/single_view/detail/begin_impl.hpp [2:3]
+ boost/fusion/view/single_view/detail/deref_impl.hpp [2:3]
+ boost/fusion/view/single_view/detail/end_impl.hpp [2:3]
+ boost/fusion/view/single_view/detail/next_impl.hpp [2:3]
+ boost/fusion/view/single_view/detail/value_of_impl.hpp [2:3]
+ boost/fusion/view/single_view/single_view.hpp [2:3]
+ boost/fusion/view/single_view/single_view_iterator.hpp [2:3]
+ boost/fusion/view/transform_view.hpp [2:2]
+ boost/fusion/view/transform_view/detail/advance_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/apply_transform_result.hpp [2:3]
+ boost/fusion/view/transform_view/detail/at_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/begin_impl.hpp [2:2]
+ boost/fusion/view/transform_view/detail/deref_impl.hpp [2:2]
+ boost/fusion/view/transform_view/detail/distance_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/end_impl.hpp [2:2]
+ boost/fusion/view/transform_view/detail/equal_to_impl.hpp [2:2]
+ boost/fusion/view/transform_view/detail/next_impl.hpp [2:2]
+ boost/fusion/view/transform_view/detail/prior_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/value_at_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/value_of_impl.hpp [2:2]
+ boost/fusion/view/transform_view/transform_view.hpp [2:2]
+ boost/fusion/view/transform_view/transform_view_fwd.hpp [2:2]
+ boost/fusion/view/transform_view/transform_view_iterator.hpp [2:2]
+ boost/fusion/view/zip_view.hpp [2:3]
+ boost/fusion/view/zip_view/detail/advance_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/at_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/begin_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/deref_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/distance_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/end_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/equal_to_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/next_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/prior_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/size_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/value_at_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/value_of_impl.hpp [2:3]
+ boost/fusion/view/zip_view/zip_view.hpp [2:3]
+ boost/fusion/view/zip_view/zip_view_iterator.hpp [2:3]
+ boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp [2:3]
+ boost/spirit/home/karma/auxiliary/lazy.hpp [1:2]
+ boost/spirit/home/karma/char/char_generator.hpp [1:2]
+ boost/spirit/home/karma/detail/alternative_function.hpp [1:2]
+ boost/spirit/home/karma/detail/attributes.hpp [1:2]
+ boost/spirit/home/karma/detail/fail_function.hpp [1:2]
+ boost/spirit/home/karma/detail/get_casetag.hpp [1:2]
+ boost/spirit/home/karma/detail/pass_container.hpp [2:3]
+ boost/spirit/home/karma/directive/encoding.hpp [1:2]
+ boost/spirit/home/karma/directive/repeat.hpp [1:2]
+ boost/spirit/home/karma/directive/upper_lower_case.hpp [1:2]
+ boost/spirit/home/karma/domain.hpp [1:2]
+ boost/spirit/home/karma/generator.hpp [1:2]
+ boost/spirit/home/karma/meta_compiler.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/debug_handler.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/detail/fcall.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/detail/parameterized.hpp [1:3]
+ boost/spirit/home/karma/nonterminal/grammar.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/rule.hpp [1:2]
+ boost/spirit/home/karma/nonterminal/simple_trace.hpp [1:2]
+ boost/spirit/home/karma/operator/alternative.hpp [1:2]
+ boost/spirit/home/karma/operator/and_predicate.hpp [1:2]
+ boost/spirit/home/karma/operator/kleene.hpp [1:2]
+ boost/spirit/home/karma/operator/list.hpp [1:2]
+ boost/spirit/home/karma/operator/not_predicate.hpp [1:2]
+ boost/spirit/home/karma/operator/optional.hpp [1:2]
+ boost/spirit/home/karma/operator/plus.hpp [1:2]
+ boost/spirit/home/karma/operator/sequence.hpp [1:2]
+ boost/spirit/home/karma/reference.hpp [1:2]
+ boost/spirit/home/lex/argument.hpp [1:4]
+ boost/spirit/home/lex/domain.hpp [1:2]
+ boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp [2:4]
+ boost/spirit/home/lex/lexer_type.hpp [1:2]
+ boost/spirit/home/lex/meta_compiler.hpp [1:2]
+ boost/spirit/home/lex/reference.hpp [1:2]
+ boost/spirit/home/lex/tokenize_and_parse_attr.hpp [1:3]
+ boost/spirit/home/qi.hpp [2:2]
+ boost/spirit/home/qi/action.hpp [2:2]
+ boost/spirit/home/qi/action/action.hpp [2:2]
+ boost/spirit/home/qi/auxiliary.hpp [2:3]
+ boost/spirit/home/qi/auxiliary/attr.hpp [2:3]
+ boost/spirit/home/qi/auxiliary/eoi.hpp [2:3]
+ boost/spirit/home/qi/auxiliary/eol.hpp [2:3]
+ boost/spirit/home/qi/auxiliary/eps.hpp [2:2]
+ boost/spirit/home/qi/auxiliary/lazy.hpp [2:2]
+ boost/spirit/home/qi/binary/binary.hpp [2:3]
+ boost/spirit/home/qi/char.hpp [2:2]
+ boost/spirit/home/qi/char/char.hpp [2:4]
+ boost/spirit/home/qi/char/char_class.hpp [2:2]
+ boost/spirit/home/qi/char/char_parser.hpp [2:2]
+ boost/spirit/home/qi/detail/assign_to.hpp [2:4]
+ boost/spirit/home/qi/detail/attributes.hpp [1:2]
+ boost/spirit/home/qi/detail/expect_function.hpp [2:2]
+ boost/spirit/home/qi/detail/expectation_failure.hpp [2:2]
+ boost/spirit/home/qi/detail/fail_function.hpp [2:2]
+ boost/spirit/home/qi/detail/pass_container.hpp [2:3]
+ boost/spirit/home/qi/detail/pass_function.hpp [2:2]
+ boost/spirit/home/qi/detail/permute_function.hpp [2:2]
+ boost/spirit/home/qi/detail/string_parse.hpp [2:2]
+ boost/spirit/home/qi/directive.hpp [2:2]
+ boost/spirit/home/qi/directive/as.hpp [2:4]
+ boost/spirit/home/qi/directive/encoding.hpp [2:2]
+ boost/spirit/home/qi/directive/hold.hpp [2:2]
+ boost/spirit/home/qi/directive/lexeme.hpp [2:2]
+ boost/spirit/home/qi/directive/no_case.hpp [2:2]
+ boost/spirit/home/qi/directive/no_skip.hpp [2:3]
+ boost/spirit/home/qi/directive/omit.hpp [2:2]
+ boost/spirit/home/qi/directive/raw.hpp [2:2]
+ boost/spirit/home/qi/directive/repeat.hpp [2:3]
+ boost/spirit/home/qi/directive/skip.hpp [2:2]
+ boost/spirit/home/qi/domain.hpp [2:2]
+ boost/spirit/home/qi/meta_compiler.hpp [2:2]
+ boost/spirit/home/qi/nonterminal.hpp [2:2]
+ boost/spirit/home/qi/nonterminal/debug_handler.hpp [2:2]
+ boost/spirit/home/qi/nonterminal/debug_handler_state.hpp [2:2]
+ boost/spirit/home/qi/nonterminal/detail/fcall.hpp [2:2]
+ boost/spirit/home/qi/nonterminal/detail/parameterized.hpp [2:3]
+ boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp [2:2]
+ boost/spirit/home/qi/nonterminal/error_handler.hpp [2:2]
+ boost/spirit/home/qi/nonterminal/grammar.hpp [2:2]
+ boost/spirit/home/qi/nonterminal/rule.hpp [2:2]
+ boost/spirit/home/qi/nonterminal/simple_trace.hpp [2:3]
+ boost/spirit/home/qi/nonterminal/success_handler.hpp [2:2]
+ boost/spirit/home/qi/numeric.hpp [2:2]
+ boost/spirit/home/qi/numeric/detail/numeric_utils.hpp [2:6]
+ boost/spirit/home/qi/numeric/detail/real_impl.hpp [2:4]
+ boost/spirit/home/qi/numeric/int.hpp [2:3]
+ boost/spirit/home/qi/numeric/numeric_utils.hpp [2:3]
+ boost/spirit/home/qi/numeric/real.hpp [2:3]
+ boost/spirit/home/qi/numeric/real_policies.hpp [2:3]
+ boost/spirit/home/qi/numeric/uint.hpp [2:4]
+ boost/spirit/home/qi/operator.hpp [2:2]
+ boost/spirit/home/qi/operator/alternative.hpp [2:3]
+ boost/spirit/home/qi/operator/and_predicate.hpp [2:2]
+ boost/spirit/home/qi/operator/difference.hpp [2:2]
+ boost/spirit/home/qi/operator/expect.hpp [2:3]
+ boost/spirit/home/qi/operator/kleene.hpp [2:3]
+ boost/spirit/home/qi/operator/list.hpp [2:3]
+ boost/spirit/home/qi/operator/not_predicate.hpp [2:2]
+ boost/spirit/home/qi/operator/optional.hpp [2:3]
+ boost/spirit/home/qi/operator/permutation.hpp [2:2]
+ boost/spirit/home/qi/operator/plus.hpp [2:3]
+ boost/spirit/home/qi/operator/sequence.hpp [2:3]
+ boost/spirit/home/qi/operator/sequence_base.hpp [2:3]
+ boost/spirit/home/qi/operator/sequential_or.hpp [2:2]
+ boost/spirit/home/qi/parse.hpp [2:3]
+ boost/spirit/home/qi/parse_attr.hpp [1:3]
+ boost/spirit/home/qi/parser.hpp [2:2]
+ boost/spirit/home/qi/reference.hpp [2:2]
+ boost/spirit/home/qi/skip_over.hpp [2:2]
+ boost/spirit/home/qi/stream/match_manip.hpp [2:3]
+ boost/spirit/home/qi/stream/match_manip_attr.hpp [2:3]
+ boost/spirit/home/qi/string.hpp [2:2]
+ boost/spirit/home/qi/string/detail/tst.hpp [2:2]
+ boost/spirit/home/qi/string/lit.hpp [2:4]
+ boost/spirit/home/qi/string/symbols.hpp [2:2]
+ boost/spirit/home/qi/string/tst.hpp [2:2]
+ boost/spirit/home/qi/string/tst_map.hpp [2:2]
+ boost/spirit/home/qi/what.hpp [2:2]
+ boost/spirit/home/support.hpp [2:2]
+ boost/spirit/home/support/action_dispatch.hpp [2:4]
+ boost/spirit/home/support/algorithm/any.hpp [2:2]
+ boost/spirit/home/support/algorithm/any_if.hpp [2:3]
+ boost/spirit/home/support/algorithm/any_if_ns.hpp [2:3]
+ boost/spirit/home/support/algorithm/any_if_ns_so.hpp [2:3]
+ boost/spirit/home/support/algorithm/any_ns.hpp [2:2]
+ boost/spirit/home/support/algorithm/any_ns_so.hpp [2:2]
+ boost/spirit/home/support/argument.hpp [2:4]
+ boost/spirit/home/support/attributes.hpp [2:3]
+ boost/spirit/home/support/attributes_fwd.hpp [2:4]
+ boost/spirit/home/support/char_class.hpp [2:3]
+ boost/spirit/home/support/char_encoding/ascii.hpp [2:3]
+ boost/spirit/home/support/char_encoding/iso8859_1.hpp [2:3]
+ boost/spirit/home/support/char_encoding/standard.hpp [2:3]
+ boost/spirit/home/support/char_encoding/standard_wide.hpp [2:3]
+ boost/spirit/home/support/char_encoding/unicode.hpp [2:3]
+ boost/spirit/home/support/char_encoding/unicode/category_table.hpp [2:2]
+ boost/spirit/home/support/char_encoding/unicode/create_tables.cpp [2:2]
+ boost/spirit/home/support/char_encoding/unicode/create_tables.cpp [450:450]
+ boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp [2:2]
+ boost/spirit/home/support/char_encoding/unicode/query.hpp [2:2]
+ boost/spirit/home/support/char_encoding/unicode/script_table.hpp [2:2]
+ boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp [2:2]
+ boost/spirit/home/support/char_set/basic_chset.hpp [2:4]
+ boost/spirit/home/support/char_set/range.hpp [2:2]
+ boost/spirit/home/support/char_set/range_functions.hpp [2:2]
+ boost/spirit/home/support/char_set/range_run.hpp [2:2]
+ boost/spirit/home/support/char_set/range_run_impl.hpp [2:2]
+ boost/spirit/home/support/container.hpp [2:4]
+ boost/spirit/home/support/context.hpp [2:4]
+ boost/spirit/home/support/detail/as_variant.hpp [2:2]
+ boost/spirit/home/support/detail/get_encoding.hpp [1:2]
+ boost/spirit/home/support/detail/pow10.hpp [2:4]
+ boost/spirit/home/support/detail/sign.hpp [2:4]
+ boost/spirit/home/support/detail/what_function.hpp [2:2]
+ boost/spirit/home/support/extended_variant.hpp [2:2]
+ boost/spirit/home/support/info.hpp [2:2]
+ boost/spirit/home/support/iterators/line_pos_iterator.hpp [2:4]
+ boost/spirit/home/support/lazy.hpp [2:2]
+ boost/spirit/home/support/nonterminal/expand_arg.hpp [2:2]
+ boost/spirit/home/support/nonterminal/extract_param.hpp [2:4]
+ boost/spirit/home/support/nonterminal/locals.hpp [2:3]
+ boost/spirit/home/support/sequence_base_id.hpp [2:2]
+ boost/spirit/home/support/string_traits.hpp [2:4]
+ boost/spirit/home/support/terminal.hpp [2:4]
+ boost/spirit/home/support/terminal_expression.hpp [2:4]
+ boost/spirit/home/support/unused.hpp [2:3]
+ boost/spirit/home/support/utf8.hpp [2:2]
+ boost/spirit/home/support/utree.hpp [2:2]
+ boost/spirit/home/support/utree/detail/utree_detail1.hpp [2:4]
+ boost/spirit/home/support/utree/detail/utree_detail2.hpp [2:4]
+ boost/spirit/home/support/utree/operators.hpp [2:4]
+ boost/spirit/home/support/utree/utree.hpp [2:4]
+ boost/spirit/home/support/utree/utree_traits.hpp [2:4]
+ boost/spirit/home/x3/binary/binary.hpp [2:3]
+ boost/spirit/home/x3/directive/repeat.hpp [2:4]
+ boost/spirit/home/x3/version.hpp [2:4]
+ boost/spirit/include/karma.hpp [2:4]
+ boost/spirit/include/karma_action.hpp [2:4]
+ boost/spirit/include/karma_alternative.hpp [2:4]
+ boost/spirit/include/karma_and_predicate.hpp [2:4]
+ boost/spirit/include/karma_attr_cast.hpp [2:4]
+ boost/spirit/include/karma_auto.hpp [2:4]
+ boost/spirit/include/karma_auxiliary.hpp [2:4]
+ boost/spirit/include/karma_binary.hpp [2:4]
+ boost/spirit/include/karma_bool.hpp [2:4]
+ boost/spirit/include/karma_buffer.hpp [2:4]
+ boost/spirit/include/karma_center_alignment.hpp [2:4]
+ boost/spirit/include/karma_char.hpp [2:4]
+ boost/spirit/include/karma_char_.hpp [2:4]
+ boost/spirit/include/karma_char_class.hpp [2:4]
+ boost/spirit/include/karma_columns.hpp [2:4]
+ boost/spirit/include/karma_delimit.hpp [2:4]
+ boost/spirit/include/karma_directive.hpp [2:4]
+ boost/spirit/include/karma_domain.hpp [2:4]
+ boost/spirit/include/karma_eol.hpp [2:4]
+ boost/spirit/include/karma_eps.hpp [2:4]
+ boost/spirit/include/karma_format.hpp [2:4]
+ boost/spirit/include/karma_format_attr.hpp [2:4]
+ boost/spirit/include/karma_format_auto.hpp [2:4]
+ boost/spirit/include/karma_generate.hpp [2:4]
+ boost/spirit/include/karma_generate_attr.hpp [2:4]
+ boost/spirit/include/karma_generate_auto.hpp [2:4]
+ boost/spirit/include/karma_int.hpp [2:4]
+ boost/spirit/include/karma_kleene.hpp [2:4]
+ boost/spirit/include/karma_lazy.hpp [2:4]
+ boost/spirit/include/karma_left_alignment.hpp [2:4]
+ boost/spirit/include/karma_list.hpp [2:4]
+ boost/spirit/include/karma_maxwidth.hpp [2:4]
+ boost/spirit/include/karma_no_delimit.hpp [2:4]
+ boost/spirit/include/karma_nonterminal.hpp [2:4]
+ boost/spirit/include/karma_not_predicate.hpp [2:4]
+ boost/spirit/include/karma_numeric.hpp [2:4]
+ boost/spirit/include/karma_omit.hpp [2:4]
+ boost/spirit/include/karma_operator.hpp [2:4]
+ boost/spirit/include/karma_optional.hpp [2:4]
+ boost/spirit/include/karma_phoenix_attributes.hpp [2:4]
+ boost/spirit/include/karma_plus.hpp [2:4]
+ boost/spirit/include/karma_real.hpp [2:4]
+ boost/spirit/include/karma_repeat.hpp [2:4]
+ boost/spirit/include/karma_right_alignment.hpp [2:4]
+ boost/spirit/include/karma_sequence.hpp [2:4]
+ boost/spirit/include/karma_stream.hpp [2:4]
+ boost/spirit/include/karma_strict_relaxed.hpp [2:4]
+ boost/spirit/include/karma_string.hpp [2:4]
+ boost/spirit/include/karma_symbols.hpp [2:4]
+ boost/spirit/include/karma_uint.hpp [2:4]
+ boost/spirit/include/karma_upper_lower_case.hpp [2:4]
+ boost/spirit/include/karma_verbatim.hpp [2:4]
+ boost/spirit/include/karma_what.hpp [2:4]
+ boost/spirit/include/lex.hpp [2:4]
+ boost/spirit/include/lex_domain.hpp [2:4]
+ boost/spirit/include/lex_lexer.hpp [2:4]
+ boost/spirit/include/lex_lexertl.hpp [2:4]
+ boost/spirit/include/lex_lexertl_position_token.hpp [2:4]
+ boost/spirit/include/lex_lexertl_token.hpp [2:4]
+ boost/spirit/include/lex_static_lexertl.hpp [2:4]
+ boost/spirit/include/lex_tokenize_and_parse.hpp [2:4]
+ boost/spirit/include/phoenix.hpp [2:4]
+ boost/spirit/include/phoenix_algorithm.hpp [2:4]
+ boost/spirit/include/phoenix_bind.hpp [2:4]
+ boost/spirit/include/phoenix_container.hpp [2:4]
+ boost/spirit/include/phoenix_core.hpp [2:4]
+ boost/spirit/include/phoenix_function.hpp [2:4]
+ boost/spirit/include/phoenix_fusion.hpp [2:4]
+ boost/spirit/include/phoenix_limits.hpp [2:4]
+ boost/spirit/include/phoenix_object.hpp [2:4]
+ boost/spirit/include/phoenix_operator.hpp [2:4]
+ boost/spirit/include/phoenix_scope.hpp [2:4]
+ boost/spirit/include/phoenix_statement.hpp [2:4]
+ boost/spirit/include/phoenix_stl.hpp [2:4]
+ boost/spirit/include/phoenix_version.hpp [2:4]
+ boost/spirit/include/qi.hpp [2:4]
+ boost/spirit/include/qi_action.hpp [2:4]
+ boost/spirit/include/qi_alternative.hpp [2:4]
+ boost/spirit/include/qi_and_predicate.hpp [2:4]
+ boost/spirit/include/qi_as_string.hpp [2:4]
+ boost/spirit/include/qi_attr.hpp [2:4]
+ boost/spirit/include/qi_attr_cast.hpp [2:4]
+ boost/spirit/include/qi_auto.hpp [2:4]
+ boost/spirit/include/qi_auxiliary.hpp [2:4]
+ boost/spirit/include/qi_binary.hpp [2:4]
+ boost/spirit/include/qi_bool.hpp [2:4]
+ boost/spirit/include/qi_char.hpp [2:4]
+ boost/spirit/include/qi_char_.hpp [2:4]
+ boost/spirit/include/qi_char_class.hpp [2:4]
+ boost/spirit/include/qi_core.hpp [2:4]
+ boost/spirit/include/qi_difference.hpp [2:4]
+ boost/spirit/include/qi_directive.hpp [2:4]
+ boost/spirit/include/qi_domain.hpp [2:4]
+ boost/spirit/include/qi_eoi.hpp [2:4]
+ boost/spirit/include/qi_eol.hpp [2:4]
+ boost/spirit/include/qi_eps.hpp [2:4]
+ boost/spirit/include/qi_expect.hpp [2:4]
+ boost/spirit/include/qi_grammar.hpp [2:4]
+ boost/spirit/include/qi_hold.hpp [2:4]
+ boost/spirit/include/qi_int.hpp [2:4]
+ boost/spirit/include/qi_kleene.hpp [2:4]
+ boost/spirit/include/qi_lazy.hpp [2:4]
+ boost/spirit/include/qi_lexeme.hpp [2:4]
+ boost/spirit/include/qi_list.hpp [2:4]
+ boost/spirit/include/qi_lit.hpp [2:4]
+ boost/spirit/include/qi_match.hpp [2:4]
+ boost/spirit/include/qi_match_attr.hpp [2:4]
+ boost/spirit/include/qi_match_auto.hpp [2:4]
+ boost/spirit/include/qi_no_case.hpp [2:4]
+ boost/spirit/include/qi_nonterminal.hpp [2:4]
+ boost/spirit/include/qi_not_predicate.hpp [2:4]
+ boost/spirit/include/qi_numeric.hpp [2:4]
+ boost/spirit/include/qi_omit.hpp [2:4]
+ boost/spirit/include/qi_operator.hpp [2:4]
+ boost/spirit/include/qi_optional.hpp [2:4]
+ boost/spirit/include/qi_parse.hpp [2:4]
+ boost/spirit/include/qi_parse_attr.hpp [2:4]
+ boost/spirit/include/qi_parse_auto.hpp [2:4]
+ boost/spirit/include/qi_permutation.hpp [2:4]
+ boost/spirit/include/qi_plus.hpp [2:4]
+ boost/spirit/include/qi_raw.hpp [2:4]
+ boost/spirit/include/qi_real.hpp [2:4]
+ boost/spirit/include/qi_repeat.hpp [2:4]
+ boost/spirit/include/qi_rule.hpp [2:4]
+ boost/spirit/include/qi_sequence.hpp [2:4]
+ boost/spirit/include/qi_sequential_or.hpp [2:4]
+ boost/spirit/include/qi_skip.hpp [2:4]
+ boost/spirit/include/qi_stream.hpp [2:4]
+ boost/spirit/include/qi_string.hpp [2:4]
+ boost/spirit/include/qi_symbols.hpp [2:4]
+ boost/spirit/include/qi_uint.hpp [2:4]
+ boost/spirit/include/qi_what.hpp [2:4]
+ boost/spirit/include/support.hpp [2:4]
+ boost/spirit/include/support_any.hpp [2:4]
+ boost/spirit/include/support_any_if.hpp [2:4]
+ boost/spirit/include/support_any_if_ns.hpp [2:4]
+ boost/spirit/include/support_any_if_ns_so.hpp [2:4]
+ boost/spirit/include/support_any_ns.hpp [2:4]
+ boost/spirit/include/support_any_ns_so.hpp [2:4]
+ boost/spirit/include/support_argument.hpp [2:4]
+ boost/spirit/include/support_ascii.hpp [2:4]
+ boost/spirit/include/support_attributes.hpp [2:4]
+ boost/spirit/include/support_char_class.hpp [2:4]
+ boost/spirit/include/support_iso8859_1.hpp [2:4]
+ boost/spirit/include/support_istream_iterator.hpp [2:4]
+ boost/spirit/include/support_locals.hpp [2:4]
+ boost/spirit/include/support_look_ahead.hpp [2:4]
+ boost/spirit/include/support_modify.hpp [2:4]
+ boost/spirit/include/support_multi_pass.hpp [2:4]
+ boost/spirit/include/support_multi_pass_fwd.hpp [2:4]
+ boost/spirit/include/support_standard.hpp [2:4]
+ boost/spirit/include/support_standard_wide.hpp [2:4]
+ boost/spirit/include/support_string_traits.hpp [2:4]
+ boost/spirit/include/support_unused.hpp [2:4]
+ boost/spirit/include/version.hpp [2:4]
+ boost/spirit/repository/home/karma.hpp [1:2]
+ boost/spirit/repository/home/karma/directive.hpp [1:2]
+ boost/spirit/repository/home/karma/nonterminal.hpp [1:3]
+ boost/spirit/repository/home/karma/nonterminal/subrule.hpp [1:3]
+ boost/spirit/repository/home/qi.hpp [1:2]
+ boost/spirit/repository/home/qi/directive.hpp [1:2]
+ boost/spirit/repository/home/qi/directive/distinct.hpp [1:3]
+ boost/spirit/repository/home/qi/directive/kwd.hpp [2:3]
+ boost/spirit/repository/home/qi/nonterminal.hpp [1:3]
+ boost/spirit/repository/home/qi/nonterminal/subrule.hpp [2:3]
+ boost/spirit/repository/home/qi/operator.hpp [1:3]
+ boost/spirit/repository/home/qi/operator/keywords.hpp [2:3]
+ boost/spirit/repository/home/qi/primitive.hpp [1:2]
+ boost/spirit/repository/include/karma.hpp [2:4]
+ boost/spirit/repository/include/karma_confix.hpp [2:4]
+ boost/spirit/repository/include/karma_directive.hpp [2:4]
+ boost/spirit/repository/include/karma_nonterminal.hpp [2:5]
+ boost/spirit/repository/include/karma_subrule.hpp [2:5]
+ boost/spirit/repository/include/qi.hpp [2:4]
+ boost/spirit/repository/include/qi_confix.hpp [2:4]
+ boost/spirit/repository/include/qi_directive.hpp [2:4]
+ boost/spirit/repository/include/qi_distinct.hpp [2:4]
+ boost/spirit/repository/include/qi_flush_multi_pass.hpp [2:4]
+ boost/spirit/repository/include/qi_iter_pos.hpp [2:4]
+ boost/spirit/repository/include/qi_keywords.hpp [2:5]
+ boost/spirit/repository/include/qi_kwd.hpp [2:5]
+ boost/spirit/repository/include/qi_kwd.hpp [21:24]
+ boost/spirit/repository/include/qi_primitive.hpp [2:4]
+ boost/spirit/repository/include/qi_subrule.hpp [2:5]
+ boost/spirit/version.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 49f4a36bb0a21c79325499a364e4562a
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2001-2010 Hartmut Kaiser
+ Copyright (c) 2010 Bryce Lelbach
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/include/karma_as.hpp [2:5]
+ boost/spirit/include/qi_as.hpp [2:5]
+ boost/spirit/include/support_line_pos_iterator.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4a060e80d859c7e83ba0c643ebbf6487
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/gcc.hpp [1:9]
+ boost/config/platform/bsd.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4a2a96991e1c16ba5bf1e9f8b0fbe7d2
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2004 Gerald I. Evenden
+ // Copyright (c) 2012 Martin Raspaud
+ // See also (section 4.4.3.2):
+ // http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/geos.hpp [26:29]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4a4c85d50d7786e732eb8f9d7ce88a13
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2007 Andrew Sutton
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/detail/geodesic.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4a4fbc450e95f537c721c3233d392cc2
+BELONGS ya.make
+ License text:
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002-2003 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval/arith.hpp [3:4]
+ boost/numeric/interval/arith2.hpp [7:7]
+ boost/numeric/interval/interval.hpp [3:3]
+ boost/numeric/interval/limits.hpp [3:4]
+ boost/numeric/interval/rounded_arith.hpp [3:3]
+ boost/numeric/interval/rounded_transc.hpp [3:3]
+ boost/numeric/interval/rounding.hpp [3:3]
+ boost/numeric/interval/utility.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4a821e5758b93634e3a4ab4a06284e40
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015-2017 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/formulas/andoyer_inverse.hpp [5:5]
+ boost/geometry/formulas/area_formulas.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4aa8761b7714a5e9baf4ca567e1fc644
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function_output_iterator.hpp at line 3
+ License text:
+ // (C) Copyright Andrey Semashev 2017.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function_output_iterator.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4ad7fd89f16a988c974121eaf0fbfd94
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/core/no_exceptions_support.hpp at line 11
+ License text:
+ // (C) Copyright 2004 Pavel Vozenilek.
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/no_exceptions_support.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4b3a6c1fe0a4a17b8d5433d346ee3069
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2009-2012 Anthony Williams
+ // (C) Copyright 2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/scoped_thread.hpp [4:5]
+ boost/thread/thread_functors.hpp [4:5]
+ boost/thread/thread_guard.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4b73115721ced28727c2b8b4f4a85abc
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/lightweight_test_report.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4b76d293e7e0b07c0269a1e8929c4f9a
+BELONGS libs/filesystem/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/filesystem/src/portability.cpp at line 5
+ License text:
+ // Copyright 2002-2005 Beman Dawes
+ // Use, modification, and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/filesystem/src/portability.cpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4bcc7787f0424f3d32f66485fdb7a1dd
+BELONGS ya.make
+ License text:
+ // (C) Copyright Brian Kuhl 2016.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/diab.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4c05b98b305186bded685dc5e858e190
+BELONGS ya.make
+ License text:
+ // Copyright 2007 David Jenkins.
+ // Copyright 2007 Eric Niebler.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/xpressive/detail/utility/symbols.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4c2f4dc3c4ca9b711516d642e24bae0f
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2012 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/support/traits/make_attribute.hpp [2:4]
+ boost/spirit/home/x3/support/traits/transform_attribute.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4c74a8a617981a115b83571d3d86df10
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/attribute.hpp [2:4]
+ boost/spirit/home/classic/attribute/closure.hpp [2:4]
+ boost/spirit/home/classic/attribute/closure_context.hpp [2:4]
+ boost/spirit/home/classic/core/assert.hpp [2:4]
+ boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp [2:4]
+ boost/spirit/home/classic/core/non_terminal/parser_context.hpp [2:4]
+ boost/spirit/home/classic/core/non_terminal/subrule.hpp [2:4]
+ boost/spirit/home/classic/debug.hpp [2:4]
+ boost/spirit/home/classic/debug/impl/parser_names.ipp [2:4]
+ boost/spirit/home/classic/debug/minimal.hpp [2:4]
+ boost/spirit/home/classic/debug/parser_names.hpp [2:4]
+ boost/spirit/home/classic/meta/as_parser.hpp [2:4]
+ boost/spirit/home/classic/meta/fundamental.hpp [2:3]
+ boost/spirit/home/classic/meta/impl/fundamental.ipp [2:3]
+ boost/spirit/home/classic/meta/impl/refactoring.ipp [2:3]
+ boost/spirit/home/classic/meta/impl/traverse.ipp [2:4]
+ boost/spirit/home/classic/meta/refactoring.hpp [2:3]
+ boost/spirit/home/classic/meta/traverse.hpp [2:4]
+ boost/spirit/home/classic/utility/confix.hpp [2:3]
+ boost/spirit/home/classic/utility/impl/confix.ipp [2:3]
+ boost/spirit/home/classic/utility/impl/escape_char.ipp [2:4]
+ boost/spirit/home/classic/utility/impl/lists.ipp [2:3]
+ boost/spirit/home/classic/utility/impl/regex.ipp [2:3]
+ boost/spirit/home/classic/utility/lists.hpp [2:3]
+ boost/spirit/home/classic/utility/regex.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4c7e1f597f1997587410c32f9a6d6fdb
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2005 Aaron Windsor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/max_cardinality_matching.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4cf14bcc6afe3ad08dfd547e89ac0920
+BELONGS ya.make
+ License text:
+ // Copyright 2010 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/loop_erased_random_walk.hpp [1:1]
+ boost/graph/random_spanning_tree.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4d01e73e2dcbf51faefedb12549edd5b
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003 Eric Friedman
+ // Copyright (c) 2015-2016 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/forced_return.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4d10949f0d1cde0db83ea5d5329e99ec
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/default_ops.hpp at line 4, boost/multiprecision/detail/et_ops.hpp at line 4, boost/multiprecision/detail/functions/constants.hpp at line 3, boost/multiprecision/detail/functions/trig.hpp at line 4, boost/multiprecision/detail/generic_interconvert.hpp at line 4, boost/multiprecision/detail/number_base.hpp at line 4, boost/multiprecision/gmp.hpp at line 4, boost/multiprecision/mpfi.hpp at line 4, boost/multiprecision/mpfr.hpp at line 4, boost/multiprecision/number.hpp at line 4, boost/multiprecision/rational_adaptor.hpp at line 4, boost/multiprecision/tommath.hpp at line 4
+ License text:
+ // Copyright 2011 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/detail/default_ops.hpp [2:4]
+ boost/multiprecision/detail/et_ops.hpp [2:4]
+ boost/multiprecision/detail/functions/constants.hpp [1:3]
+ boost/multiprecision/detail/functions/trig.hpp [2:5]
+ boost/multiprecision/detail/generic_interconvert.hpp [2:4]
+ boost/multiprecision/detail/number_base.hpp [2:4]
+ boost/multiprecision/gmp.hpp [2:4]
+ boost/multiprecision/mpfi.hpp [2:4]
+ boost/multiprecision/mpfr.hpp [2:4]
+ boost/multiprecision/number.hpp [2:4]
+ boost/multiprecision/rational_adaptor.hpp [2:4]
+ boost/multiprecision/tommath.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4d26b7ae91cf6f8491cee13434ff5797
+BELONGS ya.make
+ License text:
+ * Copyright (c) 1996
+ * Silicon Graphics Computer Systems, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/algorithm.hpp [19:20]
+ boost/detail/binary_search.hpp [17:18]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4d26b906dcfafbac2938fc9f553e8765
+BELONGS libs/filesystem/ya.make
+ License text:
+ // Copyright Beman Dawes 2008, 2009
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/filesystem/src/path_traits.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4db4957d3d52be4c9de2df56f877800f
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2017.
+ // Copyright Nick Thompson 2017.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/quadrature/gauss_kronrod.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4dd0817dd612e55b1dd91a830dc51207
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2010 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/lex/primitives.hpp [1:1]
+ boost/spirit/include/karma_as.hpp [2:5]
+ boost/spirit/include/qi_as.hpp [2:5]
+ boost/spirit/include/support_line_pos_iterator.hpp [2:5]
+ boost/spirit/repository/include/qi_nonterminal.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4df5e60c86e10739c2c2ec25592f4193
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/special_functions/asinh.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/asinh.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4e228b87a974a356041866811c36a2ce
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2010-2011 David Bellot
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/doxydoc.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4e9027c862fbd56baf0b8eecfc598a5a
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2007
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/cygwin_error.hpp [3:3]
+ boost/system/linux_error.hpp [3:3]
+ boost/system/windows_error.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4ead388a4bb56a31d7a3106cdc5eb0f6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/void_cast.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/void_cast.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4ec4f75b23ed6344d1947aa985c282ce
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/vacpp.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4ef1fe58b54acfb9b98d3ce465cd11fe
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/tail.hpp at line 6, boost/accumulators/statistics/tail_variate.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/tail.hpp [4:6]
+ boost/accumulators/statistics/tail_variate.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4f1063140d26ee2fe18bca779ccaef80
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/poly_collection/any_collection.hpp at line 3, boost/poly_collection/any_collection_fwd.hpp at line 3, boost/poly_collection/base_collection.hpp at line 3, boost/poly_collection/base_collection_fwd.hpp at line 3, boost/poly_collection/detail/any_model.hpp at line 3, boost/poly_collection/detail/base_model.hpp at line 3, boost/poly_collection/detail/callable_wrapper.hpp at line 3, boost/poly_collection/detail/function_model.hpp at line 3, boost/poly_collection/detail/is_acceptable.hpp at line 3, boost/poly_collection/detail/is_constructible.hpp at line 3, boost/poly_collection/detail/is_final.hpp at line 3, boost/poly_collection/detail/is_invocable.hpp at line 3, boost/poly_collection/detail/is_nothrow_eq_comparable.hpp at line 3, boost/poly_collection/detail/iterator_impl.hpp at line 3, boost/poly_collection/detail/iterator_traits.hpp at line 3, boost/poly_collection/detail/newdelete_allocator.hpp at line 3, boost/poly_collection/detail/packed_segment.hpp at line 3, boost/poly_collection/detail/poly_collection.hpp at line 3, boost/poly_collection/detail/segment.hpp at line 3, boost/poly_collection/detail/segment_backend.hpp at line 3, boost/poly_collection/detail/segment_split.hpp at line 3, boost/poly_collection/detail/split_segment.hpp at line 3, boost/poly_collection/detail/stride_iterator.hpp at line 3, boost/poly_collection/detail/type_info_map.hpp at line 3, boost/poly_collection/detail/type_restitution.hpp at line 3, boost/poly_collection/detail/value_holder.hpp at line 3, boost/poly_collection/exception.hpp at line 3, boost/poly_collection/function_collection.hpp at line 3
+ License text:
+ /* Copyright 2016-2017 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/poly_collection/any_collection.hpp [1:3]
+ boost/poly_collection/any_collection_fwd.hpp [1:3]
+ boost/poly_collection/base_collection.hpp [1:3]
+ boost/poly_collection/base_collection_fwd.hpp [1:3]
+ boost/poly_collection/detail/any_model.hpp [1:3]
+ boost/poly_collection/detail/base_model.hpp [1:3]
+ boost/poly_collection/detail/callable_wrapper.hpp [1:3]
+ boost/poly_collection/detail/function_model.hpp [1:3]
+ boost/poly_collection/detail/is_acceptable.hpp [1:3]
+ boost/poly_collection/detail/is_constructible.hpp [1:3]
+ boost/poly_collection/detail/is_final.hpp [1:3]
+ boost/poly_collection/detail/is_invocable.hpp [1:3]
+ boost/poly_collection/detail/is_nothrow_eq_comparable.hpp [1:3]
+ boost/poly_collection/detail/iterator_impl.hpp [1:3]
+ boost/poly_collection/detail/iterator_traits.hpp [1:3]
+ boost/poly_collection/detail/newdelete_allocator.hpp [1:3]
+ boost/poly_collection/detail/packed_segment.hpp [1:3]
+ boost/poly_collection/detail/poly_collection.hpp [1:3]
+ boost/poly_collection/detail/segment.hpp [1:3]
+ boost/poly_collection/detail/segment_backend.hpp [1:3]
+ boost/poly_collection/detail/segment_split.hpp [1:3]
+ boost/poly_collection/detail/split_segment.hpp [1:3]
+ boost/poly_collection/detail/stride_iterator.hpp [1:3]
+ boost/poly_collection/detail/type_info_map.hpp [1:3]
+ boost/poly_collection/detail/type_restitution.hpp [1:3]
+ boost/poly_collection/detail/value_holder.hpp [1:3]
+ boost/poly_collection/exception.hpp [1:3]
+ boost/poly_collection/function_collection.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4f11ac86f9301429ed799696ecdddc76
+BELONGS ya.make
+ License text:
+ // Copyright 2002, 2009, 2014 Peter Dimov
+ // Copyright 2008-2009 Frank Mori Hess
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/enable_shared_from_raw.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4f43a7aeacf6672ca74203de5526f7c7
+BELONGS ya.make
+ License text:
+ // Copyright 2005 Douglas Gregor.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/detail/point_to_point.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4f5d57c8559aaf8bf412ae6bc295ec7e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/allocator_utilities.hpp at line 3, boost/multi_index/detail/access_specifier.hpp at line 3, boost/multi_index/detail/adl_swap.hpp at line 3, boost/multi_index/detail/base_type.hpp at line 3, boost/multi_index/detail/converter.hpp at line 3, boost/multi_index/detail/do_not_copy_elements_tag.hpp at line 3, boost/multi_index/detail/duplicates_iterator.hpp at line 3, boost/multi_index/detail/has_tag.hpp at line 3, boost/multi_index/detail/hash_index_args.hpp at line 3, boost/multi_index/detail/index_saver.hpp at line 3, boost/multi_index/detail/invariant_assert.hpp at line 3, boost/multi_index/detail/is_index_list.hpp at line 3, boost/multi_index/detail/iter_adaptor.hpp at line 3, boost/multi_index/detail/modify_key_adaptor.hpp at line 3, boost/multi_index/detail/no_duplicate_tags.hpp at line 3, boost/multi_index/detail/node_type.hpp at line 3, boost/multi_index/detail/ord_index_args.hpp at line 3, boost/multi_index/detail/rnd_index_loader.hpp at line 3, boost/multi_index/detail/safe_mode.hpp at line 3, boost/multi_index/detail/scope_guard.hpp at line 3, boost/multi_index/detail/serialization_version.hpp at line 3, boost/multi_index/detail/uintptr_type.hpp at line 3, boost/multi_index/detail/unbounded.hpp at line 3, boost/multi_index/detail/vartempl_support.hpp at line 3, boost/multi_index/hashed_index_fwd.hpp at line 3, boost/multi_index/identity_fwd.hpp at line 3, boost/multi_index/indexed_by.hpp at line 3, boost/multi_index/key_extractors.hpp at line 3, boost/multi_index/random_access_index_fwd.hpp at line 3, boost/multi_index/safe_mode_errors.hpp at line 3, boost/multi_index/sequenced_index_fwd.hpp at line 3, boost/multi_index/tag.hpp at line 3, boost/multi_index_container_fwd.hpp at line 3
+ License text:
+ /* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/allocator_utilities.hpp [1:3]
+ boost/multi_index/detail/access_specifier.hpp [1:3]
+ boost/multi_index/detail/adl_swap.hpp [1:3]
+ boost/multi_index/detail/base_type.hpp [1:3]
+ boost/multi_index/detail/converter.hpp [1:3]
+ boost/multi_index/detail/do_not_copy_elements_tag.hpp [1:3]
+ boost/multi_index/detail/duplicates_iterator.hpp [1:3]
+ boost/multi_index/detail/has_tag.hpp [1:3]
+ boost/multi_index/detail/hash_index_args.hpp [1:3]
+ boost/multi_index/detail/index_saver.hpp [1:3]
+ boost/multi_index/detail/invariant_assert.hpp [1:3]
+ boost/multi_index/detail/is_index_list.hpp [1:3]
+ boost/multi_index/detail/iter_adaptor.hpp [1:3]
+ boost/multi_index/detail/modify_key_adaptor.hpp [1:3]
+ boost/multi_index/detail/no_duplicate_tags.hpp [1:3]
+ boost/multi_index/detail/node_type.hpp [1:3]
+ boost/multi_index/detail/ord_index_args.hpp [1:3]
+ boost/multi_index/detail/rnd_index_loader.hpp [1:3]
+ boost/multi_index/detail/safe_mode.hpp [1:3]
+ boost/multi_index/detail/scope_guard.hpp [1:3]
+ boost/multi_index/detail/serialization_version.hpp [1:3]
+ boost/multi_index/detail/uintptr_type.hpp [1:3]
+ boost/multi_index/detail/unbounded.hpp [1:3]
+ boost/multi_index/detail/vartempl_support.hpp [1:3]
+ boost/multi_index/hashed_index_fwd.hpp [1:3]
+ boost/multi_index/identity_fwd.hpp [1:3]
+ boost/multi_index/indexed_by.hpp [1:3]
+ boost/multi_index/key_extractors.hpp [1:3]
+ boost/multi_index/random_access_index_fwd.hpp [1:3]
+ boost/multi_index/safe_mode_errors.hpp [1:3]
+ boost/multi_index/sequenced_index_fwd.hpp [1:3]
+ boost/multi_index/tag.hpp [1:3]
+ boost/multi_index_container_fwd.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4f74cd3a2feaee90f0c6c2252b0815e4
+BELONGS ya.make
+ License text:
+ Copyright 2014 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/align/aligned_allocator_adaptor_forward.hpp [2:3]
+ boost/align/aligned_allocator_forward.hpp [2:3]
+ boost/align/alignment_of_forward.hpp [2:3]
+ boost/align/detail/addressof.hpp [2:3]
+ boost/align/detail/align_cxx11.hpp [2:3]
+ boost/align/detail/aligned_alloc_android.hpp [2:3]
+ boost/align/detail/aligned_alloc_macos.hpp [2:3]
+ boost/align/detail/aligned_alloc_msvc.hpp [2:3]
+ boost/align/detail/aligned_alloc_posix.hpp [2:3]
+ boost/align/detail/aligned_alloc_sunos.hpp [2:3]
+ boost/align/detail/alignment_of_clang.hpp [2:3]
+ boost/align/detail/alignment_of_codegear.hpp [2:3]
+ boost/align/detail/alignment_of_cxx11.hpp [2:3]
+ boost/align/detail/alignment_of_gcc.hpp [2:3]
+ boost/align/detail/is_aligned.hpp [2:3]
+ boost/align/detail/is_alignment.hpp [2:3]
+ boost/align/detail/is_alignment_constant.hpp [2:3]
+ boost/align/detail/max_objects.hpp [2:3]
+ boost/align/detail/min_size.hpp [2:3]
+ boost/align/is_aligned.hpp [2:3]
+ boost/make_unique.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4fccd2f436e267451a15bffd06404336
+BELONGS ya.make
+ License text:
+ // Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+ // Copyright 2014 NumScale SAS
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp [2:3]
+ boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp [2:3]
+ boost/numeric/odeint/external/nt2/nt2_resize.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 4feddf5837ec6507c85e2af8198adbd4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function/function_base.hpp at line 5, boost/function/function_template.hpp at line 5, boost/signal.hpp at line 5
+ License text:
+ // Copyright Douglas Gregor 2001-2006. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function/function_base.hpp [3:6]
+ boost/function/function_template.hpp [3:6]
+ boost/signal.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 500287573dfa6dbe158a5293742156c0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit.hpp [2:4]
+ boost/spirit/home/classic/namespace.hpp [2:4]
+ boost/spirit/include/classic.hpp [2:4]
+ boost/spirit/include/classic_actions.hpp [2:4]
+ boost/spirit/include/classic_actor.hpp [2:4]
+ boost/spirit/include/classic_alternative.hpp [2:4]
+ boost/spirit/include/classic_as_parser.hpp [2:4]
+ boost/spirit/include/classic_assert.hpp [2:4]
+ boost/spirit/include/classic_assign_actor.hpp [2:4]
+ boost/spirit/include/classic_assign_key_actor.hpp [2:4]
+ boost/spirit/include/classic_ast.hpp [2:4]
+ boost/spirit/include/classic_ast_fwd.hpp [2:4]
+ boost/spirit/include/classic_attribute.hpp [2:4]
+ boost/spirit/include/classic_basic_chset.hpp [2:4]
+ boost/spirit/include/classic_chset.hpp [2:4]
+ boost/spirit/include/classic_chset_operators.hpp [2:4]
+ boost/spirit/include/classic_clear_actor.hpp [2:4]
+ boost/spirit/include/classic_closure.hpp [2:4]
+ boost/spirit/include/classic_closure_context.hpp [2:4]
+ boost/spirit/include/classic_closure_fwd.hpp [2:4]
+ boost/spirit/include/classic_common.hpp [2:4]
+ boost/spirit/include/classic_common_fwd.hpp [2:4]
+ boost/spirit/include/classic_composite.hpp [2:4]
+ boost/spirit/include/classic_config.hpp [2:4]
+ boost/spirit/include/classic_confix.hpp [2:4]
+ boost/spirit/include/classic_confix_fwd.hpp [2:4]
+ boost/spirit/include/classic_core.hpp [2:4]
+ boost/spirit/include/classic_debug.hpp [2:4]
+ boost/spirit/include/classic_debug_node.hpp [2:4]
+ boost/spirit/include/classic_decrement_actor.hpp [2:4]
+ boost/spirit/include/classic_difference.hpp [2:4]
+ boost/spirit/include/classic_directives.hpp [2:4]
+ boost/spirit/include/classic_distinct.hpp [2:4]
+ boost/spirit/include/classic_distinct_fwd.hpp [2:4]
+ boost/spirit/include/classic_dynamic.hpp [2:4]
+ boost/spirit/include/classic_epsilon.hpp [2:4]
+ boost/spirit/include/classic_erase_actor.hpp [2:4]
+ boost/spirit/include/classic_error_handling.hpp [2:4]
+ boost/spirit/include/classic_escape_char.hpp [2:4]
+ boost/spirit/include/classic_escape_char_fwd.hpp [2:4]
+ boost/spirit/include/classic_exceptions.hpp [2:4]
+ boost/spirit/include/classic_exceptions_fwd.hpp [2:4]
+ boost/spirit/include/classic_exclusive_or.hpp [2:4]
+ boost/spirit/include/classic_file_iterator.hpp [2:4]
+ boost/spirit/include/classic_file_iterator_fwd.hpp [2:4]
+ boost/spirit/include/classic_fixed_size_queue.hpp [2:4]
+ boost/spirit/include/classic_flush_multi_pass.hpp [2:4]
+ boost/spirit/include/classic_for.hpp [2:4]
+ boost/spirit/include/classic_functor_parser.hpp [2:4]
+ boost/spirit/include/classic_fundamental.hpp [2:4]
+ boost/spirit/include/classic_grammar.hpp [2:4]
+ boost/spirit/include/classic_grammar_def.hpp [2:4]
+ boost/spirit/include/classic_grammar_def_fwd.hpp [2:4]
+ boost/spirit/include/classic_if.hpp [2:4]
+ boost/spirit/include/classic_increment_actor.hpp [2:4]
+ boost/spirit/include/classic_insert_at_actor.hpp [2:4]
+ boost/spirit/include/classic_insert_key_actor.hpp [2:4]
+ boost/spirit/include/classic_intersection.hpp [2:4]
+ boost/spirit/include/classic_iterator.hpp [2:4]
+ boost/spirit/include/classic_kleene_star.hpp [2:4]
+ boost/spirit/include/classic_lazy.hpp [2:4]
+ boost/spirit/include/classic_list.hpp [2:4]
+ boost/spirit/include/classic_lists.hpp [2:4]
+ boost/spirit/include/classic_lists_fwd.hpp [2:4]
+ boost/spirit/include/classic_loops.hpp [2:4]
+ boost/spirit/include/classic_match.hpp [2:4]
+ boost/spirit/include/classic_meta.hpp [2:4]
+ boost/spirit/include/classic_minimal.hpp [2:4]
+ boost/spirit/include/classic_multi_pass.hpp [2:4]
+ boost/spirit/include/classic_multi_pass_fwd.hpp [2:4]
+ boost/spirit/include/classic_nil.hpp [2:4]
+ boost/spirit/include/classic_no_actions.hpp [2:4]
+ boost/spirit/include/classic_numerics.hpp [2:4]
+ boost/spirit/include/classic_numerics_fwd.hpp [2:4]
+ boost/spirit/include/classic_operators.hpp [2:4]
+ boost/spirit/include/classic_optional.hpp [2:4]
+ boost/spirit/include/classic_parametric.hpp [2:4]
+ boost/spirit/include/classic_parse_tree.hpp [2:4]
+ boost/spirit/include/classic_parse_tree_fwd.hpp [2:4]
+ boost/spirit/include/classic_parse_tree_utils.hpp [2:4]
+ boost/spirit/include/classic_parser.hpp [2:4]
+ boost/spirit/include/classic_parser_context.hpp [2:4]
+ boost/spirit/include/classic_parser_id.hpp [2:4]
+ boost/spirit/include/classic_parser_names.hpp [2:4]
+ boost/spirit/include/classic_parser_traits.hpp [2:4]
+ boost/spirit/include/classic_position_iterator.hpp [2:4]
+ boost/spirit/include/classic_position_iterator_fwd.hpp [2:4]
+ boost/spirit/include/classic_positive.hpp [2:4]
+ boost/spirit/include/classic_primitives.hpp [2:4]
+ boost/spirit/include/classic_push_back_actor.hpp [2:4]
+ boost/spirit/include/classic_push_front_actor.hpp [2:4]
+ boost/spirit/include/classic_range_run.hpp [2:4]
+ boost/spirit/include/classic_ref_actor.hpp [2:4]
+ boost/spirit/include/classic_ref_const_ref_actor.hpp [2:4]
+ boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp [2:4]
+ boost/spirit/include/classic_ref_const_ref_value_actor.hpp [2:4]
+ boost/spirit/include/classic_ref_value_actor.hpp [2:4]
+ boost/spirit/include/classic_refactoring.hpp [2:4]
+ boost/spirit/include/classic_regex.hpp [2:4]
+ boost/spirit/include/classic_rule.hpp [2:4]
+ boost/spirit/include/classic_rule_alias.hpp [2:4]
+ boost/spirit/include/classic_rule_parser.hpp [2:4]
+ boost/spirit/include/classic_safe_bool.hpp [2:4]
+ boost/spirit/include/classic_scanner.hpp [2:4]
+ boost/spirit/include/classic_scanner_fwd.hpp [2:4]
+ boost/spirit/include/classic_scoped_lock.hpp [2:4]
+ boost/spirit/include/classic_select.hpp [2:4]
+ boost/spirit/include/classic_sequence.hpp [2:4]
+ boost/spirit/include/classic_sequential_and.hpp [2:4]
+ boost/spirit/include/classic_sequential_or.hpp [2:4]
+ boost/spirit/include/classic_skipper.hpp [2:4]
+ boost/spirit/include/classic_skipper_fwd.hpp [2:4]
+ boost/spirit/include/classic_static.hpp [2:4]
+ boost/spirit/include/classic_stored_rule.hpp [2:4]
+ boost/spirit/include/classic_stored_rule_fwd.hpp [2:4]
+ boost/spirit/include/classic_subrule.hpp [2:4]
+ boost/spirit/include/classic_subrule_fwd.hpp [2:4]
+ boost/spirit/include/classic_swap_actor.hpp [2:4]
+ boost/spirit/include/classic_switch.hpp [2:4]
+ boost/spirit/include/classic_symbols.hpp [2:4]
+ boost/spirit/include/classic_symbols_fwd.hpp [2:4]
+ boost/spirit/include/classic_traverse.hpp [2:4]
+ boost/spirit/include/classic_tree_to_xml.hpp [2:4]
+ boost/spirit/include/classic_typeof.hpp [2:4]
+ boost/spirit/include/classic_utility.hpp [2:4]
+ boost/spirit/include/classic_version.hpp [2:4]
+ boost/spirit/include/classic_while.hpp [2:4]
+ boost/spirit/include/phoenix1.hpp [2:4]
+ boost/spirit/include/phoenix1_actor.hpp [2:4]
+ boost/spirit/include/phoenix1_binders.hpp [2:4]
+ boost/spirit/include/phoenix1_casts.hpp [2:4]
+ boost/spirit/include/phoenix1_closures.hpp [2:4]
+ boost/spirit/include/phoenix1_composite.hpp [2:4]
+ boost/spirit/include/phoenix1_functions.hpp [2:4]
+ boost/spirit/include/phoenix1_new.hpp [2:4]
+ boost/spirit/include/phoenix1_operators.hpp [2:4]
+ boost/spirit/include/phoenix1_primitives.hpp [2:4]
+ boost/spirit/include/phoenix1_special_ops.hpp [2:4]
+ boost/spirit/include/phoenix1_statements.hpp [2:4]
+ boost/spirit/include/phoenix1_tuple_helpers.hpp [2:4]
+ boost/spirit/include/phoenix1_tuples.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 500b2cb6ead0ec1a1178db7dd7c679ad
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/has_self_intersections.hpp [3:4]
+ boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp [3:3]
+ boost/geometry/strategies/geographic/mapping_ssf.hpp [3:3]
+ boost/geometry/strategies/spherical/ssf.hpp [3:3]
+ boost/geometry/util/rational.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 505e57a6c98d5fb12126e9ca863e4a06
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Carl Barron
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/string/symbols.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 509d002c338fa5df4220ee8f5ff3629f
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2001 David Abrahams
+ // Copyright (c) 2003-2005 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/mem_fn.hpp [13:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL 50aab16de1a969692255eba9fd21275b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/chrono/chrono_io.hpp at line 7, boost/chrono/clock_string.hpp at line 5, boost/chrono/io/time_point_io.hpp at line 4, boost/chrono/io/timezone.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/chrono_io.hpp [4:7]
+ boost/chrono/clock_string.hpp [2:4]
+ boost/chrono/io/time_point_io.hpp [1:4]
+ boost/chrono/io/timezone.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 50acfc9be7c7713dcd42d5d4a540e9df
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/serialize_ptr_map_adapter.hpp at line 3, boost/ptr_container/detail/serialize_reversible_cont.hpp at line 3, boost/ptr_container/serialize_ptr_array.hpp at line 3, boost/ptr_container/serialize_ptr_container.hpp at line 3, boost/ptr_container/serialize_ptr_deque.hpp at line 3, boost/ptr_container/serialize_ptr_list.hpp at line 3, boost/ptr_container/serialize_ptr_map.hpp at line 3, boost/ptr_container/serialize_ptr_set.hpp at line 3, boost/ptr_container/serialize_ptr_vector.hpp at line 3
+ License text:
+ // Copyright Sebastian Ramacher, 2007.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/detail/serialize_ptr_map_adapter.hpp [1:3]
+ boost/ptr_container/detail/serialize_reversible_cont.hpp [1:3]
+ boost/ptr_container/serialize_ptr_array.hpp [1:3]
+ boost/ptr_container/serialize_ptr_container.hpp [1:3]
+ boost/ptr_container/serialize_ptr_deque.hpp [1:3]
+ boost/ptr_container/serialize_ptr_list.hpp [1:3]
+ boost/ptr_container/serialize_ptr_map.hpp [1:3]
+ boost/ptr_container/serialize_ptr_set.hpp [1:3]
+ boost/ptr_container/serialize_ptr_vector.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 50dda7e3e19313b798039270444f863a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2002 Lars Gullik Bjรธnnes <larsbj@lyx.org>
+ // Copyright 2003-2005 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/atomic_count_gcc.hpp [11:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 50e992784146f3733ac5faebc8581292
+BELONGS libs/chrono/ya.make
+ License text:
+ // Copyright Beman Dawes 2008
+ // Copyright Vicente J. Botet Escriba 2009-2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/chrono/src/chrono.cpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5147c6d809b341ff744da9921c8c3edd
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2009
+ // Copyright Jaap Suter 2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/preprocessed/bcc/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/bitand.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/bitor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/bitxor.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/shift_left.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/shift_right.hpp [2:3]
+ boost/mpl/bitand.hpp [5:6]
+ boost/mpl/bitor.hpp [5:6]
+ boost/mpl/bitwise.hpp [5:6]
+ boost/mpl/bitxor.hpp [5:6]
+ boost/mpl/shift_left.hpp [5:6]
+ boost/mpl/shift_right.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 516975262145468c54f49513bc0bd39b
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2008-10 Anthony Williams
+ // (C) Copyright 2011-2012,2015 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/futures/future_error_code.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 51ff62b4a7415b379ace1babfab872b5
+BELONGS ya.make
+ License text:
+ Copyright 2014-2016 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/align/aligned_allocator_adaptor.hpp [2:3]
+ boost/align/alignment_of.hpp [2:3]
+ boost/align/detail/align.hpp [2:3]
+ boost/align/detail/integral_constant.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 52b28b228c67c76c8b980092f6896c6c
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2011 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2011 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 52d3d0587f7137ef056c8c36337cfe33
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/os/haiku.h at line 5
+ License text:
+ Copyright Jessica Hamilton 2014
+ Copyright Rene Rivera 2014-2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/os/haiku.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 531223174105f7ede345759079c9b0de
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/area.hpp [3:6]
+ boost/geometry/algorithms/assign.hpp [3:6]
+ boost/geometry/algorithms/buffer.hpp [3:5]
+ boost/geometry/algorithms/clear.hpp [3:5]
+ boost/geometry/algorithms/convert.hpp [3:6]
+ boost/geometry/algorithms/correct.hpp [3:6]
+ boost/geometry/algorithms/covered_by.hpp [3:5]
+ boost/geometry/algorithms/crosses.hpp [3:6]
+ boost/geometry/algorithms/detail/as_range.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_box_corners.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_indexed_point.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_values.hpp [3:5]
+ boost/geometry/algorithms/detail/calculate_null.hpp [3:5]
+ boost/geometry/algorithms/detail/calculate_sum.hpp [3:6]
+ boost/geometry/algorithms/detail/centroid/translating_transformer.hpp [3:6]
+ boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp [3:5]
+ boost/geometry/algorithms/detail/convert_point_to_point.hpp [3:5]
+ boost/geometry/algorithms/detail/covered_by/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/covered_by/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/for_each_range.hpp [3:5]
+ boost/geometry/algorithms/detail/multi_modify.hpp [3:5]
+ boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp [3:5]
+ boost/geometry/algorithms/detail/multi_sum.hpp [3:5]
+ boost/geometry/algorithms/detail/point_on_border.hpp [3:5]
+ boost/geometry/algorithms/detail/sections/range_by_section.hpp [3:5]
+ boost/geometry/algorithms/detail/within/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/within/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/within/point_in_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/within/within_no_turns.hpp [3:5]
+ boost/geometry/algorithms/make.hpp [3:5]
+ boost/geometry/algorithms/reverse.hpp [3:6]
+ boost/geometry/algorithms/transform.hpp [3:6]
+ boost/geometry/algorithms/unique.hpp [3:6]
+ boost/geometry/algorithms/within.hpp [3:5]
+ boost/geometry/arithmetic/arithmetic.hpp [3:5]
+ boost/geometry/arithmetic/cross_product.hpp [3:5]
+ boost/geometry/arithmetic/determinant.hpp [3:5]
+ boost/geometry/arithmetic/dot_product.hpp [3:5]
+ boost/geometry/core/access.hpp [3:5]
+ boost/geometry/core/closure.hpp [3:5]
+ boost/geometry/core/coordinate_dimension.hpp [3:5]
+ boost/geometry/core/coordinate_system.hpp [3:5]
+ boost/geometry/core/coordinate_type.hpp [3:5]
+ boost/geometry/core/exterior_ring.hpp [3:5]
+ boost/geometry/core/geometry_id.hpp [3:5]
+ boost/geometry/core/interior_rings.hpp [3:5]
+ boost/geometry/core/interior_type.hpp [3:5]
+ boost/geometry/core/is_areal.hpp [3:5]
+ boost/geometry/core/mutable_range.hpp [3:5]
+ boost/geometry/core/point_order.hpp [3:5]
+ boost/geometry/core/point_type.hpp [3:5]
+ boost/geometry/core/radius.hpp [3:5]
+ boost/geometry/core/reverse_dispatch.hpp [3:5]
+ boost/geometry/core/tag.hpp [3:5]
+ boost/geometry/core/tag_cast.hpp [3:5]
+ boost/geometry/core/tags.hpp [3:5]
+ boost/geometry/core/topological_dimension.hpp [3:5]
+ boost/geometry/geometries/adapted/boost_tuple.hpp [3:5]
+ boost/geometry/geometries/adapted/c_array.hpp [3:5]
+ boost/geometry/geometries/adapted/std_pair_as_segment.hpp [3:5]
+ boost/geometry/geometries/box.hpp [3:5]
+ boost/geometry/geometries/concepts/box_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/check.hpp [3:5]
+ boost/geometry/geometries/concepts/linestring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_linestring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_point_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_polygon_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/polygon_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/ring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/segment_concept.hpp [3:5]
+ boost/geometry/geometries/geometries.hpp [3:5]
+ boost/geometry/geometries/linestring.hpp [3:6]
+ boost/geometry/geometries/multi_linestring.hpp [3:6]
+ boost/geometry/geometries/multi_point.hpp [3:6]
+ boost/geometry/geometries/multi_polygon.hpp [3:6]
+ boost/geometry/geometries/point_xy.hpp [3:5]
+ boost/geometry/geometries/polygon.hpp [3:6]
+ boost/geometry/geometries/register/box.hpp [3:5]
+ boost/geometry/geometries/register/linestring.hpp [3:5]
+ boost/geometry/geometries/register/multi_linestring.hpp [3:5]
+ boost/geometry/geometries/register/multi_point.hpp [3:5]
+ boost/geometry/geometries/register/multi_polygon.hpp [3:5]
+ boost/geometry/geometries/register/point.hpp [3:5]
+ boost/geometry/geometries/register/ring.hpp [3:5]
+ boost/geometry/geometries/register/segment.hpp [3:5]
+ boost/geometry/geometries/ring.hpp [3:6]
+ boost/geometry/geometries/segment.hpp [3:5]
+ boost/geometry/geometries/variant.hpp [3:5]
+ boost/geometry/io/dsv/write.hpp [3:6]
+ boost/geometry/io/io.hpp [3:5]
+ boost/geometry/io/wkt/detail/prefix.hpp [3:5]
+ boost/geometry/io/wkt/detail/wkt_multi.hpp [3:5]
+ boost/geometry/io/wkt/read.hpp [3:6]
+ boost/geometry/io/wkt/stream.hpp [3:5]
+ boost/geometry/io/wkt/wkt.hpp [3:5]
+ boost/geometry/iterators/base.hpp [3:5]
+ boost/geometry/iterators/closing_iterator.hpp [3:5]
+ boost/geometry/iterators/ever_circling_iterator.hpp [3:5]
+ boost/geometry/multi/algorithms/area.hpp [3:5]
+ boost/geometry/multi/algorithms/centroid.hpp [3:5]
+ boost/geometry/multi/algorithms/clear.hpp [3:5]
+ boost/geometry/multi/algorithms/convert.hpp [3:5]
+ boost/geometry/multi/algorithms/correct.hpp [3:5]
+ boost/geometry/multi/algorithms/covered_by.hpp [3:6]
+ boost/geometry/multi/algorithms/detail/for_each_range.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/modify.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/multi_sum.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/point_on_border.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp [3:5]
+ boost/geometry/multi/algorithms/envelope.hpp [3:5]
+ boost/geometry/multi/algorithms/equals.hpp [3:5]
+ boost/geometry/multi/algorithms/for_each.hpp [3:5]
+ boost/geometry/multi/algorithms/length.hpp [3:5]
+ boost/geometry/multi/algorithms/num_geometries.hpp [3:5]
+ boost/geometry/multi/algorithms/num_interior_rings.hpp [3:5]
+ boost/geometry/multi/algorithms/perimeter.hpp [3:5]
+ boost/geometry/multi/algorithms/reverse.hpp [3:5]
+ boost/geometry/multi/algorithms/simplify.hpp [3:5]
+ boost/geometry/multi/algorithms/transform.hpp [3:5]
+ boost/geometry/multi/algorithms/unique.hpp [3:5]
+ boost/geometry/multi/algorithms/within.hpp [3:6]
+ boost/geometry/multi/core/closure.hpp [3:5]
+ boost/geometry/multi/core/geometry_id.hpp [3:5]
+ boost/geometry/multi/core/interior_rings.hpp [3:5]
+ boost/geometry/multi/core/is_areal.hpp [3:5]
+ boost/geometry/multi/core/point_order.hpp [3:5]
+ boost/geometry/multi/core/point_type.hpp [3:5]
+ boost/geometry/multi/core/ring_type.hpp [3:5]
+ boost/geometry/multi/core/tags.hpp [3:5]
+ boost/geometry/multi/core/topological_dimension.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/check.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_point_concept.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp [3:5]
+ boost/geometry/multi/geometries/multi_geometries.hpp [3:5]
+ boost/geometry/multi/geometries/multi_linestring.hpp [3:5]
+ boost/geometry/multi/geometries/multi_point.hpp [3:5]
+ boost/geometry/multi/geometries/multi_polygon.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_linestring.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_point.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_polygon.hpp [3:5]
+ boost/geometry/multi/io/dsv/write.hpp [3:5]
+ boost/geometry/multi/io/wkt/detail/prefix.hpp [3:5]
+ boost/geometry/multi/io/wkt/read.hpp [3:5]
+ boost/geometry/multi/io/wkt/wkt.hpp [3:5]
+ boost/geometry/multi/io/wkt/write.hpp [3:5]
+ boost/geometry/multi/strategies/cartesian/centroid_average.hpp [3:5]
+ boost/geometry/multi/views/detail/range_type.hpp [3:5]
+ boost/geometry/srs/sphere.hpp [3:5]
+ boost/geometry/srs/spheroid.hpp [3:5]
+ boost/geometry/srs/srs.hpp [3:5]
+ boost/geometry/strategies/agnostic/point_in_box_by_side.hpp [3:5]
+ boost/geometry/strategies/area.hpp [3:6]
+ boost/geometry/strategies/cartesian/area.hpp [3:6]
+ boost/geometry/strategies/cartesian/area_surveyor.hpp [3:6]
+ boost/geometry/strategies/cartesian/centroid_average.hpp [3:6]
+ boost/geometry/strategies/cartesian/distance_pythagoras.hpp [3:5]
+ boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp [3:5]
+ boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp [3:5]
+ boost/geometry/strategies/centroid.hpp [3:5]
+ boost/geometry/strategies/compare.hpp [3:5]
+ boost/geometry/strategies/concepts/area_concept.hpp [3:6]
+ boost/geometry/strategies/concepts/centroid_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/convex_hull_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/segment_intersect_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/simplify_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/within_concept.hpp [3:5]
+ boost/geometry/strategies/convex_hull.hpp [3:5]
+ boost/geometry/strategies/covered_by.hpp [3:5]
+ boost/geometry/strategies/default_area_result.hpp [3:6]
+ boost/geometry/strategies/side.hpp [3:5]
+ boost/geometry/strategies/side_info.hpp [3:5]
+ boost/geometry/strategies/strategies.hpp [3:6]
+ boost/geometry/strategies/tags.hpp [3:5]
+ boost/geometry/strategies/transform.hpp [3:5]
+ boost/geometry/strategies/transform/inverse_transformer.hpp [3:5]
+ boost/geometry/strategies/transform/map_transformer.hpp [3:5]
+ boost/geometry/strategies/within.hpp [3:5]
+ boost/geometry/util/add_const_if_c.hpp [3:5]
+ boost/geometry/util/closure_as_bool.hpp [3:5]
+ boost/geometry/util/coordinate_cast.hpp [3:5]
+ boost/geometry/util/for_each_coordinate.hpp [3:5]
+ boost/geometry/util/order_as_direction.hpp [3:5]
+ boost/geometry/util/parameter_type_of.hpp [3:5]
+ boost/geometry/util/promote_floating_point.hpp [3:5]
+ boost/geometry/util/select_calculation_type.hpp [3:5]
+ boost/geometry/util/select_coordinate_type.hpp [3:5]
+ boost/geometry/util/select_most_precise.hpp [3:5]
+ boost/geometry/views/box_view.hpp [3:5]
+ boost/geometry/views/closeable_view.hpp [3:5]
+ boost/geometry/views/detail/normalized_view.hpp [3:5]
+ boost/geometry/views/detail/points_view.hpp [3:5]
+ boost/geometry/views/detail/range_type.hpp [3:5]
+ boost/geometry/views/identity_view.hpp [3:5]
+ boost/geometry/views/reversible_view.hpp [3:5]
+ boost/geometry/views/segment_view.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 537c9bc8b4fb90630a3232d2399c4e8b
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017 Klemens D. Morgenstern
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process/detail/posix/sigchld_service.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 539b3e779233a2ae235b47c1b4055d48
+BELONGS ya.make
+ License text:
+ Copyright 2014-2015 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/align.hpp [2:3]
+ boost/align/align.hpp [2:3]
+ boost/align/aligned_alloc.hpp [2:3]
+ boost/align/aligned_allocator.hpp [2:3]
+ boost/align/aligned_delete.hpp [2:3]
+ boost/align/aligned_delete_forward.hpp [2:3]
+ boost/align/detail/aligned_alloc.hpp [2:3]
+ boost/align/detail/alignment_of.hpp [2:3]
+ boost/align/detail/alignment_of_msvc.hpp [2:3]
+ boost/align/detail/max_align.hpp [2:3]
+ boost/align/detail/max_size.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 53e6b9e3a28e2dccd485973290709372
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/special_functions/acosh.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/acosh.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 53fd4ccd7330e5c849c3b27876af937b
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/support/context.hpp [2:3]
+ boost/spirit/home/x3/support/traits/attribute_category.hpp [2:3]
+ boost/spirit/home/x3/support/traits/attribute_type.hpp [2:3]
+ boost/spirit/home/x3/support/traits/is_range.hpp [2:3]
+ boost/spirit/home/x3/support/traits/is_substitute.hpp [2:3]
+ boost/spirit/home/x3/support/traits/is_variant.hpp [2:3]
+ boost/spirit/home/x3/support/traits/variant_find_substitute.hpp [2:3]
+ boost/spirit/home/x3/support/traits/variant_has_substitute.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5401e26f42b6acd9b403fbb21b3e0d05
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core.hpp [2:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5436f6cfa7ad970fe3000b4e5a4d7591
+BELONGS ya.make
+ License text:
+ /* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/c_local_time_adjustor.hpp [4:6]
+ boost/date_time/c_time.hpp [4:6]
+ boost/date_time/date_clock_device.hpp [4:6]
+ boost/date_time/date_generators.hpp [4:6]
+ boost/date_time/date_parsing.hpp [4:6]
+ boost/date_time/dst_transition_generators.hpp [1:3]
+ boost/date_time/gregorian/parsers.hpp [4:6]
+ boost/date_time/microsec_time_clock.hpp [4:6]
+ boost/date_time/posix_time/posix_time_config.hpp [4:6]
+ boost/date_time/time.hpp [4:6]
+ boost/date_time/time_clock.hpp [4:6]
+ boost/date_time/time_parsing.hpp [4:6]
+ boost/date_time/time_system_split.hpp [4:6]
+ boost/date_time/wrapping_int.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 54505eb07f03e7797ae231f869d8a40e
+BELONGS libs/serialization/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/codecvt_null.hpp at line 14, libs/serialization/src/basic_text_oprimitive.cpp at line 6, libs/serialization/src/basic_text_woprimitive.cpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/codecvt_null.hpp [12:14]
+ libs/serialization/src/basic_text_oprimitive.cpp [4:6]
+ libs/serialization/src/basic_text_woprimitive.cpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 545eafdc9369d5bcc88b165815551f3b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/binary_search.hpp at line 3
+ License text:
+ // Copyright (c) 2000 David Abrahams.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/binary_search.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 54a6b4f4ccedc472d9ace99a2ee5a7df
+BELONGS ya.make
+ License text:
+ // Copyright 2007 Alexandre Courpron
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/function_detector.hpp [16:16]
+ boost/intrusive/detail/function_detector.hpp [16:16]
+
+KEEP COPYRIGHT_SERVICE_LABEL 54ac8d85aa70c2e80d3cd32c49f020f6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container_hash/detail/hash_float.hpp at line 4
+ License text:
+ // Copyright 2005-2012 Daniel James.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container_hash/detail/hash_float.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 54b2da91a0751d0f63e2e371f49db3ff
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/array.hpp at line 6, boost/serialization/array_optimization.hpp at line 6, boost/serialization/array_wrapper.hpp at line 6, boost/serialization/boost_array.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/array.hpp [4:6]
+ boost/serialization/array_optimization.hpp [4:6]
+ boost/serialization/array_wrapper.hpp [4:6]
+ boost/serialization/boost_array.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 54c918145a85409d3cb52ce62e5949ce
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_convertible.hpp [12:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 54f2d52d08b1f1665d9592dca3505a8a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2016 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/formulas/eccentricity_sqr.hpp [3:3]
+ boost/geometry/formulas/gnomonic_intersection.hpp [3:3]
+ boost/geometry/formulas/gnomonic_spheroid.hpp [3:3]
+ boost/geometry/formulas/result_direct.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 55167afaab66d1f9305d04b599518a94
+BELONGS libs/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/impl/test_framework_init_observer.ipp at line 3, boost/test/test_framework_init_observer.hpp at line 3, libs/test/src/test_framework_init_observer.cpp at line 3
+ License text:
+ // (c) Copyright Raffi Enficiaud 2017.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/test/impl/test_framework_init_observer.ipp [1:3]
+ boost/test/test_framework_init_observer.hpp [1:3]
+ libs/test/src/test_framework_init_observer.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 55370d2706d0c4b0defe5ea97850695c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/other/workaround.h at line 4, boost/predef/platform/ios.h at line 4
+ License text:
+ Copyright Rene Rivera 2017
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/other/workaround.h [2:4]
+ boost/predef/platform/ios.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 553dd745e86757a08cb75a0e5c758ba8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/function_input_iterator.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/function_input_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 55b50589a90f6abb0dcaedb86d9ce7ed
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2006
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/bitmask.hpp [3:3]
+ boost/detail/identifier.hpp [3:3]
+ boost/system/system_error.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 55ca623f968febd6fd79198819a49b60
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ // Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lambda/algorithm.hpp [2:3]
+ boost/lambda/numeric.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5643cf41039c657434b05f2553ba3490
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/relate/boundary_checker.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5665aa24d7a6ea916dcdcce7fb0e04a4
+BELONGS libs/serialization/ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/serialization/src/codecvt_null.cpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 568c28c5b395d2cbe887dfbfefcce6c9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012 Oswin Krause
+ // Copyright (c) 2013 Joaquim Duran
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/matrix_vector.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 56b725b9f15bba9b40cf58c1889a032b
+BELONGS ya.make
+ License text:
+ // Copyright 2015 Peter Dimov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/placeholders.hpp [13:14]
+ boost/mp11.hpp [4:4]
+ boost/mp11/detail/mp_map_find.hpp [4:4]
+ boost/mp11/detail/mp_plus.hpp [4:4]
+ boost/mp11/integral.hpp [4:4]
+ boost/mp11/set.hpp [4:4]
+ boost/ptr_container/detail/ptr_container_disable_deprecated.hpp [13:13]
+ boost/smart_ptr/detail/sp_disable_deprecated.hpp [13:13]
+ boost/type_traits/common_type.hpp [5:5]
+ boost/type_traits/copy_cv.hpp [5:5]
+ boost/type_traits/detail/common_arithmetic_type.hpp [5:5]
+ boost/type_traits/detail/common_type_impl.hpp [5:5]
+ boost/type_traits/detail/composite_member_pointer_type.hpp [5:5]
+ boost/type_traits/detail/composite_pointer_type.hpp [5:5]
+ boost/type_traits/detail/mp_defer.hpp [5:5]
+ boost/type_traits/type_identity.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 571fac471d484775627ddc0a5d7a8bf1
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/home/classic/dynamic.hpp [2:5]
+ boost/spirit/home/classic/dynamic/if.hpp [2:5]
+ boost/spirit/home/classic/iterator/impl/position_iterator.ipp [2:5]
+ boost/spirit/home/classic/iterator/position_iterator.hpp [2:5]
+ boost/spirit/home/classic/utility.hpp [2:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 572b131daaeb41ada07b46e9bcc351e8
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005-2010 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/one_bit_color_map.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5743b39c1f0217bca40e868f1beca8ed
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2005-2006.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/hypot.hpp [1:3]
+ boost/math/special_functions/log1p.hpp [1:3]
+ boost/math/tools/fraction.hpp [1:3]
+ boost/math/tools/series.hpp [1:3]
+ boost/math/tools/stats.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 575773811ff587d545b0c47b5cd1e390
+BELONGS ya.make
+ License text:
+ // Copyright Benjamin Sobotta 2012
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/skew_normal.hpp [1:1]
+ boost/math/special_functions/owens_t.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5789ac1ea1cab431bffdc8ab634e3c24
+BELONGS ya.make
+ License text:
+ // Copyright (C) Douglas Gregor 2008
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function/function_fwd.hpp [2:2]
+ boost/function/function_typeof.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 57edbb76525ea1f3bdb3c0226d2bd138
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/sync/windows/named_condition.hpp at line 5, boost/interprocess/sync/windows/named_condition_any.hpp at line 5, boost/interprocess/sync/windows/named_mutex.hpp at line 5, boost/interprocess/sync/windows/named_recursive_mutex.hpp at line 5, boost/interprocess/sync/windows/named_semaphore.hpp at line 5, boost/interprocess/sync/windows/named_sync.hpp at line 5, boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp at line 5, boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp at line 5, boost/interprocess/sync/windows/winapi_wrapper_common.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/sync/windows/named_condition.hpp [3:5]
+ boost/interprocess/sync/windows/named_condition_any.hpp [3:5]
+ boost/interprocess/sync/windows/named_mutex.hpp [3:5]
+ boost/interprocess/sync/windows/named_recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/windows/named_semaphore.hpp [3:5]
+ boost/interprocess/sync/windows/named_sync.hpp [3:5]
+ boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp [3:5]
+ boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp [3:5]
+ boost/interprocess/sync/windows/winapi_wrapper_common.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 586afb33401cfbc0d9c28c9f0b024801
+BELONGS ya.make
+ License text:
+ // Copyright 2005 Jeremy G. Siek
+ // Authors: Jeremy G. Siek
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/adj_list_serialize.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 58d478b39bd1a875647210df9056995b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/wrapper.hpp at line 6
+ License text:
+ // (C) Copyright 2005-2006 Matthias Troyer
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/wrapper.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5910471981114db2b4b957c21d1bfa7d
+BELONGS ya.make
+ License text:
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval.hpp [3:4]
+ boost/numeric/interval/arith.hpp [3:4]
+ boost/numeric/interval/compare/explicit.hpp [3:4]
+ boost/numeric/interval/detail/bcc_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/bugs.hpp [3:4]
+ boost/numeric/interval/detail/c99_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/c99sub_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/ppc_rounding_control.hpp [3:5]
+ boost/numeric/interval/detail/sparc_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/x86_rounding_control.hpp [3:4]
+ boost/numeric/interval/detail/x86gcc_rounding_control.hpp [3:4]
+ boost/numeric/interval/limits.hpp [3:4]
+ boost/numeric/interval/transc.hpp [3:4]
+ boost/numeric/interval/utility.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 591904c44c8bfb3a6e54db322f25b723
+BELONGS ya.make
+ License text:
+ Copyright (c) 2016 Modified Work Barrett Adair
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/callable_traits/detail/unguarded/function_ptr.hpp [2:2]
+ boost/callable_traits/detail/unguarded/function_ptr_3.hpp [2:2]
+ boost/callable_traits/detail/unguarded/function_ptr_varargs.hpp [2:2]
+ boost/callable_traits/detail/unguarded/function_ptr_varargs_3.hpp [2:2]
+ boost/callable_traits/detail/unguarded/pmf.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 591a92ff47bb81394e84f3de5b78215b
+BELONGS ya.make
+ License text:
+ Copyright 2015 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/align/align_down.hpp [2:3]
+ boost/align/align_up.hpp [2:3]
+ boost/align/assume_aligned.hpp [5:6]
+ boost/align/detail/align_down.hpp [2:3]
+ boost/align/detail/align_up.hpp [2:3]
+ boost/align/detail/assume_aligned.hpp [5:6]
+ boost/align/detail/assume_aligned_clang.hpp [2:3]
+ boost/align/detail/assume_aligned_gcc.hpp [5:6]
+ boost/align/detail/assume_aligned_intel.hpp [5:6]
+ boost/align/detail/assume_aligned_msvc.hpp [5:6]
+ boost/align/detail/element_type.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 593dc5957f6dce93881eb7fe8969d3c7
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2005 Matthias Troyer
+ // (C) Copyright 2006 Douglas Gregor <doug.gregor -at- gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/detail/content_oarchive.hpp [1:1]
+ boost/mpi/detail/forward_iprimitive.hpp [1:1]
+ boost/mpi/detail/forward_oprimitive.hpp [1:1]
+ boost/mpi/detail/forward_skeleton_iarchive.hpp [1:1]
+ boost/mpi/detail/forward_skeleton_oarchive.hpp [1:1]
+ boost/mpi/detail/ignore_iprimitive.hpp [1:1]
+ boost/mpi/detail/ignore_oprimitive.hpp [1:1]
+ boost/mpi/detail/ignore_skeleton_oarchive.hpp [1:1]
+ boost/mpi/detail/mpi_datatype_cache.hpp [1:1]
+ boost/mpi/detail/mpi_datatype_oarchive.hpp [1:1]
+ boost/mpi/detail/mpi_datatype_primitive.hpp [1:1]
+ boost/mpi/detail/packed_iprimitive.hpp [1:1]
+ boost/mpi/detail/packed_oprimitive.hpp [1:1]
+ boost/mpi/detail/text_skeleton_oarchive.hpp [1:1]
+ boost/mpi/packed_iarchive.hpp [1:2]
+ boost/mpi/packed_oarchive.hpp [1:2]
+ boost/mpi/skeleton_and_content.hpp [1:2]
+ boost/serialization/collection_size_type.hpp [4:6]
+ boost/serialization/valarray.hpp [12:14]
+ boost/serialization/vector.hpp [12:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL 595319185a88d46351ddfb060dbf8fde
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2003-2004
+ // Copyright David Abrahams 2003-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/inserter_algorithm.hpp [5:6]
+ boost/mpl/aux_/order_impl.hpp [5:6]
+ boost/mpl/back_inserter.hpp [5:6]
+ boost/mpl/copy.hpp [5:6]
+ boost/mpl/copy_if.hpp [5:6]
+ boost/mpl/front_inserter.hpp [5:6]
+ boost/mpl/has_key.hpp [5:6]
+ boost/mpl/has_key_fwd.hpp [5:6]
+ boost/mpl/inserter.hpp [5:6]
+ boost/mpl/key_type.hpp [5:6]
+ boost/mpl/key_type_fwd.hpp [5:6]
+ boost/mpl/map/aux_/at_impl.hpp [5:6]
+ boost/mpl/map/aux_/begin_end_impl.hpp [5:6]
+ boost/mpl/map/aux_/clear_impl.hpp [5:6]
+ boost/mpl/map/aux_/erase_impl.hpp [5:6]
+ boost/mpl/map/aux_/erase_key_impl.hpp [5:6]
+ boost/mpl/map/aux_/has_key_impl.hpp [5:6]
+ boost/mpl/map/aux_/insert_impl.hpp [5:6]
+ boost/mpl/map/aux_/item.hpp [5:6]
+ boost/mpl/map/aux_/iterator.hpp [5:6]
+ boost/mpl/map/aux_/key_type_impl.hpp [5:6]
+ boost/mpl/map/aux_/map0.hpp [5:6]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map10.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map20.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map30.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map40.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/plain/map50.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp [2:3]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp [2:3]
+ boost/mpl/map/aux_/tag.hpp [5:6]
+ boost/mpl/map/aux_/value_type_impl.hpp [5:6]
+ boost/mpl/map/map0.hpp [5:6]
+ boost/mpl/map/map10.hpp [5:6]
+ boost/mpl/map/map20.hpp [5:6]
+ boost/mpl/map/map30.hpp [5:6]
+ boost/mpl/map/map40.hpp [5:6]
+ boost/mpl/map/map50.hpp [5:6]
+ boost/mpl/order.hpp [5:6]
+ boost/mpl/order_fwd.hpp [5:6]
+ boost/mpl/pair_view.hpp [5:6]
+ boost/mpl/remove.hpp [5:6]
+ boost/mpl/remove_if.hpp [5:6]
+ boost/mpl/replace.hpp [5:7]
+ boost/mpl/replace_if.hpp [5:7]
+ boost/mpl/set/aux_/begin_end_impl.hpp [5:6]
+ boost/mpl/set/aux_/clear_impl.hpp [5:6]
+ boost/mpl/set/aux_/erase_impl.hpp [5:6]
+ boost/mpl/set/aux_/erase_key_impl.hpp [5:6]
+ boost/mpl/set/aux_/has_key_impl.hpp [5:6]
+ boost/mpl/set/aux_/insert_impl.hpp [5:6]
+ boost/mpl/set/aux_/item.hpp [5:6]
+ boost/mpl/set/aux_/iterator.hpp [5:6]
+ boost/mpl/set/aux_/key_type_impl.hpp [5:6]
+ boost/mpl/set/aux_/preprocessed/plain/set10.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set20.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set30.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set40.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set50.hpp [2:3]
+ boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp [2:3]
+ boost/mpl/set/aux_/set0.hpp [5:6]
+ boost/mpl/set/aux_/tag.hpp [5:6]
+ boost/mpl/set/aux_/value_type_impl.hpp [5:6]
+ boost/mpl/set/set0.hpp [5:6]
+ boost/mpl/set/set0_c.hpp [5:6]
+ boost/mpl/set/set10.hpp [5:6]
+ boost/mpl/set/set10_c.hpp [5:6]
+ boost/mpl/set/set20.hpp [5:6]
+ boost/mpl/set/set20_c.hpp [5:6]
+ boost/mpl/set/set30.hpp [5:6]
+ boost/mpl/set/set30_c.hpp [5:6]
+ boost/mpl/set/set40.hpp [5:6]
+ boost/mpl/set/set40_c.hpp [5:6]
+ boost/mpl/set/set50.hpp [5:6]
+ boost/mpl/set/set50_c.hpp [5:6]
+ boost/mpl/transform.hpp [5:6]
+ boost/mpl/value_type.hpp [5:6]
+ boost/mpl/value_type_fwd.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 596d215980dce936d1d42dadce287430
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/ref.hpp [17:19]
+ boost/intrusive_ptr.hpp [7:7]
+ boost/scoped_array.hpp [4:5]
+ boost/scoped_ptr.hpp [4:5]
+ boost/serialization/detail/shared_ptr_nmt_132.hpp [7:8]
+ boost/shared_array.hpp [7:8]
+ boost/smart_ptr/intrusive_ptr.hpp [7:7]
+ boost/smart_ptr/scoped_array.hpp [4:5]
+ boost/smart_ptr/scoped_ptr.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 599d75ac2b4bb8a11ff470bef1798ec5
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core.hpp [2:8]
+ boost/spirit/home/classic/phoenix/casts.hpp [3:4]
+ boost/spirit/home/classic/phoenix/new.hpp [3:5]
+ boost/spirit/home/classic/utility.hpp [2:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 599e47817ea1a7b6f600dbe2026aadad
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2010
+ // Joerg Walter, Mathias Koch, Gunter Winkler, David Bellot
+ // Copyright (c) 2014, Athanasios Iliopoulos
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/matrix.hpp [2:4]
+ boost/numeric/ublas/vector.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 59ebac4ff1b00b3baca98f0279da51a4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Python Software Foundation; All Rights
+ // Reserved
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/detail/python22_fixed.h [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 59f7375811a04f7a1af214791e9e2591
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2004-2009 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/use_mpi.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5a2ce7c8c2691b2dee1cd71c641d0daf
+BELONGS ya.make
+ License text:
+ Copyright (c) 2009 Chris Hoeppler
+ Copyright (c) 2014 Lee Clagett
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/directive/confix.hpp [2:3]
+ boost/spirit/home/x3/directive/seek.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5a55975c544a17d902b5b7a6165934ba
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2008-10 Anthony Williams
+ // (C) Copyright 2011-2015 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/future.hpp [1:2]
+ boost/thread/futures/future_error.hpp [1:2]
+ boost/thread/futures/future_status.hpp [1:2]
+ boost/thread/futures/is_future_type.hpp [1:2]
+ boost/thread/futures/launch.hpp [1:2]
+ boost/thread/futures/wait_for_all.hpp [1:2]
+ boost/thread/futures/wait_for_any.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5a997291bb89319f64237173cbd354ce
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/decltype.hpp [1:4]
+ boost/typeof/native.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5ab12e05dd6c2ce7bcafaa94b9ccb6e4
+BELONGS ya.make
+ License text:
+ // Copyright 2015 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_erasure/detail/auto_link.hpp [3:3]
+ boost/type_erasure/detail/dynamic_vtable.hpp [3:3]
+ boost/type_erasure/dynamic_any_cast.hpp [3:3]
+ boost/type_erasure/dynamic_binding.hpp [3:3]
+ boost/type_erasure/register_binding.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5ab711ab8144e3652f3ab473e36a4162
+BELONGS ya.make
+ License text:
+ * Date: Thu Dec 06 13:21:54 MST 2007
+ * Copyright: 2007-2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/detail/absolute_path.hpp [8:11]
+ boost/iostreams/detail/adapter/device_adapter.hpp [8:10]
+ boost/iostreams/detail/adapter/filter_adapter.hpp [6:9]
+ boost/iostreams/detail/config/fpos.hpp [8:11]
+ boost/iostreams/detail/config/rtl.hpp [14:16]
+ boost/iostreams/detail/current_directory.hpp [8:11]
+ boost/iostreams/detail/execute.hpp [8:11]
+ boost/iostreams/detail/functional.hpp [8:11]
+ boost/iostreams/detail/restrict_impl.hpp [8:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5ac86f7028be2a8c407bd6184321ac70
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008-2009 Ben Hanson (http://www.benhanson.net/)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/detail/lexer/file_input.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/generate_cpp.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/input.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5acab5fd542f310531a308204d2dd114
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 1994, 2006, 2008
+ // Copyright Vicente J. Botet Escriba 2009-2011
+ // Copyright Christopher Brown 2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/detail/inlined/mac/thread_clock.hpp [3:5]
+ boost/chrono/detail/inlined/posix/thread_clock.hpp [3:4]
+ boost/multiprecision/traits/explicit_conversion.hpp [2:5]
+ boost/multiprecision/traits/is_restricted_conversion.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5ad1faae7d4106b7b5cff4815582e17d
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/home/classic/core.hpp [2:8]
+ boost/spirit/home/classic/iterator.hpp [2:4]
+ boost/spirit/home/classic/tree/ast.hpp [2:4]
+ boost/spirit/home/classic/tree/common.hpp [2:5]
+ boost/spirit/home/classic/tree/parse_tree.hpp [2:4]
+ boost/spirit/home/classic/tree/parse_tree_utils.hpp [2:4]
+ boost/spirit/home/classic/utility.hpp [2:9]
+ boost/spirit/home/classic/utility/impl/escape_char.ipp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5b610a2723cd8f65dd39615a55e76ce7
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2003-2004
+ * Douglas Gregor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals/detail/config.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5b88761341a84ebd8b3d9e49fa0c7b47
+BELONGS libs/log/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/log/config/xopen-source-600/xopen_source_600.cpp at line 4
+ License text:
+ * Copyright Andrey Semashev 2017.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/log/config/xopen-source-600/xopen_source_600.cpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5b90d7dcbdfffd189deaf30fcf6cd55f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/slist.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2004-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/slist.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5ba021a7799c2c0bdb25af2c47755daa
+BELONGS libs/log/ya.make ya.make
+ License text:
+ Copyright Andrey Semashev 2007 - 2015.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/beast/core/detail/cpu_info.hpp [36:36]
+ boost/log/attributes.hpp [2:4]
+ boost/log/attributes/attribute.hpp [2:4]
+ boost/log/attributes/attribute_cast.hpp [2:4]
+ boost/log/attributes/attribute_name.hpp [2:4]
+ boost/log/attributes/attribute_set.hpp [2:4]
+ boost/log/attributes/attribute_value.hpp [2:4]
+ boost/log/attributes/attribute_value_impl.hpp [2:4]
+ boost/log/attributes/attribute_value_set.hpp [2:4]
+ boost/log/attributes/clock.hpp [2:4]
+ boost/log/attributes/constant.hpp [2:4]
+ boost/log/attributes/counter.hpp [2:4]
+ boost/log/attributes/current_process_id.hpp [2:4]
+ boost/log/attributes/current_process_name.hpp [2:4]
+ boost/log/attributes/current_thread_id.hpp [2:4]
+ boost/log/attributes/fallback_policy.hpp [2:4]
+ boost/log/attributes/fallback_policy_fwd.hpp [2:4]
+ boost/log/attributes/function.hpp [2:4]
+ boost/log/attributes/mutable_constant.hpp [2:4]
+ boost/log/attributes/named_scope.hpp [2:4]
+ boost/log/attributes/scoped_attribute.hpp [2:4]
+ boost/log/attributes/time_traits.hpp [2:4]
+ boost/log/attributes/timer.hpp [2:4]
+ boost/log/attributes/value_extraction.hpp [2:4]
+ boost/log/attributes/value_extraction_fwd.hpp [2:4]
+ boost/log/attributes/value_visitation.hpp [2:4]
+ boost/log/attributes/value_visitation_fwd.hpp [2:4]
+ boost/log/common.hpp [2:4]
+ boost/log/core.hpp [2:4]
+ boost/log/core/core.hpp [2:4]
+ boost/log/core/record.hpp [2:4]
+ boost/log/core/record_view.hpp [2:4]
+ boost/log/detail/adaptive_mutex.hpp [2:4]
+ boost/log/detail/asio_fwd.hpp [2:4]
+ boost/log/detail/attr_output_impl.hpp [2:4]
+ boost/log/detail/attr_output_terminal.hpp [2:4]
+ boost/log/detail/attribute_get_value_impl.hpp [2:4]
+ boost/log/detail/attribute_predicate.hpp [2:4]
+ boost/log/detail/cleanup_scope_guard.hpp [2:4]
+ boost/log/detail/code_conversion.hpp [2:4]
+ boost/log/detail/config.hpp [2:4]
+ boost/log/detail/copy_cv.hpp [2:4]
+ boost/log/detail/custom_terminal_spec.hpp [2:4]
+ boost/log/detail/date_time_fmt_gen_traits_fwd.hpp [2:4]
+ boost/log/detail/date_time_format_parser.hpp [2:4]
+ boost/log/detail/decomposed_time.hpp [2:4]
+ boost/log/detail/deduce_char_type.hpp [2:4]
+ boost/log/detail/default_attribute_names.hpp [2:4]
+ boost/log/detail/embedded_string_type.hpp [2:4]
+ boost/log/detail/enqueued_record.hpp [2:4]
+ boost/log/detail/event.hpp [2:4]
+ boost/log/detail/fake_mutex.hpp [2:4]
+ boost/log/detail/footer.hpp [2:4]
+ boost/log/detail/format.hpp [2:4]
+ boost/log/detail/function_traits.hpp [2:4]
+ boost/log/detail/generate_overloads.hpp [2:4]
+ boost/log/detail/header.hpp [2:4]
+ boost/log/detail/id.hpp [2:4]
+ boost/log/detail/is_character_type.hpp [2:4]
+ boost/log/detail/is_ostream.hpp [2:4]
+ boost/log/detail/light_function.hpp [2:4]
+ boost/log/detail/light_function_pp.hpp [2:4]
+ boost/log/detail/light_rw_mutex.hpp [2:4]
+ boost/log/detail/locking_ptr.hpp [2:4]
+ boost/log/detail/locks.hpp [2:4]
+ boost/log/detail/named_scope_fmt_pp.hpp [2:4]
+ boost/log/detail/native_typeof.hpp [2:4]
+ boost/log/detail/parameter_tools.hpp [2:4]
+ boost/log/detail/pp_identity.hpp [2:4]
+ boost/log/detail/process_id.hpp [2:4]
+ boost/log/detail/setup_config.hpp [2:4]
+ boost/log/detail/singleton.hpp [2:4]
+ boost/log/detail/sink_init_helpers.hpp [2:4]
+ boost/log/detail/snprintf.hpp [2:4]
+ boost/log/detail/tagged_integer.hpp [2:4]
+ boost/log/detail/thread_id.hpp [2:4]
+ boost/log/detail/thread_specific.hpp [2:4]
+ boost/log/detail/threadsafe_queue.hpp [2:4]
+ boost/log/detail/timestamp.hpp [2:4]
+ boost/log/detail/trivial_keyword.hpp [2:4]
+ boost/log/detail/unary_function_terminal.hpp [2:4]
+ boost/log/detail/unhandled_exception_count.hpp [2:4]
+ boost/log/detail/value_ref_visitation.hpp [2:4]
+ boost/log/exceptions.hpp [2:4]
+ boost/log/expressions.hpp [2:4]
+ boost/log/expressions/attr.hpp [2:4]
+ boost/log/expressions/attr_fwd.hpp [2:4]
+ boost/log/expressions/filter.hpp [2:4]
+ boost/log/expressions/formatter.hpp [2:4]
+ boost/log/expressions/formatters.hpp [2:4]
+ boost/log/expressions/formatters/c_decorator.hpp [2:4]
+ boost/log/expressions/formatters/char_decorator.hpp [2:4]
+ boost/log/expressions/formatters/csv_decorator.hpp [2:4]
+ boost/log/expressions/formatters/date_time.hpp [2:4]
+ boost/log/expressions/formatters/format.hpp [2:4]
+ boost/log/expressions/formatters/if.hpp [2:4]
+ boost/log/expressions/formatters/named_scope.hpp [2:4]
+ boost/log/expressions/formatters/stream.hpp [2:4]
+ boost/log/expressions/formatters/wrap_formatter.hpp [2:4]
+ boost/log/expressions/formatters/xml_decorator.hpp [2:4]
+ boost/log/expressions/is_keyword_descriptor.hpp [2:4]
+ boost/log/expressions/keyword.hpp [2:4]
+ boost/log/expressions/keyword_fwd.hpp [2:4]
+ boost/log/expressions/message.hpp [2:4]
+ boost/log/expressions/predicates.hpp [2:4]
+ boost/log/expressions/predicates/begins_with.hpp [2:4]
+ boost/log/expressions/predicates/channel_severity_filter.hpp [2:4]
+ boost/log/expressions/predicates/contains.hpp [2:4]
+ boost/log/expressions/predicates/ends_with.hpp [2:4]
+ boost/log/expressions/predicates/has_attr.hpp [2:4]
+ boost/log/expressions/predicates/is_debugger_present.hpp [2:4]
+ boost/log/expressions/predicates/is_in_range.hpp [2:4]
+ boost/log/expressions/predicates/matches.hpp [2:4]
+ boost/log/expressions/record.hpp [2:4]
+ boost/log/keywords/auto_flush.hpp [2:4]
+ boost/log/keywords/channel.hpp [2:4]
+ boost/log/keywords/delimiter.hpp [2:4]
+ boost/log/keywords/depth.hpp [2:4]
+ boost/log/keywords/empty_marker.hpp [2:4]
+ boost/log/keywords/facility.hpp [2:4]
+ boost/log/keywords/file_name.hpp [2:4]
+ boost/log/keywords/filter.hpp [2:4]
+ boost/log/keywords/format.hpp [2:4]
+ boost/log/keywords/ident.hpp [2:4]
+ boost/log/keywords/incomplete_marker.hpp [2:4]
+ boost/log/keywords/ip_version.hpp [2:4]
+ boost/log/keywords/iteration.hpp [2:4]
+ boost/log/keywords/log_name.hpp [2:4]
+ boost/log/keywords/log_source.hpp [2:4]
+ boost/log/keywords/max_files.hpp [2:4]
+ boost/log/keywords/max_size.hpp [2:4]
+ boost/log/keywords/message_file.hpp [2:4]
+ boost/log/keywords/min_free_space.hpp [2:4]
+ boost/log/keywords/open_mode.hpp [2:4]
+ boost/log/keywords/order.hpp [2:4]
+ boost/log/keywords/ordering_window.hpp [2:4]
+ boost/log/keywords/registration.hpp [2:4]
+ boost/log/keywords/rotation_size.hpp [2:4]
+ boost/log/keywords/scan_method.hpp [2:4]
+ boost/log/keywords/severity.hpp [2:4]
+ boost/log/keywords/start_thread.hpp [2:4]
+ boost/log/keywords/target.hpp [2:4]
+ boost/log/keywords/time_based_rotation.hpp [2:4]
+ boost/log/keywords/use_impl.hpp [2:4]
+ boost/log/sinks.hpp [2:4]
+ boost/log/sinks/async_frontend.hpp [2:4]
+ boost/log/sinks/attribute_mapping.hpp [2:4]
+ boost/log/sinks/basic_sink_backend.hpp [2:4]
+ boost/log/sinks/basic_sink_frontend.hpp [2:4]
+ boost/log/sinks/block_on_overflow.hpp [2:4]
+ boost/log/sinks/bounded_fifo_queue.hpp [2:4]
+ boost/log/sinks/bounded_ordering_queue.hpp [2:4]
+ boost/log/sinks/debug_output_backend.hpp [2:4]
+ boost/log/sinks/drop_on_overflow.hpp [2:4]
+ boost/log/sinks/event_log_backend.hpp [2:4]
+ boost/log/sinks/event_log_constants.hpp [2:4]
+ boost/log/sinks/frontend_requirements.hpp [2:4]
+ boost/log/sinks/sink.hpp [2:4]
+ boost/log/sinks/sync_frontend.hpp [2:4]
+ boost/log/sinks/syslog_backend.hpp [2:4]
+ boost/log/sinks/syslog_constants.hpp [2:4]
+ boost/log/sinks/text_file_backend.hpp [2:4]
+ boost/log/sinks/text_multifile_backend.hpp [2:4]
+ boost/log/sinks/text_ostream_backend.hpp [2:4]
+ boost/log/sinks/unbounded_fifo_queue.hpp [2:4]
+ boost/log/sinks/unbounded_ordering_queue.hpp [2:4]
+ boost/log/sinks/unlocked_frontend.hpp [2:4]
+ boost/log/sources/basic_logger.hpp [2:4]
+ boost/log/sources/channel_feature.hpp [2:4]
+ boost/log/sources/channel_logger.hpp [2:4]
+ boost/log/sources/exception_handler_feature.hpp [2:4]
+ boost/log/sources/features.hpp [2:4]
+ boost/log/sources/global_logger_storage.hpp [2:4]
+ boost/log/sources/logger.hpp [2:4]
+ boost/log/sources/record_ostream.hpp [2:4]
+ boost/log/sources/severity_channel_logger.hpp [2:4]
+ boost/log/sources/severity_feature.hpp [2:4]
+ boost/log/sources/severity_logger.hpp [2:4]
+ boost/log/sources/threading_models.hpp [2:4]
+ boost/log/support/date_time.hpp [2:4]
+ boost/log/support/exception.hpp [2:4]
+ boost/log/support/regex.hpp [2:4]
+ boost/log/support/spirit_classic.hpp [2:4]
+ boost/log/support/spirit_qi.hpp [2:4]
+ boost/log/support/std_regex.hpp [2:4]
+ boost/log/support/xpressive.hpp [2:4]
+ boost/log/trivial.hpp [2:4]
+ boost/log/utility/exception_handler.hpp [2:4]
+ boost/log/utility/formatting_ostream.hpp [2:4]
+ boost/log/utility/formatting_ostream_fwd.hpp [2:4]
+ boost/log/utility/functional.hpp [2:4]
+ boost/log/utility/functional/as_action.hpp [2:4]
+ boost/log/utility/functional/begins_with.hpp [2:4]
+ boost/log/utility/functional/bind.hpp [2:4]
+ boost/log/utility/functional/bind_assign.hpp [2:4]
+ boost/log/utility/functional/bind_output.hpp [2:4]
+ boost/log/utility/functional/bind_to_log.hpp [2:4]
+ boost/log/utility/functional/contains.hpp [2:4]
+ boost/log/utility/functional/ends_with.hpp [2:4]
+ boost/log/utility/functional/fun_ref.hpp [2:4]
+ boost/log/utility/functional/in_range.hpp [2:4]
+ boost/log/utility/functional/logical.hpp [2:4]
+ boost/log/utility/functional/matches.hpp [2:4]
+ boost/log/utility/functional/nop.hpp [2:4]
+ boost/log/utility/functional/save_result.hpp [2:4]
+ boost/log/utility/manipulators.hpp [2:4]
+ boost/log/utility/manipulators/add_value.hpp [2:4]
+ boost/log/utility/manipulators/dump.hpp [2:4]
+ boost/log/utility/manipulators/to_log.hpp [2:4]
+ boost/log/utility/once_block.hpp [2:4]
+ boost/log/utility/record_ordering.hpp [2:4]
+ boost/log/utility/setup.hpp [2:4]
+ boost/log/utility/setup/common_attributes.hpp [2:4]
+ boost/log/utility/setup/console.hpp [2:4]
+ boost/log/utility/setup/file.hpp [2:4]
+ boost/log/utility/setup/filter_parser.hpp [2:4]
+ boost/log/utility/setup/formatter_parser.hpp [2:4]
+ boost/log/utility/setup/from_settings.hpp [2:4]
+ boost/log/utility/setup/from_stream.hpp [2:4]
+ boost/log/utility/setup/settings.hpp [2:4]
+ boost/log/utility/setup/settings_parser.hpp [2:4]
+ boost/log/utility/strictest_lock.hpp [2:4]
+ boost/log/utility/string_literal_fwd.hpp [2:4]
+ boost/log/utility/type_dispatch/date_time_types.hpp [2:4]
+ boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp [2:4]
+ boost/log/utility/type_dispatch/standard_types.hpp [2:4]
+ boost/log/utility/type_dispatch/static_type_dispatcher.hpp [2:4]
+ boost/log/utility/type_dispatch/type_dispatcher.hpp [2:4]
+ boost/log/utility/unique_identifier_name.hpp [2:4]
+ boost/log/utility/unused_variable.hpp [2:4]
+ boost/log/utility/value_ref.hpp [2:4]
+ boost/log/utility/value_ref_fwd.hpp [2:4]
+ libs/log/config/visibility/visibility.cpp [2:4]
+ libs/log/config/x86-ext/avx2.cpp [2:4]
+ libs/log/config/x86-ext/ssse3.cpp [2:4]
+ libs/log/src/alignment_gap_between.hpp [2:4]
+ libs/log/src/attribute_name.cpp [2:4]
+ libs/log/src/attribute_set.cpp [2:4]
+ libs/log/src/attribute_set_impl.hpp [2:4]
+ libs/log/src/attribute_value_set.cpp [2:4]
+ libs/log/src/code_conversion.cpp [2:4]
+ libs/log/src/core.cpp [2:4]
+ libs/log/src/date_time_format_parser.cpp [2:4]
+ libs/log/src/default_attribute_names.cpp [2:4]
+ libs/log/src/default_sink.cpp [2:4]
+ libs/log/src/default_sink.hpp [2:4]
+ libs/log/src/dump.cpp [2:4]
+ libs/log/src/dump_avx2.cpp [2:4]
+ libs/log/src/dump_ssse3.cpp [2:4]
+ libs/log/src/event.cpp [2:4]
+ libs/log/src/exceptions.cpp [2:4]
+ libs/log/src/format_parser.cpp [2:4]
+ libs/log/src/global_logger_storage.cpp [2:4]
+ libs/log/src/id_formatting.hpp [2:4]
+ libs/log/src/named_scope.cpp [2:4]
+ libs/log/src/named_scope_format_parser.cpp [2:4]
+ libs/log/src/once_block.cpp [2:4]
+ libs/log/src/process_id.cpp [2:4]
+ libs/log/src/process_name.cpp [2:4]
+ libs/log/src/record_ostream.cpp [2:4]
+ libs/log/src/setup/default_filter_factory.cpp [2:4]
+ libs/log/src/setup/default_filter_factory.hpp [2:4]
+ libs/log/src/setup/default_formatter_factory.cpp [2:4]
+ libs/log/src/setup/default_formatter_factory.hpp [2:4]
+ libs/log/src/setup/filter_parser.cpp [2:4]
+ libs/log/src/setup/formatter_parser.cpp [2:4]
+ libs/log/src/setup/init_from_settings.cpp [2:4]
+ libs/log/src/setup/init_from_stream.cpp [2:4]
+ libs/log/src/setup/matches_relation_factory.cpp [2:4]
+ libs/log/src/setup/parser_utils.cpp [2:4]
+ libs/log/src/setup/parser_utils.hpp [2:4]
+ libs/log/src/setup/settings_parser.cpp [2:4]
+ libs/log/src/severity_level.cpp [2:4]
+ libs/log/src/spirit_encoding.cpp [2:4]
+ libs/log/src/spirit_encoding.hpp [2:4]
+ libs/log/src/stateless_allocator.hpp [2:4]
+ libs/log/src/syslog_backend.cpp [2:4]
+ libs/log/src/text_file_backend.cpp [2:4]
+ libs/log/src/text_multifile_backend.cpp [2:4]
+ libs/log/src/text_ostream_backend.cpp [2:4]
+ libs/log/src/thread_id.cpp [2:4]
+ libs/log/src/thread_specific.cpp [2:4]
+ libs/log/src/threadsafe_queue.cpp [2:4]
+ libs/log/src/timer.cpp [2:4]
+ libs/log/src/trivial.cpp [2:4]
+ libs/log/src/unhandled_exception_count.cpp [2:4]
+ libs/log/src/unique_ptr.hpp [2:4]
+ libs/log/src/windows/debug_output_backend.cpp [2:4]
+ libs/log/src/windows/event_log_backend.cpp [2:4]
+ libs/log/src/windows/event_log_registry.hpp [2:4]
+ libs/log/src/windows/light_rw_mutex.cpp [2:4]
+ libs/log/src/windows/simple_event_log.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5bb192a3ec0466664f95da7b439ee5e7
+BELONGS ya.make
+ License text:
+ // Copyright 2012 Fernando Vilas
+ // 2010 Daniel Trebbien
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/maximum_adjacency_search.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5bc125f7c304158bc8d50edd46156a29
+BELONGS ya.make
+ License text:
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Juan Carlos Arevalo-Baeza
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/utility/functor_parser.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5c0e0f4ecbfc5930fc8af588470713b4
+BELONGS ya.make
+ License text:
+ Copyright (c) 2015 Mario Lang
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/directive/matches.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5c26b4d7fe3c1805cc2c8b0e905940b0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2007 Hartmut Kaiser
+ Revised 2007, Copyright (c) Tobias Schwinger
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/tree/common.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5c2d365acd08b2a111a1df0616d30393
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/statechart/result.hpp at line 6, boost/statechart/simple_state.hpp at line 6, boost/statechart/state_machine.hpp at line 6
+ License text:
+ // Copyright 2002-2010 Andreas Huber Doenni
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/statechart/result.hpp [4:6]
+ boost/statechart/simple_state.hpp [4:6]
+ boost/statechart/state_machine.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5c403ec7fc96b9eeeb8d0d6da8005e84
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/architecture/blackfin.h at line 4, boost/predef/other.h at line 4, boost/predef/other/endian.h at line 4, boost/predef/platform.h at line 4
+ License text:
+ Copyright Rene Rivera 2013-2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/architecture/blackfin.h [2:4]
+ boost/predef/other.h [2:4]
+ boost/predef/other/endian.h [2:4]
+ boost/predef/platform.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5c85c701ea71a691c59490ec39b34ede
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp at line 8, boost/interprocess/smart_ptr/detail/shared_count.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp [5:8]
+ boost/interprocess/smart_ptr/detail/shared_count.hpp [5:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5c8ac41153fe8e9daf8181b70c9bcb2b
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/stdlib/roguewave.hpp [1:6]
+ boost/iterator/permutation_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5ca418207a9a9e57884eb84192e8056e
+BELONGS libs/filesystem/ya.make libs/program_options/ya.make libs/serialization/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/program_options/cmdline.hpp at line 3, boost/program_options/detail/convert.hpp at line 3, boost/program_options/detail/parsers.hpp at line 3, boost/program_options/detail/value_semantic.hpp at line 3, boost/program_options/environment_iterator.hpp at line 3, boost/program_options/eof_iterator.hpp at line 3, boost/program_options/option.hpp at line 3, boost/program_options/positional_options.hpp at line 3, boost/program_options/value_semantic.hpp at line 3, boost/program_options/version.hpp at line 3, libs/filesystem/src/utf8_codecvt_facet.cpp at line 3, libs/program_options/src/convert.cpp at line 3, libs/program_options/src/positional_options.cpp at line 3, libs/program_options/src/utf8_codecvt_facet.cpp at line 3, libs/program_options/src/value_semantic.cpp at line 3, libs/serialization/src/utf8_codecvt_facet.cpp at line 3
+ License text:
+ // Copyright Vladimir Prus 2004.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/program_options/cmdline.hpp [1:3]
+ boost/program_options/detail/convert.hpp [1:3]
+ boost/program_options/detail/parsers.hpp [1:3]
+ boost/program_options/detail/value_semantic.hpp [1:3]
+ boost/program_options/environment_iterator.hpp [1:3]
+ boost/program_options/eof_iterator.hpp [1:3]
+ boost/program_options/option.hpp [1:3]
+ boost/program_options/positional_options.hpp [1:3]
+ boost/program_options/value_semantic.hpp [1:3]
+ boost/program_options/version.hpp [1:3]
+ libs/filesystem/src/utf8_codecvt_facet.cpp [1:3]
+ libs/program_options/src/convert.cpp [1:3]
+ libs/program_options/src/positional_options.cpp [1:3]
+ libs/program_options/src/utf8_codecvt_facet.cpp [1:3]
+ libs/program_options/src/value_semantic.cpp [1:3]
+ libs/serialization/src/utf8_codecvt_facet.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5cce5dc14f00da42bb6f34ce5b2dfce4
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002-2006 Marcin Kalicinski
+ // Copyright (C) 2013 Sebastian Redl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_tree/detail/xml_parser_write.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5cd4a0c580c53e0ce656cd3fe8597d92
+BELONGS libs/random/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer_traits.hpp at line 5, boost/nondet_random.hpp at line 5, boost/random/random_device.hpp at line 5, boost/uuid/detail/random_provider_posix.ipp at line 5, boost/uuid/detail/random_provider_wincrypt.ipp at line 5, libs/random/src/random_device.cpp at line 5
+ License text:
+ * Copyright Jens Maurer 2000
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer_traits.hpp [3:5]
+ boost/nondet_random.hpp [3:5]
+ boost/random/random_device.hpp [3:6]
+ boost/uuid/detail/random_provider_posix.ipp [3:6]
+ boost/uuid/detail/random_provider_wincrypt.ipp [3:6]
+ libs/random/src/random_device.cpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5d19ba487dbef72a53fdf36bdd83309d
+BELONGS ya.make
+ License text:
+ /* Copyright (c) 2002-2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/time_zone_names.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5d5ceeefae6baf9c4d0ab38f1ad40835
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2007 Hartmut Kaiser
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp [2:4]
+ boost/spirit/home/classic/tree/impl/tree_to_xml.ipp [2:4]
+ boost/spirit/home/classic/tree/tree_to_xml.hpp [2:4]
+ boost/spirit/home/classic/utility/chset.hpp [2:4]
+ boost/spirit/home/classic/utility/chset_operators.hpp [2:4]
+ boost/spirit/home/classic/utility/escape_char.hpp [2:3]
+ boost/spirit/home/classic/utility/flush_multi_pass.hpp [2:3]
+ boost/spirit/home/classic/utility/impl/chset.ipp [2:4]
+ boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp [2:4]
+ boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp [2:4]
+ boost/xpressive/detail/utility/chset/basic_chset.hpp [2:4]
+ boost/xpressive/detail/utility/chset/basic_chset.ipp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5db5d507e9e07c6fbe5e4cb7336a9321
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2005 Peter Dimov
+ // Copyright 2007-2012 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5dcd896fc15c3b0fab611b475854c071
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/foreach_fwd.hpp at line 6, boost/proto/detail/as_expr.hpp at line 9, boost/proto/functional.hpp at line 7, boost/proto/functional/fusion.hpp at line 7, boost/proto/functional/fusion/at.hpp at line 7, boost/proto/functional/fusion/pop_back.hpp at line 7, boost/proto/functional/fusion/pop_front.hpp at line 7, boost/proto/functional/fusion/push_back.hpp at line 7, boost/proto/functional/fusion/push_front.hpp at line 7, boost/proto/functional/fusion/reverse.hpp at line 7, boost/proto/functional/std.hpp at line 7, boost/proto/functional/std/utility.hpp at line 7
+ License text:
+ // Copyright 2010 Eric Niebler.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/foreach_fwd.hpp [4:6]
+ boost/proto/detail/as_expr.hpp [7:9]
+ boost/proto/functional.hpp [5:7]
+ boost/proto/functional/fusion.hpp [5:7]
+ boost/proto/functional/fusion/at.hpp [5:7]
+ boost/proto/functional/fusion/pop_back.hpp [5:7]
+ boost/proto/functional/fusion/pop_front.hpp [5:7]
+ boost/proto/functional/fusion/push_back.hpp [5:7]
+ boost/proto/functional/fusion/push_front.hpp [5:7]
+ boost/proto/functional/fusion/reverse.hpp [5:7]
+ boost/proto/functional/std.hpp [5:7]
+ boost/proto/functional/std/utility.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5dd53ee811abc83b9190c778f5f47298
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006, 2007.
+ // Copyright Paul A. Bristow 2006, 2007.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/normal.hpp [1:2]
+ boost/math/distributions/triangular.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5e2789af15a3f0dceb1a6835b257fde9
+BELONGS libs/filesystem/ya.make
+ License text:
+ // Copyright 2002-2009, 2014 Beman Dawes
+ // Copyright 2001 Dietmar Kuehl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/filesystem/src/operations.cpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5e5122844c5c00c4740356da3c3eaecb
+BELONGS libs/chrono/ya.make ya.make
+ License text:
+ // Copyright Beman Dawes 2003, 2006, 2008
+ // Copyright 2009-2011 Vicente J. Botet Escriba
+ // Copyright (c) Microsoft Corporation 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/config.hpp [3:5]
+ boost/chrono/detail/inlined/win/process_cpu_clocks.hpp [3:5]
+ boost/chrono/io/time_point_units.hpp [1:5]
+ boost/chrono/process_cpu_clocks.hpp [3:4]
+ boost/predef/architecture/arm.h [2:6]
+ boost/predef/platform.h [2:5]
+ boost/predef/platform/windows_desktop.h [2:5]
+ boost/predef/platform/windows_phone.h [2:5]
+ boost/predef/platform/windows_runtime.h [2:5]
+ boost/predef/platform/windows_store.h [2:5]
+ boost/signals2/detail/lwm_win32_cs.hpp [4:6]
+ boost/smart_ptr/detail/lwm_win32_cs.hpp [13:14]
+ boost/smart_ptr/detail/yield_k.hpp [13:14]
+ boost/system/detail/error_code.ipp [3:6]
+ boost/winapi/system.hpp [2:4]
+ boost/winapi/time.hpp [2:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp [2:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/process_default_formatter.hpp [2:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/simple_stopwatch.hpp [2:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/strict_stopwatch.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5e8b36f8b7344a5c105fd71620e6cebc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/architecture/convex.h at line 4, boost/predef/architecture/pyramid.h at line 4, boost/predef/detail/test_def.h at line 4, boost/predef/language.h at line 4, boost/predef/language/objc.h at line 4, boost/predef/language/stdc.h at line 4, boost/predef/language/stdcpp.h at line 4, boost/predef/library/std/cxx.h at line 4, boost/predef/os/os400.h at line 4, boost/predef/os/vms.h at line 4
+ License text:
+ Copyright Rene Rivera 2011-2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/architecture/convex.h [2:4]
+ boost/predef/architecture/pyramid.h [2:4]
+ boost/predef/detail/test_def.h [2:4]
+ boost/predef/language.h [2:4]
+ boost/predef/language/objc.h [2:4]
+ boost/predef/language/stdc.h [2:4]
+ boost/predef/language/stdcpp.h [2:4]
+ boost/predef/library/std/cxx.h [2:4]
+ boost/predef/os/os400.h [2:4]
+ boost/predef/os/vms.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5e997ed5f034c1dc23e6643ea466e0d1
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010-2011 Thomas Heller
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix.hpp [2:3]
+ boost/phoenix/core/actor.hpp [2:5]
+ boost/phoenix/core/call.hpp [2:3]
+ boost/phoenix/core/debug.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/actor_operator.hpp [24:25]
+ boost/phoenix/core/detail/cpp03/actor_result_of.hpp [25:26]
+ boost/phoenix/core/detail/cpp03/call.hpp [21:22]
+ boost/phoenix/core/detail/cpp03/expression.hpp [18:20]
+ boost/phoenix/core/detail/cpp03/function_equal.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_10.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_20.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_30.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_40.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_50.hpp [2:4]
+ boost/phoenix/core/domain.hpp [2:3]
+ boost/phoenix/core/environment.hpp [2:3]
+ boost/phoenix/core/function_equal.hpp [2:3]
+ boost/phoenix/core/is_actor.hpp [2:2]
+ boost/phoenix/core/is_nullary.hpp [2:4]
+ boost/phoenix/core/is_value.hpp [2:3]
+ boost/phoenix/core/meta_grammar.hpp [2:4]
+ boost/phoenix/core/nothing.hpp [2:2]
+ boost/phoenix/core/terminal.hpp [2:3]
+ boost/phoenix/core/terminal_fwd.hpp [2:3]
+ boost/phoenix/core/visit_each.hpp [2:3]
+ boost/phoenix/function/adapt_callable.hpp [2:3]
+ boost/phoenix/function/adapt_function.hpp [2:4]
+ boost/phoenix/function/detail/cpp03/function_operator.hpp [21:22]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_10.hpp [2:3]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_20.hpp [2:3]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_30.hpp [2:3]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_40.hpp [2:3]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_50.hpp [2:3]
+ boost/phoenix/fusion.hpp [2:3]
+ boost/phoenix/fusion/at.hpp [2:4]
+ boost/phoenix/object/detail/cpp03/construct.hpp [21:22]
+ boost/phoenix/object/detail/cpp03/construct_eval.hpp [23:24]
+ boost/phoenix/object/detail/cpp03/new.hpp [21:22]
+ boost/phoenix/object/detail/cpp03/new_eval.hpp [23:24]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_10.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_20.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_30.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_40.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_50.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_10.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_20.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_30.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_40.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_50.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_10.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_20.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_30.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_40.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_50.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_10.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_20.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_30.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_40.hpp [2:3]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_50.hpp [2:3]
+ boost/phoenix/operator.hpp [2:3]
+ boost/phoenix/operator/arithmetic.hpp [2:3]
+ boost/phoenix/operator/bitwise.hpp [2:3]
+ boost/phoenix/operator/comparison.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval.hpp [15:17]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval_result_of.hpp [15:17]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_10.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_20.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_30.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_40.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_50.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_10.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_20.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_30.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_40.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_50.hpp [2:4]
+ boost/phoenix/operator/detail/define_operator.hpp [2:3]
+ boost/phoenix/operator/logical.hpp [2:3]
+ boost/phoenix/operator/member.hpp [2:4]
+ boost/phoenix/operator/self.hpp [2:3]
+ boost/phoenix/phoenix.hpp [2:3]
+ boost/phoenix/scope.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/dynamic.hpp [25:26]
+ boost/phoenix/scope/detail/cpp03/local_gen.hpp [3:4]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_10.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_20.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_30.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_40.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_50.hpp [2:3]
+ boost/phoenix/scope/local_variable.hpp [2:3]
+ boost/phoenix/scope/scoped_environment.hpp [2:3]
+ boost/phoenix/statement/detail/catch_push_back.hpp [20:21]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_10.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_20.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_30.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_40.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_50.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_10.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_20.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_30.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_40.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/switch_50.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_10.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_20.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_30.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_40.hpp [2:3]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_50.hpp [2:3]
+ boost/phoenix/statement/detail/switch.hpp [25:26]
+ boost/phoenix/statement/detail/try_catch_eval.hpp [25:26]
+ boost/phoenix/statement/detail/try_catch_expression.hpp [25:26]
+ boost/phoenix/statement/throw.hpp [2:4]
+ boost/phoenix/statement/try_catch.hpp [2:4]
+ boost/phoenix/support/preprocessed/vector_10.hpp [2:3]
+ boost/phoenix/support/preprocessed/vector_20.hpp [2:3]
+ boost/phoenix/support/preprocessed/vector_30.hpp [2:3]
+ boost/phoenix/support/preprocessed/vector_40.hpp [2:3]
+ boost/phoenix/support/preprocessed/vector_50.hpp [2:3]
+ boost/phoenix/support/vector.hpp [41:42]
+ boost/phoenix/version.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5ecdbaa136da002e57f3b5ba003bd0db
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/storage.hpp [15:15]
+ boost/is_placeholder.hpp [13:13]
+ boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp [12:14]
+ boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp [11:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5eec39aa7ddea86ba623e74f4988e8e5
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5f5f9caa49264cbb4cb51ab4b0070946
+BELONGS libs/filesystem/ya.make ya.make
+ License text:
+ // Copyright Beman Dawes 2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/lightweight_main.hpp [3:3]
+ boost/filesystem.hpp [3:3]
+ boost/io/detail/quoted_manip.hpp [3:3]
+ libs/filesystem/src/unique_path.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5f6f0ebf2d6180caac56d446585150fe
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015 Artyom Beilis (Tonkikh)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/locale/generic_codecvt.hpp [2:2]
+ boost/locale/utf8_codecvt.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5f72997ebb041396dd9f2cc35590f0f9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2009, Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/multi_pass.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5f7ced6a8ef3d72db1620ce05ee6cd6f
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009, Marco Guazzone
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/operation/begin.hpp [8:8]
+ boost/numeric/ublas/operation/end.hpp [8:8]
+ boost/numeric/ublas/operation/num_columns.hpp [8:8]
+ boost/numeric/ublas/tags.hpp [8:8]
+ boost/numeric/ublas/traits/const_iterator_type.hpp [8:8]
+ boost/numeric/ublas/traits/iterator_type.hpp [8:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 5fd35c96fa4f3ab0cfc60d94c0130fc4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/replaced.hpp at line 6, boost/range/adaptor/replaced_if.hpp at line 6, boost/range/adaptor/strided.hpp at line 6, boost/range/adaptors.hpp at line 6, boost/range/algorithm_ext.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/adaptor/replaced.hpp [3:5]
+ boost/range/adaptor/replaced_if.hpp [3:5]
+ boost/range/adaptor/strided.hpp [3:5]
+ boost/range/adaptors.hpp [3:6]
+ boost/range/algorithm_ext.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 60255b91bbc9fe1a1a0ae1cc9a978c65
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/bernoulli.hpp [3:8]
+ boost/math/special_functions/detail/polygamma.hpp [3:8]
+ boost/math/special_functions/detail/unchecked_bernoulli.hpp [3:8]
+ boost/math/special_functions/polygamma.hpp [3:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 604fdc25ecaa79236312492568566c5e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2006 Eric Niebler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/sequence/intrinsic/segments.hpp [2:2]
+ boost/fusion/support/is_segmented.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6093d3f4550b993594511a12e942373f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2006, 2009 Marcin Kalicinski
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_tree/detail/rapidxml.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 60a2739fa0b10a8912542f3a422b8446
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/tuple/rem.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/tuple/rem.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 60ad17f1b7ecee6a5e812669a248e2dc
+BELONGS ya.make
+ License text:
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/compute/compute_algebra.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute_operations.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute_resize.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_copy.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/integrate.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/integrate_const.hpp [10:11]
+ boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/integrate_times.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/null_observer.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/observer_collection.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 60aec362c10b154ca39b021c11f74a08
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2014 Glen Joseph Fernandes
+ // glenfe at live dot com
+ // Copyright (C) 2014 Agustin Berge
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/ref.hpp [21:23]
+ boost/detail/dynamic_bitset.hpp [6:7]
+ boost/dynamic_bitset/dynamic_bitset.hpp [7:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 60cb7957f86db726c6c6c70fc4644460
+BELONGS ya.make
+ License text:
+ // (c) Copyright John Maddock 2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/abi/borland_prefix.hpp [1:3]
+ boost/config/abi/borland_suffix.hpp [1:3]
+ boost/config/abi/msvc_prefix.hpp [1:3]
+ boost/config/abi/msvc_suffix.hpp [1:3]
+ boost/config/abi_prefix.hpp [3:3]
+ boost/config/abi_suffix.hpp [3:3]
+ boost/config/auto_link.hpp [1:3]
+ boost/config/requires_threads.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 60cfc447fcf79c1140be2190dc383f19
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2006, 2007
+ // Copyright Christoper Kohlhoff 2007
+ // Copyright Peter Dimov 2017, 2018
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/error_code.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 60d8a4925c8e8905f9ecaa4f2fe5a782
+BELONGS ya.make
+ License text:
+ Copyright (c) 2008-2011: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/type_traits/succ_pred.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 60ddb105cb6f365c4198d8c97b2115e4
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/intel.hpp [1:10]
+ boost/config/detail/select_compiler_config.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6130b1094fc9360db3fcfb20d798534e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2015 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/algorithm/iteration/accumulate.hpp [2:3]
+ boost/fusion/algorithm/iteration/accumulate_fwd.hpp [2:3]
+ boost/fusion/algorithm/iteration/detail/fold.hpp [2:5]
+ boost/fusion/algorithm/iteration/fold.hpp [2:5]
+ boost/fusion/algorithm/iteration/iter_fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/reverse_fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/reverse_iter_fold.hpp [2:4]
+ boost/fusion/container/deque/detail/convert_impl.hpp [2:4]
+ boost/fusion/container/generation/list_tie.hpp [2:2]
+ boost/fusion/support/detail/enabler.hpp [2:2]
+ boost/fusion/support/detail/index_sequence.hpp [2:3]
+ boost/phoenix/core/detail/function_eval.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 620bffa3a234fd5d35b0b35f0ea5d50a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cstdlib.hpp at line 5
+ License text:
+ // Copyright Beman Dawes 2001. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cstdlib.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 623d2c4f1105092ce876a2b974e60b3a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/format.hpp at line 7, boost/format/alt_sstream.hpp at line 7, boost/format/alt_sstream_impl.hpp at line 7, boost/format/detail/compat_workarounds.hpp at line 7, boost/format/detail/config_macros.hpp at line 10, boost/format/detail/msvc_disambiguater.hpp at line 8, boost/format/detail/unset_macros.hpp at line 7, boost/format/detail/workarounds_gcc-2_95.hpp at line 7, boost/format/detail/workarounds_stlport.hpp at line 7, boost/format/exceptions.hpp at line 7, boost/format/feed_args.hpp at line 8, boost/format/format_class.hpp at line 7, boost/format/format_fwd.hpp at line 7, boost/format/format_implementation.hpp at line 7, boost/format/free_funcs.hpp at line 7, boost/format/group.hpp at line 8, boost/format/internals.hpp at line 8, boost/format/internals_fwd.hpp at line 7, boost/format/parsing.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/format.hpp [5:7]
+ boost/format/alt_sstream.hpp [5:7]
+ boost/format/alt_sstream_impl.hpp [5:7]
+ boost/format/detail/compat_workarounds.hpp [5:7]
+ boost/format/detail/config_macros.hpp [8:10]
+ boost/format/detail/msvc_disambiguater.hpp [6:8]
+ boost/format/detail/unset_macros.hpp [5:7]
+ boost/format/detail/workarounds_gcc-2_95.hpp [5:7]
+ boost/format/detail/workarounds_stlport.hpp [5:7]
+ boost/format/exceptions.hpp [5:5]
+ boost/format/feed_args.hpp [6:8]
+ boost/format/format_class.hpp [5:7]
+ boost/format/format_fwd.hpp [5:7]
+ boost/format/format_implementation.hpp [5:7]
+ boost/format/free_funcs.hpp [5:7]
+ boost/format/group.hpp [6:8]
+ boost/format/internals.hpp [6:8]
+ boost/format/internals_fwd.hpp [5:7]
+ boost/format/parsing.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6256fe9595065a7f6ee40e467ac1f448
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/detail/is_function_ptr_tester.hpp at line 5, boost/type_traits/detail/is_mem_fun_pointer_impl.hpp at line 5, boost/type_traits/detail/is_mem_fun_pointer_tester.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/detail/is_function_ptr_tester.hpp [2:5]
+ boost/type_traits/detail/is_mem_fun_pointer_impl.hpp [2:5]
+ boost/type_traits/detail/is_mem_fun_pointer_tester.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 626904b1a20ac363e1bb99d9bae924e6
+BELONGS ya.make
+ License text:
+ // (C) Copyright Beman Dawes 1999.
+ // (C) Copyright Jens Mauer 2001
+ // (C) Copyright John Maddock 2001
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/comeau.hpp [1:8]
+ boost/config/compiler/greenhills.hpp [1:3]
+ boost/config/compiler/kai.hpp [1:5]
+ boost/config/compiler/metrowerks.hpp [1:8]
+ boost/config/compiler/sunpro_cc.hpp [1:7]
+ boost/config/platform/beos.hpp [1:3]
+ boost/config/stdlib/libstdcpp3.hpp [1:4]
+ boost/config/stdlib/msl.hpp [1:4]
+ boost/config/user.hpp [3:5]
+ boost/cstdint.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 626c8f8e9db5e6888c779655f4dcb00f
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2005 Peter Dimov
+ // Copyright (c) 2006 Michael van der Westhuizen
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/atomic_count_solaris.hpp [8:9]
+ boost/smart_ptr/detail/atomic_count_win32.hpp [13:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6272251471f1be73e9132a985503d2af
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/statechart/detail/reaction_dispatcher.hpp at line 6
+ License text:
+ // Copyright 2008 Andreas Huber Doenni
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/statechart/detail/reaction_dispatcher.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 630429e3af05c2404197d1a7b98bf2e6
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+ // Copyright 2015-2017 Antony Polukhin.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll/detail/aggressive_ptr_cast.hpp [1:2]
+ boost/dll/runtime_symbol_info.hpp [1:2]
+ boost/dll/shared_library.hpp [1:2]
+ boost/stacktrace/detail/void_ptr_cast.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 634f5b2f48befd4ad6b83568ae03e21c
+BELONGS ya.make
+ License text:
+ // Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+ // Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/detail/is_function_ptr_helper.hpp [2:3]
+ boost/type_traits/is_function.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6372fa2fa3d2b6fd37659a53404e040d
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/comeau.hpp [1:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 63849ec1bbdcc3c10fe8276e89517bbf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/detail/config.hpp at line 4, boost/uuid/detail/uuid_x86.ipp at line 4
+ License text:
+ * Copyright Andrey Semashev 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/uuid/detail/config.hpp [2:4]
+ boost/uuid/detail/uuid_x86.ipp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 63cd6a98b4cad3093701dc43bdbb5bd4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/smart_ptr/shared_ptr.hpp at line 9, boost/interprocess/smart_ptr/weak_ptr.hpp at line 9
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/shared_ptr.hpp [5:9]
+ boost/interprocess/smart_ptr/weak_ptr.hpp [5:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 640307e8b2a0f7bd8fedb1ecb22227e5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/wave/util/flex_string.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/wave/util/flex_string.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 640761179b5b64afa0c721e69a6b8275
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/centroid.hpp [3:6]
+ boost/geometry/algorithms/correct.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/collect_vectors.hpp [3:6]
+ boost/geometry/algorithms/detail/overlay/get_turns.hpp [3:4]
+ boost/geometry/io/wkt/write.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6467921276eb670bf75f471586581d8f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6475e648e705f129c481426fb1e23aae
+BELONGS ya.make
+ License text:
+ // Copyright 2005 Daniel Wallin.
+ // Copyright 2005 Joel de Guzman.
+ // Copyright 2005 Dan Marsden.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl/algorithm/detail/begin.hpp [1:3]
+ boost/phoenix/stl/algorithm/detail/decay_array.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/end.hpp [1:3]
+ boost/phoenix/stl/algorithm/detail/has_equal_range.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_find.hpp [2:4]
+ boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_remove.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_remove_if.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_reverse.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_sort.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_unique.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_upper_bound.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_hash_map.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_hash_set.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_list.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_map.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_set.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_unordered_set_or_map.hpp [2:4]
+ boost/phoenix/stl/algorithm/iteration.hpp [1:3]
+ boost/phoenix/stl/algorithm/querying.hpp [1:5]
+ boost/phoenix/stl/algorithm/transformation.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 648961efadbfcbb7a3c3529046ecf3b8
+BELONGS ya.make
+ License text:
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/multi_array_algebra.hpp [9:10]
+ boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/blaze/blaze_resize.hpp [9:10]
+ boost/numeric/odeint/external/eigen/eigen.hpp [9:10]
+ boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp [9:10]
+ boost/numeric/odeint/stepper/velocity_verlet.hpp [9:10]
+ boost/numeric/odeint/util/multi_array_adaption.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 648f3551deff5504ae253422933dad8a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/call_traits.hpp at line 3, boost/compressed_pair.hpp at line 3, boost/detail/call_traits.hpp at line 3, boost/detail/compressed_pair.hpp at line 3, boost/detail/ob_compressed_pair.hpp at line 3, boost/type_traits/add_pointer.hpp at line 4, boost/type_traits/add_reference.hpp at line 4, boost/type_traits/arithmetic_traits.hpp at line 3, boost/type_traits/broken_compiler_spec.hpp at line 4, boost/type_traits/config.hpp at line 4, boost/type_traits/detail/config.hpp at line 4, boost/type_traits/has_nothrow_assign.hpp at line 4, boost/type_traits/has_nothrow_constructor.hpp at line 4, boost/type_traits/has_nothrow_copy.hpp at line 4, boost/type_traits/has_nothrow_destructor.hpp at line 4, boost/type_traits/has_trivial_assign.hpp at line 4, boost/type_traits/has_trivial_constructor.hpp at line 4, boost/type_traits/has_trivial_copy.hpp at line 4, boost/type_traits/has_trivial_destructor.hpp at line 4, boost/type_traits/has_trivial_move_assign.hpp at line 4, boost/type_traits/has_trivial_move_constructor.hpp at line 4, boost/type_traits/intrinsics.hpp at line 3, boost/type_traits/is_arithmetic.hpp at line 4, boost/type_traits/is_compound.hpp at line 4, boost/type_traits/is_empty.hpp at line 4, boost/type_traits/is_float.hpp at line 3, boost/type_traits/is_fundamental.hpp at line 4, boost/type_traits/is_integral.hpp at line 4, boost/type_traits/is_nothrow_move_assignable.hpp at line 4, boost/type_traits/is_nothrow_move_constructible.hpp at line 4, boost/type_traits/is_object.hpp at line 4, boost/type_traits/is_pod.hpp at line 4, boost/type_traits/is_scalar.hpp at line 4, boost/type_traits/is_stateless.hpp at line 4, boost/type_traits/is_void.hpp at line 4, boost/type_traits/object_traits.hpp at line 3, boost/type_traits/remove_bounds.hpp at line 4, boost/type_traits/remove_pointer.hpp at line 4, boost/type_traits/remove_reference.hpp at line 4, boost/type_traits/transform_traits.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/call_traits.hpp [1:3]
+ boost/compressed_pair.hpp [1:3]
+ boost/detail/call_traits.hpp [1:3]
+ boost/detail/compressed_pair.hpp [1:3]
+ boost/detail/ob_compressed_pair.hpp [1:3]
+ boost/type_traits/add_pointer.hpp [2:4]
+ boost/type_traits/add_reference.hpp [2:4]
+ boost/type_traits/arithmetic_traits.hpp [1:3]
+ boost/type_traits/broken_compiler_spec.hpp [2:4]
+ boost/type_traits/config.hpp [2:4]
+ boost/type_traits/detail/config.hpp [2:4]
+ boost/type_traits/has_nothrow_assign.hpp [2:4]
+ boost/type_traits/has_nothrow_constructor.hpp [2:4]
+ boost/type_traits/has_nothrow_copy.hpp [2:4]
+ boost/type_traits/has_nothrow_destructor.hpp [2:4]
+ boost/type_traits/has_trivial_assign.hpp [2:4]
+ boost/type_traits/has_trivial_constructor.hpp [2:4]
+ boost/type_traits/has_trivial_copy.hpp [2:4]
+ boost/type_traits/has_trivial_destructor.hpp [2:4]
+ boost/type_traits/has_trivial_move_assign.hpp [2:6]
+ boost/type_traits/has_trivial_move_constructor.hpp [2:6]
+ boost/type_traits/intrinsics.hpp [1:3]
+ boost/type_traits/is_arithmetic.hpp [2:4]
+ boost/type_traits/is_compound.hpp [2:4]
+ boost/type_traits/is_empty.hpp [2:4]
+ boost/type_traits/is_float.hpp [1:3]
+ boost/type_traits/is_fundamental.hpp [2:4]
+ boost/type_traits/is_integral.hpp [2:4]
+ boost/type_traits/is_nothrow_move_assignable.hpp [2:6]
+ boost/type_traits/is_nothrow_move_constructible.hpp [2:6]
+ boost/type_traits/is_object.hpp [2:4]
+ boost/type_traits/is_pod.hpp [2:4]
+ boost/type_traits/is_scalar.hpp [2:4]
+ boost/type_traits/is_stateless.hpp [2:4]
+ boost/type_traits/is_void.hpp [2:4]
+ boost/type_traits/object_traits.hpp [1:3]
+ boost/type_traits/remove_bounds.hpp [2:4]
+ boost/type_traits/remove_pointer.hpp [2:4]
+ boost/type_traits/remove_reference.hpp [2:4]
+ boost/type_traits/transform_traits.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 64dbd3aca2afc873461283ccfd002322
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/experimental.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6518675878f6c96ced7667e2a4ed728a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/os/haiku.h at line 5
+ License text:
+ Copyright Jessica Hamilton 2014
+ Copyright Rene Rivera 2014-2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/os/haiku.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6543e5a77421b1baaaf79a9a214494d8
+BELONGS libs/filesystem/ya.make
+ License text:
+ // Copyright 2002-2009, 2014 Beman Dawes
+ // Copyright 2001 Dietmar Kuehl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/filesystem/src/operations.cpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6550e9b117fac9abf61bf5c60a55c7ac
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/msm/active_state_switching_policies.hpp at line 8, boost/msm/back/args.hpp at line 8, boost/msm/back/bind_helpers.hpp at line 8, boost/msm/back/common_types.hpp at line 8, boost/msm/back/copy_policies.hpp at line 8, boost/msm/back/default_compile_policy.hpp at line 8, boost/msm/back/dispatch_table.hpp at line 8, boost/msm/back/favor_compile_time.hpp at line 8, boost/msm/back/history_policies.hpp at line 8, boost/msm/back/metafunctions.hpp at line 8, boost/msm/back/mpl_graph_fsm_check.hpp at line 8, boost/msm/back/no_fsm_check.hpp at line 8, boost/msm/back/queue_container_circular.hpp at line 8, boost/msm/back/queue_container_deque.hpp at line 8, boost/msm/back/state_machine.hpp at line 8, boost/msm/back/tools.hpp at line 8, boost/msm/common.hpp at line 8, boost/msm/event_traits.hpp at line 8, boost/msm/front/common_states.hpp at line 8, boost/msm/front/completion_event.hpp at line 8, boost/msm/front/detail/common_states.hpp at line 8, boost/msm/front/detail/row2_helper.hpp at line 8, boost/msm/front/euml/algorithm.hpp at line 8, boost/msm/front/euml/common.hpp at line 8, boost/msm/front/euml/container.hpp at line 8, boost/msm/front/euml/euml.hpp at line 8, boost/msm/front/euml/euml_typeof.hpp at line 8, boost/msm/front/euml/guard_grammar.hpp at line 8, boost/msm/front/euml/iteration.hpp at line 8, boost/msm/front/euml/operator.hpp at line 8, boost/msm/front/euml/phoenix_placeholders.hpp at line 8, boost/msm/front/euml/querying.hpp at line 8, boost/msm/front/euml/state_grammar.hpp at line 8, boost/msm/front/euml/stl.hpp at line 8, boost/msm/front/euml/stt_grammar.hpp at line 8, boost/msm/front/euml/transformation.hpp at line 8, boost/msm/front/functor_row.hpp at line 8, boost/msm/front/internal_row.hpp at line 8, boost/msm/front/row2.hpp at line 8, boost/msm/front/state_machine_def.hpp at line 8, boost/msm/front/states.hpp at line 8, boost/msm/msm_grammar.hpp at line 8, boost/msm/proto_config.hpp at line 8, boost/msm/row_tags.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/msm/active_state_switching_policies.hpp [5:8]
+ boost/msm/back/args.hpp [5:8]
+ boost/msm/back/bind_helpers.hpp [5:8]
+ boost/msm/back/common_types.hpp [5:8]
+ boost/msm/back/copy_policies.hpp [5:8]
+ boost/msm/back/default_compile_policy.hpp [5:8]
+ boost/msm/back/dispatch_table.hpp [5:8]
+ boost/msm/back/favor_compile_time.hpp [5:8]
+ boost/msm/back/history_policies.hpp [5:8]
+ boost/msm/back/metafunctions.hpp [5:8]
+ boost/msm/back/mpl_graph_fsm_check.hpp [5:8]
+ boost/msm/back/no_fsm_check.hpp [5:8]
+ boost/msm/back/queue_container_circular.hpp [5:8]
+ boost/msm/back/queue_container_deque.hpp [5:8]
+ boost/msm/back/state_machine.hpp [5:8]
+ boost/msm/back/tools.hpp [5:8]
+ boost/msm/common.hpp [5:8]
+ boost/msm/event_traits.hpp [5:8]
+ boost/msm/front/common_states.hpp [5:8]
+ boost/msm/front/completion_event.hpp [5:8]
+ boost/msm/front/detail/common_states.hpp [5:8]
+ boost/msm/front/detail/row2_helper.hpp [5:8]
+ boost/msm/front/euml/algorithm.hpp [5:8]
+ boost/msm/front/euml/common.hpp [5:8]
+ boost/msm/front/euml/container.hpp [5:8]
+ boost/msm/front/euml/euml.hpp [5:8]
+ boost/msm/front/euml/euml_typeof.hpp [5:8]
+ boost/msm/front/euml/guard_grammar.hpp [5:8]
+ boost/msm/front/euml/iteration.hpp [5:8]
+ boost/msm/front/euml/operator.hpp [5:8]
+ boost/msm/front/euml/phoenix_placeholders.hpp [5:8]
+ boost/msm/front/euml/querying.hpp [5:8]
+ boost/msm/front/euml/state_grammar.hpp [5:8]
+ boost/msm/front/euml/stl.hpp [5:8]
+ boost/msm/front/euml/stt_grammar.hpp [5:8]
+ boost/msm/front/euml/transformation.hpp [5:8]
+ boost/msm/front/functor_row.hpp [5:8]
+ boost/msm/front/internal_row.hpp [5:8]
+ boost/msm/front/row2.hpp [5:8]
+ boost/msm/front/state_machine_def.hpp [5:8]
+ boost/msm/front/states.hpp [5:8]
+ boost/msm/msm_grammar.hpp [5:8]
+ boost/msm/proto_config.hpp [5:8]
+ boost/msm/row_tags.hpp [5:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6558581a775b2f48ad290a72ccc6c5bd
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008, 2009 Peter Dimov
+ // Copyright (c) 2018 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/memory_order.hpp [5:6]
+ boost/smart_ptr/detail/sp_has_sync.hpp [13:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 655bf8e1c786a52443545b43e86b4361
+BELONGS libs/serialization/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/detail/archive_serializer_map.hpp at line 15, boost/archive/detail/check.hpp at line 20, libs/serialization/src/archive_exception.cpp at line 6, libs/serialization/src/xml_archive_exception.cpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/detail/archive_serializer_map.hpp [13:15]
+ boost/archive/detail/check.hpp [18:20]
+ libs/serialization/src/archive_exception.cpp [4:6]
+ libs/serialization/src/xml_archive_exception.cpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6587dc636363fab50bd61228a566457c
+BELONGS ya.make
+ License text:
+ // (C) Copyright Dave Abrahams and Daniel Walker 1999-2003.
+ // Copyright (c) Andrey Semashev 2017
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/next_prior.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 65ba4d43cd2a4710f9a61abf485eb0b5
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2007 Dan Marsden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/deque/deque_fwd.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp [2:3]
+ boost/phoenix/statement/throw.hpp [2:4]
+ boost/phoenix/statement/try_catch.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 65d8e0cce41880c02ab6a95962a28436
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/unordered/unordered_map.hpp at line 5, boost/unordered/unordered_set.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/unordered/unordered_map.hpp [2:5]
+ boost/unordered/unordered_set.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6625aadf2da3a6853799ab2f038409bc
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2003, 2006
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/config.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 662fd5f8fcb9215250b9b25297287943
+BELONGS libs/chrono/ya.make ya.make
+ License text:
+ // Copyright 2009-2011 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/chrono.hpp [3:3]
+ boost/chrono/config.hpp [3:5]
+ boost/chrono/duration.hpp [3:5]
+ boost/chrono/process_cpu_clocks.hpp [3:4]
+ boost/chrono/system_clocks.hpp [3:5]
+ boost/chrono/thread_clock.hpp [3:3]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch_scoped.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 667567db549e2384dc40b95c3243b949
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2002-2006
+ // Copyright David Abrahams 2002-2003
+ // Copyright Daniel Walker 2007
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/has_xxx.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 66c7426a103b2c0266f29cccdf5f2272
+BELONGS libs/thread/ya.make ya.make
+ License text:
+ // Copyright (C) 2002-2003
+ // David Moore, William E. Kempf
+ // Copyright (C) 2007-8 Anthony Williams
+ // (C) Copyright 2013 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/barrier.hpp [1:4]
+ boost/thread/completion_latch.hpp [4:4]
+ boost/thread/detail/counter.hpp [4:4]
+ boost/thread/latch.hpp [4:4]
+ boost/thread/ostream_buffer.hpp [1:3]
+ boost/thread/pthread/once_atomic.hpp [6:7]
+ boost/thread/thread_only.hpp [6:6]
+ libs/thread/src/pthread/once_atomic.cpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 66f5b918eb37787d1fd47384e1d4d24d
+BELONGS ya.make
+ License text:
+ // (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+ // Howard Hinnant and John Maddock 2000.
+ // (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_const.hpp [2:4]
+ boost/type_traits/is_lvalue_reference.hpp [2:4]
+ boost/type_traits/is_member_pointer.hpp [2:4]
+ boost/type_traits/is_pointer.hpp [2:4]
+ boost/type_traits/is_same.hpp [2:4]
+ boost/type_traits/is_volatile.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 670e9fea8b553fd6cefa4f9a295c8a0a
+BELONGS ya.make
+ License text:
+ // Copyright 2012 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/detail/is_distributed_selector.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 671c483a6632cd05f47c5ebf10502cb2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/util/is_digit.hpp at line 6, boost/metaparse/v1/accept_when.hpp at line 6, boost/metaparse/v1/alphanum.hpp at line 6, boost/metaparse/v1/always.hpp at line 6, boost/metaparse/v1/build_parser.hpp at line 6, boost/metaparse/v1/cpp98/first_of.hpp at line 6, boost/metaparse/v1/cpp98/last_of.hpp at line 6, boost/metaparse/v1/digit.hpp at line 6, boost/metaparse/v1/digit_val.hpp at line 6, boost/metaparse/v1/fail.hpp at line 6, boost/metaparse/v1/if_.hpp at line 6, boost/metaparse/v1/iterate.hpp at line 6, boost/metaparse/v1/keyword.hpp at line 6, boost/metaparse/v1/letter.hpp at line 6, boost/metaparse/v1/lit.hpp at line 6, boost/metaparse/v1/lit_c.hpp at line 6, boost/metaparse/v1/middle_of.hpp at line 6, boost/metaparse/v1/one_of.hpp at line 6, boost/metaparse/v1/repeated.hpp at line 6, boost/metaparse/v1/repeated1.hpp at line 6, boost/metaparse/v1/return_.hpp at line 6, boost/metaparse/v1/sequence.hpp at line 6, boost/metaparse/v1/space.hpp at line 6, boost/metaparse/v1/spaces.hpp at line 6, boost/metaparse/v1/token.hpp at line 6, boost/metaparse/v1/transform.hpp at line 6, boost/metaparse/v1/util/digit_to_int.hpp at line 6, boost/metaparse/v1/util/in_range.hpp at line 6, boost/metaparse/v1/util/is_digit.hpp at line 6, boost/metaparse/v1/util/is_lcase_letter.hpp at line 6, boost/metaparse/v1/util/is_letter.hpp at line 6, boost/metaparse/v1/util/is_ucase_letter.hpp at line 6, boost/metaparse/v1/util/is_whitespace.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2010.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/util/is_digit.hpp [4:6]
+ boost/metaparse/v1/accept_when.hpp [4:6]
+ boost/metaparse/v1/alphanum.hpp [4:6]
+ boost/metaparse/v1/always.hpp [4:6]
+ boost/metaparse/v1/build_parser.hpp [4:6]
+ boost/metaparse/v1/cpp98/first_of.hpp [4:6]
+ boost/metaparse/v1/cpp98/last_of.hpp [4:6]
+ boost/metaparse/v1/digit.hpp [4:6]
+ boost/metaparse/v1/digit_val.hpp [4:6]
+ boost/metaparse/v1/fail.hpp [4:6]
+ boost/metaparse/v1/if_.hpp [4:6]
+ boost/metaparse/v1/iterate.hpp [4:6]
+ boost/metaparse/v1/keyword.hpp [4:6]
+ boost/metaparse/v1/letter.hpp [4:6]
+ boost/metaparse/v1/lit.hpp [4:6]
+ boost/metaparse/v1/lit_c.hpp [4:6]
+ boost/metaparse/v1/middle_of.hpp [4:6]
+ boost/metaparse/v1/one_of.hpp [4:6]
+ boost/metaparse/v1/repeated.hpp [4:6]
+ boost/metaparse/v1/repeated1.hpp [4:6]
+ boost/metaparse/v1/return_.hpp [4:6]
+ boost/metaparse/v1/sequence.hpp [4:6]
+ boost/metaparse/v1/space.hpp [4:6]
+ boost/metaparse/v1/spaces.hpp [4:6]
+ boost/metaparse/v1/token.hpp [4:6]
+ boost/metaparse/v1/transform.hpp [4:6]
+ boost/metaparse/v1/util/digit_to_int.hpp [4:6]
+ boost/metaparse/v1/util/in_range.hpp [4:6]
+ boost/metaparse/v1/util/is_digit.hpp [4:6]
+ boost/metaparse/v1/util/is_lcase_letter.hpp [4:6]
+ boost/metaparse/v1/util/is_letter.hpp [4:6]
+ boost/metaparse/v1/util/is_ucase_letter.hpp [4:6]
+ boost/metaparse/v1/util/is_whitespace.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 679941027a28a2d38cbeba8fbb2a6c1b
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/home/classic/core.hpp [2:8]
+ boost/spirit/home/classic/utility.hpp [2:9]
+ boost/spirit/home/classic/utility/loops.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6805e61dcffc0a494c7cc43bd2a4bf37
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/pthread/mutex.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/pthread/mutex.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6833867255c2b176df5af1500538ea6d
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003-2008 Matthias Christian Schabel
+ // Copyright (C) 2007-2008 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/units/base_dimension.hpp [4:5]
+ boost/units/base_unit.hpp [4:5]
+ boost/units/base_units/angle/arcminute.hpp [4:5]
+ boost/units/base_units/angle/arcsecond.hpp [4:5]
+ boost/units/base_units/angle/degree.hpp [4:5]
+ boost/units/base_units/angle/gradian.hpp [4:5]
+ boost/units/base_units/angle/radian.hpp [4:5]
+ boost/units/base_units/angle/revolution.hpp [4:5]
+ boost/units/base_units/angle/steradian.hpp [4:5]
+ boost/units/base_units/astronomical/astronomical_unit.hpp [4:5]
+ boost/units/base_units/astronomical/light_day.hpp [4:5]
+ boost/units/base_units/astronomical/light_hour.hpp [4:5]
+ boost/units/base_units/astronomical/light_minute.hpp [4:5]
+ boost/units/base_units/astronomical/light_second.hpp [4:5]
+ boost/units/base_units/astronomical/light_year.hpp [4:5]
+ boost/units/base_units/astronomical/parsec.hpp [4:5]
+ boost/units/base_units/cgs/biot.hpp [4:5]
+ boost/units/base_units/cgs/centimeter.hpp [4:5]
+ boost/units/base_units/cgs/gram.hpp [4:5]
+ boost/units/base_units/imperial/conversions.hpp [4:5]
+ boost/units/base_units/imperial/drachm.hpp [4:5]
+ boost/units/base_units/imperial/fluid_ounce.hpp [4:5]
+ boost/units/base_units/imperial/foot.hpp [4:5]
+ boost/units/base_units/imperial/furlong.hpp [4:5]
+ boost/units/base_units/imperial/gallon.hpp [4:5]
+ boost/units/base_units/imperial/gill.hpp [4:5]
+ boost/units/base_units/imperial/grain.hpp [4:5]
+ boost/units/base_units/imperial/hundredweight.hpp [4:5]
+ boost/units/base_units/imperial/inch.hpp [4:5]
+ boost/units/base_units/imperial/league.hpp [4:5]
+ boost/units/base_units/imperial/mile.hpp [4:5]
+ boost/units/base_units/imperial/ounce.hpp [4:5]
+ boost/units/base_units/imperial/pint.hpp [4:5]
+ boost/units/base_units/imperial/pound.hpp [4:5]
+ boost/units/base_units/imperial/quart.hpp [4:5]
+ boost/units/base_units/imperial/quarter.hpp [4:5]
+ boost/units/base_units/imperial/stone.hpp [4:5]
+ boost/units/base_units/imperial/thou.hpp [4:5]
+ boost/units/base_units/imperial/ton.hpp [4:5]
+ boost/units/base_units/imperial/yard.hpp [4:5]
+ boost/units/base_units/metric/angstrom.hpp [4:5]
+ boost/units/base_units/metric/are.hpp [4:5]
+ boost/units/base_units/metric/atmosphere.hpp [4:5]
+ boost/units/base_units/metric/bar.hpp [4:5]
+ boost/units/base_units/metric/barn.hpp [4:5]
+ boost/units/base_units/metric/day.hpp [4:5]
+ boost/units/base_units/metric/fermi.hpp [4:5]
+ boost/units/base_units/metric/hectare.hpp [4:5]
+ boost/units/base_units/metric/hour.hpp [4:5]
+ boost/units/base_units/metric/knot.hpp [4:5]
+ boost/units/base_units/metric/liter.hpp [4:5]
+ boost/units/base_units/metric/micron.hpp [4:5]
+ boost/units/base_units/metric/minute.hpp [4:5]
+ boost/units/base_units/metric/mmHg.hpp [4:5]
+ boost/units/base_units/metric/nautical_mile.hpp [4:5]
+ boost/units/base_units/metric/ton.hpp [4:5]
+ boost/units/base_units/metric/torr.hpp [4:5]
+ boost/units/base_units/metric/year.hpp [4:5]
+ boost/units/base_units/si/ampere.hpp [4:5]
+ boost/units/base_units/si/candela.hpp [4:5]
+ boost/units/base_units/si/kelvin.hpp [4:5]
+ boost/units/base_units/si/kilogram.hpp [4:5]
+ boost/units/base_units/si/meter.hpp [4:5]
+ boost/units/base_units/si/mole.hpp [4:5]
+ boost/units/base_units/si/second.hpp [4:5]
+ boost/units/base_units/temperature/celsius.hpp [4:5]
+ boost/units/base_units/temperature/conversions.hpp [4:5]
+ boost/units/base_units/temperature/fahrenheit.hpp [4:5]
+ boost/units/base_units/us/cup.hpp [4:5]
+ boost/units/base_units/us/dram.hpp [4:5]
+ boost/units/base_units/us/fluid_dram.hpp [4:5]
+ boost/units/base_units/us/fluid_ounce.hpp [4:5]
+ boost/units/base_units/us/foot.hpp [4:5]
+ boost/units/base_units/us/gallon.hpp [4:5]
+ boost/units/base_units/us/gill.hpp [4:5]
+ boost/units/base_units/us/grain.hpp [4:5]
+ boost/units/base_units/us/hundredweight.hpp [4:5]
+ boost/units/base_units/us/inch.hpp [4:5]
+ boost/units/base_units/us/mil.hpp [4:5]
+ boost/units/base_units/us/mile.hpp [4:5]
+ boost/units/base_units/us/minim.hpp [4:5]
+ boost/units/base_units/us/ounce.hpp [4:5]
+ boost/units/base_units/us/pint.hpp [4:5]
+ boost/units/base_units/us/pound.hpp [4:5]
+ boost/units/base_units/us/quart.hpp [4:5]
+ boost/units/base_units/us/tablespoon.hpp [4:5]
+ boost/units/base_units/us/teaspoon.hpp [4:5]
+ boost/units/base_units/us/ton.hpp [4:5]
+ boost/units/base_units/us/yard.hpp [4:5]
+ boost/units/cmath.hpp [4:5]
+ boost/units/conversion.hpp [4:5]
+ boost/units/detail/conversion_impl.hpp [4:5]
+ boost/units/detail/dimensionless_unit.hpp [4:5]
+ boost/units/detail/ordinal.hpp [4:5]
+ boost/units/detail/prevent_redefinition.hpp [4:5]
+ boost/units/detail/static_rational_power.hpp [4:5]
+ boost/units/detail/unscale.hpp [4:5]
+ boost/units/dim.hpp [4:5]
+ boost/units/dimension.hpp [4:5]
+ boost/units/dimensionless_type.hpp [4:5]
+ boost/units/heterogeneous_system.hpp [4:5]
+ boost/units/limits.hpp [4:5]
+ boost/units/make_scaled_unit.hpp [4:5]
+ boost/units/quantity.hpp [4:5]
+ boost/units/reduce_unit.hpp [4:5]
+ boost/units/scale.hpp [4:5]
+ boost/units/systems/si/prefixes.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 685e870aed6edd687e76f59c1af549a1
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 686307e753ad6e1d636dbc622eedb324
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2006 Tiago de Paula Peixoto <tiago@forked.de>
+ // Copyright (C) 2004 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/graphml.hpp [1:2]
+ boost/mpi/collectives/all_reduce.hpp [1:2]
+ boost/mpi/collectives/reduce.hpp [1:2]
+ boost/mpi/collectives/scan.hpp [1:2]
+ boost/mpi/operations.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 686b40c0117a62300977756a32a3ec15
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/rational.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 688f8a68a65d165207c6dbdd79b6f042
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/stdlib/libcomo.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 68a12c1a2cce9c33a510ed0375d9cd55
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2011 Hartmut Kaiser
+ // Copyright (c) 2001-2011 Joel de Guzman
+ // Copyright (c) 2009 Carl Barron
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/lex/tokenize_and_parse_attr.hpp [1:3]
+ boost/spirit/home/qi/parse_attr.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 68a6c764f9bdcb306b95b72ac086a1c4
+BELONGS ya.make
+ License text:
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2010 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/detail/macros.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 68d9bc6dadace636c31f8614febd2470
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2000, 2001 Stephen Cleary
+ // Copyright (C) 2010 Paul A. Bristow added Doxygen comments.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pool/pool_alloc.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 68da47e054a847ce9a50d45c42357ad0
+BELONGS ya.make
+ License text:
+ // Copyright 2015, 2017 Peter Dimov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mp11/integer_sequence.hpp [4:4]
+ boost/mp11/tuple.hpp [4:4]
+ boost/mp11/utility.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 68e8a0b89a68eb7d87379b934978ff17
+BELONGS ya.make
+ License text:
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/range_algebra.hpp [10:11]
+ boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp [9:11]
+ boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/controlled_runge_kutta.hpp [8:10]
+ boost/numeric/odeint/stepper/euler.hpp [10:11]
+ boost/numeric/odeint/stepper/runge_kutta4_classic.hpp [9:11]
+ boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp [9:11]
+ boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 68edd4a9e831eca12e9c421dc603f4c6
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/platform/win32.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 69401e7364b54c2f9974884bf9f0569d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2010 Alfredo Correa
+ // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2016 Norbert Wenzel
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/geometries/adapted/std_array.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6979af021e1c110fc46cf74cf2f06442
+BELONGS ya.make
+ License text:
+ // Copyright 2003 - 2011 LASMEA UMR 6602 CNRS/Univ. Clermont II
+ // Copyright 2009 - 2011 LRI UMR 8623 CNRS/Univ Paris Sud XI
+ // Copyright 2011 Eric Niebler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/proto/detail/remove_typename.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 697cb0d596751ecb1c3f13236f0f3bc9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2011 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl/cmath.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 698c24e237249952c4045083d4e9f956
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/include/classic_spirit.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 69913f770ab644c0c626ffe368b41c06
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pending/fenced_priority_queue.hpp at line 3
+ License text:
+ // (C) Copyright Jeremiah Willcock 2004
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pending/fenced_priority_queue.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 699d2877d9168a8f70b9f8c47f949f88
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/append.hpp [3:5]
+ boost/geometry/algorithms/comparable_distance.hpp [3:5]
+ boost/geometry/algorithms/detail/comparable_distance/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/comparable_distance/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/counting.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/areal_areal.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_areal.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_linear.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/segment_box.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/backward_compatibility.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/default_strategies.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/interface.hpp [3:7]
+ boost/geometry/algorithms/detail/distance/point_to_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/collect_vectors.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/point_point.hpp [3:6]
+ boost/geometry/algorithms/detail/intersects/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/intersects/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/overlay/copy_segments.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/follow.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/select_rings.hpp [3:4]
+ boost/geometry/algorithms/disjoint.hpp [3:6]
+ boost/geometry/algorithms/dispatch/disjoint.hpp [3:6]
+ boost/geometry/algorithms/dispatch/distance.hpp [3:6]
+ boost/geometry/algorithms/distance.hpp [3:6]
+ boost/geometry/algorithms/for_each.hpp [3:6]
+ boost/geometry/algorithms/intersects.hpp [3:5]
+ boost/geometry/algorithms/length.hpp [3:5]
+ boost/geometry/algorithms/num_geometries.hpp [3:5]
+ boost/geometry/algorithms/num_interior_rings.hpp [3:5]
+ boost/geometry/algorithms/num_points.hpp [3:6]
+ boost/geometry/algorithms/perimeter.hpp [3:5]
+ boost/geometry/algorithms/union.hpp [3:3]
+ boost/geometry/core/cs.hpp [3:5]
+ boost/geometry/geometries/point.hpp [3:6]
+ boost/geometry/multi/algorithms/append.hpp [3:5]
+ boost/geometry/multi/algorithms/distance.hpp [3:5]
+ boost/geometry/multi/algorithms/num_points.hpp [3:5]
+ boost/geometry/policies/disjoint_interrupt_policy.hpp [3:6]
+ boost/geometry/policies/relate/intersection_ratios.hpp [3:3]
+ boost/geometry/strategies/cartesian/disjoint_segment_box.hpp [3:6]
+ boost/geometry/strategies/cartesian/intersection.hpp [3:4]
+ boost/geometry/strategies/concepts/distance_concept.hpp [3:5]
+ boost/geometry/strategies/default_comparable_distance_result.hpp [3:5]
+ boost/geometry/strategies/default_distance_result.hpp [3:5]
+ boost/geometry/strategies/default_length_result.hpp [3:5]
+ boost/geometry/strategies/distance.hpp [3:5]
+ boost/geometry/strategies/spherical/distance_cross_track.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 699df4854f5487b4d64fc61aef362aed
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ // Copyright (C) 2001 Gary Powell (gary.powell@sierra.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/tuple/tuple_comparison.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 69bcb4be33af6a68ee5b2402e22c8a3b
+BELONGS libs/thread/ya.make
+ License text:
+ // Copyright (C) 2007 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/thread/src/pthread/once.cpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 69c01e55c80a63b913179de5dfb66471
+BELONGS ya.make
+ License text:
+ Copyright (c) 2008-2010: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/detail/interval_map_algo.hpp [2:2]
+ boost/icl/detail/interval_set_algo.hpp [2:2]
+ boost/icl/type_traits/absorbs_identities.hpp [2:2]
+ boost/icl/type_traits/unit_element.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6a46fd178395575735278797c48f3d2b
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2010-2011 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/heap/policies.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6a5bb33534c65cbbd8a5451177723c69
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2011 Hartmut Kaiser
+ Copyright (c) Christopher Diggins 2005
+ Copyright (c) Pablo Aguilar 2005
+ Copyright (c) Kevlin Henney 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/detail/hold_any.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6a6c9a6124e28d8085f33940fe7bdb01
+BELONGS libs/log/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/log/src/timestamp.cpp at line 4
+ License text:
+ * Copyright Andrey Semashev 2007 - 2018.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/log/src/timestamp.cpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6a88160c047fa8e02c3278fc7d84cae4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/has_trivial_move_assign.hpp at line 6, boost/type_traits/has_trivial_move_constructor.hpp at line 6, boost/type_traits/is_nothrow_move_assignable.hpp at line 6, boost/type_traits/is_nothrow_move_constructible.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/has_trivial_move_assign.hpp [2:6]
+ boost/type_traits/has_trivial_move_constructor.hpp [2:6]
+ boost/type_traits/is_nothrow_move_assignable.hpp [2:6]
+ boost/type_traits/is_nothrow_move_constructible.hpp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6a8a7f9c1dc28ae01bbb471e161b9528
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2008 Frank Mori Hess
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/detail/lwm_nop.hpp [4:5]
+ boost/signals2/detail/lwm_pthreads.hpp [4:5]
+ boost/signals2/detail/lwm_win32_cs.hpp [4:6]
+ boost/signals2/mutex.hpp [4:5]
+ boost/smart_ptr/owner_less.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6a98d8fc5a884a9147e3cd6981b9cba9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2009-2010 Hartmut Kaiser
+ Copyright (c) 2010-2011 Christopher Schmidt
+ Copyright (c) 2013-2014 Damien Buhl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/adt/adapt_adt.hpp [2:5]
+ boost/fusion/adapted/adt/adapt_adt_named.hpp [2:4]
+ boost/fusion/adapted/adt/adapt_assoc_adt.hpp [2:5]
+ boost/fusion/adapted/adt/detail/adapt_base.hpp [2:4]
+ boost/fusion/adapted/adt/detail/extension.hpp [2:4]
+ boost/fusion/adapted/struct/detail/adapt_base.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6aa5a368ddf82ac8765157c83c7cbccb
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2005 Peter Dimov
+ // Copyright 2007-2012 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp [12:14]
+ boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp [16:18]
+ boost/smart_ptr/detail/shared_count.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_aix.hpp [8:10]
+ boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp [13:15]
+ boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_nt.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_pt.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_base_solaris.hpp [8:10]
+ boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp [8:11]
+ boost/smart_ptr/detail/sp_counted_base_w32.hpp [13:14]
+ boost/smart_ptr/detail/sp_counted_impl.hpp [13:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6b1ab40ae46ff90ccb7c47e8c55973bc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/buffer_concepts.hpp at line 3, boost/graph/stoer_wagner_min_cut.hpp at line 3
+ License text:
+ // Copyright Daniel Trebbien 2010.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or the copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/buffer_concepts.hpp [1:3]
+ boost/graph/stoer_wagner_min_cut.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6b3739203926d66bd02ccd13e7de0e21
+BELONGS ya.make
+ License text:
+ // (C) Copyright Stephen Cleary 2000.
+ // (C) Copyright Ion Gaztanaga 2007-2013.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/math_functions.hpp [3:4]
+ boost/container/detail/mutex.hpp [3:4]
+ boost/interprocess/detail/math_functions.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6b6f79fc5e7fa6cea0ca8005d59ea5f4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/numeric/detail/function1.hpp at line 3, boost/accumulators/numeric/detail/function2.hpp at line 3, boost/accumulators/numeric/detail/function3.hpp at line 3, boost/accumulators/numeric/detail/function4.hpp at line 3, boost/accumulators/numeric/detail/function_n.hpp at line 3, boost/accumulators/numeric/detail/pod_singleton.hpp at line 3, boost/archive/detail/register_archive.hpp at line 3, boost/concept/assert.hpp at line 3, boost/concept/detail/borland.hpp at line 3, boost/concept/detail/concept_def.hpp at line 3, boost/concept/detail/concept_undef.hpp at line 3, boost/concept/detail/general.hpp at line 3, boost/concept/detail/has_constraints.hpp at line 3, boost/concept/detail/msvc.hpp at line 3, boost/concept/requires.hpp at line 3, boost/concept/usage.hpp at line 3, boost/concept_check/borland.hpp at line 3, boost/concept_check/general.hpp at line 3, boost/concept_check/has_constraints.hpp at line 3, boost/concept_check/msvc.hpp at line 3, boost/parameter/aux_/parenthesized_type.hpp at line 3, boost/serialization/singleton.hpp at line 9
+ License text:
+ // Copyright David Abrahams 2006. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/numeric/detail/function1.hpp [1:3]
+ boost/accumulators/numeric/detail/function2.hpp [1:3]
+ boost/accumulators/numeric/detail/function3.hpp [1:3]
+ boost/accumulators/numeric/detail/function4.hpp [1:3]
+ boost/accumulators/numeric/detail/function_n.hpp [1:3]
+ boost/accumulators/numeric/detail/pod_singleton.hpp [1:3]
+ boost/archive/detail/register_archive.hpp [1:3]
+ boost/concept/assert.hpp [1:3]
+ boost/concept/detail/borland.hpp [1:3]
+ boost/concept/detail/concept_def.hpp [1:3]
+ boost/concept/detail/concept_undef.hpp [1:3]
+ boost/concept/detail/general.hpp [1:3]
+ boost/concept/detail/has_constraints.hpp [1:3]
+ boost/concept/detail/msvc.hpp [1:3]
+ boost/concept/requires.hpp [1:3]
+ boost/concept/usage.hpp [1:3]
+ boost/concept_check/borland.hpp [1:3]
+ boost/concept_check/general.hpp [1:3]
+ boost/concept_check/has_constraints.hpp [1:3]
+ boost/concept_check/msvc.hpp [1:3]
+ boost/parameter/aux_/parenthesized_type.hpp [1:3]
+ boost/serialization/singleton.hpp [7:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6ba84e6b22158f449d69d0b66297024e
+BELONGS libs/regex/ya.make ya.make
+ License text:
+ * Copyright (c) 2004
+ * John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex/concepts.hpp [3:4]
+ boost/regex/icu.hpp [3:4]
+ boost/regex/mfc.hpp [3:4]
+ boost/regex/pending/object_cache.hpp [3:4]
+ boost/regex/pending/static_mutex.hpp [3:4]
+ boost/regex/pending/unicode_iterator.hpp [3:4]
+ boost/regex/v4/basic_regex_creator.hpp [3:4]
+ boost/regex/v4/basic_regex_parser.hpp [3:4]
+ boost/regex/v4/c_regex_traits.hpp [3:4]
+ boost/regex/v4/cpp_regex_traits.hpp [3:4]
+ boost/regex/v4/protected_call.hpp [3:4]
+ boost/regex/v4/regex_traits_defaults.hpp [3:4]
+ boost/regex/v4/w32_regex_traits.hpp [3:4]
+ libs/regex/src/c_regex_traits.cpp [3:4]
+ libs/regex/src/cpp_regex_traits.cpp [3:4]
+ libs/regex/src/icu.cpp [3:4]
+ libs/regex/src/regex_raw_buffer.cpp [3:4]
+ libs/regex/src/regex_traits_defaults.cpp [3:4]
+ libs/regex/src/static_mutex.cpp [3:4]
+ libs/regex/src/w32_regex_traits.cpp [3:4]
+ libs/regex/src/wc_regex_traits.cpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6bb32fef4ebd189bd262c0096d6414ff
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2006, 2015
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/relative_difference.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6bc33a98f148ae61cdfa08dee31cb8a6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/detail/uuid_generic.ipp at line 4
+ License text:
+ * Copyright Andy Tompkins 2006.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/uuid/detail/uuid_generic.ipp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6c09a0db5e085f0080699290089398e9
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/sizeof.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6c84f67bc267aa5792c9ce1502ce694e
+BELONGS ya.make
+ License text:
+ // (C) Copyright Howard Hinnant 2007-2010. Distributed under the Boost
+ // Software License, Version 1.0. (see http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/sync/interprocess_sharable_mutex.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6c8d3bbf493a9bc4cb2f612592da5d97
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp [3:3]
+ boost/geometry/algorithms/detail/get_max_size.hpp [3:6]
+ boost/geometry/policies/robustness/robust_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6cb8699606d013c0845cb870893ac3e8
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process/args.hpp [1:6]
+ boost/process/async_pipe.hpp [1:5]
+ boost/process/async_system.hpp [1:6]
+ boost/process/child.hpp [1:6]
+ boost/process/cmd.hpp [1:6]
+ boost/process/detail/child_decl.hpp [1:6]
+ boost/process/detail/config.hpp [1:6]
+ boost/process/detail/execute_impl.hpp [1:6]
+ boost/process/detail/handler_base.hpp [1:6]
+ boost/process/detail/posix/async_in.hpp [1:5]
+ boost/process/detail/posix/async_out.hpp [1:5]
+ boost/process/detail/posix/basic_pipe.hpp [1:5]
+ boost/process/detail/posix/child_handle.hpp [1:5]
+ boost/process/detail/posix/close_in.hpp [1:5]
+ boost/process/detail/posix/close_out.hpp [1:5]
+ boost/process/detail/posix/executor.hpp [1:5]
+ boost/process/detail/posix/fd.hpp [1:5]
+ boost/process/detail/posix/file_in.hpp [1:5]
+ boost/process/detail/posix/file_out.hpp [1:6]
+ boost/process/detail/posix/null_in.hpp [1:5]
+ boost/process/detail/posix/null_out.hpp [1:6]
+ boost/process/detail/posix/pipe_in.hpp [1:5]
+ boost/process/detail/posix/pipe_out.hpp [1:6]
+ boost/process/detail/posix/search_path.hpp [1:5]
+ boost/process/detail/posix/shell_path.hpp [1:5]
+ boost/process/detail/posix/signal.hpp [1:6]
+ boost/process/detail/posix/start_dir.hpp [1:5]
+ boost/process/detail/posix/terminate.hpp [1:5]
+ boost/process/detail/posix/wait_for_exit.hpp [1:5]
+ boost/process/detail/posix/wait_group.hpp [1:5]
+ boost/process/detail/throw_on_error.hpp [1:6]
+ boost/process/detail/windows/async_in.hpp [1:5]
+ boost/process/detail/windows/async_out.hpp [1:5]
+ boost/process/detail/windows/child_handle.hpp [1:5]
+ boost/process/detail/windows/close_in.hpp [1:5]
+ boost/process/detail/windows/close_out.hpp [1:5]
+ boost/process/detail/windows/executor.hpp [1:6]
+ boost/process/detail/windows/file_in.hpp [1:5]
+ boost/process/detail/windows/file_out.hpp [1:5]
+ boost/process/detail/windows/null_in.hpp [1:5]
+ boost/process/detail/windows/null_out.hpp [1:5]
+ boost/process/detail/windows/pipe_in.hpp [1:5]
+ boost/process/detail/windows/pipe_out.hpp [1:6]
+ boost/process/detail/windows/search_path.hpp [1:5]
+ boost/process/detail/windows/shell_path.hpp [1:5]
+ boost/process/detail/windows/show_window.hpp [1:6]
+ boost/process/detail/windows/start_dir.hpp [1:5]
+ boost/process/detail/windows/terminate.hpp [1:5]
+ boost/process/detail/windows/wait_for_exit.hpp [1:6]
+ boost/process/error.hpp [1:6]
+ boost/process/exe.hpp [1:6]
+ boost/process/pipe.hpp [1:5]
+ boost/process/search_path.hpp [1:5]
+ boost/process/shell.hpp [1:6]
+ boost/process/spawn.hpp [1:6]
+ boost/process/start_dir.hpp [1:5]
+ boost/process/system.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6ce14f1c23b7f081182f398a3770f41b
+BELONGS ya.make
+ License text:
+ Copyright (c) 2006 Daniel Wallin
+ Copyright (c) 2005 Dan Marsden
+ Copyright (c) 2007 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl.hpp [2:4]
+ boost/phoenix/stl/algorithm.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6cebab0728f1dcaff40c8a96c7f12d0f
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2001-2004
+ // Copyright David Abrahams 2001-2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/accumulate.hpp [5:6]
+ boost/mpl/always.hpp [5:5]
+ boost/mpl/arg.hpp [9:10]
+ boost/mpl/arg_fwd.hpp [5:6]
+ boost/mpl/aux_/arg_typedef.hpp [5:5]
+ boost/mpl/aux_/arity.hpp [5:5]
+ boost/mpl/aux_/arity_spec.hpp [5:5]
+ boost/mpl/aux_/basic_bind.hpp [5:6]
+ boost/mpl/aux_/config/dtp.hpp [5:5]
+ boost/mpl/aux_/config/eti.hpp [5:5]
+ boost/mpl/aux_/config/nttp.hpp [5:5]
+ boost/mpl/aux_/fold_op.hpp [5:5]
+ boost/mpl/aux_/fold_pred.hpp [5:5]
+ boost/mpl/aux_/full_lambda.hpp [9:9]
+ boost/mpl/aux_/is_msvc_eti_arg.hpp [5:5]
+ boost/mpl/aux_/iter_fold_if_impl.hpp [5:6]
+ boost/mpl/aux_/lambda_arity_param.hpp [5:5]
+ boost/mpl/aux_/lambda_support.hpp [5:5]
+ boost/mpl/aux_/msvc_eti_base.hpp [5:5]
+ boost/mpl/aux_/msvc_type.hpp [5:5]
+ boost/mpl/aux_/na.hpp [5:5]
+ boost/mpl/aux_/na_assert.hpp [5:5]
+ boost/mpl/aux_/na_fwd.hpp [5:5]
+ boost/mpl/aux_/na_spec.hpp [5:5]
+ boost/mpl/aux_/nttp_decl.hpp [5:5]
+ boost/mpl/aux_/preprocessed/bcc/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/arg.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/full_lambda.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/inherit.hpp [2:2]
+ boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/template_arity.hpp [2:2]
+ boost/mpl/aux_/static_cast.hpp [5:5]
+ boost/mpl/aux_/template_arity.hpp [9:9]
+ boost/mpl/aux_/template_arity_fwd.hpp [5:5]
+ boost/mpl/bind.hpp [9:10]
+ boost/mpl/empty_base.hpp [5:5]
+ boost/mpl/fold.hpp [5:6]
+ boost/mpl/inherit.hpp [9:9]
+ boost/mpl/inherit_linearly.hpp [5:5]
+ boost/mpl/is_placeholder.hpp [5:5]
+ boost/mpl/iter_fold.hpp [5:6]
+ boost/mpl/iterator_range.hpp [5:5]
+ boost/mpl/lambda.hpp [5:5]
+ boost/mpl/lambda_fwd.hpp [5:5]
+ boost/mpl/lower_bound.hpp [5:5]
+ boost/mpl/map/aux_/include_preprocessed.hpp [2:2]
+ boost/mpl/pair.hpp [5:5]
+ boost/mpl/placeholders.hpp [9:10]
+ boost/mpl/reverse_fold.hpp [5:6]
+ boost/mpl/reverse_iter_fold.hpp [5:6]
+ boost/mpl/upper_bound.hpp [5:5]
+ boost/mpl/void.hpp [5:5]
+ boost/mpl/void_fwd.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6d0f48a2307249fe584bb5a13388f05b
+BELONGS ya.make
+ License text:
+ // Copyright 2016, 2017 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_noexcept.hpp [12:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6d1d86a114f64cfc33bd34acca8b1a34
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+ // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lambda/casts.hpp [3:4]
+ boost/lambda/construct.hpp [3:4]
+ boost/lambda/core.hpp [3:4]
+ boost/lambda/detail/control_constructs_common.hpp [3:4]
+ boost/lambda/if.hpp [3:5]
+ boost/lambda/loops.hpp [3:5]
+ boost/lambda/switch.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6d352fb30bdf4f6229e55027126be38e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/permutation_iterator.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/permutation_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6d63b13de108fa5435475ab01814eafe
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008-2009 Ben Hanson
+ // Copyright (c) 2008-2011 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/lex/lexer/lexertl/generate_static.hpp [1:2]
+ boost/spirit/home/lex/lexer/lexertl/generate_static.hpp [890:893]
+ boost/spirit/home/support/detail/lexer/generate_cpp.hpp [82:84]
+ boost/spirit/home/support/detail/lexer/generate_re2c.hpp [116:118]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6d6738110c1306103103aca941400af9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/operators.hpp at line 6, boost/operators_v1.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/operators.hpp [3:6]
+ boost/operators_v1.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6d897263feaeaee07384a13d45475905
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/io/svg/write.hpp [3:4]
+ boost/geometry/io/svg/write_svg.hpp [3:4]
+ boost/geometry/io/svg/write_svg_multi.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6dcd15b11de2202a28820899dc8fe49d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/flyweight/assoc_container_factory.hpp at line 3, boost/flyweight/flyweight.hpp at line 5, boost/flyweight/flyweight_fwd.hpp at line 3, boost/flyweight/serialize.hpp at line 3
+ License text:
+ /* Copyright 2006-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/flyweight/assoc_container_factory.hpp [1:3]
+ boost/flyweight/flyweight.hpp [3:5]
+ boost/flyweight/flyweight_fwd.hpp [1:3]
+ boost/flyweight/serialize.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6dd9e96b64547a3a52a8bce6e10ac74d
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2009, 2016 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lockfree/detail/prefix.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6ddab30a8c1d7c05633d59e90eea754f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/limits.hpp at line 5, boost/version.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/limits.hpp [2:5]
+ boost/version.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6df2f3044559d6be214598177430d513
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2012-2014 Bruno Lalande, Paris, France.
+ // Copyright (c) 2012-2014 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/multi/algorithms/disjoint.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6df3b6d6eaafbb2e1471ebd6fbbac607
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015-2016 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6e0562785549dce2f5f760d623bb9042
+BELONGS ya.make
+ License text:
+ Copyright 2010-2012 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2012 Christoph Koke
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp [9:11]
+ boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/implicit_euler.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6e091bbf03d7f6fa9276d2cfcaddde71
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2007-9 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/thread_group.hpp [6:6]
+ boost/thread/detail/thread_interruption.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6e0d983d26a329ac59572ff890ab7117
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/utils/foreach.hpp at line 4
+ License text:
+ // (C) Copyright Eric Niebler 2004-2005
+ // (C) Copyright Gennadiy Rozental 2001.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/test/utils/foreach.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6e213e7d6c9460c8044e118a6f58e0ce
+BELONGS ya.make
+ License text:
+ // Copyright Antony Polukhin, 2016-2017.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/stacktrace.hpp [1:1]
+ boost/stacktrace/detail/addr2line_impls.hpp [1:1]
+ boost/stacktrace/detail/collect_msvc.ipp [1:1]
+ boost/stacktrace/detail/collect_noop.ipp [1:1]
+ boost/stacktrace/detail/collect_unwind.ipp [1:1]
+ boost/stacktrace/detail/frame_decl.hpp [1:1]
+ boost/stacktrace/detail/frame_msvc.ipp [1:1]
+ boost/stacktrace/detail/frame_noop.ipp [1:1]
+ boost/stacktrace/detail/frame_unwind.ipp [1:1]
+ boost/stacktrace/detail/libbacktrace_impls.hpp [1:1]
+ boost/stacktrace/detail/location_from_symbol.hpp [1:1]
+ boost/stacktrace/detail/pop_options.h [1:1]
+ boost/stacktrace/detail/push_options.h [1:1]
+ boost/stacktrace/detail/safe_dump_noop.ipp [1:1]
+ boost/stacktrace/detail/safe_dump_posix.ipp [1:1]
+ boost/stacktrace/detail/to_hex_array.hpp [1:1]
+ boost/stacktrace/detail/unwind_base_impls.hpp [1:1]
+ boost/stacktrace/frame.hpp [1:1]
+ boost/stacktrace/safe_dump_to.hpp [1:1]
+ boost/stacktrace/stacktrace.hpp [1:1]
+ boost/stacktrace/stacktrace_fwd.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6e5349aeab7a1e7bcb601559040c534c
+BELONGS ya.make
+ License text:
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/algebra/detail/extract_value_type.hpp [9:10]
+ boost/numeric/odeint/algebra/detail/norm_inf.hpp [9:10]
+ boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/algebra/norm_result_type.hpp [9:10]
+ boost/numeric/odeint/algebra/operations_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/mpi/mpi.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_state.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_vector_state.hpp [9:11]
+ boost/numeric/odeint/external/mtl4/mtl4.hpp [9:10]
+ boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/openmp/openmp.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_state.hpp [9:11]
+ boost/numeric/odeint/external/thrust/thrust.hpp [9:10]
+ boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/iterator/const_step_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/const_step_time_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp [9:10]
+ boost/numeric/odeint/util/n_ary_helper.hpp [7:9]
+ boost/numeric/odeint/util/split.hpp [9:11]
+ boost/numeric/odeint/util/split_adaptor.hpp [9:11]
+ boost/numeric/odeint/util/stepper_traits.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6e810d935436bb503743a496e01e0d74
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015 Jakub Szuppe <j.szuppe@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/algorithm/detail/find_extrema_with_reduce.hpp [2:2]
+ boost/compute/algorithm/detail/merge_sort_on_cpu.hpp [2:2]
+ boost/compute/algorithm/detail/reduce_by_key.hpp [2:2]
+ boost/compute/algorithm/detail/reduce_by_key_with_scan.hpp [2:2]
+ boost/compute/algorithm/detail/serial_reduce_by_key.hpp [2:2]
+ boost/compute/algorithm/reduce_by_key.hpp [2:2]
+ boost/compute/iterator/strided_iterator.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6f1a959bfdc2b4cc37ad209d64c9585b
+BELONGS ya.make
+ License text:
+ Copyright (c) 2016 Paul Fultz II
+ boost/hof.hpp
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hof.hpp [2:4]
+ boost/hof/config.hpp [2:4]
+ boost/hof/detail/intrinsics.hpp [2:4]
+ boost/hof/detail/noexcept.hpp [2:4]
+ boost/hof/detail/recursive_constexpr_depth.hpp [2:4]
+ boost/hof/detail/result_type.hpp [2:4]
+ boost/hof/detail/unpack_tuple.hpp [2:4]
+ boost/hof/detail/using.hpp [2:4]
+ boost/hof/function_param_limit.hpp [2:4]
+ boost/hof/is_unpackable.hpp [2:4]
+ boost/hof/limit.hpp [2:4]
+ boost/hof/unpack_sequence.hpp [2:4]
+ boost/hof/version.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6f2106d29f8f11f40ccd5ca1f99c446b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/detail/comp_detected.h at line 4, boost/predef/detail/platform_detected.h at line 4
+ License text:
+ Copyright Rene Rivera 2014
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/detail/comp_detected.h [2:4]
+ boost/predef/detail/platform_detected.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6f5226a9270498743ea889158c0201c6
+BELONGS ya.make
+ License text:
+ @Copyright Barrett Adair 2016-2017
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/callable_traits/detail/config.hpp [2:2]
+ boost/callable_traits/detail/core.hpp [3:5]
+ boost/callable_traits/detail/default_callable_traits.hpp [2:2]
+ boost/callable_traits/detail/polyfills/make_index_sequence.hpp [2:2]
+ boost/callable_traits/detail/sfinae_errors.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6f522c25b81fd9005f9f0cdd69d03b25
+BELONGS libs/regex/ya.make ya.make
+ License text:
+ // Copyright (c) 2011 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/detail/bessel_jy_series.hpp [1:3]
+ boost/math/tools/big_constant.hpp [2:4]
+ boost/multiprecision/detail/big_lanczos.hpp [2:4]
+ libs/regex/src/internals.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6f5d2def13569cd2caeacc3686b4ff6e
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011, 2012 Martin Lambers <marlam@marlam.de>
+ // The QSC projection was introduced in:
+ // [OL76]
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/qsc.hpp [27:29]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6f7c276a012f9ee2246668b32b4af25b
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/device/mapped_file.hpp at line 5, libs/iostreams/src/mapped_file.cpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/device/mapped_file.hpp [1:5]
+ libs/iostreams/src/mapped_file.cpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6faaf754e301184e7a07944b24799553
+BELONGS ya.make
+ License text:
+ // Copyright 2004 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/bc_clustering.hpp [1:1]
+ boost/graph/betweenness_centrality.hpp [1:1]
+ boost/graph/circle_layout.hpp [1:1]
+ boost/graph/distributed/betweenness_centrality.hpp [1:1]
+ boost/graph/distributed/breadth_first_search.hpp [1:1]
+ boost/graph/gursoy_atun_layout.hpp [1:1]
+ boost/graph/kamada_kawai_spring_layout.hpp [1:1]
+ boost/graph/leda_graph.hpp [2:6]
+ boost/graph/overloading.hpp [1:1]
+ boost/graph/parallel/algorithm.hpp [1:1]
+ boost/graph/parallel/distribution.hpp [1:1]
+ boost/graph/parallel/process_group.hpp [1:1]
+ boost/graph/parallel/properties.hpp [1:1]
+ boost/graph/random_layout.hpp [1:1]
+ boost/graph/sequential_vertex_coloring.hpp [2:4]
+ boost/graph/small_world_generator.hpp [1:1]
+ boost/graph/vertex_and_edge_range.hpp [1:1]
+ boost/mpi/datatype.hpp [1:3]
+ boost/pending/relaxed_heap.hpp [1:1]
+ boost/property_map/parallel/caching_property_map.hpp [1:1]
+ boost/property_map/parallel/process_group.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6fb2610480648ec237cadfaced17b5b9
+BELONGS ya.make
+ License text:
+ Copyright 2015 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/integrate/check_adapter.hpp [9:9]
+ boost/numeric/odeint/integrate/max_step_checker.hpp [9:9]
+ boost/numeric/odeint/util/odeint_error.hpp [9:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 6fcf13fc4e2d35e1d54e73b5b60aca32
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013, 2014.
+ // Modifications copyright (c) 2013, 2014, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/sections/range_by_section.hpp [10:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 700d924b0a839bc25561f5ca7e969034
+BELONGS ya.make
+ License text:
+ // Copyright 2002, 2009 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/enable_shared_from_this.hpp [7:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 70510be2c2a58753a110cb44f81353ea
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process.hpp [1:7]
+ boost/process/args.hpp [1:6]
+ boost/process/async.hpp [1:1]
+ boost/process/async_system.hpp [1:6]
+ boost/process/child.hpp [1:6]
+ boost/process/cmd.hpp [1:6]
+ boost/process/detail/basic_cmd.hpp [1:1]
+ boost/process/detail/child_decl.hpp [1:6]
+ boost/process/detail/config.hpp [1:6]
+ boost/process/detail/execute_impl.hpp [1:6]
+ boost/process/detail/handler.hpp [1:1]
+ boost/process/detail/handler_base.hpp [1:6]
+ boost/process/detail/on_exit.hpp [1:1]
+ boost/process/detail/posix/asio_fwd.hpp [1:1]
+ boost/process/detail/posix/async_handler.hpp [1:1]
+ boost/process/detail/posix/async_pipe.hpp [1:1]
+ boost/process/detail/posix/basic_cmd.hpp [1:1]
+ boost/process/detail/posix/cmd.hpp [1:1]
+ boost/process/detail/posix/compare_handles.hpp [1:1]
+ boost/process/detail/posix/env_init.hpp [1:1]
+ boost/process/detail/posix/environment.hpp [1:1]
+ boost/process/detail/posix/exe.hpp [1:1]
+ boost/process/detail/posix/file_descriptor.hpp [1:1]
+ boost/process/detail/posix/file_out.hpp [1:6]
+ boost/process/detail/posix/group_handle.hpp [1:1]
+ boost/process/detail/posix/group_ref.hpp [1:1]
+ boost/process/detail/posix/handler.hpp [1:1]
+ boost/process/detail/posix/io_context_ref.hpp [1:1]
+ boost/process/detail/posix/null_out.hpp [1:6]
+ boost/process/detail/posix/on_exit.hpp [1:1]
+ boost/process/detail/posix/pipe_out.hpp [1:6]
+ boost/process/detail/posix/signal.hpp [1:6]
+ boost/process/detail/throw_on_error.hpp [1:6]
+ boost/process/detail/traits.hpp [1:1]
+ boost/process/detail/traits/async.hpp [1:1]
+ boost/process/detail/traits/cmd_or_exe.hpp [1:1]
+ boost/process/detail/traits/decl.hpp [1:1]
+ boost/process/detail/traits/env.hpp [1:1]
+ boost/process/detail/traits/error.hpp [1:1]
+ boost/process/detail/traits/group.hpp [1:1]
+ boost/process/detail/traits/wchar_t.hpp [1:1]
+ boost/process/detail/windows/asio_fwd.hpp [1:1]
+ boost/process/detail/windows/async_handler.hpp [1:1]
+ boost/process/detail/windows/async_pipe.hpp [1:1]
+ boost/process/detail/windows/basic_cmd.hpp [1:1]
+ boost/process/detail/windows/basic_pipe.hpp [1:1]
+ boost/process/detail/windows/cmd.hpp [1:1]
+ boost/process/detail/windows/compare_handles.hpp [1:1]
+ boost/process/detail/windows/env_init.hpp [1:1]
+ boost/process/detail/windows/environment.hpp [1:1]
+ boost/process/detail/windows/executor.hpp [1:6]
+ boost/process/detail/windows/file_descriptor.hpp [1:1]
+ boost/process/detail/windows/group_handle.hpp [1:1]
+ boost/process/detail/windows/group_ref.hpp [1:1]
+ boost/process/detail/windows/handler.hpp [1:1]
+ boost/process/detail/windows/io_context_ref.hpp [1:1]
+ boost/process/detail/windows/job_workaround.hpp [1:1]
+ boost/process/detail/windows/locale.hpp [1:2]
+ boost/process/detail/windows/on_exit.hpp [1:1]
+ boost/process/detail/windows/pipe_out.hpp [1:6]
+ boost/process/detail/windows/show_window.hpp [1:6]
+ boost/process/detail/windows/wait_for_exit.hpp [1:6]
+ boost/process/detail/windows/wait_group.hpp [1:1]
+ boost/process/env.hpp [1:1]
+ boost/process/environment.hpp [1:1]
+ boost/process/error.hpp [1:6]
+ boost/process/exception.hpp [1:1]
+ boost/process/exe.hpp [1:6]
+ boost/process/extend.hpp [1:1]
+ boost/process/group.hpp [1:1]
+ boost/process/io.hpp [1:1]
+ boost/process/locale.hpp [1:4]
+ boost/process/posix.hpp [1:1]
+ boost/process/shell.hpp [1:6]
+ boost/process/spawn.hpp [1:6]
+ boost/process/system.hpp [1:6]
+ boost/process/windows.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 705c5d090b50e4c47ff6b9307ec838aa
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/smart_ptr/intrusive_ptr.hpp at line 8, boost/interprocess/smart_ptr/scoped_ptr.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/intrusive_ptr.hpp [5:8]
+ boost/interprocess/smart_ptr/scoped_ptr.hpp [5:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 70a94800ba84db85ec3ff20c6d23755e
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/is_incrementable.hpp at line 3, boost/indirect_reference.hpp at line 7, boost/iterator_adaptors.hpp at line 3, boost/mpl/min_element.hpp at line 7, boost/pointee.hpp at line 7, boost/python/detail/enable_if.hpp at line 3, boost/python/detail/indirect_traits.hpp at line 3, boost/python/detail/is_wrapper.hpp at line 3, boost/python/detail/sfinae.hpp at line 3, boost/python/detail/unwrap_type_id.hpp at line 3, boost/python/detail/unwrap_wrapper.hpp at line 3, boost/python/detail/value_arg.hpp at line 3, boost/python/detail/wrapper_base.hpp at line 3, boost/python/object/class_metadata.hpp at line 3, boost/python/override.hpp at line 5, boost/python/wrapper.hpp at line 3, libs/python/src/dict.cpp at line 3, libs/python/src/str.cpp at line 3, libs/python/src/tuple.cpp at line 3, libs/python/src/wrapper.cpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/is_incrementable.hpp [1:3]
+ boost/indirect_reference.hpp [5:7]
+ boost/iterator_adaptors.hpp [1:3]
+ boost/mpl/min_element.hpp [5:5]
+ boost/pointee.hpp [5:7]
+ boost/python/detail/enable_if.hpp [1:3]
+ boost/python/detail/indirect_traits.hpp [1:3]
+ boost/python/detail/is_wrapper.hpp [1:3]
+ boost/python/detail/sfinae.hpp [1:3]
+ boost/python/detail/unwrap_type_id.hpp [1:3]
+ boost/python/detail/unwrap_wrapper.hpp [1:3]
+ boost/python/detail/value_arg.hpp [1:3]
+ boost/python/detail/wrapper_base.hpp [1:3]
+ boost/python/object/class_metadata.hpp [1:4]
+ boost/python/override.hpp [3:5]
+ boost/python/wrapper.hpp [1:3]
+ libs/python/src/dict.cpp [1:3]
+ libs/python/src/str.cpp [1:3]
+ libs/python/src/tuple.cpp [1:3]
+ libs/python/src/wrapper.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 70af169b5cf63d17655c660f520c4d14
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process.hpp [1:7]
+ boost/process/args.hpp [1:6]
+ boost/process/async_pipe.hpp [1:5]
+ boost/process/async_system.hpp [1:6]
+ boost/process/child.hpp [1:6]
+ boost/process/cmd.hpp [1:6]
+ boost/process/detail/child_decl.hpp [1:6]
+ boost/process/detail/config.hpp [1:6]
+ boost/process/detail/execute_impl.hpp [1:6]
+ boost/process/detail/handler_base.hpp [1:6]
+ boost/process/detail/posix/async_in.hpp [1:5]
+ boost/process/detail/posix/async_out.hpp [1:5]
+ boost/process/detail/posix/basic_pipe.hpp [1:5]
+ boost/process/detail/posix/child_handle.hpp [1:5]
+ boost/process/detail/posix/close_in.hpp [1:5]
+ boost/process/detail/posix/close_out.hpp [1:5]
+ boost/process/detail/posix/executor.hpp [1:5]
+ boost/process/detail/posix/fd.hpp [1:5]
+ boost/process/detail/posix/file_in.hpp [1:5]
+ boost/process/detail/posix/file_out.hpp [1:6]
+ boost/process/detail/posix/null_in.hpp [1:5]
+ boost/process/detail/posix/null_out.hpp [1:6]
+ boost/process/detail/posix/pipe_in.hpp [1:5]
+ boost/process/detail/posix/pipe_out.hpp [1:6]
+ boost/process/detail/posix/search_path.hpp [1:5]
+ boost/process/detail/posix/shell_path.hpp [1:5]
+ boost/process/detail/posix/signal.hpp [1:6]
+ boost/process/detail/posix/start_dir.hpp [1:5]
+ boost/process/detail/posix/terminate.hpp [1:5]
+ boost/process/detail/posix/wait_for_exit.hpp [1:5]
+ boost/process/detail/posix/wait_group.hpp [1:5]
+ boost/process/detail/throw_on_error.hpp [1:6]
+ boost/process/detail/windows/async_in.hpp [1:5]
+ boost/process/detail/windows/async_out.hpp [1:5]
+ boost/process/detail/windows/child_handle.hpp [1:5]
+ boost/process/detail/windows/close_in.hpp [1:5]
+ boost/process/detail/windows/close_out.hpp [1:5]
+ boost/process/detail/windows/executor.hpp [1:6]
+ boost/process/detail/windows/file_in.hpp [1:5]
+ boost/process/detail/windows/file_out.hpp [1:5]
+ boost/process/detail/windows/null_in.hpp [1:5]
+ boost/process/detail/windows/null_out.hpp [1:5]
+ boost/process/detail/windows/pipe_in.hpp [1:5]
+ boost/process/detail/windows/pipe_out.hpp [1:6]
+ boost/process/detail/windows/search_path.hpp [1:5]
+ boost/process/detail/windows/shell_path.hpp [1:5]
+ boost/process/detail/windows/show_window.hpp [1:6]
+ boost/process/detail/windows/start_dir.hpp [1:5]
+ boost/process/detail/windows/terminate.hpp [1:5]
+ boost/process/detail/windows/wait_for_exit.hpp [1:6]
+ boost/process/error.hpp [1:6]
+ boost/process/exe.hpp [1:6]
+ boost/process/pipe.hpp [1:5]
+ boost/process/search_path.hpp [1:5]
+ boost/process/shell.hpp [1:6]
+ boost/process/spawn.hpp [1:6]
+ boost/process/start_dir.hpp [1:5]
+ boost/process/system.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 70b7ec76fc92ec62f0bff9be8534781e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted.hpp [2:3]
+ boost/fusion/adapted/adt.hpp [2:4]
+ boost/fusion/adapted/adt/detail/adapt_base.hpp [2:4]
+ boost/fusion/adapted/adt/detail/extension.hpp [2:4]
+ boost/fusion/adapted/array.hpp [2:4]
+ boost/fusion/adapted/boost_array.hpp [2:3]
+ boost/fusion/adapted/boost_array/array_iterator.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/at_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/begin_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/category_of_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/end_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/is_view_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/size_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/detail/value_at_impl.hpp [2:3]
+ boost/fusion/adapted/boost_array/tag_of.hpp [2:3]
+ boost/fusion/adapted/mpl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/at_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/begin_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/category_of_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/empty_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/end_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/has_key_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/is_view_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/size_impl.hpp [2:3]
+ boost/fusion/adapted/mpl/detail/value_at_impl.hpp [2:3]
+ boost/fusion/adapted/std_array.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/at_impl.hpp [2:3]
+ boost/fusion/adapted/std_array/detail/begin_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/category_of_impl.hpp [2:3]
+ boost/fusion/adapted/std_array/detail/end_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/is_sequence_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/is_view_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/size_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/value_at_impl.hpp [2:3]
+ boost/fusion/adapted/std_array/std_array_iterator.hpp [2:4]
+ boost/fusion/adapted/std_array/tag_of.hpp [2:3]
+ boost/fusion/adapted/std_pair.hpp [2:4]
+ boost/fusion/adapted/struct.hpp [2:4]
+ boost/fusion/adapted/struct/detail/adapt_base.hpp [2:5]
+ boost/fusion/adapted/struct/detail/at_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/begin_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/category_of_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/end_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/extension.hpp [2:4]
+ boost/fusion/adapted/struct/detail/is_sequence_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/is_view_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/size_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/value_at_impl.hpp [2:4]
+ boost/fusion/algorithm/transformation/filter.hpp [2:3]
+ boost/fusion/container/deque.hpp [2:3]
+ boost/fusion/container/deque/back_extended_deque.hpp [2:3]
+ boost/fusion/container/deque/deque.hpp [2:3]
+ boost/fusion/container/deque/deque_iterator.hpp [2:3]
+ boost/fusion/container/deque/detail/at_impl.hpp [2:3]
+ boost/fusion/container/deque/detail/begin_impl.hpp [2:3]
+ boost/fusion/container/deque/detail/convert_impl.hpp [2:4]
+ boost/fusion/container/deque/detail/cpp03/deque.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/limits.hpp [2:3]
+ boost/fusion/container/deque/detail/deque_keyed_values.hpp [2:3]
+ boost/fusion/container/deque/detail/end_impl.hpp [2:3]
+ boost/fusion/container/deque/detail/keyed_element.hpp [2:3]
+ boost/fusion/container/deque/detail/value_at_impl.hpp [2:3]
+ boost/fusion/container/deque/front_extended_deque.hpp [2:3]
+ boost/fusion/container/list/detail/convert_impl.hpp [2:3]
+ boost/fusion/container/map/detail/cpp03/convert_impl.hpp [2:3]
+ boost/fusion/container/map/map_iterator.hpp [2:3]
+ boost/fusion/container/set/detail/convert_impl.hpp [2:3]
+ boost/fusion/container/vector/detail/convert_impl.hpp [2:3]
+ boost/fusion/support/detail/is_mpl_sequence.hpp [2:3]
+ boost/fusion/support/tag_of_fwd.hpp [2:3]
+ boost/fusion/view/filter_view/detail/equal_to_impl.hpp [2:3]
+ boost/fusion/view/reverse_view/detail/advance_impl.hpp [2:3]
+ boost/fusion/view/reverse_view/detail/distance_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/advance_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/at_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/distance_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/prior_impl.hpp [2:3]
+ boost/fusion/view/transform_view/detail/value_at_impl.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 70c75f8953a0e7cc364b82999fe9db5c
+BELONGS ya.make
+ License text:
+ * (C) Copyright 2013 Tim Blechmann
+ * (C) Copyright 2013 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/pause.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 70d3f9c66aa302a3e59ec38430047f6b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/chrono/typeof/boost/chrono/chrono.hpp at line 5, boost/chrono/typeof/boost/ratio.hpp at line 5
+ License text:
+ // (C) Copyright Vicente J. Botet Escriba 20010.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/typeof/boost/chrono/chrono.hpp [3:5]
+ boost/chrono/typeof/boost/ratio.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7154f956948b41d87bf8a2b73a07d675
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/tree_traits.hpp at line 3, boost/pending/detail/int_iterator.hpp at line 3
+ License text:
+ // (C) Copyright Jeremy Siek 1999.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/tree_traits.hpp [1:3]
+ boost/pending/detail/int_iterator.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 71ed11b2adc3c3af2c868e57de056941
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/policies/robustness/get_rescale_policy.hpp [3:6]
+ boost/geometry/policies/robustness/rescale_policy.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 71f99a73ae228de2701864e837c3c359
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2007 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/include/in.hpp [2:2]
+ boost/fusion/include/io.hpp [2:2]
+ boost/fusion/include/out.hpp [2:2]
+ boost/fusion/include/value_at.hpp [2:2]
+ boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp [2:4]
+ boost/spirit/home/classic/tree/tree_to_xml.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 720c432476f4bb134f4e1394670ad378
+BELONGS ya.make
+ License text:
+ // Copyright 2016 Klemens Morgenstern, Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll/detail/ctor_dtor.hpp [1:1]
+ boost/dll/detail/type_info.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7243a87c22485b4f89611b940ba19721
+BELONGS libs/atomic/ya.make ya.make
+ License text:
+ // Copyright (c) 2011 Helge Bahmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic.hpp [4:4]
+ boost/atomic/atomic.hpp [6:8]
+ boost/atomic/atomic_flag.hpp [6:8]
+ boost/atomic/detail/atomic_template.hpp [6:8]
+ boost/atomic/detail/caps_gcc_sync.hpp [6:8]
+ boost/atomic/detail/lockpool.hpp [6:7]
+ boost/atomic/detail/ops_gcc_sync.hpp [6:8]
+ boost/atomic/fences.hpp [6:8]
+ libs/atomic/src/lockpool.cpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 725bf619a93c94289aea04b05b43067f
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+ Copyright (c) 2009 Christopher Schmidt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/algorithm/query/detail/find_if.hpp [2:4]
+ boost/fusion/container/map/detail/cpp03/begin_impl.hpp [2:3]
+ boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/deref_impl.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/end_impl.hpp [2:3]
+ boost/fusion/container/map/detail/cpp03/key_of_impl.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp [2:2]
+ boost/fusion/container/map/detail/cpp03/value_of_impl.hpp [2:2]
+ boost/fusion/container/set/detail/begin_impl.hpp [2:3]
+ boost/fusion/container/set/detail/deref_data_impl.hpp [2:2]
+ boost/fusion/container/set/detail/deref_impl.hpp [2:2]
+ boost/fusion/container/set/detail/end_impl.hpp [2:3]
+ boost/fusion/container/set/detail/key_of_impl.hpp [2:2]
+ boost/fusion/container/set/detail/value_of_data_impl.hpp [2:2]
+ boost/fusion/container/set/detail/value_of_impl.hpp [2:2]
+ boost/fusion/include/deref_data.hpp [2:2]
+ boost/fusion/include/key_of.hpp [2:2]
+ boost/fusion/include/value_of_data.hpp [2:2]
+ boost/fusion/iterator/basic_iterator.hpp [2:2]
+ boost/fusion/iterator/deref_data.hpp [2:2]
+ boost/fusion/iterator/key_of.hpp [2:2]
+ boost/fusion/iterator/value_of_data.hpp [2:2]
+ boost/fusion/view/filter_view/detail/deref_data_impl.hpp [2:2]
+ boost/fusion/view/filter_view/detail/key_of_impl.hpp [2:2]
+ boost/fusion/view/filter_view/detail/value_of_data_impl.hpp [2:2]
+ boost/fusion/view/joint_view/detail/deref_data_impl.hpp [2:2]
+ boost/fusion/view/joint_view/detail/key_of_impl.hpp [2:2]
+ boost/fusion/view/joint_view/detail/value_of_data_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/at_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/deref_data_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/key_of_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/value_at_impl.hpp [2:2]
+ boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7273d54756a475d9666d11cf88482d60
+BELONGS ya.make
+ License text:
+ // Copyright 2005 Daniel Wallin.
+ // Copyright 2005 Joel de Guzman.
+ // Copyright 2005 Dan Marsden.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl/algorithm/iteration.hpp [1:3]
+ boost/phoenix/stl/algorithm/querying.hpp [1:5]
+ boost/phoenix/stl/algorithm/transformation.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 727ffdba5f4101e3db746edf2130cfbd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/version_number.h at line 4
+ License text:
+ Copyright Rene Rivera 2005-2016
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/version_number.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7285ea79f04079e3ed6508503b991411
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse.hpp at line 3, boost/metaparse/accept_tag.hpp at line 6, boost/metaparse/accept_when.hpp at line 6, boost/metaparse/alphanum.hpp at line 6, boost/metaparse/always.hpp at line 6, boost/metaparse/always_c.hpp at line 6, boost/metaparse/build_parser.hpp at line 6, boost/metaparse/change_error_message.hpp at line 6, boost/metaparse/config.hpp at line 6, boost/metaparse/debug_parsing_error.hpp at line 6, boost/metaparse/define_error.hpp at line 6, boost/metaparse/digit.hpp at line 6, boost/metaparse/digit_val.hpp at line 6, boost/metaparse/empty.hpp at line 6, boost/metaparse/entire_input.hpp at line 6, boost/metaparse/error/digit_expected.hpp at line 6, boost/metaparse/error/end_of_input_expected.hpp at line 6, boost/metaparse/error/index_out_of_range.hpp at line 6, boost/metaparse/error/letter_expected.hpp at line 6, boost/metaparse/error/literal_expected.hpp at line 6, boost/metaparse/error/none_of_the_expected_cases_found.hpp at line 6, boost/metaparse/error/unexpected_character.hpp at line 6, boost/metaparse/error/unexpected_end_of_input.hpp at line 6, boost/metaparse/error/whitespace_expected.hpp at line 6, boost/metaparse/except.hpp at line 6, boost/metaparse/fail.hpp at line 6, boost/metaparse/fail_tag.hpp at line 6, boost/metaparse/first_of.hpp at line 6, boost/metaparse/foldl.hpp at line 6, boost/metaparse/foldl1.hpp at line 6, boost/metaparse/foldl_start_with_parser.hpp at line 6, boost/metaparse/foldr.hpp at line 6, boost/metaparse/foldr1.hpp at line 6, boost/metaparse/foldr_start_with_parser.hpp at line 6, boost/metaparse/get_col.hpp at line 6, boost/metaparse/get_line.hpp at line 6, boost/metaparse/get_position.hpp at line 6, boost/metaparse/get_prev_char.hpp at line 6, boost/metaparse/get_remaining.hpp at line 6, boost/metaparse/get_result.hpp at line 6, boost/metaparse/grammar.hpp at line 6, boost/metaparse/if_.hpp at line 6, boost/metaparse/int_.hpp at line 6, boost/metaparse/is_error.hpp at line 6, boost/metaparse/iterate.hpp at line 6, boost/metaparse/iterate_c.hpp at line 6, boost/metaparse/keyword.hpp at line 6, boost/metaparse/last_of.hpp at line 6, boost/metaparse/letter.hpp at line 6, boost/metaparse/limit_one_char_except_size.hpp at line 6, boost/metaparse/limit_one_of_size.hpp at line 6, boost/metaparse/limit_sequence_size.hpp at line 6, boost/metaparse/limit_string_size.hpp at line 6, boost/metaparse/lit.hpp at line 6, boost/metaparse/lit_c.hpp at line 6, boost/metaparse/look_ahead.hpp at line 6, boost/metaparse/middle_of.hpp at line 6, boost/metaparse/next_char.hpp at line 6, boost/metaparse/next_line.hpp at line 6, boost/metaparse/nth_of.hpp at line 6, boost/metaparse/nth_of_c.hpp at line 6, boost/metaparse/one_char.hpp at line 6, boost/metaparse/one_char_except.hpp at line 6, boost/metaparse/one_char_except_c.hpp at line 6, boost/metaparse/one_of.hpp at line 6, boost/metaparse/one_of_c.hpp at line 6, boost/metaparse/repeated.hpp at line 6, boost/metaparse/repeated1.hpp at line 6, boost/metaparse/repeated_one_of.hpp at line 6, boost/metaparse/repeated_one_of1.hpp at line 6, boost/metaparse/return_.hpp at line 6, boost/metaparse/sequence.hpp at line 6, boost/metaparse/source_position.hpp at line 6, boost/metaparse/source_position_tag.hpp at line 6, boost/metaparse/space.hpp at line 6, boost/metaparse/spaces.hpp at line 6, boost/metaparse/start.hpp at line 6, boost/metaparse/string.hpp at line 3, boost/metaparse/string_tag.hpp at line 6, boost/metaparse/token.hpp at line 6, boost/metaparse/transform.hpp at line 6, boost/metaparse/unless_error.hpp at line 6, boost/metaparse/util/digit_to_int.hpp at line 6, boost/metaparse/util/digit_to_int_c.hpp at line 6, boost/metaparse/util/in_range.hpp at line 6, boost/metaparse/util/int_to_digit.hpp at line 6, boost/metaparse/util/int_to_digit_c.hpp at line 6, boost/metaparse/util/is_lcase_letter.hpp at line 6, boost/metaparse/util/is_letter.hpp at line 6, boost/metaparse/util/is_ucase_letter.hpp at line 6, boost/metaparse/util/is_whitespace.hpp at line 6, boost/metaparse/util/is_whitespace_c.hpp at line 6, boost/metaparse/v1/accept_tag.hpp at line 6, boost/metaparse/v1/always_c.hpp at line 6, boost/metaparse/v1/cpp11/fwd/string.hpp at line 6, boost/metaparse/v1/cpp11/impl/at_c.hpp at line 6, boost/metaparse/v1/cpp11/impl/concat.hpp at line 6, boost/metaparse/v1/cpp11/impl/empty_string.hpp at line 6, boost/metaparse/v1/cpp11/impl/pop_back.hpp at line 6, boost/metaparse/v1/cpp11/impl/pop_front.hpp at line 6, boost/metaparse/v1/cpp11/impl/push_back_c.hpp at line 6, boost/metaparse/v1/cpp11/impl/push_front_c.hpp at line 6, boost/metaparse/v1/cpp11/impl/remove_trailing_no_chars.hpp at line 6, boost/metaparse/v1/cpp11/impl/size.hpp at line 6, boost/metaparse/v1/cpp98/fwd/string.hpp at line 6, boost/metaparse/v1/cpp98/impl/at_c.hpp at line 6, boost/metaparse/v1/cpp98/impl/empty_string.hpp at line 6, boost/metaparse/v1/cpp98/impl/nth_of_c.hpp at line 6, boost/metaparse/v1/cpp98/impl/nth_of_c_impl.hpp at line 6, boost/metaparse/v1/cpp98/impl/pop_back.hpp at line 6, boost/metaparse/v1/cpp98/impl/pop_front.hpp at line 6, boost/metaparse/v1/cpp98/impl/push_back_c.hpp at line 6, boost/metaparse/v1/cpp98/impl/push_front_c.hpp at line 6, boost/metaparse/v1/cpp98/impl/size.hpp at line 6, boost/metaparse/v1/cpp98/impl/skip_seq.hpp at line 6, boost/metaparse/v1/cpp98/impl/update_c.hpp at line 6, boost/metaparse/v1/cpp98/nth_of_c.hpp at line 6, boost/metaparse/v1/define_error.hpp at line 6, boost/metaparse/v1/error/digit_expected.hpp at line 6, boost/metaparse/v1/error/end_of_input_expected.hpp at line 6, boost/metaparse/v1/error/index_out_of_range.hpp at line 6, boost/metaparse/v1/error/letter_expected.hpp at line 6, boost/metaparse/v1/error/literal_expected.hpp at line 6, boost/metaparse/v1/error/none_of_the_expected_cases_found.hpp at line 6, boost/metaparse/v1/error/unexpected_character.hpp at line 6, boost/metaparse/v1/error/unexpected_end_of_input.hpp at line 6, boost/metaparse/v1/error/whitespace_expected.hpp at line 6, boost/metaparse/v1/fwd/build_parser.hpp at line 6, boost/metaparse/v1/fwd/get_col.hpp at line 6, boost/metaparse/v1/fwd/get_line.hpp at line 6, boost/metaparse/v1/fwd/get_position.hpp at line 6, boost/metaparse/v1/fwd/get_prev_char.hpp at line 6, boost/metaparse/v1/fwd/get_remaining.hpp at line 6, boost/metaparse/v1/fwd/get_result.hpp at line 6, boost/metaparse/v1/fwd/next_char.hpp at line 6, boost/metaparse/v1/fwd/next_line.hpp at line 6, boost/metaparse/v1/fwd/source_position.hpp at line 6, boost/metaparse/v1/impl/apply_parser.hpp at line 6, boost/metaparse/v1/impl/at_c.hpp at line 6, boost/metaparse/v1/impl/fwd/iterate_impl.hpp at line 6, boost/metaparse/v1/impl/is_any.hpp at line 6, boost/metaparse/v1/impl/iterate_impl.hpp at line 6, boost/metaparse/v1/impl/iterate_impl_unchecked.hpp at line 6, boost/metaparse/v1/impl/no_char.hpp at line 6, boost/metaparse/v1/impl/one_char_except_not_used.hpp at line 6, boost/metaparse/v1/impl/one_of.hpp at line 6, boost/metaparse/v1/impl/sequence.hpp at line 6, boost/metaparse/v1/impl/sequence_impl.hpp at line 6, boost/metaparse/v1/impl/string_iterator.hpp at line 6, boost/metaparse/v1/impl/string_iterator_tag.hpp at line 6, boost/metaparse/v1/one_of_c.hpp at line 6, boost/metaparse/v1/source_position_tag.hpp at line 6, boost/metaparse/v1/start.hpp at line 6, boost/metaparse/v1/string_tag.hpp at line 6, boost/metaparse/v1/util/digit_to_int_c.hpp at line 6, boost/metaparse/v1/util/int_to_digit_c.hpp at line 6, boost/metaparse/v1/util/is_whitespace_c.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2013.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse.hpp [1:3]
+ boost/metaparse/accept_tag.hpp [4:6]
+ boost/metaparse/accept_when.hpp [4:6]
+ boost/metaparse/alphanum.hpp [4:6]
+ boost/metaparse/always.hpp [4:6]
+ boost/metaparse/always_c.hpp [4:6]
+ boost/metaparse/build_parser.hpp [4:6]
+ boost/metaparse/change_error_message.hpp [4:6]
+ boost/metaparse/config.hpp [4:6]
+ boost/metaparse/debug_parsing_error.hpp [4:6]
+ boost/metaparse/define_error.hpp [4:6]
+ boost/metaparse/digit.hpp [4:6]
+ boost/metaparse/digit_val.hpp [4:6]
+ boost/metaparse/empty.hpp [4:6]
+ boost/metaparse/entire_input.hpp [4:6]
+ boost/metaparse/error/digit_expected.hpp [4:6]
+ boost/metaparse/error/end_of_input_expected.hpp [4:6]
+ boost/metaparse/error/index_out_of_range.hpp [4:6]
+ boost/metaparse/error/letter_expected.hpp [4:6]
+ boost/metaparse/error/literal_expected.hpp [4:6]
+ boost/metaparse/error/none_of_the_expected_cases_found.hpp [4:6]
+ boost/metaparse/error/unexpected_character.hpp [4:6]
+ boost/metaparse/error/unexpected_end_of_input.hpp [4:6]
+ boost/metaparse/error/whitespace_expected.hpp [4:6]
+ boost/metaparse/except.hpp [4:6]
+ boost/metaparse/fail.hpp [4:6]
+ boost/metaparse/fail_tag.hpp [4:6]
+ boost/metaparse/first_of.hpp [4:6]
+ boost/metaparse/foldl.hpp [4:6]
+ boost/metaparse/foldl1.hpp [4:6]
+ boost/metaparse/foldl_start_with_parser.hpp [4:6]
+ boost/metaparse/foldr.hpp [4:6]
+ boost/metaparse/foldr1.hpp [4:6]
+ boost/metaparse/foldr_start_with_parser.hpp [4:6]
+ boost/metaparse/get_col.hpp [4:6]
+ boost/metaparse/get_line.hpp [4:6]
+ boost/metaparse/get_position.hpp [4:6]
+ boost/metaparse/get_prev_char.hpp [4:6]
+ boost/metaparse/get_remaining.hpp [4:6]
+ boost/metaparse/get_result.hpp [4:6]
+ boost/metaparse/grammar.hpp [4:6]
+ boost/metaparse/if_.hpp [4:6]
+ boost/metaparse/int_.hpp [4:6]
+ boost/metaparse/is_error.hpp [4:6]
+ boost/metaparse/iterate.hpp [4:6]
+ boost/metaparse/iterate_c.hpp [4:6]
+ boost/metaparse/keyword.hpp [4:6]
+ boost/metaparse/last_of.hpp [4:6]
+ boost/metaparse/letter.hpp [4:6]
+ boost/metaparse/limit_one_char_except_size.hpp [4:6]
+ boost/metaparse/limit_one_of_size.hpp [4:6]
+ boost/metaparse/limit_sequence_size.hpp [4:6]
+ boost/metaparse/limit_string_size.hpp [4:6]
+ boost/metaparse/lit.hpp [4:6]
+ boost/metaparse/lit_c.hpp [4:6]
+ boost/metaparse/look_ahead.hpp [4:6]
+ boost/metaparse/middle_of.hpp [4:6]
+ boost/metaparse/next_char.hpp [4:6]
+ boost/metaparse/next_line.hpp [4:6]
+ boost/metaparse/nth_of.hpp [4:6]
+ boost/metaparse/nth_of_c.hpp [4:6]
+ boost/metaparse/one_char.hpp [4:6]
+ boost/metaparse/one_char_except.hpp [4:6]
+ boost/metaparse/one_char_except_c.hpp [4:6]
+ boost/metaparse/one_of.hpp [4:6]
+ boost/metaparse/one_of_c.hpp [4:6]
+ boost/metaparse/repeated.hpp [4:6]
+ boost/metaparse/repeated1.hpp [4:6]
+ boost/metaparse/repeated_one_of.hpp [4:6]
+ boost/metaparse/repeated_one_of1.hpp [4:6]
+ boost/metaparse/return_.hpp [4:6]
+ boost/metaparse/sequence.hpp [4:6]
+ boost/metaparse/source_position.hpp [4:6]
+ boost/metaparse/source_position_tag.hpp [4:6]
+ boost/metaparse/space.hpp [4:6]
+ boost/metaparse/spaces.hpp [4:6]
+ boost/metaparse/start.hpp [4:6]
+ boost/metaparse/string.hpp [1:3]
+ boost/metaparse/string_tag.hpp [4:6]
+ boost/metaparse/token.hpp [4:6]
+ boost/metaparse/transform.hpp [4:6]
+ boost/metaparse/unless_error.hpp [4:6]
+ boost/metaparse/util/digit_to_int.hpp [4:6]
+ boost/metaparse/util/digit_to_int_c.hpp [4:6]
+ boost/metaparse/util/in_range.hpp [4:6]
+ boost/metaparse/util/int_to_digit.hpp [4:6]
+ boost/metaparse/util/int_to_digit_c.hpp [4:6]
+ boost/metaparse/util/is_lcase_letter.hpp [4:6]
+ boost/metaparse/util/is_letter.hpp [4:6]
+ boost/metaparse/util/is_ucase_letter.hpp [4:6]
+ boost/metaparse/util/is_whitespace.hpp [4:6]
+ boost/metaparse/util/is_whitespace_c.hpp [4:6]
+ boost/metaparse/v1/accept_tag.hpp [4:6]
+ boost/metaparse/v1/always_c.hpp [4:6]
+ boost/metaparse/v1/cpp11/fwd/string.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/at_c.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/concat.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/empty_string.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/pop_back.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/pop_front.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/push_back_c.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/push_front_c.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/remove_trailing_no_chars.hpp [4:6]
+ boost/metaparse/v1/cpp11/impl/size.hpp [4:6]
+ boost/metaparse/v1/cpp98/fwd/string.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/at_c.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/empty_string.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/nth_of_c.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/nth_of_c_impl.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/pop_back.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/pop_front.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/push_back_c.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/push_front_c.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/size.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/skip_seq.hpp [4:6]
+ boost/metaparse/v1/cpp98/impl/update_c.hpp [4:6]
+ boost/metaparse/v1/cpp98/nth_of_c.hpp [4:6]
+ boost/metaparse/v1/define_error.hpp [4:6]
+ boost/metaparse/v1/error/digit_expected.hpp [4:6]
+ boost/metaparse/v1/error/end_of_input_expected.hpp [4:6]
+ boost/metaparse/v1/error/index_out_of_range.hpp [4:6]
+ boost/metaparse/v1/error/letter_expected.hpp [4:6]
+ boost/metaparse/v1/error/literal_expected.hpp [4:6]
+ boost/metaparse/v1/error/none_of_the_expected_cases_found.hpp [4:6]
+ boost/metaparse/v1/error/unexpected_character.hpp [4:6]
+ boost/metaparse/v1/error/unexpected_end_of_input.hpp [4:6]
+ boost/metaparse/v1/error/whitespace_expected.hpp [4:6]
+ boost/metaparse/v1/fwd/build_parser.hpp [4:6]
+ boost/metaparse/v1/fwd/get_col.hpp [4:6]
+ boost/metaparse/v1/fwd/get_line.hpp [4:6]
+ boost/metaparse/v1/fwd/get_position.hpp [4:6]
+ boost/metaparse/v1/fwd/get_prev_char.hpp [4:6]
+ boost/metaparse/v1/fwd/get_remaining.hpp [4:6]
+ boost/metaparse/v1/fwd/get_result.hpp [4:6]
+ boost/metaparse/v1/fwd/next_char.hpp [4:6]
+ boost/metaparse/v1/fwd/next_line.hpp [4:6]
+ boost/metaparse/v1/fwd/source_position.hpp [4:6]
+ boost/metaparse/v1/impl/apply_parser.hpp [4:6]
+ boost/metaparse/v1/impl/at_c.hpp [4:6]
+ boost/metaparse/v1/impl/fwd/iterate_impl.hpp [4:6]
+ boost/metaparse/v1/impl/is_any.hpp [4:6]
+ boost/metaparse/v1/impl/iterate_impl.hpp [4:6]
+ boost/metaparse/v1/impl/iterate_impl_unchecked.hpp [4:6]
+ boost/metaparse/v1/impl/no_char.hpp [4:6]
+ boost/metaparse/v1/impl/one_char_except_not_used.hpp [4:6]
+ boost/metaparse/v1/impl/one_of.hpp [4:6]
+ boost/metaparse/v1/impl/sequence.hpp [4:6]
+ boost/metaparse/v1/impl/sequence_impl.hpp [4:6]
+ boost/metaparse/v1/impl/string_iterator.hpp [4:6]
+ boost/metaparse/v1/impl/string_iterator_tag.hpp [4:6]
+ boost/metaparse/v1/one_of_c.hpp [4:6]
+ boost/metaparse/v1/source_position_tag.hpp [4:6]
+ boost/metaparse/v1/start.hpp [4:6]
+ boost/metaparse/v1/string_tag.hpp [4:6]
+ boost/metaparse/v1/util/digit_to_int_c.hpp [4:6]
+ boost/metaparse/v1/util/int_to_digit_c.hpp [4:6]
+ boost/metaparse/v1/util/is_whitespace_c.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 72b9bd66865ddaee0fb864076f107de3
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+ // Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/geometries/concepts/point_concept.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_projected_point.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 73021121a028d194fba65596bec6cef0
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2013 Anton Bikineev
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/bessel_prime.hpp [1:3]
+ boost/math/special_functions/detail/bessel_derivatives_linear.hpp [1:3]
+ boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp [1:3]
+ boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 73025b91e8cf54ab81ff410c38be7452
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2009, 2012 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/operator_bool.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 730c07851a5b23ccbb31329a376a83df
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2015 Akira Takahashi
+ // Copyright (c) 2011-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/geometries/adapted/boost_fusion.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 73465150862f0cc2df66101601ca434e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/detail/deduce_domain.hpp at line 9
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/proto/detail/deduce_domain.hpp [7:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 734f8fc32ed77c4004c79d8db1513144
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/functions/trig.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/detail/functions/trig.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 73798cdc506bf1f1fdbb74d2be43a59f
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2014-2018.
+ // Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/geometry.hpp [7:8]
+ boost/geometry/srs/sphere.hpp [7:8]
+ boost/geometry/srs/spheroid.hpp [7:8]
+ boost/geometry/srs/srs.hpp [7:8]
+ boost/geometry/strategies/geographic/distance.hpp [5:6]
+ boost/geometry/strategies/geographic/side.hpp [5:6]
+ boost/geometry/strategies/strategies.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 73a854045058b52a933e9b9c1ed5c5bd
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007 Tobias Schwinger
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/functional/factory.hpp [2:2]
+ boost/functional/lightweight_forward_adapter.hpp [2:2]
+ boost/functional/value_factory.hpp [2:2]
+ boost/fusion/container/list/detail/empty_impl.hpp [2:2]
+ boost/fusion/functional/generation.hpp [2:2]
+ boost/fusion/functional/generation/detail/gen_make_adapter.hpp [2:2]
+ boost/fusion/functional/generation/make_fused.hpp [2:2]
+ boost/fusion/functional/generation/make_fused_function_object.hpp [2:2]
+ boost/fusion/functional/generation/make_fused_procedure.hpp [2:2]
+ boost/fusion/functional/generation/make_unfused.hpp [2:2]
+ boost/fusion/support/deduce.hpp [2:2]
+ boost/fusion/support/deduce_sequence.hpp [2:2]
+ boost/fusion/support/sequence_base.hpp [2:3]
+ boost/fusion/view/iterator_range/detail/at_impl.hpp [2:2]
+ boost/fusion/view/iterator_range/detail/value_at_impl.hpp [2:2]
+ boost/fusion/view/repetitive_view.hpp [2:2]
+ boost/fusion/view/repetitive_view/detail/begin_impl.hpp [2:2]
+ boost/fusion/view/repetitive_view/detail/deref_impl.hpp [2:2]
+ boost/fusion/view/repetitive_view/detail/end_impl.hpp [2:2]
+ boost/fusion/view/repetitive_view/detail/next_impl.hpp [2:2]
+ boost/fusion/view/repetitive_view/detail/value_of_impl.hpp [2:2]
+ boost/fusion/view/repetitive_view/repetitive_view.hpp [2:2]
+ boost/fusion/view/repetitive_view/repetitive_view_fwd.hpp [2:2]
+ boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp [2:2]
+ boost/spirit/home/support/iterators/multi_pass_fwd.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 73e1a39f02509cd9b4aa749a0fc51358
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/non_terminal/grammar.hpp [2:5]
+ boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp [2:5]
+ boost/spirit/home/classic/dynamic/impl/select.ipp [2:3]
+ boost/spirit/home/classic/dynamic/impl/switch.ipp [2:3]
+ boost/spirit/home/classic/dynamic/select.hpp [2:3]
+ boost/spirit/home/classic/dynamic/switch.hpp [2:3]
+ boost/spirit/home/classic/iterator/file_iterator.hpp [2:5]
+ boost/spirit/home/classic/iterator/impl/file_iterator.ipp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 740b8b21c73d73ca167354e62df16207
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2010 Matthias Walter (xammy@xammy.homelinux.net)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/bipartite.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7457b5550b1e9bda918d7c58dc2f723f
+BELONGS ya.make
+ License text:
+ // Copyright Eric Friedman 2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/partition_op.hpp [5:6]
+ boost/mpl/index_if.hpp [5:5]
+ boost/mpl/index_of.hpp [5:6]
+ boost/mpl/iter_fold_if.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 74ee4dff688ff710e2fd61ab32477159
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006.
+ // Copyright Paul A. Bristow 2006.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/beta.hpp [3:4]
+ boost/math/distributions/uniform.hpp [1:4]
+ boost/math/special_functions/math_fwd.hpp [5:6]
+ boost/math/tools/promotion.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7500e3115ad2ad77256a10dcd614f5bf
+BELONGS ya.make
+ License text:
+ //Copyright (c) 2006-2013 Emil Dotchevski and Reverge Studios, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/exception/detail/clone_current_exception.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 750cd3ddd45943a8e91eb79f9cf8e698
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi.hpp [1:1]
+ boost/mpi/allocator.hpp [1:1]
+ boost/mpi/config.hpp [1:1]
+ boost/mpi/datatype_fwd.hpp [1:1]
+ boost/mpi/detail/communicator_sc.hpp [1:1]
+ boost/mpi/environment.hpp [1:1]
+ boost/mpi/nonblocking.hpp [1:1]
+ boost/mpi/python.hpp [1:1]
+ boost/mpi/python/config.hpp [1:1]
+ boost/mpi/python/serialize.hpp [1:1]
+ boost/mpi/request.hpp [1:1]
+ boost/mpi/status.hpp [1:1]
+ boost/mpi/timer.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 753eb328ad6d344907c3dba8d325784a
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/area.hpp [3:6]
+ boost/geometry/algorithms/assign.hpp [3:6]
+ boost/geometry/algorithms/buffer.hpp [3:5]
+ boost/geometry/algorithms/clear.hpp [3:5]
+ boost/geometry/algorithms/convert.hpp [3:6]
+ boost/geometry/algorithms/correct.hpp [3:6]
+ boost/geometry/algorithms/covered_by.hpp [3:5]
+ boost/geometry/algorithms/crosses.hpp [3:6]
+ boost/geometry/algorithms/detail/as_range.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_box_corners.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_indexed_point.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_values.hpp [3:5]
+ boost/geometry/algorithms/detail/calculate_null.hpp [3:5]
+ boost/geometry/algorithms/detail/calculate_sum.hpp [3:6]
+ boost/geometry/algorithms/detail/centroid/translating_transformer.hpp [3:6]
+ boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp [3:5]
+ boost/geometry/algorithms/detail/convert_point_to_point.hpp [3:5]
+ boost/geometry/algorithms/detail/covered_by/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/covered_by/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/for_each_range.hpp [3:5]
+ boost/geometry/algorithms/detail/multi_modify.hpp [3:5]
+ boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp [3:5]
+ boost/geometry/algorithms/detail/multi_sum.hpp [3:5]
+ boost/geometry/algorithms/detail/point_on_border.hpp [3:5]
+ boost/geometry/algorithms/detail/sections/range_by_section.hpp [3:5]
+ boost/geometry/algorithms/detail/within/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/within/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/within/point_in_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/within/within_no_turns.hpp [3:5]
+ boost/geometry/algorithms/make.hpp [3:5]
+ boost/geometry/algorithms/reverse.hpp [3:6]
+ boost/geometry/algorithms/transform.hpp [3:6]
+ boost/geometry/algorithms/unique.hpp [3:6]
+ boost/geometry/algorithms/within.hpp [3:5]
+ boost/geometry/arithmetic/arithmetic.hpp [3:5]
+ boost/geometry/arithmetic/cross_product.hpp [3:5]
+ boost/geometry/arithmetic/determinant.hpp [3:5]
+ boost/geometry/arithmetic/dot_product.hpp [3:5]
+ boost/geometry/core/access.hpp [3:5]
+ boost/geometry/core/closure.hpp [3:5]
+ boost/geometry/core/coordinate_dimension.hpp [3:5]
+ boost/geometry/core/coordinate_system.hpp [3:5]
+ boost/geometry/core/coordinate_type.hpp [3:5]
+ boost/geometry/core/exterior_ring.hpp [3:5]
+ boost/geometry/core/geometry_id.hpp [3:5]
+ boost/geometry/core/interior_rings.hpp [3:5]
+ boost/geometry/core/interior_type.hpp [3:5]
+ boost/geometry/core/is_areal.hpp [3:5]
+ boost/geometry/core/mutable_range.hpp [3:5]
+ boost/geometry/core/point_order.hpp [3:5]
+ boost/geometry/core/point_type.hpp [3:5]
+ boost/geometry/core/radius.hpp [3:5]
+ boost/geometry/core/reverse_dispatch.hpp [3:5]
+ boost/geometry/core/tag.hpp [3:5]
+ boost/geometry/core/tag_cast.hpp [3:5]
+ boost/geometry/core/tags.hpp [3:5]
+ boost/geometry/core/topological_dimension.hpp [3:5]
+ boost/geometry/geometries/adapted/boost_tuple.hpp [3:5]
+ boost/geometry/geometries/adapted/c_array.hpp [3:5]
+ boost/geometry/geometries/adapted/std_pair_as_segment.hpp [3:5]
+ boost/geometry/geometries/box.hpp [3:5]
+ boost/geometry/geometries/concepts/box_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/check.hpp [3:5]
+ boost/geometry/geometries/concepts/linestring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_linestring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_point_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_polygon_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/polygon_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/ring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/segment_concept.hpp [3:5]
+ boost/geometry/geometries/geometries.hpp [3:5]
+ boost/geometry/geometries/linestring.hpp [3:6]
+ boost/geometry/geometries/multi_linestring.hpp [3:6]
+ boost/geometry/geometries/multi_point.hpp [3:6]
+ boost/geometry/geometries/multi_polygon.hpp [3:6]
+ boost/geometry/geometries/point_xy.hpp [3:5]
+ boost/geometry/geometries/polygon.hpp [3:6]
+ boost/geometry/geometries/register/box.hpp [3:5]
+ boost/geometry/geometries/register/linestring.hpp [3:5]
+ boost/geometry/geometries/register/multi_linestring.hpp [3:5]
+ boost/geometry/geometries/register/multi_point.hpp [3:5]
+ boost/geometry/geometries/register/multi_polygon.hpp [3:5]
+ boost/geometry/geometries/register/point.hpp [3:5]
+ boost/geometry/geometries/register/ring.hpp [3:5]
+ boost/geometry/geometries/register/segment.hpp [3:5]
+ boost/geometry/geometries/ring.hpp [3:6]
+ boost/geometry/geometries/segment.hpp [3:5]
+ boost/geometry/geometries/variant.hpp [3:5]
+ boost/geometry/io/dsv/write.hpp [3:6]
+ boost/geometry/io/io.hpp [3:5]
+ boost/geometry/io/wkt/detail/prefix.hpp [3:5]
+ boost/geometry/io/wkt/detail/wkt_multi.hpp [3:5]
+ boost/geometry/io/wkt/read.hpp [3:6]
+ boost/geometry/io/wkt/stream.hpp [3:5]
+ boost/geometry/io/wkt/wkt.hpp [3:5]
+ boost/geometry/iterators/base.hpp [3:5]
+ boost/geometry/iterators/closing_iterator.hpp [3:5]
+ boost/geometry/iterators/ever_circling_iterator.hpp [3:5]
+ boost/geometry/multi/algorithms/area.hpp [3:5]
+ boost/geometry/multi/algorithms/centroid.hpp [3:5]
+ boost/geometry/multi/algorithms/clear.hpp [3:5]
+ boost/geometry/multi/algorithms/convert.hpp [3:5]
+ boost/geometry/multi/algorithms/correct.hpp [3:5]
+ boost/geometry/multi/algorithms/covered_by.hpp [3:6]
+ boost/geometry/multi/algorithms/detail/for_each_range.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/modify.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/multi_sum.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/point_on_border.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp [3:5]
+ boost/geometry/multi/algorithms/envelope.hpp [3:5]
+ boost/geometry/multi/algorithms/equals.hpp [3:5]
+ boost/geometry/multi/algorithms/for_each.hpp [3:5]
+ boost/geometry/multi/algorithms/length.hpp [3:5]
+ boost/geometry/multi/algorithms/num_geometries.hpp [3:5]
+ boost/geometry/multi/algorithms/num_interior_rings.hpp [3:5]
+ boost/geometry/multi/algorithms/perimeter.hpp [3:5]
+ boost/geometry/multi/algorithms/reverse.hpp [3:5]
+ boost/geometry/multi/algorithms/simplify.hpp [3:5]
+ boost/geometry/multi/algorithms/transform.hpp [3:5]
+ boost/geometry/multi/algorithms/unique.hpp [3:5]
+ boost/geometry/multi/algorithms/within.hpp [3:6]
+ boost/geometry/multi/core/closure.hpp [3:5]
+ boost/geometry/multi/core/geometry_id.hpp [3:5]
+ boost/geometry/multi/core/interior_rings.hpp [3:5]
+ boost/geometry/multi/core/is_areal.hpp [3:5]
+ boost/geometry/multi/core/point_order.hpp [3:5]
+ boost/geometry/multi/core/point_type.hpp [3:5]
+ boost/geometry/multi/core/ring_type.hpp [3:5]
+ boost/geometry/multi/core/tags.hpp [3:5]
+ boost/geometry/multi/core/topological_dimension.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/check.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_point_concept.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp [3:5]
+ boost/geometry/multi/geometries/multi_geometries.hpp [3:5]
+ boost/geometry/multi/geometries/multi_linestring.hpp [3:5]
+ boost/geometry/multi/geometries/multi_point.hpp [3:5]
+ boost/geometry/multi/geometries/multi_polygon.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_linestring.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_point.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_polygon.hpp [3:5]
+ boost/geometry/multi/io/dsv/write.hpp [3:5]
+ boost/geometry/multi/io/wkt/detail/prefix.hpp [3:5]
+ boost/geometry/multi/io/wkt/read.hpp [3:5]
+ boost/geometry/multi/io/wkt/wkt.hpp [3:5]
+ boost/geometry/multi/io/wkt/write.hpp [3:5]
+ boost/geometry/multi/strategies/cartesian/centroid_average.hpp [3:5]
+ boost/geometry/multi/views/detail/range_type.hpp [3:5]
+ boost/geometry/srs/sphere.hpp [3:5]
+ boost/geometry/srs/spheroid.hpp [3:5]
+ boost/geometry/srs/srs.hpp [3:5]
+ boost/geometry/strategies/agnostic/point_in_box_by_side.hpp [3:5]
+ boost/geometry/strategies/area.hpp [3:6]
+ boost/geometry/strategies/cartesian/area.hpp [3:6]
+ boost/geometry/strategies/cartesian/area_surveyor.hpp [3:6]
+ boost/geometry/strategies/cartesian/centroid_average.hpp [3:6]
+ boost/geometry/strategies/cartesian/distance_pythagoras.hpp [3:5]
+ boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp [3:5]
+ boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp [3:5]
+ boost/geometry/strategies/centroid.hpp [3:5]
+ boost/geometry/strategies/compare.hpp [3:5]
+ boost/geometry/strategies/concepts/area_concept.hpp [3:6]
+ boost/geometry/strategies/concepts/centroid_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/convex_hull_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/segment_intersect_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/simplify_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/within_concept.hpp [3:5]
+ boost/geometry/strategies/convex_hull.hpp [3:5]
+ boost/geometry/strategies/covered_by.hpp [3:5]
+ boost/geometry/strategies/default_area_result.hpp [3:6]
+ boost/geometry/strategies/side.hpp [3:5]
+ boost/geometry/strategies/side_info.hpp [3:5]
+ boost/geometry/strategies/strategies.hpp [3:6]
+ boost/geometry/strategies/tags.hpp [3:5]
+ boost/geometry/strategies/transform.hpp [3:5]
+ boost/geometry/strategies/transform/inverse_transformer.hpp [3:5]
+ boost/geometry/strategies/transform/map_transformer.hpp [3:5]
+ boost/geometry/strategies/within.hpp [3:5]
+ boost/geometry/util/add_const_if_c.hpp [3:5]
+ boost/geometry/util/closure_as_bool.hpp [3:5]
+ boost/geometry/util/coordinate_cast.hpp [3:5]
+ boost/geometry/util/for_each_coordinate.hpp [3:5]
+ boost/geometry/util/order_as_direction.hpp [3:5]
+ boost/geometry/util/parameter_type_of.hpp [3:5]
+ boost/geometry/util/promote_floating_point.hpp [3:5]
+ boost/geometry/util/select_calculation_type.hpp [3:5]
+ boost/geometry/util/select_coordinate_type.hpp [3:5]
+ boost/geometry/util/select_most_precise.hpp [3:5]
+ boost/geometry/views/box_view.hpp [3:5]
+ boost/geometry/views/closeable_view.hpp [3:5]
+ boost/geometry/views/detail/normalized_view.hpp [3:5]
+ boost/geometry/views/detail/points_view.hpp [3:5]
+ boost/geometry/views/detail/range_type.hpp [3:5]
+ boost/geometry/views/identity_view.hpp [3:5]
+ boost/geometry/views/reversible_view.hpp [3:5]
+ boost/geometry/views/segment_view.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 759c4f0c247332c3b69c2ae95cc3bad8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/cpp_int/import_export.hpp at line 4, boost/multiprecision/traits/is_backend.hpp at line 4, boost/multiprecision/traits/is_byte_container.hpp at line 4
+ License text:
+ // Copyright 2015 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/cpp_int/import_export.hpp [2:4]
+ boost/multiprecision/traits/is_backend.hpp [2:4]
+ boost/multiprecision/traits/is_byte_container.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 75be4ee40bbff38ffcbd45f8444abfaf
+BELONGS ya.make
+ License text:
+ /* Copyright (c) 2002-2006 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/locale_config.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 75ef7529f27f9a710eea2869f97333f1
+BELONGS libs/chrono/ya.make libs/filesystem/ya.make ya.make
+ License text:
+ // Copyright Beman Dawes 2008
+ // Copyright Vicente J. Botet Escriba 2009
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/detail/inlined/chrono.hpp [3:4]
+ boost/chrono/detail/inlined/mac/chrono.hpp [3:4]
+ boost/chrono/detail/inlined/posix/chrono.hpp [3:4]
+ boost/chrono/detail/inlined/win/chrono.hpp [3:4]
+ boost/endian/detail/cover_operators.hpp [3:4]
+ boost/spirit/home/support/detail/endian/cover_operators.hpp [3:4]
+ libs/chrono/src/chrono.cpp [3:4]
+ libs/filesystem/src/path.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 75f254658639d6099b8a2607570e97af
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2014 - 2017 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/detail/old_optional_implementation.hpp [1:2]
+ boost/optional/detail/optional_aligned_storage.hpp [1:2]
+ boost/optional/detail/optional_config.hpp [1:2]
+ boost/optional/detail/optional_factory_support.hpp [1:2]
+ boost/optional/detail/optional_relops.hpp [1:2]
+ boost/optional/detail/optional_swap.hpp [1:2]
+ boost/optional/optional.hpp [1:2]
+ boost/optional/optional_fwd.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7601e17851ca581823c83b37fe70dab1
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2005 Matthias Troyer
+ // (C) Copyright 2006 Douglas Gregor <doug.gregor -at- gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/packed_iarchive.hpp [1:2]
+ boost/mpi/packed_oarchive.hpp [1:2]
+ boost/mpi/python/skeleton_and_content.hpp [1:1]
+ boost/mpi/skeleton_and_content.hpp [1:2]
+ boost/mpi/skeleton_and_content_fwd.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 768f987faaed0adc6222ab24c7bd02e6
+BELONGS libs/context/ya.make libs/coroutine/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/context/detail/fcontext.hpp at line 4, boost/coroutine/all.hpp at line 4, boost/coroutine/asymmetric_coroutine.hpp at line 4, boost/coroutine/attributes.hpp at line 4, boost/coroutine/coroutine.hpp at line 4, boost/coroutine/detail/config.hpp at line 4, boost/coroutine/detail/coroutine_context.hpp at line 4, boost/coroutine/detail/data.hpp at line 4, boost/coroutine/detail/flags.hpp at line 4, boost/coroutine/detail/parameters.hpp at line 4, boost/coroutine/detail/pull_coroutine_impl.hpp at line 4, boost/coroutine/detail/pull_coroutine_object.hpp at line 4, boost/coroutine/detail/pull_coroutine_synthesized.hpp at line 4, boost/coroutine/detail/push_coroutine_impl.hpp at line 4, boost/coroutine/detail/push_coroutine_object.hpp at line 4, boost/coroutine/detail/push_coroutine_synthesized.hpp at line 4, boost/coroutine/detail/setup.hpp at line 4, boost/coroutine/detail/symmetric_coroutine_call.hpp at line 4, boost/coroutine/detail/symmetric_coroutine_impl.hpp at line 4, boost/coroutine/detail/symmetric_coroutine_object.hpp at line 4, boost/coroutine/detail/symmetric_coroutine_yield.hpp at line 4, boost/coroutine/detail/trampoline.hpp at line 4, boost/coroutine/detail/trampoline_pull.hpp at line 4, boost/coroutine/detail/trampoline_push.hpp at line 4, boost/coroutine/exceptions.hpp at line 4, boost/coroutine/flags.hpp at line 4, boost/coroutine/posix/protected_stack_allocator.hpp at line 4, boost/coroutine/posix/segmented_stack_allocator.hpp at line 4, boost/coroutine/protected_stack_allocator.hpp at line 4, boost/coroutine/segmented_stack_allocator.hpp at line 4, boost/coroutine/stack_allocator.hpp at line 4, boost/coroutine/stack_context.hpp at line 4, boost/coroutine/stack_traits.hpp at line 4, boost/coroutine/standard_stack_allocator.hpp at line 4, boost/coroutine/symmetric_coroutine.hpp at line 4, boost/coroutine/windows/protected_stack_allocator.hpp at line 4, libs/context/src/asm/jump_arm_aapcs_elf_gas.S at line 4, libs/context/src/asm/jump_arm_aapcs_macho_gas.S at line 4, libs/context/src/asm/jump_arm_aapcs_pe_armasm.asm at line 4, libs/context/src/asm/jump_arm_aapcs_pe_armasm.masm at line 4, libs/context/src/asm/jump_i386_ms_pe_gas.asm at line 4, libs/context/src/asm/jump_i386_ms_pe_masm.asm at line 4, libs/context/src/asm/jump_i386_ms_pe_masm.masm at line 4, libs/context/src/asm/jump_i386_sysv_elf_gas.S at line 4, libs/context/src/asm/jump_i386_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_mips32_o32_elf_gas.S at line 4, libs/context/src/asm/jump_ppc32_sysv_elf_gas.S at line 4, libs/context/src/asm/jump_ppc32_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_ppc32_sysv_xcoff_gas.S at line 4, libs/context/src/asm/jump_ppc64_sysv_elf_gas.S at line 4, libs/context/src/asm/jump_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_x86_64_ms_pe_gas.asm at line 4, libs/context/src/asm/jump_x86_64_ms_pe_masm.asm at line 4, libs/context/src/asm/jump_x86_64_ms_pe_masm.masm at line 4, libs/context/src/asm/jump_x86_64_sysv_elf_gas.S at line 4, libs/context/src/asm/jump_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/make_arm_aapcs_elf_gas.S at line 4, libs/context/src/asm/make_arm_aapcs_macho_gas.S at line 4, libs/context/src/asm/make_arm_aapcs_pe_armasm.asm at line 4, libs/context/src/asm/make_arm_aapcs_pe_armasm.masm at line 4, libs/context/src/asm/make_i386_ms_pe_gas.asm at line 4, libs/context/src/asm/make_i386_ms_pe_masm.asm at line 4, libs/context/src/asm/make_i386_ms_pe_masm.masm at line 4, libs/context/src/asm/make_i386_sysv_elf_gas.S at line 4, libs/context/src/asm/make_i386_sysv_macho_gas.S at line 4, libs/context/src/asm/make_mips32_o32_elf_gas.S at line 4, libs/context/src/asm/make_ppc32_sysv_elf_gas.S at line 4, libs/context/src/asm/make_ppc32_sysv_macho_gas.S at line 4, libs/context/src/asm/make_ppc32_sysv_xcoff_gas.S at line 4, libs/context/src/asm/make_ppc64_sysv_elf_gas.S at line 4, libs/context/src/asm/make_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/make_x86_64_ms_pe_gas.asm at line 4, libs/context/src/asm/make_x86_64_ms_pe_masm.asm at line 4, libs/context/src/asm/make_x86_64_ms_pe_masm.masm at line 4, libs/context/src/asm/make_x86_64_sysv_elf_gas.S at line 4, libs/context/src/asm/make_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_arm_aapcs_elf_gas.S at line 4, libs/context/src/asm/ontop_arm_aapcs_macho_gas.S at line 4, libs/context/src/asm/ontop_arm_aapcs_pe_armasm.asm at line 4, libs/context/src/asm/ontop_arm_aapcs_pe_armasm.masm at line 4, libs/context/src/asm/ontop_i386_ms_pe_gas.asm at line 4, libs/context/src/asm/ontop_i386_ms_pe_masm.asm at line 4, libs/context/src/asm/ontop_i386_ms_pe_masm.masm at line 4, libs/context/src/asm/ontop_i386_sysv_elf_gas.S at line 4, libs/context/src/asm/ontop_i386_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_mips32_o32_elf_gas.S at line 4, libs/context/src/asm/ontop_ppc32_sysv_elf_gas.S at line 4, libs/context/src/asm/ontop_ppc32_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S at line 4, libs/context/src/asm/ontop_ppc64_sysv_elf_gas.S at line 4, libs/context/src/asm/ontop_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm at line 4, libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm at line 4, libs/context/src/asm/ontop_x86_64_ms_pe_masm.masm at line 4, libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S at line 4, libs/context/src/asm/ontop_x86_64_sysv_macho_gas.S at line 4, libs/context/src/execution_context.cpp at line 4, libs/context/src/untested.cpp at line 4, libs/coroutine/src/detail/coroutine_context.cpp at line 4, libs/coroutine/src/exceptions.cpp at line 4, libs/coroutine/src/posix/stack_traits.cpp at line 4, libs/coroutine/src/windows/stack_traits.cpp at line 4
+ License text:
+ // Copyright Oliver Kowalke 2009.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/context/detail/fcontext.hpp [2:4]
+ boost/coroutine/all.hpp [2:4]
+ boost/coroutine/asymmetric_coroutine.hpp [2:4]
+ boost/coroutine/attributes.hpp [2:4]
+ boost/coroutine/coroutine.hpp [2:4]
+ boost/coroutine/detail/config.hpp [2:4]
+ boost/coroutine/detail/coroutine_context.hpp [2:4]
+ boost/coroutine/detail/data.hpp [2:4]
+ boost/coroutine/detail/flags.hpp [2:4]
+ boost/coroutine/detail/parameters.hpp [2:4]
+ boost/coroutine/detail/pull_coroutine_impl.hpp [2:4]
+ boost/coroutine/detail/pull_coroutine_object.hpp [2:4]
+ boost/coroutine/detail/pull_coroutine_synthesized.hpp [2:4]
+ boost/coroutine/detail/push_coroutine_impl.hpp [2:4]
+ boost/coroutine/detail/push_coroutine_object.hpp [2:4]
+ boost/coroutine/detail/push_coroutine_synthesized.hpp [2:4]
+ boost/coroutine/detail/setup.hpp [2:4]
+ boost/coroutine/detail/symmetric_coroutine_call.hpp [2:4]
+ boost/coroutine/detail/symmetric_coroutine_impl.hpp [2:4]
+ boost/coroutine/detail/symmetric_coroutine_object.hpp [2:4]
+ boost/coroutine/detail/symmetric_coroutine_yield.hpp [2:4]
+ boost/coroutine/detail/trampoline.hpp [2:4]
+ boost/coroutine/detail/trampoline_pull.hpp [2:4]
+ boost/coroutine/detail/trampoline_push.hpp [2:4]
+ boost/coroutine/exceptions.hpp [2:4]
+ boost/coroutine/flags.hpp [2:4]
+ boost/coroutine/posix/protected_stack_allocator.hpp [2:4]
+ boost/coroutine/posix/segmented_stack_allocator.hpp [2:4]
+ boost/coroutine/protected_stack_allocator.hpp [2:4]
+ boost/coroutine/segmented_stack_allocator.hpp [2:4]
+ boost/coroutine/stack_allocator.hpp [2:4]
+ boost/coroutine/stack_context.hpp [2:4]
+ boost/coroutine/stack_traits.hpp [2:4]
+ boost/coroutine/standard_stack_allocator.hpp [2:4]
+ boost/coroutine/symmetric_coroutine.hpp [2:4]
+ boost/coroutine/windows/protected_stack_allocator.hpp [2:4]
+ libs/context/src/asm/jump_arm_aapcs_elf_gas.S [2:4]
+ libs/context/src/asm/jump_arm_aapcs_macho_gas.S [2:4]
+ libs/context/src/asm/jump_arm_aapcs_pe_armasm.asm [2:4]
+ libs/context/src/asm/jump_arm_aapcs_pe_armasm.masm [2:4]
+ libs/context/src/asm/jump_i386_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/jump_i386_ms_pe_masm.asm [2:4]
+ libs/context/src/asm/jump_i386_ms_pe_masm.masm [2:4]
+ libs/context/src/asm/jump_i386_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/jump_i386_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/jump_mips32_o32_elf_gas.S [2:4]
+ libs/context/src/asm/jump_ppc32_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/jump_ppc32_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/jump_ppc32_sysv_xcoff_gas.S [2:4]
+ libs/context/src/asm/jump_ppc64_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/jump_ppc64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/jump_x86_64_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/jump_x86_64_ms_pe_masm.asm [2:4]
+ libs/context/src/asm/jump_x86_64_ms_pe_masm.masm [2:4]
+ libs/context/src/asm/jump_x86_64_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/jump_x86_64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/make_arm_aapcs_elf_gas.S [2:4]
+ libs/context/src/asm/make_arm_aapcs_macho_gas.S [2:4]
+ libs/context/src/asm/make_arm_aapcs_pe_armasm.asm [2:4]
+ libs/context/src/asm/make_arm_aapcs_pe_armasm.masm [2:4]
+ libs/context/src/asm/make_i386_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/make_i386_ms_pe_masm.asm [2:4]
+ libs/context/src/asm/make_i386_ms_pe_masm.masm [2:4]
+ libs/context/src/asm/make_i386_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/make_i386_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/make_mips32_o32_elf_gas.S [2:4]
+ libs/context/src/asm/make_ppc32_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/make_ppc32_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/make_ppc32_sysv_xcoff_gas.S [2:4]
+ libs/context/src/asm/make_ppc64_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/make_ppc64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/make_x86_64_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/make_x86_64_ms_pe_masm.asm [2:4]
+ libs/context/src/asm/make_x86_64_ms_pe_masm.masm [2:4]
+ libs/context/src/asm/make_x86_64_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/make_x86_64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_arm_aapcs_elf_gas.S [2:4]
+ libs/context/src/asm/ontop_arm_aapcs_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_arm_aapcs_pe_armasm.asm [2:4]
+ libs/context/src/asm/ontop_arm_aapcs_pe_armasm.masm [2:4]
+ libs/context/src/asm/ontop_i386_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/ontop_i386_ms_pe_masm.asm [2:4]
+ libs/context/src/asm/ontop_i386_ms_pe_masm.masm [2:4]
+ libs/context/src/asm/ontop_i386_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/ontop_i386_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_mips32_o32_elf_gas.S [2:4]
+ libs/context/src/asm/ontop_ppc32_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/ontop_ppc32_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S [2:4]
+ libs/context/src/asm/ontop_ppc64_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/ontop_ppc64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm [2:4]
+ libs/context/src/asm/ontop_x86_64_ms_pe_masm.masm [2:4]
+ libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S [2:4]
+ libs/context/src/asm/ontop_x86_64_sysv_macho_gas.S [2:4]
+ libs/context/src/execution_context.cpp [2:4]
+ libs/context/src/untested.cpp [2:4]
+ libs/coroutine/src/detail/coroutine_context.cpp [2:4]
+ libs/coroutine/src/exceptions.cpp [2:4]
+ libs/coroutine/src/posix/stack_traits.cpp [2:4]
+ libs/coroutine/src/windows/stack_traits.cpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 771f0ca891cf31e52365f2c5c7ea5ac9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/suffix.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/suffix.hpp [4:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 77248a96a79940a9fa1d82b59477d791
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ // Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/detail/impl/kqueue_reactor.hpp [5:6]
+ boost/asio/detail/impl/kqueue_reactor.ipp [5:6]
+ boost/asio/detail/kqueue_reactor.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 774a1ad0f39541627409ed7b8900a512
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2001-2004
+ // Copyright Peter Dimov 2001-2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/preprocessed/bcc/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/placeholders.hpp [2:3]
+ boost/mpl/placeholders.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 774dfa6dd9adb18e5d17bc88b05266a7
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Xiaogang Zhang
+ // Copyright (c) 2017 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/detail/bessel_i0.hpp [1:4]
+ boost/math/special_functions/detail/bessel_i1.hpp [1:3]
+ boost/math/special_functions/detail/bessel_k0.hpp [1:4]
+ boost/math/special_functions/detail/bessel_k1.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 776cc7e58c2d3434091396c0c43068d3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp at line 8, boost/interprocess/sync/spin/interprocess_barrier.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp [5:8]
+ boost/interprocess/sync/spin/interprocess_barrier.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7776713baab3f172d0d3c56b0cf3c911
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/algo/detail/pdqsort.hpp [24:28]
+
+KEEP COPYRIGHT_SERVICE_LABEL 778d126a908ae2e1cc990627956713b8
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Piotr Wyderski
+ // Copyright (c) 2006 Tomas Puverle
+ // Copyright (c) 2006 Peter Dimov
+ // Copyright (c) 2011 Emil Dotchevski
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp [11:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 779e4efde656444e177d7d0cd7c60328
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2016 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/index/equal_to.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 779f3f74aa28c6ec9cbf99f210980137
+BELONGS ya.make
+ License text:
+ // Copyright 2007 Stanford University
+ // Authors: David Gleich
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/core_numbers.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 77be0e4f90c30bc5049b8af1874ed858
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp [2:4]
+ boost/spirit/home/qi/detail/assign_to.hpp [2:4]
+ boost/spirit/home/qi/detail/construct.hpp [2:3]
+ boost/spirit/home/qi/numeric/detail/real_impl.hpp [2:4]
+ boost/spirit/home/support/action_dispatch.hpp [2:4]
+ boost/spirit/home/support/container.hpp [2:4]
+ boost/spirit/home/support/detail/endian.hpp [1:2]
+ boost/spirit/home/support/detail/pow10.hpp [2:4]
+ boost/spirit/home/support/detail/scoped_enum_emulation.hpp [1:2]
+ boost/spirit/home/support/detail/sign.hpp [2:4]
+ boost/spirit/home/support/iterators/look_ahead.hpp [1:3]
+ boost/spirit/home/support/iterators/multi_pass.hpp [1:3]
+ boost/spirit/home/support/iterators/multi_pass_fwd.hpp [2:4]
+ boost/spirit/home/x3/support/numeric_utils/extract_real.hpp [2:4]
+ boost/spirit/home/x3/support/numeric_utils/pow10.hpp [2:4]
+ boost/spirit/home/x3/support/numeric_utils/sign.hpp [2:4]
+ boost/spirit/home/x3/support/traits/container_traits.hpp [2:4]
+ boost/spirit/home/x3/support/traits/optional_traits.hpp [2:4]
+ boost/spirit/home/x3/support/traits/value_traits.hpp [2:4]
+ boost/spirit/home/x3/version.hpp [2:4]
+ boost/spirit/include/karma.hpp [2:4]
+ boost/spirit/include/karma_action.hpp [2:4]
+ boost/spirit/include/karma_alternative.hpp [2:4]
+ boost/spirit/include/karma_and_predicate.hpp [2:4]
+ boost/spirit/include/karma_attr_cast.hpp [2:4]
+ boost/spirit/include/karma_auto.hpp [2:4]
+ boost/spirit/include/karma_auxiliary.hpp [2:4]
+ boost/spirit/include/karma_binary.hpp [2:4]
+ boost/spirit/include/karma_bool.hpp [2:4]
+ boost/spirit/include/karma_buffer.hpp [2:4]
+ boost/spirit/include/karma_center_alignment.hpp [2:4]
+ boost/spirit/include/karma_char.hpp [2:4]
+ boost/spirit/include/karma_char_.hpp [2:4]
+ boost/spirit/include/karma_char_class.hpp [2:4]
+ boost/spirit/include/karma_columns.hpp [2:4]
+ boost/spirit/include/karma_delimit.hpp [2:4]
+ boost/spirit/include/karma_directive.hpp [2:4]
+ boost/spirit/include/karma_domain.hpp [2:4]
+ boost/spirit/include/karma_eol.hpp [2:4]
+ boost/spirit/include/karma_eps.hpp [2:4]
+ boost/spirit/include/karma_format.hpp [2:4]
+ boost/spirit/include/karma_format_attr.hpp [2:4]
+ boost/spirit/include/karma_format_auto.hpp [2:4]
+ boost/spirit/include/karma_generate.hpp [2:4]
+ boost/spirit/include/karma_generate_attr.hpp [2:4]
+ boost/spirit/include/karma_generate_auto.hpp [2:4]
+ boost/spirit/include/karma_int.hpp [2:4]
+ boost/spirit/include/karma_kleene.hpp [2:4]
+ boost/spirit/include/karma_lazy.hpp [2:4]
+ boost/spirit/include/karma_left_alignment.hpp [2:4]
+ boost/spirit/include/karma_list.hpp [2:4]
+ boost/spirit/include/karma_maxwidth.hpp [2:4]
+ boost/spirit/include/karma_no_delimit.hpp [2:4]
+ boost/spirit/include/karma_nonterminal.hpp [2:4]
+ boost/spirit/include/karma_not_predicate.hpp [2:4]
+ boost/spirit/include/karma_numeric.hpp [2:4]
+ boost/spirit/include/karma_omit.hpp [2:4]
+ boost/spirit/include/karma_operator.hpp [2:4]
+ boost/spirit/include/karma_optional.hpp [2:4]
+ boost/spirit/include/karma_phoenix_attributes.hpp [2:4]
+ boost/spirit/include/karma_plus.hpp [2:4]
+ boost/spirit/include/karma_real.hpp [2:4]
+ boost/spirit/include/karma_repeat.hpp [2:4]
+ boost/spirit/include/karma_right_alignment.hpp [2:4]
+ boost/spirit/include/karma_sequence.hpp [2:4]
+ boost/spirit/include/karma_stream.hpp [2:4]
+ boost/spirit/include/karma_strict_relaxed.hpp [2:4]
+ boost/spirit/include/karma_string.hpp [2:4]
+ boost/spirit/include/karma_symbols.hpp [2:4]
+ boost/spirit/include/karma_uint.hpp [2:4]
+ boost/spirit/include/karma_upper_lower_case.hpp [2:4]
+ boost/spirit/include/karma_verbatim.hpp [2:4]
+ boost/spirit/include/karma_what.hpp [2:4]
+ boost/spirit/include/lex.hpp [2:4]
+ boost/spirit/include/lex_domain.hpp [2:4]
+ boost/spirit/include/lex_lexer.hpp [2:4]
+ boost/spirit/include/lex_lexertl.hpp [2:4]
+ boost/spirit/include/lex_lexertl_position_token.hpp [2:4]
+ boost/spirit/include/lex_lexertl_token.hpp [2:4]
+ boost/spirit/include/lex_static_lexertl.hpp [2:4]
+ boost/spirit/include/lex_tokenize_and_parse.hpp [2:4]
+ boost/spirit/include/phoenix.hpp [2:4]
+ boost/spirit/include/phoenix_algorithm.hpp [2:4]
+ boost/spirit/include/phoenix_bind.hpp [2:4]
+ boost/spirit/include/phoenix_container.hpp [2:4]
+ boost/spirit/include/phoenix_core.hpp [2:4]
+ boost/spirit/include/phoenix_function.hpp [2:4]
+ boost/spirit/include/phoenix_fusion.hpp [2:4]
+ boost/spirit/include/phoenix_limits.hpp [2:4]
+ boost/spirit/include/phoenix_object.hpp [2:4]
+ boost/spirit/include/phoenix_operator.hpp [2:4]
+ boost/spirit/include/phoenix_scope.hpp [2:4]
+ boost/spirit/include/phoenix_statement.hpp [2:4]
+ boost/spirit/include/phoenix_stl.hpp [2:4]
+ boost/spirit/include/phoenix_version.hpp [2:4]
+ boost/spirit/include/qi.hpp [2:4]
+ boost/spirit/include/qi_action.hpp [2:4]
+ boost/spirit/include/qi_alternative.hpp [2:4]
+ boost/spirit/include/qi_and_predicate.hpp [2:4]
+ boost/spirit/include/qi_as_string.hpp [2:4]
+ boost/spirit/include/qi_attr.hpp [2:4]
+ boost/spirit/include/qi_attr_cast.hpp [2:4]
+ boost/spirit/include/qi_auto.hpp [2:4]
+ boost/spirit/include/qi_auxiliary.hpp [2:4]
+ boost/spirit/include/qi_binary.hpp [2:4]
+ boost/spirit/include/qi_bool.hpp [2:4]
+ boost/spirit/include/qi_char.hpp [2:4]
+ boost/spirit/include/qi_char_.hpp [2:4]
+ boost/spirit/include/qi_char_class.hpp [2:4]
+ boost/spirit/include/qi_core.hpp [2:4]
+ boost/spirit/include/qi_difference.hpp [2:4]
+ boost/spirit/include/qi_directive.hpp [2:4]
+ boost/spirit/include/qi_domain.hpp [2:4]
+ boost/spirit/include/qi_eoi.hpp [2:4]
+ boost/spirit/include/qi_eol.hpp [2:4]
+ boost/spirit/include/qi_eps.hpp [2:4]
+ boost/spirit/include/qi_expect.hpp [2:4]
+ boost/spirit/include/qi_grammar.hpp [2:4]
+ boost/spirit/include/qi_hold.hpp [2:4]
+ boost/spirit/include/qi_int.hpp [2:4]
+ boost/spirit/include/qi_kleene.hpp [2:4]
+ boost/spirit/include/qi_lazy.hpp [2:4]
+ boost/spirit/include/qi_lexeme.hpp [2:4]
+ boost/spirit/include/qi_list.hpp [2:4]
+ boost/spirit/include/qi_lit.hpp [2:4]
+ boost/spirit/include/qi_match.hpp [2:4]
+ boost/spirit/include/qi_match_attr.hpp [2:4]
+ boost/spirit/include/qi_match_auto.hpp [2:4]
+ boost/spirit/include/qi_no_case.hpp [2:4]
+ boost/spirit/include/qi_nonterminal.hpp [2:4]
+ boost/spirit/include/qi_not_predicate.hpp [2:4]
+ boost/spirit/include/qi_numeric.hpp [2:4]
+ boost/spirit/include/qi_omit.hpp [2:4]
+ boost/spirit/include/qi_operator.hpp [2:4]
+ boost/spirit/include/qi_optional.hpp [2:4]
+ boost/spirit/include/qi_parse.hpp [2:4]
+ boost/spirit/include/qi_parse_attr.hpp [2:4]
+ boost/spirit/include/qi_parse_auto.hpp [2:4]
+ boost/spirit/include/qi_permutation.hpp [2:4]
+ boost/spirit/include/qi_plus.hpp [2:4]
+ boost/spirit/include/qi_raw.hpp [2:4]
+ boost/spirit/include/qi_real.hpp [2:4]
+ boost/spirit/include/qi_repeat.hpp [2:4]
+ boost/spirit/include/qi_rule.hpp [2:4]
+ boost/spirit/include/qi_sequence.hpp [2:4]
+ boost/spirit/include/qi_sequential_or.hpp [2:4]
+ boost/spirit/include/qi_skip.hpp [2:4]
+ boost/spirit/include/qi_stream.hpp [2:4]
+ boost/spirit/include/qi_string.hpp [2:4]
+ boost/spirit/include/qi_symbols.hpp [2:4]
+ boost/spirit/include/qi_uint.hpp [2:4]
+ boost/spirit/include/qi_what.hpp [2:4]
+ boost/spirit/include/support.hpp [2:4]
+ boost/spirit/include/support_any.hpp [2:4]
+ boost/spirit/include/support_any_if.hpp [2:4]
+ boost/spirit/include/support_any_if_ns.hpp [2:4]
+ boost/spirit/include/support_any_if_ns_so.hpp [2:4]
+ boost/spirit/include/support_any_ns.hpp [2:4]
+ boost/spirit/include/support_any_ns_so.hpp [2:4]
+ boost/spirit/include/support_argument.hpp [2:4]
+ boost/spirit/include/support_ascii.hpp [2:4]
+ boost/spirit/include/support_attributes.hpp [2:4]
+ boost/spirit/include/support_char_class.hpp [2:4]
+ boost/spirit/include/support_iso8859_1.hpp [2:4]
+ boost/spirit/include/support_istream_iterator.hpp [2:4]
+ boost/spirit/include/support_locals.hpp [2:4]
+ boost/spirit/include/support_look_ahead.hpp [2:4]
+ boost/spirit/include/support_modify.hpp [2:4]
+ boost/spirit/include/support_multi_pass.hpp [2:4]
+ boost/spirit/include/support_multi_pass_fwd.hpp [2:4]
+ boost/spirit/include/support_standard.hpp [2:4]
+ boost/spirit/include/support_standard_wide.hpp [2:4]
+ boost/spirit/include/support_string_traits.hpp [2:4]
+ boost/spirit/include/support_unused.hpp [2:4]
+ boost/spirit/include/version.hpp [2:4]
+ boost/spirit/repository/include/karma.hpp [2:4]
+ boost/spirit/repository/include/karma_confix.hpp [2:4]
+ boost/spirit/repository/include/karma_directive.hpp [2:4]
+ boost/spirit/repository/include/qi.hpp [2:4]
+ boost/spirit/repository/include/qi_confix.hpp [2:4]
+ boost/spirit/repository/include/qi_directive.hpp [2:4]
+ boost/spirit/repository/include/qi_distinct.hpp [2:4]
+ boost/spirit/repository/include/qi_flush_multi_pass.hpp [2:4]
+ boost/spirit/repository/include/qi_iter_pos.hpp [2:4]
+ boost/spirit/repository/include/qi_primitive.hpp [2:4]
+ boost/spirit/version.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 77f9dd6047adac3aadfc4e429a97736b
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ // Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/basic_serial_port.hpp [5:6]
+ boost/asio/detail/impl/reactive_serial_port_service.ipp [5:6]
+ boost/asio/detail/impl/win_iocp_handle_service.ipp [5:6]
+ boost/asio/detail/impl/win_iocp_serial_port_service.ipp [5:6]
+ boost/asio/detail/reactive_serial_port_service.hpp [5:6]
+ boost/asio/detail/win_iocp_handle_read_op.hpp [5:6]
+ boost/asio/detail/win_iocp_handle_service.hpp [5:6]
+ boost/asio/detail/win_iocp_handle_write_op.hpp [5:6]
+ boost/asio/detail/win_iocp_serial_port_service.hpp [5:6]
+ boost/asio/impl/serial_port_base.hpp [5:6]
+ boost/asio/impl/serial_port_base.ipp [5:6]
+ boost/asio/serial_port.hpp [5:6]
+ boost/asio/serial_port_base.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7845e88cc34740c56fdf956a3c7bf298
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/std/bitset.hpp [1:3]
+ boost/typeof/std/complex.hpp [1:3]
+ boost/typeof/std/deque.hpp [1:3]
+ boost/typeof/std/fstream.hpp [1:3]
+ boost/typeof/std/functional.hpp [1:3]
+ boost/typeof/std/iostream.hpp [1:3]
+ boost/typeof/std/istream.hpp [1:3]
+ boost/typeof/std/iterator.hpp [1:3]
+ boost/typeof/std/list.hpp [1:3]
+ boost/typeof/std/locale.hpp [1:3]
+ boost/typeof/std/map.hpp [1:3]
+ boost/typeof/std/memory.hpp [1:3]
+ boost/typeof/std/ostream.hpp [1:3]
+ boost/typeof/std/queue.hpp [1:3]
+ boost/typeof/std/set.hpp [1:3]
+ boost/typeof/std/sstream.hpp [1:3]
+ boost/typeof/std/stack.hpp [1:3]
+ boost/typeof/std/streambuf.hpp [1:3]
+ boost/typeof/std/string.hpp [1:3]
+ boost/typeof/std/utility.hpp [1:3]
+ boost/typeof/std/valarray.hpp [1:3]
+ boost/typeof/std/vector.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7847dd132299dd522b778f700587670d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/os/bsd/bsdi.h at line 4, boost/predef/os/bsd/dragonfly.h at line 4, boost/predef/os/bsd/free.h at line 4, boost/predef/os/bsd/net.h at line 4, boost/predef/os/bsd/open.h at line 4
+ License text:
+ Copyright Rene Rivera 2012-2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/os/bsd/bsdi.h [2:4]
+ boost/predef/os/bsd/dragonfly.h [2:4]
+ boost/predef/os/bsd/free.h [2:4]
+ boost/predef/os/bsd/net.h [2:4]
+ boost/predef/os/bsd/open.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 78ae7fd7f341987282f7c6997978b659
+BELONGS ya.make
+ License text:
+ // Copyright Peter Dimov 2000-2002
+ // Copyright Aleksey Gurtovoy 2000-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/list/aux_/numbered.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 78bb9d47619488747a3d5ed32579c107
+BELONGS ya.make
+ License text:
+ Copyright 2012-2015 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/make_unique.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 78e0a9a9366ca52bc14963dd0ac2db58
+BELONGS ya.make
+ License text:
+ Copyright (c) 2008-2009: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/detail/element_comparer.hpp [2:2]
+ boost/icl/detail/interval_morphism.hpp [2:2]
+ boost/icl/detail/interval_subset_comparer.hpp [2:2]
+ boost/icl/detail/subset_comparer.hpp [2:2]
+ boost/icl/gregorian.hpp [2:2]
+ boost/icl/ptime.hpp [2:2]
+ boost/icl/rational.hpp [2:2]
+ boost/icl/type_traits/codomain_type_of.hpp [2:2]
+ boost/icl/type_traits/difference.hpp [2:2]
+ boost/icl/type_traits/difference_type_of.hpp [2:2]
+ boost/icl/type_traits/domain_type_of.hpp [2:2]
+ boost/icl/type_traits/element_type_of.hpp [2:2]
+ boost/icl/type_traits/has_inverse.hpp [2:2]
+ boost/icl/type_traits/has_set_semantics.hpp [2:2]
+ boost/icl/type_traits/identity_element.hpp [2:2]
+ boost/icl/type_traits/is_associative_element_container.hpp [2:2]
+ boost/icl/type_traits/is_combinable.hpp [2:2]
+ boost/icl/type_traits/is_concept_equivalent.hpp [2:2]
+ boost/icl/type_traits/is_continuous.hpp [2:2]
+ boost/icl/type_traits/is_discrete.hpp [2:2]
+ boost/icl/type_traits/is_element_container.hpp [2:2]
+ boost/icl/type_traits/is_interval_container.hpp [2:2]
+ boost/icl/type_traits/is_interval_joiner.hpp [2:2]
+ boost/icl/type_traits/is_interval_separator.hpp [2:2]
+ boost/icl/type_traits/is_interval_splitter.hpp [2:2]
+ boost/icl/type_traits/is_map.hpp [2:2]
+ boost/icl/type_traits/is_set.hpp [2:2]
+ boost/icl/type_traits/is_total.hpp [2:2]
+ boost/icl/type_traits/no_type.hpp [2:2]
+ boost/icl/type_traits/rep_type_of.hpp [2:2]
+ boost/icl/type_traits/segment_type_of.hpp [2:2]
+ boost/icl/type_traits/size.hpp [2:2]
+ boost/icl/type_traits/size_type_of.hpp [2:2]
+ boost/icl/type_traits/value_size.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 78ecae5a6301c9faa651a8f6d052b448
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/catch_exceptions.hpp at line 5
+ License text:
+ // Copyright Beman Dawes 1995-2001. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/catch_exceptions.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 78f52b44d5b893e606b8a11043d0353f
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2005-8 Anthony Williams
+ // (C) Copyright 2012 Vicente J. Botet Escriba
+ // (C) Copyright 2017 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/win32/interlocked_read.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 79167f993b43429aaf8287ed3b8b9fb1
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+ // Copyright (c) 2003-2006, 2008 Gennaro Prota
+ // Copyright (c) 2014 Ahmed Charles
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dynamic_bitset/dynamic_bitset.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 791de63e8a85039486e8b095c3912ad1
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/detail/utf8_codecvt_facet.hpp [1:3]
+ boost/detail/utf8_codecvt_facet.hpp [1:3]
+ boost/detail/utf8_codecvt_facet.ipp [4:6]
+ boost/filesystem/detail/utf8_codecvt_facet.hpp [1:2]
+ boost/program_options/detail/utf8_codecvt_facet.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 792451df1de91afb23ff290d2f633d82
+BELONGS ya.make
+ License text:
+ Copyright (C) 2002 Brad King (brad.king@kitware.com)
+ Douglas Gregor (gregod@cs.rpi.edu)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/addressof.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 797872212de35a9174f5dfedc43efab7
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2006-8.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/bindings/detail/big_digamma.hpp [1:3]
+ boost/math/bindings/detail/big_lanczos.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 797b8159646b0e965f8cd05df63d1074
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/comeau.hpp [1:8]
+ boost/config/compiler/intel.hpp [1:10]
+ boost/config/compiler/metrowerks.hpp [1:8]
+ boost/config/compiler/visualc.hpp [1:8]
+ boost/config/stdlib/dinkumware.hpp [1:7]
+ boost/filesystem/detail/macro_value.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 797f1af06a5fd55b124006bf0cd1aa45
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000, Frank Warmerdam
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/impl/pj_transform.hpp [19:19]
+ boost/geometry/srs/projections/proj/latlong.hpp [29:30]
+
+KEEP COPYRIGHT_SERVICE_LABEL 799e2277f428cd7c93175030f2e04ad8
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+ // Copyright 2015 Antony Polukhin.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll/alias.hpp [1:2]
+ boost/dll/detail/elf_info.hpp [1:2]
+ boost/dll/detail/macho_info.hpp [1:2]
+ boost/dll/detail/pe_info.hpp [1:2]
+ boost/dll/detail/posix/program_location_impl.hpp [1:2]
+ boost/dll/detail/x_info_interface.hpp [1:2]
+ boost/dll/library_info.hpp [1:2]
+ boost/winapi/dll.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 79b802920f4aa6ebda770bbdbd8f62f3
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/assign.hpp [3:6]
+ boost/geometry/algorithms/crosses.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/interface.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 79d54f906a15b95b0be8eb7f30091ba2
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/primitives/impl/numerics.ipp [2:4]
+ boost/spirit/home/classic/core/primitives/numerics.hpp [2:4]
+ boost/spirit/home/classic/meta.hpp [2:4]
+ boost/spirit/home/classic/version.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 79dab007ee72a950603c97c9b2331fb7
+BELONGS ya.make
+ License text:
+ // Copyright 2015-2017 Peter Dimov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mp11/algorithm.hpp [4:4]
+ boost/mp11/detail/mp_append.hpp [4:4]
+ boost/mp11/detail/mp_fold.hpp [4:4]
+ boost/mp11/detail/mp_min_element.hpp [4:4]
+ boost/mp11/detail/mp_void.hpp [4:4]
+ boost/mp11/function.hpp [4:4]
+ boost/mp11/list.hpp [4:4]
+ boost/mp11/map.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 79e7551f02d99afc8dd82a857068d461
+BELONGS ya.make
+ License text:
+ // Copyright Douglas Gregor 2004.
+ // Copyright 2005 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function_equal.hpp [1:2]
+ boost/utility/detail/result_of_iterate.hpp [3:5]
+ boost/utility/result_of.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7a33e6d3b977bb8a826c9f04ef00ba08
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015-2016 Vinnie Falco (vinnie dot falco at gmail dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/beast/core/file.hpp [2:2]
+ boost/beast/core/file_base.hpp [2:2]
+ boost/beast/core/file_posix.hpp [2:2]
+ boost/beast/core/file_stdio.hpp [2:2]
+ boost/beast/core/file_win32.hpp [2:2]
+ boost/beast/core/impl/file_posix.ipp [2:2]
+ boost/beast/core/impl/file_stdio.ipp [2:2]
+ boost/beast/core/impl/file_win32.ipp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7a5840f2607b7eac3bcd76043d21eb7e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/cpp_dec_float.hpp at line 5, boost/multiprecision/detail/functions/pow.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/cpp_dec_float.hpp [2:5]
+ boost/multiprecision/detail/functions/pow.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7a6336ff9479938d79c2d6368e2f0c1b
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006, 2010.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/factorials.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7a77c5a5c02e42b779cbc7701c396c44
+BELONGS ya.make
+ License text:
+ // (C) Copyright Bryce Lelbach 2011
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/pathscale.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7a82760a876a7d2d125ec5b9c133a6b5
+BELONGS ya.make
+ License text:
+ // Copyright Eric Niebler 2009
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/limits/string.hpp [5:5]
+ boost/mpl/string.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7a8a725a54c9a5f6eeaba5650a24fad4
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2015.
+ // Modifications copyright (c) 2015, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/expand/implementation.hpp [8:9]
+ boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp [5:6]
+ boost/geometry/algorithms/detail/throw_on_empty_input.hpp [8:9]
+ boost/geometry/algorithms/dispatch/envelope.hpp [7:8]
+ boost/geometry/algorithms/envelope.hpp [7:8]
+ boost/geometry/algorithms/expand.hpp [8:9]
+ boost/geometry/algorithms/not_implemented.hpp [7:8]
+ boost/geometry/core/radian_access.hpp [7:8]
+ boost/geometry/core/ring_type.hpp [7:8]
+ boost/geometry/geometries/adapted/boost_fusion.hpp [6:7]
+ boost/geometry/policies/robustness/get_rescale_policy.hpp [8:9]
+ boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp [6:7]
+ boost/geometry/strategies/cartesian/buffer_end_round.hpp [5:6]
+ boost/geometry/strategies/cartesian/buffer_join_round.hpp [5:6]
+ boost/geometry/strategies/cartesian/buffer_point_circle.hpp [5:6]
+ boost/geometry/strategies/cartesian/centroid_weighted_length.hpp [6:7]
+ boost/geometry/strategies/cartesian/side_of_intersection.hpp [5:6]
+ boost/geometry/util/combine_if.hpp [5:6]
+ boost/geometry/util/compress_variant.hpp [7:8]
+ boost/geometry/util/transform_variant.hpp [7:8]
+ boost/geometry/views/detail/indexed_point_view.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7a92fca234fbb2ec58839a022533d6cb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multi_index/detail/archive_constructed.hpp at line 3, boost/multi_index/detail/ignore_wstrict_aliasing.hpp at line 3, boost/multi_index/detail/index_node_base.hpp at line 3, boost/multi_index/detail/restore_wstrict_aliasing.hpp at line 3, boost/multi_index/detail/seq_index_ops.hpp at line 3
+ License text:
+ /* Copyright 2003-2016 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multi_index/detail/archive_constructed.hpp [1:3]
+ boost/multi_index/detail/ignore_wstrict_aliasing.hpp [1:3]
+ boost/multi_index/detail/index_node_base.hpp [1:3]
+ boost/multi_index/detail/restore_wstrict_aliasing.hpp [1:3]
+ boost/multi_index/detail/seq_index_ops.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7a971e7bc12547235a5e108f8c16bed1
+BELONGS ya.make
+ License text:
+ * Copyright 2014 Antony Polukhin
+ * Copyright 2015 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/crypt.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7ae8b16c39fc36f50a0a218368b84a03
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/progress.hpp at line 5, boost/timer.hpp at line 5
+ License text:
+ // Copyright Beman Dawes 1994-99. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/progress.hpp [3:5]
+ boost/timer.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7aedad2c03ecc61a2ef6e770da75eaf2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/limits.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/limits.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7afb00ea7606a958a28cf267a7da1739
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2013-2017 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/polymorphic_get.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7afcace3c11d1de9ed95382d1d122b39
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2013-2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/options.hpp [3:3]
+ boost/interprocess/sync/spin/wait.hpp [3:6]
+ boost/intrusive/pack_options.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b1597e0a6608fd65ae3120352454957
+BELONGS libs/python/ya.make ya.make
+ License text:
+ // Copyright (c) 2004 Jonathan Brandmeyer
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/slice.hpp [4:6]
+ libs/python/src/slice.cpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b2b40d8095f20892198b9af1ef7f149
+BELONGS libs/python/ya.make ya.make
+ License text:
+ // Copyright Peter Dimov and Multi Media Ltd 2001, 2002
+ // Copyright David Abrahams 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/unwrap.hpp [5:6]
+ boost/python/converter/registry.hpp [1:3]
+ boost/python/make_constructor.hpp [1:3]
+ boost/python/make_function.hpp [1:3]
+ boost/python/module.hpp [1:3]
+ boost/python/object/class.hpp [1:3]
+ boost/python/object/class_wrapper.hpp [1:3]
+ boost/python/object/forward.hpp [1:3]
+ boost/python/object/function.hpp [1:3]
+ boost/python/object/make_holder.hpp [3:5]
+ boost/python/object/pointer_holder.hpp [3:5]
+ boost/python/object/value_holder.hpp [3:5]
+ libs/python/src/converter/registry.cpp [1:3]
+ libs/python/src/converter/type_id.cpp [1:3]
+ libs/python/src/errors.cpp [1:3]
+ libs/python/src/object/class.cpp [1:3]
+ libs/python/src/object/function.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b333747aa8572c825a7efd493a9a9f8
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2017 Michel Morin.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/advance.hpp [1:1]
+ boost/iterator/distance.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b3a92cd716462e0e8619e0728c70df0
+BELONGS ya.make
+ License text:
+ Copyright 2012-2017 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/allocate_shared_array.hpp [2:3]
+ boost/smart_ptr/make_shared_array.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b466aae49d13e5a11c7748a662799a9
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/strategies/geographic/area.hpp [5:7]
+ boost/geometry/strategies/spherical/area.hpp [5:7]
+ boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp [3:5]
+ boost/geometry/strategies/spherical/get_radius.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b5b76a48b60990aebae4bceee943dc7
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002-2003
+ // Eric Friedman, Itay Maman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/aligned_storage.hpp [6:7]
+ boost/type_traits/aligned_storage.hpp [6:7]
+ boost/variant/detail/initializer.hpp [6:7]
+ boost/variant/detail/make_variant_list.hpp [6:7]
+ boost/variant/detail/variant_io.hpp [6:7]
+ boost/variant/recursive_wrapper.hpp [6:7]
+ boost/variant/variant.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b674d228d848062b40f7b09ed2fb8d9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2006 Tobias Schwinger
+ Copyright (c) 2002-2006 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/iterator/position_iterator_fwd.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b6de4b28666620f02c795d69c510b09
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/home/classic/tree/impl/tree_to_xml.ipp [2:4]
+ boost/spirit/include/classic_spirit.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b89f27d5360ecf0ad7ed6e76aed9560
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2007.
+ // Copyright Paul A. Bristow 2007, 2009
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/pareto.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7b92eb65ad1bab8707b8638119e43870
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/median.hpp at line 6, boost/accumulators/statistics/weighted_mean.hpp at line 6, boost/accumulators/statistics/weighted_median.hpp at line 6, boost/accumulators/statistics/weighted_sum.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/median.hpp [4:6]
+ boost/accumulators/statistics/weighted_mean.hpp [4:6]
+ boost/accumulators/statistics/weighted_median.hpp [4:6]
+ boost/accumulators/statistics/weighted_sum.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7c467f819c9dc791f8ac52072e9805bc
+BELONGS ya.make
+ License text:
+ * Copyright 2016 Klemens D. Morgenstern
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/environment.hpp [2:2]
+ boost/winapi/get_system_directory.hpp [2:2]
+ boost/winapi/handle_info.hpp [2:2]
+ boost/winapi/jobs.hpp [2:2]
+ boost/winapi/overlapped.hpp [2:2]
+ boost/winapi/pipes.hpp [2:3]
+ boost/winapi/priority_class.hpp [2:3]
+ boost/winapi/process.hpp [2:3]
+ boost/winapi/shell.hpp [2:2]
+ boost/winapi/show_window.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7c6b6f9c2be387cd309bd2ae2f42487f
+BELONGS ya.make
+ License text:
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2010-2011 Karsten Ahnert
+ Copyright 2013 Kyle Lutz
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/thrust/thrust_algebra.hpp [9:11]
+ boost/numeric/odeint/external/thrust/thrust_resize.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7c79be4cd24c7aa3714068d19cb9fc44
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2008
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/config/bcc.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7c7c6a82cb1c8bc97100ce19df46e85d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/archive_input_unordered_map.hpp at line 16, boost/serialization/archive_input_unordered_set.hpp at line 15, boost/serialization/boost_unordered_map.hpp at line 16, boost/serialization/boost_unordered_set.hpp at line 15, boost/serialization/unordered_collections_load_imp.hpp at line 16, boost/serialization/unordered_collections_save_imp.hpp at line 15, boost/serialization/unordered_map.hpp at line 16, boost/serialization/unordered_set.hpp at line 15
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/archive_input_unordered_map.hpp [13:16]
+ boost/serialization/archive_input_unordered_set.hpp [12:15]
+ boost/serialization/boost_unordered_map.hpp [13:16]
+ boost/serialization/boost_unordered_set.hpp [12:15]
+ boost/serialization/unordered_collections_load_imp.hpp [13:16]
+ boost/serialization/unordered_collections_save_imp.hpp [12:15]
+ boost/serialization/unordered_map.hpp [13:16]
+ boost/serialization/unordered_set.hpp [12:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7c9f886a710149e126f9221074953f56
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2006, 2007
+ // Copyright Christoper Kohlhoff 2007
+ // Copyright Peter Dimov 2017, 2018
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/error_code.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7cae218a2138076c155d8b50261bee77
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/concurrent_queues/detail/sync_deque_base.hpp at line 8, boost/thread/concurrent_queues/detail/sync_queue_base.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/concurrent_queues/detail/sync_deque_base.hpp [6:8]
+ boost/thread/concurrent_queues/detail/sync_queue_base.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7d05fc9258f12a94e2417f5baa4da3b0
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/msvc/typeof_impl.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7d17bb2579336b337d87a036e9ce244b
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2006.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/gcc_xml.hpp [1:3]
+ boost/math/distributions/complement.hpp [1:4]
+ boost/math/special_functions/beta.hpp [1:3]
+ boost/math/special_functions/cbrt.hpp [1:3]
+ boost/math/special_functions/detail/erf_inv.hpp [1:3]
+ boost/math/special_functions/detail/gamma_inva.hpp [1:3]
+ boost/math/special_functions/detail/ibeta_inv_ab.hpp [1:3]
+ boost/math/special_functions/detail/igamma_inverse.hpp [1:3]
+ boost/math/special_functions/detail/lanczos_sse2.hpp [1:3]
+ boost/math/special_functions/detail/lgamma_small.hpp [1:3]
+ boost/math/special_functions/digamma.hpp [1:3]
+ boost/math/special_functions/erf.hpp [1:3]
+ boost/math/special_functions/expm1.hpp [1:3]
+ boost/math/special_functions/hermite.hpp [2:4]
+ boost/math/special_functions/laguerre.hpp [2:4]
+ boost/math/special_functions/lanczos.hpp [1:3]
+ boost/math/special_functions/legendre.hpp [2:4]
+ boost/math/special_functions/powm1.hpp [1:3]
+ boost/math/special_functions/sign.hpp [1:3]
+ boost/math/special_functions/spherical_harmonic.hpp [2:4]
+ boost/math/special_functions/sqrt1pm1.hpp [1:3]
+ boost/math/special_functions/trigamma.hpp [1:3]
+ boost/math/tools/minima.hpp [1:3]
+ boost/math/tools/polynomial.hpp [1:2]
+ boost/math/tools/rational.hpp [1:3]
+ boost/math/tools/roots.hpp [1:3]
+ boost/math/tools/toms748_solve.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7d3641595f7238247355f3c0357d25ef
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/experimental/parallel/v2/task_region.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/experimental/parallel/v2/task_region.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7d5110d3ce71c7d285877787619305f3
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2006 Joao Abecasis
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/functional/invocation/invoke.hpp [2:3]
+ boost/fusion/functional/invocation/invoke_function_object.hpp [2:3]
+ boost/fusion/functional/invocation/invoke_procedure.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7d7dc63b9e6e9d5cbe582c8eb99f9966
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2014 - 2018 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/ops_gcc_x86_dcas-linux.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86_dcas-osx.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86_dcas.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7d83c56cc7c4ebc1fa20c801845d48c4
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/msvc/typeof_impl.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7da1e963669f385bf3784df6bc8f2553
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005-2006 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/adjlist/redistribute.hpp [1:1]
+ boost/graph/distributed/detail/remote_update_set.hpp [1:1]
+ boost/graph/distributed/distributed_graph_utility.hpp [1:3]
+ boost/graph/distributed/fruchterman_reingold.hpp [1:1]
+ boost/graph/distributed/reverse_graph.hpp [1:1]
+ boost/graph/two_bit_color_map.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7dd6d1d05da218a30c942d31b089b985
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2009-2010 Hartmut Kaiser
+ Copyright (c) 2010-2011 Christopher Schmidt
+ Copyright (c) 2013-2014 Damien Buhl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/adt/adapt_adt.hpp [2:5]
+ boost/fusion/adapted/adt/adapt_assoc_adt.hpp [2:5]
+ boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp [2:2]
+ boost/fusion/adapted/struct/adapt_struct_named.hpp [2:4]
+ boost/fusion/adapted/struct/define_assoc_struct.hpp [2:2]
+ boost/fusion/adapted/struct/define_struct.hpp [2:2]
+ boost/fusion/adapted/struct/detail/define_struct.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7dfaa2a53a6b13ff30e70d1bb19164b4
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001 Daryle Walker.
+ // Copyright (C) 2003 Vesa Karvonen.
+ // Copyright (C) 2003 Gennaro Prota.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer/static_log2.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7e1e3704b1ac69a10bb7c8a89f254b60
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit.hpp [2:4]
+ boost/spirit/home/classic/namespace.hpp [2:4]
+ boost/spirit/include/classic.hpp [2:4]
+ boost/spirit/include/classic_actions.hpp [2:4]
+ boost/spirit/include/classic_actor.hpp [2:4]
+ boost/spirit/include/classic_alternative.hpp [2:4]
+ boost/spirit/include/classic_as_parser.hpp [2:4]
+ boost/spirit/include/classic_assert.hpp [2:4]
+ boost/spirit/include/classic_assign_actor.hpp [2:4]
+ boost/spirit/include/classic_assign_key_actor.hpp [2:4]
+ boost/spirit/include/classic_ast.hpp [2:4]
+ boost/spirit/include/classic_ast_fwd.hpp [2:4]
+ boost/spirit/include/classic_attribute.hpp [2:4]
+ boost/spirit/include/classic_basic_chset.hpp [2:4]
+ boost/spirit/include/classic_chset.hpp [2:4]
+ boost/spirit/include/classic_chset_operators.hpp [2:4]
+ boost/spirit/include/classic_clear_actor.hpp [2:4]
+ boost/spirit/include/classic_closure.hpp [2:4]
+ boost/spirit/include/classic_closure_context.hpp [2:4]
+ boost/spirit/include/classic_closure_fwd.hpp [2:4]
+ boost/spirit/include/classic_common.hpp [2:4]
+ boost/spirit/include/classic_common_fwd.hpp [2:4]
+ boost/spirit/include/classic_composite.hpp [2:4]
+ boost/spirit/include/classic_config.hpp [2:4]
+ boost/spirit/include/classic_confix.hpp [2:4]
+ boost/spirit/include/classic_confix_fwd.hpp [2:4]
+ boost/spirit/include/classic_core.hpp [2:4]
+ boost/spirit/include/classic_debug.hpp [2:4]
+ boost/spirit/include/classic_debug_node.hpp [2:4]
+ boost/spirit/include/classic_decrement_actor.hpp [2:4]
+ boost/spirit/include/classic_difference.hpp [2:4]
+ boost/spirit/include/classic_directives.hpp [2:4]
+ boost/spirit/include/classic_distinct.hpp [2:4]
+ boost/spirit/include/classic_distinct_fwd.hpp [2:4]
+ boost/spirit/include/classic_dynamic.hpp [2:4]
+ boost/spirit/include/classic_epsilon.hpp [2:4]
+ boost/spirit/include/classic_erase_actor.hpp [2:4]
+ boost/spirit/include/classic_error_handling.hpp [2:4]
+ boost/spirit/include/classic_escape_char.hpp [2:4]
+ boost/spirit/include/classic_escape_char_fwd.hpp [2:4]
+ boost/spirit/include/classic_exceptions.hpp [2:4]
+ boost/spirit/include/classic_exceptions_fwd.hpp [2:4]
+ boost/spirit/include/classic_exclusive_or.hpp [2:4]
+ boost/spirit/include/classic_file_iterator.hpp [2:4]
+ boost/spirit/include/classic_file_iterator_fwd.hpp [2:4]
+ boost/spirit/include/classic_fixed_size_queue.hpp [2:4]
+ boost/spirit/include/classic_flush_multi_pass.hpp [2:4]
+ boost/spirit/include/classic_for.hpp [2:4]
+ boost/spirit/include/classic_functor_parser.hpp [2:4]
+ boost/spirit/include/classic_fundamental.hpp [2:4]
+ boost/spirit/include/classic_grammar.hpp [2:4]
+ boost/spirit/include/classic_grammar_def.hpp [2:4]
+ boost/spirit/include/classic_grammar_def_fwd.hpp [2:4]
+ boost/spirit/include/classic_if.hpp [2:4]
+ boost/spirit/include/classic_increment_actor.hpp [2:4]
+ boost/spirit/include/classic_insert_at_actor.hpp [2:4]
+ boost/spirit/include/classic_insert_key_actor.hpp [2:4]
+ boost/spirit/include/classic_intersection.hpp [2:4]
+ boost/spirit/include/classic_iterator.hpp [2:4]
+ boost/spirit/include/classic_kleene_star.hpp [2:4]
+ boost/spirit/include/classic_lazy.hpp [2:4]
+ boost/spirit/include/classic_list.hpp [2:4]
+ boost/spirit/include/classic_lists.hpp [2:4]
+ boost/spirit/include/classic_lists_fwd.hpp [2:4]
+ boost/spirit/include/classic_loops.hpp [2:4]
+ boost/spirit/include/classic_match.hpp [2:4]
+ boost/spirit/include/classic_meta.hpp [2:4]
+ boost/spirit/include/classic_minimal.hpp [2:4]
+ boost/spirit/include/classic_multi_pass.hpp [2:4]
+ boost/spirit/include/classic_multi_pass_fwd.hpp [2:4]
+ boost/spirit/include/classic_nil.hpp [2:4]
+ boost/spirit/include/classic_no_actions.hpp [2:4]
+ boost/spirit/include/classic_numerics.hpp [2:4]
+ boost/spirit/include/classic_numerics_fwd.hpp [2:4]
+ boost/spirit/include/classic_operators.hpp [2:4]
+ boost/spirit/include/classic_optional.hpp [2:4]
+ boost/spirit/include/classic_parametric.hpp [2:4]
+ boost/spirit/include/classic_parse_tree.hpp [2:4]
+ boost/spirit/include/classic_parse_tree_fwd.hpp [2:4]
+ boost/spirit/include/classic_parse_tree_utils.hpp [2:4]
+ boost/spirit/include/classic_parser.hpp [2:4]
+ boost/spirit/include/classic_parser_context.hpp [2:4]
+ boost/spirit/include/classic_parser_id.hpp [2:4]
+ boost/spirit/include/classic_parser_names.hpp [2:4]
+ boost/spirit/include/classic_parser_traits.hpp [2:4]
+ boost/spirit/include/classic_position_iterator.hpp [2:4]
+ boost/spirit/include/classic_position_iterator_fwd.hpp [2:4]
+ boost/spirit/include/classic_positive.hpp [2:4]
+ boost/spirit/include/classic_primitives.hpp [2:4]
+ boost/spirit/include/classic_push_back_actor.hpp [2:4]
+ boost/spirit/include/classic_push_front_actor.hpp [2:4]
+ boost/spirit/include/classic_range_run.hpp [2:4]
+ boost/spirit/include/classic_ref_actor.hpp [2:4]
+ boost/spirit/include/classic_ref_const_ref_actor.hpp [2:4]
+ boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp [2:4]
+ boost/spirit/include/classic_ref_const_ref_value_actor.hpp [2:4]
+ boost/spirit/include/classic_ref_value_actor.hpp [2:4]
+ boost/spirit/include/classic_refactoring.hpp [2:4]
+ boost/spirit/include/classic_regex.hpp [2:4]
+ boost/spirit/include/classic_rule.hpp [2:4]
+ boost/spirit/include/classic_rule_alias.hpp [2:4]
+ boost/spirit/include/classic_rule_parser.hpp [2:4]
+ boost/spirit/include/classic_safe_bool.hpp [2:4]
+ boost/spirit/include/classic_scanner.hpp [2:4]
+ boost/spirit/include/classic_scanner_fwd.hpp [2:4]
+ boost/spirit/include/classic_scoped_lock.hpp [2:4]
+ boost/spirit/include/classic_select.hpp [2:4]
+ boost/spirit/include/classic_sequence.hpp [2:4]
+ boost/spirit/include/classic_sequential_and.hpp [2:4]
+ boost/spirit/include/classic_sequential_or.hpp [2:4]
+ boost/spirit/include/classic_skipper.hpp [2:4]
+ boost/spirit/include/classic_skipper_fwd.hpp [2:4]
+ boost/spirit/include/classic_static.hpp [2:4]
+ boost/spirit/include/classic_stored_rule.hpp [2:4]
+ boost/spirit/include/classic_stored_rule_fwd.hpp [2:4]
+ boost/spirit/include/classic_subrule.hpp [2:4]
+ boost/spirit/include/classic_subrule_fwd.hpp [2:4]
+ boost/spirit/include/classic_swap_actor.hpp [2:4]
+ boost/spirit/include/classic_switch.hpp [2:4]
+ boost/spirit/include/classic_symbols.hpp [2:4]
+ boost/spirit/include/classic_symbols_fwd.hpp [2:4]
+ boost/spirit/include/classic_traverse.hpp [2:4]
+ boost/spirit/include/classic_tree_to_xml.hpp [2:4]
+ boost/spirit/include/classic_typeof.hpp [2:4]
+ boost/spirit/include/classic_utility.hpp [2:4]
+ boost/spirit/include/classic_version.hpp [2:4]
+ boost/spirit/include/classic_while.hpp [2:4]
+ boost/spirit/include/phoenix1.hpp [2:4]
+ boost/spirit/include/phoenix1_actor.hpp [2:4]
+ boost/spirit/include/phoenix1_binders.hpp [2:4]
+ boost/spirit/include/phoenix1_casts.hpp [2:4]
+ boost/spirit/include/phoenix1_closures.hpp [2:4]
+ boost/spirit/include/phoenix1_composite.hpp [2:4]
+ boost/spirit/include/phoenix1_functions.hpp [2:4]
+ boost/spirit/include/phoenix1_new.hpp [2:4]
+ boost/spirit/include/phoenix1_operators.hpp [2:4]
+ boost/spirit/include/phoenix1_primitives.hpp [2:4]
+ boost/spirit/include/phoenix1_special_ops.hpp [2:4]
+ boost/spirit/include/phoenix1_statements.hpp [2:4]
+ boost/spirit/include/phoenix1_tuple_helpers.hpp [2:4]
+ boost/spirit/include/phoenix1_tuples.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7e4aa3d1095ffd1092cff9f549b3de89
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/rolling_variance.hpp at line 6, boost/fusion/algorithm/query/any.hpp at line 5, boost/fusion/algorithm/query/detail/any.hpp at line 5, boost/fusion/container/generation/make_cons.hpp at line 5, boost/fusion/container/list/cons.hpp at line 5, boost/fusion/container/list/cons_fwd.hpp at line 5, boost/fusion/container/list/cons_iterator.hpp at line 5, boost/fusion/container/list/detail/begin_impl.hpp at line 5, boost/fusion/container/list/detail/deref_impl.hpp at line 5, boost/fusion/container/list/detail/end_impl.hpp at line 5, boost/fusion/container/list/detail/next_impl.hpp at line 5, boost/fusion/container/list/detail/value_of_impl.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/rolling_variance.hpp [3:6]
+ boost/fusion/algorithm/query/any.hpp [2:4]
+ boost/fusion/algorithm/query/detail/any.hpp [2:4]
+ boost/fusion/container/generation/make_cons.hpp [2:3]
+ boost/fusion/container/list/cons.hpp [2:3]
+ boost/fusion/container/list/cons_fwd.hpp [2:3]
+ boost/fusion/container/list/cons_iterator.hpp [2:3]
+ boost/fusion/container/list/detail/begin_impl.hpp [2:3]
+ boost/fusion/container/list/detail/deref_impl.hpp [2:3]
+ boost/fusion/container/list/detail/end_impl.hpp [2:3]
+ boost/fusion/container/list/detail/next_impl.hpp [2:3]
+ boost/fusion/container/list/detail/value_of_impl.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7e6f5e41baa083be7230e409d7f43ed2
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002, 2003 Peter Dimov
+ // Copyright (c) 2003 Daniel Frey
+ // Copyright (c) 2003 Howard Hinnant
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/checked_delete.hpp [13:15]
+ boost/signals2/detail/lwm_win32_cs.hpp [4:6]
+ boost/smart_ptr/detail/lwm_win32_cs.hpp [13:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7ed1eb379e17833ff37681f581fa429d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/pdqsort/pdqsort.hpp at line 5
+ License text:
+ // Copyright Orson Peters 2017.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/sort/pdqsort/pdqsort.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7ee360b4e286bb266367da5faf97ebd7
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006, 2007, 2012, 2014.
+ // Copyright Paul A. Bristow 2006, 2007, 2012
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/detail/common_error_handling.hpp [1:2]
+ boost/math/special_functions.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7ee7926211cade048fc30fb0b3fa464f
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/recalculate.hpp [3:6]
+ boost/geometry/policies/robustness/no_rescale_policy.hpp [3:6]
+ boost/geometry/policies/robustness/robust_point_type.hpp [3:6]
+ boost/geometry/policies/robustness/segment_ratio_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7f2db459478f707a0dc01561712dabb7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/is_xxx.hpp at line 3, boost/parameter/aux_/result_of0.hpp at line 3, boost/parameter/aux_/tag.hpp at line 3, boost/parameter/binding.hpp at line 3, boost/parameter/match.hpp at line 3, boost/python/detail/is_xxx.hpp at line 3
+ License text:
+ // Copyright David Abrahams 2005. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/is_xxx.hpp [1:3]
+ boost/parameter/aux_/result_of0.hpp [1:3]
+ boost/parameter/aux_/tag.hpp [1:3]
+ boost/parameter/binding.hpp [1:3]
+ boost/parameter/match.hpp [1:3]
+ boost/python/detail/is_xxx.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7f69d13bc868e45f410b7807222b3a49
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2006-2010 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/one_bit_color_map.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7f8576d8bbd73977a48fce0347863709
+BELONGS ya.make
+ License text:
+ // Copyright (c) Intel Corporation 2008.
+ // Copyright (c) 2008-2012 Simonson Lucanus.
+ // Copyright (c) 2012-2012 Andrii Sydorchuk.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polygon/interval_concept.hpp [3:5]
+ boost/polygon/interval_data.hpp [3:5]
+ boost/polygon/interval_traits.hpp [3:5]
+ boost/polygon/point_concept.hpp [3:5]
+ boost/polygon/point_data.hpp [3:5]
+ boost/polygon/point_traits.hpp [3:5]
+ boost/polygon/segment_concept.hpp [3:5]
+ boost/polygon/segment_data.hpp [3:5]
+ boost/polygon/segment_traits.hpp [3:5]
+ boost/polygon/transform.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7fe04975698c2d2ed95aae6c40492320
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/categories.hpp at line 4, boost/iostreams/chain.hpp at line 4, boost/iostreams/char_traits.hpp at line 4, boost/iostreams/checked_operations.hpp at line 4, boost/iostreams/close.hpp at line 4, boost/iostreams/code_converter.hpp at line 4, boost/iostreams/combine.hpp at line 4, boost/iostreams/compose.hpp at line 4, boost/iostreams/concepts.hpp at line 4, boost/iostreams/constants.hpp at line 4, boost/iostreams/copy.hpp at line 4, boost/iostreams/detail/access_control.hpp at line 4, boost/iostreams/detail/adapter/concept_adapter.hpp at line 4, boost/iostreams/detail/adapter/direct_adapter.hpp at line 4, boost/iostreams/detail/adapter/mode_adapter.hpp at line 4, boost/iostreams/detail/adapter/non_blocking_adapter.hpp at line 4, boost/iostreams/detail/adapter/output_iterator_adapter.hpp at line 4, boost/iostreams/detail/adapter/range_adapter.hpp at line 4, boost/iostreams/detail/add_facet.hpp at line 4, boost/iostreams/detail/bool_trait_def.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/forward.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/stream.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp at line 4, boost/iostreams/detail/buffer.hpp at line 4, boost/iostreams/detail/call_traits.hpp at line 4, boost/iostreams/detail/char_traits.hpp at line 4, boost/iostreams/detail/codecvt_helper.hpp at line 4, boost/iostreams/detail/codecvt_holder.hpp at line 4, boost/iostreams/detail/config/auto_link.hpp at line 4, boost/iostreams/detail/config/bzip2.hpp at line 4, boost/iostreams/detail/config/codecvt.hpp at line 4, boost/iostreams/detail/config/disable_warnings.hpp at line 4, boost/iostreams/detail/config/dyn_link.hpp at line 4, boost/iostreams/detail/config/enable_warnings.hpp at line 4, boost/iostreams/detail/config/gcc.hpp at line 4, boost/iostreams/detail/config/limits.hpp at line 4, boost/iostreams/detail/config/overload_resolution.hpp at line 4, boost/iostreams/detail/config/wide_streams.hpp at line 4, boost/iostreams/detail/config/windows_posix.hpp at line 4, boost/iostreams/detail/config/zlib.hpp at line 4, boost/iostreams/detail/counted_array.hpp at line 4, boost/iostreams/detail/default_arg.hpp at line 4, boost/iostreams/detail/dispatch.hpp at line 4, boost/iostreams/detail/double_object.hpp at line 4, boost/iostreams/detail/enable_if_stream.hpp at line 4, boost/iostreams/detail/error.hpp at line 4, boost/iostreams/detail/forward.hpp at line 4, boost/iostreams/detail/fstream.hpp at line 4, boost/iostreams/detail/ios.hpp at line 4, boost/iostreams/detail/iostream.hpp at line 4, boost/iostreams/detail/is_dereferenceable.hpp at line 4, boost/iostreams/detail/is_iterator_range.hpp at line 4, boost/iostreams/detail/newline.hpp at line 4, boost/iostreams/detail/optional.hpp at line 4, boost/iostreams/detail/param_type.hpp at line 4, boost/iostreams/detail/push.hpp at line 4, boost/iostreams/detail/push_params.hpp at line 4, boost/iostreams/detail/resolve.hpp at line 4, boost/iostreams/detail/select.hpp at line 4, boost/iostreams/detail/select_by_size.hpp at line 4, boost/iostreams/detail/streambuf.hpp at line 4, boost/iostreams/detail/streambuf/chainbuf.hpp at line 4, boost/iostreams/detail/streambuf/direct_streambuf.hpp at line 4, boost/iostreams/detail/streambuf/indirect_streambuf.hpp at line 4, boost/iostreams/detail/streambuf/linked_streambuf.hpp at line 4, boost/iostreams/detail/system_failure.hpp at line 4, boost/iostreams/detail/template_params.hpp at line 4, boost/iostreams/detail/translate_int_type.hpp at line 4, boost/iostreams/detail/wrap_unwrap.hpp at line 4, boost/iostreams/device/array.hpp at line 4, boost/iostreams/device/back_inserter.hpp at line 4, boost/iostreams/device/file.hpp at line 4, boost/iostreams/device/file_descriptor.hpp at line 4, boost/iostreams/device/null.hpp at line 4, boost/iostreams/filter/aggregate.hpp at line 4, boost/iostreams/filter/bzip2.hpp at line 4, boost/iostreams/filter/counter.hpp at line 4, boost/iostreams/filter/gzip.hpp at line 4, boost/iostreams/filter/line.hpp at line 4, boost/iostreams/filter/newline.hpp at line 4, boost/iostreams/filter/regex.hpp at line 4, boost/iostreams/filter/stdio.hpp at line 4, boost/iostreams/filter/symmetric.hpp at line 4, boost/iostreams/filter/test.hpp at line 4, boost/iostreams/filter/zlib.hpp at line 4, boost/iostreams/filtering_stream.hpp at line 4, boost/iostreams/filtering_streambuf.hpp at line 4, boost/iostreams/flush.hpp at line 4, boost/iostreams/get.hpp at line 4, boost/iostreams/imbue.hpp at line 4, boost/iostreams/input_sequence.hpp at line 4, boost/iostreams/invert.hpp at line 4, boost/iostreams/operations.hpp at line 4, boost/iostreams/operations_fwd.hpp at line 4, boost/iostreams/optimal_buffer_size.hpp at line 4, boost/iostreams/output_sequence.hpp at line 4, boost/iostreams/pipeline.hpp at line 4, boost/iostreams/positioning.hpp at line 4, boost/iostreams/put.hpp at line 4, boost/iostreams/putback.hpp at line 4, boost/iostreams/read.hpp at line 4, boost/iostreams/seek.hpp at line 4, boost/iostreams/skip.hpp at line 4, boost/iostreams/stream.hpp at line 4, boost/iostreams/stream_buffer.hpp at line 4, boost/iostreams/tee.hpp at line 4, boost/iostreams/traits.hpp at line 4, boost/iostreams/traits_fwd.hpp at line 4, boost/iostreams/write.hpp at line 4, libs/iostreams/src/bzip2.cpp at line 4, libs/iostreams/src/file_descriptor.cpp at line 4, libs/iostreams/src/gzip.cpp at line 4, libs/iostreams/src/zlib.cpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/categories.hpp [1:4]
+ boost/iostreams/chain.hpp [1:4]
+ boost/iostreams/char_traits.hpp [1:4]
+ boost/iostreams/checked_operations.hpp [1:4]
+ boost/iostreams/close.hpp [1:4]
+ boost/iostreams/code_converter.hpp [1:4]
+ boost/iostreams/combine.hpp [1:4]
+ boost/iostreams/compose.hpp [1:4]
+ boost/iostreams/concepts.hpp [1:4]
+ boost/iostreams/constants.hpp [1:4]
+ boost/iostreams/copy.hpp [1:4]
+ boost/iostreams/detail/access_control.hpp [1:4]
+ boost/iostreams/detail/adapter/concept_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/direct_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/mode_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/non_blocking_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/output_iterator_adapter.hpp [1:4]
+ boost/iostreams/detail/adapter/range_adapter.hpp [1:4]
+ boost/iostreams/detail/add_facet.hpp [1:4]
+ boost/iostreams/detail/bool_trait_def.hpp [1:4]
+ boost/iostreams/detail/broken_overload_resolution/forward.hpp [1:4]
+ boost/iostreams/detail/broken_overload_resolution/stream.hpp [1:4]
+ boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp [1:4]
+ boost/iostreams/detail/buffer.hpp [1:4]
+ boost/iostreams/detail/call_traits.hpp [1:4]
+ boost/iostreams/detail/char_traits.hpp [1:4]
+ boost/iostreams/detail/codecvt_helper.hpp [1:4]
+ boost/iostreams/detail/codecvt_holder.hpp [1:4]
+ boost/iostreams/detail/config/auto_link.hpp [1:4]
+ boost/iostreams/detail/config/bzip2.hpp [1:4]
+ boost/iostreams/detail/config/codecvt.hpp [1:4]
+ boost/iostreams/detail/config/disable_warnings.hpp [1:4]
+ boost/iostreams/detail/config/dyn_link.hpp [1:4]
+ boost/iostreams/detail/config/enable_warnings.hpp [1:4]
+ boost/iostreams/detail/config/gcc.hpp [1:4]
+ boost/iostreams/detail/config/limits.hpp [1:4]
+ boost/iostreams/detail/config/overload_resolution.hpp [1:4]
+ boost/iostreams/detail/config/wide_streams.hpp [1:4]
+ boost/iostreams/detail/config/windows_posix.hpp [1:5]
+ boost/iostreams/detail/config/zlib.hpp [1:4]
+ boost/iostreams/detail/counted_array.hpp [1:4]
+ boost/iostreams/detail/default_arg.hpp [1:4]
+ boost/iostreams/detail/dispatch.hpp [1:4]
+ boost/iostreams/detail/double_object.hpp [1:4]
+ boost/iostreams/detail/enable_if_stream.hpp [1:4]
+ boost/iostreams/detail/error.hpp [1:4]
+ boost/iostreams/detail/forward.hpp [1:4]
+ boost/iostreams/detail/fstream.hpp [1:4]
+ boost/iostreams/detail/ios.hpp [1:4]
+ boost/iostreams/detail/iostream.hpp [1:4]
+ boost/iostreams/detail/is_dereferenceable.hpp [1:5]
+ boost/iostreams/detail/is_iterator_range.hpp [1:4]
+ boost/iostreams/detail/newline.hpp [1:4]
+ boost/iostreams/detail/optional.hpp [1:4]
+ boost/iostreams/detail/param_type.hpp [1:4]
+ boost/iostreams/detail/push.hpp [1:4]
+ boost/iostreams/detail/push_params.hpp [1:4]
+ boost/iostreams/detail/resolve.hpp [1:4]
+ boost/iostreams/detail/select.hpp [1:4]
+ boost/iostreams/detail/select_by_size.hpp [1:4]
+ boost/iostreams/detail/streambuf.hpp [1:4]
+ boost/iostreams/detail/streambuf/chainbuf.hpp [1:4]
+ boost/iostreams/detail/streambuf/direct_streambuf.hpp [1:4]
+ boost/iostreams/detail/streambuf/indirect_streambuf.hpp [1:4]
+ boost/iostreams/detail/streambuf/linked_streambuf.hpp [1:4]
+ boost/iostreams/detail/system_failure.hpp [1:5]
+ boost/iostreams/detail/template_params.hpp [1:4]
+ boost/iostreams/detail/translate_int_type.hpp [1:4]
+ boost/iostreams/detail/wrap_unwrap.hpp [1:4]
+ boost/iostreams/device/array.hpp [1:4]
+ boost/iostreams/device/back_inserter.hpp [1:4]
+ boost/iostreams/device/file.hpp [1:4]
+ boost/iostreams/device/file_descriptor.hpp [1:4]
+ boost/iostreams/device/null.hpp [1:4]
+ boost/iostreams/filter/aggregate.hpp [1:4]
+ boost/iostreams/filter/bzip2.hpp [1:4]
+ boost/iostreams/filter/counter.hpp [1:4]
+ boost/iostreams/filter/gzip.hpp [1:4]
+ boost/iostreams/filter/line.hpp [1:4]
+ boost/iostreams/filter/newline.hpp [1:4]
+ boost/iostreams/filter/regex.hpp [1:4]
+ boost/iostreams/filter/stdio.hpp [1:4]
+ boost/iostreams/filter/symmetric.hpp [1:4]
+ boost/iostreams/filter/test.hpp [1:4]
+ boost/iostreams/filter/zlib.hpp [1:4]
+ boost/iostreams/filtering_stream.hpp [1:4]
+ boost/iostreams/filtering_streambuf.hpp [1:4]
+ boost/iostreams/flush.hpp [1:4]
+ boost/iostreams/get.hpp [1:4]
+ boost/iostreams/imbue.hpp [1:4]
+ boost/iostreams/input_sequence.hpp [1:4]
+ boost/iostreams/invert.hpp [1:4]
+ boost/iostreams/operations.hpp [1:4]
+ boost/iostreams/operations_fwd.hpp [1:4]
+ boost/iostreams/optimal_buffer_size.hpp [1:4]
+ boost/iostreams/output_sequence.hpp [1:4]
+ boost/iostreams/pipeline.hpp [1:4]
+ boost/iostreams/positioning.hpp [1:4]
+ boost/iostreams/put.hpp [1:4]
+ boost/iostreams/putback.hpp [1:4]
+ boost/iostreams/read.hpp [1:4]
+ boost/iostreams/seek.hpp [1:4]
+ boost/iostreams/skip.hpp [1:4]
+ boost/iostreams/stream.hpp [1:4]
+ boost/iostreams/stream_buffer.hpp [1:4]
+ boost/iostreams/tee.hpp [1:4]
+ boost/iostreams/traits.hpp [1:4]
+ boost/iostreams/traits_fwd.hpp [1:4]
+ boost/iostreams/write.hpp [1:4]
+ libs/iostreams/src/bzip2.cpp [1:4]
+ libs/iostreams/src/file_descriptor.cpp [1:4]
+ libs/iostreams/src/gzip.cpp [1:4]
+ libs/iostreams/src/zlib.cpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7fe227ec710d458b7abf79bdc3c1ad1e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2011 Thomas Heller
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/support/detail/pp_round.hpp [2:2]
+ boost/phoenix/core/call.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/phx2_result.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/phx2_result.hpp [24:24]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_10.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_20.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_30.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_40.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_50.hpp [2:2]
+ boost/phoenix/core/detail/phx2_result.hpp [2:2]
+ boost/phoenix/core/v2_eval.hpp [2:2]
+ boost/phoenix/function/adapt_callable.hpp [2:3]
+ boost/phoenix/scope/detail/local_variable.hpp [2:4]
+ boost/phoenix/scope/this.hpp [2:3]
+ boost/phoenix/support/preprocessor/round.hpp [2:2]
+ boost/spirit/home/lex/argument.hpp [1:4]
+ boost/spirit/home/lex/argument_phoenix.hpp [1:2]
+ boost/spirit/home/lex/lexer/support_functions_expression.hpp [1:2]
+ boost/spirit/home/support/argument.hpp [2:4]
+ boost/spirit/home/support/argument_expression.hpp [2:4]
+ boost/spirit/home/support/context.hpp [2:4]
+ boost/spirit/home/support/terminal.hpp [2:4]
+ boost/spirit/home/support/terminal_expression.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7fe63dbfc34a676863979ab818e17142
+BELONGS ya.make
+ License text:
+ // in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/detail/airy_ai_bi_zero.hpp [8:8]
+ boost/math/special_functions/detail/bessel_jy_zero.hpp [8:8]
+ boost/multiprecision/cpp_dec_float.hpp [9:9]
+ boost/multiprecision/detail/functions/pow.hpp [10:10]
+ boost/multiprecision/detail/functions/trig.hpp [10:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7fe9441ac3e18d7a1f3d2435760c49b9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/vmd/assert.hpp at line 4, boost/vmd/assert_is_array.hpp at line 4, boost/vmd/assert_is_empty.hpp at line 4, boost/vmd/assert_is_identifier.hpp at line 4, boost/vmd/assert_is_list.hpp at line 4, boost/vmd/assert_is_number.hpp at line 4, boost/vmd/assert_is_seq.hpp at line 4, boost/vmd/assert_is_tuple.hpp at line 4, boost/vmd/assert_is_type.hpp at line 4, boost/vmd/detail/adjust_tuple_type.hpp at line 4, boost/vmd/detail/array.hpp at line 4, boost/vmd/detail/assert.hpp at line 4, boost/vmd/detail/data_equal.hpp at line 4, boost/vmd/detail/data_equal_common.hpp at line 4, boost/vmd/detail/empty_result.hpp at line 4, boost/vmd/detail/equal.hpp at line 4, boost/vmd/detail/equal_common.hpp at line 4, boost/vmd/detail/equal_type.hpp at line 4, boost/vmd/detail/identifier.hpp at line 4, boost/vmd/detail/identifier_concat.hpp at line 4, boost/vmd/detail/identifier_type.hpp at line 4, boost/vmd/detail/idprefix.hpp at line 4, boost/vmd/detail/is_array.hpp at line 4, boost/vmd/detail/is_array_common.hpp at line 4, boost/vmd/detail/is_empty.hpp at line 4, boost/vmd/detail/is_empty_array.hpp at line 4, boost/vmd/detail/is_empty_tuple.hpp at line 4, boost/vmd/detail/is_entire.hpp at line 4, boost/vmd/detail/is_identifier.hpp at line 4, boost/vmd/detail/is_list.hpp at line 4, boost/vmd/detail/is_number.hpp at line 4, boost/vmd/detail/is_seq.hpp at line 4, boost/vmd/detail/is_tuple.hpp at line 4, boost/vmd/detail/is_type.hpp at line 4, boost/vmd/detail/is_type_type.hpp at line 4, boost/vmd/detail/list.hpp at line 4, boost/vmd/detail/match_identifier.hpp at line 4, boost/vmd/detail/match_identifier_common.hpp at line 4, boost/vmd/detail/match_single_identifier.hpp at line 4, boost/vmd/detail/modifiers.hpp at line 4, boost/vmd/detail/mods.hpp at line 4, boost/vmd/detail/nil_registration.hpp at line 4, boost/vmd/detail/not_empty.hpp at line 4, boost/vmd/detail/number_registration.hpp at line 4, boost/vmd/detail/only_after.hpp at line 4, boost/vmd/detail/parens.hpp at line 4, boost/vmd/detail/parens_common.hpp at line 4, boost/vmd/detail/parens_split.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_1.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_10.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_11.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_12.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_13.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_14.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_15.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_16.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_2.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_3.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_4.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_5.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_6.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_7.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_8.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_9.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_specific.hpp at line 4, boost/vmd/detail/recurse/equal/equal_1.hpp at line 4, boost/vmd/detail/recurse/equal/equal_10.hpp at line 4, boost/vmd/detail/recurse/equal/equal_11.hpp at line 4, boost/vmd/detail/recurse/equal/equal_12.hpp at line 4, boost/vmd/detail/recurse/equal/equal_13.hpp at line 4, boost/vmd/detail/recurse/equal/equal_14.hpp at line 4, boost/vmd/detail/recurse/equal/equal_15.hpp at line 4, boost/vmd/detail/recurse/equal/equal_16.hpp at line 4, boost/vmd/detail/recurse/equal/equal_2.hpp at line 4, boost/vmd/detail/recurse/equal/equal_3.hpp at line 4, boost/vmd/detail/recurse/equal/equal_4.hpp at line 4, boost/vmd/detail/recurse/equal/equal_5.hpp at line 4, boost/vmd/detail/recurse/equal/equal_6.hpp at line 4, boost/vmd/detail/recurse/equal/equal_7.hpp at line 4, boost/vmd/detail/recurse/equal/equal_8.hpp at line 4, boost/vmd/detail/recurse/equal/equal_9.hpp at line 4, boost/vmd/detail/recurse/equal/equal_headers.hpp at line 4, boost/vmd/detail/seq.hpp at line 4, boost/vmd/detail/sequence_arity.hpp at line 4, boost/vmd/detail/sequence_common.hpp at line 4, boost/vmd/detail/sequence_elem.hpp at line 4, boost/vmd/detail/sequence_enum.hpp at line 4, boost/vmd/detail/sequence_size.hpp at line 4, boost/vmd/detail/sequence_to_array.hpp at line 4, boost/vmd/detail/sequence_to_list.hpp at line 4, boost/vmd/detail/sequence_to_seq.hpp at line 4, boost/vmd/detail/sequence_to_tuple.hpp at line 4, boost/vmd/detail/sequence_type.hpp at line 4, boost/vmd/detail/setup.hpp at line 4, boost/vmd/detail/tuple.hpp at line 4, boost/vmd/detail/type_registration.hpp at line 4, boost/vmd/detail/variadic_pop_front.hpp at line 4, boost/vmd/elem.hpp at line 4, boost/vmd/empty.hpp at line 4, boost/vmd/enum.hpp at line 4, boost/vmd/equal.hpp at line 4, boost/vmd/get_type.hpp at line 4, boost/vmd/identity.hpp at line 4, boost/vmd/is_array.hpp at line 4, boost/vmd/is_empty.hpp at line 4, boost/vmd/is_empty_array.hpp at line 4, boost/vmd/is_empty_list.hpp at line 4, boost/vmd/is_identifier.hpp at line 4, boost/vmd/is_list.hpp at line 4, boost/vmd/is_multi.hpp at line 4, boost/vmd/is_number.hpp at line 4, boost/vmd/is_parens_empty.hpp at line 4, boost/vmd/is_seq.hpp at line 4, boost/vmd/is_tuple.hpp at line 4, boost/vmd/is_type.hpp at line 4, boost/vmd/is_unary.hpp at line 4, boost/vmd/not_equal.hpp at line 4, boost/vmd/size.hpp at line 4, boost/vmd/to_array.hpp at line 4, boost/vmd/to_list.hpp at line 4, boost/vmd/to_seq.hpp at line 4, boost/vmd/to_tuple.hpp at line 4, boost/vmd/vmd.hpp at line 4
+ License text:
+ // (C) Copyright Edward Diener 2011-2015
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/vmd/assert.hpp [2:4]
+ boost/vmd/assert_is_array.hpp [2:4]
+ boost/vmd/assert_is_empty.hpp [2:4]
+ boost/vmd/assert_is_identifier.hpp [2:4]
+ boost/vmd/assert_is_list.hpp [2:4]
+ boost/vmd/assert_is_number.hpp [2:4]
+ boost/vmd/assert_is_seq.hpp [2:4]
+ boost/vmd/assert_is_tuple.hpp [2:4]
+ boost/vmd/assert_is_type.hpp [2:4]
+ boost/vmd/detail/adjust_tuple_type.hpp [2:4]
+ boost/vmd/detail/array.hpp [2:4]
+ boost/vmd/detail/assert.hpp [2:4]
+ boost/vmd/detail/data_equal.hpp [2:4]
+ boost/vmd/detail/data_equal_common.hpp [2:4]
+ boost/vmd/detail/empty_result.hpp [2:4]
+ boost/vmd/detail/equal.hpp [2:4]
+ boost/vmd/detail/equal_common.hpp [2:4]
+ boost/vmd/detail/equal_type.hpp [2:4]
+ boost/vmd/detail/identifier.hpp [2:4]
+ boost/vmd/detail/identifier_concat.hpp [2:4]
+ boost/vmd/detail/identifier_type.hpp [2:4]
+ boost/vmd/detail/idprefix.hpp [2:4]
+ boost/vmd/detail/is_array.hpp [2:4]
+ boost/vmd/detail/is_array_common.hpp [2:4]
+ boost/vmd/detail/is_empty.hpp [2:4]
+ boost/vmd/detail/is_empty_array.hpp [2:4]
+ boost/vmd/detail/is_empty_tuple.hpp [2:4]
+ boost/vmd/detail/is_entire.hpp [2:4]
+ boost/vmd/detail/is_identifier.hpp [2:4]
+ boost/vmd/detail/is_list.hpp [2:4]
+ boost/vmd/detail/is_number.hpp [2:4]
+ boost/vmd/detail/is_seq.hpp [2:4]
+ boost/vmd/detail/is_tuple.hpp [2:4]
+ boost/vmd/detail/is_type.hpp [2:4]
+ boost/vmd/detail/is_type_type.hpp [2:4]
+ boost/vmd/detail/list.hpp [2:4]
+ boost/vmd/detail/match_identifier.hpp [2:4]
+ boost/vmd/detail/match_identifier_common.hpp [2:4]
+ boost/vmd/detail/match_single_identifier.hpp [2:4]
+ boost/vmd/detail/modifiers.hpp [2:4]
+ boost/vmd/detail/mods.hpp [2:4]
+ boost/vmd/detail/nil_registration.hpp [2:4]
+ boost/vmd/detail/not_empty.hpp [2:4]
+ boost/vmd/detail/number_registration.hpp [2:4]
+ boost/vmd/detail/only_after.hpp [2:4]
+ boost/vmd/detail/parens.hpp [2:4]
+ boost/vmd/detail/parens_common.hpp [2:4]
+ boost/vmd/detail/parens_split.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_1.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_10.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_11.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_12.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_13.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_14.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_15.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_16.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_2.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_3.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_4.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_5.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_6.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_7.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_8.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_9.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp [2:4]
+ boost/vmd/detail/recurse/data_equal/data_equal_specific.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_1.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_10.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_11.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_12.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_13.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_14.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_15.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_16.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_2.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_3.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_4.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_5.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_6.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_7.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_8.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_9.hpp [2:4]
+ boost/vmd/detail/recurse/equal/equal_headers.hpp [2:4]
+ boost/vmd/detail/seq.hpp [2:4]
+ boost/vmd/detail/sequence_arity.hpp [2:4]
+ boost/vmd/detail/sequence_common.hpp [2:4]
+ boost/vmd/detail/sequence_elem.hpp [2:4]
+ boost/vmd/detail/sequence_enum.hpp [2:4]
+ boost/vmd/detail/sequence_size.hpp [2:4]
+ boost/vmd/detail/sequence_to_array.hpp [2:4]
+ boost/vmd/detail/sequence_to_list.hpp [2:4]
+ boost/vmd/detail/sequence_to_seq.hpp [2:4]
+ boost/vmd/detail/sequence_to_tuple.hpp [2:4]
+ boost/vmd/detail/sequence_type.hpp [2:4]
+ boost/vmd/detail/setup.hpp [2:4]
+ boost/vmd/detail/tuple.hpp [2:4]
+ boost/vmd/detail/type_registration.hpp [2:4]
+ boost/vmd/detail/variadic_pop_front.hpp [2:4]
+ boost/vmd/elem.hpp [2:4]
+ boost/vmd/empty.hpp [2:4]
+ boost/vmd/enum.hpp [2:4]
+ boost/vmd/equal.hpp [2:4]
+ boost/vmd/get_type.hpp [2:4]
+ boost/vmd/identity.hpp [2:4]
+ boost/vmd/is_array.hpp [2:4]
+ boost/vmd/is_empty.hpp [2:4]
+ boost/vmd/is_empty_array.hpp [2:4]
+ boost/vmd/is_empty_list.hpp [2:4]
+ boost/vmd/is_identifier.hpp [2:4]
+ boost/vmd/is_list.hpp [2:4]
+ boost/vmd/is_multi.hpp [2:4]
+ boost/vmd/is_number.hpp [2:4]
+ boost/vmd/is_parens_empty.hpp [2:4]
+ boost/vmd/is_seq.hpp [2:4]
+ boost/vmd/is_tuple.hpp [2:4]
+ boost/vmd/is_type.hpp [2:4]
+ boost/vmd/is_unary.hpp [2:4]
+ boost/vmd/not_equal.hpp [2:4]
+ boost/vmd/size.hpp [2:4]
+ boost/vmd/to_array.hpp [2:4]
+ boost/vmd/to_list.hpp [2:4]
+ boost/vmd/to_seq.hpp [2:4]
+ boost/vmd/to_tuple.hpp [2:4]
+ boost/vmd/vmd.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 7fef5129931cbf5ef18b4b28e7fb3a62
+BELONGS ya.make
+ License text:
+ // Copyright Eric Niebler 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/config/gpu.hpp [5:5]
+ boost/range/detail/msvc_has_iterator_workaround.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8012a67c0eb379c33d0eb9550cd0b925
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2012
+ // (C) Copyright Markus Schoepflin 2007
+ // (C) Copyright Bryce Lelbach 2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/detail/atomic.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 807a2c80d0a2cd1e1c7e2077e2918037
+BELONGS ya.make
+ License text:
+ * Copyright 2016 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/access_rights.hpp [2:2]
+ boost/winapi/character_code_conversion.hpp [2:2]
+ boost/winapi/dbghelp.hpp [2:4]
+ boost/winapi/error_codes.hpp [2:2]
+ boost/winapi/limits.hpp [2:2]
+ boost/winapi/page_protection_flags.hpp [2:2]
+ boost/winapi/priority_class.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 807dea3c55c068fbbaf4810187c7c84b
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2007-2009 Andrew Sutton
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/bron_kerbosch_all_cliques.hpp [1:1]
+ boost/graph/closeness_centrality.hpp [1:1]
+ boost/graph/clustering_coefficient.hpp [1:1]
+ boost/graph/degree_centrality.hpp [1:1]
+ boost/graph/detail/index.hpp [1:1]
+ boost/graph/directed_graph.hpp [1:1]
+ boost/graph/eccentricity.hpp [1:1]
+ boost/graph/exterior_property.hpp [1:1]
+ boost/graph/numeric_values.hpp [1:1]
+ boost/graph/property_maps/constant_property_map.hpp [1:1]
+ boost/graph/property_maps/container_property_map.hpp [1:1]
+ boost/graph/property_maps/matrix_property_map.hpp [1:1]
+ boost/graph/tiernan_all_cycles.hpp [1:1]
+ boost/graph/undirected_graph.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 809d6a371d03b197a80cbcad5c8fb483
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014-2015 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/element_index.hpp [6:6]
+ boost/variant/detail/has_result_type.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 80a42b241f946c8a2c62a6f7c0a6158d
+BELONGS ya.make
+ License text:
+ // Copyright 2014,2018 Glen Joseph Fernandes
+ // (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/circular_buffer/base.hpp [7:8]
+ boost/circular_buffer/details.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 80a61ca78f0e3ecbd71447a12ff4074d
+BELONGS ya.make
+ License text:
+ * Copyright 2016 Klemens D. Morgenstern
+ * Copyright 2016, 2017 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/pipes.hpp [2:3]
+ boost/winapi/process.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 80bd2fc6b1258bb791b6477eb3e7d8fa
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/flyweight/intermodule_holder.hpp at line 3
+ License text:
+ /* Copyright 2006-2011 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/flyweight/intermodule_holder.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 80c074eee2f54de78643f0c56ccb3f6b
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/recalculate.hpp [3:6]
+ boost/geometry/policies/robustness/no_rescale_policy.hpp [3:6]
+ boost/geometry/policies/robustness/robust_point_type.hpp [3:6]
+ boost/geometry/policies/robustness/segment_ratio.hpp [3:3]
+ boost/geometry/policies/robustness/segment_ratio_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 80c44e7f6c87f424f98e861b85c5ce2d
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2002.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config.hpp [3:5]
+ boost/config/platform/amigaos.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 80e431bfd997466eba94e588baf14554
+BELONGS ya.make
+ License text:
+ // Copyright 2015 Klemens Morgenstern
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll/detail/demangling/demangle_symbol.hpp [1:1]
+ boost/winapi/dbghelp.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 80e6b625b0b30f8fcea39561d39e6989
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/statechart/event.hpp at line 6
+ License text:
+ // Copyright 2002-2007 Andreas Huber Doenni
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/statechart/event.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8105f2c79ac57a14ec250eba3e02c438
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/gcc.hpp [1:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8125ae3214a419e15087b23ef1f51e4e
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001-2003
+ // William E. Kempf
+ // Copyright (C) 2007-9 Anthony Williams
+ // (C) Copyright 2011-2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/exceptions.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8146a3f9a95a1d54e922f676609d062e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/auto_unit_test.hpp at line 3, boost/test/data/config.hpp at line 3, boost/test/data/dataset.hpp at line 3, boost/test/data/for_each_sample.hpp at line 3, boost/test/data/generators.hpp at line 3, boost/test/data/index_sequence.hpp at line 3, boost/test/data/monomorphic.hpp at line 3, boost/test/data/monomorphic/array.hpp at line 3, boost/test/data/monomorphic/collection.hpp at line 3, boost/test/data/monomorphic/fwd.hpp at line 3, boost/test/data/monomorphic/generate.hpp at line 3, boost/test/data/monomorphic/generators.hpp at line 3, boost/test/data/monomorphic/generators/keywords.hpp at line 3, boost/test/data/monomorphic/generators/random.hpp at line 3, boost/test/data/monomorphic/generators/xrange.hpp at line 3, boost/test/data/monomorphic/grid.hpp at line 3, boost/test/data/monomorphic/initializer_list.hpp at line 3, boost/test/data/monomorphic/join.hpp at line 3, boost/test/data/monomorphic/sample_merge.hpp at line 3, boost/test/data/monomorphic/singleton.hpp at line 3, boost/test/data/monomorphic/zip.hpp at line 3, boost/test/data/size.hpp at line 3, boost/test/data/test_case.hpp at line 3, boost/test/debug.hpp at line 3, boost/test/debug_config.hpp at line 3, boost/test/detail/config.hpp at line 3, boost/test/detail/enable_warnings.hpp at line 3, boost/test/detail/fwd_decl.hpp at line 3, boost/test/detail/global_typedef.hpp at line 3, boost/test/detail/log_level.hpp at line 3, boost/test/detail/pp_variadic.hpp at line 3, boost/test/detail/suppress_warnings.hpp at line 3, boost/test/detail/throw_exception.hpp at line 3, boost/test/detail/workaround.hpp at line 3, boost/test/execution_monitor.hpp at line 3, boost/test/floating_point_comparison.hpp at line 3, boost/test/framework.hpp at line 3, boost/test/impl/compiler_log_formatter.ipp at line 3, boost/test/impl/cpp_main.ipp at line 3, boost/test/impl/debug.ipp at line 3, boost/test/impl/decorator.ipp at line 3, boost/test/impl/execution_monitor.ipp at line 3, boost/test/impl/framework.ipp at line 3, boost/test/impl/plain_report_formatter.ipp at line 3, boost/test/impl/progress_monitor.ipp at line 3, boost/test/impl/results_collector.ipp at line 3, boost/test/impl/results_reporter.ipp at line 3, boost/test/impl/test_main.ipp at line 3, boost/test/impl/test_tools.ipp at line 3, boost/test/impl/test_tree.ipp at line 3, boost/test/impl/unit_test_log.ipp at line 3, boost/test/impl/unit_test_main.ipp at line 3, boost/test/impl/unit_test_monitor.ipp at line 3, boost/test/impl/unit_test_parameters.ipp at line 3, boost/test/impl/xml_log_formatter.ipp at line 3, boost/test/impl/xml_report_formatter.ipp at line 3, boost/test/included/execution_monitor.hpp at line 3, boost/test/included/prg_exec_monitor.hpp at line 3, boost/test/included/test_exec_monitor.hpp at line 3, boost/test/included/unit_test.hpp at line 3, boost/test/included/unit_test_framework.hpp at line 3, boost/test/minimal.hpp at line 3, boost/test/output/compiler_log_formatter.hpp at line 3, boost/test/output/plain_report_formatter.hpp at line 3, boost/test/output/xml_log_formatter.hpp at line 3, boost/test/output/xml_report_formatter.hpp at line 3, boost/test/output_test_stream.hpp at line 3, boost/test/parameterized_test.hpp at line 3, boost/test/predicate_result.hpp at line 3, boost/test/prg_exec_monitor.hpp at line 3, boost/test/progress_monitor.hpp at line 3, boost/test/results_collector.hpp at line 3, boost/test/results_reporter.hpp at line 3, boost/test/test_case_template.hpp at line 3, boost/test/test_exec_monitor.hpp at line 3, boost/test/test_tools.hpp at line 3, boost/test/tools/assertion.hpp at line 3, boost/test/tools/assertion_result.hpp at line 3, boost/test/tools/collection_comparison_op.hpp at line 3, boost/test/tools/context.hpp at line 3, boost/test/tools/cstring_comparison_op.hpp at line 3, boost/test/tools/detail/bitwise_manip.hpp at line 3, boost/test/tools/detail/expression_holder.hpp at line 3, boost/test/tools/detail/fwd.hpp at line 3, boost/test/tools/detail/indirections.hpp at line 3, boost/test/tools/detail/it_pair.hpp at line 3, boost/test/tools/detail/lexicographic_manip.hpp at line 3, boost/test/tools/detail/per_element_manip.hpp at line 3, boost/test/tools/detail/print_helper.hpp at line 3, boost/test/tools/detail/tolerance_manip.hpp at line 3, boost/test/tools/floating_point_comparison.hpp at line 3, boost/test/tools/fpc_op.hpp at line 3, boost/test/tools/fpc_tolerance.hpp at line 3, boost/test/tools/interface.hpp at line 3, boost/test/tools/old/impl.hpp at line 3, boost/test/tools/old/interface.hpp at line 3, boost/test/tools/output_test_stream.hpp at line 3, boost/test/tree/auto_registration.hpp at line 3, boost/test/tree/decorator.hpp at line 3, boost/test/tree/fixture.hpp at line 3, boost/test/tree/global_fixture.hpp at line 3, boost/test/tree/observer.hpp at line 3, boost/test/tree/test_case_counter.hpp at line 3, boost/test/tree/test_case_template.hpp at line 3, boost/test/tree/test_unit.hpp at line 3, boost/test/tree/traverse.hpp at line 3, boost/test/tree/visitor.hpp at line 3, boost/test/unit_test.hpp at line 3, boost/test/unit_test_log.hpp at line 3, boost/test/unit_test_log_formatter.hpp at line 3, boost/test/unit_test_monitor.hpp at line 3, boost/test/unit_test_parameters.hpp at line 3, boost/test/unit_test_suite.hpp at line 3, boost/test/utils/algorithm.hpp at line 3, boost/test/utils/assign_op.hpp at line 3, boost/test/utils/basic_cstring/basic_cstring.hpp at line 3, boost/test/utils/basic_cstring/basic_cstring_fwd.hpp at line 3, boost/test/utils/basic_cstring/bcs_char_traits.hpp at line 3, boost/test/utils/basic_cstring/compare.hpp at line 3, boost/test/utils/basic_cstring/io.hpp at line 3, boost/test/utils/class_properties.hpp at line 3, boost/test/utils/custom_manip.hpp at line 3, boost/test/utils/foreach.hpp at line 3, boost/test/utils/is_cstring.hpp at line 3, boost/test/utils/is_forward_iterable.hpp at line 3, boost/test/utils/iterator/input_iterator_facade.hpp at line 3, boost/test/utils/iterator/token_iterator.hpp at line 3, boost/test/utils/lazy_ostream.hpp at line 3, boost/test/utils/named_params.hpp at line 3, boost/test/utils/nullstream.hpp at line 3, boost/test/utils/rtti.hpp at line 3, boost/test/utils/runtime/argument.hpp at line 3, boost/test/utils/runtime/argument_factory.hpp at line 3, boost/test/utils/runtime/cla/argv_traverser.hpp at line 3, boost/test/utils/runtime/cla/parser.hpp at line 3, boost/test/utils/runtime/env/fetch.hpp at line 3, boost/test/utils/runtime/errors.hpp at line 3, boost/test/utils/runtime/finalize.hpp at line 3, boost/test/utils/runtime/fwd.hpp at line 3, boost/test/utils/runtime/modifier.hpp at line 3, boost/test/utils/runtime/parameter.hpp at line 3, boost/test/utils/setcolor.hpp at line 3, boost/test/utils/string_cast.hpp at line 3, boost/test/utils/trivial_singleton.hpp at line 3, boost/test/utils/wrap_stringstream.hpp at line 3, boost/test/utils/xml_printer.hpp at line 3
+ License text:
+ // (C) Copyright Gennadiy Rozental 2001.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/test/auto_unit_test.hpp [1:3]
+ boost/test/data/config.hpp [1:3]
+ boost/test/data/dataset.hpp [1:3]
+ boost/test/data/for_each_sample.hpp [1:3]
+ boost/test/data/generators.hpp [1:3]
+ boost/test/data/index_sequence.hpp [1:3]
+ boost/test/data/monomorphic.hpp [1:3]
+ boost/test/data/monomorphic/array.hpp [1:3]
+ boost/test/data/monomorphic/collection.hpp [1:3]
+ boost/test/data/monomorphic/fwd.hpp [1:3]
+ boost/test/data/monomorphic/generate.hpp [1:3]
+ boost/test/data/monomorphic/generators.hpp [1:3]
+ boost/test/data/monomorphic/generators/keywords.hpp [1:3]
+ boost/test/data/monomorphic/generators/random.hpp [1:3]
+ boost/test/data/monomorphic/generators/xrange.hpp [1:3]
+ boost/test/data/monomorphic/grid.hpp [1:3]
+ boost/test/data/monomorphic/initializer_list.hpp [1:3]
+ boost/test/data/monomorphic/join.hpp [1:3]
+ boost/test/data/monomorphic/sample_merge.hpp [1:3]
+ boost/test/data/monomorphic/singleton.hpp [1:3]
+ boost/test/data/monomorphic/zip.hpp [1:3]
+ boost/test/data/size.hpp [1:3]
+ boost/test/data/test_case.hpp [1:3]
+ boost/test/debug.hpp [1:3]
+ boost/test/debug_config.hpp [1:3]
+ boost/test/detail/config.hpp [1:3]
+ boost/test/detail/enable_warnings.hpp [1:3]
+ boost/test/detail/fwd_decl.hpp [1:3]
+ boost/test/detail/global_typedef.hpp [1:3]
+ boost/test/detail/log_level.hpp [1:3]
+ boost/test/detail/pp_variadic.hpp [1:3]
+ boost/test/detail/suppress_warnings.hpp [1:3]
+ boost/test/detail/throw_exception.hpp [1:3]
+ boost/test/detail/workaround.hpp [1:3]
+ boost/test/execution_monitor.hpp [1:4]
+ boost/test/floating_point_comparison.hpp [1:3]
+ boost/test/framework.hpp [1:3]
+ boost/test/impl/compiler_log_formatter.ipp [1:3]
+ boost/test/impl/cpp_main.ipp [1:4]
+ boost/test/impl/debug.ipp [1:3]
+ boost/test/impl/decorator.ipp [1:3]
+ boost/test/impl/execution_monitor.ipp [1:4]
+ boost/test/impl/framework.ipp [1:3]
+ boost/test/impl/plain_report_formatter.ipp [1:3]
+ boost/test/impl/progress_monitor.ipp [1:3]
+ boost/test/impl/results_collector.ipp [1:3]
+ boost/test/impl/results_reporter.ipp [1:3]
+ boost/test/impl/test_main.ipp [1:4]
+ boost/test/impl/test_tools.ipp [1:3]
+ boost/test/impl/test_tree.ipp [1:3]
+ boost/test/impl/unit_test_log.ipp [1:3]
+ boost/test/impl/unit_test_main.ipp [1:3]
+ boost/test/impl/unit_test_monitor.ipp [1:3]
+ boost/test/impl/unit_test_parameters.ipp [1:3]
+ boost/test/impl/xml_log_formatter.ipp [1:3]
+ boost/test/impl/xml_report_formatter.ipp [1:3]
+ boost/test/included/execution_monitor.hpp [1:3]
+ boost/test/included/prg_exec_monitor.hpp [1:3]
+ boost/test/included/test_exec_monitor.hpp [1:3]
+ boost/test/included/unit_test.hpp [1:3]
+ boost/test/included/unit_test_framework.hpp [1:3]
+ boost/test/minimal.hpp [1:3]
+ boost/test/output/compiler_log_formatter.hpp [1:3]
+ boost/test/output/plain_report_formatter.hpp [1:3]
+ boost/test/output/xml_log_formatter.hpp [1:3]
+ boost/test/output/xml_report_formatter.hpp [1:3]
+ boost/test/output_test_stream.hpp [1:3]
+ boost/test/parameterized_test.hpp [1:3]
+ boost/test/predicate_result.hpp [1:3]
+ boost/test/prg_exec_monitor.hpp [1:3]
+ boost/test/progress_monitor.hpp [1:3]
+ boost/test/results_collector.hpp [1:3]
+ boost/test/results_reporter.hpp [1:3]
+ boost/test/test_case_template.hpp [1:3]
+ boost/test/test_exec_monitor.hpp [1:3]
+ boost/test/test_tools.hpp [1:3]
+ boost/test/tools/assertion.hpp [1:3]
+ boost/test/tools/assertion_result.hpp [1:3]
+ boost/test/tools/collection_comparison_op.hpp [1:3]
+ boost/test/tools/context.hpp [1:3]
+ boost/test/tools/cstring_comparison_op.hpp [1:3]
+ boost/test/tools/detail/bitwise_manip.hpp [1:3]
+ boost/test/tools/detail/expression_holder.hpp [1:3]
+ boost/test/tools/detail/fwd.hpp [1:3]
+ boost/test/tools/detail/indirections.hpp [1:3]
+ boost/test/tools/detail/it_pair.hpp [1:3]
+ boost/test/tools/detail/lexicographic_manip.hpp [1:3]
+ boost/test/tools/detail/per_element_manip.hpp [1:3]
+ boost/test/tools/detail/print_helper.hpp [1:3]
+ boost/test/tools/detail/tolerance_manip.hpp [1:3]
+ boost/test/tools/floating_point_comparison.hpp [1:3]
+ boost/test/tools/fpc_op.hpp [1:3]
+ boost/test/tools/fpc_tolerance.hpp [1:3]
+ boost/test/tools/interface.hpp [1:3]
+ boost/test/tools/old/impl.hpp [1:3]
+ boost/test/tools/old/interface.hpp [1:3]
+ boost/test/tools/output_test_stream.hpp [1:3]
+ boost/test/tree/auto_registration.hpp [1:3]
+ boost/test/tree/decorator.hpp [1:3]
+ boost/test/tree/fixture.hpp [1:3]
+ boost/test/tree/global_fixture.hpp [1:3]
+ boost/test/tree/observer.hpp [1:3]
+ boost/test/tree/test_case_counter.hpp [1:3]
+ boost/test/tree/test_case_template.hpp [1:3]
+ boost/test/tree/test_unit.hpp [1:3]
+ boost/test/tree/traverse.hpp [1:3]
+ boost/test/tree/visitor.hpp [1:3]
+ boost/test/unit_test.hpp [1:3]
+ boost/test/unit_test_log.hpp [1:3]
+ boost/test/unit_test_log_formatter.hpp [1:3]
+ boost/test/unit_test_monitor.hpp [1:3]
+ boost/test/unit_test_parameters.hpp [1:3]
+ boost/test/unit_test_suite.hpp [1:3]
+ boost/test/utils/algorithm.hpp [1:3]
+ boost/test/utils/assign_op.hpp [1:3]
+ boost/test/utils/basic_cstring/basic_cstring.hpp [1:3]
+ boost/test/utils/basic_cstring/basic_cstring_fwd.hpp [1:3]
+ boost/test/utils/basic_cstring/bcs_char_traits.hpp [1:3]
+ boost/test/utils/basic_cstring/compare.hpp [1:3]
+ boost/test/utils/basic_cstring/io.hpp [1:3]
+ boost/test/utils/class_properties.hpp [1:3]
+ boost/test/utils/custom_manip.hpp [1:3]
+ boost/test/utils/foreach.hpp [1:4]
+ boost/test/utils/is_cstring.hpp [1:3]
+ boost/test/utils/is_forward_iterable.hpp [1:3]
+ boost/test/utils/iterator/input_iterator_facade.hpp [1:3]
+ boost/test/utils/iterator/token_iterator.hpp [1:3]
+ boost/test/utils/lazy_ostream.hpp [1:3]
+ boost/test/utils/named_params.hpp [1:3]
+ boost/test/utils/nullstream.hpp [1:4]
+ boost/test/utils/rtti.hpp [1:3]
+ boost/test/utils/runtime/argument.hpp [1:3]
+ boost/test/utils/runtime/argument_factory.hpp [1:3]
+ boost/test/utils/runtime/cla/argv_traverser.hpp [1:3]
+ boost/test/utils/runtime/cla/parser.hpp [1:3]
+ boost/test/utils/runtime/env/fetch.hpp [1:3]
+ boost/test/utils/runtime/errors.hpp [1:3]
+ boost/test/utils/runtime/finalize.hpp [1:3]
+ boost/test/utils/runtime/fwd.hpp [1:3]
+ boost/test/utils/runtime/modifier.hpp [1:3]
+ boost/test/utils/runtime/parameter.hpp [1:3]
+ boost/test/utils/setcolor.hpp [1:3]
+ boost/test/utils/string_cast.hpp [1:3]
+ boost/test/utils/trivial_singleton.hpp [1:3]
+ boost/test/utils/wrap_stringstream.hpp [1:3]
+ boost/test/utils/xml_printer.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 815d94d66a2546cae56370ff8fcb4b87
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2015 John Fletcher
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/core/is_value.hpp [2:3]
+ boost/phoenix/function/adapt_function.hpp [2:4]
+ boost/phoenix/function/function.hpp [2:4]
+ boost/phoenix/function/lazy_list.hpp [33:35]
+ boost/phoenix/function/lazy_operator.hpp [27:29]
+ boost/phoenix/function/lazy_prelude.hpp [115:117]
+ boost/phoenix/function/lazy_reuse.hpp [24:26]
+ boost/phoenix/function/lazy_signature.hpp [34:36]
+ boost/phoenix/function/lazy_smart.hpp [11:13]
+ boost/phoenix/scope/let.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 819f37d0e4cef828a597dfe80506c110
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2011-2012 Thomas Bernard
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/repository/home/qi/operator/detail/keywords.hpp [2:2]
+ boost/spirit/repository/home/qi/operator/keywords.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 81a6875950b829b3077c273b6534daf8
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2013
+ // Joerg Walter, Mathias Koch. David Bellot
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/expression_types.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 81afc10bc24c6ad633280dae0d84d3e7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/stable_vector.hpp at line 14
+ License text:
+ // Copyright 2008 Joaquin M Lopez Munoz.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/stable_vector.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 81e40597ae94e7857c389eb7ca2d8bc5
+BELONGS ya.make
+ License text:
+ Copyright (c) 2014 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/directive/raw.hpp [2:2]
+ boost/spirit/home/x3/directive/with.hpp [2:2]
+ boost/spirit/home/x3/numeric/bool.hpp [2:3]
+ boost/spirit/home/x3/numeric/bool_policies.hpp [2:3]
+ boost/spirit/home/x3/support/ast/position_tagged.hpp [2:2]
+ boost/spirit/home/x3/support/utility/error_reporting.hpp [2:2]
+ boost/spirit/home/x3/support/utility/lambda_visitor.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 81eb46b520090303ae6a7327a48d976a
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/composite/directives.hpp [2:4]
+ boost/spirit/home/classic/core/non_terminal/parser_id.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 81fe68c1eb5b189c68e4dea969fce3be
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2002
+ * John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex/v4/char_regex_traits.hpp [3:4]
+ boost/regex/v4/iterator_category.hpp [3:4]
+ boost/regex/v4/mem_block_cache.hpp [2:3]
+ boost/regex/v4/perl_matcher.hpp [3:4]
+ boost/regex/v4/perl_matcher_common.hpp [3:4]
+ boost/regex/v4/perl_matcher_non_recursive.hpp [3:4]
+ boost/regex/v4/perl_matcher_recursive.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 821d5dbb10517b78a129c5a569511c66
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/bernoulli.hpp [3:8]
+ boost/math/special_functions/detail/polygamma.hpp [3:8]
+ boost/math/special_functions/detail/unchecked_bernoulli.hpp [3:8]
+ boost/math/special_functions/polygamma.hpp [3:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8247b8e57241653b1a6c9310db268720
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/suffix.hpp at line 14, boost/python/ptr.hpp at line 21
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/suffix.hpp [4:14]
+ boost/python/ptr.hpp [11:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 827562f5ed05600883ea03e3e0a2c31c
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010 Thomas Heller
+ Copyright (c) 2018 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval_result_of.hpp [15:17]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_10.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_20.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_30.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_40.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_50.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 828392eb47631cd343f70a8a21ef9867
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/static_warning.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/static_warning.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 828b79ff16e0bf70fedcf473356bf326
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/apply.hpp [7:7]
+ boost/detail/lightweight_mutex.hpp [13:13]
+ boost/signals2/mutex.hpp [4:5]
+ boost/smart_ptr/detail/lightweight_mutex.hpp [13:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL 82a5c9cddab57527910d79d3fe2ae9db
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/detail/pointer_element.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2014-2017. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/detail/pointer_element.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 82b5e5f7da5de75b8236435ea1ff6d07
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/intel.hpp [1:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8353a5f664019fadfadf20a94a4bcf06
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/iterator_range_core.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/iterator_range_core.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 836034d8c34d94c8f9a9362d0cdaa003
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007, 2013, 2015 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_clang.hpp [12:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL 83a2273fe7be7104b274c814ca135140
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2008 Jan Gaspar
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/circular_buffer.hpp [3:3]
+ boost/circular_buffer/base.hpp [3:5]
+ boost/circular_buffer/debug.hpp [3:3]
+ boost/circular_buffer/details.hpp [3:3]
+ boost/circular_buffer/space_optimized.hpp [3:5]
+ boost/circular_buffer_fwd.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 83ac86d574485a1a19802156b8aaf3de
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/rolling_mean.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/rolling_mean.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 83ed55632ceb50ed673f455f92688d6f
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2001 Bruce Florman
+ Copyright (c) 2002 Raghavendra Satish
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/composite/impl/directives.ipp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8401d15b86c3161a24915207008a129a
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2010
+ // Copyright David Abrahams 2000-2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/zip_view.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 843b75a62260b0f0a240e99d06ed4f7c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/functional/overloaded_function.hpp at line 4, boost/functional/overloaded_function/config.hpp at line 4, boost/functional/overloaded_function/detail/base.hpp at line 4, boost/functional/overloaded_function/detail/function_type.hpp at line 4, boost/local_function.hpp at line 4, boost/local_function/aux_/add_pointed_const.hpp at line 4, boost/local_function/aux_/function.hpp at line 4, boost/local_function/aux_/macro/code_/bind.hpp at line 4, boost/local_function/aux_/macro/code_/functor.hpp at line 4, boost/local_function/aux_/macro/code_/result.hpp at line 4, boost/local_function/aux_/macro/decl.hpp at line 4, boost/local_function/aux_/macro/name.hpp at line 4, boost/local_function/aux_/macro/typeof.hpp at line 4, boost/local_function/aux_/member.hpp at line 4, boost/local_function/aux_/nobind.hpp at line 4, boost/local_function/aux_/preprocessor/traits/bind.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/append.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/index.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/nil.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/set_error.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/validate.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/validate_/return_count.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/validate_/this_count.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_binds.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_const_binds.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_error.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_params.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_returns.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/any_bind_type.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/sign.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/validate.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/defaults.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/this.hpp at line 4, boost/local_function/aux_/preprocessor/traits/param.hpp at line 4, boost/local_function/aux_/symbol.hpp at line 4, boost/local_function/config.hpp at line 4, boost/local_function/detail/preprocessor/keyword/auto.hpp at line 4, boost/local_function/detail/preprocessor/keyword/bind.hpp at line 4, boost/local_function/detail/preprocessor/keyword/const.hpp at line 4, boost/local_function/detail/preprocessor/keyword/const_bind.hpp at line 4, boost/local_function/detail/preprocessor/keyword/default.hpp at line 4, boost/local_function/detail/preprocessor/keyword/facility/add.hpp at line 4, boost/local_function/detail/preprocessor/keyword/facility/is.hpp at line 4, boost/local_function/detail/preprocessor/keyword/facility/remove.hpp at line 4, boost/local_function/detail/preprocessor/keyword/inline.hpp at line 4, boost/local_function/detail/preprocessor/keyword/recursive.hpp at line 4, boost/local_function/detail/preprocessor/keyword/register.hpp at line 4, boost/local_function/detail/preprocessor/keyword/return.hpp at line 4, boost/local_function/detail/preprocessor/keyword/this.hpp at line 4, boost/local_function/detail/preprocessor/keyword/thisunderscore.hpp at line 4, boost/local_function/detail/preprocessor/keyword/void.hpp at line 4, boost/local_function/detail/preprocessor/line_counter.hpp at line 4, boost/local_function/detail/preprocessor/void_list.hpp at line 4, boost/utility/identity_type.hpp at line 4
+ License text:
+ // Copyright (C) 2009-2012 Lorenzo Caminiti
+ // Distributed under the Boost Software License, Version 1.0
+ // (see accompanying file LICENSE_1_0.txt or a copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/functional/overloaded_function.hpp [2:4]
+ boost/functional/overloaded_function/config.hpp [2:4]
+ boost/functional/overloaded_function/detail/base.hpp [2:4]
+ boost/functional/overloaded_function/detail/function_type.hpp [2:4]
+ boost/local_function.hpp [2:4]
+ boost/local_function/aux_/add_pointed_const.hpp [2:4]
+ boost/local_function/aux_/function.hpp [2:4]
+ boost/local_function/aux_/macro/code_/bind.hpp [2:4]
+ boost/local_function/aux_/macro/code_/functor.hpp [2:4]
+ boost/local_function/aux_/macro/code_/result.hpp [2:4]
+ boost/local_function/aux_/macro/decl.hpp [2:4]
+ boost/local_function/aux_/macro/name.hpp [2:4]
+ boost/local_function/aux_/macro/typeof.hpp [2:4]
+ boost/local_function/aux_/member.hpp [2:4]
+ boost/local_function/aux_/nobind.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/bind.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_/append.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_/index.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_/nil.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_/set_error.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_/validate.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_/validate_/return_count.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_/validate_/this_count.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_binds.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_const_binds.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_error.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_params.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_returns.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/any_bind_type.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/sign.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/validate.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/defaults.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/this.hpp [2:4]
+ boost/local_function/aux_/preprocessor/traits/param.hpp [2:4]
+ boost/local_function/aux_/symbol.hpp [2:4]
+ boost/local_function/config.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/auto.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/bind.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/const.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/const_bind.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/default.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/facility/add.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/facility/is.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/facility/remove.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/inline.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/recursive.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/register.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/return.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/this.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/thisunderscore.hpp [2:4]
+ boost/local_function/detail/preprocessor/keyword/void.hpp [2:4]
+ boost/local_function/detail/preprocessor/line_counter.hpp [2:4]
+ boost/local_function/detail/preprocessor/void_list.hpp [2:4]
+ boost/utility/identity_type.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8464df292fc04767d911d71f2cb5e8c7
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/deque/back_extended_deque.hpp [2:3]
+ boost/fusion/container/deque/deque.hpp [2:3]
+ boost/fusion/container/deque/deque_fwd.hpp [2:3]
+ boost/fusion/container/deque/deque_iterator.hpp [2:3]
+ boost/fusion/container/deque/detail/at_impl.hpp [2:3]
+ boost/fusion/container/deque/detail/begin_impl.hpp [2:3]
+ boost/fusion/container/deque/detail/convert_impl.hpp [2:4]
+ boost/fusion/container/deque/detail/cpp03/as_deque.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/limits.hpp [2:3]
+ boost/fusion/container/deque/detail/deque_keyed_values.hpp [2:3]
+ boost/fusion/container/deque/detail/end_impl.hpp [2:3]
+ boost/fusion/container/deque/detail/keyed_element.hpp [2:3]
+ boost/fusion/container/deque/detail/value_at_impl.hpp [2:3]
+ boost/fusion/container/deque/front_extended_deque.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 84883abd8b74ae75cd80081a7a4afda9
+BELONGS ya.make
+ License text:
+ // Copyright 2018 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_erasure/detail/member11.hpp [3:3]
+ boost/type_erasure/detail/meta.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 849856933c18e49ccb9a21ab0a3b2262
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2010 Alfredo Correa
+ // Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/geometries/adapted/boost_array.hpp [3:4]
+ boost/geometry/geometries/adapted/boost_polygon.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_polygon/box.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_polygon/point.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_polygon/polygon.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_polygon/ring.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_range/filtered.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_range/reversed.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_range/sliced.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_range/strided.hpp [3:3]
+ boost/geometry/geometries/adapted/boost_range/uniqued.hpp [3:3]
+ boost/geometry/geometries/adapted/std_array.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 84aa8f0944ff081c273a32083375f310
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/cos_pi.hpp [1:3]
+ boost/math/special_functions/detail/bessel_jy_asym.hpp [1:3]
+ boost/math/special_functions/sin_pi.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 84c2f237d9b27185e5ee0a17bf920901
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003
+ // Eric Friedman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/blank.hpp [6:7]
+ boost/blank_fwd.hpp [6:7]
+ boost/config/detail/suffix.hpp [4:14]
+ boost/detail/reference_content.hpp [6:7]
+ boost/detail/templated_streams.hpp [6:7]
+ boost/variant/apply_visitor.hpp [6:7]
+ boost/variant/detail/backup_holder.hpp [6:7]
+ boost/variant/detail/cast_storage.hpp [6:7]
+ boost/variant/detail/config.hpp [6:7]
+ boost/variant/detail/enable_recursive.hpp [6:7]
+ boost/variant/detail/enable_recursive_fwd.hpp [6:7]
+ boost/variant/detail/forced_return.hpp [6:7]
+ boost/variant/detail/generic_result_type.hpp [6:7]
+ boost/variant/detail/over_sequence.hpp [6:7]
+ boost/variant/detail/substitute.hpp [11:12]
+ boost/variant/detail/substitute_fwd.hpp [6:7]
+ boost/variant/detail/visitation_impl.hpp [6:7]
+ boost/variant/recursive_variant.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 84d21d33ceccd2d9309a88e9bd5c3138
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2015
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/endian/endian.hpp [3:3]
+ boost/filesystem/string_file.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8501cc13330743bddd0f34154c70c7ac
+BELONGS ya.make
+ License text:
+ * Copyright 2017 Vinnie Falco
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/debugapi.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 852c378c4fd6ef337fd9e49f5c3962b1
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/overlay/do_reverse.hpp [3:4]
+ boost/geometry/algorithms/detail/recalculate.hpp [3:6]
+ boost/geometry/multi/algorithms/covered_by.hpp [3:6]
+ boost/geometry/multi/algorithms/detail/extreme_points.hpp [3:6]
+ boost/geometry/multi/algorithms/remove_spikes.hpp [3:6]
+ boost/geometry/multi/algorithms/within.hpp [3:6]
+ boost/geometry/policies/robustness/no_rescale_policy.hpp [3:6]
+ boost/geometry/policies/robustness/robust_point_type.hpp [3:6]
+ boost/geometry/policies/robustness/segment_ratio_type.hpp [3:6]
+ boost/geometry/strategies/agnostic/point_in_poly_winding.hpp [3:4]
+ boost/geometry/strategies/cartesian/point_in_poly_winding.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8557b07967860b86b0d16d725b465dad
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007 Peder Holt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/dmc/typeof_impl.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 857ffcad3efa00650a38f17b49cfd2ab
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/is_base_and_derived.hpp at line 4
+ License text:
+ // (C) Copyright Rani Sharoni 2003.
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_base_and_derived.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 85b21f7669ee2771cecab63ce53d186a
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2014 Ian Forbed
+ // Copyright (C) 2014-2017 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/concurrent_queues/sync_priority_queue.hpp [1:2]
+ boost/thread/concurrent_queues/sync_timed_queue.hpp [1:2]
+ boost/thread/executors/detail/priority_executor_base.hpp [1:2]
+ boost/thread/executors/detail/scheduled_executor_base.hpp [1:2]
+ boost/thread/executors/scheduled_thread_pool.hpp [1:2]
+ boost/thread/executors/scheduling_adaptor.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 85dbed9eb111a8ba961b4871d50c00f6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/allocators/detail/node_tools.hpp at line 5, boost/interprocess/detail/interprocess_tester.hpp at line 5, boost/interprocess/detail/math_functions.hpp at line 5, boost/interprocess/smart_ptr/deleter.hpp at line 5, boost/interprocess/smart_ptr/detail/sp_counted_base.hpp at line 5, boost/interprocess/sync/shm/named_creation_functor.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2007-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/allocators/detail/node_tools.hpp [3:5]
+ boost/interprocess/detail/interprocess_tester.hpp [3:5]
+ boost/interprocess/detail/math_functions.hpp [3:4]
+ boost/interprocess/smart_ptr/deleter.hpp [3:3]
+ boost/interprocess/smart_ptr/detail/sp_counted_base.hpp [3:3]
+ boost/interprocess/sync/shm/named_creation_functor.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 86017817a4fe866e57af4c5d63b46eee
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/centroid.hpp [3:6]
+ boost/geometry/algorithms/convex_hull.hpp [3:5]
+ boost/geometry/algorithms/detail/disjoint/box_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_point.hpp [3:6]
+ boost/geometry/algorithms/detail/envelope/box.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/linear.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/point.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/range.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/segment.hpp [3:5]
+ boost/geometry/algorithms/detail/equals/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/box.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/indexed.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/point.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/segment.hpp [3:6]
+ boost/geometry/algorithms/detail/not.hpp [3:5]
+ boost/geometry/algorithms/detail/overlaps/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/overlaps/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp [3:6]
+ boost/geometry/algorithms/detail/sections/sectionalize.hpp [3:6]
+ boost/geometry/algorithms/detail/throw_on_empty_input.hpp [3:6]
+ boost/geometry/algorithms/detail/touches/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/touches/interface.hpp [3:6]
+ boost/geometry/algorithms/dispatch/envelope.hpp [3:5]
+ boost/geometry/algorithms/dispatch/expand.hpp [3:6]
+ boost/geometry/algorithms/envelope.hpp [3:5]
+ boost/geometry/algorithms/equals.hpp [3:6]
+ boost/geometry/algorithms/expand.hpp [3:6]
+ boost/geometry/algorithms/not_implemented.hpp [3:5]
+ boost/geometry/algorithms/overlaps.hpp [3:5]
+ boost/geometry/algorithms/simplify.hpp [3:5]
+ boost/geometry/algorithms/touches.hpp [3:6]
+ boost/geometry/core/exception.hpp [3:5]
+ boost/geometry/core/radian_access.hpp [3:5]
+ boost/geometry/core/ring_type.hpp [3:5]
+ boost/geometry/geometry.hpp [3:5]
+ boost/geometry/multi/multi.hpp [3:5]
+ boost/geometry/strategies/cartesian/box_in_box.hpp [3:6]
+ boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp [3:5]
+ boost/geometry/strategies/cartesian/centroid_weighted_length.hpp [3:4]
+ boost/geometry/strategies/cartesian/point_in_box.hpp [3:5]
+ boost/geometry/strategies/cartesian/side_by_triangle.hpp [3:5]
+ boost/geometry/strategies/distance_result.hpp [3:7]
+ boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp [3:5]
+ boost/geometry/strategies/strategy_transform.hpp [3:5]
+ boost/geometry/strategies/transform/matrix_transformers.hpp [3:5]
+ boost/geometry/util/compress_variant.hpp [3:5]
+ boost/geometry/util/math.hpp [3:5]
+ boost/geometry/util/transform_variant.hpp [3:5]
+ boost/geometry/views/detail/indexed_point_view.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 861057944f34a04f706e0f6a42df266a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/detail/endian_compat.h at line 4, boost/predef/detail/os_detected.h at line 4
+ License text:
+ Copyright Rene Rivera 2013
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/detail/endian_compat.h [2:4]
+ boost/predef/detail/os_detected.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 867a1c22c4ac2ccaab801cc1559066f4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/xsi_key.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2009. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/xsi_key.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 867d62a424b643add54daea6312693a3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/detail/auto_buffer.hpp at line 3
+ License text:
+ // Copyright Thorsten Ottosen, 2009.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/detail/auto_buffer.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 86caacaeb0b6e2c6b4a0d2a6296d5718
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017-2017 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/overlay/is_self_turn.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8732aa250cc4eb30f9cc35dfea00a8c2
+BELONGS ya.make
+ License text:
+ // Copyright 2005 Daniel Wallin.
+ // Copyright 2005 Joel de Guzman.
+ // Copyright 2005 Dan Marsden.
+ // Copyright 2008 Hartmut Kaiser.
+ // Copyright 2015 John Fletcher.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl/algorithm/detail/begin.hpp [1:3]
+ boost/phoenix/stl/algorithm/detail/end.hpp [1:3]
+ boost/phoenix/stl/algorithm/detail/has_find.hpp [2:4]
+ boost/phoenix/stl/algorithm/detail/is_unordered_set_or_map.hpp [2:4]
+ boost/phoenix/stl/algorithm/querying.hpp [1:5]
+ boost/phoenix/stl/algorithm/transformation.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8737eef04eec9e4347f18af4da0267a9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003
+ // Gunter Winkler, Joerg Walter
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/vector_of_vector.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8759e7280d5ee3ff277e1c164e77f5e2
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2005-2007 Matthias Troyer
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/detail/binary_buffer_iprimitive.hpp [1:1]
+ boost/mpi/detail/binary_buffer_oprimitive.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 878b856a9219137abfd6354d476eccdf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/scope_exit.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/scope_exit.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 878bdc8a748b4f845c717d1e57e8953d
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/sunpro_cc.hpp [1:7]
+ boost/interprocess/smart_ptr/enable_shared_from_this.hpp [5:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 87984591a203f84e6f000f2a12696b5d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/numeric/conversion/bounds.hpp at line 3, boost/numeric/conversion/cast.hpp at line 3, boost/numeric/conversion/conversion_traits.hpp at line 3, boost/numeric/conversion/converter.hpp at line 3, boost/numeric/conversion/converter_policies.hpp at line 3, boost/numeric/conversion/detail/bounds.hpp at line 3, boost/numeric/conversion/detail/conversion_traits.hpp at line 3, boost/numeric/conversion/detail/converter.hpp at line 3, boost/numeric/conversion/detail/int_float_mixture.hpp at line 3, boost/numeric/conversion/detail/is_subranged.hpp at line 3, boost/numeric/conversion/detail/meta.hpp at line 3, boost/numeric/conversion/detail/sign_mixture.hpp at line 3, boost/numeric/conversion/detail/udt_builtin_mixture.hpp at line 3, boost/numeric/conversion/int_float_mixture.hpp at line 3, boost/numeric/conversion/int_float_mixture_enum.hpp at line 3, boost/numeric/conversion/is_subranged.hpp at line 3, boost/numeric/conversion/sign_mixture.hpp at line 3, boost/numeric/conversion/sign_mixture_enum.hpp at line 3, boost/numeric/conversion/udt_builtin_mixture.hpp at line 3, boost/numeric/conversion/udt_builtin_mixture_enum.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/conversion/bounds.hpp [1:3]
+ boost/numeric/conversion/cast.hpp [1:3]
+ boost/numeric/conversion/conversion_traits.hpp [1:3]
+ boost/numeric/conversion/converter.hpp [1:3]
+ boost/numeric/conversion/converter_policies.hpp [1:3]
+ boost/numeric/conversion/detail/bounds.hpp [1:3]
+ boost/numeric/conversion/detail/conversion_traits.hpp [1:3]
+ boost/numeric/conversion/detail/converter.hpp [1:3]
+ boost/numeric/conversion/detail/int_float_mixture.hpp [1:3]
+ boost/numeric/conversion/detail/is_subranged.hpp [1:3]
+ boost/numeric/conversion/detail/meta.hpp [1:3]
+ boost/numeric/conversion/detail/sign_mixture.hpp [1:3]
+ boost/numeric/conversion/detail/udt_builtin_mixture.hpp [1:3]
+ boost/numeric/conversion/int_float_mixture.hpp [1:3]
+ boost/numeric/conversion/int_float_mixture_enum.hpp [1:3]
+ boost/numeric/conversion/is_subranged.hpp [1:3]
+ boost/numeric/conversion/sign_mixture.hpp [1:3]
+ boost/numeric/conversion/sign_mixture_enum.hpp [1:3]
+ boost/numeric/conversion/udt_builtin_mixture.hpp [1:3]
+ boost/numeric/conversion/udt_builtin_mixture_enum.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 87bcff5d2ad0f8f350f255654e0f44c4
+BELONGS ya.make
+ License text:
+ // Copyright Darin Adler 2000
+ // Copyright Beman Dawes 2008
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/endian/detail/cover_operators.hpp [3:4]
+ boost/spirit/home/support/detail/endian/cover_operators.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 88463dc7415dc40f9f0dab153d600cd9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002-2003 Eric Friedman
+ // Copyright (c) 2002 by Andrei Alexandrescu
+ // Copyright (c) 2013-2014 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/move.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 885de77fcf55e39ce3c87951447045d2
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003
+ // Eric Friedman, Itay Maman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant.hpp [6:7]
+ boost/variant/get.hpp [6:7]
+ boost/variant/variant_fwd.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 886ccc018a03d6afb9c858314c9c5e72
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp [5:5]
+ boost/mpl/aux_/config/forwarding.hpp [5:5]
+ boost/mpl/aux_/config/gcc.hpp [5:5]
+ boost/mpl/aux_/config/has_apply.hpp [5:5]
+ boost/mpl/aux_/config/integral.hpp [5:5]
+ boost/mpl/aux_/config/intel.hpp [5:5]
+ boost/mpl/aux_/contains_impl.hpp [5:6]
+ boost/mpl/aux_/has_apply.hpp [5:5]
+ boost/mpl/aux_/overload_names.hpp [5:5]
+ boost/mpl/aux_/partition_op.hpp [5:6]
+ boost/mpl/begin.hpp [5:5]
+ boost/mpl/contains.hpp [5:6]
+ boost/mpl/contains_fwd.hpp [5:6]
+ boost/mpl/empty_sequence.hpp [5:6]
+ boost/mpl/end.hpp [5:5]
+ boost/mpl/integral_c_tag.hpp [5:5]
+ boost/mpl/max.hpp [5:5]
+ boost/mpl/min.hpp [5:5]
+ boost/mpl/next.hpp [5:5]
+ boost/mpl/pair_view.hpp [5:6]
+ boost/mpl/partition.hpp [5:6]
+ boost/mpl/print.hpp [5:6]
+ boost/mpl/prior.hpp [5:5]
+ boost/mpl/sort.hpp [5:6]
+ boost/mpl/stable_partition.hpp [5:6]
+ boost/mpl/tag.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 887a085429223bebadadf93e46359904
+BELONGS ya.make
+ License text:
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/fusion_algebra.hpp [9:10]
+ boost/numeric/odeint/external/mkl/mkl_operations.hpp [11:12]
+ boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp [9:11]
+ boost/numeric/odeint/integrate/integrate.hpp [9:10]
+ boost/numeric/odeint/integrate/integrate_adaptive.hpp [9:10]
+ boost/numeric/odeint/integrate/integrate_const.hpp [10:11]
+ boost/numeric/odeint/integrate/integrate_n_steps.hpp [9:10]
+ boost/numeric/odeint/integrate/integrate_times.hpp [9:10]
+ boost/numeric/odeint/stepper/adams_bashforth.hpp [10:13]
+ boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp [9:11]
+ boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/bulirsch_stoer.hpp [12:14]
+ boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp [9:11]
+ boost/numeric/odeint/stepper/controlled_step_result.hpp [9:10]
+ boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp [10:12]
+ boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp [9:11]
+ boost/numeric/odeint/stepper/explicit_generic_rk.hpp [9:11]
+ boost/numeric/odeint/stepper/modified_midpoint.hpp [9:11]
+ boost/numeric/odeint/stepper/rosenbrock4.hpp [10:12]
+ boost/numeric/odeint/stepper/runge_kutta4.hpp [9:10]
+ boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp [9:10]
+ boost/numeric/odeint/stepper/symplectic_euler.hpp [9:10]
+ boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp [9:10]
+ boost/numeric/odeint/util/detail/is_range.hpp [9:10]
+ boost/numeric/odeint/util/resize.hpp [10:11]
+ boost/numeric/odeint/util/same_size.hpp [10:11]
+ boost/numeric/odeint/util/state_wrapper.hpp [10:11]
+ boost/numeric/odeint/util/ublas_wrapper.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 88806da7c6e4f1c8e4c27e4efe582cf6
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ // Copyright (c) 2010 Beman Dawes
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/detail/local_free_on_destruction.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8884bef124f1e985ab9ffb09bd143d9e
+BELONGS libs/container/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/container/src/dlmalloc_ext_2_8_6.c at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2007-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/container/src/dlmalloc_ext_2_8_6.c [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 888e14cf95e262f8777266527680cdb7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/collection_traits.hpp at line 10
+ License text:
+ // (C) Copyright Thorsten Ottosen 2002-2003. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/detail/collection_traits.hpp [8:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8894fc789975c842d2c95727c8460378
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/detail/ptr_helper.hpp at line 6, boost/random/discard_block.hpp at line 6, boost/random/gamma_distribution.hpp at line 6, boost/random/linear_feedback_shift.hpp at line 6, boost/random/poisson_distribution.hpp at line 6, boost/random/ranlux.hpp at line 6, boost/random/subtract_with_carry.hpp at line 6, boost/random/variate_generator.hpp at line 6, boost/random/xor_combine.hpp at line 6
+ License text:
+ * Copyright Jens Maurer 2002
+ * Copyright Steven Watanabe 2010
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/detail/ptr_helper.hpp [3:5]
+ boost/random/discard_block.hpp [3:6]
+ boost/random/gamma_distribution.hpp [3:6]
+ boost/random/linear_feedback_shift.hpp [3:6]
+ boost/random/poisson_distribution.hpp [3:6]
+ boost/random/ranlux.hpp [3:5]
+ boost/random/subtract_with_carry.hpp [3:5]
+ boost/random/variate_generator.hpp [3:6]
+ boost/random/xor_combine.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 88be5191db5401445f916141ffb2f71f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2004-2008 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/depth_first_search.hpp [1:1]
+ boost/graph/distributed/detail/mpi_process_group.ipp [3:5]
+ boost/graph/distributed/filtered_graph.hpp [1:1]
+ boost/graph/distributed/mpi_process_group.hpp [1:3]
+ boost/graph/distributed/strong_components.hpp [1:1]
+ boost/property_map/parallel/distributed_property_map.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 88edbb48555da51e4d9a816563e2e64b
+BELONGS ya.make
+ License text:
+ // Copyright 2016 Klemens Morgenstern
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll/detail/demangling/itanium.hpp [1:1]
+ boost/dll/detail/demangling/mangled_storage_base.hpp [1:1]
+ boost/dll/detail/demangling/msvc.hpp [1:1]
+ boost/dll/detail/get_mem_fn_type.hpp [1:1]
+ boost/dll/smart_library.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 890cdbbeb01b608880e13a28e9d21fad
+BELONGS libs/chrono/ya.make ya.make
+ License text:
+ // Copyright 2009-2010 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/detail/inlined/mac/chrono.hpp [3:4]
+ boost/chrono/detail/inlined/process_cpu_clocks.hpp [3:3]
+ boost/chrono/detail/inlined/win/chrono.hpp [3:4]
+ boost/chrono/detail/inlined/win/process_cpu_clocks.hpp [3:5]
+ boost/chrono/detail/is_evenly_divisible_by.hpp [3:3]
+ boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp [3:3]
+ boost/chrono/detail/static_assert.hpp [3:3]
+ boost/chrono/detail/system.hpp [1:1]
+ libs/chrono/src/process_cpu_clocks.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 893c463df78fa1dc3d2a5088d1cb696c
+BELONGS ya.make
+ License text:
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/mpi/mpi.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_state.hpp [9:11]
+ boost/numeric/odeint/external/mpi/mpi_vector_state.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp [9:11]
+ boost/numeric/odeint/external/openmp/openmp_state.hpp [9:11]
+ boost/numeric/odeint/stepper/adams_bashforth.hpp [10:13]
+ boost/numeric/odeint/util/n_ary_helper.hpp [7:9]
+ boost/numeric/odeint/util/split.hpp [9:11]
+ boost/numeric/odeint/util/split_adaptor.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 894d6bd4806969d55cdad5d7f1ac76c6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/intrusive/pointer_traits.hpp at line 11
+ License text:
+ // (C) Copyright Ion Gaztanaga 2011-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/pointer_traits.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8974b0c1dff112772f6f0fcdf1ac331a
+BELONGS ya.make
+ License text:
+ // Copyright Kevlin Henney, 2000-2005.
+ // Copyright Alexander Nasonov, 2006-2010.
+ // Copyright Antony Polukhin, 2011-2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lexical_cast.hpp [1:3]
+ boost/lexical_cast/bad_lexical_cast.hpp [1:3]
+ boost/lexical_cast/detail/converter_lexical.hpp [1:3]
+ boost/lexical_cast/detail/converter_lexical_streams.hpp [1:3]
+ boost/lexical_cast/detail/converter_numeric.hpp [1:3]
+ boost/lexical_cast/detail/inf_nan.hpp [1:3]
+ boost/lexical_cast/detail/is_character.hpp [1:3]
+ boost/lexical_cast/detail/lcast_char_constants.hpp [1:3]
+ boost/lexical_cast/detail/lcast_unsigned_converters.hpp [1:3]
+ boost/lexical_cast/detail/widest_char.hpp [1:3]
+ boost/lexical_cast/lexical_cast_old.hpp [1:3]
+ boost/lexical_cast/try_lexical_convert.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 897c9e939f14dd9c42b2594da26b4078
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/quick_allocator.hpp at line 15, boost/smart_ptr.hpp at line 12, boost/smart_ptr/detail/quick_allocator.hpp at line 15
+ License text:
+ // Copyright (c) 2003 Peter Dimov Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/quick_allocator.hpp [13:14]
+ boost/smart_ptr.hpp [10:12]
+ boost/smart_ptr/detail/quick_allocator.hpp [13:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 89b41c99892d77117372460a7f90d72f
+BELONGS ya.make
+ License text:
+ // Copyright 2004-5 The Trustees of Indiana University.
+ // Copyright 2002 Brad King and Douglas Gregor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/page_rank.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8a16b9d3a535dffcaa90392860dab7cf
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2016 Jakub Szuppe <j.szuppe@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/algorithm/detail/find_extrema_on_cpu.hpp [2:2]
+ boost/compute/algorithm/detail/merge_sort_on_gpu.hpp [2:2]
+ boost/compute/algorithm/detail/reduce_on_cpu.hpp [2:2]
+ boost/compute/algorithm/detail/scan_on_cpu.hpp [2:2]
+ boost/compute/algorithm/stable_sort_by_key.hpp [2:2]
+ boost/compute/detail/diagnostic.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8a1ed8f0251f7577b8544e60acf77847
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/detail/preprocessed_arg_type.hpp at line 7, boost/signals2/detail/replace_slot_function.hpp at line 5, boost/signals2/preprocessed_slot.hpp at line 7, boost/signals2/signal.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/detail/preprocessed_arg_type.hpp [3:7]
+ boost/signals2/detail/replace_slot_function.hpp [1:1]
+ boost/signals2/preprocessed_slot.hpp [3:7]
+ boost/signals2/signal.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8aa205df11e7313c7f73c113a9ad1407
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_copy_assignable.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8aaadc898368c37b5d90c024f9104351
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/two_graphs_common_spanning_trees.hpp at line 3
+ License text:
+ // Copyright (C) 2012, Michele Caini.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/two_graphs_common_spanning_trees.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8ab893c2af2e95dd142106552216a78b
+BELONGS ya.make
+ License text:
+ // (c) Copyright Jeremy Siek and John R. Bandela 2001.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/tokenizer.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8ac5e87521312cdb64a9912532c93964
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2010, 2011, 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/endian/conversion.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8af78196c8203a9cd903193485babd4d
+BELONGS ya.make
+ License text:
+ // Copyright (c) Chris Glover, 2016.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_index/runtime_cast.hpp [2:2]
+ boost/type_index/runtime_cast/boost_shared_ptr_cast.hpp [2:2]
+ boost/type_index/runtime_cast/detail/runtime_cast_impl.hpp [2:2]
+ boost/type_index/runtime_cast/pointer_cast.hpp [2:2]
+ boost/type_index/runtime_cast/reference_cast.hpp [2:2]
+ boost/type_index/runtime_cast/register_runtime_class.hpp [2:2]
+ boost/type_index/runtime_cast/std_shared_ptr_cast.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8b05c90361e2a6041cc75977d659ee19
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2005-7 Anthony Williams
+ // (C) Copyright 2005 John Maddock
+ // (C) Copyright 2011-2013 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/win32/once.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8b34f61b331f3abb5afdfaf9ebabd31b
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/bernoulli.hpp [3:8]
+ boost/math/special_functions/detail/bernoulli_details.hpp [2:4]
+ boost/math/special_functions/detail/unchecked_bernoulli.hpp [3:8]
+ boost/multiprecision/cpp_bin_float.hpp [2:4]
+ boost/multiprecision/cpp_bin_float/io.hpp [2:4]
+ boost/multiprecision/cpp_bin_float/transcendental.hpp [2:4]
+ boost/multiprecision/cpp_int/literals.hpp [2:4]
+ boost/multiprecision/cpp_int/serialize.hpp [2:4]
+ boost/multiprecision/cpp_int/value_pack.hpp [2:4]
+ boost/multiprecision/detail/bitscan.hpp [2:4]
+ boost/multiprecision/detail/float_string_cvt.hpp [2:4]
+ boost/multiprecision/detail/ublas_interop.hpp [2:4]
+ boost/multiprecision/float128.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8b60e030cc6169d709dda601f461ab82
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Gautam Sewani
+ // Copyright 2008 John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/detail/hypergeometric_pdf.hpp [1:2]
+ boost/math/distributions/hypergeometric.hpp [1:2]
+ boost/math/distributions/logistic.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8b8272837b8bc44df293a85a958ddc81
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/state_saver.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/state_saver.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8ba4403292419bfdcddcaa893b67a223
+BELONGS ya.make
+ License text:
+ // Copyright 2015, 2016 Peter Dimov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mp11/detail/mp_count.hpp [4:4]
+ boost/mp11/detail/mp_list.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8bc414876d610225acf7d931e3e8a898
+BELONGS ya.make
+ License text:
+ // (C) Copyright Nick Thompson 2018.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tools/numerical_differentiation.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8bc5f0332b38acd415a3f19bc0dc773c
+BELONGS ya.make
+ License text:
+ Copyright (c) Marshall Clow 2012-2015.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility/string_ref.hpp [2:2]
+ boost/utility/string_view.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8bffccdfaa8562e58a7a916628756b56
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009, 2011 Helge Bahmann
+ * Copyright (c) 2009 Phil Endecott
+ * Copyright (c) 2013 Tim Blechmann
+ * Linux-specific code by Phil Endecott
+ * Copyright (c) 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/caps_linux_arm.hpp [6:10]
+ boost/atomic/detail/ops_linux_arm.hpp [6:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8c4a8c000d9107e7eca71c97ea07a686
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Howard Hinnant
+ // Copyright 2008 Beman Dawes
+ // Copyright 2009 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ratio/detail/overflow_helpers.hpp [3:5]
+ boost/ratio/ratio.hpp [3:5]
+ boost/ratio/ratio_fwd.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8c6050ea8948fa818487ef143b51e836
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006, 2007.
+ // Copyright Paul A. Bristow 2008, 2010.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/chi_squared.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8c848a7abcce1ef1126166b8d49f03f0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/map.hpp at line 15, boost/serialization/set.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/map.hpp [13:15]
+ boost/serialization/set.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8c9a23c5e3683d8f54e0310eed071f27
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006-2007 Matias Capeletto
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bimap.hpp [3:3]
+ boost/bimap/bimap.hpp [3:3]
+ boost/bimap/container_adaptor/associative_container_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/container_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/detail/comparison_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/detail/functor_bag.hpp [3:3]
+ boost/bimap/container_adaptor/detail/identity_converters.hpp [3:3]
+ boost/bimap/container_adaptor/detail/key_extractor.hpp [3:3]
+ boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp [3:3]
+ boost/bimap/container_adaptor/list_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/list_map_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/map_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/multimap_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/multiset_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/sequence_container_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/set_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/support/iterator_facade_converters.hpp [3:3]
+ boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/unordered_map_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/unordered_multiset_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/unordered_set_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/vector_adaptor.hpp [3:3]
+ boost/bimap/container_adaptor/vector_map_adaptor.hpp [3:3]
+ boost/bimap/detail/bimap_core.hpp [3:3]
+ boost/bimap/detail/concept_tags.hpp [3:3]
+ boost/bimap/detail/debug/static_error.hpp [3:3]
+ boost/bimap/detail/generate_index_binder.hpp [3:3]
+ boost/bimap/detail/generate_relation_binder.hpp [3:3]
+ boost/bimap/detail/generate_view_binder.hpp [3:3]
+ boost/bimap/detail/is_set_type_of.hpp [3:3]
+ boost/bimap/detail/manage_additional_parameters.hpp [3:3]
+ boost/bimap/detail/manage_bimap_key.hpp [3:3]
+ boost/bimap/detail/map_view_base.hpp [3:3]
+ boost/bimap/detail/map_view_iterator.hpp [3:3]
+ boost/bimap/detail/modifier_adaptor.hpp [3:3]
+ boost/bimap/detail/non_unique_views_helper.hpp [3:3]
+ boost/bimap/detail/set_view_base.hpp [3:3]
+ boost/bimap/detail/set_view_iterator.hpp [3:3]
+ boost/bimap/detail/test/check_metadata.hpp [3:3]
+ boost/bimap/detail/user_interface_config.hpp [3:3]
+ boost/bimap/list_of.hpp [3:3]
+ boost/bimap/multiset_of.hpp [3:3]
+ boost/bimap/property_map/set_support.hpp [3:3]
+ boost/bimap/property_map/unordered_set_support.hpp [3:3]
+ boost/bimap/relation/detail/access_builder.hpp [3:3]
+ boost/bimap/relation/detail/metadata_access_builder.hpp [3:3]
+ boost/bimap/relation/detail/mutant.hpp [3:3]
+ boost/bimap/relation/detail/static_access_builder.hpp [3:3]
+ boost/bimap/relation/detail/to_mutable_relation_functor.hpp [3:3]
+ boost/bimap/relation/member_at.hpp [3:3]
+ boost/bimap/relation/mutant_relation.hpp [3:3]
+ boost/bimap/relation/pair_layout.hpp [3:3]
+ boost/bimap/relation/structured_pair.hpp [3:3]
+ boost/bimap/relation/support/data_extractor.hpp [3:3]
+ boost/bimap/relation/support/get.hpp [3:3]
+ boost/bimap/relation/support/get_pair_functor.hpp [3:3]
+ boost/bimap/relation/support/is_tag_of_member_at.hpp [3:3]
+ boost/bimap/relation/support/member_with_tag.hpp [3:3]
+ boost/bimap/relation/support/opposite_tag.hpp [3:3]
+ boost/bimap/relation/support/pair_by.hpp [3:3]
+ boost/bimap/relation/support/pair_type_by.hpp [3:3]
+ boost/bimap/relation/support/value_type_of.hpp [3:3]
+ boost/bimap/relation/symmetrical_base.hpp [3:3]
+ boost/bimap/set_of.hpp [3:3]
+ boost/bimap/support/data_type_by.hpp [3:3]
+ boost/bimap/support/iterator_type_by.hpp [3:3]
+ boost/bimap/support/key_type_by.hpp [3:3]
+ boost/bimap/support/lambda.hpp [3:3]
+ boost/bimap/support/map_by.hpp [3:3]
+ boost/bimap/support/map_type_by.hpp [3:3]
+ boost/bimap/support/value_type_by.hpp [3:3]
+ boost/bimap/tags/support/apply_to_value_type.hpp [3:3]
+ boost/bimap/tags/support/default_tagged.hpp [3:3]
+ boost/bimap/tags/support/is_tagged.hpp [3:3]
+ boost/bimap/tags/support/overwrite_tagged.hpp [3:3]
+ boost/bimap/tags/support/tag_of.hpp [3:3]
+ boost/bimap/tags/support/value_type_of.hpp [3:3]
+ boost/bimap/tags/tagged.hpp [3:3]
+ boost/bimap/unconstrained_set_of.hpp [3:3]
+ boost/bimap/unordered_multiset_of.hpp [3:3]
+ boost/bimap/unordered_set_of.hpp [3:3]
+ boost/bimap/vector_of.hpp [3:3]
+ boost/bimap/views/list_map_view.hpp [3:3]
+ boost/bimap/views/list_set_view.hpp [3:3]
+ boost/bimap/views/map_view.hpp [3:3]
+ boost/bimap/views/multimap_view.hpp [3:3]
+ boost/bimap/views/multiset_view.hpp [3:3]
+ boost/bimap/views/set_view.hpp [3:3]
+ boost/bimap/views/unconstrained_map_view.hpp [3:3]
+ boost/bimap/views/unconstrained_set_view.hpp [3:3]
+ boost/bimap/views/unordered_map_view.hpp [3:3]
+ boost/bimap/views/unordered_multimap_view.hpp [3:3]
+ boost/bimap/views/unordered_multiset_view.hpp [3:3]
+ boost/bimap/views/unordered_set_view.hpp [3:3]
+ boost/bimap/views/vector_map_view.hpp [3:3]
+ boost/bimap/views/vector_set_view.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8ca6fe2283580e1208a843af7014e9fa
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/scoped_ptr.hpp at line 10
+ License text:
+ // Copyright (c) 2003 Vladimir Prus.
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/scoped_ptr.hpp [8:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8ccab375f0ba1f9625b1fa8c1f008ecd
+BELONGS ya.make
+ License text:
+ // Copyright Antony Polukhin, 2016-2018.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/stacktrace/detail/safe_dump_win.ipp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8ce38e822427eb86a5d1145c3e78e7cd
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/spinlock_std_atomic.hpp [11:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8cef697bc7a8725b9ce5431bdffe3bfc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/detail/type_traits.hpp at line 3
+ License text:
+ // Copyright Shreyans Doshi 2017.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/detail/type_traits.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8cf1d6f59e36dba9fc9f6ebd0154e611
+BELONGS ya.make
+ License text:
+ // (C) Copyright Artyom Beilis 2010.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/platform/vms.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8d1214bd39f8d38ef1ffd0059eaff3a3
+BELONGS ya.make
+ License text:
+ Copyright (c) Marshall Clow 2008-2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/clamp.hpp [2:2]
+ boost/algorithm/cxx11/all_of.hpp [2:2]
+ boost/algorithm/cxx11/any_of.hpp [2:2]
+ boost/algorithm/cxx11/copy_if.hpp [2:2]
+ boost/algorithm/cxx11/iota.hpp [2:2]
+ boost/algorithm/cxx11/none_of.hpp [2:2]
+ boost/algorithm/cxx11/one_of.hpp [2:2]
+ boost/algorithm/cxx14/equal.hpp [2:2]
+ boost/algorithm/cxx14/mismatch.hpp [2:2]
+ boost/algorithm/sort_subrange.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8d17906b204a2cc18be72559f1e52f7a
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/bessel.hpp [1:4]
+ boost/multiprecision/detail/dynamic_array.hpp [2:5]
+ boost/multiprecision/detail/rebind.hpp [2:5]
+ boost/multiprecision/detail/utype_helper.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8d32c9bc0dec53998ef384e09f62c65a
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2010 Eric Niebler
+ Copyright (c) 2014-2015 John Fletcher
+ Copyright (c) 2016 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/config.hpp [2:5]
+ boost/phoenix/version.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8d72d1dcdfe68675073a61b3409c37a1
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+ // Copyright 2015-2016 Antony Polukhin.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll.hpp [1:2]
+ boost/dll/detail/posix/shared_library_impl.hpp [1:2]
+ boost/dll/detail/windows/shared_library_impl.hpp [1:2]
+ boost/dll/import.hpp [1:2]
+ boost/dll/shared_library_load_mode.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8d783c7ebd355434173d26d1a01630d2
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002-2003
+ // Toon Knapen, Kresimir Fresl, Joerg Walter
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/detail/raw.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8dda65576163c7b59f1859a97983c400
+BELONGS ya.make
+ License text:
+ // (C) Copyright Herve Bronnimann 2004.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/minmax.hpp [1:1]
+ boost/algorithm/minmax_element.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8df3b48da7b43c15c1ba96354d5fbec1
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2012.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/airy.hpp [1:3]
+ boost/math/special_functions/hankel.hpp [1:3]
+ boost/math/special_functions/jacobi_elliptic.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8e00e7d6fce9c86304b3ed14045f8800
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/functional/hash/extensions.hpp at line 4
+ License text:
+ // Copyright 2017 Daniel James.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/functional/hash/extensions.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8e0585a991e50507adee58bb8887332d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/extract_optional_type.hpp at line 5
+ License text:
+ // Copyright Arno Schoedl & Neil Groves 2009.
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/detail/extract_optional_type.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8e7a593588369508c428e748fbb1d2c0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/is_base_of.hpp at line 4, boost/type_traits/is_base_of_tr1.hpp at line 4
+ License text:
+ // (C) Copyright Rani Sharoni 2003-2005.
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_base_of.hpp [2:4]
+ boost/type_traits/is_base_of_tr1.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8e7a9dea59a5af6d4783ac550489f594
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/disjoint/box_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_point.hpp [3:6]
+ boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp [3:6]
+ boost/geometry/algorithms/detail/touches/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/touches/interface.hpp [3:6]
+ boost/geometry/algorithms/touches.hpp [3:6]
+ boost/geometry/strategies/cartesian/box_in_box.hpp [3:6]
+ boost/geometry/strategies/distance_result.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8e899876d1c97d9cc82926a3113a06b5
+BELONGS libs/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/test/src/compiler_log_formatter.cpp at line 3, libs/test/src/cpp_main.cpp at line 3, libs/test/src/execution_monitor.cpp at line 3, libs/test/src/framework.cpp at line 3, libs/test/src/plain_report_formatter.cpp at line 3, libs/test/src/progress_monitor.cpp at line 3, libs/test/src/results_collector.cpp at line 3, libs/test/src/results_reporter.cpp at line 3, libs/test/src/test_main.cpp at line 3, libs/test/src/test_tools.cpp at line 3, libs/test/src/test_tree.cpp at line 3, libs/test/src/unit_test_log.cpp at line 3, libs/test/src/unit_test_main.cpp at line 3, libs/test/src/unit_test_monitor.cpp at line 3, libs/test/src/unit_test_parameters.cpp at line 3, libs/test/src/xml_log_formatter.cpp at line 3, libs/test/src/xml_report_formatter.cpp at line 3
+ License text:
+ // (C) Copyright Gennadiy Rozental 2005-2010.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/test/src/compiler_log_formatter.cpp [1:3]
+ libs/test/src/cpp_main.cpp [1:3]
+ libs/test/src/execution_monitor.cpp [1:3]
+ libs/test/src/framework.cpp [1:3]
+ libs/test/src/plain_report_formatter.cpp [1:3]
+ libs/test/src/progress_monitor.cpp [1:3]
+ libs/test/src/results_collector.cpp [1:3]
+ libs/test/src/results_reporter.cpp [1:3]
+ libs/test/src/test_main.cpp [1:3]
+ libs/test/src/test_tools.cpp [1:3]
+ libs/test/src/test_tree.cpp [1:3]
+ libs/test/src/unit_test_log.cpp [1:3]
+ libs/test/src/unit_test_main.cpp [1:3]
+ libs/test/src/unit_test_monitor.cpp [1:3]
+ libs/test/src/unit_test_parameters.cpp [1:3]
+ libs/test/src/xml_log_formatter.cpp [1:3]
+ libs/test/src/xml_report_formatter.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8ec420c6bb9d6f64da8e3c68da3b8781
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009-2010, Marco Guazzone
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/operation/size.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8f0399d287bd4672d939ab68c754655c
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/metrowerks.hpp [1:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8f1718c11307979d7a28026b2d0fe133
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2002 Joel de Guzman
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/scanner/scanner.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8f6b5f5d24bb145db03585e8c2d90444
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/partition.hpp [3:4]
+ boost/geometry/geometries/adapted/boost_fusion.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8f8a6ade4e24b15fc1746528d7ea1943
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/shared_container_iterator.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8fa19e12c729859dd6ba789e32b192d7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/uuid_io.hpp at line 5
+ License text:
+ // Copyright 2009 Andy Tompkins.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/uuid/uuid_io.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8fc0f0fba44b95f1156474d48496df66
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2009-2011 Frederic Bron.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/has_bit_and.hpp [1:1]
+ boost/type_traits/has_bit_and_assign.hpp [1:1]
+ boost/type_traits/has_bit_or.hpp [1:1]
+ boost/type_traits/has_bit_or_assign.hpp [1:1]
+ boost/type_traits/has_bit_xor.hpp [1:1]
+ boost/type_traits/has_bit_xor_assign.hpp [1:1]
+ boost/type_traits/has_complement.hpp [1:1]
+ boost/type_traits/has_dereference.hpp [1:1]
+ boost/type_traits/has_divides.hpp [1:1]
+ boost/type_traits/has_divides_assign.hpp [1:1]
+ boost/type_traits/has_equal_to.hpp [1:1]
+ boost/type_traits/has_greater.hpp [1:1]
+ boost/type_traits/has_greater_equal.hpp [1:1]
+ boost/type_traits/has_left_shift.hpp [1:1]
+ boost/type_traits/has_left_shift_assign.hpp [1:1]
+ boost/type_traits/has_less.hpp [1:1]
+ boost/type_traits/has_less_equal.hpp [1:1]
+ boost/type_traits/has_logical_and.hpp [1:1]
+ boost/type_traits/has_logical_not.hpp [1:1]
+ boost/type_traits/has_logical_or.hpp [1:1]
+ boost/type_traits/has_minus.hpp [1:1]
+ boost/type_traits/has_minus_assign.hpp [1:1]
+ boost/type_traits/has_modulus.hpp [1:1]
+ boost/type_traits/has_modulus_assign.hpp [1:1]
+ boost/type_traits/has_multiplies.hpp [1:1]
+ boost/type_traits/has_multiplies_assign.hpp [1:1]
+ boost/type_traits/has_negate.hpp [1:1]
+ boost/type_traits/has_not_equal_to.hpp [1:1]
+ boost/type_traits/has_operator.hpp [1:1]
+ boost/type_traits/has_plus.hpp [1:1]
+ boost/type_traits/has_plus_assign.hpp [1:1]
+ boost/type_traits/has_post_decrement.hpp [1:1]
+ boost/type_traits/has_post_increment.hpp [1:1]
+ boost/type_traits/has_pre_decrement.hpp [1:1]
+ boost/type_traits/has_pre_increment.hpp [1:1]
+ boost/type_traits/has_right_shift.hpp [1:1]
+ boost/type_traits/has_right_shift_assign.hpp [1:1]
+ boost/type_traits/has_unary_minus.hpp [1:1]
+ boost/type_traits/has_unary_plus.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 8fcebd7437f1dd40087ed0462e0f9f30
+BELONGS ya.make
+ License text:
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2015 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp [9:11]
+ boost/numeric/odeint/integrate/detail/integrate_times.hpp [9:11]
+ boost/numeric/odeint/integrate/integrate_adaptive.hpp [9:10]
+ boost/numeric/odeint/integrate/integrate_const.hpp [10:11]
+ boost/numeric/odeint/integrate/integrate_n_steps.hpp [9:10]
+ boost/numeric/odeint/integrate/integrate_times.hpp [9:10]
+ boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp [9:11]
+ boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp [10:12]
+ boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL 904ac0fbc0c69dc23756cca7f9047738
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/xpressive/detail/core/list.hpp at line 9, boost/xpressive/detail/core/regex_domain.hpp at line 7
+ License text:
+ // Copyright 2009 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/xpressive/detail/core/list.hpp [7:9]
+ boost/xpressive/detail/core/regex_domain.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 90b5a1efae58384e3e3f273a6001f459
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/overloads.hpp at line 3, boost/parameter/macros.hpp at line 3, boost/parameter/parameters.hpp at line 3
+ License text:
+ // Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
+ // distribution is subject to the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/parameter/aux_/overloads.hpp [1:3]
+ boost/parameter/macros.hpp [1:3]
+ boost/parameter/parameters.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 90b7ebb52ec9196271f904d38d1f3894
+BELONGS ya.make
+ License text:
+ Copyright 2012-2013 Andreas Angelopoulos
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp [6:8]
+ boost/numeric/odeint/external/mtl4/mtl4_resize.hpp [6:8]
+ boost/numeric/odeint/iterator/adaptive_time_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp [10:11]
+ boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp [9:10]
+ boost/numeric/odeint/util/unit_helper.hpp [9:10]
+ boost/numeric/odeint/util/unwrap_reference.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 90bf60ec5dad526231712a76952b4545
+BELONGS libs/regex/ya.make ya.make
+ License text:
+ * Copyright (c) 1998-2002
+ * John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cregex.hpp [3:4]
+ boost/regex.hpp [3:4]
+ boost/regex/config.hpp [3:4]
+ boost/regex/config/borland.hpp [3:4]
+ boost/regex/config/cwchar.hpp [3:4]
+ boost/regex/pattern_except.hpp [3:4]
+ boost/regex/regex_traits.hpp [3:4]
+ boost/regex/user.hpp [3:4]
+ boost/regex/v4/cregex.hpp [3:4]
+ boost/regex/v4/fileiter.hpp [3:4]
+ boost/regex/v4/instances.hpp [3:4]
+ boost/regex/v4/iterator_traits.hpp [3:4]
+ boost/regex/v4/match_flags.hpp [3:4]
+ boost/regex/v4/primary_transform.hpp [3:4]
+ boost/regex/v4/regbase.hpp [3:4]
+ boost/regex/v4/regex.hpp [3:4]
+ boost/regex/v4/regex_fwd.hpp [3:4]
+ boost/regex/v4/regex_grep.hpp [3:4]
+ boost/regex/v4/regex_match.hpp [3:4]
+ boost/regex/v4/regex_merge.hpp [3:4]
+ boost/regex/v4/regex_raw_buffer.hpp [3:4]
+ boost/regex/v4/regex_search.hpp [3:4]
+ boost/regex/v4/regex_split.hpp [3:4]
+ boost/regex/v4/states.hpp [3:4]
+ boost/regex/v4/sub_match.hpp [3:4]
+ boost/regex_fwd.hpp [3:4]
+ boost/signals/detail/config.hpp [3:4]
+ libs/regex/src/cregex.cpp [3:4]
+ libs/regex/src/fileiter.cpp [3:4]
+ libs/regex/src/instances.cpp [3:4]
+ libs/regex/src/posix_api.cpp [3:4]
+ libs/regex/src/usinstances.cpp [3:4]
+ libs/regex/src/wide_posix_api.cpp [3:4]
+ libs/regex/src/winstances.cpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 90d717675006b1b096c9a9d6faaeaff0
+BELONGS libs/log/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/log/detail/c_str.hpp at line 4, boost/log/detail/pause.hpp at line 4, boost/log/detail/sfinae_tools.hpp at line 4, boost/log/expressions/formatters/max_size_decorator.hpp at line 4, boost/log/keywords/block_size.hpp at line 4, boost/log/keywords/capacity.hpp at line 4, boost/log/keywords/enable_final_rotation.hpp at line 4, boost/log/keywords/name.hpp at line 4, boost/log/keywords/overflow_policy.hpp at line 4, boost/log/keywords/permissions.hpp at line 4, boost/log/sinks/text_ipc_message_queue_backend.hpp at line 4, boost/log/utility/ipc/object_name.hpp at line 4, boost/log/utility/ipc/reliable_message_queue.hpp at line 4, boost/log/utility/open_mode.hpp at line 4, libs/log/config/atomic-int32/atomic_int32.cpp at line 4, libs/log/config/native-syslog/native_syslog.cpp at line 4, libs/log/src/bit_tools.hpp at line 4, libs/log/src/murmur3.hpp at line 4, libs/log/src/posix/ipc_reliable_message_queue.cpp at line 4, libs/log/src/posix/ipc_sync_wrappers.hpp at line 4, libs/log/src/posix/object_name.cpp at line 4, libs/log/src/windows/auto_handle.hpp at line 4, libs/log/src/windows/ipc_reliable_message_queue.cpp at line 4, libs/log/src/windows/ipc_sync_wrappers.cpp at line 4, libs/log/src/windows/ipc_sync_wrappers.hpp at line 4, libs/log/src/windows/mapped_shared_memory.cpp at line 4, libs/log/src/windows/mapped_shared_memory.hpp at line 4, libs/log/src/windows/object_name.cpp at line 4, libs/log/src/windows/utf_code_conversion.hpp at line 4
+ License text:
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/log/detail/c_str.hpp [2:4]
+ boost/log/detail/pause.hpp [2:4]
+ boost/log/detail/sfinae_tools.hpp [2:4]
+ boost/log/expressions/formatters/max_size_decorator.hpp [2:4]
+ boost/log/keywords/block_size.hpp [2:4]
+ boost/log/keywords/capacity.hpp [2:4]
+ boost/log/keywords/enable_final_rotation.hpp [2:4]
+ boost/log/keywords/name.hpp [2:4]
+ boost/log/keywords/overflow_policy.hpp [2:4]
+ boost/log/keywords/permissions.hpp [2:4]
+ boost/log/sinks/text_ipc_message_queue_backend.hpp [2:5]
+ boost/log/utility/ipc/object_name.hpp [2:4]
+ boost/log/utility/ipc/reliable_message_queue.hpp [2:5]
+ boost/log/utility/open_mode.hpp [2:4]
+ libs/log/config/atomic-int32/atomic_int32.cpp [2:4]
+ libs/log/config/native-syslog/native_syslog.cpp [2:4]
+ libs/log/src/bit_tools.hpp [2:4]
+ libs/log/src/murmur3.hpp [2:4]
+ libs/log/src/posix/ipc_reliable_message_queue.cpp [2:5]
+ libs/log/src/posix/ipc_sync_wrappers.hpp [2:4]
+ libs/log/src/posix/object_name.cpp [2:4]
+ libs/log/src/windows/auto_handle.hpp [2:4]
+ libs/log/src/windows/ipc_reliable_message_queue.cpp [2:5]
+ libs/log/src/windows/ipc_sync_wrappers.cpp [2:4]
+ libs/log/src/windows/ipc_sync_wrappers.hpp [2:4]
+ libs/log/src/windows/mapped_shared_memory.cpp [2:4]
+ libs/log/src/windows/mapped_shared_memory.hpp [2:4]
+ libs/log/src/windows/object_name.cpp [2:4]
+ libs/log/src/windows/utf_code_conversion.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 91104f12c2c5f78e23afc2acf7158941
+BELONGS ya.make
+ License text:
+ // Copyright 2007 Baruch Zilber
+ // Copyright 2007 Boris Gubenko
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 912532add1cb71abc74d5d1fb9adee9b
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002-2003 Eric Friedman
+ // Copyright (c) 2002 by Andrei Alexandrescu
+ // Copyright (c) 2013-2014 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/move.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9145f1765d7da3980093a883fe0fd877
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/exec.hpp at line 3, boost/python/import.hpp at line 3, libs/python/src/exec.cpp at line 3, libs/python/src/import.cpp at line 3
+ License text:
+ // Copyright Stefan Seefeld 2005.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/exec.hpp [1:3]
+ boost/python/import.hpp [1:3]
+ libs/python/src/exec.cpp [1:3]
+ libs/python/src/import.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9165a7ca8021311c1ef749cd3bd3c7b4
+BELONGS ya.make
+ License text:
+ // Copyright Bruno Dutra 2015
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/map/aux_/insert_range_impl.hpp [5:5]
+ boost/mpl/set/aux_/insert_range_impl.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 91ca79b4c05cb91b912d8597c99be058
+BELONGS ya.make
+ License text:
+ // Copyright 2003 - 2011 LASMEA UMR 6602 CNRS/Univ. Clermont II
+ // Copyright 2009 - 2011 LRI UMR 8623 CNRS/Univ Paris Sud XI
+ // Copyright 2011 Eric Niebler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/proto/detail/remove_typename.hpp [2:4]
+ boost/proto/detail/template_arity.hpp [5:7]
+ boost/proto/transform/integral_c.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9207c14a0f73cfde357a50e86305b641
+BELONGS ya.make
+ License text:
+ // Copyright 2004-9 Trustees of Indiana University
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/detail/read_graphviz_new.hpp [1:1]
+ boost/graph/detail/read_graphviz_spirit.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 92541842df8561eccc16be0c5aad7f91
+BELONGS ya.make
+ License text:
+ Copyright (c) Marshall Clow 2010-2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/searching/boyer_moore.hpp [2:2]
+ boost/algorithm/searching/boyer_moore_horspool.hpp [2:2]
+ boost/algorithm/searching/detail/bm_traits.hpp [2:2]
+ boost/algorithm/searching/detail/debugging.hpp [2:2]
+ boost/algorithm/searching/knuth_morris_pratt.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 927231b9edc8d25ca05d8eacec531b3d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cstdfloat.hpp at line 6, boost/math/cstdfloat/cstdfloat_cmath.hpp at line 6, boost/math/cstdfloat/cstdfloat_complex.hpp at line 6, boost/math/cstdfloat/cstdfloat_complex_std.hpp at line 6, boost/math/cstdfloat/cstdfloat_iostream.hpp at line 6, boost/math/cstdfloat/cstdfloat_limits.hpp at line 6, boost/math/cstdfloat/cstdfloat_types.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cstdfloat.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_cmath.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_complex.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_complex_std.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_iostream.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_limits.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_types.hpp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 92d2c523bf7194ce7cd4df56369d1dff
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003 Giovanni Bajo
+ Copyright (c) 2003 Thomas Witt
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/iterator/file_iterator.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 93012328a02872a0d6cab3f5e94eeeb5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer_fwd.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer_fwd.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9304e817615e1bf062335597b6b77996
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001-2003
+ // William E. Kempf
+ // Copyright (C) 2011-2013 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/config.hpp [1:3]
+ boost/thread/detail/is_convertible.hpp [3:3]
+ boost/thread/detail/memory.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 93093325a4c1f221f10cc90fc3ded37c
+BELONGS libs/thread/ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/thread/src/win32/tss_pe.cpp [2:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 930a6e72883713e7b987065a56197739
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/detail/shared_ptr_132.hpp [7:8]
+ boost/smart_ptr/weak_ptr.hpp [7:7]
+ boost/weak_ptr.hpp [7:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 93298a574c18187d2a2c7398406ca6da
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/detail/config_external_begin.hpp at line 5, boost/interprocess/detail/config_external_end.hpp at line 5, boost/interprocess/sync/detail/condition_any_algorithm.hpp at line 5, boost/interprocess/sync/detail/locks.hpp at line 5, boost/interprocess/sync/interprocess_condition_any.hpp at line 5, boost/move/algorithm.hpp at line 5, boost/move/core.hpp at line 5, boost/move/detail/config_begin.hpp at line 5, boost/move/detail/config_end.hpp at line 5, boost/move/detail/unique_ptr_meta_utils.hpp at line 5, boost/move/iterator.hpp at line 5, boost/move/utility.hpp at line 5, boost/move/utility_core.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/detail/config_external_begin.hpp [3:5]
+ boost/interprocess/detail/config_external_end.hpp [3:5]
+ boost/interprocess/sync/detail/condition_any_algorithm.hpp [3:5]
+ boost/interprocess/sync/detail/locks.hpp [3:5]
+ boost/interprocess/sync/interprocess_condition_any.hpp [3:5]
+ boost/move/algorithm.hpp [3:5]
+ boost/move/core.hpp [3:5]
+ boost/move/detail/config_begin.hpp [3:5]
+ boost/move/detail/config_end.hpp [3:5]
+ boost/move/detail/unique_ptr_meta_utils.hpp [3:5]
+ boost/move/iterator.hpp [3:5]
+ boost/move/utility.hpp [3:5]
+ boost/move/utility_core.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 936e3021d51f633d9c2949ec896ef36e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/functions/pow.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/detail/functions/pow.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 937d6d0019a0a134e2c853ee7ca9c743
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/stdlib/libcomo.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 937e5c4288be2ecd2826b44ffdf85359
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/opaque_pointer_converter.hpp at line 3
+ License text:
+ // Copyright Gottfried GanรŸauge 2003..2006.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/opaque_pointer_converter.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 939d3c6b732a958e23eb33fe64213b93
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/has_trivial_move_assign.hpp at line 6, boost/type_traits/has_trivial_move_constructor.hpp at line 6, boost/type_traits/is_copy_constructible.hpp at line 5, boost/type_traits/is_nothrow_move_assignable.hpp at line 6, boost/type_traits/is_nothrow_move_constructible.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/has_trivial_move_assign.hpp [2:6]
+ boost/type_traits/has_trivial_move_constructor.hpp [2:6]
+ boost/type_traits/is_copy_constructible.hpp [1:1]
+ boost/type_traits/is_nothrow_move_assignable.hpp [2:6]
+ boost/type_traits/is_nothrow_move_constructible.hpp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 93ab4584acfafbfa5bd38b8d5199a363
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/caps_gcc_arm.hpp [6:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 93d0c235d47f59a703bd7faf4d1baccb
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2001 David Abrahams
+ // Copyright (c) 2005 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/bind.hpp [13:15]
+ boost/bind/bind_template.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 93df83f6c44de7d0493fe49ba8dd9a6e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/is_virtual_base_of.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_virtual_base_of.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 942029d7de2e3614e5e94a57e0bdfebe
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/add_const.hpp at line 5, boost/type_traits/add_cv.hpp at line 5, boost/type_traits/add_volatile.hpp at line 5, boost/type_traits/array_traits.hpp at line 4, boost/type_traits/composite_traits.hpp at line 4, boost/type_traits/cv_traits.hpp at line 4, boost/type_traits/is_array.hpp at line 5, boost/type_traits/is_enum.hpp at line 5, boost/type_traits/is_member_function_pointer.hpp at line 5, boost/type_traits/is_union.hpp at line 5, boost/type_traits/remove_const.hpp at line 5, boost/type_traits/remove_cv.hpp at line 5, boost/type_traits/remove_volatile.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/add_const.hpp [2:5]
+ boost/type_traits/add_cv.hpp [2:5]
+ boost/type_traits/add_volatile.hpp [2:5]
+ boost/type_traits/array_traits.hpp [1:4]
+ boost/type_traits/composite_traits.hpp [1:4]
+ boost/type_traits/cv_traits.hpp [1:4]
+ boost/type_traits/is_array.hpp [2:5]
+ boost/type_traits/is_enum.hpp [2:5]
+ boost/type_traits/is_member_function_pointer.hpp [2:5]
+ boost/type_traits/is_union.hpp [2:5]
+ boost/type_traits/remove_const.hpp [2:5]
+ boost/type_traits/remove_cv.hpp [2:5]
+ boost/type_traits/remove_volatile.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 94d8410e28595c2b87ac74a1363e3c64
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2011 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/heap/detail/ordered_adaptor_iterator.hpp [3:3]
+ boost/heap/heap_merge.hpp [3:3]
+ boost/lockfree/policies.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 94fb57d812bbd9c0831aa55e0e55380b
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2013 Ruslan Baratov
+ // Copyright (C) 2014 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/with_lock_guard.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9535c2252ccf396d7fd20ed2d3d6d886
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2008 Tobias Schwinger
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/functional/forward_adapter.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 959e826399beb3963888a03796ddf093
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/caller_context.hpp at line 3
+ License text:
+ // (C) Copyright 2013,2015 Vicente J. Botet Escriba
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/caller_context.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 959ff6a9e03879b0569173e9f854b78a
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2009 Trustees of Indiana University
+ // Authors: Jeremiah Willcock, Andrew Lumsdaine
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_map/shared_array_property_map.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 95ac45e399e1397a35020312987ecbb7
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2005-2008.
+ // Copyright (c) 2006-2008 Johan Rade
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/fpclassify.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 95bd27b5887bed44a3c6a9b574b85cf3
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003-2008 Matthias Christian Schabel
+ // Copyright (C) 2008 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/units/absolute.hpp [4:5]
+ boost/units/config.hpp [4:5]
+ boost/units/derived_dimension.hpp [4:5]
+ boost/units/detail/absolute_impl.hpp [4:5]
+ boost/units/detail/cmath_impl.hpp [4:5]
+ boost/units/detail/dim_impl.hpp [4:5]
+ boost/units/detail/dimension_impl.hpp [4:5]
+ boost/units/detail/dimension_list.hpp [4:5]
+ boost/units/detail/heterogeneous_conversion.hpp [4:5]
+ boost/units/detail/linear_algebra.hpp [4:5]
+ boost/units/detail/one.hpp [4:5]
+ boost/units/detail/push_front_if.hpp [4:5]
+ boost/units/detail/push_front_or_add.hpp [4:5]
+ boost/units/detail/sort.hpp [4:5]
+ boost/units/detail/utility.hpp [4:5]
+ boost/units/dimensionless_quantity.hpp [4:5]
+ boost/units/dimensionless_unit.hpp [4:5]
+ boost/units/get_dimension.hpp [4:5]
+ boost/units/get_system.hpp [4:5]
+ boost/units/homogeneous_system.hpp [4:5]
+ boost/units/is_dim.hpp [4:5]
+ boost/units/is_dimension_list.hpp [4:5]
+ boost/units/is_dimensionless.hpp [4:5]
+ boost/units/is_dimensionless_quantity.hpp [4:5]
+ boost/units/is_dimensionless_unit.hpp [4:5]
+ boost/units/is_quantity.hpp [4:5]
+ boost/units/is_quantity_of_dimension.hpp [4:5]
+ boost/units/is_quantity_of_system.hpp [4:5]
+ boost/units/is_unit.hpp [4:5]
+ boost/units/is_unit_of_dimension.hpp [4:5]
+ boost/units/is_unit_of_system.hpp [4:5]
+ boost/units/lambda.hpp [4:5]
+ boost/units/make_system.hpp [4:5]
+ boost/units/operators.hpp [4:5]
+ boost/units/physical_dimensions/absorbed_dose.hpp [4:5]
+ boost/units/physical_dimensions/acceleration.hpp [4:5]
+ boost/units/physical_dimensions/action.hpp [4:5]
+ boost/units/physical_dimensions/activity.hpp [4:5]
+ boost/units/physical_dimensions/amount.hpp [4:5]
+ boost/units/physical_dimensions/angular_acceleration.hpp [4:5]
+ boost/units/physical_dimensions/angular_momentum.hpp [4:5]
+ boost/units/physical_dimensions/angular_velocity.hpp [4:5]
+ boost/units/physical_dimensions/area.hpp [4:5]
+ boost/units/physical_dimensions/capacitance.hpp [4:5]
+ boost/units/physical_dimensions/conductance.hpp [4:5]
+ boost/units/physical_dimensions/conductivity.hpp [4:5]
+ boost/units/physical_dimensions/current.hpp [4:5]
+ boost/units/physical_dimensions/dose_equivalent.hpp [4:5]
+ boost/units/physical_dimensions/dynamic_viscosity.hpp [4:5]
+ boost/units/physical_dimensions/electric_charge.hpp [4:5]
+ boost/units/physical_dimensions/electric_potential.hpp [4:5]
+ boost/units/physical_dimensions/energy.hpp [4:5]
+ boost/units/physical_dimensions/energy_density.hpp [4:5]
+ boost/units/physical_dimensions/force.hpp [4:5]
+ boost/units/physical_dimensions/frequency.hpp [4:5]
+ boost/units/physical_dimensions/heat_capacity.hpp [4:5]
+ boost/units/physical_dimensions/illuminance.hpp [4:5]
+ boost/units/physical_dimensions/impedance.hpp [4:5]
+ boost/units/physical_dimensions/inductance.hpp [4:5]
+ boost/units/physical_dimensions/kinematic_viscosity.hpp [4:5]
+ boost/units/physical_dimensions/length.hpp [4:5]
+ boost/units/physical_dimensions/luminance.hpp [4:5]
+ boost/units/physical_dimensions/luminous_flux.hpp [4:5]
+ boost/units/physical_dimensions/luminous_intensity.hpp [4:5]
+ boost/units/physical_dimensions/magnetic_field_intensity.hpp [4:5]
+ boost/units/physical_dimensions/magnetic_flux.hpp [4:5]
+ boost/units/physical_dimensions/magnetic_flux_density.hpp [4:5]
+ boost/units/physical_dimensions/mass.hpp [4:5]
+ boost/units/physical_dimensions/mass_density.hpp [4:5]
+ boost/units/physical_dimensions/molar_energy.hpp [4:5]
+ boost/units/physical_dimensions/molar_heat_capacity.hpp [4:5]
+ boost/units/physical_dimensions/moment_of_inertia.hpp [4:5]
+ boost/units/physical_dimensions/momentum.hpp [4:5]
+ boost/units/physical_dimensions/permeability.hpp [4:5]
+ boost/units/physical_dimensions/permittivity.hpp [4:5]
+ boost/units/physical_dimensions/plane_angle.hpp [4:5]
+ boost/units/physical_dimensions/power.hpp [4:5]
+ boost/units/physical_dimensions/pressure.hpp [4:5]
+ boost/units/physical_dimensions/reluctance.hpp [4:5]
+ boost/units/physical_dimensions/resistance.hpp [4:5]
+ boost/units/physical_dimensions/resistivity.hpp [4:5]
+ boost/units/physical_dimensions/solid_angle.hpp [4:5]
+ boost/units/physical_dimensions/specific_energy.hpp [4:5]
+ boost/units/physical_dimensions/specific_heat_capacity.hpp [4:5]
+ boost/units/physical_dimensions/specific_volume.hpp [4:5]
+ boost/units/physical_dimensions/stress.hpp [4:5]
+ boost/units/physical_dimensions/surface_density.hpp [4:5]
+ boost/units/physical_dimensions/surface_tension.hpp [4:5]
+ boost/units/physical_dimensions/temperature.hpp [4:5]
+ boost/units/physical_dimensions/thermal_conductivity.hpp [4:5]
+ boost/units/physical_dimensions/time.hpp [4:5]
+ boost/units/physical_dimensions/torque.hpp [4:5]
+ boost/units/physical_dimensions/velocity.hpp [4:5]
+ boost/units/physical_dimensions/volume.hpp [4:5]
+ boost/units/physical_dimensions/wavenumber.hpp [4:5]
+ boost/units/pow.hpp [4:5]
+ boost/units/scaled_base_unit.hpp [4:5]
+ boost/units/static_constant.hpp [4:5]
+ boost/units/static_rational.hpp [4:5]
+ boost/units/systems/abstract.hpp [4:5]
+ boost/units/systems/angle/degrees.hpp [4:5]
+ boost/units/systems/angle/gradians.hpp [4:5]
+ boost/units/systems/angle/revolutions.hpp [4:5]
+ boost/units/systems/cgs.hpp [4:5]
+ boost/units/systems/cgs/acceleration.hpp [4:5]
+ boost/units/systems/cgs/area.hpp [4:5]
+ boost/units/systems/cgs/base.hpp [4:5]
+ boost/units/systems/cgs/current.hpp [4:5]
+ boost/units/systems/cgs/dimensionless.hpp [4:5]
+ boost/units/systems/cgs/dynamic_viscosity.hpp [4:5]
+ boost/units/systems/cgs/energy.hpp [4:5]
+ boost/units/systems/cgs/force.hpp [4:5]
+ boost/units/systems/cgs/frequency.hpp [4:5]
+ boost/units/systems/cgs/io.hpp [4:5]
+ boost/units/systems/cgs/kinematic_viscosity.hpp [4:5]
+ boost/units/systems/cgs/length.hpp [4:5]
+ boost/units/systems/cgs/mass.hpp [4:5]
+ boost/units/systems/cgs/mass_density.hpp [4:5]
+ boost/units/systems/cgs/momentum.hpp [4:5]
+ boost/units/systems/cgs/power.hpp [4:5]
+ boost/units/systems/cgs/pressure.hpp [4:5]
+ boost/units/systems/cgs/time.hpp [4:5]
+ boost/units/systems/cgs/velocity.hpp [4:5]
+ boost/units/systems/cgs/volume.hpp [4:5]
+ boost/units/systems/cgs/wavenumber.hpp [4:5]
+ boost/units/systems/detail/constants.hpp [4:5]
+ boost/units/systems/si.hpp [4:5]
+ boost/units/systems/si/absorbed_dose.hpp [4:5]
+ boost/units/systems/si/acceleration.hpp [4:5]
+ boost/units/systems/si/action.hpp [4:5]
+ boost/units/systems/si/activity.hpp [4:5]
+ boost/units/systems/si/amount.hpp [4:5]
+ boost/units/systems/si/angular_acceleration.hpp [4:5]
+ boost/units/systems/si/angular_momentum.hpp [4:5]
+ boost/units/systems/si/angular_velocity.hpp [4:5]
+ boost/units/systems/si/area.hpp [4:5]
+ boost/units/systems/si/base.hpp [4:5]
+ boost/units/systems/si/capacitance.hpp [4:5]
+ boost/units/systems/si/catalytic_activity.hpp [4:5]
+ boost/units/systems/si/codata/alpha_constants.hpp [4:5]
+ boost/units/systems/si/codata/atomic-nuclear_constants.hpp [4:5]
+ boost/units/systems/si/codata/deuteron_constants.hpp [4:5]
+ boost/units/systems/si/codata/electromagnetic_constants.hpp [4:5]
+ boost/units/systems/si/codata/electron_constants.hpp [4:5]
+ boost/units/systems/si/codata/helion_constants.hpp [4:5]
+ boost/units/systems/si/codata/muon_constants.hpp [4:5]
+ boost/units/systems/si/codata/neutron_constants.hpp [4:5]
+ boost/units/systems/si/codata/physico-chemical_constants.hpp [4:5]
+ boost/units/systems/si/codata/proton_constants.hpp [4:5]
+ boost/units/systems/si/codata/tau_constants.hpp [4:5]
+ boost/units/systems/si/codata/triton_constants.hpp [4:5]
+ boost/units/systems/si/codata/typedefs.hpp [4:5]
+ boost/units/systems/si/codata/universal_constants.hpp [4:5]
+ boost/units/systems/si/codata_constants.hpp [4:5]
+ boost/units/systems/si/conductance.hpp [4:5]
+ boost/units/systems/si/conductivity.hpp [4:5]
+ boost/units/systems/si/current.hpp [4:5]
+ boost/units/systems/si/dimensionless.hpp [4:5]
+ boost/units/systems/si/dose_equivalent.hpp [4:5]
+ boost/units/systems/si/dynamic_viscosity.hpp [4:5]
+ boost/units/systems/si/electric_charge.hpp [4:5]
+ boost/units/systems/si/electric_potential.hpp [4:5]
+ boost/units/systems/si/energy.hpp [4:5]
+ boost/units/systems/si/force.hpp [4:5]
+ boost/units/systems/si/frequency.hpp [4:5]
+ boost/units/systems/si/illuminance.hpp [4:5]
+ boost/units/systems/si/impedance.hpp [4:5]
+ boost/units/systems/si/inductance.hpp [4:5]
+ boost/units/systems/si/io.hpp [4:5]
+ boost/units/systems/si/kinematic_viscosity.hpp [4:5]
+ boost/units/systems/si/length.hpp [4:5]
+ boost/units/systems/si/luminous_flux.hpp [4:5]
+ boost/units/systems/si/luminous_intensity.hpp [4:5]
+ boost/units/systems/si/magnetic_field_intensity.hpp [4:5]
+ boost/units/systems/si/magnetic_flux.hpp [4:5]
+ boost/units/systems/si/magnetic_flux_density.hpp [4:5]
+ boost/units/systems/si/mass.hpp [4:5]
+ boost/units/systems/si/mass_density.hpp [4:5]
+ boost/units/systems/si/moment_of_inertia.hpp [4:5]
+ boost/units/systems/si/momentum.hpp [4:5]
+ boost/units/systems/si/permeability.hpp [4:5]
+ boost/units/systems/si/permittivity.hpp [4:5]
+ boost/units/systems/si/plane_angle.hpp [4:5]
+ boost/units/systems/si/power.hpp [4:5]
+ boost/units/systems/si/pressure.hpp [4:5]
+ boost/units/systems/si/reluctance.hpp [4:5]
+ boost/units/systems/si/resistance.hpp [4:5]
+ boost/units/systems/si/resistivity.hpp [4:5]
+ boost/units/systems/si/solid_angle.hpp [4:5]
+ boost/units/systems/si/surface_density.hpp [4:5]
+ boost/units/systems/si/surface_tension.hpp [4:5]
+ boost/units/systems/si/temperature.hpp [4:5]
+ boost/units/systems/si/time.hpp [4:5]
+ boost/units/systems/si/torque.hpp [4:5]
+ boost/units/systems/si/velocity.hpp [4:5]
+ boost/units/systems/si/volume.hpp [4:5]
+ boost/units/systems/si/wavenumber.hpp [4:5]
+ boost/units/systems/temperature/celsius.hpp [4:5]
+ boost/units/systems/temperature/fahrenheit.hpp [4:5]
+ boost/units/unit.hpp [4:5]
+ boost/units/units_fwd.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 961c56d553bec4aaa5a434bfe6d20bf7
+BELONGS ya.make
+ License text:
+ // (C) Copyright Darin Adler 2000
+ // (C) Copyright Beman Dawes 2006, 2009
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/detail/endian/endian.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 96370b4387f2e07a55f47b3531512279
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/errors.hpp at line 16
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/errors.hpp [13:16]
+
+KEEP COPYRIGHT_SERVICE_LABEL 967724361459e93f8f901bbf41b8a1ba
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2015, 2017.
+ // Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/envelope/box.hpp [7:8]
+ boost/geometry/algorithms/detail/envelope/interface.hpp [7:8]
+ boost/geometry/algorithms/detail/envelope/segment.hpp [7:8]
+ boost/geometry/algorithms/detail/expand/box.hpp [8:9]
+ boost/geometry/algorithms/detail/expand/indexed.hpp [8:9]
+ boost/geometry/algorithms/detail/expand/point.hpp [8:9]
+ boost/geometry/algorithms/detail/expand/segment.hpp [8:9]
+ boost/geometry/algorithms/detail/not.hpp [7:8]
+ boost/geometry/algorithms/detail/overlay/overlay.hpp [6:7]
+ boost/geometry/algorithms/detail/sections/section_functions.hpp [5:6]
+ boost/geometry/algorithms/dispatch/expand.hpp [8:9]
+ boost/geometry/io/wkt/write.hpp [8:9]
+ boost/geometry/strategies/cartesian/point_in_box.hpp [7:8]
+ boost/geometry/strategies/cartesian/side_by_triangle.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 967f34d5ca5411a681fad1c0ed330081
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/decltype.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 96b2ef2696a6c6919d3372f54d0dcce4
+BELONGS ya.make
+ License text:
+ // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+ // Copyright 2009 Trustees of Indiana University.
+ // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Michael Hansen
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/detail/d_ary_heap.hpp [3:4]
+ boost/graph/detail/incremental_components.hpp [2:4]
+ boost/graph/dijkstra_shortest_paths_no_color_map.hpp [2:4]
+ boost/graph/grid_graph.hpp [2:3]
+ boost/graph/incremental_components.hpp [3:5]
+ boost/graph/lookup_edge.hpp [2:3]
+ boost/graph/mcgregor_common_subgraphs.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 96e0d52b0b956df46d31e4959a243646
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2004
+ // Joerg Walter, Mathias Koch
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/detail/documentation.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 96f07997a06464b67176dfd628854f32
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008 Federico J. Fernandez.
+ // Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/index/detail/algorithms/union_content.hpp [5:6]
+ boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp [5:6]
+ boost/geometry/index/rtree.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 96fa27d0421cf1ee2e170382d2a3520d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/algo/move.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2012-2016.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/algo/move.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 974fa98871f593a9bf82fcaeda713b85
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/serialize_xml_names.hpp at line 6, boost/ptr_container/indirect_fun.hpp at line 6
+ License text:
+ // Copyright Thorsten Ottosen 2003-2007. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/detail/serialize_xml_names.hpp [4:6]
+ boost/ptr_container/indirect_fun.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 977260799a497dd091f79c62320e7a9c
+BELONGS ya.make
+ License text:
+ //Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/qvm/all.hpp [1:1]
+ boost/qvm/assert.hpp [1:1]
+ boost/qvm/deduce_mat.hpp [1:1]
+ boost/qvm/deduce_quat.hpp [1:1]
+ boost/qvm/deduce_scalar.hpp [1:1]
+ boost/qvm/deduce_vec.hpp [1:1]
+ boost/qvm/detail/cofactor_impl.hpp [1:1]
+ boost/qvm/detail/determinant_impl.hpp [1:1]
+ boost/qvm/detail/mat_assign.hpp [1:1]
+ boost/qvm/detail/quat_assign.hpp [1:1]
+ boost/qvm/detail/remove_const.hpp [1:1]
+ boost/qvm/detail/swizzle_traits.hpp [1:1]
+ boost/qvm/detail/transp_impl.hpp [1:1]
+ boost/qvm/detail/vec_assign.hpp [1:1]
+ boost/qvm/enable_if.hpp [1:1]
+ boost/qvm/error.hpp [1:1]
+ boost/qvm/inline.hpp [1:1]
+ boost/qvm/map.hpp [1:1]
+ boost/qvm/map_mat_mat.hpp [1:1]
+ boost/qvm/map_mat_vec.hpp [1:1]
+ boost/qvm/map_vec_mat.hpp [1:1]
+ boost/qvm/mat.hpp [1:1]
+ boost/qvm/mat_access.hpp [1:1]
+ boost/qvm/mat_operations.hpp [1:1]
+ boost/qvm/mat_operations2.hpp [1:1]
+ boost/qvm/mat_operations3.hpp [1:1]
+ boost/qvm/mat_operations4.hpp [1:1]
+ boost/qvm/mat_traits.hpp [1:1]
+ boost/qvm/mat_traits_array.hpp [1:1]
+ boost/qvm/mat_traits_defaults.hpp [1:1]
+ boost/qvm/math.hpp [1:1]
+ boost/qvm/operations.hpp [1:1]
+ boost/qvm/quat.hpp [1:1]
+ boost/qvm/quat_access.hpp [1:1]
+ boost/qvm/quat_operations.hpp [1:1]
+ boost/qvm/quat_traits.hpp [1:1]
+ boost/qvm/quat_traits_array.hpp [1:1]
+ boost/qvm/quat_traits_defaults.hpp [1:1]
+ boost/qvm/quat_vec_operations.hpp [1:1]
+ boost/qvm/scalar_traits.hpp [1:1]
+ boost/qvm/static_assert.hpp [1:1]
+ boost/qvm/swizzle.hpp [1:1]
+ boost/qvm/swizzle2.hpp [1:1]
+ boost/qvm/swizzle3.hpp [1:1]
+ boost/qvm/swizzle4.hpp [1:1]
+ boost/qvm/throw_exception.hpp [1:1]
+ boost/qvm/to_string.hpp [1:1]
+ boost/qvm/vec.hpp [1:1]
+ boost/qvm/vec_access.hpp [1:1]
+ boost/qvm/vec_mat_operations.hpp [1:1]
+ boost/qvm/vec_mat_operations2.hpp [1:1]
+ boost/qvm/vec_mat_operations3.hpp [1:1]
+ boost/qvm/vec_mat_operations4.hpp [1:1]
+ boost/qvm/vec_operations.hpp [1:1]
+ boost/qvm/vec_operations2.hpp [1:1]
+ boost/qvm/vec_operations3.hpp [1:1]
+ boost/qvm/vec_operations4.hpp [1:1]
+ boost/qvm/vec_traits.hpp [1:1]
+ boost/qvm/vec_traits_array.hpp [1:1]
+ boost/qvm/vec_traits_defaults.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 97a98c79164c47e3329865d388c50744
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/append.hpp [3:5]
+ boost/geometry/algorithms/comparable_distance.hpp [3:5]
+ boost/geometry/algorithms/detail/comparable_distance/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/comparable_distance/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/counting.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/areal_areal.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_areal.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_linear.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/segment_box.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/backward_compatibility.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/default_strategies.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/distance/interface.hpp [3:7]
+ boost/geometry/algorithms/detail/distance/point_to_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/collect_vectors.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/point_point.hpp [3:6]
+ boost/geometry/algorithms/detail/intersects/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/intersects/interface.hpp [3:5]
+ boost/geometry/algorithms/disjoint.hpp [3:6]
+ boost/geometry/algorithms/dispatch/disjoint.hpp [3:6]
+ boost/geometry/algorithms/dispatch/distance.hpp [3:6]
+ boost/geometry/algorithms/distance.hpp [3:6]
+ boost/geometry/algorithms/for_each.hpp [3:6]
+ boost/geometry/algorithms/intersects.hpp [3:5]
+ boost/geometry/algorithms/length.hpp [3:5]
+ boost/geometry/algorithms/num_geometries.hpp [3:5]
+ boost/geometry/algorithms/num_interior_rings.hpp [3:5]
+ boost/geometry/algorithms/num_points.hpp [3:6]
+ boost/geometry/algorithms/perimeter.hpp [3:5]
+ boost/geometry/core/cs.hpp [3:5]
+ boost/geometry/geometries/concepts/point_concept.hpp [3:5]
+ boost/geometry/geometries/point.hpp [3:6]
+ boost/geometry/multi/algorithms/append.hpp [3:5]
+ boost/geometry/multi/algorithms/distance.hpp [3:5]
+ boost/geometry/multi/algorithms/num_points.hpp [3:5]
+ boost/geometry/policies/disjoint_interrupt_policy.hpp [3:6]
+ boost/geometry/strategies/cartesian/disjoint_segment_box.hpp [3:6]
+ boost/geometry/strategies/cartesian/distance_projected_point.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp [3:5]
+ boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp [3:5]
+ boost/geometry/strategies/concepts/distance_concept.hpp [3:5]
+ boost/geometry/strategies/default_comparable_distance_result.hpp [3:5]
+ boost/geometry/strategies/default_distance_result.hpp [3:5]
+ boost/geometry/strategies/default_length_result.hpp [3:5]
+ boost/geometry/strategies/distance.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 97e133cb20e031fc0928fe2f5b4bb947
+BELONGS ya.make
+ License text:
+ // Copyright (c) 1995, 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 1995 Maarten Hilferink, Amsterdam, the Netherlands
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 97e496341d3cdfa138aa5b3dd79cbe08
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Tobias Schwinger
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/support/pair.hpp [2:3]
+ boost/spirit/home/classic/iterator/position_iterator_fwd.hpp [2:4]
+ boost/typeof/vector.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 983269bbe8852bf4659165d6bccc678e
+BELONGS ya.make
+ License text:
+ // Portions Copyright (C) 2002 David Abrahams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/over_sequence.hpp [9:9]
+ boost/variant/recursive_wrapper_fwd.hpp [9:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 98430e0b9b7c8812e9d7cd75c41cb4ef
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/detail/is_likely_lambda.hpp at line 3
+ License text:
+ /* Copyright 2017 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/detail/is_likely_lambda.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9890bd67cdd35de988039eaab34c8a02
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multi_index/detail/bidir_node_iterator.hpp at line 3, boost/multi_index/detail/cons_stdtuple.hpp at line 3, boost/multi_index/detail/hash_index_iterator.hpp at line 3, boost/multi_index/detail/is_transparent.hpp at line 3, boost/multi_index/detail/ord_index_ops.hpp at line 3, boost/multi_index/detail/rnd_node_iterator.hpp at line 3
+ License text:
+ /* Copyright 2003-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multi_index/detail/bidir_node_iterator.hpp [1:3]
+ boost/multi_index/detail/cons_stdtuple.hpp [1:3]
+ boost/multi_index/detail/hash_index_iterator.hpp [1:3]
+ boost/multi_index/detail/is_transparent.hpp [1:3]
+ boost/multi_index/detail/ord_index_ops.hpp [1:3]
+ boost/multi_index/detail/rnd_node_iterator.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 98be8460f5eeedee67d327e5aa099ae2
+BELONGS ya.make
+ License text:
+ // Copyright 2004-5 The Trustees of Indiana University.
+ // Copyright 2002 Brad King and Douglas Gregor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/page_rank.hpp [1:2]
+ boost/property_map/dynamic_property_map.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 98ec768e4c3c1122e9d267d4af38f879
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2003, 2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/endian/detail/config.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9914de026685f50b3db753e9eb22154a
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003 Hartmut Kaiser
+ Copyright (c) 2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/utility/grammar_def.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 99197ec3295dd71edfa4b7418d4accde
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/area.hpp [3:6]
+ boost/geometry/algorithms/assign.hpp [3:6]
+ boost/geometry/algorithms/buffer.hpp [3:5]
+ boost/geometry/algorithms/clear.hpp [3:5]
+ boost/geometry/algorithms/convert.hpp [3:6]
+ boost/geometry/algorithms/correct.hpp [3:6]
+ boost/geometry/algorithms/covered_by.hpp [3:5]
+ boost/geometry/algorithms/crosses.hpp [3:6]
+ boost/geometry/algorithms/detail/as_range.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_box_corners.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_indexed_point.hpp [3:5]
+ boost/geometry/algorithms/detail/assign_values.hpp [3:5]
+ boost/geometry/algorithms/detail/azimuth.hpp [3:3]
+ boost/geometry/algorithms/detail/calculate_null.hpp [3:5]
+ boost/geometry/algorithms/detail/calculate_sum.hpp [3:6]
+ boost/geometry/algorithms/detail/centroid/translating_transformer.hpp [3:6]
+ boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp [3:5]
+ boost/geometry/algorithms/detail/convert_point_to_point.hpp [3:5]
+ boost/geometry/algorithms/detail/course.hpp [3:3]
+ boost/geometry/algorithms/detail/covered_by/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/covered_by/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/for_each_range.hpp [3:5]
+ boost/geometry/algorithms/detail/intersection/box_box.hpp [3:3]
+ boost/geometry/algorithms/detail/intersection/implementation.hpp [3:3]
+ boost/geometry/algorithms/detail/intersection/interface.hpp [3:3]
+ boost/geometry/algorithms/detail/multi_modify.hpp [3:5]
+ boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp [3:5]
+ boost/geometry/algorithms/detail/multi_sum.hpp [3:5]
+ boost/geometry/algorithms/detail/overlay/add_rings.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/assign_parents.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/check_enrich.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/convert_ring.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/do_reverse.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/enrichment_info.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/get_relative_order.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/get_ring.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/get_turn_info.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/get_turns.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/overlay_type.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/ring_properties.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/segment_identifier.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/self_turn_points.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/stream_info.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/traversal.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/traversal_info.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/traverse.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/turn_info.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/visit_info.hpp [3:3]
+ boost/geometry/algorithms/detail/point_on_border.hpp [3:5]
+ boost/geometry/algorithms/detail/relate/areal_areal.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/follow_helpers.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/implementation.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/interface.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/linear_areal.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/linear_linear.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/point_geometry.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/point_point.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/relate_impl.hpp [3:3]
+ boost/geometry/algorithms/detail/ring_identifier.hpp [3:3]
+ boost/geometry/algorithms/detail/sections/range_by_section.hpp [3:5]
+ boost/geometry/algorithms/detail/single_geometry.hpp [3:3]
+ boost/geometry/algorithms/detail/sub_range.hpp [3:3]
+ boost/geometry/algorithms/detail/within/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/within/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/within/point_in_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/within/within_no_turns.hpp [3:5]
+ boost/geometry/algorithms/difference.hpp [3:3]
+ boost/geometry/algorithms/intersection.hpp [3:3]
+ boost/geometry/algorithms/make.hpp [3:5]
+ boost/geometry/algorithms/reverse.hpp [3:6]
+ boost/geometry/algorithms/transform.hpp [3:6]
+ boost/geometry/algorithms/unique.hpp [3:6]
+ boost/geometry/algorithms/within.hpp [3:5]
+ boost/geometry/core/closure.hpp [3:5]
+ boost/geometry/core/exterior_ring.hpp [3:5]
+ boost/geometry/core/geometry_id.hpp [3:5]
+ boost/geometry/core/interior_rings.hpp [3:5]
+ boost/geometry/core/interior_type.hpp [3:5]
+ boost/geometry/core/is_areal.hpp [3:5]
+ boost/geometry/core/mutable_range.hpp [3:5]
+ boost/geometry/core/point_order.hpp [3:5]
+ boost/geometry/core/point_type.hpp [3:5]
+ boost/geometry/core/radius.hpp [3:5]
+ boost/geometry/core/reverse_dispatch.hpp [3:5]
+ boost/geometry/core/tag.hpp [3:5]
+ boost/geometry/core/tag_cast.hpp [3:5]
+ boost/geometry/core/tags.hpp [3:5]
+ boost/geometry/core/topological_dimension.hpp [3:5]
+ boost/geometry/formulas/vincenty_direct.hpp [3:3]
+ boost/geometry/formulas/vincenty_inverse.hpp [3:4]
+ boost/geometry/geometries/adapted/c_array.hpp [3:5]
+ boost/geometry/geometries/box.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_linestring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_point_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/multi_polygon_concept.hpp [3:5]
+ boost/geometry/geometries/geometries.hpp [3:5]
+ boost/geometry/geometries/linestring.hpp [3:6]
+ boost/geometry/geometries/multi_linestring.hpp [3:6]
+ boost/geometry/geometries/multi_point.hpp [3:6]
+ boost/geometry/geometries/multi_polygon.hpp [3:6]
+ boost/geometry/geometries/point_xy.hpp [3:5]
+ boost/geometry/geometries/polygon.hpp [3:6]
+ boost/geometry/geometries/register/box.hpp [3:5]
+ boost/geometry/geometries/register/linestring.hpp [3:5]
+ boost/geometry/geometries/register/multi_linestring.hpp [3:5]
+ boost/geometry/geometries/register/multi_point.hpp [3:5]
+ boost/geometry/geometries/register/multi_polygon.hpp [3:5]
+ boost/geometry/geometries/register/point.hpp [3:5]
+ boost/geometry/geometries/register/ring.hpp [3:5]
+ boost/geometry/geometries/register/segment.hpp [3:5]
+ boost/geometry/geometries/ring.hpp [3:6]
+ boost/geometry/geometries/segment.hpp [3:5]
+ boost/geometry/geometries/variant.hpp [3:5]
+ boost/geometry/io/dsv/write.hpp [3:6]
+ boost/geometry/io/io.hpp [3:5]
+ boost/geometry/io/wkt/detail/prefix.hpp [3:5]
+ boost/geometry/io/wkt/detail/wkt_multi.hpp [3:5]
+ boost/geometry/io/wkt/read.hpp [3:6]
+ boost/geometry/io/wkt/stream.hpp [3:5]
+ boost/geometry/io/wkt/wkt.hpp [3:5]
+ boost/geometry/iterators/base.hpp [3:5]
+ boost/geometry/iterators/closing_iterator.hpp [3:5]
+ boost/geometry/iterators/ever_circling_iterator.hpp [3:5]
+ boost/geometry/multi/algorithms/area.hpp [3:5]
+ boost/geometry/multi/algorithms/centroid.hpp [3:5]
+ boost/geometry/multi/algorithms/clear.hpp [3:5]
+ boost/geometry/multi/algorithms/convert.hpp [3:5]
+ boost/geometry/multi/algorithms/correct.hpp [3:5]
+ boost/geometry/multi/algorithms/covered_by.hpp [3:6]
+ boost/geometry/multi/algorithms/detail/for_each_range.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/modify.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/multi_sum.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp [3:3]
+ boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp [3:3]
+ boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp [3:3]
+ boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp [3:3]
+ boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp [3:3]
+ boost/geometry/multi/algorithms/detail/point_on_border.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp [3:5]
+ boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp [3:5]
+ boost/geometry/multi/algorithms/envelope.hpp [3:5]
+ boost/geometry/multi/algorithms/equals.hpp [3:5]
+ boost/geometry/multi/algorithms/for_each.hpp [3:5]
+ boost/geometry/multi/algorithms/intersection.hpp [3:3]
+ boost/geometry/multi/algorithms/length.hpp [3:5]
+ boost/geometry/multi/algorithms/num_geometries.hpp [3:5]
+ boost/geometry/multi/algorithms/num_interior_rings.hpp [3:5]
+ boost/geometry/multi/algorithms/perimeter.hpp [3:5]
+ boost/geometry/multi/algorithms/reverse.hpp [3:5]
+ boost/geometry/multi/algorithms/simplify.hpp [3:5]
+ boost/geometry/multi/algorithms/transform.hpp [3:5]
+ boost/geometry/multi/algorithms/unique.hpp [3:5]
+ boost/geometry/multi/algorithms/within.hpp [3:6]
+ boost/geometry/multi/core/closure.hpp [3:5]
+ boost/geometry/multi/core/geometry_id.hpp [3:5]
+ boost/geometry/multi/core/interior_rings.hpp [3:5]
+ boost/geometry/multi/core/is_areal.hpp [3:5]
+ boost/geometry/multi/core/point_order.hpp [3:5]
+ boost/geometry/multi/core/point_type.hpp [3:5]
+ boost/geometry/multi/core/ring_type.hpp [3:5]
+ boost/geometry/multi/core/tags.hpp [3:5]
+ boost/geometry/multi/core/topological_dimension.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/check.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_point_concept.hpp [3:5]
+ boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp [3:5]
+ boost/geometry/multi/geometries/multi_geometries.hpp [3:5]
+ boost/geometry/multi/geometries/multi_linestring.hpp [3:5]
+ boost/geometry/multi/geometries/multi_point.hpp [3:5]
+ boost/geometry/multi/geometries/multi_polygon.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_linestring.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_point.hpp [3:5]
+ boost/geometry/multi/geometries/register/multi_polygon.hpp [3:5]
+ boost/geometry/multi/io/dsv/write.hpp [3:5]
+ boost/geometry/multi/io/wkt/detail/prefix.hpp [3:5]
+ boost/geometry/multi/io/wkt/read.hpp [3:5]
+ boost/geometry/multi/io/wkt/wkt.hpp [3:5]
+ boost/geometry/multi/io/wkt/write.hpp [3:5]
+ boost/geometry/multi/strategies/cartesian/centroid_average.hpp [3:5]
+ boost/geometry/multi/views/detail/range_type.hpp [3:5]
+ boost/geometry/policies/compare.hpp [3:3]
+ boost/geometry/policies/relate/direction.hpp [3:3]
+ boost/geometry/policies/relate/intersection_points.hpp [3:3]
+ boost/geometry/policies/relate/tupled.hpp [3:3]
+ boost/geometry/srs/projections/impl/base_dynamic.hpp [3:3]
+ boost/geometry/srs/projections/impl/base_static.hpp [3:3]
+ boost/geometry/srs/projections/impl/dms_parser.hpp [3:3]
+ boost/geometry/srs/projections/impl/factory_entry.hpp [3:3]
+ boost/geometry/srs/projections/impl/function_overloads.hpp [3:3]
+ boost/geometry/srs/sphere.hpp [3:5]
+ boost/geometry/srs/spheroid.hpp [3:5]
+ boost/geometry/srs/srs.hpp [3:5]
+ boost/geometry/strategies/agnostic/hull_graham_andrew.hpp [3:3]
+ boost/geometry/strategies/agnostic/point_in_box_by_side.hpp [3:5]
+ boost/geometry/strategies/agnostic/point_in_poly_winding.hpp [3:4]
+ boost/geometry/strategies/area.hpp [3:6]
+ boost/geometry/strategies/cartesian/area.hpp [3:6]
+ boost/geometry/strategies/cartesian/area_surveyor.hpp [3:6]
+ boost/geometry/strategies/cartesian/centroid_average.hpp [3:6]
+ boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp [3:5]
+ boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp [3:5]
+ boost/geometry/strategies/cartesian/point_in_poly_winding.hpp [3:4]
+ boost/geometry/strategies/centroid.hpp [3:5]
+ boost/geometry/strategies/compare.hpp [3:5]
+ boost/geometry/strategies/concepts/area_concept.hpp [3:6]
+ boost/geometry/strategies/concepts/centroid_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/convex_hull_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/segment_intersect_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/simplify_concept.hpp [3:5]
+ boost/geometry/strategies/concepts/within_concept.hpp [3:5]
+ boost/geometry/strategies/convex_hull.hpp [3:5]
+ boost/geometry/strategies/covered_by.hpp [3:5]
+ boost/geometry/strategies/default_area_result.hpp [3:6]
+ boost/geometry/strategies/geographic/distance_thomas.hpp [3:3]
+ boost/geometry/strategies/geographic/distance_vincenty.hpp [3:3]
+ boost/geometry/strategies/geographic/side.hpp [3:3]
+ boost/geometry/strategies/geographic/side_andoyer.hpp [3:3]
+ boost/geometry/strategies/geographic/side_thomas.hpp [3:3]
+ boost/geometry/strategies/geographic/side_vincenty.hpp [3:3]
+ boost/geometry/strategies/intersection_strategies.hpp [3:3]
+ boost/geometry/strategies/side.hpp [3:5]
+ boost/geometry/strategies/side_info.hpp [3:5]
+ boost/geometry/strategies/spherical/compare.hpp [3:3]
+ boost/geometry/strategies/spherical/distance_haversine.hpp [3:3]
+ boost/geometry/strategies/spherical/point_in_poly_winding.hpp [3:4]
+ boost/geometry/strategies/spherical/side_by_cross_track.hpp [3:3]
+ boost/geometry/strategies/strategies.hpp [3:6]
+ boost/geometry/strategies/tags.hpp [3:5]
+ boost/geometry/strategies/transform.hpp [3:5]
+ boost/geometry/strategies/transform/inverse_transformer.hpp [3:5]
+ boost/geometry/strategies/transform/map_transformer.hpp [3:5]
+ boost/geometry/strategies/within.hpp [3:5]
+ boost/geometry/util/add_const_if_c.hpp [3:5]
+ boost/geometry/util/closure_as_bool.hpp [3:5]
+ boost/geometry/util/coordinate_cast.hpp [3:5]
+ boost/geometry/util/for_each_coordinate.hpp [3:5]
+ boost/geometry/util/order_as_direction.hpp [3:5]
+ boost/geometry/util/parameter_type_of.hpp [3:5]
+ boost/geometry/util/promote_floating_point.hpp [3:5]
+ boost/geometry/util/range.hpp [3:3]
+ boost/geometry/util/select_calculation_type.hpp [3:5]
+ boost/geometry/util/select_coordinate_type.hpp [3:5]
+ boost/geometry/util/select_most_precise.hpp [3:5]
+ boost/geometry/views/box_view.hpp [3:5]
+ boost/geometry/views/closeable_view.hpp [3:5]
+ boost/geometry/views/detail/normalized_view.hpp [3:5]
+ boost/geometry/views/detail/points_view.hpp [3:5]
+ boost/geometry/views/detail/range_type.hpp [3:5]
+ boost/geometry/views/identity_view.hpp [3:5]
+ boost/geometry/views/reversible_view.hpp [3:5]
+ boost/geometry/views/segment_view.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9920a131cad7f7cbf1729cb6309d2b08
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/caps_gcc_x86.hpp [6:8]
+ boost/atomic/detail/storage_type.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9939174dc8e1157f74ea1c73d66f7222
+BELONGS ya.make
+ License text:
+ Copyright 2013 Ankur Sinha
+ Copyright 2013 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/eigen/eigen_resize.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9953191ce010ed1aad322265761eac02
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/execution_monitor.hpp at line 4
+ License text:
+ // (C) Copyright Gennadiy Rozental 2001.
+ // (C) Copyright Beman Dawes 2001.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/test/execution_monitor.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9972952826dfbd3f9309f8cd6b78c915
+BELONGS ya.make
+ License text:
+ Copyright (c) 2011-2011: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/concept/interval_associator_base.hpp [2:2]
+ boost/icl/type_traits/is_increasing.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 999dbbff90149cd716b12c15b568fa5b
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Neil Groves
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/adaptor/indexed.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 99abaad3f00b1da4f1a516051a6dbe16
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017-2018, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/densify.hpp [3:3]
+ boost/geometry/srs/projections/esri_traits.hpp [3:4]
+ boost/geometry/srs/projections/iau2000_traits.hpp [3:4]
+ boost/geometry/srs/projections/invalid_point.hpp [3:4]
+ boost/geometry/srs/projections/par4.hpp [3:4]
+ boost/geometry/strategies/cartesian/densify.hpp [3:3]
+ boost/geometry/strategies/geographic/densify.hpp [3:3]
+ boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp [3:3]
+ boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp [3:3]
+ boost/geometry/strategies/spherical/densify.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 99b0e8de6a1418d7b7de62fe775f9abf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/smart_ptr/detail/shared_count.hpp at line 9
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/detail/shared_count.hpp [5:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 99d17d19ab9b1eb6918fe74af3b2dad8
+BELONGS ya.make
+ License text:
+ Copyright (c) 2011 Aaron Graham
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/repository/include/qi_advance.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 99d56be2b42ec28cbfbc4305e55852a9
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2006
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/config/pp_counter.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 99e28477ea4db48cac3c5f12e2cf6ff1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/statechart/asynchronous_state_machine.hpp at line 6, boost/statechart/custom_reaction.hpp at line 6, boost/statechart/deep_history.hpp at line 6, boost/statechart/deferral.hpp at line 6, boost/statechart/detail/avoid_unused_warning.hpp at line 6, boost/statechart/detail/constructor.hpp at line 6, boost/statechart/detail/counted_base.hpp at line 6, boost/statechart/detail/leaf_state.hpp at line 6, boost/statechart/detail/node_state.hpp at line 6, boost/statechart/event_base.hpp at line 6, boost/statechart/exception_translator.hpp at line 6, boost/statechart/fifo_scheduler.hpp at line 6, boost/statechart/history.hpp at line 6, boost/statechart/null_exception_translator.hpp at line 6, boost/statechart/shallow_history.hpp at line 6, boost/statechart/state.hpp at line 6, boost/statechart/termination.hpp at line 6
+ License text:
+ // Copyright 2002-2006 Andreas Huber Doenni
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/statechart/asynchronous_state_machine.hpp [4:6]
+ boost/statechart/custom_reaction.hpp [4:6]
+ boost/statechart/deep_history.hpp [4:6]
+ boost/statechart/deferral.hpp [4:6]
+ boost/statechart/detail/avoid_unused_warning.hpp [4:6]
+ boost/statechart/detail/constructor.hpp [4:6]
+ boost/statechart/detail/counted_base.hpp [4:6]
+ boost/statechart/detail/leaf_state.hpp [4:6]
+ boost/statechart/detail/node_state.hpp [4:6]
+ boost/statechart/event_base.hpp [4:6]
+ boost/statechart/exception_translator.hpp [4:6]
+ boost/statechart/fifo_scheduler.hpp [4:6]
+ boost/statechart/history.hpp [4:6]
+ boost/statechart/null_exception_translator.hpp [4:6]
+ boost/statechart/shallow_history.hpp [4:6]
+ boost/statechart/state.hpp [4:6]
+ boost/statechart/termination.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 99e30e6c24834a627e69d8d2bffc84d4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/endian.hpp at line 3
+ License text:
+ // Copyright 2013 Rene Rivera
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/endian.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9a27310a64ac7fa13d0d55e8ac6f25e5
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2007
+ // Joerg Walter, Mathias Koch, Gunter Winkler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/matrix_sparse.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9a4ec699eab8989d68e34663ac7edf6a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2010 Ilya Murav'jov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/adaptor/indexed.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9a63cb87e8c2a3dd336d616478d5f492
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2008 Hartmut Kaiser
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2014-2015 John Fletcher
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/fusion/at.hpp [2:4]
+ boost/phoenix/version.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9a76da02cc5d44aea9b67b645c93e835
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2017 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/detail/experimental_traits.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9a80ad510090429b11292e780f492281
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/check_iterator_range.hpp [3:3]
+ boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp [3:3]
+ boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp [3:3]
+ boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/box_to_box.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/is_comparable.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/iterator_selector.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/linear_to_linear.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/segment_to_box.hpp [3:3]
+ boost/geometry/algorithms/detail/distance/segment_to_segment.hpp [3:3]
+ boost/geometry/algorithms/detail/is_simple/implementation.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/complement_graph.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/implementation.hpp [3:3]
+ boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp [3:3]
+ boost/geometry/algorithms/detail/turns/debug_turn.hpp [3:3]
+ boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp [3:3]
+ boost/geometry/algorithms/detail/turns/print_turns.hpp [3:3]
+ boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp [3:3]
+ boost/geometry/algorithms/dispatch/is_simple.hpp [3:3]
+ boost/geometry/algorithms/dispatch/is_valid.hpp [3:3]
+ boost/geometry/algorithms/is_simple.hpp [3:3]
+ boost/geometry/algorithms/is_valid.hpp [3:3]
+ boost/geometry/algorithms/num_segments.hpp [3:3]
+ boost/geometry/geometries/pointing_segment.hpp [3:3]
+ boost/geometry/iterators/concatenate_iterator.hpp [3:3]
+ boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp [3:3]
+ boost/geometry/iterators/detail/point_iterator/iterator_type.hpp [3:3]
+ boost/geometry/iterators/detail/point_iterator/value_type.hpp [3:3]
+ boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp [3:3]
+ boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp [3:3]
+ boost/geometry/iterators/dispatch/point_iterator.hpp [3:3]
+ boost/geometry/iterators/dispatch/segment_iterator.hpp [3:3]
+ boost/geometry/iterators/flatten_iterator.hpp [3:3]
+ boost/geometry/iterators/has_one_element.hpp [3:3]
+ boost/geometry/iterators/point_iterator.hpp [3:3]
+ boost/geometry/iterators/point_reverse_iterator.hpp [3:3]
+ boost/geometry/iterators/segment_iterator.hpp [3:3]
+ boost/geometry/policies/predicate_based_interrupt_policy.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9a830292eb7d7692c5b622def685d36a
+BELONGS libs/filesystem/ya.make ya.make
+ License text:
+ // Copyright Beman Dawes 2009
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/path_traits.hpp [3:3]
+ libs/filesystem/src/codecvt_error_category.cpp [3:3]
+ libs/filesystem/src/windows_file_codecvt.cpp [3:3]
+ libs/filesystem/src/windows_file_codecvt.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9b0d133607a0597027f2dd9d6a130cfe
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002 Eric Friedman, Itay Maman
+ // Copyright (c) 2016-2017 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/recursive_wrapper_fwd.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9b8104e4a1112de174366bab10c22757
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2006.
+ // (C) Copyright Jeremy William Murphy 2015.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tools/polynomial.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9bd4b980f484c78b17c8d7c57d64bb74
+BELONGS ya.make
+ License text:
+ @copyright Louis Dionne 2013-2016
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hana/detail/ebo.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9c202b68cb8cb773e5f594c9cb634928
+BELONGS ya.make
+ License text:
+ // Copyright Eric Niebler 2008
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/char.hpp [5:5]
+ boost/mpl/char_fwd.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9c35799cf91685e1cfa7ef2db4a88cb7
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes, 2009
+ // Copyright (C) 2011-2012 Vicente J. Botet Escriba
+ // Copyright (C) 2012 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/scoped_enum.hpp [3:5]
+ boost/core/underlying_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9c5be5a59c66b2bcbb6b46ce3adf1175
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2001-2008
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/config/compiler.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9ccbeffbf66f48cc1052a24852fc9ca2
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2004
+ // Copyright Peter Dimov 2000-2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/type_wrapper.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9ce6fa34c3edd9c7902c5acb69aa2095
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/filesystem/convenience.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/convenience.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9cf9d5ea6d40a88eeda2127bd41fc81a
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2012 Flavio De Lorenzi (fdlorenzi@gmail.com)
+ // Copyright (C) 2013 Jakob Lykke Andersen, University of Southern Denmark (jlandersen@imada.sdu.dk)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/vf2_sub_graph_iso.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9d08918c66a0d366cbbae02999f8438d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/transitive_closure.hpp at line 4, boost/graph/vector_as_graph.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/transitive_closure.hpp [1:4]
+ boost/graph/vector_as_graph.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9d195dfaf2f01572424e02192d7f0ba0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/suffix.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/suffix.hpp [4:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9d1c4732b4bc51a1628e9ff1edeccd54
+BELONGS ya.make
+ License text:
+ // (C) Copyright David Abrahams 2001, Howard Hinnant 2001.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/numeric_traits.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9d30d1a61743fde4bb0f00ff80c68d32
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013-2014 Agustin Berge
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/auxiliary/any_parser.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9d615a07fa55ba7bc529219f2b7e3de1
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2014.
+ // Modifications copyright (c) 2014, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/append.hpp [7:8]
+ boost/geometry/algorithms/comparable_distance.hpp [7:8]
+ boost/geometry/algorithms/detail/comparable_distance/implementation.hpp [7:8]
+ boost/geometry/algorithms/detail/comparable_distance/interface.hpp [7:8]
+ boost/geometry/algorithms/detail/counting.hpp [8:9]
+ boost/geometry/algorithms/detail/course.hpp [5:6]
+ boost/geometry/algorithms/detail/distance/backward_compatibility.hpp [8:9]
+ boost/geometry/algorithms/detail/distance/default_strategies.hpp [8:9]
+ boost/geometry/algorithms/detail/distance/implementation.hpp [8:9]
+ boost/geometry/algorithms/detail/distance/interface.hpp [9:10]
+ boost/geometry/algorithms/detail/distance/point_to_geometry.hpp [8:9]
+ boost/geometry/algorithms/detail/intersection/box_box.hpp [5:6]
+ boost/geometry/algorithms/detail/intersection/implementation.hpp [5:6]
+ boost/geometry/algorithms/dispatch/distance.hpp [8:9]
+ boost/geometry/algorithms/distance.hpp [8:9]
+ boost/geometry/algorithms/for_each.hpp [8:9]
+ boost/geometry/algorithms/intersection.hpp [5:6]
+ boost/geometry/algorithms/num_geometries.hpp [7:8]
+ boost/geometry/algorithms/num_interior_rings.hpp [7:8]
+ boost/geometry/algorithms/num_points.hpp [8:9]
+ boost/geometry/algorithms/perimeter.hpp [7:8]
+ boost/geometry/core/cs.hpp [7:8]
+ boost/geometry/geometries/concepts/point_concept.hpp [7:8]
+ boost/geometry/geometries/point.hpp [8:9]
+ boost/geometry/multi/algorithms/append.hpp [7:8]
+ boost/geometry/multi/algorithms/disjoint.hpp [7:8]
+ boost/geometry/multi/algorithms/distance.hpp [7:8]
+ boost/geometry/multi/algorithms/intersection.hpp [5:6]
+ boost/geometry/multi/algorithms/num_interior_rings.hpp [7:8]
+ boost/geometry/multi/algorithms/num_points.hpp [7:8]
+ boost/geometry/strategies/cartesian/distance_projected_point.hpp [7:8]
+ boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp [7:8]
+ boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp [7:8]
+ boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp [7:8]
+ boost/geometry/strategies/concepts/distance_concept.hpp [7:8]
+ boost/geometry/strategies/default_comparable_distance_result.hpp [7:8]
+ boost/geometry/strategies/default_distance_result.hpp [7:8]
+ boost/geometry/strategies/default_length_result.hpp [7:8]
+ boost/geometry/strategies/distance.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9d61a324506c4d173913e476c3c6b6fb
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2004 Ralf Mattethat
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/splaytree_algorithms.hpp [21:21]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9d7e6c44ce3f4d9421921fa598d30bcd
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2011 Hartmut Kaiser
+ Copyright (c) Christopher Diggins 2005
+ Copyright (c) Pablo Aguilar 2005
+ Copyright (c) Kevlin Henney 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/detail/hold_any.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9dd6cc82d1321a1d229916f828efdc75
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2014 - 2017 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/optional.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9e52c94c44dd3a954dc775cd9412a692
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/bessel.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9e78e97c56e37398708eef8a5a55ee96
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2003, 2006, 2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/api_config.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9eafab1767cf5f9fa3c793e883e1c318
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/utility.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9f16b7a4959de78b0a599e95ee75c84e
+BELONGS ya.make
+ License text:
+ // to the right implementation method. Most of the implementation details
+ // are in separate headers and copyright Xiaogang Zhang.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/bessel.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9f22f5d5569d36c36ab19ecf517c15c0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+ Copyright (c) 2009-2010 Christopher Schmidt
+ Copyright (c) 2015 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/algorithm/iteration/detail/fold.hpp [2:5]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp [2:3]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp [2:3]
+ boost/fusion/algorithm/transformation/join.hpp [2:3]
+ boost/fusion/algorithm/transformation/zip.hpp [2:3]
+ boost/fusion/algorithm/transformation/zip.hpp [43:44]
+ boost/fusion/container/deque/convert.hpp [2:3]
+ boost/fusion/container/deque/detail/cpp03/as_deque.hpp [2:3]
+ boost/fusion/container/generation/detail/pp_deque_tie.hpp [2:3]
+ boost/fusion/container/generation/detail/pp_make_deque.hpp [2:3]
+ boost/fusion/container/generation/detail/pp_map_tie.hpp [2:3]
+ boost/fusion/container/generation/pair_tie.hpp [2:3]
+ boost/fusion/sequence/intrinsic/at_key.hpp [2:3]
+ boost/fusion/sequence/intrinsic/swap.hpp [2:3]
+ boost/fusion/sequence/intrinsic/value_at_key.hpp [2:3]
+ boost/fusion/view/detail/strictest_traversal.hpp [2:3]
+ boost/fusion/view/nview.hpp [2:4]
+ boost/fusion/view/zip_view.hpp [2:3]
+ boost/fusion/view/zip_view/detail/advance_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/at_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/begin_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/deref_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/distance_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/end_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/equal_to_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/next_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/prior_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/size_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/value_at_impl.hpp [2:3]
+ boost/fusion/view/zip_view/detail/value_of_impl.hpp [2:3]
+ boost/fusion/view/zip_view/zip_view.hpp [2:3]
+ boost/fusion/view/zip_view/zip_view_iterator.hpp [2:3]
+ boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9f416aa8f1e6678b0d6d5857d642b969
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/arg.hpp [13:13]
+ boost/bind/make_adaptable.hpp [7:7]
+ boost/bind/placeholders.hpp [13:14]
+ boost/bind/protect.hpp [7:8]
+ boost/current_function.hpp [13:13]
+ boost/detail/lightweight_thread.hpp [12:13]
+ boost/interprocess/detail/os_thread_functions.hpp [15:16]
+ boost/serialization/throw_exception.hpp [12:12]
+ boost/signals2/detail/lwm_nop.hpp [4:5]
+ boost/signals2/detail/lwm_pthreads.hpp [4:5]
+ boost/smart_ptr/detail/lwm_nop.hpp [13:13]
+ boost/smart_ptr/detail/lwm_pthreads.hpp [13:13]
+ boost/throw_exception.hpp [19:20]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9f4f4692c306c5352ba812c34a1cfd7a
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Christophe Henry
+ // henry UNDERSCORE christophe AT hotmail DOT com
+ // This is an extended version of the state machine available in the boost::mpl library
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/msm/active_state_switching_policies.hpp [1:3]
+ boost/msm/back/args.hpp [1:3]
+ boost/msm/back/bind_helpers.hpp [1:3]
+ boost/msm/back/common_types.hpp [1:3]
+ boost/msm/back/copy_policies.hpp [1:3]
+ boost/msm/back/default_compile_policy.hpp [1:3]
+ boost/msm/back/dispatch_table.hpp [1:3]
+ boost/msm/back/favor_compile_time.hpp [1:3]
+ boost/msm/back/fold_to_list.hpp [1:7]
+ boost/msm/back/history_policies.hpp [1:3]
+ boost/msm/back/metafunctions.hpp [1:3]
+ boost/msm/back/mpl_graph_fsm_check.hpp [1:3]
+ boost/msm/back/no_fsm_check.hpp [1:3]
+ boost/msm/back/queue_container_circular.hpp [1:3]
+ boost/msm/back/queue_container_deque.hpp [1:3]
+ boost/msm/back/state_machine.hpp [1:3]
+ boost/msm/back/tools.hpp [1:3]
+ boost/msm/common.hpp [1:3]
+ boost/msm/event_traits.hpp [1:3]
+ boost/msm/front/common_states.hpp [1:3]
+ boost/msm/front/completion_event.hpp [1:3]
+ boost/msm/front/detail/common_states.hpp [1:3]
+ boost/msm/front/detail/row2_helper.hpp [1:3]
+ boost/msm/front/euml/algorithm.hpp [1:3]
+ boost/msm/front/euml/common.hpp [1:3]
+ boost/msm/front/euml/container.hpp [1:3]
+ boost/msm/front/euml/euml.hpp [1:3]
+ boost/msm/front/euml/euml_typeof.hpp [1:3]
+ boost/msm/front/euml/guard_grammar.hpp [1:3]
+ boost/msm/front/euml/iteration.hpp [1:3]
+ boost/msm/front/euml/operator.hpp [1:3]
+ boost/msm/front/euml/querying.hpp [1:3]
+ boost/msm/front/euml/state_grammar.hpp [1:3]
+ boost/msm/front/euml/stl.hpp [1:3]
+ boost/msm/front/euml/stt_grammar.hpp [1:3]
+ boost/msm/front/euml/transformation.hpp [1:3]
+ boost/msm/front/functor_row.hpp [1:3]
+ boost/msm/front/internal_row.hpp [1:3]
+ boost/msm/front/row2.hpp [1:3]
+ boost/msm/front/state_machine_def.hpp [1:3]
+ boost/msm/front/states.hpp [1:3]
+ boost/msm/msm_grammar.hpp [1:3]
+ boost/msm/proto_config.hpp [1:3]
+ boost/msm/row_tags.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9f570a3f9d4cfb2e159acf8ce988271b
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Eric Niebler.
+ // Copyright 2008 David Jenkins.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/xpressive/detail/core/matcher/action_matcher.hpp [4:5]
+ boost/xpressive/detail/core/matcher/attr_matcher.hpp [4:5]
+ boost/xpressive/detail/static/transforms/as_action.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9f5828e268910c36bf70e0636b1a5d36
+BELONGS libs/thread/ya.make ya.make
+ License text:
+ // (C) Copyright Michael Glassford 2004.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/tss_hooks.hpp [1:3]
+ libs/thread/src/tss_null.cpp [1:4]
+ libs/thread/src/win32/tss_dll.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9f8b54cefd3cda620dbb82f001d36a6b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/accumulators.hpp at line 7, boost/accumulators/accumulators_fwd.hpp at line 6, boost/accumulators/framework/accumulator_base.hpp at line 6, boost/accumulators/framework/accumulator_concept.hpp at line 6, boost/accumulators/framework/accumulator_set.hpp at line 6, boost/accumulators/framework/accumulators/droppable_accumulator.hpp at line 6, boost/accumulators/framework/accumulators/external_accumulator.hpp at line 6, boost/accumulators/framework/accumulators/reference_accumulator.hpp at line 6, boost/accumulators/framework/depends_on.hpp at line 6, boost/accumulators/framework/external.hpp at line 6, boost/accumulators/framework/extractor.hpp at line 6, boost/accumulators/framework/features.hpp at line 6, boost/accumulators/framework/parameters/accumulator.hpp at line 6, boost/accumulators/framework/parameters/sample.hpp at line 6, boost/accumulators/framework/parameters/weight.hpp at line 6, boost/accumulators/framework/parameters/weights.hpp at line 6, boost/accumulators/numeric/functional.hpp at line 6, boost/accumulators/numeric/functional/complex.hpp at line 6, boost/accumulators/numeric/functional/valarray.hpp at line 6, boost/accumulators/numeric/functional/vector.hpp at line 6, boost/accumulators/numeric/functional_fwd.hpp at line 6, boost/accumulators/statistics.hpp at line 7, boost/accumulators/statistics/count.hpp at line 6, boost/accumulators/statistics/error_of.hpp at line 6, boost/accumulators/statistics/error_of_mean.hpp at line 6, boost/accumulators/statistics/max.hpp at line 6, boost/accumulators/statistics/mean.hpp at line 6, boost/accumulators/statistics/min.hpp at line 6, boost/accumulators/statistics/moment.hpp at line 6, boost/accumulators/statistics/parameters/quantile_probability.hpp at line 6, boost/accumulators/statistics/rolling_moment.hpp at line 5, boost/accumulators/statistics/stats.hpp at line 7, boost/accumulators/statistics/sum.hpp at line 6, boost/accumulators/statistics/variates/covariate.hpp at line 6, boost/accumulators/statistics/with_error.hpp at line 6, boost/accumulators/statistics_fwd.hpp at line 6
+ License text:
+ // Copyright 2005 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/accumulators.hpp [5:7]
+ boost/accumulators/accumulators_fwd.hpp [4:6]
+ boost/accumulators/framework/accumulator_base.hpp [4:6]
+ boost/accumulators/framework/accumulator_concept.hpp [4:6]
+ boost/accumulators/framework/accumulator_set.hpp [4:6]
+ boost/accumulators/framework/accumulators/droppable_accumulator.hpp [4:6]
+ boost/accumulators/framework/accumulators/external_accumulator.hpp [4:6]
+ boost/accumulators/framework/accumulators/reference_accumulator.hpp [4:6]
+ boost/accumulators/framework/depends_on.hpp [4:6]
+ boost/accumulators/framework/external.hpp [4:6]
+ boost/accumulators/framework/extractor.hpp [4:6]
+ boost/accumulators/framework/features.hpp [4:6]
+ boost/accumulators/framework/parameters/accumulator.hpp [4:6]
+ boost/accumulators/framework/parameters/sample.hpp [4:6]
+ boost/accumulators/framework/parameters/weight.hpp [4:6]
+ boost/accumulators/framework/parameters/weights.hpp [4:6]
+ boost/accumulators/numeric/functional.hpp [4:6]
+ boost/accumulators/numeric/functional/complex.hpp [4:6]
+ boost/accumulators/numeric/functional/valarray.hpp [4:6]
+ boost/accumulators/numeric/functional/vector.hpp [4:6]
+ boost/accumulators/numeric/functional_fwd.hpp [4:6]
+ boost/accumulators/statistics.hpp [5:7]
+ boost/accumulators/statistics/count.hpp [4:6]
+ boost/accumulators/statistics/error_of.hpp [4:6]
+ boost/accumulators/statistics/error_of_mean.hpp [4:6]
+ boost/accumulators/statistics/max.hpp [4:6]
+ boost/accumulators/statistics/mean.hpp [4:6]
+ boost/accumulators/statistics/min.hpp [4:6]
+ boost/accumulators/statistics/moment.hpp [4:6]
+ boost/accumulators/statistics/parameters/quantile_probability.hpp [4:6]
+ boost/accumulators/statistics/rolling_moment.hpp [3:6]
+ boost/accumulators/statistics/stats.hpp [5:7]
+ boost/accumulators/statistics/sum.hpp [4:6]
+ boost/accumulators/statistics/variates/covariate.hpp [4:6]
+ boost/accumulators/statistics/with_error.hpp [4:6]
+ boost/accumulators/statistics_fwd.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9fbe755e4325767774b2c5b52827f08b
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/gcc.hpp [1:9]
+ boost/config/detail/select_stdlib_config.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9fc32687f4192402f3f9935c21eb7372
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005-2006 Douglas Gregor <doug.gregor@gmail.com>.
+ // Copyright (C) 2004 The Trustees of Indiana University
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/collectives/reduce.hpp [1:2]
+ boost/mpi/collectives/scan.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9fe58de5a87c382ac6ec5e085c48cd94
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2005 Peter Dimov
+ // Copyright 2006 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp [16:18]
+
+KEEP COPYRIGHT_SERVICE_LABEL 9fe6008887730559afc3f55d0f20c97d
+BELONGS ya.make
+ License text:
+ * Copyright 2002 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+ * Copyright 2005 Guillaume Melquiond
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval/detail/ppc_rounding_control.hpp [3:5]
+ boost/numeric/interval/hw_rounding.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a00ef2913f053c40e19dbb04a67f672d
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2002-2005, 2009
+ // Copyright Vladimir Prus 2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/path.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a04d60693ae88d69afc8ccff61832efc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/tuple/insert.hpp at line 5, boost/preprocessor/tuple/pop_back.hpp at line 5, boost/preprocessor/tuple/pop_front.hpp at line 5, boost/preprocessor/tuple/push_back.hpp at line 5, boost/preprocessor/tuple/push_front.hpp at line 5, boost/preprocessor/tuple/remove.hpp at line 5, boost/preprocessor/tuple/replace.hpp at line 5
+ License text:
+ \# * (C) Copyright Edward Diener 2013.
+ \# * Distributed under the Boost Software License, Version 1.0. (See
+ \# * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/tuple/insert.hpp [3:5]
+ boost/preprocessor/tuple/pop_back.hpp [3:5]
+ boost/preprocessor/tuple/pop_front.hpp [3:5]
+ boost/preprocessor/tuple/push_back.hpp [3:5]
+ boost/preprocessor/tuple/push_front.hpp [3:5]
+ boost/preprocessor/tuple/remove.hpp [3:5]
+ boost/preprocessor/tuple/replace.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a08e41a239cdee1f96eadc8647e90ab7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/hardware.h at line 5, boost/predef/hardware/simd.h at line 5, boost/predef/hardware/simd/arm.h at line 5, boost/predef/hardware/simd/arm/versions.h at line 5, boost/predef/hardware/simd/ppc.h at line 5, boost/predef/hardware/simd/ppc/versions.h at line 5, boost/predef/hardware/simd/x86.h at line 5, boost/predef/hardware/simd/x86/versions.h at line 5, boost/predef/hardware/simd/x86_amd.h at line 5, boost/predef/hardware/simd/x86_amd/versions.h at line 5
+ License text:
+ Copyright Charly Chevalier 2015
+ Copyright Joel Falcou 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/hardware.h [2:5]
+ boost/predef/hardware/simd.h [2:5]
+ boost/predef/hardware/simd/arm.h [2:5]
+ boost/predef/hardware/simd/arm/versions.h [2:5]
+ boost/predef/hardware/simd/ppc.h [2:5]
+ boost/predef/hardware/simd/ppc/versions.h [2:5]
+ boost/predef/hardware/simd/x86.h [2:5]
+ boost/predef/hardware/simd/x86/versions.h [2:5]
+ boost/predef/hardware/simd/x86_amd.h [2:5]
+ boost/predef/hardware/simd/x86_amd/versions.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a09b806764becef5e188111e9cde59b8
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2004-2008 The Trustees of Indiana University.
+ // Copyright (C) 2007 Douglas Gregor
+ // Copyright (C) 2007 Matthias Troyer <troyer@boost-consulting.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/detail/mpi_process_group.ipp [3:5]
+ boost/graph/distributed/mpi_process_group.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a0c5300b9bdea05390915ba7a0320755
+BELONGS ya.make
+ License text:
+ /* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/date_facet.hpp [4:6]
+ boost/date_time/format_date_parser.hpp [5:7]
+ boost/date_time/gregorian/conversion.hpp [4:6]
+ boost/date_time/gregorian/greg_serialize.hpp [4:6]
+ boost/date_time/gregorian/gregorian_io.hpp [4:6]
+ boost/date_time/posix_time/posix_time_io.hpp [4:6]
+ boost/date_time/posix_time/time_serialize.hpp [4:6]
+ boost/date_time/string_parse_tree.hpp [4:6]
+ boost/date_time/time_facet.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL a0cd3454bb19643561108cce72a3dc59
+BELONGS libs/thread/ya.make ya.make
+ License text:
+ // Copyright (C) 2001-2003
+ // William E. Kempf
+ // Copyright (C) 2007-9 Anthony Williams
+ // (C) Copyright 2011-2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/move.hpp [4:5]
+ boost/thread/detail/thread.hpp [6:7]
+ boost/thread/exceptions.hpp [1:4]
+ boost/thread/lock_algorithms.hpp [4:5]
+ boost/thread/lock_guard.hpp [4:5]
+ boost/thread/lock_options.hpp [4:5]
+ boost/thread/lock_types.hpp [4:5]
+ boost/thread/lockable_traits.hpp [4:5]
+ boost/thread/locks.hpp [4:5]
+ boost/thread/pthread/condition_variable.hpp [6:7]
+ boost/thread/pthread/condition_variable_fwd.hpp [6:7]
+ boost/thread/pthread/once.hpp [6:7]
+ boost/thread/pthread/recursive_mutex.hpp [3:6]
+ boost/thread/pthread/thread_data.hpp [6:7]
+ boost/thread/shared_mutex.hpp [6:7]
+ boost/thread/win32/basic_timed_mutex.hpp [6:7]
+ boost/thread/win32/condition_variable.hpp [6:7]
+ boost/thread/win32/mfc_thread_init.hpp [6:7]
+ boost/thread/win32/mutex.hpp [3:6]
+ boost/thread/win32/thread_data.hpp [6:7]
+ libs/thread/src/pthread/thread.cpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a0cdf8b16219a2c9136fbbbed1e38766
+BELONGS ya.make
+ License text:
+ // Copyright 2011 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_erasure/any.hpp [3:3]
+ boost/type_erasure/any_cast.hpp [3:3]
+ boost/type_erasure/binding.hpp [3:3]
+ boost/type_erasure/binding_of.hpp [3:3]
+ boost/type_erasure/builtin.hpp [3:3]
+ boost/type_erasure/call.hpp [3:3]
+ boost/type_erasure/callable.hpp [3:3]
+ boost/type_erasure/check_match.hpp [3:3]
+ boost/type_erasure/concept_interface.hpp [3:3]
+ boost/type_erasure/concept_of.hpp [3:3]
+ boost/type_erasure/config.hpp [3:3]
+ boost/type_erasure/constructible.hpp [3:3]
+ boost/type_erasure/deduced.hpp [3:3]
+ boost/type_erasure/derived.hpp [3:3]
+ boost/type_erasure/detail/access.hpp [3:3]
+ boost/type_erasure/detail/adapt_to_vtable.hpp [3:3]
+ boost/type_erasure/detail/any_base.hpp [3:3]
+ boost/type_erasure/detail/construct.hpp [3:3]
+ boost/type_erasure/detail/extract_concept.hpp [3:3]
+ boost/type_erasure/detail/get_placeholders.hpp [3:3]
+ boost/type_erasure/detail/normalize.hpp [3:3]
+ boost/type_erasure/detail/normalize_deduced.hpp [3:3]
+ boost/type_erasure/detail/rebind_placeholders.hpp [3:3]
+ boost/type_erasure/detail/storage.hpp [3:3]
+ boost/type_erasure/detail/vtable.hpp [3:3]
+ boost/type_erasure/is_placeholder.hpp [3:3]
+ boost/type_erasure/iterator.hpp [3:3]
+ boost/type_erasure/operators.hpp [3:3]
+ boost/type_erasure/param.hpp [3:3]
+ boost/type_erasure/placeholder.hpp [3:3]
+ boost/type_erasure/placeholder_of.hpp [3:3]
+ boost/type_erasure/rebind_any.hpp [3:3]
+ boost/type_erasure/relaxed.hpp [3:3]
+ boost/type_erasure/same_type.hpp [3:3]
+ boost/type_erasure/static_binding.hpp [3:3]
+ boost/type_erasure/typeid_of.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a0e20da7cdeea7e16b12e33f7083427b
+BELONGS ya.make
+ License text:
+ Copyright (c) 2014 Jamboree
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/include/flatten.hpp [2:2]
+ boost/fusion/include/flatten_view.hpp [2:2]
+ boost/spirit/home/x3/support/utility/is_callable.hpp [2:2]
+ boost/spirit/home/x3/support/utility/unrefcv.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a103bfee1637c9cc67288e4038d76892
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2014, 2015 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/none.hpp [1:2]
+ boost/none_t.hpp [1:2]
+ boost/optional.hpp [1:1]
+ boost/utility/compare_pointees.hpp [1:1]
+ boost/utility/detail/in_place_factory_prefix.hpp [1:2]
+ boost/utility/detail/in_place_factory_suffix.hpp [1:2]
+ boost/utility/in_place_factory.hpp [1:2]
+ boost/utility/typed_in_place_factory.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a103e4c3ebf84b433d6fa1717f50fe56
+BELONGS ya.make
+ License text:
+ //! Copyright (c) 2011
+ //! Brandon Kohn
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/conversion/numeric_cast_traits.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a1556c4fb01c7719c0853a3cc659522f
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/beast.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a161d119816677d97a23d4581bd2ddec
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009
+ // Gunter Winkler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/experimental/sparse_view.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a16207ab3c7903af5e26c274ec5b9d4d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2009 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/protect.hpp [7:8]
+ boost/lambda/detail/suppress_unused.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a16d2d9333074214b789369553ae6d4b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/same_traits.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/same_traits.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a183e113b4eee36273a5dea45d9133c3
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/auxiliary.hpp [2:3]
+ boost/spirit/home/x3/auxiliary/any_parser.hpp [2:3]
+ boost/spirit/home/x3/auxiliary/attr.hpp [2:4]
+ boost/spirit/home/x3/auxiliary/eoi.hpp [2:3]
+ boost/spirit/home/x3/auxiliary/eol.hpp [2:3]
+ boost/spirit/home/x3/auxiliary/eps.hpp [2:2]
+ boost/spirit/home/x3/auxiliary/guard.hpp [2:2]
+ boost/spirit/home/x3/char.hpp [2:2]
+ boost/spirit/home/x3/char/any_char.hpp [2:2]
+ boost/spirit/home/x3/char/char.hpp [2:2]
+ boost/spirit/home/x3/char/char_class.hpp [2:2]
+ boost/spirit/home/x3/char/char_class_tags.hpp [2:2]
+ boost/spirit/home/x3/char/char_parser.hpp [2:2]
+ boost/spirit/home/x3/char/char_set.hpp [2:2]
+ boost/spirit/home/x3/char/detail/cast_char.hpp [2:3]
+ boost/spirit/home/x3/char/literal_char.hpp [2:2]
+ boost/spirit/home/x3/char/negated_char_parser.hpp [2:2]
+ boost/spirit/home/x3/char/unicode.hpp [2:2]
+ boost/spirit/home/x3/core.hpp [2:2]
+ boost/spirit/home/x3/core/call.hpp [2:2]
+ boost/spirit/home/x3/core/detail/parse_into_container.hpp [2:2]
+ boost/spirit/home/x3/core/parse.hpp [2:2]
+ boost/spirit/home/x3/core/parser.hpp [2:3]
+ boost/spirit/home/x3/core/proxy.hpp [2:2]
+ boost/spirit/home/x3/core/skip_over.hpp [2:2]
+ boost/spirit/home/x3/directive/expect.hpp [2:2]
+ boost/spirit/home/x3/directive/lexeme.hpp [2:2]
+ boost/spirit/home/x3/directive/no_skip.hpp [2:4]
+ boost/spirit/home/x3/directive/omit.hpp [2:2]
+ boost/spirit/home/x3/directive/skip.hpp [2:3]
+ boost/spirit/home/x3/nonterminal.hpp [2:2]
+ boost/spirit/home/x3/nonterminal/debug_handler_state.hpp [2:2]
+ boost/spirit/home/x3/nonterminal/detail/rule.hpp [2:2]
+ boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp [2:3]
+ boost/spirit/home/x3/nonterminal/rule.hpp [2:2]
+ boost/spirit/home/x3/nonterminal/simple_trace.hpp [2:3]
+ boost/spirit/home/x3/numeric.hpp [2:2]
+ boost/spirit/home/x3/numeric/int.hpp [2:2]
+ boost/spirit/home/x3/numeric/real.hpp [2:2]
+ boost/spirit/home/x3/numeric/real_policies.hpp [2:3]
+ boost/spirit/home/x3/numeric/uint.hpp [2:3]
+ boost/spirit/home/x3/operator.hpp [2:2]
+ boost/spirit/home/x3/operator/alternative.hpp [2:2]
+ boost/spirit/home/x3/operator/and_predicate.hpp [2:2]
+ boost/spirit/home/x3/operator/detail/alternative.hpp [2:2]
+ boost/spirit/home/x3/operator/detail/sequence.hpp [2:2]
+ boost/spirit/home/x3/operator/difference.hpp [2:2]
+ boost/spirit/home/x3/operator/kleene.hpp [2:3]
+ boost/spirit/home/x3/operator/list.hpp [2:3]
+ boost/spirit/home/x3/operator/not_predicate.hpp [2:2]
+ boost/spirit/home/x3/operator/optional.hpp [2:3]
+ boost/spirit/home/x3/operator/plus.hpp [2:3]
+ boost/spirit/home/x3/operator/sequence.hpp [2:2]
+ boost/spirit/home/x3/string.hpp [2:2]
+ boost/spirit/home/x3/string/detail/no_case_string_parse.hpp [2:2]
+ boost/spirit/home/x3/string/detail/string_parse.hpp [2:2]
+ boost/spirit/home/x3/string/detail/tst.hpp [2:2]
+ boost/spirit/home/x3/string/literal_string.hpp [2:2]
+ boost/spirit/home/x3/string/symbols.hpp [2:3]
+ boost/spirit/home/x3/string/tst.hpp [2:2]
+ boost/spirit/home/x3/string/tst_map.hpp [2:2]
+ boost/spirit/home/x3/support/ast/variant.hpp [2:2]
+ boost/spirit/home/x3/support/no_case.hpp [2:2]
+ boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp [2:6]
+ boost/spirit/home/x3/support/numeric_utils/extract_int.hpp [2:3]
+ boost/spirit/home/x3/support/numeric_utils/extract_real.hpp [2:4]
+ boost/spirit/home/x3/support/numeric_utils/pow10.hpp [2:4]
+ boost/spirit/home/x3/support/numeric_utils/sign.hpp [2:4]
+ boost/spirit/home/x3/support/subcontext.hpp [2:4]
+ boost/spirit/home/x3/support/traits/attribute_of.hpp [2:4]
+ boost/spirit/home/x3/support/traits/container_traits.hpp [2:4]
+ boost/spirit/home/x3/support/traits/has_attribute.hpp [2:4]
+ boost/spirit/home/x3/support/traits/is_parser.hpp [2:3]
+ boost/spirit/home/x3/support/traits/make_attribute.hpp [2:4]
+ boost/spirit/home/x3/support/traits/move_to.hpp [2:4]
+ boost/spirit/home/x3/support/traits/optional_traits.hpp [2:4]
+ boost/spirit/home/x3/support/traits/print_attribute.hpp [2:3]
+ boost/spirit/home/x3/support/traits/print_token.hpp [2:3]
+ boost/spirit/home/x3/support/traits/string_traits.hpp [2:4]
+ boost/spirit/home/x3/support/traits/transform_attribute.hpp [2:4]
+ boost/spirit/home/x3/support/traits/tuple_traits.hpp [2:2]
+ boost/spirit/home/x3/support/traits/value_traits.hpp [2:4]
+ boost/spirit/home/x3/support/unused.hpp [2:3]
+ boost/spirit/home/x3/support/utility/sfinae.hpp [2:3]
+ boost/spirit/home/x3/support/utility/utf8.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a1b12dcef6e1643e121684b10b24a56c
+BELONGS ya.make
+ License text:
+ Copyright (c) 2012 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/boost_tuple/mpl/clear.hpp [2:2]
+ boost/fusion/adapted/std_tuple/mpl/clear.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a25eff9ab0b3a407f0a3f23d36b9b9a8
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006.
+ // Copyright Paul A. Bristow 2006, 2012, 2017.
+ // Copyright Thomas Mang 2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/students_t.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a267d25ab38b694607444c96c52b7363
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/algorithm/adjacent_find.hpp at line 3, boost/range/algorithm/binary_search.hpp at line 3, boost/range/algorithm/copy.hpp at line 3, boost/range/algorithm/copy_backward.hpp at line 3, boost/range/algorithm/count.hpp at line 3, boost/range/algorithm/count_if.hpp at line 3, boost/range/algorithm/equal.hpp at line 5, boost/range/algorithm/equal_range.hpp at line 3, boost/range/algorithm/fill.hpp at line 3, boost/range/algorithm/fill_n.hpp at line 3, boost/range/algorithm/find.hpp at line 3, boost/range/algorithm/find_end.hpp at line 3, boost/range/algorithm/find_first_of.hpp at line 3, boost/range/algorithm/find_if.hpp at line 3, boost/range/algorithm/for_each.hpp at line 3, boost/range/algorithm/generate.hpp at line 3, boost/range/algorithm/heap_algorithm.hpp at line 3, boost/range/algorithm/inplace_merge.hpp at line 3, boost/range/algorithm/lexicographical_compare.hpp at line 3, boost/range/algorithm/lower_bound.hpp at line 3, boost/range/algorithm/max_element.hpp at line 3, boost/range/algorithm/merge.hpp at line 3, boost/range/algorithm/min_element.hpp at line 3, boost/range/algorithm/mismatch.hpp at line 3, boost/range/algorithm/nth_element.hpp at line 3, boost/range/algorithm/partial_sort.hpp at line 3, boost/range/algorithm/partial_sort_copy.hpp at line 3, boost/range/algorithm/partition.hpp at line 3, boost/range/algorithm/permutation.hpp at line 3, boost/range/algorithm/random_shuffle.hpp at line 3, boost/range/algorithm/remove.hpp at line 3, boost/range/algorithm/remove_copy.hpp at line 3, boost/range/algorithm/remove_copy_if.hpp at line 3, boost/range/algorithm/remove_if.hpp at line 3, boost/range/algorithm/replace.hpp at line 3, boost/range/algorithm/replace_copy.hpp at line 3, boost/range/algorithm/replace_copy_if.hpp at line 3, boost/range/algorithm/replace_if.hpp at line 3, boost/range/algorithm/reverse.hpp at line 3, boost/range/algorithm/reverse_copy.hpp at line 3, boost/range/algorithm/rotate.hpp at line 3, boost/range/algorithm/rotate_copy.hpp at line 3, boost/range/algorithm/search.hpp at line 3, boost/range/algorithm/search_n.hpp at line 3, boost/range/algorithm/set_algorithm.hpp at line 3, boost/range/algorithm/sort.hpp at line 3, boost/range/algorithm/stable_partition.hpp at line 3, boost/range/algorithm/stable_sort.hpp at line 3, boost/range/algorithm/swap_ranges.hpp at line 3, boost/range/algorithm/transform.hpp at line 3, boost/range/algorithm/unique.hpp at line 3, boost/range/algorithm/unique_copy.hpp at line 3, boost/range/algorithm/upper_bound.hpp at line 3, boost/range/algorithm_ext/copy_n.hpp at line 3, boost/range/algorithm_ext/erase.hpp at line 5, boost/range/algorithm_ext/for_each.hpp at line 5, boost/range/algorithm_ext/insert.hpp at line 5, boost/range/algorithm_ext/iota.hpp at line 5, boost/range/algorithm_ext/is_sorted.hpp at line 3, boost/range/algorithm_ext/overwrite.hpp at line 5, boost/range/algorithm_ext/push_back.hpp at line 5, boost/range/algorithm_ext/push_front.hpp at line 5, boost/range/concepts.hpp at line 5, boost/range/detail/demote_iterator_traversal_tag.hpp at line 5, boost/range/detail/join_iterator.hpp at line 5, boost/range/detail/misc_concept.hpp at line 5, boost/range/detail/range_return.hpp at line 3, boost/range/iterator_range.hpp at line 5, boost/range/iterator_range_io.hpp at line 5, boost/range/join.hpp at line 5, boost/range/sub_range.hpp at line 5
+ License text:
+ // Copyright Neil Groves 2009. Use, modification and distribution
+ // are subject to the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/algorithm/adjacent_find.hpp [1:3]
+ boost/range/algorithm/binary_search.hpp [1:3]
+ boost/range/algorithm/copy.hpp [1:3]
+ boost/range/algorithm/copy_backward.hpp [1:3]
+ boost/range/algorithm/count.hpp [1:3]
+ boost/range/algorithm/count_if.hpp [1:3]
+ boost/range/algorithm/equal.hpp [3:5]
+ boost/range/algorithm/equal_range.hpp [1:3]
+ boost/range/algorithm/fill.hpp [1:3]
+ boost/range/algorithm/fill_n.hpp [1:3]
+ boost/range/algorithm/find.hpp [1:3]
+ boost/range/algorithm/find_end.hpp [1:3]
+ boost/range/algorithm/find_first_of.hpp [1:3]
+ boost/range/algorithm/find_if.hpp [1:3]
+ boost/range/algorithm/for_each.hpp [1:3]
+ boost/range/algorithm/generate.hpp [1:3]
+ boost/range/algorithm/heap_algorithm.hpp [1:3]
+ boost/range/algorithm/inplace_merge.hpp [1:3]
+ boost/range/algorithm/lexicographical_compare.hpp [1:3]
+ boost/range/algorithm/lower_bound.hpp [1:3]
+ boost/range/algorithm/max_element.hpp [1:3]
+ boost/range/algorithm/merge.hpp [1:3]
+ boost/range/algorithm/min_element.hpp [1:3]
+ boost/range/algorithm/mismatch.hpp [1:3]
+ boost/range/algorithm/nth_element.hpp [1:3]
+ boost/range/algorithm/partial_sort.hpp [1:3]
+ boost/range/algorithm/partial_sort_copy.hpp [1:3]
+ boost/range/algorithm/partition.hpp [1:3]
+ boost/range/algorithm/permutation.hpp [1:3]
+ boost/range/algorithm/random_shuffle.hpp [1:3]
+ boost/range/algorithm/remove.hpp [1:3]
+ boost/range/algorithm/remove_copy.hpp [1:3]
+ boost/range/algorithm/remove_copy_if.hpp [1:3]
+ boost/range/algorithm/remove_if.hpp [1:3]
+ boost/range/algorithm/replace.hpp [1:3]
+ boost/range/algorithm/replace_copy.hpp [1:3]
+ boost/range/algorithm/replace_copy_if.hpp [1:3]
+ boost/range/algorithm/replace_if.hpp [1:3]
+ boost/range/algorithm/reverse.hpp [1:3]
+ boost/range/algorithm/reverse_copy.hpp [1:3]
+ boost/range/algorithm/rotate.hpp [1:3]
+ boost/range/algorithm/rotate_copy.hpp [1:3]
+ boost/range/algorithm/search.hpp [1:3]
+ boost/range/algorithm/search_n.hpp [1:3]
+ boost/range/algorithm/set_algorithm.hpp [1:3]
+ boost/range/algorithm/sort.hpp [1:3]
+ boost/range/algorithm/stable_partition.hpp [1:3]
+ boost/range/algorithm/stable_sort.hpp [1:3]
+ boost/range/algorithm/swap_ranges.hpp [1:3]
+ boost/range/algorithm/transform.hpp [1:3]
+ boost/range/algorithm/unique.hpp [1:3]
+ boost/range/algorithm/unique_copy.hpp [1:3]
+ boost/range/algorithm/upper_bound.hpp [1:3]
+ boost/range/algorithm_ext/copy_n.hpp [1:3]
+ boost/range/algorithm_ext/erase.hpp [3:5]
+ boost/range/algorithm_ext/for_each.hpp [3:5]
+ boost/range/algorithm_ext/insert.hpp [3:5]
+ boost/range/algorithm_ext/iota.hpp [3:5]
+ boost/range/algorithm_ext/is_sorted.hpp [1:4]
+ boost/range/algorithm_ext/overwrite.hpp [3:5]
+ boost/range/algorithm_ext/push_back.hpp [3:5]
+ boost/range/algorithm_ext/push_front.hpp [3:5]
+ boost/range/concepts.hpp [3:5]
+ boost/range/detail/demote_iterator_traversal_tag.hpp [3:5]
+ boost/range/detail/join_iterator.hpp [3:5]
+ boost/range/detail/misc_concept.hpp [3:5]
+ boost/range/detail/range_return.hpp [1:3]
+ boost/range/iterator_range.hpp [3:5]
+ boost/range/iterator_range_io.hpp [3:5]
+ boost/range/join.hpp [3:5]
+ boost/range/sub_range.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL a29c00fe5b0061523a733babce737eee
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2011: Joachim Faulhaber
+ Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/interval_base_set.hpp [2:3]
+ boost/icl/map.hpp [2:2]
+ boost/icl/set.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a2ef13fa73a7e85b38cf6bc4b10345aa
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2007-10 Anthony Williams
+ // (C) Copyright 2011-2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/pthread/condition_variable.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL a3578986b89a9e4f4944d6e06bd16604
+BELONGS ya.make
+ License text:
+ // Copyright 2011-2012 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_erasure/exception.hpp [3:3]
+ boost/type_erasure/require_match.hpp [3:3]
+ boost/type_erasure/tuple.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a35b9ab4dc46c980de71e273c1106498
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003 Gerald I. Evenden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/sterea.hpp [26:26]
+
+KEEP COPYRIGHT_SERVICE_LABEL a3aea5c3abd2998ef419f4cfd468161c
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2011 Jรบlio Hoffimann.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/collectives/gatherv.hpp [1:1]
+ boost/mpi/collectives/scatterv.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL a3bf073a03ecfa244ec22a3a4fddf10d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/remove_extent.hpp at line 5
+ License text:
+ // Copyright Jonathan Turkanis 2005. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/detail/remove_extent.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a3ceba6f7698685b264af6347b8fb8c7
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_sync.hpp [12:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL a4132e16f1452f080d8f88a3ca863143
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/io/wkt/write.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL a41ad2da0912020d91a14b82ad75b7a9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2002 Lars Gullik Bjรธnnes <larsbj@lyx.org>
+ // Copyright 2003-2005 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/atomic_count_gcc.hpp [11:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL a427df9ff905dc0a2071778ea1acc982
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2012: Joachim Faulhaber
+ Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/detail/notate.hpp [4:4]
+ boost/icl/detail/set_algo.hpp [4:4]
+ boost/icl/interval_base_map.hpp [2:3]
+ boost/icl/interval_base_set.hpp [2:3]
+ boost/icl/interval_set.hpp [2:3]
+ boost/icl/split_interval_map.hpp [2:3]
+ boost/icl/split_interval_set.hpp [2:3]
+ boost/icl/type_traits/to_string.hpp [4:4]
+ boost/icl/type_traits/value_size.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a4d2f494b445bbe883a6e73ea92be0a4
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/area.hpp [3:6]
+ boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp [3:4]
+ boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp [3:4]
+ boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp [3:4]
+ boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp [3:4]
+ boost/geometry/algorithms/detail/has_self_intersections.hpp [3:4]
+ boost/geometry/algorithms/detail/is_valid/polygon.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/ring.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/add_rings.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/assign_parents.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/follow.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/get_turn_info.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/handle_colocations.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/is_self_turn.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/self_turn_points.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/sort_by_side.hpp [3:4]
+ boost/geometry/algorithms/detail/partition.hpp [3:4]
+ boost/geometry/algorithms/detail/relate/result.hpp [3:4]
+ boost/geometry/algorithms/detail/throw_on_empty_input.hpp [3:6]
+ boost/geometry/index/detail/algorithms/nth_element.hpp [3:3]
+ boost/geometry/io/wkt/read.hpp [3:6]
+ boost/geometry/strategies/area.hpp [3:6]
+ boost/geometry/strategies/area_result.hpp [3:3]
+ boost/geometry/strategies/cartesian/area.hpp [3:6]
+ boost/geometry/strategies/cartesian/area_surveyor.hpp [3:6]
+ boost/geometry/strategies/cartesian/centroid_average.hpp [3:6]
+ boost/geometry/strategies/concepts/area_concept.hpp [3:6]
+ boost/geometry/strategies/default_area_result.hpp [3:6]
+ boost/geometry/strategies/geographic/area.hpp [3:3]
+ boost/geometry/strategies/geographic/intersection.hpp [3:3]
+ boost/geometry/strategies/spherical/area.hpp [3:3]
+ boost/geometry/strategies/spherical/get_radius.hpp [3:3]
+ boost/geometry/strategies/spherical/intersection.hpp [3:3]
+ boost/geometry/strategies/strategies.hpp [3:6]
+ boost/geometry/util/normalize_spheroidal_coordinates.hpp [3:3]
+ boost/geometry/util/select_sequence_element.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a4e48d0c3c15487e193bc519c6d274b8
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014 Roshan <thisisroshansmail@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/algorithm/detail/balanced_path.hpp [2:2]
+ boost/compute/algorithm/detail/binary_find.hpp [2:2]
+ boost/compute/algorithm/detail/compact.hpp [2:2]
+ boost/compute/algorithm/detail/merge_path.hpp [2:2]
+ boost/compute/algorithm/detail/merge_with_merge_path.hpp [2:2]
+ boost/compute/algorithm/detail/search_all.hpp [2:2]
+ boost/compute/algorithm/find_end.hpp [2:2]
+ boost/compute/algorithm/includes.hpp [2:2]
+ boost/compute/algorithm/is_permutation.hpp [2:2]
+ boost/compute/algorithm/next_permutation.hpp [2:2]
+ boost/compute/algorithm/partition_point.hpp [2:2]
+ boost/compute/algorithm/prev_permutation.hpp [2:2]
+ boost/compute/algorithm/rotate.hpp [2:2]
+ boost/compute/algorithm/rotate_copy.hpp [2:2]
+ boost/compute/algorithm/search.hpp [2:2]
+ boost/compute/algorithm/search_n.hpp [2:2]
+ boost/compute/algorithm/set_difference.hpp [2:2]
+ boost/compute/algorithm/set_intersection.hpp [2:2]
+ boost/compute/algorithm/set_symmetric_difference.hpp [2:2]
+ boost/compute/algorithm/set_union.hpp [2:2]
+ boost/compute/algorithm/stable_partition.hpp [2:2]
+ boost/compute/algorithm/unique.hpp [2:2]
+ boost/compute/algorithm/unique_copy.hpp [2:2]
+ boost/compute/random/bernoulli_distribution.hpp [2:2]
+ boost/compute/random/discrete_distribution.hpp [2:2]
+ boost/compute/random/linear_congruential_engine.hpp [2:2]
+ boost/compute/random/uniform_int_distribution.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a51c313c96c40df66faddb32c40c8845
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/composite/alternative.hpp [2:5]
+ boost/spirit/home/classic/core/composite/difference.hpp [2:5]
+ boost/spirit/home/classic/core/composite/exclusive_or.hpp [2:5]
+ boost/spirit/home/classic/core/composite/impl/alternative.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/difference.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/directives.ipp [2:6]
+ boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/intersection.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/kleene_star.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/list.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/optional.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/positive.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequence.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequential_and.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequential_or.ipp [2:5]
+ boost/spirit/home/classic/core/composite/intersection.hpp [2:5]
+ boost/spirit/home/classic/core/composite/kleene_star.hpp [2:5]
+ boost/spirit/home/classic/core/composite/list.hpp [2:5]
+ boost/spirit/home/classic/core/composite/operators.hpp [2:5]
+ boost/spirit/home/classic/core/composite/optional.hpp [2:5]
+ boost/spirit/home/classic/core/composite/positive.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequence.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequential_and.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequential_or.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a53a4399b67c24bd1f890aba101e2930
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Howard Hinnant
+ // Copyright 2008 Beman Dawes
+ // Copyright 2009-2011 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/duration.hpp [3:5]
+ boost/chrono/system_clocks.hpp [3:5]
+ boost/chrono/time_point.hpp [3:5]
+ boost/ratio/detail/overflow_helpers.hpp [3:5]
+ boost/ratio/ratio.hpp [3:5]
+ boost/ratio/ratio_fwd.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a542bc4ffee8ff4fefee589d7e422332
+BELONGS ya.make
+ License text:
+ Copyright (c) 2004 Angus Leeming
+ Copyright (c) 2006 Daniel Wallin
+ Copyright (c) 2005 Dan Marsden
+ Copyright (c) 2007 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl/algorithm.hpp [2:5]
+ boost/phoenix/stl/container.hpp [2:3]
+ boost/phoenix/stl/container/container.hpp [2:3]
+ boost/phoenix/stl/container/detail/container.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a546abb712c04722f781d7f8e7ebc8c7
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2013 Eurodecision
+ // Authors: Guillaume Pinot
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_map/compose_property_map.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a57d11db934fe228c75f45e9ec83e339
+BELONGS ya.make
+ License text:
+ @copyright Louis Dionne 2013-2017
+ @copyright Jason Rice 2017
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hana/at_key.hpp [5:8]
+ boost/hana/detail/index_if.hpp [5:8]
+ boost/hana/find_if.hpp [5:8]
+ boost/hana/fwd/index_if.hpp [5:8]
+ boost/hana/index_if.hpp [5:8]
+ boost/hana/tuple.hpp [5:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL a57e7bc1a642b17ae2068cf3d13d7cec
+BELONGS ya.make
+ License text:
+ Copyright (c) Marshall Clow 2011-2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/cxx11/copy_n.hpp [2:2]
+ boost/algorithm/cxx11/find_if_not.hpp [2:2]
+ boost/algorithm/cxx11/is_partitioned.hpp [2:2]
+ boost/algorithm/cxx11/is_permutation.hpp [2:2]
+ boost/algorithm/cxx11/partition_copy.hpp [2:2]
+ boost/algorithm/cxx11/partition_point.hpp [2:2]
+ boost/algorithm/hex.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a581ea4614243c73584c408309608092
+BELONGS ya.make
+ License text:
+ // (C) Copyright Joaquin M Lopez Munoz 2006-2013
+ // (C) Copyright Ion Gaztanaga 2014-2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/detail/ebo_functor_holder.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a59f2047a630f8952ca52dde7c3dd260
+BELONGS ya.make
+ License text:
+ // Copyright 2014 LASMEA UMR 6602 CNRS/Univ. Clermont II
+ // Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+ // Copyright 2014 MetaScale SAS
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/nt2/nt2_copy.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a5dd7d1f5a4a8ccb330aa699dc8acc9f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005, 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+ // Copyright (C) 2016 K. Noel Belcourt <kbelco -at- sandia.gov>.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/collectives/all_gather.hpp [1:1]
+ boost/mpi/collectives/all_gatherv.hpp [1:1]
+ boost/mpi/collectives/all_to_all.hpp [1:1]
+ boost/mpi/collectives/broadcast.hpp [1:1]
+ boost/mpi/collectives/gather.hpp [1:1]
+ boost/mpi/collectives/scatter.hpp [1:1]
+ boost/mpi/communicator.hpp [1:2]
+ boost/mpi/detail/broadcast_sc.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL a5ea09ee095272ea2e3f101bf6849666
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002, 2003 Peter Dimov
+ // Copyright (c) 2003 Daniel Frey
+ // Copyright (c) 2003 Howard Hinnant
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/checked_delete.hpp [13:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL a5eedf01d2ff92e079b113bd7640a18e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/range_fwd.hpp at line 5
+ License text:
+ // Copyright Neil Groves 2003-2004.
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/range_fwd.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a5ff08d3c46ed63807fc02b63b95a45c
+BELONGS ya.make
+ License text:
+ Copyright 2012-2013 Andreas Angelopoulos
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp [6:8]
+ boost/numeric/odeint/external/mtl4/mtl4_resize.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL a6413cb4e8168913b2c37765900ff385
+BELONGS ya.make
+ License text:
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_abs.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp [9:10]
+ boost/numeric/odeint/integrate/detail/functors.hpp [9:10]
+ boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp [9:10]
+ boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/functors.hpp [9:10]
+ boost/numeric/odeint/iterator/n_step_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/n_step_time_iterator.hpp [11:12]
+ boost/numeric/odeint/iterator/times_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/times_time_iterator.hpp [11:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL a6d2481bfa41c78d4c8e8538ea484d02
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2001-2004
+ // Copyright Dave Abrahams 2001-2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/reverse_iter_fold.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL a6d72e2504df6c83ce797b15cdb057db
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/change_error_message.hpp at line 6, boost/metaparse/v1/debug_parsing_error.hpp at line 6, boost/metaparse/v1/entire_input.hpp at line 6, boost/metaparse/v1/foldl.hpp at line 6, boost/metaparse/v1/foldl1.hpp at line 6, boost/metaparse/v1/foldr1.hpp at line 6, boost/metaparse/v1/get_col.hpp at line 6, boost/metaparse/v1/get_line.hpp at line 6, boost/metaparse/v1/get_position.hpp at line 6, boost/metaparse/v1/get_prev_char.hpp at line 6, boost/metaparse/v1/get_remaining.hpp at line 6, boost/metaparse/v1/get_result.hpp at line 6, boost/metaparse/v1/int_.hpp at line 6, boost/metaparse/v1/is_error.hpp at line 6, boost/metaparse/v1/iterate_c.hpp at line 6, boost/metaparse/v1/look_ahead.hpp at line 6, boost/metaparse/v1/next_char.hpp at line 6, boost/metaparse/v1/next_line.hpp at line 6, boost/metaparse/v1/one_char_except.hpp at line 6, boost/metaparse/v1/one_char_except_c.hpp at line 6, boost/metaparse/v1/source_position.hpp at line 6, boost/metaparse/v1/unless_error.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2011.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/change_error_message.hpp [4:6]
+ boost/metaparse/v1/debug_parsing_error.hpp [4:6]
+ boost/metaparse/v1/entire_input.hpp [4:6]
+ boost/metaparse/v1/foldl.hpp [4:6]
+ boost/metaparse/v1/foldl1.hpp [4:6]
+ boost/metaparse/v1/foldr1.hpp [4:6]
+ boost/metaparse/v1/get_col.hpp [4:6]
+ boost/metaparse/v1/get_line.hpp [4:6]
+ boost/metaparse/v1/get_position.hpp [4:6]
+ boost/metaparse/v1/get_prev_char.hpp [4:6]
+ boost/metaparse/v1/get_remaining.hpp [4:6]
+ boost/metaparse/v1/get_result.hpp [4:6]
+ boost/metaparse/v1/int_.hpp [4:6]
+ boost/metaparse/v1/is_error.hpp [4:6]
+ boost/metaparse/v1/iterate_c.hpp [4:6]
+ boost/metaparse/v1/look_ahead.hpp [4:6]
+ boost/metaparse/v1/next_char.hpp [4:6]
+ boost/metaparse/v1/next_line.hpp [4:6]
+ boost/metaparse/v1/one_char_except.hpp [4:6]
+ boost/metaparse/v1/one_char_except_c.hpp [4:6]
+ boost/metaparse/v1/source_position.hpp [4:6]
+ boost/metaparse/v1/unless_error.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL a6dc9218b480c1cfac28c3b861e08fb7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/optional.hpp at line 5
+ License text:
+ // (C) Copyright 2002-4 Pavel Vozenilek .
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/optional.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a6ef7153044344ef13f1aa7f6f26a4df
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multi_index/detail/header_holder.hpp at line 3
+ License text:
+ /* Copyright 2003-2008 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multi_index/detail/header_holder.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a6fd7216a1ac9930b2655802aed9e478
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/discrete_distribution.hpp at line 5
+ License text:
+ * Copyright Steven Watanabe 2009-2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/discrete_distribution.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a70d1de046a7f07a72bd05b73f591262
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2009-2010 Hartmut Kaiser
+ Copyright (c) 2010-2011 Christopher Schmidt
+ Copyright (c) 2013-2014 Damien Buhl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/adt/adapt_adt.hpp [2:5]
+ boost/fusion/adapted/adt/adapt_adt_named.hpp [2:4]
+ boost/fusion/adapted/struct/adapt_struct_named.hpp [2:4]
+ boost/fusion/adapted/struct/detail/namespace.hpp [2:3]
+ boost/fusion/adapted/struct/detail/proxy_type.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a710f97cab1f756de65cb7fa81633cdb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/array/data.hpp at line 5, boost/preprocessor/array/elem.hpp at line 5, boost/preprocessor/array/insert.hpp at line 5, boost/preprocessor/array/pop_back.hpp at line 5, boost/preprocessor/array/pop_front.hpp at line 5, boost/preprocessor/array/push_back.hpp at line 5, boost/preprocessor/array/push_front.hpp at line 5, boost/preprocessor/array/remove.hpp at line 5, boost/preprocessor/array/replace.hpp at line 5, boost/preprocessor/array/reverse.hpp at line 5, boost/preprocessor/array/size.hpp at line 5, boost/preprocessor/assert_msg.hpp at line 5, boost/preprocessor/comma.hpp at line 5, boost/preprocessor/comma_if.hpp at line 5, boost/preprocessor/control.hpp at line 5, boost/preprocessor/control/deduce_d.hpp at line 5, boost/preprocessor/control/expr_iif.hpp at line 5, boost/preprocessor/control/iif.hpp at line 5, boost/preprocessor/debug.hpp at line 5, boost/preprocessor/debug/error.hpp at line 5, boost/preprocessor/debug/line.hpp at line 5, boost/preprocessor/dec.hpp at line 5, boost/preprocessor/detail/auto_rec.hpp at line 5, boost/preprocessor/detail/check.hpp at line 5, boost/preprocessor/detail/dmc/auto_rec.hpp at line 5, boost/preprocessor/detail/is_binary.hpp at line 5, boost/preprocessor/detail/is_nullary.hpp at line 5, boost/preprocessor/detail/is_unary.hpp at line 5, boost/preprocessor/detail/null.hpp at line 5, boost/preprocessor/detail/split.hpp at line 5, boost/preprocessor/empty.hpp at line 5, boost/preprocessor/enum.hpp at line 5, boost/preprocessor/enum_params.hpp at line 5, boost/preprocessor/enum_params_with_a_default.hpp at line 5, boost/preprocessor/enum_params_with_defaults.hpp at line 5, boost/preprocessor/enum_shifted.hpp at line 5, boost/preprocessor/enum_shifted_params.hpp at line 5, boost/preprocessor/expand.hpp at line 5, boost/preprocessor/expr_if.hpp at line 5, boost/preprocessor/facilities/apply.hpp at line 5, boost/preprocessor/facilities/intercept.hpp at line 5, boost/preprocessor/for.hpp at line 5, boost/preprocessor/identity.hpp at line 5, boost/preprocessor/if.hpp at line 5, boost/preprocessor/inc.hpp at line 5, boost/preprocessor/iterate.hpp at line 5, boost/preprocessor/iteration.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower1.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower2.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower3.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower4.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower5.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper1.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper2.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper3.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper4.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper5.hpp at line 5, boost/preprocessor/iteration/detail/finish.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward1.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward2.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward3.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward4.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward5.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse1.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse2.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse3.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse4.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse5.hpp at line 5, boost/preprocessor/iteration/detail/local.hpp at line 5, boost/preprocessor/iteration/detail/rlocal.hpp at line 5, boost/preprocessor/iteration/detail/self.hpp at line 5, boost/preprocessor/iteration/detail/start.hpp at line 5, boost/preprocessor/iteration/iterate.hpp at line 5, boost/preprocessor/iteration/local.hpp at line 5, boost/preprocessor/iteration/self.hpp at line 5, boost/preprocessor/limits.hpp at line 5, boost/preprocessor/logical/bitand.hpp at line 5, boost/preprocessor/logical/bitnor.hpp at line 5, boost/preprocessor/logical/bitor.hpp at line 5, boost/preprocessor/logical/bitxor.hpp at line 5, boost/preprocessor/logical/compl.hpp at line 5, boost/preprocessor/max.hpp at line 5, boost/preprocessor/min.hpp at line 5, boost/preprocessor/punctuation.hpp at line 5, boost/preprocessor/punctuation/paren.hpp at line 5, boost/preprocessor/punctuation/paren_if.hpp at line 5, boost/preprocessor/repeat.hpp at line 5, boost/preprocessor/repeat_2nd.hpp at line 5, boost/preprocessor/repeat_3rd.hpp at line 5, boost/preprocessor/repeat_from_to.hpp at line 5, boost/preprocessor/repeat_from_to_2nd.hpp at line 5, boost/preprocessor/repeat_from_to_3rd.hpp at line 5, boost/preprocessor/repetition.hpp at line 5, boost/preprocessor/repetition/deduce_r.hpp at line 5, boost/preprocessor/repetition/deduce_z.hpp at line 5, boost/preprocessor/repetition/enum_binary_params.hpp at line 5, boost/preprocessor/repetition/enum_trailing.hpp at line 5, boost/preprocessor/repetition/enum_trailing_binary_params.hpp at line 5, boost/preprocessor/repetition/enum_trailing_params.hpp at line 5, boost/preprocessor/selection.hpp at line 5, boost/preprocessor/seq/cat.hpp at line 5, boost/preprocessor/seq/detail/split.hpp at line 5, boost/preprocessor/seq/elem.hpp at line 5, boost/preprocessor/seq/enum.hpp at line 5, boost/preprocessor/seq/filter.hpp at line 5, boost/preprocessor/seq/first_n.hpp at line 5, boost/preprocessor/seq/fold_left.hpp at line 5, boost/preprocessor/seq/fold_right.hpp at line 5, boost/preprocessor/seq/for_each.hpp at line 5, boost/preprocessor/seq/for_each_i.hpp at line 5, boost/preprocessor/seq/for_each_product.hpp at line 5, boost/preprocessor/seq/insert.hpp at line 5, boost/preprocessor/seq/pop_back.hpp at line 5, boost/preprocessor/seq/pop_front.hpp at line 5, boost/preprocessor/seq/push_back.hpp at line 5, boost/preprocessor/seq/push_front.hpp at line 5, boost/preprocessor/seq/remove.hpp at line 5, boost/preprocessor/seq/replace.hpp at line 5, boost/preprocessor/seq/rest_n.hpp at line 5, boost/preprocessor/seq/reverse.hpp at line 5, boost/preprocessor/seq/seq.hpp at line 5, boost/preprocessor/seq/size.hpp at line 5, boost/preprocessor/seq/subseq.hpp at line 5, boost/preprocessor/seq/to_array.hpp at line 5, boost/preprocessor/seq/to_tuple.hpp at line 5, boost/preprocessor/seq/transform.hpp at line 5, boost/preprocessor/slot.hpp at line 5, boost/preprocessor/slot/detail/def.hpp at line 5, boost/preprocessor/slot/detail/shared.hpp at line 5, boost/preprocessor/slot/detail/slot1.hpp at line 5, boost/preprocessor/slot/detail/slot2.hpp at line 5, boost/preprocessor/slot/detail/slot3.hpp at line 5, boost/preprocessor/slot/detail/slot4.hpp at line 5, boost/preprocessor/slot/detail/slot5.hpp at line 5, boost/preprocessor/slot/slot.hpp at line 5, boost/preprocessor/while.hpp at line 5, boost/preprocessor/wstringize.hpp at line 5
+ License text:
+ \# * (C) Copyright Paul Mensonides 2002.
+ \# * Distributed under the Boost Software License, Version 1.0. (See
+ \# * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/array/data.hpp [3:5]
+ boost/preprocessor/array/elem.hpp [3:5]
+ boost/preprocessor/array/insert.hpp [3:5]
+ boost/preprocessor/array/pop_back.hpp [3:5]
+ boost/preprocessor/array/pop_front.hpp [3:5]
+ boost/preprocessor/array/push_back.hpp [3:6]
+ boost/preprocessor/array/push_front.hpp [3:6]
+ boost/preprocessor/array/remove.hpp [3:5]
+ boost/preprocessor/array/replace.hpp [3:5]
+ boost/preprocessor/array/reverse.hpp [3:5]
+ boost/preprocessor/array/size.hpp [3:5]
+ boost/preprocessor/assert_msg.hpp [3:5]
+ boost/preprocessor/comma.hpp [3:5]
+ boost/preprocessor/comma_if.hpp [3:5]
+ boost/preprocessor/control.hpp [3:5]
+ boost/preprocessor/control/deduce_d.hpp [3:5]
+ boost/preprocessor/control/expr_iif.hpp [3:5]
+ boost/preprocessor/control/iif.hpp [3:5]
+ boost/preprocessor/debug.hpp [3:5]
+ boost/preprocessor/debug/error.hpp [3:5]
+ boost/preprocessor/debug/line.hpp [3:5]
+ boost/preprocessor/dec.hpp [3:5]
+ boost/preprocessor/detail/auto_rec.hpp [3:5]
+ boost/preprocessor/detail/check.hpp [3:5]
+ boost/preprocessor/detail/dmc/auto_rec.hpp [3:5]
+ boost/preprocessor/detail/is_binary.hpp [3:5]
+ boost/preprocessor/detail/is_nullary.hpp [3:5]
+ boost/preprocessor/detail/is_unary.hpp [3:5]
+ boost/preprocessor/detail/null.hpp [3:5]
+ boost/preprocessor/detail/split.hpp [3:5]
+ boost/preprocessor/empty.hpp [3:5]
+ boost/preprocessor/enum.hpp [3:5]
+ boost/preprocessor/enum_params.hpp [3:5]
+ boost/preprocessor/enum_params_with_a_default.hpp [3:5]
+ boost/preprocessor/enum_params_with_defaults.hpp [3:5]
+ boost/preprocessor/enum_shifted.hpp [3:5]
+ boost/preprocessor/enum_shifted_params.hpp [3:5]
+ boost/preprocessor/expand.hpp [3:5]
+ boost/preprocessor/expr_if.hpp [3:5]
+ boost/preprocessor/facilities/apply.hpp [3:5]
+ boost/preprocessor/facilities/intercept.hpp [3:5]
+ boost/preprocessor/for.hpp [3:5]
+ boost/preprocessor/identity.hpp [3:5]
+ boost/preprocessor/if.hpp [3:5]
+ boost/preprocessor/inc.hpp [3:5]
+ boost/preprocessor/iterate.hpp [3:5]
+ boost/preprocessor/iteration.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/lower1.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/lower2.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/lower3.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/lower4.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/lower5.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/upper1.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/upper2.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/upper3.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/upper4.hpp [3:5]
+ boost/preprocessor/iteration/detail/bounds/upper5.hpp [3:5]
+ boost/preprocessor/iteration/detail/finish.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/forward1.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/forward2.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/forward3.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/forward4.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/forward5.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/reverse1.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/reverse2.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/reverse3.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/reverse4.hpp [3:5]
+ boost/preprocessor/iteration/detail/iter/reverse5.hpp [3:5]
+ boost/preprocessor/iteration/detail/local.hpp [3:5]
+ boost/preprocessor/iteration/detail/rlocal.hpp [3:5]
+ boost/preprocessor/iteration/detail/self.hpp [3:5]
+ boost/preprocessor/iteration/detail/start.hpp [3:5]
+ boost/preprocessor/iteration/iterate.hpp [3:5]
+ boost/preprocessor/iteration/local.hpp [3:5]
+ boost/preprocessor/iteration/self.hpp [3:5]
+ boost/preprocessor/limits.hpp [3:5]
+ boost/preprocessor/logical/bitand.hpp [3:5]
+ boost/preprocessor/logical/bitnor.hpp [3:5]
+ boost/preprocessor/logical/bitor.hpp [3:5]
+ boost/preprocessor/logical/bitxor.hpp [3:5]
+ boost/preprocessor/logical/compl.hpp [3:5]
+ boost/preprocessor/max.hpp [3:5]
+ boost/preprocessor/min.hpp [3:5]
+ boost/preprocessor/punctuation.hpp [3:5]
+ boost/preprocessor/punctuation/paren.hpp [3:5]
+ boost/preprocessor/punctuation/paren_if.hpp [3:5]
+ boost/preprocessor/repeat.hpp [3:5]
+ boost/preprocessor/repeat_2nd.hpp [3:5]
+ boost/preprocessor/repeat_3rd.hpp [3:5]
+ boost/preprocessor/repeat_from_to.hpp [3:5]
+ boost/preprocessor/repeat_from_to_2nd.hpp [3:5]
+ boost/preprocessor/repeat_from_to_3rd.hpp [3:5]
+ boost/preprocessor/repetition.hpp [3:5]
+ boost/preprocessor/repetition/deduce_r.hpp [3:5]
+ boost/preprocessor/repetition/deduce_z.hpp [3:5]
+ boost/preprocessor/repetition/enum_binary_params.hpp [3:5]
+ boost/preprocessor/repetition/enum_trailing.hpp [3:5]
+ boost/preprocessor/repetition/enum_trailing_binary_params.hpp [3:5]
+ boost/preprocessor/repetition/enum_trailing_params.hpp [3:5]
+ boost/preprocessor/selection.hpp [3:5]
+ boost/preprocessor/seq/cat.hpp [3:5]
+ boost/preprocessor/seq/detail/split.hpp [3:5]
+ boost/preprocessor/seq/elem.hpp [3:5]
+ boost/preprocessor/seq/enum.hpp [3:5]
+ boost/preprocessor/seq/filter.hpp [3:5]
+ boost/preprocessor/seq/first_n.hpp [3:5]
+ boost/preprocessor/seq/fold_left.hpp [3:5]
+ boost/preprocessor/seq/fold_right.hpp [3:5]
+ boost/preprocessor/seq/for_each.hpp [3:5]
+ boost/preprocessor/seq/for_each_i.hpp [3:5]
+ boost/preprocessor/seq/for_each_product.hpp [3:5]
+ boost/preprocessor/seq/insert.hpp [3:5]
+ boost/preprocessor/seq/pop_back.hpp [3:5]
+ boost/preprocessor/seq/pop_front.hpp [3:5]
+ boost/preprocessor/seq/push_back.hpp [3:5]
+ boost/preprocessor/seq/push_front.hpp [3:5]
+ boost/preprocessor/seq/remove.hpp [3:5]
+ boost/preprocessor/seq/replace.hpp [3:5]
+ boost/preprocessor/seq/rest_n.hpp [3:5]
+ boost/preprocessor/seq/reverse.hpp [3:5]
+ boost/preprocessor/seq/seq.hpp [3:5]
+ boost/preprocessor/seq/size.hpp [3:5]
+ boost/preprocessor/seq/subseq.hpp [3:5]
+ boost/preprocessor/seq/to_array.hpp [3:5]
+ boost/preprocessor/seq/to_tuple.hpp [3:5]
+ boost/preprocessor/seq/transform.hpp [3:5]
+ boost/preprocessor/slot.hpp [3:5]
+ boost/preprocessor/slot/detail/def.hpp [3:5]
+ boost/preprocessor/slot/detail/shared.hpp [3:5]
+ boost/preprocessor/slot/detail/slot1.hpp [3:5]
+ boost/preprocessor/slot/detail/slot2.hpp [3:5]
+ boost/preprocessor/slot/detail/slot3.hpp [3:5]
+ boost/preprocessor/slot/detail/slot4.hpp [3:5]
+ boost/preprocessor/slot/detail/slot5.hpp [3:5]
+ boost/preprocessor/slot/slot.hpp [3:5]
+ boost/preprocessor/while.hpp [3:5]
+ boost/preprocessor/wstringize.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a717e4b7c213ca28bbeaec4750bb98ec
+BELONGS ya.make
+ License text:
+ // Copyright 2004, 2005 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/rmat_graph_generator.hpp [1:1]
+ boost/graph/erdos_renyi_generator.hpp [1:1]
+ boost/graph/fruchterman_reingold.hpp [1:1]
+ boost/graph/mesh_graph_generator.hpp [1:1]
+ boost/graph/point_traits.hpp [1:1]
+ boost/graph/rmat_graph_generator.hpp [1:1]
+ boost/graph/ssca_graph_generator.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL a7831931571cb11df5942e281a68009f
+BELONGS ya.make
+ License text:
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/algorithm.hpp [7:8]
+ boost/detail/binary_search.hpp [6:7]
+ boost/multi_array/algorithm.hpp [6:7]
+ boost/multi_index/detail/ord_index_impl.hpp [23:24]
+ boost/multi_index/detail/ord_index_node.hpp [23:24]
+ boost/multi_index/detail/ord_index_ops.hpp [23:24]
+
+KEEP COPYRIGHT_SERVICE_LABEL a7890834ac7e904f210a19fb2b0ad11d
+BELONGS ya.make
+ License text:
+ // Copyright Peter Dimov 2001
+ // Copyright Aleksey Gurtovoy 2001-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/basic_bind.hpp [5:6]
+ boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/basic_bind.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/bind.hpp [2:3]
+ boost/mpl/bind.hpp [9:10]
+ boost/mpl/protect.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL a791d76d11657f61fc7d724e28607e82
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/trackable.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/trackable.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL a7b291408d5b386698800c270987d816
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/qi/numeric/detail/numeric_utils.hpp [2:6]
+ boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL a7eb31adebbe4ac555a6d1f417f84187
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2012
+ // (C) Copyright Markus Schoepflin 2007
+ // (C) Copyright Bryce Lelbach 2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/detail/atomic.hpp [3:5]
+ boost/interprocess/detail/file_wrapper.hpp [3:5]
+ boost/interprocess/detail/managed_open_or_create_impl.hpp [3:5]
+ boost/interprocess/detail/ptime_wrk.hpp [3:5]
+ boost/interprocess/smart_ptr/detail/shared_count.hpp [5:9]
+ boost/interprocess/smart_ptr/enable_shared_from_this.hpp [5:8]
+ boost/interprocess/smart_ptr/intrusive_ptr.hpp [5:8]
+ boost/interprocess/smart_ptr/scoped_ptr.hpp [5:9]
+ boost/interprocess/smart_ptr/shared_ptr.hpp [5:9]
+ boost/interprocess/smart_ptr/weak_ptr.hpp [5:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL a8022a1fcbc50c9b88173a9ea8f85905
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/functional.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/functional.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a8052e92fe6f00f953d51bb1b9eabb8a
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2014 John Fletcher
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/bind/bind_member_variable.hpp [2:3]
+ boost/phoenix/bind/detail/cpp03/bind_member_function.hpp [2:3]
+ boost/phoenix/core/actor.hpp [2:5]
+ boost/phoenix/core/debug.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a81e6b59bf6cb32af7d53ed2b68efdcf
+BELONGS ya.make
+ License text:
+ Copyright 2012 Lucanus Simonson
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polygon/segment_utils.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL a81f16b19633169e29f73443fb23e585
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003 David Abrahams
+ // Copyright (c) 2003 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/quick_allocator.hpp [13:14]
+ boost/smart_ptr/detail/quick_allocator.hpp [13:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL a82e1cdd44c59d927ac69ec1ca05ab28
+BELONGS ya.make
+ License text:
+ // (C) Copyright Noel Belcourt 2007.
+ // Copyright 2017, NVIDIA CORPORATION.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/pgi.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a873bfeecc5128a8bf6d86778cd42652
+BELONGS ya.make
+ License text:
+ @copyright Louis Dionne 2016
+ @copyright Jason Rice 2016
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hana/concept/hashable.hpp [5:8]
+ boost/hana/detail/hash_table.hpp [5:8]
+ boost/hana/fwd/concept/hashable.hpp [5:8]
+ boost/hana/fwd/hash.hpp [5:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL a89f79f040019b19486891ea84fe064c
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2008-2016 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lockfree/detail/freelist.hpp [3:3]
+ boost/lockfree/lockfree_forward.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL a8a1037395e0ad6175aa2ab2e85af5b6
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2013.
+ // (C) Copyright Gennaro Prota 2003 - 2004.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/iterators.hpp [3:4]
+ boost/container/detail/transform_iterator.hpp [3:4]
+ boost/interprocess/detail/pointer_type.hpp [3:4]
+ boost/interprocess/detail/transform_iterator.hpp [3:4]
+ boost/interprocess/detail/utilities.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL a8b3a4297e61473986978ae0e07bca11
+BELONGS ya.make
+ License text:
+ // (C) Copyright Nick Thompson 2017.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/chebyshev.hpp [1:3]
+ boost/math/special_functions/chebyshev_transform.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a8d89d0d87e1b3d47b9f31d23c4eb2ce
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/home/classic/phoenix/new.hpp [3:5]
+ boost/spirit/repository/home/qi/directive/distinct.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a90d6f9cea595f4ae9c35ab6094b9c7f
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2003 Martin Wille
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/primitives/impl/primitives.ipp [2:4]
+ boost/spirit/home/classic/core/primitives/primitives.hpp [2:4]
+ boost/spirit/home/classic/meta/impl/parser_traits.ipp [2:5]
+ boost/spirit/home/classic/meta/parser_traits.hpp [2:5]
+ boost/spirit/home/classic/utility/scoped_lock.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL a94d96368a66ee33343f336d0ba81d21
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2011 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2011 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a9a214e2eed0b89d70377475968a7415
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/gcc.hpp [1:9]
+ boost/config/compiler/visualc.hpp [1:8]
+ boost/config/platform/macos.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a9c8a7c9fcd186be6ad7d96495fef966
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006-7, 2013-14.
+ // Copyright Paul A. Bristow 2007, 2013-14.
+ // Copyright Nikhar Agrawal 2013-14
+ // Copyright Christopher Kormanyos 2013-14
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/gamma.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a9d1fd602f0c19f310f168a4ca8ae204
+BELONGS libs/thread/ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/thread/src/win32/tss_pe.cpp [2:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL a9d5074bdc20d985f64135ae02f955a0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pending/container_traits.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pending/container_traits.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL a9eb6f13fc57f56c47d8459914a5a52e
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/detail/polygamma.hpp [3:8]
+ boost/math/special_functions/polygamma.hpp [3:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL aa0bfcec74e862504934e7d8670be932
+BELONGS ya.make
+ License text:
+ Copyright (c) 2009 Chris Hoeppler
+ Copyright (c) 2014 Lee Clagett
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/directive/confix.hpp [2:3]
+ boost/spirit/repository/home/qi/directive/confix.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL aa26c33c3118e86bb6d726d742cff87d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014 Mageswaran.D <mageswaran1989@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/algorithm/lexicographical_compare.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL aa2ee27a7e59b446f91a7e1ce9f20050
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/concepts/distributions.hpp [1:3]
+ boost/math/concepts/real_concept.hpp [1:3]
+ boost/math/concepts/std_real_concept.hpp [1:3]
+ boost/math/distributions/bernoulli.hpp [3:4]
+ boost/math/distributions/beta.hpp [3:4]
+ boost/math/distributions/binomial.hpp [3:4]
+ boost/math/distributions/detail/derived_accessors.hpp [1:3]
+ boost/math/distributions/exponential.hpp [1:3]
+ boost/math/distributions/extreme_value.hpp [1:3]
+ boost/math/distributions/fisher_f.hpp [1:1]
+ boost/math/distributions/gamma.hpp [1:3]
+ boost/math/distributions/lognormal.hpp [1:3]
+ boost/math/distributions/poisson.hpp [3:4]
+ boost/math/distributions/students_t.hpp [1:3]
+ boost/math/distributions/uniform.hpp [1:4]
+ boost/math/distributions/weibull.hpp [1:3]
+ boost/math/special_functions/binomial.hpp [1:3]
+ boost/math/special_functions/detail/ibeta_inverse.hpp [1:4]
+ boost/math/special_functions/detail/igamma_large.hpp [1:3]
+ boost/math/special_functions/detail/unchecked_factorial.hpp [1:3]
+ boost/math/special_functions/math_fwd.hpp [5:6]
+ boost/math/tools/promotion.hpp [3:4]
+ boost/math/tools/real_cast.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL aa4b6b5a567bcedd7e044e9f17cef556
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006-7, 2013-14.
+ // Copyright Paul A. Bristow 2007, 2013-14.
+ // Copyright Nikhar Agrawal 2013-14
+ // Copyright Christopher Kormanyos 2013-14
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/gamma.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL aa4f3bb63ff4fdd4e894b9af2925c00e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/auxiliary/attr.hpp [2:4]
+ boost/spirit/home/x3/core/parser.hpp [2:3]
+ boost/spirit/home/x3/directive/no_skip.hpp [2:4]
+ boost/spirit/home/x3/directive/skip.hpp [2:3]
+ boost/spirit/home/x3/support/traits/handles_container.hpp [2:3]
+ boost/spirit/home/x3/support/utility/sfinae.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL aa5d0b1566cd2b1ccc445732a6682e0d
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2004-2006 The Trustees of Indiana University.
+ // Copyright (C) 2002 Brad King and Douglas Gregor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/page_rank.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL aae0314f7fb4ec80f57017d1bfb6dba7
+BELONGS ya.make
+ License text:
+ @copyright Louis Dionne 2013-2017
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hana.hpp [6:8]
+ boost/hana/accessors.hpp [5:7]
+ boost/hana/adapt_adt.hpp [5:7]
+ boost/hana/adapt_struct.hpp [5:7]
+ boost/hana/adjust.hpp [5:7]
+ boost/hana/adjust_if.hpp [5:7]
+ boost/hana/all.hpp [5:7]
+ boost/hana/all_of.hpp [5:7]
+ boost/hana/and.hpp [5:7]
+ boost/hana/any.hpp [5:7]
+ boost/hana/any_of.hpp [5:7]
+ boost/hana/ap.hpp [5:7]
+ boost/hana/append.hpp [5:7]
+ boost/hana/assert.hpp [5:7]
+ boost/hana/at.hpp [5:7]
+ boost/hana/at_key.hpp [5:8]
+ boost/hana/back.hpp [5:7]
+ boost/hana/basic_tuple.hpp [5:7]
+ boost/hana/bool.hpp [5:7]
+ boost/hana/cartesian_product.hpp [5:7]
+ boost/hana/chain.hpp [5:7]
+ boost/hana/comparing.hpp [5:7]
+ boost/hana/concat.hpp [5:7]
+ boost/hana/concept.hpp [5:7]
+ boost/hana/concept/applicative.hpp [5:7]
+ boost/hana/concept/comonad.hpp [5:7]
+ boost/hana/concept/comparable.hpp [5:7]
+ boost/hana/concept/constant.hpp [5:7]
+ boost/hana/concept/euclidean_ring.hpp [5:7]
+ boost/hana/concept/foldable.hpp [5:7]
+ boost/hana/concept/functor.hpp [5:7]
+ boost/hana/concept/group.hpp [5:7]
+ boost/hana/concept/integral_constant.hpp [5:7]
+ boost/hana/concept/iterable.hpp [5:7]
+ boost/hana/concept/logical.hpp [5:7]
+ boost/hana/concept/metafunction.hpp [5:7]
+ boost/hana/concept/monad.hpp [5:7]
+ boost/hana/concept/monad_plus.hpp [5:7]
+ boost/hana/concept/monoid.hpp [5:7]
+ boost/hana/concept/orderable.hpp [5:7]
+ boost/hana/concept/product.hpp [5:7]
+ boost/hana/concept/ring.hpp [5:7]
+ boost/hana/concept/searchable.hpp [5:7]
+ boost/hana/concept/sequence.hpp [5:7]
+ boost/hana/concept/struct.hpp [5:7]
+ boost/hana/config.hpp [5:7]
+ boost/hana/contains.hpp [5:7]
+ boost/hana/core.hpp [5:7]
+ boost/hana/core/common.hpp [5:7]
+ boost/hana/core/default.hpp [5:7]
+ boost/hana/core/dispatch.hpp [5:7]
+ boost/hana/core/is_a.hpp [5:7]
+ boost/hana/core/make.hpp [5:7]
+ boost/hana/core/tag_of.hpp [5:7]
+ boost/hana/core/to.hpp [5:7]
+ boost/hana/core/when.hpp [5:7]
+ boost/hana/count.hpp [5:7]
+ boost/hana/count_if.hpp [5:7]
+ boost/hana/cycle.hpp [5:7]
+ boost/hana/define_struct.hpp [5:7]
+ boost/hana/detail/algorithm.hpp [5:7]
+ boost/hana/detail/any_of.hpp [5:7]
+ boost/hana/detail/array.hpp [5:7]
+ boost/hana/detail/canonical_constant.hpp [5:7]
+ boost/hana/detail/concepts.hpp [5:7]
+ boost/hana/detail/create.hpp [5:7]
+ boost/hana/detail/decay.hpp [6:8]
+ boost/hana/detail/dispatch_if.hpp [5:7]
+ boost/hana/detail/fast_and.hpp [5:7]
+ boost/hana/detail/first_unsatisfied_index.hpp [5:7]
+ boost/hana/detail/has_common_embedding.hpp [5:7]
+ boost/hana/detail/has_duplicates.hpp [5:7]
+ boost/hana/detail/index_if.hpp [5:8]
+ boost/hana/detail/integral_constant.hpp [6:8]
+ boost/hana/detail/intrinsics.hpp [5:7]
+ boost/hana/detail/nested_by.hpp [5:7]
+ boost/hana/detail/nested_by_fwd.hpp [5:7]
+ boost/hana/detail/nested_than.hpp [5:7]
+ boost/hana/detail/nested_than_fwd.hpp [5:7]
+ boost/hana/detail/nested_to.hpp [5:7]
+ boost/hana/detail/nested_to_fwd.hpp [5:7]
+ boost/hana/detail/operators/adl.hpp [5:7]
+ boost/hana/detail/operators/arithmetic.hpp [5:7]
+ boost/hana/detail/operators/comparable.hpp [5:7]
+ boost/hana/detail/operators/iterable.hpp [5:7]
+ boost/hana/detail/operators/logical.hpp [5:7]
+ boost/hana/detail/operators/monad.hpp [5:7]
+ boost/hana/detail/operators/orderable.hpp [5:7]
+ boost/hana/detail/operators/searchable.hpp [5:7]
+ boost/hana/detail/preprocessor.hpp [5:7]
+ boost/hana/detail/std_common_type.hpp [5:7]
+ boost/hana/detail/struct_macros.hpp [10:12]
+ boost/hana/detail/type_at.hpp [5:7]
+ boost/hana/detail/type_foldl1.hpp [5:7]
+ boost/hana/detail/type_foldr1.hpp [5:7]
+ boost/hana/detail/unpack_flatten.hpp [5:7]
+ boost/hana/detail/variadic/at.hpp [5:7]
+ boost/hana/detail/variadic/drop_into.hpp [5:7]
+ boost/hana/detail/variadic/foldl1.hpp [5:7]
+ boost/hana/detail/variadic/foldr1.hpp [5:7]
+ boost/hana/detail/variadic/reverse_apply.hpp [5:7]
+ boost/hana/detail/variadic/reverse_apply/flat.hpp [5:7]
+ boost/hana/detail/variadic/reverse_apply/unrolled.hpp [5:7]
+ boost/hana/detail/variadic/split_at.hpp [5:7]
+ boost/hana/detail/variadic/take.hpp [5:7]
+ boost/hana/detail/void_t.hpp [5:7]
+ boost/hana/detail/wrong.hpp [5:7]
+ boost/hana/difference.hpp [5:7]
+ boost/hana/div.hpp [5:7]
+ boost/hana/drop_back.hpp [5:7]
+ boost/hana/drop_front.hpp [5:7]
+ boost/hana/drop_front_exactly.hpp [5:7]
+ boost/hana/drop_while.hpp [5:7]
+ boost/hana/duplicate.hpp [5:7]
+ boost/hana/empty.hpp [5:7]
+ boost/hana/equal.hpp [5:7]
+ boost/hana/erase_key.hpp [5:7]
+ boost/hana/eval.hpp [5:7]
+ boost/hana/eval_if.hpp [5:7]
+ boost/hana/experimental/printable.hpp [5:7]
+ boost/hana/experimental/type_name.hpp [5:7]
+ boost/hana/experimental/types.hpp [5:7]
+ boost/hana/experimental/view.hpp [5:7]
+ boost/hana/ext/boost.hpp [5:7]
+ boost/hana/ext/boost/fusion.hpp [5:7]
+ boost/hana/ext/boost/fusion/deque.hpp [5:7]
+ boost/hana/ext/boost/fusion/detail/common.hpp [5:7]
+ boost/hana/ext/boost/fusion/list.hpp [5:7]
+ boost/hana/ext/boost/fusion/tuple.hpp [9:11]
+ boost/hana/ext/boost/fusion/vector.hpp [5:7]
+ boost/hana/ext/boost/mpl.hpp [5:7]
+ boost/hana/ext/boost/mpl/integral_c.hpp [5:7]
+ boost/hana/ext/boost/mpl/list.hpp [5:7]
+ boost/hana/ext/boost/mpl/vector.hpp [5:7]
+ boost/hana/ext/boost/tuple.hpp [5:7]
+ boost/hana/ext/std.hpp [5:7]
+ boost/hana/ext/std/array.hpp [5:7]
+ boost/hana/ext/std/integer_sequence.hpp [5:7]
+ boost/hana/ext/std/integral_constant.hpp [5:7]
+ boost/hana/ext/std/pair.hpp [5:7]
+ boost/hana/ext/std/ratio.hpp [5:7]
+ boost/hana/ext/std/tuple.hpp [5:7]
+ boost/hana/ext/std/vector.hpp [5:8]
+ boost/hana/extend.hpp [5:7]
+ boost/hana/extract.hpp [5:7]
+ boost/hana/fill.hpp [5:7]
+ boost/hana/filter.hpp [5:7]
+ boost/hana/find.hpp [5:7]
+ boost/hana/find_if.hpp [5:8]
+ boost/hana/first.hpp [5:7]
+ boost/hana/flatten.hpp [5:7]
+ boost/hana/fold.hpp [5:7]
+ boost/hana/fold_left.hpp [5:7]
+ boost/hana/fold_right.hpp [5:7]
+ boost/hana/for_each.hpp [5:7]
+ boost/hana/front.hpp [5:7]
+ boost/hana/functional.hpp [5:7]
+ boost/hana/functional/always.hpp [5:7]
+ boost/hana/functional/apply.hpp [5:7]
+ boost/hana/functional/arg.hpp [5:7]
+ boost/hana/functional/capture.hpp [5:7]
+ boost/hana/functional/compose.hpp [5:7]
+ boost/hana/functional/curry.hpp [5:7]
+ boost/hana/functional/demux.hpp [5:7]
+ boost/hana/functional/fix.hpp [5:7]
+ boost/hana/functional/flip.hpp [5:7]
+ boost/hana/functional/id.hpp [5:7]
+ boost/hana/functional/infix.hpp [5:7]
+ boost/hana/functional/iterate.hpp [5:7]
+ boost/hana/functional/lockstep.hpp [5:7]
+ boost/hana/functional/on.hpp [5:7]
+ boost/hana/functional/overload.hpp [5:7]
+ boost/hana/functional/overload_linearly.hpp [5:7]
+ boost/hana/functional/partial.hpp [5:7]
+ boost/hana/functional/placeholder.hpp [5:7]
+ boost/hana/functional/reverse_partial.hpp [5:7]
+ boost/hana/fuse.hpp [5:7]
+ boost/hana/fwd/accessors.hpp [5:7]
+ boost/hana/fwd/adapt_adt.hpp [5:7]
+ boost/hana/fwd/adapt_struct.hpp [5:7]
+ boost/hana/fwd/adjust.hpp [5:7]
+ boost/hana/fwd/adjust_if.hpp [5:7]
+ boost/hana/fwd/all.hpp [5:7]
+ boost/hana/fwd/all_of.hpp [5:7]
+ boost/hana/fwd/and.hpp [5:7]
+ boost/hana/fwd/any.hpp [5:7]
+ boost/hana/fwd/any_of.hpp [5:7]
+ boost/hana/fwd/ap.hpp [5:7]
+ boost/hana/fwd/append.hpp [5:7]
+ boost/hana/fwd/at.hpp [5:7]
+ boost/hana/fwd/at_key.hpp [5:7]
+ boost/hana/fwd/back.hpp [5:7]
+ boost/hana/fwd/basic_tuple.hpp [5:7]
+ boost/hana/fwd/bool.hpp [5:7]
+ boost/hana/fwd/cartesian_product.hpp [5:7]
+ boost/hana/fwd/chain.hpp [5:7]
+ boost/hana/fwd/comparing.hpp [5:7]
+ boost/hana/fwd/concat.hpp [5:7]
+ boost/hana/fwd/concept/applicative.hpp [5:7]
+ boost/hana/fwd/concept/comonad.hpp [5:7]
+ boost/hana/fwd/concept/comparable.hpp [5:7]
+ boost/hana/fwd/concept/constant.hpp [5:7]
+ boost/hana/fwd/concept/euclidean_ring.hpp [5:7]
+ boost/hana/fwd/concept/foldable.hpp [5:7]
+ boost/hana/fwd/concept/functor.hpp [5:7]
+ boost/hana/fwd/concept/group.hpp [5:7]
+ boost/hana/fwd/concept/integral_constant.hpp [5:7]
+ boost/hana/fwd/concept/iterable.hpp [5:7]
+ boost/hana/fwd/concept/logical.hpp [5:7]
+ boost/hana/fwd/concept/metafunction.hpp [5:7]
+ boost/hana/fwd/concept/monad.hpp [5:7]
+ boost/hana/fwd/concept/monad_plus.hpp [5:7]
+ boost/hana/fwd/concept/monoid.hpp [5:7]
+ boost/hana/fwd/concept/orderable.hpp [5:7]
+ boost/hana/fwd/concept/product.hpp [5:7]
+ boost/hana/fwd/concept/ring.hpp [5:7]
+ boost/hana/fwd/concept/searchable.hpp [5:7]
+ boost/hana/fwd/concept/sequence.hpp [5:7]
+ boost/hana/fwd/concept/struct.hpp [5:7]
+ boost/hana/fwd/contains.hpp [5:7]
+ boost/hana/fwd/core.hpp [5:7]
+ boost/hana/fwd/core/common.hpp [5:7]
+ boost/hana/fwd/core/default.hpp [5:7]
+ boost/hana/fwd/core/is_a.hpp [5:7]
+ boost/hana/fwd/core/make.hpp [5:7]
+ boost/hana/fwd/core/tag_of.hpp [5:7]
+ boost/hana/fwd/core/to.hpp [5:7]
+ boost/hana/fwd/core/when.hpp [5:7]
+ boost/hana/fwd/count.hpp [5:7]
+ boost/hana/fwd/count_if.hpp [5:7]
+ boost/hana/fwd/cycle.hpp [5:7]
+ boost/hana/fwd/define_struct.hpp [5:7]
+ boost/hana/fwd/difference.hpp [5:7]
+ boost/hana/fwd/div.hpp [5:7]
+ boost/hana/fwd/drop_back.hpp [5:7]
+ boost/hana/fwd/drop_front.hpp [5:7]
+ boost/hana/fwd/drop_front_exactly.hpp [5:7]
+ boost/hana/fwd/drop_while.hpp [5:7]
+ boost/hana/fwd/duplicate.hpp [5:7]
+ boost/hana/fwd/empty.hpp [5:7]
+ boost/hana/fwd/equal.hpp [5:7]
+ boost/hana/fwd/erase_key.hpp [5:7]
+ boost/hana/fwd/eval.hpp [5:7]
+ boost/hana/fwd/eval_if.hpp [5:7]
+ boost/hana/fwd/extend.hpp [5:7]
+ boost/hana/fwd/extract.hpp [5:7]
+ boost/hana/fwd/fill.hpp [5:7]
+ boost/hana/fwd/filter.hpp [5:7]
+ boost/hana/fwd/find.hpp [5:7]
+ boost/hana/fwd/find_if.hpp [5:7]
+ boost/hana/fwd/first.hpp [5:7]
+ boost/hana/fwd/flatten.hpp [5:7]
+ boost/hana/fwd/fold.hpp [5:7]
+ boost/hana/fwd/fold_left.hpp [5:7]
+ boost/hana/fwd/fold_right.hpp [5:7]
+ boost/hana/fwd/for_each.hpp [5:7]
+ boost/hana/fwd/front.hpp [5:7]
+ boost/hana/fwd/fuse.hpp [5:7]
+ boost/hana/fwd/greater.hpp [5:7]
+ boost/hana/fwd/greater_equal.hpp [5:7]
+ boost/hana/fwd/group.hpp [5:7]
+ boost/hana/fwd/if.hpp [5:7]
+ boost/hana/fwd/index_if.hpp [5:8]
+ boost/hana/fwd/insert.hpp [5:7]
+ boost/hana/fwd/insert_range.hpp [5:7]
+ boost/hana/fwd/integral_constant.hpp [5:7]
+ boost/hana/fwd/intersection.hpp [5:7]
+ boost/hana/fwd/intersperse.hpp [5:7]
+ boost/hana/fwd/is_disjoint.hpp [5:7]
+ boost/hana/fwd/is_empty.hpp [5:7]
+ boost/hana/fwd/is_subset.hpp [5:7]
+ boost/hana/fwd/keys.hpp [5:7]
+ boost/hana/fwd/lazy.hpp [5:7]
+ boost/hana/fwd/length.hpp [5:7]
+ boost/hana/fwd/less.hpp [5:7]
+ boost/hana/fwd/less_equal.hpp [5:7]
+ boost/hana/fwd/lexicographical_compare.hpp [5:7]
+ boost/hana/fwd/lift.hpp [5:7]
+ boost/hana/fwd/map.hpp [5:7]
+ boost/hana/fwd/max.hpp [5:7]
+ boost/hana/fwd/maximum.hpp [5:7]
+ boost/hana/fwd/members.hpp [5:7]
+ boost/hana/fwd/min.hpp [5:7]
+ boost/hana/fwd/minimum.hpp [5:7]
+ boost/hana/fwd/minus.hpp [5:7]
+ boost/hana/fwd/mod.hpp [5:7]
+ boost/hana/fwd/monadic_compose.hpp [5:7]
+ boost/hana/fwd/monadic_fold_left.hpp [5:7]
+ boost/hana/fwd/monadic_fold_right.hpp [5:7]
+ boost/hana/fwd/mult.hpp [5:7]
+ boost/hana/fwd/negate.hpp [5:7]
+ boost/hana/fwd/none.hpp [5:7]
+ boost/hana/fwd/none_of.hpp [5:7]
+ boost/hana/fwd/not.hpp [5:7]
+ boost/hana/fwd/not_equal.hpp [5:7]
+ boost/hana/fwd/one.hpp [5:7]
+ boost/hana/fwd/optional.hpp [5:7]
+ boost/hana/fwd/or.hpp [5:7]
+ boost/hana/fwd/ordering.hpp [5:7]
+ boost/hana/fwd/pair.hpp [5:7]
+ boost/hana/fwd/partition.hpp [5:7]
+ boost/hana/fwd/permutations.hpp [5:7]
+ boost/hana/fwd/plus.hpp [5:7]
+ boost/hana/fwd/power.hpp [5:7]
+ boost/hana/fwd/prefix.hpp [5:7]
+ boost/hana/fwd/prepend.hpp [5:7]
+ boost/hana/fwd/product.hpp [5:7]
+ boost/hana/fwd/range.hpp [5:7]
+ boost/hana/fwd/remove.hpp [5:7]
+ boost/hana/fwd/remove_at.hpp [5:7]
+ boost/hana/fwd/remove_if.hpp [5:7]
+ boost/hana/fwd/remove_range.hpp [5:7]
+ boost/hana/fwd/repeat.hpp [5:7]
+ boost/hana/fwd/replace.hpp [5:7]
+ boost/hana/fwd/replace_if.hpp [5:7]
+ boost/hana/fwd/replicate.hpp [5:7]
+ boost/hana/fwd/reverse.hpp [5:7]
+ boost/hana/fwd/reverse_fold.hpp [5:7]
+ boost/hana/fwd/scan_left.hpp [5:7]
+ boost/hana/fwd/scan_right.hpp [5:7]
+ boost/hana/fwd/second.hpp [5:7]
+ boost/hana/fwd/set.hpp [5:7]
+ boost/hana/fwd/size.hpp [5:7]
+ boost/hana/fwd/slice.hpp [5:7]
+ boost/hana/fwd/sort.hpp [5:7]
+ boost/hana/fwd/span.hpp [5:7]
+ boost/hana/fwd/string.hpp [5:7]
+ boost/hana/fwd/suffix.hpp [5:7]
+ boost/hana/fwd/sum.hpp [5:7]
+ boost/hana/fwd/symmetric_difference.hpp [5:7]
+ boost/hana/fwd/take_back.hpp [5:7]
+ boost/hana/fwd/take_front.hpp [5:7]
+ boost/hana/fwd/take_while.hpp [5:7]
+ boost/hana/fwd/tap.hpp [5:7]
+ boost/hana/fwd/then.hpp [5:7]
+ boost/hana/fwd/transform.hpp [5:7]
+ boost/hana/fwd/tuple.hpp [5:7]
+ boost/hana/fwd/type.hpp [5:7]
+ boost/hana/fwd/unfold_left.hpp [5:7]
+ boost/hana/fwd/unfold_right.hpp [5:7]
+ boost/hana/fwd/union.hpp [5:7]
+ boost/hana/fwd/unique.hpp [5:7]
+ boost/hana/fwd/unpack.hpp [5:7]
+ boost/hana/fwd/value.hpp [5:7]
+ boost/hana/fwd/while.hpp [5:7]
+ boost/hana/fwd/zero.hpp [5:7]
+ boost/hana/fwd/zip.hpp [5:7]
+ boost/hana/fwd/zip_shortest.hpp [5:7]
+ boost/hana/fwd/zip_shortest_with.hpp [5:7]
+ boost/hana/fwd/zip_with.hpp [5:7]
+ boost/hana/greater.hpp [5:7]
+ boost/hana/greater_equal.hpp [5:7]
+ boost/hana/group.hpp [5:7]
+ boost/hana/if.hpp [5:7]
+ boost/hana/index_if.hpp [5:8]
+ boost/hana/insert.hpp [5:7]
+ boost/hana/insert_range.hpp [5:7]
+ boost/hana/integral_constant.hpp [5:7]
+ boost/hana/intersection.hpp [5:7]
+ boost/hana/intersperse.hpp [5:7]
+ boost/hana/is_disjoint.hpp [5:7]
+ boost/hana/is_empty.hpp [5:7]
+ boost/hana/is_subset.hpp [5:7]
+ boost/hana/keys.hpp [5:7]
+ boost/hana/lazy.hpp [5:7]
+ boost/hana/length.hpp [5:7]
+ boost/hana/less.hpp [5:7]
+ boost/hana/less_equal.hpp [5:7]
+ boost/hana/lexicographical_compare.hpp [5:7]
+ boost/hana/lift.hpp [5:7]
+ boost/hana/map.hpp [5:7]
+ boost/hana/max.hpp [5:7]
+ boost/hana/maximum.hpp [5:7]
+ boost/hana/members.hpp [5:7]
+ boost/hana/min.hpp [5:7]
+ boost/hana/minimum.hpp [5:7]
+ boost/hana/minus.hpp [5:7]
+ boost/hana/mod.hpp [5:7]
+ boost/hana/monadic_compose.hpp [5:7]
+ boost/hana/monadic_fold_left.hpp [5:7]
+ boost/hana/monadic_fold_right.hpp [5:7]
+ boost/hana/mult.hpp [5:7]
+ boost/hana/negate.hpp [5:7]
+ boost/hana/none.hpp [5:7]
+ boost/hana/none_of.hpp [5:7]
+ boost/hana/not.hpp [5:7]
+ boost/hana/not_equal.hpp [5:7]
+ boost/hana/one.hpp [5:7]
+ boost/hana/optional.hpp [5:7]
+ boost/hana/or.hpp [5:7]
+ boost/hana/ordering.hpp [5:7]
+ boost/hana/pair.hpp [5:7]
+ boost/hana/partition.hpp [5:7]
+ boost/hana/permutations.hpp [5:7]
+ boost/hana/plus.hpp [5:7]
+ boost/hana/power.hpp [5:7]
+ boost/hana/prefix.hpp [5:7]
+ boost/hana/prepend.hpp [5:7]
+ boost/hana/product.hpp [5:7]
+ boost/hana/range.hpp [5:7]
+ boost/hana/remove.hpp [5:7]
+ boost/hana/remove_at.hpp [5:7]
+ boost/hana/remove_if.hpp [5:7]
+ boost/hana/remove_range.hpp [5:7]
+ boost/hana/repeat.hpp [5:7]
+ boost/hana/replace.hpp [5:7]
+ boost/hana/replace_if.hpp [5:7]
+ boost/hana/replicate.hpp [5:7]
+ boost/hana/reverse.hpp [5:7]
+ boost/hana/reverse_fold.hpp [5:7]
+ boost/hana/scan_left.hpp [5:7]
+ boost/hana/scan_right.hpp [5:7]
+ boost/hana/second.hpp [5:7]
+ boost/hana/set.hpp [5:7]
+ boost/hana/size.hpp [5:7]
+ boost/hana/slice.hpp [5:7]
+ boost/hana/sort.hpp [5:7]
+ boost/hana/span.hpp [5:7]
+ boost/hana/string.hpp [5:7]
+ boost/hana/suffix.hpp [5:7]
+ boost/hana/sum.hpp [5:7]
+ boost/hana/symmetric_difference.hpp [5:7]
+ boost/hana/take_back.hpp [5:7]
+ boost/hana/take_front.hpp [5:7]
+ boost/hana/take_while.hpp [5:7]
+ boost/hana/tap.hpp [5:7]
+ boost/hana/then.hpp [5:7]
+ boost/hana/traits.hpp [6:8]
+ boost/hana/transform.hpp [5:7]
+ boost/hana/tuple.hpp [5:8]
+ boost/hana/type.hpp [5:7]
+ boost/hana/unfold_left.hpp [5:7]
+ boost/hana/unfold_right.hpp [5:7]
+ boost/hana/union.hpp [5:7]
+ boost/hana/unique.hpp [5:7]
+ boost/hana/unpack.hpp [5:7]
+ boost/hana/value.hpp [5:7]
+ boost/hana/version.hpp [5:7]
+ boost/hana/while.hpp [5:7]
+ boost/hana/zero.hpp [5:7]
+ boost/hana/zip.hpp [5:7]
+ boost/hana/zip_shortest.hpp [5:7]
+ boost/hana/zip_shortest_with.hpp [5:7]
+ boost/hana/zip_with.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL aaff3eaecad3b3ed7e234cf1c70b346a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/throw_exception.hpp [19:20]
+
+KEEP COPYRIGHT_SERVICE_LABEL aaff8fbf592953725a89204981472fff
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes, 2009
+ // Copyright (C) 2011-2012 Vicente J. Botet Escriba
+ // Copyright (C) 2012 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/scoped_enum.hpp [3:5]
+ boost/core/underlying_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL ab0e461ec3c22b7d8e543cb65284d5ae
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2018 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/bitwise_cast.hpp [6:8]
+ boost/atomic/detail/caps_gcc_alpha.hpp [6:8]
+ boost/atomic/detail/caps_gcc_arm.hpp [6:10]
+ boost/atomic/detail/caps_gcc_ppc.hpp [6:8]
+ boost/atomic/detail/caps_gcc_x86.hpp [6:8]
+ boost/atomic/detail/caps_msvc_arm.hpp [6:8]
+ boost/atomic/detail/caps_msvc_x86.hpp [6:8]
+ boost/atomic/detail/caps_windows.hpp [6:8]
+ boost/atomic/detail/interlocked.hpp [4:5]
+ boost/atomic/detail/ops_gcc_alpha.hpp [6:8]
+ boost/atomic/detail/ops_gcc_arm.hpp [6:8]
+ boost/atomic/detail/ops_gcc_arm_common.hpp [6:8]
+ boost/atomic/detail/ops_gcc_ppc.hpp [6:8]
+ boost/atomic/detail/ops_gcc_ppc_common.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86_dcas-linux.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86_dcas-osx.hpp [6:8]
+ boost/atomic/detail/ops_gcc_x86_dcas.hpp [6:8]
+ boost/atomic/detail/ops_msvc_arm.hpp [6:8]
+ boost/atomic/detail/ops_msvc_common.hpp [6:8]
+ boost/atomic/detail/ops_msvc_x86.hpp [6:8]
+ boost/atomic/detail/ops_windows.hpp [6:8]
+ boost/atomic/detail/platform.hpp [6:7]
+ boost/atomic/detail/storage_type.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL ab1582f8f7920ffaebfb8d0874561682
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/correct_closure.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ab52442e18290412f599104f036282c6
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/intel.hpp [1:10]
+ boost/config/compiler/sunpro_cc.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL ab55c1af00e5063abe7c47185db8e544
+BELONGS ya.make
+ License text:
+ Copyright (c) 2011 Eric Niebler
+ Copyright (c) 2015 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/algorithm/iteration/accumulate_fwd.hpp [2:3]
+ boost/fusion/algorithm/iteration/detail/segmented_fold.hpp [2:2]
+ boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp [2:2]
+ boost/fusion/algorithm/iteration/fold_fwd.hpp [2:2]
+ boost/fusion/algorithm/iteration/for_each_fwd.hpp [2:2]
+ boost/fusion/algorithm/iteration/iter_fold_fwd.hpp [2:2]
+ boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp [2:2]
+ boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp [2:2]
+ boost/fusion/algorithm/query/detail/segmented_find.hpp [2:2]
+ boost/fusion/algorithm/query/detail/segmented_find_if.hpp [2:2]
+ boost/fusion/algorithm/query/find.hpp [2:3]
+ boost/fusion/algorithm/query/find_fwd.hpp [2:2]
+ boost/fusion/algorithm/query/find_if.hpp [2:3]
+ boost/fusion/algorithm/query/find_if_fwd.hpp [2:2]
+ boost/fusion/container/list/detail/reverse_cons.hpp [2:2]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector10_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector20_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector30_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector40_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector50_fwd.hpp [2:3]
+ boost/fusion/container/vector/detail/cpp03/vector10_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector10_fwd.hpp [31:32]
+ boost/fusion/container/vector/detail/cpp03/vector20_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector20_fwd.hpp [25:26]
+ boost/fusion/container/vector/detail/cpp03/vector30_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector30_fwd.hpp [25:26]
+ boost/fusion/container/vector/detail/cpp03/vector40_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector40_fwd.hpp [25:26]
+ boost/fusion/container/vector/detail/cpp03/vector50_fwd.hpp [3:4]
+ boost/fusion/container/vector/detail/cpp03/vector50_fwd.hpp [25:26]
+ boost/fusion/include/is_segmented.hpp [2:2]
+ boost/fusion/include/segmented_fold_until.hpp [2:2]
+ boost/fusion/include/segmented_iterator.hpp [2:2]
+ boost/fusion/include/segments.hpp [2:2]
+ boost/fusion/iterator/detail/segment_sequence.hpp [2:2]
+ boost/fusion/iterator/detail/segmented_equal_to.hpp [2:2]
+ boost/fusion/iterator/detail/segmented_iterator.hpp [2:2]
+ boost/fusion/iterator/detail/segmented_next_impl.hpp [2:2]
+ boost/fusion/iterator/segmented_iterator.hpp [2:2]
+ boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp [2:2]
+ boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp [2:2]
+ boost/fusion/sequence/intrinsic/detail/segmented_end.hpp [2:2]
+ boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp [2:2]
+ boost/fusion/sequence/intrinsic/detail/segmented_size.hpp [2:2]
+ boost/fusion/support/detail/segmented_fold_until_impl.hpp [2:2]
+ boost/fusion/support/segmented_fold_until.hpp [2:2]
+ boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp [2:2]
+ boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp [2:2]
+ boost/fusion/view/iterator_range/detail/segments_impl.hpp [2:2]
+ boost/fusion/view/iterator_range/detail/size_impl.hpp [2:2]
+ boost/fusion/view/joint_view/joint_view_fwd.hpp [2:2]
+ boost/fusion/view/single_view/detail/advance_impl.hpp [2:2]
+ boost/fusion/view/single_view/detail/at_impl.hpp [2:2]
+ boost/fusion/view/single_view/detail/begin_impl.hpp [2:3]
+ boost/fusion/view/single_view/detail/deref_impl.hpp [2:3]
+ boost/fusion/view/single_view/detail/distance_impl.hpp [2:2]
+ boost/fusion/view/single_view/detail/end_impl.hpp [2:3]
+ boost/fusion/view/single_view/detail/equal_to_impl.hpp [2:2]
+ boost/fusion/view/single_view/detail/next_impl.hpp [2:3]
+ boost/fusion/view/single_view/detail/prior_impl.hpp [2:2]
+ boost/fusion/view/single_view/detail/size_impl.hpp [2:2]
+ boost/fusion/view/single_view/detail/value_at_impl.hpp [2:2]
+ boost/fusion/view/single_view/detail/value_of_impl.hpp [2:3]
+ boost/fusion/view/single_view/single_view.hpp [2:3]
+ boost/fusion/view/single_view/single_view_iterator.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ab6e44ab43f9d94c918f3af9054f4430
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/comeau.hpp [1:8]
+ boost/config/platform/irix.hpp [1:4]
+ boost/config/platform/solaris.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ab71254ad02f316b826c74cda23fc7de
+BELONGS ya.make
+ License text:
+ // Copyright 2001 Universite Joseph Fourier, Grenoble.
+ // Author: Francois Faure
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/adjacency_list_io.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ab774de6282a1b30f7f425fb700259c5
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2016, 2017.
+ // Modifications copyright (c) 2016-2017, Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/strategies/cartesian/area.hpp [8:9]
+ boost/geometry/strategies/cartesian/area_surveyor.hpp [8:9]
+ boost/geometry/strategies/cartesian/box_in_box.hpp [8:9]
+ boost/geometry/strategies/intersection_strategies.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL ab7b56c39397a34cede4359db0be9235
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2008, 2016 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lockfree/detail/tagged_ptr.hpp [3:3]
+ boost/lockfree/detail/tagged_ptr_dcas.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ac00ecc6c5b600ddc218a5925ef8d1c6
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2014, 2015.
+ // Modifications copyright (c) 2014-2015 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/centroid.hpp [8:9]
+ boost/geometry/algorithms/convex_hull.hpp [7:8]
+ boost/geometry/io/wkt/read.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL ac019423baf07909ddd9038922e85359
+BELONGS ya.make
+ License text:
+ // Copyright 2005 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/accounting.hpp [1:1]
+ boost/graph/detail/indexed_properties.hpp [1:1]
+ boost/graph/dimacs.hpp [1:1]
+ boost/graph/distributed/hohberg_biconnected_components.hpp [1:1]
+ boost/graph/graph_stats.hpp [1:1]
+ boost/graph/metis.hpp [1:1]
+ boost/graph/parallel/basic_reduce.hpp [1:1]
+ boost/graph/parallel/detail/inplace_all_to_all.hpp [1:1]
+ boost/property_map/parallel/basic_reduce.hpp [1:1]
+ boost/property_map/parallel/global_index_map.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL ac25c56d5929cc20ba4b94f51c899d05
+BELONGS ya.make
+ License text:
+ // Copyright 2011, Andrew Ross
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polygon/detail/polygon_simplify.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL ac35770391c69072ea1722a98afaa216
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/facilities/is_1.hpp at line 5, boost/preprocessor/facilities/is_empty.hpp at line 5, boost/preprocessor/facilities/is_empty_or_1.hpp at line 5
+ License text:
+ \# * (C) Copyright Paul Mensonides 2003.
+ \# * Distributed under the Boost Software License, Version 1.0. (See
+ \# * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/facilities/is_1.hpp [3:5]
+ boost/preprocessor/facilities/is_empty.hpp [3:6]
+ boost/preprocessor/facilities/is_empty_or_1.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ac779fd1b3e977a7dddb992cc87eb8b1
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006-7, 2013-14.
+ // Copyright Paul A. Bristow 2007, 2013-14.
+ // Copyright Nikhar Agrawal 2013-14
+ // Copyright Christopher Kormanyos 2013-14
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/gamma.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ac83ed7b90a09af352c97496e6042a0d
+BELONGS ya.make
+ License text:
+ // Copyright Frank Mori Hess 2009
+ // Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/detail/foreign_ptr.hpp [4:6]
+ boost/signals2/detail/preprocessed_arg_type_template.hpp [1:1]
+ boost/signals2/detail/variadic_arg_type.hpp [1:1]
+ boost/signals2/detail/variadic_slot_invoker.hpp [7:9]
+ boost/signals2/signal_type.hpp [9:11]
+ boost/signals2/slot.hpp [3:3]
+ boost/signals2/variadic_signal.hpp [8:10]
+ boost/signals2/variadic_slot.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL acc348f5a2ea4eaed65d2d40f169ca8e
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2018 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/formulas/andoyer_inverse.hpp [3:3]
+ boost/geometry/formulas/vincenty_inverse.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL accedf6178f4d186ddc5b8d4eb049fb4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002-2003 Eric Friedman
+ // Copyright (c) 2014-2017 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/apply_visitor_binary.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL acec60e7a5ccc2aee8d37ebb5ffda3a2
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2009-2010 Hartmut Kaiser
+ Copyright (c) 2010-2011 Christopher Schmidt
+ Copyright (c) 2013-2014 Damien Buhl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/adt/adapt_adt.hpp [2:5]
+ boost/fusion/adapted/adt/adapt_assoc_adt.hpp [2:5]
+ boost/fusion/adapted/adt/detail/adapt_base_assoc_attr_filler.hpp [2:2]
+ boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp [2:2]
+ boost/fusion/adapted/struct/adapt_struct.hpp [2:4]
+ boost/fusion/adapted/struct/detail/adapt_auto.hpp [2:2]
+ boost/fusion/adapted/struct/detail/adapt_base.hpp [2:5]
+ boost/fusion/adapted/struct/detail/adapt_base_assoc_attr_filler.hpp [2:2]
+ boost/fusion/adapted/struct/detail/adapt_base_attr_filler.hpp [2:2]
+ boost/fusion/adapted/struct/detail/adapt_is_tpl.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL ad300b162eb925702ac6418338faee35
+BELONGS libs/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/test/src/decorator.cpp at line 3
+ License text:
+ // (C) Copyright Gennadiy Rozental 2011.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/test/src/decorator.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ad4755ce2f8b4e99db92172a166cc496
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2005 Peter Dimov
+ // Copyright 2005 Rene Rivera
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp [13:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL ad834a54e6d96a73491e6f259770ab00
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/detail/is_dereferenceable.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/detail/is_dereferenceable.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL adbebcecb122c685dde3643cfded4a6e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/has_default_constructor.hpp at line 4
+ License text:
+ // (C) Copyright Matthias Troyerk 2006.
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/has_default_constructor.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL adccd417789bfad3e5ed6df22fec8ed2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cstdfloat.hpp at line 6, boost/math/cstdfloat/cstdfloat_cmath.hpp at line 6, boost/math/cstdfloat/cstdfloat_complex.hpp at line 6, boost/math/cstdfloat/cstdfloat_complex_std.hpp at line 6, boost/math/cstdfloat/cstdfloat_iostream.hpp at line 6, boost/math/cstdfloat/cstdfloat_limits.hpp at line 6, boost/math/cstdfloat/cstdfloat_types.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cstdfloat.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_cmath.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_complex.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_complex_std.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_iostream.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_limits.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_types.hpp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL ae0871888f9cfe458fdd3b5ec0ed18de
+BELONGS ya.make
+ License text:
+ // Copyright (c) Antony Polukhin, 2012-2018.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_index.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL ae1d0c8850404c20b8ecd59e25bcabb5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/spreadsort/spreadsort.hpp at line 5, boost/sort/spreadsort/string_sort.hpp at line 5
+ License text:
+ // Copyright Steven J. Ross 2001 - 2009.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/sort/spreadsort/spreadsort.hpp [3:5]
+ boost/sort/spreadsort/string_sort.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ae6c75314a374199dd4eb8179394a65c
+BELONGS libs/program_options/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/program_options/options_description.hpp at line 4, libs/program_options/src/options_description.cpp at line 4
+ License text:
+ // Copyright Vladimir Prus 2002-2004.
+ // Copyright Bertolt Mildner 2004.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/program_options/options_description.hpp [1:4]
+ libs/program_options/src/options_description.cpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ae7a728b400655ba8b5bcff4a64ffb58
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007 Douglas Gregor
+ // Copyright (C) 2007 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/named_graph.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL ae8704046854e24740f868187f810e75
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/utility/detail/result_of_iterate.hpp at line 10
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility/detail/result_of_iterate.hpp [8:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL ae8ac6d67230cc94903efa59b420c903
+BELONGS libs/thread/ya.make
+ License text:
+ // (C) Copyright 2007 Anthony Williams
+ // (C) Copyright 2007 David Deakins
+ // (C) Copyright 2011-2018 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/thread/src/win32/thread.cpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL aeaee3b43c9a47f861a6ff5d3039fb8c
+BELONGS ya.make
+ License text:
+ Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.com>, 2016
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/is_palindrome.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL aec679ee74952b219e93e1261f2a5b69
+BELONGS libs/serialization/ya.make ya.make
+ License text:
+ // (C) Copyright 2005 Robert Ramey - http://www.rrsd.com
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/basic_streambuf_locale_saver.hpp [12:12]
+ boost/serialization/void_cast_fwd.hpp [12:14]
+ libs/serialization/src/stl_port.cpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL af0fca03eae52a46a7850a8202dec665
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ // 2001 Gary Powell (gary.powell@sierra.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/tuple/tuple_io.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL af4aaeb4595b4e2e72d13075cdc42e70
+BELONGS ya.make
+ License text:
+ /* Copyright (c) 2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/date_generator_parser.hpp [5:7]
+ boost/date_time/special_values_parser.hpp [5:7]
+ boost/date_time/string_convert.hpp [4:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL af611d3851b540f380d5470baf50822f
+BELONGS ya.make
+ License text:
+ Copyright 2013-2014 Karsten Ahnert
+ Copyright 2013-2014 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL affa528d742a158f1852feeb711a60b5
+BELONGS ya.make
+ License text:
+ // Copyright 2004 The Trustees of Indiana University.
+ // Copyright 2005 Matthias Troyer.
+ // Copyright 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/datatype.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b05bb05d6ff4c93d750af62df916b423
+BELONGS ya.make
+ License text:
+ Copyright (c) 2008-2012: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/interval_map.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL b05e8d821dedb1c4725a22b027a22663
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2009
+ // Copyright Jaap Suter 2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/bitand.hpp [5:6]
+ boost/mpl/bitor.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL b05eb40bb3bae6be16123d31cff82a10
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/comeau.hpp [1:8]
+ boost/config/platform/win32.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL b09edac6bc0b2db05bdae89ff848fba0
+BELONGS ya.make
+ License text:
+ // (C) Copyright Jeremy William Murphy 2016.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer/common_factor_rt.hpp [1:1]
+ boost/math/tools/polynomial_gcd.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL b0acda8e3df319a68e9a5e75c455f627
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/detail/move_helpers.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2010-2016.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/detail/move_helpers.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b10a349d839f11abf2ae65daa684e1ef
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/object/pickle_support.hpp at line 3, libs/python/src/object/pickle_support.cpp at line 3
+ License text:
+ // (C) Copyright R.W. Grosse-Kunstleve 2002.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/object/pickle_support.hpp [1:3]
+ libs/python/src/object/pickle_support.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b115999a21015dd266d010727a799415
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/function_input_iterator.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/function_input_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b13bccd796707ee307c756c5292480d5
+BELONGS ya.make
+ License text:
+ // (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+ // Copyright (c) 2001, 2002 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/scoped_ptr.hpp [5:9]
+ boost/interprocess/smart_ptr/shared_ptr.hpp [5:9]
+ boost/scoped_array.hpp [4:5]
+ boost/scoped_ptr.hpp [4:5]
+ boost/serialization/detail/shared_ptr_132.hpp [7:8]
+ boost/serialization/detail/shared_ptr_nmt_132.hpp [7:8]
+ boost/shared_array.hpp [7:8]
+ boost/shared_ptr.hpp [7:8]
+ boost/smart_ptr/scoped_array.hpp [4:5]
+ boost/smart_ptr/scoped_ptr.hpp [4:5]
+ boost/smart_ptr/shared_array.hpp [7:8]
+ boost/smart_ptr/shared_ptr.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL b14d407341145f68aa7fea9536f026aa
+BELONGS ya.make
+ License text:
+ * Copyright 2002-2003 Guillaume Melquiond
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval/compare/lexicographic.hpp [3:3]
+ boost/numeric/interval/compare/set.hpp [3:3]
+ boost/numeric/interval/compare/tribool.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b16469fd47ce5aa5a005d8f08caf9bf6
+BELONGS ya.make
+ License text:
+ // Copyright 2011 Christophe Henry
+ // henry UNDERSCORE christophe AT hotmail DOT com
+ // This is an extended version of the state machine available in the boost::mpl library
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/msm/front/euml/phoenix_placeholders.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b16508c75fd7b6f67dabe4880511636f
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2012-2014 Bruno Lalande, Paris, France.
+ // Copyright (c) 2012-2014 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/multi/algorithms/disjoint.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b1820d2cd3cc81402964cf6c2c64f349
+BELONGS ya.make
+ License text:
+ // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+ // Copyright 2010 Thomas Claveirole
+ // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/adjacency_list.hpp [2:4]
+ boost/graph/detail/adjacency_list.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b184c1576725880afe7824383236246f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/weighted_moment.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/weighted_moment.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL b1b0461f5b5534483530205d8f3b8f16
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/detail/preprocessed_arg_type.hpp at line 7, boost/signals2/detail/slot_template.hpp at line 7, boost/signals2/detail/tracked_objects_visitor.hpp at line 7, boost/signals2/preprocessed_slot.hpp at line 7, boost/signals2/slot_base.hpp at line 7, boost/signals2/trackable.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/detail/preprocessed_arg_type.hpp [3:7]
+ boost/signals2/detail/slot_template.hpp [3:7]
+ boost/signals2/detail/tracked_objects_visitor.hpp [3:7]
+ boost/signals2/preprocessed_slot.hpp [3:7]
+ boost/signals2/slot_base.hpp [3:7]
+ boost/signals2/trackable.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL b1c79ab18bb6dbf3066b7e1c132fe10c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/p_square_cumulative_distribution.hpp at line 6, boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp at line 6, boost/proto/detail/any.hpp at line 7, boost/proto/functional/range.hpp at line 7, boost/proto/functional/range/begin.hpp at line 7, boost/proto/functional/range/empty.hpp at line 7, boost/proto/functional/range/end.hpp at line 7, boost/proto/functional/range/rbegin.hpp at line 7, boost/proto/functional/range/rend.hpp at line 7, boost/proto/functional/range/size.hpp at line 7, boost/proto/functional/std/iterator.hpp at line 7, boost/proto/transform/detail/expand_pack.hpp at line 17, boost/proto/transform/detail/pack.hpp at line 7, boost/proto/transform/detail/pack_impl.hpp at line 17, boost/proto/transform/detail/preprocessed/expand_pack.hpp at line 7, boost/proto/transform/detail/preprocessed/pack_impl.hpp at line 7, boost/proto/transform/env.hpp at line 7
+ License text:
+ // Copyright 2012 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/p_square_cumulative_distribution.hpp [4:6]
+ boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp [4:6]
+ boost/proto/detail/any.hpp [5:7]
+ boost/proto/functional/range.hpp [5:7]
+ boost/proto/functional/range/begin.hpp [5:7]
+ boost/proto/functional/range/empty.hpp [5:7]
+ boost/proto/functional/range/end.hpp [5:7]
+ boost/proto/functional/range/rbegin.hpp [5:7]
+ boost/proto/functional/range/rend.hpp [5:7]
+ boost/proto/functional/range/size.hpp [5:7]
+ boost/proto/functional/std/iterator.hpp [5:7]
+ boost/proto/transform/detail/expand_pack.hpp [15:17]
+ boost/proto/transform/detail/pack.hpp [5:7]
+ boost/proto/transform/detail/pack_impl.hpp [15:17]
+ boost/proto/transform/detail/preprocessed/expand_pack.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/pack_impl.hpp [5:7]
+ boost/proto/transform/env.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL b1c8015966a7ee6e2e16f052030573b6
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/ignore_unused.hpp [1:1]
+ boost/geometry/algorithms/convert.hpp [3:6]
+ boost/geometry/algorithms/detail/calculate_sum.hpp [3:6]
+ boost/geometry/algorithms/detail/centroid/translating_transformer.hpp [3:6]
+ boost/geometry/algorithms/detail/counting.hpp [3:6]
+ boost/geometry/algorithms/detail/get_max_size.hpp [3:6]
+ boost/geometry/algorithms/detail/interior_iterator.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/select_rings.hpp [3:4]
+ boost/geometry/algorithms/detail/within/point_in_geometry.hpp [3:6]
+ boost/geometry/algorithms/for_each.hpp [3:6]
+ boost/geometry/algorithms/num_points.hpp [3:6]
+ boost/geometry/algorithms/reverse.hpp [3:6]
+ boost/geometry/algorithms/transform.hpp [3:6]
+ boost/geometry/algorithms/unique.hpp [3:6]
+ boost/geometry/geometries/linestring.hpp [3:6]
+ boost/geometry/geometries/multi_linestring.hpp [3:6]
+ boost/geometry/geometries/multi_point.hpp [3:6]
+ boost/geometry/geometries/multi_polygon.hpp [3:6]
+ boost/geometry/geometries/point.hpp [3:6]
+ boost/geometry/geometries/ring.hpp [3:6]
+ boost/geometry/io/dsv/write.hpp [3:6]
+ boost/geometry/io/svg/write.hpp [3:4]
+ boost/geometry/io/svg/write_svg.hpp [3:4]
+ boost/geometry/policies/robustness/robust_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL b1cdf58fa303a8f4ede708fdd775aaaa
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003 Eric Friedman
+ // Copyright (c) 2016 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/config.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL b1d8599132305166f8d3329e2357d761
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multi_index/detail/index_base.hpp at line 3, boost/multi_index/detail/promotes_arg.hpp at line 3, boost/multi_index/detail/rnk_index_ops.hpp at line 3, boost/multi_index/ranked_index.hpp at line 3
+ License text:
+ /* Copyright 2003-2017 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multi_index/detail/index_base.hpp [1:3]
+ boost/multi_index/detail/promotes_arg.hpp [1:3]
+ boost/multi_index/detail/rnk_index_ops.hpp [1:3]
+ boost/multi_index/ranked_index.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b1f8901cb8c9428d0a6f94081716c15b
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/detail/lexer/char_traits.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/consts.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/conversion/char_state_machine.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/debug.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/generator.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/parser.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tree/node.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/partition/charset.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/partition/equivset.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/rules.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/runtime_error.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/serialise.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/size_t.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/state_machine.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/string_token.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL b22616ad6909bb1b6914df1bbe9f7d72
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/endian/detail/intrinsic.hpp [3:4]
+ boost/endian/std_pair.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b2365a202e25d6cb47c747294c287f01
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ Copyright (c) 2003 Gustavo Guerra
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/debug/debug_node.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b237bc327f11220f8661319eedc55a67
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003 Giovanni Bajo
+ Copyright (c) 2003 Martin Wille
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/iterator/impl/file_iterator.ipp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b25c8fff5a7c50544f2f1f7552b2ef6b
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/ellint_rg.hpp [1:3]
+ boost/math/special_functions/heuman_lambda.hpp [1:3]
+ boost/math/special_functions/jacobi_zeta.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b28d2fde6ba5b098618944cd7d0b3376
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/win32/mutex.hpp at line 6, boost/thread/win32/once.hpp at line 9, boost/thread/win32/thread_primitives.hpp at line 9
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/win32/mutex.hpp [3:6]
+ boost/thread/win32/once.hpp [6:8]
+ boost/thread/win32/thread_primitives.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL b2df7e5a7a957bf86ae4c6503becd8c4
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2001-2004
+ // Copyright David Abrahams 2001-2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/accumulate.hpp [5:6]
+ boost/mpl/aux_/iter_fold_if_impl.hpp [5:6]
+ boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp [2:3]
+ boost/mpl/fold.hpp [5:6]
+ boost/mpl/iter_fold.hpp [5:6]
+ boost/mpl/reverse_fold.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL b303e8bf396c51ea4c645078eb2128ab
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/typeof/template_encoding.hpp at line 4, boost/typeof/template_template_param.hpp at line 4, boost/typeof/typeof_impl.hpp at line 4, boost/typeof/vector.hpp at line 4, boost/typeof/vector100.hpp at line 5, boost/typeof/vector150.hpp at line 5, boost/typeof/vector200.hpp at line 5, boost/typeof/vector50.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/template_encoding.hpp [1:4]
+ boost/typeof/template_template_param.hpp [1:4]
+ boost/typeof/typeof_impl.hpp [1:4]
+ boost/typeof/vector.hpp [1:2]
+ boost/typeof/vector100.hpp [2:3]
+ boost/typeof/vector150.hpp [2:3]
+ boost/typeof/vector200.hpp [2:3]
+ boost/typeof/vector50.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b39477fb74de6923f82fd930b22fa1ef
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multi_index/detail/auto_space.hpp at line 3, boost/multi_index/detail/copy_map.hpp at line 3, boost/multi_index/detail/hash_index_node.hpp at line 3, boost/multi_index/detail/ord_index_impl.hpp at line 3, boost/multi_index/detail/ord_index_node.hpp at line 3, boost/multi_index/detail/rnd_index_node.hpp at line 3, boost/multi_index/detail/rnd_index_ptr_array.hpp at line 3, boost/multi_index/detail/seq_index_node.hpp at line 3, boost/multi_index/hashed_index.hpp at line 3, boost/multi_index/random_access_index.hpp at line 3, boost/multi_index/sequenced_index.hpp at line 3, boost/multi_index_container.hpp at line 5
+ License text:
+ * Copyright 2003-2018 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multi_index/detail/auto_space.hpp [1:3]
+ boost/multi_index/detail/copy_map.hpp [1:3]
+ boost/multi_index/detail/hash_index_node.hpp [1:3]
+ boost/multi_index/detail/ord_index_impl.hpp [1:3]
+ boost/multi_index/detail/ord_index_node.hpp [1:3]
+ boost/multi_index/detail/rnd_index_node.hpp [1:3]
+ boost/multi_index/detail/rnd_index_ptr_array.hpp [1:3]
+ boost/multi_index/detail/seq_index_node.hpp [1:3]
+ boost/multi_index/hashed_index.hpp [1:3]
+ boost/multi_index/random_access_index.hpp [1:3]
+ boost/multi_index/sequenced_index.hpp [1:3]
+ boost/multi_index_container.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b3ae8d5fa08389df2a8eb4a5184974c9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math_fwd.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math_fwd.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b4926da9285e9a7d8815bc373325f082
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2012-2013 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/invoke.hpp [1:1]
+ boost/thread/detail/make_tuple_indices.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL b4a590731990d46da1db97cbe472aa42
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer/integer_mask.hpp at line 5, boost/integer/static_min_max.hpp at line 5
+ License text:
+ // (C) Copyright Daryle Walker 2001.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer/integer_mask.hpp [3:5]
+ boost/integer/static_min_max.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b4c664be9a8d4af073dd2d3ce7c75b24
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/home/classic/iterator/file_iterator.hpp [2:5]
+ boost/spirit/home/classic/iterator/impl/file_iterator.ipp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b4d502c99ef9e3a6fa33d58757314d75
+BELONGS ya.make
+ License text:
+ Autogenerated by MultiStageTable.py (Unicode multi-stage
+ table builder) (c) Peter Kankowski, 2008
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/char_encoding/unicode/query.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL b4f5a55de50af359f9bfe971eb3941df
+BELONGS ya.make
+ License text:
+ * (C) Copyright Nicolai M. Josuttis 2001.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/array.hpp [10:10]
+ boost/iostreams/device/file_descriptor.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL b517037ab6887c277a72af6da5e6d9e2
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/index/detail/assert.hpp [3:3]
+ boost/geometry/index/detail/distance_predicates.hpp [6:6]
+ boost/geometry/index/detail/is_bounding_geometry.hpp [3:3]
+ boost/geometry/index/detail/is_indexable.hpp [3:3]
+ boost/geometry/index/detail/predicates.hpp [5:5]
+ boost/geometry/index/detail/rtree/iterators.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/node.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/node_elements.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp [5:5]
+ boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp [5:5]
+ boost/geometry/index/detail/rtree/query_iterators.hpp [5:5]
+ boost/geometry/index/detail/rtree/rstar/insert.hpp [5:5]
+ boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp [5:5]
+ boost/geometry/index/detail/rtree/utilities/are_counts_ok.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/children_box.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/copy.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/insert.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/is_leaf.hpp [5:5]
+ boost/geometry/index/detail/rtree/visitors/iterator.hpp [5:5]
+ boost/geometry/index/detail/serialization.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b51b582fd41e8d5e59edf0ea1f331e9d
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2006.
+ // (C) Copyright Johan Rade 2006.
+ // (C) Copyright Paul A. Bristow 2011 (added changesign).
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/sign.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b52e6d8c8099fbbc21dd26f9da622ebd
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2000 Stephen Cleary
+ // Copyright (C) 2008 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/singleton.hpp [1:2]
+ boost/pool/detail/guard.hpp [1:1]
+ boost/pool/detail/mutex.hpp [1:1]
+ boost/pool/detail/pool_construct.ipp [1:1]
+ boost/pool/detail/pool_construct_simple.ipp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL b55de55bf9cf2ea9ad89223e9c74d22d
+BELONGS ya.make
+ License text:
+ // Copyright 2007 David Jenkins.
+ // Copyright 2007 Eric Niebler.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/xpressive/detail/utility/symbols.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL b577ef3450332ce971ed9f06a436e353
+BELONGS ya.make
+ License text:
+ // (C) Copyright Jeremy Siek 1999-2001.
+ // Copyright (C) 2006 Trustees of Indiana University
+ // Authors: Douglas Gregor and Jeremy Siek
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_map/parallel/parallel_property_maps.hpp [1:3]
+ boost/property_map/property_map.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b5798aa67e74d9f05dec809f252a358b
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2010 Eric Niebler
+ Copyright (c) 2014-2015 John Fletcher
+ Copyright (c) 2016 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/bind/bind_function.hpp [2:2]
+ boost/phoenix/bind/bind_function_object.hpp [2:2]
+ boost/phoenix/bind/bind_member_function.hpp [2:2]
+ boost/phoenix/config.hpp [2:5]
+ boost/phoenix/core/detail/cpp03/function_eval_expr.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/function_eval_expr.hpp [17:18]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_50.hpp [2:3]
+ boost/phoenix/core/detail/index_sequence.hpp [2:2]
+ boost/phoenix/core/expression.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/construct_expr.hpp [12:12]
+ boost/phoenix/object/detail/cpp03/new_expr.hpp [12:12]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_10.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_20.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_30.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_40.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_50.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_10.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_20.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_30.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_40.hpp [2:2]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_50.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval.hpp [15:17]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_expr.hpp [11:11]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_10.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_20.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_30.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_40.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_50.hpp [2:4]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_10.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_20.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_30.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_40.hpp [2:2]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_50.hpp [2:2]
+ boost/phoenix/operator/member.hpp [2:4]
+ boost/phoenix/scope/detail/cpp03/lambda.hpp [14:17]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_10.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_20.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_30.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_40.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_50.hpp [2:5]
+ boost/phoenix/scope/detail/local_gen.hpp [2:2]
+ boost/phoenix/scope/lambda.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b5946573aa2a793324ebafe24646df01
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind/bind_cc.hpp [6:6]
+ boost/bind/bind_mf2_cc.hpp [6:7]
+ boost/bind/bind_mf_cc.hpp [6:6]
+ boost/bind/mem_fn_cc.hpp [6:6]
+ boost/bind/mem_fn_template.hpp [6:6]
+ boost/bind/mem_fn_vw.hpp [6:6]
+ boost/callable_traits/detail/unguarded/pmf.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b594eb502e937a54ebdadbe8bd5a68df
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/metrowerks.hpp [1:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL b5a162d9d913c26341a042009f7916b7
+BELONGS ya.make
+ License text:
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2010-2011 Karsten Ahnert
+ Copyright 2013 Kyle Lutz
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/thrust/thrust_algebra.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL b5eb1d52d66d293c4156fbe683998b96
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/detail/random_provider_posix.ipp at line 5, boost/uuid/detail/random_provider_wincrypt.ipp at line 5, boost/uuid/detail/sha1.hpp at line 5, boost/uuid/uuid_serialize.hpp at line 5
+ License text:
+ // Copyright 2007 Andy Tompkins.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/uuid/detail/random_provider_posix.ipp [3:6]
+ boost/uuid/detail/random_provider_wincrypt.ipp [3:6]
+ boost/uuid/detail/sha1.hpp [3:5]
+ boost/uuid/uuid_serialize.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b608aafcf17c3fbc3a9abfa54ff163ce
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007 Douglas Gregor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/adjacency_list.hpp [1:2]
+ boost/graph/distributed/adjlist/handlers.hpp [1:1]
+ boost/graph/distributed/adjlist/initialize.hpp [1:1]
+ boost/graph/distributed/mpi_process_group.hpp [1:3]
+ boost/graph/distributed/named_graph.hpp [1:2]
+ boost/graph/named_graph.hpp [1:1]
+ boost/graph/parallel/simple_trigger.hpp [1:1]
+ boost/property_map/parallel/simple_trigger.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL b60b728810c5d736d2650873aa7fb51c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/suffix.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/suffix.hpp [4:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL b626a4b5c2666eca8400c2f213679a2f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cerrno.hpp at line 5
+ License text:
+ // Copyright Beman Dawes 2005.
+ // Use, modification, and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cerrno.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b6374b67068608f679513fec4a3a3cb2
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2007, 2014 Peter Dimov
+ // Copyright (c) Beman Dawes 2011
+ // Copyright (c) 2015 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/assert.hpp [8:11]
+ boost/geometry/core/assert.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL b638be5dce43d5e4914245ec2ed92e62
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/common_edg.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL b6597e31d130c612b92d43fa977abd87
+BELONGS ya.make
+ License text:
+ // Copyright Kevlin Henney, 2000-2005.
+ // Copyright Alexander Nasonov, 2006-2010.
+ // Copyright Antony Polukhin, 2011-2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lexical_cast.hpp [1:3]
+ boost/lexical_cast/bad_lexical_cast.hpp [1:3]
+ boost/lexical_cast/detail/converter_lexical.hpp [1:3]
+ boost/lexical_cast/detail/inf_nan.hpp [1:3]
+ boost/lexical_cast/detail/is_character.hpp [1:3]
+ boost/lexical_cast/detail/lcast_char_constants.hpp [1:3]
+ boost/lexical_cast/detail/lcast_unsigned_converters.hpp [1:3]
+ boost/lexical_cast/detail/widest_char.hpp [1:3]
+ boost/lexical_cast/lexical_cast_old.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b689ce1fe944d38c833b037be6d9f281
+BELONGS ya.make
+ License text:
+ // Copyright 2010 Andy Tompkins.
+ // Copyright 2017 James E. King III
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/uuid/basic_name_generator.hpp [3:4]
+ boost/uuid/detail/random_provider_posix.ipp [3:6]
+ boost/uuid/detail/random_provider_wincrypt.ipp [3:6]
+ boost/uuid/name_generator.hpp [3:4]
+ boost/uuid/name_generator_md5.hpp [3:3]
+ boost/uuid/name_generator_sha1.hpp [3:4]
+ boost/uuid/random_generator.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL b699bdd7154fcb798353c82e7ca92221
+BELONGS ya.make
+ License text:
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/composite/epsilon.hpp [2:4]
+ boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp [2:4]
+ boost/spirit/home/classic/dynamic.hpp [2:5]
+ boost/spirit/home/classic/dynamic/for.hpp [2:4]
+ boost/spirit/home/classic/dynamic/if.hpp [2:5]
+ boost/spirit/home/classic/dynamic/impl/conditions.ipp [2:3]
+ boost/spirit/home/classic/dynamic/while.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL b69cd572ce3ce471a26628f4b752dfa6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/ssize_t.hpp at line 3
+ License text:
+ // Copyright Ralf W. Grosse-Kunstleve & David Abrahams 2006.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/ssize_t.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b6a6c5573404f793e44c835405785861
+BELONGS ya.make
+ License text:
+ * Copyright 2013, 2017 Andrey Semashev
+ * Copyright 2017 James E. King, III
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/config.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b70793e631467eef3612697ba0d613b7
+BELONGS ya.make
+ License text:
+ // Copyright (c) Antony Polukhin, 2013-2018.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_index/ctti_type_index.hpp [2:2]
+ boost/type_index/stl_type_index.hpp [2:2]
+ boost/type_index/type_index_facade.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL b71904ec3fd3b6cc7f3210440fa9db89
+BELONGS ya.make
+ License text:
+ Copyright 2012-2015 Mario Mulansky
+ Copyright 2012 Christoph Koke
+ Copyright 2012 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/integrate/detail/integrate_const.hpp [9:11]
+ boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp [9:11]
+ boost/numeric/odeint/util/detail/less_with_sign.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL b72643731dd6fbb6ddf9d496532b79ba
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2016, Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/arithmetic/normalize.hpp [3:4]
+ boost/geometry/formulas/spherical.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b772c78fde56122bdba5336e5bb0a93a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2006 Peter Dimov
+ // Copyright 2005 Ben Hutchings
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp [7:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL b77da1c4ebbae4dc54759034a4876f63
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/fiber/algo/algorithm.hpp at line 3, boost/fiber/algo/round_robin.hpp at line 3, boost/fiber/all.hpp at line 4, boost/fiber/barrier.hpp at line 4, boost/fiber/channel_op_status.hpp at line 3, boost/fiber/condition_variable.hpp at line 4, boost/fiber/context.hpp at line 4, boost/fiber/detail/config.hpp at line 4, boost/fiber/detail/context_spmc_queue.hpp at line 4, boost/fiber/detail/convert.hpp at line 4, boost/fiber/detail/data.hpp at line 4, boost/fiber/detail/fss.hpp at line 4, boost/fiber/detail/spinlock.hpp at line 4, boost/fiber/exceptions.hpp at line 4, boost/fiber/fiber.hpp at line 4, boost/fiber/fss.hpp at line 4, boost/fiber/future.hpp at line 4, boost/fiber/future/async.hpp at line 4, boost/fiber/future/detail/shared_state.hpp at line 4, boost/fiber/future/detail/shared_state_object.hpp at line 4, boost/fiber/future/detail/task_base.hpp at line 3, boost/fiber/future/detail/task_object.hpp at line 4, boost/fiber/future/future.hpp at line 4, boost/fiber/future/future_status.hpp at line 4, boost/fiber/future/packaged_task.hpp at line 4, boost/fiber/future/promise.hpp at line 4, boost/fiber/mutex.hpp at line 4, boost/fiber/operations.hpp at line 3, boost/fiber/policy.hpp at line 4, boost/fiber/recursive_mutex.hpp at line 4, boost/fiber/recursive_timed_mutex.hpp at line 4, boost/fiber/scheduler.hpp at line 3, boost/fiber/timed_mutex.hpp at line 4, boost/fiber/type.hpp at line 4
+ License text:
+ // Copyright Oliver Kowalke 2013.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fiber/algo/algorithm.hpp [1:3]
+ boost/fiber/algo/round_robin.hpp [1:3]
+ boost/fiber/all.hpp [2:4]
+ boost/fiber/barrier.hpp [2:4]
+ boost/fiber/channel_op_status.hpp [1:3]
+ boost/fiber/condition_variable.hpp [2:4]
+ boost/fiber/context.hpp [2:4]
+ boost/fiber/detail/config.hpp [2:4]
+ boost/fiber/detail/context_spmc_queue.hpp [2:4]
+ boost/fiber/detail/convert.hpp [2:4]
+ boost/fiber/detail/data.hpp [2:4]
+ boost/fiber/detail/fss.hpp [2:4]
+ boost/fiber/detail/spinlock.hpp [2:4]
+ boost/fiber/exceptions.hpp [2:4]
+ boost/fiber/fiber.hpp [2:4]
+ boost/fiber/fss.hpp [2:4]
+ boost/fiber/future.hpp [2:4]
+ boost/fiber/future/async.hpp [2:4]
+ boost/fiber/future/detail/shared_state.hpp [2:4]
+ boost/fiber/future/detail/shared_state_object.hpp [2:4]
+ boost/fiber/future/detail/task_base.hpp [1:3]
+ boost/fiber/future/detail/task_object.hpp [2:4]
+ boost/fiber/future/future.hpp [2:4]
+ boost/fiber/future/future_status.hpp [2:4]
+ boost/fiber/future/packaged_task.hpp [2:4]
+ boost/fiber/future/promise.hpp [2:4]
+ boost/fiber/mutex.hpp [2:4]
+ boost/fiber/operations.hpp [1:3]
+ boost/fiber/policy.hpp [2:4]
+ boost/fiber/recursive_mutex.hpp [2:4]
+ boost/fiber/recursive_timed_mutex.hpp [2:4]
+ boost/fiber/scheduler.hpp [1:3]
+ boost/fiber/timed_mutex.hpp [2:4]
+ boost/fiber/type.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL b79a0f43ba0efea8c1e8e8b615f4a4d3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/exponential_distribution.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/exponential_distribution.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL b79d46b779b3668422685b4b8d6ded42
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/wave/whitespace_handling.hpp at line 10
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/wave/whitespace_handling.hpp [7:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL b7a8a4916fe446a46dfd7a3665c2a01f
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2005-8 Anthony Williams
+ // (C) Copyright 2012 Vicente J. Botet Escriba
+ // (C) Copyright 2017 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/win32/interlocked_read.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL b8264448f2302918d52d12ed19e342eb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/basic_streambuf_locale_saver.hpp at line 23, boost/io/ios_state.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/basic_streambuf_locale_saver.hpp [21:23]
+ boost/io/ios_state.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL b82c0e3e5bd7dc73511173cbf94198dd
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2015 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/x3/directive.hpp [2:2]
+ boost/spirit/home/x3/support/utility/annotate_on_success.hpp [2:2]
+ boost/spirit/home/x3/support/utility/testing.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL b84fa64c3d4d6ba86bf480239d56f982
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/common/deque_cnc.hpp at line 8, boost/sort/common/int_array.hpp at line 9, boost/sort/common/pivot.hpp at line 7, boost/sort/common/scheduler.hpp at line 8, boost/sort/common/spinlock.hpp at line 7, boost/sort/common/stack_cnc.hpp at line 7, boost/sort/common/time_measure.hpp at line 8, boost/sort/common/util/circular_buffer.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/sort/common/deque_cnc.hpp [6:8]
+ boost/sort/common/int_array.hpp [7:9]
+ boost/sort/common/pivot.hpp [5:7]
+ boost/sort/common/scheduler.hpp [6:8]
+ boost/sort/common/spinlock.hpp [5:7]
+ boost/sort/common/stack_cnc.hpp [5:7]
+ boost/sort/common/time_measure.hpp [6:8]
+ boost/sort/common/util/circular_buffer.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL b8547beed83546072ae6f84e3538f2ff
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/synchronized_value.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/synchronized_value.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL b85fc3b662d75b6c8499a3f035f4deec
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2007.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/bindings/rr.hpp [1:3]
+ boost/math/distributions/detail/inv_discrete_quantile.hpp [1:3]
+ boost/math/distributions/find_location.hpp [1:2]
+ boost/math/distributions/find_scale.hpp [1:2]
+ boost/math/distributions/fwd.hpp [3:4]
+ boost/math/distributions/negative_binomial.hpp [3:4]
+ boost/math/distributions/pareto.hpp [1:4]
+ boost/math/policies/error_handling.hpp [1:2]
+ boost/math/policies/policy.hpp [1:3]
+ boost/math/special_functions/detail/t_distribution_inv.hpp [1:4]
+ boost/math/special_functions/expint.hpp [1:3]
+ boost/math/special_functions/modf.hpp [1:3]
+ boost/math/special_functions/round.hpp [1:3]
+ boost/math/special_functions/trunc.hpp [1:3]
+ boost/math/tools/traits.hpp [1:1]
+ boost/math/tools/user.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL b8672d715f306402af3ec5601de62c7d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 1996-1998
+ // Silicon Graphics Computer Systems, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multi_array/algorithm.hpp [18:19]
+
+KEEP COPYRIGHT_SERVICE_LABEL b907d8eaaeb4f79ea96802618880431f
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/composite/actions.hpp [2:3]
+ boost/spirit/home/classic/core/composite/composite.hpp [2:3]
+ boost/spirit/home/classic/core/impl/match.ipp [2:3]
+ boost/spirit/home/classic/core/impl/match_attr_traits.ipp [2:3]
+ boost/spirit/home/classic/core/impl/parser.ipp [2:3]
+ boost/spirit/home/classic/core/match.hpp [2:3]
+ boost/spirit/home/classic/core/non_terminal/impl/rule.ipp [2:3]
+ boost/spirit/home/classic/core/non_terminal/rule.hpp [2:3]
+ boost/spirit/home/classic/core/parser.hpp [2:3]
+ boost/spirit/home/classic/core/scanner/impl/skipper.ipp [2:3]
+ boost/spirit/home/classic/core/scanner/skipper.hpp [2:3]
+ boost/spirit/home/classic/dynamic/rule_alias.hpp [2:3]
+ boost/spirit/home/classic/dynamic/stored_rule.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL b949b0b096894aa6f558866792d8101e
+BELONGS ya.make
+ License text:
+ // Copyright 2007 Baruch Zilber
+ // Copyright 2007 Boris Gubenko
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL b998aa996eb22879e21eb05330b58e14
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/cpp11/string.hpp at line 6, boost/metaparse/v1/cpp98/string.hpp at line 6, boost/metaparse/v1/foldl_start_with_parser.hpp at line 6, boost/metaparse/v1/foldr_start_with_parser.hpp at line 6, boost/metaparse/v1/grammar.hpp at line 6, boost/metaparse/v1/util/int_to_digit.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2012.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/cpp11/string.hpp [4:6]
+ boost/metaparse/v1/cpp98/string.hpp [4:6]
+ boost/metaparse/v1/foldl_start_with_parser.hpp [4:6]
+ boost/metaparse/v1/foldr_start_with_parser.hpp [4:6]
+ boost/metaparse/v1/grammar.hpp [4:6]
+ boost/metaparse/v1/util/int_to_digit.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL b9f3ad3a077b36756db8dbac805868c6
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/intel.hpp [1:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL b9fab516a91e9614fb3222f1244b7186
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015-2017, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/envelope/multipoint.hpp [3:3]
+ boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp [3:3]
+ boost/geometry/algorithms/detail/normalize.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp [5:5]
+ boost/geometry/geometries/helper_geometry.hpp [3:3]
+ boost/geometry/util/normalize_spheroidal_box_coordinates.hpp [3:3]
+ boost/geometry/util/normalize_spheroidal_coordinates.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ba5506df7530081f1cb89a1a0c3dde35
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/vector_as_graph.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL baa2e80f36559136e553f8b3692be5fb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/detail/config/unreachable_return.hpp at line 3
+ License text:
+ // (C) Copyright 2010 Daniel James
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/detail/config/unreachable_return.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL baa6d964f4d73195dec9a2283827c156
+BELONGS libs/thread/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/detail/lockable_wrapper.hpp at line 6, boost/thread/detail/platform_time.hpp at line 5, boost/thread/detail/thread_interruption.hpp at line 8, boost/thread/externally_locked.hpp at line 3, boost/thread/externally_locked_stream.hpp at line 3, boost/thread/is_locked_by_this_thread.hpp at line 3, boost/thread/lock_factories.hpp at line 6, boost/thread/pthread/shared_mutex.hpp at line 6, boost/thread/reverse_lock.hpp at line 6, boost/thread/scoped_thread.hpp at line 6, boost/thread/shared_lock_guard.hpp at line 6, boost/thread/synchronized_value.hpp at line 3, boost/thread/testable_mutex.hpp at line 3, boost/thread/thread_functors.hpp at line 6, boost/thread/thread_guard.hpp at line 6, boost/thread/win32/interlocked_read.hpp at line 8, libs/thread/src/future.cpp at line 3
+ License text:
+ // (C) Copyright 2012 Vicente J. Botet Escriba
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/lockable_wrapper.hpp [4:4]
+ boost/thread/detail/platform_time.hpp [3:4]
+ boost/thread/detail/thread_interruption.hpp [6:7]
+ boost/thread/externally_locked.hpp [1:3]
+ boost/thread/externally_locked_stream.hpp [1:3]
+ boost/thread/is_locked_by_this_thread.hpp [1:3]
+ boost/thread/lock_factories.hpp [4:4]
+ boost/thread/pthread/shared_mutex.hpp [4:5]
+ boost/thread/reverse_lock.hpp [4:4]
+ boost/thread/scoped_thread.hpp [4:5]
+ boost/thread/shared_lock_guard.hpp [4:4]
+ boost/thread/synchronized_value.hpp [1:4]
+ boost/thread/testable_mutex.hpp [1:3]
+ boost/thread/thread_functors.hpp [4:5]
+ boost/thread/thread_guard.hpp [4:5]
+ boost/thread/win32/interlocked_read.hpp [6:8]
+ libs/thread/src/future.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL baf28d14712b3b53f3b722d4d80fdb6c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pending/container_traits.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pending/container_traits.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL bb17343149a36c684ba9e6f67a8113f6
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Johan Rade
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/detail/fp_traits.hpp [6:6]
+ boost/spirit/home/support/detail/math/detail/fp_traits.hpp [6:6]
+ boost/spirit/home/support/detail/math/fpclassify.hpp [6:6]
+ boost/spirit/home/support/detail/math/signbit.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL bb55147ae1dc454d4781bbd8a6e366f9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function.hpp at line 5, boost/last_value.hpp at line 5, boost/signals/signal0.hpp at line 5, boost/signals/signal1.hpp at line 5, boost/signals/signal10.hpp at line 5, boost/signals/signal2.hpp at line 5, boost/signals/signal3.hpp at line 5, boost/signals/signal4.hpp at line 5, boost/signals/signal5.hpp at line 5, boost/signals/signal6.hpp at line 5, boost/signals/signal7.hpp at line 5, boost/signals/signal8.hpp at line 5, boost/signals/signal9.hpp at line 5, boost/signals2/last_value.hpp at line 5, boost/signals2/optional_last_value.hpp at line 5, boost/visit_each.hpp at line 5
+ License text:
+ // Copyright Douglas Gregor 2001-2003. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function.hpp [3:5]
+ boost/last_value.hpp [3:5]
+ boost/signals/signal0.hpp [3:5]
+ boost/signals/signal1.hpp [3:5]
+ boost/signals/signal10.hpp [3:5]
+ boost/signals/signal2.hpp [3:5]
+ boost/signals/signal3.hpp [3:5]
+ boost/signals/signal4.hpp [3:5]
+ boost/signals/signal5.hpp [3:5]
+ boost/signals/signal6.hpp [3:5]
+ boost/signals/signal7.hpp [3:5]
+ boost/signals/signal8.hpp [3:5]
+ boost/signals/signal9.hpp [3:5]
+ boost/signals2/last_value.hpp [3:6]
+ boost/signals2/optional_last_value.hpp [3:6]
+ boost/visit_each.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL bb7b884ff256f4037b889da384920a8c
+BELONGS ya.make
+ License text:
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/algebra/array_algebra.hpp [13:14]
+ boost/numeric/odeint/algebra/fusion_algebra.hpp [9:10]
+ boost/numeric/odeint/stepper/adams_bashforth.hpp [10:13]
+ boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp [9:11]
+ boost/numeric/odeint/stepper/adams_moulton.hpp [10:12]
+ boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/bulirsch_stoer.hpp [12:14]
+ boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp [9:11]
+ boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp [9:11]
+ boost/numeric/odeint/stepper/explicit_generic_rk.hpp [9:11]
+ boost/numeric/odeint/stepper/modified_midpoint.hpp [9:11]
+ boost/numeric/odeint/stepper/runge_kutta4.hpp [9:10]
+ boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp [9:10]
+ boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp [9:10]
+ boost/numeric/odeint/stepper/symplectic_euler.hpp [9:10]
+ boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp [9:10]
+ boost/numeric/odeint/util/ublas_wrapper.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL bb8609171f692ca0c3e57eded453579a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2007, 2014 Peter Dimov
+ // Copyright (c) Beman Dawes 2011
+ // Copyright (c) 2015 Ion Gaztanaga
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/assert.hpp [8:11]
+ boost/geometry/core/assert.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL bbcd1acfe8595de9d40645962088e6b2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/suffix.hpp at line 14, boost/integer/static_log2.hpp at line 13
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/suffix.hpp [4:14]
+ boost/integer/static_log2.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL bbcd3b9c129140dc13e07157844ae740
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015 Muhammad Junaid Muzammil <mjunaidmuzammil@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/random/threefry_engine.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL bc186e328c5eaa608188302749112295
+BELONGS libs/date_time/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/compiler_config.hpp at line 6, boost/date_time/date_formatting.hpp at line 6, boost/date_time/date_formatting_limited.hpp at line 6, boost/date_time/gregorian/gregorian.hpp at line 6, boost/date_time/period_formatter.hpp at line 7, boost/date_time/period_parser.hpp at line 7, boost/date_time/posix_time/posix_time_legacy_io.hpp at line 6, boost/date_time/posix_time/time_formatters.hpp at line 6, libs/date_time/src/gregorian/greg_names.hpp at line 3, libs/date_time/src/gregorian/greg_weekday.cpp at line 3, libs/date_time/src/posix_time/posix_time_types.cpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/compiler_config.hpp [4:8]
+ boost/date_time/date_formatting.hpp [4:6]
+ boost/date_time/date_formatting_limited.hpp [4:6]
+ boost/date_time/gregorian/gregorian.hpp [4:6]
+ boost/date_time/period_formatter.hpp [5:7]
+ boost/date_time/period_parser.hpp [5:7]
+ boost/date_time/posix_time/posix_time_legacy_io.hpp [4:6]
+ boost/date_time/posix_time/time_formatters.hpp [4:6]
+ libs/date_time/src/gregorian/greg_names.hpp [1:3]
+ libs/date_time/src/gregorian/greg_weekday.cpp [1:3]
+ libs/date_time/src/posix_time/posix_time_types.cpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL bc274ba061b1240f436aa4dc92d69ea1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/random.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/random.hpp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL bc37ce97fb02b60eb85225c35a229933
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator.hpp at line 3
+ License text:
+ // (C) Copyright Beman Dawes 2000. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL bc7bca5db7fc6833cadc5abca6abb6fb
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009-2012, Marco Guazzone
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/operation/num_rows.hpp [8:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL bcbb3a6b632caa261d7292128b881a3f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals/connection.hpp at line 5, boost/signals/detail/named_slot_map.hpp at line 5, boost/signals/detail/signal_base.hpp at line 5, boost/signals/detail/signals_common.hpp at line 5, boost/signals/detail/slot_call_iterator.hpp at line 5, boost/signals/signal_template.hpp at line 5, boost/signals/slot.hpp at line 5, boost/signals/trackable.hpp at line 5, boost/signals2/detail/preprocessed_arg_type.hpp at line 5, boost/signals2/detail/result_type_wrapper.hpp at line 5, boost/signals2/detail/signals_common.hpp at line 5, boost/signals2/detail/slot_call_iterator.hpp at line 5, boost/signals2/detail/slot_template.hpp at line 5, boost/signals2/detail/tracked_objects_visitor.hpp at line 5, boost/signals2/preprocessed_slot.hpp at line 5, boost/signals2/slot_base.hpp at line 5, boost/signals2/trackable.hpp at line 5
+ License text:
+ // Copyright Douglas Gregor 2001-2004. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals/connection.hpp [3:5]
+ boost/signals/detail/named_slot_map.hpp [3:5]
+ boost/signals/detail/signal_base.hpp [3:5]
+ boost/signals/detail/signals_common.hpp [3:5]
+ boost/signals/detail/slot_call_iterator.hpp [3:5]
+ boost/signals/signal_template.hpp [3:5]
+ boost/signals/slot.hpp [3:5]
+ boost/signals/trackable.hpp [3:5]
+ boost/signals2/detail/preprocessed_arg_type.hpp [3:7]
+ boost/signals2/detail/result_type_wrapper.hpp [3:6]
+ boost/signals2/detail/signals_common.hpp [3:6]
+ boost/signals2/detail/slot_call_iterator.hpp [3:6]
+ boost/signals2/detail/slot_template.hpp [3:7]
+ boost/signals2/detail/tracked_objects_visitor.hpp [3:7]
+ boost/signals2/preprocessed_slot.hpp [3:7]
+ boost/signals2/slot_base.hpp [3:7]
+ boost/signals2/trackable.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL bcf9526e6a123308486499aa33ea3d65
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/stable_vector.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2008-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/stable_vector.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL bd245b6a4002991b18b7e17769d392c9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2009: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/detail/notate.hpp [2:2]
+ boost/icl/functors.hpp [2:2]
+ boost/icl/separate_interval_set.hpp [2:2]
+ boost/icl/split_interval_set.hpp [2:3]
+ boost/icl/type_traits/to_string.hpp [2:2]
+ boost/icl/type_traits/type_to_string.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL bd2c815ca0e6c7ee8e23105e3a910fe1
+BELONGS ya.make
+ License text:
+ // copyright (c) 2005
+ // troy d. straszheim <troy@resophonic.com>
+ // http://www.resophonic.com
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/variant.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL bd50790614a99115ac76f35dc0c47a91
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/advanced_insert_int.hpp at line 5, boost/container/detail/variadic_templates_tools.hpp at line 5, boost/container/node_allocator.hpp at line 5, boost/intrusive/treap.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2008-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/advanced_insert_int.hpp [3:5]
+ boost/container/detail/variadic_templates_tools.hpp [3:5]
+ boost/container/node_allocator.hpp [3:5]
+ boost/intrusive/treap.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL bd75bfad6ac2e0a0d39453ffda173eae
+BELONGS ya.make
+ License text:
+ // Copyright (c) Antony Polukhin, 2013-2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_index/detail/ctti_register_class.hpp [2:2]
+ boost/type_index/detail/stl_register_class.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL bda792b52a7a784797c1280c82f443a0
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/reverse_graph.hpp at line 3, boost/python/detail/config.hpp at line 3, boost/python/detail/none.hpp at line 3, boost/python/detail/wrap_python.hpp at line 3, boost/python/errors.hpp at line 3, libs/python/src/module.cpp at line 3
+ License text:
+ // (C) Copyright David Abrahams 2000.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/reverse_graph.hpp [1:3]
+ boost/python/detail/config.hpp [1:3]
+ boost/python/detail/none.hpp [1:3]
+ boost/python/detail/wrap_python.hpp [1:3]
+ boost/python/errors.hpp [1:3]
+ libs/python/src/module.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL bda851fc939db851e4440dc9806f0d16
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2014-2016 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/detail/old_optional_implementation.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL bdb654e3fbbec678064a117bc379b41b
+BELONGS libs/context/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/context/src/asm/jump_combined_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/make_combined_sysv_macho_gas.S at line 4, libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_combined_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S at line 4
+ License text:
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/context/src/asm/jump_combined_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/make_combined_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_combined_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S [2:4]
+ libs/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL bdcd6bb2eda5f6f01984cfe4c78ef425
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2003 Vaclav Vesely
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/composite/no_actions.hpp [2:4]
+ boost/spirit/home/classic/dynamic/lazy.hpp [2:4]
+ boost/spirit/home/classic/utility/distinct.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL bdd38c252695f513ef7a120c9b662f31
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2016-2017, Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/formulas/geographic.hpp [3:4]
+ boost/geometry/strategies/geographic/distance_cross_track.hpp [3:3]
+ boost/geometry/strategies/geographic/intersection.hpp [5:6]
+ boost/geometry/strategies/geographic/intersection_elliptic.hpp [3:4]
+ boost/geometry/strategies/intersection.hpp [3:4]
+ boost/geometry/strategies/spherical/intersection.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL bdde4763d6a57dbe14d89f4fed53a008
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/fstream.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL bdeb97af7bd5bc8e73d3c9fc21c8f21f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2000, 2001 Stephen Cleary
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pool/object_pool.hpp [1:1]
+ boost/pool/pool.hpp [1:1]
+ boost/pool/pool_alloc.hpp [1:2]
+ boost/pool/poolfwd.hpp [1:1]
+ boost/pool/simple_segregated_storage.hpp [1:1]
+ boost/pool/singleton_pool.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL be0cf01b578e63b364470b7332f83307
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2010, 2012.
+ // Copyright Paul A. Bristow 2011, 2012.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/constants/calculate_constants.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL be44267cfc427e35019ccaf97e96aacb
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/comeau.hpp [1:8]
+ boost/config/compiler/intel.hpp [1:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL be5c67e7ba15e8061895f6a1cea1c23b
+BELONGS ya.make
+ License text:
+ // (C) Copyright Eric Jourdanneau, Joel Falcou 2010
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/nvcc.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL beaaefd3c7a2121b29605a685da1b68f
+BELONGS ya.make
+ License text:
+ // Copyright 2012 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_erasure/detail/check_call.hpp [3:3]
+ boost/type_erasure/detail/check_map.hpp [3:3]
+ boost/type_erasure/detail/const.hpp [3:3]
+ boost/type_erasure/detail/get_signature.hpp [3:3]
+ boost/type_erasure/detail/instantiate.hpp [3:3]
+ boost/type_erasure/detail/macro.hpp [3:3]
+ boost/type_erasure/detail/null.hpp [3:3]
+ boost/type_erasure/free.hpp [3:3]
+ boost/type_erasure/is_empty.hpp [3:3]
+ boost/type_erasure/is_subconcept.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL bed6ffae4a6ad5065eb6fafd56f354c5
+BELONGS ya.make
+ License text:
+ Copyright (c) 2010-2011: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/type_traits/infinity.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL bf1a568c053500311f215d9d3eb34330
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/get_max_size.hpp [3:6]
+ boost/geometry/policies/robustness/robust_type.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL bf1e7519f596cad8592beac9135468f3
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/actor.hpp [2:3]
+ boost/spirit/home/classic/actor/assign_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/assign_key_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/clear_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/decrement_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/erase_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/increment_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/insert_at_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/insert_key_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/push_back_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/push_front_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/ref_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/ref_const_ref_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp [2:3]
+ boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp [2:3]
+ boost/spirit/home/classic/actor/swap_actor.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL bf20d066d738abb72ed031e29830590e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/complex.hpp at line 15, boost/serialization/ephemeral.hpp at line 14, boost/serialization/is_bitwise_serializable.hpp at line 3
+ License text:
+ // (C) Copyright 2007 Matthias Troyer .
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/complex.hpp [13:15]
+ boost/serialization/ephemeral.hpp [12:14]
+ boost/serialization/is_bitwise_serializable.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL bf2ff0620c8b458255469b3f16d47c29
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/octonion.hpp at line 5, boost/math/quaternion.hpp at line 5, boost/math/special_functions/atanh.hpp at line 5, boost/math/special_functions/sinc.hpp at line 5, boost/math/special_functions/sinhc.hpp at line 5
+ License text:
+ // (C) Copyright Hubert Holin 2001.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/octonion.hpp [3:5]
+ boost/math/quaternion.hpp [3:5]
+ boost/math/special_functions/atanh.hpp [3:6]
+ boost/math/special_functions/sinc.hpp [3:5]
+ boost/math/special_functions/sinhc.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL bf641215d684707e5ad94b61496844f2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/lockable_adapter.hpp at line 5, boost/thread/null_mutex.hpp at line 5, boost/thread/poly_lockable.hpp at line 5, boost/thread/poly_lockable_adapter.hpp at line 5, boost/thread/poly_shared_lockable.hpp at line 5, boost/thread/poly_shared_lockable_adapter.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/lockable_adapter.hpp [3:5]
+ boost/thread/null_mutex.hpp [3:5]
+ boost/thread/poly_lockable.hpp [3:5]
+ boost/thread/poly_lockable_adapter.hpp [3:5]
+ boost/thread/poly_shared_lockable.hpp [3:5]
+ boost/thread/poly_shared_lockable_adapter.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL bfdb31b5eecacab9825848f2ef7ae35b
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/extreme_points.hpp [3:6]
+ boost/geometry/algorithms/detail/overlay/overlay.hpp [3:4]
+ boost/geometry/algorithms/point_on_surface.hpp [3:6]
+ boost/geometry/strategies/cartesian/intersection.hpp [3:4]
+ boost/geometry/strategies/spherical/point_in_poly_winding.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL bfe32bdf692840baf1378322cd282268
+BELONGS ya.make
+ License text:
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/actor/typeof.hpp [2:3]
+ boost/spirit/home/classic/attribute/closure_fwd.hpp [2:3]
+ boost/spirit/home/classic/attribute/typeof.hpp [2:3]
+ boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp [2:3]
+ boost/spirit/home/classic/core/primitives/numerics_fwd.hpp [2:3]
+ boost/spirit/home/classic/core/scanner/scanner_fwd.hpp [2:3]
+ boost/spirit/home/classic/core/scanner/skipper_fwd.hpp [2:3]
+ boost/spirit/home/classic/core/typeof.hpp [2:3]
+ boost/spirit/home/classic/debug/typeof.hpp [2:3]
+ boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp [2:3]
+ boost/spirit/home/classic/dynamic/typeof.hpp [2:3]
+ boost/spirit/home/classic/error_handling/exceptions_fwd.hpp [2:3]
+ boost/spirit/home/classic/error_handling/typeof.hpp [2:3]
+ boost/spirit/home/classic/iterator/file_iterator_fwd.hpp [2:3]
+ boost/spirit/home/classic/iterator/multi_pass_fwd.hpp [2:3]
+ boost/spirit/home/classic/iterator/typeof.hpp [2:3]
+ boost/spirit/home/classic/symbols/symbols_fwd.hpp [2:3]
+ boost/spirit/home/classic/symbols/typeof.hpp [2:3]
+ boost/spirit/home/classic/tree/ast_fwd.hpp [2:3]
+ boost/spirit/home/classic/tree/common_fwd.hpp [2:3]
+ boost/spirit/home/classic/tree/parse_tree_fwd.hpp [2:3]
+ boost/spirit/home/classic/tree/typeof.hpp [2:3]
+ boost/spirit/home/classic/utility/confix_fwd.hpp [2:3]
+ boost/spirit/home/classic/utility/distinct_fwd.hpp [2:3]
+ boost/spirit/home/classic/utility/escape_char_fwd.hpp [2:3]
+ boost/spirit/home/classic/utility/grammar_def_fwd.hpp [2:3]
+ boost/spirit/home/classic/utility/lists_fwd.hpp [2:3]
+ boost/spirit/home/classic/utility/rule_parser.hpp [2:3]
+ boost/spirit/home/classic/utility/typeof.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL bfe968029d2d7c0f9f5dd472d766b65f
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2011 Bryce Lelbach
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/qi/numeric/bool.hpp [2:3]
+ boost/spirit/home/qi/numeric/int.hpp [2:3]
+ boost/spirit/home/qi/numeric/real.hpp [2:3]
+ boost/spirit/home/qi/numeric/uint.hpp [2:4]
+ boost/spirit/home/support/utree/detail/utree_detail1.hpp [2:4]
+ boost/spirit/home/support/utree/detail/utree_detail2.hpp [2:4]
+ boost/spirit/home/support/utree/operators.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c00bfc5c4d0ddbae4e5f2f2570d510e6
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2017 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/extra_operations.hpp [6:6]
+ boost/atomic/detail/extra_operations_fwd.hpp [6:6]
+ boost/atomic/detail/extra_ops_msvc_arm.hpp [6:6]
+ boost/atomic/detail/extra_ops_msvc_x86.hpp [6:6]
+ boost/atomic/detail/hwcaps_gcc_arm.hpp [6:6]
+ boost/atomic/detail/hwcaps_gcc_ppc.hpp [6:6]
+ boost/atomic/detail/hwcaps_gcc_x86.hpp [6:6]
+ boost/atomic/detail/type_traits/conditional.hpp [6:6]
+ boost/atomic/detail/type_traits/integral_constant.hpp [6:6]
+ boost/atomic/detail/type_traits/is_function.hpp [6:6]
+ boost/atomic/detail/type_traits/is_integral.hpp [6:6]
+ boost/atomic/detail/type_traits/is_signed.hpp [6:6]
+ boost/atomic/detail/type_traits/make_signed.hpp [6:6]
+ boost/atomic/detail/type_traits/make_unsigned.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL c0163954740bc8af1c3c3e15261a286e
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2008
+ // Copyright Vicente J. Botet Escriba 2009
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/detail/inlined/chrono.hpp [3:4]
+ boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp [3:4]
+ boost/chrono/detail/inlined/posix/chrono.hpp [3:4]
+ boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c01ae716b2d1d913ab203a9f2242558c
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2005 Peter Dimov
+ // Copyright 2006 Michael van der Westhuizen
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_aix.hpp [8:10]
+ boost/smart_ptr/detail/sp_counted_base_solaris.hpp [8:10]
+ boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp [8:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL c03642adfbfa6845d494d4322dfc657d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017 Denis Demidov <dennis.demidov@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/types/size_t.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c053c607b6febdd053e512373ca02521
+BELONGS ya.make
+ License text:
+ // is handled by pj_transform.c.
+ // Author: Frank Warmerdam, warmerdam@pobox.com
+ // Copyright (c) 2002, Frank Warmerdam
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/geocent.hpp [28:30]
+
+KEEP COPYRIGHT_SERVICE_LABEL c06c9ff8636443eb86616d2d2c0497be
+BELONGS ya.make
+ License text:
+ // Copyright (C) Christof Meerwald 2003
+ // Copyright (C) Dan Watkins 2003
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/digitalmars.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c09f6e1583eaa14d572ddf59bb46a094
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/get_pointer.hpp at line 3
+ License text:
+ // Copyright Peter Dimov and David Abrahams 2002.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/get_pointer.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c0cc7e92279cc3a48222bedfe56172b7
+BELONGS ya.make
+ License text:
+ // Copyright Vicente J. Botet Escriba 2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ratio/detail/mpl/abs.hpp [3:3]
+ boost/ratio/detail/mpl/gcd.hpp [3:3]
+ boost/ratio/detail/mpl/lcm.hpp [3:3]
+ boost/ratio/detail/mpl/sign.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c0d96450cb0615da66f558ed677a7814
+BELONGS libs/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/test/src/debug.cpp at line 3
+ License text:
+ // (C) Copyright Gennadiy Rozental 2006-2010.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/test/src/debug.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c0f674f1c6cab703b5219f707cbe9dfb
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006, 2007.
+ // Copyright Paul A. Bristow 2006, 2007, 2009, 2010.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c1075534b934af727571516a0c60c43f
+BELONGS ya.make
+ License text:
+ Copyright 2017-2018 Glen Joseph Fernandes
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/detail/detector.hpp [2:2]
+ boost/type_traits/detected.hpp [2:2]
+ boost/type_traits/detected_or.hpp [2:2]
+ boost/type_traits/is_detected.hpp [2:2]
+ boost/type_traits/is_detected_convertible.hpp [2:2]
+ boost/type_traits/is_detected_exact.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c13e1def70a329f1d91812ef6ac1c8a3
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2010 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/heap/binomial_heap.hpp [3:3]
+ boost/heap/d_ary_heap.hpp [3:3]
+ boost/heap/detail/heap_comparison.hpp [3:3]
+ boost/heap/detail/heap_node.hpp [3:3]
+ boost/heap/detail/ilog2.hpp [3:3]
+ boost/heap/detail/mutable_heap.hpp [3:3]
+ boost/heap/detail/stable_heap.hpp [3:3]
+ boost/heap/detail/tree_iterator.hpp [3:3]
+ boost/heap/fibonacci_heap.hpp [3:3]
+ boost/heap/heap_concepts.hpp [3:3]
+ boost/heap/pairing_heap.hpp [3:3]
+ boost/heap/priority_queue.hpp [3:3]
+ boost/heap/skew_heap.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c1a3993adb0438ffac1f5423da136f0b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/is_convertible.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/detail/is_convertible.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL c1ad1eba3e3dc2cbb9f429a55bf844e6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/detail/config/windows_posix.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/detail/config/windows_posix.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL c1b95253eef284c58b6ab544fca6d743
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012 Oswin Krause
+ // Copyright (c) 2013 Joaquim Duran
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/matrix_vector.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c1dec1e9437c6eb354abe1a9562b2d77
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/decay.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/decay.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c22913d29a72689a4dc05182fbd952c3
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2013,2014 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/executors/work.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL c24b5b08917188c6ae925e003535d186
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/rolling_count.hpp at line 6, boost/accumulators/statistics/rolling_sum.hpp at line 6, boost/accumulators/statistics/rolling_window.hpp at line 6, boost/msm/back/fold_to_list.hpp at line 3, boost/proto/args.hpp at line 8, boost/proto/context.hpp at line 7, boost/proto/context/callable.hpp at line 11, boost/proto/context/default.hpp at line 9, boost/proto/context/detail/callable_eval.hpp at line 25, boost/proto/context/detail/default_eval.hpp at line 21, boost/proto/context/detail/null_eval.hpp at line 21, boost/proto/context/detail/preprocessed/callable_eval.hpp at line 7, boost/proto/context/detail/preprocessed/default_eval.hpp at line 7, boost/proto/context/detail/preprocessed/null_eval.hpp at line 7, boost/proto/context/null.hpp at line 9, boost/proto/core.hpp at line 8, boost/proto/debug.hpp at line 7, boost/proto/deep_copy.hpp at line 7, boost/proto/detail/and_n.hpp at line 17, boost/proto/detail/args.hpp at line 30, boost/proto/detail/as_lvalue.hpp at line 7, boost/proto/detail/basic_expr.hpp at line 30, boost/proto/detail/class_member_traits.hpp at line 17, boost/proto/detail/decltype.hpp at line 7, boost/proto/detail/deduce_domain_n.hpp at line 23, boost/proto/detail/deep_copy.hpp at line 29, boost/proto/detail/deprecated.hpp at line 8, boost/proto/detail/dont_care.hpp at line 7, boost/proto/detail/expr.hpp at line 35, boost/proto/detail/expr.hpp at line 63, boost/proto/detail/expr_funop.hpp at line 7, boost/proto/detail/extends_funop.hpp at line 27, boost/proto/detail/extends_funop_const.hpp at line 26, boost/proto/detail/funop.hpp at line 25, boost/proto/detail/generate_by_value.hpp at line 17, boost/proto/detail/ignore_unused.hpp at line 8, boost/proto/detail/is_noncopyable.hpp at line 7, boost/proto/detail/lambda_matches.hpp at line 23, boost/proto/detail/local.hpp at line 7, boost/proto/detail/make_expr.hpp at line 17, boost/proto/detail/make_expr_.hpp at line 17, boost/proto/detail/make_expr_funop.hpp at line 17, boost/proto/detail/matches_.hpp at line 31, boost/proto/detail/memfun_funop.hpp at line 17, boost/proto/detail/or_n.hpp at line 17, boost/proto/detail/poly_function.hpp at line 9, boost/proto/detail/poly_function_funop.hpp at line 22, boost/proto/detail/poly_function_traits.hpp at line 17, boost/proto/detail/preprocessed/and_n.hpp at line 7, boost/proto/detail/preprocessed/args.hpp at line 8, boost/proto/detail/preprocessed/basic_expr.hpp at line 7, boost/proto/detail/preprocessed/class_member_traits.hpp at line 7, boost/proto/detail/preprocessed/deduce_domain_n.hpp at line 7, boost/proto/detail/preprocessed/deep_copy.hpp at line 7, boost/proto/detail/preprocessed/expr.hpp at line 7, boost/proto/detail/preprocessed/expr_variadic.hpp at line 7, boost/proto/detail/preprocessed/extends_funop.hpp at line 7, boost/proto/detail/preprocessed/extends_funop_const.hpp at line 7, boost/proto/detail/preprocessed/funop.hpp at line 7, boost/proto/detail/preprocessed/generate_by_value.hpp at line 7, boost/proto/detail/preprocessed/lambda_matches.hpp at line 7, boost/proto/detail/preprocessed/make_expr.hpp at line 7, boost/proto/detail/preprocessed/make_expr_.hpp at line 7, boost/proto/detail/preprocessed/make_expr_funop.hpp at line 7, boost/proto/detail/preprocessed/matches_.hpp at line 7, boost/proto/detail/preprocessed/memfun_funop.hpp at line 7, boost/proto/detail/preprocessed/or_n.hpp at line 7, boost/proto/detail/preprocessed/poly_function_funop.hpp at line 7, boost/proto/detail/preprocessed/poly_function_traits.hpp at line 7, boost/proto/detail/preprocessed/template_arity_helper.hpp at line 7, boost/proto/detail/preprocessed/traits.hpp at line 7, boost/proto/detail/preprocessed/unpack_expr_.hpp at line 7, boost/proto/detail/preprocessed/vararg_matches_impl.hpp at line 7, boost/proto/detail/static_const.hpp at line 7, boost/proto/detail/template_arity_helper.hpp at line 17, boost/proto/detail/traits.hpp at line 22, boost/proto/detail/unpack_expr_.hpp at line 82, boost/proto/detail/vararg_matches_impl.hpp at line 17, boost/proto/domain.hpp at line 9, boost/proto/eval.hpp at line 7, boost/proto/expr.hpp at line 7, boost/proto/extends.hpp at line 7, boost/proto/fusion.hpp at line 7, boost/proto/generate.hpp at line 8, boost/proto/literal.hpp at line 8, boost/proto/make_expr.hpp at line 9, boost/proto/matches.hpp at line 8, boost/proto/operators.hpp at line 8, boost/proto/proto.hpp at line 7, boost/proto/proto_fwd.hpp at line 7, boost/proto/proto_typeof.hpp at line 8, boost/proto/repeat.hpp at line 7, boost/proto/tags.hpp at line 7, boost/proto/traits.hpp at line 9, boost/proto/transform.hpp at line 7, boost/proto/transform/arg.hpp at line 7, boost/proto/transform/call.hpp at line 7, boost/proto/transform/default.hpp at line 8, boost/proto/transform/detail/call.hpp at line 28, boost/proto/transform/detail/construct_funop.hpp at line 17, boost/proto/transform/detail/construct_pod_funop.hpp at line 17, boost/proto/transform/detail/default_function_impl.hpp at line 21, boost/proto/transform/detail/fold_impl.hpp at line 75, boost/proto/transform/detail/lazy.hpp at line 17, boost/proto/transform/detail/make.hpp at line 35, boost/proto/transform/detail/make_gcc_workaround.hpp at line 26, boost/proto/transform/detail/pass_through_impl.hpp at line 37, boost/proto/transform/detail/preprocessed/call.hpp at line 7, boost/proto/transform/detail/preprocessed/construct_funop.hpp at line 7, boost/proto/transform/detail/preprocessed/construct_pod_funop.hpp at line 7, boost/proto/transform/detail/preprocessed/default_function_impl.hpp at line 8, boost/proto/transform/detail/preprocessed/fold_impl.hpp at line 7, boost/proto/transform/detail/preprocessed/lazy.hpp at line 7, boost/proto/transform/detail/preprocessed/make.hpp at line 7, boost/proto/transform/detail/preprocessed/make_gcc_workaround.hpp at line 8, boost/proto/transform/detail/preprocessed/pass_through_impl.hpp at line 9, boost/proto/transform/detail/preprocessed/when.hpp at line 7, boost/proto/transform/detail/when.hpp at line 17, boost/proto/transform/fold.hpp at line 7, boost/proto/transform/fold_tree.hpp at line 7, boost/proto/transform/impl.hpp at line 7, boost/proto/transform/lazy.hpp at line 7, boost/proto/transform/make.hpp at line 7, boost/proto/transform/pass_through.hpp at line 10, boost/proto/transform/when.hpp at line 7, boost/regex/v4/regex_format.hpp at line 5, boost/xpressive/basic_regex.hpp at line 8, boost/xpressive/detail/core/access.hpp at line 6, boost/xpressive/detail/core/action.hpp at line 6, boost/xpressive/detail/core/adaptor.hpp at line 6, boost/xpressive/detail/core/finder.hpp at line 5, boost/xpressive/detail/core/flow_control.hpp at line 6, boost/xpressive/detail/core/icase.hpp at line 6, boost/xpressive/detail/core/linker.hpp at line 6, boost/xpressive/detail/core/matcher/action_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/alternate_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/any_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_line_base.hpp at line 6, boost/xpressive/detail/core/matcher/assert_word_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/attr_end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/attr_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/charset_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/epsilon_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/keeper_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/literal_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/lookahead_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/mark_end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/mark_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/optional_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/predicate_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/range_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/regex_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/set_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/string_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/true_matcher.hpp at line 6, boost/xpressive/detail/core/matchers.hpp at line 6, boost/xpressive/detail/core/optimize.hpp at line 6, boost/xpressive/detail/core/peeker.hpp at line 6, boost/xpressive/detail/core/quant_style.hpp at line 6, boost/xpressive/detail/core/regex_impl.hpp at line 6, boost/xpressive/detail/core/results_cache.hpp at line 6, boost/xpressive/detail/core/state.hpp at line 6, boost/xpressive/detail/core/sub_match_impl.hpp at line 6, boost/xpressive/detail/core/sub_match_vector.hpp at line 6, boost/xpressive/detail/detail_fwd.hpp at line 6, boost/xpressive/detail/dynamic/dynamic.hpp at line 6, boost/xpressive/detail/dynamic/matchable.hpp at line 6, boost/xpressive/detail/dynamic/parse_charset.hpp at line 6, boost/xpressive/detail/dynamic/parser.hpp at line 8, boost/xpressive/detail/dynamic/parser_enum.hpp at line 6, boost/xpressive/detail/dynamic/parser_traits.hpp at line 6, boost/xpressive/detail/dynamic/sequence.hpp at line 6, boost/xpressive/detail/static/compile.hpp at line 6, boost/xpressive/detail/static/grammar.hpp at line 6, boost/xpressive/detail/static/is_pure.hpp at line 6, boost/xpressive/detail/static/modifier.hpp at line 6, boost/xpressive/detail/static/placeholders.hpp at line 6, boost/xpressive/detail/static/static.hpp at line 6, boost/xpressive/detail/static/transforms/as_action.hpp at line 6, boost/xpressive/detail/static/transforms/as_alternate.hpp at line 6, boost/xpressive/detail/static/transforms/as_independent.hpp at line 6, boost/xpressive/detail/static/transforms/as_inverse.hpp at line 6, boost/xpressive/detail/static/transforms/as_marker.hpp at line 6, boost/xpressive/detail/static/transforms/as_matcher.hpp at line 6, boost/xpressive/detail/static/transforms/as_modifier.hpp at line 6, boost/xpressive/detail/static/transforms/as_quantifier.hpp at line 6, boost/xpressive/detail/static/transforms/as_sequence.hpp at line 6, boost/xpressive/detail/static/transforms/as_set.hpp at line 6, boost/xpressive/detail/static/transmogrify.hpp at line 6, boost/xpressive/detail/static/type_traits.hpp at line 6, boost/xpressive/detail/static/visitor.hpp at line 6, boost/xpressive/detail/static/width_of.hpp at line 6, boost/xpressive/detail/utility/algorithm.hpp at line 6, boost/xpressive/detail/utility/any.hpp at line 6, boost/xpressive/detail/utility/boyer_moore.hpp at line 9, boost/xpressive/detail/utility/chset/chset.hpp at line 6, boost/xpressive/detail/utility/cons.hpp at line 6, boost/xpressive/detail/utility/dont_care.hpp at line 6, boost/xpressive/detail/utility/hash_peek_bitset.hpp at line 6, boost/xpressive/detail/utility/ignore_unused.hpp at line 6, boost/xpressive/detail/utility/literals.hpp at line 6, boost/xpressive/detail/utility/never_true.hpp at line 6, boost/xpressive/detail/utility/save_restore.hpp at line 6, boost/xpressive/detail/utility/sequence_stack.hpp at line 6, boost/xpressive/detail/utility/tracking_ptr.hpp at line 6, boost/xpressive/detail/utility/traits_utils.hpp at line 6, boost/xpressive/detail/utility/width.hpp at line 6, boost/xpressive/match_results.hpp at line 9, boost/xpressive/regex_actions.hpp at line 7, boost/xpressive/regex_algorithms.hpp at line 7, boost/xpressive/regex_compiler.hpp at line 8, boost/xpressive/regex_constants.hpp at line 8, boost/xpressive/regex_error.hpp at line 7, boost/xpressive/regex_iterator.hpp at line 8, boost/xpressive/regex_primitives.hpp at line 7, boost/xpressive/regex_token_iterator.hpp at line 8, boost/xpressive/regex_traits.hpp at line 8, boost/xpressive/sub_match.hpp at line 8, boost/xpressive/traits/c_regex_traits.hpp at line 9, boost/xpressive/traits/cpp_regex_traits.hpp at line 9, boost/xpressive/traits/detail/c_ctype.hpp at line 6, boost/xpressive/traits/null_regex_traits.hpp at line 9, boost/xpressive/xpressive.hpp at line 8, boost/xpressive/xpressive_dynamic.hpp at line 7, boost/xpressive/xpressive_fwd.hpp at line 7, boost/xpressive/xpressive_static.hpp at line 8, boost/xpressive/xpressive_typeof.hpp at line 7
+ License text:
+ // Copyright 2008 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/rolling_count.hpp [4:6]
+ boost/accumulators/statistics/rolling_sum.hpp [4:6]
+ boost/accumulators/statistics/rolling_window.hpp [4:6]
+ boost/msm/back/fold_to_list.hpp [1:7]
+ boost/proto/args.hpp [6:8]
+ boost/proto/context.hpp [5:7]
+ boost/proto/context/callable.hpp [9:11]
+ boost/proto/context/default.hpp [7:9]
+ boost/proto/context/detail/callable_eval.hpp [23:25]
+ boost/proto/context/detail/default_eval.hpp [19:21]
+ boost/proto/context/detail/null_eval.hpp [19:21]
+ boost/proto/context/detail/preprocessed/callable_eval.hpp [5:7]
+ boost/proto/context/detail/preprocessed/default_eval.hpp [5:7]
+ boost/proto/context/detail/preprocessed/null_eval.hpp [5:7]
+ boost/proto/context/null.hpp [7:9]
+ boost/proto/core.hpp [6:8]
+ boost/proto/debug.hpp [5:7]
+ boost/proto/deep_copy.hpp [5:7]
+ boost/proto/detail/and_n.hpp [15:17]
+ boost/proto/detail/args.hpp [28:30]
+ boost/proto/detail/as_lvalue.hpp [5:7]
+ boost/proto/detail/basic_expr.hpp [28:30]
+ boost/proto/detail/class_member_traits.hpp [15:17]
+ boost/proto/detail/decltype.hpp [5:7]
+ boost/proto/detail/deduce_domain_n.hpp [21:23]
+ boost/proto/detail/deep_copy.hpp [27:29]
+ boost/proto/detail/deprecated.hpp [6:8]
+ boost/proto/detail/dont_care.hpp [5:7]
+ boost/proto/detail/expr.hpp [33:35]
+ boost/proto/detail/expr.hpp [61:63]
+ boost/proto/detail/expr_funop.hpp [5:7]
+ boost/proto/detail/extends_funop.hpp [25:27]
+ boost/proto/detail/extends_funop_const.hpp [24:26]
+ boost/proto/detail/funop.hpp [23:25]
+ boost/proto/detail/generate_by_value.hpp [15:17]
+ boost/proto/detail/ignore_unused.hpp [6:8]
+ boost/proto/detail/is_noncopyable.hpp [5:7]
+ boost/proto/detail/lambda_matches.hpp [21:23]
+ boost/proto/detail/local.hpp [5:7]
+ boost/proto/detail/make_expr.hpp [15:17]
+ boost/proto/detail/make_expr_.hpp [15:17]
+ boost/proto/detail/make_expr_funop.hpp [15:17]
+ boost/proto/detail/matches_.hpp [29:31]
+ boost/proto/detail/memfun_funop.hpp [15:17]
+ boost/proto/detail/or_n.hpp [15:17]
+ boost/proto/detail/poly_function.hpp [7:9]
+ boost/proto/detail/poly_function_funop.hpp [20:22]
+ boost/proto/detail/poly_function_traits.hpp [15:17]
+ boost/proto/detail/preprocessed/and_n.hpp [5:7]
+ boost/proto/detail/preprocessed/args.hpp [6:8]
+ boost/proto/detail/preprocessed/basic_expr.hpp [5:7]
+ boost/proto/detail/preprocessed/class_member_traits.hpp [5:7]
+ boost/proto/detail/preprocessed/deduce_domain_n.hpp [5:7]
+ boost/proto/detail/preprocessed/deep_copy.hpp [5:7]
+ boost/proto/detail/preprocessed/expr.hpp [5:7]
+ boost/proto/detail/preprocessed/expr_variadic.hpp [5:7]
+ boost/proto/detail/preprocessed/extends_funop.hpp [5:7]
+ boost/proto/detail/preprocessed/extends_funop_const.hpp [5:7]
+ boost/proto/detail/preprocessed/funop.hpp [5:7]
+ boost/proto/detail/preprocessed/generate_by_value.hpp [5:7]
+ boost/proto/detail/preprocessed/lambda_matches.hpp [5:7]
+ boost/proto/detail/preprocessed/make_expr.hpp [5:7]
+ boost/proto/detail/preprocessed/make_expr_.hpp [5:7]
+ boost/proto/detail/preprocessed/make_expr_funop.hpp [5:7]
+ boost/proto/detail/preprocessed/matches_.hpp [5:7]
+ boost/proto/detail/preprocessed/memfun_funop.hpp [5:7]
+ boost/proto/detail/preprocessed/or_n.hpp [5:7]
+ boost/proto/detail/preprocessed/poly_function_funop.hpp [5:7]
+ boost/proto/detail/preprocessed/poly_function_traits.hpp [5:7]
+ boost/proto/detail/preprocessed/template_arity_helper.hpp [5:7]
+ boost/proto/detail/preprocessed/traits.hpp [5:7]
+ boost/proto/detail/preprocessed/unpack_expr_.hpp [5:7]
+ boost/proto/detail/preprocessed/vararg_matches_impl.hpp [5:7]
+ boost/proto/detail/static_const.hpp [5:7]
+ boost/proto/detail/template_arity_helper.hpp [15:17]
+ boost/proto/detail/traits.hpp [20:22]
+ boost/proto/detail/unpack_expr_.hpp [80:82]
+ boost/proto/detail/vararg_matches_impl.hpp [15:17]
+ boost/proto/domain.hpp [7:9]
+ boost/proto/eval.hpp [5:7]
+ boost/proto/expr.hpp [5:7]
+ boost/proto/extends.hpp [5:7]
+ boost/proto/fusion.hpp [5:7]
+ boost/proto/generate.hpp [6:8]
+ boost/proto/literal.hpp [6:8]
+ boost/proto/make_expr.hpp [7:9]
+ boost/proto/matches.hpp [6:8]
+ boost/proto/operators.hpp [6:8]
+ boost/proto/proto.hpp [5:7]
+ boost/proto/proto_fwd.hpp [5:7]
+ boost/proto/proto_typeof.hpp [6:8]
+ boost/proto/repeat.hpp [5:7]
+ boost/proto/tags.hpp [5:7]
+ boost/proto/traits.hpp [7:9]
+ boost/proto/transform.hpp [5:7]
+ boost/proto/transform/arg.hpp [5:7]
+ boost/proto/transform/call.hpp [5:7]
+ boost/proto/transform/default.hpp [6:8]
+ boost/proto/transform/detail/call.hpp [26:28]
+ boost/proto/transform/detail/construct_funop.hpp [15:17]
+ boost/proto/transform/detail/construct_pod_funop.hpp [15:17]
+ boost/proto/transform/detail/default_function_impl.hpp [19:21]
+ boost/proto/transform/detail/fold_impl.hpp [73:75]
+ boost/proto/transform/detail/lazy.hpp [15:17]
+ boost/proto/transform/detail/make.hpp [33:35]
+ boost/proto/transform/detail/make_gcc_workaround.hpp [24:26]
+ boost/proto/transform/detail/pass_through_impl.hpp [35:37]
+ boost/proto/transform/detail/preprocessed/call.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/construct_funop.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/construct_pod_funop.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/default_function_impl.hpp [6:8]
+ boost/proto/transform/detail/preprocessed/fold_impl.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/lazy.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/make.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/make_gcc_workaround.hpp [6:8]
+ boost/proto/transform/detail/preprocessed/pass_through_impl.hpp [7:9]
+ boost/proto/transform/detail/preprocessed/when.hpp [5:7]
+ boost/proto/transform/detail/when.hpp [15:17]
+ boost/proto/transform/fold.hpp [5:7]
+ boost/proto/transform/fold_tree.hpp [5:7]
+ boost/proto/transform/impl.hpp [5:7]
+ boost/proto/transform/lazy.hpp [5:7]
+ boost/proto/transform/make.hpp [5:7]
+ boost/proto/transform/pass_through.hpp [8:10]
+ boost/proto/transform/when.hpp [5:7]
+ boost/regex/v4/regex_format.hpp [3:4]
+ boost/xpressive/basic_regex.hpp [6:8]
+ boost/xpressive/detail/core/access.hpp [4:6]
+ boost/xpressive/detail/core/action.hpp [4:6]
+ boost/xpressive/detail/core/adaptor.hpp [4:6]
+ boost/xpressive/detail/core/finder.hpp [3:5]
+ boost/xpressive/detail/core/flow_control.hpp [4:6]
+ boost/xpressive/detail/core/icase.hpp [4:6]
+ boost/xpressive/detail/core/linker.hpp [4:6]
+ boost/xpressive/detail/core/matcher/action_matcher.hpp [4:5]
+ boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/alternate_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/any_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_line_base.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_word_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/attr_end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/attr_matcher.hpp [4:5]
+ boost/xpressive/detail/core/matcher/charset_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/epsilon_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/keeper_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/literal_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/lookahead_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/mark_end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/mark_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/optional_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/predicate_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/range_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/regex_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/set_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/string_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/true_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matchers.hpp [4:6]
+ boost/xpressive/detail/core/optimize.hpp [4:6]
+ boost/xpressive/detail/core/peeker.hpp [4:6]
+ boost/xpressive/detail/core/quant_style.hpp [4:6]
+ boost/xpressive/detail/core/regex_impl.hpp [4:6]
+ boost/xpressive/detail/core/results_cache.hpp [4:6]
+ boost/xpressive/detail/core/state.hpp [4:6]
+ boost/xpressive/detail/core/sub_match_impl.hpp [4:6]
+ boost/xpressive/detail/core/sub_match_vector.hpp [4:6]
+ boost/xpressive/detail/detail_fwd.hpp [4:6]
+ boost/xpressive/detail/dynamic/dynamic.hpp [4:6]
+ boost/xpressive/detail/dynamic/matchable.hpp [4:6]
+ boost/xpressive/detail/dynamic/parse_charset.hpp [4:6]
+ boost/xpressive/detail/dynamic/parser.hpp [6:8]
+ boost/xpressive/detail/dynamic/parser_enum.hpp [4:6]
+ boost/xpressive/detail/dynamic/parser_traits.hpp [4:6]
+ boost/xpressive/detail/dynamic/sequence.hpp [4:6]
+ boost/xpressive/detail/static/compile.hpp [4:6]
+ boost/xpressive/detail/static/grammar.hpp [4:6]
+ boost/xpressive/detail/static/is_pure.hpp [4:6]
+ boost/xpressive/detail/static/modifier.hpp [4:6]
+ boost/xpressive/detail/static/placeholders.hpp [4:6]
+ boost/xpressive/detail/static/static.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_action.hpp [4:5]
+ boost/xpressive/detail/static/transforms/as_alternate.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_independent.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_inverse.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_marker.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_matcher.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_modifier.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_quantifier.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_sequence.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_set.hpp [4:6]
+ boost/xpressive/detail/static/transmogrify.hpp [4:6]
+ boost/xpressive/detail/static/type_traits.hpp [4:6]
+ boost/xpressive/detail/static/visitor.hpp [4:6]
+ boost/xpressive/detail/static/width_of.hpp [4:6]
+ boost/xpressive/detail/utility/algorithm.hpp [4:6]
+ boost/xpressive/detail/utility/any.hpp [4:6]
+ boost/xpressive/detail/utility/boyer_moore.hpp [7:9]
+ boost/xpressive/detail/utility/chset/chset.hpp [4:6]
+ boost/xpressive/detail/utility/cons.hpp [4:6]
+ boost/xpressive/detail/utility/dont_care.hpp [4:6]
+ boost/xpressive/detail/utility/hash_peek_bitset.hpp [4:6]
+ boost/xpressive/detail/utility/ignore_unused.hpp [4:6]
+ boost/xpressive/detail/utility/literals.hpp [4:6]
+ boost/xpressive/detail/utility/never_true.hpp [4:6]
+ boost/xpressive/detail/utility/save_restore.hpp [4:6]
+ boost/xpressive/detail/utility/sequence_stack.hpp [4:6]
+ boost/xpressive/detail/utility/tracking_ptr.hpp [4:6]
+ boost/xpressive/detail/utility/traits_utils.hpp [4:6]
+ boost/xpressive/detail/utility/width.hpp [4:6]
+ boost/xpressive/match_results.hpp [7:9]
+ boost/xpressive/regex_actions.hpp [5:7]
+ boost/xpressive/regex_algorithms.hpp [5:7]
+ boost/xpressive/regex_compiler.hpp [6:8]
+ boost/xpressive/regex_constants.hpp [6:8]
+ boost/xpressive/regex_error.hpp [5:7]
+ boost/xpressive/regex_iterator.hpp [6:8]
+ boost/xpressive/regex_primitives.hpp [5:7]
+ boost/xpressive/regex_token_iterator.hpp [6:8]
+ boost/xpressive/regex_traits.hpp [6:8]
+ boost/xpressive/sub_match.hpp [6:8]
+ boost/xpressive/traits/c_regex_traits.hpp [7:9]
+ boost/xpressive/traits/cpp_regex_traits.hpp [7:9]
+ boost/xpressive/traits/detail/c_ctype.hpp [4:6]
+ boost/xpressive/traits/null_regex_traits.hpp [7:9]
+ boost/xpressive/xpressive.hpp [6:8]
+ boost/xpressive/xpressive_dynamic.hpp [5:7]
+ boost/xpressive/xpressive_fwd.hpp [5:7]
+ boost/xpressive/xpressive_static.hpp [6:8]
+ boost/xpressive/xpressive_typeof.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL c2741368ba398ca55c95dc8b018d1cb0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/context/all.hpp at line 4, boost/coroutine2/detail/pull_control_block_cc.hpp at line 4, boost/coroutine2/detail/pull_control_block_cc.ipp at line 4, boost/fiber/buffered_channel.hpp at line 4, boost/fiber/detail/cpu_relax.hpp at line 4, boost/fiber/detail/futex.hpp at line 4, boost/fiber/detail/spinlock_ttas.hpp at line 4, boost/fiber/detail/spinlock_ttas_adaptive.hpp at line 4, boost/fiber/detail/spinlock_ttas_adaptive_futex.hpp at line 4, boost/fiber/detail/spinlock_ttas_futex.hpp at line 4, boost/fiber/unbuffered_channel.hpp at line 4
+ License text:
+ // Copyright Oliver Kowalke 2016.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/context/all.hpp [2:4]
+ boost/coroutine2/detail/pull_control_block_cc.hpp [2:4]
+ boost/coroutine2/detail/pull_control_block_cc.ipp [2:4]
+ boost/fiber/buffered_channel.hpp [2:4]
+ boost/fiber/detail/cpu_relax.hpp [2:4]
+ boost/fiber/detail/futex.hpp [2:4]
+ boost/fiber/detail/spinlock_ttas.hpp [2:4]
+ boost/fiber/detail/spinlock_ttas_adaptive.hpp [2:4]
+ boost/fiber/detail/spinlock_ttas_adaptive_futex.hpp [2:4]
+ boost/fiber/detail/spinlock_ttas_futex.hpp [2:4]
+ boost/fiber/unbuffered_channel.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c29d179088542ed9c943e7ea0446a664
+BELONGS ya.make
+ License text:
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Thorsten Ottosen
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/util/detail/is_range.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL c2a40dd3d7fc7e08707b6696db3af8f2
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001, Daniel C. Nuffer
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/iterator/multi_pass.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c2a75373687b831a8c883e962d773df6
+BELONGS ya.make
+ License text:
+ Copyright (c) 2012 Paul Fultz II
+ first_of.h
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hof/detail/delegate.hpp [2:4]
+ boost/hof/detail/join.hpp [2:4]
+ boost/hof/detail/seq.hpp [2:4]
+ boost/hof/first_of.hpp [2:4]
+ boost/hof/identity.hpp [2:4]
+ boost/hof/implicit.hpp [2:4]
+ boost/hof/match.hpp [2:4]
+ boost/hof/partial.hpp [2:4]
+ boost/hof/pipable.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c2b674f0ff2226395728254aea84cfa4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/io/svg/svg_mapper.hpp [3:3]
+ boost/geometry/strategies/cartesian/centroid_weighted_length.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c2b774c26af57c9a8aa6c361e73bd74c
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001, Daniel C. Nuffer
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/impl/basic_xml_grammar.hpp [27:27]
+ boost/spirit/home/classic/iterator/fixed_size_queue.hpp [2:4]
+ boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/detail/first_owner_policy.hpp [1:2]
+ boost/spirit/home/support/iterators/look_ahead.hpp [1:3]
+ boost/spirit/home/support/iterators/multi_pass.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c30de2713f6adb4cc18cd66c69ba60b2
+BELONGS ya.make
+ License text:
+ // Copyright (c) David Abrahams 2001.
+ // Copyright (c) Jeremy Siek 2001-2003.
+ // Copyright (c) Thomas Witt 2002.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/new_iterator_tests.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL c37cd15a7f997072c7c854c7d6195fe3
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2006, 2007
+ // Copyright Christoper Kohlhoff 2007
+ // Copyright Peter Dimov 2017, 2018
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/error_code.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL c3813bc43fb45363daf247950761e4d4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/library/c/_prefix.h at line 4, boost/predef/library/std/_prefix.h at line 4
+ License text:
+ Copyright Rene Rivera 2008-2013
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/library/c/_prefix.h [2:4]
+ boost/predef/library/std/_prefix.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c3a440d06912f47e5190235167d26eea
+BELONGS ya.make
+ License text:
+ // Copyright 2001 University of Notre Dame.
+ // Copyright 2006 Trustees of Indiana University
+ // Authors: Jeremy G. Siek and Douglas Gregor <dgregor@cs.indiana.edu>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/adjacency_matrix.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c3ce9643507aa0942a28211fe8f95eff
+BELONGS libs/context/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/context/continuation.hpp at line 4, boost/context/continuation_fcontext.hpp at line 4, boost/context/continuation_ucontext.hpp at line 4, boost/context/continuation_winfib.hpp at line 4, boost/context/detail/prefetch.hpp at line 3, boost/context/fiber.hpp at line 4, boost/context/fiber_fcontext.hpp at line 4, boost/context/fiber_ucontext.hpp at line 4, boost/context/fiber_winfib.hpp at line 4, boost/fiber/algo/numa/work_stealing.hpp at line 4, boost/fiber/cuda/waitfor.hpp at line 4, boost/fiber/detail/is_all_same.hpp at line 4, boost/fiber/detail/rtm.hpp at line 4, boost/fiber/detail/spinlock_rtm.hpp at line 4, boost/fiber/detail/spinlock_status.hpp at line 4, boost/fiber/hip/waitfor.hpp at line 4, boost/fiber/numa/pin_thread.hpp at line 4, boost/fiber/numa/topology.hpp at line 4, libs/context/src/continuation.cpp at line 4, libs/context/src/fiber.cpp at line 4
+ License text:
+ // Copyright Oliver Kowalke 2017.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/context/continuation.hpp [2:4]
+ boost/context/continuation_fcontext.hpp [2:4]
+ boost/context/continuation_ucontext.hpp [2:4]
+ boost/context/continuation_winfib.hpp [2:4]
+ boost/context/detail/prefetch.hpp [1:3]
+ boost/context/fiber.hpp [2:4]
+ boost/context/fiber_fcontext.hpp [2:4]
+ boost/context/fiber_ucontext.hpp [2:4]
+ boost/context/fiber_winfib.hpp [2:4]
+ boost/fiber/algo/numa/work_stealing.hpp [2:4]
+ boost/fiber/cuda/waitfor.hpp [2:4]
+ boost/fiber/detail/is_all_same.hpp [2:4]
+ boost/fiber/detail/rtm.hpp [2:4]
+ boost/fiber/detail/spinlock_rtm.hpp [2:4]
+ boost/fiber/detail/spinlock_status.hpp [2:4]
+ boost/fiber/hip/waitfor.hpp [2:4]
+ boost/fiber/numa/pin_thread.hpp [2:4]
+ boost/fiber/numa/topology.hpp [2:4]
+ libs/context/src/continuation.cpp [2:4]
+ libs/context/src/fiber.cpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c3f6937fa9ed593f0837a0f91c6d568a
+BELONGS libs/chrono/ya.make ya.make
+ License text:
+ // Copyright 2010 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/detail/inlined/thread_clock.hpp [3:3]
+ boost/chrono/detail/inlined/win/thread_clock.hpp [3:3]
+ boost/chrono/detail/scan_keyword.hpp [12:12]
+ boost/ratio.hpp [3:3]
+ boost/type_traits/add_rvalue_reference.hpp [3:3]
+ boost/type_traits/declval.hpp [3:3]
+ boost/utility/declval.hpp [3:3]
+ boost/winapi/apc.hpp [2:3]
+ boost/winapi/basic_types.hpp [2:3]
+ boost/winapi/condition_variable.hpp [2:3]
+ boost/winapi/critical_section.hpp [2:3]
+ boost/winapi/directory_management.hpp [2:3]
+ boost/winapi/dll.hpp [2:5]
+ boost/winapi/error_handling.hpp [2:4]
+ boost/winapi/event.hpp [2:3]
+ boost/winapi/file_management.hpp [2:5]
+ boost/winapi/file_mapping.hpp [2:5]
+ boost/winapi/get_current_process.hpp [2:3]
+ boost/winapi/get_current_process_id.hpp [2:2]
+ boost/winapi/get_current_thread.hpp [2:3]
+ boost/winapi/get_current_thread_id.hpp [2:3]
+ boost/winapi/get_last_error.hpp [2:3]
+ boost/winapi/get_process_times.hpp [2:2]
+ boost/winapi/get_thread_times.hpp [2:3]
+ boost/winapi/handles.hpp [2:3]
+ boost/winapi/heap_memory.hpp [2:3]
+ boost/winapi/init_once.hpp [2:3]
+ boost/winapi/local_memory.hpp [2:3]
+ boost/winapi/memory.hpp [2:3]
+ boost/winapi/mutex.hpp [2:3]
+ boost/winapi/security.hpp [2:3]
+ boost/winapi/semaphore.hpp [2:3]
+ boost/winapi/srw_lock.hpp [2:3]
+ boost/winapi/synchronization.hpp [2:3]
+ boost/winapi/system.hpp [2:4]
+ boost/winapi/thread.hpp [2:3]
+ boost/winapi/time.hpp [2:4]
+ boost/winapi/timers.hpp [2:3]
+ boost/winapi/wait.hpp [2:4]
+ libs/chrono/src/thread_clock.cpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c42c62dc83160665ca873f9cf86d5120
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/delta_stepping_shortest_paths.hpp [1:1]
+ boost/mpi/intercommunicator.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL c43f1a8f551d96ac636a4afde37c7277
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2009 Eric Bose-Wolf
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/transitive_reduction.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL c44aa21684966e124d964b7f61ceb274
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2006 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/distributed/compressed_sparse_row_graph.hpp [1:1]
+ boost/graph/distributed/selector.hpp [1:1]
+ boost/graph/distributed/st_connected.hpp [1:1]
+ boost/graph/distributed/two_bit_color_map.hpp [1:1]
+ boost/graph/distributed/unsafe_serialize.hpp [1:1]
+ boost/graph/st_connected.hpp [1:1]
+ boost/property_map/parallel/unsafe_serialize.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL c4522d1369b94279fbb23ab0ac17f56f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2013-2014 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/csbl/memory/unique_ptr.hpp [1:1]
+ boost/thread/executors/basic_thread_pool.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL c46012eca8a3e5ac59a255e4e1b4af11
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2003, 2006, 2008
+ // Copyright 2009-2011 Vicente J. Botet Escriba
+ // Copyright (c) Microsoft Corporation 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/config.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL c49f54d66ea47f16d108769b63951ae7
+BELONGS ya.make
+ License text:
+ Author: Joachim Faulhaber
+ Copyright (c) 2009-2010: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/detail/design_config.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c4fca1d4b932defc8caff94eaf8ea7e8
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2010 Peder Holt
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/unsupported.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c511f6b71fbe5ddd178ed0f458fb2bd2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/flyweight/detail/recursive_lw_mutex.hpp at line 3
+ License text:
+ /* Copyright 2006-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/flyweight/detail/recursive_lw_mutex.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c53a70d05211d1267ddeb5866bb86169
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2010 Nuovation System Designs, LLC
+ // Grant Erickson <gerickson@nuovations.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/cxx11/is_sorted.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c5a98cb7899420f8c9cbc5618165814f
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/policies/robustness/get_rescale_policy.hpp [3:6]
+ boost/geometry/policies/robustness/rescale_policy.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL c5e47f450728151ab0ae75f0eff6e2ec
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/expand/box.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/indexed.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/point.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/segment.hpp [3:6]
+ boost/geometry/algorithms/dispatch/expand.hpp [3:6]
+ boost/geometry/algorithms/expand.hpp [3:6]
+ boost/geometry/strategies/distance_result.hpp [3:7]
+ boost/geometry/util/combine_if.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c60de0ab1b87180baa8dac7f813ae3b4
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/constants/constants.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c640a5601cfe103fea089d974c7050b7
+BELONGS ya.make
+ License text:
+ // (C) Copyright Darin Adler 2000
+ // (C) Copyright Beman Dawes 2006, 2009, 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/endian/arithmetic.hpp [3:4]
+ boost/endian/buffers.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c6910ec25728192b1e3d5d011fd08bc4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/rolling_moment.hpp at line 6, boost/accumulators/statistics/rolling_variance.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/rolling_moment.hpp [3:6]
+ boost/accumulators/statistics/rolling_variance.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL c6ddcace49cae4846a1e1f29e64a3cb8
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002 Eric Friedman, Itay Maman
+ // Copyright (c) 2016-2017 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/recursive_wrapper_fwd.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL c6f32cbdc60da329c029d3eceb822cb5
+BELONGS ya.make
+ License text:
+ // Copyright 2001 Indiana University
+ // Author: Jeremy G. Siek
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/iteration_macros.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c709b7e0fb1043b3cbf5a01d9703ab0b
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2007-8 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/move.hpp [4:5]
+ boost/thread/detail/platform_time.hpp [3:4]
+ boost/thread/pthread/condition_variable_fwd.hpp [6:7]
+ boost/thread/pthread/mutex.hpp [3:6]
+ boost/thread/pthread/once.hpp [6:7]
+ boost/thread/pthread/pthread_mutex_scoped_lock.hpp [3:3]
+ boost/thread/pthread/recursive_mutex.hpp [3:6]
+ boost/thread/thread.hpp [6:6]
+ boost/thread/tss.hpp [6:6]
+ boost/thread/win32/condition_variable.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL c71c982168dadac76afc264af18e2e74
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/buffer/buffered_ring.hpp [3:3]
+ boost/geometry/strategies/cartesian/buffer_end_round.hpp [3:3]
+ boost/geometry/strategies/cartesian/buffer_join_round.hpp [3:3]
+ boost/geometry/strategies/cartesian/buffer_point_circle.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c76a2f55366b4f9354548d6ef58f5636
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/array.hpp at line 6, boost/preprocessor/array/enum.hpp at line 6, boost/preprocessor/array/to_list.hpp at line 6, boost/preprocessor/array/to_seq.hpp at line 6, boost/preprocessor/array/to_tuple.hpp at line 6, boost/preprocessor/config/config.hpp at line 6, boost/preprocessor/facilities.hpp at line 6, boost/preprocessor/facilities/overload.hpp at line 6, boost/preprocessor/library.hpp at line 6, boost/preprocessor/list/to_seq.hpp at line 6, boost/preprocessor/seq.hpp at line 6, boost/preprocessor/seq/to_list.hpp at line 6, boost/preprocessor/tuple/enum.hpp at line 6, boost/preprocessor/tuple/size.hpp at line 6, boost/preprocessor/tuple/to_array.hpp at line 6, boost/preprocessor/tuple/to_seq.hpp at line 6, boost/preprocessor/variadic.hpp at line 6, boost/preprocessor/variadic/elem.hpp at line 6, boost/preprocessor/variadic/size.hpp at line 6, boost/preprocessor/variadic/to_array.hpp at line 6, boost/preprocessor/variadic/to_list.hpp at line 6, boost/preprocessor/variadic/to_seq.hpp at line 6, boost/preprocessor/variadic/to_tuple.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/array.hpp [3:6]
+ boost/preprocessor/array/enum.hpp [3:6]
+ boost/preprocessor/array/to_list.hpp [3:6]
+ boost/preprocessor/array/to_seq.hpp [3:6]
+ boost/preprocessor/array/to_tuple.hpp [3:6]
+ boost/preprocessor/config/config.hpp [3:6]
+ boost/preprocessor/facilities.hpp [3:6]
+ boost/preprocessor/facilities/overload.hpp [3:6]
+ boost/preprocessor/library.hpp [3:6]
+ boost/preprocessor/list/to_seq.hpp [3:5]
+ boost/preprocessor/seq.hpp [3:6]
+ boost/preprocessor/seq/to_list.hpp [3:6]
+ boost/preprocessor/tuple/enum.hpp [3:6]
+ boost/preprocessor/tuple/size.hpp [3:6]
+ boost/preprocessor/tuple/to_array.hpp [3:6]
+ boost/preprocessor/tuple/to_seq.hpp [3:6]
+ boost/preprocessor/variadic.hpp [3:6]
+ boost/preprocessor/variadic/elem.hpp [3:6]
+ boost/preprocessor/variadic/size.hpp [3:6]
+ boost/preprocessor/variadic/to_array.hpp [3:6]
+ boost/preprocessor/variadic/to_list.hpp [3:6]
+ boost/preprocessor/variadic/to_seq.hpp [3:6]
+ boost/preprocessor/variadic/to_tuple.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL c78d51f4dac16e21ce87ad483fecbb48
+BELONGS ya.make
+ License text:
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint.hpp [9:10]
+ boost/numeric/odeint/algebra/default_operations.hpp [9:10]
+ boost/numeric/odeint/algebra/range_algebra.hpp [10:11]
+ boost/numeric/odeint/algebra/vector_space_algebra.hpp [9:10]
+ boost/numeric/odeint/external/thrust/thrust_algebra.hpp [9:11]
+ boost/numeric/odeint/external/thrust/thrust_operations.hpp [9:10]
+ boost/numeric/odeint/stepper/euler.hpp [10:11]
+ boost/numeric/odeint/stepper/runge_kutta4_classic.hpp [9:11]
+ boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp [9:11]
+ boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL c7981cf792be7f48f85bf12a688929cc
+BELONGS ya.make
+ License text:
+ //Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/qvm/gen/mat_assign2.hpp [1:1]
+ boost/qvm/gen/mat_assign3.hpp [1:1]
+ boost/qvm/gen/mat_assign4.hpp [1:1]
+ boost/qvm/gen/mat_operations2.hpp [1:1]
+ boost/qvm/gen/mat_operations3.hpp [1:1]
+ boost/qvm/gen/mat_operations4.hpp [1:1]
+ boost/qvm/gen/swizzle2.hpp [1:1]
+ boost/qvm/gen/swizzle3.hpp [1:1]
+ boost/qvm/gen/swizzle4.hpp [1:1]
+ boost/qvm/gen/vec_assign2.hpp [1:1]
+ boost/qvm/gen/vec_assign3.hpp [1:1]
+ boost/qvm/gen/vec_assign4.hpp [1:1]
+ boost/qvm/gen/vec_mat_operations2.hpp [1:1]
+ boost/qvm/gen/vec_mat_operations3.hpp [1:1]
+ boost/qvm/gen/vec_mat_operations4.hpp [1:1]
+ boost/qvm/gen/vec_operations2.hpp [1:1]
+ boost/qvm/gen/vec_operations3.hpp [1:1]
+ boost/qvm/gen/vec_operations4.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL c7cb1452efce1db5158dd9b492eedf8a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/formatted.hpp at line 5, boost/range/detail/combine_cxx03.hpp at line 5, boost/range/detail/combine_cxx11.hpp at line 3, boost/range/detail/combine_no_rvalue.hpp at line 5, boost/range/detail/combine_rvalue.hpp at line 5, boost/range/detail/default_constructible_unary_fn.hpp at line 5, boost/range/detail/has_member_size.hpp at line 5, boost/range/iterator_range_hash.hpp at line 5, boost/range/traversal.hpp at line 5
+ License text:
+ // Copyright Neil Groves 2014
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/adaptor/formatted.hpp [3:5]
+ boost/range/detail/combine_cxx03.hpp [3:5]
+ boost/range/detail/combine_cxx11.hpp [1:3]
+ boost/range/detail/combine_no_rvalue.hpp [3:5]
+ boost/range/detail/combine_rvalue.hpp [3:5]
+ boost/range/detail/default_constructible_unary_fn.hpp [3:5]
+ boost/range/detail/has_member_size.hpp [3:3]
+ boost/range/iterator_range_hash.hpp [3:5]
+ boost/range/traversal.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL c7cf09499d2dd399cc5598f624cdc124
+BELONGS ya.make
+ License text:
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/config.hpp [9:10]
+ boost/numeric/odeint/external/gsl/gsl_wrapper.hpp [9:10]
+ boost/numeric/odeint/integrate/integrate.hpp [9:10]
+ boost/numeric/odeint/integrate/null_observer.hpp [9:10]
+ boost/numeric/odeint/integrate/observer_collection.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp [9:10]
+ boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/make_controlled.hpp [9:10]
+ boost/numeric/odeint/stepper/generation/make_dense_output.hpp [9:10]
+ boost/numeric/odeint/stepper/rosenbrock4.hpp [10:12]
+ boost/numeric/odeint/stepper/rosenbrock4_controller.hpp [9:11]
+ boost/numeric/odeint/util/copy.hpp [9:10]
+ boost/numeric/odeint/util/resizer.hpp [9:10]
+ boost/numeric/odeint/util/state_wrapper.hpp [10:11]
+ boost/numeric/odeint/version.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL c7fb90bfcebe93e2405dc45f1e9ec21a
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/equals/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/sections/sectionalize.hpp [3:6]
+ boost/geometry/algorithms/equals.hpp [3:6]
+ boost/geometry/index/detail/bounded_view.hpp [6:6]
+ boost/geometry/policies/robustness/get_rescale_policy.hpp [3:6]
+ boost/geometry/policies/robustness/rescale_policy.hpp [3:6]
+ boost/geometry/views/detail/indexed_point_view.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL c80445a5f7df9ecc827dd650da9cbaa8
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002, 2003 Peter Dimov
+ // Copyright (c) 2003 Daniel Frey
+ // Copyright (c) 2003 Howard Hinnant
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/checked_delete.hpp [13:15]
+
+KEEP COPYRIGHT_SERVICE_LABEL c8491f9471a05c66b2b0b94793f3fadc
+BELONGS ya.make
+ License text:
+ // Copyright Pavol Droba 2002-2003.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/string/case_conv.hpp [3:3]
+ boost/algorithm/string/classification.hpp [3:3]
+ boost/algorithm/string/concept.hpp [3:3]
+ boost/algorithm/string/config.hpp [3:3]
+ boost/algorithm/string/constants.hpp [3:3]
+ boost/algorithm/string/detail/case_conv.hpp [3:3]
+ boost/algorithm/string/detail/classification.hpp [3:3]
+ boost/algorithm/string/detail/find_format.hpp [3:3]
+ boost/algorithm/string/detail/find_format_all.hpp [3:3]
+ boost/algorithm/string/detail/find_format_store.hpp [3:3]
+ boost/algorithm/string/detail/find_iterator.hpp [3:3]
+ boost/algorithm/string/detail/finder_regex.hpp [3:3]
+ boost/algorithm/string/detail/formatter.hpp [3:3]
+ boost/algorithm/string/detail/formatter_regex.hpp [3:3]
+ boost/algorithm/string/detail/predicate.hpp [3:3]
+ boost/algorithm/string/detail/replace_storage.hpp [3:3]
+ boost/algorithm/string/detail/sequence.hpp [3:3]
+ boost/algorithm/string/detail/trim.hpp [3:3]
+ boost/algorithm/string/detail/util.hpp [3:3]
+ boost/algorithm/string/find.hpp [3:3]
+ boost/algorithm/string/find_format.hpp [3:3]
+ boost/algorithm/string/formatter.hpp [3:3]
+ boost/algorithm/string/iter_find.hpp [3:3]
+ boost/algorithm/string/predicate.hpp [3:3]
+ boost/algorithm/string/predicate_facade.hpp [3:3]
+ boost/algorithm/string/regex.hpp [3:3]
+ boost/algorithm/string/regex_find_format.hpp [3:3]
+ boost/algorithm/string/sequence_traits.hpp [3:3]
+ boost/algorithm/string/std/list_traits.hpp [3:3]
+ boost/algorithm/string/std/rope_traits.hpp [3:3]
+ boost/algorithm/string/std/slist_traits.hpp [3:3]
+ boost/algorithm/string/std/string_traits.hpp [3:3]
+ boost/algorithm/string/std_containers_traits.hpp [3:3]
+ boost/algorithm/string/trim.hpp [3:3]
+ boost/algorithm/string/trim_all.hpp [3:3]
+ boost/algorithm/string/yes_no_type.hpp [3:3]
+ boost/range/detail/collection_traits.hpp [3:5]
+ boost/range/detail/collection_traits_detail.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL c852fa161dd8444a44450deac07d7631
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/geometries/polygon.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL c8b2225195e675e39283e940da8d4aca
+BELONGS ya.make
+ License text:
+ // Copyright 2013 Maciej Piechotka
+ // Authors: Maciej Piechotka
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/edge_coloring.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c8d4e667a2b45ad481c6365ab8ff146a
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+ // Copyright (C) 2015 Andrzej Krzemienski.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/detail/optional_relops.hpp [1:2]
+ boost/optional/detail/optional_swap.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c8f7e91cd195e8c07907b91700843aa8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/is_floating_point.hpp at line 3, boost/type_traits/remove_extent.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_floating_point.hpp [1:3]
+ boost/type_traits/remove_extent.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c91df6862997c9f36164f1308b236bf7
+BELONGS ya.make
+ License text:
+ // Copyright 2007 Aaron Windsor
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/boyer_myrvold_planar_test.hpp [2:2]
+ boost/graph/is_kuratowski_subgraph.hpp [2:2]
+ boost/graph/is_straight_line_drawing.hpp [2:2]
+ boost/graph/make_biconnected_planar.hpp [2:2]
+ boost/graph/make_connected.hpp [2:2]
+ boost/graph/make_maximal_planar.hpp [2:2]
+ boost/graph/planar_detail/add_edge_visitors.hpp [2:2]
+ boost/graph/planar_detail/bucket_sort.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c98683db2d8fa0352ce99bf5eb8af524
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/version.h at line 4
+ License text:
+ Copyright Rene Rivera 2015-2016
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/version.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL c99a2d96dc6e8183a5787f5bf53caeab
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2013-2015 Kyle Lutz <kyle.r.lutz@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/algorithm/transform_if.hpp [2:2]
+ boost/compute/async/wait_guard.hpp [2:2]
+ boost/compute/detail/parameter_cache.hpp [2:2]
+ boost/compute/exception/no_device_found.hpp [2:2]
+ boost/compute/image.hpp [2:2]
+ boost/compute/image/image1d.hpp [2:2]
+ boost/compute/image/image2d.hpp [2:2]
+ boost/compute/image/image3d.hpp [2:2]
+ boost/compute/image/image_format.hpp [2:2]
+ boost/compute/image/image_object.hpp [2:2]
+ boost/compute/image/image_sampler.hpp [2:2]
+ boost/compute/image2d.hpp [2:2]
+ boost/compute/image3d.hpp [2:2]
+ boost/compute/image_format.hpp [2:2]
+ boost/compute/image_sampler.hpp [2:2]
+ boost/compute/utility/invoke.hpp [2:2]
+ boost/compute/version.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c9d011950648c03f29cc58f664ea728e
+BELONGS libs/locale/ya.make
+ License text:
+ // Copyright (c) 2009-2015 Artyom Beilis (Tonkikh)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/locale/src/shared/message.cpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL c9d0d72a3dcde4707176a755657f4634
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/concept_archetype.hpp at line 4, boost/concept_check.hpp at line 4
+ License text:
+ // (C) Copyright Jeremy Siek 2000.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/concept_archetype.hpp [2:4]
+ boost/concept_check.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL c9db06a8bf4ea409ad302e3c081fa876
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/shared_ptr.hpp at line 14, boost/serialization/weak_ptr.hpp at line 14
+ License text:
+ // (C) Copyright 2004 Robert Ramey and Martin Ecker
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/shared_ptr.hpp [12:14]
+ boost/serialization/weak_ptr.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL c9effb8498cdb387e324169d172eb069
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/shared_ptr_helper.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/shared_ptr_helper.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL c9f218034b8fe07a7f09b0c82b8312e3
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/converter/registered.hpp at line 4, boost/python/converter/shared_ptr_from_python.hpp at line 4, boost/python/converter/shared_ptr_to_python.hpp at line 4, boost/python/detail/is_shared_ptr.hpp at line 4, boost/python/detail/value_is_shared_ptr.hpp at line 4, boost/python/numpy.hpp at line 4, boost/python/numpy/dtype.hpp at line 4, boost/python/numpy/internal.hpp at line 4, boost/python/numpy/invoke_matching.hpp at line 4, boost/python/numpy/matrix.hpp at line 4, boost/python/numpy/ndarray.hpp at line 4, boost/python/numpy/numpy_object_mgr_traits.hpp at line 4, boost/python/numpy/scalars.hpp at line 4, boost/python/numpy/ufunc.hpp at line 4, boost/python/object/class_metadata.hpp at line 4, boost/python/to_python_value.hpp at line 4, libs/python/src/numpy/dtype.cpp at line 4, libs/python/src/numpy/matrix.cpp at line 4, libs/python/src/numpy/ndarray.cpp at line 4, libs/python/src/numpy/numpy.cpp at line 4, libs/python/src/numpy/scalars.cpp at line 4, libs/python/src/numpy/ufunc.cpp at line 4
+ License text:
+ // Copyright Jim Bosch 2010-2012.
+ // Copyright Stefan Seefeld 2016.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/converter/registered.hpp [1:4]
+ boost/python/converter/shared_ptr_from_python.hpp [1:4]
+ boost/python/converter/shared_ptr_to_python.hpp [1:4]
+ boost/python/detail/is_shared_ptr.hpp [1:4]
+ boost/python/detail/value_is_shared_ptr.hpp [1:4]
+ boost/python/numpy.hpp [1:4]
+ boost/python/numpy/dtype.hpp [1:4]
+ boost/python/numpy/internal.hpp [1:4]
+ boost/python/numpy/invoke_matching.hpp [1:4]
+ boost/python/numpy/matrix.hpp [1:4]
+ boost/python/numpy/ndarray.hpp [1:4]
+ boost/python/numpy/numpy_object_mgr_traits.hpp [1:4]
+ boost/python/numpy/scalars.hpp [1:4]
+ boost/python/numpy/ufunc.hpp [1:4]
+ boost/python/object/class_metadata.hpp [1:4]
+ boost/python/to_python_value.hpp [1:4]
+ libs/python/src/numpy/dtype.cpp [1:4]
+ libs/python/src/numpy/matrix.cpp [1:4]
+ libs/python/src/numpy/ndarray.cpp [1:4]
+ libs/python/src/numpy/numpy.cpp [1:4]
+ libs/python/src/numpy/scalars.cpp [1:4]
+ libs/python/src/numpy/ufunc.cpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ca20b75eb2dae2abec8bb941a89db522
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/move.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/move.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL ca676dbdf976b8c423696b3ace2a200a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+ // Copyright (c) 2013 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/atomic_count.hpp [13:14]
+ boost/smart_ptr/detail/atomic_count_spin.hpp [7:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL ca7f81dcda042dfffe2f75e2fa3c6acc
+BELONGS ya.make
+ License text:
+ // (C) Copyright Antony Polukhin 2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cast.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL cadd4a896c84c64078dec6563a7cf410
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL caf6818f96cbd63eb0a359a0d1dd3ac5
+BELONGS ya.make
+ License text:
+ // (C) Copyright Kevlin Henney and Dave Abrahams 1999.
+ // (C) Copyright Boris Rasin 2014.
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/conversion/detail/old_numeric_cast.hpp [3:5]
+ boost/polymorphic_cast.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL cb01f383bb8952e129846d11f898f3c8
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013-2017.
+ // Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/disjoint/areal_areal.hpp [8:9]
+ boost/geometry/algorithms/detail/disjoint/box_box.hpp [8:9]
+ boost/geometry/algorithms/detail/disjoint/implementation.hpp [8:9]
+ boost/geometry/algorithms/detail/disjoint/interface.hpp [8:9]
+ boost/geometry/algorithms/detail/disjoint/linear_areal.hpp [8:9]
+ boost/geometry/algorithms/detail/disjoint/linear_linear.hpp [8:9]
+ boost/geometry/algorithms/detail/disjoint/point_box.hpp [8:9]
+ boost/geometry/algorithms/detail/disjoint/point_point.hpp [8:9]
+ boost/geometry/algorithms/detail/disjoint/segment_box.hpp [8:9]
+ boost/geometry/algorithms/detail/intersects/implementation.hpp [7:8]
+ boost/geometry/algorithms/detail/intersects/interface.hpp [7:8]
+ boost/geometry/algorithms/detail/relate/point_point.hpp [5:6]
+ boost/geometry/algorithms/detail/touches/implementation.hpp [8:9]
+ boost/geometry/algorithms/detail/touches/interface.hpp [8:9]
+ boost/geometry/algorithms/detail/within/point_in_geometry.hpp [8:9]
+ boost/geometry/algorithms/dispatch/disjoint.hpp [8:9]
+ boost/geometry/algorithms/intersects.hpp [7:8]
+ boost/geometry/algorithms/touches.hpp [8:9]
+ boost/geometry/strategies/cartesian/disjoint_segment_box.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL cb0dc5088d9ead71cc376b520c9be516
+BELONGS ya.make
+ License text:
+ Author: Joachim Faulhaber
+ Copyright (c) 2009-2011: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/impl_config.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL cb4c77138a8eb0afa37b2363d470714c
+BELONGS ya.make
+ License text:
+ // (C) Copyright Daniel K. O. 2005.
+ // (C) Copyright Ion Gaztanaga 2007-2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/avltree_algorithms.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL cba287530567f506b4683cd1a18cce1d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/addressof.hpp at line 5, boost/container/detail/alloc_helpers.hpp at line 5, boost/container/detail/iterator_to_raw_pointer.hpp at line 5, boost/container/detail/minimal_char_traits_header.hpp at line 5, boost/container/detail/next_capacity.hpp at line 5, boost/container/detail/placement_new.hpp at line 7, boost/container/new_allocator.hpp at line 5, boost/interprocess/detail/nothrow.hpp at line 5, boost/interprocess/detail/simple_swap.hpp at line 7, boost/interprocess/detail/std_fwd.hpp at line 5, boost/intrusive/detail/minimal_less_equal_header.hpp at line 5, boost/intrusive/detail/minimal_pair_header.hpp at line 5, boost/move/detail/iterator_to_raw_pointer.hpp at line 5, boost/move/detail/placement_new.hpp at line 7
+ License text:
+ // (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/addressof.hpp [3:5]
+ boost/container/detail/alloc_helpers.hpp [3:5]
+ boost/container/detail/iterator_to_raw_pointer.hpp [3:5]
+ boost/container/detail/minimal_char_traits_header.hpp [3:3]
+ boost/container/detail/next_capacity.hpp [3:5]
+ boost/container/detail/placement_new.hpp [5:7]
+ boost/container/new_allocator.hpp [3:5]
+ boost/interprocess/detail/nothrow.hpp [3:5]
+ boost/interprocess/detail/simple_swap.hpp [5:7]
+ boost/interprocess/detail/std_fwd.hpp [3:5]
+ boost/intrusive/detail/minimal_less_equal_header.hpp [3:3]
+ boost/intrusive/detail/minimal_pair_header.hpp [3:3]
+ boost/move/detail/iterator_to_raw_pointer.hpp [3:5]
+ boost/move/detail/placement_new.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL cc1022dd712816d11c03b1dfe171b614
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2009-2013.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/function_detector.hpp [3:3]
+ boost/intrusive/detail/function_detector.hpp [3:3]
+ boost/intrusive/detail/is_stateful_value_traits.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL cc1d970568793824ad7593567509ba7b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/detail/ice_and.hpp at line 3, boost/type_traits/detail/ice_eq.hpp at line 3, boost/type_traits/detail/ice_not.hpp at line 3, boost/type_traits/detail/ice_or.hpp at line 3, boost/type_traits/detail/yes_no_type.hpp at line 4, boost/type_traits/ice.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/detail/ice_and.hpp [1:1]
+ boost/type_traits/detail/ice_eq.hpp [1:3]
+ boost/type_traits/detail/ice_not.hpp [1:3]
+ boost/type_traits/detail/ice_or.hpp [1:3]
+ boost/type_traits/detail/yes_no_type.hpp [2:4]
+ boost/type_traits/ice.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL cc20f3be80fcae2741d451fd54843c93
+BELONGS ya.make
+ License text:
+ // Copyright 2001 University of Notre Dame.
+ // Copyright 2006 Trustees of Indiana University
+ // Authors: Jeremy G. Siek and Douglas Gregor <dgregor@cs.indiana.edu>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/adjacency_matrix.hpp [2:4]
+ boost/graph/dll_import_export.hpp [2:4]
+ boost/graph/graphviz.hpp [2:4]
+ boost/graph/subgraph.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL cc7820f60bca73eee8e6e5903d73df38
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/checked_operations.hpp at line 4, boost/iostreams/compose.hpp at line 4, boost/iostreams/detail/adapter/non_blocking_adapter.hpp at line 4, boost/iostreams/detail/counted_array.hpp at line 4, boost/iostreams/detail/default_arg.hpp at line 4, boost/iostreams/detail/is_dereferenceable.hpp at line 4, boost/iostreams/detail/newline.hpp at line 4, boost/iostreams/detail/optional.hpp at line 4, boost/iostreams/detail/system_failure.hpp at line 4, boost/iostreams/filter/counter.hpp at line 4, boost/iostreams/filter/line.hpp at line 4, boost/iostreams/filter/stdio.hpp at line 4, boost/iostreams/filter/test.hpp at line 4, boost/iostreams/get.hpp at line 4, boost/iostreams/operations.hpp at line 4, boost/iostreams/put.hpp at line 4, boost/iostreams/putback.hpp at line 4, boost/iostreams/read.hpp at line 4, boost/iostreams/tee.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/checked_operations.hpp [1:4]
+ boost/iostreams/compose.hpp [1:4]
+ boost/iostreams/detail/adapter/non_blocking_adapter.hpp [1:4]
+ boost/iostreams/detail/counted_array.hpp [1:4]
+ boost/iostreams/detail/default_arg.hpp [1:4]
+ boost/iostreams/detail/is_dereferenceable.hpp [1:5]
+ boost/iostreams/detail/newline.hpp [1:4]
+ boost/iostreams/detail/optional.hpp [1:4]
+ boost/iostreams/detail/system_failure.hpp [1:5]
+ boost/iostreams/filter/counter.hpp [1:4]
+ boost/iostreams/filter/line.hpp [1:4]
+ boost/iostreams/filter/stdio.hpp [1:4]
+ boost/iostreams/filter/test.hpp [1:4]
+ boost/iostreams/get.hpp [1:4]
+ boost/iostreams/operations.hpp [1:4]
+ boost/iostreams/put.hpp [1:4]
+ boost/iostreams/putback.hpp [1:4]
+ boost/iostreams/read.hpp [1:4]
+ boost/iostreams/tee.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ccb190d60bb3bd793e2d9eb5fc91fb71
+BELONGS libs/thread/ya.make ya.make
+ License text:
+ // (C) Copyright 2007 Anthony Williams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/condition.hpp [3:3]
+ boost/thread/condition_variable.hpp [6:6]
+ boost/thread/detail/platform.hpp [1:4]
+ boost/thread/lock_algorithms.hpp [4:5]
+ boost/thread/lock_guard.hpp [4:5]
+ boost/thread/lock_options.hpp [4:5]
+ boost/thread/lock_types.hpp [4:5]
+ boost/thread/lockable_traits.hpp [4:5]
+ boost/thread/locks.hpp [4:5]
+ boost/thread/mutex.hpp [6:6]
+ boost/thread/pthread/thread_data.hpp [6:7]
+ boost/thread/recursive_mutex.hpp [6:6]
+ boost/thread/shared_mutex.hpp [6:7]
+ boost/thread/thread_time.hpp [3:3]
+ boost/thread/win32/thread_heap_alloc.hpp [4:6]
+ libs/thread/src/tss_null.cpp [1:4]
+ libs/thread/src/win32/thread.cpp [4:6]
+ libs/thread/src/win32/tss_pe.cpp [2:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL ccc0cb954aa88f5dd5e62b4d653c439c
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008, 2009 Peter Dimov
+ // Copyright (c) 2018 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/addressof.hpp [6:6]
+ boost/atomic/detail/bitwise_fp_cast.hpp [6:6]
+ boost/atomic/detail/extra_fp_operations.hpp [6:6]
+ boost/atomic/detail/extra_fp_operations_fwd.hpp [6:6]
+ boost/atomic/detail/extra_fp_ops_emulated.hpp [6:6]
+ boost/atomic/detail/extra_fp_ops_generic.hpp [6:6]
+ boost/atomic/detail/extra_ops_emulated.hpp [6:6]
+ boost/atomic/detail/float_sizes.hpp [6:6]
+ boost/atomic/detail/fp_operations.hpp [6:6]
+ boost/atomic/detail/fp_operations_fwd.hpp [6:6]
+ boost/atomic/detail/fp_ops_emulated.hpp [6:6]
+ boost/atomic/detail/fp_ops_generic.hpp [6:6]
+ boost/atomic/detail/integral_extend.hpp [6:6]
+ boost/atomic/detail/string_ops.hpp [6:6]
+ boost/atomic/detail/type_traits/is_floating_point.hpp [6:6]
+ boost/atomic/detail/type_traits/is_iec559.hpp [6:6]
+ boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp [6:6]
+ boost/memory_order.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL cce23f190bcbb33ec0fdc7d06d0dcba3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/core/explicit_operator_bool.hpp at line 4, boost/smart_ptr/intrusive_ref_counter.hpp at line 4
+ License text:
+ * Copyright Andrey Semashev 2007 - 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/explicit_operator_bool.hpp [2:4]
+ boost/smart_ptr/intrusive_ref_counter.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ccec204a78ff77e65fd8e9cfdf00f467
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/core/null_deleter.hpp at line 4
+ License text:
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/null_deleter.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ccf1ab00327a1d96b36157c35581b7c9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017 Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp [3:4]
+ boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp [3:3]
+ boost/geometry/algorithms/detail/within/multi_point.hpp [3:3]
+ boost/geometry/formulas/authalic_radius_sqr.hpp [3:3]
+ boost/geometry/formulas/elliptic_arc_length.hpp [3:3]
+ boost/geometry/formulas/mean_radius.hpp [3:3]
+ boost/geometry/formulas/unit_spheroid.hpp [3:3]
+ boost/geometry/strategies/cartesian/envelope_segment.hpp [3:5]
+ boost/geometry/strategies/geographic/disjoint_segment_box.hpp [3:3]
+ boost/geometry/strategies/geographic/envelope_segment.hpp [3:5]
+ boost/geometry/strategies/geographic/point_in_poly_winding.hpp [3:4]
+ boost/geometry/strategies/spherical/disjoint_segment_box.hpp [3:3]
+ boost/geometry/strategies/spherical/envelope_segment.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL cd0b2f82e07b1d0a2a2fe85ab053cf51
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2017.
+ // Modifications copyright (c) 2017, Oracle and/or its affiliates.
+ // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/convert.hpp [8:10]
+ boost/geometry/algorithms/detail/buffer/buffer_policies.hpp [5:7]
+ boost/geometry/algorithms/detail/get_left_turns.hpp [5:6]
+ boost/geometry/algorithms/detail/occupation_info.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/add_rings.hpp [6:7]
+ boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp [5:7]
+ boost/geometry/algorithms/difference.hpp [5:6]
+ boost/geometry/policies/compare.hpp [5:6]
+ boost/geometry/srs/projection.hpp [5:7]
+ boost/geometry/srs/projections/epsg.hpp [5:7]
+ boost/geometry/srs/projections/exception.hpp [5:7]
+ boost/geometry/srs/projections/factory.hpp [5:7]
+ boost/geometry/srs/projections/impl/base_dynamic.hpp [5:7]
+ boost/geometry/srs/projections/impl/base_static.hpp [5:7]
+ boost/geometry/srs/projections/impl/factory_entry.hpp [5:7]
+ boost/geometry/srs/projections/impl/function_overloads.hpp [5:7]
+ boost/geometry/srs/projections/impl/geocent.hpp [4:6]
+ boost/geometry/srs/projections/impl/pj_auth.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_datums.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_ellps.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_fwd.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_gauss.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_inv.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_mlfn.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_msfn.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_param.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_phi2.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_qsfn.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_tsfn.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_units.hpp [6:8]
+ boost/geometry/srs/projections/impl/pj_zpoly1.hpp [6:8]
+ boost/geometry/srs/projections/impl/projects.hpp [6:8]
+ boost/geometry/srs/projections/proj/aea.hpp [9:11]
+ boost/geometry/srs/projections/proj/airy.hpp [9:11]
+ boost/geometry/srs/projections/proj/aitoff.hpp [9:11]
+ boost/geometry/srs/projections/proj/august.hpp [9:11]
+ boost/geometry/srs/projections/proj/bacon.hpp [9:11]
+ boost/geometry/srs/projections/proj/bipc.hpp [9:11]
+ boost/geometry/srs/projections/proj/boggs.hpp [9:11]
+ boost/geometry/srs/projections/proj/bonne.hpp [9:11]
+ boost/geometry/srs/projections/proj/cass.hpp [9:11]
+ boost/geometry/srs/projections/proj/cea.hpp [9:11]
+ boost/geometry/srs/projections/proj/chamb.hpp [9:11]
+ boost/geometry/srs/projections/proj/collg.hpp [9:11]
+ boost/geometry/srs/projections/proj/crast.hpp [9:11]
+ boost/geometry/srs/projections/proj/denoy.hpp [9:11]
+ boost/geometry/srs/projections/proj/eck1.hpp [9:11]
+ boost/geometry/srs/projections/proj/eck2.hpp [9:11]
+ boost/geometry/srs/projections/proj/eck3.hpp [9:11]
+ boost/geometry/srs/projections/proj/eck4.hpp [9:11]
+ boost/geometry/srs/projections/proj/eck5.hpp [9:11]
+ boost/geometry/srs/projections/proj/eqc.hpp [9:11]
+ boost/geometry/srs/projections/proj/eqdc.hpp [9:11]
+ boost/geometry/srs/projections/proj/etmerc.hpp [9:11]
+ boost/geometry/srs/projections/proj/fahey.hpp [9:11]
+ boost/geometry/srs/projections/proj/fouc_s.hpp [9:11]
+ boost/geometry/srs/projections/proj/gall.hpp [9:11]
+ boost/geometry/srs/projections/proj/geocent.hpp [9:11]
+ boost/geometry/srs/projections/proj/geos.hpp [9:11]
+ boost/geometry/srs/projections/proj/gins8.hpp [9:11]
+ boost/geometry/srs/projections/proj/gn_sinu.hpp [9:11]
+ boost/geometry/srs/projections/proj/gstmerc.hpp [9:11]
+ boost/geometry/srs/projections/proj/hammer.hpp [9:11]
+ boost/geometry/srs/projections/proj/hatano.hpp [9:11]
+ boost/geometry/srs/projections/proj/igh.hpp [9:11]
+ boost/geometry/srs/projections/proj/imw_p.hpp [9:11]
+ boost/geometry/srs/projections/proj/krovak.hpp [9:11]
+ boost/geometry/srs/projections/proj/labrd.hpp [9:11]
+ boost/geometry/srs/projections/proj/lagrng.hpp [9:11]
+ boost/geometry/srs/projections/proj/larr.hpp [9:11]
+ boost/geometry/srs/projections/proj/lask.hpp [9:11]
+ boost/geometry/srs/projections/proj/latlong.hpp [9:11]
+ boost/geometry/srs/projections/proj/lcc.hpp [9:11]
+ boost/geometry/srs/projections/proj/lcca.hpp [9:11]
+ boost/geometry/srs/projections/proj/loxim.hpp [9:11]
+ boost/geometry/srs/projections/proj/mbt_fps.hpp [9:11]
+ boost/geometry/srs/projections/proj/mbtfpp.hpp [9:11]
+ boost/geometry/srs/projections/proj/mbtfpq.hpp [9:11]
+ boost/geometry/srs/projections/proj/merc.hpp [9:11]
+ boost/geometry/srs/projections/proj/mill.hpp [9:11]
+ boost/geometry/srs/projections/proj/mod_ster.hpp [9:11]
+ boost/geometry/srs/projections/proj/moll.hpp [9:11]
+ boost/geometry/srs/projections/proj/natearth.hpp [9:11]
+ boost/geometry/srs/projections/proj/nell.hpp [9:11]
+ boost/geometry/srs/projections/proj/nell_h.hpp [9:11]
+ boost/geometry/srs/projections/proj/nocol.hpp [9:11]
+ boost/geometry/srs/projections/proj/nzmg.hpp [9:11]
+ boost/geometry/srs/projections/proj/ocea.hpp [9:11]
+ boost/geometry/srs/projections/proj/oea.hpp [9:11]
+ boost/geometry/srs/projections/proj/omerc.hpp [9:11]
+ boost/geometry/srs/projections/proj/poly.hpp [9:11]
+ boost/geometry/srs/projections/proj/putp2.hpp [9:11]
+ boost/geometry/srs/projections/proj/putp3.hpp [9:11]
+ boost/geometry/srs/projections/proj/putp4p.hpp [9:11]
+ boost/geometry/srs/projections/proj/putp5.hpp [9:11]
+ boost/geometry/srs/projections/proj/putp6.hpp [9:11]
+ boost/geometry/srs/projections/proj/qsc.hpp [9:11]
+ boost/geometry/srs/projections/proj/robin.hpp [9:11]
+ boost/geometry/srs/projections/proj/rouss.hpp [9:11]
+ boost/geometry/srs/projections/proj/rpoly.hpp [9:11]
+ boost/geometry/srs/projections/proj/sconics.hpp [9:11]
+ boost/geometry/srs/projections/proj/somerc.hpp [9:11]
+ boost/geometry/srs/projections/proj/sterea.hpp [9:11]
+ boost/geometry/srs/projections/proj/sts.hpp [9:11]
+ boost/geometry/srs/projections/proj/tcea.hpp [9:11]
+ boost/geometry/srs/projections/proj/tmerc.hpp [9:11]
+ boost/geometry/srs/projections/proj/tpeqd.hpp [9:11]
+ boost/geometry/srs/projections/proj/urm5.hpp [9:11]
+ boost/geometry/srs/projections/proj/urmfps.hpp [9:11]
+ boost/geometry/srs/projections/proj/vandg.hpp [9:11]
+ boost/geometry/srs/projections/proj/vandg4.hpp [9:11]
+ boost/geometry/srs/projections/proj/wag2.hpp [9:11]
+ boost/geometry/srs/projections/proj/wag3.hpp [9:11]
+ boost/geometry/srs/projections/proj/wag7.hpp [9:11]
+ boost/geometry/srs/projections/proj/wink1.hpp [9:11]
+ boost/geometry/srs/projections/proj/wink2.hpp [9:11]
+ boost/geometry/strategies/compare.hpp [7:8]
+ boost/geometry/strategies/covered_by.hpp [7:8]
+ boost/geometry/strategies/spherical/compare.hpp [5:6]
+ boost/geometry/strategies/transform/srs_transformer.hpp [5:7]
+ boost/geometry/strategies/within.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL cd1474941b42642228272cd4bfb1e677
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/algorithm/adjacent_difference.hpp [2:2]
+ boost/compute/algorithm/adjacent_find.hpp [2:2]
+ boost/compute/algorithm/for_each_n.hpp [2:2]
+ boost/compute/algorithm/is_sorted.hpp [2:2]
+ boost/compute/allocator.hpp [2:2]
+ boost/compute/allocator/buffer_allocator.hpp [2:2]
+ boost/compute/allocator/pinned_allocator.hpp [2:2]
+ boost/compute/async/wait.hpp [2:2]
+ boost/compute/closure.hpp [2:2]
+ boost/compute/container/dynamic_bitset.hpp [2:2]
+ boost/compute/container/mapped_view.hpp [2:2]
+ boost/compute/core.hpp [2:2]
+ boost/compute/detail/duration.hpp [2:2]
+ boost/compute/detail/get_object_info.hpp [2:2]
+ boost/compute/detail/getenv.hpp [2:2]
+ boost/compute/detail/global_static.hpp [2:2]
+ boost/compute/detail/literal.hpp [2:2]
+ boost/compute/detail/nvidia_compute_capability.hpp [2:2]
+ boost/compute/detail/path.hpp [2:2]
+ boost/compute/detail/sha1.hpp [2:2]
+ boost/compute/detail/variadic_macros.hpp [2:2]
+ boost/compute/detail/vendor.hpp [2:2]
+ boost/compute/detail/work_size.hpp [2:2]
+ boost/compute/exception/unsupported_extension_error.hpp [2:2]
+ boost/compute/functional/bind.hpp [2:2]
+ boost/compute/functional/hash.hpp [2:2]
+ boost/compute/functional/identity.hpp [2:2]
+ boost/compute/functional/popcount.hpp [2:2]
+ boost/compute/interop/eigen.hpp [2:2]
+ boost/compute/interop/eigen/core.hpp [2:2]
+ boost/compute/interop/opencv.hpp [2:2]
+ boost/compute/interop/opencv/core.hpp [2:2]
+ boost/compute/interop/opencv/highgui.hpp [2:2]
+ boost/compute/interop/opencv/ocl.hpp [2:2]
+ boost/compute/interop/opengl.hpp [2:2]
+ boost/compute/interop/opengl/acquire.hpp [2:2]
+ boost/compute/interop/opengl/cl_gl.hpp [2:2]
+ boost/compute/interop/opengl/cl_gl_ext.hpp [2:2]
+ boost/compute/interop/opengl/context.hpp [2:2]
+ boost/compute/interop/opengl/gl.hpp [2:2]
+ boost/compute/interop/opengl/opengl_buffer.hpp [2:2]
+ boost/compute/interop/opengl/opengl_renderbuffer.hpp [2:2]
+ boost/compute/interop/opengl/opengl_texture.hpp [2:2]
+ boost/compute/interop/qt.hpp [2:2]
+ boost/compute/interop/qt/qimage.hpp [2:2]
+ boost/compute/interop/qt/qpoint.hpp [2:2]
+ boost/compute/interop/qt/qpointf.hpp [2:2]
+ boost/compute/interop/qt/qtcore.hpp [2:2]
+ boost/compute/interop/qt/qtgui.hpp [2:2]
+ boost/compute/interop/qt/qvector.hpp [2:2]
+ boost/compute/interop/vtk.hpp [2:2]
+ boost/compute/interop/vtk/bounds.hpp [2:2]
+ boost/compute/interop/vtk/data_array.hpp [2:2]
+ boost/compute/interop/vtk/matrix4x4.hpp [2:2]
+ boost/compute/interop/vtk/points.hpp [2:2]
+ boost/compute/iterator/discard_iterator.hpp [2:2]
+ boost/compute/lambda/get.hpp [2:2]
+ boost/compute/lambda/make_pair.hpp [2:2]
+ boost/compute/lambda/make_tuple.hpp [2:2]
+ boost/compute/lambda/placeholder.hpp [2:2]
+ boost/compute/memory.hpp [2:2]
+ boost/compute/memory/local_buffer.hpp [2:2]
+ boost/compute/memory/svm_ptr.hpp [2:2]
+ boost/compute/pipe.hpp [2:2]
+ boost/compute/random/normal_distribution.hpp [2:2]
+ boost/compute/source.hpp [2:2]
+ boost/compute/svm.hpp [2:2]
+ boost/compute/type_traits/detail/capture_traits.hpp [2:2]
+ boost/compute/type_traits/is_device_iterator.hpp [2:2]
+ boost/compute/type_traits/is_fundamental.hpp [2:2]
+ boost/compute/type_traits/result_of.hpp [2:2]
+ boost/compute/type_traits/type_definition.hpp [2:2]
+ boost/compute/types/builtin.hpp [2:2]
+ boost/compute/types/fundamental.hpp [2:2]
+ boost/compute/types/struct.hpp [2:2]
+ boost/compute/user_event.hpp [2:2]
+ boost/compute/utility.hpp [2:2]
+ boost/compute/utility/dim.hpp [2:2]
+ boost/compute/utility/extents.hpp [2:2]
+ boost/compute/utility/program_cache.hpp [2:2]
+ boost/compute/utility/source.hpp [2:2]
+ boost/compute/utility/wait_list.hpp [2:2]
+ boost/compute/wait_list.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL cd4c6e3cb475973fc7258930701fdb80
+BELONGS ya.make
+ License text:
+ * Copyright 2010 Vicente J. Botet Escriba
+ * Copyright 2015 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/apc.hpp [2:3]
+ boost/winapi/basic_types.hpp [2:3]
+ boost/winapi/condition_variable.hpp [2:3]
+ boost/winapi/critical_section.hpp [2:3]
+ boost/winapi/crypt.hpp [2:3]
+ boost/winapi/detail/cast_ptr.hpp [2:2]
+ boost/winapi/directory_management.hpp [2:3]
+ boost/winapi/dll.hpp [2:5]
+ boost/winapi/error_handling.hpp [2:4]
+ boost/winapi/file_management.hpp [2:5]
+ boost/winapi/file_mapping.hpp [2:5]
+ boost/winapi/get_current_process.hpp [2:3]
+ boost/winapi/get_current_thread.hpp [2:3]
+ boost/winapi/get_current_thread_id.hpp [2:3]
+ boost/winapi/get_last_error.hpp [2:3]
+ boost/winapi/get_thread_times.hpp [2:3]
+ boost/winapi/handles.hpp [2:3]
+ boost/winapi/init_once.hpp [2:3]
+ boost/winapi/local_memory.hpp [2:3]
+ boost/winapi/memory.hpp [2:3]
+ boost/winapi/security.hpp [2:3]
+ boost/winapi/semaphore.hpp [2:3]
+ boost/winapi/srw_lock.hpp [2:3]
+ boost/winapi/synchronization.hpp [2:3]
+ boost/winapi/system.hpp [2:4]
+ boost/winapi/thread.hpp [2:3]
+ boost/winapi/timers.hpp [2:3]
+ boost/winapi/wait.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL cd59a9b17dba1f12cc9f24d0e732702a
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/bernoulli.hpp [3:8]
+ boost/math/special_functions/detail/polygamma.hpp [3:8]
+ boost/math/special_functions/detail/unchecked_bernoulli.hpp [3:8]
+ boost/math/special_functions/polygamma.hpp [3:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL cd8a570f75918ca6f3caece0eb324bb0
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2001-2006
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/list/aux_/include_preprocessed.hpp [2:2]
+ boost/mpl/set/aux_/include_preprocessed.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL cd8edc8af825e6157a14facda49b7e5c
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/count_if.hpp [5:5]
+ boost/mpl/find.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL cdd68d4b0cd7f8ae4946423a38dc8906
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2014
+ // (C) Copyright Microsoft Corporation 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/detail/mpl.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL cde0b758663026af6e7dea405ee6bf38
+BELONGS ya.make
+ License text:
+ // Copyright Louis Dionne 2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/hawick_circuits.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL cdfbce28eaa4af51d14557c79abbbb12
+BELONGS ya.make
+ License text:
+ Copyright 2012-2013 Andreas Angelopoulos
+ Copyright 2012-2013 Karsten Ahnert
+ Copyright 2012-2013 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp [6:8]
+ boost/numeric/odeint/external/mtl4/mtl4_resize.hpp [6:8]
+ boost/numeric/odeint/iterator/adaptive_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/adaptive_time_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/const_step_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/const_step_time_iterator.hpp [10:11]
+ boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp [10:11]
+ boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp [9:10]
+ boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp [9:10]
+ boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp [9:10]
+ boost/numeric/odeint/util/unit_helper.hpp [9:10]
+ boost/numeric/odeint/util/unwrap_reference.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL ce101c632c87f8e9105b0f2a857b342c
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2011-2013, 2016 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lockfree/detail/atomic.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL ce20686b00eb9d579c5ea2542edbbd3a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+ // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/arithmetic/arithmetic.hpp [3:5]
+ boost/geometry/arithmetic/cross_product.hpp [3:5]
+ boost/geometry/arithmetic/determinant.hpp [3:5]
+ boost/geometry/arithmetic/dot_product.hpp [3:5]
+ boost/geometry/core/access.hpp [3:5]
+ boost/geometry/core/coordinate_dimension.hpp [3:5]
+ boost/geometry/core/coordinate_system.hpp [3:5]
+ boost/geometry/core/coordinate_type.hpp [3:5]
+ boost/geometry/geometries/adapted/boost_tuple.hpp [3:5]
+ boost/geometry/geometries/adapted/std_pair_as_segment.hpp [3:5]
+ boost/geometry/geometries/concepts/box_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/check.hpp [3:5]
+ boost/geometry/geometries/concepts/linestring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/polygon_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/ring_concept.hpp [3:5]
+ boost/geometry/geometries/concepts/segment_concept.hpp [3:5]
+ boost/geometry/srs/projection.hpp [3:3]
+ boost/geometry/srs/projections/epsg.hpp [3:3]
+ boost/geometry/srs/projections/epsg_traits.hpp [3:3]
+ boost/geometry/srs/projections/exception.hpp [3:3]
+ boost/geometry/srs/projections/factory.hpp [3:3]
+ boost/geometry/srs/projections/impl/aasincos.hpp [4:4]
+ boost/geometry/srs/projections/impl/adjlon.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_auth.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_datum_set.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_datums.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_ell_set.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_ellps.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_fwd.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_gauss.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_init.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_inv.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_mlfn.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_msfn.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_param.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_phi2.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_qsfn.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_tsfn.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_units.hpp [4:4]
+ boost/geometry/srs/projections/impl/pj_zpoly1.hpp [4:4]
+ boost/geometry/srs/projections/impl/proj_mdist.hpp [4:4]
+ boost/geometry/srs/projections/impl/projects.hpp [4:4]
+ boost/geometry/strategies/cartesian/distance_pythagoras.hpp [3:5]
+ boost/geometry/strategies/transform/srs_transformer.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ce7f8267f10d0d0f27e059eb588024e7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/accept.hpp at line 6, boost/metaparse/get_message.hpp at line 6, boost/metaparse/range.hpp at line 6, boost/metaparse/range_c.hpp at line 6, boost/metaparse/reject.hpp at line 6, boost/metaparse/util/in_range_c.hpp at line 6, boost/metaparse/v1/accept.hpp at line 6, boost/metaparse/v1/fwd/accept.hpp at line 6, boost/metaparse/v1/fwd/get_message.hpp at line 6, boost/metaparse/v1/fwd/reject.hpp at line 6, boost/metaparse/v1/get_message.hpp at line 6, boost/metaparse/v1/impl/assert_string_length.hpp at line 6, boost/metaparse/v1/impl/has_type.hpp at line 6, boost/metaparse/v1/impl/returns.hpp at line 6, boost/metaparse/v1/range.hpp at line 6, boost/metaparse/v1/range_c.hpp at line 6, boost/metaparse/v1/reject.hpp at line 6, boost/metaparse/v1/util/in_range_c.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2014.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/accept.hpp [4:6]
+ boost/metaparse/get_message.hpp [4:6]
+ boost/metaparse/range.hpp [4:6]
+ boost/metaparse/range_c.hpp [4:6]
+ boost/metaparse/reject.hpp [4:6]
+ boost/metaparse/util/in_range_c.hpp [4:6]
+ boost/metaparse/v1/accept.hpp [4:6]
+ boost/metaparse/v1/fwd/accept.hpp [4:6]
+ boost/metaparse/v1/fwd/get_message.hpp [4:6]
+ boost/metaparse/v1/fwd/reject.hpp [4:6]
+ boost/metaparse/v1/get_message.hpp [4:6]
+ boost/metaparse/v1/impl/assert_string_length.hpp [4:6]
+ boost/metaparse/v1/impl/has_type.hpp [4:6]
+ boost/metaparse/v1/impl/returns.hpp [4:6]
+ boost/metaparse/v1/range.hpp [4:6]
+ boost/metaparse/v1/range_c.hpp [4:6]
+ boost/metaparse/v1/reject.hpp [4:6]
+ boost/metaparse/v1/util/in_range_c.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL ce8ac05cf9bf1bac069f4e120344d860
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2009 Francois Barel
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/repository/include/karma_nonterminal.hpp [2:5]
+ boost/spirit/repository/include/karma_subrule.hpp [2:5]
+ boost/spirit/repository/include/qi_nonterminal.hpp [2:5]
+ boost/spirit/repository/include/qi_subrule.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ce97343ca1928bb25180cf14d4f5b41a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/unordered/detail/implementation.hpp at line 4, boost/unordered/unordered_map.hpp at line 5, boost/unordered/unordered_set.hpp at line 5, boost/unordered_map.hpp at line 5, boost/unordered_set.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/unordered/detail/implementation.hpp [1:2]
+ boost/unordered/unordered_map.hpp [2:5]
+ boost/unordered/unordered_set.hpp [2:5]
+ boost/unordered_map.hpp [2:5]
+ boost/unordered_set.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ceb96d27818fc0169ccc2782fc50054b
+BELONGS ya.make
+ License text:
+ * Copyright 2005 Felix Hรถfling, Guillaume Melquiond
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval/detail/alpha_rounding_control.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL cebf58260049d5068e5abf459a4e867f
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2007 Trustees of Indiana University
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpi/graph_communicator.hpp [1:1]
+ boost/mpi/group.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL cec519351b68fb385bc916223bd0753a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ // Copyright (c) 2011 Boris Schaeling (boris@highscore.de)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/detail/impl/win_object_handle_service.ipp [5:6]
+ boost/asio/detail/win_object_handle_service.hpp [5:6]
+ boost/asio/windows/basic_object_handle.hpp [5:6]
+ boost/asio/windows/object_handle.hpp [5:6]
+ boost/asio/windows/object_handle_service.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL cecdd0e10d272b13f1cba1074643fb5c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/tti/detail/dnotype.hpp at line 4, boost/tti/gen/has_member_data_gen.hpp at line 4, boost/tti/gen/has_member_function_gen.hpp at line 4, boost/tti/gen/has_static_member_data_gen.hpp at line 4, boost/tti/gen/has_static_member_function_gen.hpp at line 4, boost/tti/gen/has_template_gen.hpp at line 4, boost/tti/gen/has_type_gen.hpp at line 4, boost/tti/gen/member_type_gen.hpp at line 4, boost/tti/gen/namespace_gen.hpp at line 4, boost/tti/has_template.hpp at line 4, boost/tti/tti.hpp at line 4
+ License text:
+ // (C) Copyright Edward Diener 2011,2012
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/tti/detail/dnotype.hpp [2:4]
+ boost/tti/gen/has_member_data_gen.hpp [2:4]
+ boost/tti/gen/has_member_function_gen.hpp [2:4]
+ boost/tti/gen/has_static_member_data_gen.hpp [2:4]
+ boost/tti/gen/has_static_member_function_gen.hpp [2:4]
+ boost/tti/gen/has_template_gen.hpp [2:4]
+ boost/tti/gen/has_type_gen.hpp [2:4]
+ boost/tti/gen/member_type_gen.hpp [2:4]
+ boost/tti/gen/namespace_gen.hpp [2:4]
+ boost/tti/has_template.hpp [2:4]
+ boost/tti/tti.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL cedac5e193993d7d0917a56ff3e3b834
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/covariance.hpp at line 6, boost/accumulators/statistics/density.hpp at line 7, boost/accumulators/statistics/peaks_over_threshold.hpp at line 6, boost/accumulators/statistics/pot_quantile.hpp at line 6, boost/accumulators/statistics/pot_tail_mean.hpp at line 6, boost/accumulators/statistics/tail_mean.hpp at line 6, boost/accumulators/statistics/tail_quantile.hpp at line 6, boost/accumulators/statistics/tail_variate_means.hpp at line 6, boost/accumulators/statistics/weighted_covariance.hpp at line 6, boost/accumulators/statistics/weighted_density.hpp at line 6, boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp at line 6, boost/accumulators/statistics/weighted_peaks_over_threshold.hpp at line 6, boost/accumulators/statistics/weighted_tail_mean.hpp at line 6, boost/accumulators/statistics/weighted_tail_quantile.hpp at line 6, boost/accumulators/statistics/weighted_tail_variate_means.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/covariance.hpp [4:6]
+ boost/accumulators/statistics/density.hpp [5:7]
+ boost/accumulators/statistics/peaks_over_threshold.hpp [4:6]
+ boost/accumulators/statistics/pot_quantile.hpp [4:6]
+ boost/accumulators/statistics/pot_tail_mean.hpp [4:6]
+ boost/accumulators/statistics/tail_mean.hpp [4:6]
+ boost/accumulators/statistics/tail_quantile.hpp [4:6]
+ boost/accumulators/statistics/tail_variate_means.hpp [4:6]
+ boost/accumulators/statistics/weighted_covariance.hpp [4:6]
+ boost/accumulators/statistics/weighted_density.hpp [4:6]
+ boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp [4:6]
+ boost/accumulators/statistics/weighted_peaks_over_threshold.hpp [4:6]
+ boost/accumulators/statistics/weighted_tail_mean.hpp [4:6]
+ boost/accumulators/statistics/weighted_tail_quantile.hpp [4:6]
+ boost/accumulators/statistics/weighted_tail_variate_means.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL cee063e2263d7e63a1a5f516090e8359
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006, 2007, 2012, 2014.
+ // Copyright Paul A. Bristow 2006, 2007, 2012
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL cef1ae82ac7cfc6fbbbae11befc918d0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/allocators/detail/allocator_common.hpp at line 5, boost/interprocess/containers/allocation_type.hpp at line 5, boost/interprocess/containers/deque.hpp at line 5, boost/interprocess/containers/flat_map.hpp at line 5, boost/interprocess/containers/flat_set.hpp at line 5, boost/interprocess/containers/list.hpp at line 5, boost/interprocess/containers/map.hpp at line 5, boost/interprocess/containers/pair.hpp at line 5, boost/interprocess/containers/set.hpp at line 5, boost/interprocess/containers/slist.hpp at line 5, boost/interprocess/containers/stable_vector.hpp at line 5, boost/interprocess/containers/string.hpp at line 5, boost/interprocess/containers/vector.hpp at line 5, boost/interprocess/containers/version_type.hpp at line 5, boost/interprocess/detail/variadic_templates_tools.hpp at line 5, boost/interprocess/managed_xsi_shared_memory.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/allocators/detail/allocator_common.hpp [3:5]
+ boost/interprocess/containers/allocation_type.hpp [3:5]
+ boost/interprocess/containers/deque.hpp [3:5]
+ boost/interprocess/containers/flat_map.hpp [3:5]
+ boost/interprocess/containers/flat_set.hpp [3:5]
+ boost/interprocess/containers/list.hpp [3:5]
+ boost/interprocess/containers/map.hpp [3:5]
+ boost/interprocess/containers/pair.hpp [3:5]
+ boost/interprocess/containers/set.hpp [3:5]
+ boost/interprocess/containers/slist.hpp [3:5]
+ boost/interprocess/containers/stable_vector.hpp [3:5]
+ boost/interprocess/containers/string.hpp [3:5]
+ boost/interprocess/containers/vector.hpp [3:5]
+ boost/interprocess/containers/version_type.hpp [3:5]
+ boost/interprocess/detail/variadic_templates_tools.hpp [3:5]
+ boost/interprocess/managed_xsi_shared_memory.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL cefbb022b3ae5f3ac530ca0a8d9e20c1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/binomial_distribution.hpp at line 5, boost/random/detail/auto_link.hpp at line 5, boost/random/detail/generator_seed_seq.hpp at line 5, boost/random/discard_block.hpp at line 5, boost/random/extreme_value_distribution.hpp at line 5, boost/random/gamma_distribution.hpp at line 5, boost/random/mersenne_twister.hpp at line 5, boost/random/negative_binomial_distribution.hpp at line 5, boost/random/poisson_distribution.hpp at line 5, boost/random/seed_seq.hpp at line 5, boost/random/shuffle_order.hpp at line 5, boost/random/weibull_distribution.hpp at line 5
+ License text:
+ * Copyright Steven Watanabe 2010
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random/binomial_distribution.hpp [3:5]
+ boost/random/detail/auto_link.hpp [3:5]
+ boost/random/detail/generator_seed_seq.hpp [3:6]
+ boost/random/discard_block.hpp [3:6]
+ boost/random/extreme_value_distribution.hpp [3:5]
+ boost/random/gamma_distribution.hpp [3:6]
+ boost/random/mersenne_twister.hpp [3:6]
+ boost/random/negative_binomial_distribution.hpp [3:5]
+ boost/random/poisson_distribution.hpp [3:6]
+ boost/random/seed_seq.hpp [3:5]
+ boost/random/shuffle_order.hpp [3:6]
+ boost/random/weibull_distribution.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL cf16777a1dfdf5f4dcd957c2ccbf8ffc
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Howard Hinnant
+ // Copyright 2008 Beman Dawes
+ // Copyright 2009-2011 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/duration.hpp [3:5]
+ boost/chrono/system_clocks.hpp [3:5]
+ boost/chrono/time_point.hpp [3:5]
+ boost/ratio/detail/overflow_helpers.hpp [3:5]
+ boost/ratio/ratio.hpp [3:5]
+ boost/ratio/ratio_fwd.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL cf493f6fefc669355a842f7bfa617427
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/container_fwd.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/container_fwd.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL cf501a6385edda09aa31f2586022bac5
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
+ // Copyright (c) 2011-2012 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/util/rational.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL cf5d38de6aecb51f9114e6992bbe0c7f
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+ // Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/centroid.hpp [3:6]
+ boost/geometry/algorithms/convex_hull.hpp [3:5]
+ boost/geometry/algorithms/detail/disjoint/box_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_box.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_geometry.hpp [3:6]
+ boost/geometry/algorithms/detail/disjoint/point_point.hpp [3:6]
+ boost/geometry/algorithms/detail/envelope/box.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/linear.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/point.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/range.hpp [3:5]
+ boost/geometry/algorithms/detail/envelope/segment.hpp [3:5]
+ boost/geometry/algorithms/detail/equals/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/equals/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/box.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/indexed.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/interface.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/point.hpp [3:6]
+ boost/geometry/algorithms/detail/expand/segment.hpp [3:6]
+ boost/geometry/algorithms/detail/intersection/multi.hpp [3:3]
+ boost/geometry/algorithms/detail/not.hpp [3:5]
+ boost/geometry/algorithms/detail/overlaps/implementation.hpp [3:5]
+ boost/geometry/algorithms/detail/overlaps/interface.hpp [3:5]
+ boost/geometry/algorithms/detail/overlay/clip_linestring.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/intersection_insert.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/overlay.hpp [3:4]
+ boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp [3:6]
+ boost/geometry/algorithms/detail/relate/de9im.hpp [3:3]
+ boost/geometry/algorithms/detail/relate/result.hpp [3:4]
+ boost/geometry/algorithms/detail/relate/turns.hpp [3:3]
+ boost/geometry/algorithms/detail/relation/interface.hpp [3:3]
+ boost/geometry/algorithms/detail/sections/sectionalize.hpp [3:6]
+ boost/geometry/algorithms/detail/throw_on_empty_input.hpp [3:6]
+ boost/geometry/algorithms/detail/touches/implementation.hpp [3:6]
+ boost/geometry/algorithms/detail/touches/interface.hpp [3:6]
+ boost/geometry/algorithms/dispatch/envelope.hpp [3:5]
+ boost/geometry/algorithms/dispatch/expand.hpp [3:6]
+ boost/geometry/algorithms/envelope.hpp [3:5]
+ boost/geometry/algorithms/equals.hpp [3:6]
+ boost/geometry/algorithms/expand.hpp [3:6]
+ boost/geometry/algorithms/not_implemented.hpp [3:5]
+ boost/geometry/algorithms/overlaps.hpp [3:5]
+ boost/geometry/algorithms/simplify.hpp [3:5]
+ boost/geometry/algorithms/sym_difference.hpp [3:3]
+ boost/geometry/algorithms/touches.hpp [3:6]
+ boost/geometry/core/exception.hpp [3:5]
+ boost/geometry/core/radian_access.hpp [3:5]
+ boost/geometry/core/ring_type.hpp [3:5]
+ boost/geometry/geometry.hpp [3:5]
+ boost/geometry/multi/multi.hpp [3:5]
+ boost/geometry/strategies/cartesian/box_in_box.hpp [3:6]
+ boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp [3:5]
+ boost/geometry/strategies/cartesian/point_in_box.hpp [3:5]
+ boost/geometry/strategies/cartesian/side_by_triangle.hpp [3:5]
+ boost/geometry/strategies/distance_result.hpp [3:7]
+ boost/geometry/strategies/intersection_result.hpp [3:3]
+ boost/geometry/strategies/strategy_transform.hpp [3:5]
+ boost/geometry/strategies/transform/matrix_transformers.hpp [3:5]
+ boost/geometry/util/compress_variant.hpp [3:5]
+ boost/geometry/util/math.hpp [3:5]
+ boost/geometry/util/transform_variant.hpp [3:5]
+ boost/geometry/views/detail/indexed_point_view.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL cf5e56ae189ec8cdbf6a61c940073563
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/filesystem/operations.hpp at line 5, boost/filesystem/path.hpp at line 5, boost/program_options.hpp at line 3
+ License text:
+ // Copyright Vladimir Prus 2002.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/operations.hpp [3:6]
+ boost/filesystem/path.hpp [3:4]
+ boost/program_options.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL cf7e80573064ef58d887ce45ac2987ab
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013, 2014, 2015.
+ // Modifications copyright (c) 2013-2015 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/relate/de9im.hpp [5:6]
+ boost/geometry/algorithms/detail/relate/relate_impl.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL d008844cf3c6e538e8ef03085426c78c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/foldr.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2011 - 2012.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/foldr.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL d029d22004bd9ecc9a0c8c630af36231
+BELONGS ya.make
+ License text:
+ Copyright Paul Mensonides 2003
+ Copyright Aleksey Gurtovoy 2003-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp [5:6]
+ boost/mpl/aux_/config/arrays.hpp [5:5]
+ boost/mpl/aux_/config/operators.hpp [5:5]
+ boost/mpl/aux_/config/typeof.hpp [5:5]
+ boost/mpl/aux_/inserter_algorithm.hpp [5:6]
+ boost/mpl/aux_/numeric_cast_utils.hpp [5:5]
+ boost/mpl/aux_/order_impl.hpp [5:6]
+ boost/mpl/aux_/preprocessor/is_seq.hpp [5:6]
+ boost/mpl/aux_/preprocessor/token_equal.hpp [5:6]
+ boost/mpl/aux_/ptr_to_ref.hpp [5:5]
+ boost/mpl/back_inserter.hpp [5:6]
+ boost/mpl/bitwise.hpp [5:6]
+ boost/mpl/front_inserter.hpp [5:6]
+ boost/mpl/has_key.hpp [5:6]
+ boost/mpl/has_key_fwd.hpp [5:6]
+ boost/mpl/index_of.hpp [5:6]
+ boost/mpl/inserter.hpp [5:6]
+ boost/mpl/iter_fold_if.hpp [5:6]
+ boost/mpl/key_type.hpp [5:6]
+ boost/mpl/key_type_fwd.hpp [5:6]
+ boost/mpl/map/aux_/at_impl.hpp [5:6]
+ boost/mpl/map/aux_/begin_end_impl.hpp [5:6]
+ boost/mpl/map/aux_/clear_impl.hpp [5:6]
+ boost/mpl/map/aux_/contains_impl.hpp [5:5]
+ boost/mpl/map/aux_/empty_impl.hpp [5:5]
+ boost/mpl/map/aux_/erase_impl.hpp [5:6]
+ boost/mpl/map/aux_/erase_key_impl.hpp [5:6]
+ boost/mpl/map/aux_/has_key_impl.hpp [5:6]
+ boost/mpl/map/aux_/insert_impl.hpp [5:6]
+ boost/mpl/map/aux_/item.hpp [5:6]
+ boost/mpl/map/aux_/iterator.hpp [5:6]
+ boost/mpl/map/aux_/key_type_impl.hpp [5:6]
+ boost/mpl/map/aux_/map0.hpp [5:6]
+ boost/mpl/map/aux_/size_impl.hpp [5:5]
+ boost/mpl/map/aux_/tag.hpp [5:6]
+ boost/mpl/map/aux_/value_type_impl.hpp [5:6]
+ boost/mpl/map/map0.hpp [5:6]
+ boost/mpl/multiset/aux_/count_impl.hpp [5:5]
+ boost/mpl/multiset/aux_/insert_impl.hpp [5:5]
+ boost/mpl/multiset/aux_/item.hpp [5:5]
+ boost/mpl/multiset/aux_/multiset0.hpp [5:5]
+ boost/mpl/multiset/aux_/tag.hpp [5:5]
+ boost/mpl/multiset/multiset0.hpp [5:5]
+ boost/mpl/numeric_cast.hpp [5:5]
+ boost/mpl/order.hpp [5:6]
+ boost/mpl/order_fwd.hpp [5:6]
+ boost/mpl/set/aux_/at_impl.hpp [5:5]
+ boost/mpl/set/aux_/clear_impl.hpp [5:6]
+ boost/mpl/set/aux_/empty_impl.hpp [5:5]
+ boost/mpl/set/aux_/erase_impl.hpp [5:6]
+ boost/mpl/set/aux_/has_key_impl.hpp [5:6]
+ boost/mpl/set/aux_/key_type_impl.hpp [5:6]
+ boost/mpl/set/aux_/set0.hpp [5:6]
+ boost/mpl/set/aux_/size_impl.hpp [5:5]
+ boost/mpl/set/aux_/tag.hpp [5:6]
+ boost/mpl/set/aux_/value_type_impl.hpp [5:6]
+ boost/mpl/set/set0.hpp [5:6]
+ boost/mpl/set/set0_c.hpp [5:6]
+ boost/mpl/switch.hpp [5:5]
+ boost/mpl/value_type.hpp [5:6]
+ boost/mpl/value_type_fwd.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL d077f78d89db735c5477f98382d3f111
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015 Jakub Pola <jakub.pola@gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/compute/algorithm/scatter_if.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL d08b64268e9bf8233011a58377066d90
+BELONGS libs/context/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/context/detail/apply.hpp at line 4, boost/context/detail/config.hpp at line 4, boost/context/detail/disable_overload.hpp at line 4, boost/context/detail/exception.hpp at line 4, boost/context/detail/exchange.hpp at line 4, boost/context/detail/externc.hpp at line 4, boost/context/detail/index_sequence.hpp at line 4, boost/context/detail/invoke.hpp at line 4, boost/context/detail/tuple.hpp at line 4, boost/context/execution_context.hpp at line 4, boost/context/execution_context_v1.hpp at line 4, boost/context/execution_context_v2.hpp at line 4, boost/context/execution_context_v2_void.ipp at line 4, boost/context/fixedsize_stack.hpp at line 4, boost/context/flags.hpp at line 4, boost/context/pooled_fixedsize_stack.hpp at line 4, boost/context/posix/protected_fixedsize_stack.hpp at line 4, boost/context/posix/segmented_stack.hpp at line 4, boost/context/preallocated.hpp at line 4, boost/context/protected_fixedsize_stack.hpp at line 4, boost/context/segmented_stack.hpp at line 4, boost/context/stack_context.hpp at line 4, boost/context/stack_traits.hpp at line 4, boost/context/windows/protected_fixedsize_stack.hpp at line 4, boost/coroutine2/all.hpp at line 4, boost/coroutine2/coroutine.hpp at line 4, boost/coroutine2/detail/config.hpp at line 4, boost/coroutine2/detail/coroutine.hpp at line 4, boost/coroutine2/detail/create_control_block.ipp at line 4, boost/coroutine2/detail/decay_copy.hpp at line 4, boost/coroutine2/detail/disable_overload.hpp at line 4, boost/coroutine2/detail/forced_unwind.hpp at line 4, boost/coroutine2/detail/pull_coroutine.hpp at line 4, boost/coroutine2/detail/pull_coroutine.ipp at line 4, boost/coroutine2/detail/push_control_block_cc.hpp at line 4, boost/coroutine2/detail/push_control_block_cc.ipp at line 4, boost/coroutine2/detail/push_coroutine.hpp at line 4, boost/coroutine2/detail/push_coroutine.ipp at line 4, boost/coroutine2/detail/state.hpp at line 4, boost/coroutine2/detail/wrap.hpp at line 4, boost/coroutine2/fixedsize_stack.hpp at line 4, boost/coroutine2/pooled_fixedsize_stack.hpp at line 4, boost/coroutine2/protected_fixedsize_stack.hpp at line 4, boost/coroutine2/segmented_stack.hpp at line 4, boost/fiber/detail/decay_copy.hpp at line 4, boost/fiber/detail/disable_overload.hpp at line 4, boost/fiber/fixedsize_stack.hpp at line 4, boost/fiber/pooled_fixedsize_stack.hpp at line 4, boost/fiber/protected_fixedsize_stack.hpp at line 4, boost/fiber/segmented_stack.hpp at line 4, libs/context/src/posix/stack_traits.cpp at line 4, libs/context/src/windows/stack_traits.cpp at line 4
+ License text:
+ // Copyright Oliver Kowalke 2014.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/context/detail/apply.hpp [2:4]
+ boost/context/detail/config.hpp [2:4]
+ boost/context/detail/disable_overload.hpp [2:4]
+ boost/context/detail/exception.hpp [2:4]
+ boost/context/detail/exchange.hpp [2:4]
+ boost/context/detail/externc.hpp [2:4]
+ boost/context/detail/index_sequence.hpp [2:4]
+ boost/context/detail/invoke.hpp [2:4]
+ boost/context/detail/tuple.hpp [2:4]
+ boost/context/execution_context.hpp [2:4]
+ boost/context/execution_context_v1.hpp [2:4]
+ boost/context/execution_context_v2.hpp [2:4]
+ boost/context/execution_context_v2_void.ipp [2:4]
+ boost/context/fixedsize_stack.hpp [2:4]
+ boost/context/flags.hpp [2:4]
+ boost/context/pooled_fixedsize_stack.hpp [2:4]
+ boost/context/posix/protected_fixedsize_stack.hpp [2:4]
+ boost/context/posix/segmented_stack.hpp [2:4]
+ boost/context/preallocated.hpp [2:4]
+ boost/context/protected_fixedsize_stack.hpp [2:4]
+ boost/context/segmented_stack.hpp [2:4]
+ boost/context/stack_context.hpp [2:4]
+ boost/context/stack_traits.hpp [2:4]
+ boost/context/windows/protected_fixedsize_stack.hpp [2:4]
+ boost/coroutine2/all.hpp [2:4]
+ boost/coroutine2/coroutine.hpp [2:4]
+ boost/coroutine2/detail/config.hpp [2:4]
+ boost/coroutine2/detail/coroutine.hpp [2:4]
+ boost/coroutine2/detail/create_control_block.ipp [2:4]
+ boost/coroutine2/detail/decay_copy.hpp [2:4]
+ boost/coroutine2/detail/disable_overload.hpp [2:4]
+ boost/coroutine2/detail/forced_unwind.hpp [2:4]
+ boost/coroutine2/detail/pull_coroutine.hpp [2:4]
+ boost/coroutine2/detail/pull_coroutine.ipp [2:4]
+ boost/coroutine2/detail/push_control_block_cc.hpp [2:4]
+ boost/coroutine2/detail/push_control_block_cc.ipp [2:4]
+ boost/coroutine2/detail/push_coroutine.hpp [2:4]
+ boost/coroutine2/detail/push_coroutine.ipp [2:4]
+ boost/coroutine2/detail/state.hpp [2:4]
+ boost/coroutine2/detail/wrap.hpp [2:4]
+ boost/coroutine2/fixedsize_stack.hpp [2:4]
+ boost/coroutine2/pooled_fixedsize_stack.hpp [2:4]
+ boost/coroutine2/protected_fixedsize_stack.hpp [2:4]
+ boost/coroutine2/segmented_stack.hpp [2:4]
+ boost/fiber/detail/decay_copy.hpp [2:4]
+ boost/fiber/detail/disable_overload.hpp [2:4]
+ boost/fiber/fixedsize_stack.hpp [2:4]
+ boost/fiber/pooled_fixedsize_stack.hpp [2:4]
+ boost/fiber/protected_fixedsize_stack.hpp [2:4]
+ boost/fiber/segmented_stack.hpp [2:4]
+ libs/context/src/posix/stack_traits.cpp [2:4]
+ libs/context/src/windows/stack_traits.cpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d08ee88acc4c1b352aea89d4523daace
+BELONGS ya.make
+ License text:
+ // Copyright 2009, Andrew Sutton
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/graph_concepts.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL d0a2ba3c20953d96004719528e4b7464
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/detail/defaults_def.hpp at line 5, boost/python/detail/defaults_gen.hpp at line 5, boost/python/init.hpp at line 5, boost/python/signature.hpp at line 5
+ License text:
+ // Copyright David Abrahams 2002, Joel de Guzman, 2002.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/detail/defaults_def.hpp [3:5]
+ boost/python/detail/defaults_gen.hpp [3:5]
+ boost/python/init.hpp [3:5]
+ boost/python/signature.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d0b7b4d9414b744a276dde50efc26987
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2017.
+ // Copyright Nick Thompson 2017.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/quadrature/gauss_kronrod.hpp [1:4]
+ boost/math/special_functions/legendre_stieltjes.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d0be2d8de4aedec01573af923ce64bf0
+BELONGS ya.make
+ License text:
+ // (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+ // Howard Hinnant and John Maddock 2000, 2010.
+ // (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/is_reference.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d0df6b231fc0d50a4fbb01672c996b9d
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2008-2013 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lockfree/queue.hpp [5:5]
+ boost/lockfree/stack.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL d13138d28bff8572a5d27fe6a28aab70
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/errors.hpp at line 16
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/errors.hpp [13:16]
+
+KEEP COPYRIGHT_SERVICE_LABEL d1539939d3ea353afc27eefdf3b67a31
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/register_fundamental.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d1621c6c21ccfd4947a100ffad23e459
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2014 Glen Joseph Fernandes
+ // glenfe at live dot com
+ // Copyright (C) 2014 Agustin Berge
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/ref.hpp [21:23]
+ boost/spirit/home/x3/support/traits/is_parser.hpp [2:3]
+ boost/type_traits/is_final.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL d166aaec24788ba33ec179aaaedaf93d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2010
+ // Joerg Walter, Mathias Koch, Gunter Winkler, David Bellot
+ // Copyright (c) 2014, Athanasios Iliopoulos
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/matrix.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d1819f46d6f27ddacf021ceff86b106f
+BELONGS ya.make
+ License text:
+ // (C) Copyright Gennaro Prota 2003.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/non_type.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d1ac3c25c828d7ba6c559ef23e5e88a1
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/platform/vxworks.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d1e593bd85d0eb5a452ed45663a23154
+BELONGS ya.make
+ License text:
+ // (C) Copyright Beman Dawes 1999.
+ // (C) Copyright Jens Mauer 2001
+ // (C) Copyright John Maddock 2001
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cstdint.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL d1e7f9bd90cf97484f0926c3d9377996
+BELONGS libs/program_options/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/program_options/src/split.cpp at line 3
+ License text:
+ // Copyright Sascha Ochsenknecht 2009.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/program_options/src/split.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d1eeae51f362a32140f64b39499ca9bf
+BELONGS libs/context/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/context/src/asm/jump_i386_ms_pe_gas.asm at line 5, libs/context/src/asm/jump_x86_64_ms_pe_gas.asm at line 5, libs/context/src/asm/make_i386_ms_pe_gas.asm at line 5, libs/context/src/asm/make_x86_64_ms_pe_gas.asm at line 5, libs/context/src/asm/ontop_i386_ms_pe_gas.asm at line 5, libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ libs/context/src/asm/jump_i386_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/jump_x86_64_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/make_i386_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/make_x86_64_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/ontop_i386_ms_pe_gas.asm [2:5]
+ libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d2d6569dd19f792f7541651756026c28
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/utility.hpp [2:9]
+ boost/spirit/home/classic/utility/loops.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d2ee995cb5903575db47d47b28186882
+BELONGS ya.make
+ License text:
+ Copyright (c) 2009-2009: Joachim Faulhaber
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/detail/concept_check.hpp [2:2]
+ boost/icl/detail/element_iterator.hpp [2:2]
+ boost/icl/detail/mapped_reference.hpp [2:2]
+ boost/icl/detail/relation_state.hpp [2:3]
+ boost/icl/iterator.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL d2f73b81273d8de95d251814749aa165
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/ptr_container.hpp at line 6
+ License text:
+ // Copyright Thorsten Ottosen 2003-2008. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/ptr_container.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL d2fc4a5805963e793129ad966a663afb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/polygon/detail/voronoi_ctypes.hpp at line 5, boost/polygon/detail/voronoi_predicates.hpp at line 5, boost/polygon/detail/voronoi_robust_fpt.hpp at line 5, boost/polygon/detail/voronoi_structures.hpp at line 5, boost/polygon/voronoi.hpp at line 5, boost/polygon/voronoi_builder.hpp at line 5, boost/polygon/voronoi_diagram.hpp at line 5, boost/polygon/voronoi_geometry_type.hpp at line 5
+ License text:
+ // Copyright Andrii Sydorchuk 2010-2012.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polygon/detail/voronoi_ctypes.hpp [3:5]
+ boost/polygon/detail/voronoi_predicates.hpp [3:5]
+ boost/polygon/detail/voronoi_robust_fpt.hpp [3:5]
+ boost/polygon/detail/voronoi_structures.hpp [3:5]
+ boost/polygon/voronoi.hpp [3:5]
+ boost/polygon/voronoi_builder.hpp [3:5]
+ boost/polygon/voronoi_diagram.hpp [3:5]
+ boost/polygon/voronoi_geometry_type.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d33733b6812586c20c76107355a1b34c
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2017 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/vector/detail/cpp03/vector.hpp [2:3]
+ boost/fusion/include/std_array.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL d34a9a3fbfc60fa896c038960d122b12
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009-2016 Vladimir Batov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/convert.hpp [3:3]
+ boost/convert/base.hpp [1:3]
+ boost/convert/detail/boost_parameter_ext.hpp [1:3]
+ boost/convert/detail/char.hpp [1:3]
+ boost/convert/detail/config.hpp [1:3]
+ boost/convert/detail/has_member.hpp [1:3]
+ boost/convert/detail/is_callable.hpp [1:3]
+ boost/convert/detail/is_converter.hpp [1:3]
+ boost/convert/detail/is_fun.hpp [1:3]
+ boost/convert/detail/is_string.hpp [1:3]
+ boost/convert/detail/range.hpp [1:3]
+ boost/convert/lexical_cast.hpp [1:3]
+ boost/convert/parameters.hpp [1:3]
+ boost/convert/printf.hpp [1:3]
+ boost/convert/spirit.hpp [1:3]
+ boost/convert/stream.hpp [1:3]
+ boost/convert/strtol.hpp [1:3]
+ boost/make_default.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d350900b2e39e132319537297cfbe520
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2015
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/hashtable.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d352bc8699bf942eeba5c2df746a55f4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014-2018, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/is_valid/interface.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d39b002100b0e8167c07ba134cd22ec6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/flyweight/detail/is_placeholder_expr.hpp at line 3, boost/flyweight/detail/nested_xxx_if_not_ph.hpp at line 3, boost/flyweight/set_factory.hpp at line 3, boost/flyweight/static_holder.hpp at line 3
+ License text:
+ /* Copyright 2006-2009 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/flyweight/detail/is_placeholder_expr.hpp [1:3]
+ boost/flyweight/detail/nested_xxx_if_not_ph.hpp [1:3]
+ boost/flyweight/set_factory.hpp [1:3]
+ boost/flyweight/static_holder.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d3e56c8e29d98a9f5feed4a5b99585ad
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/index/adaptors/query.hpp [5:5]
+ boost/geometry/index/detail/algorithms/diff_abs.hpp [5:5]
+ boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp [5:5]
+ boost/geometry/index/detail/algorithms/sum_for_indexable.hpp [5:5]
+ boost/geometry/index/detail/algorithms/union_content.hpp [5:6]
+ boost/geometry/index/detail/config_begin.hpp [3:3]
+ boost/geometry/index/detail/config_end.hpp [3:3]
+ boost/geometry/index/detail/meta.hpp [3:3]
+ boost/geometry/index/detail/rtree/adaptors.hpp [5:5]
+ boost/geometry/index/detail/rtree/kmeans/kmeans.hpp [5:5]
+ boost/geometry/index/detail/rtree/kmeans/split.hpp [5:5]
+ boost/geometry/index/detail/rtree/linear/linear.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/concept.hpp [5:5]
+ boost/geometry/index/detail/rtree/node/pairs.hpp [5:5]
+ boost/geometry/index/detail/rtree/quadratic/quadratic.hpp [5:5]
+ boost/geometry/index/detail/rtree/rstar/rstar.hpp [5:5]
+ boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp [5:5]
+ boost/geometry/index/detail/rtree/utilities/gl_draw.hpp [5:5]
+ boost/geometry/index/detail/rtree/utilities/print.hpp [5:5]
+ boost/geometry/index/detail/rtree/utilities/statistics.hpp [5:6]
+ boost/geometry/index/detail/rtree/utilities/view.hpp [5:5]
+ boost/geometry/index/detail/tags.hpp [5:5]
+ boost/geometry/index/detail/translator.hpp [3:3]
+ boost/geometry/index/detail/tuples.hpp [3:3]
+ boost/geometry/index/detail/utilities.hpp [3:3]
+ boost/geometry/index/distance_predicates.hpp [5:5]
+ boost/geometry/index/inserter.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d3f7a028120af640b01efe1aa0ac7ac2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/poly_collection/detail/any_iterator.hpp at line 3, boost/poly_collection/detail/auto_iterator.hpp at line 3, boost/poly_collection/detail/callable_wrapper_iterator.hpp at line 3, boost/poly_collection/detail/integer_sequence.hpp at line 3, boost/poly_collection/function_collection_fwd.hpp at line 3
+ License text:
+ /* Copyright 2016 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/poly_collection/detail/any_iterator.hpp [1:3]
+ boost/poly_collection/detail/auto_iterator.hpp [1:3]
+ boost/poly_collection/detail/callable_wrapper_iterator.hpp [1:3]
+ boost/poly_collection/detail/integer_sequence.hpp [1:3]
+ boost/poly_collection/function_collection_fwd.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d3fbabf96f022c1b21e5ea1626e363ac
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp [3:3]
+ boost/geometry/algorithms/detail/buffer/buffer_policies.hpp [3:3]
+ boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp [3:4]
+ boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp [3:4]
+ boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp [3:3]
+ boost/geometry/algorithms/detail/buffer/parallel_continue.hpp [3:3]
+ boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp [3:4]
+ boost/geometry/algorithms/detail/get_left_turns.hpp [3:3]
+ boost/geometry/algorithms/detail/occupation_info.hpp [3:3]
+ boost/geometry/multi/algorithms/disjoint.hpp [3:5]
+ boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp [3:3]
+ boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp [3:3]
+ boost/geometry/strategies/buffer.hpp [3:3]
+ boost/geometry/strategies/cartesian/buffer_end_flat.hpp [3:3]
+ boost/geometry/strategies/cartesian/buffer_join_miter.hpp [3:3]
+ boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp [3:3]
+ boost/geometry/strategies/cartesian/buffer_point_square.hpp [2:4]
+ boost/geometry/strategies/cartesian/buffer_side_straight.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d4340d0d736b54981d79b03c9fdb5dd0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2013 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/algorithm/auxiliary/move.hpp [2:2]
+ boost/fusion/container/generation/deque_tie.hpp [2:2]
+ boost/fusion/container/generation/make_deque.hpp [2:2]
+ boost/fusion/container/generation/make_map.hpp [2:2]
+ boost/fusion/container/generation/map_tie.hpp [2:2]
+ boost/fusion/container/map/detail/at_impl.hpp [2:2]
+ boost/fusion/container/map/detail/at_key_impl.hpp [2:2]
+ boost/fusion/container/map/detail/value_at_impl.hpp [2:2]
+ boost/fusion/container/map/detail/value_at_key_impl.hpp [2:2]
+ boost/fusion/include/move.hpp [2:2]
+ boost/spirit/home/x3.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL d44a7af240f3d7a5737ce860f09d57dc
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/relation/implementation.hpp [3:3]
+ boost/geometry/algorithms/relate.hpp [3:3]
+ boost/geometry/algorithms/relation.hpp [3:3]
+ boost/geometry/core/assert.hpp [3:6]
+ boost/geometry/util/condition.hpp [3:3]
+ boost/geometry/util/has_infinite_coordinate.hpp [3:3]
+ boost/geometry/util/has_nan_coordinate.hpp [3:3]
+ boost/geometry/util/has_non_finite_coordinate.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d4cc8d0ff6a85a6cd36e6baa01a74613
+BELONGS ya.make
+ License text:
+ // Copyright 2014-2015 Renato Tegon Forti, Antony Polukhin.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dll/detail/posix/path_from_handle.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL d4d3b84605f6db76e76a70a7f3101696
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2012 Vicente Botet
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/lock_concepts.hpp [1:1]
+ boost/thread/lockable_concepts.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL d5560a9b5388fcb00fcee11320a6d25a
+BELONGS ya.make
+ License text:
+ Copyright 2018 Glen Joseph Fernandes
+ (glenjofe@gmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/empty_value.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d59fc852d5689f688dbbd0404c839c4e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/concepts/mp_number_archetypes.hpp at line 4, boost/multiprecision/cpp_int.hpp at line 4, boost/multiprecision/cpp_int/add.hpp at line 4, boost/multiprecision/cpp_int/bitwise.hpp at line 4, boost/multiprecision/cpp_int/checked.hpp at line 4, boost/multiprecision/cpp_int/comparison.hpp at line 4, boost/multiprecision/cpp_int/cpp_int_config.hpp at line 4, boost/multiprecision/cpp_int/divide.hpp at line 4, boost/multiprecision/cpp_int/limits.hpp at line 4, boost/multiprecision/cpp_int/misc.hpp at line 4, boost/multiprecision/cpp_int/multiply.hpp at line 4, boost/multiprecision/debug_adaptor.hpp at line 4, boost/multiprecision/detail/digits.hpp at line 4, boost/multiprecision/detail/dynamic_array.hpp at line 4, boost/multiprecision/detail/integer_ops.hpp at line 4, boost/multiprecision/detail/no_et_ops.hpp at line 4, boost/multiprecision/detail/number_compare.hpp at line 4, boost/multiprecision/detail/rebind.hpp at line 4, boost/multiprecision/detail/utype_helper.hpp at line 4, boost/multiprecision/integer.hpp at line 4, boost/multiprecision/logged_adaptor.hpp at line 4, boost/multiprecision/miller_rabin.hpp at line 4, boost/multiprecision/random.hpp at line 4, boost/multiprecision/traits/explicit_conversion.hpp at line 4, boost/multiprecision/traits/extract_exponent_type.hpp at line 4, boost/multiprecision/traits/is_restricted_conversion.hpp at line 4
+ License text:
+ // Copyright 2012 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/concepts/mp_number_archetypes.hpp [2:4]
+ boost/multiprecision/cpp_int.hpp [2:4]
+ boost/multiprecision/cpp_int/add.hpp [2:4]
+ boost/multiprecision/cpp_int/bitwise.hpp [2:4]
+ boost/multiprecision/cpp_int/checked.hpp [2:4]
+ boost/multiprecision/cpp_int/comparison.hpp [2:4]
+ boost/multiprecision/cpp_int/cpp_int_config.hpp [2:4]
+ boost/multiprecision/cpp_int/divide.hpp [2:4]
+ boost/multiprecision/cpp_int/limits.hpp [2:4]
+ boost/multiprecision/cpp_int/misc.hpp [2:4]
+ boost/multiprecision/cpp_int/multiply.hpp [2:4]
+ boost/multiprecision/debug_adaptor.hpp [2:4]
+ boost/multiprecision/detail/digits.hpp [2:4]
+ boost/multiprecision/detail/dynamic_array.hpp [2:5]
+ boost/multiprecision/detail/integer_ops.hpp [2:4]
+ boost/multiprecision/detail/no_et_ops.hpp [2:4]
+ boost/multiprecision/detail/number_compare.hpp [2:4]
+ boost/multiprecision/detail/rebind.hpp [2:5]
+ boost/multiprecision/detail/utype_helper.hpp [2:5]
+ boost/multiprecision/integer.hpp [2:4]
+ boost/multiprecision/logged_adaptor.hpp [2:4]
+ boost/multiprecision/miller_rabin.hpp [2:4]
+ boost/multiprecision/random.hpp [2:6]
+ boost/multiprecision/traits/explicit_conversion.hpp [2:5]
+ boost/multiprecision/traits/extract_exponent_type.hpp [2:4]
+ boost/multiprecision/traits/is_restricted_conversion.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d5a8bd6fe5b77ae660806951d65c6d09
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/msm/mpl_graph/adjacency_list_graph.hpp at line 3, boost/msm/mpl_graph/breadth_first_search.hpp at line 3, boost/msm/mpl_graph/depth_first_search.hpp at line 3, boost/msm/mpl_graph/detail/adjacency_list_graph.ipp at line 3, boost/msm/mpl_graph/detail/graph_implementation_interface.ipp at line 3, boost/msm/mpl_graph/detail/incidence_list_graph.ipp at line 3, boost/msm/mpl_graph/incidence_list_graph.hpp at line 3, boost/msm/mpl_graph/mpl_graph.hpp at line 3, boost/msm/mpl_graph/mpl_utils.hpp at line 3, boost/msm/mpl_graph/search_colors.hpp at line 3
+ License text:
+ // Copyright 2008-2010 Gordon Woodhull
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/msm/mpl_graph/adjacency_list_graph.hpp [1:3]
+ boost/msm/mpl_graph/breadth_first_search.hpp [1:3]
+ boost/msm/mpl_graph/depth_first_search.hpp [1:3]
+ boost/msm/mpl_graph/detail/adjacency_list_graph.ipp [1:3]
+ boost/msm/mpl_graph/detail/graph_implementation_interface.ipp [1:3]
+ boost/msm/mpl_graph/detail/incidence_list_graph.ipp [1:3]
+ boost/msm/mpl_graph/incidence_list_graph.hpp [1:3]
+ boost/msm/mpl_graph/mpl_graph.hpp [1:3]
+ boost/msm/mpl_graph/mpl_utils.hpp [1:3]
+ boost/msm/mpl_graph/search_colors.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d60703bc7febb0860dcd48b70a594212
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/p_square_cumul_dist.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/p_square_cumul_dist.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL d63fdf414caaa23ffde811fd7c826e92
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2005-7 Anthony Williams
+ // (C) Copyright 2005 John Maddock
+ // (C) Copyright 2011-2013 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/win32/once.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL d663678a9bb1e4b6f410ded7c0853610
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014 Glen Joseph Fernandes
+ // glenfe at live dot com
+ // Copyright (c) 2014 Riccardo Marcangelo
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dynamic_bitset/dynamic_bitset.hpp [7:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL d6c2647ffc3e2dcd7ddff5aa0c37c678
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003 Eric Friedman, Itay Maman
+ // Copyright (c) 2014 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/detail/apply_visitor_unary.hpp [6:7]
+ boost/variant/get.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL d6c9133530a2ec1b94a5d854024c3bd8
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/numpy.hpp at line 4, boost/python/numpy/dtype.hpp at line 4, boost/python/numpy/internal.hpp at line 4, boost/python/numpy/invoke_matching.hpp at line 4, boost/python/numpy/matrix.hpp at line 4, boost/python/numpy/ndarray.hpp at line 4, boost/python/numpy/numpy_object_mgr_traits.hpp at line 4, boost/python/numpy/scalars.hpp at line 4, boost/python/numpy/ufunc.hpp at line 4, libs/python/src/numpy/dtype.cpp at line 4, libs/python/src/numpy/matrix.cpp at line 4, libs/python/src/numpy/ndarray.cpp at line 4, libs/python/src/numpy/numpy.cpp at line 4, libs/python/src/numpy/scalars.cpp at line 4, libs/python/src/numpy/ufunc.cpp at line 4
+ License text:
+ // Copyright Jim Bosch 2010-2012.
+ // Copyright Stefan Seefeld 2016.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/numpy.hpp [1:4]
+ boost/python/numpy/dtype.hpp [1:4]
+ boost/python/numpy/internal.hpp [1:4]
+ boost/python/numpy/invoke_matching.hpp [1:4]
+ boost/python/numpy/matrix.hpp [1:4]
+ boost/python/numpy/ndarray.hpp [1:4]
+ boost/python/numpy/numpy_object_mgr_traits.hpp [1:4]
+ boost/python/numpy/scalars.hpp [1:4]
+ boost/python/numpy/ufunc.hpp [1:4]
+ libs/python/src/numpy/dtype.cpp [1:4]
+ libs/python/src/numpy/matrix.cpp [1:4]
+ libs/python/src/numpy/ndarray.cpp [1:4]
+ libs/python/src/numpy/numpy.cpp [1:4]
+ libs/python/src/numpy/scalars.cpp [1:4]
+ libs/python/src/numpy/ufunc.cpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d6db1f5c1ba3fd89e8e302ce1d41dc7e
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2012 Bruno Lalande, Paris, France.
+ // Copyright (c) 2012 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/util/bare_type.hpp [3:5]
+ boost/geometry/util/calculation_type.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d6ffc9c8b7faf6b69be894dbb468e1ac
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/hardware.h at line 5, boost/predef/hardware/simd.h at line 5, boost/predef/hardware/simd/arm.h at line 5, boost/predef/hardware/simd/arm/versions.h at line 5, boost/predef/hardware/simd/ppc.h at line 5, boost/predef/hardware/simd/ppc/versions.h at line 5, boost/predef/hardware/simd/x86.h at line 5, boost/predef/hardware/simd/x86/versions.h at line 5, boost/predef/hardware/simd/x86_amd.h at line 5, boost/predef/hardware/simd/x86_amd/versions.h at line 5
+ License text:
+ Copyright Charly Chevalier 2015
+ Copyright Joel Falcou 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/hardware.h [2:5]
+ boost/predef/hardware/simd.h [2:5]
+ boost/predef/hardware/simd/arm.h [2:5]
+ boost/predef/hardware/simd/arm/versions.h [2:5]
+ boost/predef/hardware/simd/ppc.h [2:5]
+ boost/predef/hardware/simd/ppc/versions.h [2:5]
+ boost/predef/hardware/simd/x86.h [2:5]
+ boost/predef/hardware/simd/x86/versions.h [2:5]
+ boost/predef/hardware/simd/x86_amd.h [2:5]
+ boost/predef/hardware/simd/x86_amd/versions.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d706b4945aea7b91948639454fe2562e
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2013 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/csbl/deque.hpp [1:1]
+ boost/thread/csbl/devector.hpp [1:1]
+ boost/thread/csbl/functional.hpp [1:1]
+ boost/thread/csbl/list.hpp [1:1]
+ boost/thread/csbl/memory.hpp [1:1]
+ boost/thread/csbl/memory/allocator_arg.hpp [1:1]
+ boost/thread/csbl/memory/allocator_traits.hpp [1:1]
+ boost/thread/csbl/memory/config.hpp [1:1]
+ boost/thread/csbl/memory/default_delete.hpp [1:1]
+ boost/thread/csbl/memory/pointer_traits.hpp [1:1]
+ boost/thread/csbl/memory/scoped_allocator.hpp [1:1]
+ boost/thread/csbl/tuple.hpp [1:1]
+ boost/thread/csbl/vector.hpp [1:1]
+ boost/thread/detail/atomic_redef_macros.hpp [1:1]
+ boost/thread/detail/atomic_undef_macros.hpp [1:1]
+ boost/thread/detail/function_wrapper.hpp [1:1]
+ boost/thread/detail/nullary_function.hpp [1:1]
+ boost/thread/detail/variadic_footer.hpp [1:1]
+ boost/thread/detail/variadic_header.hpp [1:1]
+ boost/thread/executor.hpp [1:1]
+ boost/thread/executors/serial_executor.hpp [1:1]
+ boost/thread/thread_pool.hpp [1:1]
+ boost/thread/user_scheduler.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL d7369b8aa594e0b3dc161a249b283b86
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006, 2007.
+ // Copyright Paul A. Bristow 2006, 2007, 2009, 2010.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions.hpp [1:2]
+ boost/math/distributions/cauchy.hpp [1:2]
+ boost/math/distributions/chi_squared.hpp [1:2]
+ boost/math/distributions/detail/common_error_handling.hpp [1:2]
+ boost/math/distributions/normal.hpp [1:2]
+ boost/math/distributions/triangular.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d73b88cee593256b0d7ec85d5b8fa25a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/compiler/intel.h at line 4
+ License text:
+ Copyright Rene Rivera 2008-2017
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/compiler/intel.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d73db9dfef39806d118c487419c17a2c
+BELONGS ya.make
+ License text:
+ Copyright (c) 2006 Joao Abecasis
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/non_terminal/impl/static.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d746f25f7b87dc815ab804cbdd5ee875
+BELONGS libs/thread/ya.make ya.make
+ License text:
+ * (C) Copyright 2013 Tim Blechmann
+ * (C) Copyright 2013 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/pause.hpp [6:7]
+ boost/thread/pthread/once_atomic.hpp [6:7]
+ libs/thread/src/pthread/once_atomic.cpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL d75225060f193b9147dad5e0d7d42983
+BELONGS ya.make
+ License text:
+ // Copyright John Maddock 2006-7, 2013-14.
+ // Copyright Paul A. Bristow 2007, 2013-14.
+ // Copyright Nikhar Agrawal 2013-14
+ // Copyright Christopher Kormanyos 2013-14
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/gamma.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d78b6dbfe1069ef1912985a3ebb3d094
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
+ // Copyright (C) 2005-2016 Daniel James
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/unordered/detail/implementation.hpp [1:2]
+ boost/unordered/detail/map.hpp [2:4]
+ boost/unordered/detail/set.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d7903d14a6322f299ddbba6647135742
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/item_version_type.hpp at line 6
+ License text:
+ // (C) Copyright 2010 Robert Ramey
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/item_version_type.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL d7ec3b31087d40f4ec8d4f38c2654306
+BELONGS libs/container/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/block_list.hpp at line 5, boost/container/detail/block_slist.hpp at line 5, boost/container/detail/dispatch_uses_allocator.hpp at line 5, boost/container/detail/dlmalloc.hpp at line 5, boost/container/detail/pool_resource.hpp at line 5, boost/container/pmr/deque.hpp at line 5, boost/container/pmr/flat_map.hpp at line 5, boost/container/pmr/flat_set.hpp at line 5, boost/container/pmr/global_resource.hpp at line 5, boost/container/pmr/list.hpp at line 5, boost/container/pmr/map.hpp at line 5, boost/container/pmr/memory_resource.hpp at line 5, boost/container/pmr/monotonic_buffer_resource.hpp at line 5, boost/container/pmr/polymorphic_allocator.hpp at line 5, boost/container/pmr/pool_options.hpp at line 5, boost/container/pmr/resource_adaptor.hpp at line 5, boost/container/pmr/set.hpp at line 5, boost/container/pmr/slist.hpp at line 5, boost/container/pmr/small_vector.hpp at line 5, boost/container/pmr/stable_vector.hpp at line 5, boost/container/pmr/string.hpp at line 5, boost/container/pmr/synchronized_pool_resource.hpp at line 5, boost/container/pmr/unsynchronized_pool_resource.hpp at line 5, boost/container/pmr/vector.hpp at line 5, boost/container/scoped_allocator_fwd.hpp at line 5, boost/container/small_vector.hpp at line 5, boost/container/uses_allocator_fwd.hpp at line 5, boost/intrusive/detail/tree_value_compare.hpp at line 5, boost/move/detail/meta_utils_core.hpp at line 5, boost/move/detail/std_ns_begin.hpp at line 5, boost/move/detail/std_ns_end.hpp at line 5, libs/container/src/global_resource.cpp at line 5, libs/container/src/monotonic_buffer_resource.cpp at line 5, libs/container/src/pool_resource.cpp at line 5, libs/container/src/synchronized_pool_resource.cpp at line 5, libs/container/src/unsynchronized_pool_resource.cpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/container/detail/block_list.hpp [3:5]
+ boost/container/detail/block_slist.hpp [3:5]
+ boost/container/detail/dispatch_uses_allocator.hpp [3:5]
+ boost/container/detail/dlmalloc.hpp [3:5]
+ boost/container/detail/pool_resource.hpp [3:5]
+ boost/container/pmr/deque.hpp [3:5]
+ boost/container/pmr/flat_map.hpp [3:5]
+ boost/container/pmr/flat_set.hpp [3:5]
+ boost/container/pmr/global_resource.hpp [3:5]
+ boost/container/pmr/list.hpp [3:5]
+ boost/container/pmr/map.hpp [3:5]
+ boost/container/pmr/memory_resource.hpp [3:5]
+ boost/container/pmr/monotonic_buffer_resource.hpp [3:5]
+ boost/container/pmr/polymorphic_allocator.hpp [3:5]
+ boost/container/pmr/pool_options.hpp [3:5]
+ boost/container/pmr/resource_adaptor.hpp [3:5]
+ boost/container/pmr/set.hpp [3:5]
+ boost/container/pmr/slist.hpp [3:5]
+ boost/container/pmr/small_vector.hpp [3:5]
+ boost/container/pmr/stable_vector.hpp [3:5]
+ boost/container/pmr/string.hpp [3:5]
+ boost/container/pmr/synchronized_pool_resource.hpp [3:5]
+ boost/container/pmr/unsynchronized_pool_resource.hpp [3:5]
+ boost/container/pmr/vector.hpp [3:5]
+ boost/container/scoped_allocator_fwd.hpp [3:5]
+ boost/container/small_vector.hpp [3:5]
+ boost/container/uses_allocator_fwd.hpp [3:5]
+ boost/intrusive/detail/tree_value_compare.hpp [3:5]
+ boost/move/detail/meta_utils_core.hpp [3:5]
+ boost/move/detail/std_ns_begin.hpp [3:5]
+ boost/move/detail/std_ns_end.hpp [3:5]
+ libs/container/src/global_resource.cpp [3:5]
+ libs/container/src/monotonic_buffer_resource.cpp [3:5]
+ libs/container/src/pool_resource.cpp [3:5]
+ libs/container/src/synchronized_pool_resource.cpp [3:5]
+ libs/container/src/unsynchronized_pool_resource.cpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d85d3237917b72f16dba239a303134fa
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/concepts.hpp at line 10
+ License text:
+ // Copyright Daniel Walker 2006. Use, modification and distribution
+ // are subject to the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/concepts.hpp [8:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL d87b243958a7d8cd7ed9864055dfd125
+BELONGS ya.make
+ License text:
+ * Copyright (C) 2017 James E. King III
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/library/c/cloudabi.h [2:2]
+ boost/uuid/detail/random_provider.hpp [2:2]
+ boost/uuid/detail/random_provider_arc4random.ipp [2:2]
+ boost/uuid/detail/random_provider_bcrypt.ipp [2:2]
+ boost/uuid/detail/random_provider_detect_platform.hpp [2:2]
+ boost/uuid/detail/random_provider_getentropy.ipp [2:2]
+ boost/uuid/detail/random_provider_include_platform.hpp [2:2]
+ boost/uuid/entropy_error.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL d892d3dedd0208083374d9b1e5af7c28
+BELONGS ya.make
+ License text:
+ Copyright 2013 Christian Shelton
+ Copyright 2013 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/eigen/eigen_algebra.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL d8cbf9ce59bc4b7472faf3c297642429
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2008, 2009, 2016 Tim Blechmann, based on code by Cory Nelson
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lockfree/detail/tagged_ptr_ptrcompression.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d8d379e820d70d3ab6d3e5b12ee52da1
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2007 Hartmut Kaiser
+ Revised 2007, Copyright (c) Tobias Schwinger
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/tree/common.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL d8fd2c7143c4fbec8b1689bfb853227e
+BELONGS ya.make
+ License text:
+ // Copyright 2012-2013 Steven Watanabe
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_erasure/member.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d91946878c8cc10edec238acbae07c4c
+BELONGS ya.make
+ License text:
+ // Copyright 2005-2009 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/compressed_sparse_row_graph.hpp [1:1]
+ boost/graph/detail/compressed_sparse_row_struct.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL d91f655d9cf3592a631666b8d61bf13a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/flyweight/detail/archive_constructed.hpp at line 3, boost/flyweight/detail/default_value_policy.hpp at line 3, boost/flyweight/detail/dyn_perfect_fwd.hpp at line 3, boost/flyweight/detail/flyweight_core.hpp at line 3, boost/flyweight/detail/perfect_fwd.hpp at line 3, boost/flyweight/detail/pp_perfect_fwd.hpp at line 3, boost/flyweight/detail/serialization_helper.hpp at line 3, boost/flyweight/hashed_factory.hpp at line 3, boost/flyweight/key_value.hpp at line 3, boost/flyweight/refcounted.hpp at line 3
+ License text:
+ /* Copyright 2006-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/flyweight/detail/archive_constructed.hpp [1:3]
+ boost/flyweight/detail/default_value_policy.hpp [1:3]
+ boost/flyweight/detail/dyn_perfect_fwd.hpp [1:3]
+ boost/flyweight/detail/flyweight_core.hpp [1:3]
+ boost/flyweight/detail/perfect_fwd.hpp [1:3]
+ boost/flyweight/detail/pp_perfect_fwd.hpp [1:3]
+ boost/flyweight/detail/serialization_helper.hpp [1:3]
+ boost/flyweight/hashed_factory.hpp [1:3]
+ boost/flyweight/key_value.hpp [1:3]
+ boost/flyweight/refcounted.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d946256ef076f98c4b7b458a2317cae5
+BELONGS ya.make
+ License text:
+ // Copyright (c) Antony Polukhin, 2012-2016.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_index/detail/compile_time_type_info.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL d9680887664a695927a719b1b889a56c
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2012 David Stone
+ // Copyright Beman Dawes 2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/endian/detail/intrinsic.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d989ff9c2bd62725fe9987a9d8746019
+BELONGS libs/program_options/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/program_options/detail/cmdline.hpp at line 3, boost/program_options/detail/config_file.hpp at line 3, boost/program_options/errors.hpp at line 3, boost/program_options/options_description.hpp at line 3, boost/program_options/parsers.hpp at line 3, boost/program_options/variables_map.hpp at line 3, libs/program_options/src/cmdline.cpp at line 3, libs/program_options/src/config_file.cpp at line 3, libs/program_options/src/options_description.cpp at line 3, libs/program_options/src/parsers.cpp at line 3, libs/program_options/src/variables_map.cpp at line 3, libs/program_options/src/winmain.cpp at line 3
+ License text:
+ // Copyright Vladimir Prus 2002-2004.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/program_options/detail/cmdline.hpp [1:3]
+ boost/program_options/detail/config_file.hpp [1:3]
+ boost/program_options/errors.hpp [1:3]
+ boost/program_options/options_description.hpp [1:4]
+ boost/program_options/parsers.hpp [1:3]
+ boost/program_options/variables_map.hpp [1:3]
+ libs/program_options/src/cmdline.cpp [1:3]
+ libs/program_options/src/config_file.cpp [1:3]
+ libs/program_options/src/options_description.cpp [1:4]
+ libs/program_options/src/parsers.cpp [1:3]
+ libs/program_options/src/variables_map.cpp [1:3]
+ libs/program_options/src/winmain.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d9b034219784147e9de3ba70c9964f7f
+BELONGS ya.make
+ License text:
+ // Copyright 2006 Johan Rade
+ // Copyright 2012 K R Walker
+ // Copyright 2011, 2012 Paul A. Bristow
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/nonfinite_num_facets.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL d9b8b05a31819f01ee9a3e7db2208124
+BELONGS ya.make
+ License text:
+ // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ // Copyright (C) 2000 Gary Powell (gary.powell@sierra.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lambda/detail/member_ptr.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL d9cc7750d38e73a2832b5d2da121f533
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/flyweight.hpp at line 3, boost/flyweight/assoc_container_factory_fwd.hpp at line 3, boost/flyweight/detail/not_placeholder_expr.hpp at line 3, boost/flyweight/detail/value_tag.hpp at line 3, boost/flyweight/factory_tag.hpp at line 3, boost/flyweight/hashed_factory_fwd.hpp at line 3, boost/flyweight/holder_tag.hpp at line 3, boost/flyweight/intermodule_holder_fwd.hpp at line 3, boost/flyweight/key_value_fwd.hpp at line 3, boost/flyweight/locking_tag.hpp at line 3, boost/flyweight/no_locking.hpp at line 3, boost/flyweight/no_locking_fwd.hpp at line 3, boost/flyweight/no_tracking.hpp at line 3, boost/flyweight/no_tracking_fwd.hpp at line 3, boost/flyweight/refcounted_fwd.hpp at line 3, boost/flyweight/set_factory_fwd.hpp at line 3, boost/flyweight/simple_locking.hpp at line 3, boost/flyweight/simple_locking_fwd.hpp at line 3, boost/flyweight/static_holder_fwd.hpp at line 3, boost/flyweight/tag.hpp at line 3, boost/flyweight/tracking_tag.hpp at line 3
+ License text:
+ /* Copyright 2006-2008 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/flyweight.hpp [1:3]
+ boost/flyweight/assoc_container_factory_fwd.hpp [1:3]
+ boost/flyweight/detail/not_placeholder_expr.hpp [1:3]
+ boost/flyweight/detail/value_tag.hpp [1:3]
+ boost/flyweight/factory_tag.hpp [1:3]
+ boost/flyweight/hashed_factory_fwd.hpp [1:3]
+ boost/flyweight/holder_tag.hpp [1:3]
+ boost/flyweight/intermodule_holder_fwd.hpp [1:3]
+ boost/flyweight/key_value_fwd.hpp [1:3]
+ boost/flyweight/locking_tag.hpp [1:3]
+ boost/flyweight/no_locking.hpp [1:3]
+ boost/flyweight/no_locking_fwd.hpp [1:3]
+ boost/flyweight/no_tracking.hpp [1:3]
+ boost/flyweight/no_tracking_fwd.hpp [1:3]
+ boost/flyweight/refcounted_fwd.hpp [1:3]
+ boost/flyweight/set_factory_fwd.hpp [1:3]
+ boost/flyweight/simple_locking.hpp [1:3]
+ boost/flyweight/simple_locking_fwd.hpp [1:3]
+ boost/flyweight/static_holder_fwd.hpp [1:3]
+ boost/flyweight/tag.hpp [1:3]
+ boost/flyweight/tracking_tag.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL d9d3f9179a9781a228af49eebba2dba2
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/leda_graph.hpp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL da5722f501f78f050c4fc5ddba00e44a
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014-2015, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp [3:3]
+ boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp [3:3]
+ boost/geometry/algorithms/detail/signed_size_type.hpp [3:3]
+ boost/geometry/algorithms/detail/turns/compare_turns.hpp [3:3]
+ boost/geometry/iterators/detail/segment_iterator/value_type.hpp [3:3]
+ boost/geometry/strategies/comparable_distance_result.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL da66650aa87474a034356b9ab7d20069
+BELONGS ya.make
+ License text:
+ Copyright 2010-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/mkl/mkl_operations.hpp [11:12]
+ boost/numeric/odeint/stepper/stepper_categories.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL da74bde384bb9591220ea65cbfd6ed00
+BELONGS ya.make
+ License text:
+ // Copyright (c) David Abrahams 2001.
+ // Copyright (c) Jeremy Siek 2001-2003.
+ // Copyright (c) Thomas Witt 2002.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/new_iterator_tests.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL da7c41d93828ed41770e2d19294b77ae
+BELONGS ya.make
+ License text:
+ Copyright (c) 2014 Paul Fultz II
+ always.h
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hof/always.hpp [2:4]
+ boost/hof/arg.hpp [2:4]
+ boost/hof/compose.hpp [2:4]
+ boost/hof/detail/forward.hpp [2:4]
+ boost/hof/detail/holder.hpp [2:4]
+ boost/hof/detail/move.hpp [2:4]
+ boost/hof/detail/pp.hpp [2:4]
+ boost/hof/detail/remove_rvalue_reference.hpp [2:4]
+ boost/hof/detail/unwrap.hpp [2:4]
+ boost/hof/fix.hpp [2:4]
+ boost/hof/function.hpp [2:4]
+ boost/hof/indirect.hpp [2:4]
+ boost/hof/infix.hpp [2:4]
+ boost/hof/is_invocable.hpp [2:4]
+ boost/hof/lambda.hpp [2:4]
+ boost/hof/lazy.hpp [2:4]
+ boost/hof/mutable.hpp [2:4]
+ boost/hof/pack.hpp [2:4]
+ boost/hof/placeholders.hpp [2:4]
+ boost/hof/proj.hpp [2:4]
+ boost/hof/protect.hpp [2:4]
+ boost/hof/result.hpp [2:4]
+ boost/hof/returns.hpp [2:4]
+ boost/hof/reveal.hpp [2:4]
+ boost/hof/static.hpp [2:4]
+ boost/hof/tap.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL da91943a65a421cd0926c06fe85346a6
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013, 2014, 2015.
+ // Modifications copyright (c) 2013-2015, Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/disjoint/point_geometry.hpp [8:9]
+ boost/geometry/multi/multi.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL da9efae22788f28294f7f9a2902ac5c7
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2001-2003 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/detail/returntype_deduction.hpp [2:2]
+ boost/spirit/home/classic/attribute.hpp [2:4]
+ boost/spirit/home/classic/attribute/closure.hpp [2:4]
+ boost/spirit/home/classic/core/assert.hpp [2:4]
+ boost/spirit/home/classic/core/non_terminal/grammar.hpp [2:5]
+ boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp [2:5]
+ boost/spirit/home/classic/core/non_terminal/parser_id.hpp [2:4]
+ boost/spirit/home/classic/debug.hpp [2:4]
+ boost/spirit/home/classic/debug/debug_node.hpp [2:5]
+ boost/spirit/home/classic/debug/impl/parser_names.ipp [2:4]
+ boost/spirit/home/classic/debug/minimal.hpp [2:4]
+ boost/spirit/home/classic/debug/parser_names.hpp [2:4]
+ boost/spirit/home/classic/phoenix/casts.hpp [3:4]
+ boost/spirit/home/classic/phoenix/new.hpp [3:5]
+ boost/spirit/home/classic/utility/chset.hpp [2:4]
+ boost/spirit/home/classic/utility/chset_operators.hpp [2:4]
+ boost/spirit/home/classic/utility/impl/chset.ipp [2:4]
+ boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp [2:4]
+ boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp [2:4]
+ boost/xpressive/detail/utility/chset/basic_chset.hpp [2:4]
+ boost/xpressive/detail/utility/chset/basic_chset.ipp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL dac98d69c928f039b4107e09246ed62f
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2016.
+ // Modifications copyright (c) 2016 Oracle and/or its affiliates.
+ // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp [5:7]
+ boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp [6:8]
+ boost/geometry/algorithms/detail/calculate_sum.hpp [11:13]
+ boost/geometry/policies/relate/intersection_points.hpp [5:7]
+ boost/geometry/policies/robustness/segment_ratio.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL dade72e8f17d6f5ad231015a08f18f49
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/smart_ptr/unique_ptr.hpp at line 5, boost/intrusive/circular_list_algorithms.hpp at line 5, boost/intrusive/circular_slist_algorithms.hpp at line 5, boost/intrusive/detail/any_node_and_algorithms.hpp at line 5, boost/intrusive/detail/hook_traits.hpp at line 5, boost/intrusive/detail/iiterator.hpp at line 5, boost/intrusive/detail/mpl.hpp at line 5, boost/intrusive/detail/uncast.hpp at line 5, boost/intrusive/linear_slist_algorithms.hpp at line 5, boost/intrusive/list.hpp at line 5, boost/intrusive/rbtree.hpp at line 5, boost/intrusive/rbtree_algorithms.hpp at line 5, boost/intrusive/set.hpp at line 5, boost/intrusive/slist.hpp at line 5, boost/intrusive/treap_algorithms.hpp at line 5, boost/intrusive/unordered_set.hpp at line 5, boost/move/make_unique.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/smart_ptr/unique_ptr.hpp [3:5]
+ boost/intrusive/circular_list_algorithms.hpp [3:4]
+ boost/intrusive/circular_slist_algorithms.hpp [3:4]
+ boost/intrusive/detail/any_node_and_algorithms.hpp [3:3]
+ boost/intrusive/detail/hook_traits.hpp [3:3]
+ boost/intrusive/detail/iiterator.hpp [3:3]
+ boost/intrusive/detail/mpl.hpp [3:4]
+ boost/intrusive/detail/uncast.hpp [3:3]
+ boost/intrusive/linear_slist_algorithms.hpp [3:4]
+ boost/intrusive/list.hpp [3:4]
+ boost/intrusive/rbtree.hpp [3:3]
+ boost/intrusive/rbtree_algorithms.hpp [3:4]
+ boost/intrusive/set.hpp [3:4]
+ boost/intrusive/slist.hpp [3:4]
+ boost/intrusive/treap_algorithms.hpp [3:3]
+ boost/intrusive/unordered_set.hpp [3:4]
+ boost/move/make_unique.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL db0443ef1ac24a2215b5dcee7e8a6a38
+BELONGS libs/date_time/ya.make ya.make
+ License text:
+ /* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/adjust_functors.hpp [4:6]
+ boost/date_time/constrained_value.hpp [4:6]
+ boost/date_time/date.hpp [4:6]
+ boost/date_time/date_defs.hpp [4:6]
+ boost/date_time/date_duration.hpp [4:6]
+ boost/date_time/date_format_simple.hpp [4:6]
+ boost/date_time/date_formatting_locales.hpp [4:6]
+ boost/date_time/date_iterator.hpp [4:6]
+ boost/date_time/gregorian/formatters.hpp [4:6]
+ boost/date_time/gregorian/formatters_limited.hpp [4:6]
+ boost/date_time/gregorian/greg_calendar.hpp [4:6]
+ boost/date_time/gregorian/greg_date.hpp [4:6]
+ boost/date_time/gregorian/greg_day.hpp [4:6]
+ boost/date_time/gregorian/greg_day_of_year.hpp [4:6]
+ boost/date_time/gregorian/greg_duration.hpp [4:6]
+ boost/date_time/gregorian/greg_facet.hpp [4:6]
+ boost/date_time/gregorian/greg_month.hpp [4:6]
+ boost/date_time/gregorian/greg_weekday.hpp [4:6]
+ boost/date_time/gregorian/greg_year.hpp [4:6]
+ boost/date_time/gregorian/greg_ymd.hpp [4:6]
+ boost/date_time/gregorian/gregorian_types.hpp [4:6]
+ boost/date_time/gregorian_calendar.hpp [4:6]
+ boost/date_time/gregorian_calendar.ipp [1:3]
+ boost/date_time/int_adapter.hpp [4:6]
+ boost/date_time/iso_format.hpp [4:6]
+ boost/date_time/local_time_adjustor.hpp [4:6]
+ boost/date_time/local_timezone_defs.hpp [4:6]
+ boost/date_time/parse_format_base.hpp [4:6]
+ boost/date_time/period.hpp [4:6]
+ boost/date_time/posix_time/posix_time_duration.hpp [4:6]
+ boost/date_time/posix_time/posix_time_system.hpp [4:6]
+ boost/date_time/posix_time/posix_time_types.hpp [1:3]
+ boost/date_time/posix_time/ptime.hpp [4:6]
+ boost/date_time/posix_time/time_formatters_limited.hpp [4:6]
+ boost/date_time/posix_time/time_parsers.hpp [4:6]
+ boost/date_time/posix_time/time_period.hpp [4:6]
+ boost/date_time/special_defs.hpp [4:6]
+ boost/date_time/time_defs.hpp [4:6]
+ boost/date_time/time_duration.hpp [4:6]
+ boost/date_time/time_formatting_streams.hpp [4:6]
+ boost/date_time/time_iterator.hpp [4:6]
+ boost/date_time/time_resolution_traits.hpp [4:6]
+ boost/date_time/time_system_counted.hpp [4:6]
+ boost/date_time/year_month_day.hpp [4:6]
+ libs/date_time/src/gregorian/date_generators.cpp [1:3]
+ libs/date_time/src/gregorian/gregorian_types.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL db302fba9b60620d0f529b393c443760
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/cast.hpp at line 3, boost/parameter/aux_/maybe.hpp at line 3, boost/parameter/aux_/set.hpp at line 3, boost/parameter/aux_/template_keyword.hpp at line 3, boost/parameter/name.hpp at line 3, boost/parameter/preprocessor.hpp at line 3, boost/parameter/python.hpp at line 3, boost/parameter/value_type.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/parameter/aux_/cast.hpp [1:3]
+ boost/parameter/aux_/maybe.hpp [1:3]
+ boost/parameter/aux_/set.hpp [1:3]
+ boost/parameter/aux_/template_keyword.hpp [1:3]
+ boost/parameter/name.hpp [1:3]
+ boost/parameter/preprocessor.hpp [1:3]
+ boost/parameter/python.hpp [1:3]
+ boost/parameter/value_type.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL db499a5ed298660439fc712d0054f814
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001 Doug Gregor
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/generation/ignore.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL dbc2f407aa3399bea12ef980f5509329
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2005 Peter Dimov
+ // Copyright (c) 2006 Michael van der Westhuizen
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/atomic_count_solaris.hpp [8:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL dc1428e992645fc469a5b35c6395d317
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/assign.hpp at line 5, boost/assign/assignment_exception.hpp at line 5, boost/assign/list_inserter.hpp at line 5, boost/assign/list_of.hpp at line 5, boost/assign/std.hpp at line 5, boost/assign/std/deque.hpp at line 5, boost/assign/std/list.hpp at line 5, boost/assign/std/map.hpp at line 5, boost/assign/std/queue.hpp at line 5, boost/assign/std/set.hpp at line 5, boost/assign/std/slist.hpp at line 5, boost/assign/std/stack.hpp at line 5, boost/assign/std/vector.hpp at line 5, boost/range.hpp at line 5, boost/range/begin.hpp at line 5, boost/range/config.hpp at line 5, boost/range/const_iterator.hpp at line 5, boost/range/const_reverse_iterator.hpp at line 5, boost/range/detail/begin.hpp at line 5, boost/range/detail/common.hpp at line 5, boost/range/detail/detail_str.hpp at line 5, boost/range/detail/difference_type.hpp at line 5, boost/range/detail/empty.hpp at line 5, boost/range/detail/end.hpp at line 5, boost/range/detail/implementation_help.hpp at line 5, boost/range/detail/sfinae.hpp at line 5, boost/range/detail/size_type.hpp at line 5, boost/range/detail/sizer.hpp at line 5, boost/range/detail/value_type.hpp at line 5, boost/range/difference_type.hpp at line 5, boost/range/empty.hpp at line 5, boost/range/end.hpp at line 5, boost/range/iterator.hpp at line 5, boost/range/metafunctions.hpp at line 5, boost/range/mutable_iterator.hpp at line 5, boost/range/rbegin.hpp at line 5, boost/range/reference.hpp at line 5, boost/range/rend.hpp at line 5, boost/range/result_iterator.hpp at line 5, boost/range/reverse_iterator.hpp at line 5, boost/range/reverse_result_iterator.hpp at line 5, boost/range/size.hpp at line 5, boost/range/size_type.hpp at line 5, boost/range/sub_range.hpp at line 5, boost/range/value_type.hpp at line 5
+ License text:
+ // Copyright Thorsten Ottosen 2003-2004. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/assign.hpp [3:5]
+ boost/assign/assignment_exception.hpp [3:5]
+ boost/assign/list_inserter.hpp [3:5]
+ boost/assign/list_of.hpp [3:5]
+ boost/assign/std.hpp [3:5]
+ boost/assign/std/deque.hpp [3:5]
+ boost/assign/std/list.hpp [3:5]
+ boost/assign/std/map.hpp [3:5]
+ boost/assign/std/queue.hpp [3:5]
+ boost/assign/std/set.hpp [3:5]
+ boost/assign/std/slist.hpp [3:5]
+ boost/assign/std/stack.hpp [3:5]
+ boost/assign/std/vector.hpp [3:5]
+ boost/range.hpp [3:5]
+ boost/range/begin.hpp [3:5]
+ boost/range/config.hpp [3:5]
+ boost/range/const_iterator.hpp [3:5]
+ boost/range/const_reverse_iterator.hpp [3:5]
+ boost/range/detail/begin.hpp [3:5]
+ boost/range/detail/common.hpp [3:5]
+ boost/range/detail/detail_str.hpp [3:5]
+ boost/range/detail/difference_type.hpp [3:5]
+ boost/range/detail/empty.hpp [3:5]
+ boost/range/detail/end.hpp [3:5]
+ boost/range/detail/implementation_help.hpp [3:5]
+ boost/range/detail/sfinae.hpp [3:5]
+ boost/range/detail/size_type.hpp [3:5]
+ boost/range/detail/sizer.hpp [3:5]
+ boost/range/detail/value_type.hpp [3:5]
+ boost/range/difference_type.hpp [3:5]
+ boost/range/empty.hpp [3:5]
+ boost/range/end.hpp [3:5]
+ boost/range/iterator.hpp [3:5]
+ boost/range/metafunctions.hpp [3:5]
+ boost/range/mutable_iterator.hpp [3:5]
+ boost/range/rbegin.hpp [3:5]
+ boost/range/reference.hpp [3:5]
+ boost/range/rend.hpp [3:5]
+ boost/range/result_iterator.hpp [3:5]
+ boost/range/reverse_iterator.hpp [3:5]
+ boost/range/reverse_result_iterator.hpp [3:5]
+ boost/range/size.hpp [3:5]
+ boost/range/size_type.hpp [3:5]
+ boost/range/sub_range.hpp [3:6]
+ boost/range/value_type.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL dc340c37a98d33ae61515bc914683bde
+BELONGS ya.make
+ License text:
+ * Copyright 2003 Guillaume Melquiond
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/interval/arith3.hpp [8:8]
+ boost/numeric/interval/compare/certain.hpp [3:3]
+ boost/numeric/interval/compare/possible.hpp [3:3]
+ boost/numeric/interval/ext/integer.hpp [3:3]
+ boost/numeric/interval/io.hpp [10:10]
+ boost/numeric/interval/policies.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL dcc3768299b5e568b89e4cebc118422e
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/typeof/msvc/typeof_impl.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL dd20af87a7fdf9f589db31af1358ab8c
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2000 Gary Powell (gwpowell@hotmail.com)
+ // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lambda/exceptions.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL dd7064b16e3bfd8491f05e3483f06f45
+BELONGS ya.make
+ License text:
+ // Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+ // Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)
+ // Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/conversion_traits.hpp [2:4]
+ boost/type_traits/is_convertible.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL dd8c56c665cbeb0d19508d2df3017bfb
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2008
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/priority_compare.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL dd8f136175da98ea2d07dcd9de1ecaf5
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008, 2011 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/spinlock_gcc_arm.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ddb0c5bfffd13fe5495adc6471731e23
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2013 Christopher Kormanyos
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/detail/airy_ai_bi_zero.hpp [1:3]
+ boost/math/special_functions/detail/bessel_jy_zero.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL de436355f6cfaff01d7ce0d889764ae9
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2002-2009
+ // Copyright Jan Langer 2002
+ // Copyright Dietmar Kuehl 2001
+ // Copyright Vladimir Prus 2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/operations.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL de5950ef4f0982e19312dacc44bc035d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cstdfloat.hpp at line 6, boost/math/cstdfloat/cstdfloat_cmath.hpp at line 6, boost/math/cstdfloat/cstdfloat_complex.hpp at line 6, boost/math/cstdfloat/cstdfloat_complex_std.hpp at line 6, boost/math/cstdfloat/cstdfloat_iostream.hpp at line 6, boost/math/cstdfloat/cstdfloat_limits.hpp at line 6, boost/math/cstdfloat/cstdfloat_types.hpp at line 6, boost/math/distributions/arcsine.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cstdfloat.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_cmath.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_complex.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_complex_std.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_iostream.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_limits.hpp [2:6]
+ boost/math/cstdfloat/cstdfloat_types.hpp [2:6]
+ boost/math/distributions/arcsine.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL de772d73074b2097bc4d45f814122331
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2017 Dynatrace
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/xlcpp_zos.hpp [1:1]
+ boost/config/platform/zos.hpp [1:1]
+ boost/config/stdlib/xlcpp_zos.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL de89ae6eae04701fcbcc7e54b40b1fe6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/assign/ptr_list_inserter.hpp at line 5, boost/assign/ptr_list_of.hpp at line 5, boost/ptr_container/clone_allocator.hpp at line 6, boost/ptr_container/detail/associative_ptr_container.hpp at line 6, boost/ptr_container/detail/map_iterator.hpp at line 6, boost/ptr_container/detail/reversible_ptr_container.hpp at line 6, boost/ptr_container/detail/scoped_deleter.hpp at line 6, boost/ptr_container/detail/void_ptr_iterator.hpp at line 6, boost/ptr_container/exception.hpp at line 6, boost/ptr_container/nullable.hpp at line 6, boost/ptr_container/ptr_array.hpp at line 6, boost/ptr_container/ptr_deque.hpp at line 6, boost/ptr_container/ptr_list.hpp at line 6, boost/ptr_container/ptr_map.hpp at line 6, boost/ptr_container/ptr_map_adapter.hpp at line 6, boost/ptr_container/ptr_sequence_adapter.hpp at line 6, boost/ptr_container/ptr_set.hpp at line 6, boost/ptr_container/ptr_set_adapter.hpp at line 6, boost/ptr_container/ptr_vector.hpp at line 6
+ License text:
+ // Copyright Thorsten Ottosen 2003-2005. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/assign/ptr_list_inserter.hpp [3:5]
+ boost/assign/ptr_list_of.hpp [3:5]
+ boost/ptr_container/clone_allocator.hpp [4:6]
+ boost/ptr_container/detail/associative_ptr_container.hpp [4:6]
+ boost/ptr_container/detail/map_iterator.hpp [4:6]
+ boost/ptr_container/detail/reversible_ptr_container.hpp [4:6]
+ boost/ptr_container/detail/scoped_deleter.hpp [4:6]
+ boost/ptr_container/detail/void_ptr_iterator.hpp [4:6]
+ boost/ptr_container/exception.hpp [4:6]
+ boost/ptr_container/nullable.hpp [4:6]
+ boost/ptr_container/ptr_array.hpp [4:6]
+ boost/ptr_container/ptr_deque.hpp [4:6]
+ boost/ptr_container/ptr_list.hpp [4:6]
+ boost/ptr_container/ptr_map.hpp [4:6]
+ boost/ptr_container/ptr_map_adapter.hpp [4:6]
+ boost/ptr_container/ptr_sequence_adapter.hpp [4:6]
+ boost/ptr_container/ptr_set.hpp [4:6]
+ boost/ptr_container/ptr_set_adapter.hpp [4:6]
+ boost/ptr_container/ptr_vector.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL dea2c85dcebaf59c9970e07c8eec47d4
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/vacpp.hpp [1:7]
+ boost/config/compiler/visualc.hpp [1:8]
+ boost/config/stdlib/libcomo.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL dec05a67099272938bba13a652ec746e
+BELONGS ya.make
+ License text:
+ Copyright (c) 2002 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/phoenix/tuple_helpers.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL df0ccc1d436763dd3030b1b12f23d451
+BELONGS ya.make
+ License text:
+ // Copyright 2008,2012 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_forward.hpp [12:12]
+
+KEEP COPYRIGHT_SERVICE_LABEL df8244b2e7ca5d0a2a5c57b5a44ef2f1
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2012 Bruno Lalande, Paris, France.
+ // Copyright (c) 2012 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/util/bare_type.hpp [3:5]
+ boost/geometry/util/calculation_type.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL dfa7e438d1da1445b96c94c2d5856b8e
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/beast/core.hpp [2:2]
+ boost/beast/core/bind_handler.hpp [2:2]
+ boost/beast/core/buffered_read_stream.hpp [2:2]
+ boost/beast/core/buffers_adapter.hpp [2:2]
+ boost/beast/core/buffers_cat.hpp [2:2]
+ boost/beast/core/buffers_prefix.hpp [2:2]
+ boost/beast/core/buffers_suffix.hpp [2:2]
+ boost/beast/core/buffers_to_string.hpp [2:2]
+ boost/beast/core/detail/allocator.hpp [2:2]
+ boost/beast/core/detail/base64.hpp [2:2]
+ boost/beast/core/detail/bind_handler.hpp [2:2]
+ boost/beast/core/detail/buffers_ref.hpp [2:2]
+ boost/beast/core/detail/clamp.hpp [2:2]
+ boost/beast/core/detail/config.hpp [2:2]
+ boost/beast/core/detail/empty_base_optimization.hpp [2:2]
+ boost/beast/core/detail/integer_sequence.hpp [2:2]
+ boost/beast/core/detail/ostream.hpp [2:2]
+ boost/beast/core/detail/sha1.hpp [2:2]
+ boost/beast/core/detail/static_ostream.hpp [2:2]
+ boost/beast/core/detail/static_string.hpp [2:2]
+ boost/beast/core/detail/type_traits.hpp [2:2]
+ boost/beast/core/detail/variant.hpp [2:2]
+ boost/beast/core/error.hpp [2:2]
+ boost/beast/core/flat_buffer.hpp [2:2]
+ boost/beast/core/flat_static_buffer.hpp [2:2]
+ boost/beast/core/handler_ptr.hpp [2:2]
+ boost/beast/core/impl/buffered_read_stream.ipp [2:2]
+ boost/beast/core/impl/buffers_adapter.ipp [2:2]
+ boost/beast/core/impl/buffers_cat.ipp [2:2]
+ boost/beast/core/impl/buffers_prefix.ipp [2:2]
+ boost/beast/core/impl/buffers_suffix.ipp [2:2]
+ boost/beast/core/impl/flat_buffer.ipp [2:2]
+ boost/beast/core/impl/flat_static_buffer.ipp [2:2]
+ boost/beast/core/impl/handler_ptr.ipp [2:2]
+ boost/beast/core/impl/multi_buffer.ipp [2:2]
+ boost/beast/core/impl/read_size.ipp [2:2]
+ boost/beast/core/impl/static_buffer.ipp [2:2]
+ boost/beast/core/impl/static_string.ipp [2:2]
+ boost/beast/core/impl/string_param.ipp [2:2]
+ boost/beast/core/multi_buffer.hpp [2:2]
+ boost/beast/core/ostream.hpp [2:2]
+ boost/beast/core/read_size.hpp [2:2]
+ boost/beast/core/span.hpp [2:2]
+ boost/beast/core/static_buffer.hpp [2:2]
+ boost/beast/core/static_string.hpp [2:2]
+ boost/beast/core/string.hpp [2:2]
+ boost/beast/core/string_param.hpp [2:2]
+ boost/beast/core/type_traits.hpp [2:2]
+ boost/beast/http.hpp [2:2]
+ boost/beast/http/basic_dynamic_body.hpp [2:2]
+ boost/beast/http/basic_file_body.hpp [2:2]
+ boost/beast/http/basic_parser.hpp [2:2]
+ boost/beast/http/buffer_body.hpp [2:2]
+ boost/beast/http/chunk_encode.hpp [2:2]
+ boost/beast/http/detail/basic_parsed_list.hpp [2:2]
+ boost/beast/http/detail/basic_parser.hpp [2:2]
+ boost/beast/http/detail/chunk_encode.hpp [2:2]
+ boost/beast/http/detail/rfc7230.hpp [2:2]
+ boost/beast/http/detail/type_traits.hpp [2:2]
+ boost/beast/http/dynamic_body.hpp [2:2]
+ boost/beast/http/empty_body.hpp [2:2]
+ boost/beast/http/error.hpp [2:2]
+ boost/beast/http/field.hpp [2:2]
+ boost/beast/http/fields.hpp [2:2]
+ boost/beast/http/file_body.hpp [2:2]
+ boost/beast/http/impl/basic_parser.ipp [2:2]
+ boost/beast/http/impl/chunk_encode.ipp [2:2]
+ boost/beast/http/impl/error.ipp [2:2]
+ boost/beast/http/impl/field.ipp [2:2]
+ boost/beast/http/impl/fields.ipp [2:2]
+ boost/beast/http/impl/file_body_win32.ipp [2:2]
+ boost/beast/http/impl/message.ipp [2:2]
+ boost/beast/http/impl/parser.ipp [2:2]
+ boost/beast/http/impl/read.ipp [2:2]
+ boost/beast/http/impl/rfc7230.ipp [2:2]
+ boost/beast/http/impl/serializer.ipp [2:2]
+ boost/beast/http/impl/status.ipp [2:2]
+ boost/beast/http/impl/verb.ipp [2:2]
+ boost/beast/http/impl/write.ipp [2:2]
+ boost/beast/http/message.hpp [2:2]
+ boost/beast/http/parser.hpp [2:2]
+ boost/beast/http/read.hpp [2:2]
+ boost/beast/http/rfc7230.hpp [2:2]
+ boost/beast/http/serializer.hpp [2:2]
+ boost/beast/http/span_body.hpp [2:2]
+ boost/beast/http/status.hpp [2:2]
+ boost/beast/http/string_body.hpp [2:2]
+ boost/beast/http/type_traits.hpp [2:2]
+ boost/beast/http/vector_body.hpp [2:2]
+ boost/beast/http/verb.hpp [2:2]
+ boost/beast/http/write.hpp [2:2]
+ boost/beast/version.hpp [2:2]
+ boost/beast/websocket.hpp [2:2]
+ boost/beast/websocket/detail/error.hpp [2:2]
+ boost/beast/websocket/detail/frame.hpp [2:2]
+ boost/beast/websocket/detail/hybi13.hpp [2:2]
+ boost/beast/websocket/detail/mask.hpp [2:2]
+ boost/beast/websocket/detail/pausation.hpp [2:2]
+ boost/beast/websocket/detail/pmd_extension.hpp [2:2]
+ boost/beast/websocket/detail/stream_base.hpp [2:2]
+ boost/beast/websocket/detail/type_traits.hpp [2:2]
+ boost/beast/websocket/detail/utf8_checker.hpp [2:2]
+ boost/beast/websocket/error.hpp [2:2]
+ boost/beast/websocket/impl/accept.ipp [2:2]
+ boost/beast/websocket/impl/close.ipp [2:2]
+ boost/beast/websocket/impl/error.ipp [2:2]
+ boost/beast/websocket/impl/handshake.ipp [2:2]
+ boost/beast/websocket/impl/ping.ipp [2:2]
+ boost/beast/websocket/impl/read.ipp [2:2]
+ boost/beast/websocket/impl/rfc6455.ipp [2:2]
+ boost/beast/websocket/impl/ssl.ipp [2:2]
+ boost/beast/websocket/impl/stream.ipp [2:2]
+ boost/beast/websocket/impl/teardown.ipp [2:2]
+ boost/beast/websocket/impl/write.ipp [2:2]
+ boost/beast/websocket/option.hpp [2:2]
+ boost/beast/websocket/rfc6455.hpp [2:2]
+ boost/beast/websocket/role.hpp [2:2]
+ boost/beast/websocket/ssl.hpp [2:2]
+ boost/beast/websocket/stream.hpp [2:2]
+ boost/beast/websocket/stream_fwd.hpp [2:2]
+ boost/beast/websocket/teardown.hpp [2:2]
+ boost/beast/zlib.hpp [2:2]
+ boost/beast/zlib/deflate_stream.hpp [2:2]
+ boost/beast/zlib/detail/bitstream.hpp [2:2]
+ boost/beast/zlib/detail/deflate_stream.hpp [2:2]
+ boost/beast/zlib/detail/inflate_stream.hpp [2:2]
+ boost/beast/zlib/detail/ranges.hpp [2:2]
+ boost/beast/zlib/detail/window.hpp [2:2]
+ boost/beast/zlib/error.hpp [2:2]
+ boost/beast/zlib/impl/error.ipp [2:2]
+ boost/beast/zlib/inflate_stream.hpp [2:2]
+ boost/beast/zlib/zlib.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL e00f1e8f667cb6fd0131b3aaf2dc86a1
+BELONGS ya.make
+ License text:
+ // Copyright 2012, Philipp Moeller
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_map/function_property_map.hpp [5:5]
+ boost/property_map/transform_value_property_map.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e030a2caab5278ef969181ef6d2dc9cb
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2012-2015 Adam Wulkiewicz, Lodz, Poland.
+ // Copyright (c) 2011-2013 Andrew Hundt.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/index/detail/varray.hpp [3:4]
+ boost/geometry/index/detail/varray_detail.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL e09ea41bd5eb67cdd8fbe0f78743b80e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer/common_factor.hpp at line 5, boost/math/common_factor.hpp at line 5
+ License text:
+ // (C) Copyright Daryle Walker 2001-2002.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/integer/common_factor.hpp [3:5]
+ boost/math/common_factor.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e0a85874f71f22af59d2d33636d28925
+BELONGS ya.make
+ License text:
+ Copyright (c) 2005-2011 Joel de Guzman
+ Copyright (c) 2011 Thomas Heller
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/scope/this.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e0de0d48e0b069a801b1ac89d6186a5b
+BELONGS ya.make
+ License text:
+ Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/beast/zlib/deflate_stream.hpp [29:29]
+ boost/beast/zlib/detail/bitstream.hpp [11:11]
+ boost/beast/zlib/detail/deflate_stream.hpp [11:11]
+ boost/beast/zlib/detail/inflate_stream.hpp [11:11]
+ boost/beast/zlib/detail/ranges.hpp [11:11]
+ boost/beast/zlib/detail/window.hpp [11:11]
+ boost/beast/zlib/error.hpp [22:22]
+ boost/beast/zlib/impl/error.ipp [11:11]
+ boost/beast/zlib/inflate_stream.hpp [18:18]
+ boost/beast/zlib/zlib.hpp [19:19]
+
+KEEP COPYRIGHT_SERVICE_LABEL e0fed193286f3ac61728fdf5e779701e
+BELONGS ya.make
+ License text:
+ // Copyright 2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ratio/config.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e10cb8d2c225a3e0c9808754430d0602
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/detail/platform.hpp at line 4
+ License text:
+ // Copyright 2006 Roland Schwarz.
+ // (C) Copyright 2007 Anthony Williams
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/detail/platform.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e1162d87fffbacf38e42e78ebd71eed4
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005, Fernando Luis Cacciola Carballal.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/optional/optional_io.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL e14097bb568a6fdfd4955810061426a2
+BELONGS ya.make
+ License text:
+ Copyright (c) Marshall Clow 2012-2015.
+ Copyright (c) Beman Dawes 2015
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility/string_view.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e145b329e7fa084f9f500c3f9a0444c3
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015-2018 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/formulas/thomas_inverse.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e185740764090ee8ec31be4719fbb5e2
+BELONGS ya.make
+ License text:
+ Copyright 2015 NumScale SAS
+ Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/align/assume_aligned.hpp [2:3]
+ boost/align/detail/assume_aligned.hpp [2:3]
+ boost/align/detail/assume_aligned_gcc.hpp [2:3]
+ boost/align/detail/assume_aligned_intel.hpp [2:3]
+ boost/align/detail/assume_aligned_msvc.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e1b07ee82c29a145784d4cf62ade4b2a
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/home/classic/core.hpp [2:8]
+ boost/spirit/home/classic/core/non_terminal/grammar.hpp [2:5]
+ boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp [2:5]
+ boost/spirit/home/classic/phoenix/closures.hpp [3:4]
+ boost/spirit/home/classic/utility.hpp [2:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL e1dbb02b4e43747286367cdd693bef41
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013-2016.
+ // Modifications copyright (c) 2013-2016 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/relate/result.hpp [6:7]
+ boost/geometry/util/range.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL e20ed79246192f741a7943dd114bd714
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2017
+ // Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/pthread/pthread_helpers.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e213d73918aa882afa60f3d0e8ec7b88
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/define_adaptor.hpp at line 5, boost/range/adaptor/type_erased.hpp at line 5, boost/range/any_range.hpp at line 3, boost/range/combine.hpp at line 3, boost/range/counting_range.hpp at line 3, boost/range/detail/any_iterator.hpp at line 5, boost/range/detail/any_iterator_buffer.hpp at line 5, boost/range/detail/any_iterator_interface.hpp at line 5, boost/range/detail/any_iterator_wrapper.hpp at line 5, boost/range/has_range_iterator.hpp at line 5, boost/range/irange.hpp at line 5, boost/range/istream_range.hpp at line 3
+ License text:
+ // Copyright Neil Groves 2010. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/adaptor/define_adaptor.hpp [3:5]
+ boost/range/adaptor/type_erased.hpp [3:5]
+ boost/range/any_range.hpp [1:3]
+ boost/range/combine.hpp [1:3]
+ boost/range/counting_range.hpp [1:3]
+ boost/range/detail/any_iterator.hpp [3:5]
+ boost/range/detail/any_iterator_buffer.hpp [3:5]
+ boost/range/detail/any_iterator_interface.hpp [3:5]
+ boost/range/detail/any_iterator_wrapper.hpp [3:5]
+ boost/range/has_range_iterator.hpp [3:5]
+ boost/range/irange.hpp [3:5]
+ boost/range/istream_range.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e21e25840accbca4a29aa542c16dee62
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/min_max.hpp at line 4
+ License text:
+ // Copyright 2016 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/multiprecision/detail/min_max.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e231c4f18ec32c50a689f1faad621776
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/algorithm.hpp at line 10
+ License text:
+ // Copyright 2009 Neil Groves.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/algorithm.hpp [8:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL e238b7f2d3a3ead245b8ba50c408e028
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2010
+ // Copyright David Abrahams 2000-2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/zip_view.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL e242cf22a8569c95827537aca7b8285d
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2003
+ * John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex/v4/regex_iterator.hpp [3:4]
+ boost/regex/v4/regex_token_iterator.hpp [3:4]
+ boost/regex/v4/regex_traits.hpp [3:4]
+ boost/regex/v4/syntax_type.hpp [3:4]
+ boost/regex/v4/u32regex_iterator.hpp [3:4]
+ boost/regex/v4/u32regex_token_iterator.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e2ac57f2ea4023ec9b11936484e4a2f0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Copyright (c) 2010 Christopher Schmidt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/adt.hpp [2:4]
+ boost/fusion/adapted/adt/adapt_adt_named.hpp [2:4]
+ boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp [2:2]
+ boost/fusion/adapted/adt/detail/adapt_base.hpp [2:4]
+ boost/fusion/adapted/adt/detail/extension.hpp [2:4]
+ boost/fusion/adapted/array.hpp [2:4]
+ boost/fusion/adapted/array/at_impl.hpp [2:2]
+ boost/fusion/adapted/array/begin_impl.hpp [2:2]
+ boost/fusion/adapted/array/category_of_impl.hpp [2:2]
+ boost/fusion/adapted/array/deref_impl.hpp [2:2]
+ boost/fusion/adapted/array/end_impl.hpp [2:2]
+ boost/fusion/adapted/array/is_sequence_impl.hpp [2:2]
+ boost/fusion/adapted/array/is_view_impl.hpp [2:2]
+ boost/fusion/adapted/array/size_impl.hpp [2:2]
+ boost/fusion/adapted/array/tag_of.hpp [2:2]
+ boost/fusion/adapted/array/value_at_impl.hpp [2:2]
+ boost/fusion/adapted/array/value_of_impl.hpp [2:2]
+ boost/fusion/adapted/struct/detail/namespace.hpp [2:3]
+ boost/fusion/adapted/struct/detail/proxy_type.hpp [2:3]
+ boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp [2:3]
+ boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp [2:3]
+ boost/fusion/algorithm/iteration/iter_fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/iter_fold.hpp [37:38]
+ boost/fusion/algorithm/iteration/reverse_fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/reverse_iter_fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/reverse_iter_fold.hpp [37:38]
+ boost/fusion/container/deque/detail/is_sequence_impl.hpp [2:2]
+ boost/fusion/include/adapt_adt_named.hpp [2:2]
+ boost/fusion/include/adapt_assoc_adt.hpp [2:2]
+ boost/fusion/include/adapt_assoc_adt_named.hpp [2:2]
+ boost/fusion/include/adapt_assoc_struct.hpp [2:2]
+ boost/fusion/include/adapt_assoc_struct_named.hpp [2:2]
+ boost/fusion/include/adapt_struct_named.hpp [2:2]
+ boost/fusion/include/boost_array.hpp [2:2]
+ boost/fusion/include/define_assoc_struct.hpp [2:2]
+ boost/fusion/include/define_struct.hpp [2:2]
+ boost/fusion/include/iter_fold.hpp [2:2]
+ boost/fusion/include/make_unfused.hpp [2:2]
+ boost/fusion/include/proxy_type.hpp [2:2]
+ boost/fusion/include/reverse_fold.hpp [2:2]
+ boost/fusion/include/reverse_iter_fold.hpp [2:2]
+ boost/fusion/include/unfused.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL e2b2efa860250bc2b6d99e29d6f93fba
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/detail/python_type.hpp at line 3, boost/python/object/function_doc_signature.hpp at line 3, libs/python/src/object/function_doc_signature.cpp at line 3
+ License text:
+ // Copyright Nikolay Mladenov 2007.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/detail/python_type.hpp [1:3]
+ boost/python/object/function_doc_signature.hpp [1:3]
+ libs/python/src/object/function_doc_signature.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e2b926c2da0d2e8f0d9454a3cbeec2b9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2006 Daniel Wallin
+ Copyright (c) 2005 Dan Marsden
+ Copyright (c) 2007 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl.hpp [2:4]
+ boost/phoenix/stl/algorithm.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e2de2ade95c3c77ab6db64df93e27390
+BELONGS ya.make
+ License text:
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2006 Hartmut Kaiser
+ Copyright (c) 2003 Giovanni Bajo
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/iterator/impl/position_iterator.ipp [2:5]
+ boost/spirit/home/classic/iterator/position_iterator.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e2f2608b1a713fdf90c3ec334ab18042
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2001 - 2003.
+ // (C) Copyright Martin Wille 2003.
+ // (C) Copyright Guillaume Melquiond 2003.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/select_compiler_config.hpp [3:5]
+ boost/config/stdlib/dinkumware.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL e323857368fb1433c9c3079428ca51d3
+BELONGS ya.make
+ License text:
+ // Copyright 2017 Peter Dimov.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/header_deprecated.hpp [4:4]
+ boost/config/helper_macros.hpp [4:5]
+ boost/config/pragma_message.hpp [4:4]
+ boost/mp11/bind.hpp [4:4]
+ boost/mp11/detail/mp_with_index.hpp [4:4]
+ boost/mp11/mpl.hpp [4:4]
+ boost/smart_ptr/atomic_shared_ptr.hpp [7:7]
+ boost/smart_ptr/detail/local_counted_base.hpp [12:12]
+ boost/smart_ptr/detail/local_sp_deleter.hpp [12:12]
+ boost/smart_ptr/local_shared_ptr.hpp [6:6]
+ boost/smart_ptr/make_local_shared.hpp [6:6]
+ boost/smart_ptr/make_local_shared_array.hpp [2:4]
+ boost/smart_ptr/make_local_shared_object.hpp [6:6]
+ boost/type_traits/is_list_constructible.hpp [4:4]
+ boost/type_traits/is_nothrow_swappable.hpp [4:4]
+ boost/utility/detail/minstd_rand.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e3241f812d8d89240eef1d3f12c35cf1
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic.hpp [2:14]
+ boost/spirit/home/classic/core/composite/impl/directives.ipp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL e33f9b0942991a1015e55f9d51fcdfe9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+ Copyright (c) 2009-2011 Christopher Schmidt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/struct/adapt_assoc_struct.hpp [2:4]
+ boost/fusion/adapted/struct/adapt_struct.hpp [2:4]
+ boost/fusion/adapted/struct/adapt_struct_named.hpp [2:4]
+ boost/fusion/adapted/struct/detail/extension.hpp [2:4]
+ boost/fusion/algorithm/iteration/for_each.hpp [2:3]
+ boost/fusion/include/accumulate.hpp [2:2]
+ boost/fusion/include/adapt_adt.hpp [2:2]
+ boost/fusion/include/adapt_struct.hpp [2:2]
+ boost/fusion/include/adapted.hpp [2:2]
+ boost/fusion/include/adapter.hpp [2:2]
+ boost/fusion/include/advance.hpp [2:2]
+ boost/fusion/include/algorithm.hpp [2:2]
+ boost/fusion/include/all.hpp [2:2]
+ boost/fusion/include/any.hpp [2:2]
+ boost/fusion/include/array.hpp [2:2]
+ boost/fusion/include/as_deque.hpp [2:2]
+ boost/fusion/include/as_list.hpp [2:2]
+ boost/fusion/include/as_map.hpp [2:2]
+ boost/fusion/include/as_set.hpp [2:2]
+ boost/fusion/include/as_vector.hpp [2:2]
+ boost/fusion/include/at.hpp [2:2]
+ boost/fusion/include/at_c.hpp [2:2]
+ boost/fusion/include/at_key.hpp [2:2]
+ boost/fusion/include/back.hpp [2:2]
+ boost/fusion/include/begin.hpp [2:2]
+ boost/fusion/include/boost_tuple.hpp [2:2]
+ boost/fusion/include/category_of.hpp [2:2]
+ boost/fusion/include/clear.hpp [2:2]
+ boost/fusion/include/comparison.hpp [2:2]
+ boost/fusion/include/cons.hpp [2:2]
+ boost/fusion/include/cons_tie.hpp [2:2]
+ boost/fusion/include/container.hpp [2:2]
+ boost/fusion/include/convert.hpp [2:2]
+ boost/fusion/include/count.hpp [2:2]
+ boost/fusion/include/count_if.hpp [2:2]
+ boost/fusion/include/deduce.hpp [2:2]
+ boost/fusion/include/deduce_sequence.hpp [2:2]
+ boost/fusion/include/deque.hpp [2:2]
+ boost/fusion/include/deque_fwd.hpp [2:2]
+ boost/fusion/include/deque_tie.hpp [2:2]
+ boost/fusion/include/deref.hpp [2:2]
+ boost/fusion/include/distance.hpp [2:2]
+ boost/fusion/include/empty.hpp [2:2]
+ boost/fusion/include/end.hpp [2:2]
+ boost/fusion/include/equal_to.hpp [2:2]
+ boost/fusion/include/erase.hpp [2:2]
+ boost/fusion/include/erase_key.hpp [2:2]
+ boost/fusion/include/filter.hpp [2:2]
+ boost/fusion/include/filter_if.hpp [2:2]
+ boost/fusion/include/filter_view.hpp [2:2]
+ boost/fusion/include/find.hpp [2:2]
+ boost/fusion/include/find_if.hpp [2:2]
+ boost/fusion/include/fold.hpp [2:2]
+ boost/fusion/include/for_each.hpp [2:2]
+ boost/fusion/include/front.hpp [2:2]
+ boost/fusion/include/functional.hpp [2:2]
+ boost/fusion/include/fused.hpp [2:2]
+ boost/fusion/include/fused_function_object.hpp [2:2]
+ boost/fusion/include/fused_procedure.hpp [2:2]
+ boost/fusion/include/generation.hpp [2:2]
+ boost/fusion/include/greater.hpp [2:2]
+ boost/fusion/include/greater_equal.hpp [2:2]
+ boost/fusion/include/has_key.hpp [2:2]
+ boost/fusion/include/ignore.hpp [2:2]
+ boost/fusion/include/insert.hpp [2:2]
+ boost/fusion/include/insert_range.hpp [2:2]
+ boost/fusion/include/intrinsic.hpp [2:2]
+ boost/fusion/include/invocation.hpp [2:2]
+ boost/fusion/include/invoke.hpp [2:2]
+ boost/fusion/include/invoke_function_object.hpp [2:2]
+ boost/fusion/include/invoke_procedure.hpp [2:2]
+ boost/fusion/include/is_iterator.hpp [2:2]
+ boost/fusion/include/is_sequence.hpp [2:2]
+ boost/fusion/include/is_view.hpp [2:2]
+ boost/fusion/include/iteration.hpp [2:2]
+ boost/fusion/include/iterator.hpp [2:2]
+ boost/fusion/include/iterator_base.hpp [2:2]
+ boost/fusion/include/iterator_facade.hpp [2:2]
+ boost/fusion/include/iterator_range.hpp [2:2]
+ boost/fusion/include/join.hpp [2:2]
+ boost/fusion/include/joint_view.hpp [2:2]
+ boost/fusion/include/less.hpp [2:2]
+ boost/fusion/include/less_equal.hpp [2:2]
+ boost/fusion/include/list.hpp [2:2]
+ boost/fusion/include/list_fwd.hpp [2:2]
+ boost/fusion/include/list_tie.hpp [2:2]
+ boost/fusion/include/make_cons.hpp [2:2]
+ boost/fusion/include/make_deque.hpp [2:2]
+ boost/fusion/include/make_fused.hpp [2:2]
+ boost/fusion/include/make_fused_function_object.hpp [2:2]
+ boost/fusion/include/make_fused_procedure.hpp [2:2]
+ boost/fusion/include/make_list.hpp [2:2]
+ boost/fusion/include/make_map.hpp [2:2]
+ boost/fusion/include/make_set.hpp [2:2]
+ boost/fusion/include/make_tuple.hpp [2:2]
+ boost/fusion/include/make_vector.hpp [2:2]
+ boost/fusion/include/map.hpp [2:2]
+ boost/fusion/include/map_fwd.hpp [2:2]
+ boost/fusion/include/map_tie.hpp [2:2]
+ boost/fusion/include/mpl.hpp [2:2]
+ boost/fusion/include/next.hpp [2:2]
+ boost/fusion/include/none.hpp [2:2]
+ boost/fusion/include/not_equal_to.hpp [2:2]
+ boost/fusion/include/nview.hpp [2:2]
+ boost/fusion/include/pair.hpp [2:2]
+ boost/fusion/include/pair_tie.hpp [2:2]
+ boost/fusion/include/pop_back.hpp [2:2]
+ boost/fusion/include/pop_front.hpp [2:2]
+ boost/fusion/include/prior.hpp [2:2]
+ boost/fusion/include/push_back.hpp [2:2]
+ boost/fusion/include/push_front.hpp [2:2]
+ boost/fusion/include/query.hpp [2:2]
+ boost/fusion/include/remove.hpp [2:2]
+ boost/fusion/include/remove_if.hpp [2:2]
+ boost/fusion/include/repetitive_view.hpp [2:2]
+ boost/fusion/include/replace.hpp [2:2]
+ boost/fusion/include/replace_if.hpp [2:2]
+ boost/fusion/include/reverse.hpp [2:2]
+ boost/fusion/include/reverse_view.hpp [2:2]
+ boost/fusion/include/sequence.hpp [2:2]
+ boost/fusion/include/sequence_base.hpp [2:2]
+ boost/fusion/include/sequence_facade.hpp [2:2]
+ boost/fusion/include/set.hpp [2:2]
+ boost/fusion/include/set_fwd.hpp [2:2]
+ boost/fusion/include/single_view.hpp [2:2]
+ boost/fusion/include/size.hpp [2:2]
+ boost/fusion/include/std_pair.hpp [2:2]
+ boost/fusion/include/struct.hpp [2:2]
+ boost/fusion/include/support.hpp [2:2]
+ boost/fusion/include/swap.hpp [2:2]
+ boost/fusion/include/tag_of.hpp [2:2]
+ boost/fusion/include/tag_of_fwd.hpp [2:2]
+ boost/fusion/include/transform.hpp [2:2]
+ boost/fusion/include/transform_view.hpp [2:2]
+ boost/fusion/include/transformation.hpp [2:2]
+ boost/fusion/include/tuple.hpp [2:2]
+ boost/fusion/include/tuple_fwd.hpp [2:2]
+ boost/fusion/include/tuple_tie.hpp [2:2]
+ boost/fusion/include/unfused_typed.hpp [2:2]
+ boost/fusion/include/unused.hpp [2:2]
+ boost/fusion/include/value_at_key.hpp [2:2]
+ boost/fusion/include/value_of.hpp [2:2]
+ boost/fusion/include/vector.hpp [2:2]
+ boost/fusion/include/vector10.hpp [2:2]
+ boost/fusion/include/vector20.hpp [2:2]
+ boost/fusion/include/vector30.hpp [2:2]
+ boost/fusion/include/vector40.hpp [2:2]
+ boost/fusion/include/vector50.hpp [2:2]
+ boost/fusion/include/vector_fwd.hpp [2:2]
+ boost/fusion/include/vector_tie.hpp [2:2]
+ boost/fusion/include/view.hpp [2:2]
+ boost/fusion/include/void.hpp [2:2]
+ boost/fusion/include/zip.hpp [2:2]
+ boost/fusion/include/zip_view.hpp [2:2]
+ boost/phoenix/bind/bind_member_variable.hpp [2:3]
+ boost/phoenix/bind/detail/cpp03/bind_function.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/bind_function.hpp [54:54]
+ boost/phoenix/bind/detail/cpp03/bind_function_object.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/bind_function_object.hpp [31:31]
+ boost/phoenix/bind/detail/cpp03/bind_member_function.hpp [2:3]
+ boost/phoenix/bind/detail/cpp03/bind_member_function.hpp [106:106]
+ boost/phoenix/bind/detail/cpp03/function_ptr.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/function_ptr.hpp [95:95]
+ boost/phoenix/bind/detail/cpp03/member_function_ptr.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/member_function_ptr.hpp [84:84]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_10.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_20.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_30.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_40.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_50.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_10.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_20.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_30.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_40.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_50.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_10.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_20.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_30.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_40.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_50.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_10.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_20.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_30.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_40.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_50.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_10.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_20.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_30.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_40.hpp [2:2]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_50.hpp [2:2]
+ boost/phoenix/bind/detail/member_variable.hpp [2:2]
+ boost/phoenix/core/as_actor.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/function_eval.hpp [13:13]
+ boost/phoenix/core/detail/cpp03/function_eval_expr.hpp [17:18]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_10.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_20.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_30.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_40.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_50.hpp [2:2]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_50.hpp [2:3]
+ boost/phoenix/core/detail/function_eval.hpp [2:3]
+ boost/phoenix/core/limits.hpp [2:2]
+ boost/phoenix/function/lazy_list.hpp [33:35]
+ boost/phoenix/function/lazy_operator.hpp [27:29]
+ boost/phoenix/function/lazy_prelude.hpp [115:117]
+ boost/phoenix/function/lazy_reuse.hpp [24:26]
+ boost/phoenix/function/lazy_signature.hpp [34:36]
+ boost/phoenix/function/lazy_smart.hpp [11:13]
+ boost/phoenix/scope/detail/local_variable.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e375f9f33ab97263bdffba2a16e216e8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/os/android.h at line 4, boost/predef/os/ios.h at line 4, boost/predef/platform/windows_desktop.h at line 4, boost/predef/platform/windows_phone.h at line 4, boost/predef/platform/windows_runtime.h at line 4, boost/predef/platform/windows_store.h at line 4
+ License text:
+ Copyright Rene Rivera 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/os/android.h [2:4]
+ boost/predef/os/ios.h [2:5]
+ boost/predef/platform/windows_desktop.h [2:5]
+ boost/predef/platform/windows_phone.h [2:5]
+ boost/predef/platform/windows_runtime.h [2:5]
+ boost/predef/platform/windows_store.h [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e381b710b97e62e701d329d7f5fafc9a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/is_maybe.hpp at line 3
+ License text:
+ // Copyright Daniel Wallin, David Abrahams 2010. Use, modification and
+ // distribution is subject to the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/parameter/aux_/is_maybe.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e38d04805dcf88e6564ae734a4cd8a49
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2002-2009
+ // Copyright Jan Langer 2002
+ // Copyright Dietmar Kuehl 2001
+ // Copyright Vladimir Prus 2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/operations.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL e392bd367f352dd8f8162db5d1fa72e7
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/extreme_points.hpp [3:6]
+ boost/geometry/algorithms/point_on_surface.hpp [3:6]
+ boost/geometry/algorithms/remove_spikes.hpp [3:6]
+ boost/geometry/multi/algorithms/detail/extreme_points.hpp [3:6]
+ boost/geometry/multi/algorithms/remove_spikes.hpp [3:6]
+ boost/geometry/strategies/default_strategy.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e3adff0ee350b1ce3e1bf4597996eaa2
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2007.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/tools/detail/polynomial_horner1_10.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_11.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_12.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_13.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_14.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_15.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_16.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_17.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_18.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_19.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_2.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_20.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_3.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_4.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_5.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_6.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_7.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_8.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner1_9.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_10.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_11.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_12.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_13.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_14.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_15.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_16.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_17.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_18.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_19.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_2.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_20.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_3.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_4.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_5.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_6.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_7.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_8.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner2_9.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_10.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_11.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_12.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_13.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_14.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_15.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_16.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_17.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_18.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_19.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_2.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_20.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_3.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_4.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_5.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_6.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_7.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_8.hpp [1:3]
+ boost/math/tools/detail/polynomial_horner3_9.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_10.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_11.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_12.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_13.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_14.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_15.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_16.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_17.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_18.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_19.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_2.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_20.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_3.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_4.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_5.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_6.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_7.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_8.hpp [1:3]
+ boost/math/tools/detail/rational_horner1_9.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_10.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_11.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_12.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_13.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_14.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_15.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_16.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_17.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_18.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_19.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_2.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_20.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_3.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_4.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_5.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_6.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_7.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_8.hpp [1:3]
+ boost/math/tools/detail/rational_horner2_9.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_10.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_11.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_12.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_13.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_14.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_15.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_16.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_17.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_18.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_19.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_2.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_20.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_3.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_4.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_5.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_6.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_7.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_8.hpp [1:3]
+ boost/math/tools/detail/rational_horner3_9.hpp [1:3]
+ boost/type_traits/is_complex.hpp [1:3]
+ boost/type_traits/make_signed.hpp [2:4]
+ boost/type_traits/make_unsigned.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e3e1028aa1cce5414c38eefd261dbb49
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/tti/detail/ddata.hpp at line 4, boost/tti/detail/dftclass.hpp at line 4, boost/tti/detail/dfunction.hpp at line 4, boost/tti/detail/dlambda.hpp at line 4, boost/tti/detail/dmetafunc.hpp at line 4, boost/tti/detail/dplaceholder.hpp at line 4, boost/tti/has_data.hpp at line 4, boost/tti/has_function.hpp at line 4
+ License text:
+ // (C) Copyright Edward Diener 2012,2013
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/tti/detail/ddata.hpp [2:4]
+ boost/tti/detail/dftclass.hpp [2:4]
+ boost/tti/detail/dfunction.hpp [2:4]
+ boost/tti/detail/dlambda.hpp [2:4]
+ boost/tti/detail/dmetafunc.hpp [2:4]
+ boost/tti/detail/dplaceholder.hpp [2:4]
+ boost/tti/has_data.hpp [2:4]
+ boost/tti/has_function.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e41424d54e8473c39effea8f755418d2
+BELONGS ya.make
+ License text:
+ // (C) Copyright Boris Rasin and Antony Polukhin 2014-2015.
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polymorphic_pointer_cast.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e4625bf9a635d6b910598e4a6885eab0
+BELONGS ya.make
+ License text:
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2015 Mario Mulansky
+ Copyright 2012 Christoph Koke
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp [9:11]
+ boost/numeric/odeint/integrate/detail/integrate_const.hpp [9:11]
+ boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp [9:11]
+ boost/numeric/odeint/integrate/detail/integrate_times.hpp [9:11]
+ boost/numeric/odeint/stepper/adams_bashforth.hpp [10:13]
+ boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp [9:11]
+ boost/numeric/odeint/stepper/adams_moulton.hpp [10:12]
+ boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp [9:11]
+ boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp [9:11]
+ boost/numeric/odeint/stepper/bulirsch_stoer.hpp [12:14]
+ boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp [9:11]
+ boost/numeric/odeint/stepper/controlled_runge_kutta.hpp [8:10]
+ boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp [10:12]
+ boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp [9:11]
+ boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp [9:11]
+ boost/numeric/odeint/stepper/explicit_generic_rk.hpp [9:11]
+ boost/numeric/odeint/stepper/implicit_euler.hpp [9:11]
+ boost/numeric/odeint/stepper/modified_midpoint.hpp [9:11]
+ boost/numeric/odeint/stepper/rosenbrock4.hpp [10:12]
+ boost/numeric/odeint/stepper/rosenbrock4_controller.hpp [9:11]
+ boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp [9:11]
+ boost/numeric/odeint/stepper/runge_kutta4_classic.hpp [9:11]
+ boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp [9:11]
+ boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp [9:11]
+ boost/numeric/odeint/util/bind.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL e4700525f1ca13f160dcc093f20bd1d2
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/caps_gcc_arm.hpp [6:10]
+ boost/atomic/detail/caps_linux_arm.hpp [6:10]
+ boost/atomic/detail/ops_linux_arm.hpp [6:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL e48b4e47d76d88b5aebcf8c8588596c0
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2014 Ian Forbed
+ // Copyright (C) 2014-2017 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/concurrent_queues/sync_priority_queue.hpp [1:2]
+ boost/thread/concurrent_queues/sync_timed_queue.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL e48b5698327b63513b38fe20f3b27554
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/platform/symbian.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e48b5b59655db222047e250fd037f63e
+BELONGS ya.make
+ License text:
+ // (C) Copyright Beman Dawes 1999.
+ // (C) Copyright Jens Mauer 2001
+ // (C) Copyright John Maddock 2001
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/cstdint.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL e4a00a40e577089cb7fa0eea90b9aa23
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/numeric.hpp at line 8
+ License text:
+ // Copyright 2006 Thorsten Ottosen.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/numeric.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL e4b3fa7ad3fac11d4da8163314c008b6
+BELONGS ya.make
+ License text:
+ // Author: Gerald Evenden
+ // Copyright (c) 1995, Gerald Evenden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/srs/projections/proj/aea.hpp [27:28]
+ boost/geometry/srs/projections/proj/aeqd.hpp [27:28]
+ boost/geometry/srs/projections/proj/airy.hpp [27:28]
+ boost/geometry/srs/projections/proj/aitoff.hpp [28:29]
+ boost/geometry/srs/projections/proj/nzmg.hpp [27:29]
+
+KEEP COPYRIGHT_SERVICE_LABEL e4e5cd68aeaf73ab0c3db975bca46744
+BELONGS ya.make
+ License text:
+ /* Copyright (c) 2006 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL e4f41bc4385b63c1a2c1762dbb10fdba
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/cpp11/impl/string_at.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2016.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/cpp11/impl/string_at.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL e52d2d00c0bddf195fcd2e865710a087
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001 Jeremy Siek, Douglas Gregor, Brian Osman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/isomorphism.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL e5360be9eee83c576021171be4c1dcfa
+BELONGS ya.make
+ License text:
+ Copyright (c) 2013 Mateusz Loskot
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/std_array.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/array_size.hpp [2:2]
+ boost/fusion/adapted/std_array/detail/begin_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/end_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/is_sequence_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/is_view_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/detail/size_impl.hpp [2:4]
+ boost/fusion/adapted/std_array/std_array_iterator.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e58ccf339db5d63f1209f6f67af482fe
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/docstring_options.hpp at line 3
+ License text:
+ // Copyright Ralf W. Grosse-Kunstleve 2006.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/python/docstring_options.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e5a9ae03bc33a706044f95d904b199c9
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+ // Copyright (c) 2003-2004 Gennaro Prota
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dynamic_bitset_fwd.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e63a42a391669dbd82501fe78900f57d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/chrono/io_v1/chrono_io.hpp at line 7, boost/ratio/detail/ratio_io.hpp at line 6, boost/ratio/ratio_io.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/io_v1/chrono_io.hpp [4:7]
+ boost/ratio/detail/ratio_io.hpp [3:6]
+ boost/ratio/ratio_io.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL e660351224f73455ec6e8b19ff54015b
+BELONGS ya.make
+ License text:
+ // Copyright 2013 University of Warsaw.
+ // Authors: Piotr Wygocki
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/cycle_canceling.hpp [2:3]
+ boost/graph/detail/augment.hpp [2:3]
+ boost/graph/find_flow_cost.hpp [2:3]
+ boost/graph/successive_shortest_path_nonnegative_weights.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e66b15bc122266f3d72955f7399d4bc0
+BELONGS libs/atomic/ya.make ya.make
+ License text:
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013-2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/lockpool.hpp [6:7]
+ libs/atomic/src/lockpool.cpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL e6c06124784422b679ce63978c69cc3a
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2018 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/bitwise_cast.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL e6f75bab1aaec3fbff9729d2c7fcfc9b
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2006.
+ // (C) Copyright Johan Rade 2006.
+ // (C) Copyright Paul A. Bristow 2011 (added changesign).
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/sign.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e70dc68d7bd75089121a8ad29188eecc
+BELONGS ya.make
+ License text:
+ // (C) Copyright Darin Adler 2000
+ // (C) Copyright Beman Dawes 2006, 2009, 2014
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/endian/arithmetic.hpp [3:4]
+ boost/endian/buffers.hpp [3:4]
+ boost/spirit/home/support/detail/endian/endian.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e772cb4d7089d9b8f7565f8b8c9f7936
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+ // Copyright (c) 2003-2006, 2008 Gennaro Prota
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/dynamic_bitset.hpp [3:4]
+ boost/dynamic_bitset/config.hpp [3:4]
+ boost/dynamic_bitset/dynamic_bitset.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e777cb8c0600e2a77090b952364f50e2
+BELONGS ya.make
+ License text:
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 1999-2003 Jeremiah Willcock
+ Copyright (c) 2001-2011 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/sequence/io/detail/in.hpp [2:4]
+ boost/fusion/sequence/io/detail/manip.hpp [2:4]
+ boost/fusion/sequence/io/detail/out.hpp [2:4]
+ boost/fusion/sequence/io/in.hpp [2:4]
+ boost/fusion/sequence/io/out.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL e7839fbcad9c12a3056bd593ac5607a1
+BELONGS ya.make
+ License text:
+ //! Copyright (c) 2011-2012
+ //! Brandon Kohn
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/conversion/detail/numeric_cast_traits.hpp [2:3]
+ boost/numeric/conversion/detail/numeric_cast_traits.hpp [29:30]
+ boost/numeric/conversion/detail/numeric_cast_traits.hpp [80:81]
+ boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp [2:3]
+ boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e7b0cb15f49a0534732f0753e83b9649
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pointer_cast.hpp at line 5, boost/pointer_to_other.hpp at line 9
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pointer_cast.hpp [3:5]
+ boost/pointer_to_other.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL e7d0db279089836ea6f07df6e7203678
+BELONGS ya.make
+ License text:
+ * Copyright 2015 Klemens Morgenstern
+ * Copyright 2016 Jorge Lodos
+ * Copyright 2016 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/winapi/dbghelp.hpp [2:4]
+ boost/winapi/error_handling.hpp [2:4]
+ boost/winapi/file_management.hpp [2:5]
+ boost/winapi/file_mapping.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e7ec39c5081e21fd01abce1315e1d826
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals.hpp at line 5
+ License text:
+ // Copyright Douglas Gregor 2003-2004. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e7f91dd2d0775121b806452e251ea945
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/chrono/include.hpp at line 6, boost/chrono/io/duration_get.hpp at line 3, boost/chrono/io/duration_io.hpp at line 3, boost/chrono/io/duration_put.hpp at line 3, boost/chrono/io/duration_style.hpp at line 3, boost/chrono/io/duration_units.hpp at line 3, boost/chrono/io/ios_base_state.hpp at line 3, boost/chrono/io/time_point_get.hpp at line 3, boost/chrono/io/time_point_put.hpp at line 3, boost/chrono/io/time_point_units.hpp at line 3, boost/ratio/mpl/abs.hpp at line 5, boost/ratio/mpl/divides.hpp at line 5, boost/ratio/mpl/equal_to.hpp at line 5, boost/ratio/mpl/gcd.hpp at line 5, boost/ratio/mpl/greater.hpp at line 5, boost/ratio/mpl/greater_equal.hpp at line 5, boost/ratio/mpl/lcm.hpp at line 5, boost/ratio/mpl/less.hpp at line 5, boost/ratio/mpl/less_equal.hpp at line 5, boost/ratio/mpl/minus.hpp at line 5, boost/ratio/mpl/negate.hpp at line 5, boost/ratio/mpl/not_equal_to.hpp at line 5, boost/ratio/mpl/numeric_cast.hpp at line 5, boost/ratio/mpl/rational_c_tag.hpp at line 5, boost/ratio/mpl/sign.hpp at line 5, boost/ratio/mpl/times.hpp at line 5
+ License text:
+ // (C) Copyright 2011 Vicente J. Botet Escriba
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/chrono/include.hpp [4:6]
+ boost/chrono/io/duration_get.hpp [1:4]
+ boost/chrono/io/duration_io.hpp [1:4]
+ boost/chrono/io/duration_put.hpp [1:4]
+ boost/chrono/io/duration_style.hpp [1:4]
+ boost/chrono/io/duration_units.hpp [1:4]
+ boost/chrono/io/ios_base_state.hpp [1:3]
+ boost/chrono/io/time_point_get.hpp [1:4]
+ boost/chrono/io/time_point_put.hpp [1:4]
+ boost/chrono/io/time_point_units.hpp [1:5]
+ boost/ratio/mpl/abs.hpp [3:5]
+ boost/ratio/mpl/divides.hpp [3:5]
+ boost/ratio/mpl/equal_to.hpp [3:5]
+ boost/ratio/mpl/gcd.hpp [3:5]
+ boost/ratio/mpl/greater.hpp [3:5]
+ boost/ratio/mpl/greater_equal.hpp [3:5]
+ boost/ratio/mpl/lcm.hpp [3:5]
+ boost/ratio/mpl/less.hpp [3:5]
+ boost/ratio/mpl/less_equal.hpp [3:5]
+ boost/ratio/mpl/minus.hpp [3:5]
+ boost/ratio/mpl/negate.hpp [3:5]
+ boost/ratio/mpl/not_equal_to.hpp [3:5]
+ boost/ratio/mpl/numeric_cast.hpp [3:5]
+ boost/ratio/mpl/rational_c_tag.hpp [3:5]
+ boost/ratio/mpl/sign.hpp [3:5]
+ boost/ratio/mpl/times.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e80099ca7d9554b99489b2a34e8f9497
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/direction_code.hpp [3:3]
+ boost/geometry/algorithms/detail/overlay/handle_colocations.hpp [3:4]
+ boost/geometry/algorithms/detail/overlay/sort_by_side.hpp [3:4]
+ boost/geometry/algorithms/detail/sections/section_box_policies.hpp [3:3]
+ boost/geometry/algorithms/detail/sections/section_functions.hpp [3:3]
+ boost/geometry/algorithms/is_convex.hpp [3:3]
+ boost/geometry/strategies/cartesian/side_of_intersection.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e8c8fa26afa0b2fea67db2fed458b026
+BELONGS ya.make
+ License text:
+ Copyright 2008 Intel Corporation
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polygon/detail/boolean_op.hpp [2:2]
+ boost/polygon/detail/boolean_op_45.hpp [2:2]
+ boost/polygon/detail/iterator_compact_to_points.hpp [2:2]
+ boost/polygon/detail/iterator_geometry_to_set.hpp [2:2]
+ boost/polygon/detail/iterator_points_to_compact.hpp [2:2]
+ boost/polygon/detail/max_cover.hpp [2:2]
+ boost/polygon/detail/minkowski.hpp [2:2]
+ boost/polygon/detail/polygon_45_formation.hpp [2:2]
+ boost/polygon/detail/polygon_45_set_view.hpp [2:2]
+ boost/polygon/detail/polygon_45_touch.hpp [2:2]
+ boost/polygon/detail/polygon_90_set_view.hpp [2:2]
+ boost/polygon/detail/polygon_90_touch.hpp [2:2]
+ boost/polygon/detail/polygon_arbitrary_formation.hpp [2:2]
+ boost/polygon/detail/polygon_formation.hpp [2:2]
+ boost/polygon/detail/polygon_set_view.hpp [2:2]
+ boost/polygon/detail/polygon_sort_adaptor.hpp [2:2]
+ boost/polygon/detail/property_merge.hpp [2:2]
+ boost/polygon/detail/property_merge_45.hpp [2:2]
+ boost/polygon/detail/rectangle_formation.hpp [2:2]
+ boost/polygon/detail/scan_arbitrary.hpp [2:2]
+ boost/polygon/gmp_override.hpp [2:2]
+ boost/polygon/gtl.hpp [2:2]
+ boost/polygon/isotropy.hpp [2:2]
+ boost/polygon/polygon.hpp [2:2]
+ boost/polygon/polygon_45_data.hpp [2:2]
+ boost/polygon/polygon_45_set_concept.hpp [2:2]
+ boost/polygon/polygon_45_set_data.hpp [2:2]
+ boost/polygon/polygon_45_set_traits.hpp [2:2]
+ boost/polygon/polygon_45_with_holes_data.hpp [2:2]
+ boost/polygon/polygon_90_data.hpp [2:2]
+ boost/polygon/polygon_90_set_concept.hpp [2:2]
+ boost/polygon/polygon_90_set_data.hpp [2:2]
+ boost/polygon/polygon_90_set_traits.hpp [2:2]
+ boost/polygon/polygon_90_with_holes_data.hpp [2:2]
+ boost/polygon/polygon_data.hpp [2:2]
+ boost/polygon/polygon_set_concept.hpp [2:2]
+ boost/polygon/polygon_set_data.hpp [2:2]
+ boost/polygon/polygon_set_traits.hpp [2:2]
+ boost/polygon/polygon_traits.hpp [2:2]
+ boost/polygon/polygon_with_holes_data.hpp [2:2]
+ boost/polygon/rectangle_concept.hpp [2:2]
+ boost/polygon/rectangle_data.hpp [2:2]
+ boost/polygon/rectangle_traits.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL e8f7853c4a6700eeac6f2514116bb8a9
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2012
+ // (C) Copyright Markus Schoepflin 2007
+ // (C) Copyright Bryce Lelbach 2010
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/detail/atomic.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e90054354c2fc6179de794b9b381eb6d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/atl.hpp at line 11, boost/range/detail/microsoft.hpp at line 8, boost/range/mfc.hpp at line 11
+ License text:
+ // Copyright Shunsuke Sogame 2005-2006.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/atl.hpp [9:11]
+ boost/range/detail/microsoft.hpp [6:8]
+ boost/range/mfc.hpp [9:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL e911fa8ed8154051a5ba24779b58fe24
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2008 Jan Gaspar
+ // Copyright (c) 2013 Paul A. Bristow // Doxygen comments changed.
+ // Copyright (c) 2013 Antony Polukhin // Move semantics implementation.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/circular_buffer/base.hpp [3:5]
+ boost/circular_buffer/space_optimized.hpp [3:5]
+ boost/variant/detail/make_variant_list.hpp [6:7]
+ boost/variant/recursive_variant.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL e948c32bb4fec5a27e9bbe3a45398269
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pending/property_serialize.hpp at line 3
+ License text:
+ // (C) Copyright Jeremy Siek 2006
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/pending/property_serialize.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e96cb88f0e61b70a27c80d50f101304a
+BELONGS ya.make
+ License text:
+ // Copyright 2008 Gautam Sewani
+ // Copyright 2008 John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/detail/hypergeometric_cdf.hpp [1:1]
+ boost/math/distributions/detail/hypergeometric_pdf.hpp [1:2]
+ boost/math/distributions/detail/hypergeometric_quantile.hpp [1:1]
+ boost/math/distributions/hypergeometric.hpp [1:2]
+ boost/math/special_functions/prime.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL e97656f9dec509a30c28f6e372e5c562
+BELONGS ya.make
+ License text:
+ Copyright (C) 2002, 2008, 2013 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/addressof.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e988593c62f4794020b8d577270883fc
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008-2009 Ben Hanson
+ // Copyright (c) 2008-2011 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/lex/lexer/lexertl/generate_static.hpp [1:2]
+ boost/spirit/home/lex/lexer/lexertl/generate_static.hpp [890:893]
+
+KEEP COPYRIGHT_SERVICE_LABEL e99f2084817df228034b7674cdcfeeb0
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2011 Hartmut Kaiser
+ Copyright (c) Christopher Diggins 2005
+ Copyright (c) Pablo Aguilar 2005
+ Copyright (c) Kevlin Henney 2001
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/detail/hold_any.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL e9c01b978ee54abfd69646f14ef22a7a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/detail/shared_dir_helpers.hpp at line 5, boost/intrusive/avl_set.hpp at line 5, boost/intrusive/avltree_algorithms.hpp at line 5, boost/intrusive/bstree_algorithms.hpp at line 5, boost/intrusive/detail/common_slist_algorithms.hpp at line 5, boost/intrusive/detail/hashtable_node.hpp at line 5, boost/intrusive/options.hpp at line 5, boost/intrusive/sg_set.hpp at line 5, boost/intrusive/sgtree.hpp at line 5, boost/intrusive/sgtree_algorithms.hpp at line 5, boost/intrusive/splay_set.hpp at line 5, boost/intrusive/splaytree.hpp at line 5, boost/intrusive/splaytree_algorithms.hpp at line 5, boost/intrusive/treap_set.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2007-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/detail/shared_dir_helpers.hpp [3:5]
+ boost/intrusive/avl_set.hpp [3:3]
+ boost/intrusive/avltree_algorithms.hpp [3:4]
+ boost/intrusive/bstree_algorithms.hpp [3:3]
+ boost/intrusive/detail/common_slist_algorithms.hpp [3:3]
+ boost/intrusive/detail/hashtable_node.hpp [3:3]
+ boost/intrusive/options.hpp [3:3]
+ boost/intrusive/sg_set.hpp [3:3]
+ boost/intrusive/sgtree.hpp [3:3]
+ boost/intrusive/sgtree_algorithms.hpp [3:3]
+ boost/intrusive/splay_set.hpp [3:3]
+ boost/intrusive/splaytree.hpp [3:3]
+ boost/intrusive/splaytree_algorithms.hpp [3:3]
+ boost/intrusive/treap_set.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL e9c139c5d04d10ee2bf656ff900cbbaf
+BELONGS ya.make
+ License text:
+ // Copyright (c) Aaron Windsor 2007
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/chrobak_payne_drawing.hpp [2:2]
+ boost/graph/planar_canonical_ordering.hpp [2:2]
+ boost/graph/planar_detail/boyer_myrvold_impl.hpp [2:2]
+ boost/graph/planar_detail/face_handles.hpp [2:2]
+ boost/graph/planar_detail/face_iterators.hpp [2:2]
+ boost/graph/planar_face_traversal.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL e9da6936cb0ee5a3c700b8021f2e4668
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2003 Vaclav Vesely
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/dynamic/lazy.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ea2a1d88ab559901c962fffaa443db62
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/local_time/conversion.hpp at line 6, boost/date_time/local_time/dst_transition_day_rules.hpp at line 6, boost/date_time/local_time/local_time.hpp at line 6, boost/date_time/local_time/local_time_io.hpp at line 6, boost/date_time/local_time/local_time_types.hpp at line 6, boost/date_time/local_time/tz_database.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/local_time/conversion.hpp [4:8]
+ boost/date_time/local_time/dst_transition_day_rules.hpp [4:8]
+ boost/date_time/local_time/local_time.hpp [4:8]
+ boost/date_time/local_time/local_time_io.hpp [4:8]
+ boost/date_time/local_time/local_time_types.hpp [4:8]
+ boost/date_time/local_time/tz_database.hpp [4:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL ea6952b116e7dc3746a21d3d95928c35
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008 Frank Mori Hess
+ // Copyright (c) 2016 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/owner_less.hpp [7:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL eaaa450f0bcecbc273ad0a9250e79ddc
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+ // Copyright (c) 2003-2004, 2008 Gennaro Prota
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/dynamic_bitset.hpp [3:4]
+ boost/integer/integer_log2.hpp [7:7]
+ boost/pending/lowest_bit.hpp [6:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL eacd4b2bbe3922f7890d60fb0812ecae
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process.hpp [1:7]
+ boost/process/args.hpp [1:6]
+ boost/process/async_pipe.hpp [1:5]
+ boost/process/async_system.hpp [1:6]
+ boost/process/child.hpp [1:6]
+ boost/process/cmd.hpp [1:6]
+ boost/process/detail/child_decl.hpp [1:6]
+ boost/process/detail/config.hpp [1:6]
+ boost/process/detail/execute_impl.hpp [1:6]
+ boost/process/detail/handler_base.hpp [1:6]
+ boost/process/detail/posix/async_in.hpp [1:5]
+ boost/process/detail/posix/async_out.hpp [1:5]
+ boost/process/detail/posix/basic_pipe.hpp [1:5]
+ boost/process/detail/posix/child_handle.hpp [1:5]
+ boost/process/detail/posix/close_in.hpp [1:5]
+ boost/process/detail/posix/close_out.hpp [1:5]
+ boost/process/detail/posix/executor.hpp [1:5]
+ boost/process/detail/posix/fd.hpp [1:5]
+ boost/process/detail/posix/file_in.hpp [1:5]
+ boost/process/detail/posix/file_out.hpp [1:6]
+ boost/process/detail/posix/null_in.hpp [1:5]
+ boost/process/detail/posix/null_out.hpp [1:6]
+ boost/process/detail/posix/pipe_in.hpp [1:5]
+ boost/process/detail/posix/pipe_out.hpp [1:6]
+ boost/process/detail/posix/search_path.hpp [1:5]
+ boost/process/detail/posix/shell_path.hpp [1:5]
+ boost/process/detail/posix/signal.hpp [1:6]
+ boost/process/detail/posix/start_dir.hpp [1:5]
+ boost/process/detail/posix/terminate.hpp [1:5]
+ boost/process/detail/posix/wait_for_exit.hpp [1:5]
+ boost/process/detail/posix/wait_group.hpp [1:5]
+ boost/process/detail/throw_on_error.hpp [1:6]
+ boost/process/detail/windows/async_in.hpp [1:5]
+ boost/process/detail/windows/async_out.hpp [1:5]
+ boost/process/detail/windows/child_handle.hpp [1:5]
+ boost/process/detail/windows/close_in.hpp [1:5]
+ boost/process/detail/windows/close_out.hpp [1:5]
+ boost/process/detail/windows/executor.hpp [1:6]
+ boost/process/detail/windows/file_in.hpp [1:5]
+ boost/process/detail/windows/file_out.hpp [1:5]
+ boost/process/detail/windows/null_in.hpp [1:5]
+ boost/process/detail/windows/null_out.hpp [1:5]
+ boost/process/detail/windows/pipe_in.hpp [1:5]
+ boost/process/detail/windows/pipe_out.hpp [1:6]
+ boost/process/detail/windows/search_path.hpp [1:5]
+ boost/process/detail/windows/shell_path.hpp [1:5]
+ boost/process/detail/windows/show_window.hpp [1:6]
+ boost/process/detail/windows/start_dir.hpp [1:5]
+ boost/process/detail/windows/terminate.hpp [1:5]
+ boost/process/detail/windows/wait_for_exit.hpp [1:6]
+ boost/process/error.hpp [1:6]
+ boost/process/exe.hpp [1:6]
+ boost/process/pipe.hpp [1:5]
+ boost/process/search_path.hpp [1:5]
+ boost/process/shell.hpp [1:6]
+ boost/process/spawn.hpp [1:6]
+ boost/process/start_dir.hpp [1:5]
+ boost/process/system.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL eae331fb4d1aaf9e360dffe9377f0a1e
+BELONGS ya.make
+ License text:
+ // Copyright (c) Intel Corporation 2008.
+ // Copyright (c) 2008-2012 Simonson Lucanus.
+ // Copyright (c) 2012-2012 Andrii Sydorchuk.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polygon/interval_concept.hpp [3:5]
+ boost/polygon/interval_data.hpp [3:5]
+ boost/polygon/interval_traits.hpp [3:5]
+ boost/polygon/point_concept.hpp [3:5]
+ boost/polygon/point_data.hpp [3:5]
+ boost/polygon/point_traits.hpp [3:5]
+ boost/polygon/segment_concept.hpp [3:5]
+ boost/polygon/segment_data.hpp [3:5]
+ boost/polygon/segment_traits.hpp [3:5]
+ boost/polygon/transform.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL eafe3be020a3a887925e9a047938c57b
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2007
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/algorithm/query/count.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL eb0cfdfe47ae07331ac5726d7374e2de
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/hana/ext/std/vector.hpp [5:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL eb177c2d4de38073bbfeff4b54fea4fb
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/io/wkt/write.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL eb1a7a239eede3df076875abfbb7cf41
+BELONGS ya.make
+ License text:
+ // Copyright 2005-2013 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base.hpp [13:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL eb5cebe314db358e0f35ffe2fb48f762
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/allocators/adaptive_pool.hpp at line 5, boost/interprocess/allocators/allocator.hpp at line 5, boost/interprocess/allocators/cached_adaptive_pool.hpp at line 5, boost/interprocess/allocators/cached_node_allocator.hpp at line 5, boost/interprocess/allocators/detail/adaptive_node_pool.hpp at line 5, boost/interprocess/allocators/detail/node_pool.hpp at line 5, boost/interprocess/allocators/node_allocator.hpp at line 5, boost/interprocess/allocators/private_adaptive_pool.hpp at line 5, boost/interprocess/allocators/private_node_allocator.hpp at line 5, boost/interprocess/anonymous_shared_memory.hpp at line 5, boost/interprocess/creation_tags.hpp at line 5, boost/interprocess/detail/cast_tags.hpp at line 5, boost/interprocess/detail/config_begin.hpp at line 5, boost/interprocess/detail/config_end.hpp at line 5, boost/interprocess/detail/in_place_interface.hpp at line 5, boost/interprocess/detail/intersegment_ptr.hpp at line 5, boost/interprocess/detail/managed_memory_impl.hpp at line 5, boost/interprocess/detail/managed_multi_shared_memory.hpp at line 5, boost/interprocess/detail/min_max.hpp at line 5, boost/interprocess/detail/named_proxy.hpp at line 5, boost/interprocess/detail/os_file_functions.hpp at line 5, boost/interprocess/detail/pointer_type.hpp at line 5, boost/interprocess/detail/posix_time_types_wrk.hpp at line 5, boost/interprocess/detail/segment_manager_helper.hpp at line 5, boost/interprocess/detail/type_traits.hpp at line 4, boost/interprocess/errors.hpp at line 5, boost/interprocess/file_mapping.hpp at line 5, boost/interprocess/indexes/flat_map_index.hpp at line 5, boost/interprocess/indexes/iset_index.hpp at line 5, boost/interprocess/indexes/iunordered_set_index.hpp at line 5, boost/interprocess/indexes/map_index.hpp at line 5, boost/interprocess/indexes/null_index.hpp at line 5, boost/interprocess/indexes/unordered_map_index.hpp at line 5, boost/interprocess/interprocess_fwd.hpp at line 5, boost/interprocess/ipc/message_queue.hpp at line 5, boost/interprocess/managed_external_buffer.hpp at line 5, boost/interprocess/managed_heap_memory.hpp at line 5, boost/interprocess/managed_mapped_file.hpp at line 5, boost/interprocess/managed_shared_memory.hpp at line 5, boost/interprocess/managed_windows_shared_memory.hpp at line 5, boost/interprocess/mapped_region.hpp at line 5, boost/interprocess/mem_algo/detail/mem_algo_common.hpp at line 5, boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp at line 5, boost/interprocess/mem_algo/rbtree_best_fit.hpp at line 5, boost/interprocess/mem_algo/simple_seq_fit.hpp at line 5, boost/interprocess/permissions.hpp at line 5, boost/interprocess/segment_manager.hpp at line 5, boost/interprocess/shared_memory_object.hpp at line 5, boost/interprocess/streams/bufferstream.hpp at line 5, boost/interprocess/streams/vectorstream.hpp at line 5, boost/interprocess/sync/detail/condition_algorithm_8a.hpp at line 5, boost/interprocess/sync/file_lock.hpp at line 5, boost/interprocess/sync/interprocess_condition.hpp at line 5, boost/interprocess/sync/interprocess_mutex.hpp at line 5, boost/interprocess/sync/interprocess_recursive_mutex.hpp at line 5, boost/interprocess/sync/interprocess_semaphore.hpp at line 5, boost/interprocess/sync/interprocess_sharable_mutex.hpp at line 9, boost/interprocess/sync/interprocess_upgradable_mutex.hpp at line 7, boost/interprocess/sync/lock_options.hpp at line 5, boost/interprocess/sync/mutex_family.hpp at line 5, boost/interprocess/sync/named_condition.hpp at line 5, boost/interprocess/sync/named_condition_any.hpp at line 5, boost/interprocess/sync/named_mutex.hpp at line 5, boost/interprocess/sync/named_recursive_mutex.hpp at line 5, boost/interprocess/sync/named_semaphore.hpp at line 5, boost/interprocess/sync/named_sharable_mutex.hpp at line 5, boost/interprocess/sync/named_upgradable_mutex.hpp at line 5, boost/interprocess/sync/null_mutex.hpp at line 5, boost/interprocess/sync/posix/condition.hpp at line 5, boost/interprocess/sync/posix/mutex.hpp at line 5, boost/interprocess/sync/posix/named_mutex.hpp at line 5, boost/interprocess/sync/posix/named_semaphore.hpp at line 5, boost/interprocess/sync/posix/pthread_helpers.hpp at line 5, boost/interprocess/sync/posix/ptime_to_timespec.hpp at line 5, boost/interprocess/sync/posix/recursive_mutex.hpp at line 5, boost/interprocess/sync/posix/semaphore.hpp at line 5, boost/interprocess/sync/posix/semaphore_wrapper.hpp at line 5, boost/interprocess/sync/scoped_lock.hpp at line 5, boost/interprocess/sync/sharable_lock.hpp at line 5, boost/interprocess/sync/shm/named_condition.hpp at line 5, boost/interprocess/sync/shm/named_condition_any.hpp at line 5, boost/interprocess/sync/shm/named_mutex.hpp at line 5, boost/interprocess/sync/shm/named_recursive_mutex.hpp at line 5, boost/interprocess/sync/shm/named_semaphore.hpp at line 5, boost/interprocess/sync/shm/named_upgradable_mutex.hpp at line 5, boost/interprocess/sync/spin/condition.hpp at line 5, boost/interprocess/sync/spin/mutex.hpp at line 5, boost/interprocess/sync/spin/recursive_mutex.hpp at line 5, boost/interprocess/sync/spin/semaphore.hpp at line 5, boost/interprocess/sync/upgradable_lock.hpp at line 5, boost/interprocess/sync/windows/condition.hpp at line 5, boost/interprocess/sync/windows/mutex.hpp at line 5, boost/interprocess/sync/windows/recursive_mutex.hpp at line 5, boost/interprocess/sync/windows/semaphore.hpp at line 5, boost/interprocess/sync/windows/sync_utils.hpp at line 5, boost/interprocess/windows_shared_memory.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/allocators/adaptive_pool.hpp [3:5]
+ boost/interprocess/allocators/allocator.hpp [3:5]
+ boost/interprocess/allocators/cached_adaptive_pool.hpp [3:5]
+ boost/interprocess/allocators/cached_node_allocator.hpp [3:5]
+ boost/interprocess/allocators/detail/adaptive_node_pool.hpp [3:5]
+ boost/interprocess/allocators/detail/node_pool.hpp [3:5]
+ boost/interprocess/allocators/node_allocator.hpp [3:5]
+ boost/interprocess/allocators/private_adaptive_pool.hpp [3:5]
+ boost/interprocess/allocators/private_node_allocator.hpp [3:5]
+ boost/interprocess/anonymous_shared_memory.hpp [3:5]
+ boost/interprocess/creation_tags.hpp [3:5]
+ boost/interprocess/detail/cast_tags.hpp [3:5]
+ boost/interprocess/detail/config_begin.hpp [3:5]
+ boost/interprocess/detail/config_end.hpp [3:5]
+ boost/interprocess/detail/in_place_interface.hpp [3:5]
+ boost/interprocess/detail/intersegment_ptr.hpp [3:5]
+ boost/interprocess/detail/managed_memory_impl.hpp [3:5]
+ boost/interprocess/detail/managed_multi_shared_memory.hpp [3:5]
+ boost/interprocess/detail/min_max.hpp [3:3]
+ boost/interprocess/detail/named_proxy.hpp [3:5]
+ boost/interprocess/detail/os_file_functions.hpp [3:5]
+ boost/interprocess/detail/pointer_type.hpp [3:4]
+ boost/interprocess/detail/posix_time_types_wrk.hpp [3:5]
+ boost/interprocess/detail/segment_manager_helper.hpp [3:5]
+ boost/interprocess/detail/type_traits.hpp [2:3]
+ boost/interprocess/errors.hpp [3:5]
+ boost/interprocess/file_mapping.hpp [3:5]
+ boost/interprocess/indexes/flat_map_index.hpp [3:5]
+ boost/interprocess/indexes/iset_index.hpp [3:5]
+ boost/interprocess/indexes/iunordered_set_index.hpp [3:5]
+ boost/interprocess/indexes/map_index.hpp [3:5]
+ boost/interprocess/indexes/null_index.hpp [3:5]
+ boost/interprocess/indexes/unordered_map_index.hpp [3:5]
+ boost/interprocess/interprocess_fwd.hpp [3:5]
+ boost/interprocess/ipc/message_queue.hpp [3:5]
+ boost/interprocess/managed_external_buffer.hpp [3:5]
+ boost/interprocess/managed_heap_memory.hpp [3:5]
+ boost/interprocess/managed_mapped_file.hpp [3:5]
+ boost/interprocess/managed_shared_memory.hpp [3:5]
+ boost/interprocess/managed_windows_shared_memory.hpp [3:5]
+ boost/interprocess/mapped_region.hpp [3:5]
+ boost/interprocess/mem_algo/detail/mem_algo_common.hpp [3:5]
+ boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp [3:5]
+ boost/interprocess/mem_algo/rbtree_best_fit.hpp [3:5]
+ boost/interprocess/mem_algo/simple_seq_fit.hpp [3:5]
+ boost/interprocess/permissions.hpp [3:5]
+ boost/interprocess/segment_manager.hpp [3:5]
+ boost/interprocess/shared_memory_object.hpp [3:5]
+ boost/interprocess/streams/bufferstream.hpp [3:5]
+ boost/interprocess/streams/vectorstream.hpp [3:5]
+ boost/interprocess/sync/detail/condition_algorithm_8a.hpp [3:5]
+ boost/interprocess/sync/file_lock.hpp [3:5]
+ boost/interprocess/sync/interprocess_condition.hpp [3:5]
+ boost/interprocess/sync/interprocess_mutex.hpp [3:5]
+ boost/interprocess/sync/interprocess_recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/interprocess_semaphore.hpp [3:5]
+ boost/interprocess/sync/interprocess_sharable_mutex.hpp [7:9]
+ boost/interprocess/sync/interprocess_upgradable_mutex.hpp [5:7]
+ boost/interprocess/sync/lock_options.hpp [3:5]
+ boost/interprocess/sync/mutex_family.hpp [3:5]
+ boost/interprocess/sync/named_condition.hpp [3:5]
+ boost/interprocess/sync/named_condition_any.hpp [3:5]
+ boost/interprocess/sync/named_mutex.hpp [3:5]
+ boost/interprocess/sync/named_recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/named_semaphore.hpp [3:5]
+ boost/interprocess/sync/named_sharable_mutex.hpp [3:5]
+ boost/interprocess/sync/named_upgradable_mutex.hpp [3:5]
+ boost/interprocess/sync/null_mutex.hpp [3:5]
+ boost/interprocess/sync/posix/condition.hpp [3:5]
+ boost/interprocess/sync/posix/mutex.hpp [3:5]
+ boost/interprocess/sync/posix/named_mutex.hpp [3:5]
+ boost/interprocess/sync/posix/named_semaphore.hpp [3:5]
+ boost/interprocess/sync/posix/pthread_helpers.hpp [3:5]
+ boost/interprocess/sync/posix/ptime_to_timespec.hpp [3:5]
+ boost/interprocess/sync/posix/recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/posix/semaphore.hpp [3:5]
+ boost/interprocess/sync/posix/semaphore_wrapper.hpp [3:5]
+ boost/interprocess/sync/scoped_lock.hpp [3:5]
+ boost/interprocess/sync/sharable_lock.hpp [3:5]
+ boost/interprocess/sync/shm/named_condition.hpp [3:5]
+ boost/interprocess/sync/shm/named_condition_any.hpp [3:5]
+ boost/interprocess/sync/shm/named_mutex.hpp [3:5]
+ boost/interprocess/sync/shm/named_recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/shm/named_semaphore.hpp [3:5]
+ boost/interprocess/sync/shm/named_upgradable_mutex.hpp [3:5]
+ boost/interprocess/sync/spin/condition.hpp [3:5]
+ boost/interprocess/sync/spin/mutex.hpp [3:5]
+ boost/interprocess/sync/spin/recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/spin/semaphore.hpp [3:5]
+ boost/interprocess/sync/upgradable_lock.hpp [3:5]
+ boost/interprocess/sync/windows/condition.hpp [3:5]
+ boost/interprocess/sync/windows/mutex.hpp [3:5]
+ boost/interprocess/sync/windows/recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/windows/semaphore.hpp [3:5]
+ boost/interprocess/sync/windows/sync_utils.hpp [3:5]
+ boost/interprocess/windows_shared_memory.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL eb6bb6f91accb539f5892840b9273ed5
+BELONGS ya.make
+ License text:
+ /* Copyright (c) 2002,2003, 2007 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/dst_rules.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL eb972dd55e000e751d7fd37efbdbfa39
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/connection.hpp at line 9, boost/signals2/deconstruct_ptr.hpp at line 10, boost/signals2/detail/signal_template.hpp at line 9, boost/signals2/detail/signals_common_macros.hpp at line 7, boost/signals2/detail/slot_call_iterator.hpp at line 5, boost/signals2/detail/slot_groups.hpp at line 5, boost/signals2/detail/slot_template.hpp at line 5, boost/signals2/detail/tracked_objects_visitor.hpp at line 5, boost/signals2/optional_last_value.hpp at line 5, boost/signals2/postconstructible.hpp at line 10, boost/signals2/predestructible.hpp at line 10, boost/signals2/preprocessed_signal.hpp at line 9, boost/signals2/shared_connection_block.hpp at line 5, boost/signals2/signal_base.hpp at line 5, boost/signals2/slot_base.hpp at line 5
+ License text:
+ // Copyright Frank Mori Hess 2007-2008.
+ // Distributed under the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/connection.hpp [7:9]
+ boost/signals2/deconstruct_ptr.hpp [8:8]
+ boost/signals2/detail/signal_template.hpp [7:7]
+ boost/signals2/detail/signals_common_macros.hpp [5:7]
+ boost/signals2/detail/slot_call_iterator.hpp [3:6]
+ boost/signals2/detail/slot_groups.hpp [3:5]
+ boost/signals2/detail/slot_template.hpp [3:7]
+ boost/signals2/detail/tracked_objects_visitor.hpp [3:7]
+ boost/signals2/optional_last_value.hpp [3:6]
+ boost/signals2/postconstructible.hpp [8:8]
+ boost/signals2/predestructible.hpp [8:8]
+ boost/signals2/preprocessed_signal.hpp [7:9]
+ boost/signals2/shared_connection_block.hpp [3:5]
+ boost/signals2/signal_base.hpp [3:5]
+ boost/signals2/slot_base.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL eba1043e8dcee6c64ce99ad2b5a99136
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/utility/base_from_member.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/utility/base_from_member.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ebd56477946bcb207d304fc80a8cfbaa
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2016-2017 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/formulas/differential_quantities.hpp [3:3]
+ boost/geometry/formulas/sjoberg_intersection.hpp [3:3]
+ boost/geometry/formulas/thomas_direct.hpp [3:3]
+ boost/geometry/formulas/vertex_latitude.hpp [3:3]
+ boost/geometry/formulas/vertex_longitude.hpp [3:3]
+ boost/geometry/strategies/azimuth.hpp [3:5]
+ boost/geometry/strategies/cartesian/azimuth.hpp [3:5]
+ boost/geometry/strategies/envelope.hpp [3:5]
+ boost/geometry/strategies/geographic/azimuth.hpp [3:5]
+ boost/geometry/strategies/spherical/azimuth.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ec3c1b709196af39dada4f5a515a0bea
+BELONGS ya.make
+ License text:
+ Copyright 2005-2007 Adobe Systems Incorporated
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/gil/algorithm.hpp [2:2]
+ boost/gil/bit_aligned_pixel_iterator.hpp [2:2]
+ boost/gil/bit_aligned_pixel_reference.hpp [2:2]
+ boost/gil/channel.hpp [2:2]
+ boost/gil/channel_algorithm.hpp [2:2]
+ boost/gil/cmyk.hpp [2:2]
+ boost/gil/color_base.hpp [2:2]
+ boost/gil/color_base_algorithm.hpp [2:2]
+ boost/gil/color_convert.hpp [2:2]
+ boost/gil/deprecated.hpp [2:2]
+ boost/gil/device_n.hpp [2:2]
+ boost/gil/extension/dynamic_image/algorithm.hpp [2:2]
+ boost/gil/extension/dynamic_image/any_image.hpp [2:2]
+ boost/gil/extension/dynamic_image/any_image_view.hpp [2:2]
+ boost/gil/extension/dynamic_image/apply_operation.hpp [2:2]
+ boost/gil/extension/dynamic_image/apply_operation_base.hpp [2:2]
+ boost/gil/extension/dynamic_image/dynamic_at_c.hpp [2:2]
+ boost/gil/extension/dynamic_image/dynamic_image_all.hpp [2:2]
+ boost/gil/extension/dynamic_image/image_view_factory.hpp [2:2]
+ boost/gil/extension/dynamic_image/reduce.hpp [2:2]
+ boost/gil/extension/dynamic_image/variant.hpp [2:2]
+ boost/gil/extension/io/dynamic_io.hpp [2:2]
+ boost/gil/extension/io/io_error.hpp [2:2]
+ boost/gil/extension/io/jpeg_dynamic_io.hpp [2:2]
+ boost/gil/extension/io/jpeg_io.hpp [2:2]
+ boost/gil/extension/io/jpeg_io_private.hpp [2:2]
+ boost/gil/extension/io/png_dynamic_io.hpp [2:2]
+ boost/gil/extension/io/png_io.hpp [2:2]
+ boost/gil/extension/io/png_io_private.hpp [2:2]
+ boost/gil/extension/io/tiff_dynamic_io.hpp [2:2]
+ boost/gil/extension/io/tiff_io.hpp [2:2]
+ boost/gil/gil_all.hpp [2:2]
+ boost/gil/gil_concept.hpp [2:2]
+ boost/gil/gil_config.hpp [2:2]
+ boost/gil/gray.hpp [2:2]
+ boost/gil/image.hpp [2:2]
+ boost/gil/image_view.hpp [2:2]
+ boost/gil/image_view_factory.hpp [2:2]
+ boost/gil/iterator_from_2d.hpp [2:2]
+ boost/gil/locator.hpp [2:2]
+ boost/gil/metafunctions.hpp [2:2]
+ boost/gil/packed_pixel.hpp [2:2]
+ boost/gil/pixel.hpp [2:2]
+ boost/gil/pixel_iterator.hpp [2:2]
+ boost/gil/pixel_iterator_adaptor.hpp [2:2]
+ boost/gil/planar_pixel_iterator.hpp [2:2]
+ boost/gil/planar_pixel_reference.hpp [2:2]
+ boost/gil/position_iterator.hpp [2:2]
+ boost/gil/rgb.hpp [2:2]
+ boost/gil/rgba.hpp [2:2]
+ boost/gil/step_iterator.hpp [2:2]
+ boost/gil/typedefs.hpp [2:2]
+ boost/gil/utilities.hpp [2:2]
+ boost/gil/virtual_locator.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL ec409aaa055f9ff0ccdde38e327ecdf4
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Copyright (c) 2009-2010 Christopher Schmidt
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/std_pair.hpp [2:4]
+ boost/fusion/adapted/struct.hpp [2:4]
+ boost/fusion/adapted/struct/detail/at_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/begin_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/category_of_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/deref_data_impl.hpp [2:2]
+ boost/fusion/adapted/struct/detail/deref_impl.hpp [2:2]
+ boost/fusion/adapted/struct/detail/end_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/extension.hpp [2:4]
+ boost/fusion/adapted/struct/detail/is_sequence_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/is_view_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/key_of_impl.hpp [2:2]
+ boost/fusion/adapted/struct/detail/size_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/value_at_impl.hpp [2:4]
+ boost/fusion/adapted/struct/detail/value_of_data_impl.hpp [2:2]
+ boost/fusion/adapted/struct/detail/value_of_impl.hpp [2:2]
+ boost/fusion/algorithm/iteration/detail/fold.hpp [2:5]
+ boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp [2:4]
+ boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp [2:3]
+ boost/fusion/algorithm/iteration/fold.hpp [2:5]
+ boost/fusion/algorithm/iteration/fold.hpp [35:37]
+ boost/fusion/algorithm/iteration/reverse_fold.hpp [37:38]
+
+KEEP COPYRIGHT_SERVICE_LABEL ec75cff59ada83cd656e0f98a04ceb7d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/rolling_mean.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/rolling_mean.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL ecaa20be5d98e1e0a2f58d58307540fd
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013, 2014.
+ // Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/relate/follow_helpers.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL eccfc79f4bc874aa87c7a2d097dd730f
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007, 2008 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/make_shared.hpp [6:6]
+ boost/signals2/deconstruct.hpp [16:18]
+
+KEEP COPYRIGHT_SERVICE_LABEL ecdca441295ae759827f996dedc739c0
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/device/mapped_file.hpp at line 5, libs/iostreams/src/lzma.cpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/device/mapped_file.hpp [1:5]
+ libs/iostreams/src/lzma.cpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL ecfc68e71298029a5aa1e76441c84c15
+BELONGS ya.make
+ License text:
+ // (C) Copyright Jessica Hamilton 2014.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/platform/haiku.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ed1a89a5137856dcab08de627f32141d
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2002-2006
+ // Copyright David Abrahams 2002-2003
+ // Copyright Daniel Walker 2007
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/aux_/config/has_xxx.hpp [5:6]
+ boost/mpl/has_xxx.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL ed1b188a6ba6638935d97d62b3f63c2c
+BELONGS ya.make
+ License text:
+ // Copyright 2005 Daniel Wallin.
+ // Copyright 2005 Joel de Guzman.
+ // Copyright 2005 Dan Marsden.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/stl/algorithm/detail/begin.hpp [1:3]
+ boost/phoenix/stl/algorithm/detail/decay_array.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/end.hpp [1:3]
+ boost/phoenix/stl/algorithm/detail/has_equal_range.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_find.hpp [2:4]
+ boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_remove.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_remove_if.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_reverse.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_sort.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_unique.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/has_upper_bound.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_hash_map.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_hash_set.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_list.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_map.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_std_set.hpp [1:2]
+ boost/phoenix/stl/algorithm/detail/is_unordered_set_or_map.hpp [2:4]
+ boost/phoenix/stl/algorithm/iteration.hpp [1:3]
+ boost/phoenix/stl/algorithm/querying.hpp [1:5]
+ boost/phoenix/stl/algorithm/transformation.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ed6bcd8dbc21acf811b7047c38c1a3b9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/unordered/unordered_map_fwd.hpp at line 4, boost/unordered/unordered_set_fwd.hpp at line 4
+ License text:
+ // Copyright (C) 2008-2011 Daniel James.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/unordered/unordered_map_fwd.hpp [2:4]
+ boost/unordered/unordered_set_fwd.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ed74a56708958a0e69848c4205e33dae
+BELONGS ya.make
+ License text:
+ // (C) Copyright Christopher Jefferson 2011.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/stdlib/libcpp.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL edcaf1fe274bdd8386838aee1de0e9b8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/detail/_cassert.h at line 4, boost/predef/detail/_exception.h at line 4, boost/predef/detail/test.h at line 4
+ License text:
+ Copyright Rene Rivera 2011-2012
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/predef/detail/_cassert.h [2:4]
+ boost/predef/detail/_exception.h [2:4]
+ boost/predef/detail/test.h [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL edcba52e7efc035e59b3977cc8670681
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2012 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/qi/copy.hpp [2:2]
+ boost/spirit/home/support/auto.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL edd357e5bb31d28a8d2f7af650d68345
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2006-2009 Dmitry Bufistov and Andrey Parfenov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/howard_cycle_ratio.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL eddab603f446c4316fdb122bfdbc8e84
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2006-8 Anthony Williams
+ // (C) Copyright 2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/pthread/shared_mutex.hpp [4:5]
+ boost/thread/win32/basic_recursive_mutex.hpp [6:7]
+ boost/thread/win32/basic_timed_mutex.hpp [6:7]
+ boost/thread/win32/shared_mutex.hpp [4:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ede994e659efc353e0f29d6360b48dda
+BELONGS ya.make
+ License text:
+ Copyright Paul Mensonides 2003
+ Copyright Aleksey Gurtovoy 2003-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp [5:6]
+ boost/mpl/aux_/preprocessor/is_seq.hpp [5:6]
+ boost/mpl/aux_/preprocessor/token_equal.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL edf0d1dafd8396a0a845cddaf95f73bc
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2002-2006 Marcin Kalicinski
+ // Copyright (C) 2009 Sebastian Redl
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_tree/detail/exception_implementation.hpp [2:3]
+ boost/property_tree/detail/ptree_implementation.hpp [2:3]
+ boost/property_tree/exceptions.hpp [2:3]
+ boost/property_tree/id_translator.hpp [2:2]
+ boost/property_tree/ini_parser.hpp [2:3]
+ boost/property_tree/ptree.hpp [2:3]
+ boost/property_tree/ptree_fwd.hpp [2:3]
+ boost/property_tree/stream_translator.hpp [2:2]
+ boost/property_tree/string_path.hpp [2:2]
+ boost/property_tree/xml_parser.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ee741c1374d2ba8f90a01a789e14e65b
+BELONGS ya.make
+ License text:
+ // Copyright Frank Mori Hess 2007-2010.
+ // Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/expired_slot.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ee98626c63f8749be5d12af9adcde601
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/metaparse/v1/except.hpp at line 6, boost/metaparse/v1/one_char.hpp at line 6
+ License text:
+ // Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2011.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/metaparse/v1/except.hpp [4:6]
+ boost/metaparse/v1/one_char.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL eecb44649514b05c6320f2629932cbe8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/suffix.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/detail/suffix.hpp [4:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL eef36e86f5884df0402a5f7ab97a623e
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009, 2011 Helge Bahmann
+ * Copyright (c) 2009 Phil Endecott
+ * Copyright (c) 2013 Tim Blechmann
+ * Linux-specific code by Phil Endecott
+ * Copyright (c) 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/caps_linux_arm.hpp [6:10]
+ boost/atomic/detail/ops_linux_arm.hpp [6:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL eef8c39388037a9d3f0f99a5d323045d
+BELONGS libs/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/impl/junit_log_formatter.ipp at line 3, boost/test/output/junit_log_formatter.hpp at line 3, libs/test/src/junit_log_formatter.cpp at line 3
+ License text:
+ // (C) Copyright 2016 Raffi Enficiaud.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/test/impl/junit_log_formatter.ipp [1:3]
+ boost/test/output/junit_log_formatter.hpp [1:3]
+ libs/test/src/junit_log_formatter.cpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ef065a1edbfbbc1a66c01819893fb0ae
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Piotr Wyderski
+ // Copyright (c) 2006 Tomas Puverle
+ // Copyright (c) 2006 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp [12:14]
+ boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp [11:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL ef7d8354f40bb9b4612d75303421dce4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/algo/detail/heap_sort.hpp at line 5, boost/move/algo/detail/is_sorted.hpp at line 7, boost/move/algo/detail/pdqsort.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2017-2018.
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/move/algo/detail/heap_sort.hpp [3:5]
+ boost/move/algo/detail/is_sorted.hpp [5:7]
+ boost/move/algo/detail/pdqsort.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL ef855b94e2b0220e8b57c56cf044988c
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2009-2013 Tim Blechmann
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lockfree/spsc_queue.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f06bc27adb2e965a6733be74af56d166
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2011 Thomas Bernard
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/repository/include/qi_keywords.hpp [2:5]
+ boost/spirit/repository/include/qi_kwd.hpp [2:5]
+ boost/spirit/repository/include/qi_kwd.hpp [21:24]
+
+KEEP COPYRIGHT_SERVICE_LABEL f091662b8bb6cc43b1bae6fb4713d892
+BELONGS ya.make
+ License text:
+ // Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+ // Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)
+ // Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/type_traits/conversion_traits.hpp [2:4]
+ boost/type_traits/detail/is_function_ptr_helper.hpp [2:3]
+ boost/type_traits/function_traits.hpp [2:4]
+ boost/type_traits/is_convertible.hpp [2:4]
+ boost/type_traits/is_function.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f0b8ed03b3e6768e72562e606eb71763
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/common/file_vector.hpp at line 9
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/sort/common/file_vector.hpp [7:9]
+
+KEEP COPYRIGHT_SERVICE_LABEL f0f1ab3959ce5327ccd605b1a43fefbf
+BELONGS ya.make
+ License text:
+ // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry.hpp [8:8]
+ boost/geometry/algorithms/append.hpp [14:14]
+ boost/geometry/algorithms/area.hpp [13:13]
+ boost/geometry/algorithms/assign.hpp [9:9]
+ boost/geometry/algorithms/buffer.hpp [12:12]
+ boost/geometry/algorithms/centroid.hpp [15:15]
+ boost/geometry/algorithms/clear.hpp [8:8]
+ boost/geometry/algorithms/comparable_distance.hpp [13:13]
+ boost/geometry/algorithms/convert.hpp [13:13]
+ boost/geometry/algorithms/convex_hull.hpp [14:14]
+ boost/geometry/algorithms/correct.hpp [13:13]
+ boost/geometry/algorithms/covered_by.hpp [13:13]
+ boost/geometry/algorithms/crosses.hpp [14:14]
+ boost/geometry/algorithms/detail/as_range.hpp [8:8]
+ boost/geometry/algorithms/detail/assign_box_corners.hpp [8:8]
+ boost/geometry/algorithms/detail/assign_indexed_point.hpp [8:8]
+ boost/geometry/algorithms/detail/assign_values.hpp [8:8]
+ boost/geometry/algorithms/detail/calculate_null.hpp [8:8]
+ boost/geometry/algorithms/detail/calculate_sum.hpp [9:9]
+ boost/geometry/algorithms/detail/comparable_distance/implementation.hpp [13:13]
+ boost/geometry/algorithms/detail/comparable_distance/interface.hpp [13:13]
+ boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp [8:8]
+ boost/geometry/algorithms/detail/convert_point_to_point.hpp [8:8]
+ boost/geometry/algorithms/detail/counting.hpp [14:14]
+ boost/geometry/algorithms/detail/covered_by/implementation.hpp [13:13]
+ boost/geometry/algorithms/detail/covered_by/interface.hpp [13:13]
+ boost/geometry/algorithms/detail/disjoint/areal_areal.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/box_box.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/implementation.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/interface.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/linear_areal.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/linear_linear.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/point_box.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/point_geometry.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/point_point.hpp [15:15]
+ boost/geometry/algorithms/detail/disjoint/segment_box.hpp [16:16]
+ boost/geometry/algorithms/detail/distance/backward_compatibility.hpp [14:14]
+ boost/geometry/algorithms/detail/distance/default_strategies.hpp [14:14]
+ boost/geometry/algorithms/detail/distance/implementation.hpp [14:14]
+ boost/geometry/algorithms/detail/distance/interface.hpp [15:15]
+ boost/geometry/algorithms/detail/distance/point_to_geometry.hpp [14:14]
+ boost/geometry/algorithms/detail/envelope/implementation.hpp [14:14]
+ boost/geometry/algorithms/detail/envelope/interface.hpp [15:15]
+ boost/geometry/algorithms/detail/envelope/range.hpp [14:14]
+ boost/geometry/algorithms/detail/equals/collect_vectors.hpp [14:14]
+ boost/geometry/algorithms/detail/equals/implementation.hpp [15:15]
+ boost/geometry/algorithms/detail/equals/interface.hpp [15:15]
+ boost/geometry/algorithms/detail/equals/point_point.hpp [15:15]
+ boost/geometry/algorithms/detail/expand/implementation.hpp [14:14]
+ boost/geometry/algorithms/detail/expand/indexed.hpp [16:16]
+ boost/geometry/algorithms/detail/expand/interface.hpp [15:15]
+ boost/geometry/algorithms/detail/expand/point.hpp [16:16]
+ boost/geometry/algorithms/detail/for_each_range.hpp [8:8]
+ boost/geometry/algorithms/detail/intersects/implementation.hpp [14:14]
+ boost/geometry/algorithms/detail/intersects/interface.hpp [14:14]
+ boost/geometry/algorithms/detail/multi_modify.hpp [12:12]
+ boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp [8:8]
+ boost/geometry/algorithms/detail/multi_sum.hpp [8:8]
+ boost/geometry/algorithms/detail/not.hpp [14:14]
+ boost/geometry/algorithms/detail/overlaps/implementation.hpp [13:13]
+ boost/geometry/algorithms/detail/overlaps/interface.hpp [13:13]
+ boost/geometry/algorithms/detail/point_on_border.hpp [12:12]
+ boost/geometry/algorithms/detail/sections/range_by_section.hpp [8:8]
+ boost/geometry/algorithms/detail/sections/sectionalize.hpp [15:15]
+ boost/geometry/algorithms/detail/touches/implementation.hpp [14:14]
+ boost/geometry/algorithms/detail/touches/interface.hpp [14:14]
+ boost/geometry/algorithms/detail/within/implementation.hpp [13:13]
+ boost/geometry/algorithms/detail/within/interface.hpp [13:13]
+ boost/geometry/algorithms/detail/within/point_in_geometry.hpp [14:14]
+ boost/geometry/algorithms/detail/within/within_no_turns.hpp [11:11]
+ boost/geometry/algorithms/disjoint.hpp [15:15]
+ boost/geometry/algorithms/dispatch/disjoint.hpp [15:15]
+ boost/geometry/algorithms/dispatch/distance.hpp [14:14]
+ boost/geometry/algorithms/dispatch/envelope.hpp [13:13]
+ boost/geometry/algorithms/dispatch/expand.hpp [15:15]
+ boost/geometry/algorithms/distance.hpp [14:14]
+ boost/geometry/algorithms/envelope.hpp [13:13]
+ boost/geometry/algorithms/equals.hpp [15:15]
+ boost/geometry/algorithms/expand.hpp [14:14]
+ boost/geometry/algorithms/for_each.hpp [14:14]
+ boost/geometry/algorithms/intersects.hpp [14:14]
+ boost/geometry/algorithms/length.hpp [14:14]
+ boost/geometry/algorithms/make.hpp [8:8]
+ boost/geometry/algorithms/not_implemented.hpp [13:13]
+ boost/geometry/algorithms/num_geometries.hpp [13:13]
+ boost/geometry/algorithms/num_interior_rings.hpp [14:14]
+ boost/geometry/algorithms/num_points.hpp [14:14]
+ boost/geometry/algorithms/overlaps.hpp [13:13]
+ boost/geometry/algorithms/perimeter.hpp [13:13]
+ boost/geometry/algorithms/reverse.hpp [9:9]
+ boost/geometry/algorithms/simplify.hpp [8:8]
+ boost/geometry/algorithms/touches.hpp [14:14]
+ boost/geometry/algorithms/transform.hpp [9:9]
+ boost/geometry/algorithms/unique.hpp [9:9]
+ boost/geometry/algorithms/within.hpp [13:13]
+ boost/geometry/arithmetic/arithmetic.hpp [8:8]
+ boost/geometry/arithmetic/dot_product.hpp [8:8]
+ boost/geometry/core/access.hpp [8:8]
+ boost/geometry/core/closure.hpp [13:13]
+ boost/geometry/core/coordinate_dimension.hpp [8:8]
+ boost/geometry/core/coordinate_system.hpp [8:8]
+ boost/geometry/core/coordinate_type.hpp [8:8]
+ boost/geometry/core/cs.hpp [13:13]
+ boost/geometry/core/exception.hpp [13:13]
+ boost/geometry/core/exterior_ring.hpp [8:8]
+ boost/geometry/core/geometry_id.hpp [8:8]
+ boost/geometry/core/interior_rings.hpp [8:8]
+ boost/geometry/core/interior_type.hpp [8:8]
+ boost/geometry/core/is_areal.hpp [8:8]
+ boost/geometry/core/mutable_range.hpp [8:8]
+ boost/geometry/core/point_order.hpp [13:13]
+ boost/geometry/core/point_type.hpp [8:8]
+ boost/geometry/core/radian_access.hpp [13:13]
+ boost/geometry/core/radius.hpp [13:13]
+ boost/geometry/core/reverse_dispatch.hpp [8:8]
+ boost/geometry/core/ring_type.hpp [13:13]
+ boost/geometry/core/tag.hpp [8:8]
+ boost/geometry/core/tag_cast.hpp [8:8]
+ boost/geometry/core/tags.hpp [13:13]
+ boost/geometry/core/topological_dimension.hpp [8:8]
+ boost/geometry/geometries/adapted/boost_tuple.hpp [8:8]
+ boost/geometry/geometries/adapted/c_array.hpp [8:8]
+ boost/geometry/geometries/adapted/std_pair_as_segment.hpp [8:8]
+ boost/geometry/geometries/box.hpp [8:8]
+ boost/geometry/geometries/concepts/box_concept.hpp [8:8]
+ boost/geometry/geometries/concepts/check.hpp [8:8]
+ boost/geometry/geometries/concepts/linestring_concept.hpp [8:8]
+ boost/geometry/geometries/concepts/multi_linestring_concept.hpp [8:8]
+ boost/geometry/geometries/concepts/multi_point_concept.hpp [8:8]
+ boost/geometry/geometries/concepts/multi_polygon_concept.hpp [8:8]
+ boost/geometry/geometries/concepts/point_concept.hpp [13:13]
+ boost/geometry/geometries/concepts/polygon_concept.hpp [8:8]
+ boost/geometry/geometries/concepts/ring_concept.hpp [8:8]
+ boost/geometry/geometries/concepts/segment_concept.hpp [8:8]
+ boost/geometry/geometries/geometries.hpp [8:8]
+ boost/geometry/geometries/linestring.hpp [9:9]
+ boost/geometry/geometries/multi_linestring.hpp [9:9]
+ boost/geometry/geometries/multi_point.hpp [9:9]
+ boost/geometry/geometries/multi_polygon.hpp [9:9]
+ boost/geometry/geometries/point.hpp [14:14]
+ boost/geometry/geometries/point_xy.hpp [8:8]
+ boost/geometry/geometries/polygon.hpp [9:9]
+ boost/geometry/geometries/register/box.hpp [8:8]
+ boost/geometry/geometries/register/linestring.hpp [8:8]
+ boost/geometry/geometries/register/multi_linestring.hpp [8:8]
+ boost/geometry/geometries/register/multi_point.hpp [8:8]
+ boost/geometry/geometries/register/multi_polygon.hpp [8:8]
+ boost/geometry/geometries/register/point.hpp [8:8]
+ boost/geometry/geometries/register/ring.hpp [8:8]
+ boost/geometry/geometries/register/segment.hpp [8:8]
+ boost/geometry/geometries/ring.hpp [9:9]
+ boost/geometry/geometries/segment.hpp [8:8]
+ boost/geometry/geometries/variant.hpp [8:8]
+ boost/geometry/geometry.hpp [14:14]
+ boost/geometry/io/dsv/write.hpp [9:9]
+ boost/geometry/io/io.hpp [8:8]
+ boost/geometry/io/svg/svg_mapper.hpp [12:12]
+ boost/geometry/io/svg/write.hpp [12:12]
+ boost/geometry/io/svg/write_svg.hpp [12:12]
+ boost/geometry/io/svg/write_svg_multi.hpp [11:11]
+ boost/geometry/io/wkt/detail/prefix.hpp [8:8]
+ boost/geometry/io/wkt/detail/wkt_multi.hpp [8:8]
+ boost/geometry/io/wkt/read.hpp [14:14]
+ boost/geometry/io/wkt/stream.hpp [8:8]
+ boost/geometry/io/wkt/wkt.hpp [8:8]
+ boost/geometry/io/wkt/write.hpp [14:14]
+ boost/geometry/iterators/base.hpp [8:8]
+ boost/geometry/iterators/closing_iterator.hpp [8:8]
+ boost/geometry/iterators/ever_circling_iterator.hpp [8:8]
+ boost/geometry/multi/algorithms/append.hpp [14:14]
+ boost/geometry/multi/algorithms/area.hpp [8:8]
+ boost/geometry/multi/algorithms/centroid.hpp [8:8]
+ boost/geometry/multi/algorithms/clear.hpp [8:8]
+ boost/geometry/multi/algorithms/convert.hpp [8:8]
+ boost/geometry/multi/algorithms/correct.hpp [8:8]
+ boost/geometry/multi/algorithms/covered_by.hpp [12:12]
+ boost/geometry/multi/algorithms/detail/for_each_range.hpp [8:8]
+ boost/geometry/multi/algorithms/detail/modify.hpp [8:8]
+ boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp [8:8]
+ boost/geometry/multi/algorithms/detail/multi_sum.hpp [8:8]
+ boost/geometry/multi/algorithms/detail/point_on_border.hpp [11:11]
+ boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp [11:11]
+ boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp [11:11]
+ boost/geometry/multi/algorithms/distance.hpp [13:13]
+ boost/geometry/multi/algorithms/envelope.hpp [8:8]
+ boost/geometry/multi/algorithms/equals.hpp [8:8]
+ boost/geometry/multi/algorithms/for_each.hpp [8:8]
+ boost/geometry/multi/algorithms/length.hpp [8:8]
+ boost/geometry/multi/algorithms/num_geometries.hpp [8:8]
+ boost/geometry/multi/algorithms/num_interior_rings.hpp [13:13]
+ boost/geometry/multi/algorithms/num_points.hpp [13:13]
+ boost/geometry/multi/algorithms/perimeter.hpp [8:8]
+ boost/geometry/multi/algorithms/reverse.hpp [8:8]
+ boost/geometry/multi/algorithms/simplify.hpp [8:8]
+ boost/geometry/multi/algorithms/transform.hpp [8:8]
+ boost/geometry/multi/algorithms/unique.hpp [8:8]
+ boost/geometry/multi/algorithms/within.hpp [12:12]
+ boost/geometry/multi/core/closure.hpp [8:8]
+ boost/geometry/multi/core/geometry_id.hpp [8:8]
+ boost/geometry/multi/core/interior_rings.hpp [8:8]
+ boost/geometry/multi/core/is_areal.hpp [8:8]
+ boost/geometry/multi/core/point_order.hpp [8:8]
+ boost/geometry/multi/core/point_type.hpp [8:8]
+ boost/geometry/multi/core/ring_type.hpp [11:11]
+ boost/geometry/multi/core/tags.hpp [8:8]
+ boost/geometry/multi/core/topological_dimension.hpp [8:8]
+ boost/geometry/multi/geometries/concepts/check.hpp [8:8]
+ boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp [8:8]
+ boost/geometry/multi/geometries/concepts/multi_point_concept.hpp [8:8]
+ boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp [8:8]
+ boost/geometry/multi/geometries/multi_geometries.hpp [8:8]
+ boost/geometry/multi/geometries/multi_linestring.hpp [8:8]
+ boost/geometry/multi/geometries/multi_point.hpp [8:8]
+ boost/geometry/multi/geometries/multi_polygon.hpp [8:8]
+ boost/geometry/multi/geometries/register/multi_linestring.hpp [8:8]
+ boost/geometry/multi/geometries/register/multi_point.hpp [8:8]
+ boost/geometry/multi/geometries/register/multi_polygon.hpp [8:8]
+ boost/geometry/multi/io/dsv/write.hpp [8:8]
+ boost/geometry/multi/io/wkt/detail/prefix.hpp [8:8]
+ boost/geometry/multi/io/wkt/read.hpp [8:8]
+ boost/geometry/multi/io/wkt/wkt.hpp [8:8]
+ boost/geometry/multi/io/wkt/write.hpp [8:8]
+ boost/geometry/multi/multi.hpp [11:11]
+ boost/geometry/multi/strategies/cartesian/centroid_average.hpp [8:8]
+ boost/geometry/multi/views/detail/range_type.hpp [8:8]
+ boost/geometry/policies/disjoint_interrupt_policy.hpp [15:15]
+ boost/geometry/srs/sphere.hpp [13:13]
+ boost/geometry/srs/spheroid.hpp [13:13]
+ boost/geometry/srs/srs.hpp [13:13]
+ boost/geometry/strategies/agnostic/hull_graham_andrew.hpp [11:11]
+ boost/geometry/strategies/agnostic/point_in_box_by_side.hpp [8:8]
+ boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp [6:6]
+ boost/geometry/strategies/agnostic/point_in_poly_winding.hpp [11:11]
+ boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp [12:12]
+ boost/geometry/strategies/area.hpp [9:9]
+ boost/geometry/strategies/cartesian/area.hpp [14:14]
+ boost/geometry/strategies/cartesian/area_surveyor.hpp [14:14]
+ boost/geometry/strategies/cartesian/box_in_box.hpp [14:14]
+ boost/geometry/strategies/cartesian/centroid_average.hpp [14:14]
+ boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp [13:13]
+ boost/geometry/strategies/cartesian/centroid_weighted_length.hpp [12:12]
+ boost/geometry/strategies/cartesian/distance_projected_point.hpp [13:13]
+ boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp [14:14]
+ boost/geometry/strategies/cartesian/distance_pythagoras.hpp [8:8]
+ boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp [13:13]
+ boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp [13:13]
+ boost/geometry/strategies/cartesian/point_in_box.hpp [13:13]
+ boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp [8:8]
+ boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp [8:8]
+ boost/geometry/strategies/cartesian/point_in_poly_winding.hpp [11:11]
+ boost/geometry/strategies/cartesian/side_by_triangle.hpp [14:14]
+ boost/geometry/strategies/centroid.hpp [8:8]
+ boost/geometry/strategies/compare.hpp [13:13]
+ boost/geometry/strategies/concepts/area_concept.hpp [9:9]
+ boost/geometry/strategies/concepts/centroid_concept.hpp [8:8]
+ boost/geometry/strategies/concepts/convex_hull_concept.hpp [13:13]
+ boost/geometry/strategies/concepts/distance_concept.hpp [13:13]
+ boost/geometry/strategies/concepts/segment_intersect_concept.hpp [8:8]
+ boost/geometry/strategies/concepts/simplify_concept.hpp [8:8]
+ boost/geometry/strategies/concepts/within_concept.hpp [8:8]
+ boost/geometry/strategies/convex_hull.hpp [8:8]
+ boost/geometry/strategies/covered_by.hpp [13:13]
+ boost/geometry/strategies/default_area_result.hpp [9:9]
+ boost/geometry/strategies/default_comparable_distance_result.hpp [13:13]
+ boost/geometry/strategies/default_distance_result.hpp [13:13]
+ boost/geometry/strategies/default_length_result.hpp [13:13]
+ boost/geometry/strategies/default_strategy.hpp [8:8]
+ boost/geometry/strategies/distance.hpp [13:13]
+ boost/geometry/strategies/distance_result.hpp [15:15]
+ boost/geometry/strategies/side.hpp [8:8]
+ boost/geometry/strategies/side_info.hpp [8:8]
+ boost/geometry/strategies/spherical/point_in_poly_winding.hpp [11:11]
+ boost/geometry/strategies/strategies.hpp [15:15]
+ boost/geometry/strategies/strategy_transform.hpp [13:13]
+ boost/geometry/strategies/tags.hpp [8:8]
+ boost/geometry/strategies/transform.hpp [8:8]
+ boost/geometry/strategies/transform/inverse_transformer.hpp [8:8]
+ boost/geometry/strategies/transform/map_transformer.hpp [8:8]
+ boost/geometry/strategies/transform/matrix_transformers.hpp [13:13]
+ boost/geometry/strategies/within.hpp [13:13]
+ boost/geometry/util/add_const_if_c.hpp [8:8]
+ boost/geometry/util/closure_as_bool.hpp [8:8]
+ boost/geometry/util/combine_if.hpp [11:11]
+ boost/geometry/util/compress_variant.hpp [13:13]
+ boost/geometry/util/coordinate_cast.hpp [8:8]
+ boost/geometry/util/for_each_coordinate.hpp [8:8]
+ boost/geometry/util/math.hpp [14:14]
+ boost/geometry/util/order_as_direction.hpp [8:8]
+ boost/geometry/util/parameter_type_of.hpp [8:8]
+ boost/geometry/util/promote_floating_point.hpp [8:8]
+ boost/geometry/util/rational.hpp [8:8]
+ boost/geometry/util/select_calculation_type.hpp [13:13]
+ boost/geometry/util/select_coordinate_type.hpp [13:13]
+ boost/geometry/util/select_most_precise.hpp [13:13]
+ boost/geometry/util/transform_variant.hpp [13:13]
+ boost/geometry/views/box_view.hpp [8:8]
+ boost/geometry/views/closeable_view.hpp [8:8]
+ boost/geometry/views/detail/normalized_view.hpp [11:11]
+ boost/geometry/views/detail/points_view.hpp [8:8]
+ boost/geometry/views/detail/range_type.hpp [8:8]
+ boost/geometry/views/identity_view.hpp [8:8]
+ boost/geometry/views/reversible_view.hpp [8:8]
+ boost/geometry/views/segment_view.hpp [8:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL f135edc02c00b6582ebdd933caabbc00
+BELONGS ya.make
+ License text:
+ // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+ // Copyright 2003 Bruce Barr
+ // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/depth_first_search.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f15f8f43993e18e16026611500a6b2f8
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001-2013 Hartmut Kaiser
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/assert_msg.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL f1833f35f2f6f9d7db5a9bac86c50bf4
+BELONGS libs/thread/ya.make ya.make
+ License text:
+ // (C) Copyright 2005-7 Anthony Williams
+ // (C) Copyright 2007 David Deakins
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/win32/thread_primitives.hpp [6:7]
+ libs/thread/src/win32/thread.cpp [4:6]
+ libs/thread/src/win32/tss_pe.cpp [2:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL f19bb76a109bcd2142b125200d42ea4d
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2011.
+ // (C) Copyright Cray, Inc. 2013
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/cray.hpp [1:4]
+ boost/config/platform/cray.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f1ac7bc8521aa0e32b429682f728df8d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/array.hpp at line 6, boost/preprocessor/config/config.hpp at line 6, boost/preprocessor/facilities.hpp at line 6, boost/preprocessor/library.hpp at line 6, boost/preprocessor/seq.hpp at line 6, boost/preprocessor/tuple/rem.hpp at line 6, boost/preprocessor/tuple/to_seq.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/preprocessor/array.hpp [3:6]
+ boost/preprocessor/config/config.hpp [3:6]
+ boost/preprocessor/facilities.hpp [3:6]
+ boost/preprocessor/library.hpp [3:6]
+ boost/preprocessor/seq.hpp [3:6]
+ boost/preprocessor/tuple/rem.hpp [3:6]
+ boost/preprocessor/tuple/to_seq.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f1d40a1d82c85324753390829c6e1279
+BELONGS ya.make
+ License text:
+ // Copyright 2006 Johan Rade
+ // Copyright 2012 K R Walker
+ // Copyright 2011, 2012 Paul A. Bristow
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/nonfinite_num_facets.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f1f8468601bd581bae0bf23eba4b070b
+BELONGS ya.make
+ License text:
+ // Copyright (c) Jeremy Siek 2001
+ // Copyright (c) Douglas Gregor 2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/biconnected_components.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL f25ed8ad442cba4762a4ba108afb3f71
+BELONGS ya.make
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2013
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/intrusive/any_hook.hpp [3:3]
+ boost/intrusive/derivation_value_traits.hpp [3:3]
+ boost/intrusive/detail/assert.hpp [3:3]
+ boost/intrusive/detail/config_begin.hpp [3:3]
+ boost/intrusive/detail/config_end.hpp [3:3]
+ boost/intrusive/detail/list_iterator.hpp [3:4]
+ boost/intrusive/detail/list_node.hpp [3:4]
+ boost/intrusive/detail/rbtree_node.hpp [3:4]
+ boost/intrusive/detail/slist_iterator.hpp [3:4]
+ boost/intrusive/detail/slist_node.hpp [3:4]
+ boost/intrusive/link_mode.hpp [3:3]
+ boost/intrusive/list_hook.hpp [3:4]
+ boost/intrusive/member_value_traits.hpp [3:3]
+ boost/intrusive/set_hook.hpp [3:4]
+ boost/intrusive/slist_hook.hpp [3:4]
+ boost/intrusive/trivial_value_traits.hpp [3:3]
+ boost/intrusive/unordered_set_hook.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f262c9244ed9c83395a88fc18f2e9a96
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2008 Jan Gaspar
+ // Copyright (c) 2013 Paul A. Bristow // Doxygen comments changed.
+ // Copyright (c) 2013 Antony Polukhin // Move semantics implementation.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/circular_buffer/base.hpp [3:5]
+ boost/circular_buffer/space_optimized.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f292e7aaed3f315448930281fe405402
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005, 2014 Eric Niebler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/list/nil.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f2afe39f6ff7491f267ce9bc28a07daa
+BELONGS ya.make
+ License text:
+ // Copyright 1997-2001 University of Notre Dame.
+ // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/connected_components.hpp [3:4]
+ boost/graph/copy.hpp [3:4]
+ boost/graph/incremental_components.hpp [3:5]
+ boost/graph/minimum_degree_ordering.hpp [3:4]
+ boost/graph/stanford_graph.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f2e8fa2c7f3eaab9a7c6f279d4ecb902
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/concurrent_queues/deque_adaptor.hpp at line 8, boost/thread/concurrent_queues/deque_base.hpp at line 8, boost/thread/concurrent_queues/deque_views.hpp at line 8, boost/thread/concurrent_queues/queue_adaptor.hpp at line 8, boost/thread/concurrent_queues/queue_base.hpp at line 8, boost/thread/concurrent_queues/queue_op_status.hpp at line 8, boost/thread/concurrent_queues/queue_views.hpp at line 8, boost/thread/experimental/config/inline_namespace.hpp at line 8, boost/thread/experimental/exception_list.hpp at line 8, boost/thread/experimental/parallel/v1/exception_list.hpp at line 8, boost/thread/experimental/parallel/v1/inline_namespace.hpp at line 8, boost/thread/experimental/parallel/v2/inline_namespace.hpp at line 8, boost/thread/experimental/task_region.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/concurrent_queues/deque_adaptor.hpp [6:8]
+ boost/thread/concurrent_queues/deque_base.hpp [6:8]
+ boost/thread/concurrent_queues/deque_views.hpp [6:8]
+ boost/thread/concurrent_queues/queue_adaptor.hpp [6:8]
+ boost/thread/concurrent_queues/queue_base.hpp [6:8]
+ boost/thread/concurrent_queues/queue_op_status.hpp [6:8]
+ boost/thread/concurrent_queues/queue_views.hpp [6:8]
+ boost/thread/experimental/config/inline_namespace.hpp [6:8]
+ boost/thread/experimental/exception_list.hpp [6:8]
+ boost/thread/experimental/parallel/v1/exception_list.hpp [6:8]
+ boost/thread/experimental/parallel/v1/inline_namespace.hpp [6:8]
+ boost/thread/experimental/parallel/v2/inline_namespace.hpp [6:8]
+ boost/thread/experimental/task_region.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL f2ea0ebe0ed5b434328b3bbd19527a30
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/common_edg.hpp [1:7]
+ boost/config/compiler/mpw.hpp [1:4]
+ boost/config/compiler/sgi_mipspro.hpp [1:3]
+ boost/config/detail/select_platform_config.hpp [3:6]
+ boost/config/platform/aix.hpp [1:3]
+ boost/config/stdlib/stlport.hpp [1:5]
+ boost/config/stdlib/vacpp.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f3008d52e14a91ed6de12783e5d840df
+BELONGS libs/log/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/log/sinks/text_ipc_message_queue_backend.hpp at line 5, boost/log/utility/ipc/reliable_message_queue.hpp at line 5, boost/log/utility/permissions.hpp at line 5, libs/log/src/posix/ipc_reliable_message_queue.cpp at line 5, libs/log/src/windows/ipc_reliable_message_queue.cpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/log/sinks/text_ipc_message_queue_backend.hpp [2:5]
+ boost/log/utility/ipc/reliable_message_queue.hpp [2:5]
+ boost/log/utility/permissions.hpp [2:5]
+ libs/log/src/posix/ipc_reliable_message_queue.cpp [2:5]
+ libs/log/src/windows/ipc_reliable_message_queue.cpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f30d746d8ccdc43f8396322bb683a3c5
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Xiaogang Zhang
+ // Copyright (c) 2006 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/detail/bessel_i0.hpp [1:4]
+ boost/math/special_functions/detail/bessel_ik.hpp [1:3]
+ boost/math/special_functions/detail/bessel_j0.hpp [1:3]
+ boost/math/special_functions/detail/bessel_j1.hpp [1:3]
+ boost/math/special_functions/detail/bessel_jn.hpp [1:3]
+ boost/math/special_functions/detail/bessel_jy.hpp [1:3]
+ boost/math/special_functions/detail/bessel_k0.hpp [1:4]
+ boost/math/special_functions/detail/bessel_k1.hpp [1:4]
+ boost/math/special_functions/detail/bessel_kn.hpp [1:3]
+ boost/math/special_functions/detail/bessel_y0.hpp [1:3]
+ boost/math/special_functions/detail/bessel_y1.hpp [1:3]
+ boost/math/special_functions/detail/bessel_yn.hpp [1:3]
+ boost/math/special_functions/ellint_1.hpp [1:4]
+ boost/math/special_functions/ellint_2.hpp [1:4]
+ boost/math/special_functions/ellint_3.hpp [1:4]
+ boost/math/special_functions/ellint_d.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f31debd319fd7ba575571aa043c6bfdd
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+ // Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
+ // Copyright (c) 2011-2012 Mateusz Loskot, London, UK.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/util/rational.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f31fa17e583a9909468b7674bc36b032
+BELONGS ya.make
+ License text:
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/composite/alternative.hpp [2:5]
+ boost/spirit/home/classic/core/composite/difference.hpp [2:5]
+ boost/spirit/home/classic/core/composite/exclusive_or.hpp [2:5]
+ boost/spirit/home/classic/core/composite/impl/alternative.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/difference.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/intersection.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/kleene_star.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/list.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/optional.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/positive.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequence.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequential_and.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequential_or.ipp [2:5]
+ boost/spirit/home/classic/core/composite/intersection.hpp [2:5]
+ boost/spirit/home/classic/core/composite/kleene_star.hpp [2:5]
+ boost/spirit/home/classic/core/composite/list.hpp [2:5]
+ boost/spirit/home/classic/core/composite/operators.hpp [2:5]
+ boost/spirit/home/classic/core/composite/optional.hpp [2:5]
+ boost/spirit/home/classic/core/composite/positive.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequence.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequential_and.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequential_or.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f33a64b4b1ee1bea603ff632b1a22ec0
+BELONGS ya.make
+ License text:
+ Copyright (c) Marshall Clow 2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/algorithm/algorithm.hpp [2:2]
+ boost/algorithm/cxx14/is_permutation.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL f3740778d3f36d8f0818515a788483db
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/metrowerks.hpp [1:8]
+ boost/config/platform/bsd.hpp [1:5]
+ boost/config/stdlib/msl.hpp [1:4]
+ boost/config/stdlib/sgi.hpp [1:5]
+ boost/config/stdlib/stlport.hpp [1:5]
+ boost/filesystem/detail/macro_value.hpp [3:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL f38404a02e69976b94505df0c691bed0
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/uuid/detail/md5.hpp [8:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL f38ca055640371bbcd1b424bd86c7d04
+BELONGS ya.make
+ License text:
+ // Copyright Thijs van den Berg, 2008.
+ // Copyright John Maddock 2008.
+ // Copyright Paul A. Bristow 2008, 2014.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/distributions/laplace.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f3a0a38a75a0c0ab13f53c75c602545c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter.hpp at line 3
+ License text:
+ // Copyright David Abrahams, Daniel Wallin 2005. Use, modification and
+ // distribution is subject to the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/parameter.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f3bb9876570b28b088005ec3b18e12ba
+BELONGS ya.make
+ License text:
+ * \author Brian Ravnsgaard Riis
+ * \author Kenneth Riddile
+ * \date 16.09.2004, updated 04.03.2009
+ * \copyright 2004 Brian Ravnsgaard Riis
+ * \license Boost Software License 1.0
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/serialization/bitset.hpp [4:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL f3d5b11267b04733324e332e93eecd5d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function/detail/prologue.hpp at line 5, boost/function/function0.hpp at line 5, boost/function/function1.hpp at line 5, boost/function/function10.hpp at line 5, boost/function/function2.hpp at line 5, boost/function/function3.hpp at line 5, boost/function/function4.hpp at line 5, boost/function/function5.hpp at line 5, boost/function/function6.hpp at line 5, boost/function/function7.hpp at line 5, boost/function/function8.hpp at line 5, boost/function/function9.hpp at line 5
+ License text:
+ // Copyright Douglas Gregor 2002-2003. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function/detail/prologue.hpp [3:5]
+ boost/function/function0.hpp [3:5]
+ boost/function/function1.hpp [3:5]
+ boost/function/function10.hpp [3:5]
+ boost/function/function2.hpp [3:5]
+ boost/function/function3.hpp [3:5]
+ boost/function/function4.hpp [3:5]
+ boost/function/function5.hpp [3:5]
+ boost/function/function6.hpp [3:5]
+ boost/function/function7.hpp [3:5]
+ boost/function/function8.hpp [3:5]
+ boost/function/function9.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f3fec170734df3a8a40a5e82f887b3e2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/sync/spin/wait.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/interprocess/sync/spin/wait.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f40f201d75853f8a103026d9bee71250
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2000-2013
+ // Joerg Walter, Mathias Koch, Athanasios Iliopoulos
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/banded.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f41f47106ff9d3d86e887a637f9944a7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/sum_kahan.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/sum_kahan.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f46c07aeeff7e94e0071372e60321960
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2008-2009 Frank Mori Hess
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f47d692aff1724cf5d6cfdcc998f6b84
+BELONGS ya.make
+ License text:
+ // Copyright Beman Dawes 2002-2009
+ // Copyright Jan Langer 2002
+ // Copyright Dietmar Kuehl 2001
+ // Copyright Vladimir Prus 2002
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/filesystem/operations.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f4830fdeb395462fff1e25512fbbb137
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2014-2016 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/formulas/flattening.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f4998aec45d0ba8d6662017c1cf0fdee
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2011.
+ // (C) Copyright Cray, Inc. 2013
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/cray.hpp [1:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f4a325f0484c0bb7a3c17c3f81fb8c89
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2015.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/ulp.hpp [1:3]
+ boost/type_traits/integral_constant.hpp [1:3]
+ boost/type_traits/is_assignable.hpp [2:4]
+ boost/type_traits/is_constructible.hpp [2:4]
+ boost/type_traits/is_default_constructible.hpp [2:4]
+ boost/type_traits/is_destructible.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f4e26fc31fa1f72f9590a00e311382b9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/local_time/custom_time_zone.hpp at line 6, boost/date_time/local_time/local_date_time.hpp at line 6, boost/date_time/local_time/posix_time_zone.hpp at line 6, boost/date_time/time_zone_base.hpp at line 6, boost/date_time/tz_db_base.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/date_time/local_time/custom_time_zone.hpp [4:8]
+ boost/date_time/local_time/local_date_time.hpp [4:8]
+ boost/date_time/local_time/posix_time_zone.hpp [4:8]
+ boost/date_time/time_zone_base.hpp [4:8]
+ boost/date_time/tz_db_base.hpp [4:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL f51d2fa7c29e17335f28cf0a01ef2570
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process.hpp [1:7]
+ boost/process/args.hpp [1:6]
+ boost/process/async_pipe.hpp [1:5]
+ boost/process/async_system.hpp [1:6]
+ boost/process/child.hpp [1:6]
+ boost/process/cmd.hpp [1:6]
+ boost/process/detail/child_decl.hpp [1:6]
+ boost/process/detail/config.hpp [1:6]
+ boost/process/detail/execute_impl.hpp [1:6]
+ boost/process/detail/handler_base.hpp [1:6]
+ boost/process/detail/posix/async_in.hpp [1:5]
+ boost/process/detail/posix/async_out.hpp [1:5]
+ boost/process/detail/posix/basic_pipe.hpp [1:5]
+ boost/process/detail/posix/child_handle.hpp [1:5]
+ boost/process/detail/posix/close_in.hpp [1:5]
+ boost/process/detail/posix/close_out.hpp [1:5]
+ boost/process/detail/posix/executor.hpp [1:5]
+ boost/process/detail/posix/fd.hpp [1:5]
+ boost/process/detail/posix/file_in.hpp [1:5]
+ boost/process/detail/posix/file_out.hpp [1:6]
+ boost/process/detail/posix/null_in.hpp [1:5]
+ boost/process/detail/posix/null_out.hpp [1:6]
+ boost/process/detail/posix/pipe_in.hpp [1:5]
+ boost/process/detail/posix/pipe_out.hpp [1:6]
+ boost/process/detail/posix/search_path.hpp [1:5]
+ boost/process/detail/posix/shell_path.hpp [1:5]
+ boost/process/detail/posix/signal.hpp [1:6]
+ boost/process/detail/posix/start_dir.hpp [1:5]
+ boost/process/detail/posix/terminate.hpp [1:5]
+ boost/process/detail/posix/wait_for_exit.hpp [1:5]
+ boost/process/detail/posix/wait_group.hpp [1:5]
+ boost/process/detail/throw_on_error.hpp [1:6]
+ boost/process/detail/windows/async_in.hpp [1:5]
+ boost/process/detail/windows/async_out.hpp [1:5]
+ boost/process/detail/windows/child_handle.hpp [1:5]
+ boost/process/detail/windows/close_in.hpp [1:5]
+ boost/process/detail/windows/close_out.hpp [1:5]
+ boost/process/detail/windows/executor.hpp [1:6]
+ boost/process/detail/windows/file_in.hpp [1:5]
+ boost/process/detail/windows/file_out.hpp [1:5]
+ boost/process/detail/windows/null_in.hpp [1:5]
+ boost/process/detail/windows/null_out.hpp [1:5]
+ boost/process/detail/windows/pipe_in.hpp [1:5]
+ boost/process/detail/windows/pipe_out.hpp [1:6]
+ boost/process/detail/windows/search_path.hpp [1:5]
+ boost/process/detail/windows/shell_path.hpp [1:5]
+ boost/process/detail/windows/show_window.hpp [1:6]
+ boost/process/detail/windows/start_dir.hpp [1:5]
+ boost/process/detail/windows/terminate.hpp [1:5]
+ boost/process/detail/windows/wait_for_exit.hpp [1:6]
+ boost/process/error.hpp [1:6]
+ boost/process/exe.hpp [1:6]
+ boost/process/pipe.hpp [1:5]
+ boost/process/search_path.hpp [1:5]
+ boost/process/shell.hpp [1:6]
+ boost/process/spawn.hpp [1:6]
+ boost/process/start_dir.hpp [1:5]
+ boost/process/system.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f53b7a592ff7a9a840351208940bff87
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2002-2003 Eric Friedman, Itay Maman
+ // Copyright (c) 2012-2016 Antony Polukhin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/variant/variant.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL f54ebc6944a0fc1c23ca95f5e7187c55
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random.hpp at line 5, boost/random/additive_combine.hpp at line 5, boost/random/bernoulli_distribution.hpp at line 5, boost/random/cauchy_distribution.hpp at line 5, boost/random/detail/const_mod.hpp at line 5, boost/random/detail/generator_seed_seq.hpp at line 5, boost/random/detail/int_float_pair.hpp at line 5, boost/random/detail/iterator_mixin.hpp at line 5, boost/random/detail/uniform_int_float.hpp at line 5, boost/random/exponential_distribution.hpp at line 5, boost/random/geometric_distribution.hpp at line 5, boost/random/inversive_congruential.hpp at line 5, boost/random/lagged_fibonacci.hpp at line 5, boost/random/linear_congruential.hpp at line 5, boost/random/lognormal_distribution.hpp at line 5, boost/random/mersenne_twister.hpp at line 5, boost/random/normal_distribution.hpp at line 5, boost/random/random_number_generator.hpp at line 5, boost/random/shuffle_order.hpp at line 5, boost/random/shuffle_output.hpp at line 5, boost/random/taus88.hpp at line 5, boost/random/triangle_distribution.hpp at line 5, boost/random/uniform_01.hpp at line 5, boost/random/uniform_int.hpp at line 5, boost/random/uniform_int_distribution.hpp at line 5, boost/random/uniform_on_sphere.hpp at line 5, boost/random/uniform_real.hpp at line 5, boost/random/uniform_real_distribution.hpp at line 5, boost/random/uniform_smallint.hpp at line 5
+ License text:
+ * Copyright Jens Maurer 2000-2001
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/random.hpp [3:5]
+ boost/random/additive_combine.hpp [3:5]
+ boost/random/bernoulli_distribution.hpp [3:6]
+ boost/random/cauchy_distribution.hpp [3:5]
+ boost/random/detail/const_mod.hpp [3:5]
+ boost/random/detail/generator_seed_seq.hpp [3:6]
+ boost/random/detail/int_float_pair.hpp [3:6]
+ boost/random/detail/iterator_mixin.hpp [3:5]
+ boost/random/detail/uniform_int_float.hpp [3:6]
+ boost/random/exponential_distribution.hpp [3:7]
+ boost/random/geometric_distribution.hpp [3:6]
+ boost/random/inversive_congruential.hpp [3:5]
+ boost/random/lagged_fibonacci.hpp [3:5]
+ boost/random/linear_congruential.hpp [3:5]
+ boost/random/lognormal_distribution.hpp [3:6]
+ boost/random/mersenne_twister.hpp [3:6]
+ boost/random/normal_distribution.hpp [3:6]
+ boost/random/random_number_generator.hpp [3:5]
+ boost/random/shuffle_order.hpp [3:6]
+ boost/random/shuffle_output.hpp [3:5]
+ boost/random/taus88.hpp [3:6]
+ boost/random/triangle_distribution.hpp [3:6]
+ boost/random/uniform_01.hpp [3:5]
+ boost/random/uniform_int.hpp [3:5]
+ boost/random/uniform_int_distribution.hpp [3:6]
+ boost/random/uniform_on_sphere.hpp [3:6]
+ boost/random/uniform_real.hpp [3:5]
+ boost/random/uniform_real_distribution.hpp [3:6]
+ boost/random/uniform_smallint.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f58f9e759307d0cd1407b7ffdc0de5ee
+BELONGS ya.make
+ License text:
+ // (C) Copyright Jeremy Siek 1999-2001.
+ // Copyright (C) 2006 Trustees of Indiana University
+ // Authors: Douglas Gregor and Jeremy Siek
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/property_map/parallel/parallel_property_maps.hpp [1:3]
+ boost/property_map/property_map.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f5bb10adeab32a85a8058f4c7409e355
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/stdlib/roguewave.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f5e28497f7d46b75936cac4feeb981f4
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ // Copyright (c) 2014 Oliver Kowalke (oliver dot kowalke at gmail dot com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/asio/ip/impl/network_v4.hpp [5:6]
+ boost/asio/ip/impl/network_v4.ipp [5:6]
+ boost/asio/ip/impl/network_v6.ipp [5:6]
+ boost/asio/ip/network_v4.hpp [5:6]
+ boost/asio/ip/network_v6.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f6223a18ba26579ca79a1e3b6d297844
+BELONGS ya.make
+ License text:
+ // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ // Copyright (C) 2001, 2002 Peter Dimov
+ // Copyright (C) 2002 David Abrahams
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/ref.hpp [17:19]
+ boost/lambda/casts.hpp [3:4]
+ boost/lambda/construct.hpp [3:4]
+ boost/lambda/control_structures.hpp [2:2]
+ boost/lambda/core.hpp [3:4]
+ boost/lambda/detail/actions.hpp [3:3]
+ boost/lambda/detail/arity_code.hpp [3:3]
+ boost/lambda/detail/bind_functions.hpp [3:3]
+ boost/lambda/detail/control_constructs_common.hpp [3:4]
+ boost/lambda/detail/function_adaptors.hpp [3:3]
+ boost/lambda/detail/lambda_config.hpp [3:3]
+ boost/lambda/detail/lambda_functor_base.hpp [3:3]
+ boost/lambda/detail/lambda_functors.hpp [3:3]
+ boost/lambda/detail/lambda_fwd.hpp [3:3]
+ boost/lambda/detail/lambda_traits.hpp [3:3]
+ boost/lambda/detail/member_ptr.hpp [3:4]
+ boost/lambda/detail/operator_actions.hpp [3:3]
+ boost/lambda/detail/operator_lambda_func_base.hpp [3:3]
+ boost/lambda/detail/operator_return_type_traits.hpp [3:3]
+ boost/lambda/detail/operators.hpp [3:3]
+ boost/lambda/detail/ret.hpp [3:3]
+ boost/lambda/detail/return_type_traits.hpp [3:3]
+ boost/lambda/detail/select_functions.hpp [3:3]
+ boost/lambda/exceptions.hpp [3:4]
+ boost/lambda/if.hpp [3:5]
+ boost/lambda/lambda.hpp [2:2]
+ boost/lambda/loops.hpp [3:5]
+ boost/lambda/switch.hpp [3:4]
+ boost/python/ptr.hpp [11:12]
+ boost/tuple/detail/tuple_basic.hpp [3:3]
+ boost/tuple/tuple.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f654a91ae5842daef6292616876810df
+BELONGS ya.make
+ License text:
+ Copyright (c) 2012 Nathan Ridge
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/adapted/struct/define_struct_inline.hpp [2:2]
+ boost/fusion/adapted/struct/detail/define_struct_inline.hpp [2:2]
+ boost/fusion/include/define_struct_inline.hpp [2:2]
+ boost/fusion/support/as_const.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL f68164228ffa5c0764d510b1da25be15
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+ // Copyright 2004-2005 Peter Dimov
+ // Copyright 2006 Michael van der Westhuizen
+ // Copyright 2012 IBM Corp.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp [8:11]
+
+KEEP COPYRIGHT_SERVICE_LABEL f6e13419ff45640c01826efe04ffd1e9
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2004 Daniel Wallin
+ Copyright (c) 2010 Thomas Heller
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/core/detail/cpp03/function_equal.hpp [21:23]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_10.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_20.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_30.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_40.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_50.hpp [2:4]
+ boost/phoenix/scope/detail/cpp03/lambda.hpp [14:17]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_10.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_20.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_30.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_40.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_50.hpp [2:5]
+ boost/phoenix/scope/detail/local_variable.hpp [2:4]
+ boost/phoenix/scope/dynamic.hpp [2:4]
+ boost/phoenix/scope/lambda.hpp [2:5]
+ boost/phoenix/scope/let.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f6e6097f7091e8af239964ccde4737f4
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2004
+ // Copyright John R. Bandela 2000-2002
+ // Copyright David Abrahams 2003-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/replace.hpp [5:7]
+ boost/mpl/replace_if.hpp [5:7]
+ boost/mpl/unique.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f6f9fad1b42d83826bdb8713dc511159
+BELONGS ya.make
+ License text:
+ Copyright (c) 2015 Agustin K-ballo Berge
+ Copyright (c) 2015 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/support/detail/index_sequence.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f7093e82ac001e00e3a31b49c58f9abe
+BELONGS ya.make
+ License text:
+ // This file was modified by Oracle on 2013, 2014, 2017.
+ // Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/covered_by.hpp [7:8]
+ boost/geometry/algorithms/detail/covered_by/implementation.hpp [7:8]
+ boost/geometry/algorithms/detail/covered_by/interface.hpp [7:8]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp [6:7]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp [6:7]
+ boost/geometry/algorithms/detail/relate/areal_areal.hpp [5:6]
+ boost/geometry/algorithms/detail/relate/implementation.hpp [5:6]
+ boost/geometry/algorithms/detail/relate/interface.hpp [5:6]
+ boost/geometry/algorithms/detail/relate/linear_areal.hpp [5:6]
+ boost/geometry/algorithms/detail/relate/linear_linear.hpp [5:6]
+ boost/geometry/algorithms/detail/relate/point_geometry.hpp [5:6]
+ boost/geometry/algorithms/detail/relate/turns.hpp [5:6]
+ boost/geometry/algorithms/detail/relation/interface.hpp [5:6]
+ boost/geometry/algorithms/detail/sections/sectionalize.hpp [8:9]
+ boost/geometry/algorithms/detail/within/implementation.hpp [7:8]
+ boost/geometry/algorithms/detail/within/interface.hpp [7:8]
+ boost/geometry/algorithms/within.hpp [7:8]
+ boost/geometry/strategies/agnostic/point_in_poly_winding.hpp [6:8]
+ boost/geometry/strategies/cartesian/point_in_poly_winding.hpp [6:8]
+ boost/geometry/strategies/spherical/point_in_poly_winding.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL f737ed06addb0e3798f6d97ca33809b1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/implicit_cast.hpp at line 3, boost/iterator/counting_iterator.hpp at line 3, boost/iterator/detail/any_conversion_eater.hpp at line 3, boost/iterator/detail/facade_iterator_category.hpp at line 3, boost/iterator/detail/minimum_category.hpp at line 3, boost/iterator/is_lvalue_iterator.hpp at line 3, boost/iterator/is_readable_iterator.hpp at line 3, boost/iterator/iterator_traits.hpp at line 3, boost/iterator/minimum_category.hpp at line 3, boost/mpl/aux_/has_key_impl.hpp at line 7, boost/mpl/print.hpp at line 7, boost/pending/iterator_adaptors.hpp at line 3, boost/python/converter/context_result_converter.hpp at line 3, boost/python/converter/shared_ptr_to_python.hpp at line 3, boost/python/def_visitor.hpp at line 3, boost/python/detail/copy_ctor_mutates_rhs.hpp at line 3, boost/python/detail/def_helper_fwd.hpp at line 3, boost/python/detail/is_auto_ptr.hpp at line 3, boost/python/detail/is_shared_ptr.hpp at line 3, boost/python/detail/nullary_function_adaptor.hpp at line 3, boost/python/detail/prefix.hpp at line 3, boost/python/detail/value_is_shared_ptr.hpp at line 3, boost/python/detail/value_is_xxx.hpp at line 3, boost/python/object/inheritance_query.hpp at line 3, boost/python/pure_virtual.hpp at line 3, boost/python/raw_function.hpp at line 3
+ License text:
+ // Copyright David Abrahams 2003.
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/implicit_cast.hpp [1:3]
+ boost/iterator/counting_iterator.hpp [1:3]
+ boost/iterator/detail/any_conversion_eater.hpp [1:3]
+ boost/iterator/detail/facade_iterator_category.hpp [1:3]
+ boost/iterator/detail/minimum_category.hpp [1:3]
+ boost/iterator/is_lvalue_iterator.hpp [1:3]
+ boost/iterator/is_readable_iterator.hpp [1:3]
+ boost/iterator/iterator_traits.hpp [1:3]
+ boost/iterator/minimum_category.hpp [1:3]
+ boost/mpl/aux_/has_key_impl.hpp [5:6]
+ boost/mpl/print.hpp [5:6]
+ boost/pending/iterator_adaptors.hpp [1:3]
+ boost/python/converter/context_result_converter.hpp [1:3]
+ boost/python/converter/shared_ptr_to_python.hpp [1:4]
+ boost/python/def_visitor.hpp [1:3]
+ boost/python/detail/copy_ctor_mutates_rhs.hpp [1:3]
+ boost/python/detail/def_helper_fwd.hpp [1:3]
+ boost/python/detail/is_auto_ptr.hpp [1:3]
+ boost/python/detail/is_shared_ptr.hpp [1:4]
+ boost/python/detail/nullary_function_adaptor.hpp [1:3]
+ boost/python/detail/prefix.hpp [1:3]
+ boost/python/detail/value_is_shared_ptr.hpp [1:4]
+ boost/python/detail/value_is_xxx.hpp [1:3]
+ boost/python/object/inheritance_query.hpp [1:3]
+ boost/python/pure_virtual.hpp [1:3]
+ boost/python/raw_function.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL f7a61a4b8a24a380f195fe3c28c7fb47
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2010 Joel de Guzman
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/phoenix/bind.hpp [2:2]
+ boost/phoenix/config.hpp [2:5]
+ boost/phoenix/core.hpp [2:2]
+ boost/phoenix/core/argument.hpp [2:4]
+ boost/phoenix/core/argument.hpp [86:87]
+ boost/phoenix/core/argument.hpp [117:118]
+ boost/phoenix/core/detail/argument.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/function_equal.hpp [21:23]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_10.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_20.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_30.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_40.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_50.hpp [2:3]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_10.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_20.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_30.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_40.hpp [2:4]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_50.hpp [2:4]
+ boost/phoenix/core/reference.hpp [2:3]
+ boost/phoenix/core/value.hpp [2:3]
+ boost/phoenix/function.hpp [2:2]
+ boost/phoenix/function/function.hpp [2:4]
+ boost/phoenix/object.hpp [2:3]
+ boost/phoenix/object/const_cast.hpp [2:3]
+ boost/phoenix/object/construct.hpp [2:3]
+ boost/phoenix/object/delete.hpp [2:3]
+ boost/phoenix/object/detail/target.hpp [2:3]
+ boost/phoenix/object/dynamic_cast.hpp [2:3]
+ boost/phoenix/object/new.hpp [2:3]
+ boost/phoenix/object/reinterpret_cast.hpp [2:3]
+ boost/phoenix/object/static_cast.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_gen.hpp [15:16]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_10.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_20.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_30.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_40.hpp [2:3]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_50.hpp [2:3]
+ boost/phoenix/operator/if_else.hpp [2:3]
+ boost/phoenix/operator/io.hpp [2:3]
+ boost/phoenix/scope/detail/cpp03/lambda.hpp [14:17]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_10.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_20.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_30.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_40.hpp [2:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_50.hpp [2:5]
+ boost/phoenix/scope/dynamic.hpp [2:4]
+ boost/phoenix/scope/lambda.hpp [2:5]
+ boost/phoenix/scope/let.hpp [2:5]
+ boost/phoenix/statement.hpp [2:2]
+ boost/phoenix/statement/do_while.hpp [2:3]
+ boost/phoenix/statement/for.hpp [2:3]
+ boost/phoenix/statement/if.hpp [2:3]
+ boost/phoenix/statement/sequence.hpp [2:4]
+ boost/phoenix/statement/switch.hpp [2:3]
+ boost/phoenix/statement/while.hpp [2:3]
+ boost/spirit/home/support/detail/make_vector.hpp [2:2]
+ boost/spirit/include/karma_as.hpp [2:5]
+ boost/spirit/include/karma_duplicate.hpp [2:4]
+ boost/spirit/include/karma_grammar.hpp [2:4]
+ boost/spirit/include/karma_rule.hpp [2:4]
+ boost/spirit/include/lex_char_token_def.hpp [2:4]
+ boost/spirit/include/lex_generate_static_lexertl.hpp [2:4]
+ boost/spirit/include/lex_plain_token.hpp [2:4]
+ boost/spirit/include/lex_primitives.hpp [2:4]
+ boost/spirit/include/lex_tokenize_and_parse_attr.hpp [2:4]
+ boost/spirit/include/qi_as.hpp [2:5]
+ boost/spirit/include/qi_matches.hpp [2:4]
+ boost/spirit/include/qi_no_skip.hpp [2:4]
+ boost/spirit/include/support_adapt_adt_attributes.hpp [2:4]
+ boost/spirit/include/support_attributes_fwd.hpp [2:4]
+ boost/spirit/include/support_container.hpp [2:4]
+ boost/spirit/include/support_extended_variant.hpp [2:4]
+ boost/spirit/include/support_line_pos_iterator.hpp [2:5]
+ boost/spirit/include/support_ostream_iterator.hpp [2:4]
+ boost/spirit/include/support_utree.hpp [2:4]
+ boost/spirit/repository/home/support/subrule_context.hpp [2:3]
+ boost/spirit/repository/include/qi_nonterminal.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f7b79570ab951aee1d4600e3cfada7f6
+BELONGS ya.make
+ License text:
+ * Copyright Nick Thompson, 2017
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/interpolators/barycentric_rational.hpp [2:4]
+ boost/math/interpolators/cubic_b_spline.hpp [1:3]
+ boost/math/interpolators/detail/barycentric_rational_detail.hpp [2:4]
+ boost/math/interpolators/detail/cubic_b_spline_detail.hpp [1:3]
+ boost/math/quadrature/detail/exp_sinh_detail.hpp [1:3]
+ boost/math/quadrature/detail/sinh_sinh_detail.hpp [1:3]
+ boost/math/quadrature/detail/tanh_sinh_constants.hpp [1:3]
+ boost/math/quadrature/detail/tanh_sinh_detail.hpp [1:3]
+ boost/math/quadrature/exp_sinh.hpp [1:3]
+ boost/math/quadrature/sinh_sinh.hpp [1:3]
+ boost/math/quadrature/tanh_sinh.hpp [1:3]
+ boost/math/quadrature/trapezoidal.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f8523423e94e4738f1a90221affa3c6d
+BELONGS ya.make
+ License text:
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/compute/compute_algebra.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute_operations.hpp [9:10]
+ boost/numeric/odeint/external/compute/compute_resize.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_copy.hpp [9:10]
+ boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/integrate.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/integrate_const.hpp [10:11]
+ boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/integrate_times.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/null_observer.hpp [9:10]
+ boost/numeric/odeint/iterator/integrate/observer_collection.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL f8951bf69b11cc80f1addaa803fe6615
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/qi/numeric/detail/numeric_utils.hpp [2:6]
+ boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp [2:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f89bd28fdc7f4fd3d37706b722eab1dc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/move.hpp at line 3, boost/ptr_container/detail/static_move_ptr.hpp at line 3
+ License text:
+ // (C) Copyright Daniel Wallin 2004.
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/ptr_container/detail/move.hpp [1:3]
+ boost/ptr_container/detail/static_move_ptr.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f8bb10155b581266fee4384d92ffbd4b
+BELONGS ya.make
+ License text:
+ // (C) Copyright 2009-2012 Vicente J. Botet Escriba
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/lock_traits.hpp [4:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f8c5c0c04a0be7e5cac5b8b3649d747d
+BELONGS ya.make
+ License text:
+ Copyright (c) 2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core/safe_bool.hpp [2:3]
+ boost/spirit/home/classic/utility/grammar_def.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f8de78cca950a4830aa0a2a534686dc6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/weighted_sum_kahan.hpp at line 6
+ License text:
+ // Copyright 2011 Simon West. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/accumulators/statistics/weighted_sum_kahan.hpp [4:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL f936e9b0685f44284dbdcdc5d4021540
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ // Copyright (c) 2010 Beman Dawes
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/system/detail/local_free_on_destruction.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f937ec1156626f6e299bd234778b3fd8
+BELONGS ya.make
+ License text:
+ * Copyright 2017 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/detail/winapi/access_rights.hpp [2:2]
+ boost/detail/winapi/apc.hpp [2:2]
+ boost/detail/winapi/basic_types.hpp [2:2]
+ boost/detail/winapi/bcrypt.hpp [2:2]
+ boost/detail/winapi/character_code_conversion.hpp [2:2]
+ boost/detail/winapi/condition_variable.hpp [2:2]
+ boost/detail/winapi/config.hpp [2:2]
+ boost/detail/winapi/critical_section.hpp [2:2]
+ boost/detail/winapi/crypt.hpp [2:2]
+ boost/detail/winapi/dbghelp.hpp [2:2]
+ boost/detail/winapi/debugapi.hpp [2:2]
+ boost/detail/winapi/detail/deprecated_namespace.hpp [2:2]
+ boost/detail/winapi/directory_management.hpp [2:2]
+ boost/detail/winapi/dll.hpp [2:2]
+ boost/detail/winapi/environment.hpp [2:2]
+ boost/detail/winapi/error_codes.hpp [2:2]
+ boost/detail/winapi/error_handling.hpp [2:2]
+ boost/detail/winapi/event.hpp [2:2]
+ boost/detail/winapi/file_management.hpp [2:2]
+ boost/detail/winapi/file_mapping.hpp [2:2]
+ boost/detail/winapi/get_current_process.hpp [2:2]
+ boost/detail/winapi/get_current_process_id.hpp [2:2]
+ boost/detail/winapi/get_current_thread.hpp [2:2]
+ boost/detail/winapi/get_current_thread_id.hpp [2:2]
+ boost/detail/winapi/get_last_error.hpp [2:2]
+ boost/detail/winapi/get_process_times.hpp [2:2]
+ boost/detail/winapi/get_system_directory.hpp [2:2]
+ boost/detail/winapi/get_thread_times.hpp [2:2]
+ boost/detail/winapi/handle_info.hpp [2:2]
+ boost/detail/winapi/handles.hpp [2:2]
+ boost/detail/winapi/heap_memory.hpp [2:2]
+ boost/detail/winapi/init_once.hpp [2:2]
+ boost/detail/winapi/jobs.hpp [2:2]
+ boost/detail/winapi/limits.hpp [2:2]
+ boost/detail/winapi/local_memory.hpp [2:2]
+ boost/detail/winapi/memory.hpp [2:2]
+ boost/detail/winapi/mutex.hpp [2:2]
+ boost/detail/winapi/overlapped.hpp [2:2]
+ boost/detail/winapi/page_protection_flags.hpp [2:2]
+ boost/detail/winapi/pipes.hpp [2:2]
+ boost/detail/winapi/priority_class.hpp [2:2]
+ boost/detail/winapi/process.hpp [2:2]
+ boost/detail/winapi/security.hpp [2:2]
+ boost/detail/winapi/semaphore.hpp [2:2]
+ boost/detail/winapi/shell.hpp [2:2]
+ boost/detail/winapi/show_window.hpp [2:2]
+ boost/detail/winapi/srw_lock.hpp [2:2]
+ boost/detail/winapi/stack_backtrace.hpp [2:2]
+ boost/detail/winapi/synchronization.hpp [2:2]
+ boost/detail/winapi/system.hpp [2:2]
+ boost/detail/winapi/thread.hpp [2:2]
+ boost/detail/winapi/thread_pool.hpp [2:2]
+ boost/detail/winapi/time.hpp [2:2]
+ boost/detail/winapi/timers.hpp [2:2]
+ boost/detail/winapi/tls.hpp [2:2]
+ boost/detail/winapi/wait.hpp [2:2]
+ boost/detail/winapi/waitable_timer.hpp [2:2]
+ boost/winapi/stack_backtrace.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL f94cb856c9e5e6fd69d03e77e07fdd8a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/function_input_iterator.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iterator/function_input_iterator.hpp [1:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f9749f4e13e703364be469134935d614
+BELONGS ya.make
+ License text:
+ // Copyright (C) 1999-2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ // Gary Powell (gwpowell@hotmail.com)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lambda/bind.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f9a846689286adc00201dd976f81ff02
+BELONGS ya.make
+ License text:
+ Copyright (c) 2006-2007 Tobias Schwinger
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/functional.hpp [2:2]
+ boost/fusion/functional/adapter.hpp [2:2]
+ boost/fusion/functional/adapter/detail/access.hpp [2:2]
+ boost/fusion/functional/adapter/fused.hpp [2:2]
+ boost/fusion/functional/adapter/fused_function_object.hpp [2:2]
+ boost/fusion/functional/adapter/fused_procedure.hpp [2:2]
+ boost/fusion/functional/adapter/limits.hpp [2:2]
+ boost/fusion/functional/adapter/unfused.hpp [2:2]
+ boost/fusion/functional/adapter/unfused_typed.hpp [2:2]
+ boost/fusion/functional/invocation.hpp [2:2]
+ boost/fusion/functional/invocation/detail/that_ptr.hpp [2:2]
+ boost/fusion/functional/invocation/invoke.hpp [2:3]
+ boost/fusion/functional/invocation/invoke_function_object.hpp [2:3]
+ boost/fusion/functional/invocation/invoke_procedure.hpp [2:3]
+ boost/fusion/functional/invocation/limits.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL f9e3fe08b0242a1ca57099bf39432eed
+BELONGS ya.make
+ License text:
+ * Copyright (c) 1998-2009
+ * John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex/v4/match_results.hpp [3:4]
+ boost/regex/v4/regex_format.hpp [3:4]
+ boost/regex/v4/regex_replace.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL f9f12f7fd5f198cd90b9b717616fc6d6
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/classic/core.hpp [2:8]
+ boost/spirit/home/classic/core/composite/alternative.hpp [2:5]
+ boost/spirit/home/classic/core/composite/difference.hpp [2:5]
+ boost/spirit/home/classic/core/composite/directives.hpp [2:4]
+ boost/spirit/home/classic/core/composite/epsilon.hpp [2:4]
+ boost/spirit/home/classic/core/composite/exclusive_or.hpp [2:5]
+ boost/spirit/home/classic/core/composite/impl/alternative.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/difference.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/directives.ipp [2:6]
+ boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/intersection.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/kleene_star.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/list.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/optional.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/positive.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequence.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequential_and.ipp [2:5]
+ boost/spirit/home/classic/core/composite/impl/sequential_or.ipp [2:5]
+ boost/spirit/home/classic/core/composite/intersection.hpp [2:5]
+ boost/spirit/home/classic/core/composite/kleene_star.hpp [2:5]
+ boost/spirit/home/classic/core/composite/list.hpp [2:5]
+ boost/spirit/home/classic/core/composite/no_actions.hpp [2:4]
+ boost/spirit/home/classic/core/composite/operators.hpp [2:5]
+ boost/spirit/home/classic/core/composite/optional.hpp [2:5]
+ boost/spirit/home/classic/core/composite/positive.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequence.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequential_and.hpp [2:5]
+ boost/spirit/home/classic/core/composite/sequential_or.hpp [2:5]
+ boost/spirit/home/classic/core/primitives/impl/numerics.ipp [2:4]
+ boost/spirit/home/classic/core/primitives/impl/primitives.ipp [2:4]
+ boost/spirit/home/classic/core/primitives/numerics.hpp [2:4]
+ boost/spirit/home/classic/core/primitives/primitives.hpp [2:4]
+ boost/spirit/home/classic/meta.hpp [2:4]
+ boost/spirit/home/classic/utility.hpp [2:9]
+ boost/spirit/home/classic/utility/distinct.hpp [2:4]
+ boost/spirit/home/classic/utility/loops.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL f9f21cf5cc873fe5cc18d20988035289
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2010 Artyom Beilis (Tonkikh)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/locale/hold_ptr.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL fa9a32968bea29cee8bae21e3db66f48
+BELONGS ya.make
+ License text:
+ Copyright (c) 2014-2015 Kohei Takahashi
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/container/generation/make_set.hpp [2:2]
+ boost/fusion/container/generation/make_vector.hpp [2:2]
+ boost/fusion/container/list/detail/list_to_cons.hpp [2:2]
+ boost/fusion/container/list/list.hpp [2:2]
+ boost/fusion/container/set/detail/as_set.hpp [2:2]
+ boost/fusion/container/set/set.hpp [2:2]
+ boost/fusion/container/vector/detail/as_vector.hpp [2:2]
+ boost/fusion/container/vector/detail/config.hpp [2:2]
+ boost/fusion/container/vector/vector.hpp [2:2]
+ boost/fusion/container/vector/vector_fwd.hpp [2:2]
+ boost/fusion/support/detail/is_same_size.hpp [2:2]
+ boost/fusion/tuple/tuple.hpp [2:2]
+ boost/fusion/tuple/tuple_fwd.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL fa9c01424457f45357412ffbaa103b87
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/xml_archive_exception.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/archive/xml_archive_exception.hpp [12:14]
+
+KEEP COPYRIGHT_SERVICE_LABEL fac2acbeb5b5ff0e22a994c8b805305c
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/detail/iconv.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL fae7f98b6a716f76e1a04de0592d1b47
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/concurrent_queues/sync_bounded_queue.hpp at line 8, boost/thread/concurrent_queues/sync_deque.hpp at line 8, boost/thread/concurrent_queues/sync_queue.hpp at line 8, boost/thread/sync_bounded_queue.hpp at line 8, boost/thread/sync_queue.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/thread/concurrent_queues/sync_bounded_queue.hpp [6:8]
+ boost/thread/concurrent_queues/sync_deque.hpp [6:8]
+ boost/thread/concurrent_queues/sync_queue.hpp [6:8]
+ boost/thread/sync_bounded_queue.hpp [6:8]
+ boost/thread/sync_queue.hpp [6:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL faef8c3be0a1612051d45827262d7799
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2008.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/no_tr1/cmath.hpp [1:3]
+ boost/math/special_functions/acosh.hpp [3:6]
+ boost/math/special_functions/asinh.hpp [3:6]
+ boost/math/special_functions/atanh.hpp [3:6]
+ boost/math/special_functions/next.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL fb0c843abf394387c8df0eca1810bb44
+BELONGS ya.make
+ License text:
+ // (C) Copyright John Maddock 2005.
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/no_tr1/complex.hpp [1:3]
+ boost/config/no_tr1/functional.hpp [1:3]
+ boost/config/no_tr1/memory.hpp [1:3]
+ boost/config/no_tr1/utility.hpp [1:3]
+ boost/math/complex.hpp [1:3]
+ boost/math/complex/acos.hpp [1:3]
+ boost/math/complex/acosh.hpp [1:3]
+ boost/math/complex/asin.hpp [1:3]
+ boost/math/complex/asinh.hpp [1:3]
+ boost/math/complex/atan.hpp [1:3]
+ boost/math/complex/atanh.hpp [1:3]
+ boost/math/complex/details.hpp [1:3]
+ boost/math/complex/fabs.hpp [1:3]
+ boost/type_traits/extent.hpp [2:4]
+ boost/type_traits/has_virtual_destructor.hpp [2:4]
+ boost/type_traits/is_member_object_pointer.hpp [2:4]
+ boost/type_traits/is_signed.hpp [2:4]
+ boost/type_traits/is_unsigned.hpp [2:4]
+ boost/type_traits/rank.hpp [2:4]
+ boost/type_traits/remove_all_extents.hpp [2:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL fb19913edf2b294113c26397c854cb87
+BELONGS ya.make
+ License text:
+ Copyright (c) 2007-2010: Joachim Faulhaber
+ Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/icl/detail/map_algo.hpp [2:2]
+ boost/icl/detail/set_algo.hpp [2:2]
+ boost/icl/detail/std_set.hpp [2:2]
+ boost/icl/interval_set.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL fb315c16d1fe23c296a6568a9dea2777
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/scope_exit.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/scope_exit.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL fb36b29faf58b57823a283e76940e43d
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2012 Hartmut Kaiser
+ * Copyright (c) 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/atomic/detail/config.hpp [6:7]
+ boost/atomic/detail/link.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL fb56a746a3cac247b27d3293104f2b01
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009, 2015 Peter Dimov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/bind.hpp [13:13]
+
+KEEP COPYRIGHT_SERVICE_LABEL fba684797df4f48e06fa78e2e64b11b4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/category.hpp at line 5, boost/range/distance.hpp at line 5, boost/range/functions.hpp at line 5, boost/range/pointer.hpp at line 5
+ License text:
+ // Copyright Thorsten Ottosen 2003-2006. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/range/category.hpp [3:5]
+ boost/range/distance.hpp [3:5]
+ boost/range/functions.hpp [3:5]
+ boost/range/pointer.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL fc2a9fc530edf9f16f6eaac267113149
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/device/mapped_file.hpp at line 5, libs/iostreams/src/mapped_file.cpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/iostreams/device/mapped_file.hpp [1:5]
+ libs/iostreams/src/mapped_file.cpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL fc552a5881ad9783ae6c8d511dd6c13a
+BELONGS ya.make
+ License text:
+ Copyright (c) 2001-2011 Joel de Guzman
+ http://spirit.sourceforge.net/
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/common_terminals.hpp [2:3]
+ boost/spirit/home/support/detail/make_cons.hpp [2:3]
+ boost/spirit/home/support/make_component.hpp [2:3]
+ boost/spirit/home/support/meta_compiler.hpp [2:3]
+ boost/spirit/home/support/modify.hpp [2:3]
+ boost/spirit/include/support_info.hpp [2:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL fccaaf374e92bea92a91f3c3f74bfb06
+BELONGS ya.make
+ License text:
+ // (C) Copyright Kevlin Henney and Dave Abrahams 1999.
+ // (C) Copyright Boris Rasin 2014.
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/polymorphic_cast.hpp [3:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL fcd2c8a16a246d6c41d59f33179993f4
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/gcc.hpp [1:9]
+ boost/config/compiler/metrowerks.hpp [1:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL fce4baaad3a86f36324f1a7918e15e7d
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007-2016 Barend Gehrels, Amsterdam, the Netherlands.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/geometry/algorithms/detail/overlay/cluster_info.hpp [3:3]
+ boost/geometry/strategies/geographic/distance.hpp [3:3]
+ boost/geometry/strategies/geographic/distance_andoyer.hpp [3:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL fceca3d59218ef75da3cdc95a9a29691
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2009 Ben Hanson (http://www.benhanson.net/)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/spirit/home/support/detail/lexer/generate_re2c.hpp [2:2]
+ boost/spirit/home/support/detail/lexer/internals.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL fcfedf71451d1e8697ddad44e1797902
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function/detail/function_iterate.hpp at line 5, boost/function/detail/maybe_include.hpp at line 5
+ License text:
+ // Copyright Douglas Gregor 2003. Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/function/detail/function_iterate.hpp [3:5]
+ boost/function/detail/maybe_include.hpp [3:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL fcff9832642f1fc146a81e1a466219bc
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/config/compiler/borland.hpp [1:5]
+ boost/config/compiler/codegear.hpp [1:5]
+ boost/config/compiler/common_edg.hpp [1:7]
+ boost/config/compiler/hp_acc.hpp [1:8]
+ boost/config/compiler/kai.hpp [1:5]
+ boost/config/compiler/mpw.hpp [1:4]
+ boost/config/compiler/visualc.hpp [1:8]
+
+KEEP COPYRIGHT_SERVICE_LABEL fd55be335299a3413c6cfe0983242e0e
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2000-2008
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/apply_wrap.hpp [9:9]
+ boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc/vector_c.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp [2:2]
+ boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp [2:2]
+ boost/mpl/aux_/push_back_impl.hpp [5:5]
+ boost/mpl/aux_/push_front_impl.hpp [5:5]
+ boost/mpl/aux_/sequence_wrapper.hpp [8:8]
+ boost/mpl/aux_/traits_lambda_spec.hpp [5:5]
+ boost/mpl/for_each.hpp [5:5]
+ boost/mpl/min_max.hpp [5:5]
+ boost/mpl/quote.hpp [9:9]
+ boost/mpl/vector/aux_/front.hpp [5:5]
+ boost/mpl/vector_c.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL fd6578dd286e9257f73d8cc59e377eb7
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2005-2009 Jongsoo Park <jongsoo.park -at- gmail.com>
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/dominator_tree.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL fd82c8c920d2d55a272cb4473c4c8e01
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Peter Dimov
+ // Copyright 2014 Andrey Semashev
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/core/demangle.hpp [6:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL fd84e5521c389f735db1160443952431
+BELONGS ya.make
+ License text:
+ Copyright (c) 2013 Jamboree
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/fusion/algorithm/transformation/flatten.hpp [2:2]
+ boost/fusion/view/flatten_view.hpp [2:2]
+ boost/fusion/view/flatten_view/flatten_view.hpp [2:2]
+ boost/fusion/view/flatten_view/flatten_view_iterator.hpp [2:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL fda42ec6f8d7fcf06eb7924a33f02d3c
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/cuthill_mckee_ordering.hpp [2:5]
+ boost/graph/detail/sparse_ordering.hpp [2:5]
+ boost/graph/king_ordering.hpp [2:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL fdaa6e15501e6c6b69d62a55e2cc2e3c
+BELONGS ya.make
+ License text:
+ // Copyright Aleksey Gurtovoy 2003-2007
+ // Copyright David Abrahams 2003-2004
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/set/aux_/begin_end_impl.hpp [5:6]
+ boost/mpl/set/aux_/erase_key_impl.hpp [5:6]
+ boost/mpl/set/aux_/insert_impl.hpp [5:6]
+ boost/mpl/set/aux_/item.hpp [5:6]
+ boost/mpl/set/aux_/iterator.hpp [5:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL fdb89500e86761890c1be8217c26304c
+BELONGS ya.make
+ License text:
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
+ Copyright 2012 Denis Demidov
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/odeint/external/vexcl/vexcl_resize.hpp [9:11]
+ boost/numeric/odeint/external/viennacl/viennacl_operations.hpp [9:11]
+ boost/numeric/odeint/external/viennacl/viennacl_resize.hpp [9:11]
+ boost/numeric/odeint/integrate/detail/integrate_const.hpp [9:11]
+ boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp [9:11]
+ boost/numeric/odeint/integrate/detail/integrate_times.hpp [9:11]
+ boost/numeric/odeint/util/bind.hpp [9:10]
+ boost/numeric/odeint/util/detail/less_with_sign.hpp [9:10]
+ boost/numeric/odeint/util/same_instance.hpp [9:10]
+
+KEEP COPYRIGHT_SERVICE_LABEL fdc872a02f9fa212032838b53061b71b
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process.hpp [1:7]
+ boost/process/args.hpp [1:6]
+ boost/process/async_pipe.hpp [1:5]
+ boost/process/async_system.hpp [1:6]
+ boost/process/child.hpp [1:6]
+ boost/process/cmd.hpp [1:6]
+ boost/process/detail/child_decl.hpp [1:6]
+ boost/process/detail/config.hpp [1:6]
+ boost/process/detail/execute_impl.hpp [1:6]
+ boost/process/detail/handler_base.hpp [1:6]
+ boost/process/detail/posix/async_in.hpp [1:5]
+ boost/process/detail/posix/async_out.hpp [1:5]
+ boost/process/detail/posix/basic_pipe.hpp [1:5]
+ boost/process/detail/posix/child_handle.hpp [1:5]
+ boost/process/detail/posix/close_in.hpp [1:5]
+ boost/process/detail/posix/close_out.hpp [1:5]
+ boost/process/detail/posix/executor.hpp [1:5]
+ boost/process/detail/posix/fd.hpp [1:5]
+ boost/process/detail/posix/file_in.hpp [1:5]
+ boost/process/detail/posix/file_out.hpp [1:6]
+ boost/process/detail/posix/null_in.hpp [1:5]
+ boost/process/detail/posix/null_out.hpp [1:6]
+ boost/process/detail/posix/pipe_in.hpp [1:5]
+ boost/process/detail/posix/pipe_out.hpp [1:6]
+ boost/process/detail/posix/search_path.hpp [1:5]
+ boost/process/detail/posix/shell_path.hpp [1:5]
+ boost/process/detail/posix/signal.hpp [1:6]
+ boost/process/detail/posix/start_dir.hpp [1:5]
+ boost/process/detail/posix/terminate.hpp [1:5]
+ boost/process/detail/posix/wait_for_exit.hpp [1:5]
+ boost/process/detail/posix/wait_group.hpp [1:5]
+ boost/process/detail/throw_on_error.hpp [1:6]
+ boost/process/detail/windows/async_in.hpp [1:5]
+ boost/process/detail/windows/async_out.hpp [1:5]
+ boost/process/detail/windows/child_handle.hpp [1:5]
+ boost/process/detail/windows/close_in.hpp [1:5]
+ boost/process/detail/windows/close_out.hpp [1:5]
+ boost/process/detail/windows/executor.hpp [1:6]
+ boost/process/detail/windows/file_in.hpp [1:5]
+ boost/process/detail/windows/file_out.hpp [1:5]
+ boost/process/detail/windows/null_in.hpp [1:5]
+ boost/process/detail/windows/null_out.hpp [1:5]
+ boost/process/detail/windows/pipe_in.hpp [1:5]
+ boost/process/detail/windows/pipe_out.hpp [1:6]
+ boost/process/detail/windows/search_path.hpp [1:5]
+ boost/process/detail/windows/shell_path.hpp [1:5]
+ boost/process/detail/windows/show_window.hpp [1:6]
+ boost/process/detail/windows/start_dir.hpp [1:5]
+ boost/process/detail/windows/terminate.hpp [1:5]
+ boost/process/detail/windows/wait_for_exit.hpp [1:6]
+ boost/process/error.hpp [1:6]
+ boost/process/exe.hpp [1:6]
+ boost/process/pipe.hpp [1:5]
+ boost/process/search_path.hpp [1:5]
+ boost/process/shell.hpp [1:6]
+ boost/process/spawn.hpp [1:6]
+ boost/process/start_dir.hpp [1:5]
+ boost/process/system.hpp [1:6]
+
+KEEP COPYRIGHT_SERVICE_LABEL fdfa61b5c29bc0c08a5bd50229bcc525
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2007, 2008 Peter Dimov
+ // Copyright (c) 2008 Michael Marcin
+ // Copyright (c) 2009 Frank Mori Hess
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/signals2/deconstruct.hpp [16:18]
+
+KEEP COPYRIGHT_SERVICE_LABEL fe409df214ddedae04ea04fe60c33c48
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/process.hpp [1:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL fea2e5ed18f9a052be7348a249bd333a
+BELONGS ya.make
+ License text:
+ // Copyright Kevlin Henney, 2000-2005.
+ // Copyright Alexander Nasonov, 2006-2010.
+ // Copyright Antony Polukhin, 2011-2016.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lexical_cast/detail/converter_lexical_streams.hpp [1:3]
+ boost/lexical_cast/detail/converter_numeric.hpp [1:3]
+ boost/lexical_cast/try_lexical_convert.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL febe05bc8ec6f388612334cf870b660c
+BELONGS ya.make
+ License text:
+ * Copyright (c) 1998-2005
+ * John Maddock
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/regex/v4/regex_workaround.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ff121923a9c0b6799597434faafbacb1
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2006 Tiago de Paula Peixoto <tiago@forked.de>
+ // Copyright (C) 2004 The Trustees of Indiana University.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/graph/graphml.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL ff357b8617179cd55397e194bbf9afa9
+BELONGS ya.make
+ License text:
+ // Copyright Sergey Krivonos 2017
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/mpl/get_tag.hpp [5:5]
+
+KEEP COPYRIGHT_SERVICE_LABEL ff57d62db593b2575f4cc431df71e1d1
+BELONGS ya.make
+ License text:
+ // Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/lambda/detail/is_instance_of.hpp [3:3]
+ boost/tuple/tuple_comparison.hpp [3:4]
+
+KEEP COPYRIGHT_SERVICE_LABEL ff6cfc5093caf6fa33f3e0e3622368ef
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/contract.hpp at line 7, boost/contract/assert.hpp at line 7, boost/contract/base_types.hpp at line 7, boost/contract/call_if.hpp at line 7, boost/contract/check.hpp at line 7, boost/contract/constructor.hpp at line 7, boost/contract/core/access.hpp at line 7, boost/contract/core/check_macro.hpp at line 7, boost/contract/core/config.hpp at line 7, boost/contract/core/constructor_precondition.hpp at line 7, boost/contract/core/exception.hpp at line 7, boost/contract/core/specify.hpp at line 7, boost/contract/core/virtual.hpp at line 7, boost/contract/destructor.hpp at line 7, boost/contract/detail/assert.hpp at line 7, boost/contract/detail/auto_ptr.hpp at line 7, boost/contract/detail/check.hpp at line 7, boost/contract/detail/checking.hpp at line 7, boost/contract/detail/condition/cond_base.hpp at line 7, boost/contract/detail/condition/cond_inv.hpp at line 7, boost/contract/detail/condition/cond_post.hpp at line 7, boost/contract/detail/condition/cond_subcontracting.hpp at line 7, boost/contract/detail/config.hpp at line 7, boost/contract/detail/debug.hpp at line 7, boost/contract/detail/decl.hpp at line 7, boost/contract/detail/declspec.hpp at line 7, boost/contract/detail/inlined.hpp at line 7, boost/contract/detail/inlined/core/exception.hpp at line 7, boost/contract/detail/inlined/detail/checking.hpp at line 7, boost/contract/detail/inlined/old.hpp at line 7, boost/contract/detail/name.hpp at line 7, boost/contract/detail/none.hpp at line 7, boost/contract/detail/noop.hpp at line 7, boost/contract/detail/operation/constructor.hpp at line 7, boost/contract/detail/operation/destructor.hpp at line 7, boost/contract/detail/operation/function.hpp at line 7, boost/contract/detail/operation/public_function.hpp at line 7, boost/contract/detail/operation/static_public_function.hpp at line 7, boost/contract/detail/operator_safe_bool.hpp at line 7, boost/contract/detail/preprocessor/keyword/private.hpp at line 7, boost/contract/detail/preprocessor/keyword/protected.hpp at line 7, boost/contract/detail/preprocessor/keyword/public.hpp at line 7, boost/contract/detail/preprocessor/keyword/utility/is.hpp at line 7, boost/contract/detail/preprocessor/keyword/virtual.hpp at line 7, boost/contract/detail/static_local_var.hpp at line 7, boost/contract/detail/tvariadic.hpp at line 7, boost/contract/detail/type_traits/member_function_types.hpp at line 7, boost/contract/detail/type_traits/mirror.hpp at line 7, boost/contract/detail/type_traits/optional.hpp at line 7, boost/contract/function.hpp at line 7, boost/contract/old.hpp at line 7, boost/contract/override.hpp at line 7, boost/contract/public_function.hpp at line 7, boost/contract_macro.hpp at line 7
+ License text:
+ // Copyright (C) 2008-2018 Lorenzo Caminiti
+ // Distributed under the Boost Software License, Version 1.0 (see accompanying
+ // file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/contract.hpp [5:7]
+ boost/contract/assert.hpp [5:7]
+ boost/contract/base_types.hpp [5:7]
+ boost/contract/call_if.hpp [5:7]
+ boost/contract/check.hpp [5:7]
+ boost/contract/constructor.hpp [5:7]
+ boost/contract/core/access.hpp [5:7]
+ boost/contract/core/check_macro.hpp [5:7]
+ boost/contract/core/config.hpp [5:7]
+ boost/contract/core/constructor_precondition.hpp [5:7]
+ boost/contract/core/exception.hpp [5:7]
+ boost/contract/core/specify.hpp [5:7]
+ boost/contract/core/virtual.hpp [5:7]
+ boost/contract/destructor.hpp [5:7]
+ boost/contract/detail/assert.hpp [5:7]
+ boost/contract/detail/auto_ptr.hpp [5:7]
+ boost/contract/detail/check.hpp [5:7]
+ boost/contract/detail/checking.hpp [5:7]
+ boost/contract/detail/condition/cond_base.hpp [5:7]
+ boost/contract/detail/condition/cond_inv.hpp [5:7]
+ boost/contract/detail/condition/cond_post.hpp [5:7]
+ boost/contract/detail/condition/cond_subcontracting.hpp [5:7]
+ boost/contract/detail/config.hpp [5:7]
+ boost/contract/detail/debug.hpp [5:7]
+ boost/contract/detail/decl.hpp [5:7]
+ boost/contract/detail/declspec.hpp [5:7]
+ boost/contract/detail/inlined.hpp [5:7]
+ boost/contract/detail/inlined/core/exception.hpp [5:7]
+ boost/contract/detail/inlined/detail/checking.hpp [5:7]
+ boost/contract/detail/inlined/old.hpp [5:7]
+ boost/contract/detail/name.hpp [5:7]
+ boost/contract/detail/none.hpp [5:7]
+ boost/contract/detail/noop.hpp [5:7]
+ boost/contract/detail/operation/constructor.hpp [5:7]
+ boost/contract/detail/operation/destructor.hpp [5:7]
+ boost/contract/detail/operation/function.hpp [5:7]
+ boost/contract/detail/operation/public_function.hpp [5:7]
+ boost/contract/detail/operation/static_public_function.hpp [5:7]
+ boost/contract/detail/operator_safe_bool.hpp [5:7]
+ boost/contract/detail/preprocessor/keyword/private.hpp [5:7]
+ boost/contract/detail/preprocessor/keyword/protected.hpp [5:7]
+ boost/contract/detail/preprocessor/keyword/public.hpp [5:7]
+ boost/contract/detail/preprocessor/keyword/utility/is.hpp [5:7]
+ boost/contract/detail/preprocessor/keyword/virtual.hpp [5:7]
+ boost/contract/detail/static_local_var.hpp [5:7]
+ boost/contract/detail/tvariadic.hpp [5:7]
+ boost/contract/detail/type_traits/member_function_types.hpp [5:7]
+ boost/contract/detail/type_traits/mirror.hpp [5:7]
+ boost/contract/detail/type_traits/optional.hpp [5:7]
+ boost/contract/function.hpp [5:7]
+ boost/contract/old.hpp [5:7]
+ boost/contract/override.hpp [5:7]
+ boost/contract/public_function.hpp [5:7]
+ boost/contract_macro.hpp [5:7]
+
+KEEP COPYRIGHT_SERVICE_LABEL ffb359d2e5030fecfe6707e998ce6117
+BELONGS ya.make
+ License text:
+ // Copyright (c) 2006 Xiaogang Zhang, 2015 John Maddock
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/math/special_functions/ellint_rc.hpp [1:3]
+ boost/math/special_functions/ellint_rd.hpp [1:3]
+ boost/math/special_functions/ellint_rf.hpp [1:3]
+ boost/math/special_functions/ellint_rj.hpp [1:3]
+
+KEEP COPYRIGHT_SERVICE_LABEL ffda52db2697e08e0d2b391573cd37f6
+BELONGS ya.make
+ License text:
+ * Copyright (c) 2009, Gunter Winkler
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ boost/numeric/ublas/operation/c_array.hpp [8:8]
+ boost/numeric/ublas/operations.hpp [8:8]
+ boost/numeric/ublas/traits/c_array.hpp [8:8]
diff --git a/contrib/restricted/boost/.yandex_meta/devtools.licenses.report b/contrib/restricted/boost/.yandex_meta/devtools.licenses.report
new file mode 100644
index 0000000000..5f35e568d3
--- /dev/null
+++ b/contrib/restricted/boost/.yandex_meta/devtools.licenses.report
@@ -0,0 +1,19360 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# $ IGNORE_FILES {file1.ext1} {file2.ext2} - (optional) ignore listed files when generating license macro and credits
+# $
+# ${action} {license id} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
+
+KEEP BSL-1.0 0056bb214b60416bd2a0fa8da64af3a6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/singleton.hpp at line 5, boost/pool/detail/guard.hpp at line 4, boost/pool/detail/mutex.hpp at line 4, boost/pool/detail/pool_construct_simple.ipp at line 4, boost/pool/object_pool.hpp at line 4, boost/pool/pool.hpp at line 4, boost/pool/pool_alloc.hpp at line 5, boost/pool/poolfwd.hpp at line 4, boost/pool/simple_segregated_storage.hpp at line 4, boost/pool/singleton_pool.hpp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/singleton.hpp [4:8]
+ boost/pool/detail/guard.hpp [3:7]
+ boost/pool/detail/mutex.hpp [3:7]
+ boost/pool/detail/pool_construct_simple.ipp [3:7]
+ boost/pool/object_pool.hpp [3:7]
+ boost/pool/pool.hpp [3:7]
+ boost/pool/pool_alloc.hpp [4:8]
+ boost/pool/poolfwd.hpp [3:7]
+ boost/pool/simple_segregated_storage.hpp [3:7]
+ boost/pool/singleton_pool.hpp [3:7]
+
+KEEP BSL-1.0 011fcbacb89caf6fb7d35d5ddd8327fb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/detail/auto_link_archive.hpp at line 14, boost/archive/detail/auto_link_warchive.hpp at line 14, boost/archive/detail/decl.hpp at line 14, boost/cerrno.hpp at line 5, boost/config/warning_disable.hpp at line 3, boost/filesystem/convenience.hpp at line 6, boost/filesystem/exception.hpp at line 5, boost/numeric/conversion/bounds.hpp at line 3, boost/numeric/conversion/cast.hpp at line 3, boost/numeric/conversion/conversion_traits.hpp at line 3, boost/numeric/conversion/converter.hpp at line 3, boost/numeric/conversion/converter_policies.hpp at line 3, boost/numeric/conversion/detail/bounds.hpp at line 3, boost/numeric/conversion/detail/conversion_traits.hpp at line 3, boost/numeric/conversion/detail/converter.hpp at line 3, boost/numeric/conversion/detail/int_float_mixture.hpp at line 3, boost/numeric/conversion/detail/is_subranged.hpp at line 3, boost/numeric/conversion/detail/meta.hpp at line 3, boost/numeric/conversion/detail/sign_mixture.hpp at line 3, boost/numeric/conversion/detail/udt_builtin_mixture.hpp at line 3, boost/numeric/conversion/int_float_mixture.hpp at line 3, boost/numeric/conversion/int_float_mixture_enum.hpp at line 3, boost/numeric/conversion/is_subranged.hpp at line 3, boost/numeric/conversion/sign_mixture.hpp at line 3, boost/numeric/conversion/sign_mixture_enum.hpp at line 3, boost/numeric/conversion/udt_builtin_mixture.hpp at line 3, boost/numeric/conversion/udt_builtin_mixture_enum.hpp at line 3, boost/serialization/config.hpp at line 8
+ License text:
+ // Use, modification, and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/archive/detail/auto_link_archive.hpp [13:15]
+ boost/archive/detail/auto_link_warchive.hpp [13:15]
+ boost/archive/detail/decl.hpp [13:15]
+ boost/cerrno.hpp [4:6]
+ boost/config/warning_disable.hpp [2:4]
+ boost/filesystem/convenience.hpp [5:7]
+ boost/filesystem/exception.hpp [4:6]
+ boost/numeric/conversion/bounds.hpp [2:4]
+ boost/numeric/conversion/cast.hpp [2:4]
+ boost/numeric/conversion/conversion_traits.hpp [2:4]
+ boost/numeric/conversion/converter.hpp [2:4]
+ boost/numeric/conversion/converter_policies.hpp [2:4]
+ boost/numeric/conversion/detail/bounds.hpp [2:4]
+ boost/numeric/conversion/detail/conversion_traits.hpp [2:4]
+ boost/numeric/conversion/detail/converter.hpp [2:4]
+ boost/numeric/conversion/detail/int_float_mixture.hpp [2:4]
+ boost/numeric/conversion/detail/is_subranged.hpp [2:4]
+ boost/numeric/conversion/detail/meta.hpp [2:4]
+ boost/numeric/conversion/detail/sign_mixture.hpp [2:4]
+ boost/numeric/conversion/detail/udt_builtin_mixture.hpp [2:4]
+ boost/numeric/conversion/int_float_mixture.hpp [2:4]
+ boost/numeric/conversion/int_float_mixture_enum.hpp [2:4]
+ boost/numeric/conversion/is_subranged.hpp [2:4]
+ boost/numeric/conversion/sign_mixture.hpp [2:4]
+ boost/numeric/conversion/sign_mixture_enum.hpp [2:4]
+ boost/numeric/conversion/udt_builtin_mixture.hpp [2:4]
+ boost/numeric/conversion/udt_builtin_mixture_enum.hpp [2:4]
+ boost/serialization/config.hpp [7:9]
+
+KEEP BSL-1.0 019b02292c2133b845d73735b595410b
+BELONGS ya.make
+ License text:
+ // Use modification and distribution are subject to the boost Software License,
+ // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 59.38
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function_types/detail/classifier_impl/arity20_0.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity20_1.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity30_0.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity30_1.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity40_0.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity40_1.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity50_0.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity50_1.hpp [4:5]
+ boost/function_types/detail/components_impl/arity20_0.hpp [4:5]
+ boost/function_types/detail/components_impl/arity20_1.hpp [4:5]
+ boost/function_types/detail/components_impl/arity30_0.hpp [4:5]
+ boost/function_types/detail/components_impl/arity30_1.hpp [4:5]
+ boost/function_types/detail/components_impl/arity40_0.hpp [4:5]
+ boost/function_types/detail/components_impl/arity40_1.hpp [4:5]
+ boost/function_types/detail/components_impl/arity50_0.hpp [4:5]
+ boost/function_types/detail/components_impl/arity50_1.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity20_0.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity20_1.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity30_0.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity30_1.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity40_0.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity40_1.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity50_0.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity50_1.hpp [4:5]
+
+KEEP BSL-1.0 02174c266cd94438c7459adf8172f0a0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/variant.hpp at line 17
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.74
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/serialization/variant.hpp [16:20]
+
+KEEP BSL-1.0 02c5d3cff474bc6841ea7b84039888fe
+BELONGS libs/log/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/log/src/windows/simple_event_log.h at line 4
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/log/src/windows/simple_event_log.h [3:5]
+
+KEEP BSL-1.0 047703a180d1874c006c6f9eec627f0d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/logic/tribool.hpp at line 5, boost/logic/tribool_fwd.hpp at line 5, boost/logic/tribool_io.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/logic/tribool.hpp [3:6]
+ boost/logic/tribool_fwd.hpp [3:6]
+ boost/logic/tribool_io.hpp [3:6]
+
+KEEP BSL-1.0 0498682e5e2a8a1b73b9fef23aa5669e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/times2_iterator.hpp at line 6
+ License text:
+ // Copyright 2006 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/times2_iterator.hpp [4:6]
+
+KEEP BSL-1.0 05954ae47dedb48ccaf95b3af88bc2aa
+BELONGS libs/serialization/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/utf8_codecvt_facet.ipp at line 7, boost/graph/accounting.hpp at line 4, boost/graph/detail/labeled_graph_traits.hpp at line 4, boost/graph/dimacs.hpp at line 4, boost/graph/distributed/adjacency_list.hpp at line 5, boost/graph/distributed/adjlist/handlers.hpp at line 4, boost/graph/distributed/adjlist/initialize.hpp at line 4, boost/graph/distributed/adjlist/redistribute.hpp at line 4, boost/graph/distributed/boman_et_al_graph_coloring.hpp at line 4, boost/graph/distributed/breadth_first_search.hpp at line 4, boost/graph/distributed/compressed_sparse_row_graph.hpp at line 4, boost/graph/distributed/concepts.hpp at line 4, boost/graph/distributed/connected_components.hpp at line 4, boost/graph/distributed/connected_components_parallel_search.hpp at line 4, boost/graph/distributed/crauser_et_al_shortest_paths.hpp at line 4, boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp at line 4, boost/graph/distributed/delta_stepping_shortest_paths.hpp at line 4, boost/graph/distributed/depth_first_search.hpp at line 4, boost/graph/distributed/detail/dijkstra_shortest_paths.hpp at line 4, boost/graph/distributed/detail/filtered_queue.hpp at line 4, boost/graph/distributed/detail/mpi_process_group.ipp at line 8, boost/graph/distributed/detail/queue.ipp at line 4, boost/graph/distributed/detail/remote_update_set.hpp at line 4, boost/graph/distributed/detail/tag_allocator.hpp at line 6, boost/graph/distributed/dijkstra_shortest_paths.hpp at line 4, boost/graph/distributed/distributed_graph_utility.hpp at line 3, boost/graph/distributed/eager_dijkstra_shortest_paths.hpp at line 4, boost/graph/distributed/filtered_graph.hpp at line 4, boost/graph/distributed/fruchterman_reingold.hpp at line 4, boost/graph/distributed/graphviz.hpp at line 4, boost/graph/distributed/hohberg_biconnected_components.hpp at line 4, boost/graph/distributed/local_subgraph.hpp at line 4, boost/graph/distributed/mpi_process_group.hpp at line 6, boost/graph/distributed/named_graph.hpp at line 5, boost/graph/distributed/one_bit_color_map.hpp at line 4, boost/graph/distributed/page_rank.hpp at line 5, boost/graph/distributed/queue.hpp at line 4, boost/graph/distributed/reverse_graph.hpp at line 4, boost/graph/distributed/rmat_graph_generator.hpp at line 4, boost/graph/distributed/selector.hpp at line 4, boost/graph/distributed/st_connected.hpp at line 4, boost/graph/distributed/strong_components.hpp at line 4, boost/graph/distributed/two_bit_color_map.hpp at line 4, boost/graph/distributed/unsafe_serialize.hpp at line 4, boost/graph/distributed/vertex_list_adaptor.hpp at line 4, boost/graph/edmunds_karp_max_flow.hpp at line 4, boost/graph/graph_mutability_traits.hpp at line 4, boost/graph/graph_stats.hpp at line 4, boost/graph/graphml.hpp at line 5, boost/graph/howard_cycle_ratio.hpp at line 4, boost/graph/labeled_graph.hpp at line 4, boost/graph/mesh_graph_generator.hpp at line 4, boost/graph/metis.hpp at line 4, boost/graph/overloading.hpp at line 4, boost/graph/parallel/algorithm.hpp at line 4, boost/graph/parallel/basic_reduce.hpp at line 4, boost/graph/parallel/container_traits.hpp at line 4, boost/graph/parallel/detail/inplace_all_to_all.hpp at line 4, boost/graph/parallel/distribution.hpp at line 4, boost/graph/parallel/process_group.hpp at line 4, boost/graph/parallel/properties.hpp at line 4, boost/graph/parallel/simple_trigger.hpp at line 4, boost/graph/point_traits.hpp at line 4, boost/graph/rmat_graph_generator.hpp at line 4, boost/graph/ssca_graph_generator.hpp at line 4, boost/graph/st_connected.hpp at line 4, boost/graph/use_mpi.hpp at line 4, boost/graph/vertex_and_edge_range.hpp at line 4, boost/mpi.hpp at line 4, boost/mpi/allocator.hpp at line 4, boost/mpi/collectives.hpp at line 4, boost/mpi/collectives/all_gather.hpp at line 4, boost/mpi/collectives/all_gatherv.hpp at line 4, boost/mpi/collectives/all_reduce.hpp at line 5, boost/mpi/collectives/all_to_all.hpp at line 4, boost/mpi/collectives/broadcast.hpp at line 4, boost/mpi/collectives/gather.hpp at line 4, boost/mpi/collectives/gatherv.hpp at line 4, boost/mpi/collectives/reduce.hpp at line 5, boost/mpi/collectives/scan.hpp at line 5, boost/mpi/collectives/scatter.hpp at line 4, boost/mpi/collectives/scatterv.hpp at line 4, boost/mpi/collectives_fwd.hpp at line 4, boost/mpi/communicator.hpp at line 5, boost/mpi/config.hpp at line 4, boost/mpi/datatype.hpp at line 6, boost/mpi/datatype_fwd.hpp at line 4, boost/mpi/detail/binary_buffer_iprimitive.hpp at line 4, boost/mpi/detail/binary_buffer_oprimitive.hpp at line 4, boost/mpi/detail/broadcast_sc.hpp at line 4, boost/mpi/detail/communicator_sc.hpp at line 4, boost/mpi/detail/computation_tree.hpp at line 4, boost/mpi/detail/content_oarchive.hpp at line 4, boost/mpi/detail/forward_iprimitive.hpp at line 4, boost/mpi/detail/forward_oprimitive.hpp at line 4, boost/mpi/detail/forward_skeleton_iarchive.hpp at line 4, boost/mpi/detail/forward_skeleton_oarchive.hpp at line 4, boost/mpi/detail/ignore_iprimitive.hpp at line 4, boost/mpi/detail/ignore_oprimitive.hpp at line 4, boost/mpi/detail/ignore_skeleton_oarchive.hpp at line 4, boost/mpi/detail/mpi_datatype_cache.hpp at line 4, boost/mpi/detail/mpi_datatype_oarchive.hpp at line 4, boost/mpi/detail/mpi_datatype_primitive.hpp at line 4, boost/mpi/detail/packed_iprimitive.hpp at line 4, boost/mpi/detail/packed_oprimitive.hpp at line 4, boost/mpi/detail/point_to_point.hpp at line 4, boost/mpi/detail/text_skeleton_oarchive.hpp at line 4, boost/mpi/environment.hpp at line 4, boost/mpi/exception.hpp at line 4, boost/mpi/graph_communicator.hpp at line 7, boost/mpi/group.hpp at line 7, boost/mpi/inplace.hpp at line 4, boost/mpi/intercommunicator.hpp at line 7, boost/mpi/nonblocking.hpp at line 4, boost/mpi/operations.hpp at line 5, boost/mpi/packed_iarchive.hpp at line 5, boost/mpi/packed_oarchive.hpp at line 5, boost/mpi/python.hpp at line 4, boost/mpi/python/config.hpp at line 4, boost/mpi/python/serialize.hpp at line 4, boost/mpi/python/skeleton_and_content.hpp at line 4, boost/mpi/request.hpp at line 4, boost/mpi/skeleton_and_content.hpp at line 5, boost/mpi/skeleton_and_content_fwd.hpp at line 4, boost/mpi/status.hpp at line 4, boost/mpi/timer.hpp at line 4, boost/pending/relaxed_heap.hpp at line 4, boost/phoenix/stl/algorithm/detail/begin.hpp at line 6, boost/phoenix/stl/algorithm/detail/end.hpp at line 6, boost/phoenix/stl/algorithm/detail/has_equal_range.hpp at line 5, boost/phoenix/stl/algorithm/detail/has_find.hpp at line 7, boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp at line 5, boost/phoenix/stl/algorithm/detail/has_remove.hpp at line 5, boost/phoenix/stl/algorithm/detail/has_remove_if.hpp at line 5, boost/phoenix/stl/algorithm/detail/has_reverse.hpp at line 5, boost/phoenix/stl/algorithm/detail/has_sort.hpp at line 5, boost/phoenix/stl/algorithm/detail/has_unique.hpp at line 5, boost/phoenix/stl/algorithm/detail/has_upper_bound.hpp at line 5, boost/phoenix/stl/algorithm/detail/is_std_hash_map.hpp at line 5, boost/phoenix/stl/algorithm/detail/is_std_hash_set.hpp at line 5, boost/phoenix/stl/algorithm/detail/is_std_list.hpp at line 5, boost/phoenix/stl/algorithm/detail/is_std_map.hpp at line 5, boost/phoenix/stl/algorithm/detail/is_std_set.hpp at line 5, boost/phoenix/stl/algorithm/detail/is_unordered_set_or_map.hpp at line 7, boost/phoenix/stl/algorithm/querying.hpp at line 8, boost/phoenix/stl/algorithm/transformation.hpp at line 7, boost/property_map/dynamic_property_map.hpp at line 7, boost/property_map/parallel/basic_reduce.hpp at line 4, boost/property_map/parallel/caching_property_map.hpp at line 4, boost/property_map/parallel/distributed_property_map.hpp at line 4, boost/property_map/parallel/global_index_map.hpp at line 4, boost/property_map/parallel/impl/distributed_property_map.ipp at line 4, boost/property_map/parallel/local_property_map.hpp at line 4, boost/property_map/parallel/process_group.hpp at line 4, boost/property_map/parallel/simple_trigger.hpp at line 4, boost/property_map/parallel/unsafe_serialize.hpp at line 4, boost/serialization/array.hpp at line 6, boost/serialization/array_optimization.hpp at line 6, boost/serialization/array_wrapper.hpp at line 6, boost/serialization/boost_array.hpp at line 6, boost/serialization/collection_size_type.hpp at line 6, boost/serialization/is_bitwise_serializable.hpp at line 4, boost/serialization/item_version_type.hpp at line 6, boost/serialization/optional.hpp at line 5, boost/serialization/scoped_ptr.hpp at line 10, boost/serialization/wrapper.hpp at line 6, libs/serialization/src/codecvt_null.cpp at line 7
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/utf8_codecvt_facet.ipp [6:8]
+ boost/graph/accounting.hpp [3:5]
+ boost/graph/detail/labeled_graph_traits.hpp [3:5]
+ boost/graph/dimacs.hpp [3:5]
+ boost/graph/distributed/adjacency_list.hpp [4:6]
+ boost/graph/distributed/adjlist/handlers.hpp [3:5]
+ boost/graph/distributed/adjlist/initialize.hpp [3:5]
+ boost/graph/distributed/adjlist/redistribute.hpp [3:5]
+ boost/graph/distributed/boman_et_al_graph_coloring.hpp [3:5]
+ boost/graph/distributed/breadth_first_search.hpp [3:5]
+ boost/graph/distributed/compressed_sparse_row_graph.hpp [3:5]
+ boost/graph/distributed/concepts.hpp [3:5]
+ boost/graph/distributed/connected_components.hpp [3:5]
+ boost/graph/distributed/connected_components_parallel_search.hpp [3:5]
+ boost/graph/distributed/crauser_et_al_shortest_paths.hpp [3:5]
+ boost/graph/distributed/dehne_gotz_min_spanning_tree.hpp [3:5]
+ boost/graph/distributed/delta_stepping_shortest_paths.hpp [3:5]
+ boost/graph/distributed/depth_first_search.hpp [3:5]
+ boost/graph/distributed/detail/dijkstra_shortest_paths.hpp [3:5]
+ boost/graph/distributed/detail/filtered_queue.hpp [3:5]
+ boost/graph/distributed/detail/mpi_process_group.ipp [7:9]
+ boost/graph/distributed/detail/queue.ipp [3:5]
+ boost/graph/distributed/detail/remote_update_set.hpp [3:5]
+ boost/graph/distributed/detail/tag_allocator.hpp [5:7]
+ boost/graph/distributed/dijkstra_shortest_paths.hpp [3:5]
+ boost/graph/distributed/distributed_graph_utility.hpp [2:4]
+ boost/graph/distributed/eager_dijkstra_shortest_paths.hpp [3:5]
+ boost/graph/distributed/filtered_graph.hpp [3:5]
+ boost/graph/distributed/fruchterman_reingold.hpp [3:5]
+ boost/graph/distributed/graphviz.hpp [3:5]
+ boost/graph/distributed/hohberg_biconnected_components.hpp [3:5]
+ boost/graph/distributed/local_subgraph.hpp [3:5]
+ boost/graph/distributed/mpi_process_group.hpp [5:7]
+ boost/graph/distributed/named_graph.hpp [4:6]
+ boost/graph/distributed/one_bit_color_map.hpp [3:5]
+ boost/graph/distributed/page_rank.hpp [4:6]
+ boost/graph/distributed/queue.hpp [3:5]
+ boost/graph/distributed/reverse_graph.hpp [3:5]
+ boost/graph/distributed/rmat_graph_generator.hpp [3:5]
+ boost/graph/distributed/selector.hpp [3:5]
+ boost/graph/distributed/st_connected.hpp [3:5]
+ boost/graph/distributed/strong_components.hpp [3:5]
+ boost/graph/distributed/two_bit_color_map.hpp [3:5]
+ boost/graph/distributed/unsafe_serialize.hpp [3:5]
+ boost/graph/distributed/vertex_list_adaptor.hpp [3:5]
+ boost/graph/edmunds_karp_max_flow.hpp [3:5]
+ boost/graph/graph_mutability_traits.hpp [3:5]
+ boost/graph/graph_stats.hpp [3:5]
+ boost/graph/graphml.hpp [4:6]
+ boost/graph/howard_cycle_ratio.hpp [3:5]
+ boost/graph/labeled_graph.hpp [3:5]
+ boost/graph/mesh_graph_generator.hpp [3:5]
+ boost/graph/metis.hpp [3:5]
+ boost/graph/overloading.hpp [3:5]
+ boost/graph/parallel/algorithm.hpp [3:5]
+ boost/graph/parallel/basic_reduce.hpp [3:5]
+ boost/graph/parallel/container_traits.hpp [3:5]
+ boost/graph/parallel/detail/inplace_all_to_all.hpp [3:5]
+ boost/graph/parallel/distribution.hpp [3:5]
+ boost/graph/parallel/process_group.hpp [3:5]
+ boost/graph/parallel/properties.hpp [3:5]
+ boost/graph/parallel/simple_trigger.hpp [3:5]
+ boost/graph/point_traits.hpp [3:5]
+ boost/graph/rmat_graph_generator.hpp [3:5]
+ boost/graph/ssca_graph_generator.hpp [3:5]
+ boost/graph/st_connected.hpp [3:5]
+ boost/graph/use_mpi.hpp [3:5]
+ boost/graph/vertex_and_edge_range.hpp [3:5]
+ boost/mpi.hpp [3:5]
+ boost/mpi/allocator.hpp [3:5]
+ boost/mpi/collectives.hpp [3:5]
+ boost/mpi/collectives/all_gather.hpp [3:5]
+ boost/mpi/collectives/all_gatherv.hpp [3:5]
+ boost/mpi/collectives/all_reduce.hpp [4:6]
+ boost/mpi/collectives/all_to_all.hpp [3:5]
+ boost/mpi/collectives/broadcast.hpp [3:5]
+ boost/mpi/collectives/gather.hpp [3:5]
+ boost/mpi/collectives/gatherv.hpp [3:5]
+ boost/mpi/collectives/reduce.hpp [4:6]
+ boost/mpi/collectives/scan.hpp [4:6]
+ boost/mpi/collectives/scatter.hpp [3:5]
+ boost/mpi/collectives/scatterv.hpp [3:5]
+ boost/mpi/collectives_fwd.hpp [3:5]
+ boost/mpi/communicator.hpp [4:6]
+ boost/mpi/config.hpp [3:5]
+ boost/mpi/datatype.hpp [5:7]
+ boost/mpi/datatype_fwd.hpp [3:5]
+ boost/mpi/detail/binary_buffer_iprimitive.hpp [3:5]
+ boost/mpi/detail/binary_buffer_oprimitive.hpp [3:5]
+ boost/mpi/detail/broadcast_sc.hpp [3:5]
+ boost/mpi/detail/communicator_sc.hpp [3:5]
+ boost/mpi/detail/computation_tree.hpp [3:5]
+ boost/mpi/detail/content_oarchive.hpp [3:5]
+ boost/mpi/detail/forward_iprimitive.hpp [3:5]
+ boost/mpi/detail/forward_oprimitive.hpp [3:5]
+ boost/mpi/detail/forward_skeleton_iarchive.hpp [3:5]
+ boost/mpi/detail/forward_skeleton_oarchive.hpp [3:5]
+ boost/mpi/detail/ignore_iprimitive.hpp [3:5]
+ boost/mpi/detail/ignore_oprimitive.hpp [3:5]
+ boost/mpi/detail/ignore_skeleton_oarchive.hpp [3:5]
+ boost/mpi/detail/mpi_datatype_cache.hpp [3:5]
+ boost/mpi/detail/mpi_datatype_oarchive.hpp [3:5]
+ boost/mpi/detail/mpi_datatype_primitive.hpp [3:5]
+ boost/mpi/detail/packed_iprimitive.hpp [3:5]
+ boost/mpi/detail/packed_oprimitive.hpp [3:5]
+ boost/mpi/detail/point_to_point.hpp [3:5]
+ boost/mpi/detail/text_skeleton_oarchive.hpp [3:5]
+ boost/mpi/environment.hpp [3:5]
+ boost/mpi/exception.hpp [3:5]
+ boost/mpi/graph_communicator.hpp [6:8]
+ boost/mpi/group.hpp [6:8]
+ boost/mpi/inplace.hpp [3:5]
+ boost/mpi/intercommunicator.hpp [6:8]
+ boost/mpi/nonblocking.hpp [3:5]
+ boost/mpi/operations.hpp [4:6]
+ boost/mpi/packed_iarchive.hpp [4:6]
+ boost/mpi/packed_oarchive.hpp [4:6]
+ boost/mpi/python.hpp [3:5]
+ boost/mpi/python/config.hpp [3:5]
+ boost/mpi/python/serialize.hpp [3:5]
+ boost/mpi/python/skeleton_and_content.hpp [3:5]
+ boost/mpi/request.hpp [3:5]
+ boost/mpi/skeleton_and_content.hpp [4:6]
+ boost/mpi/skeleton_and_content_fwd.hpp [3:5]
+ boost/mpi/status.hpp [3:5]
+ boost/mpi/timer.hpp [3:5]
+ boost/pending/relaxed_heap.hpp [3:5]
+ boost/phoenix/stl/algorithm/detail/begin.hpp [5:7]
+ boost/phoenix/stl/algorithm/detail/end.hpp [5:7]
+ boost/phoenix/stl/algorithm/detail/has_equal_range.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/has_find.hpp [6:8]
+ boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/has_remove.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/has_remove_if.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/has_reverse.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/has_sort.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/has_unique.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/has_upper_bound.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/is_std_hash_map.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/is_std_hash_set.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/is_std_list.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/is_std_map.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/is_std_set.hpp [4:6]
+ boost/phoenix/stl/algorithm/detail/is_unordered_set_or_map.hpp [6:8]
+ boost/phoenix/stl/algorithm/querying.hpp [7:9]
+ boost/phoenix/stl/algorithm/transformation.hpp [6:8]
+ boost/property_map/dynamic_property_map.hpp [6:8]
+ boost/property_map/parallel/basic_reduce.hpp [3:5]
+ boost/property_map/parallel/caching_property_map.hpp [3:5]
+ boost/property_map/parallel/distributed_property_map.hpp [3:5]
+ boost/property_map/parallel/global_index_map.hpp [3:5]
+ boost/property_map/parallel/impl/distributed_property_map.ipp [3:5]
+ boost/property_map/parallel/local_property_map.hpp [3:5]
+ boost/property_map/parallel/process_group.hpp [3:5]
+ boost/property_map/parallel/simple_trigger.hpp [3:5]
+ boost/property_map/parallel/unsafe_serialize.hpp [3:5]
+ boost/serialization/array.hpp [5:7]
+ boost/serialization/array_optimization.hpp [5:7]
+ boost/serialization/array_wrapper.hpp [5:7]
+ boost/serialization/boost_array.hpp [5:7]
+ boost/serialization/collection_size_type.hpp [5:7]
+ boost/serialization/is_bitwise_serializable.hpp [3:5]
+ boost/serialization/item_version_type.hpp [5:7]
+ boost/serialization/optional.hpp [4:6]
+ boost/serialization/scoped_ptr.hpp [9:11]
+ boost/serialization/wrapper.hpp [5:7]
+ libs/serialization/src/codecvt_null.cpp [6:8]
+
+KEEP BSL-1.0 05cc48a3f35f6c4cd26b75b91f9d84bb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/compiler_config.hpp at line 6, boost/date_time/local_time/posix_time_zone.hpp at line 6, boost/date_time/string_convert.hpp at line 6
+ License text:
+ * Subject to the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 78.12
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/date_time/compiler_config.hpp [5:6]
+ boost/date_time/local_time/posix_time_zone.hpp [5:6]
+ boost/date_time/string_convert.hpp [5:6]
+
+KEEP BSL-1.0 06e856a793d5d61c7219b6427a238daf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function/function_base.hpp at line 6, boost/function/function_template.hpp at line 6
+ License text:
+ // Use, modification and distribution is subject to the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function/function_base.hpp [5:7]
+ boost/function/function_template.hpp [5:7]
+
+SKIP MPL-1.1 0719c83d37f34864e67338e4334355cc
+BELONGS ya.make
+ License text:
+ //! Lift a MPL-style metafunction to a Metafunction.
+ Scancode info:
+ Original SPDX id: MPL-1.1
+ Score : 80.00
+ Match type : REFERENCE
+ Links : http://www.mozilla.com/MPL/1.1/index.html, http://www.mozilla.org/MPL/MPL-1.1.html, https://spdx.org/licenses/MPL-1.1
+ Files with this license:
+ boost/hana/fwd/type.hpp [419:419]
+
+KEEP BSL-1.0 07d4ea27a275fc0b7043690f14bf03f1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/detail/file_wrapper.hpp at line 5, boost/interprocess/detail/managed_open_or_create_impl.hpp at line 5, boost/interprocess/detail/ptime_wrk.hpp at line 5, boost/interprocess/smart_ptr/detail/shared_count.hpp at line 9, boost/interprocess/smart_ptr/enable_shared_from_this.hpp at line 8, boost/interprocess/smart_ptr/intrusive_ptr.hpp at line 8, boost/interprocess/smart_ptr/scoped_ptr.hpp at line 9
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/detail/file_wrapper.hpp [3:5]
+ boost/interprocess/detail/managed_open_or_create_impl.hpp [3:5]
+ boost/interprocess/detail/ptime_wrk.hpp [3:5]
+ boost/interprocess/smart_ptr/detail/shared_count.hpp [7:9]
+ boost/interprocess/smart_ptr/enable_shared_from_this.hpp [6:8]
+ boost/interprocess/smart_ptr/intrusive_ptr.hpp [6:8]
+ boost/interprocess/smart_ptr/scoped_ptr.hpp [7:9]
+
+KEEP BSL-1.0 0974809ca97a6ae3d4791e1b39276ddd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/regex/v4/basic_regex_parser.hpp at line 8, boost/regex/v4/regex_token_iterator.hpp at line 8
+ License text:
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/regex/v4/basic_regex_parser.hpp [6:8]
+ boost/regex/v4/regex_token_iterator.hpp [6:8]
+
+KEEP BSL-1.0 09c716a03fbe135e9481759f58d4c044
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2.hpp at line 7, boost/signals2/deconstruct_ptr.hpp at line 12, boost/signals2/detail/preprocessed_arg_type_template.hpp at line 5, boost/signals2/detail/replace_slot_function.hpp at line 5, boost/signals2/detail/signal_template.hpp at line 11, boost/signals2/detail/signals_common_macros.hpp at line 8, boost/signals2/detail/slot_call_iterator.hpp at line 7, boost/signals2/detail/slot_groups.hpp at line 6, boost/signals2/detail/variadic_arg_type.hpp at line 5, boost/signals2/detail/variadic_slot_invoker.hpp at line 10, boost/signals2/expired_slot.hpp at line 6, boost/signals2/postconstructible.hpp at line 12, boost/signals2/preprocessed_signal.hpp at line 10, boost/signals2/shared_connection_block.hpp at line 6, boost/signals2/signal.hpp at line 7, boost/signals2/signal_base.hpp at line 6, boost/signals2/signal_type.hpp at line 12, boost/signals2/slot.hpp at line 7, boost/signals2/variadic_signal.hpp at line 11
+ License text:
+ // Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/signals2.hpp [5:8]
+ boost/signals2/deconstruct_ptr.hpp [10:13]
+ boost/signals2/detail/preprocessed_arg_type_template.hpp [3:6]
+ boost/signals2/detail/replace_slot_function.hpp [3:6]
+ boost/signals2/detail/signal_template.hpp [9:12]
+ boost/signals2/detail/signals_common_macros.hpp [6:9]
+ boost/signals2/detail/slot_call_iterator.hpp [5:8]
+ boost/signals2/detail/slot_groups.hpp [4:7]
+ boost/signals2/detail/variadic_arg_type.hpp [3:6]
+ boost/signals2/detail/variadic_slot_invoker.hpp [8:11]
+ boost/signals2/expired_slot.hpp [4:7]
+ boost/signals2/postconstructible.hpp [10:13]
+ boost/signals2/preprocessed_signal.hpp [8:11]
+ boost/signals2/shared_connection_block.hpp [4:7]
+ boost/signals2/signal.hpp [5:8]
+ boost/signals2/signal_base.hpp [4:7]
+ boost/signals2/signal_type.hpp [10:13]
+ boost/signals2/slot.hpp [5:8]
+ boost/signals2/variadic_signal.hpp [9:12]
+
+KEEP BSL-1.0 09eeed6bf2283f582f9d6171c7544ac2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/parallel/detail/property_holders.hpp at line 4, boost/graph/parallel/detail/untracked_pair.hpp at line 4, boost/property_map/parallel/detail/untracked_pair.hpp at line 4
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 71.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/parallel/detail/property_holders.hpp [3:4]
+ boost/graph/parallel/detail/untracked_pair.hpp [3:4]
+ boost/property_map/parallel/detail/untracked_pair.hpp [3:4]
+
+KEEP BSL-1.0 0b1ca66f26dbf14fa8ecd8f8a2eced55
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/static_vector.hpp at line 8, boost/core/ignore_unused.hpp at line 4, boost/geometry.hpp at line 11, boost/geometry/algorithms/append.hpp at line 17, boost/geometry/algorithms/area.hpp at line 16, boost/geometry/algorithms/assign.hpp at line 12, boost/geometry/algorithms/buffer.hpp at line 15, boost/geometry/algorithms/centroid.hpp at line 18, boost/geometry/algorithms/clear.hpp at line 11, boost/geometry/algorithms/comparable_distance.hpp at line 16, boost/geometry/algorithms/convert.hpp at line 16, boost/geometry/algorithms/convex_hull.hpp at line 17, boost/geometry/algorithms/correct.hpp at line 16, boost/geometry/algorithms/correct_closure.hpp at line 6, boost/geometry/algorithms/covered_by.hpp at line 16, boost/geometry/algorithms/crosses.hpp at line 17, boost/geometry/algorithms/detail/as_range.hpp at line 11, boost/geometry/algorithms/detail/assign_box_corners.hpp at line 11, boost/geometry/algorithms/detail/assign_indexed_point.hpp at line 11, boost/geometry/algorithms/detail/assign_values.hpp at line 11, boost/geometry/algorithms/detail/azimuth.hpp at line 12, boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp at line 10, boost/geometry/algorithms/detail/buffer/buffer_policies.hpp at line 10, boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp at line 11, boost/geometry/algorithms/detail/buffer/buffered_ring.hpp at line 6, boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp at line 11, boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp at line 6, boost/geometry/algorithms/detail/buffer/parallel_continue.hpp at line 6, boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp at line 10, boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp at line 11, boost/geometry/algorithms/detail/calculate_null.hpp at line 11, boost/geometry/algorithms/detail/calculate_sum.hpp at line 16, boost/geometry/algorithms/detail/centroid/translating_transformer.hpp at line 14, boost/geometry/algorithms/detail/comparable_distance/implementation.hpp at line 16, boost/geometry/algorithms/detail/comparable_distance/interface.hpp at line 16, boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp at line 11, boost/geometry/algorithms/detail/convert_point_to_point.hpp at line 11, boost/geometry/algorithms/detail/counting.hpp at line 17, boost/geometry/algorithms/detail/course.hpp at line 11, boost/geometry/algorithms/detail/covered_by/implementation.hpp at line 16, boost/geometry/algorithms/detail/covered_by/interface.hpp at line 16, boost/geometry/algorithms/detail/direction_code.hpp at line 12, boost/geometry/algorithms/detail/disjoint/areal_areal.hpp at line 18, boost/geometry/algorithms/detail/disjoint/box_box.hpp at line 18, boost/geometry/algorithms/detail/disjoint/implementation.hpp at line 18, boost/geometry/algorithms/detail/disjoint/interface.hpp at line 18, boost/geometry/algorithms/detail/disjoint/linear_areal.hpp at line 18, boost/geometry/algorithms/detail/disjoint/linear_linear.hpp at line 18, boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp at line 18, boost/geometry/algorithms/detail/disjoint/point_box.hpp at line 18, boost/geometry/algorithms/detail/disjoint/point_geometry.hpp at line 18, boost/geometry/algorithms/detail/disjoint/point_point.hpp at line 18, boost/geometry/algorithms/detail/disjoint/segment_box.hpp at line 19, boost/geometry/algorithms/detail/distance/backward_compatibility.hpp at line 17, boost/geometry/algorithms/detail/distance/default_strategies.hpp at line 17, boost/geometry/algorithms/detail/distance/implementation.hpp at line 17, boost/geometry/algorithms/detail/distance/interface.hpp at line 18, boost/geometry/algorithms/detail/distance/point_to_geometry.hpp at line 17, boost/geometry/algorithms/detail/equals/collect_vectors.hpp at line 17, boost/geometry/algorithms/detail/equals/implementation.hpp at line 18, boost/geometry/algorithms/detail/equals/interface.hpp at line 18, boost/geometry/algorithms/detail/equals/point_point.hpp at line 18, boost/geometry/algorithms/detail/extreme_points.hpp at line 14, boost/geometry/algorithms/detail/for_each_range.hpp at line 11, boost/geometry/algorithms/detail/get_left_turns.hpp at line 11, boost/geometry/algorithms/detail/get_max_size.hpp at line 9, boost/geometry/algorithms/detail/has_self_intersections.hpp at line 11, boost/geometry/algorithms/detail/interior_iterator.hpp at line 6, boost/geometry/algorithms/detail/intersection/box_box.hpp at line 11, boost/geometry/algorithms/detail/intersection/implementation.hpp at line 11, boost/geometry/algorithms/detail/intersection/interface.hpp at line 11, boost/geometry/algorithms/detail/intersection/multi.hpp at line 11, boost/geometry/algorithms/detail/intersects/implementation.hpp at line 17, boost/geometry/algorithms/detail/intersects/interface.hpp at line 17, boost/geometry/algorithms/detail/multi_modify.hpp at line 15, boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp at line 11, boost/geometry/algorithms/detail/multi_sum.hpp at line 11, boost/geometry/algorithms/detail/not.hpp at line 17, boost/geometry/algorithms/detail/occupation_info.hpp at line 11, boost/geometry/algorithms/detail/overlaps/implementation.hpp at line 16, boost/geometry/algorithms/detail/overlaps/interface.hpp at line 16, boost/geometry/algorithms/detail/overlay/add_rings.hpp at line 12, boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp at line 6, boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp at line 11, boost/geometry/algorithms/detail/overlay/assign_parents.hpp at line 11, boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp at line 10, boost/geometry/algorithms/detail/overlay/check_enrich.hpp at line 6, boost/geometry/algorithms/detail/overlay/clip_linestring.hpp at line 11, boost/geometry/algorithms/detail/overlay/cluster_info.hpp at line 6, boost/geometry/algorithms/detail/overlay/convert_ring.hpp at line 6, boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp at line 6, boost/geometry/algorithms/detail/overlay/copy_segments.hpp at line 12, boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp at line 6, boost/geometry/algorithms/detail/overlay/do_reverse.hpp at line 7, boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp at line 12, boost/geometry/algorithms/detail/overlay/enrichment_info.hpp at line 6, boost/geometry/algorithms/detail/overlay/follow.hpp at line 12, boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp at line 11, boost/geometry/algorithms/detail/overlay/get_relative_order.hpp at line 11, boost/geometry/algorithms/detail/overlay/get_ring.hpp at line 6, boost/geometry/algorithms/detail/overlay/get_turn_info.hpp at line 12, boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp at line 11, boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp at line 11, boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp at line 12, boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp at line 12, boost/geometry/algorithms/detail/overlay/get_turns.hpp at line 12, boost/geometry/algorithms/detail/overlay/handle_colocations.hpp at line 12, boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp at line 7, boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp at line 11, boost/geometry/algorithms/detail/overlay/intersection_insert.hpp at line 12, boost/geometry/algorithms/detail/overlay/is_self_turn.hpp at line 7, boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp at line 11, boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp at line 6, boost/geometry/algorithms/detail/overlay/overlay.hpp at line 13, boost/geometry/algorithms/detail/overlay/overlay_type.hpp at line 6, boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp at line 7, boost/geometry/algorithms/detail/overlay/ring_properties.hpp at line 10, boost/geometry/algorithms/detail/overlay/segment_identifier.hpp at line 6, boost/geometry/algorithms/detail/overlay/select_rings.hpp at line 11, boost/geometry/algorithms/detail/overlay/self_turn_points.hpp at line 12, boost/geometry/algorithms/detail/overlay/sort_by_side.hpp at line 12, boost/geometry/algorithms/detail/overlay/stream_info.hpp at line 6, boost/geometry/algorithms/detail/overlay/traversal.hpp at line 11, boost/geometry/algorithms/detail/overlay/traversal_info.hpp at line 6, boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp at line 10, boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp at line 6, boost/geometry/algorithms/detail/overlay/traverse.hpp at line 6, boost/geometry/algorithms/detail/overlay/turn_info.hpp at line 6, boost/geometry/algorithms/detail/overlay/visit_info.hpp at line 6, boost/geometry/algorithms/detail/partition.hpp at line 13, boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp at line 15, boost/geometry/algorithms/detail/recalculate.hpp at line 9, boost/geometry/algorithms/detail/relate/areal_areal.hpp at line 11, boost/geometry/algorithms/detail/relate/boundary_checker.hpp at line 6, boost/geometry/algorithms/detail/relate/de9im.hpp at line 11, boost/geometry/algorithms/detail/relate/follow_helpers.hpp at line 9, boost/geometry/algorithms/detail/relate/implementation.hpp at line 11, boost/geometry/algorithms/detail/relate/interface.hpp at line 11, boost/geometry/algorithms/detail/relate/linear_areal.hpp at line 11, boost/geometry/algorithms/detail/relate/linear_linear.hpp at line 11, boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp at line 8, boost/geometry/algorithms/detail/relate/point_geometry.hpp at line 11, boost/geometry/algorithms/detail/relate/point_point.hpp at line 11, boost/geometry/algorithms/detail/relate/relate_impl.hpp at line 11, boost/geometry/algorithms/detail/relate/result.hpp at line 12, boost/geometry/algorithms/detail/relate/topology_check.hpp at line 8, boost/geometry/algorithms/detail/relate/turns.hpp at line 12, boost/geometry/algorithms/detail/relation/implementation.hpp at line 8, boost/geometry/algorithms/detail/relation/interface.hpp at line 11, boost/geometry/algorithms/detail/ring_identifier.hpp at line 6, boost/geometry/algorithms/detail/sections/range_by_section.hpp at line 14, boost/geometry/algorithms/detail/sections/section_box_policies.hpp at line 6, boost/geometry/algorithms/detail/sections/section_functions.hpp at line 11, boost/geometry/algorithms/detail/sections/sectionalize.hpp at line 18, boost/geometry/algorithms/detail/signed_size_type.hpp at line 8, boost/geometry/algorithms/detail/single_geometry.hpp at line 9, boost/geometry/algorithms/detail/sub_range.hpp at line 9, boost/geometry/algorithms/detail/throw_on_empty_input.hpp at line 14, boost/geometry/algorithms/detail/touches/implementation.hpp at line 17, boost/geometry/algorithms/detail/touches/interface.hpp at line 17, boost/geometry/algorithms/detail/within/implementation.hpp at line 16, boost/geometry/algorithms/detail/within/interface.hpp at line 16, boost/geometry/algorithms/detail/within/multi_point.hpp at line 8, boost/geometry/algorithms/detail/within/point_in_geometry.hpp at line 17, boost/geometry/algorithms/detail/within/within_no_turns.hpp at line 14, boost/geometry/algorithms/difference.hpp at line 11, boost/geometry/algorithms/disjoint.hpp at line 18, boost/geometry/algorithms/dispatch/disjoint.hpp at line 18, boost/geometry/algorithms/dispatch/distance.hpp at line 17, boost/geometry/algorithms/distance.hpp at line 17, boost/geometry/algorithms/equals.hpp at line 18, boost/geometry/algorithms/for_each.hpp at line 17, boost/geometry/algorithms/intersection.hpp at line 11, boost/geometry/algorithms/intersects.hpp at line 17, boost/geometry/algorithms/is_convex.hpp at line 11, boost/geometry/algorithms/length.hpp at line 17, boost/geometry/algorithms/make.hpp at line 11, boost/geometry/algorithms/not_implemented.hpp at line 16, boost/geometry/algorithms/num_geometries.hpp at line 16, boost/geometry/algorithms/num_interior_rings.hpp at line 17, boost/geometry/algorithms/num_points.hpp at line 17, boost/geometry/algorithms/overlaps.hpp at line 16, boost/geometry/algorithms/perimeter.hpp at line 16, boost/geometry/algorithms/point_on_surface.hpp at line 14, boost/geometry/algorithms/relate.hpp at line 8, boost/geometry/algorithms/relation.hpp at line 8, boost/geometry/algorithms/remove_spikes.hpp at line 14, boost/geometry/algorithms/reverse.hpp at line 12, boost/geometry/algorithms/simplify.hpp at line 11, boost/geometry/algorithms/sym_difference.hpp at line 12, boost/geometry/algorithms/touches.hpp at line 17, boost/geometry/algorithms/transform.hpp at line 12, boost/geometry/algorithms/union.hpp at line 12, boost/geometry/algorithms/unique.hpp at line 12, boost/geometry/algorithms/within.hpp at line 16, boost/geometry/arithmetic/arithmetic.hpp at line 11, boost/geometry/arithmetic/cross_product.hpp at line 12, boost/geometry/arithmetic/determinant.hpp at line 8, boost/geometry/arithmetic/dot_product.hpp at line 11, boost/geometry/arithmetic/normalize.hpp at line 7, boost/geometry/core/access.hpp at line 11, boost/geometry/core/assert.hpp at line 11, boost/geometry/core/closure.hpp at line 16, boost/geometry/core/coordinate_dimension.hpp at line 11, boost/geometry/core/coordinate_system.hpp at line 11, boost/geometry/core/coordinate_type.hpp at line 11, boost/geometry/core/cs.hpp at line 16, boost/geometry/core/exception.hpp at line 16, boost/geometry/core/exterior_ring.hpp at line 11, boost/geometry/core/geometry_id.hpp at line 11, boost/geometry/core/interior_rings.hpp at line 11, boost/geometry/core/interior_type.hpp at line 11, boost/geometry/core/is_areal.hpp at line 11, boost/geometry/core/mutable_range.hpp at line 11, boost/geometry/core/point_order.hpp at line 16, boost/geometry/core/point_type.hpp at line 11, boost/geometry/core/radian_access.hpp at line 16, boost/geometry/core/radius.hpp at line 16, boost/geometry/core/reverse_dispatch.hpp at line 11, boost/geometry/core/ring_type.hpp at line 16, boost/geometry/core/tag.hpp at line 11, boost/geometry/core/tag_cast.hpp at line 11, boost/geometry/core/tags.hpp at line 16, boost/geometry/core/topological_dimension.hpp at line 11, boost/geometry/formulas/andoyer_inverse.hpp at line 10, boost/geometry/formulas/area_formulas.hpp at line 9, boost/geometry/formulas/authalic_radius_sqr.hpp at line 8, boost/geometry/formulas/differential_quantities.hpp at line 8, boost/geometry/formulas/eccentricity_sqr.hpp at line 8, boost/geometry/formulas/elliptic_arc_length.hpp at line 8, boost/geometry/formulas/flattening.hpp at line 8, boost/geometry/formulas/geographic.hpp at line 7, boost/geometry/formulas/gnomonic_intersection.hpp at line 8, boost/geometry/formulas/gnomonic_spheroid.hpp at line 8, boost/geometry/formulas/mean_radius.hpp at line 8, boost/geometry/formulas/result_direct.hpp at line 8, boost/geometry/formulas/result_inverse.hpp at line 8, boost/geometry/formulas/sjoberg_intersection.hpp at line 8, boost/geometry/formulas/spherical.hpp at line 8, boost/geometry/formulas/thomas_direct.hpp at line 8, boost/geometry/formulas/thomas_inverse.hpp at line 9, boost/geometry/formulas/unit_spheroid.hpp at line 8, boost/geometry/formulas/vertex_latitude.hpp at line 9, boost/geometry/formulas/vertex_longitude.hpp at line 9, boost/geometry/formulas/vincenty_direct.hpp at line 11, boost/geometry/formulas/vincenty_inverse.hpp at line 12, boost/geometry/geometries/adapted/boost_array.hpp at line 7, boost/geometry/geometries/adapted/boost_fusion.hpp at line 12, boost/geometry/geometries/adapted/boost_polygon.hpp at line 6, boost/geometry/geometries/adapted/boost_polygon/box.hpp at line 6, boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp at line 6, boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp at line 6, boost/geometry/geometries/adapted/boost_polygon/point.hpp at line 6, boost/geometry/geometries/adapted/boost_polygon/polygon.hpp at line 6, boost/geometry/geometries/adapted/boost_polygon/ring.hpp at line 6, boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp at line 6, boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp at line 6, boost/geometry/geometries/adapted/boost_range/filtered.hpp at line 6, boost/geometry/geometries/adapted/boost_range/reversed.hpp at line 6, boost/geometry/geometries/adapted/boost_range/sliced.hpp at line 6, boost/geometry/geometries/adapted/boost_range/strided.hpp at line 6, boost/geometry/geometries/adapted/boost_range/uniqued.hpp at line 6, boost/geometry/geometries/adapted/boost_tuple.hpp at line 11, boost/geometry/geometries/adapted/c_array.hpp at line 11, boost/geometry/geometries/adapted/std_array.hpp at line 8, boost/geometry/geometries/adapted/std_pair_as_segment.hpp at line 11, boost/geometry/geometries/box.hpp at line 11, boost/geometry/geometries/concepts/box_concept.hpp at line 11, boost/geometry/geometries/concepts/check.hpp at line 11, boost/geometry/geometries/concepts/linestring_concept.hpp at line 11, boost/geometry/geometries/concepts/multi_linestring_concept.hpp at line 11, boost/geometry/geometries/concepts/multi_point_concept.hpp at line 11, boost/geometry/geometries/concepts/multi_polygon_concept.hpp at line 11, boost/geometry/geometries/concepts/point_concept.hpp at line 16, boost/geometry/geometries/concepts/polygon_concept.hpp at line 11, boost/geometry/geometries/concepts/ring_concept.hpp at line 11, boost/geometry/geometries/concepts/segment_concept.hpp at line 11, boost/geometry/geometries/geometries.hpp at line 11, boost/geometry/geometries/linestring.hpp at line 12, boost/geometry/geometries/multi_linestring.hpp at line 12, boost/geometry/geometries/multi_point.hpp at line 12, boost/geometry/geometries/multi_polygon.hpp at line 12, boost/geometry/geometries/point.hpp at line 17, boost/geometry/geometries/point_xy.hpp at line 11, boost/geometry/geometries/polygon.hpp at line 12, boost/geometry/geometries/register/box.hpp at line 11, boost/geometry/geometries/register/linestring.hpp at line 11, boost/geometry/geometries/register/multi_linestring.hpp at line 11, boost/geometry/geometries/register/multi_point.hpp at line 11, boost/geometry/geometries/register/multi_polygon.hpp at line 11, boost/geometry/geometries/register/point.hpp at line 11, boost/geometry/geometries/register/ring.hpp at line 11, boost/geometry/geometries/register/segment.hpp at line 11, boost/geometry/geometries/ring.hpp at line 12, boost/geometry/geometries/segment.hpp at line 11, boost/geometry/geometries/variant.hpp at line 11, boost/geometry/geometry.hpp at line 17, boost/geometry/index/adaptors/query.hpp at line 8, boost/geometry/index/detail/algorithms/bounds.hpp at line 8, boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp at line 8, boost/geometry/index/detail/algorithms/comparable_distance_far.hpp at line 8, boost/geometry/index/detail/algorithms/comparable_distance_near.hpp at line 8, boost/geometry/index/detail/algorithms/content.hpp at line 8, boost/geometry/index/detail/algorithms/diff_abs.hpp at line 8, boost/geometry/index/detail/algorithms/intersection_content.hpp at line 8, boost/geometry/index/detail/algorithms/is_valid.hpp at line 8, boost/geometry/index/detail/algorithms/margin.hpp at line 8, boost/geometry/index/detail/algorithms/minmaxdist.hpp at line 8, boost/geometry/index/detail/algorithms/nth_element.hpp at line 6, boost/geometry/index/detail/algorithms/path_intersection.hpp at line 8, boost/geometry/index/detail/algorithms/segment_intersection.hpp at line 8, boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp at line 8, boost/geometry/index/detail/algorithms/sum_for_indexable.hpp at line 8, boost/geometry/index/detail/algorithms/union_content.hpp at line 9, boost/geometry/index/detail/assert.hpp at line 6, boost/geometry/index/detail/bounded_view.hpp at line 9, boost/geometry/index/detail/config_begin.hpp at line 6, boost/geometry/index/detail/config_end.hpp at line 6, boost/geometry/index/detail/distance_predicates.hpp at line 9, boost/geometry/index/detail/exception.hpp at line 6, boost/geometry/index/detail/is_bounding_geometry.hpp at line 6, boost/geometry/index/detail/is_indexable.hpp at line 6, boost/geometry/index/detail/meta.hpp at line 6, boost/geometry/index/detail/predicates.hpp at line 8, boost/geometry/index/detail/rtree/adaptors.hpp at line 8, boost/geometry/index/detail/rtree/iterators.hpp at line 8, boost/geometry/index/detail/rtree/kmeans/kmeans.hpp at line 8, boost/geometry/index/detail/rtree/kmeans/split.hpp at line 8, boost/geometry/index/detail/rtree/linear/linear.hpp at line 8, boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp at line 9, boost/geometry/index/detail/rtree/node/concept.hpp at line 8, boost/geometry/index/detail/rtree/node/node.hpp at line 8, boost/geometry/index/detail/rtree/node/node_elements.hpp at line 8, boost/geometry/index/detail/rtree/node/pairs.hpp at line 8, boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp at line 8, boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp at line 8, boost/geometry/index/detail/rtree/node/variant_dynamic.hpp at line 8, boost/geometry/index/detail/rtree/node/variant_static.hpp at line 8, boost/geometry/index/detail/rtree/node/variant_visitor.hpp at line 8, boost/geometry/index/detail/rtree/node/weak_dynamic.hpp at line 8, boost/geometry/index/detail/rtree/node/weak_static.hpp at line 8, boost/geometry/index/detail/rtree/node/weak_visitor.hpp at line 8, boost/geometry/index/detail/rtree/options.hpp at line 8, boost/geometry/index/detail/rtree/pack_create.hpp at line 8, boost/geometry/index/detail/rtree/quadratic/quadratic.hpp at line 8, boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp at line 8, boost/geometry/index/detail/rtree/query_iterators.hpp at line 8, boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp at line 8, boost/geometry/index/detail/rtree/rstar/insert.hpp at line 8, boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp at line 8, boost/geometry/index/detail/rtree/rstar/rstar.hpp at line 8, boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp at line 8, boost/geometry/index/detail/rtree/utilities/are_counts_ok.hpp at line 8, boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp at line 8, boost/geometry/index/detail/rtree/utilities/gl_draw.hpp at line 8, boost/geometry/index/detail/rtree/utilities/print.hpp at line 8, boost/geometry/index/detail/rtree/utilities/statistics.hpp at line 9, boost/geometry/index/detail/rtree/utilities/view.hpp at line 8, boost/geometry/index/detail/rtree/visitors/children_box.hpp at line 8, boost/geometry/index/detail/rtree/visitors/copy.hpp at line 8, boost/geometry/index/detail/rtree/visitors/count.hpp at line 8, boost/geometry/index/detail/rtree/visitors/destroy.hpp at line 8, boost/geometry/index/detail/rtree/visitors/distance_query.hpp at line 8, boost/geometry/index/detail/rtree/visitors/insert.hpp at line 8, boost/geometry/index/detail/rtree/visitors/is_leaf.hpp at line 8, boost/geometry/index/detail/rtree/visitors/iterator.hpp at line 8, boost/geometry/index/detail/rtree/visitors/remove.hpp at line 8, boost/geometry/index/detail/rtree/visitors/spatial_query.hpp at line 8, boost/geometry/index/detail/serialization.hpp at line 6, boost/geometry/index/detail/tags.hpp at line 8, boost/geometry/index/detail/translator.hpp at line 6, boost/geometry/index/detail/tuples.hpp at line 6, boost/geometry/index/detail/utilities.hpp at line 6, boost/geometry/index/detail/varray.hpp at line 7, boost/geometry/index/detail/varray_detail.hpp at line 9, boost/geometry/index/distance_predicates.hpp at line 8, boost/geometry/index/equal_to.hpp at line 6, boost/geometry/index/indexable.hpp at line 6, boost/geometry/index/inserter.hpp at line 8, boost/geometry/index/parameters.hpp at line 8, boost/geometry/index/predicates.hpp at line 8, boost/geometry/index/rtree.hpp at line 9, boost/geometry/io/dsv/write.hpp at line 12, boost/geometry/io/io.hpp at line 11, boost/geometry/io/svg/svg_mapper.hpp at line 15, boost/geometry/io/svg/write.hpp at line 15, boost/geometry/io/svg/write_svg.hpp at line 15, boost/geometry/io/svg/write_svg_multi.hpp at line 14, boost/geometry/io/wkt/detail/prefix.hpp at line 11, boost/geometry/io/wkt/detail/wkt_multi.hpp at line 11, boost/geometry/io/wkt/read.hpp at line 17, boost/geometry/io/wkt/stream.hpp at line 11, boost/geometry/io/wkt/wkt.hpp at line 11, boost/geometry/io/wkt/write.hpp at line 17, boost/geometry/iterators/base.hpp at line 11, boost/geometry/iterators/closing_iterator.hpp at line 11, boost/geometry/iterators/ever_circling_iterator.hpp at line 11, boost/geometry/multi/algorithms/append.hpp at line 17, boost/geometry/multi/algorithms/area.hpp at line 11, boost/geometry/multi/algorithms/centroid.hpp at line 11, boost/geometry/multi/algorithms/clear.hpp at line 11, boost/geometry/multi/algorithms/convert.hpp at line 11, boost/geometry/multi/algorithms/correct.hpp at line 11, boost/geometry/multi/algorithms/covered_by.hpp at line 15, boost/geometry/multi/algorithms/detail/extreme_points.hpp at line 9, boost/geometry/multi/algorithms/detail/for_each_range.hpp at line 11, boost/geometry/multi/algorithms/detail/modify.hpp at line 11, boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp at line 11, boost/geometry/multi/algorithms/detail/multi_sum.hpp at line 11, boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp at line 9, boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp at line 6, boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp at line 6, boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp at line 6, boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp at line 6, boost/geometry/multi/algorithms/detail/point_on_border.hpp at line 14, boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp at line 14, boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp at line 14, boost/geometry/multi/algorithms/disjoint.hpp at line 13, boost/geometry/multi/algorithms/distance.hpp at line 16, boost/geometry/multi/algorithms/envelope.hpp at line 11, boost/geometry/multi/algorithms/equals.hpp at line 11, boost/geometry/multi/algorithms/for_each.hpp at line 11, boost/geometry/multi/algorithms/intersection.hpp at line 11, boost/geometry/multi/algorithms/length.hpp at line 11, boost/geometry/multi/algorithms/num_geometries.hpp at line 11, boost/geometry/multi/algorithms/num_interior_rings.hpp at line 16, boost/geometry/multi/algorithms/num_points.hpp at line 16, boost/geometry/multi/algorithms/perimeter.hpp at line 11, boost/geometry/multi/algorithms/remove_spikes.hpp at line 9, boost/geometry/multi/algorithms/reverse.hpp at line 11, boost/geometry/multi/algorithms/simplify.hpp at line 11, boost/geometry/multi/algorithms/transform.hpp at line 11, boost/geometry/multi/algorithms/unique.hpp at line 11, boost/geometry/multi/algorithms/within.hpp at line 15, boost/geometry/multi/core/closure.hpp at line 11, boost/geometry/multi/core/geometry_id.hpp at line 11, boost/geometry/multi/core/interior_rings.hpp at line 11, boost/geometry/multi/core/is_areal.hpp at line 11, boost/geometry/multi/core/point_order.hpp at line 11, boost/geometry/multi/core/point_type.hpp at line 11, boost/geometry/multi/core/ring_type.hpp at line 14, boost/geometry/multi/core/tags.hpp at line 11, boost/geometry/multi/core/topological_dimension.hpp at line 11, boost/geometry/multi/geometries/concepts/check.hpp at line 11, boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp at line 11, boost/geometry/multi/geometries/concepts/multi_point_concept.hpp at line 11, boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp at line 11, boost/geometry/multi/geometries/multi_geometries.hpp at line 11, boost/geometry/multi/geometries/multi_linestring.hpp at line 11, boost/geometry/multi/geometries/multi_point.hpp at line 11, boost/geometry/multi/geometries/multi_polygon.hpp at line 11, boost/geometry/multi/geometries/register/multi_linestring.hpp at line 11, boost/geometry/multi/geometries/register/multi_point.hpp at line 11, boost/geometry/multi/geometries/register/multi_polygon.hpp at line 11, boost/geometry/multi/io/dsv/write.hpp at line 11, boost/geometry/multi/io/wkt/detail/prefix.hpp at line 11, boost/geometry/multi/io/wkt/read.hpp at line 11, boost/geometry/multi/io/wkt/wkt.hpp at line 11, boost/geometry/multi/io/wkt/write.hpp at line 11, boost/geometry/multi/multi.hpp at line 14, boost/geometry/multi/strategies/cartesian/centroid_average.hpp at line 11, boost/geometry/multi/views/detail/range_type.hpp at line 11, boost/geometry/policies/compare.hpp at line 11, boost/geometry/policies/disjoint_interrupt_policy.hpp at line 18, boost/geometry/policies/relate/direction.hpp at line 6, boost/geometry/policies/relate/intersection_points.hpp at line 10, boost/geometry/policies/relate/intersection_ratios.hpp at line 6, boost/geometry/policies/relate/tupled.hpp at line 6, boost/geometry/policies/robustness/get_rescale_policy.hpp at line 14, boost/geometry/policies/robustness/no_rescale_policy.hpp at line 9, boost/geometry/policies/robustness/rescale_policy.hpp at line 13, boost/geometry/policies/robustness/robust_point_type.hpp at line 9, boost/geometry/policies/robustness/robust_type.hpp at line 9, boost/geometry/policies/robustness/segment_ratio.hpp at line 10, boost/geometry/policies/robustness/segment_ratio_type.hpp at line 9, boost/geometry/srs/epsg.hpp at line 7, boost/geometry/srs/esri.hpp at line 7, boost/geometry/srs/iau2000.hpp at line 7, boost/geometry/srs/projection.hpp at line 10, boost/geometry/srs/projections/code.hpp at line 7, boost/geometry/srs/projections/epsg.hpp at line 10, boost/geometry/srs/projections/epsg_params.hpp at line 7, boost/geometry/srs/projections/epsg_traits.hpp at line 10, boost/geometry/srs/projections/esri.hpp at line 7, boost/geometry/srs/projections/esri_params.hpp at line 7, boost/geometry/srs/projections/esri_traits.hpp at line 7, boost/geometry/srs/projections/exception.hpp at line 10, boost/geometry/srs/projections/factory.hpp at line 10, boost/geometry/srs/projections/iau2000.hpp at line 7, boost/geometry/srs/projections/iau2000_params.hpp at line 7, boost/geometry/srs/projections/iau2000_traits.hpp at line 7, boost/geometry/srs/projections/impl/aasincos.hpp at line 7, boost/geometry/srs/projections/impl/adjlon.hpp at line 7, boost/geometry/srs/projections/impl/base_dynamic.hpp at line 10, boost/geometry/srs/projections/impl/base_static.hpp at line 10, boost/geometry/srs/projections/impl/dms_parser.hpp at line 10, boost/geometry/srs/projections/impl/factory_entry.hpp at line 10, boost/geometry/srs/projections/impl/function_overloads.hpp at line 10, boost/geometry/srs/projections/impl/geocent.hpp at line 9, boost/geometry/srs/projections/impl/pj_auth.hpp at line 11, boost/geometry/srs/projections/impl/pj_datum_set.hpp at line 11, boost/geometry/srs/projections/impl/pj_datums.hpp at line 11, boost/geometry/srs/projections/impl/pj_ell_set.hpp at line 11, boost/geometry/srs/projections/impl/pj_ellps.hpp at line 11, boost/geometry/srs/projections/impl/pj_fwd.hpp at line 11, boost/geometry/srs/projections/impl/pj_gauss.hpp at line 11, boost/geometry/srs/projections/impl/pj_init.hpp at line 11, boost/geometry/srs/projections/impl/pj_inv.hpp at line 11, boost/geometry/srs/projections/impl/pj_mlfn.hpp at line 11, boost/geometry/srs/projections/impl/pj_msfn.hpp at line 11, boost/geometry/srs/projections/impl/pj_param.hpp at line 11, boost/geometry/srs/projections/impl/pj_phi2.hpp at line 11, boost/geometry/srs/projections/impl/pj_qsfn.hpp at line 11, boost/geometry/srs/projections/impl/pj_strerrno.hpp at line 9, boost/geometry/srs/projections/impl/pj_transform.hpp at line 9, boost/geometry/srs/projections/impl/pj_tsfn.hpp at line 11, boost/geometry/srs/projections/impl/pj_units.hpp at line 11, boost/geometry/srs/projections/impl/pj_zpoly1.hpp at line 11, boost/geometry/srs/projections/impl/proj_mdist.hpp at line 7, boost/geometry/srs/projections/impl/projects.hpp at line 11, boost/geometry/srs/projections/invalid_point.hpp at line 7, boost/geometry/srs/projections/par4.hpp at line 7, boost/geometry/srs/projections/proj/aea.hpp at line 14, boost/geometry/srs/projections/proj/aeqd.hpp at line 14, boost/geometry/srs/projections/proj/airy.hpp at line 14, boost/geometry/srs/projections/proj/aitoff.hpp at line 14, boost/geometry/srs/projections/proj/august.hpp at line 14, boost/geometry/srs/projections/proj/bacon.hpp at line 14, boost/geometry/srs/projections/proj/bipc.hpp at line 14, boost/geometry/srs/projections/proj/boggs.hpp at line 14, boost/geometry/srs/projections/proj/bonne.hpp at line 14, boost/geometry/srs/projections/proj/cass.hpp at line 14, boost/geometry/srs/projections/proj/cc.hpp at line 14, boost/geometry/srs/projections/proj/cea.hpp at line 14, boost/geometry/srs/projections/proj/chamb.hpp at line 14, boost/geometry/srs/projections/proj/collg.hpp at line 14, boost/geometry/srs/projections/proj/crast.hpp at line 14, boost/geometry/srs/projections/proj/denoy.hpp at line 14, boost/geometry/srs/projections/proj/eck1.hpp at line 14, boost/geometry/srs/projections/proj/eck2.hpp at line 14, boost/geometry/srs/projections/proj/eck3.hpp at line 14, boost/geometry/srs/projections/proj/eck4.hpp at line 14, boost/geometry/srs/projections/proj/eck5.hpp at line 14, boost/geometry/srs/projections/proj/eqc.hpp at line 14, boost/geometry/srs/projections/proj/eqdc.hpp at line 14, boost/geometry/srs/projections/proj/etmerc.hpp at line 14, boost/geometry/srs/projections/proj/fahey.hpp at line 14, boost/geometry/srs/projections/proj/fouc_s.hpp at line 14, boost/geometry/srs/projections/proj/gall.hpp at line 14, boost/geometry/srs/projections/proj/geocent.hpp at line 14, boost/geometry/srs/projections/proj/geos.hpp at line 14, boost/geometry/srs/projections/proj/gins8.hpp at line 14, boost/geometry/srs/projections/proj/gn_sinu.hpp at line 14, boost/geometry/srs/projections/proj/gnom.hpp at line 14, boost/geometry/srs/projections/proj/goode.hpp at line 14, boost/geometry/srs/projections/proj/hammer.hpp at line 14, boost/geometry/srs/projections/proj/hatano.hpp at line 14, boost/geometry/srs/projections/proj/healpix.hpp at line 14, boost/geometry/srs/projections/proj/igh.hpp at line 14, boost/geometry/srs/projections/proj/imw_p.hpp at line 14, boost/geometry/srs/projections/proj/isea.hpp at line 14, boost/geometry/srs/projections/proj/krovak.hpp at line 14, boost/geometry/srs/projections/proj/labrd.hpp at line 14, boost/geometry/srs/projections/proj/laea.hpp at line 14, boost/geometry/srs/projections/proj/lagrng.hpp at line 14, boost/geometry/srs/projections/proj/larr.hpp at line 14, boost/geometry/srs/projections/proj/lask.hpp at line 14, boost/geometry/srs/projections/proj/latlong.hpp at line 14, boost/geometry/srs/projections/proj/lcc.hpp at line 14, boost/geometry/srs/projections/proj/lcca.hpp at line 14, boost/geometry/srs/projections/proj/loxim.hpp at line 14, boost/geometry/srs/projections/proj/lsat.hpp at line 14, boost/geometry/srs/projections/proj/mbt_fps.hpp at line 14, boost/geometry/srs/projections/proj/mbtfpp.hpp at line 14, boost/geometry/srs/projections/proj/mbtfpq.hpp at line 14, boost/geometry/srs/projections/proj/merc.hpp at line 14, boost/geometry/srs/projections/proj/mill.hpp at line 14, boost/geometry/srs/projections/proj/mod_ster.hpp at line 14, boost/geometry/srs/projections/proj/moll.hpp at line 14, boost/geometry/srs/projections/proj/natearth.hpp at line 14, boost/geometry/srs/projections/proj/nell.hpp at line 14, boost/geometry/srs/projections/proj/nell_h.hpp at line 14, boost/geometry/srs/projections/proj/nocol.hpp at line 14, boost/geometry/srs/projections/proj/nsper.hpp at line 14, boost/geometry/srs/projections/proj/nzmg.hpp at line 14, boost/geometry/srs/projections/proj/ob_tran.hpp at line 14, boost/geometry/srs/projections/proj/ocea.hpp at line 14, boost/geometry/srs/projections/proj/oea.hpp at line 14, boost/geometry/srs/projections/proj/omerc.hpp at line 14, boost/geometry/srs/projections/proj/ortho.hpp at line 14, boost/geometry/srs/projections/proj/poly.hpp at line 14, boost/geometry/srs/projections/proj/putp2.hpp at line 14, boost/geometry/srs/projections/proj/putp3.hpp at line 14, boost/geometry/srs/projections/proj/putp4p.hpp at line 14, boost/geometry/srs/projections/proj/putp5.hpp at line 14, boost/geometry/srs/projections/proj/putp6.hpp at line 14, boost/geometry/srs/projections/proj/qsc.hpp at line 14, boost/geometry/srs/projections/proj/robin.hpp at line 14, boost/geometry/srs/projections/proj/rouss.hpp at line 14, boost/geometry/srs/projections/proj/rpoly.hpp at line 14, boost/geometry/srs/projections/proj/sconics.hpp at line 14, boost/geometry/srs/projections/proj/somerc.hpp at line 14, boost/geometry/srs/projections/proj/stere.hpp at line 14, boost/geometry/srs/projections/proj/sterea.hpp at line 14, boost/geometry/srs/projections/proj/sts.hpp at line 14, boost/geometry/srs/projections/proj/tcc.hpp at line 14, boost/geometry/srs/projections/proj/tcea.hpp at line 14, boost/geometry/srs/projections/proj/tmerc.hpp at line 14, boost/geometry/srs/projections/proj/tpeqd.hpp at line 14, boost/geometry/srs/projections/proj/urm5.hpp at line 14, boost/geometry/srs/projections/proj/urmfps.hpp at line 14, boost/geometry/srs/projections/proj/vandg.hpp at line 14, boost/geometry/srs/projections/proj/vandg2.hpp at line 14, boost/geometry/srs/projections/proj/vandg4.hpp at line 14, boost/geometry/srs/projections/proj/wag2.hpp at line 14, boost/geometry/srs/projections/proj/wag3.hpp at line 14, boost/geometry/srs/projections/proj/wag7.hpp at line 14, boost/geometry/srs/projections/proj/wink1.hpp at line 14, boost/geometry/srs/projections/proj/wink2.hpp at line 14, boost/geometry/srs/projections/proj4.hpp at line 7, boost/geometry/srs/projections/srid_traits.hpp at line 7, boost/geometry/srs/sphere.hpp at line 16, boost/geometry/srs/spheroid.hpp at line 16, boost/geometry/srs/srs.hpp at line 16, boost/geometry/srs/transformation.hpp at line 7, boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp at line 6, boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp at line 6, boost/geometry/strategies/agnostic/hull_graham_andrew.hpp at line 14, boost/geometry/strategies/agnostic/point_in_box_by_side.hpp at line 11, boost/geometry/strategies/agnostic/point_in_point.hpp at line 8, boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp at line 9, boost/geometry/strategies/agnostic/point_in_poly_winding.hpp at line 14, boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp at line 15, boost/geometry/strategies/area.hpp at line 12, boost/geometry/strategies/area_result.hpp at line 6, boost/geometry/strategies/azimuth.hpp at line 8, boost/geometry/strategies/buffer.hpp at line 6, boost/geometry/strategies/cartesian/area.hpp at line 17, boost/geometry/strategies/cartesian/area_surveyor.hpp at line 17, boost/geometry/strategies/cartesian/azimuth.hpp at line 8, boost/geometry/strategies/cartesian/box_in_box.hpp at line 17, boost/geometry/strategies/cartesian/buffer_end_flat.hpp at line 6, boost/geometry/strategies/cartesian/buffer_end_round.hpp at line 11, boost/geometry/strategies/cartesian/buffer_join_miter.hpp at line 6, boost/geometry/strategies/cartesian/buffer_join_round.hpp at line 11, boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp at line 6, boost/geometry/strategies/cartesian/buffer_point_circle.hpp at line 11, boost/geometry/strategies/cartesian/buffer_point_square.hpp at line 4, boost/geometry/strategies/cartesian/buffer_side_straight.hpp at line 4, boost/geometry/strategies/cartesian/centroid_average.hpp at line 17, boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp at line 16, boost/geometry/strategies/cartesian/centroid_weighted_length.hpp at line 15, boost/geometry/strategies/cartesian/disjoint_segment_box.hpp at line 16, boost/geometry/strategies/cartesian/distance_projected_point.hpp at line 16, boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp at line 17, boost/geometry/strategies/cartesian/distance_pythagoras.hpp at line 11, boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp at line 16, boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp at line 16, boost/geometry/strategies/cartesian/envelope_segment.hpp at line 8, boost/geometry/strategies/cartesian/intersection.hpp at line 13, boost/geometry/strategies/cartesian/point_in_box.hpp at line 16, boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp at line 11, boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp at line 11, boost/geometry/strategies/cartesian/point_in_poly_winding.hpp at line 14, boost/geometry/strategies/cartesian/side_by_triangle.hpp at line 17, boost/geometry/strategies/cartesian/side_of_intersection.hpp at line 11, boost/geometry/strategies/centroid.hpp at line 11, boost/geometry/strategies/compare.hpp at line 16, boost/geometry/strategies/concepts/area_concept.hpp at line 12, boost/geometry/strategies/concepts/centroid_concept.hpp at line 11, boost/geometry/strategies/concepts/convex_hull_concept.hpp at line 16, boost/geometry/strategies/concepts/distance_concept.hpp at line 16, boost/geometry/strategies/concepts/segment_intersect_concept.hpp at line 11, boost/geometry/strategies/concepts/simplify_concept.hpp at line 11, boost/geometry/strategies/concepts/within_concept.hpp at line 11, boost/geometry/strategies/convex_hull.hpp at line 11, boost/geometry/strategies/covered_by.hpp at line 16, boost/geometry/strategies/default_area_result.hpp at line 12, boost/geometry/strategies/default_comparable_distance_result.hpp at line 16, boost/geometry/strategies/default_distance_result.hpp at line 16, boost/geometry/strategies/default_length_result.hpp at line 16, boost/geometry/strategies/default_strategy.hpp at line 11, boost/geometry/strategies/disjoint.hpp at line 8, boost/geometry/strategies/distance.hpp at line 16, boost/geometry/strategies/distance_result.hpp at line 18, boost/geometry/strategies/envelope.hpp at line 8, boost/geometry/strategies/geographic/area.hpp at line 10, boost/geometry/strategies/geographic/azimuth.hpp at line 8, boost/geometry/strategies/geographic/disjoint_segment_box.hpp at line 9, boost/geometry/strategies/geographic/distance.hpp at line 12, boost/geometry/strategies/geographic/distance_andoyer.hpp at line 11, boost/geometry/strategies/geographic/distance_cross_track.hpp at line 8, boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp at line 9, boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp at line 9, boost/geometry/strategies/geographic/distance_thomas.hpp at line 11, boost/geometry/strategies/geographic/distance_vincenty.hpp at line 11, boost/geometry/strategies/geographic/envelope_segment.hpp at line 8, boost/geometry/strategies/geographic/intersection.hpp at line 9, boost/geometry/strategies/geographic/intersection_elliptic.hpp at line 7, boost/geometry/strategies/geographic/mapping_ssf.hpp at line 11, boost/geometry/strategies/geographic/parameters.hpp at line 7, boost/geometry/strategies/geographic/point_in_poly_winding.hpp at line 7, boost/geometry/strategies/geographic/side.hpp at line 11, boost/geometry/strategies/geographic/side_andoyer.hpp at line 11, boost/geometry/strategies/geographic/side_thomas.hpp at line 11, boost/geometry/strategies/geographic/side_vincenty.hpp at line 11, boost/geometry/strategies/intersection.hpp at line 7, boost/geometry/strategies/intersection_result.hpp at line 10, boost/geometry/strategies/intersection_strategies.hpp at line 10, boost/geometry/strategies/relate.hpp at line 7, boost/geometry/strategies/side.hpp at line 11, boost/geometry/strategies/side_info.hpp at line 11, boost/geometry/strategies/spherical/area.hpp at line 10, boost/geometry/strategies/spherical/azimuth.hpp at line 8, boost/geometry/strategies/spherical/compare.hpp at line 11, boost/geometry/strategies/spherical/disjoint_segment_box.hpp at line 9, boost/geometry/strategies/spherical/distance_cross_track.hpp at line 12, boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp at line 8, boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp at line 15, boost/geometry/strategies/spherical/distance_haversine.hpp at line 12, boost/geometry/strategies/spherical/envelope_segment.hpp at line 8, boost/geometry/strategies/spherical/get_radius.hpp at line 10, boost/geometry/strategies/spherical/intersection.hpp at line 9, boost/geometry/strategies/spherical/point_in_poly_winding.hpp at line 14, boost/geometry/strategies/spherical/side_by_cross_track.hpp at line 12, boost/geometry/strategies/spherical/ssf.hpp at line 10, boost/geometry/strategies/strategies.hpp at line 18, boost/geometry/strategies/strategy_transform.hpp at line 16, boost/geometry/strategies/tags.hpp at line 11, boost/geometry/strategies/transform.hpp at line 11, boost/geometry/strategies/transform/inverse_transformer.hpp at line 11, boost/geometry/strategies/transform/map_transformer.hpp at line 11, boost/geometry/strategies/transform/matrix_transformers.hpp at line 16, boost/geometry/strategies/transform/srs_transformer.hpp at line 10, boost/geometry/strategies/within.hpp at line 16, boost/geometry/util/add_const_if_c.hpp at line 11, boost/geometry/util/bare_type.hpp at line 13, boost/geometry/util/calculation_type.hpp at line 8, boost/geometry/util/closure_as_bool.hpp at line 11, boost/geometry/util/combine_if.hpp at line 14, boost/geometry/util/compress_variant.hpp at line 16, boost/geometry/util/condition.hpp at line 8, boost/geometry/util/coordinate_cast.hpp at line 11, boost/geometry/util/for_each_coordinate.hpp at line 11, boost/geometry/util/has_infinite_coordinate.hpp at line 8, boost/geometry/util/has_nan_coordinate.hpp at line 9, boost/geometry/util/has_non_finite_coordinate.hpp at line 8, boost/geometry/util/math.hpp at line 17, boost/geometry/util/order_as_direction.hpp at line 11, boost/geometry/util/parameter_type_of.hpp at line 11, boost/geometry/util/promote_floating_point.hpp at line 11, boost/geometry/util/range.hpp at line 11, boost/geometry/util/rational.hpp at line 11, boost/geometry/util/select_calculation_type.hpp at line 16, boost/geometry/util/select_coordinate_type.hpp at line 16, boost/geometry/util/select_most_precise.hpp at line 16, boost/geometry/util/select_sequence_element.hpp at line 6, boost/geometry/util/transform_variant.hpp at line 16, boost/geometry/views/box_view.hpp at line 11, boost/geometry/views/closeable_view.hpp at line 11, boost/geometry/views/detail/indexed_point_view.hpp at line 14, boost/geometry/views/detail/normalized_view.hpp at line 14, boost/geometry/views/detail/points_view.hpp at line 11, boost/geometry/views/detail/range_type.hpp at line 11, boost/geometry/views/identity_view.hpp at line 11, boost/geometry/views/reversible_view.hpp at line 11, boost/geometry/views/segment_view.hpp at line 11, boost/polygon/interval_concept.hpp at line 9, boost/polygon/interval_data.hpp at line 9, boost/polygon/interval_traits.hpp at line 9, boost/polygon/point_concept.hpp at line 9, boost/polygon/point_data.hpp at line 9, boost/polygon/point_traits.hpp at line 9, boost/polygon/segment_concept.hpp at line 9, boost/polygon/segment_data.hpp at line 9, boost/polygon/segment_traits.hpp at line 9, boost/polygon/transform.hpp at line 9
+ License text:
+ // Use, modification and distribution is subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/static_vector.hpp [7:9]
+ boost/core/ignore_unused.hpp [3:5]
+ boost/geometry.hpp [10:12]
+ boost/geometry/algorithms/append.hpp [16:18]
+ boost/geometry/algorithms/area.hpp [15:17]
+ boost/geometry/algorithms/assign.hpp [11:13]
+ boost/geometry/algorithms/buffer.hpp [14:16]
+ boost/geometry/algorithms/centroid.hpp [17:19]
+ boost/geometry/algorithms/clear.hpp [10:12]
+ boost/geometry/algorithms/comparable_distance.hpp [15:17]
+ boost/geometry/algorithms/convert.hpp [15:17]
+ boost/geometry/algorithms/convex_hull.hpp [16:18]
+ boost/geometry/algorithms/correct.hpp [15:17]
+ boost/geometry/algorithms/correct_closure.hpp [5:7]
+ boost/geometry/algorithms/covered_by.hpp [15:17]
+ boost/geometry/algorithms/crosses.hpp [16:18]
+ boost/geometry/algorithms/detail/as_range.hpp [10:12]
+ boost/geometry/algorithms/detail/assign_box_corners.hpp [10:12]
+ boost/geometry/algorithms/detail/assign_indexed_point.hpp [10:12]
+ boost/geometry/algorithms/detail/assign_values.hpp [10:12]
+ boost/geometry/algorithms/detail/azimuth.hpp [11:13]
+ boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp [9:11]
+ boost/geometry/algorithms/detail/buffer/buffer_policies.hpp [9:11]
+ boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp [10:12]
+ boost/geometry/algorithms/detail/buffer/buffered_ring.hpp [5:7]
+ boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp [10:12]
+ boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp [5:7]
+ boost/geometry/algorithms/detail/buffer/parallel_continue.hpp [5:7]
+ boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp [9:11]
+ boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp [10:12]
+ boost/geometry/algorithms/detail/calculate_null.hpp [10:12]
+ boost/geometry/algorithms/detail/calculate_sum.hpp [15:17]
+ boost/geometry/algorithms/detail/centroid/translating_transformer.hpp [13:15]
+ boost/geometry/algorithms/detail/comparable_distance/implementation.hpp [15:17]
+ boost/geometry/algorithms/detail/comparable_distance/interface.hpp [15:17]
+ boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp [10:12]
+ boost/geometry/algorithms/detail/convert_point_to_point.hpp [10:12]
+ boost/geometry/algorithms/detail/counting.hpp [16:18]
+ boost/geometry/algorithms/detail/course.hpp [10:12]
+ boost/geometry/algorithms/detail/covered_by/implementation.hpp [15:17]
+ boost/geometry/algorithms/detail/covered_by/interface.hpp [15:17]
+ boost/geometry/algorithms/detail/direction_code.hpp [11:13]
+ boost/geometry/algorithms/detail/disjoint/areal_areal.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/box_box.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/implementation.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/interface.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/linear_areal.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/linear_linear.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/point_box.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/point_geometry.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/point_point.hpp [17:19]
+ boost/geometry/algorithms/detail/disjoint/segment_box.hpp [18:20]
+ boost/geometry/algorithms/detail/distance/backward_compatibility.hpp [16:18]
+ boost/geometry/algorithms/detail/distance/default_strategies.hpp [16:18]
+ boost/geometry/algorithms/detail/distance/implementation.hpp [16:18]
+ boost/geometry/algorithms/detail/distance/interface.hpp [17:19]
+ boost/geometry/algorithms/detail/distance/point_to_geometry.hpp [16:18]
+ boost/geometry/algorithms/detail/equals/collect_vectors.hpp [16:18]
+ boost/geometry/algorithms/detail/equals/implementation.hpp [17:19]
+ boost/geometry/algorithms/detail/equals/interface.hpp [17:19]
+ boost/geometry/algorithms/detail/equals/point_point.hpp [17:19]
+ boost/geometry/algorithms/detail/extreme_points.hpp [13:15]
+ boost/geometry/algorithms/detail/for_each_range.hpp [10:12]
+ boost/geometry/algorithms/detail/get_left_turns.hpp [10:12]
+ boost/geometry/algorithms/detail/get_max_size.hpp [8:10]
+ boost/geometry/algorithms/detail/has_self_intersections.hpp [10:12]
+ boost/geometry/algorithms/detail/interior_iterator.hpp [5:7]
+ boost/geometry/algorithms/detail/intersection/box_box.hpp [10:12]
+ boost/geometry/algorithms/detail/intersection/implementation.hpp [10:12]
+ boost/geometry/algorithms/detail/intersection/interface.hpp [10:12]
+ boost/geometry/algorithms/detail/intersection/multi.hpp [10:12]
+ boost/geometry/algorithms/detail/intersects/implementation.hpp [16:18]
+ boost/geometry/algorithms/detail/intersects/interface.hpp [16:18]
+ boost/geometry/algorithms/detail/multi_modify.hpp [14:16]
+ boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp [10:12]
+ boost/geometry/algorithms/detail/multi_sum.hpp [10:12]
+ boost/geometry/algorithms/detail/not.hpp [16:18]
+ boost/geometry/algorithms/detail/occupation_info.hpp [10:12]
+ boost/geometry/algorithms/detail/overlaps/implementation.hpp [15:17]
+ boost/geometry/algorithms/detail/overlaps/interface.hpp [15:17]
+ boost/geometry/algorithms/detail/overlay/add_rings.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/assign_parents.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp [9:11]
+ boost/geometry/algorithms/detail/overlay/check_enrich.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/clip_linestring.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/cluster_info.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/convert_ring.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/copy_segments.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/do_reverse.hpp [6:8]
+ boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/enrichment_info.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/follow.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/get_relative_order.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/get_ring.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/get_turn_info.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/get_turns.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/handle_colocations.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp [6:8]
+ boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/intersection_insert.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/is_self_turn.hpp [6:8]
+ boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/overlay.hpp [12:14]
+ boost/geometry/algorithms/detail/overlay/overlay_type.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp [6:8]
+ boost/geometry/algorithms/detail/overlay/ring_properties.hpp [9:11]
+ boost/geometry/algorithms/detail/overlay/segment_identifier.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/select_rings.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/self_turn_points.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/sort_by_side.hpp [11:13]
+ boost/geometry/algorithms/detail/overlay/stream_info.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/traversal.hpp [10:12]
+ boost/geometry/algorithms/detail/overlay/traversal_info.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp [9:11]
+ boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/traverse.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/turn_info.hpp [5:7]
+ boost/geometry/algorithms/detail/overlay/visit_info.hpp [5:7]
+ boost/geometry/algorithms/detail/partition.hpp [12:14]
+ boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp [14:16]
+ boost/geometry/algorithms/detail/recalculate.hpp [8:10]
+ boost/geometry/algorithms/detail/relate/areal_areal.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/boundary_checker.hpp [5:7]
+ boost/geometry/algorithms/detail/relate/de9im.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/follow_helpers.hpp [8:10]
+ boost/geometry/algorithms/detail/relate/implementation.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/interface.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/linear_areal.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/linear_linear.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp [7:9]
+ boost/geometry/algorithms/detail/relate/point_geometry.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/point_point.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/relate_impl.hpp [10:12]
+ boost/geometry/algorithms/detail/relate/result.hpp [11:13]
+ boost/geometry/algorithms/detail/relate/topology_check.hpp [7:9]
+ boost/geometry/algorithms/detail/relate/turns.hpp [11:13]
+ boost/geometry/algorithms/detail/relation/implementation.hpp [7:9]
+ boost/geometry/algorithms/detail/relation/interface.hpp [10:12]
+ boost/geometry/algorithms/detail/ring_identifier.hpp [5:7]
+ boost/geometry/algorithms/detail/sections/range_by_section.hpp [13:15]
+ boost/geometry/algorithms/detail/sections/section_box_policies.hpp [5:7]
+ boost/geometry/algorithms/detail/sections/section_functions.hpp [10:12]
+ boost/geometry/algorithms/detail/sections/sectionalize.hpp [17:19]
+ boost/geometry/algorithms/detail/signed_size_type.hpp [7:9]
+ boost/geometry/algorithms/detail/single_geometry.hpp [8:10]
+ boost/geometry/algorithms/detail/sub_range.hpp [8:10]
+ boost/geometry/algorithms/detail/throw_on_empty_input.hpp [13:15]
+ boost/geometry/algorithms/detail/touches/implementation.hpp [16:18]
+ boost/geometry/algorithms/detail/touches/interface.hpp [16:18]
+ boost/geometry/algorithms/detail/within/implementation.hpp [15:17]
+ boost/geometry/algorithms/detail/within/interface.hpp [15:17]
+ boost/geometry/algorithms/detail/within/multi_point.hpp [7:9]
+ boost/geometry/algorithms/detail/within/point_in_geometry.hpp [16:18]
+ boost/geometry/algorithms/detail/within/within_no_turns.hpp [13:15]
+ boost/geometry/algorithms/difference.hpp [10:12]
+ boost/geometry/algorithms/disjoint.hpp [17:19]
+ boost/geometry/algorithms/dispatch/disjoint.hpp [17:19]
+ boost/geometry/algorithms/dispatch/distance.hpp [16:18]
+ boost/geometry/algorithms/distance.hpp [16:18]
+ boost/geometry/algorithms/equals.hpp [17:19]
+ boost/geometry/algorithms/for_each.hpp [16:18]
+ boost/geometry/algorithms/intersection.hpp [10:12]
+ boost/geometry/algorithms/intersects.hpp [16:18]
+ boost/geometry/algorithms/is_convex.hpp [10:12]
+ boost/geometry/algorithms/length.hpp [16:18]
+ boost/geometry/algorithms/make.hpp [10:12]
+ boost/geometry/algorithms/not_implemented.hpp [15:17]
+ boost/geometry/algorithms/num_geometries.hpp [15:17]
+ boost/geometry/algorithms/num_interior_rings.hpp [16:18]
+ boost/geometry/algorithms/num_points.hpp [16:18]
+ boost/geometry/algorithms/overlaps.hpp [15:17]
+ boost/geometry/algorithms/perimeter.hpp [15:17]
+ boost/geometry/algorithms/point_on_surface.hpp [13:15]
+ boost/geometry/algorithms/relate.hpp [7:9]
+ boost/geometry/algorithms/relation.hpp [7:9]
+ boost/geometry/algorithms/remove_spikes.hpp [13:15]
+ boost/geometry/algorithms/reverse.hpp [11:13]
+ boost/geometry/algorithms/simplify.hpp [10:12]
+ boost/geometry/algorithms/sym_difference.hpp [11:13]
+ boost/geometry/algorithms/touches.hpp [16:18]
+ boost/geometry/algorithms/transform.hpp [11:13]
+ boost/geometry/algorithms/union.hpp [11:13]
+ boost/geometry/algorithms/unique.hpp [11:13]
+ boost/geometry/algorithms/within.hpp [15:17]
+ boost/geometry/arithmetic/arithmetic.hpp [10:12]
+ boost/geometry/arithmetic/cross_product.hpp [11:13]
+ boost/geometry/arithmetic/determinant.hpp [7:9]
+ boost/geometry/arithmetic/dot_product.hpp [10:12]
+ boost/geometry/arithmetic/normalize.hpp [6:8]
+ boost/geometry/core/access.hpp [10:12]
+ boost/geometry/core/assert.hpp [10:12]
+ boost/geometry/core/closure.hpp [15:17]
+ boost/geometry/core/coordinate_dimension.hpp [10:12]
+ boost/geometry/core/coordinate_system.hpp [10:12]
+ boost/geometry/core/coordinate_type.hpp [10:12]
+ boost/geometry/core/cs.hpp [15:17]
+ boost/geometry/core/exception.hpp [15:17]
+ boost/geometry/core/exterior_ring.hpp [10:12]
+ boost/geometry/core/geometry_id.hpp [10:12]
+ boost/geometry/core/interior_rings.hpp [10:12]
+ boost/geometry/core/interior_type.hpp [10:12]
+ boost/geometry/core/is_areal.hpp [10:12]
+ boost/geometry/core/mutable_range.hpp [10:12]
+ boost/geometry/core/point_order.hpp [15:17]
+ boost/geometry/core/point_type.hpp [10:12]
+ boost/geometry/core/radian_access.hpp [15:17]
+ boost/geometry/core/radius.hpp [15:17]
+ boost/geometry/core/reverse_dispatch.hpp [10:12]
+ boost/geometry/core/ring_type.hpp [15:17]
+ boost/geometry/core/tag.hpp [10:12]
+ boost/geometry/core/tag_cast.hpp [10:12]
+ boost/geometry/core/tags.hpp [15:17]
+ boost/geometry/core/topological_dimension.hpp [10:12]
+ boost/geometry/formulas/andoyer_inverse.hpp [9:11]
+ boost/geometry/formulas/area_formulas.hpp [8:10]
+ boost/geometry/formulas/authalic_radius_sqr.hpp [7:9]
+ boost/geometry/formulas/differential_quantities.hpp [7:9]
+ boost/geometry/formulas/eccentricity_sqr.hpp [7:9]
+ boost/geometry/formulas/elliptic_arc_length.hpp [7:9]
+ boost/geometry/formulas/flattening.hpp [7:9]
+ boost/geometry/formulas/geographic.hpp [6:8]
+ boost/geometry/formulas/gnomonic_intersection.hpp [7:9]
+ boost/geometry/formulas/gnomonic_spheroid.hpp [7:9]
+ boost/geometry/formulas/mean_radius.hpp [7:9]
+ boost/geometry/formulas/result_direct.hpp [7:9]
+ boost/geometry/formulas/result_inverse.hpp [7:9]
+ boost/geometry/formulas/sjoberg_intersection.hpp [7:9]
+ boost/geometry/formulas/spherical.hpp [7:9]
+ boost/geometry/formulas/thomas_direct.hpp [7:9]
+ boost/geometry/formulas/thomas_inverse.hpp [8:10]
+ boost/geometry/formulas/unit_spheroid.hpp [7:9]
+ boost/geometry/formulas/vertex_latitude.hpp [8:10]
+ boost/geometry/formulas/vertex_longitude.hpp [8:10]
+ boost/geometry/formulas/vincenty_direct.hpp [10:12]
+ boost/geometry/formulas/vincenty_inverse.hpp [11:13]
+ boost/geometry/geometries/adapted/boost_array.hpp [6:8]
+ boost/geometry/geometries/adapted/boost_fusion.hpp [11:13]
+ boost/geometry/geometries/adapted/boost_polygon.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_polygon/box.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_polygon/point.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_polygon/polygon.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_polygon/ring.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_range/filtered.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_range/reversed.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_range/sliced.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_range/strided.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_range/uniqued.hpp [5:7]
+ boost/geometry/geometries/adapted/boost_tuple.hpp [10:12]
+ boost/geometry/geometries/adapted/c_array.hpp [10:12]
+ boost/geometry/geometries/adapted/std_array.hpp [7:9]
+ boost/geometry/geometries/adapted/std_pair_as_segment.hpp [10:12]
+ boost/geometry/geometries/box.hpp [10:12]
+ boost/geometry/geometries/concepts/box_concept.hpp [10:12]
+ boost/geometry/geometries/concepts/check.hpp [10:12]
+ boost/geometry/geometries/concepts/linestring_concept.hpp [10:12]
+ boost/geometry/geometries/concepts/multi_linestring_concept.hpp [10:12]
+ boost/geometry/geometries/concepts/multi_point_concept.hpp [10:12]
+ boost/geometry/geometries/concepts/multi_polygon_concept.hpp [10:12]
+ boost/geometry/geometries/concepts/point_concept.hpp [15:17]
+ boost/geometry/geometries/concepts/polygon_concept.hpp [10:12]
+ boost/geometry/geometries/concepts/ring_concept.hpp [10:12]
+ boost/geometry/geometries/concepts/segment_concept.hpp [10:12]
+ boost/geometry/geometries/geometries.hpp [10:12]
+ boost/geometry/geometries/linestring.hpp [11:13]
+ boost/geometry/geometries/multi_linestring.hpp [11:13]
+ boost/geometry/geometries/multi_point.hpp [11:13]
+ boost/geometry/geometries/multi_polygon.hpp [11:13]
+ boost/geometry/geometries/point.hpp [16:18]
+ boost/geometry/geometries/point_xy.hpp [10:12]
+ boost/geometry/geometries/polygon.hpp [11:13]
+ boost/geometry/geometries/register/box.hpp [10:12]
+ boost/geometry/geometries/register/linestring.hpp [10:12]
+ boost/geometry/geometries/register/multi_linestring.hpp [10:12]
+ boost/geometry/geometries/register/multi_point.hpp [10:12]
+ boost/geometry/geometries/register/multi_polygon.hpp [10:12]
+ boost/geometry/geometries/register/point.hpp [10:12]
+ boost/geometry/geometries/register/ring.hpp [10:12]
+ boost/geometry/geometries/register/segment.hpp [10:12]
+ boost/geometry/geometries/ring.hpp [11:13]
+ boost/geometry/geometries/segment.hpp [10:12]
+ boost/geometry/geometries/variant.hpp [10:12]
+ boost/geometry/geometry.hpp [16:18]
+ boost/geometry/index/adaptors/query.hpp [7:9]
+ boost/geometry/index/detail/algorithms/bounds.hpp [7:9]
+ boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp [7:9]
+ boost/geometry/index/detail/algorithms/comparable_distance_far.hpp [7:9]
+ boost/geometry/index/detail/algorithms/comparable_distance_near.hpp [7:9]
+ boost/geometry/index/detail/algorithms/content.hpp [7:9]
+ boost/geometry/index/detail/algorithms/diff_abs.hpp [7:9]
+ boost/geometry/index/detail/algorithms/intersection_content.hpp [7:9]
+ boost/geometry/index/detail/algorithms/is_valid.hpp [7:9]
+ boost/geometry/index/detail/algorithms/margin.hpp [7:9]
+ boost/geometry/index/detail/algorithms/minmaxdist.hpp [7:9]
+ boost/geometry/index/detail/algorithms/nth_element.hpp [5:7]
+ boost/geometry/index/detail/algorithms/path_intersection.hpp [7:9]
+ boost/geometry/index/detail/algorithms/segment_intersection.hpp [7:9]
+ boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp [7:9]
+ boost/geometry/index/detail/algorithms/sum_for_indexable.hpp [7:9]
+ boost/geometry/index/detail/algorithms/union_content.hpp [8:10]
+ boost/geometry/index/detail/assert.hpp [5:7]
+ boost/geometry/index/detail/bounded_view.hpp [8:10]
+ boost/geometry/index/detail/config_begin.hpp [5:7]
+ boost/geometry/index/detail/config_end.hpp [5:7]
+ boost/geometry/index/detail/distance_predicates.hpp [8:10]
+ boost/geometry/index/detail/exception.hpp [5:7]
+ boost/geometry/index/detail/is_bounding_geometry.hpp [5:7]
+ boost/geometry/index/detail/is_indexable.hpp [5:7]
+ boost/geometry/index/detail/meta.hpp [5:7]
+ boost/geometry/index/detail/predicates.hpp [7:9]
+ boost/geometry/index/detail/rtree/adaptors.hpp [7:9]
+ boost/geometry/index/detail/rtree/iterators.hpp [7:9]
+ boost/geometry/index/detail/rtree/kmeans/kmeans.hpp [7:9]
+ boost/geometry/index/detail/rtree/kmeans/split.hpp [7:9]
+ boost/geometry/index/detail/rtree/linear/linear.hpp [7:9]
+ boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp [8:10]
+ boost/geometry/index/detail/rtree/node/concept.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/node.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/node_elements.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/pairs.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/variant_dynamic.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/variant_static.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/variant_visitor.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/weak_dynamic.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/weak_static.hpp [7:9]
+ boost/geometry/index/detail/rtree/node/weak_visitor.hpp [7:9]
+ boost/geometry/index/detail/rtree/options.hpp [7:9]
+ boost/geometry/index/detail/rtree/pack_create.hpp [7:9]
+ boost/geometry/index/detail/rtree/quadratic/quadratic.hpp [7:9]
+ boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp [7:9]
+ boost/geometry/index/detail/rtree/query_iterators.hpp [7:9]
+ boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp [7:9]
+ boost/geometry/index/detail/rtree/rstar/insert.hpp [7:9]
+ boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp [7:9]
+ boost/geometry/index/detail/rtree/rstar/rstar.hpp [7:9]
+ boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp [7:9]
+ boost/geometry/index/detail/rtree/utilities/are_counts_ok.hpp [7:9]
+ boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp [7:9]
+ boost/geometry/index/detail/rtree/utilities/gl_draw.hpp [7:9]
+ boost/geometry/index/detail/rtree/utilities/print.hpp [7:9]
+ boost/geometry/index/detail/rtree/utilities/statistics.hpp [8:10]
+ boost/geometry/index/detail/rtree/utilities/view.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/children_box.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/copy.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/count.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/destroy.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/distance_query.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/insert.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/is_leaf.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/iterator.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/remove.hpp [7:9]
+ boost/geometry/index/detail/rtree/visitors/spatial_query.hpp [7:9]
+ boost/geometry/index/detail/serialization.hpp [5:7]
+ boost/geometry/index/detail/tags.hpp [7:9]
+ boost/geometry/index/detail/translator.hpp [5:7]
+ boost/geometry/index/detail/tuples.hpp [5:7]
+ boost/geometry/index/detail/utilities.hpp [5:7]
+ boost/geometry/index/detail/varray.hpp [6:8]
+ boost/geometry/index/detail/varray_detail.hpp [8:10]
+ boost/geometry/index/distance_predicates.hpp [7:9]
+ boost/geometry/index/equal_to.hpp [5:7]
+ boost/geometry/index/indexable.hpp [5:7]
+ boost/geometry/index/inserter.hpp [7:9]
+ boost/geometry/index/parameters.hpp [7:9]
+ boost/geometry/index/predicates.hpp [7:9]
+ boost/geometry/index/rtree.hpp [8:10]
+ boost/geometry/io/dsv/write.hpp [11:13]
+ boost/geometry/io/io.hpp [10:12]
+ boost/geometry/io/svg/svg_mapper.hpp [14:16]
+ boost/geometry/io/svg/write.hpp [14:16]
+ boost/geometry/io/svg/write_svg.hpp [14:16]
+ boost/geometry/io/svg/write_svg_multi.hpp [13:15]
+ boost/geometry/io/wkt/detail/prefix.hpp [10:12]
+ boost/geometry/io/wkt/detail/wkt_multi.hpp [10:12]
+ boost/geometry/io/wkt/read.hpp [16:18]
+ boost/geometry/io/wkt/stream.hpp [10:12]
+ boost/geometry/io/wkt/wkt.hpp [10:12]
+ boost/geometry/io/wkt/write.hpp [16:18]
+ boost/geometry/iterators/base.hpp [10:12]
+ boost/geometry/iterators/closing_iterator.hpp [10:12]
+ boost/geometry/iterators/ever_circling_iterator.hpp [10:12]
+ boost/geometry/multi/algorithms/append.hpp [16:18]
+ boost/geometry/multi/algorithms/area.hpp [10:12]
+ boost/geometry/multi/algorithms/centroid.hpp [10:12]
+ boost/geometry/multi/algorithms/clear.hpp [10:12]
+ boost/geometry/multi/algorithms/convert.hpp [10:12]
+ boost/geometry/multi/algorithms/correct.hpp [10:12]
+ boost/geometry/multi/algorithms/covered_by.hpp [14:16]
+ boost/geometry/multi/algorithms/detail/extreme_points.hpp [8:10]
+ boost/geometry/multi/algorithms/detail/for_each_range.hpp [10:12]
+ boost/geometry/multi/algorithms/detail/modify.hpp [10:12]
+ boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp [10:12]
+ boost/geometry/multi/algorithms/detail/multi_sum.hpp [10:12]
+ boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp [8:10]
+ boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp [5:7]
+ boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp [5:7]
+ boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp [5:7]
+ boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp [5:7]
+ boost/geometry/multi/algorithms/detail/point_on_border.hpp [13:15]
+ boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp [13:15]
+ boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp [13:15]
+ boost/geometry/multi/algorithms/disjoint.hpp [12:14]
+ boost/geometry/multi/algorithms/distance.hpp [15:17]
+ boost/geometry/multi/algorithms/envelope.hpp [10:12]
+ boost/geometry/multi/algorithms/equals.hpp [10:12]
+ boost/geometry/multi/algorithms/for_each.hpp [10:12]
+ boost/geometry/multi/algorithms/intersection.hpp [10:12]
+ boost/geometry/multi/algorithms/length.hpp [10:12]
+ boost/geometry/multi/algorithms/num_geometries.hpp [10:12]
+ boost/geometry/multi/algorithms/num_interior_rings.hpp [15:17]
+ boost/geometry/multi/algorithms/num_points.hpp [15:17]
+ boost/geometry/multi/algorithms/perimeter.hpp [10:12]
+ boost/geometry/multi/algorithms/remove_spikes.hpp [8:10]
+ boost/geometry/multi/algorithms/reverse.hpp [10:12]
+ boost/geometry/multi/algorithms/simplify.hpp [10:12]
+ boost/geometry/multi/algorithms/transform.hpp [10:12]
+ boost/geometry/multi/algorithms/unique.hpp [10:12]
+ boost/geometry/multi/algorithms/within.hpp [14:16]
+ boost/geometry/multi/core/closure.hpp [10:12]
+ boost/geometry/multi/core/geometry_id.hpp [10:12]
+ boost/geometry/multi/core/interior_rings.hpp [10:12]
+ boost/geometry/multi/core/is_areal.hpp [10:12]
+ boost/geometry/multi/core/point_order.hpp [10:12]
+ boost/geometry/multi/core/point_type.hpp [10:12]
+ boost/geometry/multi/core/ring_type.hpp [13:15]
+ boost/geometry/multi/core/tags.hpp [10:12]
+ boost/geometry/multi/core/topological_dimension.hpp [10:12]
+ boost/geometry/multi/geometries/concepts/check.hpp [10:12]
+ boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp [10:12]
+ boost/geometry/multi/geometries/concepts/multi_point_concept.hpp [10:12]
+ boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp [10:12]
+ boost/geometry/multi/geometries/multi_geometries.hpp [10:12]
+ boost/geometry/multi/geometries/multi_linestring.hpp [10:12]
+ boost/geometry/multi/geometries/multi_point.hpp [10:12]
+ boost/geometry/multi/geometries/multi_polygon.hpp [10:12]
+ boost/geometry/multi/geometries/register/multi_linestring.hpp [10:12]
+ boost/geometry/multi/geometries/register/multi_point.hpp [10:12]
+ boost/geometry/multi/geometries/register/multi_polygon.hpp [10:12]
+ boost/geometry/multi/io/dsv/write.hpp [10:12]
+ boost/geometry/multi/io/wkt/detail/prefix.hpp [10:12]
+ boost/geometry/multi/io/wkt/read.hpp [10:12]
+ boost/geometry/multi/io/wkt/wkt.hpp [10:12]
+ boost/geometry/multi/io/wkt/write.hpp [10:12]
+ boost/geometry/multi/multi.hpp [13:15]
+ boost/geometry/multi/strategies/cartesian/centroid_average.hpp [10:12]
+ boost/geometry/multi/views/detail/range_type.hpp [10:12]
+ boost/geometry/policies/compare.hpp [10:12]
+ boost/geometry/policies/disjoint_interrupt_policy.hpp [17:19]
+ boost/geometry/policies/relate/direction.hpp [5:7]
+ boost/geometry/policies/relate/intersection_points.hpp [9:11]
+ boost/geometry/policies/relate/intersection_ratios.hpp [5:7]
+ boost/geometry/policies/relate/tupled.hpp [5:7]
+ boost/geometry/policies/robustness/get_rescale_policy.hpp [13:15]
+ boost/geometry/policies/robustness/no_rescale_policy.hpp [8:10]
+ boost/geometry/policies/robustness/rescale_policy.hpp [12:14]
+ boost/geometry/policies/robustness/robust_point_type.hpp [8:10]
+ boost/geometry/policies/robustness/robust_type.hpp [8:10]
+ boost/geometry/policies/robustness/segment_ratio.hpp [9:11]
+ boost/geometry/policies/robustness/segment_ratio_type.hpp [8:10]
+ boost/geometry/srs/epsg.hpp [6:8]
+ boost/geometry/srs/esri.hpp [6:8]
+ boost/geometry/srs/iau2000.hpp [6:8]
+ boost/geometry/srs/projection.hpp [9:11]
+ boost/geometry/srs/projections/code.hpp [6:8]
+ boost/geometry/srs/projections/epsg.hpp [9:11]
+ boost/geometry/srs/projections/epsg_params.hpp [6:8]
+ boost/geometry/srs/projections/epsg_traits.hpp [9:11]
+ boost/geometry/srs/projections/esri.hpp [6:8]
+ boost/geometry/srs/projections/esri_params.hpp [6:8]
+ boost/geometry/srs/projections/esri_traits.hpp [6:8]
+ boost/geometry/srs/projections/exception.hpp [9:11]
+ boost/geometry/srs/projections/factory.hpp [9:11]
+ boost/geometry/srs/projections/iau2000.hpp [6:8]
+ boost/geometry/srs/projections/iau2000_params.hpp [6:8]
+ boost/geometry/srs/projections/iau2000_traits.hpp [6:8]
+ boost/geometry/srs/projections/impl/aasincos.hpp [6:8]
+ boost/geometry/srs/projections/impl/adjlon.hpp [6:8]
+ boost/geometry/srs/projections/impl/base_dynamic.hpp [9:11]
+ boost/geometry/srs/projections/impl/base_static.hpp [9:11]
+ boost/geometry/srs/projections/impl/dms_parser.hpp [9:11]
+ boost/geometry/srs/projections/impl/factory_entry.hpp [9:11]
+ boost/geometry/srs/projections/impl/function_overloads.hpp [9:11]
+ boost/geometry/srs/projections/impl/geocent.hpp [8:10]
+ boost/geometry/srs/projections/impl/pj_auth.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_datum_set.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_datums.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_ell_set.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_ellps.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_fwd.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_gauss.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_init.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_inv.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_mlfn.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_msfn.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_param.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_phi2.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_qsfn.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_strerrno.hpp [8:10]
+ boost/geometry/srs/projections/impl/pj_transform.hpp [8:10]
+ boost/geometry/srs/projections/impl/pj_tsfn.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_units.hpp [10:12]
+ boost/geometry/srs/projections/impl/pj_zpoly1.hpp [10:12]
+ boost/geometry/srs/projections/impl/proj_mdist.hpp [6:8]
+ boost/geometry/srs/projections/impl/projects.hpp [10:12]
+ boost/geometry/srs/projections/invalid_point.hpp [6:8]
+ boost/geometry/srs/projections/par4.hpp [6:8]
+ boost/geometry/srs/projections/proj/aea.hpp [13:15]
+ boost/geometry/srs/projections/proj/aeqd.hpp [13:15]
+ boost/geometry/srs/projections/proj/airy.hpp [13:15]
+ boost/geometry/srs/projections/proj/aitoff.hpp [13:15]
+ boost/geometry/srs/projections/proj/august.hpp [13:15]
+ boost/geometry/srs/projections/proj/bacon.hpp [13:15]
+ boost/geometry/srs/projections/proj/bipc.hpp [13:15]
+ boost/geometry/srs/projections/proj/boggs.hpp [13:15]
+ boost/geometry/srs/projections/proj/bonne.hpp [13:15]
+ boost/geometry/srs/projections/proj/cass.hpp [13:15]
+ boost/geometry/srs/projections/proj/cc.hpp [13:15]
+ boost/geometry/srs/projections/proj/cea.hpp [13:15]
+ boost/geometry/srs/projections/proj/chamb.hpp [13:15]
+ boost/geometry/srs/projections/proj/collg.hpp [13:15]
+ boost/geometry/srs/projections/proj/crast.hpp [13:15]
+ boost/geometry/srs/projections/proj/denoy.hpp [13:15]
+ boost/geometry/srs/projections/proj/eck1.hpp [13:15]
+ boost/geometry/srs/projections/proj/eck2.hpp [13:15]
+ boost/geometry/srs/projections/proj/eck3.hpp [13:15]
+ boost/geometry/srs/projections/proj/eck4.hpp [13:15]
+ boost/geometry/srs/projections/proj/eck5.hpp [13:15]
+ boost/geometry/srs/projections/proj/eqc.hpp [13:15]
+ boost/geometry/srs/projections/proj/eqdc.hpp [13:15]
+ boost/geometry/srs/projections/proj/etmerc.hpp [13:15]
+ boost/geometry/srs/projections/proj/fahey.hpp [13:15]
+ boost/geometry/srs/projections/proj/fouc_s.hpp [13:15]
+ boost/geometry/srs/projections/proj/gall.hpp [13:15]
+ boost/geometry/srs/projections/proj/geocent.hpp [13:15]
+ boost/geometry/srs/projections/proj/geos.hpp [13:15]
+ boost/geometry/srs/projections/proj/gins8.hpp [13:15]
+ boost/geometry/srs/projections/proj/gn_sinu.hpp [13:15]
+ boost/geometry/srs/projections/proj/gnom.hpp [13:15]
+ boost/geometry/srs/projections/proj/goode.hpp [13:15]
+ boost/geometry/srs/projections/proj/hammer.hpp [13:15]
+ boost/geometry/srs/projections/proj/hatano.hpp [13:15]
+ boost/geometry/srs/projections/proj/healpix.hpp [13:15]
+ boost/geometry/srs/projections/proj/igh.hpp [13:15]
+ boost/geometry/srs/projections/proj/imw_p.hpp [13:15]
+ boost/geometry/srs/projections/proj/isea.hpp [13:15]
+ boost/geometry/srs/projections/proj/krovak.hpp [13:15]
+ boost/geometry/srs/projections/proj/labrd.hpp [13:15]
+ boost/geometry/srs/projections/proj/laea.hpp [13:15]
+ boost/geometry/srs/projections/proj/lagrng.hpp [13:15]
+ boost/geometry/srs/projections/proj/larr.hpp [13:15]
+ boost/geometry/srs/projections/proj/lask.hpp [13:15]
+ boost/geometry/srs/projections/proj/latlong.hpp [13:15]
+ boost/geometry/srs/projections/proj/lcc.hpp [13:15]
+ boost/geometry/srs/projections/proj/lcca.hpp [13:15]
+ boost/geometry/srs/projections/proj/loxim.hpp [13:15]
+ boost/geometry/srs/projections/proj/lsat.hpp [13:15]
+ boost/geometry/srs/projections/proj/mbt_fps.hpp [13:15]
+ boost/geometry/srs/projections/proj/mbtfpp.hpp [13:15]
+ boost/geometry/srs/projections/proj/mbtfpq.hpp [13:15]
+ boost/geometry/srs/projections/proj/merc.hpp [13:15]
+ boost/geometry/srs/projections/proj/mill.hpp [13:15]
+ boost/geometry/srs/projections/proj/mod_ster.hpp [13:15]
+ boost/geometry/srs/projections/proj/moll.hpp [13:15]
+ boost/geometry/srs/projections/proj/natearth.hpp [13:15]
+ boost/geometry/srs/projections/proj/nell.hpp [13:15]
+ boost/geometry/srs/projections/proj/nell_h.hpp [13:15]
+ boost/geometry/srs/projections/proj/nocol.hpp [13:15]
+ boost/geometry/srs/projections/proj/nsper.hpp [13:15]
+ boost/geometry/srs/projections/proj/nzmg.hpp [13:15]
+ boost/geometry/srs/projections/proj/ob_tran.hpp [13:15]
+ boost/geometry/srs/projections/proj/ocea.hpp [13:15]
+ boost/geometry/srs/projections/proj/oea.hpp [13:15]
+ boost/geometry/srs/projections/proj/omerc.hpp [13:15]
+ boost/geometry/srs/projections/proj/ortho.hpp [13:15]
+ boost/geometry/srs/projections/proj/poly.hpp [13:15]
+ boost/geometry/srs/projections/proj/putp2.hpp [13:15]
+ boost/geometry/srs/projections/proj/putp3.hpp [13:15]
+ boost/geometry/srs/projections/proj/putp4p.hpp [13:15]
+ boost/geometry/srs/projections/proj/putp5.hpp [13:15]
+ boost/geometry/srs/projections/proj/putp6.hpp [13:15]
+ boost/geometry/srs/projections/proj/qsc.hpp [13:15]
+ boost/geometry/srs/projections/proj/robin.hpp [13:15]
+ boost/geometry/srs/projections/proj/rouss.hpp [13:15]
+ boost/geometry/srs/projections/proj/rpoly.hpp [13:15]
+ boost/geometry/srs/projections/proj/sconics.hpp [13:15]
+ boost/geometry/srs/projections/proj/somerc.hpp [13:15]
+ boost/geometry/srs/projections/proj/stere.hpp [13:15]
+ boost/geometry/srs/projections/proj/sterea.hpp [13:15]
+ boost/geometry/srs/projections/proj/sts.hpp [13:15]
+ boost/geometry/srs/projections/proj/tcc.hpp [13:15]
+ boost/geometry/srs/projections/proj/tcea.hpp [13:15]
+ boost/geometry/srs/projections/proj/tmerc.hpp [13:15]
+ boost/geometry/srs/projections/proj/tpeqd.hpp [13:15]
+ boost/geometry/srs/projections/proj/urm5.hpp [13:15]
+ boost/geometry/srs/projections/proj/urmfps.hpp [13:15]
+ boost/geometry/srs/projections/proj/vandg.hpp [13:15]
+ boost/geometry/srs/projections/proj/vandg2.hpp [13:15]
+ boost/geometry/srs/projections/proj/vandg4.hpp [13:15]
+ boost/geometry/srs/projections/proj/wag2.hpp [13:15]
+ boost/geometry/srs/projections/proj/wag3.hpp [13:15]
+ boost/geometry/srs/projections/proj/wag7.hpp [13:15]
+ boost/geometry/srs/projections/proj/wink1.hpp [13:15]
+ boost/geometry/srs/projections/proj/wink2.hpp [13:15]
+ boost/geometry/srs/projections/proj4.hpp [6:8]
+ boost/geometry/srs/projections/srid_traits.hpp [6:8]
+ boost/geometry/srs/sphere.hpp [15:17]
+ boost/geometry/srs/spheroid.hpp [15:17]
+ boost/geometry/srs/srs.hpp [15:17]
+ boost/geometry/srs/transformation.hpp [6:8]
+ boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp [5:7]
+ boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp [5:7]
+ boost/geometry/strategies/agnostic/hull_graham_andrew.hpp [13:15]
+ boost/geometry/strategies/agnostic/point_in_box_by_side.hpp [10:12]
+ boost/geometry/strategies/agnostic/point_in_point.hpp [7:9]
+ boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp [8:10]
+ boost/geometry/strategies/agnostic/point_in_poly_winding.hpp [13:15]
+ boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp [14:16]
+ boost/geometry/strategies/area.hpp [11:13]
+ boost/geometry/strategies/area_result.hpp [5:7]
+ boost/geometry/strategies/azimuth.hpp [7:9]
+ boost/geometry/strategies/buffer.hpp [5:7]
+ boost/geometry/strategies/cartesian/area.hpp [16:18]
+ boost/geometry/strategies/cartesian/area_surveyor.hpp [16:18]
+ boost/geometry/strategies/cartesian/azimuth.hpp [7:9]
+ boost/geometry/strategies/cartesian/box_in_box.hpp [16:18]
+ boost/geometry/strategies/cartesian/buffer_end_flat.hpp [5:7]
+ boost/geometry/strategies/cartesian/buffer_end_round.hpp [10:12]
+ boost/geometry/strategies/cartesian/buffer_join_miter.hpp [5:7]
+ boost/geometry/strategies/cartesian/buffer_join_round.hpp [10:12]
+ boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp [5:7]
+ boost/geometry/strategies/cartesian/buffer_point_circle.hpp [10:12]
+ boost/geometry/strategies/cartesian/buffer_point_square.hpp [3:5]
+ boost/geometry/strategies/cartesian/buffer_side_straight.hpp [3:5]
+ boost/geometry/strategies/cartesian/centroid_average.hpp [16:18]
+ boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp [15:17]
+ boost/geometry/strategies/cartesian/centroid_weighted_length.hpp [14:16]
+ boost/geometry/strategies/cartesian/disjoint_segment_box.hpp [15:17]
+ boost/geometry/strategies/cartesian/distance_projected_point.hpp [15:17]
+ boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp [16:18]
+ boost/geometry/strategies/cartesian/distance_pythagoras.hpp [10:12]
+ boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp [15:17]
+ boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp [15:17]
+ boost/geometry/strategies/cartesian/envelope_segment.hpp [7:9]
+ boost/geometry/strategies/cartesian/intersection.hpp [12:14]
+ boost/geometry/strategies/cartesian/point_in_box.hpp [15:17]
+ boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp [10:12]
+ boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp [10:12]
+ boost/geometry/strategies/cartesian/point_in_poly_winding.hpp [13:15]
+ boost/geometry/strategies/cartesian/side_by_triangle.hpp [16:18]
+ boost/geometry/strategies/cartesian/side_of_intersection.hpp [10:12]
+ boost/geometry/strategies/centroid.hpp [10:12]
+ boost/geometry/strategies/compare.hpp [15:17]
+ boost/geometry/strategies/concepts/area_concept.hpp [11:13]
+ boost/geometry/strategies/concepts/centroid_concept.hpp [10:12]
+ boost/geometry/strategies/concepts/convex_hull_concept.hpp [15:17]
+ boost/geometry/strategies/concepts/distance_concept.hpp [15:17]
+ boost/geometry/strategies/concepts/segment_intersect_concept.hpp [10:12]
+ boost/geometry/strategies/concepts/simplify_concept.hpp [10:12]
+ boost/geometry/strategies/concepts/within_concept.hpp [10:12]
+ boost/geometry/strategies/convex_hull.hpp [10:12]
+ boost/geometry/strategies/covered_by.hpp [15:17]
+ boost/geometry/strategies/default_area_result.hpp [11:13]
+ boost/geometry/strategies/default_comparable_distance_result.hpp [15:17]
+ boost/geometry/strategies/default_distance_result.hpp [15:17]
+ boost/geometry/strategies/default_length_result.hpp [15:17]
+ boost/geometry/strategies/default_strategy.hpp [10:12]
+ boost/geometry/strategies/disjoint.hpp [7:9]
+ boost/geometry/strategies/distance.hpp [15:17]
+ boost/geometry/strategies/distance_result.hpp [17:19]
+ boost/geometry/strategies/envelope.hpp [7:9]
+ boost/geometry/strategies/geographic/area.hpp [9:11]
+ boost/geometry/strategies/geographic/azimuth.hpp [7:9]
+ boost/geometry/strategies/geographic/disjoint_segment_box.hpp [8:10]
+ boost/geometry/strategies/geographic/distance.hpp [11:13]
+ boost/geometry/strategies/geographic/distance_andoyer.hpp [10:12]
+ boost/geometry/strategies/geographic/distance_cross_track.hpp [7:9]
+ boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp [8:10]
+ boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp [8:10]
+ boost/geometry/strategies/geographic/distance_thomas.hpp [10:12]
+ boost/geometry/strategies/geographic/distance_vincenty.hpp [10:12]
+ boost/geometry/strategies/geographic/envelope_segment.hpp [7:9]
+ boost/geometry/strategies/geographic/intersection.hpp [8:10]
+ boost/geometry/strategies/geographic/intersection_elliptic.hpp [6:8]
+ boost/geometry/strategies/geographic/mapping_ssf.hpp [10:12]
+ boost/geometry/strategies/geographic/parameters.hpp [6:8]
+ boost/geometry/strategies/geographic/point_in_poly_winding.hpp [6:8]
+ boost/geometry/strategies/geographic/side.hpp [10:12]
+ boost/geometry/strategies/geographic/side_andoyer.hpp [10:12]
+ boost/geometry/strategies/geographic/side_thomas.hpp [10:12]
+ boost/geometry/strategies/geographic/side_vincenty.hpp [10:12]
+ boost/geometry/strategies/intersection.hpp [6:8]
+ boost/geometry/strategies/intersection_result.hpp [9:11]
+ boost/geometry/strategies/intersection_strategies.hpp [9:11]
+ boost/geometry/strategies/relate.hpp [6:8]
+ boost/geometry/strategies/side.hpp [10:12]
+ boost/geometry/strategies/side_info.hpp [10:12]
+ boost/geometry/strategies/spherical/area.hpp [9:11]
+ boost/geometry/strategies/spherical/azimuth.hpp [7:9]
+ boost/geometry/strategies/spherical/compare.hpp [10:12]
+ boost/geometry/strategies/spherical/disjoint_segment_box.hpp [8:10]
+ boost/geometry/strategies/spherical/distance_cross_track.hpp [11:13]
+ boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp [7:9]
+ boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp [14:16]
+ boost/geometry/strategies/spherical/distance_haversine.hpp [11:13]
+ boost/geometry/strategies/spherical/envelope_segment.hpp [7:9]
+ boost/geometry/strategies/spherical/get_radius.hpp [9:11]
+ boost/geometry/strategies/spherical/intersection.hpp [8:10]
+ boost/geometry/strategies/spherical/point_in_poly_winding.hpp [13:15]
+ boost/geometry/strategies/spherical/side_by_cross_track.hpp [11:13]
+ boost/geometry/strategies/spherical/ssf.hpp [9:11]
+ boost/geometry/strategies/strategies.hpp [17:19]
+ boost/geometry/strategies/strategy_transform.hpp [15:17]
+ boost/geometry/strategies/tags.hpp [10:12]
+ boost/geometry/strategies/transform.hpp [10:12]
+ boost/geometry/strategies/transform/inverse_transformer.hpp [10:12]
+ boost/geometry/strategies/transform/map_transformer.hpp [10:12]
+ boost/geometry/strategies/transform/matrix_transformers.hpp [15:17]
+ boost/geometry/strategies/transform/srs_transformer.hpp [9:11]
+ boost/geometry/strategies/within.hpp [15:17]
+ boost/geometry/util/add_const_if_c.hpp [10:12]
+ boost/geometry/util/bare_type.hpp [12:14]
+ boost/geometry/util/calculation_type.hpp [7:9]
+ boost/geometry/util/closure_as_bool.hpp [10:12]
+ boost/geometry/util/combine_if.hpp [13:15]
+ boost/geometry/util/compress_variant.hpp [15:17]
+ boost/geometry/util/condition.hpp [7:9]
+ boost/geometry/util/coordinate_cast.hpp [10:12]
+ boost/geometry/util/for_each_coordinate.hpp [10:12]
+ boost/geometry/util/has_infinite_coordinate.hpp [7:9]
+ boost/geometry/util/has_nan_coordinate.hpp [8:10]
+ boost/geometry/util/has_non_finite_coordinate.hpp [7:9]
+ boost/geometry/util/math.hpp [16:18]
+ boost/geometry/util/order_as_direction.hpp [10:12]
+ boost/geometry/util/parameter_type_of.hpp [10:12]
+ boost/geometry/util/promote_floating_point.hpp [10:12]
+ boost/geometry/util/range.hpp [10:12]
+ boost/geometry/util/rational.hpp [10:12]
+ boost/geometry/util/select_calculation_type.hpp [15:17]
+ boost/geometry/util/select_coordinate_type.hpp [15:17]
+ boost/geometry/util/select_most_precise.hpp [15:17]
+ boost/geometry/util/select_sequence_element.hpp [5:7]
+ boost/geometry/util/transform_variant.hpp [15:17]
+ boost/geometry/views/box_view.hpp [10:12]
+ boost/geometry/views/closeable_view.hpp [10:12]
+ boost/geometry/views/detail/indexed_point_view.hpp [13:15]
+ boost/geometry/views/detail/normalized_view.hpp [13:15]
+ boost/geometry/views/detail/points_view.hpp [10:12]
+ boost/geometry/views/detail/range_type.hpp [10:12]
+ boost/geometry/views/identity_view.hpp [10:12]
+ boost/geometry/views/reversible_view.hpp [10:12]
+ boost/geometry/views/segment_view.hpp [10:12]
+ boost/polygon/interval_concept.hpp [8:10]
+ boost/polygon/interval_data.hpp [8:10]
+ boost/polygon/interval_traits.hpp [8:10]
+ boost/polygon/point_concept.hpp [8:10]
+ boost/polygon/point_data.hpp [8:10]
+ boost/polygon/point_traits.hpp [8:10]
+ boost/polygon/segment_concept.hpp [8:10]
+ boost/polygon/segment_data.hpp [8:10]
+ boost/polygon/segment_traits.hpp [8:10]
+ boost/polygon/transform.hpp [8:10]
+
+KEEP BSL-1.0 0b7aba75ea29f82495a3ea92aa29dffb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/version.hpp at line 5
+ License text:
+ // (C) Copyright John maddock 1999. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/version.hpp [3:5]
+
+KEEP BSL-1.0 0b90e853579764b76ff6265207710247
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer_fwd.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/integer_fwd.hpp [3:5]
+
+SKIP LicenseRef-scancode-other-permissive 0bee3b00e8750de5f3ce9c579c53bed5
+BELONGS ya.make
+ License text:
+ // in supporting documentation. William E. Kempf makes no representations
+ // about the suitability of this software for any purpose.
+ // It is provided "as is" without express or implied warranty.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-other-permissive
+ Score : 100.00
+ Match type : NOTICE
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/other-permissive.LICENSE
+ Files with this license:
+ boost/interprocess/sync/interprocess_recursive_mutex.hpp [22:24]
+ boost/interprocess/sync/posix/mutex.hpp [22:24]
+ boost/interprocess/sync/posix/recursive_mutex.hpp [22:24]
+ boost/interprocess/sync/spin/recursive_mutex.hpp [22:24]
+
+KEEP BSL-1.0 0bfa54b6d82598f1c5f117adedeec37c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/algorithm/algorithm.hpp at line 5, boost/algorithm/clamp.hpp at line 5, boost/algorithm/cxx11/all_of.hpp at line 5, boost/algorithm/cxx11/any_of.hpp at line 5, boost/algorithm/cxx11/copy_if.hpp at line 5, boost/algorithm/cxx11/copy_n.hpp at line 5, boost/algorithm/cxx11/find_if_not.hpp at line 5, boost/algorithm/cxx11/iota.hpp at line 5, boost/algorithm/cxx11/is_partitioned.hpp at line 5, boost/algorithm/cxx11/is_permutation.hpp at line 5, boost/algorithm/cxx11/none_of.hpp at line 5, boost/algorithm/cxx11/one_of.hpp at line 5, boost/algorithm/cxx11/partition_copy.hpp at line 5, boost/algorithm/cxx11/partition_point.hpp at line 5, boost/algorithm/cxx14/equal.hpp at line 5, boost/algorithm/cxx14/is_permutation.hpp at line 5, boost/algorithm/gather.hpp at line 5, boost/algorithm/hex.hpp at line 5, boost/algorithm/is_partitioned_until.hpp at line 5, boost/algorithm/searching/boyer_moore.hpp at line 5, boost/algorithm/searching/boyer_moore_horspool.hpp at line 5, boost/algorithm/searching/detail/bm_traits.hpp at line 5, boost/algorithm/searching/detail/debugging.hpp at line 5, boost/algorithm/searching/knuth_morris_pratt.hpp at line 5, boost/algorithm/sort_subrange.hpp at line 5, boost/utility/string_ref.hpp at line 5, boost/utility/string_ref_fwd.hpp at line 5, boost/utility/string_view.hpp at line 6, boost/utility/string_view_fwd.hpp at line 5
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/algorithm/algorithm.hpp [4:5]
+ boost/algorithm/clamp.hpp [4:5]
+ boost/algorithm/cxx11/all_of.hpp [4:5]
+ boost/algorithm/cxx11/any_of.hpp [4:5]
+ boost/algorithm/cxx11/copy_if.hpp [4:5]
+ boost/algorithm/cxx11/copy_n.hpp [4:5]
+ boost/algorithm/cxx11/find_if_not.hpp [4:5]
+ boost/algorithm/cxx11/iota.hpp [4:5]
+ boost/algorithm/cxx11/is_partitioned.hpp [4:5]
+ boost/algorithm/cxx11/is_permutation.hpp [4:5]
+ boost/algorithm/cxx11/none_of.hpp [4:5]
+ boost/algorithm/cxx11/one_of.hpp [4:5]
+ boost/algorithm/cxx11/partition_copy.hpp [4:5]
+ boost/algorithm/cxx11/partition_point.hpp [4:5]
+ boost/algorithm/cxx14/equal.hpp [4:5]
+ boost/algorithm/cxx14/is_permutation.hpp [4:5]
+ boost/algorithm/gather.hpp [4:5]
+ boost/algorithm/hex.hpp [4:5]
+ boost/algorithm/is_partitioned_until.hpp [4:5]
+ boost/algorithm/searching/boyer_moore.hpp [4:5]
+ boost/algorithm/searching/boyer_moore_horspool.hpp [4:5]
+ boost/algorithm/searching/detail/bm_traits.hpp [4:5]
+ boost/algorithm/searching/detail/debugging.hpp [4:5]
+ boost/algorithm/searching/knuth_morris_pratt.hpp [4:5]
+ boost/algorithm/sort_subrange.hpp [4:5]
+ boost/utility/string_ref.hpp [4:5]
+ boost/utility/string_ref_fwd.hpp [4:5]
+ boost/utility/string_view.hpp [5:6]
+ boost/utility/string_view_fwd.hpp [4:5]
+
+KEEP BSL-1.0 0c343589979bf7b72c670455ba9f8279
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/transform/detail/expand_pack.hpp at line 17, boost/proto/transform/detail/pack_impl.hpp at line 17
+ License text:
+ // Copyright 2012 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/proto/transform/detail/expand_pack.hpp [15:17]
+ boost/proto/transform/detail/pack_impl.hpp [15:17]
+
+KEEP BSL-1.0 0cdc4a13eeef26a385639963d67b2617
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/spirit/home/karma/action.hpp at line 4, boost/spirit/home/karma/auxiliary.hpp at line 4, boost/spirit/home/karma/auxiliary/eol.hpp at line 4, boost/spirit/home/karma/auxiliary/lazy.hpp at line 5, boost/spirit/home/karma/binary.hpp at line 4, boost/spirit/home/karma/binary/padding.hpp at line 4, boost/spirit/home/karma/char.hpp at line 4, boost/spirit/home/karma/delimit_flag.hpp at line 4, boost/spirit/home/karma/detail/fail_function.hpp at line 5, boost/spirit/home/karma/detail/generate.hpp at line 4, boost/spirit/home/karma/detail/generate_auto.hpp at line 4, boost/spirit/home/karma/detail/generate_to.hpp at line 4, boost/spirit/home/karma/detail/get_casetag.hpp at line 5, boost/spirit/home/karma/detail/get_stricttag.hpp at line 4, boost/spirit/home/karma/detail/output_iterator.hpp at line 4, boost/spirit/home/karma/detail/string_compare.hpp at line 4, boost/spirit/home/karma/detail/string_generate.hpp at line 4, boost/spirit/home/karma/directive.hpp at line 4, boost/spirit/home/karma/directive/no_delimit.hpp at line 4, boost/spirit/home/karma/directive/strict_relaxed.hpp at line 4, boost/spirit/home/karma/directive/upper_lower_case.hpp at line 5, boost/spirit/home/karma/directive/verbatim.hpp at line 4, boost/spirit/home/karma/generate.hpp at line 4, boost/spirit/home/karma/generate_attr.hpp at line 4, boost/spirit/home/karma/generator.hpp at line 5, boost/spirit/home/karma/meta_compiler.hpp at line 5, boost/spirit/home/karma/nonterminal.hpp at line 4, boost/spirit/home/karma/nonterminal/detail/fcall.hpp at line 5, boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp at line 5, boost/spirit/home/karma/nonterminal/detail/parameterized.hpp at line 6, boost/spirit/home/karma/nonterminal/grammar.hpp at line 5, boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp at line 4, boost/spirit/home/karma/numeric.hpp at line 4, boost/spirit/home/karma/numeric/bool_policies.hpp at line 4, boost/spirit/home/karma/numeric/detail/bool_utils.hpp at line 4, boost/spirit/home/karma/numeric/detail/real_utils.hpp at line 4, boost/spirit/home/karma/numeric/real_policies.hpp at line 4, boost/spirit/home/karma/operator.hpp at line 4, boost/spirit/home/karma/phoenix_attributes.hpp at line 4, boost/spirit/home/karma/reference.hpp at line 5, boost/spirit/home/karma/stream/detail/format_manip.hpp at line 4, boost/spirit/home/karma/stream/detail/format_manip_auto.hpp at line 4, boost/spirit/home/karma/stream/format_manip.hpp at line 4, boost/spirit/home/karma/stream/format_manip_attr.hpp at line 4, boost/spirit/home/karma/stream/ostream_iterator.hpp at line 4, boost/spirit/home/karma/string.hpp at line 4, boost/spirit/home/karma/what.hpp at line 4, boost/spirit/home/lex.hpp at line 4, boost/spirit/home/lex/argument.hpp at line 7, boost/spirit/home/lex/argument_phoenix.hpp at line 5, boost/spirit/home/lex/detail/sequence_function.hpp at line 4, boost/spirit/home/lex/domain.hpp at line 5, boost/spirit/home/lex/lexer.hpp at line 4, boost/spirit/home/lex/lexer/action.hpp at line 4, boost/spirit/home/lex/lexer/char_token_def.hpp at line 4, boost/spirit/home/lex/lexer/lexer.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/functor.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/functor_data.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/iterator.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/position_token.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/static_functor_data.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/static_version.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/token.hpp at line 4, boost/spirit/home/lex/lexer/pass_flags.hpp at line 4, boost/spirit/home/lex/lexer/sequence.hpp at line 4, boost/spirit/home/lex/lexer/string_token_def.hpp at line 4, boost/spirit/home/lex/lexer/support_functions.hpp at line 4, boost/spirit/home/lex/lexer/support_functions_expression.hpp at line 5, boost/spirit/home/lex/lexer/terminals.hpp at line 4, boost/spirit/home/lex/lexer/token_def.hpp at line 4, boost/spirit/home/lex/lexer_lexertl.hpp at line 4, boost/spirit/home/lex/lexer_static_lexertl.hpp at line 4, boost/spirit/home/lex/lexer_type.hpp at line 5, boost/spirit/home/lex/meta_compiler.hpp at line 5, boost/spirit/home/lex/primitives.hpp at line 4, boost/spirit/home/lex/qi.hpp at line 4, boost/spirit/home/lex/qi/in_state.hpp at line 4, boost/spirit/home/lex/reference.hpp at line 5, boost/spirit/home/lex/tokenize_and_parse.hpp at line 4, boost/spirit/home/lex/tokenize_and_parse_attr.hpp at line 6, boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp at line 4, boost/spirit/home/qi/parse_attr.hpp at line 6, boost/spirit/home/support/multi_pass_wrapper.hpp at line 4, boost/spirit/repository/home/karma/directive/confix.hpp at line 4, boost/spirit/repository/home/qi/directive/confix.hpp at line 4, boost/spirit/repository/home/qi/primitive/flush_multi_pass.hpp at line 4, boost/spirit/repository/home/qi/primitive/iter_pos.hpp at line 4, boost/spirit/repository/home/support/confix.hpp at line 4, boost/spirit/repository/home/support/distinct.hpp at line 4, boost/spirit/repository/home/support/flush_multi_pass.hpp at line 4, boost/spirit/repository/home/support/kwd.hpp at line 4
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/karma/action.hpp [3:4]
+ boost/spirit/home/karma/auxiliary.hpp [3:4]
+ boost/spirit/home/karma/auxiliary/eol.hpp [3:4]
+ boost/spirit/home/karma/auxiliary/lazy.hpp [4:5]
+ boost/spirit/home/karma/binary.hpp [3:4]
+ boost/spirit/home/karma/binary/padding.hpp [3:4]
+ boost/spirit/home/karma/char.hpp [3:4]
+ boost/spirit/home/karma/delimit_flag.hpp [3:4]
+ boost/spirit/home/karma/detail/fail_function.hpp [4:5]
+ boost/spirit/home/karma/detail/generate.hpp [3:4]
+ boost/spirit/home/karma/detail/generate_auto.hpp [3:4]
+ boost/spirit/home/karma/detail/generate_to.hpp [3:4]
+ boost/spirit/home/karma/detail/get_casetag.hpp [4:5]
+ boost/spirit/home/karma/detail/get_stricttag.hpp [3:4]
+ boost/spirit/home/karma/detail/output_iterator.hpp [3:4]
+ boost/spirit/home/karma/detail/string_compare.hpp [3:4]
+ boost/spirit/home/karma/detail/string_generate.hpp [3:4]
+ boost/spirit/home/karma/directive.hpp [3:4]
+ boost/spirit/home/karma/directive/no_delimit.hpp [3:4]
+ boost/spirit/home/karma/directive/strict_relaxed.hpp [3:4]
+ boost/spirit/home/karma/directive/upper_lower_case.hpp [4:5]
+ boost/spirit/home/karma/directive/verbatim.hpp [3:4]
+ boost/spirit/home/karma/generate.hpp [3:4]
+ boost/spirit/home/karma/generate_attr.hpp [3:4]
+ boost/spirit/home/karma/generator.hpp [4:5]
+ boost/spirit/home/karma/meta_compiler.hpp [4:5]
+ boost/spirit/home/karma/nonterminal.hpp [3:4]
+ boost/spirit/home/karma/nonterminal/detail/fcall.hpp [4:5]
+ boost/spirit/home/karma/nonterminal/detail/generator_binder.hpp [4:5]
+ boost/spirit/home/karma/nonterminal/detail/parameterized.hpp [5:6]
+ boost/spirit/home/karma/nonterminal/grammar.hpp [4:5]
+ boost/spirit/home/karma/nonterminal/nonterminal_fwd.hpp [3:4]
+ boost/spirit/home/karma/numeric.hpp [3:4]
+ boost/spirit/home/karma/numeric/bool_policies.hpp [3:4]
+ boost/spirit/home/karma/numeric/detail/bool_utils.hpp [3:4]
+ boost/spirit/home/karma/numeric/detail/real_utils.hpp [3:4]
+ boost/spirit/home/karma/numeric/real_policies.hpp [3:4]
+ boost/spirit/home/karma/operator.hpp [3:4]
+ boost/spirit/home/karma/phoenix_attributes.hpp [3:4]
+ boost/spirit/home/karma/reference.hpp [4:5]
+ boost/spirit/home/karma/stream/detail/format_manip.hpp [3:4]
+ boost/spirit/home/karma/stream/detail/format_manip_auto.hpp [3:4]
+ boost/spirit/home/karma/stream/format_manip.hpp [3:4]
+ boost/spirit/home/karma/stream/format_manip_attr.hpp [3:4]
+ boost/spirit/home/karma/stream/ostream_iterator.hpp [3:4]
+ boost/spirit/home/karma/string.hpp [3:4]
+ boost/spirit/home/karma/what.hpp [3:4]
+ boost/spirit/home/lex.hpp [3:4]
+ boost/spirit/home/lex/argument.hpp [6:7]
+ boost/spirit/home/lex/argument_phoenix.hpp [4:5]
+ boost/spirit/home/lex/detail/sequence_function.hpp [3:4]
+ boost/spirit/home/lex/domain.hpp [4:5]
+ boost/spirit/home/lex/lexer.hpp [3:4]
+ boost/spirit/home/lex/lexer/action.hpp [3:4]
+ boost/spirit/home/lex/lexer/char_token_def.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexer.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/functor.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/functor_data.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/iterator.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/iterator_tokenizer.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/position_token.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/semantic_action_data.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/static_functor_data.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/static_version.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/token.hpp [3:4]
+ boost/spirit/home/lex/lexer/pass_flags.hpp [3:4]
+ boost/spirit/home/lex/lexer/sequence.hpp [3:4]
+ boost/spirit/home/lex/lexer/string_token_def.hpp [3:4]
+ boost/spirit/home/lex/lexer/support_functions.hpp [3:4]
+ boost/spirit/home/lex/lexer/support_functions_expression.hpp [4:5]
+ boost/spirit/home/lex/lexer/terminals.hpp [3:4]
+ boost/spirit/home/lex/lexer/token_def.hpp [3:4]
+ boost/spirit/home/lex/lexer_lexertl.hpp [3:4]
+ boost/spirit/home/lex/lexer_static_lexertl.hpp [3:4]
+ boost/spirit/home/lex/lexer_type.hpp [4:5]
+ boost/spirit/home/lex/meta_compiler.hpp [4:5]
+ boost/spirit/home/lex/primitives.hpp [3:4]
+ boost/spirit/home/lex/qi.hpp [3:4]
+ boost/spirit/home/lex/qi/in_state.hpp [3:4]
+ boost/spirit/home/lex/reference.hpp [4:5]
+ boost/spirit/home/lex/tokenize_and_parse.hpp [3:4]
+ boost/spirit/home/lex/tokenize_and_parse_attr.hpp [5:6]
+ boost/spirit/home/qi/nonterminal/nonterminal_fwd.hpp [3:4]
+ boost/spirit/home/qi/parse_attr.hpp [5:6]
+ boost/spirit/home/support/multi_pass_wrapper.hpp [3:4]
+ boost/spirit/repository/home/karma/directive/confix.hpp [3:4]
+ boost/spirit/repository/home/qi/directive/confix.hpp [3:4]
+ boost/spirit/repository/home/qi/primitive/flush_multi_pass.hpp [3:4]
+ boost/spirit/repository/home/qi/primitive/iter_pos.hpp [3:4]
+ boost/spirit/repository/home/support/confix.hpp [3:4]
+ boost/spirit/repository/home/support/distinct.hpp [3:4]
+ boost/spirit/repository/home/support/flush_multi_pass.hpp [3:4]
+ boost/spirit/repository/home/support/kwd.hpp [3:4]
+
+KEEP BSL-1.0 0f69183a9abbaa4c04784abb1ed11d48
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread.hpp at line 6
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/thread.hpp [5:6]
+
+KEEP BSL-1.0 10125f34e10cfbd1d22b3a71ea1344d0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/detail/config/fpos.hpp at line 3
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/iostreams/detail/config/fpos.hpp [2:3]
+
+KEEP BSL-1.0 109c052486685fdcd3c62f6626e916c6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/static_warning.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/serialization/static_warning.hpp [5:12]
+
+KEEP BSD-3-Clause 10c780d53468f8ec46403841a1d90c29
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSD-3-Clause
+ Score : 98.59
+ Match type : TEXT
+ Links : http://www.opensource.org/licenses/BSD-3-Clause, https://spdx.org/licenses/BSD-3-Clause
+ Files with this license:
+ boost/compute/random/threefry_engine.hpp [83:108]
+
+KEEP BSL-1.0 1122abc9579bd663d9e0afd146af9996
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/spirit.hpp at line 7, boost/spirit/home/classic.hpp at line 17, boost/spirit/home/classic/actor.hpp at line 6, boost/spirit/home/classic/actor/assign_actor.hpp at line 6, boost/spirit/home/classic/actor/assign_key_actor.hpp at line 6, boost/spirit/home/classic/actor/clear_actor.hpp at line 6, boost/spirit/home/classic/actor/decrement_actor.hpp at line 6, boost/spirit/home/classic/actor/erase_actor.hpp at line 6, boost/spirit/home/classic/actor/increment_actor.hpp at line 6, boost/spirit/home/classic/actor/insert_at_actor.hpp at line 6, boost/spirit/home/classic/actor/insert_key_actor.hpp at line 6, boost/spirit/home/classic/actor/push_back_actor.hpp at line 6, boost/spirit/home/classic/actor/push_front_actor.hpp at line 6, boost/spirit/home/classic/actor/ref_actor.hpp at line 6, boost/spirit/home/classic/actor/ref_const_ref_actor.hpp at line 6, boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp at line 6, boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp at line 6, boost/spirit/home/classic/actor/ref_value_actor.hpp at line 7, boost/spirit/home/classic/actor/swap_actor.hpp at line 6, boost/spirit/home/classic/actor/typeof.hpp at line 6, boost/spirit/home/classic/attribute.hpp at line 7, boost/spirit/home/classic/attribute/closure.hpp at line 7, boost/spirit/home/classic/attribute/closure_context.hpp at line 7, boost/spirit/home/classic/attribute/closure_fwd.hpp at line 6, boost/spirit/home/classic/attribute/parametric.hpp at line 6, boost/spirit/home/classic/attribute/typeof.hpp at line 6, boost/spirit/home/classic/core.hpp at line 11, boost/spirit/home/classic/core/assert.hpp at line 7, boost/spirit/home/classic/core/composite/actions.hpp at line 6, boost/spirit/home/classic/core/composite/alternative.hpp at line 8, boost/spirit/home/classic/core/composite/composite.hpp at line 6, boost/spirit/home/classic/core/composite/difference.hpp at line 8, boost/spirit/home/classic/core/composite/directives.hpp at line 7, boost/spirit/home/classic/core/composite/epsilon.hpp at line 7, boost/spirit/home/classic/core/composite/exclusive_or.hpp at line 8, boost/spirit/home/classic/core/composite/intersection.hpp at line 8, boost/spirit/home/classic/core/composite/kleene_star.hpp at line 8, boost/spirit/home/classic/core/composite/list.hpp at line 8, boost/spirit/home/classic/core/composite/no_actions.hpp at line 7, boost/spirit/home/classic/core/composite/operators.hpp at line 8, boost/spirit/home/classic/core/composite/optional.hpp at line 8, boost/spirit/home/classic/core/composite/positive.hpp at line 8, boost/spirit/home/classic/core/composite/sequence.hpp at line 8, boost/spirit/home/classic/core/composite/sequential_and.hpp at line 8, boost/spirit/home/classic/core/composite/sequential_or.hpp at line 8, boost/spirit/home/classic/core/config.hpp at line 6, boost/spirit/home/classic/core/match.hpp at line 6, boost/spirit/home/classic/core/nil.hpp at line 6, boost/spirit/home/classic/core/non_terminal/grammar.hpp at line 8, boost/spirit/home/classic/core/non_terminal/impl/static.hpp at line 6, boost/spirit/home/classic/core/non_terminal/parser_context.hpp at line 7, boost/spirit/home/classic/core/non_terminal/parser_id.hpp at line 7, boost/spirit/home/classic/core/non_terminal/rule.hpp at line 6, boost/spirit/home/classic/core/non_terminal/subrule.hpp at line 7, boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp at line 6, boost/spirit/home/classic/core/parser.hpp at line 6, boost/spirit/home/classic/core/primitives/numerics.hpp at line 7, boost/spirit/home/classic/core/primitives/numerics_fwd.hpp at line 6, boost/spirit/home/classic/core/primitives/primitives.hpp at line 7, boost/spirit/home/classic/core/safe_bool.hpp at line 6, boost/spirit/home/classic/core/scanner/scanner.hpp at line 6, boost/spirit/home/classic/core/scanner/scanner_fwd.hpp at line 6, boost/spirit/home/classic/core/scanner/skipper.hpp at line 6, boost/spirit/home/classic/core/scanner/skipper_fwd.hpp at line 6, boost/spirit/home/classic/core/typeof.hpp at line 6, boost/spirit/home/classic/debug.hpp at line 7, boost/spirit/home/classic/debug/debug_node.hpp at line 8, boost/spirit/home/classic/debug/minimal.hpp at line 7, boost/spirit/home/classic/debug/parser_names.hpp at line 7, boost/spirit/home/classic/debug/typeof.hpp at line 6, boost/spirit/home/classic/dynamic.hpp at line 8, boost/spirit/home/classic/dynamic/for.hpp at line 7, boost/spirit/home/classic/dynamic/if.hpp at line 8, boost/spirit/home/classic/dynamic/lazy.hpp at line 7, boost/spirit/home/classic/dynamic/rule_alias.hpp at line 6, boost/spirit/home/classic/dynamic/select.hpp at line 6, boost/spirit/home/classic/dynamic/stored_rule.hpp at line 6, boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp at line 6, boost/spirit/home/classic/dynamic/switch.hpp at line 6, boost/spirit/home/classic/dynamic/typeof.hpp at line 6, boost/spirit/home/classic/dynamic/while.hpp at line 7, boost/spirit/home/classic/error_handling.hpp at line 6, boost/spirit/home/classic/error_handling/exceptions.hpp at line 6, boost/spirit/home/classic/error_handling/exceptions_fwd.hpp at line 6, boost/spirit/home/classic/error_handling/typeof.hpp at line 6, boost/spirit/home/classic/iterator.hpp at line 7, boost/spirit/home/classic/iterator/file_iterator.hpp at line 8, boost/spirit/home/classic/iterator/file_iterator_fwd.hpp at line 6, boost/spirit/home/classic/iterator/fixed_size_queue.hpp at line 7, boost/spirit/home/classic/iterator/multi_pass.hpp at line 6, boost/spirit/home/classic/iterator/multi_pass_fwd.hpp at line 6, boost/spirit/home/classic/iterator/position_iterator.hpp at line 8, boost/spirit/home/classic/iterator/position_iterator_fwd.hpp at line 7, boost/spirit/home/classic/iterator/typeof.hpp at line 6, boost/spirit/home/classic/meta.hpp at line 7, boost/spirit/home/classic/meta/as_parser.hpp at line 7, boost/spirit/home/classic/meta/fundamental.hpp at line 6, boost/spirit/home/classic/meta/parser_traits.hpp at line 8, boost/spirit/home/classic/meta/refactoring.hpp at line 6, boost/spirit/home/classic/meta/traverse.hpp at line 7, boost/spirit/home/classic/namespace.hpp at line 7, boost/spirit/home/classic/phoenix.hpp at line 6, boost/spirit/home/classic/phoenix/actor.hpp at line 6, boost/spirit/home/classic/phoenix/binders.hpp at line 6, boost/spirit/home/classic/phoenix/casts.hpp at line 7, boost/spirit/home/classic/phoenix/closures.hpp at line 7, boost/spirit/home/classic/phoenix/composite.hpp at line 6, boost/spirit/home/classic/phoenix/functions.hpp at line 6, boost/spirit/home/classic/phoenix/new.hpp at line 8, boost/spirit/home/classic/phoenix/operators.hpp at line 6, boost/spirit/home/classic/phoenix/primitives.hpp at line 6, boost/spirit/home/classic/phoenix/special_ops.hpp at line 6, boost/spirit/home/classic/phoenix/statements.hpp at line 6, boost/spirit/home/classic/phoenix/tuple_helpers.hpp at line 7, boost/spirit/home/classic/phoenix/tuples.hpp at line 6, boost/spirit/home/classic/symbols.hpp at line 6, boost/spirit/home/classic/symbols/symbols.hpp at line 6, boost/spirit/home/classic/symbols/symbols_fwd.hpp at line 6, boost/spirit/home/classic/symbols/typeof.hpp at line 6, boost/spirit/home/classic/tree/ast.hpp at line 7, boost/spirit/home/classic/tree/ast_fwd.hpp at line 6, boost/spirit/home/classic/tree/common.hpp at line 8, boost/spirit/home/classic/tree/common_fwd.hpp at line 6, boost/spirit/home/classic/tree/parse_tree.hpp at line 7, boost/spirit/home/classic/tree/parse_tree_fwd.hpp at line 6, boost/spirit/home/classic/tree/parse_tree_utils.hpp at line 7, boost/spirit/home/classic/tree/tree_to_xml.hpp at line 7, boost/spirit/home/classic/tree/typeof.hpp at line 6, boost/spirit/home/classic/utility.hpp at line 12, boost/spirit/home/classic/utility/chset.hpp at line 7, boost/spirit/home/classic/utility/chset_operators.hpp at line 7, boost/spirit/home/classic/utility/confix.hpp at line 6, boost/spirit/home/classic/utility/confix_fwd.hpp at line 6, boost/spirit/home/classic/utility/distinct.hpp at line 7, boost/spirit/home/classic/utility/distinct_fwd.hpp at line 6, boost/spirit/home/classic/utility/escape_char.hpp at line 6, boost/spirit/home/classic/utility/escape_char_fwd.hpp at line 6, boost/spirit/home/classic/utility/flush_multi_pass.hpp at line 6, boost/spirit/home/classic/utility/functor_parser.hpp at line 7, boost/spirit/home/classic/utility/grammar_def.hpp at line 7, boost/spirit/home/classic/utility/grammar_def_fwd.hpp at line 6, boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp at line 7, boost/spirit/home/classic/utility/impl/chset/range_run.hpp at line 6, boost/spirit/home/classic/utility/lists.hpp at line 6, boost/spirit/home/classic/utility/lists_fwd.hpp at line 6, boost/spirit/home/classic/utility/loops.hpp at line 8, boost/spirit/home/classic/utility/regex.hpp at line 6, boost/spirit/home/classic/utility/rule_parser.hpp at line 6, boost/spirit/home/classic/utility/scoped_lock.hpp at line 6, boost/spirit/home/classic/utility/typeof.hpp at line 6, boost/spirit/home/classic/version.hpp at line 6, boost/spirit/home/support/char_set/basic_chset.hpp at line 7, boost/spirit/home/support/common_terminals.hpp at line 6, boost/spirit/home/support/detail/make_cons.hpp at line 6, boost/spirit/home/support/make_component.hpp at line 6, boost/spirit/home/support/meta_compiler.hpp at line 6, boost/spirit/home/support/modify.hpp at line 6, boost/spirit/home/x3/version.hpp at line 7, boost/spirit/include/classic.hpp at line 7, boost/spirit/include/classic_actions.hpp at line 7, boost/spirit/include/classic_actor.hpp at line 7, boost/spirit/include/classic_alternative.hpp at line 7, boost/spirit/include/classic_as_parser.hpp at line 7, boost/spirit/include/classic_assert.hpp at line 7, boost/spirit/include/classic_assign_actor.hpp at line 7, boost/spirit/include/classic_assign_key_actor.hpp at line 7, boost/spirit/include/classic_ast.hpp at line 7, boost/spirit/include/classic_ast_fwd.hpp at line 7, boost/spirit/include/classic_attribute.hpp at line 7, boost/spirit/include/classic_basic_chset.hpp at line 7, boost/spirit/include/classic_chset.hpp at line 7, boost/spirit/include/classic_chset_operators.hpp at line 7, boost/spirit/include/classic_clear_actor.hpp at line 7, boost/spirit/include/classic_closure.hpp at line 7, boost/spirit/include/classic_closure_context.hpp at line 7, boost/spirit/include/classic_closure_fwd.hpp at line 7, boost/spirit/include/classic_common.hpp at line 7, boost/spirit/include/classic_common_fwd.hpp at line 7, boost/spirit/include/classic_composite.hpp at line 7, boost/spirit/include/classic_config.hpp at line 7, boost/spirit/include/classic_confix.hpp at line 7, boost/spirit/include/classic_confix_fwd.hpp at line 7, boost/spirit/include/classic_core.hpp at line 7, boost/spirit/include/classic_debug.hpp at line 7, boost/spirit/include/classic_debug_node.hpp at line 7, boost/spirit/include/classic_decrement_actor.hpp at line 7, boost/spirit/include/classic_difference.hpp at line 7, boost/spirit/include/classic_directives.hpp at line 7, boost/spirit/include/classic_distinct.hpp at line 7, boost/spirit/include/classic_distinct_fwd.hpp at line 7, boost/spirit/include/classic_dynamic.hpp at line 7, boost/spirit/include/classic_epsilon.hpp at line 7, boost/spirit/include/classic_erase_actor.hpp at line 7, boost/spirit/include/classic_error_handling.hpp at line 7, boost/spirit/include/classic_escape_char.hpp at line 7, boost/spirit/include/classic_escape_char_fwd.hpp at line 7, boost/spirit/include/classic_exceptions.hpp at line 7, boost/spirit/include/classic_exceptions_fwd.hpp at line 7, boost/spirit/include/classic_exclusive_or.hpp at line 7, boost/spirit/include/classic_file_iterator.hpp at line 7, boost/spirit/include/classic_file_iterator_fwd.hpp at line 7, boost/spirit/include/classic_fixed_size_queue.hpp at line 7, boost/spirit/include/classic_flush_multi_pass.hpp at line 7, boost/spirit/include/classic_for.hpp at line 7, boost/spirit/include/classic_functor_parser.hpp at line 7, boost/spirit/include/classic_fundamental.hpp at line 7, boost/spirit/include/classic_grammar.hpp at line 7, boost/spirit/include/classic_grammar_def.hpp at line 7, boost/spirit/include/classic_grammar_def_fwd.hpp at line 7, boost/spirit/include/classic_if.hpp at line 7, boost/spirit/include/classic_increment_actor.hpp at line 7, boost/spirit/include/classic_insert_at_actor.hpp at line 7, boost/spirit/include/classic_insert_key_actor.hpp at line 7, boost/spirit/include/classic_intersection.hpp at line 7, boost/spirit/include/classic_iterator.hpp at line 7, boost/spirit/include/classic_kleene_star.hpp at line 7, boost/spirit/include/classic_lazy.hpp at line 7, boost/spirit/include/classic_list.hpp at line 7, boost/spirit/include/classic_lists.hpp at line 7, boost/spirit/include/classic_lists_fwd.hpp at line 7, boost/spirit/include/classic_loops.hpp at line 7, boost/spirit/include/classic_match.hpp at line 7, boost/spirit/include/classic_meta.hpp at line 7, boost/spirit/include/classic_minimal.hpp at line 7, boost/spirit/include/classic_multi_pass.hpp at line 7, boost/spirit/include/classic_multi_pass_fwd.hpp at line 7, boost/spirit/include/classic_nil.hpp at line 7, boost/spirit/include/classic_no_actions.hpp at line 7, boost/spirit/include/classic_numerics.hpp at line 7, boost/spirit/include/classic_numerics_fwd.hpp at line 7, boost/spirit/include/classic_operators.hpp at line 7, boost/spirit/include/classic_optional.hpp at line 7, boost/spirit/include/classic_parametric.hpp at line 7, boost/spirit/include/classic_parse_tree.hpp at line 7, boost/spirit/include/classic_parse_tree_fwd.hpp at line 7, boost/spirit/include/classic_parse_tree_utils.hpp at line 7, boost/spirit/include/classic_parser.hpp at line 7, boost/spirit/include/classic_parser_context.hpp at line 7, boost/spirit/include/classic_parser_id.hpp at line 7, boost/spirit/include/classic_parser_names.hpp at line 7, boost/spirit/include/classic_parser_traits.hpp at line 7, boost/spirit/include/classic_position_iterator.hpp at line 7, boost/spirit/include/classic_position_iterator_fwd.hpp at line 7, boost/spirit/include/classic_positive.hpp at line 7, boost/spirit/include/classic_primitives.hpp at line 7, boost/spirit/include/classic_push_back_actor.hpp at line 7, boost/spirit/include/classic_push_front_actor.hpp at line 7, boost/spirit/include/classic_range_run.hpp at line 7, boost/spirit/include/classic_ref_actor.hpp at line 7, boost/spirit/include/classic_ref_const_ref_actor.hpp at line 7, boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp at line 7, boost/spirit/include/classic_ref_const_ref_value_actor.hpp at line 7, boost/spirit/include/classic_ref_value_actor.hpp at line 7, boost/spirit/include/classic_refactoring.hpp at line 7, boost/spirit/include/classic_regex.hpp at line 7, boost/spirit/include/classic_rule.hpp at line 7, boost/spirit/include/classic_rule_alias.hpp at line 7, boost/spirit/include/classic_rule_parser.hpp at line 7, boost/spirit/include/classic_safe_bool.hpp at line 7, boost/spirit/include/classic_scanner.hpp at line 7, boost/spirit/include/classic_scanner_fwd.hpp at line 7, boost/spirit/include/classic_scoped_lock.hpp at line 7, boost/spirit/include/classic_select.hpp at line 7, boost/spirit/include/classic_sequence.hpp at line 7, boost/spirit/include/classic_sequential_and.hpp at line 7, boost/spirit/include/classic_sequential_or.hpp at line 7, boost/spirit/include/classic_skipper.hpp at line 7, boost/spirit/include/classic_skipper_fwd.hpp at line 7, boost/spirit/include/classic_spirit.hpp at line 6, boost/spirit/include/classic_static.hpp at line 7, boost/spirit/include/classic_stored_rule.hpp at line 7, boost/spirit/include/classic_stored_rule_fwd.hpp at line 7, boost/spirit/include/classic_subrule.hpp at line 7, boost/spirit/include/classic_subrule_fwd.hpp at line 7, boost/spirit/include/classic_swap_actor.hpp at line 7, boost/spirit/include/classic_switch.hpp at line 7, boost/spirit/include/classic_symbols.hpp at line 7, boost/spirit/include/classic_symbols_fwd.hpp at line 7, boost/spirit/include/classic_traverse.hpp at line 7, boost/spirit/include/classic_tree_to_xml.hpp at line 7, boost/spirit/include/classic_typeof.hpp at line 7, boost/spirit/include/classic_utility.hpp at line 7, boost/spirit/include/classic_version.hpp at line 7, boost/spirit/include/classic_while.hpp at line 7, boost/spirit/include/phoenix1.hpp at line 7, boost/spirit/include/phoenix1_actor.hpp at line 7, boost/spirit/include/phoenix1_binders.hpp at line 7, boost/spirit/include/phoenix1_casts.hpp at line 7, boost/spirit/include/phoenix1_closures.hpp at line 7, boost/spirit/include/phoenix1_composite.hpp at line 7, boost/spirit/include/phoenix1_functions.hpp at line 7, boost/spirit/include/phoenix1_new.hpp at line 7, boost/spirit/include/phoenix1_operators.hpp at line 7, boost/spirit/include/phoenix1_primitives.hpp at line 7, boost/spirit/include/phoenix1_special_ops.hpp at line 7, boost/spirit/include/phoenix1_statements.hpp at line 7, boost/spirit/include/phoenix1_tuple_helpers.hpp at line 7, boost/spirit/include/phoenix1_tuples.hpp at line 7, boost/spirit/include/version.hpp at line 7, boost/spirit/repository/home/qi/operator/detail/keywords.hpp at line 5, boost/spirit/version.hpp at line 7
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit.hpp [6:7]
+ boost/spirit/home/classic.hpp [16:17]
+ boost/spirit/home/classic/actor.hpp [5:6]
+ boost/spirit/home/classic/actor/assign_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/assign_key_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/clear_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/decrement_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/erase_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/increment_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/insert_at_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/insert_key_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/push_back_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/push_front_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/ref_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/ref_const_ref_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/ref_const_ref_const_ref_a.hpp [5:6]
+ boost/spirit/home/classic/actor/ref_const_ref_value_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/ref_value_actor.hpp [6:7]
+ boost/spirit/home/classic/actor/swap_actor.hpp [5:6]
+ boost/spirit/home/classic/actor/typeof.hpp [5:6]
+ boost/spirit/home/classic/attribute.hpp [6:7]
+ boost/spirit/home/classic/attribute/closure.hpp [6:7]
+ boost/spirit/home/classic/attribute/closure_context.hpp [6:7]
+ boost/spirit/home/classic/attribute/closure_fwd.hpp [5:6]
+ boost/spirit/home/classic/attribute/parametric.hpp [5:6]
+ boost/spirit/home/classic/attribute/typeof.hpp [5:6]
+ boost/spirit/home/classic/core.hpp [10:11]
+ boost/spirit/home/classic/core/assert.hpp [6:7]
+ boost/spirit/home/classic/core/composite/actions.hpp [5:6]
+ boost/spirit/home/classic/core/composite/alternative.hpp [7:8]
+ boost/spirit/home/classic/core/composite/composite.hpp [5:6]
+ boost/spirit/home/classic/core/composite/difference.hpp [7:8]
+ boost/spirit/home/classic/core/composite/directives.hpp [6:7]
+ boost/spirit/home/classic/core/composite/epsilon.hpp [6:7]
+ boost/spirit/home/classic/core/composite/exclusive_or.hpp [7:8]
+ boost/spirit/home/classic/core/composite/intersection.hpp [7:8]
+ boost/spirit/home/classic/core/composite/kleene_star.hpp [7:8]
+ boost/spirit/home/classic/core/composite/list.hpp [7:8]
+ boost/spirit/home/classic/core/composite/no_actions.hpp [6:7]
+ boost/spirit/home/classic/core/composite/operators.hpp [7:8]
+ boost/spirit/home/classic/core/composite/optional.hpp [7:8]
+ boost/spirit/home/classic/core/composite/positive.hpp [7:8]
+ boost/spirit/home/classic/core/composite/sequence.hpp [7:8]
+ boost/spirit/home/classic/core/composite/sequential_and.hpp [7:8]
+ boost/spirit/home/classic/core/composite/sequential_or.hpp [7:8]
+ boost/spirit/home/classic/core/config.hpp [5:6]
+ boost/spirit/home/classic/core/match.hpp [5:6]
+ boost/spirit/home/classic/core/nil.hpp [5:6]
+ boost/spirit/home/classic/core/non_terminal/grammar.hpp [7:8]
+ boost/spirit/home/classic/core/non_terminal/impl/static.hpp [5:6]
+ boost/spirit/home/classic/core/non_terminal/parser_context.hpp [6:7]
+ boost/spirit/home/classic/core/non_terminal/parser_id.hpp [6:7]
+ boost/spirit/home/classic/core/non_terminal/rule.hpp [5:6]
+ boost/spirit/home/classic/core/non_terminal/subrule.hpp [6:7]
+ boost/spirit/home/classic/core/non_terminal/subrule_fwd.hpp [5:6]
+ boost/spirit/home/classic/core/parser.hpp [5:6]
+ boost/spirit/home/classic/core/primitives/numerics.hpp [6:7]
+ boost/spirit/home/classic/core/primitives/numerics_fwd.hpp [5:6]
+ boost/spirit/home/classic/core/primitives/primitives.hpp [6:7]
+ boost/spirit/home/classic/core/safe_bool.hpp [5:6]
+ boost/spirit/home/classic/core/scanner/scanner.hpp [5:6]
+ boost/spirit/home/classic/core/scanner/scanner_fwd.hpp [5:6]
+ boost/spirit/home/classic/core/scanner/skipper.hpp [5:6]
+ boost/spirit/home/classic/core/scanner/skipper_fwd.hpp [5:6]
+ boost/spirit/home/classic/core/typeof.hpp [5:6]
+ boost/spirit/home/classic/debug.hpp [6:7]
+ boost/spirit/home/classic/debug/debug_node.hpp [7:8]
+ boost/spirit/home/classic/debug/minimal.hpp [6:7]
+ boost/spirit/home/classic/debug/parser_names.hpp [6:7]
+ boost/spirit/home/classic/debug/typeof.hpp [5:6]
+ boost/spirit/home/classic/dynamic.hpp [7:8]
+ boost/spirit/home/classic/dynamic/for.hpp [6:7]
+ boost/spirit/home/classic/dynamic/if.hpp [7:8]
+ boost/spirit/home/classic/dynamic/lazy.hpp [6:7]
+ boost/spirit/home/classic/dynamic/rule_alias.hpp [5:6]
+ boost/spirit/home/classic/dynamic/select.hpp [5:6]
+ boost/spirit/home/classic/dynamic/stored_rule.hpp [5:6]
+ boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp [5:6]
+ boost/spirit/home/classic/dynamic/switch.hpp [5:6]
+ boost/spirit/home/classic/dynamic/typeof.hpp [5:6]
+ boost/spirit/home/classic/dynamic/while.hpp [6:7]
+ boost/spirit/home/classic/error_handling.hpp [5:6]
+ boost/spirit/home/classic/error_handling/exceptions.hpp [5:6]
+ boost/spirit/home/classic/error_handling/exceptions_fwd.hpp [5:6]
+ boost/spirit/home/classic/error_handling/typeof.hpp [5:6]
+ boost/spirit/home/classic/iterator.hpp [6:7]
+ boost/spirit/home/classic/iterator/file_iterator.hpp [7:8]
+ boost/spirit/home/classic/iterator/file_iterator_fwd.hpp [5:6]
+ boost/spirit/home/classic/iterator/fixed_size_queue.hpp [6:7]
+ boost/spirit/home/classic/iterator/multi_pass.hpp [5:6]
+ boost/spirit/home/classic/iterator/multi_pass_fwd.hpp [5:6]
+ boost/spirit/home/classic/iterator/position_iterator.hpp [7:8]
+ boost/spirit/home/classic/iterator/position_iterator_fwd.hpp [6:7]
+ boost/spirit/home/classic/iterator/typeof.hpp [5:6]
+ boost/spirit/home/classic/meta.hpp [6:7]
+ boost/spirit/home/classic/meta/as_parser.hpp [6:7]
+ boost/spirit/home/classic/meta/fundamental.hpp [5:6]
+ boost/spirit/home/classic/meta/parser_traits.hpp [7:8]
+ boost/spirit/home/classic/meta/refactoring.hpp [5:6]
+ boost/spirit/home/classic/meta/traverse.hpp [6:7]
+ boost/spirit/home/classic/namespace.hpp [6:7]
+ boost/spirit/home/classic/phoenix.hpp [5:6]
+ boost/spirit/home/classic/phoenix/actor.hpp [5:6]
+ boost/spirit/home/classic/phoenix/binders.hpp [5:6]
+ boost/spirit/home/classic/phoenix/casts.hpp [6:7]
+ boost/spirit/home/classic/phoenix/closures.hpp [6:7]
+ boost/spirit/home/classic/phoenix/composite.hpp [5:6]
+ boost/spirit/home/classic/phoenix/functions.hpp [5:6]
+ boost/spirit/home/classic/phoenix/new.hpp [7:8]
+ boost/spirit/home/classic/phoenix/operators.hpp [5:6]
+ boost/spirit/home/classic/phoenix/primitives.hpp [5:6]
+ boost/spirit/home/classic/phoenix/special_ops.hpp [5:6]
+ boost/spirit/home/classic/phoenix/statements.hpp [5:6]
+ boost/spirit/home/classic/phoenix/tuple_helpers.hpp [6:7]
+ boost/spirit/home/classic/phoenix/tuples.hpp [5:6]
+ boost/spirit/home/classic/symbols.hpp [5:6]
+ boost/spirit/home/classic/symbols/symbols.hpp [5:6]
+ boost/spirit/home/classic/symbols/symbols_fwd.hpp [5:6]
+ boost/spirit/home/classic/symbols/typeof.hpp [5:6]
+ boost/spirit/home/classic/tree/ast.hpp [6:7]
+ boost/spirit/home/classic/tree/ast_fwd.hpp [5:6]
+ boost/spirit/home/classic/tree/common.hpp [7:8]
+ boost/spirit/home/classic/tree/common_fwd.hpp [5:6]
+ boost/spirit/home/classic/tree/parse_tree.hpp [6:7]
+ boost/spirit/home/classic/tree/parse_tree_fwd.hpp [5:6]
+ boost/spirit/home/classic/tree/parse_tree_utils.hpp [6:7]
+ boost/spirit/home/classic/tree/tree_to_xml.hpp [6:7]
+ boost/spirit/home/classic/tree/typeof.hpp [5:6]
+ boost/spirit/home/classic/utility.hpp [11:12]
+ boost/spirit/home/classic/utility/chset.hpp [6:7]
+ boost/spirit/home/classic/utility/chset_operators.hpp [6:7]
+ boost/spirit/home/classic/utility/confix.hpp [5:6]
+ boost/spirit/home/classic/utility/confix_fwd.hpp [5:6]
+ boost/spirit/home/classic/utility/distinct.hpp [6:7]
+ boost/spirit/home/classic/utility/distinct_fwd.hpp [5:6]
+ boost/spirit/home/classic/utility/escape_char.hpp [5:6]
+ boost/spirit/home/classic/utility/escape_char_fwd.hpp [5:6]
+ boost/spirit/home/classic/utility/flush_multi_pass.hpp [5:6]
+ boost/spirit/home/classic/utility/functor_parser.hpp [6:7]
+ boost/spirit/home/classic/utility/grammar_def.hpp [6:7]
+ boost/spirit/home/classic/utility/grammar_def_fwd.hpp [5:6]
+ boost/spirit/home/classic/utility/impl/chset/basic_chset.hpp [6:7]
+ boost/spirit/home/classic/utility/impl/chset/range_run.hpp [5:6]
+ boost/spirit/home/classic/utility/lists.hpp [5:6]
+ boost/spirit/home/classic/utility/lists_fwd.hpp [5:6]
+ boost/spirit/home/classic/utility/loops.hpp [7:8]
+ boost/spirit/home/classic/utility/regex.hpp [5:6]
+ boost/spirit/home/classic/utility/rule_parser.hpp [5:6]
+ boost/spirit/home/classic/utility/scoped_lock.hpp [5:6]
+ boost/spirit/home/classic/utility/typeof.hpp [5:6]
+ boost/spirit/home/classic/version.hpp [5:6]
+ boost/spirit/home/support/char_set/basic_chset.hpp [6:7]
+ boost/spirit/home/support/common_terminals.hpp [5:6]
+ boost/spirit/home/support/detail/make_cons.hpp [5:6]
+ boost/spirit/home/support/make_component.hpp [5:6]
+ boost/spirit/home/support/meta_compiler.hpp [5:6]
+ boost/spirit/home/support/modify.hpp [5:6]
+ boost/spirit/home/x3/version.hpp [6:7]
+ boost/spirit/include/classic.hpp [6:7]
+ boost/spirit/include/classic_actions.hpp [6:7]
+ boost/spirit/include/classic_actor.hpp [6:7]
+ boost/spirit/include/classic_alternative.hpp [6:7]
+ boost/spirit/include/classic_as_parser.hpp [6:7]
+ boost/spirit/include/classic_assert.hpp [6:7]
+ boost/spirit/include/classic_assign_actor.hpp [6:7]
+ boost/spirit/include/classic_assign_key_actor.hpp [6:7]
+ boost/spirit/include/classic_ast.hpp [6:7]
+ boost/spirit/include/classic_ast_fwd.hpp [6:7]
+ boost/spirit/include/classic_attribute.hpp [6:7]
+ boost/spirit/include/classic_basic_chset.hpp [6:7]
+ boost/spirit/include/classic_chset.hpp [6:7]
+ boost/spirit/include/classic_chset_operators.hpp [6:7]
+ boost/spirit/include/classic_clear_actor.hpp [6:7]
+ boost/spirit/include/classic_closure.hpp [6:7]
+ boost/spirit/include/classic_closure_context.hpp [6:7]
+ boost/spirit/include/classic_closure_fwd.hpp [6:7]
+ boost/spirit/include/classic_common.hpp [6:7]
+ boost/spirit/include/classic_common_fwd.hpp [6:7]
+ boost/spirit/include/classic_composite.hpp [6:7]
+ boost/spirit/include/classic_config.hpp [6:7]
+ boost/spirit/include/classic_confix.hpp [6:7]
+ boost/spirit/include/classic_confix_fwd.hpp [6:7]
+ boost/spirit/include/classic_core.hpp [6:7]
+ boost/spirit/include/classic_debug.hpp [6:7]
+ boost/spirit/include/classic_debug_node.hpp [6:7]
+ boost/spirit/include/classic_decrement_actor.hpp [6:7]
+ boost/spirit/include/classic_difference.hpp [6:7]
+ boost/spirit/include/classic_directives.hpp [6:7]
+ boost/spirit/include/classic_distinct.hpp [6:7]
+ boost/spirit/include/classic_distinct_fwd.hpp [6:7]
+ boost/spirit/include/classic_dynamic.hpp [6:7]
+ boost/spirit/include/classic_epsilon.hpp [6:7]
+ boost/spirit/include/classic_erase_actor.hpp [6:7]
+ boost/spirit/include/classic_error_handling.hpp [6:7]
+ boost/spirit/include/classic_escape_char.hpp [6:7]
+ boost/spirit/include/classic_escape_char_fwd.hpp [6:7]
+ boost/spirit/include/classic_exceptions.hpp [6:7]
+ boost/spirit/include/classic_exceptions_fwd.hpp [6:7]
+ boost/spirit/include/classic_exclusive_or.hpp [6:7]
+ boost/spirit/include/classic_file_iterator.hpp [6:7]
+ boost/spirit/include/classic_file_iterator_fwd.hpp [6:7]
+ boost/spirit/include/classic_fixed_size_queue.hpp [6:7]
+ boost/spirit/include/classic_flush_multi_pass.hpp [6:7]
+ boost/spirit/include/classic_for.hpp [6:7]
+ boost/spirit/include/classic_functor_parser.hpp [6:7]
+ boost/spirit/include/classic_fundamental.hpp [6:7]
+ boost/spirit/include/classic_grammar.hpp [6:7]
+ boost/spirit/include/classic_grammar_def.hpp [6:7]
+ boost/spirit/include/classic_grammar_def_fwd.hpp [6:7]
+ boost/spirit/include/classic_if.hpp [6:7]
+ boost/spirit/include/classic_increment_actor.hpp [6:7]
+ boost/spirit/include/classic_insert_at_actor.hpp [6:7]
+ boost/spirit/include/classic_insert_key_actor.hpp [6:7]
+ boost/spirit/include/classic_intersection.hpp [6:7]
+ boost/spirit/include/classic_iterator.hpp [6:7]
+ boost/spirit/include/classic_kleene_star.hpp [6:7]
+ boost/spirit/include/classic_lazy.hpp [6:7]
+ boost/spirit/include/classic_list.hpp [6:7]
+ boost/spirit/include/classic_lists.hpp [6:7]
+ boost/spirit/include/classic_lists_fwd.hpp [6:7]
+ boost/spirit/include/classic_loops.hpp [6:7]
+ boost/spirit/include/classic_match.hpp [6:7]
+ boost/spirit/include/classic_meta.hpp [6:7]
+ boost/spirit/include/classic_minimal.hpp [6:7]
+ boost/spirit/include/classic_multi_pass.hpp [6:7]
+ boost/spirit/include/classic_multi_pass_fwd.hpp [6:7]
+ boost/spirit/include/classic_nil.hpp [6:7]
+ boost/spirit/include/classic_no_actions.hpp [6:7]
+ boost/spirit/include/classic_numerics.hpp [6:7]
+ boost/spirit/include/classic_numerics_fwd.hpp [6:7]
+ boost/spirit/include/classic_operators.hpp [6:7]
+ boost/spirit/include/classic_optional.hpp [6:7]
+ boost/spirit/include/classic_parametric.hpp [6:7]
+ boost/spirit/include/classic_parse_tree.hpp [6:7]
+ boost/spirit/include/classic_parse_tree_fwd.hpp [6:7]
+ boost/spirit/include/classic_parse_tree_utils.hpp [6:7]
+ boost/spirit/include/classic_parser.hpp [6:7]
+ boost/spirit/include/classic_parser_context.hpp [6:7]
+ boost/spirit/include/classic_parser_id.hpp [6:7]
+ boost/spirit/include/classic_parser_names.hpp [6:7]
+ boost/spirit/include/classic_parser_traits.hpp [6:7]
+ boost/spirit/include/classic_position_iterator.hpp [6:7]
+ boost/spirit/include/classic_position_iterator_fwd.hpp [6:7]
+ boost/spirit/include/classic_positive.hpp [6:7]
+ boost/spirit/include/classic_primitives.hpp [6:7]
+ boost/spirit/include/classic_push_back_actor.hpp [6:7]
+ boost/spirit/include/classic_push_front_actor.hpp [6:7]
+ boost/spirit/include/classic_range_run.hpp [6:7]
+ boost/spirit/include/classic_ref_actor.hpp [6:7]
+ boost/spirit/include/classic_ref_const_ref_actor.hpp [6:7]
+ boost/spirit/include/classic_ref_const_ref_const_ref_a.hpp [6:7]
+ boost/spirit/include/classic_ref_const_ref_value_actor.hpp [6:7]
+ boost/spirit/include/classic_ref_value_actor.hpp [6:7]
+ boost/spirit/include/classic_refactoring.hpp [6:7]
+ boost/spirit/include/classic_regex.hpp [6:7]
+ boost/spirit/include/classic_rule.hpp [6:7]
+ boost/spirit/include/classic_rule_alias.hpp [6:7]
+ boost/spirit/include/classic_rule_parser.hpp [6:7]
+ boost/spirit/include/classic_safe_bool.hpp [6:7]
+ boost/spirit/include/classic_scanner.hpp [6:7]
+ boost/spirit/include/classic_scanner_fwd.hpp [6:7]
+ boost/spirit/include/classic_scoped_lock.hpp [6:7]
+ boost/spirit/include/classic_select.hpp [6:7]
+ boost/spirit/include/classic_sequence.hpp [6:7]
+ boost/spirit/include/classic_sequential_and.hpp [6:7]
+ boost/spirit/include/classic_sequential_or.hpp [6:7]
+ boost/spirit/include/classic_skipper.hpp [6:7]
+ boost/spirit/include/classic_skipper_fwd.hpp [6:7]
+ boost/spirit/include/classic_spirit.hpp [5:6]
+ boost/spirit/include/classic_static.hpp [6:7]
+ boost/spirit/include/classic_stored_rule.hpp [6:7]
+ boost/spirit/include/classic_stored_rule_fwd.hpp [6:7]
+ boost/spirit/include/classic_subrule.hpp [6:7]
+ boost/spirit/include/classic_subrule_fwd.hpp [6:7]
+ boost/spirit/include/classic_swap_actor.hpp [6:7]
+ boost/spirit/include/classic_switch.hpp [6:7]
+ boost/spirit/include/classic_symbols.hpp [6:7]
+ boost/spirit/include/classic_symbols_fwd.hpp [6:7]
+ boost/spirit/include/classic_traverse.hpp [6:7]
+ boost/spirit/include/classic_tree_to_xml.hpp [6:7]
+ boost/spirit/include/classic_typeof.hpp [6:7]
+ boost/spirit/include/classic_utility.hpp [6:7]
+ boost/spirit/include/classic_version.hpp [6:7]
+ boost/spirit/include/classic_while.hpp [6:7]
+ boost/spirit/include/phoenix1.hpp [6:7]
+ boost/spirit/include/phoenix1_actor.hpp [6:7]
+ boost/spirit/include/phoenix1_binders.hpp [6:7]
+ boost/spirit/include/phoenix1_casts.hpp [6:7]
+ boost/spirit/include/phoenix1_closures.hpp [6:7]
+ boost/spirit/include/phoenix1_composite.hpp [6:7]
+ boost/spirit/include/phoenix1_functions.hpp [6:7]
+ boost/spirit/include/phoenix1_new.hpp [6:7]
+ boost/spirit/include/phoenix1_operators.hpp [6:7]
+ boost/spirit/include/phoenix1_primitives.hpp [6:7]
+ boost/spirit/include/phoenix1_special_ops.hpp [6:7]
+ boost/spirit/include/phoenix1_statements.hpp [6:7]
+ boost/spirit/include/phoenix1_tuple_helpers.hpp [6:7]
+ boost/spirit/include/phoenix1_tuples.hpp [6:7]
+ boost/spirit/include/version.hpp [6:7]
+ boost/spirit/repository/home/qi/operator/detail/keywords.hpp [4:5]
+ boost/spirit/version.hpp [6:7]
+
+KEEP BSL-1.0 118b3ba302185a79b12cdba1c2e58ffc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cstdfloat.hpp at line 6, boost/math/cstdfloat/cstdfloat_cmath.hpp at line 6, boost/math/cstdfloat/cstdfloat_complex.hpp at line 6, boost/math/cstdfloat/cstdfloat_iostream.hpp at line 6, boost/math/cstdfloat/cstdfloat_limits.hpp at line 6, boost/math/cstdfloat/cstdfloat_types.hpp at line 6
+ License text:
+ // Distributed under the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt
+ // or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/cstdfloat.hpp [5:7]
+ boost/math/cstdfloat/cstdfloat_cmath.hpp [5:7]
+ boost/math/cstdfloat/cstdfloat_complex.hpp [5:7]
+ boost/math/cstdfloat/cstdfloat_iostream.hpp [5:7]
+ boost/math/cstdfloat/cstdfloat_limits.hpp [5:7]
+ boost/math/cstdfloat/cstdfloat_types.hpp [5:7]
+
+KEEP BSL-1.0 128c17e73213317d8ae187104d4937dc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/qvm/all.hpp at line 4, boost/qvm/assert.hpp at line 4, boost/qvm/deduce_mat.hpp at line 4, boost/qvm/deduce_quat.hpp at line 4, boost/qvm/deduce_scalar.hpp at line 4, boost/qvm/deduce_vec.hpp at line 4, boost/qvm/detail/cofactor_impl.hpp at line 4, boost/qvm/detail/determinant_impl.hpp at line 4, boost/qvm/detail/mat_assign.hpp at line 4, boost/qvm/detail/quat_assign.hpp at line 4, boost/qvm/detail/remove_const.hpp at line 4, boost/qvm/detail/swizzle_traits.hpp at line 4, boost/qvm/detail/transp_impl.hpp at line 4, boost/qvm/detail/vec_assign.hpp at line 4, boost/qvm/enable_if.hpp at line 4, boost/qvm/error.hpp at line 4, boost/qvm/gen/mat_assign2.hpp at line 4, boost/qvm/gen/mat_assign3.hpp at line 4, boost/qvm/gen/mat_assign4.hpp at line 4, boost/qvm/gen/mat_operations2.hpp at line 4, boost/qvm/gen/mat_operations3.hpp at line 4, boost/qvm/gen/mat_operations4.hpp at line 4, boost/qvm/gen/swizzle2.hpp at line 4, boost/qvm/gen/swizzle3.hpp at line 4, boost/qvm/gen/swizzle4.hpp at line 4, boost/qvm/gen/vec_assign2.hpp at line 4, boost/qvm/gen/vec_assign3.hpp at line 4, boost/qvm/gen/vec_assign4.hpp at line 4, boost/qvm/gen/vec_mat_operations2.hpp at line 4, boost/qvm/gen/vec_mat_operations3.hpp at line 4, boost/qvm/gen/vec_mat_operations4.hpp at line 4, boost/qvm/gen/vec_operations2.hpp at line 4, boost/qvm/gen/vec_operations3.hpp at line 4, boost/qvm/gen/vec_operations4.hpp at line 4, boost/qvm/inline.hpp at line 4, boost/qvm/map.hpp at line 4, boost/qvm/map_mat_mat.hpp at line 4, boost/qvm/map_mat_vec.hpp at line 4, boost/qvm/map_vec_mat.hpp at line 4, boost/qvm/mat.hpp at line 4, boost/qvm/mat_access.hpp at line 4, boost/qvm/mat_operations.hpp at line 4, boost/qvm/mat_operations2.hpp at line 4, boost/qvm/mat_operations3.hpp at line 4, boost/qvm/mat_operations4.hpp at line 4, boost/qvm/mat_traits.hpp at line 4, boost/qvm/mat_traits_array.hpp at line 4, boost/qvm/mat_traits_defaults.hpp at line 4, boost/qvm/math.hpp at line 4, boost/qvm/operations.hpp at line 4, boost/qvm/quat.hpp at line 4, boost/qvm/quat_access.hpp at line 4, boost/qvm/quat_operations.hpp at line 4, boost/qvm/quat_traits.hpp at line 4, boost/qvm/quat_traits_array.hpp at line 4, boost/qvm/quat_traits_defaults.hpp at line 4, boost/qvm/quat_vec_operations.hpp at line 4, boost/qvm/scalar_traits.hpp at line 4, boost/qvm/static_assert.hpp at line 4, boost/qvm/swizzle.hpp at line 4, boost/qvm/swizzle2.hpp at line 4, boost/qvm/swizzle3.hpp at line 4, boost/qvm/swizzle4.hpp at line 4, boost/qvm/throw_exception.hpp at line 4, boost/qvm/to_string.hpp at line 4, boost/qvm/vec.hpp at line 4, boost/qvm/vec_access.hpp at line 4, boost/qvm/vec_mat_operations.hpp at line 4, boost/qvm/vec_mat_operations2.hpp at line 4, boost/qvm/vec_mat_operations3.hpp at line 4, boost/qvm/vec_mat_operations4.hpp at line 4, boost/qvm/vec_operations.hpp at line 4, boost/qvm/vec_operations2.hpp at line 4, boost/qvm/vec_operations3.hpp at line 4, boost/qvm/vec_operations4.hpp at line 4, boost/qvm/vec_traits.hpp at line 4, boost/qvm/vec_traits_array.hpp at line 4, boost/qvm/vec_traits_defaults.hpp at line 4
+ License text:
+ //Distributed under the Boost Software License, Version 1.0. (See accompanying
+ //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/qvm/all.hpp [3:4]
+ boost/qvm/assert.hpp [3:4]
+ boost/qvm/deduce_mat.hpp [3:4]
+ boost/qvm/deduce_quat.hpp [3:4]
+ boost/qvm/deduce_scalar.hpp [3:4]
+ boost/qvm/deduce_vec.hpp [3:4]
+ boost/qvm/detail/cofactor_impl.hpp [3:4]
+ boost/qvm/detail/determinant_impl.hpp [3:4]
+ boost/qvm/detail/mat_assign.hpp [3:4]
+ boost/qvm/detail/quat_assign.hpp [3:4]
+ boost/qvm/detail/remove_const.hpp [3:4]
+ boost/qvm/detail/swizzle_traits.hpp [3:4]
+ boost/qvm/detail/transp_impl.hpp [3:4]
+ boost/qvm/detail/vec_assign.hpp [3:4]
+ boost/qvm/enable_if.hpp [3:4]
+ boost/qvm/error.hpp [3:4]
+ boost/qvm/gen/mat_assign2.hpp [3:4]
+ boost/qvm/gen/mat_assign3.hpp [3:4]
+ boost/qvm/gen/mat_assign4.hpp [3:4]
+ boost/qvm/gen/mat_operations2.hpp [3:4]
+ boost/qvm/gen/mat_operations3.hpp [3:4]
+ boost/qvm/gen/mat_operations4.hpp [3:4]
+ boost/qvm/gen/swizzle2.hpp [3:4]
+ boost/qvm/gen/swizzle3.hpp [3:4]
+ boost/qvm/gen/swizzle4.hpp [3:4]
+ boost/qvm/gen/vec_assign2.hpp [3:4]
+ boost/qvm/gen/vec_assign3.hpp [3:4]
+ boost/qvm/gen/vec_assign4.hpp [3:4]
+ boost/qvm/gen/vec_mat_operations2.hpp [3:4]
+ boost/qvm/gen/vec_mat_operations3.hpp [3:4]
+ boost/qvm/gen/vec_mat_operations4.hpp [3:4]
+ boost/qvm/gen/vec_operations2.hpp [3:4]
+ boost/qvm/gen/vec_operations3.hpp [3:4]
+ boost/qvm/gen/vec_operations4.hpp [3:4]
+ boost/qvm/inline.hpp [3:4]
+ boost/qvm/map.hpp [3:4]
+ boost/qvm/map_mat_mat.hpp [3:4]
+ boost/qvm/map_mat_vec.hpp [3:4]
+ boost/qvm/map_vec_mat.hpp [3:4]
+ boost/qvm/mat.hpp [3:4]
+ boost/qvm/mat_access.hpp [3:4]
+ boost/qvm/mat_operations.hpp [3:4]
+ boost/qvm/mat_operations2.hpp [3:4]
+ boost/qvm/mat_operations3.hpp [3:4]
+ boost/qvm/mat_operations4.hpp [3:4]
+ boost/qvm/mat_traits.hpp [3:4]
+ boost/qvm/mat_traits_array.hpp [3:4]
+ boost/qvm/mat_traits_defaults.hpp [3:4]
+ boost/qvm/math.hpp [3:4]
+ boost/qvm/operations.hpp [3:4]
+ boost/qvm/quat.hpp [3:4]
+ boost/qvm/quat_access.hpp [3:4]
+ boost/qvm/quat_operations.hpp [3:4]
+ boost/qvm/quat_traits.hpp [3:4]
+ boost/qvm/quat_traits_array.hpp [3:4]
+ boost/qvm/quat_traits_defaults.hpp [3:4]
+ boost/qvm/quat_vec_operations.hpp [3:4]
+ boost/qvm/scalar_traits.hpp [3:4]
+ boost/qvm/static_assert.hpp [3:4]
+ boost/qvm/swizzle.hpp [3:4]
+ boost/qvm/swizzle2.hpp [3:4]
+ boost/qvm/swizzle3.hpp [3:4]
+ boost/qvm/swizzle4.hpp [3:4]
+ boost/qvm/throw_exception.hpp [3:4]
+ boost/qvm/to_string.hpp [3:4]
+ boost/qvm/vec.hpp [3:4]
+ boost/qvm/vec_access.hpp [3:4]
+ boost/qvm/vec_mat_operations.hpp [3:4]
+ boost/qvm/vec_mat_operations2.hpp [3:4]
+ boost/qvm/vec_mat_operations3.hpp [3:4]
+ boost/qvm/vec_mat_operations4.hpp [3:4]
+ boost/qvm/vec_operations.hpp [3:4]
+ boost/qvm/vec_operations2.hpp [3:4]
+ boost/qvm/vec_operations3.hpp [3:4]
+ boost/qvm/vec_operations4.hpp [3:4]
+ boost/qvm/vec_traits.hpp [3:4]
+ boost/qvm/vec_traits_array.hpp [3:4]
+ boost/qvm/vec_traits_defaults.hpp [3:4]
+
+KEEP BSL-1.0 13ab6f5e798d74384b45b33ca7c58d68
+BELONGS libs/context/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/context/src/asm/jump_i386_ms_pe_masm.asm at line 4, libs/context/src/asm/jump_i386_ms_pe_masm.masm at line 4, libs/context/src/asm/jump_x86_64_ms_pe_masm.asm at line 4, libs/context/src/asm/jump_x86_64_ms_pe_masm.masm at line 4, libs/context/src/asm/make_i386_ms_pe_masm.asm at line 4, libs/context/src/asm/make_i386_ms_pe_masm.masm at line 4, libs/context/src/asm/make_x86_64_ms_pe_masm.asm at line 4, libs/context/src/asm/make_x86_64_ms_pe_masm.masm at line 4, libs/context/src/asm/ontop_i386_ms_pe_masm.asm at line 4, libs/context/src/asm/ontop_i386_ms_pe_masm.masm at line 4, libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm at line 4, libs/context/src/asm/ontop_x86_64_ms_pe_masm.masm at line 4
+ License text:
+ ; Distributed under the Boost Software License, Version 1.0.
+ ; (See accompanying file LICENSE_1_0.txt or copy at
+ ; http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/context/src/asm/jump_i386_ms_pe_masm.asm [3:5]
+ libs/context/src/asm/jump_i386_ms_pe_masm.masm [3:5]
+ libs/context/src/asm/jump_x86_64_ms_pe_masm.asm [3:5]
+ libs/context/src/asm/jump_x86_64_ms_pe_masm.masm [3:5]
+ libs/context/src/asm/make_i386_ms_pe_masm.asm [3:5]
+ libs/context/src/asm/make_i386_ms_pe_masm.masm [3:5]
+ libs/context/src/asm/make_x86_64_ms_pe_masm.asm [3:5]
+ libs/context/src/asm/make_x86_64_ms_pe_masm.masm [3:5]
+ libs/context/src/asm/ontop_i386_ms_pe_masm.asm [3:5]
+ libs/context/src/asm/ontop_i386_ms_pe_masm.masm [3:5]
+ libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm [3:5]
+ libs/context/src/asm/ontop_x86_64_ms_pe_masm.masm [3:5]
+
+KEEP BSL-1.0 16183dd745250c0ebe94aaec82ad7455
+BELONGS ya.make
+ License text:
+ // Use, modification, and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 65.62
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/test/impl/debug.ipp [2:4]
+ boost/test/impl/execution_monitor.ipp [3:5]
+
+KEEP BSL-1.0 16b657614c09f3c453fe6a1aa0ffd686
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/assign/ptr_map_inserter.hpp at line 5, boost/ptr_container/detail/throw_exception.hpp at line 6, boost/range/algorithm_ext.hpp at line 10, boost/range/as_array.hpp at line 5, boost/range/as_literal.hpp at line 5, boost/range/detail/as_literal.hpp at line 5, boost/range/detail/str_types.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/assign/ptr_map_inserter.hpp [3:6]
+ boost/ptr_container/detail/throw_exception.hpp [4:7]
+ boost/range/algorithm_ext.hpp [8:11]
+ boost/range/as_array.hpp [3:6]
+ boost/range/as_literal.hpp [3:6]
+ boost/range/detail/as_literal.hpp [3:6]
+ boost/range/detail/str_types.hpp [3:6]
+
+SKIP MPL-1.1 174fd41ba7f8a6897edce2ffe88b2b8e
+BELONGS ya.make
+ License text:
+ //! Given a MPL-style metafunction class, `metafunction_class<f>` is a
+ Scancode info:
+ Original SPDX id: MPL-1.1
+ Score : 80.00
+ Match type : REFERENCE
+ Links : http://www.mozilla.com/MPL/1.1/index.html, http://www.mozilla.org/MPL/MPL-1.1.html, https://spdx.org/licenses/MPL-1.1
+ Files with this license:
+ boost/hana/fwd/type.hpp [449:449]
+
+KEEP BSL-1.0 17737caa978fa8ec0868ed818b864f37
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/date_duration_types.hpp at line 6, boost/date_time/local_time/date_duration_operators.hpp at line 6, boost/date_time/posix_time/date_duration_operators.hpp at line 6
+ License text:
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or
+ * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 78.12
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/date_time/date_duration_types.hpp [5:7]
+ boost/date_time/local_time/date_duration_operators.hpp [5:7]
+ boost/date_time/posix_time/date_duration_operators.hpp [5:7]
+
+KEEP BSL-1.0 17b918dacae9f9fa2bf0c63a057b8f7d
+BELONGS libs/context/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/context/src/asm/jump_arm_aapcs_pe_armasm.asm at line 4, libs/context/src/asm/jump_arm_aapcs_pe_armasm.masm at line 4, libs/context/src/asm/make_arm_aapcs_pe_armasm.asm at line 4, libs/context/src/asm/make_arm_aapcs_pe_armasm.masm at line 4, libs/context/src/asm/ontop_arm_aapcs_pe_armasm.asm at line 4, libs/context/src/asm/ontop_arm_aapcs_pe_armasm.masm at line 4
+ License text:
+ ; Distributed under the Boost Software License, Version 1.0.
+ ; (See accompanying file LICENSE_1_0.txt or copy at
+ ; http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/context/src/asm/jump_arm_aapcs_pe_armasm.asm [3:5]
+ libs/context/src/asm/jump_arm_aapcs_pe_armasm.masm [3:5]
+ libs/context/src/asm/make_arm_aapcs_pe_armasm.asm [3:5]
+ libs/context/src/asm/make_arm_aapcs_pe_armasm.masm [3:5]
+ libs/context/src/asm/ontop_arm_aapcs_pe_armasm.asm [3:5]
+ libs/context/src/asm/ontop_arm_aapcs_pe_armasm.masm [3:5]
+
+KEEP BSL-1.0 17c78abfb72b607685d239798799adf0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/select_type.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.11
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/select_type.hpp [2:8]
+
+KEEP Public-Domain 17d79a73205393436cf0e2fea510d697
+BELONGS ya.make
+ License text:
+ // This also contains public domain code from MurmurHash. From the
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-public-domain
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.linfo.org/publicdomain.html, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/public-domain.LICENSE
+ Files with this license:
+ boost/container_hash/hash.hpp [10:10]
+
+KEEP BSL-1.0 183e86c91b8c37c98adc93220ae9a174
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pointer_to_other.hpp at line 12
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ //
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/pointer_to_other.hpp [10:13]
+
+KEEP BSL-1.0 18cc6219abca4ab596a367d46ceb4662
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.44
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/endian/conversion.hpp [5:6]
+ boost/endian/detail/intrinsic.hpp [6:7]
+
+KEEP BSL-1.0 18fdd9d2369476efe1064640cd661a14
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/container_fwd.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/container_fwd.hpp [3:5]
+
+SKIP LicenseRef-scancode-unknown-license-reference 1abf24efa7605ba648c826259919ecd7
+BELONGS ya.make
+ License text:
+ // Copyright 2011 - 2013 John Maddock. Distributed under the Boost
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-unknown-license-reference
+ Score : 11.00
+ Match type : INTRO
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE
+ Files with this license:
+ boost/multiprecision/detail/functions/pow.hpp [3:3]
+
+KEEP BSL-1.0 1bc23f67ca27c295e38b46190cdce22f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/algorithm/minmax.hpp at line 4, boost/algorithm/minmax_element.hpp at line 4, boost/asio.hpp at line 8, boost/asio/associated_allocator.hpp at line 8, boost/asio/associated_executor.hpp at line 8, boost/asio/async_result.hpp at line 8, boost/asio/basic_datagram_socket.hpp at line 8, boost/asio/basic_deadline_timer.hpp at line 8, boost/asio/basic_io_object.hpp at line 8, boost/asio/basic_raw_socket.hpp at line 8, boost/asio/basic_seq_packet_socket.hpp at line 8, boost/asio/basic_serial_port.hpp at line 9, boost/asio/basic_signal_set.hpp at line 8, boost/asio/basic_socket.hpp at line 8, boost/asio/basic_socket_acceptor.hpp at line 8, boost/asio/basic_socket_iostream.hpp at line 8, boost/asio/basic_socket_streambuf.hpp at line 8, boost/asio/basic_stream_socket.hpp at line 8, boost/asio/basic_streambuf.hpp at line 8, boost/asio/basic_streambuf_fwd.hpp at line 8, boost/asio/basic_waitable_timer.hpp at line 8, boost/asio/bind_executor.hpp at line 8, boost/asio/buffer.hpp at line 8, boost/asio/buffered_read_stream.hpp at line 8, boost/asio/buffered_read_stream_fwd.hpp at line 8, boost/asio/buffered_stream.hpp at line 8, boost/asio/buffered_stream_fwd.hpp at line 8, boost/asio/buffered_write_stream.hpp at line 8, boost/asio/buffered_write_stream_fwd.hpp at line 8, boost/asio/buffers_iterator.hpp at line 8, boost/asio/completion_condition.hpp at line 8, boost/asio/connect.hpp at line 8, boost/asio/coroutine.hpp at line 8, boost/asio/datagram_socket_service.hpp at line 8, boost/asio/deadline_timer.hpp at line 8, boost/asio/deadline_timer_service.hpp at line 8, boost/asio/defer.hpp at line 8, boost/asio/detail/array.hpp at line 8, boost/asio/detail/array_fwd.hpp at line 8, boost/asio/detail/assert.hpp at line 8, boost/asio/detail/atomic_count.hpp at line 8, boost/asio/detail/base_from_completion_cond.hpp at line 8, boost/asio/detail/bind_handler.hpp at line 8, boost/asio/detail/buffer_resize_guard.hpp at line 8, boost/asio/detail/buffer_sequence_adapter.hpp at line 8, boost/asio/detail/buffered_stream_storage.hpp at line 8, boost/asio/detail/call_stack.hpp at line 8, boost/asio/detail/chrono.hpp at line 8, boost/asio/detail/chrono_time_traits.hpp at line 8, boost/asio/detail/completion_handler.hpp at line 8, boost/asio/detail/concurrency_hint.hpp at line 8, boost/asio/detail/conditionally_enabled_event.hpp at line 8, boost/asio/detail/conditionally_enabled_mutex.hpp at line 8, boost/asio/detail/config.hpp at line 8, boost/asio/detail/consuming_buffers.hpp at line 8, boost/asio/detail/cstddef.hpp at line 8, boost/asio/detail/cstdint.hpp at line 8, boost/asio/detail/date_time_fwd.hpp at line 8, boost/asio/detail/deadline_timer_service.hpp at line 8, boost/asio/detail/dependent_type.hpp at line 8, boost/asio/detail/descriptor_ops.hpp at line 8, boost/asio/detail/descriptor_read_op.hpp at line 8, boost/asio/detail/descriptor_write_op.hpp at line 8, boost/asio/detail/dev_poll_reactor.hpp at line 8, boost/asio/detail/epoll_reactor.hpp at line 8, boost/asio/detail/event.hpp at line 8, boost/asio/detail/eventfd_select_interrupter.hpp at line 9, boost/asio/detail/executor_op.hpp at line 8, boost/asio/detail/fd_set_adapter.hpp at line 8, boost/asio/detail/fenced_block.hpp at line 8, boost/asio/detail/functional.hpp at line 8, boost/asio/detail/gcc_arm_fenced_block.hpp at line 8, boost/asio/detail/gcc_hppa_fenced_block.hpp at line 8, boost/asio/detail/gcc_sync_fenced_block.hpp at line 8, boost/asio/detail/gcc_x86_fenced_block.hpp at line 8, boost/asio/detail/global.hpp at line 8, boost/asio/detail/handler_alloc_helpers.hpp at line 8, boost/asio/detail/handler_cont_helpers.hpp at line 8, boost/asio/detail/handler_invoke_helpers.hpp at line 8, boost/asio/detail/handler_tracking.hpp at line 8, boost/asio/detail/handler_type_requirements.hpp at line 8, boost/asio/detail/handler_work.hpp at line 8, boost/asio/detail/hash_map.hpp at line 8, boost/asio/detail/impl/buffer_sequence_adapter.ipp at line 8, boost/asio/detail/impl/descriptor_ops.ipp at line 8, boost/asio/detail/impl/dev_poll_reactor.hpp at line 8, boost/asio/detail/impl/dev_poll_reactor.ipp at line 8, boost/asio/detail/impl/epoll_reactor.hpp at line 8, boost/asio/detail/impl/epoll_reactor.ipp at line 8, boost/asio/detail/impl/eventfd_select_interrupter.ipp at line 9, boost/asio/detail/impl/handler_tracking.ipp at line 8, boost/asio/detail/impl/kqueue_reactor.hpp at line 9, boost/asio/detail/impl/kqueue_reactor.ipp at line 9, boost/asio/detail/impl/null_event.ipp at line 8, boost/asio/detail/impl/pipe_select_interrupter.ipp at line 8, boost/asio/detail/impl/posix_event.ipp at line 8, boost/asio/detail/impl/posix_mutex.ipp at line 8, boost/asio/detail/impl/posix_thread.ipp at line 8, boost/asio/detail/impl/posix_tss_ptr.ipp at line 8, boost/asio/detail/impl/reactive_descriptor_service.ipp at line 8, boost/asio/detail/impl/reactive_serial_port_service.ipp at line 9, boost/asio/detail/impl/reactive_socket_service_base.ipp at line 8, boost/asio/detail/impl/resolver_service_base.ipp at line 8, boost/asio/detail/impl/scheduler.ipp at line 8, boost/asio/detail/impl/select_reactor.hpp at line 8, boost/asio/detail/impl/select_reactor.ipp at line 8, boost/asio/detail/impl/service_registry.hpp at line 8, boost/asio/detail/impl/service_registry.ipp at line 8, boost/asio/detail/impl/signal_set_service.ipp at line 8, boost/asio/detail/impl/socket_ops.ipp at line 8, boost/asio/detail/impl/socket_select_interrupter.ipp at line 8, boost/asio/detail/impl/strand_executor_service.hpp at line 8, boost/asio/detail/impl/strand_executor_service.ipp at line 8, boost/asio/detail/impl/strand_service.hpp at line 8, boost/asio/detail/impl/strand_service.ipp at line 8, boost/asio/detail/impl/throw_error.ipp at line 8, boost/asio/detail/impl/timer_queue_ptime.ipp at line 8, boost/asio/detail/impl/timer_queue_set.ipp at line 8, boost/asio/detail/impl/win_event.ipp at line 8, boost/asio/detail/impl/win_iocp_handle_service.ipp at line 9, boost/asio/detail/impl/win_iocp_io_context.hpp at line 8, boost/asio/detail/impl/win_iocp_io_context.ipp at line 8, boost/asio/detail/impl/win_iocp_serial_port_service.ipp at line 9, boost/asio/detail/impl/win_iocp_socket_service_base.ipp at line 8, boost/asio/detail/impl/win_mutex.ipp at line 8, boost/asio/detail/impl/win_object_handle_service.ipp at line 9, boost/asio/detail/impl/win_static_mutex.ipp at line 8, boost/asio/detail/impl/win_thread.ipp at line 8, boost/asio/detail/impl/win_tss_ptr.ipp at line 8, boost/asio/detail/impl/winrt_ssocket_service_base.ipp at line 8, boost/asio/detail/impl/winrt_timer_scheduler.hpp at line 8, boost/asio/detail/impl/winrt_timer_scheduler.ipp at line 8, boost/asio/detail/impl/winsock_init.ipp at line 8, boost/asio/detail/io_control.hpp at line 8, boost/asio/detail/is_buffer_sequence.hpp at line 8, boost/asio/detail/is_executor.hpp at line 8, boost/asio/detail/keyword_tss_ptr.hpp at line 8, boost/asio/detail/kqueue_reactor.hpp at line 9, boost/asio/detail/limits.hpp at line 8, boost/asio/detail/local_free_on_block_exit.hpp at line 8, boost/asio/detail/macos_fenced_block.hpp at line 8, boost/asio/detail/memory.hpp at line 8, boost/asio/detail/mutex.hpp at line 8, boost/asio/detail/noncopyable.hpp at line 8, boost/asio/detail/null_event.hpp at line 8, boost/asio/detail/null_fenced_block.hpp at line 8, boost/asio/detail/null_global.hpp at line 8, boost/asio/detail/null_mutex.hpp at line 8, boost/asio/detail/null_reactor.hpp at line 8, boost/asio/detail/null_signal_blocker.hpp at line 8, boost/asio/detail/null_socket_service.hpp at line 8, boost/asio/detail/null_static_mutex.hpp at line 8, boost/asio/detail/null_thread.hpp at line 8, boost/asio/detail/null_tss_ptr.hpp at line 8, boost/asio/detail/object_pool.hpp at line 8, boost/asio/detail/old_win_sdk_compat.hpp at line 8, boost/asio/detail/op_queue.hpp at line 8, boost/asio/detail/operation.hpp at line 8, boost/asio/detail/pipe_select_interrupter.hpp at line 8, boost/asio/detail/pop_options.hpp at line 8, boost/asio/detail/posix_event.hpp at line 8, boost/asio/detail/posix_fd_set_adapter.hpp at line 8, boost/asio/detail/posix_global.hpp at line 8, boost/asio/detail/posix_mutex.hpp at line 8, boost/asio/detail/posix_signal_blocker.hpp at line 8, boost/asio/detail/posix_static_mutex.hpp at line 8, boost/asio/detail/posix_thread.hpp at line 8, boost/asio/detail/posix_tss_ptr.hpp at line 8, boost/asio/detail/push_options.hpp at line 8, boost/asio/detail/reactive_descriptor_service.hpp at line 8, boost/asio/detail/reactive_null_buffers_op.hpp at line 8, boost/asio/detail/reactive_serial_port_service.hpp at line 9, boost/asio/detail/reactive_socket_accept_op.hpp at line 8, boost/asio/detail/reactive_socket_connect_op.hpp at line 8, boost/asio/detail/reactive_socket_recv_op.hpp at line 8, boost/asio/detail/reactive_socket_recvfrom_op.hpp at line 8, boost/asio/detail/reactive_socket_recvmsg_op.hpp at line 8, boost/asio/detail/reactive_socket_send_op.hpp at line 8, boost/asio/detail/reactive_socket_sendto_op.hpp at line 8, boost/asio/detail/reactive_socket_service.hpp at line 8, boost/asio/detail/reactive_socket_service_base.hpp at line 8, boost/asio/detail/reactive_wait_op.hpp at line 8, boost/asio/detail/reactor.hpp at line 8, boost/asio/detail/reactor_fwd.hpp at line 8, boost/asio/detail/reactor_op.hpp at line 8, boost/asio/detail/reactor_op_queue.hpp at line 8, boost/asio/detail/recycling_allocator.hpp at line 8, boost/asio/detail/regex_fwd.hpp at line 8, boost/asio/detail/resolve_endpoint_op.hpp at line 8, boost/asio/detail/resolve_op.hpp at line 8, boost/asio/detail/resolve_query_op.hpp at line 8, boost/asio/detail/resolver_service.hpp at line 8, boost/asio/detail/resolver_service_base.hpp at line 8, boost/asio/detail/scheduler.hpp at line 8, boost/asio/detail/scheduler_operation.hpp at line 8, boost/asio/detail/scheduler_thread_info.hpp at line 8, boost/asio/detail/scoped_lock.hpp at line 8, boost/asio/detail/scoped_ptr.hpp at line 8, boost/asio/detail/select_interrupter.hpp at line 8, boost/asio/detail/select_reactor.hpp at line 8, boost/asio/detail/service_registry.hpp at line 8, boost/asio/detail/signal_blocker.hpp at line 8, boost/asio/detail/signal_handler.hpp at line 8, boost/asio/detail/signal_init.hpp at line 8, boost/asio/detail/signal_op.hpp at line 8, boost/asio/detail/signal_set_service.hpp at line 8, boost/asio/detail/socket_holder.hpp at line 8, boost/asio/detail/socket_ops.hpp at line 8, boost/asio/detail/socket_option.hpp at line 8, boost/asio/detail/socket_select_interrupter.hpp at line 8, boost/asio/detail/socket_types.hpp at line 8, boost/asio/detail/solaris_fenced_block.hpp at line 8, boost/asio/detail/static_mutex.hpp at line 8, boost/asio/detail/std_event.hpp at line 8, boost/asio/detail/std_fenced_block.hpp at line 8, boost/asio/detail/std_global.hpp at line 8, boost/asio/detail/std_mutex.hpp at line 8, boost/asio/detail/std_static_mutex.hpp at line 8, boost/asio/detail/std_thread.hpp at line 8, boost/asio/detail/strand_executor_service.hpp at line 8, boost/asio/detail/strand_service.hpp at line 8, boost/asio/detail/string_view.hpp at line 8, boost/asio/detail/thread.hpp at line 8, boost/asio/detail/thread_context.hpp at line 8, boost/asio/detail/thread_group.hpp at line 8, boost/asio/detail/thread_info_base.hpp at line 8, boost/asio/detail/throw_error.hpp at line 8, boost/asio/detail/throw_exception.hpp at line 8, boost/asio/detail/timer_queue.hpp at line 8, boost/asio/detail/timer_queue_base.hpp at line 8, boost/asio/detail/timer_queue_ptime.hpp at line 8, boost/asio/detail/timer_queue_set.hpp at line 8, boost/asio/detail/timer_scheduler.hpp at line 8, boost/asio/detail/timer_scheduler_fwd.hpp at line 8, boost/asio/detail/tss_ptr.hpp at line 8, boost/asio/detail/type_traits.hpp at line 8, boost/asio/detail/variadic_templates.hpp at line 8, boost/asio/detail/wait_handler.hpp at line 8, boost/asio/detail/wait_op.hpp at line 8, boost/asio/detail/win_event.hpp at line 8, boost/asio/detail/win_fd_set_adapter.hpp at line 8, boost/asio/detail/win_fenced_block.hpp at line 8, boost/asio/detail/win_global.hpp at line 8, boost/asio/detail/win_iocp_handle_read_op.hpp at line 9, boost/asio/detail/win_iocp_handle_service.hpp at line 9, boost/asio/detail/win_iocp_handle_write_op.hpp at line 9, boost/asio/detail/win_iocp_io_context.hpp at line 8, boost/asio/detail/win_iocp_null_buffers_op.hpp at line 8, boost/asio/detail/win_iocp_operation.hpp at line 8, boost/asio/detail/win_iocp_overlapped_op.hpp at line 8, boost/asio/detail/win_iocp_overlapped_ptr.hpp at line 8, boost/asio/detail/win_iocp_serial_port_service.hpp at line 9, boost/asio/detail/win_iocp_socket_accept_op.hpp at line 8, boost/asio/detail/win_iocp_socket_connect_op.hpp at line 8, boost/asio/detail/win_iocp_socket_recv_op.hpp at line 8, boost/asio/detail/win_iocp_socket_recvfrom_op.hpp at line 8, boost/asio/detail/win_iocp_socket_recvmsg_op.hpp at line 8, boost/asio/detail/win_iocp_socket_send_op.hpp at line 8, boost/asio/detail/win_iocp_socket_service.hpp at line 8, boost/asio/detail/win_iocp_socket_service_base.hpp at line 8, boost/asio/detail/win_iocp_thread_info.hpp at line 8, boost/asio/detail/win_iocp_wait_op.hpp at line 8, boost/asio/detail/win_mutex.hpp at line 8, boost/asio/detail/win_object_handle_service.hpp at line 9, boost/asio/detail/win_static_mutex.hpp at line 8, boost/asio/detail/win_thread.hpp at line 8, boost/asio/detail/win_tss_ptr.hpp at line 8, boost/asio/detail/winapp_thread.hpp at line 8, boost/asio/detail/wince_thread.hpp at line 8, boost/asio/detail/winrt_async_manager.hpp at line 8, boost/asio/detail/winrt_async_op.hpp at line 8, boost/asio/detail/winrt_resolve_op.hpp at line 8, boost/asio/detail/winrt_resolver_service.hpp at line 8, boost/asio/detail/winrt_socket_connect_op.hpp at line 8, boost/asio/detail/winrt_socket_recv_op.hpp at line 8, boost/asio/detail/winrt_socket_send_op.hpp at line 8, boost/asio/detail/winrt_ssocket_service.hpp at line 8, boost/asio/detail/winrt_ssocket_service_base.hpp at line 8, boost/asio/detail/winrt_timer_scheduler.hpp at line 8, boost/asio/detail/winrt_utils.hpp at line 8, boost/asio/detail/winsock_init.hpp at line 8, boost/asio/detail/work_dispatcher.hpp at line 8, boost/asio/detail/wrapped_handler.hpp at line 8, boost/asio/dispatch.hpp at line 8, boost/asio/error.hpp at line 8, boost/asio/execution_context.hpp at line 8, boost/asio/executor.hpp at line 8, boost/asio/executor_work_guard.hpp at line 8, boost/asio/experimental.hpp at line 8, boost/asio/experimental/co_spawn.hpp at line 8, boost/asio/experimental/detached.hpp at line 8, boost/asio/experimental/impl/co_spawn.hpp at line 8, boost/asio/experimental/impl/detached.hpp at line 8, boost/asio/experimental/impl/redirect_error.hpp at line 8, boost/asio/experimental/redirect_error.hpp at line 8, boost/asio/generic/basic_endpoint.hpp at line 8, boost/asio/generic/datagram_protocol.hpp at line 8, boost/asio/generic/detail/endpoint.hpp at line 8, boost/asio/generic/detail/impl/endpoint.ipp at line 8, boost/asio/generic/raw_protocol.hpp at line 8, boost/asio/generic/seq_packet_protocol.hpp at line 8, boost/asio/generic/stream_protocol.hpp at line 8, boost/asio/handler_alloc_hook.hpp at line 8, boost/asio/handler_continuation_hook.hpp at line 8, boost/asio/handler_invoke_hook.hpp at line 8, boost/asio/handler_type.hpp at line 8, boost/asio/high_resolution_timer.hpp at line 8, boost/asio/impl/buffered_read_stream.hpp at line 8, boost/asio/impl/buffered_write_stream.hpp at line 8, boost/asio/impl/connect.hpp at line 8, boost/asio/impl/defer.hpp at line 8, boost/asio/impl/dispatch.hpp at line 8, boost/asio/impl/error.ipp at line 8, boost/asio/impl/execution_context.hpp at line 8, boost/asio/impl/execution_context.ipp at line 8, boost/asio/impl/executor.hpp at line 8, boost/asio/impl/executor.ipp at line 8, boost/asio/impl/handler_alloc_hook.ipp at line 8, boost/asio/impl/io_context.hpp at line 8, boost/asio/impl/io_context.ipp at line 8, boost/asio/impl/post.hpp at line 8, boost/asio/impl/read.hpp at line 8, boost/asio/impl/read_at.hpp at line 8, boost/asio/impl/read_until.hpp at line 8, boost/asio/impl/serial_port_base.hpp at line 9, boost/asio/impl/serial_port_base.ipp at line 9, boost/asio/impl/spawn.hpp at line 8, boost/asio/impl/src.cpp at line 8, boost/asio/impl/src.hpp at line 8, boost/asio/impl/system_context.hpp at line 8, boost/asio/impl/system_context.ipp at line 8, boost/asio/impl/system_executor.hpp at line 8, boost/asio/impl/thread_pool.hpp at line 8, boost/asio/impl/thread_pool.ipp at line 8, boost/asio/impl/use_future.hpp at line 8, boost/asio/impl/write.hpp at line 8, boost/asio/impl/write_at.hpp at line 8, boost/asio/io_context.hpp at line 8, boost/asio/io_context_strand.hpp at line 8, boost/asio/io_service.hpp at line 8, boost/asio/io_service_strand.hpp at line 8, boost/asio/ip/address.hpp at line 8, boost/asio/ip/address_v4.hpp at line 8, boost/asio/ip/address_v4_iterator.hpp at line 8, boost/asio/ip/address_v4_range.hpp at line 8, boost/asio/ip/address_v6.hpp at line 8, boost/asio/ip/address_v6_iterator.hpp at line 9, boost/asio/ip/address_v6_range.hpp at line 9, boost/asio/ip/bad_address_cast.hpp at line 8, boost/asio/ip/basic_endpoint.hpp at line 8, boost/asio/ip/basic_resolver.hpp at line 8, boost/asio/ip/basic_resolver_entry.hpp at line 8, boost/asio/ip/basic_resolver_iterator.hpp at line 8, boost/asio/ip/basic_resolver_query.hpp at line 8, boost/asio/ip/basic_resolver_results.hpp at line 8, boost/asio/ip/detail/endpoint.hpp at line 8, boost/asio/ip/detail/impl/endpoint.ipp at line 8, boost/asio/ip/detail/socket_option.hpp at line 8, boost/asio/ip/host_name.hpp at line 8, boost/asio/ip/icmp.hpp at line 8, boost/asio/ip/impl/address.hpp at line 8, boost/asio/ip/impl/address.ipp at line 8, boost/asio/ip/impl/address_v4.hpp at line 8, boost/asio/ip/impl/address_v4.ipp at line 8, boost/asio/ip/impl/address_v6.hpp at line 8, boost/asio/ip/impl/address_v6.ipp at line 8, boost/asio/ip/impl/basic_endpoint.hpp at line 8, boost/asio/ip/impl/host_name.ipp at line 8, boost/asio/ip/impl/network_v4.hpp at line 9, boost/asio/ip/impl/network_v4.ipp at line 9, boost/asio/ip/impl/network_v6.hpp at line 8, boost/asio/ip/impl/network_v6.ipp at line 9, boost/asio/ip/multicast.hpp at line 8, boost/asio/ip/network_v4.hpp at line 9, boost/asio/ip/network_v6.hpp at line 9, boost/asio/ip/resolver_base.hpp at line 8, boost/asio/ip/resolver_query_base.hpp at line 8, boost/asio/ip/resolver_service.hpp at line 8, boost/asio/ip/tcp.hpp at line 8, boost/asio/ip/udp.hpp at line 8, boost/asio/ip/unicast.hpp at line 8, boost/asio/ip/v6_only.hpp at line 8, boost/asio/is_executor.hpp at line 8, boost/asio/is_read_buffered.hpp at line 8, boost/asio/is_write_buffered.hpp at line 8, boost/asio/local/basic_endpoint.hpp at line 9, boost/asio/local/connect_pair.hpp at line 8, boost/asio/local/datagram_protocol.hpp at line 8, boost/asio/local/detail/endpoint.hpp at line 9, boost/asio/local/detail/impl/endpoint.ipp at line 9, boost/asio/local/stream_protocol.hpp at line 8, boost/asio/packaged_task.hpp at line 8, boost/asio/placeholders.hpp at line 8, boost/asio/posix/basic_descriptor.hpp at line 8, boost/asio/posix/basic_stream_descriptor.hpp at line 8, boost/asio/posix/descriptor.hpp at line 8, boost/asio/posix/descriptor_base.hpp at line 8, boost/asio/posix/stream_descriptor.hpp at line 8, boost/asio/posix/stream_descriptor_service.hpp at line 8, boost/asio/post.hpp at line 8, boost/asio/raw_socket_service.hpp at line 8, boost/asio/read.hpp at line 8, boost/asio/read_at.hpp at line 8, boost/asio/read_until.hpp at line 8, boost/asio/seq_packet_socket_service.hpp at line 8, boost/asio/serial_port.hpp at line 9, boost/asio/serial_port_base.hpp at line 9, boost/asio/serial_port_service.hpp at line 8, boost/asio/signal_set.hpp at line 8, boost/asio/signal_set_service.hpp at line 8, boost/asio/socket_acceptor_service.hpp at line 8, boost/asio/socket_base.hpp at line 8, boost/asio/spawn.hpp at line 8, boost/asio/ssl.hpp at line 8, boost/asio/ssl/context.hpp at line 8, boost/asio/ssl/context_base.hpp at line 8, boost/asio/ssl/detail/buffered_handshake_op.hpp at line 8, boost/asio/ssl/detail/engine.hpp at line 8, boost/asio/ssl/detail/handshake_op.hpp at line 8, boost/asio/ssl/detail/impl/engine.ipp at line 8, boost/asio/ssl/detail/impl/openssl_init.ipp at line 9, boost/asio/ssl/detail/io.hpp at line 8, boost/asio/ssl/detail/openssl_init.hpp at line 8, boost/asio/ssl/detail/openssl_types.hpp at line 8, boost/asio/ssl/detail/password_callback.hpp at line 8, boost/asio/ssl/detail/read_op.hpp at line 8, boost/asio/ssl/detail/shutdown_op.hpp at line 8, boost/asio/ssl/detail/stream_core.hpp at line 8, boost/asio/ssl/detail/verify_callback.hpp at line 8, boost/asio/ssl/detail/write_op.hpp at line 8, boost/asio/ssl/error.hpp at line 8, boost/asio/ssl/impl/context.hpp at line 9, boost/asio/ssl/impl/context.ipp at line 9, boost/asio/ssl/impl/error.ipp at line 8, boost/asio/ssl/impl/rfc2818_verification.ipp at line 8, boost/asio/ssl/impl/src.hpp at line 8, boost/asio/ssl/rfc2818_verification.hpp at line 8, boost/asio/ssl/stream.hpp at line 8, boost/asio/ssl/stream_base.hpp at line 8, boost/asio/ssl/verify_context.hpp at line 8, boost/asio/ssl/verify_mode.hpp at line 8, boost/asio/steady_timer.hpp at line 8, boost/asio/strand.hpp at line 8, boost/asio/stream_socket_service.hpp at line 8, boost/asio/streambuf.hpp at line 8, boost/asio/system_context.hpp at line 8, boost/asio/system_executor.hpp at line 8, boost/asio/system_timer.hpp at line 8, boost/asio/thread_pool.hpp at line 8, boost/asio/time_traits.hpp at line 8, boost/asio/ts/buffer.hpp at line 8, boost/asio/ts/executor.hpp at line 8, boost/asio/ts/internet.hpp at line 8, boost/asio/ts/io_context.hpp at line 8, boost/asio/ts/net.hpp at line 8, boost/asio/ts/netfwd.hpp at line 8, boost/asio/ts/socket.hpp at line 8, boost/asio/ts/timer.hpp at line 8, boost/asio/unyield.hpp at line 8, boost/asio/use_future.hpp at line 8, boost/asio/uses_executor.hpp at line 8, boost/asio/version.hpp at line 8, boost/asio/wait_traits.hpp at line 8, boost/asio/waitable_timer_service.hpp at line 8, boost/asio/windows/basic_handle.hpp at line 8, boost/asio/windows/basic_object_handle.hpp at line 9, boost/asio/windows/basic_random_access_handle.hpp at line 8, boost/asio/windows/basic_stream_handle.hpp at line 8, boost/asio/windows/object_handle.hpp at line 9, boost/asio/windows/object_handle_service.hpp at line 9, boost/asio/windows/overlapped_handle.hpp at line 8, boost/asio/windows/overlapped_ptr.hpp at line 8, boost/asio/windows/random_access_handle.hpp at line 8, boost/asio/windows/random_access_handle_service.hpp at line 8, boost/asio/windows/stream_handle.hpp at line 8, boost/asio/windows/stream_handle_service.hpp at line 8, boost/asio/write.hpp at line 8, boost/asio/write_at.hpp at line 8, boost/asio/yield.hpp at line 8, boost/beast.hpp at line 5, boost/beast/core.hpp at line 5, boost/beast/core/bind_handler.hpp at line 5, boost/beast/core/buffered_read_stream.hpp at line 5, boost/beast/core/buffers_adapter.hpp at line 5, boost/beast/core/buffers_cat.hpp at line 5, boost/beast/core/buffers_prefix.hpp at line 5, boost/beast/core/buffers_suffix.hpp at line 5, boost/beast/core/buffers_to_string.hpp at line 5, boost/beast/core/detail/allocator.hpp at line 5, boost/beast/core/detail/base64.hpp at line 5, boost/beast/core/detail/bind_handler.hpp at line 5, boost/beast/core/detail/buffers_ref.hpp at line 5, boost/beast/core/detail/clamp.hpp at line 5, boost/beast/core/detail/config.hpp at line 5, boost/beast/core/detail/cpu_info.hpp at line 5, boost/beast/core/detail/empty_base_optimization.hpp at line 5, boost/beast/core/detail/integer_sequence.hpp at line 5, boost/beast/core/detail/ostream.hpp at line 5, boost/beast/core/detail/sha1.hpp at line 5, boost/beast/core/detail/static_ostream.hpp at line 5, boost/beast/core/detail/static_string.hpp at line 5, boost/beast/core/detail/type_traits.hpp at line 5, boost/beast/core/detail/variant.hpp at line 5, boost/beast/core/detail/varint.hpp at line 5, boost/beast/core/error.hpp at line 5, boost/beast/core/file.hpp at line 5, boost/beast/core/file_base.hpp at line 5, boost/beast/core/file_posix.hpp at line 5, boost/beast/core/file_stdio.hpp at line 5, boost/beast/core/file_win32.hpp at line 5, boost/beast/core/flat_buffer.hpp at line 5, boost/beast/core/flat_static_buffer.hpp at line 5, boost/beast/core/handler_ptr.hpp at line 5, boost/beast/core/impl/buffered_read_stream.ipp at line 5, boost/beast/core/impl/buffers_adapter.ipp at line 5, boost/beast/core/impl/buffers_cat.ipp at line 5, boost/beast/core/impl/buffers_prefix.ipp at line 5, boost/beast/core/impl/buffers_suffix.ipp at line 5, boost/beast/core/impl/file_posix.ipp at line 5, boost/beast/core/impl/file_stdio.ipp at line 5, boost/beast/core/impl/file_win32.ipp at line 5, boost/beast/core/impl/flat_buffer.ipp at line 5, boost/beast/core/impl/flat_static_buffer.ipp at line 5, boost/beast/core/impl/handler_ptr.ipp at line 5, boost/beast/core/impl/multi_buffer.ipp at line 5, boost/beast/core/impl/read_size.ipp at line 5, boost/beast/core/impl/static_buffer.ipp at line 5, boost/beast/core/impl/static_string.ipp at line 5, boost/beast/core/impl/string_param.ipp at line 5, boost/beast/core/multi_buffer.hpp at line 5, boost/beast/core/ostream.hpp at line 5, boost/beast/core/read_size.hpp at line 5, boost/beast/core/span.hpp at line 5, boost/beast/core/static_buffer.hpp at line 5, boost/beast/core/static_string.hpp at line 5, boost/beast/core/string.hpp at line 5, boost/beast/core/string_param.hpp at line 5, boost/beast/core/type_traits.hpp at line 5, boost/beast/http.hpp at line 5, boost/beast/http/basic_dynamic_body.hpp at line 5, boost/beast/http/basic_file_body.hpp at line 5, boost/beast/http/basic_parser.hpp at line 5, boost/beast/http/buffer_body.hpp at line 5, boost/beast/http/chunk_encode.hpp at line 5, boost/beast/http/detail/basic_parsed_list.hpp at line 5, boost/beast/http/detail/basic_parser.hpp at line 5, boost/beast/http/detail/chunk_encode.hpp at line 5, boost/beast/http/detail/rfc7230.hpp at line 5, boost/beast/http/detail/type_traits.hpp at line 5, boost/beast/http/dynamic_body.hpp at line 5, boost/beast/http/empty_body.hpp at line 5, boost/beast/http/error.hpp at line 5, boost/beast/http/field.hpp at line 5, boost/beast/http/fields.hpp at line 5, boost/beast/http/file_body.hpp at line 5, boost/beast/http/impl/basic_parser.ipp at line 5, boost/beast/http/impl/chunk_encode.ipp at line 5, boost/beast/http/impl/error.ipp at line 5, boost/beast/http/impl/field.ipp at line 5, boost/beast/http/impl/fields.ipp at line 5, boost/beast/http/impl/file_body_win32.ipp at line 5, boost/beast/http/impl/message.ipp at line 5, boost/beast/http/impl/parser.ipp at line 5, boost/beast/http/impl/read.ipp at line 5, boost/beast/http/impl/rfc7230.ipp at line 5, boost/beast/http/impl/serializer.ipp at line 5, boost/beast/http/impl/status.ipp at line 5, boost/beast/http/impl/verb.ipp at line 5, boost/beast/http/impl/write.ipp at line 5, boost/beast/http/message.hpp at line 5, boost/beast/http/parser.hpp at line 5, boost/beast/http/read.hpp at line 5, boost/beast/http/rfc7230.hpp at line 5, boost/beast/http/serializer.hpp at line 5, boost/beast/http/span_body.hpp at line 5, boost/beast/http/status.hpp at line 5, boost/beast/http/string_body.hpp at line 5, boost/beast/http/type_traits.hpp at line 5, boost/beast/http/vector_body.hpp at line 5, boost/beast/http/verb.hpp at line 5, boost/beast/http/write.hpp at line 5, boost/beast/version.hpp at line 5, boost/beast/websocket.hpp at line 5, boost/beast/websocket/detail/error.hpp at line 5, boost/beast/websocket/detail/frame.hpp at line 5, boost/beast/websocket/detail/hybi13.hpp at line 5, boost/beast/websocket/detail/mask.hpp at line 5, boost/beast/websocket/detail/pausation.hpp at line 5, boost/beast/websocket/detail/pmd_extension.hpp at line 5, boost/beast/websocket/detail/stream_base.hpp at line 5, boost/beast/websocket/detail/type_traits.hpp at line 5, boost/beast/websocket/detail/utf8_checker.hpp at line 5, boost/beast/websocket/error.hpp at line 5, boost/beast/websocket/impl/accept.ipp at line 5, boost/beast/websocket/impl/close.ipp at line 5, boost/beast/websocket/impl/error.ipp at line 5, boost/beast/websocket/impl/handshake.ipp at line 5, boost/beast/websocket/impl/ping.ipp at line 5, boost/beast/websocket/impl/read.ipp at line 5, boost/beast/websocket/impl/rfc6455.ipp at line 5, boost/beast/websocket/impl/ssl.ipp at line 5, boost/beast/websocket/impl/stream.ipp at line 5, boost/beast/websocket/impl/teardown.ipp at line 5, boost/beast/websocket/impl/write.ipp at line 5, boost/beast/websocket/option.hpp at line 5, boost/beast/websocket/rfc6455.hpp at line 5, boost/beast/websocket/role.hpp at line 5, boost/beast/websocket/ssl.hpp at line 5, boost/beast/websocket/stream.hpp at line 5, boost/beast/websocket/stream_fwd.hpp at line 5, boost/beast/websocket/teardown.hpp at line 5, boost/beast/zlib.hpp at line 5, boost/beast/zlib/deflate_stream.hpp at line 5, boost/beast/zlib/detail/bitstream.hpp at line 5, boost/beast/zlib/detail/deflate_stream.hpp at line 5, boost/beast/zlib/detail/inflate_stream.hpp at line 5, boost/beast/zlib/detail/ranges.hpp at line 5, boost/beast/zlib/detail/window.hpp at line 5, boost/beast/zlib/error.hpp at line 5, boost/beast/zlib/impl/error.ipp at line 5, boost/beast/zlib/inflate_stream.hpp at line 5, boost/beast/zlib/zlib.hpp at line 5, boost/container_hash/detail/float_functions.hpp at line 4, boost/container_hash/detail/hash_float.hpp at line 4, boost/container_hash/detail/limits.hpp at line 4, boost/container_hash/extensions.hpp at line 4, boost/container_hash/hash.hpp at line 4, boost/container_hash/hash_fwd.hpp at line 4, boost/detail/container_fwd.hpp at line 4, boost/functional/hash.hpp at line 4, boost/functional/hash/extensions.hpp at line 4, boost/functional/hash/hash.hpp at line 4, boost/functional/hash/hash_fwd.hpp at line 4, boost/functional/hash_fwd.hpp at line 4, boost/process.hpp at line 10, boost/process/args.hpp at line 9, boost/process/async.hpp at line 4, boost/process/async_pipe.hpp at line 8, boost/process/async_system.hpp at line 9, boost/process/child.hpp at line 9, boost/process/cmd.hpp at line 9, boost/process/detail/basic_cmd.hpp at line 4, boost/process/detail/child_decl.hpp at line 9, boost/process/detail/config.hpp at line 9, boost/process/detail/execute_impl.hpp at line 9, boost/process/detail/handler.hpp at line 4, boost/process/detail/handler_base.hpp at line 9, boost/process/detail/on_exit.hpp at line 4, boost/process/detail/posix/asio_fwd.hpp at line 4, boost/process/detail/posix/async_handler.hpp at line 4, boost/process/detail/posix/async_in.hpp at line 8, boost/process/detail/posix/async_out.hpp at line 8, boost/process/detail/posix/async_pipe.hpp at line 4, boost/process/detail/posix/basic_cmd.hpp at line 4, boost/process/detail/posix/basic_pipe.hpp at line 8, boost/process/detail/posix/child_handle.hpp at line 8, boost/process/detail/posix/close_in.hpp at line 8, boost/process/detail/posix/close_out.hpp at line 8, boost/process/detail/posix/cmd.hpp at line 4, boost/process/detail/posix/compare_handles.hpp at line 4, boost/process/detail/posix/env_init.hpp at line 4, boost/process/detail/posix/environment.hpp at line 4, boost/process/detail/posix/exe.hpp at line 4, boost/process/detail/posix/executor.hpp at line 8, boost/process/detail/posix/fd.hpp at line 8, boost/process/detail/posix/file_descriptor.hpp at line 4, boost/process/detail/posix/file_in.hpp at line 8, boost/process/detail/posix/file_out.hpp at line 9, boost/process/detail/posix/group_handle.hpp at line 4, boost/process/detail/posix/group_ref.hpp at line 4, boost/process/detail/posix/handler.hpp at line 4, boost/process/detail/posix/io_context_ref.hpp at line 4, boost/process/detail/posix/is_running.hpp at line 4, boost/process/detail/posix/null_in.hpp at line 8, boost/process/detail/posix/null_out.hpp at line 9, boost/process/detail/posix/on_exit.hpp at line 4, boost/process/detail/posix/pipe_in.hpp at line 8, boost/process/detail/posix/pipe_out.hpp at line 9, boost/process/detail/posix/search_path.hpp at line 8, boost/process/detail/posix/shell_path.hpp at line 8, boost/process/detail/posix/sigchld_service.hpp at line 4, boost/process/detail/posix/signal.hpp at line 9, boost/process/detail/posix/start_dir.hpp at line 8, boost/process/detail/posix/terminate.hpp at line 8, boost/process/detail/posix/wait_for_exit.hpp at line 8, boost/process/detail/posix/wait_group.hpp at line 8, boost/process/detail/throw_on_error.hpp at line 9, boost/process/detail/traits.hpp at line 4, boost/process/detail/traits/async.hpp at line 4, boost/process/detail/traits/cmd_or_exe.hpp at line 4, boost/process/detail/traits/decl.hpp at line 4, boost/process/detail/traits/env.hpp at line 4, boost/process/detail/traits/error.hpp at line 4, boost/process/detail/traits/group.hpp at line 4, boost/process/detail/traits/wchar_t.hpp at line 4, boost/process/detail/windows/asio_fwd.hpp at line 4, boost/process/detail/windows/async_handler.hpp at line 4, boost/process/detail/windows/async_in.hpp at line 8, boost/process/detail/windows/async_out.hpp at line 8, boost/process/detail/windows/async_pipe.hpp at line 4, boost/process/detail/windows/basic_cmd.hpp at line 4, boost/process/detail/windows/basic_pipe.hpp at line 4, boost/process/detail/windows/child_handle.hpp at line 8, boost/process/detail/windows/close_in.hpp at line 8, boost/process/detail/windows/close_out.hpp at line 8, boost/process/detail/windows/cmd.hpp at line 4, boost/process/detail/windows/compare_handles.hpp at line 4, boost/process/detail/windows/env_init.hpp at line 4, boost/process/detail/windows/environment.hpp at line 4, boost/process/detail/windows/executor.hpp at line 9, boost/process/detail/windows/file_descriptor.hpp at line 4, boost/process/detail/windows/file_in.hpp at line 8, boost/process/detail/windows/file_out.hpp at line 8, boost/process/detail/windows/group_handle.hpp at line 4, boost/process/detail/windows/group_ref.hpp at line 4, boost/process/detail/windows/handler.hpp at line 4, boost/process/detail/windows/io_context_ref.hpp at line 4, boost/process/detail/windows/is_running.hpp at line 4, boost/process/detail/windows/job_workaround.hpp at line 4, boost/process/detail/windows/locale.hpp at line 5, boost/process/detail/windows/null_in.hpp at line 8, boost/process/detail/windows/null_out.hpp at line 8, boost/process/detail/windows/on_exit.hpp at line 4, boost/process/detail/windows/pipe_in.hpp at line 8, boost/process/detail/windows/pipe_out.hpp at line 9, boost/process/detail/windows/search_path.hpp at line 8, boost/process/detail/windows/shell_path.hpp at line 8, boost/process/detail/windows/show_window.hpp at line 9, boost/process/detail/windows/start_dir.hpp at line 8, boost/process/detail/windows/terminate.hpp at line 8, boost/process/detail/windows/wait_for_exit.hpp at line 9, boost/process/detail/windows/wait_group.hpp at line 4, boost/process/env.hpp at line 4, boost/process/environment.hpp at line 4, boost/process/error.hpp at line 9, boost/process/exception.hpp at line 4, boost/process/exe.hpp at line 9, boost/process/extend.hpp at line 4, boost/process/group.hpp at line 4, boost/process/io.hpp at line 4, boost/process/locale.hpp at line 4, boost/process/pipe.hpp at line 8, boost/process/posix.hpp at line 4, boost/process/search_path.hpp at line 8, boost/process/spawn.hpp at line 9, boost/process/start_dir.hpp at line 8, boost/process/system.hpp at line 9, boost/process/windows.hpp at line 4, boost/thread/with_lock_guard.hpp at line 5, boost/type_index.hpp at line 5, boost/type_index/ctti_type_index.hpp at line 6, boost/type_index/detail/compile_time_type_info.hpp at line 6, boost/type_index/detail/ctti_register_class.hpp at line 6, boost/type_index/detail/stl_register_class.hpp at line 6, boost/type_index/runtime_cast.hpp at line 6, boost/type_index/runtime_cast/boost_shared_ptr_cast.hpp at line 6, boost/type_index/runtime_cast/detail/runtime_cast_impl.hpp at line 6, boost/type_index/runtime_cast/pointer_cast.hpp at line 6, boost/type_index/runtime_cast/reference_cast.hpp at line 6, boost/type_index/runtime_cast/register_runtime_class.hpp at line 6, boost/type_index/runtime_cast/std_shared_ptr_cast.hpp at line 6, boost/type_index/stl_type_index.hpp at line 6, boost/type_index/type_index_facade.hpp at line 6, boost/typeof/encode_decode.hpp at line 4, boost/typeof/encode_decode_params.hpp at line 3, boost/typeof/integral_template_param.hpp at line 3, boost/typeof/modifiers.hpp at line 3, boost/typeof/register_functions_iterate.hpp at line 3, boost/typeof/template_encoding.hpp at line 4, boost/typeof/template_template_param.hpp at line 4, boost/typeof/type_encoding.hpp at line 3, boost/typeof/type_template_param.hpp at line 3, boost/typeof/typeof.hpp at line 3, boost/typeof/typeof_impl.hpp at line 4, boost/unordered/detail/fwd.hpp at line 4, boost/unordered/detail/implementation.hpp at line 5, boost/unordered/detail/map.hpp at line 4, boost/unordered/detail/set.hpp at line 4, boost/unordered/unordered_map.hpp at line 5, boost/unordered/unordered_map_fwd.hpp at line 4, boost/unordered/unordered_set.hpp at line 5, boost/unordered/unordered_set_fwd.hpp at line 4, boost/unordered_map.hpp at line 5, boost/unordered_set.hpp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/algorithm/minmax.hpp [3:4]
+ boost/algorithm/minmax_element.hpp [3:4]
+ boost/asio.hpp [7:8]
+ boost/asio/associated_allocator.hpp [7:8]
+ boost/asio/associated_executor.hpp [7:8]
+ boost/asio/async_result.hpp [7:8]
+ boost/asio/basic_datagram_socket.hpp [7:8]
+ boost/asio/basic_deadline_timer.hpp [7:8]
+ boost/asio/basic_io_object.hpp [7:8]
+ boost/asio/basic_raw_socket.hpp [7:8]
+ boost/asio/basic_seq_packet_socket.hpp [7:8]
+ boost/asio/basic_serial_port.hpp [8:9]
+ boost/asio/basic_signal_set.hpp [7:8]
+ boost/asio/basic_socket.hpp [7:8]
+ boost/asio/basic_socket_acceptor.hpp [7:8]
+ boost/asio/basic_socket_iostream.hpp [7:8]
+ boost/asio/basic_socket_streambuf.hpp [7:8]
+ boost/asio/basic_stream_socket.hpp [7:8]
+ boost/asio/basic_streambuf.hpp [7:8]
+ boost/asio/basic_streambuf_fwd.hpp [7:8]
+ boost/asio/basic_waitable_timer.hpp [7:8]
+ boost/asio/bind_executor.hpp [7:8]
+ boost/asio/buffer.hpp [7:8]
+ boost/asio/buffered_read_stream.hpp [7:8]
+ boost/asio/buffered_read_stream_fwd.hpp [7:8]
+ boost/asio/buffered_stream.hpp [7:8]
+ boost/asio/buffered_stream_fwd.hpp [7:8]
+ boost/asio/buffered_write_stream.hpp [7:8]
+ boost/asio/buffered_write_stream_fwd.hpp [7:8]
+ boost/asio/buffers_iterator.hpp [7:8]
+ boost/asio/completion_condition.hpp [7:8]
+ boost/asio/connect.hpp [7:8]
+ boost/asio/coroutine.hpp [7:8]
+ boost/asio/datagram_socket_service.hpp [7:8]
+ boost/asio/deadline_timer.hpp [7:8]
+ boost/asio/deadline_timer_service.hpp [7:8]
+ boost/asio/defer.hpp [7:8]
+ boost/asio/detail/array.hpp [7:8]
+ boost/asio/detail/array_fwd.hpp [7:8]
+ boost/asio/detail/assert.hpp [7:8]
+ boost/asio/detail/atomic_count.hpp [7:8]
+ boost/asio/detail/base_from_completion_cond.hpp [7:8]
+ boost/asio/detail/bind_handler.hpp [7:8]
+ boost/asio/detail/buffer_resize_guard.hpp [7:8]
+ boost/asio/detail/buffer_sequence_adapter.hpp [7:8]
+ boost/asio/detail/buffered_stream_storage.hpp [7:8]
+ boost/asio/detail/call_stack.hpp [7:8]
+ boost/asio/detail/chrono.hpp [7:8]
+ boost/asio/detail/chrono_time_traits.hpp [7:8]
+ boost/asio/detail/completion_handler.hpp [7:8]
+ boost/asio/detail/concurrency_hint.hpp [7:8]
+ boost/asio/detail/conditionally_enabled_event.hpp [7:8]
+ boost/asio/detail/conditionally_enabled_mutex.hpp [7:8]
+ boost/asio/detail/config.hpp [7:8]
+ boost/asio/detail/consuming_buffers.hpp [7:8]
+ boost/asio/detail/cstddef.hpp [7:8]
+ boost/asio/detail/cstdint.hpp [7:8]
+ boost/asio/detail/date_time_fwd.hpp [7:8]
+ boost/asio/detail/deadline_timer_service.hpp [7:8]
+ boost/asio/detail/dependent_type.hpp [7:8]
+ boost/asio/detail/descriptor_ops.hpp [7:8]
+ boost/asio/detail/descriptor_read_op.hpp [7:8]
+ boost/asio/detail/descriptor_write_op.hpp [7:8]
+ boost/asio/detail/dev_poll_reactor.hpp [7:8]
+ boost/asio/detail/epoll_reactor.hpp [7:8]
+ boost/asio/detail/event.hpp [7:8]
+ boost/asio/detail/eventfd_select_interrupter.hpp [8:9]
+ boost/asio/detail/executor_op.hpp [7:8]
+ boost/asio/detail/fd_set_adapter.hpp [7:8]
+ boost/asio/detail/fenced_block.hpp [7:8]
+ boost/asio/detail/functional.hpp [7:8]
+ boost/asio/detail/gcc_arm_fenced_block.hpp [7:8]
+ boost/asio/detail/gcc_hppa_fenced_block.hpp [7:8]
+ boost/asio/detail/gcc_sync_fenced_block.hpp [7:8]
+ boost/asio/detail/gcc_x86_fenced_block.hpp [7:8]
+ boost/asio/detail/global.hpp [7:8]
+ boost/asio/detail/handler_alloc_helpers.hpp [7:8]
+ boost/asio/detail/handler_cont_helpers.hpp [7:8]
+ boost/asio/detail/handler_invoke_helpers.hpp [7:8]
+ boost/asio/detail/handler_tracking.hpp [7:8]
+ boost/asio/detail/handler_type_requirements.hpp [7:8]
+ boost/asio/detail/handler_work.hpp [7:8]
+ boost/asio/detail/hash_map.hpp [7:8]
+ boost/asio/detail/impl/buffer_sequence_adapter.ipp [7:8]
+ boost/asio/detail/impl/descriptor_ops.ipp [7:8]
+ boost/asio/detail/impl/dev_poll_reactor.hpp [7:8]
+ boost/asio/detail/impl/dev_poll_reactor.ipp [7:8]
+ boost/asio/detail/impl/epoll_reactor.hpp [7:8]
+ boost/asio/detail/impl/epoll_reactor.ipp [7:8]
+ boost/asio/detail/impl/eventfd_select_interrupter.ipp [8:9]
+ boost/asio/detail/impl/handler_tracking.ipp [7:8]
+ boost/asio/detail/impl/kqueue_reactor.hpp [8:9]
+ boost/asio/detail/impl/kqueue_reactor.ipp [8:9]
+ boost/asio/detail/impl/null_event.ipp [7:8]
+ boost/asio/detail/impl/pipe_select_interrupter.ipp [7:8]
+ boost/asio/detail/impl/posix_event.ipp [7:8]
+ boost/asio/detail/impl/posix_mutex.ipp [7:8]
+ boost/asio/detail/impl/posix_thread.ipp [7:8]
+ boost/asio/detail/impl/posix_tss_ptr.ipp [7:8]
+ boost/asio/detail/impl/reactive_descriptor_service.ipp [7:8]
+ boost/asio/detail/impl/reactive_serial_port_service.ipp [8:9]
+ boost/asio/detail/impl/reactive_socket_service_base.ipp [7:8]
+ boost/asio/detail/impl/resolver_service_base.ipp [7:8]
+ boost/asio/detail/impl/scheduler.ipp [7:8]
+ boost/asio/detail/impl/select_reactor.hpp [7:8]
+ boost/asio/detail/impl/select_reactor.ipp [7:8]
+ boost/asio/detail/impl/service_registry.hpp [7:8]
+ boost/asio/detail/impl/service_registry.ipp [7:8]
+ boost/asio/detail/impl/signal_set_service.ipp [7:8]
+ boost/asio/detail/impl/socket_ops.ipp [7:8]
+ boost/asio/detail/impl/socket_select_interrupter.ipp [7:8]
+ boost/asio/detail/impl/strand_executor_service.hpp [7:8]
+ boost/asio/detail/impl/strand_executor_service.ipp [7:8]
+ boost/asio/detail/impl/strand_service.hpp [7:8]
+ boost/asio/detail/impl/strand_service.ipp [7:8]
+ boost/asio/detail/impl/throw_error.ipp [7:8]
+ boost/asio/detail/impl/timer_queue_ptime.ipp [7:8]
+ boost/asio/detail/impl/timer_queue_set.ipp [7:8]
+ boost/asio/detail/impl/win_event.ipp [7:8]
+ boost/asio/detail/impl/win_iocp_handle_service.ipp [8:9]
+ boost/asio/detail/impl/win_iocp_io_context.hpp [7:8]
+ boost/asio/detail/impl/win_iocp_io_context.ipp [7:8]
+ boost/asio/detail/impl/win_iocp_serial_port_service.ipp [8:9]
+ boost/asio/detail/impl/win_iocp_socket_service_base.ipp [7:8]
+ boost/asio/detail/impl/win_mutex.ipp [7:8]
+ boost/asio/detail/impl/win_object_handle_service.ipp [8:9]
+ boost/asio/detail/impl/win_static_mutex.ipp [7:8]
+ boost/asio/detail/impl/win_thread.ipp [7:8]
+ boost/asio/detail/impl/win_tss_ptr.ipp [7:8]
+ boost/asio/detail/impl/winrt_ssocket_service_base.ipp [7:8]
+ boost/asio/detail/impl/winrt_timer_scheduler.hpp [7:8]
+ boost/asio/detail/impl/winrt_timer_scheduler.ipp [7:8]
+ boost/asio/detail/impl/winsock_init.ipp [7:8]
+ boost/asio/detail/io_control.hpp [7:8]
+ boost/asio/detail/is_buffer_sequence.hpp [7:8]
+ boost/asio/detail/is_executor.hpp [7:8]
+ boost/asio/detail/keyword_tss_ptr.hpp [7:8]
+ boost/asio/detail/kqueue_reactor.hpp [8:9]
+ boost/asio/detail/limits.hpp [7:8]
+ boost/asio/detail/local_free_on_block_exit.hpp [7:8]
+ boost/asio/detail/macos_fenced_block.hpp [7:8]
+ boost/asio/detail/memory.hpp [7:8]
+ boost/asio/detail/mutex.hpp [7:8]
+ boost/asio/detail/noncopyable.hpp [7:8]
+ boost/asio/detail/null_event.hpp [7:8]
+ boost/asio/detail/null_fenced_block.hpp [7:8]
+ boost/asio/detail/null_global.hpp [7:8]
+ boost/asio/detail/null_mutex.hpp [7:8]
+ boost/asio/detail/null_reactor.hpp [7:8]
+ boost/asio/detail/null_signal_blocker.hpp [7:8]
+ boost/asio/detail/null_socket_service.hpp [7:8]
+ boost/asio/detail/null_static_mutex.hpp [7:8]
+ boost/asio/detail/null_thread.hpp [7:8]
+ boost/asio/detail/null_tss_ptr.hpp [7:8]
+ boost/asio/detail/object_pool.hpp [7:8]
+ boost/asio/detail/old_win_sdk_compat.hpp [7:8]
+ boost/asio/detail/op_queue.hpp [7:8]
+ boost/asio/detail/operation.hpp [7:8]
+ boost/asio/detail/pipe_select_interrupter.hpp [7:8]
+ boost/asio/detail/pop_options.hpp [7:8]
+ boost/asio/detail/posix_event.hpp [7:8]
+ boost/asio/detail/posix_fd_set_adapter.hpp [7:8]
+ boost/asio/detail/posix_global.hpp [7:8]
+ boost/asio/detail/posix_mutex.hpp [7:8]
+ boost/asio/detail/posix_signal_blocker.hpp [7:8]
+ boost/asio/detail/posix_static_mutex.hpp [7:8]
+ boost/asio/detail/posix_thread.hpp [7:8]
+ boost/asio/detail/posix_tss_ptr.hpp [7:8]
+ boost/asio/detail/push_options.hpp [7:8]
+ boost/asio/detail/reactive_descriptor_service.hpp [7:8]
+ boost/asio/detail/reactive_null_buffers_op.hpp [7:8]
+ boost/asio/detail/reactive_serial_port_service.hpp [8:9]
+ boost/asio/detail/reactive_socket_accept_op.hpp [7:8]
+ boost/asio/detail/reactive_socket_connect_op.hpp [7:8]
+ boost/asio/detail/reactive_socket_recv_op.hpp [7:8]
+ boost/asio/detail/reactive_socket_recvfrom_op.hpp [7:8]
+ boost/asio/detail/reactive_socket_recvmsg_op.hpp [7:8]
+ boost/asio/detail/reactive_socket_send_op.hpp [7:8]
+ boost/asio/detail/reactive_socket_sendto_op.hpp [7:8]
+ boost/asio/detail/reactive_socket_service.hpp [7:8]
+ boost/asio/detail/reactive_socket_service_base.hpp [7:8]
+ boost/asio/detail/reactive_wait_op.hpp [7:8]
+ boost/asio/detail/reactor.hpp [7:8]
+ boost/asio/detail/reactor_fwd.hpp [7:8]
+ boost/asio/detail/reactor_op.hpp [7:8]
+ boost/asio/detail/reactor_op_queue.hpp [7:8]
+ boost/asio/detail/recycling_allocator.hpp [7:8]
+ boost/asio/detail/regex_fwd.hpp [7:8]
+ boost/asio/detail/resolve_endpoint_op.hpp [7:8]
+ boost/asio/detail/resolve_op.hpp [7:8]
+ boost/asio/detail/resolve_query_op.hpp [7:8]
+ boost/asio/detail/resolver_service.hpp [7:8]
+ boost/asio/detail/resolver_service_base.hpp [7:8]
+ boost/asio/detail/scheduler.hpp [7:8]
+ boost/asio/detail/scheduler_operation.hpp [7:8]
+ boost/asio/detail/scheduler_thread_info.hpp [7:8]
+ boost/asio/detail/scoped_lock.hpp [7:8]
+ boost/asio/detail/scoped_ptr.hpp [7:8]
+ boost/asio/detail/select_interrupter.hpp [7:8]
+ boost/asio/detail/select_reactor.hpp [7:8]
+ boost/asio/detail/service_registry.hpp [7:8]
+ boost/asio/detail/signal_blocker.hpp [7:8]
+ boost/asio/detail/signal_handler.hpp [7:8]
+ boost/asio/detail/signal_init.hpp [7:8]
+ boost/asio/detail/signal_op.hpp [7:8]
+ boost/asio/detail/signal_set_service.hpp [7:8]
+ boost/asio/detail/socket_holder.hpp [7:8]
+ boost/asio/detail/socket_ops.hpp [7:8]
+ boost/asio/detail/socket_option.hpp [7:8]
+ boost/asio/detail/socket_select_interrupter.hpp [7:8]
+ boost/asio/detail/socket_types.hpp [7:8]
+ boost/asio/detail/solaris_fenced_block.hpp [7:8]
+ boost/asio/detail/static_mutex.hpp [7:8]
+ boost/asio/detail/std_event.hpp [7:8]
+ boost/asio/detail/std_fenced_block.hpp [7:8]
+ boost/asio/detail/std_global.hpp [7:8]
+ boost/asio/detail/std_mutex.hpp [7:8]
+ boost/asio/detail/std_static_mutex.hpp [7:8]
+ boost/asio/detail/std_thread.hpp [7:8]
+ boost/asio/detail/strand_executor_service.hpp [7:8]
+ boost/asio/detail/strand_service.hpp [7:8]
+ boost/asio/detail/string_view.hpp [7:8]
+ boost/asio/detail/thread.hpp [7:8]
+ boost/asio/detail/thread_context.hpp [7:8]
+ boost/asio/detail/thread_group.hpp [7:8]
+ boost/asio/detail/thread_info_base.hpp [7:8]
+ boost/asio/detail/throw_error.hpp [7:8]
+ boost/asio/detail/throw_exception.hpp [7:8]
+ boost/asio/detail/timer_queue.hpp [7:8]
+ boost/asio/detail/timer_queue_base.hpp [7:8]
+ boost/asio/detail/timer_queue_ptime.hpp [7:8]
+ boost/asio/detail/timer_queue_set.hpp [7:8]
+ boost/asio/detail/timer_scheduler.hpp [7:8]
+ boost/asio/detail/timer_scheduler_fwd.hpp [7:8]
+ boost/asio/detail/tss_ptr.hpp [7:8]
+ boost/asio/detail/type_traits.hpp [7:8]
+ boost/asio/detail/variadic_templates.hpp [7:8]
+ boost/asio/detail/wait_handler.hpp [7:8]
+ boost/asio/detail/wait_op.hpp [7:8]
+ boost/asio/detail/win_event.hpp [7:8]
+ boost/asio/detail/win_fd_set_adapter.hpp [7:8]
+ boost/asio/detail/win_fenced_block.hpp [7:8]
+ boost/asio/detail/win_global.hpp [7:8]
+ boost/asio/detail/win_iocp_handle_read_op.hpp [8:9]
+ boost/asio/detail/win_iocp_handle_service.hpp [8:9]
+ boost/asio/detail/win_iocp_handle_write_op.hpp [8:9]
+ boost/asio/detail/win_iocp_io_context.hpp [7:8]
+ boost/asio/detail/win_iocp_null_buffers_op.hpp [7:8]
+ boost/asio/detail/win_iocp_operation.hpp [7:8]
+ boost/asio/detail/win_iocp_overlapped_op.hpp [7:8]
+ boost/asio/detail/win_iocp_overlapped_ptr.hpp [7:8]
+ boost/asio/detail/win_iocp_serial_port_service.hpp [8:9]
+ boost/asio/detail/win_iocp_socket_accept_op.hpp [7:8]
+ boost/asio/detail/win_iocp_socket_connect_op.hpp [7:8]
+ boost/asio/detail/win_iocp_socket_recv_op.hpp [7:8]
+ boost/asio/detail/win_iocp_socket_recvfrom_op.hpp [7:8]
+ boost/asio/detail/win_iocp_socket_recvmsg_op.hpp [7:8]
+ boost/asio/detail/win_iocp_socket_send_op.hpp [7:8]
+ boost/asio/detail/win_iocp_socket_service.hpp [7:8]
+ boost/asio/detail/win_iocp_socket_service_base.hpp [7:8]
+ boost/asio/detail/win_iocp_thread_info.hpp [7:8]
+ boost/asio/detail/win_iocp_wait_op.hpp [7:8]
+ boost/asio/detail/win_mutex.hpp [7:8]
+ boost/asio/detail/win_object_handle_service.hpp [8:9]
+ boost/asio/detail/win_static_mutex.hpp [7:8]
+ boost/asio/detail/win_thread.hpp [7:8]
+ boost/asio/detail/win_tss_ptr.hpp [7:8]
+ boost/asio/detail/winapp_thread.hpp [7:8]
+ boost/asio/detail/wince_thread.hpp [7:8]
+ boost/asio/detail/winrt_async_manager.hpp [7:8]
+ boost/asio/detail/winrt_async_op.hpp [7:8]
+ boost/asio/detail/winrt_resolve_op.hpp [7:8]
+ boost/asio/detail/winrt_resolver_service.hpp [7:8]
+ boost/asio/detail/winrt_socket_connect_op.hpp [7:8]
+ boost/asio/detail/winrt_socket_recv_op.hpp [7:8]
+ boost/asio/detail/winrt_socket_send_op.hpp [7:8]
+ boost/asio/detail/winrt_ssocket_service.hpp [7:8]
+ boost/asio/detail/winrt_ssocket_service_base.hpp [7:8]
+ boost/asio/detail/winrt_timer_scheduler.hpp [7:8]
+ boost/asio/detail/winrt_utils.hpp [7:8]
+ boost/asio/detail/winsock_init.hpp [7:8]
+ boost/asio/detail/work_dispatcher.hpp [7:8]
+ boost/asio/detail/wrapped_handler.hpp [7:8]
+ boost/asio/dispatch.hpp [7:8]
+ boost/asio/error.hpp [7:8]
+ boost/asio/execution_context.hpp [7:8]
+ boost/asio/executor.hpp [7:8]
+ boost/asio/executor_work_guard.hpp [7:8]
+ boost/asio/experimental.hpp [7:8]
+ boost/asio/experimental/co_spawn.hpp [7:8]
+ boost/asio/experimental/detached.hpp [7:8]
+ boost/asio/experimental/impl/co_spawn.hpp [7:8]
+ boost/asio/experimental/impl/detached.hpp [7:8]
+ boost/asio/experimental/impl/redirect_error.hpp [7:8]
+ boost/asio/experimental/redirect_error.hpp [7:8]
+ boost/asio/generic/basic_endpoint.hpp [7:8]
+ boost/asio/generic/datagram_protocol.hpp [7:8]
+ boost/asio/generic/detail/endpoint.hpp [7:8]
+ boost/asio/generic/detail/impl/endpoint.ipp [7:8]
+ boost/asio/generic/raw_protocol.hpp [7:8]
+ boost/asio/generic/seq_packet_protocol.hpp [7:8]
+ boost/asio/generic/stream_protocol.hpp [7:8]
+ boost/asio/handler_alloc_hook.hpp [7:8]
+ boost/asio/handler_continuation_hook.hpp [7:8]
+ boost/asio/handler_invoke_hook.hpp [7:8]
+ boost/asio/handler_type.hpp [7:8]
+ boost/asio/high_resolution_timer.hpp [7:8]
+ boost/asio/impl/buffered_read_stream.hpp [7:8]
+ boost/asio/impl/buffered_write_stream.hpp [7:8]
+ boost/asio/impl/connect.hpp [7:8]
+ boost/asio/impl/defer.hpp [7:8]
+ boost/asio/impl/dispatch.hpp [7:8]
+ boost/asio/impl/error.ipp [7:8]
+ boost/asio/impl/execution_context.hpp [7:8]
+ boost/asio/impl/execution_context.ipp [7:8]
+ boost/asio/impl/executor.hpp [7:8]
+ boost/asio/impl/executor.ipp [7:8]
+ boost/asio/impl/handler_alloc_hook.ipp [7:8]
+ boost/asio/impl/io_context.hpp [7:8]
+ boost/asio/impl/io_context.ipp [7:8]
+ boost/asio/impl/post.hpp [7:8]
+ boost/asio/impl/read.hpp [7:8]
+ boost/asio/impl/read_at.hpp [7:8]
+ boost/asio/impl/read_until.hpp [7:8]
+ boost/asio/impl/serial_port_base.hpp [8:9]
+ boost/asio/impl/serial_port_base.ipp [8:9]
+ boost/asio/impl/spawn.hpp [7:8]
+ boost/asio/impl/src.cpp [7:8]
+ boost/asio/impl/src.hpp [7:8]
+ boost/asio/impl/system_context.hpp [7:8]
+ boost/asio/impl/system_context.ipp [7:8]
+ boost/asio/impl/system_executor.hpp [7:8]
+ boost/asio/impl/thread_pool.hpp [7:8]
+ boost/asio/impl/thread_pool.ipp [7:8]
+ boost/asio/impl/use_future.hpp [7:8]
+ boost/asio/impl/write.hpp [7:8]
+ boost/asio/impl/write_at.hpp [7:8]
+ boost/asio/io_context.hpp [7:8]
+ boost/asio/io_context_strand.hpp [7:8]
+ boost/asio/io_service.hpp [7:8]
+ boost/asio/io_service_strand.hpp [7:8]
+ boost/asio/ip/address.hpp [7:8]
+ boost/asio/ip/address_v4.hpp [7:8]
+ boost/asio/ip/address_v4_iterator.hpp [7:8]
+ boost/asio/ip/address_v4_range.hpp [7:8]
+ boost/asio/ip/address_v6.hpp [7:8]
+ boost/asio/ip/address_v6_iterator.hpp [8:9]
+ boost/asio/ip/address_v6_range.hpp [8:9]
+ boost/asio/ip/bad_address_cast.hpp [7:8]
+ boost/asio/ip/basic_endpoint.hpp [7:8]
+ boost/asio/ip/basic_resolver.hpp [7:8]
+ boost/asio/ip/basic_resolver_entry.hpp [7:8]
+ boost/asio/ip/basic_resolver_iterator.hpp [7:8]
+ boost/asio/ip/basic_resolver_query.hpp [7:8]
+ boost/asio/ip/basic_resolver_results.hpp [7:8]
+ boost/asio/ip/detail/endpoint.hpp [7:8]
+ boost/asio/ip/detail/impl/endpoint.ipp [7:8]
+ boost/asio/ip/detail/socket_option.hpp [7:8]
+ boost/asio/ip/host_name.hpp [7:8]
+ boost/asio/ip/icmp.hpp [7:8]
+ boost/asio/ip/impl/address.hpp [7:8]
+ boost/asio/ip/impl/address.ipp [7:8]
+ boost/asio/ip/impl/address_v4.hpp [7:8]
+ boost/asio/ip/impl/address_v4.ipp [7:8]
+ boost/asio/ip/impl/address_v6.hpp [7:8]
+ boost/asio/ip/impl/address_v6.ipp [7:8]
+ boost/asio/ip/impl/basic_endpoint.hpp [7:8]
+ boost/asio/ip/impl/host_name.ipp [7:8]
+ boost/asio/ip/impl/network_v4.hpp [8:9]
+ boost/asio/ip/impl/network_v4.ipp [8:9]
+ boost/asio/ip/impl/network_v6.hpp [7:8]
+ boost/asio/ip/impl/network_v6.ipp [8:9]
+ boost/asio/ip/multicast.hpp [7:8]
+ boost/asio/ip/network_v4.hpp [8:9]
+ boost/asio/ip/network_v6.hpp [8:9]
+ boost/asio/ip/resolver_base.hpp [7:8]
+ boost/asio/ip/resolver_query_base.hpp [7:8]
+ boost/asio/ip/resolver_service.hpp [7:8]
+ boost/asio/ip/tcp.hpp [7:8]
+ boost/asio/ip/udp.hpp [7:8]
+ boost/asio/ip/unicast.hpp [7:8]
+ boost/asio/ip/v6_only.hpp [7:8]
+ boost/asio/is_executor.hpp [7:8]
+ boost/asio/is_read_buffered.hpp [7:8]
+ boost/asio/is_write_buffered.hpp [7:8]
+ boost/asio/local/basic_endpoint.hpp [8:9]
+ boost/asio/local/connect_pair.hpp [7:8]
+ boost/asio/local/datagram_protocol.hpp [7:8]
+ boost/asio/local/detail/endpoint.hpp [8:9]
+ boost/asio/local/detail/impl/endpoint.ipp [8:9]
+ boost/asio/local/stream_protocol.hpp [7:8]
+ boost/asio/packaged_task.hpp [7:8]
+ boost/asio/placeholders.hpp [7:8]
+ boost/asio/posix/basic_descriptor.hpp [7:8]
+ boost/asio/posix/basic_stream_descriptor.hpp [7:8]
+ boost/asio/posix/descriptor.hpp [7:8]
+ boost/asio/posix/descriptor_base.hpp [7:8]
+ boost/asio/posix/stream_descriptor.hpp [7:8]
+ boost/asio/posix/stream_descriptor_service.hpp [7:8]
+ boost/asio/post.hpp [7:8]
+ boost/asio/raw_socket_service.hpp [7:8]
+ boost/asio/read.hpp [7:8]
+ boost/asio/read_at.hpp [7:8]
+ boost/asio/read_until.hpp [7:8]
+ boost/asio/seq_packet_socket_service.hpp [7:8]
+ boost/asio/serial_port.hpp [8:9]
+ boost/asio/serial_port_base.hpp [8:9]
+ boost/asio/serial_port_service.hpp [7:8]
+ boost/asio/signal_set.hpp [7:8]
+ boost/asio/signal_set_service.hpp [7:8]
+ boost/asio/socket_acceptor_service.hpp [7:8]
+ boost/asio/socket_base.hpp [7:8]
+ boost/asio/spawn.hpp [7:8]
+ boost/asio/ssl.hpp [7:8]
+ boost/asio/ssl/context.hpp [7:8]
+ boost/asio/ssl/context_base.hpp [7:8]
+ boost/asio/ssl/detail/buffered_handshake_op.hpp [7:8]
+ boost/asio/ssl/detail/engine.hpp [7:8]
+ boost/asio/ssl/detail/handshake_op.hpp [7:8]
+ boost/asio/ssl/detail/impl/engine.ipp [7:8]
+ boost/asio/ssl/detail/impl/openssl_init.ipp [8:9]
+ boost/asio/ssl/detail/io.hpp [7:8]
+ boost/asio/ssl/detail/openssl_init.hpp [7:8]
+ boost/asio/ssl/detail/openssl_types.hpp [7:8]
+ boost/asio/ssl/detail/password_callback.hpp [7:8]
+ boost/asio/ssl/detail/read_op.hpp [7:8]
+ boost/asio/ssl/detail/shutdown_op.hpp [7:8]
+ boost/asio/ssl/detail/stream_core.hpp [7:8]
+ boost/asio/ssl/detail/verify_callback.hpp [7:8]
+ boost/asio/ssl/detail/write_op.hpp [7:8]
+ boost/asio/ssl/error.hpp [7:8]
+ boost/asio/ssl/impl/context.hpp [8:9]
+ boost/asio/ssl/impl/context.ipp [8:9]
+ boost/asio/ssl/impl/error.ipp [7:8]
+ boost/asio/ssl/impl/rfc2818_verification.ipp [7:8]
+ boost/asio/ssl/impl/src.hpp [7:8]
+ boost/asio/ssl/rfc2818_verification.hpp [7:8]
+ boost/asio/ssl/stream.hpp [7:8]
+ boost/asio/ssl/stream_base.hpp [7:8]
+ boost/asio/ssl/verify_context.hpp [7:8]
+ boost/asio/ssl/verify_mode.hpp [7:8]
+ boost/asio/steady_timer.hpp [7:8]
+ boost/asio/strand.hpp [7:8]
+ boost/asio/stream_socket_service.hpp [7:8]
+ boost/asio/streambuf.hpp [7:8]
+ boost/asio/system_context.hpp [7:8]
+ boost/asio/system_executor.hpp [7:8]
+ boost/asio/system_timer.hpp [7:8]
+ boost/asio/thread_pool.hpp [7:8]
+ boost/asio/time_traits.hpp [7:8]
+ boost/asio/ts/buffer.hpp [7:8]
+ boost/asio/ts/executor.hpp [7:8]
+ boost/asio/ts/internet.hpp [7:8]
+ boost/asio/ts/io_context.hpp [7:8]
+ boost/asio/ts/net.hpp [7:8]
+ boost/asio/ts/netfwd.hpp [7:8]
+ boost/asio/ts/socket.hpp [7:8]
+ boost/asio/ts/timer.hpp [7:8]
+ boost/asio/unyield.hpp [7:8]
+ boost/asio/use_future.hpp [7:8]
+ boost/asio/uses_executor.hpp [7:8]
+ boost/asio/version.hpp [7:8]
+ boost/asio/wait_traits.hpp [7:8]
+ boost/asio/waitable_timer_service.hpp [7:8]
+ boost/asio/windows/basic_handle.hpp [7:8]
+ boost/asio/windows/basic_object_handle.hpp [8:9]
+ boost/asio/windows/basic_random_access_handle.hpp [7:8]
+ boost/asio/windows/basic_stream_handle.hpp [7:8]
+ boost/asio/windows/object_handle.hpp [8:9]
+ boost/asio/windows/object_handle_service.hpp [8:9]
+ boost/asio/windows/overlapped_handle.hpp [7:8]
+ boost/asio/windows/overlapped_ptr.hpp [7:8]
+ boost/asio/windows/random_access_handle.hpp [7:8]
+ boost/asio/windows/random_access_handle_service.hpp [7:8]
+ boost/asio/windows/stream_handle.hpp [7:8]
+ boost/asio/windows/stream_handle_service.hpp [7:8]
+ boost/asio/write.hpp [7:8]
+ boost/asio/write_at.hpp [7:8]
+ boost/asio/yield.hpp [7:8]
+ boost/beast.hpp [4:5]
+ boost/beast/core.hpp [4:5]
+ boost/beast/core/bind_handler.hpp [4:5]
+ boost/beast/core/buffered_read_stream.hpp [4:5]
+ boost/beast/core/buffers_adapter.hpp [4:5]
+ boost/beast/core/buffers_cat.hpp [4:5]
+ boost/beast/core/buffers_prefix.hpp [4:5]
+ boost/beast/core/buffers_suffix.hpp [4:5]
+ boost/beast/core/buffers_to_string.hpp [4:5]
+ boost/beast/core/detail/allocator.hpp [4:5]
+ boost/beast/core/detail/base64.hpp [4:5]
+ boost/beast/core/detail/bind_handler.hpp [4:5]
+ boost/beast/core/detail/buffers_ref.hpp [4:5]
+ boost/beast/core/detail/clamp.hpp [4:5]
+ boost/beast/core/detail/config.hpp [4:5]
+ boost/beast/core/detail/cpu_info.hpp [4:5]
+ boost/beast/core/detail/empty_base_optimization.hpp [4:5]
+ boost/beast/core/detail/integer_sequence.hpp [4:5]
+ boost/beast/core/detail/ostream.hpp [4:5]
+ boost/beast/core/detail/sha1.hpp [4:5]
+ boost/beast/core/detail/static_ostream.hpp [4:5]
+ boost/beast/core/detail/static_string.hpp [4:5]
+ boost/beast/core/detail/type_traits.hpp [4:5]
+ boost/beast/core/detail/variant.hpp [4:5]
+ boost/beast/core/detail/varint.hpp [4:5]
+ boost/beast/core/error.hpp [4:5]
+ boost/beast/core/file.hpp [4:5]
+ boost/beast/core/file_base.hpp [4:5]
+ boost/beast/core/file_posix.hpp [4:5]
+ boost/beast/core/file_stdio.hpp [4:5]
+ boost/beast/core/file_win32.hpp [4:5]
+ boost/beast/core/flat_buffer.hpp [4:5]
+ boost/beast/core/flat_static_buffer.hpp [4:5]
+ boost/beast/core/handler_ptr.hpp [4:5]
+ boost/beast/core/impl/buffered_read_stream.ipp [4:5]
+ boost/beast/core/impl/buffers_adapter.ipp [4:5]
+ boost/beast/core/impl/buffers_cat.ipp [4:5]
+ boost/beast/core/impl/buffers_prefix.ipp [4:5]
+ boost/beast/core/impl/buffers_suffix.ipp [4:5]
+ boost/beast/core/impl/file_posix.ipp [4:5]
+ boost/beast/core/impl/file_stdio.ipp [4:5]
+ boost/beast/core/impl/file_win32.ipp [4:5]
+ boost/beast/core/impl/flat_buffer.ipp [4:5]
+ boost/beast/core/impl/flat_static_buffer.ipp [4:5]
+ boost/beast/core/impl/handler_ptr.ipp [4:5]
+ boost/beast/core/impl/multi_buffer.ipp [4:5]
+ boost/beast/core/impl/read_size.ipp [4:5]
+ boost/beast/core/impl/static_buffer.ipp [4:5]
+ boost/beast/core/impl/static_string.ipp [4:5]
+ boost/beast/core/impl/string_param.ipp [4:5]
+ boost/beast/core/multi_buffer.hpp [4:5]
+ boost/beast/core/ostream.hpp [4:5]
+ boost/beast/core/read_size.hpp [4:5]
+ boost/beast/core/span.hpp [4:5]
+ boost/beast/core/static_buffer.hpp [4:5]
+ boost/beast/core/static_string.hpp [4:5]
+ boost/beast/core/string.hpp [4:5]
+ boost/beast/core/string_param.hpp [4:5]
+ boost/beast/core/type_traits.hpp [4:5]
+ boost/beast/http.hpp [4:5]
+ boost/beast/http/basic_dynamic_body.hpp [4:5]
+ boost/beast/http/basic_file_body.hpp [4:5]
+ boost/beast/http/basic_parser.hpp [4:5]
+ boost/beast/http/buffer_body.hpp [4:5]
+ boost/beast/http/chunk_encode.hpp [4:5]
+ boost/beast/http/detail/basic_parsed_list.hpp [4:5]
+ boost/beast/http/detail/basic_parser.hpp [4:5]
+ boost/beast/http/detail/chunk_encode.hpp [4:5]
+ boost/beast/http/detail/rfc7230.hpp [4:5]
+ boost/beast/http/detail/type_traits.hpp [4:5]
+ boost/beast/http/dynamic_body.hpp [4:5]
+ boost/beast/http/empty_body.hpp [4:5]
+ boost/beast/http/error.hpp [4:5]
+ boost/beast/http/field.hpp [4:5]
+ boost/beast/http/fields.hpp [4:5]
+ boost/beast/http/file_body.hpp [4:5]
+ boost/beast/http/impl/basic_parser.ipp [4:5]
+ boost/beast/http/impl/chunk_encode.ipp [4:5]
+ boost/beast/http/impl/error.ipp [4:5]
+ boost/beast/http/impl/field.ipp [4:5]
+ boost/beast/http/impl/fields.ipp [4:5]
+ boost/beast/http/impl/file_body_win32.ipp [4:5]
+ boost/beast/http/impl/message.ipp [4:5]
+ boost/beast/http/impl/parser.ipp [4:5]
+ boost/beast/http/impl/read.ipp [4:5]
+ boost/beast/http/impl/rfc7230.ipp [4:5]
+ boost/beast/http/impl/serializer.ipp [4:5]
+ boost/beast/http/impl/status.ipp [4:5]
+ boost/beast/http/impl/verb.ipp [4:5]
+ boost/beast/http/impl/write.ipp [4:5]
+ boost/beast/http/message.hpp [4:5]
+ boost/beast/http/parser.hpp [4:5]
+ boost/beast/http/read.hpp [4:5]
+ boost/beast/http/rfc7230.hpp [4:5]
+ boost/beast/http/serializer.hpp [4:5]
+ boost/beast/http/span_body.hpp [4:5]
+ boost/beast/http/status.hpp [4:5]
+ boost/beast/http/string_body.hpp [4:5]
+ boost/beast/http/type_traits.hpp [4:5]
+ boost/beast/http/vector_body.hpp [4:5]
+ boost/beast/http/verb.hpp [4:5]
+ boost/beast/http/write.hpp [4:5]
+ boost/beast/version.hpp [4:5]
+ boost/beast/websocket.hpp [4:5]
+ boost/beast/websocket/detail/error.hpp [4:5]
+ boost/beast/websocket/detail/frame.hpp [4:5]
+ boost/beast/websocket/detail/hybi13.hpp [4:5]
+ boost/beast/websocket/detail/mask.hpp [4:5]
+ boost/beast/websocket/detail/pausation.hpp [4:5]
+ boost/beast/websocket/detail/pmd_extension.hpp [4:5]
+ boost/beast/websocket/detail/stream_base.hpp [4:5]
+ boost/beast/websocket/detail/type_traits.hpp [4:5]
+ boost/beast/websocket/detail/utf8_checker.hpp [4:5]
+ boost/beast/websocket/error.hpp [4:5]
+ boost/beast/websocket/impl/accept.ipp [4:5]
+ boost/beast/websocket/impl/close.ipp [4:5]
+ boost/beast/websocket/impl/error.ipp [4:5]
+ boost/beast/websocket/impl/handshake.ipp [4:5]
+ boost/beast/websocket/impl/ping.ipp [4:5]
+ boost/beast/websocket/impl/read.ipp [4:5]
+ boost/beast/websocket/impl/rfc6455.ipp [4:5]
+ boost/beast/websocket/impl/ssl.ipp [4:5]
+ boost/beast/websocket/impl/stream.ipp [4:5]
+ boost/beast/websocket/impl/teardown.ipp [4:5]
+ boost/beast/websocket/impl/write.ipp [4:5]
+ boost/beast/websocket/option.hpp [4:5]
+ boost/beast/websocket/rfc6455.hpp [4:5]
+ boost/beast/websocket/role.hpp [4:5]
+ boost/beast/websocket/ssl.hpp [4:5]
+ boost/beast/websocket/stream.hpp [4:5]
+ boost/beast/websocket/stream_fwd.hpp [4:5]
+ boost/beast/websocket/teardown.hpp [4:5]
+ boost/beast/zlib.hpp [4:5]
+ boost/beast/zlib/deflate_stream.hpp [4:5]
+ boost/beast/zlib/detail/bitstream.hpp [4:5]
+ boost/beast/zlib/detail/deflate_stream.hpp [4:5]
+ boost/beast/zlib/detail/inflate_stream.hpp [4:5]
+ boost/beast/zlib/detail/ranges.hpp [4:5]
+ boost/beast/zlib/detail/window.hpp [4:5]
+ boost/beast/zlib/error.hpp [4:5]
+ boost/beast/zlib/impl/error.ipp [4:5]
+ boost/beast/zlib/inflate_stream.hpp [4:5]
+ boost/beast/zlib/zlib.hpp [4:5]
+ boost/container_hash/detail/float_functions.hpp [3:4]
+ boost/container_hash/detail/hash_float.hpp [3:4]
+ boost/container_hash/detail/limits.hpp [3:4]
+ boost/container_hash/extensions.hpp [3:4]
+ boost/container_hash/hash.hpp [3:4]
+ boost/container_hash/hash_fwd.hpp [3:4]
+ boost/detail/container_fwd.hpp [3:4]
+ boost/functional/hash.hpp [3:4]
+ boost/functional/hash/extensions.hpp [3:4]
+ boost/functional/hash/hash.hpp [3:4]
+ boost/functional/hash/hash_fwd.hpp [3:4]
+ boost/functional/hash_fwd.hpp [3:4]
+ boost/process.hpp [9:10]
+ boost/process/args.hpp [8:9]
+ boost/process/async.hpp [3:4]
+ boost/process/async_pipe.hpp [7:8]
+ boost/process/async_system.hpp [8:9]
+ boost/process/child.hpp [8:9]
+ boost/process/cmd.hpp [8:9]
+ boost/process/detail/basic_cmd.hpp [3:4]
+ boost/process/detail/child_decl.hpp [8:9]
+ boost/process/detail/config.hpp [8:9]
+ boost/process/detail/execute_impl.hpp [8:9]
+ boost/process/detail/handler.hpp [3:4]
+ boost/process/detail/handler_base.hpp [8:9]
+ boost/process/detail/on_exit.hpp [3:4]
+ boost/process/detail/posix/asio_fwd.hpp [3:4]
+ boost/process/detail/posix/async_handler.hpp [3:4]
+ boost/process/detail/posix/async_in.hpp [7:8]
+ boost/process/detail/posix/async_out.hpp [7:8]
+ boost/process/detail/posix/async_pipe.hpp [3:4]
+ boost/process/detail/posix/basic_cmd.hpp [3:4]
+ boost/process/detail/posix/basic_pipe.hpp [7:8]
+ boost/process/detail/posix/child_handle.hpp [7:8]
+ boost/process/detail/posix/close_in.hpp [7:8]
+ boost/process/detail/posix/close_out.hpp [7:8]
+ boost/process/detail/posix/cmd.hpp [3:4]
+ boost/process/detail/posix/compare_handles.hpp [3:4]
+ boost/process/detail/posix/env_init.hpp [3:4]
+ boost/process/detail/posix/environment.hpp [3:4]
+ boost/process/detail/posix/exe.hpp [3:4]
+ boost/process/detail/posix/executor.hpp [7:8]
+ boost/process/detail/posix/fd.hpp [7:8]
+ boost/process/detail/posix/file_descriptor.hpp [3:4]
+ boost/process/detail/posix/file_in.hpp [7:8]
+ boost/process/detail/posix/file_out.hpp [8:9]
+ boost/process/detail/posix/group_handle.hpp [3:4]
+ boost/process/detail/posix/group_ref.hpp [3:4]
+ boost/process/detail/posix/handler.hpp [3:4]
+ boost/process/detail/posix/io_context_ref.hpp [3:4]
+ boost/process/detail/posix/is_running.hpp [3:4]
+ boost/process/detail/posix/null_in.hpp [7:8]
+ boost/process/detail/posix/null_out.hpp [8:9]
+ boost/process/detail/posix/on_exit.hpp [3:4]
+ boost/process/detail/posix/pipe_in.hpp [7:8]
+ boost/process/detail/posix/pipe_out.hpp [8:9]
+ boost/process/detail/posix/search_path.hpp [7:8]
+ boost/process/detail/posix/shell_path.hpp [7:8]
+ boost/process/detail/posix/sigchld_service.hpp [3:4]
+ boost/process/detail/posix/signal.hpp [8:9]
+ boost/process/detail/posix/start_dir.hpp [7:8]
+ boost/process/detail/posix/terminate.hpp [7:8]
+ boost/process/detail/posix/wait_for_exit.hpp [7:8]
+ boost/process/detail/posix/wait_group.hpp [7:8]
+ boost/process/detail/throw_on_error.hpp [8:9]
+ boost/process/detail/traits.hpp [3:4]
+ boost/process/detail/traits/async.hpp [3:4]
+ boost/process/detail/traits/cmd_or_exe.hpp [3:4]
+ boost/process/detail/traits/decl.hpp [3:4]
+ boost/process/detail/traits/env.hpp [3:4]
+ boost/process/detail/traits/error.hpp [3:4]
+ boost/process/detail/traits/group.hpp [3:4]
+ boost/process/detail/traits/wchar_t.hpp [3:4]
+ boost/process/detail/windows/asio_fwd.hpp [3:4]
+ boost/process/detail/windows/async_handler.hpp [3:4]
+ boost/process/detail/windows/async_in.hpp [7:8]
+ boost/process/detail/windows/async_out.hpp [7:8]
+ boost/process/detail/windows/async_pipe.hpp [3:4]
+ boost/process/detail/windows/basic_cmd.hpp [3:4]
+ boost/process/detail/windows/basic_pipe.hpp [3:4]
+ boost/process/detail/windows/child_handle.hpp [7:8]
+ boost/process/detail/windows/close_in.hpp [7:8]
+ boost/process/detail/windows/close_out.hpp [7:8]
+ boost/process/detail/windows/cmd.hpp [3:4]
+ boost/process/detail/windows/compare_handles.hpp [3:4]
+ boost/process/detail/windows/env_init.hpp [3:4]
+ boost/process/detail/windows/environment.hpp [3:4]
+ boost/process/detail/windows/executor.hpp [8:9]
+ boost/process/detail/windows/file_descriptor.hpp [3:4]
+ boost/process/detail/windows/file_in.hpp [7:8]
+ boost/process/detail/windows/file_out.hpp [7:8]
+ boost/process/detail/windows/group_handle.hpp [3:4]
+ boost/process/detail/windows/group_ref.hpp [3:4]
+ boost/process/detail/windows/handler.hpp [3:4]
+ boost/process/detail/windows/io_context_ref.hpp [3:4]
+ boost/process/detail/windows/is_running.hpp [3:4]
+ boost/process/detail/windows/job_workaround.hpp [3:4]
+ boost/process/detail/windows/locale.hpp [4:5]
+ boost/process/detail/windows/null_in.hpp [7:8]
+ boost/process/detail/windows/null_out.hpp [7:8]
+ boost/process/detail/windows/on_exit.hpp [3:4]
+ boost/process/detail/windows/pipe_in.hpp [7:8]
+ boost/process/detail/windows/pipe_out.hpp [8:9]
+ boost/process/detail/windows/search_path.hpp [7:8]
+ boost/process/detail/windows/shell_path.hpp [7:8]
+ boost/process/detail/windows/show_window.hpp [8:9]
+ boost/process/detail/windows/start_dir.hpp [7:8]
+ boost/process/detail/windows/terminate.hpp [7:8]
+ boost/process/detail/windows/wait_for_exit.hpp [8:9]
+ boost/process/detail/windows/wait_group.hpp [3:4]
+ boost/process/env.hpp [3:4]
+ boost/process/environment.hpp [3:4]
+ boost/process/error.hpp [8:9]
+ boost/process/exception.hpp [3:4]
+ boost/process/exe.hpp [8:9]
+ boost/process/extend.hpp [3:4]
+ boost/process/group.hpp [3:4]
+ boost/process/io.hpp [3:4]
+ boost/process/locale.hpp [3:4]
+ boost/process/pipe.hpp [7:8]
+ boost/process/posix.hpp [3:4]
+ boost/process/search_path.hpp [7:8]
+ boost/process/spawn.hpp [8:9]
+ boost/process/start_dir.hpp [7:8]
+ boost/process/system.hpp [8:9]
+ boost/process/windows.hpp [3:4]
+ boost/thread/with_lock_guard.hpp [4:5]
+ boost/type_index.hpp [4:5]
+ boost/type_index/ctti_type_index.hpp [5:6]
+ boost/type_index/detail/compile_time_type_info.hpp [5:6]
+ boost/type_index/detail/ctti_register_class.hpp [5:6]
+ boost/type_index/detail/stl_register_class.hpp [5:6]
+ boost/type_index/runtime_cast.hpp [5:6]
+ boost/type_index/runtime_cast/boost_shared_ptr_cast.hpp [5:6]
+ boost/type_index/runtime_cast/detail/runtime_cast_impl.hpp [5:6]
+ boost/type_index/runtime_cast/pointer_cast.hpp [5:6]
+ boost/type_index/runtime_cast/reference_cast.hpp [5:6]
+ boost/type_index/runtime_cast/register_runtime_class.hpp [5:6]
+ boost/type_index/runtime_cast/std_shared_ptr_cast.hpp [5:6]
+ boost/type_index/stl_type_index.hpp [5:6]
+ boost/type_index/type_index_facade.hpp [5:6]
+ boost/typeof/encode_decode.hpp [3:4]
+ boost/typeof/encode_decode_params.hpp [2:3]
+ boost/typeof/integral_template_param.hpp [2:3]
+ boost/typeof/modifiers.hpp [2:3]
+ boost/typeof/register_functions_iterate.hpp [2:3]
+ boost/typeof/template_encoding.hpp [3:4]
+ boost/typeof/template_template_param.hpp [3:4]
+ boost/typeof/type_encoding.hpp [2:3]
+ boost/typeof/type_template_param.hpp [2:3]
+ boost/typeof/typeof.hpp [2:3]
+ boost/typeof/typeof_impl.hpp [3:4]
+ boost/unordered/detail/fwd.hpp [3:4]
+ boost/unordered/detail/implementation.hpp [4:5]
+ boost/unordered/detail/map.hpp [3:4]
+ boost/unordered/detail/set.hpp [3:4]
+ boost/unordered/unordered_map.hpp [4:5]
+ boost/unordered/unordered_map_fwd.hpp [3:4]
+ boost/unordered/unordered_set.hpp [4:5]
+ boost/unordered/unordered_set_fwd.hpp [3:4]
+ boost/unordered_map.hpp [4:5]
+ boost/unordered_set.hpp [4:5]
+
+KEEP BSL-1.0 1bc67f06e2f0ef648be482cbd0f129ee
+BELONGS ya.make
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE10.txt or copy at http://www.boost.org/LICENSE10.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 85.71
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/algorithm/cxx14/mismatch.hpp [4:5]
+ boost/algorithm/cxx17/exclusive_scan.hpp [4:5]
+ boost/algorithm/cxx17/for_each_n.hpp [4:5]
+ boost/algorithm/cxx17/inclusive_scan.hpp [4:5]
+ boost/algorithm/cxx17/reduce.hpp [4:5]
+ boost/algorithm/cxx17/transform_exclusive_scan.hpp [4:5]
+ boost/algorithm/cxx17/transform_inclusive_scan.hpp [4:5]
+ boost/algorithm/cxx17/transform_reduce.hpp [4:5]
+
+KEEP BSL-1.0 1d7cd1eda70644f6f1ed6eac7bbf2c13
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/concepts.hpp at line 5, boost/range/detail/misc_concept.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/concepts.hpp [3:6]
+ boost/range/detail/misc_concept.hpp [3:6]
+
+KEEP BSL-1.0 1e1b35c3ae13c65f63b2c7467cce8a87
+BELONGS libs/filesystem/ya.make libs/program_options/ya.make libs/serialization/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/dll.hpp at line 5, boost/dll/alias.hpp at line 5, boost/dll/detail/aggressive_ptr_cast.hpp at line 5, boost/dll/detail/ctor_dtor.hpp at line 4, boost/dll/detail/demangling/itanium.hpp at line 4, boost/dll/detail/demangling/mangled_storage_base.hpp at line 4, boost/dll/detail/demangling/msvc.hpp at line 4, boost/dll/detail/elf_info.hpp at line 5, boost/dll/detail/get_mem_fn_type.hpp at line 4, boost/dll/detail/import_mangled_helpers.hpp at line 4, boost/dll/detail/macho_info.hpp at line 5, boost/dll/detail/pe_info.hpp at line 5, boost/dll/detail/posix/path_from_handle.hpp at line 4, boost/dll/detail/posix/program_location_impl.hpp at line 5, boost/dll/detail/posix/shared_library_impl.hpp at line 5, boost/dll/detail/system_error.hpp at line 4, boost/dll/detail/type_info.hpp at line 4, boost/dll/detail/windows/path_from_handle.hpp at line 5, boost/dll/detail/windows/shared_library_impl.hpp at line 5, boost/dll/detail/x_info_interface.hpp at line 5, boost/dll/import.hpp at line 5, boost/dll/import_class.hpp at line 4, boost/dll/import_mangled.hpp at line 4, boost/dll/library_info.hpp at line 5, boost/dll/runtime_symbol_info.hpp at line 5, boost/dll/shared_library.hpp at line 5, boost/dll/shared_library_load_mode.hpp at line 5, boost/dll/smart_library.hpp at line 4, boost/math/special_functions/detail/fp_traits.hpp at line 9, boost/math/special_functions/nonfinite_num_facets.hpp at line 9, boost/program_options/cmdline.hpp at line 3, boost/program_options/detail/cmdline.hpp at line 3, boost/program_options/detail/config_file.hpp at line 3, boost/program_options/detail/convert.hpp at line 3, boost/program_options/detail/parsers.hpp at line 3, boost/program_options/detail/value_semantic.hpp at line 3, boost/program_options/environment_iterator.hpp at line 3, boost/program_options/eof_iterator.hpp at line 3, boost/program_options/errors.hpp at line 3, boost/program_options/option.hpp at line 3, boost/program_options/options_description.hpp at line 4, boost/program_options/parsers.hpp at line 3, boost/program_options/positional_options.hpp at line 3, boost/program_options/value_semantic.hpp at line 3, boost/program_options/variables_map.hpp at line 3, boost/program_options/version.hpp at line 3, boost/spirit/home/support/detail/math/detail/fp_traits.hpp at line 9, boost/spirit/home/support/detail/math/fpclassify.hpp at line 9, boost/spirit/home/support/detail/math/signbit.hpp at line 9, boost/stacktrace/detail/void_ptr_cast.hpp at line 5, libs/filesystem/src/utf8_codecvt_facet.cpp at line 3, libs/program_options/src/cmdline.cpp at line 3, libs/program_options/src/config_file.cpp at line 3, libs/program_options/src/convert.cpp at line 3, libs/program_options/src/options_description.cpp at line 4, libs/program_options/src/parsers.cpp at line 3, libs/program_options/src/positional_options.cpp at line 3, libs/program_options/src/split.cpp at line 3, libs/program_options/src/utf8_codecvt_facet.cpp at line 3, libs/program_options/src/value_semantic.cpp at line 3, libs/program_options/src/variables_map.cpp at line 3, libs/program_options/src/winmain.cpp at line 3, libs/serialization/src/utf8_codecvt_facet.cpp at line 3
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt
+ // or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/dll.hpp [4:6]
+ boost/dll/alias.hpp [4:6]
+ boost/dll/detail/aggressive_ptr_cast.hpp [4:6]
+ boost/dll/detail/ctor_dtor.hpp [3:5]
+ boost/dll/detail/demangling/itanium.hpp [3:5]
+ boost/dll/detail/demangling/mangled_storage_base.hpp [3:5]
+ boost/dll/detail/demangling/msvc.hpp [3:5]
+ boost/dll/detail/elf_info.hpp [4:6]
+ boost/dll/detail/get_mem_fn_type.hpp [3:5]
+ boost/dll/detail/import_mangled_helpers.hpp [3:5]
+ boost/dll/detail/macho_info.hpp [4:6]
+ boost/dll/detail/pe_info.hpp [4:6]
+ boost/dll/detail/posix/path_from_handle.hpp [3:5]
+ boost/dll/detail/posix/program_location_impl.hpp [4:6]
+ boost/dll/detail/posix/shared_library_impl.hpp [4:6]
+ boost/dll/detail/system_error.hpp [3:5]
+ boost/dll/detail/type_info.hpp [3:5]
+ boost/dll/detail/windows/path_from_handle.hpp [4:6]
+ boost/dll/detail/windows/shared_library_impl.hpp [4:6]
+ boost/dll/detail/x_info_interface.hpp [4:6]
+ boost/dll/import.hpp [4:6]
+ boost/dll/import_class.hpp [3:5]
+ boost/dll/import_mangled.hpp [3:5]
+ boost/dll/library_info.hpp [4:6]
+ boost/dll/runtime_symbol_info.hpp [4:6]
+ boost/dll/shared_library.hpp [4:6]
+ boost/dll/shared_library_load_mode.hpp [4:6]
+ boost/dll/smart_library.hpp [3:5]
+ boost/math/special_functions/detail/fp_traits.hpp [8:10]
+ boost/math/special_functions/nonfinite_num_facets.hpp [8:10]
+ boost/program_options/cmdline.hpp [2:4]
+ boost/program_options/detail/cmdline.hpp [2:4]
+ boost/program_options/detail/config_file.hpp [2:4]
+ boost/program_options/detail/convert.hpp [2:4]
+ boost/program_options/detail/parsers.hpp [2:4]
+ boost/program_options/detail/value_semantic.hpp [2:4]
+ boost/program_options/environment_iterator.hpp [2:4]
+ boost/program_options/eof_iterator.hpp [2:4]
+ boost/program_options/errors.hpp [2:4]
+ boost/program_options/option.hpp [2:4]
+ boost/program_options/options_description.hpp [3:5]
+ boost/program_options/parsers.hpp [2:4]
+ boost/program_options/positional_options.hpp [2:4]
+ boost/program_options/value_semantic.hpp [2:4]
+ boost/program_options/variables_map.hpp [2:4]
+ boost/program_options/version.hpp [2:4]
+ boost/spirit/home/support/detail/math/detail/fp_traits.hpp [8:10]
+ boost/spirit/home/support/detail/math/fpclassify.hpp [8:10]
+ boost/spirit/home/support/detail/math/signbit.hpp [8:10]
+ boost/stacktrace/detail/void_ptr_cast.hpp [4:6]
+ libs/filesystem/src/utf8_codecvt_facet.cpp [2:4]
+ libs/program_options/src/cmdline.cpp [2:4]
+ libs/program_options/src/config_file.cpp [2:4]
+ libs/program_options/src/convert.cpp [2:4]
+ libs/program_options/src/options_description.cpp [3:5]
+ libs/program_options/src/parsers.cpp [2:4]
+ libs/program_options/src/positional_options.cpp [2:4]
+ libs/program_options/src/split.cpp [2:4]
+ libs/program_options/src/utf8_codecvt_facet.cpp [2:4]
+ libs/program_options/src/value_semantic.cpp [2:4]
+ libs/program_options/src/variables_map.cpp [2:4]
+ libs/program_options/src/winmain.cpp [2:4]
+ libs/serialization/src/utf8_codecvt_facet.cpp [2:4]
+
+KEEP BSL-1.0 1e28520c071df585290674c85c8738dc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp at line 11, boost/numeric/odeint/external/mtl4/mtl4_resize.hpp at line 11
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or
+ copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp [10:12]
+ boost/numeric/odeint/external/mtl4/mtl4_resize.hpp [10:12]
+
+KEEP BSL-1.0 1ec9e97d434c804aa0e6b4b93376301c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/contract.hpp at line 7, boost/contract/assert.hpp at line 7, boost/contract/base_types.hpp at line 7, boost/contract/call_if.hpp at line 7, boost/contract/check.hpp at line 7, boost/contract/constructor.hpp at line 7, boost/contract/core/access.hpp at line 7, boost/contract/core/check_macro.hpp at line 7, boost/contract/core/config.hpp at line 7, boost/contract/core/constructor_precondition.hpp at line 7, boost/contract/core/exception.hpp at line 7, boost/contract/core/specify.hpp at line 7, boost/contract/core/virtual.hpp at line 7, boost/contract/destructor.hpp at line 7, boost/contract/detail/assert.hpp at line 7, boost/contract/detail/auto_ptr.hpp at line 7, boost/contract/detail/check.hpp at line 7, boost/contract/detail/checking.hpp at line 7, boost/contract/detail/condition/cond_base.hpp at line 7, boost/contract/detail/condition/cond_inv.hpp at line 7, boost/contract/detail/condition/cond_post.hpp at line 7, boost/contract/detail/condition/cond_subcontracting.hpp at line 7, boost/contract/detail/config.hpp at line 7, boost/contract/detail/debug.hpp at line 7, boost/contract/detail/decl.hpp at line 7, boost/contract/detail/declspec.hpp at line 7, boost/contract/detail/inlined.hpp at line 7, boost/contract/detail/inlined/core/exception.hpp at line 7, boost/contract/detail/inlined/detail/checking.hpp at line 7, boost/contract/detail/inlined/old.hpp at line 7, boost/contract/detail/name.hpp at line 7, boost/contract/detail/none.hpp at line 7, boost/contract/detail/noop.hpp at line 7, boost/contract/detail/operation/constructor.hpp at line 7, boost/contract/detail/operation/destructor.hpp at line 7, boost/contract/detail/operation/function.hpp at line 7, boost/contract/detail/operation/public_function.hpp at line 7, boost/contract/detail/operation/static_public_function.hpp at line 7, boost/contract/detail/operator_safe_bool.hpp at line 7, boost/contract/detail/preprocessor/keyword/private.hpp at line 7, boost/contract/detail/preprocessor/keyword/protected.hpp at line 7, boost/contract/detail/preprocessor/keyword/public.hpp at line 7, boost/contract/detail/preprocessor/keyword/utility/is.hpp at line 7, boost/contract/detail/preprocessor/keyword/virtual.hpp at line 7, boost/contract/detail/static_local_var.hpp at line 7, boost/contract/detail/tvariadic.hpp at line 7, boost/contract/detail/type_traits/member_function_types.hpp at line 7, boost/contract/detail/type_traits/mirror.hpp at line 7, boost/contract/detail/type_traits/optional.hpp at line 7, boost/contract/function.hpp at line 7, boost/contract/old.hpp at line 7, boost/contract/override.hpp at line 7, boost/contract/public_function.hpp at line 7, boost/contract_macro.hpp at line 7
+ License text:
+ // Distributed under the Boost Software License, Version 1.0 (see accompanying
+ // file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/contract.hpp [6:7]
+ boost/contract/assert.hpp [6:7]
+ boost/contract/base_types.hpp [6:7]
+ boost/contract/call_if.hpp [6:7]
+ boost/contract/check.hpp [6:7]
+ boost/contract/constructor.hpp [6:7]
+ boost/contract/core/access.hpp [6:7]
+ boost/contract/core/check_macro.hpp [6:7]
+ boost/contract/core/config.hpp [6:7]
+ boost/contract/core/constructor_precondition.hpp [6:7]
+ boost/contract/core/exception.hpp [6:7]
+ boost/contract/core/specify.hpp [6:7]
+ boost/contract/core/virtual.hpp [6:7]
+ boost/contract/destructor.hpp [6:7]
+ boost/contract/detail/assert.hpp [6:7]
+ boost/contract/detail/auto_ptr.hpp [6:7]
+ boost/contract/detail/check.hpp [6:7]
+ boost/contract/detail/checking.hpp [6:7]
+ boost/contract/detail/condition/cond_base.hpp [6:7]
+ boost/contract/detail/condition/cond_inv.hpp [6:7]
+ boost/contract/detail/condition/cond_post.hpp [6:7]
+ boost/contract/detail/condition/cond_subcontracting.hpp [6:7]
+ boost/contract/detail/config.hpp [6:7]
+ boost/contract/detail/debug.hpp [6:7]
+ boost/contract/detail/decl.hpp [6:7]
+ boost/contract/detail/declspec.hpp [6:7]
+ boost/contract/detail/inlined.hpp [6:7]
+ boost/contract/detail/inlined/core/exception.hpp [6:7]
+ boost/contract/detail/inlined/detail/checking.hpp [6:7]
+ boost/contract/detail/inlined/old.hpp [6:7]
+ boost/contract/detail/name.hpp [6:7]
+ boost/contract/detail/none.hpp [6:7]
+ boost/contract/detail/noop.hpp [6:7]
+ boost/contract/detail/operation/constructor.hpp [6:7]
+ boost/contract/detail/operation/destructor.hpp [6:7]
+ boost/contract/detail/operation/function.hpp [6:7]
+ boost/contract/detail/operation/public_function.hpp [6:7]
+ boost/contract/detail/operation/static_public_function.hpp [6:7]
+ boost/contract/detail/operator_safe_bool.hpp [6:7]
+ boost/contract/detail/preprocessor/keyword/private.hpp [6:7]
+ boost/contract/detail/preprocessor/keyword/protected.hpp [6:7]
+ boost/contract/detail/preprocessor/keyword/public.hpp [6:7]
+ boost/contract/detail/preprocessor/keyword/utility/is.hpp [6:7]
+ boost/contract/detail/preprocessor/keyword/virtual.hpp [6:7]
+ boost/contract/detail/static_local_var.hpp [6:7]
+ boost/contract/detail/tvariadic.hpp [6:7]
+ boost/contract/detail/type_traits/member_function_types.hpp [6:7]
+ boost/contract/detail/type_traits/mirror.hpp [6:7]
+ boost/contract/detail/type_traits/optional.hpp [6:7]
+ boost/contract/function.hpp [6:7]
+ boost/contract/old.hpp [6:7]
+ boost/contract/override.hpp [6:7]
+ boost/contract/public_function.hpp [6:7]
+ boost/contract_macro.hpp [6:7]
+
+KEEP BSL-1.0 1f86bcce1bbfb6d9a7d6c733166e7bba
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/auto_link.hpp at line 4, boost/config/compiler/borland.hpp at line 6, boost/config/compiler/clang.hpp at line 5, boost/config/compiler/codegear.hpp at line 6, boost/config/compiler/common_edg.hpp at line 8, boost/config/compiler/cray.hpp at line 5, boost/config/compiler/diab.hpp at line 4, boost/config/compiler/digitalmars.hpp at line 6, boost/config/compiler/gcc.hpp at line 10, boost/config/compiler/gcc_xml.hpp at line 4, boost/config/compiler/hp_acc.hpp at line 9, boost/config/compiler/intel.hpp at line 11, boost/config/compiler/metrowerks.hpp at line 9, boost/config/compiler/mpw.hpp at line 5, boost/config/compiler/pathscale.hpp at line 5, boost/config/compiler/pgi.hpp at line 5, boost/config/compiler/sunpro_cc.hpp at line 8, boost/config/compiler/vacpp.hpp at line 8, boost/config/compiler/visualc.hpp at line 9, boost/config/compiler/xlcpp.hpp at line 5, boost/config/no_tr1/cmath.hpp at line 4, boost/config/no_tr1/complex.hpp at line 4, boost/config/no_tr1/functional.hpp at line 4, boost/config/no_tr1/memory.hpp at line 4, boost/config/no_tr1/utility.hpp at line 4, boost/config/platform/cray.hpp at line 4, boost/config/platform/haiku.hpp at line 4, boost/config/platform/vxworks.hpp at line 6, boost/config/stdlib/dinkumware.hpp at line 8, boost/config/stdlib/libcpp.hpp at line 4, boost/config/stdlib/libstdcpp3.hpp at line 5, boost/integer/common_factor_rt.hpp at line 5, boost/math/bindings/detail/big_digamma.hpp at line 4, boost/math/bindings/detail/big_lanczos.hpp at line 4, boost/math/bindings/e_float.hpp at line 4, boost/math/bindings/mpfr.hpp at line 4, boost/math/bindings/mpreal.hpp at line 4, boost/math/bindings/rr.hpp at line 4, boost/math/common_factor_rt.hpp at line 5, boost/math/complex.hpp at line 4, boost/math/complex/acosh.hpp at line 4, boost/math/complex/asinh.hpp at line 4, boost/math/complex/atan.hpp at line 4, boost/math/complex/atanh.hpp at line 4, boost/math/complex/details.hpp at line 4, boost/math/complex/fabs.hpp at line 4, boost/math/concepts/distributions.hpp at line 4, boost/math/concepts/real_concept.hpp at line 4, boost/math/concepts/real_type_concept.hpp at line 4, boost/math/concepts/std_real_concept.hpp at line 4, boost/math/constants/calculate_constants.hpp at line 6, boost/math/constants/constants.hpp at line 5, boost/math/constants/info.hpp at line 4, boost/math/distributions.hpp at line 6, boost/math/distributions/cauchy.hpp at line 6, boost/math/distributions/complement.hpp at line 5, boost/math/distributions/detail/derived_accessors.hpp at line 4, boost/math/distributions/detail/generic_quantile.hpp at line 4, boost/math/distributions/detail/inv_discrete_quantile.hpp at line 4, boost/math/distributions/exponential.hpp at line 4, boost/math/distributions/extreme_value.hpp at line 4, boost/math/distributions/find_location.hpp at line 6, boost/math/distributions/find_scale.hpp at line 6, boost/math/distributions/gamma.hpp at line 4, boost/math/distributions/hyperexponential.hpp at line 5, boost/math/distributions/inverse_gamma.hpp at line 7, boost/math/distributions/inverse_gaussian.hpp at line 6, boost/math/distributions/laplace.hpp at line 7, boost/math/distributions/lognormal.hpp at line 4, boost/math/distributions/normal.hpp at line 6, boost/math/distributions/pareto.hpp at line 5, boost/math/distributions/rayleigh.hpp at line 4, boost/math/distributions/skew_normal.hpp at line 5, boost/math/distributions/triangular.hpp at line 5, boost/math/distributions/uniform.hpp at line 5, boost/math/distributions/weibull.hpp at line 4, boost/math/policies/error_handling.hpp at line 6, boost/math/policies/policy.hpp at line 4, boost/math/quadrature/gauss.hpp at line 4, boost/math/quadrature/gauss_kronrod.hpp at line 5, boost/math/special_functions.hpp at line 6, boost/math/special_functions/bessel.hpp at line 5, boost/math/special_functions/bessel_prime.hpp at line 4, boost/math/special_functions/beta.hpp at line 4, boost/math/special_functions/binomial.hpp at line 4, boost/math/special_functions/cbrt.hpp at line 4, boost/math/special_functions/chebyshev.hpp at line 4, boost/math/special_functions/chebyshev_transform.hpp at line 4, boost/math/special_functions/cos_pi.hpp at line 4, boost/math/special_functions/detail/airy_ai_bi_zero.hpp at line 4, boost/math/special_functions/detail/bessel_derivatives_linear.hpp at line 4, boost/math/special_functions/detail/bessel_i0.hpp at line 5, boost/math/special_functions/detail/bessel_i1.hpp at line 4, boost/math/special_functions/detail/bessel_ik.hpp at line 4, boost/math/special_functions/detail/bessel_j0.hpp at line 4, boost/math/special_functions/detail/bessel_j1.hpp at line 4, boost/math/special_functions/detail/bessel_jn.hpp at line 4, boost/math/special_functions/detail/bessel_jy.hpp at line 4, boost/math/special_functions/detail/bessel_jy_asym.hpp at line 4, boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp at line 4, boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp at line 4, boost/math/special_functions/detail/bessel_jy_series.hpp at line 4, boost/math/special_functions/detail/bessel_jy_zero.hpp at line 4, boost/math/special_functions/detail/bessel_k0.hpp at line 5, boost/math/special_functions/detail/bessel_k1.hpp at line 5, boost/math/special_functions/detail/bessel_kn.hpp at line 4, boost/math/special_functions/detail/bessel_y0.hpp at line 4, boost/math/special_functions/detail/bessel_y1.hpp at line 4, boost/math/special_functions/detail/bessel_yn.hpp at line 4, boost/math/special_functions/detail/erf_inv.hpp at line 4, boost/math/special_functions/detail/gamma_inva.hpp at line 4, boost/math/special_functions/detail/ibeta_inv_ab.hpp at line 4, boost/math/special_functions/detail/ibeta_inverse.hpp at line 5, boost/math/special_functions/detail/iconv.hpp at line 4, boost/math/special_functions/detail/igamma_inverse.hpp at line 4, boost/math/special_functions/detail/igamma_large.hpp at line 4, boost/math/special_functions/detail/lanczos_sse2.hpp at line 4, boost/math/special_functions/detail/lgamma_small.hpp at line 4, boost/math/special_functions/detail/t_distribution_inv.hpp at line 5, boost/math/special_functions/detail/unchecked_factorial.hpp at line 4, boost/math/special_functions/digamma.hpp at line 4, boost/math/special_functions/ellint_1.hpp at line 5, boost/math/special_functions/ellint_2.hpp at line 5, boost/math/special_functions/ellint_3.hpp at line 5, boost/math/special_functions/ellint_d.hpp at line 5, boost/math/special_functions/ellint_rc.hpp at line 4, boost/math/special_functions/ellint_rd.hpp at line 4, boost/math/special_functions/ellint_rf.hpp at line 4, boost/math/special_functions/ellint_rg.hpp at line 4, boost/math/special_functions/ellint_rj.hpp at line 4, boost/math/special_functions/erf.hpp at line 4, boost/math/special_functions/expint.hpp at line 4, boost/math/special_functions/expm1.hpp at line 4, boost/math/special_functions/factorials.hpp at line 4, boost/math/special_functions/fpclassify.hpp at line 5, boost/math/special_functions/gamma.hpp at line 9, boost/math/special_functions/hermite.hpp at line 5, boost/math/special_functions/heuman_lambda.hpp at line 4, boost/math/special_functions/hypot.hpp at line 4, boost/math/special_functions/jacobi_zeta.hpp at line 4, boost/math/special_functions/laguerre.hpp at line 5, boost/math/special_functions/lanczos.hpp at line 4, boost/math/special_functions/legendre.hpp at line 5, boost/math/special_functions/log1p.hpp at line 4, boost/math/special_functions/modf.hpp at line 4, boost/math/special_functions/owens_t.hpp at line 5, boost/math/special_functions/powm1.hpp at line 4, boost/math/special_functions/relative_difference.hpp at line 4, boost/math/special_functions/round.hpp at line 4, boost/math/special_functions/sign.hpp at line 7, boost/math/special_functions/sin_pi.hpp at line 4, boost/math/special_functions/spherical_harmonic.hpp at line 5, boost/math/special_functions/sqrt1pm1.hpp at line 4, boost/math/special_functions/trigamma.hpp at line 4, boost/math/special_functions/trunc.hpp at line 4, boost/math/special_functions/ulp.hpp at line 4, boost/math/tools/config.hpp at line 4, boost/math/tools/convert_from_string.hpp at line 4, boost/math/tools/detail/polynomial_horner1_10.hpp at line 4, boost/math/tools/detail/polynomial_horner1_11.hpp at line 4, boost/math/tools/detail/polynomial_horner1_12.hpp at line 4, boost/math/tools/detail/polynomial_horner1_13.hpp at line 4, boost/math/tools/detail/polynomial_horner1_14.hpp at line 4, boost/math/tools/detail/polynomial_horner1_15.hpp at line 4, boost/math/tools/detail/polynomial_horner1_16.hpp at line 4, boost/math/tools/detail/polynomial_horner1_17.hpp at line 4, boost/math/tools/detail/polynomial_horner1_18.hpp at line 4, boost/math/tools/detail/polynomial_horner1_19.hpp at line 4, boost/math/tools/detail/polynomial_horner1_2.hpp at line 4, boost/math/tools/detail/polynomial_horner1_20.hpp at line 4, boost/math/tools/detail/polynomial_horner1_3.hpp at line 4, boost/math/tools/detail/polynomial_horner1_4.hpp at line 4, boost/math/tools/detail/polynomial_horner1_5.hpp at line 4, boost/math/tools/detail/polynomial_horner1_6.hpp at line 4, boost/math/tools/detail/polynomial_horner1_7.hpp at line 4, boost/math/tools/detail/polynomial_horner1_8.hpp at line 4, boost/math/tools/detail/polynomial_horner1_9.hpp at line 4, boost/math/tools/detail/polynomial_horner2_10.hpp at line 4, boost/math/tools/detail/polynomial_horner2_11.hpp at line 4, boost/math/tools/detail/polynomial_horner2_12.hpp at line 4, boost/math/tools/detail/polynomial_horner2_13.hpp at line 4, boost/math/tools/detail/polynomial_horner2_14.hpp at line 4, boost/math/tools/detail/polynomial_horner2_15.hpp at line 4, boost/math/tools/detail/polynomial_horner2_16.hpp at line 4, boost/math/tools/detail/polynomial_horner2_17.hpp at line 4, boost/math/tools/detail/polynomial_horner2_18.hpp at line 4, boost/math/tools/detail/polynomial_horner2_19.hpp at line 4, boost/math/tools/detail/polynomial_horner2_2.hpp at line 4, boost/math/tools/detail/polynomial_horner2_3.hpp at line 4, boost/math/tools/detail/polynomial_horner2_4.hpp at line 4, boost/math/tools/detail/polynomial_horner2_5.hpp at line 4, boost/math/tools/detail/polynomial_horner2_6.hpp at line 4, boost/math/tools/detail/polynomial_horner2_7.hpp at line 4, boost/math/tools/detail/polynomial_horner2_8.hpp at line 4, boost/math/tools/detail/polynomial_horner2_9.hpp at line 4, boost/math/tools/detail/polynomial_horner3_10.hpp at line 4, boost/math/tools/detail/polynomial_horner3_11.hpp at line 4, boost/math/tools/detail/polynomial_horner3_12.hpp at line 4, boost/math/tools/detail/polynomial_horner3_13.hpp at line 4, boost/math/tools/detail/polynomial_horner3_14.hpp at line 4, boost/math/tools/detail/polynomial_horner3_15.hpp at line 4, boost/math/tools/detail/polynomial_horner3_16.hpp at line 4, boost/math/tools/detail/polynomial_horner3_17.hpp at line 4, boost/math/tools/detail/polynomial_horner3_18.hpp at line 4, boost/math/tools/detail/polynomial_horner3_19.hpp at line 4, boost/math/tools/detail/polynomial_horner3_2.hpp at line 4, boost/math/tools/detail/polynomial_horner3_20.hpp at line 4, boost/math/tools/detail/polynomial_horner3_3.hpp at line 4, boost/math/tools/detail/polynomial_horner3_4.hpp at line 4, boost/math/tools/detail/polynomial_horner3_5.hpp at line 4, boost/math/tools/detail/polynomial_horner3_6.hpp at line 4, boost/math/tools/detail/polynomial_horner3_7.hpp at line 4, boost/math/tools/detail/polynomial_horner3_8.hpp at line 4, boost/math/tools/detail/polynomial_horner3_9.hpp at line 4, boost/math/tools/detail/rational_horner1_10.hpp at line 4, boost/math/tools/detail/rational_horner1_2.hpp at line 4, boost/math/tools/detail/rational_horner1_3.hpp at line 4, boost/math/tools/detail/rational_horner1_4.hpp at line 4, boost/math/tools/detail/rational_horner1_5.hpp at line 4, boost/math/tools/detail/rational_horner1_6.hpp at line 4, boost/math/tools/detail/rational_horner1_7.hpp at line 4, boost/math/tools/detail/rational_horner1_8.hpp at line 4, boost/math/tools/detail/rational_horner1_9.hpp at line 4, boost/math/tools/detail/rational_horner2_10.hpp at line 4, boost/math/tools/detail/rational_horner2_2.hpp at line 4, boost/math/tools/detail/rational_horner2_3.hpp at line 4, boost/math/tools/detail/rational_horner2_4.hpp at line 4, boost/math/tools/detail/rational_horner2_5.hpp at line 4, boost/math/tools/detail/rational_horner2_6.hpp at line 4, boost/math/tools/detail/rational_horner2_7.hpp at line 4, boost/math/tools/detail/rational_horner2_8.hpp at line 4, boost/math/tools/detail/rational_horner2_9.hpp at line 4, boost/math/tools/detail/rational_horner3_10.hpp at line 4, boost/math/tools/detail/rational_horner3_11.hpp at line 4, boost/math/tools/detail/rational_horner3_12.hpp at line 4, boost/math/tools/detail/rational_horner3_13.hpp at line 4, boost/math/tools/detail/rational_horner3_14.hpp at line 4, boost/math/tools/detail/rational_horner3_15.hpp at line 4, boost/math/tools/detail/rational_horner3_16.hpp at line 4, boost/math/tools/detail/rational_horner3_17.hpp at line 4, boost/math/tools/detail/rational_horner3_18.hpp at line 4, boost/math/tools/detail/rational_horner3_19.hpp at line 4, boost/math/tools/detail/rational_horner3_2.hpp at line 4, boost/math/tools/detail/rational_horner3_20.hpp at line 4, boost/math/tools/detail/rational_horner3_3.hpp at line 4, boost/math/tools/detail/rational_horner3_4.hpp at line 4, boost/math/tools/detail/rational_horner3_5.hpp at line 4, boost/math/tools/detail/rational_horner3_6.hpp at line 4, boost/math/tools/detail/rational_horner3_7.hpp at line 4, boost/math/tools/detail/rational_horner3_8.hpp at line 4, boost/math/tools/detail/rational_horner3_9.hpp at line 4, boost/math/tools/fraction.hpp at line 4, boost/math/tools/minima.hpp at line 4, boost/math/tools/numerical_differentiation.hpp at line 4, boost/math/tools/polynomial.hpp at line 7, boost/math/tools/polynomial_gcd.hpp at line 5, boost/math/tools/precision.hpp at line 4, boost/math/tools/rational.hpp at line 4, boost/math/tools/real_cast.hpp at line 4, boost/math/tools/roots.hpp at line 4, boost/math/tools/series.hpp at line 4, boost/math/tools/stats.hpp at line 4, boost/math/tools/toms748_solve.hpp at line 4, boost/math/tools/traits.hpp at line 5, boost/math/tools/tuple.hpp at line 4, boost/math/tools/workaround.hpp at line 4, boost/multiprecision/detail/big_lanczos.hpp at line 5, boost/variant/detail/move.hpp at line 12, libs/python/src/slice.cpp at line 6
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/config/auto_link.hpp [2:4]
+ boost/config/compiler/borland.hpp [4:6]
+ boost/config/compiler/clang.hpp [3:5]
+ boost/config/compiler/codegear.hpp [4:6]
+ boost/config/compiler/common_edg.hpp [6:8]
+ boost/config/compiler/cray.hpp [3:5]
+ boost/config/compiler/diab.hpp [2:4]
+ boost/config/compiler/digitalmars.hpp [4:6]
+ boost/config/compiler/gcc.hpp [8:10]
+ boost/config/compiler/gcc_xml.hpp [2:4]
+ boost/config/compiler/hp_acc.hpp [7:9]
+ boost/config/compiler/intel.hpp [9:11]
+ boost/config/compiler/metrowerks.hpp [7:9]
+ boost/config/compiler/mpw.hpp [3:5]
+ boost/config/compiler/pathscale.hpp [3:5]
+ boost/config/compiler/pgi.hpp [3:5]
+ boost/config/compiler/sunpro_cc.hpp [6:8]
+ boost/config/compiler/vacpp.hpp [6:8]
+ boost/config/compiler/visualc.hpp [7:9]
+ boost/config/compiler/xlcpp.hpp [3:5]
+ boost/config/no_tr1/cmath.hpp [2:4]
+ boost/config/no_tr1/complex.hpp [2:4]
+ boost/config/no_tr1/functional.hpp [2:4]
+ boost/config/no_tr1/memory.hpp [2:4]
+ boost/config/no_tr1/utility.hpp [2:4]
+ boost/config/platform/cray.hpp [2:4]
+ boost/config/platform/haiku.hpp [2:4]
+ boost/config/platform/vxworks.hpp [4:6]
+ boost/config/stdlib/dinkumware.hpp [6:8]
+ boost/config/stdlib/libcpp.hpp [2:4]
+ boost/config/stdlib/libstdcpp3.hpp [3:5]
+ boost/integer/common_factor_rt.hpp [3:5]
+ boost/math/bindings/detail/big_digamma.hpp [2:4]
+ boost/math/bindings/detail/big_lanczos.hpp [2:4]
+ boost/math/bindings/e_float.hpp [2:4]
+ boost/math/bindings/mpfr.hpp [2:4]
+ boost/math/bindings/mpreal.hpp [2:4]
+ boost/math/bindings/rr.hpp [2:4]
+ boost/math/common_factor_rt.hpp [3:5]
+ boost/math/complex.hpp [2:4]
+ boost/math/complex/acosh.hpp [2:4]
+ boost/math/complex/asinh.hpp [2:4]
+ boost/math/complex/atan.hpp [2:4]
+ boost/math/complex/atanh.hpp [2:4]
+ boost/math/complex/details.hpp [2:4]
+ boost/math/complex/fabs.hpp [2:4]
+ boost/math/concepts/distributions.hpp [2:4]
+ boost/math/concepts/real_concept.hpp [2:4]
+ boost/math/concepts/real_type_concept.hpp [2:4]
+ boost/math/concepts/std_real_concept.hpp [2:4]
+ boost/math/constants/calculate_constants.hpp [4:6]
+ boost/math/constants/constants.hpp [3:5]
+ boost/math/constants/info.hpp [2:4]
+ boost/math/distributions.hpp [4:6]
+ boost/math/distributions/cauchy.hpp [4:6]
+ boost/math/distributions/complement.hpp [3:5]
+ boost/math/distributions/detail/derived_accessors.hpp [2:4]
+ boost/math/distributions/detail/generic_quantile.hpp [2:4]
+ boost/math/distributions/detail/inv_discrete_quantile.hpp [2:4]
+ boost/math/distributions/exponential.hpp [2:4]
+ boost/math/distributions/extreme_value.hpp [2:4]
+ boost/math/distributions/find_location.hpp [4:6]
+ boost/math/distributions/find_scale.hpp [4:6]
+ boost/math/distributions/gamma.hpp [2:4]
+ boost/math/distributions/hyperexponential.hpp [3:5]
+ boost/math/distributions/inverse_gamma.hpp [5:7]
+ boost/math/distributions/inverse_gaussian.hpp [4:6]
+ boost/math/distributions/laplace.hpp [5:7]
+ boost/math/distributions/lognormal.hpp [2:4]
+ boost/math/distributions/normal.hpp [4:6]
+ boost/math/distributions/pareto.hpp [3:5]
+ boost/math/distributions/rayleigh.hpp [2:4]
+ boost/math/distributions/skew_normal.hpp [3:5]
+ boost/math/distributions/triangular.hpp [3:5]
+ boost/math/distributions/uniform.hpp [3:5]
+ boost/math/distributions/weibull.hpp [2:4]
+ boost/math/policies/error_handling.hpp [4:6]
+ boost/math/policies/policy.hpp [2:4]
+ boost/math/quadrature/gauss.hpp [2:4]
+ boost/math/quadrature/gauss_kronrod.hpp [3:5]
+ boost/math/special_functions.hpp [4:6]
+ boost/math/special_functions/bessel.hpp [3:5]
+ boost/math/special_functions/bessel_prime.hpp [2:4]
+ boost/math/special_functions/beta.hpp [2:4]
+ boost/math/special_functions/binomial.hpp [2:4]
+ boost/math/special_functions/cbrt.hpp [2:4]
+ boost/math/special_functions/chebyshev.hpp [2:4]
+ boost/math/special_functions/chebyshev_transform.hpp [2:4]
+ boost/math/special_functions/cos_pi.hpp [2:4]
+ boost/math/special_functions/detail/airy_ai_bi_zero.hpp [2:4]
+ boost/math/special_functions/detail/bessel_derivatives_linear.hpp [2:4]
+ boost/math/special_functions/detail/bessel_i0.hpp [3:5]
+ boost/math/special_functions/detail/bessel_i1.hpp [2:4]
+ boost/math/special_functions/detail/bessel_ik.hpp [2:4]
+ boost/math/special_functions/detail/bessel_j0.hpp [2:4]
+ boost/math/special_functions/detail/bessel_j1.hpp [2:4]
+ boost/math/special_functions/detail/bessel_jn.hpp [2:4]
+ boost/math/special_functions/detail/bessel_jy.hpp [2:4]
+ boost/math/special_functions/detail/bessel_jy_asym.hpp [2:4]
+ boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp [2:4]
+ boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp [2:4]
+ boost/math/special_functions/detail/bessel_jy_series.hpp [2:4]
+ boost/math/special_functions/detail/bessel_jy_zero.hpp [2:4]
+ boost/math/special_functions/detail/bessel_k0.hpp [3:5]
+ boost/math/special_functions/detail/bessel_k1.hpp [3:5]
+ boost/math/special_functions/detail/bessel_kn.hpp [2:4]
+ boost/math/special_functions/detail/bessel_y0.hpp [2:4]
+ boost/math/special_functions/detail/bessel_y1.hpp [2:4]
+ boost/math/special_functions/detail/bessel_yn.hpp [2:4]
+ boost/math/special_functions/detail/erf_inv.hpp [2:4]
+ boost/math/special_functions/detail/gamma_inva.hpp [2:4]
+ boost/math/special_functions/detail/ibeta_inv_ab.hpp [2:4]
+ boost/math/special_functions/detail/ibeta_inverse.hpp [3:5]
+ boost/math/special_functions/detail/iconv.hpp [2:4]
+ boost/math/special_functions/detail/igamma_inverse.hpp [2:4]
+ boost/math/special_functions/detail/igamma_large.hpp [2:4]
+ boost/math/special_functions/detail/lanczos_sse2.hpp [2:4]
+ boost/math/special_functions/detail/lgamma_small.hpp [2:4]
+ boost/math/special_functions/detail/t_distribution_inv.hpp [3:5]
+ boost/math/special_functions/detail/unchecked_factorial.hpp [2:4]
+ boost/math/special_functions/digamma.hpp [2:4]
+ boost/math/special_functions/ellint_1.hpp [3:5]
+ boost/math/special_functions/ellint_2.hpp [3:5]
+ boost/math/special_functions/ellint_3.hpp [3:5]
+ boost/math/special_functions/ellint_d.hpp [3:5]
+ boost/math/special_functions/ellint_rc.hpp [2:4]
+ boost/math/special_functions/ellint_rd.hpp [2:4]
+ boost/math/special_functions/ellint_rf.hpp [2:4]
+ boost/math/special_functions/ellint_rg.hpp [2:4]
+ boost/math/special_functions/ellint_rj.hpp [2:4]
+ boost/math/special_functions/erf.hpp [2:4]
+ boost/math/special_functions/expint.hpp [2:4]
+ boost/math/special_functions/expm1.hpp [2:4]
+ boost/math/special_functions/factorials.hpp [2:4]
+ boost/math/special_functions/fpclassify.hpp [3:5]
+ boost/math/special_functions/gamma.hpp [7:9]
+ boost/math/special_functions/hermite.hpp [3:5]
+ boost/math/special_functions/heuman_lambda.hpp [2:4]
+ boost/math/special_functions/hypot.hpp [2:4]
+ boost/math/special_functions/jacobi_zeta.hpp [2:4]
+ boost/math/special_functions/laguerre.hpp [3:5]
+ boost/math/special_functions/lanczos.hpp [2:4]
+ boost/math/special_functions/legendre.hpp [3:5]
+ boost/math/special_functions/log1p.hpp [2:4]
+ boost/math/special_functions/modf.hpp [2:4]
+ boost/math/special_functions/owens_t.hpp [3:5]
+ boost/math/special_functions/powm1.hpp [2:4]
+ boost/math/special_functions/relative_difference.hpp [2:4]
+ boost/math/special_functions/round.hpp [2:4]
+ boost/math/special_functions/sign.hpp [5:7]
+ boost/math/special_functions/sin_pi.hpp [2:4]
+ boost/math/special_functions/spherical_harmonic.hpp [3:5]
+ boost/math/special_functions/sqrt1pm1.hpp [2:4]
+ boost/math/special_functions/trigamma.hpp [2:4]
+ boost/math/special_functions/trunc.hpp [2:4]
+ boost/math/special_functions/ulp.hpp [2:4]
+ boost/math/tools/config.hpp [2:4]
+ boost/math/tools/convert_from_string.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_10.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_11.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_12.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_13.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_14.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_15.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_16.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_17.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_18.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_19.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_2.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_20.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_3.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_4.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_5.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_6.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_7.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_8.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner1_9.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_10.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_11.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_12.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_13.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_14.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_15.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_16.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_17.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_18.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_19.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_2.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_3.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_4.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_5.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_6.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_7.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_8.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner2_9.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_10.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_11.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_12.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_13.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_14.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_15.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_16.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_17.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_18.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_19.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_2.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_20.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_3.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_4.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_5.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_6.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_7.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_8.hpp [2:4]
+ boost/math/tools/detail/polynomial_horner3_9.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_10.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_2.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_3.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_4.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_5.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_6.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_7.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_8.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_9.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_10.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_2.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_3.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_4.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_5.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_6.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_7.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_8.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_9.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_10.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_11.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_12.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_13.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_14.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_15.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_16.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_17.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_18.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_19.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_2.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_20.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_3.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_4.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_5.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_6.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_7.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_8.hpp [2:4]
+ boost/math/tools/detail/rational_horner3_9.hpp [2:4]
+ boost/math/tools/fraction.hpp [2:4]
+ boost/math/tools/minima.hpp [2:4]
+ boost/math/tools/numerical_differentiation.hpp [2:4]
+ boost/math/tools/polynomial.hpp [5:7]
+ boost/math/tools/polynomial_gcd.hpp [3:5]
+ boost/math/tools/precision.hpp [2:4]
+ boost/math/tools/rational.hpp [2:4]
+ boost/math/tools/real_cast.hpp [2:4]
+ boost/math/tools/roots.hpp [2:4]
+ boost/math/tools/series.hpp [2:4]
+ boost/math/tools/stats.hpp [2:4]
+ boost/math/tools/toms748_solve.hpp [2:4]
+ boost/math/tools/traits.hpp [3:5]
+ boost/math/tools/tuple.hpp [2:4]
+ boost/math/tools/workaround.hpp [2:4]
+ boost/multiprecision/detail/big_lanczos.hpp [3:5]
+ boost/variant/detail/move.hpp [10:12]
+ libs/python/src/slice.cpp [4:6]
+
+KEEP BSL-1.0 1fd942b1f6641317251c68ee4193c5d0
+BELONGS ya.make
+ License text:
+ // boostinspect:nolicense (don't complain about the lack of a Boost license)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 99.00
+ Match type : REFERENCE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/python/detail/python22_fixed.h [7:7]
+ boost/rational.hpp [8:8]
+
+KEEP Public-Domain 21577f2cb1203d157fe2eb4bb8089091
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-public-domain
+ Score : 93.14
+ Match type : NOTICE
+ Links : http://www.linfo.org/publicdomain.html, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/public-domain.LICENSE
+ Files with this license:
+ boost/uuid/detail/md5.hpp [3:22]
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-other-permissive
+ Score : 93.14
+ Match type : NOTICE
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/other-permissive.LICENSE
+ Files with this license:
+ boost/uuid/detail/md5.hpp [3:22]
+
+KEEP BSL-1.0 23fa5e94f51ba7a8e51ff1feb5b64098
+BELONGS libs/date_time/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time.hpp at line 7, boost/date_time/c_local_time_adjustor.hpp at line 7, boost/date_time/constrained_value.hpp at line 7, boost/date_time/date_clock_device.hpp at line 7, boost/date_time/date_defs.hpp at line 7, boost/date_time/date_format_simple.hpp at line 7, boost/date_time/date_formatting.hpp at line 7, boost/date_time/date_formatting_limited.hpp at line 7, boost/date_time/date_generator_formatter.hpp at line 7, boost/date_time/date_generator_parser.hpp at line 8, boost/date_time/dst_rules.hpp at line 7, boost/date_time/dst_transition_generators.hpp at line 4, boost/date_time/format_date_parser.hpp at line 8, boost/date_time/gregorian/formatters.hpp at line 7, boost/date_time/gregorian/formatters_limited.hpp at line 7, boost/date_time/gregorian/greg_day.hpp at line 7, boost/date_time/gregorian/greg_day_of_year.hpp at line 7, boost/date_time/gregorian/greg_duration.hpp at line 7, boost/date_time/gregorian/greg_facet.hpp at line 7, boost/date_time/gregorian/greg_month.hpp at line 7, boost/date_time/gregorian/greg_serialize.hpp at line 7, boost/date_time/gregorian/greg_weekday.hpp at line 7, boost/date_time/gregorian/greg_year.hpp at line 7, boost/date_time/gregorian/greg_ymd.hpp at line 7, boost/date_time/gregorian/gregorian.hpp at line 7, boost/date_time/gregorian/gregorian_types.hpp at line 7, boost/date_time/gregorian/parsers.hpp at line 7, boost/date_time/int_adapter.hpp at line 7, boost/date_time/iso_format.hpp at line 7, boost/date_time/local_time_adjustor.hpp at line 7, boost/date_time/local_timezone_defs.hpp at line 7, boost/date_time/parse_format_base.hpp at line 7, boost/date_time/period.hpp at line 7, boost/date_time/period_formatter.hpp at line 8, boost/date_time/period_parser.hpp at line 8, boost/date_time/posix_time/posix_time.hpp at line 7, boost/date_time/posix_time/posix_time_duration.hpp at line 7, boost/date_time/posix_time/posix_time_legacy_io.hpp at line 7, boost/date_time/posix_time/posix_time_system.hpp at line 7, boost/date_time/posix_time/posix_time_types.hpp at line 4, boost/date_time/posix_time/ptime.hpp at line 7, boost/date_time/posix_time/time_parsers.hpp at line 7, boost/date_time/posix_time/time_period.hpp at line 7, boost/date_time/posix_time/time_serialize.hpp at line 7, boost/date_time/special_defs.hpp at line 7, boost/date_time/special_values_formatter.hpp at line 8, boost/date_time/special_values_parser.hpp at line 8, boost/date_time/time.hpp at line 7, boost/date_time/time_defs.hpp at line 7, boost/date_time/time_formatting_streams.hpp at line 7, boost/date_time/time_parsing.hpp at line 7, boost/date_time/time_system_counted.hpp at line 7, boost/date_time/time_system_split.hpp at line 7, boost/date_time/time_zone_names.hpp at line 7, boost/date_time/year_month_day.hpp at line 7, libs/date_time/src/gregorian/date_generators.cpp at line 4, libs/date_time/src/gregorian/greg_month.cpp at line 4, libs/date_time/src/gregorian/greg_names.hpp at line 4, libs/date_time/src/gregorian/greg_weekday.cpp at line 4, libs/date_time/src/gregorian/gregorian_types.cpp at line 4, libs/date_time/src/posix_time/posix_time_types.cpp at line 5
+ License text:
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 90.62
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/date_time.hpp [5:7]
+ boost/date_time/c_local_time_adjustor.hpp [5:7]
+ boost/date_time/constrained_value.hpp [5:7]
+ boost/date_time/date_clock_device.hpp [5:7]
+ boost/date_time/date_defs.hpp [5:7]
+ boost/date_time/date_format_simple.hpp [5:7]
+ boost/date_time/date_formatting.hpp [5:7]
+ boost/date_time/date_formatting_limited.hpp [5:7]
+ boost/date_time/date_generator_formatter.hpp [5:7]
+ boost/date_time/date_generator_parser.hpp [6:8]
+ boost/date_time/dst_rules.hpp [5:7]
+ boost/date_time/dst_transition_generators.hpp [2:4]
+ boost/date_time/format_date_parser.hpp [6:8]
+ boost/date_time/gregorian/formatters.hpp [5:7]
+ boost/date_time/gregorian/formatters_limited.hpp [5:7]
+ boost/date_time/gregorian/greg_day.hpp [5:7]
+ boost/date_time/gregorian/greg_day_of_year.hpp [5:7]
+ boost/date_time/gregorian/greg_duration.hpp [5:7]
+ boost/date_time/gregorian/greg_facet.hpp [5:7]
+ boost/date_time/gregorian/greg_month.hpp [5:7]
+ boost/date_time/gregorian/greg_serialize.hpp [5:7]
+ boost/date_time/gregorian/greg_weekday.hpp [5:7]
+ boost/date_time/gregorian/greg_year.hpp [5:7]
+ boost/date_time/gregorian/greg_ymd.hpp [5:7]
+ boost/date_time/gregorian/gregorian.hpp [5:7]
+ boost/date_time/gregorian/gregorian_types.hpp [5:7]
+ boost/date_time/gregorian/parsers.hpp [5:7]
+ boost/date_time/int_adapter.hpp [5:7]
+ boost/date_time/iso_format.hpp [5:7]
+ boost/date_time/local_time_adjustor.hpp [5:7]
+ boost/date_time/local_timezone_defs.hpp [5:7]
+ boost/date_time/parse_format_base.hpp [5:7]
+ boost/date_time/period.hpp [5:7]
+ boost/date_time/period_formatter.hpp [6:8]
+ boost/date_time/period_parser.hpp [6:8]
+ boost/date_time/posix_time/posix_time.hpp [5:7]
+ boost/date_time/posix_time/posix_time_duration.hpp [5:7]
+ boost/date_time/posix_time/posix_time_legacy_io.hpp [5:7]
+ boost/date_time/posix_time/posix_time_system.hpp [5:7]
+ boost/date_time/posix_time/posix_time_types.hpp [2:4]
+ boost/date_time/posix_time/ptime.hpp [5:7]
+ boost/date_time/posix_time/time_parsers.hpp [5:7]
+ boost/date_time/posix_time/time_period.hpp [5:7]
+ boost/date_time/posix_time/time_serialize.hpp [5:7]
+ boost/date_time/special_defs.hpp [5:7]
+ boost/date_time/special_values_formatter.hpp [6:8]
+ boost/date_time/special_values_parser.hpp [6:8]
+ boost/date_time/time.hpp [5:7]
+ boost/date_time/time_defs.hpp [5:7]
+ boost/date_time/time_formatting_streams.hpp [5:7]
+ boost/date_time/time_parsing.hpp [5:7]
+ boost/date_time/time_system_counted.hpp [5:7]
+ boost/date_time/time_system_split.hpp [5:7]
+ boost/date_time/time_zone_names.hpp [5:7]
+ boost/date_time/year_month_day.hpp [5:7]
+ libs/date_time/src/gregorian/date_generators.cpp [2:4]
+ libs/date_time/src/gregorian/greg_month.cpp [2:4]
+ libs/date_time/src/gregorian/greg_names.hpp [2:4]
+ libs/date_time/src/gregorian/greg_weekday.cpp [2:4]
+ libs/date_time/src/gregorian/gregorian_types.cpp [2:4]
+ libs/date_time/src/posix_time/posix_time_types.cpp [3:5]
+
+KEEP BSL-1.0 243b3372a909401f618724a7b3f24df1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/format.hpp at line 7, boost/format/alt_sstream.hpp at line 7, boost/format/alt_sstream_impl.hpp at line 7, boost/format/detail/compat_workarounds.hpp at line 7, boost/format/detail/config_macros.hpp at line 10, boost/format/detail/msvc_disambiguater.hpp at line 8, boost/format/detail/unset_macros.hpp at line 7, boost/format/detail/workarounds_gcc-2_95.hpp at line 7, boost/format/detail/workarounds_stlport.hpp at line 7, boost/format/feed_args.hpp at line 8, boost/format/format_class.hpp at line 7, boost/format/format_fwd.hpp at line 7, boost/format/format_implementation.hpp at line 7, boost/format/free_funcs.hpp at line 7, boost/format/group.hpp at line 8, boost/format/internals.hpp at line 8, boost/format/internals_fwd.hpp at line 7, boost/format/parsing.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/format.hpp [5:7]
+ boost/format/alt_sstream.hpp [5:7]
+ boost/format/alt_sstream_impl.hpp [5:7]
+ boost/format/detail/compat_workarounds.hpp [5:7]
+ boost/format/detail/config_macros.hpp [8:10]
+ boost/format/detail/msvc_disambiguater.hpp [6:8]
+ boost/format/detail/unset_macros.hpp [5:7]
+ boost/format/detail/workarounds_gcc-2_95.hpp [5:7]
+ boost/format/detail/workarounds_stlport.hpp [5:7]
+ boost/format/feed_args.hpp [6:8]
+ boost/format/format_class.hpp [5:7]
+ boost/format/format_fwd.hpp [5:7]
+ boost/format/format_implementation.hpp [5:7]
+ boost/format/free_funcs.hpp [5:7]
+ boost/format/group.hpp [6:8]
+ boost/format/internals.hpp [6:8]
+ boost/format/internals_fwd.hpp [5:7]
+ boost/format/parsing.hpp [6:8]
+
+KEEP BSL-1.0 25b833610087bb7e6f661eb119acc062
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/allocator_traits.hpp at line 11, boost/container/scoped_allocator.hpp at line 11, boost/container/uses_allocator.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/allocator_traits.hpp [9:11]
+ boost/container/scoped_allocator.hpp [9:11]
+ boost/container/uses_allocator.hpp [3:5]
+
+KEEP BSL-1.0 25da87a37081f3d8c9d00550e1eebd63
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/preprocessor/flatten.hpp at line 3, boost/parameter/aux_/preprocessor/for_each.hpp at line 3, boost/parameter/aux_/python/invoker.hpp at line 3, boost/parameter/aux_/python/invoker_iterate.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/parameter/aux_/preprocessor/flatten.hpp [1:3]
+ boost/parameter/aux_/preprocessor/for_each.hpp [1:3]
+ boost/parameter/aux_/python/invoker.hpp [1:3]
+ boost/parameter/aux_/python/invoker_iterate.hpp [1:3]
+
+KEEP BSL-1.0 267bc4e38676657a4d90f57e3323ff7c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/distributions/students_t.hpp at line 7, boost/math/special_functions/next.hpp at line 4, boost/math/special_functions/zeta.hpp at line 4, boost/math/tools/big_constant.hpp at line 5, boost/math/tools/detail/polynomial_horner2_20.hpp at line 4, boost/math/tools/detail/rational_horner1_11.hpp at line 4, boost/math/tools/detail/rational_horner1_12.hpp at line 4, boost/math/tools/detail/rational_horner1_13.hpp at line 4, boost/math/tools/detail/rational_horner1_14.hpp at line 4, boost/math/tools/detail/rational_horner1_15.hpp at line 4, boost/math/tools/detail/rational_horner1_16.hpp at line 4, boost/math/tools/detail/rational_horner1_17.hpp at line 4, boost/math/tools/detail/rational_horner1_18.hpp at line 4, boost/math/tools/detail/rational_horner1_19.hpp at line 4, boost/math/tools/detail/rational_horner1_20.hpp at line 4, boost/math/tools/detail/rational_horner2_11.hpp at line 4, boost/math/tools/detail/rational_horner2_12.hpp at line 4, boost/math/tools/detail/rational_horner2_13.hpp at line 4, boost/math/tools/detail/rational_horner2_14.hpp at line 4, boost/math/tools/detail/rational_horner2_15.hpp at line 4, boost/math/tools/detail/rational_horner2_16.hpp at line 4, boost/math/tools/detail/rational_horner2_17.hpp at line 4, boost/math/tools/detail/rational_horner2_18.hpp at line 4, boost/math/tools/detail/rational_horner2_19.hpp at line 4, boost/math/tools/detail/rational_horner2_20.hpp at line 4
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math/distributions/students_t.hpp [5:7]
+ boost/math/special_functions/next.hpp [2:4]
+ boost/math/special_functions/zeta.hpp [2:4]
+ boost/math/tools/big_constant.hpp [3:5]
+ boost/math/tools/detail/polynomial_horner2_20.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_11.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_12.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_13.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_14.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_15.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_16.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_17.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_18.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_19.hpp [2:4]
+ boost/math/tools/detail/rational_horner1_20.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_11.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_12.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_13.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_14.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_15.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_16.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_17.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_18.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_19.hpp [2:4]
+ boost/math/tools/detail/rational_horner2_20.hpp [2:4]
+
+KEEP BSL-1.0 2680a252584e97559a5e2d3fd8fa06b7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/dynamic_array.hpp at line 5, boost/multiprecision/detail/rebind.hpp at line 5, boost/multiprecision/detail/utype_helper.hpp at line 5
+ License text:
+ // Copyright Christopher Kormanyos 2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/detail/dynamic_array.hpp [3:5]
+ boost/multiprecision/detail/rebind.hpp [3:5]
+ boost/multiprecision/detail/utype_helper.hpp [3:5]
+
+KEEP BSL-1.0 273e902bd13375207ae0e2368cfe6098
+BELONGS libs/iostreams/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/categories.hpp at line 4, boost/iostreams/chain.hpp at line 4, boost/iostreams/char_traits.hpp at line 4, boost/iostreams/checked_operations.hpp at line 4, boost/iostreams/close.hpp at line 4, boost/iostreams/code_converter.hpp at line 4, boost/iostreams/combine.hpp at line 4, boost/iostreams/compose.hpp at line 4, boost/iostreams/concepts.hpp at line 4, boost/iostreams/constants.hpp at line 4, boost/iostreams/copy.hpp at line 4, boost/iostreams/detail/access_control.hpp at line 4, boost/iostreams/detail/adapter/concept_adapter.hpp at line 4, boost/iostreams/detail/adapter/direct_adapter.hpp at line 4, boost/iostreams/detail/adapter/mode_adapter.hpp at line 4, boost/iostreams/detail/adapter/non_blocking_adapter.hpp at line 4, boost/iostreams/detail/adapter/output_iterator_adapter.hpp at line 4, boost/iostreams/detail/adapter/range_adapter.hpp at line 4, boost/iostreams/detail/add_facet.hpp at line 4, boost/iostreams/detail/bool_trait_def.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/forward.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/stream.hpp at line 4, boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp at line 4, boost/iostreams/detail/buffer.hpp at line 4, boost/iostreams/detail/call_traits.hpp at line 4, boost/iostreams/detail/char_traits.hpp at line 4, boost/iostreams/detail/codecvt_helper.hpp at line 4, boost/iostreams/detail/codecvt_holder.hpp at line 4, boost/iostreams/detail/config/auto_link.hpp at line 4, boost/iostreams/detail/config/bzip2.hpp at line 4, boost/iostreams/detail/config/codecvt.hpp at line 4, boost/iostreams/detail/config/disable_warnings.hpp at line 4, boost/iostreams/detail/config/dyn_link.hpp at line 4, boost/iostreams/detail/config/enable_warnings.hpp at line 4, boost/iostreams/detail/config/gcc.hpp at line 4, boost/iostreams/detail/config/limits.hpp at line 4, boost/iostreams/detail/config/overload_resolution.hpp at line 4, boost/iostreams/detail/config/unreachable_return.hpp at line 3, boost/iostreams/detail/config/wide_streams.hpp at line 4, boost/iostreams/detail/config/windows_posix.hpp at line 5, boost/iostreams/detail/config/zlib.hpp at line 4, boost/iostreams/detail/counted_array.hpp at line 4, boost/iostreams/detail/default_arg.hpp at line 4, boost/iostreams/detail/dispatch.hpp at line 4, boost/iostreams/detail/double_object.hpp at line 4, boost/iostreams/detail/enable_if_stream.hpp at line 4, boost/iostreams/detail/error.hpp at line 4, boost/iostreams/detail/forward.hpp at line 4, boost/iostreams/detail/fstream.hpp at line 4, boost/iostreams/detail/ios.hpp at line 4, boost/iostreams/detail/iostream.hpp at line 4, boost/iostreams/detail/is_dereferenceable.hpp at line 5, boost/iostreams/detail/is_iterator_range.hpp at line 4, boost/iostreams/detail/newline.hpp at line 4, boost/iostreams/detail/optional.hpp at line 4, boost/iostreams/detail/param_type.hpp at line 4, boost/iostreams/detail/push.hpp at line 4, boost/iostreams/detail/push_params.hpp at line 4, boost/iostreams/detail/resolve.hpp at line 4, boost/iostreams/detail/select.hpp at line 4, boost/iostreams/detail/select_by_size.hpp at line 4, boost/iostreams/detail/streambuf.hpp at line 4, boost/iostreams/detail/streambuf/chainbuf.hpp at line 4, boost/iostreams/detail/streambuf/direct_streambuf.hpp at line 4, boost/iostreams/detail/streambuf/indirect_streambuf.hpp at line 4, boost/iostreams/detail/streambuf/linked_streambuf.hpp at line 4, boost/iostreams/detail/system_failure.hpp at line 5, boost/iostreams/detail/template_params.hpp at line 4, boost/iostreams/detail/translate_int_type.hpp at line 4, boost/iostreams/detail/wrap_unwrap.hpp at line 4, boost/iostreams/device/array.hpp at line 4, boost/iostreams/device/back_inserter.hpp at line 4, boost/iostreams/device/file.hpp at line 4, boost/iostreams/device/file_descriptor.hpp at line 4, boost/iostreams/device/mapped_file.hpp at line 5, boost/iostreams/device/null.hpp at line 4, boost/iostreams/filter/aggregate.hpp at line 4, boost/iostreams/filter/bzip2.hpp at line 4, boost/iostreams/filter/counter.hpp at line 4, boost/iostreams/filter/gzip.hpp at line 4, boost/iostreams/filter/line.hpp at line 4, boost/iostreams/filter/lzma.hpp at line 4, boost/iostreams/filter/newline.hpp at line 4, boost/iostreams/filter/regex.hpp at line 4, boost/iostreams/filter/stdio.hpp at line 4, boost/iostreams/filter/symmetric.hpp at line 4, boost/iostreams/filter/test.hpp at line 4, boost/iostreams/filter/zlib.hpp at line 4, boost/iostreams/filtering_stream.hpp at line 4, boost/iostreams/filtering_streambuf.hpp at line 4, boost/iostreams/flush.hpp at line 4, boost/iostreams/get.hpp at line 4, boost/iostreams/imbue.hpp at line 4, boost/iostreams/input_sequence.hpp at line 4, boost/iostreams/invert.hpp at line 4, boost/iostreams/operations.hpp at line 4, boost/iostreams/operations_fwd.hpp at line 4, boost/iostreams/optimal_buffer_size.hpp at line 4, boost/iostreams/output_sequence.hpp at line 4, boost/iostreams/pipeline.hpp at line 4, boost/iostreams/positioning.hpp at line 4, boost/iostreams/put.hpp at line 4, boost/iostreams/putback.hpp at line 4, boost/iostreams/read.hpp at line 4, boost/iostreams/seek.hpp at line 4, boost/iostreams/skip.hpp at line 4, boost/iostreams/stream.hpp at line 4, boost/iostreams/stream_buffer.hpp at line 4, boost/iostreams/tee.hpp at line 4, boost/iostreams/traits.hpp at line 4, boost/iostreams/traits_fwd.hpp at line 4, boost/iostreams/write.hpp at line 4, boost/ptr_container/detail/default_deleter.hpp at line 3, boost/ptr_container/detail/is_convertible.hpp at line 5, boost/ptr_container/detail/move.hpp at line 3, boost/ptr_container/detail/static_move_ptr.hpp at line 5, libs/iostreams/src/bzip2.cpp at line 4, libs/iostreams/src/file_descriptor.cpp at line 4, libs/iostreams/src/gzip.cpp at line 4, libs/iostreams/src/lzma.cpp at line 6, libs/iostreams/src/mapped_file.cpp at line 6, libs/iostreams/src/zlib.cpp at line 4
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/iostreams/categories.hpp [3:4]
+ boost/iostreams/chain.hpp [3:4]
+ boost/iostreams/char_traits.hpp [3:4]
+ boost/iostreams/checked_operations.hpp [3:4]
+ boost/iostreams/close.hpp [3:4]
+ boost/iostreams/code_converter.hpp [3:4]
+ boost/iostreams/combine.hpp [3:4]
+ boost/iostreams/compose.hpp [3:4]
+ boost/iostreams/concepts.hpp [3:4]
+ boost/iostreams/constants.hpp [3:4]
+ boost/iostreams/copy.hpp [3:4]
+ boost/iostreams/detail/access_control.hpp [3:4]
+ boost/iostreams/detail/adapter/concept_adapter.hpp [3:4]
+ boost/iostreams/detail/adapter/direct_adapter.hpp [3:4]
+ boost/iostreams/detail/adapter/mode_adapter.hpp [3:4]
+ boost/iostreams/detail/adapter/non_blocking_adapter.hpp [3:4]
+ boost/iostreams/detail/adapter/output_iterator_adapter.hpp [3:4]
+ boost/iostreams/detail/adapter/range_adapter.hpp [3:4]
+ boost/iostreams/detail/add_facet.hpp [3:4]
+ boost/iostreams/detail/bool_trait_def.hpp [3:4]
+ boost/iostreams/detail/broken_overload_resolution/forward.hpp [3:4]
+ boost/iostreams/detail/broken_overload_resolution/stream.hpp [3:4]
+ boost/iostreams/detail/broken_overload_resolution/stream_buffer.hpp [3:4]
+ boost/iostreams/detail/buffer.hpp [3:4]
+ boost/iostreams/detail/call_traits.hpp [3:4]
+ boost/iostreams/detail/char_traits.hpp [3:4]
+ boost/iostreams/detail/codecvt_helper.hpp [3:4]
+ boost/iostreams/detail/codecvt_holder.hpp [3:4]
+ boost/iostreams/detail/config/auto_link.hpp [3:4]
+ boost/iostreams/detail/config/bzip2.hpp [3:4]
+ boost/iostreams/detail/config/codecvt.hpp [3:4]
+ boost/iostreams/detail/config/disable_warnings.hpp [3:4]
+ boost/iostreams/detail/config/dyn_link.hpp [3:4]
+ boost/iostreams/detail/config/enable_warnings.hpp [3:4]
+ boost/iostreams/detail/config/gcc.hpp [3:4]
+ boost/iostreams/detail/config/limits.hpp [3:4]
+ boost/iostreams/detail/config/overload_resolution.hpp [3:4]
+ boost/iostreams/detail/config/unreachable_return.hpp [2:3]
+ boost/iostreams/detail/config/wide_streams.hpp [3:4]
+ boost/iostreams/detail/config/windows_posix.hpp [4:5]
+ boost/iostreams/detail/config/zlib.hpp [3:4]
+ boost/iostreams/detail/counted_array.hpp [3:4]
+ boost/iostreams/detail/default_arg.hpp [3:4]
+ boost/iostreams/detail/dispatch.hpp [3:4]
+ boost/iostreams/detail/double_object.hpp [3:4]
+ boost/iostreams/detail/enable_if_stream.hpp [3:4]
+ boost/iostreams/detail/error.hpp [3:4]
+ boost/iostreams/detail/forward.hpp [3:4]
+ boost/iostreams/detail/fstream.hpp [3:4]
+ boost/iostreams/detail/ios.hpp [3:4]
+ boost/iostreams/detail/iostream.hpp [3:4]
+ boost/iostreams/detail/is_dereferenceable.hpp [4:5]
+ boost/iostreams/detail/is_iterator_range.hpp [3:4]
+ boost/iostreams/detail/newline.hpp [3:4]
+ boost/iostreams/detail/optional.hpp [3:4]
+ boost/iostreams/detail/param_type.hpp [3:4]
+ boost/iostreams/detail/push.hpp [3:4]
+ boost/iostreams/detail/push_params.hpp [3:4]
+ boost/iostreams/detail/resolve.hpp [3:4]
+ boost/iostreams/detail/select.hpp [3:4]
+ boost/iostreams/detail/select_by_size.hpp [3:4]
+ boost/iostreams/detail/streambuf.hpp [3:4]
+ boost/iostreams/detail/streambuf/chainbuf.hpp [3:4]
+ boost/iostreams/detail/streambuf/direct_streambuf.hpp [3:4]
+ boost/iostreams/detail/streambuf/indirect_streambuf.hpp [3:4]
+ boost/iostreams/detail/streambuf/linked_streambuf.hpp [3:4]
+ boost/iostreams/detail/system_failure.hpp [4:5]
+ boost/iostreams/detail/template_params.hpp [3:4]
+ boost/iostreams/detail/translate_int_type.hpp [3:4]
+ boost/iostreams/detail/wrap_unwrap.hpp [3:4]
+ boost/iostreams/device/array.hpp [3:4]
+ boost/iostreams/device/back_inserter.hpp [3:4]
+ boost/iostreams/device/file.hpp [3:4]
+ boost/iostreams/device/file_descriptor.hpp [3:4]
+ boost/iostreams/device/mapped_file.hpp [4:5]
+ boost/iostreams/device/null.hpp [3:4]
+ boost/iostreams/filter/aggregate.hpp [3:4]
+ boost/iostreams/filter/bzip2.hpp [3:4]
+ boost/iostreams/filter/counter.hpp [3:4]
+ boost/iostreams/filter/gzip.hpp [3:4]
+ boost/iostreams/filter/line.hpp [3:4]
+ boost/iostreams/filter/lzma.hpp [3:4]
+ boost/iostreams/filter/newline.hpp [3:4]
+ boost/iostreams/filter/regex.hpp [3:4]
+ boost/iostreams/filter/stdio.hpp [3:4]
+ boost/iostreams/filter/symmetric.hpp [3:4]
+ boost/iostreams/filter/test.hpp [3:4]
+ boost/iostreams/filter/zlib.hpp [3:4]
+ boost/iostreams/filtering_stream.hpp [3:4]
+ boost/iostreams/filtering_streambuf.hpp [3:4]
+ boost/iostreams/flush.hpp [3:4]
+ boost/iostreams/get.hpp [3:4]
+ boost/iostreams/imbue.hpp [3:4]
+ boost/iostreams/input_sequence.hpp [3:4]
+ boost/iostreams/invert.hpp [3:4]
+ boost/iostreams/operations.hpp [3:4]
+ boost/iostreams/operations_fwd.hpp [3:4]
+ boost/iostreams/optimal_buffer_size.hpp [3:4]
+ boost/iostreams/output_sequence.hpp [3:4]
+ boost/iostreams/pipeline.hpp [3:4]
+ boost/iostreams/positioning.hpp [3:4]
+ boost/iostreams/put.hpp [3:4]
+ boost/iostreams/putback.hpp [3:4]
+ boost/iostreams/read.hpp [3:4]
+ boost/iostreams/seek.hpp [3:4]
+ boost/iostreams/skip.hpp [3:4]
+ boost/iostreams/stream.hpp [3:4]
+ boost/iostreams/stream_buffer.hpp [3:4]
+ boost/iostreams/tee.hpp [3:4]
+ boost/iostreams/traits.hpp [3:4]
+ boost/iostreams/traits_fwd.hpp [3:4]
+ boost/iostreams/write.hpp [3:4]
+ boost/ptr_container/detail/default_deleter.hpp [2:3]
+ boost/ptr_container/detail/is_convertible.hpp [4:5]
+ boost/ptr_container/detail/move.hpp [2:3]
+ boost/ptr_container/detail/static_move_ptr.hpp [4:5]
+ libs/iostreams/src/bzip2.cpp [3:4]
+ libs/iostreams/src/file_descriptor.cpp [3:4]
+ libs/iostreams/src/gzip.cpp [3:4]
+ libs/iostreams/src/lzma.cpp [5:6]
+ libs/iostreams/src/mapped_file.cpp [5:6]
+ libs/iostreams/src/zlib.cpp [3:4]
+
+KEEP BSL-1.0 2835e331aa3449aef001bf68ecb39fb9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/control/while.hpp at line 6, boost/preprocessor/tuple/eat.hpp at line 6, boost/preprocessor/tuple/elem.hpp at line 6, boost/preprocessor/tuple/reverse.hpp at line 6, boost/preprocessor/tuple/to_list.hpp at line 6
+ License text:
+ \# * Distributed under the Boost Software License, Version 1.0. (See
+ \# * accompanying file LICENSE_1_0.txt or copy at
+ \# * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/preprocessor/control/while.hpp [5:7]
+ boost/preprocessor/tuple/eat.hpp [5:7]
+ boost/preprocessor/tuple/elem.hpp [5:7]
+ boost/preprocessor/tuple/reverse.hpp [5:7]
+ boost/preprocessor/tuple/to_list.hpp [5:7]
+
+KEEP BSL-1.0 28b2e46eb6f911b5064bd6681069737e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp at line 6, boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp at line 6, boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp at line 6, boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp at line 6, boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp at line 6, boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_list10.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_list20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_list30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_list40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_list50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_map10.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_map20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_map30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_map40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_map50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_set10.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_set20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_set30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_set40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_set50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list10.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list20.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list20_fwd.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list30.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list30_fwd.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list40.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list40_fwd.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list50.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list50_fwd.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons10.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons20.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons30.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons40.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons50.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/as_map10.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/as_map20.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/as_map30.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/as_map40.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/as_map50.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map10.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map20.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map20_fwd.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map30.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map30_fwd.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map40.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map40_fwd.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map50.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map50_fwd.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/as_set10.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/as_set20.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/as_set30.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/as_set40.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/as_set50.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set10.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set20.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set20_fwd.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set30.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set30_fwd.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set40.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set40_fwd.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set50.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set50_fwd.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector10.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector20.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector30.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector40.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector50.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector10.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector20.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector20_fwd.hpp at line 6, boost/fusion/container/vector/detail/cpp03/preprocessed/vector30.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector30_fwd.hpp at line 6, boost/fusion/container/vector/detail/cpp03/preprocessed/vector40.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector40_fwd.hpp at line 6, boost/fusion/container/vector/detail/cpp03/preprocessed/vector50.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector50_fwd.hpp at line 6, boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser20.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser30.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser40.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser50.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector10.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector20.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector20_fwd.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector30.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector30_fwd.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector40.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector40_fwd.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector50.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector50_fwd.hpp at line 5, boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp at line 5, boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp at line 5, boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp at line 5, boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp at line 5, boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple10.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple20.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple20_fwd.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple30.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple30_fwd.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple40.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple40_fwd.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple50.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple50_fwd.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_10.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_20.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_30.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_40.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_50.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_20.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_30.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_40.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_50.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_10.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_20.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_30.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_40.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_50.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_10.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_20.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_30.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_40.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_50.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/call_10.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/call_20.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/call_30.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/call_40.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/call_50.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/expression_10.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/expression_20.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/expression_30.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/expression_40.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/expression_50.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/function_equal_10.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/function_equal_20.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/function_equal_30.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/function_equal_40.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/function_equal_50.hpp at line 7, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_10.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_20.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_30.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_40.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_50.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_10.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_20.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_30.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_40.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_50.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_20.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_30.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_40.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_50.hpp at line 5, boost/phoenix/function/detail/cpp03/preprocessed/function_operator_20.hpp at line 6, boost/phoenix/function/detail/cpp03/preprocessed/function_operator_30.hpp at line 6, boost/phoenix/function/detail/cpp03/preprocessed/function_operator_40.hpp at line 6, boost/phoenix/function/detail/cpp03/preprocessed/function_operator_50.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_20.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_30.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_40.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_50.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_10.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_20.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_30.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_40.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_50.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_10.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_20.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_30.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_40.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_50.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/new_20.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_30.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_40.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_50.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_eval_10.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_eval_20.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_eval_30.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_eval_40.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_eval_50.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_expr_10.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/new_expr_20.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/new_expr_30.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/new_expr_40.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/new_expr_50.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_20.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_30.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_40.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_50.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_10.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_20.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_30.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_40.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_50.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_10.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_20.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_30.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_40.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_50.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_20.hpp at line 6, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_30.hpp at line 6, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_40.hpp at line 6, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_50.hpp at line 6, boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_10.hpp at line 6, boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_20.hpp at line 6, boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_30.hpp at line 6, boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_40.hpp at line 6, boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_50.hpp at line 6, boost/phoenix/scope/detail/cpp03/preprocessed/lambda_10.hpp at line 8, boost/phoenix/scope/detail/cpp03/preprocessed/lambda_20.hpp at line 8, boost/phoenix/scope/detail/cpp03/preprocessed/lambda_30.hpp at line 8, boost/phoenix/scope/detail/cpp03/preprocessed/lambda_40.hpp at line 8, boost/phoenix/scope/detail/cpp03/preprocessed/lambda_50.hpp at line 8, boost/phoenix/statement/detail/preprocessed/catch_push_back_10.hpp at line 6, boost/phoenix/statement/detail/preprocessed/catch_push_back_20.hpp at line 6, boost/phoenix/statement/detail/preprocessed/catch_push_back_30.hpp at line 6, boost/phoenix/statement/detail/preprocessed/catch_push_back_40.hpp at line 6, boost/phoenix/statement/detail/preprocessed/catch_push_back_50.hpp at line 6, boost/phoenix/statement/detail/preprocessed/switch_10.hpp at line 6, boost/phoenix/statement/detail/preprocessed/switch_20.hpp at line 6, boost/phoenix/statement/detail/preprocessed/switch_30.hpp at line 6, boost/phoenix/statement/detail/preprocessed/switch_40.hpp at line 6, boost/phoenix/statement/detail/preprocessed/switch_50.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_expression_30.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_expression_40.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_expression_50.hpp at line 6, boost/phoenix/support/preprocessed/vector_10.hpp at line 6, boost/phoenix/support/preprocessed/vector_20.hpp at line 6, boost/phoenix/support/preprocessed/vector_30.hpp at line 6, boost/phoenix/support/preprocessed/vector_40.hpp at line 6, boost/phoenix/support/preprocessed/vector_50.hpp at line 6
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip10.hpp [5:6]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip20.hpp [5:6]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip30.hpp [5:6]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip40.hpp [5:6]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip50.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/list_tie20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/list_tie30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/list_tie40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/list_tie50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_deque10.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_deque20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_deque30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_deque40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_deque50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_list10.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_list20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_list30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_list40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_list50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_map10.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_map20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_map30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_map40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_map50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_set10.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_set20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_set30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_set40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_set50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_vector10.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_vector20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_vector30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_vector40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_vector50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/map_tie10.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/map_tie20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/map_tie30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/map_tie40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/map_tie50.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie20.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie30.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie40.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie50.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list10.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list20.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list20_fwd.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list30.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list30_fwd.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list40.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list40_fwd.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list50.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list50_fwd.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons10.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons20.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons30.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons40.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons50.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map10.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map20.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map30.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map40.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map50.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map10.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map20.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map20_fwd.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map30.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map30_fwd.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map40.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map40_fwd.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map50.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map50_fwd.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set10.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set20.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set30.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set40.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set50.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set10.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set20.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set20_fwd.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set30.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set30_fwd.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set40.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set40_fwd.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set50.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set50_fwd.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector10.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector20.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector30.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector40.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector50.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector10.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector20.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector20_fwd.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector30.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector30_fwd.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector40.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector40_fwd.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector50.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector50_fwd.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser20.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser30.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser40.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser50.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector10.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector20.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector20_fwd.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector30.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector30_fwd.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector40.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector40_fwd.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector50.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector50_fwd.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/make_tuple10.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/make_tuple20.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/make_tuple30.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/make_tuple40.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/make_tuple50.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple10.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple20.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple20_fwd.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple30.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple30_fwd.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple40.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple40_fwd.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple50.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple50_fwd.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_10.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_20.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_30.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_40.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator_50.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_20.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_30.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_40.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_50.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_10.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_20.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_30.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_40.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_no_predefined_50.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_10.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_20.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_30.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_40.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument_predefined_50.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_10.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_20.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_30.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_40.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/call_50.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_10.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_20.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_30.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_40.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression_50.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_10.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_20.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_30.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_40.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal_50.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_10.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_20.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_30.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_40.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_50.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_10.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_20.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_30.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_40.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr_50.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_20.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_30.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_40.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_50.hpp [4:5]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_20.hpp [5:6]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_30.hpp [5:6]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_40.hpp [5:6]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_50.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_20.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_30.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_40.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_50.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_10.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_20.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_30.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_40.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval_50.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_10.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_20.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_30.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_40.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr_50.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_20.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_30.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_40.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_50.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_10.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_20.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_30.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_40.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval_50.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_10.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_20.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_30.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_40.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr_50.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_20.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_30.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_40.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_50.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_10.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_20.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_30.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_40.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of_50.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_10.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_20.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_30.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_40.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr_50.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_20.hpp [5:6]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_30.hpp [5:6]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_40.hpp [5:6]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_50.hpp [5:6]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_10.hpp [5:6]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_20.hpp [5:6]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_30.hpp [5:6]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_40.hpp [5:6]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic_50.hpp [5:6]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_10.hpp [7:8]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_20.hpp [7:8]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_30.hpp [7:8]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_40.hpp [7:8]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda_50.hpp [7:8]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_10.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_20.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_30.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_40.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back_50.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/switch_10.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/switch_20.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/switch_30.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/switch_40.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/switch_50.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_10.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_20.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_30.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_40.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval_50.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_30.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_40.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_50.hpp [5:6]
+ boost/phoenix/support/preprocessed/vector_10.hpp [5:6]
+ boost/phoenix/support/preprocessed/vector_20.hpp [5:6]
+ boost/phoenix/support/preprocessed/vector_30.hpp [5:6]
+ boost/phoenix/support/preprocessed/vector_40.hpp [5:6]
+ boost/phoenix/support/preprocessed/vector_50.hpp [5:6]
+
+KEEP BSL-1.0 29ab2af23720ebdd1e2ad342a8e0137f
+BELONGS libs/container/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/container/src/dlmalloc_ext_2_8_6.c at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2007-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/container/src/dlmalloc_ext_2_8_6.c [3:5]
+
+KEEP Public-Domain 2ab151edee0159eccbbf18b52c0ec403
+BELONGS ya.make
+ License text:
+ // This code is in the public domain. Anyone may use it or change it in any way that
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-public-domain
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.linfo.org/publicdomain.html, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/public-domain.LICENSE
+ Files with this license:
+ boost/intrusive/rbtree_algorithms.hpp [16:16]
+
+KEEP BSL-1.0 2c7a3fa82e66676005cd4ee2608fd7d2
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ LICENSE_1_0.txt [1:23]
+
+KEEP BSL-1.0 2cc71fe4bd12718a9884bf7ff37269f3
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/rolling_mean.hpp at line 6, boost/accumulators/statistics/rolling_moment.hpp at line 6, boost/accumulators/statistics/rolling_variance.hpp at line 6, boost/bimap.hpp at line 6, boost/bimap/bimap.hpp at line 6, boost/bimap/container_adaptor/associative_container_adaptor.hpp at line 6, boost/bimap/container_adaptor/container_adaptor.hpp at line 6, boost/bimap/container_adaptor/detail/comparison_adaptor.hpp at line 6, boost/bimap/container_adaptor/detail/functor_bag.hpp at line 6, boost/bimap/container_adaptor/detail/identity_converters.hpp at line 6, boost/bimap/container_adaptor/detail/key_extractor.hpp at line 6, boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp at line 6, boost/bimap/container_adaptor/list_adaptor.hpp at line 6, boost/bimap/container_adaptor/list_map_adaptor.hpp at line 6, boost/bimap/container_adaptor/map_adaptor.hpp at line 6, boost/bimap/container_adaptor/multimap_adaptor.hpp at line 6, boost/bimap/container_adaptor/multiset_adaptor.hpp at line 6, boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp at line 6, boost/bimap/container_adaptor/sequence_container_adaptor.hpp at line 6, boost/bimap/container_adaptor/set_adaptor.hpp at line 6, boost/bimap/container_adaptor/support/iterator_facade_converters.hpp at line 6, boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp at line 6, boost/bimap/container_adaptor/unordered_map_adaptor.hpp at line 6, boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp at line 6, boost/bimap/container_adaptor/unordered_multiset_adaptor.hpp at line 6, boost/bimap/container_adaptor/unordered_set_adaptor.hpp at line 6, boost/bimap/container_adaptor/vector_adaptor.hpp at line 6, boost/bimap/container_adaptor/vector_map_adaptor.hpp at line 6, boost/bimap/detail/bimap_core.hpp at line 6, boost/bimap/detail/concept_tags.hpp at line 6, boost/bimap/detail/debug/static_error.hpp at line 6, boost/bimap/detail/generate_index_binder.hpp at line 6, boost/bimap/detail/generate_relation_binder.hpp at line 6, boost/bimap/detail/generate_view_binder.hpp at line 6, boost/bimap/detail/is_set_type_of.hpp at line 6, boost/bimap/detail/manage_additional_parameters.hpp at line 6, boost/bimap/detail/manage_bimap_key.hpp at line 6, boost/bimap/detail/map_view_base.hpp at line 6, boost/bimap/detail/map_view_iterator.hpp at line 6, boost/bimap/detail/modifier_adaptor.hpp at line 6, boost/bimap/detail/non_unique_views_helper.hpp at line 6, boost/bimap/detail/set_view_base.hpp at line 6, boost/bimap/detail/set_view_iterator.hpp at line 6, boost/bimap/detail/test/check_metadata.hpp at line 6, boost/bimap/detail/user_interface_config.hpp at line 6, boost/bimap/list_of.hpp at line 6, boost/bimap/multiset_of.hpp at line 6, boost/bimap/property_map/set_support.hpp at line 6, boost/bimap/property_map/unordered_set_support.hpp at line 6, boost/bimap/relation/detail/access_builder.hpp at line 6, boost/bimap/relation/detail/metadata_access_builder.hpp at line 6, boost/bimap/relation/detail/mutant.hpp at line 6, boost/bimap/relation/detail/static_access_builder.hpp at line 6, boost/bimap/relation/detail/to_mutable_relation_functor.hpp at line 6, boost/bimap/relation/member_at.hpp at line 6, boost/bimap/relation/mutant_relation.hpp at line 6, boost/bimap/relation/pair_layout.hpp at line 6, boost/bimap/relation/structured_pair.hpp at line 6, boost/bimap/relation/support/data_extractor.hpp at line 6, boost/bimap/relation/support/get.hpp at line 6, boost/bimap/relation/support/get_pair_functor.hpp at line 6, boost/bimap/relation/support/is_tag_of_member_at.hpp at line 6, boost/bimap/relation/support/member_with_tag.hpp at line 6, boost/bimap/relation/support/opposite_tag.hpp at line 6, boost/bimap/relation/support/pair_by.hpp at line 6, boost/bimap/relation/support/pair_type_by.hpp at line 6, boost/bimap/relation/support/value_type_of.hpp at line 6, boost/bimap/relation/symmetrical_base.hpp at line 6, boost/bimap/set_of.hpp at line 6, boost/bimap/support/data_type_by.hpp at line 6, boost/bimap/support/iterator_type_by.hpp at line 6, boost/bimap/support/key_type_by.hpp at line 6, boost/bimap/support/lambda.hpp at line 6, boost/bimap/support/map_by.hpp at line 6, boost/bimap/support/map_type_by.hpp at line 6, boost/bimap/support/value_type_by.hpp at line 6, boost/bimap/tags/support/apply_to_value_type.hpp at line 6, boost/bimap/tags/support/default_tagged.hpp at line 6, boost/bimap/tags/support/is_tagged.hpp at line 6, boost/bimap/tags/support/overwrite_tagged.hpp at line 6, boost/bimap/tags/support/tag_of.hpp at line 6, boost/bimap/tags/support/value_type_of.hpp at line 6, boost/bimap/tags/tagged.hpp at line 6, boost/bimap/unconstrained_set_of.hpp at line 6, boost/bimap/unordered_multiset_of.hpp at line 6, boost/bimap/unordered_set_of.hpp at line 6, boost/bimap/vector_of.hpp at line 6, boost/bimap/views/list_map_view.hpp at line 6, boost/bimap/views/list_set_view.hpp at line 6, boost/bimap/views/map_view.hpp at line 6, boost/bimap/views/multimap_view.hpp at line 6, boost/bimap/views/multiset_view.hpp at line 6, boost/bimap/views/set_view.hpp at line 6, boost/bimap/views/unconstrained_map_view.hpp at line 6, boost/bimap/views/unconstrained_set_view.hpp at line 6, boost/bimap/views/unordered_map_view.hpp at line 6, boost/bimap/views/unordered_multimap_view.hpp at line 6, boost/bimap/views/unordered_multiset_view.hpp at line 6, boost/bimap/views/unordered_set_view.hpp at line 6, boost/bimap/views/vector_map_view.hpp at line 6, boost/bimap/views/vector_set_view.hpp at line 6, boost/container/detail/algorithm.hpp at line 6, boost/container/detail/construct_in_place.hpp at line 6, boost/container/detail/destroyers.hpp at line 6, boost/container/detail/iterator.hpp at line 6, boost/container/detail/iterators.hpp at line 7, boost/container/detail/mpl.hpp at line 6, boost/container/detail/pair.hpp at line 6, boost/container/detail/transform_iterator.hpp at line 7, boost/container/detail/type_traits.hpp at line 6, boost/container/detail/value_init.hpp at line 6, boost/container/stable_vector.hpp at line 14, boost/geometry/algorithms/detail/envelope/box.hpp at line 15, boost/geometry/algorithms/detail/envelope/implementation.hpp at line 17, boost/geometry/algorithms/detail/envelope/initialize.hpp at line 8, boost/geometry/algorithms/detail/envelope/interface.hpp at line 18, boost/geometry/algorithms/detail/envelope/intersects_antimeridian.hpp at line 8, boost/geometry/algorithms/detail/envelope/linear.hpp at line 14, boost/geometry/algorithms/detail/envelope/multipoint.hpp at line 10, boost/geometry/algorithms/detail/envelope/point.hpp at line 15, boost/geometry/algorithms/detail/envelope/range.hpp at line 17, boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp at line 10, boost/geometry/algorithms/detail/envelope/segment.hpp at line 15, boost/geometry/algorithms/detail/envelope/transform_units.hpp at line 8, boost/geometry/algorithms/detail/expand/box.hpp at line 16, boost/geometry/algorithms/detail/expand/implementation.hpp at line 17, boost/geometry/algorithms/detail/expand/indexed.hpp at line 19, boost/geometry/algorithms/detail/expand/interface.hpp at line 18, boost/geometry/algorithms/detail/expand/point.hpp at line 19, boost/geometry/algorithms/detail/expand/segment.hpp at line 16, boost/geometry/algorithms/detail/expand_by_epsilon.hpp at line 8, boost/geometry/algorithms/dispatch/envelope.hpp at line 16, boost/geometry/algorithms/dispatch/expand.hpp at line 18, boost/geometry/algorithms/envelope.hpp at line 16, boost/geometry/algorithms/expand.hpp at line 17, boost/graph/bc_clustering.hpp at line 4, boost/graph/betweenness_centrality.hpp at line 4, boost/graph/circle_layout.hpp at line 4, boost/graph/compressed_sparse_row_graph.hpp at line 4, boost/graph/detail/compressed_sparse_row_struct.hpp at line 4, boost/graph/detail/histogram_sort.hpp at line 4, boost/graph/detail/indexed_properties.hpp at line 4, boost/graph/detail/is_distributed_selector.hpp at line 4, boost/graph/detail/read_graphviz_new.hpp at line 4, boost/graph/detail/read_graphviz_spirit.hpp at line 4, boost/graph/distributed/betweenness_centrality.hpp at line 4, boost/graph/dominator_tree.hpp at line 5, boost/graph/erdos_renyi_generator.hpp at line 4, boost/graph/floyd_warshall_shortest.hpp at line 4, boost/graph/fruchterman_reingold.hpp at line 4, boost/graph/gursoy_atun_layout.hpp at line 4, boost/graph/kamada_kawai_spring_layout.hpp at line 4, boost/graph/loop_erased_random_walk.hpp at line 4, boost/graph/one_bit_color_map.hpp at line 4, boost/graph/page_rank.hpp at line 5, boost/graph/plod_generator.hpp at line 4, boost/graph/random_layout.hpp at line 4, boost/graph/random_spanning_tree.hpp at line 4, boost/graph/small_world_generator.hpp at line 4, boost/graph/topology.hpp at line 4, boost/graph/two_bit_color_map.hpp at line 4, boost/interprocess/detail/min_max.hpp at line 6, boost/interprocess/detail/move.hpp at line 5, boost/interprocess/detail/mpl.hpp at line 6, boost/interprocess/detail/pointer_type.hpp at line 7, boost/interprocess/detail/transform_iterator.hpp at line 7, boost/interprocess/detail/type_traits.hpp at line 6, boost/interprocess/detail/utilities.hpp at line 7, boost/interprocess/smart_ptr/deleter.hpp at line 6, boost/interprocess/smart_ptr/detail/sp_counted_base.hpp at line 6, boost/interprocess/smart_ptr/shared_ptr.hpp at line 9, boost/interprocess/smart_ptr/weak_ptr.hpp at line 8, boost/intrusive/detail/algorithm.hpp at line 6, boost/iterator/advance.hpp at line 4, boost/iterator/distance.hpp at line 4, boost/move/algo/adaptive_merge.hpp at line 5, boost/move/algo/adaptive_sort.hpp at line 5, boost/move/algo/detail/adaptive_sort_merge.hpp at line 5, boost/move/algo/detail/basic_op.hpp at line 5, boost/move/algo/detail/heap_sort.hpp at line 5, boost/move/algo/detail/insertion_sort.hpp at line 5, boost/move/algo/detail/merge.hpp at line 5, boost/move/algo/detail/merge_sort.hpp at line 5, boost/move/algo/detail/pdqsort.hpp at line 6, boost/move/algo/detail/set_difference.hpp at line 5, boost/move/algo/move.hpp at line 5, boost/move/algo/predicate.hpp at line 5, boost/move/algo/unique.hpp at line 5, boost/move/algorithm.hpp at line 5, boost/move/core.hpp at line 5, boost/move/detail/destruct_n.hpp at line 5, boost/move/detail/iterator_traits.hpp at line 5, boost/move/detail/meta_utils.hpp at line 5, boost/move/detail/meta_utils_core.hpp at line 5, boost/move/detail/move_helpers.hpp at line 5, boost/move/detail/type_traits.hpp at line 6, boost/move/detail/unique_ptr_meta_utils.hpp at line 5, boost/move/iterator.hpp at line 5, boost/move/move.hpp at line 6, boost/move/traits.hpp at line 5, boost/move/utility.hpp at line 5, boost/move/utility_core.hpp at line 5, boost/mpl/aux_/config/gpu.hpp at line 8, boost/mpl/eval_if.hpp at line 8, boost/mpl/get_tag.hpp at line 8, boost/mpl/numeric_cast.hpp at line 8, boost/mpl/string.hpp at line 8, boost/none.hpp at line 5, boost/property_tree/detail/ptree_implementation.hpp at line 6, boost/python/numpy.hpp at line 4, boost/python/numpy/dtype.hpp at line 4, boost/python/numpy/internal.hpp at line 4, boost/python/numpy/invoke_matching.hpp at line 4, boost/python/numpy/matrix.hpp at line 4, boost/python/numpy/ndarray.hpp at line 4, boost/python/numpy/numpy_object_mgr_traits.hpp at line 4, boost/python/numpy/scalars.hpp at line 4, boost/python/numpy/ufunc.hpp at line 4, boost/python/object/class_metadata.hpp at line 4, boost/ratio/detail/mpl/abs.hpp at line 6, boost/ratio/detail/mpl/gcd.hpp at line 6, boost/ratio/detail/mpl/lcm.hpp at line 6, boost/ratio/detail/mpl/sign.hpp at line 6, boost/test/impl/test_framework_init_observer.ipp at line 3, boost/test/test_framework_init_observer.hpp at line 3, libs/python/src/numpy/dtype.cpp at line 4, libs/python/src/numpy/matrix.cpp at line 4, libs/python/src/numpy/ndarray.cpp at line 4, libs/python/src/numpy/numpy.cpp at line 4, libs/python/src/numpy/scalars.cpp at line 4, libs/python/src/numpy/ufunc.cpp at line 4
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/rolling_mean.hpp [5:7]
+ boost/accumulators/statistics/rolling_moment.hpp [5:7]
+ boost/accumulators/statistics/rolling_variance.hpp [5:7]
+ boost/bimap.hpp [5:7]
+ boost/bimap/bimap.hpp [5:7]
+ boost/bimap/container_adaptor/associative_container_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/container_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/detail/comparison_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/detail/functor_bag.hpp [5:7]
+ boost/bimap/container_adaptor/detail/identity_converters.hpp [5:7]
+ boost/bimap/container_adaptor/detail/key_extractor.hpp [5:7]
+ boost/bimap/container_adaptor/detail/non_unique_container_helper.hpp [5:7]
+ boost/bimap/container_adaptor/list_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/list_map_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/map_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/multimap_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/multiset_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/ordered_associative_container_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/sequence_container_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/set_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/support/iterator_facade_converters.hpp [5:7]
+ boost/bimap/container_adaptor/unordered_associative_container_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/unordered_map_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/unordered_multimap_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/unordered_multiset_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/unordered_set_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/vector_adaptor.hpp [5:7]
+ boost/bimap/container_adaptor/vector_map_adaptor.hpp [5:7]
+ boost/bimap/detail/bimap_core.hpp [5:7]
+ boost/bimap/detail/concept_tags.hpp [5:7]
+ boost/bimap/detail/debug/static_error.hpp [5:7]
+ boost/bimap/detail/generate_index_binder.hpp [5:7]
+ boost/bimap/detail/generate_relation_binder.hpp [5:7]
+ boost/bimap/detail/generate_view_binder.hpp [5:7]
+ boost/bimap/detail/is_set_type_of.hpp [5:7]
+ boost/bimap/detail/manage_additional_parameters.hpp [5:7]
+ boost/bimap/detail/manage_bimap_key.hpp [5:7]
+ boost/bimap/detail/map_view_base.hpp [5:7]
+ boost/bimap/detail/map_view_iterator.hpp [5:7]
+ boost/bimap/detail/modifier_adaptor.hpp [5:7]
+ boost/bimap/detail/non_unique_views_helper.hpp [5:7]
+ boost/bimap/detail/set_view_base.hpp [5:7]
+ boost/bimap/detail/set_view_iterator.hpp [5:7]
+ boost/bimap/detail/test/check_metadata.hpp [5:7]
+ boost/bimap/detail/user_interface_config.hpp [5:7]
+ boost/bimap/list_of.hpp [5:7]
+ boost/bimap/multiset_of.hpp [5:7]
+ boost/bimap/property_map/set_support.hpp [5:7]
+ boost/bimap/property_map/unordered_set_support.hpp [5:7]
+ boost/bimap/relation/detail/access_builder.hpp [5:7]
+ boost/bimap/relation/detail/metadata_access_builder.hpp [5:7]
+ boost/bimap/relation/detail/mutant.hpp [5:7]
+ boost/bimap/relation/detail/static_access_builder.hpp [5:7]
+ boost/bimap/relation/detail/to_mutable_relation_functor.hpp [5:7]
+ boost/bimap/relation/member_at.hpp [5:7]
+ boost/bimap/relation/mutant_relation.hpp [5:7]
+ boost/bimap/relation/pair_layout.hpp [5:7]
+ boost/bimap/relation/structured_pair.hpp [5:7]
+ boost/bimap/relation/support/data_extractor.hpp [5:7]
+ boost/bimap/relation/support/get.hpp [5:7]
+ boost/bimap/relation/support/get_pair_functor.hpp [5:7]
+ boost/bimap/relation/support/is_tag_of_member_at.hpp [5:7]
+ boost/bimap/relation/support/member_with_tag.hpp [5:7]
+ boost/bimap/relation/support/opposite_tag.hpp [5:7]
+ boost/bimap/relation/support/pair_by.hpp [5:7]
+ boost/bimap/relation/support/pair_type_by.hpp [5:7]
+ boost/bimap/relation/support/value_type_of.hpp [5:7]
+ boost/bimap/relation/symmetrical_base.hpp [5:7]
+ boost/bimap/set_of.hpp [5:7]
+ boost/bimap/support/data_type_by.hpp [5:7]
+ boost/bimap/support/iterator_type_by.hpp [5:7]
+ boost/bimap/support/key_type_by.hpp [5:7]
+ boost/bimap/support/lambda.hpp [5:7]
+ boost/bimap/support/map_by.hpp [5:7]
+ boost/bimap/support/map_type_by.hpp [5:7]
+ boost/bimap/support/value_type_by.hpp [5:7]
+ boost/bimap/tags/support/apply_to_value_type.hpp [5:7]
+ boost/bimap/tags/support/default_tagged.hpp [5:7]
+ boost/bimap/tags/support/is_tagged.hpp [5:7]
+ boost/bimap/tags/support/overwrite_tagged.hpp [5:7]
+ boost/bimap/tags/support/tag_of.hpp [5:7]
+ boost/bimap/tags/support/value_type_of.hpp [5:7]
+ boost/bimap/tags/tagged.hpp [5:7]
+ boost/bimap/unconstrained_set_of.hpp [5:7]
+ boost/bimap/unordered_multiset_of.hpp [5:7]
+ boost/bimap/unordered_set_of.hpp [5:7]
+ boost/bimap/vector_of.hpp [5:7]
+ boost/bimap/views/list_map_view.hpp [5:7]
+ boost/bimap/views/list_set_view.hpp [5:7]
+ boost/bimap/views/map_view.hpp [5:7]
+ boost/bimap/views/multimap_view.hpp [5:7]
+ boost/bimap/views/multiset_view.hpp [5:7]
+ boost/bimap/views/set_view.hpp [5:7]
+ boost/bimap/views/unconstrained_map_view.hpp [5:7]
+ boost/bimap/views/unconstrained_set_view.hpp [5:7]
+ boost/bimap/views/unordered_map_view.hpp [5:7]
+ boost/bimap/views/unordered_multimap_view.hpp [5:7]
+ boost/bimap/views/unordered_multiset_view.hpp [5:7]
+ boost/bimap/views/unordered_set_view.hpp [5:7]
+ boost/bimap/views/vector_map_view.hpp [5:7]
+ boost/bimap/views/vector_set_view.hpp [5:7]
+ boost/container/detail/algorithm.hpp [5:7]
+ boost/container/detail/construct_in_place.hpp [5:7]
+ boost/container/detail/destroyers.hpp [5:7]
+ boost/container/detail/iterator.hpp [5:7]
+ boost/container/detail/iterators.hpp [6:8]
+ boost/container/detail/mpl.hpp [5:7]
+ boost/container/detail/pair.hpp [5:7]
+ boost/container/detail/transform_iterator.hpp [6:8]
+ boost/container/detail/type_traits.hpp [5:7]
+ boost/container/detail/value_init.hpp [5:7]
+ boost/container/stable_vector.hpp [13:15]
+ boost/geometry/algorithms/detail/envelope/box.hpp [14:16]
+ boost/geometry/algorithms/detail/envelope/implementation.hpp [16:18]
+ boost/geometry/algorithms/detail/envelope/initialize.hpp [7:9]
+ boost/geometry/algorithms/detail/envelope/interface.hpp [17:19]
+ boost/geometry/algorithms/detail/envelope/intersects_antimeridian.hpp [7:9]
+ boost/geometry/algorithms/detail/envelope/linear.hpp [13:15]
+ boost/geometry/algorithms/detail/envelope/multipoint.hpp [9:11]
+ boost/geometry/algorithms/detail/envelope/point.hpp [14:16]
+ boost/geometry/algorithms/detail/envelope/range.hpp [16:18]
+ boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp [9:11]
+ boost/geometry/algorithms/detail/envelope/segment.hpp [14:16]
+ boost/geometry/algorithms/detail/envelope/transform_units.hpp [7:9]
+ boost/geometry/algorithms/detail/expand/box.hpp [15:17]
+ boost/geometry/algorithms/detail/expand/implementation.hpp [16:18]
+ boost/geometry/algorithms/detail/expand/indexed.hpp [18:20]
+ boost/geometry/algorithms/detail/expand/interface.hpp [17:19]
+ boost/geometry/algorithms/detail/expand/point.hpp [18:20]
+ boost/geometry/algorithms/detail/expand/segment.hpp [15:17]
+ boost/geometry/algorithms/detail/expand_by_epsilon.hpp [7:9]
+ boost/geometry/algorithms/dispatch/envelope.hpp [15:17]
+ boost/geometry/algorithms/dispatch/expand.hpp [17:19]
+ boost/geometry/algorithms/envelope.hpp [15:17]
+ boost/geometry/algorithms/expand.hpp [16:18]
+ boost/graph/bc_clustering.hpp [3:5]
+ boost/graph/betweenness_centrality.hpp [3:5]
+ boost/graph/circle_layout.hpp [3:5]
+ boost/graph/compressed_sparse_row_graph.hpp [3:5]
+ boost/graph/detail/compressed_sparse_row_struct.hpp [3:5]
+ boost/graph/detail/histogram_sort.hpp [3:5]
+ boost/graph/detail/indexed_properties.hpp [3:5]
+ boost/graph/detail/is_distributed_selector.hpp [3:5]
+ boost/graph/detail/read_graphviz_new.hpp [3:5]
+ boost/graph/detail/read_graphviz_spirit.hpp [3:5]
+ boost/graph/distributed/betweenness_centrality.hpp [3:5]
+ boost/graph/dominator_tree.hpp [4:6]
+ boost/graph/erdos_renyi_generator.hpp [3:5]
+ boost/graph/floyd_warshall_shortest.hpp [3:5]
+ boost/graph/fruchterman_reingold.hpp [3:5]
+ boost/graph/gursoy_atun_layout.hpp [3:5]
+ boost/graph/kamada_kawai_spring_layout.hpp [3:5]
+ boost/graph/loop_erased_random_walk.hpp [3:5]
+ boost/graph/one_bit_color_map.hpp [3:5]
+ boost/graph/page_rank.hpp [4:6]
+ boost/graph/plod_generator.hpp [3:5]
+ boost/graph/random_layout.hpp [3:5]
+ boost/graph/random_spanning_tree.hpp [3:5]
+ boost/graph/small_world_generator.hpp [3:5]
+ boost/graph/topology.hpp [3:5]
+ boost/graph/two_bit_color_map.hpp [3:5]
+ boost/interprocess/detail/min_max.hpp [5:7]
+ boost/interprocess/detail/move.hpp [4:6]
+ boost/interprocess/detail/mpl.hpp [5:7]
+ boost/interprocess/detail/pointer_type.hpp [6:8]
+ boost/interprocess/detail/transform_iterator.hpp [6:8]
+ boost/interprocess/detail/type_traits.hpp [5:7]
+ boost/interprocess/detail/utilities.hpp [6:8]
+ boost/interprocess/smart_ptr/deleter.hpp [5:7]
+ boost/interprocess/smart_ptr/detail/sp_counted_base.hpp [5:7]
+ boost/interprocess/smart_ptr/shared_ptr.hpp [8:10]
+ boost/interprocess/smart_ptr/weak_ptr.hpp [7:9]
+ boost/intrusive/detail/algorithm.hpp [5:7]
+ boost/iterator/advance.hpp [3:5]
+ boost/iterator/distance.hpp [3:5]
+ boost/move/algo/adaptive_merge.hpp [4:6]
+ boost/move/algo/adaptive_sort.hpp [4:6]
+ boost/move/algo/detail/adaptive_sort_merge.hpp [4:6]
+ boost/move/algo/detail/basic_op.hpp [4:6]
+ boost/move/algo/detail/heap_sort.hpp [4:6]
+ boost/move/algo/detail/insertion_sort.hpp [4:6]
+ boost/move/algo/detail/merge.hpp [4:6]
+ boost/move/algo/detail/merge_sort.hpp [4:6]
+ boost/move/algo/detail/pdqsort.hpp [5:7]
+ boost/move/algo/detail/set_difference.hpp [4:6]
+ boost/move/algo/move.hpp [4:6]
+ boost/move/algo/predicate.hpp [4:6]
+ boost/move/algo/unique.hpp [4:6]
+ boost/move/algorithm.hpp [4:6]
+ boost/move/core.hpp [4:6]
+ boost/move/detail/destruct_n.hpp [4:6]
+ boost/move/detail/iterator_traits.hpp [4:6]
+ boost/move/detail/meta_utils.hpp [4:6]
+ boost/move/detail/meta_utils_core.hpp [4:6]
+ boost/move/detail/move_helpers.hpp [4:6]
+ boost/move/detail/type_traits.hpp [5:7]
+ boost/move/detail/unique_ptr_meta_utils.hpp [4:6]
+ boost/move/iterator.hpp [4:6]
+ boost/move/move.hpp [5:7]
+ boost/move/traits.hpp [4:6]
+ boost/move/utility.hpp [4:6]
+ boost/move/utility_core.hpp [4:6]
+ boost/mpl/aux_/config/gpu.hpp [7:9]
+ boost/mpl/eval_if.hpp [7:9]
+ boost/mpl/get_tag.hpp [7:9]
+ boost/mpl/numeric_cast.hpp [7:9]
+ boost/mpl/string.hpp [7:9]
+ boost/none.hpp [4:6]
+ boost/property_tree/detail/ptree_implementation.hpp [5:7]
+ boost/python/numpy.hpp [3:5]
+ boost/python/numpy/dtype.hpp [3:5]
+ boost/python/numpy/internal.hpp [3:5]
+ boost/python/numpy/invoke_matching.hpp [3:5]
+ boost/python/numpy/matrix.hpp [3:5]
+ boost/python/numpy/ndarray.hpp [3:5]
+ boost/python/numpy/numpy_object_mgr_traits.hpp [3:5]
+ boost/python/numpy/scalars.hpp [3:5]
+ boost/python/numpy/ufunc.hpp [3:5]
+ boost/python/object/class_metadata.hpp [3:5]
+ boost/ratio/detail/mpl/abs.hpp [5:7]
+ boost/ratio/detail/mpl/gcd.hpp [5:7]
+ boost/ratio/detail/mpl/lcm.hpp [5:7]
+ boost/ratio/detail/mpl/sign.hpp [5:7]
+ boost/test/impl/test_framework_init_observer.ipp [2:4]
+ boost/test/test_framework_init_observer.hpp [2:4]
+ libs/python/src/numpy/dtype.cpp [3:5]
+ libs/python/src/numpy/matrix.cpp [3:5]
+ libs/python/src/numpy/ndarray.cpp [3:5]
+ libs/python/src/numpy/numpy.cpp [3:5]
+ libs/python/src/numpy/scalars.cpp [3:5]
+ libs/python/src/numpy/ufunc.cpp [3:5]
+
+KEEP BSL-1.0 2d0ff12029b5a0864e69427697633f03
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/indexed.hpp at line 6
+ License text:
+ // Use, modification and distribution is subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/adaptor/indexed.hpp [5:7]
+
+KEEP BSL-1.0 2d55719f98bbe62f68a3838e1b53ad94
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/geometry/srs/projections/proj/gstmerc.hpp at line 14
+ License text:
+ // Use, modification and distribution is subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/geometry/srs/projections/proj/gstmerc.hpp [13:15]
+
+KEEP BSL-1.0 2d6ab63dc95009634a63de40db7de32e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/mutex.hpp at line 8
+ License text:
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/mutex.hpp [6:8]
+
+KEEP BSL-1.0 2e471ec5429d12b5840cf0c8decb7941
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/concurrent_queues/deque_adaptor.hpp at line 8, boost/thread/concurrent_queues/deque_base.hpp at line 8, boost/thread/concurrent_queues/deque_views.hpp at line 8, boost/thread/concurrent_queues/queue_adaptor.hpp at line 8, boost/thread/concurrent_queues/queue_base.hpp at line 8, boost/thread/concurrent_queues/queue_op_status.hpp at line 8, boost/thread/concurrent_queues/queue_views.hpp at line 8, boost/thread/experimental/config/inline_namespace.hpp at line 8, boost/thread/experimental/exception_list.hpp at line 8, boost/thread/experimental/parallel/v1/exception_list.hpp at line 8, boost/thread/experimental/parallel/v1/inline_namespace.hpp at line 8, boost/thread/experimental/parallel/v2/inline_namespace.hpp at line 8, boost/thread/experimental/task_region.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/thread/concurrent_queues/deque_adaptor.hpp [6:8]
+ boost/thread/concurrent_queues/deque_base.hpp [6:8]
+ boost/thread/concurrent_queues/deque_views.hpp [6:8]
+ boost/thread/concurrent_queues/queue_adaptor.hpp [6:8]
+ boost/thread/concurrent_queues/queue_base.hpp [6:8]
+ boost/thread/concurrent_queues/queue_op_status.hpp [6:8]
+ boost/thread/concurrent_queues/queue_views.hpp [6:8]
+ boost/thread/experimental/config/inline_namespace.hpp [6:8]
+ boost/thread/experimental/exception_list.hpp [6:8]
+ boost/thread/experimental/parallel/v1/exception_list.hpp [6:8]
+ boost/thread/experimental/parallel/v1/inline_namespace.hpp [6:8]
+ boost/thread/experimental/parallel/v2/inline_namespace.hpp [6:8]
+ boost/thread/experimental/task_region.hpp [6:8]
+
+KEEP BSL-1.0 2f8abd22762c4abb1562c53c6171e2b7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/spirit/home/karma/stream/detail/iterator_sink.hpp at line 4
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boist.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.30
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/karma/stream/detail/iterator_sink.hpp [3:4]
+
+KEEP BSL-1.0 304c8552dc56cab871c2de4763ff6fc9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/math_functions.hpp at line 7, boost/interprocess/detail/math_functions.hpp at line 7
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/math_functions.hpp [6:8]
+ boost/interprocess/detail/math_functions.hpp [6:8]
+
+KEEP BSL-1.0 305e9dd5dbce133b82679ef0a4cf2c0d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/msm/back/fold_to_list.hpp at line 7
+ License text:
+ // Copyright 2008 Eric Niebler. Distributed
+ // under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/msm/back/fold_to_list.hpp [5:8]
+
+KEEP BSL-1.0 31439101f50cb5506911fc6b6c9cff76
+BELONGS libs/chrono/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_sequence_container.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/last_lap.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/no_memory.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/clock_default_formatter.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopclock.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp at line 5, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/process_default_formatter.hpp at line 5, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopclock.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/strict_stopclock.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/system_default_formatter.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/thread_default_formatter.hpp at line 4
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or
+ // copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_sequence_container.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/last_lap.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/no_memory.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/clock_default_formatter.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopclock.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp [4:6]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/process_default_formatter.hpp [4:6]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopclock.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/strict_stopclock.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/system_default_formatter.hpp [3:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/thread_default_formatter.hpp [3:5]
+
+KEEP BSL-1.0 31b5f7cf1ea991a6516437dc785d8c86
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/algo/detail/is_sorted.hpp at line 7
+ License text:
+ // (C) Copyright Ion Gaztanaga 2017-2018. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/move/algo/detail/is_sorted.hpp [5:7]
+
+SKIP LicenseRef-scancode-unknown-license-reference 3257251aa1e704634f03c869b6fe90d3
+BELONGS ya.make
+ License text:
+ // Distributed under the same license as the original.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-unknown-license-reference
+ Score : 11.00
+ Match type : INTRO
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE
+ Files with this license:
+ boost/msm/active_state_switching_policies.hpp [4:4]
+ boost/msm/back/args.hpp [4:4]
+ boost/msm/back/bind_helpers.hpp [4:4]
+ boost/msm/back/common_types.hpp [4:4]
+ boost/msm/back/copy_policies.hpp [4:4]
+ boost/msm/back/default_compile_policy.hpp [4:4]
+ boost/msm/back/dispatch_table.hpp [4:4]
+ boost/msm/back/favor_compile_time.hpp [4:4]
+ boost/msm/back/history_policies.hpp [4:4]
+ boost/msm/back/metafunctions.hpp [4:4]
+ boost/msm/back/mpl_graph_fsm_check.hpp [4:4]
+ boost/msm/back/no_fsm_check.hpp [4:4]
+ boost/msm/back/queue_container_circular.hpp [4:4]
+ boost/msm/back/queue_container_deque.hpp [4:4]
+ boost/msm/back/state_machine.hpp [4:4]
+ boost/msm/back/tools.hpp [4:4]
+ boost/msm/common.hpp [4:4]
+ boost/msm/event_traits.hpp [4:4]
+ boost/msm/front/common_states.hpp [4:4]
+ boost/msm/front/completion_event.hpp [4:4]
+ boost/msm/front/detail/common_states.hpp [4:4]
+ boost/msm/front/detail/row2_helper.hpp [4:4]
+ boost/msm/front/euml/algorithm.hpp [4:4]
+ boost/msm/front/euml/common.hpp [4:4]
+ boost/msm/front/euml/container.hpp [4:4]
+ boost/msm/front/euml/euml.hpp [4:4]
+ boost/msm/front/euml/euml_typeof.hpp [4:4]
+ boost/msm/front/euml/guard_grammar.hpp [4:4]
+ boost/msm/front/euml/iteration.hpp [4:4]
+ boost/msm/front/euml/operator.hpp [4:4]
+ boost/msm/front/euml/phoenix_placeholders.hpp [4:4]
+ boost/msm/front/euml/querying.hpp [4:4]
+ boost/msm/front/euml/state_grammar.hpp [4:4]
+ boost/msm/front/euml/stl.hpp [4:4]
+ boost/msm/front/euml/stt_grammar.hpp [4:4]
+ boost/msm/front/euml/transformation.hpp [4:4]
+ boost/msm/front/functor_row.hpp [4:4]
+ boost/msm/front/internal_row.hpp [4:4]
+ boost/msm/front/row2.hpp [4:4]
+ boost/msm/front/state_machine_def.hpp [4:4]
+ boost/msm/front/states.hpp [4:4]
+ boost/msm/msm_grammar.hpp [4:4]
+ boost/msm/proto_config.hpp [4:4]
+ boost/msm/row_tags.hpp [4:4]
+
+KEEP BSL-1.0 AND BSL-1.0 33fc845ed42b9e0c4f3b191ad7caac10
+BELONGS ya.make
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENCE.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 59.26
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/icl/associative_element_container.hpp [4:6]
+ boost/icl/associative_interval_container.hpp [4:6]
+ boost/icl/closed_interval.hpp [4:6]
+ boost/icl/concept/comparable.hpp [4:6]
+ boost/icl/concept/container.hpp [4:6]
+ boost/icl/concept/element_associator.hpp [4:6]
+ boost/icl/concept/element_map.hpp [4:6]
+ boost/icl/concept/element_set.hpp [4:6]
+ boost/icl/concept/element_set_value.hpp [4:6]
+ boost/icl/concept/interval.hpp [4:6]
+ boost/icl/concept/interval_associator.hpp [4:6]
+ boost/icl/concept/interval_associator_base.hpp [4:6]
+ boost/icl/concept/interval_bounds.hpp [4:6]
+ boost/icl/concept/interval_map.hpp [4:6]
+ boost/icl/concept/interval_set.hpp [4:6]
+ boost/icl/concept/interval_set_value.hpp [4:6]
+ boost/icl/concept/joinable.hpp [4:6]
+ boost/icl/concept/map_value.hpp [4:6]
+ boost/icl/concept/set_value.hpp [4:6]
+ boost/icl/continuous_interval.hpp [4:6]
+ boost/icl/detail/associated_value.hpp [4:6]
+ boost/icl/detail/boost_config.hpp [4:6]
+ boost/icl/detail/concept_check.hpp [4:6]
+ boost/icl/detail/design_config.hpp [5:7]
+ boost/icl/detail/element_comparer.hpp [4:6]
+ boost/icl/detail/element_iterator.hpp [4:6]
+ boost/icl/detail/exclusive_less_than.hpp [4:6]
+ boost/icl/detail/interval_map_algo.hpp [4:6]
+ boost/icl/detail/interval_morphism.hpp [4:6]
+ boost/icl/detail/interval_set_algo.hpp [4:6]
+ boost/icl/detail/interval_subset_comparer.hpp [4:6]
+ boost/icl/detail/map_algo.hpp [4:6]
+ boost/icl/detail/mapped_reference.hpp [4:6]
+ boost/icl/detail/notate.hpp [6:8]
+ boost/icl/detail/on_absorbtion.hpp [4:6]
+ boost/icl/detail/relation_state.hpp [5:7]
+ boost/icl/detail/set_algo.hpp [6:8]
+ boost/icl/detail/std_set.hpp [4:6]
+ boost/icl/detail/subset_comparer.hpp [4:6]
+ boost/icl/discrete_interval.hpp [4:6]
+ boost/icl/dynamic_interval_traits.hpp [4:6]
+ boost/icl/functors.hpp [4:6]
+ boost/icl/gregorian.hpp [4:6]
+ boost/icl/impl_config.hpp [5:7]
+ boost/icl/interval.hpp [4:6]
+ boost/icl/interval_base_map.hpp [5:7]
+ boost/icl/interval_base_set.hpp [5:7]
+ boost/icl/interval_bounds.hpp [4:6]
+ boost/icl/interval_combining_style.hpp [4:6]
+ boost/icl/interval_map.hpp [4:6]
+ boost/icl/interval_set.hpp [5:7]
+ boost/icl/interval_traits.hpp [4:6]
+ boost/icl/iterator.hpp [4:6]
+ boost/icl/left_open_interval.hpp [4:6]
+ boost/icl/map.hpp [4:6]
+ boost/icl/open_interval.hpp [4:6]
+ boost/icl/predicates/distinct_equal.hpp [4:6]
+ boost/icl/predicates/element_equal.hpp [4:6]
+ boost/icl/predicates/std_equal.hpp [4:6]
+ boost/icl/predicates/sub_super_set.hpp [4:6]
+ boost/icl/ptime.hpp [4:6]
+ boost/icl/rational.hpp [4:6]
+ boost/icl/right_open_interval.hpp [4:6]
+ boost/icl/separate_interval_set.hpp [4:6]
+ boost/icl/set.hpp [4:6]
+ boost/icl/split_interval_map.hpp [5:7]
+ boost/icl/split_interval_set.hpp [5:7]
+ boost/icl/type_traits/absorbs_identities.hpp [4:6]
+ boost/icl/type_traits/adds_inversely.hpp [4:6]
+ boost/icl/type_traits/codomain_type_of.hpp [4:6]
+ boost/icl/type_traits/difference.hpp [4:6]
+ boost/icl/type_traits/difference_type_of.hpp [4:6]
+ boost/icl/type_traits/domain_type_of.hpp [4:6]
+ boost/icl/type_traits/element_type_of.hpp [4:6]
+ boost/icl/type_traits/has_inverse.hpp [4:6]
+ boost/icl/type_traits/has_set_semantics.hpp [4:6]
+ boost/icl/type_traits/identity_element.hpp [4:6]
+ boost/icl/type_traits/infinity.hpp [4:6]
+ boost/icl/type_traits/interval_type_default.hpp [4:6]
+ boost/icl/type_traits/interval_type_of.hpp [4:6]
+ boost/icl/type_traits/is_associative_element_container.hpp [4:6]
+ boost/icl/type_traits/is_asymmetric_interval.hpp [4:6]
+ boost/icl/type_traits/is_combinable.hpp [4:6]
+ boost/icl/type_traits/is_concept_equivalent.hpp [4:6]
+ boost/icl/type_traits/is_container.hpp [4:6]
+ boost/icl/type_traits/is_continuous.hpp [4:6]
+ boost/icl/type_traits/is_continuous_interval.hpp [4:6]
+ boost/icl/type_traits/is_discrete.hpp [4:6]
+ boost/icl/type_traits/is_discrete_interval.hpp [4:6]
+ boost/icl/type_traits/is_element_container.hpp [4:6]
+ boost/icl/type_traits/is_icl_container.hpp [4:6]
+ boost/icl/type_traits/is_increasing.hpp [4:6]
+ boost/icl/type_traits/is_interval.hpp [4:6]
+ boost/icl/type_traits/is_interval_container.hpp [4:6]
+ boost/icl/type_traits/is_interval_joiner.hpp [4:6]
+ boost/icl/type_traits/is_interval_separator.hpp [4:6]
+ boost/icl/type_traits/is_interval_splitter.hpp [4:6]
+ boost/icl/type_traits/is_key_container_of.hpp [4:6]
+ boost/icl/type_traits/is_map.hpp [4:6]
+ boost/icl/type_traits/is_numeric.hpp [4:6]
+ boost/icl/type_traits/is_set.hpp [4:6]
+ boost/icl/type_traits/is_total.hpp [4:6]
+ boost/icl/type_traits/no_type.hpp [4:6]
+ boost/icl/type_traits/predicate.hpp [4:6]
+ boost/icl/type_traits/rep_type_of.hpp [4:6]
+ boost/icl/type_traits/segment_type_of.hpp [4:6]
+ boost/icl/type_traits/size.hpp [4:6]
+ boost/icl/type_traits/size_type_of.hpp [4:6]
+ boost/icl/type_traits/succ_pred.hpp [4:6]
+ boost/icl/type_traits/to_string.hpp [6:8]
+ boost/icl/type_traits/type_to_string.hpp [4:6]
+ boost/icl/type_traits/unit_element.hpp [4:6]
+ boost/icl/type_traits/value_size.hpp [6:8]
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 72.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/icl/associative_element_container.hpp [4:6]
+ boost/icl/associative_interval_container.hpp [4:6]
+ boost/icl/closed_interval.hpp [4:6]
+ boost/icl/concept/comparable.hpp [4:6]
+ boost/icl/concept/container.hpp [4:6]
+ boost/icl/concept/element_associator.hpp [4:6]
+ boost/icl/concept/element_map.hpp [4:6]
+ boost/icl/concept/element_set.hpp [4:6]
+ boost/icl/concept/element_set_value.hpp [4:6]
+ boost/icl/concept/interval.hpp [4:6]
+ boost/icl/concept/interval_associator.hpp [4:6]
+ boost/icl/concept/interval_associator_base.hpp [4:6]
+ boost/icl/concept/interval_bounds.hpp [4:6]
+ boost/icl/concept/interval_map.hpp [4:6]
+ boost/icl/concept/interval_set.hpp [4:6]
+ boost/icl/concept/interval_set_value.hpp [4:6]
+ boost/icl/concept/joinable.hpp [4:6]
+ boost/icl/concept/map_value.hpp [4:6]
+ boost/icl/concept/set_value.hpp [4:6]
+ boost/icl/continuous_interval.hpp [4:6]
+ boost/icl/detail/associated_value.hpp [4:6]
+ boost/icl/detail/boost_config.hpp [4:6]
+ boost/icl/detail/concept_check.hpp [4:6]
+ boost/icl/detail/design_config.hpp [5:7]
+ boost/icl/detail/element_comparer.hpp [4:6]
+ boost/icl/detail/element_iterator.hpp [4:6]
+ boost/icl/detail/exclusive_less_than.hpp [4:6]
+ boost/icl/detail/interval_map_algo.hpp [4:6]
+ boost/icl/detail/interval_morphism.hpp [4:6]
+ boost/icl/detail/interval_set_algo.hpp [4:6]
+ boost/icl/detail/interval_subset_comparer.hpp [4:6]
+ boost/icl/detail/map_algo.hpp [4:6]
+ boost/icl/detail/mapped_reference.hpp [4:6]
+ boost/icl/detail/notate.hpp [6:8]
+ boost/icl/detail/on_absorbtion.hpp [4:6]
+ boost/icl/detail/relation_state.hpp [5:7]
+ boost/icl/detail/set_algo.hpp [6:8]
+ boost/icl/detail/std_set.hpp [4:6]
+ boost/icl/detail/subset_comparer.hpp [4:6]
+ boost/icl/discrete_interval.hpp [4:6]
+ boost/icl/dynamic_interval_traits.hpp [4:6]
+ boost/icl/functors.hpp [4:6]
+ boost/icl/gregorian.hpp [4:6]
+ boost/icl/impl_config.hpp [5:7]
+ boost/icl/interval.hpp [4:6]
+ boost/icl/interval_base_map.hpp [5:7]
+ boost/icl/interval_base_set.hpp [5:7]
+ boost/icl/interval_bounds.hpp [4:6]
+ boost/icl/interval_combining_style.hpp [4:6]
+ boost/icl/interval_map.hpp [4:6]
+ boost/icl/interval_set.hpp [5:7]
+ boost/icl/interval_traits.hpp [4:6]
+ boost/icl/iterator.hpp [4:6]
+ boost/icl/left_open_interval.hpp [4:6]
+ boost/icl/map.hpp [4:6]
+ boost/icl/open_interval.hpp [4:6]
+ boost/icl/predicates/distinct_equal.hpp [4:6]
+ boost/icl/predicates/element_equal.hpp [4:6]
+ boost/icl/predicates/std_equal.hpp [4:6]
+ boost/icl/predicates/sub_super_set.hpp [4:6]
+ boost/icl/ptime.hpp [4:6]
+ boost/icl/rational.hpp [4:6]
+ boost/icl/right_open_interval.hpp [4:6]
+ boost/icl/separate_interval_set.hpp [4:6]
+ boost/icl/set.hpp [4:6]
+ boost/icl/split_interval_map.hpp [5:7]
+ boost/icl/split_interval_set.hpp [5:7]
+ boost/icl/type_traits/absorbs_identities.hpp [4:6]
+ boost/icl/type_traits/adds_inversely.hpp [4:6]
+ boost/icl/type_traits/codomain_type_of.hpp [4:6]
+ boost/icl/type_traits/difference.hpp [4:6]
+ boost/icl/type_traits/difference_type_of.hpp [4:6]
+ boost/icl/type_traits/domain_type_of.hpp [4:6]
+ boost/icl/type_traits/element_type_of.hpp [4:6]
+ boost/icl/type_traits/has_inverse.hpp [4:6]
+ boost/icl/type_traits/has_set_semantics.hpp [4:6]
+ boost/icl/type_traits/identity_element.hpp [4:6]
+ boost/icl/type_traits/infinity.hpp [4:6]
+ boost/icl/type_traits/interval_type_default.hpp [4:6]
+ boost/icl/type_traits/interval_type_of.hpp [4:6]
+ boost/icl/type_traits/is_associative_element_container.hpp [4:6]
+ boost/icl/type_traits/is_asymmetric_interval.hpp [4:6]
+ boost/icl/type_traits/is_combinable.hpp [4:6]
+ boost/icl/type_traits/is_concept_equivalent.hpp [4:6]
+ boost/icl/type_traits/is_container.hpp [4:6]
+ boost/icl/type_traits/is_continuous.hpp [4:6]
+ boost/icl/type_traits/is_continuous_interval.hpp [4:6]
+ boost/icl/type_traits/is_discrete.hpp [4:6]
+ boost/icl/type_traits/is_discrete_interval.hpp [4:6]
+ boost/icl/type_traits/is_element_container.hpp [4:6]
+ boost/icl/type_traits/is_icl_container.hpp [4:6]
+ boost/icl/type_traits/is_increasing.hpp [4:6]
+ boost/icl/type_traits/is_interval.hpp [4:6]
+ boost/icl/type_traits/is_interval_container.hpp [4:6]
+ boost/icl/type_traits/is_interval_joiner.hpp [4:6]
+ boost/icl/type_traits/is_interval_separator.hpp [4:6]
+ boost/icl/type_traits/is_interval_splitter.hpp [4:6]
+ boost/icl/type_traits/is_key_container_of.hpp [4:6]
+ boost/icl/type_traits/is_map.hpp [4:6]
+ boost/icl/type_traits/is_numeric.hpp [4:6]
+ boost/icl/type_traits/is_set.hpp [4:6]
+ boost/icl/type_traits/is_total.hpp [4:6]
+ boost/icl/type_traits/no_type.hpp [4:6]
+ boost/icl/type_traits/predicate.hpp [4:6]
+ boost/icl/type_traits/rep_type_of.hpp [4:6]
+ boost/icl/type_traits/segment_type_of.hpp [4:6]
+ boost/icl/type_traits/size.hpp [4:6]
+ boost/icl/type_traits/size_type_of.hpp [4:6]
+ boost/icl/type_traits/succ_pred.hpp [4:6]
+ boost/icl/type_traits/to_string.hpp [6:8]
+ boost/icl/type_traits/type_to_string.hpp [4:6]
+ boost/icl/type_traits/unit_element.hpp [4:6]
+ boost/icl/type_traits/value_size.hpp [6:8]
+
+SKIP LicenseRef-scancode-unknown-license-reference 346344a00d161342f7e58de27d74c5b4
+BELONGS ya.make
+ License text:
+ // Copyright 2011 John Maddock. Distributed under the Boost
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-unknown-license-reference
+ Score : 11.00
+ Match type : INTRO
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/unknown-license-reference.LICENSE
+ Files with this license:
+ boost/multiprecision/detail/functions/constants.hpp [1:1]
+ boost/multiprecision/detail/functions/trig.hpp [3:3]
+
+KEEP BSL-1.0 3483ad6500a5ec5c1eed3d256900b057
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/boykov_kolmogorov_max_flow.hpp at line 29, boost/graph/write_dimacs.hpp at line 29
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/boykov_kolmogorov_max_flow.hpp [28:30]
+ boost/graph/write_dimacs.hpp [28:30]
+
+KEEP BSL-1.0 35406de8a58b639b59f98aff7f113718
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/concurrent_queues/sync_bounded_queue.hpp at line 8, boost/thread/concurrent_queues/sync_deque.hpp at line 8, boost/thread/concurrent_queues/sync_queue.hpp at line 8, boost/thread/sync_bounded_queue.hpp at line 8, boost/thread/sync_queue.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/thread/concurrent_queues/sync_bounded_queue.hpp [6:8]
+ boost/thread/concurrent_queues/sync_deque.hpp [6:8]
+ boost/thread/concurrent_queues/sync_queue.hpp [6:8]
+ boost/thread/sync_bounded_queue.hpp [6:8]
+ boost/thread/sync_queue.hpp [6:8]
+
+KEEP BSL-1.0 35e6ad25ab77c8494504ce9164a0c424
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/remove_extent.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/detail/remove_extent.hpp [3:6]
+
+KEEP BSL-1.0 367057ccd06eefdae0d0832b1147fc90
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/category.hpp at line 5, boost/range/distance.hpp at line 5, boost/range/functions.hpp at line 5, boost/range/pointer.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/category.hpp [3:6]
+ boost/range/distance.hpp [3:6]
+ boost/range/functions.hpp [3:6]
+ boost/range/pointer.hpp [3:6]
+
+KEEP BSL-1.0 3710ab6c91fd312a2333398b653684bb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/r_c_shortest_paths.hpp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.30
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/r_c_shortest_paths.hpp [4:6]
+
+KEEP NCSA AND MIT 38e692f6c8ccfacfe3b038aeea770be4
+BELONGS ya.make
+ License text:
+ // This file is dual licensed under the MIT and the University of Illinois Open
+ // Source Licenses. See LICENSE.TXT for details.
+ Scancode info:
+ Original SPDX id: NCSA
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.otm.illinois.edu/faculty/forms/opensource.asp, https://spdx.org/licenses/NCSA
+ Files with this license:
+ boost/chrono/io/time_point_io.hpp [11:12]
+ Scancode info:
+ Original SPDX id: MIT
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://opensource.org/licenses/mit-license.php, https://spdx.org/licenses/MIT
+ Files with this license:
+ boost/chrono/io/time_point_io.hpp [11:12]
+
+KEEP BSL-1.0 39f2e337dcbf282f5b5d0240c455d33e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/allocator_traits.hpp at line 5, boost/container/scoped_allocator.hpp at line 5, boost/intrusive/pointer_traits.hpp at line 5
+ License text:
+ // (C) Copyright Pablo Halpern 2009. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/allocator_traits.hpp [3:5]
+ boost/container/scoped_allocator.hpp [3:5]
+ boost/intrusive/pointer_traits.hpp [3:5]
+
+KEEP BSL-1.0 3a69d67d5822ad2987752d722c44ca2a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/detail/shared_dir_helpers.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2007-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/detail/shared_dir_helpers.hpp [3:5]
+
+KEEP BSL-1.0 3a9fe8c6f3dc56da59da6bb70a0cef2c
+BELONGS ya.make
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.44
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/align.hpp [5:6]
+ boost/align/aligned_alloc.hpp [5:6]
+ boost/align/aligned_allocator.hpp [5:6]
+ boost/align/aligned_allocator_adaptor.hpp [5:6]
+ boost/align/aligned_allocator_adaptor_forward.hpp [5:6]
+ boost/align/aligned_allocator_forward.hpp [5:6]
+ boost/align/aligned_delete.hpp [5:6]
+ boost/align/aligned_delete_forward.hpp [5:6]
+ boost/align/assume_aligned.hpp [8:9]
+ boost/align/detail/aligned_alloc.hpp [5:6]
+ boost/align/detail/aligned_alloc_android.hpp [5:6]
+ boost/align/detail/aligned_alloc_macos.hpp [5:6]
+ boost/align/detail/aligned_alloc_msvc.hpp [5:6]
+ boost/align/detail/aligned_alloc_posix.hpp [5:6]
+ boost/align/detail/aligned_alloc_sunos.hpp [5:6]
+ boost/align/detail/assume_aligned.hpp [8:9]
+ boost/align/detail/assume_aligned_clang.hpp [5:6]
+ boost/align/detail/assume_aligned_gcc.hpp [8:9]
+ boost/align/detail/assume_aligned_intel.hpp [8:9]
+ boost/align/detail/assume_aligned_msvc.hpp [8:9]
+ boost/align/detail/is_aligned.hpp [5:6]
+ boost/align/is_aligned.hpp [5:6]
+ boost/core/allocator_access.hpp [5:6]
+ boost/core/empty_value.hpp [5:6]
+ boost/smart_ptr/allocate_shared_array.hpp [5:6]
+
+KEEP BSL-1.0 3b7ba38d3301bd8fa20e5d271abee5fe
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/mfc_map.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/mfc_map.hpp [3:6]
+
+KEEP MIT 3cf5c004fe748204a7f55c19948b5231
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: MIT
+ Score : 100.00
+ Match type : TEXT
+ Links : http://opensource.org/licenses/mit-license.php, https://spdx.org/licenses/MIT
+ Files with this license:
+ boost/geometry/srs/projections/impl/aasincos.hpp [17:33]
+ boost/geometry/srs/projections/impl/adjlon.hpp [17:33]
+ boost/geometry/srs/projections/impl/dms_parser.hpp [24:40]
+ boost/geometry/srs/projections/impl/pj_auth.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_datum_set.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_datums.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_ell_set.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_ellps.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_fwd.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_gauss.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_init.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_inv.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_mlfn.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_msfn.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_param.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_phi2.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_qsfn.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_transform.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_tsfn.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_units.hpp [21:37]
+ boost/geometry/srs/projections/impl/pj_zpoly1.hpp [21:37]
+ boost/geometry/srs/projections/impl/proj_mdist.hpp [17:33]
+ boost/geometry/srs/projections/impl/projects.hpp [21:37]
+ boost/geometry/srs/projections/proj/aea.hpp [30:46]
+ boost/geometry/srs/projections/proj/aeqd.hpp [30:46]
+ boost/geometry/srs/projections/proj/airy.hpp [30:46]
+ boost/geometry/srs/projections/proj/aitoff.hpp [31:47]
+ boost/geometry/srs/projections/proj/august.hpp [26:42]
+ boost/geometry/srs/projections/proj/bacon.hpp [26:42]
+ boost/geometry/srs/projections/proj/bipc.hpp [26:42]
+ boost/geometry/srs/projections/proj/boggs.hpp [26:42]
+ boost/geometry/srs/projections/proj/bonne.hpp [26:42]
+ boost/geometry/srs/projections/proj/cass.hpp [26:42]
+ boost/geometry/srs/projections/proj/cc.hpp [26:42]
+ boost/geometry/srs/projections/proj/cea.hpp [26:42]
+ boost/geometry/srs/projections/proj/chamb.hpp [26:42]
+ boost/geometry/srs/projections/proj/collg.hpp [26:42]
+ boost/geometry/srs/projections/proj/crast.hpp [26:42]
+ boost/geometry/srs/projections/proj/denoy.hpp [26:42]
+ boost/geometry/srs/projections/proj/eck1.hpp [26:42]
+ boost/geometry/srs/projections/proj/eck2.hpp [26:42]
+ boost/geometry/srs/projections/proj/eck3.hpp [26:42]
+ boost/geometry/srs/projections/proj/eck4.hpp [26:42]
+ boost/geometry/srs/projections/proj/eck5.hpp [26:42]
+ boost/geometry/srs/projections/proj/eqc.hpp [26:42]
+ boost/geometry/srs/projections/proj/eqdc.hpp [26:42]
+ boost/geometry/srs/projections/proj/etmerc.hpp [28:44]
+ boost/geometry/srs/projections/proj/fahey.hpp [26:42]
+ boost/geometry/srs/projections/proj/fouc_s.hpp [26:42]
+ boost/geometry/srs/projections/proj/gall.hpp [26:42]
+ boost/geometry/srs/projections/proj/geocent.hpp [32:48]
+ boost/geometry/srs/projections/proj/geos.hpp [31:47]
+ boost/geometry/srs/projections/proj/gins8.hpp [26:42]
+ boost/geometry/srs/projections/proj/gn_sinu.hpp [26:42]
+ boost/geometry/srs/projections/proj/gnom.hpp [26:42]
+ boost/geometry/srs/projections/proj/goode.hpp [26:42]
+ boost/geometry/srs/projections/proj/hammer.hpp [26:42]
+ boost/geometry/srs/projections/proj/hatano.hpp [26:42]
+ boost/geometry/srs/projections/proj/healpix.hpp [34:50]
+ boost/geometry/srs/projections/proj/igh.hpp [26:42]
+ boost/geometry/srs/projections/proj/imw_p.hpp [26:42]
+ boost/geometry/srs/projections/proj/isea.hpp [29:45]
+ boost/geometry/srs/projections/proj/krovak.hpp [31:47]
+ boost/geometry/srs/projections/proj/labrd.hpp [26:42]
+ boost/geometry/srs/projections/proj/laea.hpp [26:42]
+ boost/geometry/srs/projections/proj/lagrng.hpp [26:42]
+ boost/geometry/srs/projections/proj/larr.hpp [26:42]
+ boost/geometry/srs/projections/proj/lask.hpp [26:42]
+ boost/geometry/srs/projections/proj/latlong.hpp [32:48]
+ boost/geometry/srs/projections/proj/lcc.hpp [26:42]
+ boost/geometry/srs/projections/proj/lcca.hpp [26:42]
+ boost/geometry/srs/projections/proj/loxim.hpp [26:42]
+ boost/geometry/srs/projections/proj/lsat.hpp [26:42]
+ boost/geometry/srs/projections/proj/mbt_fps.hpp [26:42]
+ boost/geometry/srs/projections/proj/mbtfpp.hpp [26:42]
+ boost/geometry/srs/projections/proj/mbtfpq.hpp [26:42]
+ boost/geometry/srs/projections/proj/merc.hpp [26:42]
+ boost/geometry/srs/projections/proj/mill.hpp [26:42]
+ boost/geometry/srs/projections/proj/mod_ster.hpp [26:42]
+ boost/geometry/srs/projections/proj/moll.hpp [26:42]
+ boost/geometry/srs/projections/proj/natearth.hpp [39:55]
+ boost/geometry/srs/projections/proj/nell.hpp [26:42]
+ boost/geometry/srs/projections/proj/nell_h.hpp [26:42]
+ boost/geometry/srs/projections/proj/nocol.hpp [26:42]
+ boost/geometry/srs/projections/proj/nsper.hpp [26:42]
+ boost/geometry/srs/projections/proj/nzmg.hpp [31:47]
+ boost/geometry/srs/projections/proj/ob_tran.hpp [26:42]
+ boost/geometry/srs/projections/proj/ocea.hpp [26:42]
+ boost/geometry/srs/projections/proj/oea.hpp [26:42]
+ boost/geometry/srs/projections/proj/omerc.hpp [28:44]
+ boost/geometry/srs/projections/proj/ortho.hpp [26:42]
+ boost/geometry/srs/projections/proj/poly.hpp [26:42]
+ boost/geometry/srs/projections/proj/putp2.hpp [26:42]
+ boost/geometry/srs/projections/proj/putp3.hpp [26:42]
+ boost/geometry/srs/projections/proj/putp4p.hpp [26:42]
+ boost/geometry/srs/projections/proj/putp5.hpp [26:42]
+ boost/geometry/srs/projections/proj/putp6.hpp [26:42]
+ boost/geometry/srs/projections/proj/qsc.hpp [58:74]
+ boost/geometry/srs/projections/proj/robin.hpp [26:42]
+ boost/geometry/srs/projections/proj/rouss.hpp [28:44]
+ boost/geometry/srs/projections/proj/rpoly.hpp [26:42]
+ boost/geometry/srs/projections/proj/sconics.hpp [26:42]
+ boost/geometry/srs/projections/proj/somerc.hpp [26:42]
+ boost/geometry/srs/projections/proj/stere.hpp [26:42]
+ boost/geometry/srs/projections/proj/sterea.hpp [28:44]
+ boost/geometry/srs/projections/proj/sts.hpp [26:42]
+ boost/geometry/srs/projections/proj/tcc.hpp [26:42]
+ boost/geometry/srs/projections/proj/tcea.hpp [26:42]
+ boost/geometry/srs/projections/proj/tmerc.hpp [26:42]
+ boost/geometry/srs/projections/proj/tpeqd.hpp [26:42]
+ boost/geometry/srs/projections/proj/urm5.hpp [26:42]
+ boost/geometry/srs/projections/proj/urmfps.hpp [26:42]
+ boost/geometry/srs/projections/proj/vandg.hpp [26:42]
+ boost/geometry/srs/projections/proj/vandg2.hpp [26:42]
+ boost/geometry/srs/projections/proj/vandg4.hpp [26:42]
+ boost/geometry/srs/projections/proj/wag2.hpp [26:42]
+ boost/geometry/srs/projections/proj/wag3.hpp [26:42]
+ boost/geometry/srs/projections/proj/wag7.hpp [26:42]
+ boost/geometry/srs/projections/proj/wink1.hpp [26:42]
+ boost/geometry/srs/projections/proj/wink2.hpp [26:42]
+
+KEEP BSL-1.0 3d79e3d57a57a8bd7ad187d68dc979f1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/detail/random_provider_posix.ipp at line 9, boost/uuid/detail/random_provider_wincrypt.ipp at line 9
+ License text:
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/uuid/detail/random_provider_posix.ipp [8:10]
+ boost/uuid/detail/random_provider_wincrypt.ipp [8:10]
+
+KEEP BSL-1.0 3dc626ff78bf44fdf3a99b804f677fe6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cast.hpp at line 7, boost/cstdint.hpp at line 8, boost/math/special_functions/bernoulli.hpp at line 9, boost/math/special_functions/detail/bernoulli_details.hpp at line 5, boost/math/special_functions/detail/polygamma.hpp at line 9, boost/math/special_functions/polygamma.hpp at line 9, boost/math/tools/atomic.hpp at line 5, boost/numeric/conversion/detail/old_numeric_cast.hpp at line 6, boost/polymorphic_cast.hpp at line 7, boost/polymorphic_pointer_cast.hpp at line 5
+ License text:
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/cast.hpp [5:7]
+ boost/cstdint.hpp [6:8]
+ boost/math/special_functions/bernoulli.hpp [7:9]
+ boost/math/special_functions/detail/bernoulli_details.hpp [3:5]
+ boost/math/special_functions/detail/polygamma.hpp [7:9]
+ boost/math/special_functions/polygamma.hpp [7:9]
+ boost/math/tools/atomic.hpp [3:5]
+ boost/numeric/conversion/detail/old_numeric_cast.hpp [4:6]
+ boost/polymorphic_cast.hpp [5:7]
+ boost/polymorphic_pointer_cast.hpp [3:5]
+
+KEEP BSL-1.0 3e0c1cf439330b613e9a358372456112
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/assign.hpp at line 5, boost/assign/assignment_exception.hpp at line 5, boost/assign/list_inserter.hpp at line 5, boost/assign/list_of.hpp at line 5, boost/assign/std.hpp at line 5, boost/assign/std/deque.hpp at line 5, boost/assign/std/list.hpp at line 5, boost/assign/std/map.hpp at line 5, boost/assign/std/queue.hpp at line 5, boost/assign/std/set.hpp at line 5, boost/assign/std/slist.hpp at line 5, boost/assign/std/stack.hpp at line 5, boost/assign/std/vector.hpp at line 5, boost/range.hpp at line 5, boost/range/begin.hpp at line 5, boost/range/config.hpp at line 5, boost/range/const_iterator.hpp at line 5, boost/range/const_reverse_iterator.hpp at line 5, boost/range/detail/begin.hpp at line 5, boost/range/detail/common.hpp at line 5, boost/range/detail/detail_str.hpp at line 5, boost/range/detail/difference_type.hpp at line 5, boost/range/detail/empty.hpp at line 5, boost/range/detail/end.hpp at line 5, boost/range/detail/implementation_help.hpp at line 5, boost/range/detail/sfinae.hpp at line 5, boost/range/detail/size_type.hpp at line 5, boost/range/detail/sizer.hpp at line 5, boost/range/detail/value_type.hpp at line 5, boost/range/difference_type.hpp at line 5, boost/range/empty.hpp at line 5, boost/range/end.hpp at line 5, boost/range/iterator.hpp at line 5, boost/range/metafunctions.hpp at line 5, boost/range/mutable_iterator.hpp at line 5, boost/range/rbegin.hpp at line 5, boost/range/reference.hpp at line 5, boost/range/rend.hpp at line 5, boost/range/result_iterator.hpp at line 5, boost/range/reverse_iterator.hpp at line 5, boost/range/reverse_result_iterator.hpp at line 5, boost/range/size.hpp at line 5, boost/range/size_type.hpp at line 5, boost/range/sub_range.hpp at line 6, boost/range/value_type.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/assign.hpp [3:6]
+ boost/assign/assignment_exception.hpp [3:6]
+ boost/assign/list_inserter.hpp [3:6]
+ boost/assign/list_of.hpp [3:6]
+ boost/assign/std.hpp [3:6]
+ boost/assign/std/deque.hpp [3:6]
+ boost/assign/std/list.hpp [3:6]
+ boost/assign/std/map.hpp [3:6]
+ boost/assign/std/queue.hpp [3:6]
+ boost/assign/std/set.hpp [3:6]
+ boost/assign/std/slist.hpp [3:6]
+ boost/assign/std/stack.hpp [3:6]
+ boost/assign/std/vector.hpp [3:6]
+ boost/range.hpp [3:6]
+ boost/range/begin.hpp [3:6]
+ boost/range/config.hpp [3:6]
+ boost/range/const_iterator.hpp [3:6]
+ boost/range/const_reverse_iterator.hpp [3:6]
+ boost/range/detail/begin.hpp [3:6]
+ boost/range/detail/common.hpp [3:6]
+ boost/range/detail/detail_str.hpp [3:6]
+ boost/range/detail/difference_type.hpp [3:6]
+ boost/range/detail/empty.hpp [3:6]
+ boost/range/detail/end.hpp [3:6]
+ boost/range/detail/implementation_help.hpp [3:6]
+ boost/range/detail/sfinae.hpp [3:6]
+ boost/range/detail/size_type.hpp [3:6]
+ boost/range/detail/sizer.hpp [3:6]
+ boost/range/detail/value_type.hpp [3:6]
+ boost/range/difference_type.hpp [3:6]
+ boost/range/empty.hpp [3:6]
+ boost/range/end.hpp [3:6]
+ boost/range/iterator.hpp [3:6]
+ boost/range/metafunctions.hpp [3:6]
+ boost/range/mutable_iterator.hpp [3:6]
+ boost/range/rbegin.hpp [3:6]
+ boost/range/reference.hpp [3:6]
+ boost/range/rend.hpp [3:6]
+ boost/range/result_iterator.hpp [3:6]
+ boost/range/reverse_iterator.hpp [3:6]
+ boost/range/reverse_result_iterator.hpp [3:6]
+ boost/range/size.hpp [3:6]
+ boost/range/size_type.hpp [3:6]
+ boost/range/sub_range.hpp [4:7]
+ boost/range/value_type.hpp [3:6]
+
+KEEP BSL-1.0 3e6cbcd55ea14c3be54705bb0cc42706
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/phoenix/core.hpp at line 5
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/phoenix/core.hpp [4:5]
+
+KEEP BSL-1.0 40b79e770b4583bc7a2b54d225914470
+BELONGS ya.make
+ License text:
+ // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : REFERENCE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/typeof/vector50.hpp [6:6]
+
+KEEP Public-Domain 4364b0fe48ff1582f5b0ef1163db6465
+BELONGS ya.make
+ License text:
+ // MurmurHash3 was written by Austin Appleby, and is placed in the public
+ // domain. The author hereby disclaims copyright to this source code.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-public-domain
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.linfo.org/publicdomain.html, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/public-domain.LICENSE
+ Files with this license:
+ boost/container_hash/hash.hpp [13:14]
+
+SKIP LicenseRef-scancode-proprietary-license 448f6f7563b34b8597aafd34f62a4215
+BELONGS ya.make
+ License text:
+ Get a free, non-commercial download of MKL at
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-proprietary-license
+ Score : 100.00
+ Match type : REFERENCE
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/proprietary-license.LICENSE
+ Files with this license:
+ boost/numeric/odeint/external/mkl/mkl_operations.hpp [7:7]
+
+KEEP BSL-1.0 4558629d40e3aec5b6182de5189b66d3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/accumulators.hpp at line 7, boost/accumulators/accumulators_fwd.hpp at line 6, boost/accumulators/framework/accumulator_base.hpp at line 6, boost/accumulators/framework/accumulator_concept.hpp at line 6, boost/accumulators/framework/accumulator_set.hpp at line 6, boost/accumulators/framework/accumulators/droppable_accumulator.hpp at line 6, boost/accumulators/framework/accumulators/external_accumulator.hpp at line 6, boost/accumulators/framework/accumulators/reference_accumulator.hpp at line 6, boost/accumulators/framework/depends_on.hpp at line 6, boost/accumulators/framework/external.hpp at line 6, boost/accumulators/framework/extractor.hpp at line 6, boost/accumulators/framework/features.hpp at line 6, boost/accumulators/framework/parameters/accumulator.hpp at line 6, boost/accumulators/framework/parameters/sample.hpp at line 6, boost/accumulators/framework/parameters/weight.hpp at line 6, boost/accumulators/framework/parameters/weights.hpp at line 6, boost/accumulators/numeric/functional.hpp at line 6, boost/accumulators/numeric/functional/complex.hpp at line 6, boost/accumulators/numeric/functional/valarray.hpp at line 6, boost/accumulators/numeric/functional/vector.hpp at line 6, boost/accumulators/numeric/functional_fwd.hpp at line 6, boost/accumulators/statistics.hpp at line 7, boost/accumulators/statistics/count.hpp at line 6, boost/accumulators/statistics/error_of.hpp at line 6, boost/accumulators/statistics/error_of_mean.hpp at line 6, boost/accumulators/statistics/max.hpp at line 6, boost/accumulators/statistics/mean.hpp at line 6, boost/accumulators/statistics/min.hpp at line 6, boost/accumulators/statistics/moment.hpp at line 6, boost/accumulators/statistics/parameters/quantile_probability.hpp at line 6, boost/accumulators/statistics/stats.hpp at line 7, boost/accumulators/statistics/sum.hpp at line 6, boost/accumulators/statistics/variates/covariate.hpp at line 6, boost/accumulators/statistics/with_error.hpp at line 6, boost/accumulators/statistics_fwd.hpp at line 6
+ License text:
+ // Copyright 2005 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/accumulators.hpp [5:7]
+ boost/accumulators/accumulators_fwd.hpp [4:6]
+ boost/accumulators/framework/accumulator_base.hpp [4:6]
+ boost/accumulators/framework/accumulator_concept.hpp [4:6]
+ boost/accumulators/framework/accumulator_set.hpp [4:6]
+ boost/accumulators/framework/accumulators/droppable_accumulator.hpp [4:6]
+ boost/accumulators/framework/accumulators/external_accumulator.hpp [4:6]
+ boost/accumulators/framework/accumulators/reference_accumulator.hpp [4:6]
+ boost/accumulators/framework/depends_on.hpp [4:6]
+ boost/accumulators/framework/external.hpp [4:6]
+ boost/accumulators/framework/extractor.hpp [4:6]
+ boost/accumulators/framework/features.hpp [4:6]
+ boost/accumulators/framework/parameters/accumulator.hpp [4:6]
+ boost/accumulators/framework/parameters/sample.hpp [4:6]
+ boost/accumulators/framework/parameters/weight.hpp [4:6]
+ boost/accumulators/framework/parameters/weights.hpp [4:6]
+ boost/accumulators/numeric/functional.hpp [4:6]
+ boost/accumulators/numeric/functional/complex.hpp [4:6]
+ boost/accumulators/numeric/functional/valarray.hpp [4:6]
+ boost/accumulators/numeric/functional/vector.hpp [4:6]
+ boost/accumulators/numeric/functional_fwd.hpp [4:6]
+ boost/accumulators/statistics.hpp [5:7]
+ boost/accumulators/statistics/count.hpp [4:6]
+ boost/accumulators/statistics/error_of.hpp [4:6]
+ boost/accumulators/statistics/error_of_mean.hpp [4:6]
+ boost/accumulators/statistics/max.hpp [4:6]
+ boost/accumulators/statistics/mean.hpp [4:6]
+ boost/accumulators/statistics/min.hpp [4:6]
+ boost/accumulators/statistics/moment.hpp [4:6]
+ boost/accumulators/statistics/parameters/quantile_probability.hpp [4:6]
+ boost/accumulators/statistics/stats.hpp [5:7]
+ boost/accumulators/statistics/sum.hpp [4:6]
+ boost/accumulators/statistics/variates/covariate.hpp [4:6]
+ boost/accumulators/statistics/with_error.hpp [4:6]
+ boost/accumulators/statistics_fwd.hpp [4:6]
+
+KEEP BSL-1.0 45e6804496b42c113a568514b7edcf98
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/collection_traits_detail.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.74
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/detail/collection_traits_detail.hpp [4:8]
+
+KEEP BSL-1.0 464dd62f778620e8b4f71d787b2b1c6e
+BELONGS libs/serialization/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/archive_exception.hpp at line 14, boost/archive/basic_archive.hpp at line 14, boost/archive/basic_binary_iarchive.hpp at line 21, boost/archive/basic_binary_iprimitive.hpp at line 25, boost/archive/basic_binary_oarchive.hpp at line 14, boost/archive/basic_binary_oprimitive.hpp at line 14, boost/archive/basic_streambuf_locale_saver.hpp at line 15, boost/archive/basic_text_iarchive.hpp at line 14, boost/archive/basic_text_iprimitive.hpp at line 14, boost/archive/basic_text_oarchive.hpp at line 14, boost/archive/basic_text_oprimitive.hpp at line 14, boost/archive/basic_xml_archive.hpp at line 14, boost/archive/basic_xml_iarchive.hpp at line 14, boost/archive/basic_xml_oarchive.hpp at line 14, boost/archive/binary_iarchive.hpp at line 14, boost/archive/binary_iarchive_impl.hpp at line 14, boost/archive/binary_oarchive.hpp at line 14, boost/archive/binary_oarchive_impl.hpp at line 14, boost/archive/binary_wiarchive.hpp at line 14, boost/archive/binary_woarchive.hpp at line 14, boost/archive/codecvt_null.hpp at line 14, boost/archive/detail/abi_prefix.hpp at line 6, boost/archive/detail/abi_suffix.hpp at line 6, boost/archive/detail/archive_serializer_map.hpp at line 15, boost/archive/detail/basic_iarchive.hpp at line 14, boost/archive/detail/basic_iserializer.hpp at line 14, boost/archive/detail/basic_oarchive.hpp at line 14, boost/archive/detail/basic_oserializer.hpp at line 14, boost/archive/detail/basic_pointer_iserializer.hpp at line 15, boost/archive/detail/basic_pointer_oserializer.hpp at line 15, boost/archive/detail/basic_serializer.hpp at line 14, boost/archive/detail/basic_serializer_map.hpp at line 14, boost/archive/detail/check.hpp at line 20, boost/archive/detail/common_iarchive.hpp at line 14, boost/archive/detail/common_oarchive.hpp at line 14, boost/archive/detail/helper_collection.hpp at line 14, boost/archive/detail/interface_iarchive.hpp at line 18, boost/archive/detail/interface_oarchive.hpp at line 14, boost/archive/detail/iserializer.hpp at line 20, boost/archive/detail/oserializer.hpp at line 20, boost/archive/detail/polymorphic_iarchive_route.hpp at line 14, boost/archive/detail/polymorphic_oarchive_route.hpp at line 14, boost/archive/dinkumware.hpp at line 14, boost/archive/impl/basic_binary_iarchive.ipp at line 6, boost/archive/impl/basic_binary_iprimitive.ipp at line 6, boost/archive/impl/basic_binary_oarchive.ipp at line 6, boost/archive/impl/basic_binary_oprimitive.ipp at line 6, boost/archive/impl/basic_text_iarchive.ipp at line 6, boost/archive/impl/basic_text_oarchive.ipp at line 6, boost/archive/impl/basic_text_oprimitive.ipp at line 6, boost/archive/impl/basic_xml_grammar.hpp at line 14, boost/archive/impl/basic_xml_iarchive.ipp at line 6, boost/archive/iterators/base64_exception.hpp at line 14, boost/archive/iterators/base64_from_binary.hpp at line 14, boost/archive/iterators/binary_from_base64.hpp at line 14, boost/archive/iterators/dataflow.hpp at line 14, boost/archive/iterators/dataflow_exception.hpp at line 14, boost/archive/iterators/escape.hpp at line 14, boost/archive/iterators/insert_linebreaks.hpp at line 14, boost/archive/iterators/istream_iterator.hpp at line 14, boost/archive/iterators/mb_from_wchar.hpp at line 14, boost/archive/iterators/ostream_iterator.hpp at line 14, boost/archive/iterators/remove_whitespace.hpp at line 14, boost/archive/iterators/transform_width.hpp at line 14, boost/archive/iterators/unescape.hpp at line 14, boost/archive/iterators/wchar_from_mb.hpp at line 14, boost/archive/iterators/xml_escape.hpp at line 14, boost/archive/iterators/xml_unescape.hpp at line 14, boost/archive/iterators/xml_unescape_exception.hpp at line 14, boost/archive/polymorphic_binary_iarchive.hpp at line 14, boost/archive/polymorphic_binary_oarchive.hpp at line 14, boost/archive/polymorphic_iarchive.hpp at line 14, boost/archive/polymorphic_oarchive.hpp at line 14, boost/archive/polymorphic_text_iarchive.hpp at line 14, boost/archive/polymorphic_text_oarchive.hpp at line 14, boost/archive/polymorphic_text_wiarchive.hpp at line 14, boost/archive/polymorphic_text_woarchive.hpp at line 14, boost/archive/polymorphic_xml_iarchive.hpp at line 14, boost/archive/polymorphic_xml_oarchive.hpp at line 14, boost/archive/polymorphic_xml_wiarchive.hpp at line 14, boost/archive/polymorphic_xml_woarchive.hpp at line 14, boost/archive/text_iarchive.hpp at line 14, boost/archive/text_oarchive.hpp at line 14, boost/archive/text_wiarchive.hpp at line 14, boost/archive/text_woarchive.hpp at line 14, boost/archive/tmpdir.hpp at line 14, boost/archive/wcslen.hpp at line 14, boost/archive/xml_archive_exception.hpp at line 14, boost/archive/xml_iarchive.hpp at line 14, boost/archive/xml_oarchive.hpp at line 14, boost/archive/xml_wiarchive.hpp at line 14, boost/archive/xml_woarchive.hpp at line 14, boost/serialization/access.hpp at line 14, boost/serialization/archive_input_unordered_map.hpp at line 16, boost/serialization/archive_input_unordered_set.hpp at line 15, boost/serialization/assume_abstract.hpp at line 14, boost/serialization/base_object.hpp at line 14, boost/serialization/binary_object.hpp at line 14, boost/serialization/boost_unordered_map.hpp at line 16, boost/serialization/boost_unordered_set.hpp at line 15, boost/serialization/collection_traits.hpp at line 14, boost/serialization/collections_load_imp.hpp at line 18, boost/serialization/collections_save_imp.hpp at line 14, boost/serialization/complex.hpp at line 15, boost/serialization/deque.hpp at line 14, boost/serialization/detail/is_default_constructible.hpp at line 14, boost/serialization/detail/stack_constructor.hpp at line 14, boost/serialization/ephemeral.hpp at line 14, boost/serialization/export.hpp at line 14, boost/serialization/extended_type_info.hpp at line 14, boost/serialization/extended_type_info_no_rtti.hpp at line 16, boost/serialization/extended_type_info_typeid.hpp at line 16, boost/serialization/factory.hpp at line 14, boost/serialization/force_include.hpp at line 14, boost/serialization/forward_list.hpp at line 14, boost/serialization/hash_collections_load_imp.hpp at line 15, boost/serialization/hash_collections_save_imp.hpp at line 14, boost/serialization/hash_map.hpp at line 15, boost/serialization/hash_set.hpp at line 14, boost/serialization/level.hpp at line 14, boost/serialization/level_enum.hpp at line 14, boost/serialization/list.hpp at line 14, boost/serialization/map.hpp at line 15, boost/serialization/nvp.hpp at line 14, boost/serialization/priority_queue.hpp at line 14, boost/serialization/queue.hpp at line 14, boost/serialization/serialization.hpp at line 21, boost/serialization/set.hpp at line 14, boost/serialization/shared_ptr.hpp at line 14, boost/serialization/shared_ptr_132.hpp at line 14, boost/serialization/shared_ptr_helper.hpp at line 14, boost/serialization/slist.hpp at line 14, boost/serialization/split_free.hpp at line 14, boost/serialization/split_member.hpp at line 14, boost/serialization/stack.hpp at line 14, boost/serialization/string.hpp at line 15, boost/serialization/tracking.hpp at line 14, boost/serialization/tracking_enum.hpp at line 14, boost/serialization/traits.hpp at line 14, boost/serialization/type_info_implementation.hpp at line 14, boost/serialization/unique_ptr.hpp at line 14, boost/serialization/unordered_collections_load_imp.hpp at line 16, boost/serialization/unordered_collections_save_imp.hpp at line 15, boost/serialization/unordered_map.hpp at line 16, boost/serialization/unordered_set.hpp at line 15, boost/serialization/utility.hpp at line 15, boost/serialization/valarray.hpp at line 14, boost/serialization/vector.hpp at line 15, boost/serialization/vector_135.hpp at line 7, boost/serialization/version.hpp at line 14, boost/serialization/weak_ptr.hpp at line 14, libs/serialization/src/archive_exception.cpp at line 6, libs/serialization/src/basic_archive.cpp at line 6, libs/serialization/src/basic_iarchive.cpp at line 6, libs/serialization/src/basic_iserializer.cpp at line 6, libs/serialization/src/basic_oarchive.cpp at line 6, libs/serialization/src/basic_oserializer.cpp at line 6, libs/serialization/src/basic_pointer_iserializer.cpp at line 6, libs/serialization/src/basic_pointer_oserializer.cpp at line 6, libs/serialization/src/basic_serializer_map.cpp at line 6, libs/serialization/src/basic_text_iprimitive.cpp at line 6, libs/serialization/src/basic_text_oprimitive.cpp at line 6, libs/serialization/src/basic_text_wiprimitive.cpp at line 6, libs/serialization/src/basic_text_woprimitive.cpp at line 6, libs/serialization/src/basic_xml_archive.cpp at line 6, libs/serialization/src/basic_xml_grammar.ipp at line 6, libs/serialization/src/binary_iarchive.cpp at line 6, libs/serialization/src/binary_oarchive.cpp at line 6, libs/serialization/src/binary_wiarchive.cpp at line 6, libs/serialization/src/binary_woarchive.cpp at line 6, libs/serialization/src/extended_type_info.cpp at line 6, libs/serialization/src/extended_type_info_no_rtti.cpp at line 7, libs/serialization/src/extended_type_info_typeid.cpp at line 7, libs/serialization/src/polymorphic_iarchive.cpp at line 6, libs/serialization/src/polymorphic_oarchive.cpp at line 6, libs/serialization/src/stl_port.cpp at line 6, libs/serialization/src/text_iarchive.cpp at line 6, libs/serialization/src/text_oarchive.cpp at line 6, libs/serialization/src/text_wiarchive.cpp at line 6, libs/serialization/src/text_woarchive.cpp at line 6, libs/serialization/src/xml_archive_exception.cpp at line 6, libs/serialization/src/xml_grammar.cpp at line 6, libs/serialization/src/xml_iarchive.cpp at line 6, libs/serialization/src/xml_oarchive.cpp at line 6, libs/serialization/src/xml_wgrammar.cpp at line 6, libs/serialization/src/xml_wiarchive.cpp at line 6, libs/serialization/src/xml_woarchive.cpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.74
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/archive/archive_exception.hpp [13:17]
+ boost/archive/basic_archive.hpp [13:17]
+ boost/archive/basic_binary_iarchive.hpp [20:24]
+ boost/archive/basic_binary_iprimitive.hpp [24:28]
+ boost/archive/basic_binary_oarchive.hpp [13:17]
+ boost/archive/basic_binary_oprimitive.hpp [13:17]
+ boost/archive/basic_streambuf_locale_saver.hpp [14:18]
+ boost/archive/basic_text_iarchive.hpp [13:17]
+ boost/archive/basic_text_iprimitive.hpp [13:17]
+ boost/archive/basic_text_oarchive.hpp [13:17]
+ boost/archive/basic_text_oprimitive.hpp [13:17]
+ boost/archive/basic_xml_archive.hpp [13:17]
+ boost/archive/basic_xml_iarchive.hpp [13:17]
+ boost/archive/basic_xml_oarchive.hpp [13:17]
+ boost/archive/binary_iarchive.hpp [13:17]
+ boost/archive/binary_iarchive_impl.hpp [13:17]
+ boost/archive/binary_oarchive.hpp [13:17]
+ boost/archive/binary_oarchive_impl.hpp [13:17]
+ boost/archive/binary_wiarchive.hpp [13:17]
+ boost/archive/binary_woarchive.hpp [13:17]
+ boost/archive/codecvt_null.hpp [13:17]
+ boost/archive/detail/abi_prefix.hpp [5:9]
+ boost/archive/detail/abi_suffix.hpp [5:9]
+ boost/archive/detail/archive_serializer_map.hpp [14:18]
+ boost/archive/detail/basic_iarchive.hpp [13:17]
+ boost/archive/detail/basic_iserializer.hpp [13:17]
+ boost/archive/detail/basic_oarchive.hpp [13:17]
+ boost/archive/detail/basic_oserializer.hpp [13:17]
+ boost/archive/detail/basic_pointer_iserializer.hpp [14:18]
+ boost/archive/detail/basic_pointer_oserializer.hpp [14:18]
+ boost/archive/detail/basic_serializer.hpp [13:17]
+ boost/archive/detail/basic_serializer_map.hpp [13:17]
+ boost/archive/detail/check.hpp [19:23]
+ boost/archive/detail/common_iarchive.hpp [13:17]
+ boost/archive/detail/common_oarchive.hpp [13:17]
+ boost/archive/detail/helper_collection.hpp [13:17]
+ boost/archive/detail/interface_iarchive.hpp [17:21]
+ boost/archive/detail/interface_oarchive.hpp [13:17]
+ boost/archive/detail/iserializer.hpp [19:23]
+ boost/archive/detail/oserializer.hpp [19:23]
+ boost/archive/detail/polymorphic_iarchive_route.hpp [13:17]
+ boost/archive/detail/polymorphic_oarchive_route.hpp [13:17]
+ boost/archive/dinkumware.hpp [13:17]
+ boost/archive/impl/basic_binary_iarchive.ipp [5:9]
+ boost/archive/impl/basic_binary_iprimitive.ipp [5:9]
+ boost/archive/impl/basic_binary_oarchive.ipp [5:9]
+ boost/archive/impl/basic_binary_oprimitive.ipp [5:9]
+ boost/archive/impl/basic_text_iarchive.ipp [5:9]
+ boost/archive/impl/basic_text_oarchive.ipp [5:9]
+ boost/archive/impl/basic_text_oprimitive.ipp [5:9]
+ boost/archive/impl/basic_xml_grammar.hpp [13:17]
+ boost/archive/impl/basic_xml_iarchive.ipp [5:9]
+ boost/archive/iterators/base64_exception.hpp [13:17]
+ boost/archive/iterators/base64_from_binary.hpp [13:17]
+ boost/archive/iterators/binary_from_base64.hpp [13:17]
+ boost/archive/iterators/dataflow.hpp [13:17]
+ boost/archive/iterators/dataflow_exception.hpp [13:17]
+ boost/archive/iterators/escape.hpp [13:17]
+ boost/archive/iterators/insert_linebreaks.hpp [13:17]
+ boost/archive/iterators/istream_iterator.hpp [13:17]
+ boost/archive/iterators/mb_from_wchar.hpp [13:17]
+ boost/archive/iterators/ostream_iterator.hpp [13:17]
+ boost/archive/iterators/remove_whitespace.hpp [13:17]
+ boost/archive/iterators/transform_width.hpp [13:17]
+ boost/archive/iterators/unescape.hpp [13:17]
+ boost/archive/iterators/wchar_from_mb.hpp [13:17]
+ boost/archive/iterators/xml_escape.hpp [13:17]
+ boost/archive/iterators/xml_unescape.hpp [13:17]
+ boost/archive/iterators/xml_unescape_exception.hpp [13:17]
+ boost/archive/polymorphic_binary_iarchive.hpp [13:17]
+ boost/archive/polymorphic_binary_oarchive.hpp [13:17]
+ boost/archive/polymorphic_iarchive.hpp [13:17]
+ boost/archive/polymorphic_oarchive.hpp [13:17]
+ boost/archive/polymorphic_text_iarchive.hpp [13:17]
+ boost/archive/polymorphic_text_oarchive.hpp [13:17]
+ boost/archive/polymorphic_text_wiarchive.hpp [13:17]
+ boost/archive/polymorphic_text_woarchive.hpp [13:17]
+ boost/archive/polymorphic_xml_iarchive.hpp [13:17]
+ boost/archive/polymorphic_xml_oarchive.hpp [13:17]
+ boost/archive/polymorphic_xml_wiarchive.hpp [13:17]
+ boost/archive/polymorphic_xml_woarchive.hpp [13:17]
+ boost/archive/text_iarchive.hpp [13:17]
+ boost/archive/text_oarchive.hpp [13:17]
+ boost/archive/text_wiarchive.hpp [13:17]
+ boost/archive/text_woarchive.hpp [13:17]
+ boost/archive/tmpdir.hpp [13:17]
+ boost/archive/wcslen.hpp [13:17]
+ boost/archive/xml_archive_exception.hpp [13:17]
+ boost/archive/xml_iarchive.hpp [13:17]
+ boost/archive/xml_oarchive.hpp [13:17]
+ boost/archive/xml_wiarchive.hpp [13:17]
+ boost/archive/xml_woarchive.hpp [13:17]
+ boost/serialization/access.hpp [13:17]
+ boost/serialization/archive_input_unordered_map.hpp [15:19]
+ boost/serialization/archive_input_unordered_set.hpp [14:18]
+ boost/serialization/assume_abstract.hpp [13:17]
+ boost/serialization/base_object.hpp [13:17]
+ boost/serialization/binary_object.hpp [13:17]
+ boost/serialization/boost_unordered_map.hpp [15:19]
+ boost/serialization/boost_unordered_set.hpp [14:18]
+ boost/serialization/collection_traits.hpp [13:17]
+ boost/serialization/collections_load_imp.hpp [17:21]
+ boost/serialization/collections_save_imp.hpp [13:17]
+ boost/serialization/complex.hpp [14:18]
+ boost/serialization/deque.hpp [13:17]
+ boost/serialization/detail/is_default_constructible.hpp [13:17]
+ boost/serialization/detail/stack_constructor.hpp [13:17]
+ boost/serialization/ephemeral.hpp [13:17]
+ boost/serialization/export.hpp [13:17]
+ boost/serialization/extended_type_info.hpp [13:17]
+ boost/serialization/extended_type_info_no_rtti.hpp [15:19]
+ boost/serialization/extended_type_info_typeid.hpp [15:19]
+ boost/serialization/factory.hpp [13:17]
+ boost/serialization/force_include.hpp [13:17]
+ boost/serialization/forward_list.hpp [13:17]
+ boost/serialization/hash_collections_load_imp.hpp [14:18]
+ boost/serialization/hash_collections_save_imp.hpp [13:17]
+ boost/serialization/hash_map.hpp [14:18]
+ boost/serialization/hash_set.hpp [13:17]
+ boost/serialization/level.hpp [13:17]
+ boost/serialization/level_enum.hpp [13:17]
+ boost/serialization/list.hpp [13:17]
+ boost/serialization/map.hpp [14:18]
+ boost/serialization/nvp.hpp [13:17]
+ boost/serialization/priority_queue.hpp [13:17]
+ boost/serialization/queue.hpp [13:17]
+ boost/serialization/serialization.hpp [20:24]
+ boost/serialization/set.hpp [13:17]
+ boost/serialization/shared_ptr.hpp [13:17]
+ boost/serialization/shared_ptr_132.hpp [13:17]
+ boost/serialization/shared_ptr_helper.hpp [13:17]
+ boost/serialization/slist.hpp [13:17]
+ boost/serialization/split_free.hpp [13:17]
+ boost/serialization/split_member.hpp [13:17]
+ boost/serialization/stack.hpp [13:17]
+ boost/serialization/string.hpp [14:18]
+ boost/serialization/tracking.hpp [13:17]
+ boost/serialization/tracking_enum.hpp [13:17]
+ boost/serialization/traits.hpp [13:17]
+ boost/serialization/type_info_implementation.hpp [13:17]
+ boost/serialization/unique_ptr.hpp [13:17]
+ boost/serialization/unordered_collections_load_imp.hpp [15:19]
+ boost/serialization/unordered_collections_save_imp.hpp [14:18]
+ boost/serialization/unordered_map.hpp [15:19]
+ boost/serialization/unordered_set.hpp [14:18]
+ boost/serialization/utility.hpp [14:18]
+ boost/serialization/valarray.hpp [13:17]
+ boost/serialization/vector.hpp [14:18]
+ boost/serialization/vector_135.hpp [6:10]
+ boost/serialization/version.hpp [13:17]
+ boost/serialization/weak_ptr.hpp [13:17]
+ libs/serialization/src/archive_exception.cpp [5:9]
+ libs/serialization/src/basic_archive.cpp [5:9]
+ libs/serialization/src/basic_iarchive.cpp [5:9]
+ libs/serialization/src/basic_iserializer.cpp [5:9]
+ libs/serialization/src/basic_oarchive.cpp [5:9]
+ libs/serialization/src/basic_oserializer.cpp [5:9]
+ libs/serialization/src/basic_pointer_iserializer.cpp [5:9]
+ libs/serialization/src/basic_pointer_oserializer.cpp [5:9]
+ libs/serialization/src/basic_serializer_map.cpp [5:9]
+ libs/serialization/src/basic_text_iprimitive.cpp [5:9]
+ libs/serialization/src/basic_text_oprimitive.cpp [5:9]
+ libs/serialization/src/basic_text_wiprimitive.cpp [5:9]
+ libs/serialization/src/basic_text_woprimitive.cpp [5:9]
+ libs/serialization/src/basic_xml_archive.cpp [5:9]
+ libs/serialization/src/basic_xml_grammar.ipp [5:9]
+ libs/serialization/src/binary_iarchive.cpp [5:9]
+ libs/serialization/src/binary_oarchive.cpp [5:9]
+ libs/serialization/src/binary_wiarchive.cpp [5:9]
+ libs/serialization/src/binary_woarchive.cpp [5:9]
+ libs/serialization/src/extended_type_info.cpp [5:9]
+ libs/serialization/src/extended_type_info_no_rtti.cpp [6:10]
+ libs/serialization/src/extended_type_info_typeid.cpp [6:10]
+ libs/serialization/src/polymorphic_iarchive.cpp [5:9]
+ libs/serialization/src/polymorphic_oarchive.cpp [5:9]
+ libs/serialization/src/stl_port.cpp [5:9]
+ libs/serialization/src/text_iarchive.cpp [5:9]
+ libs/serialization/src/text_oarchive.cpp [5:9]
+ libs/serialization/src/text_wiarchive.cpp [5:9]
+ libs/serialization/src/text_woarchive.cpp [5:9]
+ libs/serialization/src/xml_archive_exception.cpp [5:9]
+ libs/serialization/src/xml_grammar.cpp [5:9]
+ libs/serialization/src/xml_iarchive.cpp [5:9]
+ libs/serialization/src/xml_oarchive.cpp [5:9]
+ libs/serialization/src/xml_wgrammar.cpp [5:9]
+ libs/serialization/src/xml_wiarchive.cpp [5:9]
+ libs/serialization/src/xml_woarchive.cpp [5:9]
+
+KEEP BSL-1.0 4685b9c982cdf2c34731d3ee55e65b45
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/named_graph.hpp at line 4
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/named_graph.hpp [3:5]
+
+KEEP BSL-1.0 476ce185bbfb7af264a4b35c8c5d052e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/detail/std_ns_begin.hpp at line 5, boost/move/detail/std_ns_end.hpp at line 5
+ License text:
+ \#// Distributed under the Boost Software License, Version 1.0.
+ \#// (See accompanying file LICENSE_1_0.txt or copy at
+ \#// http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/move/detail/std_ns_begin.hpp [4:6]
+ boost/move/detail/std_ns_end.hpp [4:6]
+
+KEEP BSL-1.0 47a0454637d4fa45d78eb2557ccd70c4
+BELONGS libs/python/ya.make libs/thread/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/aligned_storage.hpp at line 10, boost/any.hpp at line 334, boost/archive/detail/utf8_codecvt_facet.hpp at line 4, boost/archive/impl/xml_oarchive_impl.ipp at line 6, boost/archive/impl/xml_woarchive_impl.ipp at line 6, boost/bind/apply.hpp at line 10, boost/bind/arg.hpp at line 16, boost/bind/bind.hpp at line 18, boost/bind/bind_cc.hpp at line 9, boost/bind/bind_mf_cc.hpp at line 9, boost/bind/bind_template.hpp at line 9, boost/bind/make_adaptable.hpp at line 10, boost/bind/mem_fn.hpp at line 18, boost/bind/mem_fn_cc.hpp at line 9, boost/bind/mem_fn_template.hpp at line 9, boost/bind/protect.hpp at line 11, boost/blank.hpp at line 10, boost/blank_fwd.hpp at line 10, boost/concept_archetype.hpp at line 4, boost/concept_check.hpp at line 6, boost/config/detail/suffix.hpp at line 14, boost/config/workaround.hpp at line 3, boost/core/ref.hpp at line 26, boost/core/swap.hpp at line 4, boost/detail/basic_pointerbuf.hpp at line 10, boost/detail/indirect_traits.hpp at line 3, boost/detail/iterator.hpp at line 3, boost/detail/named_template_params.hpp at line 3, boost/detail/numeric_traits.hpp at line 4, boost/detail/reference_content.hpp at line 10, boost/detail/templated_streams.hpp at line 10, boost/detail/workaround.hpp at line 3, boost/foreach.hpp at line 6, boost/foreach_fwd.hpp at line 6, boost/function_output_iterator.hpp at line 3, boost/generator_iterator.hpp at line 3, boost/get_pointer.hpp at line 3, boost/graph/adj_list_serialize.hpp at line 6, boost/graph/adjacency_iterator.hpp at line 6, boost/graph/adjacency_list.hpp at line 7, boost/graph/adjacency_list_io.hpp at line 6, boost/graph/adjacency_matrix.hpp at line 7, boost/graph/astar_search.hpp at line 8, boost/graph/bandwidth.hpp at line 4, boost/graph/bellman_ford_shortest_paths.hpp at line 7, boost/graph/biconnected_components.hpp at line 5, boost/graph/boyer_myrvold_planar_test.hpp at line 5, boost/graph/breadth_first_search.hpp at line 7, boost/graph/chrobak_payne_drawing.hpp at line 5, boost/graph/connected_components.hpp at line 7, boost/graph/copy.hpp at line 7, boost/graph/core_numbers.hpp at line 7, boost/graph/create_condensation_graph.hpp at line 6, boost/graph/cuthill_mckee_ordering.hpp at line 8, boost/graph/cycle_canceling.hpp at line 6, boost/graph/dag_shortest_paths.hpp at line 6, boost/graph/depth_first_search.hpp at line 7, boost/graph/detail/adj_list_edge_iterator.hpp at line 7, boost/graph/detail/adjacency_list.hpp at line 8, boost/graph/detail/array_binary_tree.hpp at line 7, boost/graph/detail/augment.hpp at line 6, boost/graph/detail/connected_components.hpp at line 6, boost/graph/detail/d_ary_heap.hpp at line 7, boost/graph/detail/edge.hpp at line 7, boost/graph/detail/incidence_iterator.hpp at line 7, boost/graph/detail/incremental_components.hpp at line 7, boost/graph/detail/list_base.hpp at line 6, boost/graph/detail/permutation.hpp at line 3, boost/graph/detail/self_avoiding_walk.hpp at line 6, boost/graph/detail/set_adaptor.hpp at line 3, boost/graph/detail/shadow_iterator.hpp at line 3, boost/graph/detail/sparse_ordering.hpp at line 8, boost/graph/dijkstra_shortest_paths.hpp at line 6, boost/graph/dijkstra_shortest_paths_no_color_map.hpp at line 7, boost/graph/dll_import_export.hpp at line 7, boost/graph/edge_coloring.hpp at line 6, boost/graph/edge_connectivity.hpp at line 6, boost/graph/edge_list.hpp at line 6, boost/graph/edmonds_karp_max_flow.hpp at line 6, boost/graph/exception.hpp at line 6, boost/graph/filtered_graph.hpp at line 6, boost/graph/find_flow_cost.hpp at line 6, boost/graph/graph_archetypes.hpp at line 6, boost/graph/graph_as_tree.hpp at line 7, boost/graph/graph_concepts.hpp at line 9, boost/graph/graph_selectors.hpp at line 6, boost/graph/graph_test.hpp at line 6, boost/graph/graph_traits.hpp at line 6, boost/graph/graph_utility.hpp at line 7, boost/graph/graphviz.hpp at line 7, boost/graph/grid_graph.hpp at line 6, boost/graph/incremental_components.hpp at line 8, boost/graph/is_kuratowski_subgraph.hpp at line 5, boost/graph/is_straight_line_drawing.hpp at line 5, boost/graph/isomorphism.hpp at line 4, boost/graph/iteration_macros.hpp at line 6, boost/graph/iteration_macros_undef.hpp at line 6, boost/graph/johnson_all_pairs_shortest.hpp at line 6, boost/graph/king_ordering.hpp at line 8, boost/graph/kruskal_min_spanning_tree.hpp at line 7, boost/graph/leda_graph.hpp at line 9, boost/graph/lookup_edge.hpp at line 6, boost/graph/make_biconnected_planar.hpp at line 5, boost/graph/make_connected.hpp at line 5, boost/graph/make_maximal_planar.hpp at line 5, boost/graph/matrix_as_graph.hpp at line 7, boost/graph/maximum_adjacency_search.hpp at line 7, boost/graph/mcgregor_common_subgraphs.hpp at line 6, boost/graph/metric_tsp_approx.hpp at line 7, boost/graph/minimum_degree_ordering.hpp at line 7, boost/graph/named_function_params.hpp at line 6, boost/graph/neighbor_bfs.hpp at line 7, boost/graph/planar_canonical_ordering.hpp at line 5, boost/graph/planar_detail/add_edge_visitors.hpp at line 5, boost/graph/planar_detail/boyer_myrvold_impl.hpp at line 5, boost/graph/planar_detail/bucket_sort.hpp at line 5, boost/graph/planar_detail/face_handles.hpp at line 5, boost/graph/planar_detail/face_iterators.hpp at line 5, boost/graph/planar_face_traversal.hpp at line 5, boost/graph/prim_minimum_spanning_tree.hpp at line 6, boost/graph/profile.hpp at line 7, boost/graph/properties.hpp at line 6, boost/graph/property_iter_range.hpp at line 5, boost/graph/push_relabel_max_flow.hpp at line 6, boost/graph/random.hpp at line 7, boost/graph/read_dimacs.hpp at line 6, boost/graph/relax.hpp at line 6, boost/graph/reverse_graph.hpp at line 3, boost/graph/sequential_vertex_coloring.hpp at line 7, boost/graph/simple_point.hpp at line 6, boost/graph/sloan_ordering.hpp at line 7, boost/graph/smallest_last_ordering.hpp at line 6, boost/graph/stanford_graph.hpp at line 6, boost/graph/strong_components.hpp at line 7, boost/graph/subgraph.hpp at line 6, boost/graph/successive_shortest_path_nonnegative_weights.hpp at line 6, boost/graph/topological_sort.hpp at line 7, boost/graph/transitive_closure.hpp at line 4, boost/graph/transpose_graph.hpp at line 7, boost/graph/tree_traits.hpp at line 3, boost/graph/undirected_dfs.hpp at line 7, boost/graph/vector_as_graph.hpp at line 8, boost/graph/vf2_sub_graph_iso.hpp at line 10, boost/graph/visitors.hpp at line 6, boost/graph/wavefront.hpp at line 7, boost/heap/binomial_heap.hpp at line 6, boost/heap/d_ary_heap.hpp at line 6, boost/heap/detail/heap_comparison.hpp at line 6, boost/heap/detail/heap_node.hpp at line 6, boost/heap/detail/ilog2.hpp at line 6, boost/heap/detail/mutable_heap.hpp at line 6, boost/heap/detail/ordered_adaptor_iterator.hpp at line 6, boost/heap/detail/stable_heap.hpp at line 6, boost/heap/detail/tree_iterator.hpp at line 6, boost/heap/fibonacci_heap.hpp at line 6, boost/heap/heap_concepts.hpp at line 6, boost/heap/heap_merge.hpp at line 6, boost/heap/pairing_heap.hpp at line 6, boost/heap/policies.hpp at line 6, boost/heap/priority_queue.hpp at line 6, boost/heap/skew_heap.hpp at line 6, boost/implicit_cast.hpp at line 3, boost/interprocess/detail/atomic.hpp at line 8, boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp at line 17, boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp at line 21, boost/iterator/counting_iterator.hpp at line 3, boost/iterator/detail/config_def.hpp at line 5, boost/iterator/detail/config_undef.hpp at line 3, boost/iterator/detail/enable_if.hpp at line 5, boost/iterator/filter_iterator.hpp at line 5, boost/iterator/function_input_iterator.hpp at line 5, boost/iterator/function_output_iterator.hpp at line 3, boost/iterator/indirect_iterator.hpp at line 5, boost/iterator/interoperable.hpp at line 5, boost/iterator/iterator_adaptor.hpp at line 5, boost/iterator/iterator_archetypes.hpp at line 3, boost/iterator/iterator_categories.hpp at line 3, boost/iterator/iterator_concepts.hpp at line 3, boost/iterator/iterator_facade.hpp at line 5, boost/iterator/iterator_traits.hpp at line 3, boost/iterator/permutation_iterator.hpp at line 5, boost/iterator/reverse_iterator.hpp at line 5, boost/iterator/transform_iterator.hpp at line 5, boost/iterator/zip_iterator.hpp at line 5, boost/lambda/algorithm.hpp at line 6, boost/lambda/bind.hpp at line 7, boost/lambda/casts.hpp at line 7, boost/lambda/construct.hpp at line 7, boost/lambda/control_structures.hpp at line 5, boost/lambda/core.hpp at line 7, boost/lambda/detail/actions.hpp at line 6, boost/lambda/detail/arity_code.hpp at line 6, boost/lambda/detail/bind_functions.hpp at line 6, boost/lambda/detail/control_constructs_common.hpp at line 7, boost/lambda/detail/function_adaptors.hpp at line 6, boost/lambda/detail/is_instance_of.hpp at line 6, boost/lambda/detail/lambda_config.hpp at line 6, boost/lambda/detail/lambda_functor_base.hpp at line 6, boost/lambda/detail/lambda_functors.hpp at line 6, boost/lambda/detail/lambda_fwd.hpp at line 6, boost/lambda/detail/lambda_traits.hpp at line 6, boost/lambda/detail/member_ptr.hpp at line 7, boost/lambda/detail/operator_actions.hpp at line 6, boost/lambda/detail/operator_lambda_func_base.hpp at line 6, boost/lambda/detail/operator_return_type_traits.hpp at line 6, boost/lambda/detail/operators.hpp at line 6, boost/lambda/detail/ret.hpp at line 6, boost/lambda/detail/return_type_traits.hpp at line 6, boost/lambda/detail/select_functions.hpp at line 6, boost/lambda/detail/suppress_unused.hpp at line 6, boost/lambda/exceptions.hpp at line 7, boost/lambda/if.hpp at line 8, boost/lambda/lambda.hpp at line 5, boost/lambda/loops.hpp at line 8, boost/lambda/numeric.hpp at line 6, boost/lambda/switch.hpp at line 7, boost/lexical_cast.hpp at line 6, boost/lexical_cast/bad_lexical_cast.hpp at line 6, boost/lexical_cast/detail/converter_lexical.hpp at line 6, boost/lexical_cast/detail/converter_lexical_streams.hpp at line 6, boost/lexical_cast/detail/converter_numeric.hpp at line 6, boost/lexical_cast/detail/inf_nan.hpp at line 6, boost/lexical_cast/detail/is_character.hpp at line 6, boost/lexical_cast/detail/lcast_char_constants.hpp at line 6, boost/lexical_cast/detail/lcast_unsigned_converters.hpp at line 6, boost/lexical_cast/detail/widest_char.hpp at line 6, boost/lexical_cast/lexical_cast_old.hpp at line 6, boost/lexical_cast/try_lexical_convert.hpp at line 6, boost/lockfree/detail/parameter.hpp at line 6, boost/lockfree/policies.hpp at line 6, boost/pending/bucket_sorter.hpp at line 7, boost/pending/disjoint_sets.hpp at line 7, boost/pending/fibonacci_heap.hpp at line 3, boost/pending/indirect_cmp.hpp at line 7, boost/pending/is_heap.hpp at line 7, boost/pending/iterator_adaptors.hpp at line 3, boost/pending/iterator_tests.hpp at line 3, boost/pending/mutable_heap.hpp at line 7, boost/pending/mutable_queue.hpp at line 7, boost/program_options.hpp at line 3, boost/property_map/compose_property_map.hpp at line 5, boost/property_map/function_property_map.hpp at line 8, boost/property_map/parallel/parallel_property_maps.hpp at line 6, boost/property_map/parallel/vector_property_map.hpp at line 3, boost/property_map/property_map.hpp at line 6, boost/property_map/property_map_iterator.hpp at line 3, boost/property_map/shared_array_property_map.hpp at line 5, boost/property_map/transform_value_property_map.hpp at line 8, boost/property_map/vector_property_map.hpp at line 3, boost/ptr_container/detail/serialize_ptr_map_adapter.hpp at line 3, boost/ptr_container/detail/serialize_reversible_cont.hpp at line 3, boost/ptr_container/serialize_ptr_array.hpp at line 3, boost/ptr_container/serialize_ptr_container.hpp at line 3, boost/ptr_container/serialize_ptr_deque.hpp at line 3, boost/ptr_container/serialize_ptr_list.hpp at line 3, boost/ptr_container/serialize_ptr_map.hpp at line 3, boost/ptr_container/serialize_ptr_set.hpp at line 3, boost/ptr_container/serialize_ptr_vector.hpp at line 3, boost/python.hpp at line 3, boost/python/arg_from_python.hpp at line 3, boost/python/args.hpp at line 3, boost/python/args_fwd.hpp at line 3, boost/python/back_reference.hpp at line 3, boost/python/base_type_traits.hpp at line 3, boost/python/bases.hpp at line 3, boost/python/borrowed.hpp at line 3, boost/python/call.hpp at line 5, boost/python/call_method.hpp at line 5, boost/python/cast.hpp at line 3, boost/python/class.hpp at line 3, boost/python/class_fwd.hpp at line 3, boost/python/converter/arg_from_python.hpp at line 3, boost/python/converter/arg_to_python.hpp at line 3, boost/python/converter/arg_to_python_base.hpp at line 3, boost/python/converter/as_to_python_function.hpp at line 3, boost/python/converter/builtin_converters.hpp at line 3, boost/python/converter/constructor_function.hpp at line 3, boost/python/converter/context_result_converter.hpp at line 3, boost/python/converter/convertible_function.hpp at line 3, boost/python/converter/from_python.hpp at line 3, boost/python/converter/implicit.hpp at line 3, boost/python/converter/obj_mgr_arg_from_python.hpp at line 3, boost/python/converter/object_manager.hpp at line 3, boost/python/converter/pointer_type_id.hpp at line 3, boost/python/converter/pyobject_traits.hpp at line 3, boost/python/converter/pyobject_type.hpp at line 3, boost/python/converter/pytype_function.hpp at line 3, boost/python/converter/pytype_object_mgr_traits.hpp at line 3, boost/python/converter/registered.hpp at line 4, boost/python/converter/registered_pointee.hpp at line 3, boost/python/converter/registrations.hpp at line 3, boost/python/converter/registry.hpp at line 3, boost/python/converter/return_from_python.hpp at line 3, boost/python/converter/rvalue_from_python_data.hpp at line 3, boost/python/converter/shared_ptr_deleter.hpp at line 3, boost/python/converter/shared_ptr_from_python.hpp at line 4, boost/python/converter/shared_ptr_to_python.hpp at line 4, boost/python/converter/to_python_function_type.hpp at line 3, boost/python/copy_const_reference.hpp at line 3, boost/python/copy_non_const_reference.hpp at line 3, boost/python/data_members.hpp at line 3, boost/python/def.hpp at line 3, boost/python/def_visitor.hpp at line 3, boost/python/default_call_policies.hpp at line 3, boost/python/detail/aix_init_module.hpp at line 3, boost/python/detail/api_placeholder.hpp at line 3, boost/python/detail/borrowed_ptr.hpp at line 5, boost/python/detail/caller.hpp at line 5, boost/python/detail/config.hpp at line 3, boost/python/detail/construct.hpp at line 3, boost/python/detail/convertible.hpp at line 3, boost/python/detail/copy_ctor_mutates_rhs.hpp at line 3, boost/python/detail/cv_category.hpp at line 3, boost/python/detail/dealloc.hpp at line 3, boost/python/detail/decorated_type_id.hpp at line 3, boost/python/detail/decref_guard.hpp at line 3, boost/python/detail/def_helper.hpp at line 3, boost/python/detail/def_helper_fwd.hpp at line 3, boost/python/detail/defaults_def.hpp at line 5, boost/python/detail/defaults_gen.hpp at line 5, boost/python/detail/dependent.hpp at line 3, boost/python/detail/destroy.hpp at line 3, boost/python/detail/exception_handler.hpp at line 3, boost/python/detail/force_instantiate.hpp at line 3, boost/python/detail/if_else.hpp at line 3, boost/python/detail/invoke.hpp at line 5, boost/python/detail/is_auto_ptr.hpp at line 3, boost/python/detail/is_shared_ptr.hpp at line 4, boost/python/detail/is_xxx.hpp at line 3, boost/python/detail/make_keyword_range_fn.hpp at line 3, boost/python/detail/map_entry.hpp at line 3, boost/python/detail/mpl_lambda.hpp at line 3, boost/python/detail/msvc_typeinfo.hpp at line 3, boost/python/detail/none.hpp at line 3, boost/python/detail/not_specified.hpp at line 3, boost/python/detail/nullary_function_adaptor.hpp at line 3, boost/python/detail/operator_id.hpp at line 3, boost/python/detail/overloads_fwd.hpp at line 3, boost/python/detail/pointee.hpp at line 3, boost/python/detail/prefix.hpp at line 3, boost/python/detail/preprocessor.hpp at line 3, boost/python/detail/python_type.hpp at line 3, boost/python/detail/raw_pyobject.hpp at line 3, boost/python/detail/referent_storage.hpp at line 3, boost/python/detail/result.hpp at line 5, boost/python/detail/scope.hpp at line 3, boost/python/detail/signature.hpp at line 5, boost/python/detail/string_literal.hpp at line 3, boost/python/detail/target.hpp at line 5, boost/python/detail/translate_exception.hpp at line 3, boost/python/detail/type_list.hpp at line 3, boost/python/detail/type_list_impl.hpp at line 4, boost/python/detail/type_traits.hpp at line 3, boost/python/detail/unwind_type.hpp at line 3, boost/python/detail/value_is_shared_ptr.hpp at line 4, boost/python/detail/value_is_xxx.hpp at line 3, boost/python/detail/void_ptr.hpp at line 3, boost/python/detail/void_return.hpp at line 3, boost/python/detail/wrap_python.hpp at line 3, boost/python/dict.hpp at line 3, boost/python/docstring_options.hpp at line 3, boost/python/enum.hpp at line 3, boost/python/errors.hpp at line 3, boost/python/exception_translator.hpp at line 3, boost/python/exec.hpp at line 3, boost/python/extract.hpp at line 3, boost/python/handle.hpp at line 3, boost/python/handle_fwd.hpp at line 3, boost/python/has_back_reference.hpp at line 3, boost/python/implicit.hpp at line 3, boost/python/import.hpp at line 3, boost/python/init.hpp at line 5, boost/python/instance_holder.hpp at line 3, boost/python/iterator.hpp at line 3, boost/python/list.hpp at line 3, boost/python/long.hpp at line 3, boost/python/lvalue_from_pytype.hpp at line 3, boost/python/make_constructor.hpp at line 3, boost/python/make_function.hpp at line 3, boost/python/manage_new_object.hpp at line 3, boost/python/module.hpp at line 3, boost/python/module_init.hpp at line 3, boost/python/numpy/config.hpp at line 3, boost/python/object.hpp at line 3, boost/python/object/add_to_namespace.hpp at line 3, boost/python/object/class.hpp at line 3, boost/python/object/class_detail.hpp at line 3, boost/python/object/class_wrapper.hpp at line 3, boost/python/object/enum_base.hpp at line 3, boost/python/object/find_instance.hpp at line 3, boost/python/object/forward.hpp at line 3, boost/python/object/function.hpp at line 3, boost/python/object/function_doc_signature.hpp at line 3, boost/python/object/function_handle.hpp at line 3, boost/python/object/function_object.hpp at line 3, boost/python/object/inheritance.hpp at line 3, boost/python/object/inheritance_query.hpp at line 3, boost/python/object/instance.hpp at line 3, boost/python/object/iterator.hpp at line 3, boost/python/object/iterator_core.hpp at line 3, boost/python/object/life_support.hpp at line 3, boost/python/object/make_holder.hpp at line 5, boost/python/object/make_instance.hpp at line 3, boost/python/object/make_ptr_instance.hpp at line 3, boost/python/object/pointer_holder.hpp at line 5, boost/python/object/py_function.hpp at line 3, boost/python/object/stl_iterator_core.hpp at line 3, boost/python/object/value_holder.hpp at line 5, boost/python/object/value_holder_fwd.hpp at line 3, boost/python/object_attributes.hpp at line 3, boost/python/object_core.hpp at line 3, boost/python/object_fwd.hpp at line 3, boost/python/object_items.hpp at line 3, boost/python/object_operators.hpp at line 3, boost/python/object_protocol.hpp at line 3, boost/python/object_protocol_core.hpp at line 3, boost/python/object_slices.hpp at line 3, boost/python/opaque_pointer_converter.hpp at line 3, boost/python/operators.hpp at line 3, boost/python/other.hpp at line 7, boost/python/overloads.hpp at line 3, boost/python/pointee.hpp at line 3, boost/python/proxy.hpp at line 3, boost/python/ptr.hpp at line 7, boost/python/pure_virtual.hpp at line 3, boost/python/raw_function.hpp at line 3, boost/python/refcount.hpp at line 3, boost/python/reference_existing_object.hpp at line 3, boost/python/register_ptr_to_python.hpp at line 3, boost/python/return_arg.hpp at line 3, boost/python/return_by_value.hpp at line 3, boost/python/return_internal_reference.hpp at line 3, boost/python/return_opaque_pointer.hpp at line 3, boost/python/return_value_policy.hpp at line 3, boost/python/scope.hpp at line 3, boost/python/self.hpp at line 3, boost/python/signature.hpp at line 5, boost/python/slice_nil.hpp at line 3, boost/python/ssize_t.hpp at line 3, boost/python/stl_iterator.hpp at line 3, boost/python/str.hpp at line 3, boost/python/tag.hpp at line 3, boost/python/to_python_converter.hpp at line 3, boost/python/to_python_indirect.hpp at line 3, boost/python/to_python_value.hpp at line 4, boost/python/tuple.hpp at line 3, boost/python/type_id.hpp at line 3, boost/python/with_custodian_and_ward.hpp at line 3, boost/range/algorithm.hpp at line 10, boost/range/numeric.hpp at line 13, boost/range/numeric.hpp at line 3, boost/range/numeric.hpp at line 8, boost/serialization/detail/shared_count_132.hpp at line 16, boost/serialization/throw_exception.hpp at line 15, boost/signals2/detail/auto_buffer.hpp at line 3, boost/signals2/detail/lwm_nop.hpp at line 8, boost/signals2/detail/lwm_pthreads.hpp at line 8, boost/signals2/detail/lwm_win32_cs.hpp at line 9, boost/signals2/mutex.hpp at line 8, boost/smart_ptr/bad_weak_ptr.hpp at line 16, boost/smart_ptr/detail/atomic_count_pt.hpp at line 10, boost/smart_ptr/detail/atomic_count_solaris.hpp at line 12, boost/smart_ptr/detail/atomic_count_win32.hpp at line 16, boost/smart_ptr/detail/lightweight_mutex.hpp at line 16, boost/smart_ptr/detail/lwm_nop.hpp at line 16, boost/smart_ptr/detail/lwm_pthreads.hpp at line 16, boost/smart_ptr/detail/lwm_win32_cs.hpp at line 17, boost/smart_ptr/detail/quick_allocator.hpp at line 17, boost/smart_ptr/detail/shared_count.hpp at line 17, boost/smart_ptr/detail/sp_counted_base.hpp at line 16, boost/smart_ptr/detail/sp_counted_base_nt.hpp at line 17, boost/smart_ptr/detail/sp_counted_base_pt.hpp at line 17, boost/smart_ptr/detail/sp_counted_impl.hpp at line 17, boost/stacktrace.hpp at line 4, boost/stacktrace/detail/addr2line_impls.hpp at line 4, boost/stacktrace/detail/collect_msvc.ipp at line 4, boost/stacktrace/detail/collect_noop.ipp at line 4, boost/stacktrace/detail/collect_unwind.ipp at line 4, boost/stacktrace/detail/frame_decl.hpp at line 4, boost/stacktrace/detail/frame_msvc.ipp at line 4, boost/stacktrace/detail/frame_noop.ipp at line 4, boost/stacktrace/detail/frame_unwind.ipp at line 4, boost/stacktrace/detail/libbacktrace_impls.hpp at line 4, boost/stacktrace/detail/location_from_symbol.hpp at line 4, boost/stacktrace/detail/pop_options.h at line 4, boost/stacktrace/detail/push_options.h at line 4, boost/stacktrace/detail/safe_dump_noop.ipp at line 4, boost/stacktrace/detail/safe_dump_posix.ipp at line 4, boost/stacktrace/detail/safe_dump_win.ipp at line 4, boost/stacktrace/detail/to_hex_array.hpp at line 4, boost/stacktrace/detail/unwind_base_impls.hpp at line 4, boost/stacktrace/frame.hpp at line 4, boost/stacktrace/safe_dump_to.hpp at line 4, boost/stacktrace/stacktrace.hpp at line 4, boost/stacktrace/stacktrace_fwd.hpp at line 4, boost/thread/caller_context.hpp at line 3, boost/thread/completion_latch.hpp at line 2, boost/thread/detail/counter.hpp at line 2, boost/thread/detail/force_cast.hpp at line 5, boost/thread/detail/lockable_wrapper.hpp at line 2, boost/thread/detail/move.hpp at line 2, boost/thread/detail/platform.hpp at line 4, boost/thread/detail/singleton.hpp at line 5, boost/thread/detail/thread.hpp at line 4, boost/thread/detail/thread_group.hpp at line 4, boost/thread/detail/thread_interruption.hpp at line 4, boost/thread/exceptional_ptr.hpp at line 2, boost/thread/externally_locked.hpp at line 3, boost/thread/externally_locked_stream.hpp at line 3, boost/thread/is_locked_by_this_thread.hpp at line 3, boost/thread/latch.hpp at line 2, boost/thread/lock_algorithms.hpp at line 2, boost/thread/lock_factories.hpp at line 2, boost/thread/lock_guard.hpp at line 2, boost/thread/lock_options.hpp at line 2, boost/thread/lock_traits.hpp at line 2, boost/thread/lock_types.hpp at line 2, boost/thread/lockable_traits.hpp at line 2, boost/thread/locks.hpp at line 2, boost/thread/ostream_buffer.hpp at line 3, boost/thread/pthread/condition_variable.hpp at line 4, boost/thread/pthread/condition_variable_fwd.hpp at line 4, boost/thread/pthread/mutex.hpp at line 6, boost/thread/pthread/recursive_mutex.hpp at line 6, boost/thread/pthread/thread_data.hpp at line 4, boost/thread/pthread/thread_heap_alloc.hpp at line 2, boost/thread/reverse_lock.hpp at line 2, boost/thread/scoped_thread.hpp at line 2, boost/thread/shared_lock_guard.hpp at line 2, boost/thread/strict_lock.hpp at line 2, boost/thread/synchronized_value.hpp at line 4, boost/thread/testable_mutex.hpp at line 3, boost/thread/thread_functors.hpp at line 2, boost/thread/thread_guard.hpp at line 2, boost/thread/tss.hpp at line 4, boost/thread/win32/condition_variable.hpp at line 4, boost/thread/win32/mfc_thread_init.hpp at line 4, boost/thread/win32/mutex.hpp at line 6, boost/thread/win32/thread_data.hpp at line 4, boost/thread/win32/thread_heap_alloc.hpp at line 2, boost/tuple/detail/tuple_basic.hpp at line 6, boost/tuple/tuple.hpp at line 6, boost/tuple/tuple_comparison.hpp at line 7, boost/tuple/tuple_io.hpp at line 7, boost/type.hpp at line 3, boost/type_traits/aligned_storage.hpp at line 10, boost/type_traits/floating_point_promotion.hpp at line 3, boost/type_traits/integral_promotion.hpp at line 3, boost/type_traits/promote.hpp at line 3, boost/units/absolute.hpp at line 8, boost/units/base_dimension.hpp at line 8, boost/units/base_unit.hpp at line 8, boost/units/base_units/angle/arcminute.hpp at line 8, boost/units/base_units/angle/arcsecond.hpp at line 8, boost/units/base_units/angle/degree.hpp at line 8, boost/units/base_units/angle/gradian.hpp at line 8, boost/units/base_units/angle/radian.hpp at line 8, boost/units/base_units/angle/revolution.hpp at line 8, boost/units/base_units/angle/steradian.hpp at line 8, boost/units/base_units/astronomical/astronomical_unit.hpp at line 8, boost/units/base_units/astronomical/light_day.hpp at line 8, boost/units/base_units/astronomical/light_hour.hpp at line 8, boost/units/base_units/astronomical/light_minute.hpp at line 8, boost/units/base_units/astronomical/light_second.hpp at line 8, boost/units/base_units/astronomical/light_year.hpp at line 8, boost/units/base_units/astronomical/parsec.hpp at line 8, boost/units/base_units/cgs/biot.hpp at line 8, boost/units/base_units/cgs/centimeter.hpp at line 8, boost/units/base_units/cgs/gram.hpp at line 8, boost/units/base_units/imperial/conversions.hpp at line 8, boost/units/base_units/imperial/drachm.hpp at line 8, boost/units/base_units/imperial/fluid_ounce.hpp at line 8, boost/units/base_units/imperial/foot.hpp at line 8, boost/units/base_units/imperial/furlong.hpp at line 8, boost/units/base_units/imperial/gallon.hpp at line 8, boost/units/base_units/imperial/gill.hpp at line 8, boost/units/base_units/imperial/grain.hpp at line 8, boost/units/base_units/imperial/hundredweight.hpp at line 8, boost/units/base_units/imperial/inch.hpp at line 8, boost/units/base_units/imperial/league.hpp at line 8, boost/units/base_units/imperial/mile.hpp at line 8, boost/units/base_units/imperial/ounce.hpp at line 8, boost/units/base_units/imperial/pint.hpp at line 8, boost/units/base_units/imperial/pound.hpp at line 8, boost/units/base_units/imperial/quart.hpp at line 8, boost/units/base_units/imperial/quarter.hpp at line 8, boost/units/base_units/imperial/stone.hpp at line 8, boost/units/base_units/imperial/thou.hpp at line 8, boost/units/base_units/imperial/ton.hpp at line 8, boost/units/base_units/imperial/yard.hpp at line 8, boost/units/base_units/information/bit.hpp at line 7, boost/units/base_units/information/byte.hpp at line 7, boost/units/base_units/information/hartley.hpp at line 7, boost/units/base_units/information/nat.hpp at line 7, boost/units/base_units/information/shannon.hpp at line 7, boost/units/base_units/metric/angstrom.hpp at line 8, boost/units/base_units/metric/are.hpp at line 8, boost/units/base_units/metric/atmosphere.hpp at line 8, boost/units/base_units/metric/bar.hpp at line 8, boost/units/base_units/metric/barn.hpp at line 8, boost/units/base_units/metric/day.hpp at line 8, boost/units/base_units/metric/fermi.hpp at line 8, boost/units/base_units/metric/hectare.hpp at line 8, boost/units/base_units/metric/hour.hpp at line 8, boost/units/base_units/metric/knot.hpp at line 8, boost/units/base_units/metric/liter.hpp at line 8, boost/units/base_units/metric/micron.hpp at line 8, boost/units/base_units/metric/minute.hpp at line 8, boost/units/base_units/metric/mmHg.hpp at line 8, boost/units/base_units/metric/nautical_mile.hpp at line 8, boost/units/base_units/metric/ton.hpp at line 8, boost/units/base_units/metric/torr.hpp at line 8, boost/units/base_units/metric/year.hpp at line 8, boost/units/base_units/si/ampere.hpp at line 8, boost/units/base_units/si/candela.hpp at line 8, boost/units/base_units/si/kelvin.hpp at line 8, boost/units/base_units/si/kilogram.hpp at line 8, boost/units/base_units/si/meter.hpp at line 8, boost/units/base_units/si/mole.hpp at line 8, boost/units/base_units/si/second.hpp at line 8, boost/units/base_units/temperature/celsius.hpp at line 8, boost/units/base_units/temperature/conversions.hpp at line 8, boost/units/base_units/temperature/fahrenheit.hpp at line 8, boost/units/base_units/us/cup.hpp at line 8, boost/units/base_units/us/dram.hpp at line 8, boost/units/base_units/us/fluid_dram.hpp at line 8, boost/units/base_units/us/fluid_ounce.hpp at line 8, boost/units/base_units/us/foot.hpp at line 8, boost/units/base_units/us/gallon.hpp at line 8, boost/units/base_units/us/gill.hpp at line 8, boost/units/base_units/us/grain.hpp at line 8, boost/units/base_units/us/hundredweight.hpp at line 8, boost/units/base_units/us/inch.hpp at line 8, boost/units/base_units/us/mil.hpp at line 8, boost/units/base_units/us/mile.hpp at line 8, boost/units/base_units/us/minim.hpp at line 8, boost/units/base_units/us/ounce.hpp at line 8, boost/units/base_units/us/pint.hpp at line 8, boost/units/base_units/us/pound.hpp at line 8, boost/units/base_units/us/pound_force.hpp at line 8, boost/units/base_units/us/quart.hpp at line 8, boost/units/base_units/us/tablespoon.hpp at line 8, boost/units/base_units/us/teaspoon.hpp at line 8, boost/units/base_units/us/ton.hpp at line 8, boost/units/base_units/us/yard.hpp at line 8, boost/units/cmath.hpp at line 8, boost/units/config.hpp at line 8, boost/units/conversion.hpp at line 8, boost/units/derived_dimension.hpp at line 8, boost/units/detail/absolute_impl.hpp at line 8, boost/units/detail/cmath_impl.hpp at line 8, boost/units/detail/conversion_impl.hpp at line 8, boost/units/detail/dim_impl.hpp at line 8, boost/units/detail/dimension_impl.hpp at line 8, boost/units/detail/dimension_list.hpp at line 8, boost/units/detail/dimensionless_unit.hpp at line 8, boost/units/detail/heterogeneous_conversion.hpp at line 8, boost/units/detail/linear_algebra.hpp at line 8, boost/units/detail/one.hpp at line 8, boost/units/detail/ordinal.hpp at line 8, boost/units/detail/prevent_redefinition.hpp at line 8, boost/units/detail/push_front_if.hpp at line 8, boost/units/detail/push_front_or_add.hpp at line 8, boost/units/detail/sort.hpp at line 8, boost/units/detail/static_rational_power.hpp at line 8, boost/units/detail/unscale.hpp at line 8, boost/units/detail/utility.hpp at line 8, boost/units/dim.hpp at line 8, boost/units/dimension.hpp at line 8, boost/units/dimensionless_quantity.hpp at line 8, boost/units/dimensionless_type.hpp at line 8, boost/units/dimensionless_unit.hpp at line 8, boost/units/get_dimension.hpp at line 8, boost/units/get_system.hpp at line 8, boost/units/heterogeneous_system.hpp at line 8, boost/units/homogeneous_system.hpp at line 8, boost/units/io.hpp at line 8, boost/units/is_dim.hpp at line 8, boost/units/is_dimension_list.hpp at line 8, boost/units/is_dimensionless.hpp at line 8, boost/units/is_dimensionless_quantity.hpp at line 8, boost/units/is_dimensionless_unit.hpp at line 8, boost/units/is_quantity.hpp at line 8, boost/units/is_quantity_of_dimension.hpp at line 8, boost/units/is_quantity_of_system.hpp at line 8, boost/units/is_unit.hpp at line 8, boost/units/is_unit_of_dimension.hpp at line 8, boost/units/is_unit_of_system.hpp at line 8, boost/units/lambda.hpp at line 8, boost/units/limits.hpp at line 8, boost/units/make_scaled_unit.hpp at line 8, boost/units/make_system.hpp at line 8, boost/units/operators.hpp at line 8, boost/units/physical_dimensions.hpp at line 8, boost/units/physical_dimensions/absorbed_dose.hpp at line 8, boost/units/physical_dimensions/acceleration.hpp at line 8, boost/units/physical_dimensions/action.hpp at line 8, boost/units/physical_dimensions/activity.hpp at line 8, boost/units/physical_dimensions/amount.hpp at line 8, boost/units/physical_dimensions/angular_acceleration.hpp at line 8, boost/units/physical_dimensions/angular_momentum.hpp at line 8, boost/units/physical_dimensions/angular_velocity.hpp at line 8, boost/units/physical_dimensions/area.hpp at line 8, boost/units/physical_dimensions/capacitance.hpp at line 8, boost/units/physical_dimensions/conductance.hpp at line 8, boost/units/physical_dimensions/conductivity.hpp at line 8, boost/units/physical_dimensions/current.hpp at line 8, boost/units/physical_dimensions/dose_equivalent.hpp at line 8, boost/units/physical_dimensions/dynamic_viscosity.hpp at line 8, boost/units/physical_dimensions/electric_charge.hpp at line 8, boost/units/physical_dimensions/electric_potential.hpp at line 8, boost/units/physical_dimensions/energy.hpp at line 8, boost/units/physical_dimensions/energy_density.hpp at line 8, boost/units/physical_dimensions/force.hpp at line 8, boost/units/physical_dimensions/frequency.hpp at line 8, boost/units/physical_dimensions/heat_capacity.hpp at line 8, boost/units/physical_dimensions/illuminance.hpp at line 8, boost/units/physical_dimensions/impedance.hpp at line 8, boost/units/physical_dimensions/inductance.hpp at line 8, boost/units/physical_dimensions/information.hpp at line 7, boost/units/physical_dimensions/kinematic_viscosity.hpp at line 8, boost/units/physical_dimensions/length.hpp at line 8, boost/units/physical_dimensions/luminance.hpp at line 8, boost/units/physical_dimensions/luminous_flux.hpp at line 8, boost/units/physical_dimensions/luminous_intensity.hpp at line 8, boost/units/physical_dimensions/magnetic_field_intensity.hpp at line 8, boost/units/physical_dimensions/magnetic_flux.hpp at line 8, boost/units/physical_dimensions/magnetic_flux_density.hpp at line 8, boost/units/physical_dimensions/mass.hpp at line 8, boost/units/physical_dimensions/mass_density.hpp at line 8, boost/units/physical_dimensions/molar_energy.hpp at line 8, boost/units/physical_dimensions/molar_heat_capacity.hpp at line 8, boost/units/physical_dimensions/moment_of_inertia.hpp at line 8, boost/units/physical_dimensions/momentum.hpp at line 8, boost/units/physical_dimensions/permeability.hpp at line 8, boost/units/physical_dimensions/permittivity.hpp at line 8, boost/units/physical_dimensions/plane_angle.hpp at line 8, boost/units/physical_dimensions/power.hpp at line 8, boost/units/physical_dimensions/pressure.hpp at line 8, boost/units/physical_dimensions/reluctance.hpp at line 8, boost/units/physical_dimensions/resistance.hpp at line 8, boost/units/physical_dimensions/resistivity.hpp at line 8, boost/units/physical_dimensions/solid_angle.hpp at line 8, boost/units/physical_dimensions/specific_energy.hpp at line 8, boost/units/physical_dimensions/specific_heat_capacity.hpp at line 8, boost/units/physical_dimensions/specific_volume.hpp at line 8, boost/units/physical_dimensions/stress.hpp at line 8, boost/units/physical_dimensions/surface_density.hpp at line 8, boost/units/physical_dimensions/surface_tension.hpp at line 8, boost/units/physical_dimensions/temperature.hpp at line 8, boost/units/physical_dimensions/thermal_conductivity.hpp at line 8, boost/units/physical_dimensions/time.hpp at line 8, boost/units/physical_dimensions/torque.hpp at line 8, boost/units/physical_dimensions/velocity.hpp at line 8, boost/units/physical_dimensions/volume.hpp at line 8, boost/units/physical_dimensions/wavenumber.hpp at line 8, boost/units/pow.hpp at line 8, boost/units/quantity.hpp at line 8, boost/units/reduce_unit.hpp at line 8, boost/units/scale.hpp at line 8, boost/units/scaled_base_unit.hpp at line 8, boost/units/static_constant.hpp at line 8, boost/units/static_rational.hpp at line 8, boost/units/systems/abstract.hpp at line 8, boost/units/systems/angle/degrees.hpp at line 8, boost/units/systems/angle/gradians.hpp at line 8, boost/units/systems/angle/revolutions.hpp at line 8, boost/units/systems/cgs.hpp at line 8, boost/units/systems/cgs/acceleration.hpp at line 8, boost/units/systems/cgs/area.hpp at line 8, boost/units/systems/cgs/base.hpp at line 8, boost/units/systems/cgs/current.hpp at line 8, boost/units/systems/cgs/dimensionless.hpp at line 8, boost/units/systems/cgs/dynamic_viscosity.hpp at line 8, boost/units/systems/cgs/energy.hpp at line 8, boost/units/systems/cgs/force.hpp at line 8, boost/units/systems/cgs/frequency.hpp at line 8, boost/units/systems/cgs/io.hpp at line 8, boost/units/systems/cgs/kinematic_viscosity.hpp at line 8, boost/units/systems/cgs/length.hpp at line 8, boost/units/systems/cgs/mass.hpp at line 8, boost/units/systems/cgs/mass_density.hpp at line 8, boost/units/systems/cgs/momentum.hpp at line 8, boost/units/systems/cgs/power.hpp at line 8, boost/units/systems/cgs/pressure.hpp at line 8, boost/units/systems/cgs/time.hpp at line 8, boost/units/systems/cgs/velocity.hpp at line 8, boost/units/systems/cgs/volume.hpp at line 8, boost/units/systems/cgs/wavenumber.hpp at line 8, boost/units/systems/detail/constants.hpp at line 8, boost/units/systems/information.hpp at line 7, boost/units/systems/information/bit.hpp at line 7, boost/units/systems/information/byte.hpp at line 7, boost/units/systems/information/hartley.hpp at line 7, boost/units/systems/information/nat.hpp at line 7, boost/units/systems/information/prefixes.hpp at line 7, boost/units/systems/information/shannon.hpp at line 7, boost/units/systems/si.hpp at line 8, boost/units/systems/si/absorbed_dose.hpp at line 8, boost/units/systems/si/acceleration.hpp at line 8, boost/units/systems/si/action.hpp at line 8, boost/units/systems/si/activity.hpp at line 8, boost/units/systems/si/amount.hpp at line 8, boost/units/systems/si/angular_acceleration.hpp at line 8, boost/units/systems/si/angular_momentum.hpp at line 8, boost/units/systems/si/angular_velocity.hpp at line 8, boost/units/systems/si/area.hpp at line 8, boost/units/systems/si/base.hpp at line 8, boost/units/systems/si/capacitance.hpp at line 8, boost/units/systems/si/catalytic_activity.hpp at line 8, boost/units/systems/si/codata/alpha_constants.hpp at line 8, boost/units/systems/si/codata/atomic-nuclear_constants.hpp at line 8, boost/units/systems/si/codata/deuteron_constants.hpp at line 8, boost/units/systems/si/codata/electromagnetic_constants.hpp at line 8, boost/units/systems/si/codata/electron_constants.hpp at line 8, boost/units/systems/si/codata/helion_constants.hpp at line 8, boost/units/systems/si/codata/muon_constants.hpp at line 8, boost/units/systems/si/codata/neutron_constants.hpp at line 8, boost/units/systems/si/codata/physico-chemical_constants.hpp at line 8, boost/units/systems/si/codata/proton_constants.hpp at line 8, boost/units/systems/si/codata/tau_constants.hpp at line 8, boost/units/systems/si/codata/triton_constants.hpp at line 8, boost/units/systems/si/codata/typedefs.hpp at line 8, boost/units/systems/si/codata/universal_constants.hpp at line 8, boost/units/systems/si/codata_constants.hpp at line 8, boost/units/systems/si/conductance.hpp at line 8, boost/units/systems/si/conductivity.hpp at line 8, boost/units/systems/si/current.hpp at line 8, boost/units/systems/si/dimensionless.hpp at line 8, boost/units/systems/si/dose_equivalent.hpp at line 8, boost/units/systems/si/dynamic_viscosity.hpp at line 8, boost/units/systems/si/electric_charge.hpp at line 8, boost/units/systems/si/electric_potential.hpp at line 8, boost/units/systems/si/energy.hpp at line 8, boost/units/systems/si/force.hpp at line 8, boost/units/systems/si/frequency.hpp at line 8, boost/units/systems/si/illuminance.hpp at line 8, boost/units/systems/si/impedance.hpp at line 8, boost/units/systems/si/inductance.hpp at line 8, boost/units/systems/si/io.hpp at line 8, boost/units/systems/si/kinematic_viscosity.hpp at line 8, boost/units/systems/si/length.hpp at line 8, boost/units/systems/si/luminous_flux.hpp at line 8, boost/units/systems/si/luminous_intensity.hpp at line 8, boost/units/systems/si/magnetic_field_intensity.hpp at line 8, boost/units/systems/si/magnetic_flux.hpp at line 8, boost/units/systems/si/magnetic_flux_density.hpp at line 8, boost/units/systems/si/mass.hpp at line 8, boost/units/systems/si/mass_density.hpp at line 8, boost/units/systems/si/moment_of_inertia.hpp at line 8, boost/units/systems/si/momentum.hpp at line 8, boost/units/systems/si/permeability.hpp at line 8, boost/units/systems/si/permittivity.hpp at line 8, boost/units/systems/si/plane_angle.hpp at line 8, boost/units/systems/si/power.hpp at line 8, boost/units/systems/si/prefixes.hpp at line 8, boost/units/systems/si/pressure.hpp at line 8, boost/units/systems/si/reluctance.hpp at line 8, boost/units/systems/si/resistance.hpp at line 8, boost/units/systems/si/resistivity.hpp at line 8, boost/units/systems/si/solid_angle.hpp at line 8, boost/units/systems/si/surface_density.hpp at line 8, boost/units/systems/si/surface_tension.hpp at line 8, boost/units/systems/si/temperature.hpp at line 8, boost/units/systems/si/time.hpp at line 8, boost/units/systems/si/torque.hpp at line 8, boost/units/systems/si/velocity.hpp at line 8, boost/units/systems/si/volume.hpp at line 8, boost/units/systems/si/wavenumber.hpp at line 8, boost/units/systems/temperature/celsius.hpp at line 8, boost/units/systems/temperature/fahrenheit.hpp at line 8, boost/units/unit.hpp at line 8, boost/units/units_fwd.hpp at line 8, boost/utility/value_init.hpp at line 4, boost/uuid/detail/md5.hpp at line 23, boost/uuid/detail/sha1.hpp at line 5, boost/uuid/nil_generator.hpp at line 5, boost/uuid/random_generator.hpp at line 6, boost/uuid/string_generator.hpp at line 5, boost/uuid/uuid.hpp at line 5, boost/uuid/uuid_generators.hpp at line 5, boost/uuid/uuid_io.hpp at line 5, boost/uuid/uuid_serialize.hpp at line 5, boost/variant.hpp at line 10, boost/variant/apply_visitor.hpp at line 10, boost/variant/bad_visit.hpp at line 10, boost/variant/detail/apply_visitor_binary.hpp at line 10, boost/variant/detail/apply_visitor_delayed.hpp at line 10, boost/variant/detail/apply_visitor_unary.hpp at line 10, boost/variant/detail/backup_holder.hpp at line 10, boost/variant/detail/cast_storage.hpp at line 10, boost/variant/detail/config.hpp at line 10, boost/variant/detail/element_index.hpp at line 9, boost/variant/detail/enable_recursive.hpp at line 10, boost/variant/detail/enable_recursive_fwd.hpp at line 10, boost/variant/detail/forced_return.hpp at line 10, boost/variant/detail/generic_result_type.hpp at line 10, boost/variant/detail/has_result_type.hpp at line 9, boost/variant/detail/hash_variant.hpp at line 10, boost/variant/detail/initializer.hpp at line 10, boost/variant/detail/make_variant_list.hpp at line 10, boost/variant/detail/over_sequence.hpp at line 12, boost/variant/detail/substitute.hpp at line 15, boost/variant/detail/substitute_fwd.hpp at line 10, boost/variant/detail/variant_io.hpp at line 10, boost/variant/detail/visitation_impl.hpp at line 10, boost/variant/get.hpp at line 10, boost/variant/polymorphic_get.hpp at line 9, boost/variant/recursive_variant.hpp at line 10, boost/variant/recursive_wrapper.hpp at line 10, boost/variant/recursive_wrapper_fwd.hpp at line 12, boost/variant/static_visitor.hpp at line 10, boost/variant/variant.hpp at line 10, boost/variant/variant_fwd.hpp at line 10, boost/variant/visitor_ptr.hpp at line 10, libs/python/src/converter/arg_to_python_base.cpp at line 3, libs/python/src/converter/builtin_converters.cpp at line 3, libs/python/src/converter/from_python.cpp at line 3, libs/python/src/converter/registry.cpp at line 3, libs/python/src/converter/type_id.cpp at line 3, libs/python/src/errors.cpp at line 3, libs/python/src/exec.cpp at line 3, libs/python/src/import.cpp at line 3, libs/python/src/list.cpp at line 3, libs/python/src/long.cpp at line 3, libs/python/src/module.cpp at line 3, libs/python/src/object/class.cpp at line 3, libs/python/src/object/enum.cpp at line 3, libs/python/src/object/function.cpp at line 3, libs/python/src/object/function_doc_signature.cpp at line 3, libs/python/src/object/inheritance.cpp at line 3, libs/python/src/object/iterator.cpp at line 3, libs/python/src/object/life_support.cpp at line 3, libs/python/src/object/stl_iterator.cpp at line 3, libs/python/src/object_operators.cpp at line 3, libs/python/src/object_protocol.cpp at line 3, libs/python/src/tuple.cpp at line 3, libs/thread/src/win32/thread.cpp at line 2
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/aligned_storage.hpp [9:11]
+ boost/any.hpp [333:335]
+ boost/archive/detail/utf8_codecvt_facet.hpp [3:5]
+ boost/archive/impl/xml_oarchive_impl.ipp [5:7]
+ boost/archive/impl/xml_woarchive_impl.ipp [5:7]
+ boost/bind/apply.hpp [9:11]
+ boost/bind/arg.hpp [15:17]
+ boost/bind/bind.hpp [17:19]
+ boost/bind/bind_cc.hpp [8:10]
+ boost/bind/bind_mf_cc.hpp [8:10]
+ boost/bind/bind_template.hpp [8:10]
+ boost/bind/make_adaptable.hpp [9:11]
+ boost/bind/mem_fn.hpp [17:19]
+ boost/bind/mem_fn_cc.hpp [8:10]
+ boost/bind/mem_fn_template.hpp [8:10]
+ boost/bind/protect.hpp [10:12]
+ boost/blank.hpp [9:11]
+ boost/blank_fwd.hpp [9:11]
+ boost/concept_archetype.hpp [3:5]
+ boost/concept_check.hpp [5:7]
+ boost/config/detail/suffix.hpp [13:15]
+ boost/config/workaround.hpp [2:4]
+ boost/core/ref.hpp [25:27]
+ boost/core/swap.hpp [3:5]
+ boost/detail/basic_pointerbuf.hpp [9:11]
+ boost/detail/indirect_traits.hpp [2:4]
+ boost/detail/iterator.hpp [2:4]
+ boost/detail/named_template_params.hpp [2:4]
+ boost/detail/numeric_traits.hpp [3:5]
+ boost/detail/reference_content.hpp [9:11]
+ boost/detail/templated_streams.hpp [9:11]
+ boost/detail/workaround.hpp [2:4]
+ boost/foreach.hpp [5:7]
+ boost/foreach_fwd.hpp [5:7]
+ boost/function_output_iterator.hpp [2:4]
+ boost/generator_iterator.hpp [2:4]
+ boost/get_pointer.hpp [2:4]
+ boost/graph/adj_list_serialize.hpp [5:7]
+ boost/graph/adjacency_iterator.hpp [5:7]
+ boost/graph/adjacency_list.hpp [6:8]
+ boost/graph/adjacency_list_io.hpp [5:7]
+ boost/graph/adjacency_matrix.hpp [6:8]
+ boost/graph/astar_search.hpp [7:9]
+ boost/graph/bandwidth.hpp [3:5]
+ boost/graph/bellman_ford_shortest_paths.hpp [6:8]
+ boost/graph/biconnected_components.hpp [4:6]
+ boost/graph/boyer_myrvold_planar_test.hpp [4:6]
+ boost/graph/breadth_first_search.hpp [6:8]
+ boost/graph/chrobak_payne_drawing.hpp [4:6]
+ boost/graph/connected_components.hpp [6:8]
+ boost/graph/copy.hpp [6:8]
+ boost/graph/core_numbers.hpp [6:8]
+ boost/graph/create_condensation_graph.hpp [5:7]
+ boost/graph/cuthill_mckee_ordering.hpp [7:9]
+ boost/graph/cycle_canceling.hpp [5:7]
+ boost/graph/dag_shortest_paths.hpp [5:7]
+ boost/graph/depth_first_search.hpp [6:8]
+ boost/graph/detail/adj_list_edge_iterator.hpp [6:8]
+ boost/graph/detail/adjacency_list.hpp [7:9]
+ boost/graph/detail/array_binary_tree.hpp [6:8]
+ boost/graph/detail/augment.hpp [5:7]
+ boost/graph/detail/connected_components.hpp [5:7]
+ boost/graph/detail/d_ary_heap.hpp [6:8]
+ boost/graph/detail/edge.hpp [6:8]
+ boost/graph/detail/incidence_iterator.hpp [6:8]
+ boost/graph/detail/incremental_components.hpp [6:8]
+ boost/graph/detail/list_base.hpp [5:7]
+ boost/graph/detail/permutation.hpp [2:4]
+ boost/graph/detail/self_avoiding_walk.hpp [5:7]
+ boost/graph/detail/set_adaptor.hpp [2:4]
+ boost/graph/detail/shadow_iterator.hpp [2:4]
+ boost/graph/detail/sparse_ordering.hpp [7:9]
+ boost/graph/dijkstra_shortest_paths.hpp [5:7]
+ boost/graph/dijkstra_shortest_paths_no_color_map.hpp [6:8]
+ boost/graph/dll_import_export.hpp [6:8]
+ boost/graph/edge_coloring.hpp [5:7]
+ boost/graph/edge_connectivity.hpp [5:7]
+ boost/graph/edge_list.hpp [5:7]
+ boost/graph/edmonds_karp_max_flow.hpp [5:7]
+ boost/graph/exception.hpp [5:7]
+ boost/graph/filtered_graph.hpp [5:7]
+ boost/graph/find_flow_cost.hpp [5:7]
+ boost/graph/graph_archetypes.hpp [5:7]
+ boost/graph/graph_as_tree.hpp [6:8]
+ boost/graph/graph_concepts.hpp [8:10]
+ boost/graph/graph_selectors.hpp [5:7]
+ boost/graph/graph_test.hpp [5:7]
+ boost/graph/graph_traits.hpp [5:7]
+ boost/graph/graph_utility.hpp [6:8]
+ boost/graph/graphviz.hpp [6:8]
+ boost/graph/grid_graph.hpp [5:7]
+ boost/graph/incremental_components.hpp [7:9]
+ boost/graph/is_kuratowski_subgraph.hpp [4:6]
+ boost/graph/is_straight_line_drawing.hpp [4:6]
+ boost/graph/isomorphism.hpp [3:5]
+ boost/graph/iteration_macros.hpp [5:7]
+ boost/graph/iteration_macros_undef.hpp [5:7]
+ boost/graph/johnson_all_pairs_shortest.hpp [5:7]
+ boost/graph/king_ordering.hpp [7:9]
+ boost/graph/kruskal_min_spanning_tree.hpp [6:8]
+ boost/graph/leda_graph.hpp [8:10]
+ boost/graph/lookup_edge.hpp [5:7]
+ boost/graph/make_biconnected_planar.hpp [4:6]
+ boost/graph/make_connected.hpp [4:6]
+ boost/graph/make_maximal_planar.hpp [4:6]
+ boost/graph/matrix_as_graph.hpp [6:8]
+ boost/graph/maximum_adjacency_search.hpp [6:8]
+ boost/graph/mcgregor_common_subgraphs.hpp [5:7]
+ boost/graph/metric_tsp_approx.hpp [6:8]
+ boost/graph/minimum_degree_ordering.hpp [6:8]
+ boost/graph/named_function_params.hpp [5:7]
+ boost/graph/neighbor_bfs.hpp [6:8]
+ boost/graph/planar_canonical_ordering.hpp [4:6]
+ boost/graph/planar_detail/add_edge_visitors.hpp [4:6]
+ boost/graph/planar_detail/boyer_myrvold_impl.hpp [4:6]
+ boost/graph/planar_detail/bucket_sort.hpp [4:6]
+ boost/graph/planar_detail/face_handles.hpp [4:6]
+ boost/graph/planar_detail/face_iterators.hpp [4:6]
+ boost/graph/planar_face_traversal.hpp [4:6]
+ boost/graph/prim_minimum_spanning_tree.hpp [5:7]
+ boost/graph/profile.hpp [6:8]
+ boost/graph/properties.hpp [5:7]
+ boost/graph/property_iter_range.hpp [4:6]
+ boost/graph/push_relabel_max_flow.hpp [5:7]
+ boost/graph/random.hpp [6:8]
+ boost/graph/read_dimacs.hpp [5:7]
+ boost/graph/relax.hpp [5:7]
+ boost/graph/reverse_graph.hpp [2:4]
+ boost/graph/sequential_vertex_coloring.hpp [6:8]
+ boost/graph/simple_point.hpp [5:7]
+ boost/graph/sloan_ordering.hpp [6:8]
+ boost/graph/smallest_last_ordering.hpp [5:7]
+ boost/graph/stanford_graph.hpp [5:7]
+ boost/graph/strong_components.hpp [6:8]
+ boost/graph/subgraph.hpp [5:7]
+ boost/graph/successive_shortest_path_nonnegative_weights.hpp [5:7]
+ boost/graph/topological_sort.hpp [6:8]
+ boost/graph/transitive_closure.hpp [3:5]
+ boost/graph/transpose_graph.hpp [6:8]
+ boost/graph/tree_traits.hpp [2:4]
+ boost/graph/undirected_dfs.hpp [6:8]
+ boost/graph/vector_as_graph.hpp [7:9]
+ boost/graph/vf2_sub_graph_iso.hpp [9:11]
+ boost/graph/visitors.hpp [5:7]
+ boost/graph/wavefront.hpp [6:8]
+ boost/heap/binomial_heap.hpp [5:7]
+ boost/heap/d_ary_heap.hpp [5:7]
+ boost/heap/detail/heap_comparison.hpp [5:7]
+ boost/heap/detail/heap_node.hpp [5:7]
+ boost/heap/detail/ilog2.hpp [5:7]
+ boost/heap/detail/mutable_heap.hpp [5:7]
+ boost/heap/detail/ordered_adaptor_iterator.hpp [5:7]
+ boost/heap/detail/stable_heap.hpp [5:7]
+ boost/heap/detail/tree_iterator.hpp [5:7]
+ boost/heap/fibonacci_heap.hpp [5:7]
+ boost/heap/heap_concepts.hpp [5:7]
+ boost/heap/heap_merge.hpp [5:7]
+ boost/heap/pairing_heap.hpp [5:7]
+ boost/heap/policies.hpp [5:7]
+ boost/heap/priority_queue.hpp [5:7]
+ boost/heap/skew_heap.hpp [5:7]
+ boost/implicit_cast.hpp [2:4]
+ boost/interprocess/detail/atomic.hpp [7:9]
+ boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp [16:18]
+ boost/interprocess/smart_ptr/detail/sp_counted_impl.hpp [20:22]
+ boost/iterator/counting_iterator.hpp [2:4]
+ boost/iterator/detail/config_def.hpp [4:6]
+ boost/iterator/detail/config_undef.hpp [2:4]
+ boost/iterator/detail/enable_if.hpp [4:6]
+ boost/iterator/filter_iterator.hpp [4:6]
+ boost/iterator/function_input_iterator.hpp [4:6]
+ boost/iterator/function_output_iterator.hpp [2:4]
+ boost/iterator/indirect_iterator.hpp [4:6]
+ boost/iterator/interoperable.hpp [4:6]
+ boost/iterator/iterator_adaptor.hpp [4:6]
+ boost/iterator/iterator_archetypes.hpp [2:4]
+ boost/iterator/iterator_categories.hpp [2:4]
+ boost/iterator/iterator_concepts.hpp [2:4]
+ boost/iterator/iterator_facade.hpp [4:6]
+ boost/iterator/iterator_traits.hpp [2:4]
+ boost/iterator/permutation_iterator.hpp [4:6]
+ boost/iterator/reverse_iterator.hpp [4:6]
+ boost/iterator/transform_iterator.hpp [4:6]
+ boost/iterator/zip_iterator.hpp [4:6]
+ boost/lambda/algorithm.hpp [5:7]
+ boost/lambda/bind.hpp [6:8]
+ boost/lambda/casts.hpp [6:8]
+ boost/lambda/construct.hpp [6:8]
+ boost/lambda/control_structures.hpp [4:6]
+ boost/lambda/core.hpp [6:8]
+ boost/lambda/detail/actions.hpp [5:7]
+ boost/lambda/detail/arity_code.hpp [5:7]
+ boost/lambda/detail/bind_functions.hpp [5:7]
+ boost/lambda/detail/control_constructs_common.hpp [6:8]
+ boost/lambda/detail/function_adaptors.hpp [5:7]
+ boost/lambda/detail/is_instance_of.hpp [5:7]
+ boost/lambda/detail/lambda_config.hpp [5:7]
+ boost/lambda/detail/lambda_functor_base.hpp [5:7]
+ boost/lambda/detail/lambda_functors.hpp [5:7]
+ boost/lambda/detail/lambda_fwd.hpp [5:7]
+ boost/lambda/detail/lambda_traits.hpp [5:7]
+ boost/lambda/detail/member_ptr.hpp [6:8]
+ boost/lambda/detail/operator_actions.hpp [5:7]
+ boost/lambda/detail/operator_lambda_func_base.hpp [5:7]
+ boost/lambda/detail/operator_return_type_traits.hpp [5:7]
+ boost/lambda/detail/operators.hpp [5:7]
+ boost/lambda/detail/ret.hpp [5:7]
+ boost/lambda/detail/return_type_traits.hpp [5:7]
+ boost/lambda/detail/select_functions.hpp [5:7]
+ boost/lambda/detail/suppress_unused.hpp [5:7]
+ boost/lambda/exceptions.hpp [6:8]
+ boost/lambda/if.hpp [7:9]
+ boost/lambda/lambda.hpp [4:6]
+ boost/lambda/loops.hpp [7:9]
+ boost/lambda/numeric.hpp [5:7]
+ boost/lambda/switch.hpp [6:8]
+ boost/lexical_cast.hpp [5:7]
+ boost/lexical_cast/bad_lexical_cast.hpp [5:7]
+ boost/lexical_cast/detail/converter_lexical.hpp [5:7]
+ boost/lexical_cast/detail/converter_lexical_streams.hpp [5:7]
+ boost/lexical_cast/detail/converter_numeric.hpp [5:7]
+ boost/lexical_cast/detail/inf_nan.hpp [5:7]
+ boost/lexical_cast/detail/is_character.hpp [5:7]
+ boost/lexical_cast/detail/lcast_char_constants.hpp [5:7]
+ boost/lexical_cast/detail/lcast_unsigned_converters.hpp [5:7]
+ boost/lexical_cast/detail/widest_char.hpp [5:7]
+ boost/lexical_cast/lexical_cast_old.hpp [5:7]
+ boost/lexical_cast/try_lexical_convert.hpp [5:7]
+ boost/lockfree/detail/parameter.hpp [5:7]
+ boost/lockfree/policies.hpp [5:7]
+ boost/pending/bucket_sorter.hpp [6:8]
+ boost/pending/disjoint_sets.hpp [6:8]
+ boost/pending/fibonacci_heap.hpp [2:4]
+ boost/pending/indirect_cmp.hpp [6:8]
+ boost/pending/is_heap.hpp [6:8]
+ boost/pending/iterator_adaptors.hpp [2:4]
+ boost/pending/iterator_tests.hpp [2:4]
+ boost/pending/mutable_heap.hpp [6:8]
+ boost/pending/mutable_queue.hpp [6:8]
+ boost/program_options.hpp [2:4]
+ boost/property_map/compose_property_map.hpp [4:6]
+ boost/property_map/function_property_map.hpp [7:9]
+ boost/property_map/parallel/parallel_property_maps.hpp [5:7]
+ boost/property_map/parallel/vector_property_map.hpp [2:4]
+ boost/property_map/property_map.hpp [5:7]
+ boost/property_map/property_map_iterator.hpp [2:4]
+ boost/property_map/shared_array_property_map.hpp [4:6]
+ boost/property_map/transform_value_property_map.hpp [7:9]
+ boost/property_map/vector_property_map.hpp [2:4]
+ boost/ptr_container/detail/serialize_ptr_map_adapter.hpp [2:4]
+ boost/ptr_container/detail/serialize_reversible_cont.hpp [2:4]
+ boost/ptr_container/serialize_ptr_array.hpp [2:4]
+ boost/ptr_container/serialize_ptr_container.hpp [2:4]
+ boost/ptr_container/serialize_ptr_deque.hpp [2:4]
+ boost/ptr_container/serialize_ptr_list.hpp [2:4]
+ boost/ptr_container/serialize_ptr_map.hpp [2:4]
+ boost/ptr_container/serialize_ptr_set.hpp [2:4]
+ boost/ptr_container/serialize_ptr_vector.hpp [2:4]
+ boost/python.hpp [2:4]
+ boost/python/arg_from_python.hpp [2:4]
+ boost/python/args.hpp [2:4]
+ boost/python/args_fwd.hpp [2:4]
+ boost/python/back_reference.hpp [2:4]
+ boost/python/base_type_traits.hpp [2:4]
+ boost/python/bases.hpp [2:4]
+ boost/python/borrowed.hpp [2:4]
+ boost/python/call.hpp [4:6]
+ boost/python/call_method.hpp [4:6]
+ boost/python/cast.hpp [2:4]
+ boost/python/class.hpp [2:4]
+ boost/python/class_fwd.hpp [2:4]
+ boost/python/converter/arg_from_python.hpp [2:4]
+ boost/python/converter/arg_to_python.hpp [2:4]
+ boost/python/converter/arg_to_python_base.hpp [2:4]
+ boost/python/converter/as_to_python_function.hpp [2:4]
+ boost/python/converter/builtin_converters.hpp [2:4]
+ boost/python/converter/constructor_function.hpp [2:4]
+ boost/python/converter/context_result_converter.hpp [2:4]
+ boost/python/converter/convertible_function.hpp [2:4]
+ boost/python/converter/from_python.hpp [2:4]
+ boost/python/converter/implicit.hpp [2:4]
+ boost/python/converter/obj_mgr_arg_from_python.hpp [2:4]
+ boost/python/converter/object_manager.hpp [2:4]
+ boost/python/converter/pointer_type_id.hpp [2:4]
+ boost/python/converter/pyobject_traits.hpp [2:4]
+ boost/python/converter/pyobject_type.hpp [2:4]
+ boost/python/converter/pytype_function.hpp [2:4]
+ boost/python/converter/pytype_object_mgr_traits.hpp [2:4]
+ boost/python/converter/registered.hpp [3:5]
+ boost/python/converter/registered_pointee.hpp [2:4]
+ boost/python/converter/registrations.hpp [2:4]
+ boost/python/converter/registry.hpp [2:4]
+ boost/python/converter/return_from_python.hpp [2:4]
+ boost/python/converter/rvalue_from_python_data.hpp [2:4]
+ boost/python/converter/shared_ptr_deleter.hpp [2:4]
+ boost/python/converter/shared_ptr_from_python.hpp [3:5]
+ boost/python/converter/shared_ptr_to_python.hpp [3:5]
+ boost/python/converter/to_python_function_type.hpp [2:4]
+ boost/python/copy_const_reference.hpp [2:4]
+ boost/python/copy_non_const_reference.hpp [2:4]
+ boost/python/data_members.hpp [2:4]
+ boost/python/def.hpp [2:4]
+ boost/python/def_visitor.hpp [2:4]
+ boost/python/default_call_policies.hpp [2:4]
+ boost/python/detail/aix_init_module.hpp [2:4]
+ boost/python/detail/api_placeholder.hpp [2:4]
+ boost/python/detail/borrowed_ptr.hpp [4:6]
+ boost/python/detail/caller.hpp [4:6]
+ boost/python/detail/config.hpp [2:4]
+ boost/python/detail/construct.hpp [2:4]
+ boost/python/detail/convertible.hpp [2:4]
+ boost/python/detail/copy_ctor_mutates_rhs.hpp [2:4]
+ boost/python/detail/cv_category.hpp [2:4]
+ boost/python/detail/dealloc.hpp [2:4]
+ boost/python/detail/decorated_type_id.hpp [2:4]
+ boost/python/detail/decref_guard.hpp [2:4]
+ boost/python/detail/def_helper.hpp [2:4]
+ boost/python/detail/def_helper_fwd.hpp [2:4]
+ boost/python/detail/defaults_def.hpp [4:6]
+ boost/python/detail/defaults_gen.hpp [4:6]
+ boost/python/detail/dependent.hpp [2:4]
+ boost/python/detail/destroy.hpp [2:4]
+ boost/python/detail/exception_handler.hpp [2:4]
+ boost/python/detail/force_instantiate.hpp [2:4]
+ boost/python/detail/if_else.hpp [2:4]
+ boost/python/detail/invoke.hpp [4:6]
+ boost/python/detail/is_auto_ptr.hpp [2:4]
+ boost/python/detail/is_shared_ptr.hpp [3:5]
+ boost/python/detail/is_xxx.hpp [2:4]
+ boost/python/detail/make_keyword_range_fn.hpp [2:4]
+ boost/python/detail/map_entry.hpp [2:4]
+ boost/python/detail/mpl_lambda.hpp [2:4]
+ boost/python/detail/msvc_typeinfo.hpp [2:4]
+ boost/python/detail/none.hpp [2:4]
+ boost/python/detail/not_specified.hpp [2:4]
+ boost/python/detail/nullary_function_adaptor.hpp [2:4]
+ boost/python/detail/operator_id.hpp [2:4]
+ boost/python/detail/overloads_fwd.hpp [2:4]
+ boost/python/detail/pointee.hpp [2:4]
+ boost/python/detail/prefix.hpp [2:4]
+ boost/python/detail/preprocessor.hpp [2:4]
+ boost/python/detail/python_type.hpp [2:4]
+ boost/python/detail/raw_pyobject.hpp [2:4]
+ boost/python/detail/referent_storage.hpp [2:4]
+ boost/python/detail/result.hpp [4:6]
+ boost/python/detail/scope.hpp [2:4]
+ boost/python/detail/signature.hpp [4:6]
+ boost/python/detail/string_literal.hpp [2:4]
+ boost/python/detail/target.hpp [4:6]
+ boost/python/detail/translate_exception.hpp [2:4]
+ boost/python/detail/type_list.hpp [2:4]
+ boost/python/detail/type_list_impl.hpp [3:5]
+ boost/python/detail/type_traits.hpp [2:4]
+ boost/python/detail/unwind_type.hpp [2:4]
+ boost/python/detail/value_is_shared_ptr.hpp [3:5]
+ boost/python/detail/value_is_xxx.hpp [2:4]
+ boost/python/detail/void_ptr.hpp [2:4]
+ boost/python/detail/void_return.hpp [2:4]
+ boost/python/detail/wrap_python.hpp [2:4]
+ boost/python/dict.hpp [2:4]
+ boost/python/docstring_options.hpp [2:4]
+ boost/python/enum.hpp [2:4]
+ boost/python/errors.hpp [2:4]
+ boost/python/exception_translator.hpp [2:4]
+ boost/python/exec.hpp [2:4]
+ boost/python/extract.hpp [2:4]
+ boost/python/handle.hpp [2:4]
+ boost/python/handle_fwd.hpp [2:4]
+ boost/python/has_back_reference.hpp [2:4]
+ boost/python/implicit.hpp [2:4]
+ boost/python/import.hpp [2:4]
+ boost/python/init.hpp [4:6]
+ boost/python/instance_holder.hpp [2:4]
+ boost/python/iterator.hpp [2:4]
+ boost/python/list.hpp [2:4]
+ boost/python/long.hpp [2:4]
+ boost/python/lvalue_from_pytype.hpp [2:4]
+ boost/python/make_constructor.hpp [2:4]
+ boost/python/make_function.hpp [2:4]
+ boost/python/manage_new_object.hpp [2:4]
+ boost/python/module.hpp [2:4]
+ boost/python/module_init.hpp [2:4]
+ boost/python/numpy/config.hpp [2:4]
+ boost/python/object.hpp [2:4]
+ boost/python/object/add_to_namespace.hpp [2:4]
+ boost/python/object/class.hpp [2:4]
+ boost/python/object/class_detail.hpp [2:4]
+ boost/python/object/class_wrapper.hpp [2:4]
+ boost/python/object/enum_base.hpp [2:4]
+ boost/python/object/find_instance.hpp [2:4]
+ boost/python/object/forward.hpp [2:4]
+ boost/python/object/function.hpp [2:4]
+ boost/python/object/function_doc_signature.hpp [2:4]
+ boost/python/object/function_handle.hpp [2:4]
+ boost/python/object/function_object.hpp [2:4]
+ boost/python/object/inheritance.hpp [2:4]
+ boost/python/object/inheritance_query.hpp [2:4]
+ boost/python/object/instance.hpp [2:4]
+ boost/python/object/iterator.hpp [2:4]
+ boost/python/object/iterator_core.hpp [2:4]
+ boost/python/object/life_support.hpp [2:4]
+ boost/python/object/make_holder.hpp [4:6]
+ boost/python/object/make_instance.hpp [2:4]
+ boost/python/object/make_ptr_instance.hpp [2:4]
+ boost/python/object/pointer_holder.hpp [4:6]
+ boost/python/object/py_function.hpp [2:4]
+ boost/python/object/stl_iterator_core.hpp [2:4]
+ boost/python/object/value_holder.hpp [4:6]
+ boost/python/object/value_holder_fwd.hpp [2:4]
+ boost/python/object_attributes.hpp [2:4]
+ boost/python/object_core.hpp [2:4]
+ boost/python/object_fwd.hpp [2:4]
+ boost/python/object_items.hpp [2:4]
+ boost/python/object_operators.hpp [2:4]
+ boost/python/object_protocol.hpp [2:4]
+ boost/python/object_protocol_core.hpp [2:4]
+ boost/python/object_slices.hpp [2:4]
+ boost/python/opaque_pointer_converter.hpp [2:4]
+ boost/python/operators.hpp [2:4]
+ boost/python/other.hpp [6:8]
+ boost/python/overloads.hpp [2:4]
+ boost/python/pointee.hpp [2:4]
+ boost/python/proxy.hpp [2:4]
+ boost/python/ptr.hpp [6:8]
+ boost/python/pure_virtual.hpp [2:4]
+ boost/python/raw_function.hpp [2:4]
+ boost/python/refcount.hpp [2:4]
+ boost/python/reference_existing_object.hpp [2:4]
+ boost/python/register_ptr_to_python.hpp [2:4]
+ boost/python/return_arg.hpp [2:4]
+ boost/python/return_by_value.hpp [2:4]
+ boost/python/return_internal_reference.hpp [2:4]
+ boost/python/return_opaque_pointer.hpp [2:4]
+ boost/python/return_value_policy.hpp [2:4]
+ boost/python/scope.hpp [2:4]
+ boost/python/self.hpp [2:4]
+ boost/python/signature.hpp [4:6]
+ boost/python/slice_nil.hpp [2:4]
+ boost/python/ssize_t.hpp [2:4]
+ boost/python/stl_iterator.hpp [2:4]
+ boost/python/str.hpp [2:4]
+ boost/python/tag.hpp [2:4]
+ boost/python/to_python_converter.hpp [2:4]
+ boost/python/to_python_indirect.hpp [2:4]
+ boost/python/to_python_value.hpp [3:5]
+ boost/python/tuple.hpp [2:4]
+ boost/python/type_id.hpp [2:4]
+ boost/python/with_custodian_and_ward.hpp [2:4]
+ boost/range/algorithm.hpp [9:11]
+ boost/range/numeric.hpp [2:4]
+ boost/range/numeric.hpp [7:9]
+ boost/range/numeric.hpp [12:14]
+ boost/serialization/detail/shared_count_132.hpp [15:17]
+ boost/serialization/throw_exception.hpp [14:16]
+ boost/signals2/detail/auto_buffer.hpp [2:4]
+ boost/signals2/detail/lwm_nop.hpp [7:9]
+ boost/signals2/detail/lwm_pthreads.hpp [7:9]
+ boost/signals2/detail/lwm_win32_cs.hpp [8:10]
+ boost/signals2/mutex.hpp [7:9]
+ boost/smart_ptr/bad_weak_ptr.hpp [15:17]
+ boost/smart_ptr/detail/atomic_count_pt.hpp [9:11]
+ boost/smart_ptr/detail/atomic_count_solaris.hpp [11:13]
+ boost/smart_ptr/detail/atomic_count_win32.hpp [15:17]
+ boost/smart_ptr/detail/lightweight_mutex.hpp [15:17]
+ boost/smart_ptr/detail/lwm_nop.hpp [15:17]
+ boost/smart_ptr/detail/lwm_pthreads.hpp [15:17]
+ boost/smart_ptr/detail/lwm_win32_cs.hpp [16:18]
+ boost/smart_ptr/detail/quick_allocator.hpp [16:18]
+ boost/smart_ptr/detail/shared_count.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_base.hpp [15:17]
+ boost/smart_ptr/detail/sp_counted_base_nt.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_base_pt.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_impl.hpp [16:18]
+ boost/stacktrace.hpp [3:5]
+ boost/stacktrace/detail/addr2line_impls.hpp [3:5]
+ boost/stacktrace/detail/collect_msvc.ipp [3:5]
+ boost/stacktrace/detail/collect_noop.ipp [3:5]
+ boost/stacktrace/detail/collect_unwind.ipp [3:5]
+ boost/stacktrace/detail/frame_decl.hpp [3:5]
+ boost/stacktrace/detail/frame_msvc.ipp [3:5]
+ boost/stacktrace/detail/frame_noop.ipp [3:5]
+ boost/stacktrace/detail/frame_unwind.ipp [3:5]
+ boost/stacktrace/detail/libbacktrace_impls.hpp [3:5]
+ boost/stacktrace/detail/location_from_symbol.hpp [3:5]
+ boost/stacktrace/detail/pop_options.h [3:5]
+ boost/stacktrace/detail/push_options.h [3:5]
+ boost/stacktrace/detail/safe_dump_noop.ipp [3:5]
+ boost/stacktrace/detail/safe_dump_posix.ipp [3:5]
+ boost/stacktrace/detail/safe_dump_win.ipp [3:5]
+ boost/stacktrace/detail/to_hex_array.hpp [3:5]
+ boost/stacktrace/detail/unwind_base_impls.hpp [3:5]
+ boost/stacktrace/frame.hpp [3:5]
+ boost/stacktrace/safe_dump_to.hpp [3:5]
+ boost/stacktrace/stacktrace.hpp [3:5]
+ boost/stacktrace/stacktrace_fwd.hpp [3:5]
+ boost/thread/caller_context.hpp [2:4]
+ boost/thread/completion_latch.hpp [1:3]
+ boost/thread/detail/counter.hpp [1:3]
+ boost/thread/detail/force_cast.hpp [4:6]
+ boost/thread/detail/lockable_wrapper.hpp [1:3]
+ boost/thread/detail/move.hpp [1:3]
+ boost/thread/detail/platform.hpp [3:5]
+ boost/thread/detail/singleton.hpp [4:6]
+ boost/thread/detail/thread.hpp [3:5]
+ boost/thread/detail/thread_group.hpp [3:5]
+ boost/thread/detail/thread_interruption.hpp [3:5]
+ boost/thread/exceptional_ptr.hpp [1:3]
+ boost/thread/externally_locked.hpp [2:4]
+ boost/thread/externally_locked_stream.hpp [2:4]
+ boost/thread/is_locked_by_this_thread.hpp [2:4]
+ boost/thread/latch.hpp [1:3]
+ boost/thread/lock_algorithms.hpp [1:3]
+ boost/thread/lock_factories.hpp [1:3]
+ boost/thread/lock_guard.hpp [1:3]
+ boost/thread/lock_options.hpp [1:3]
+ boost/thread/lock_traits.hpp [1:3]
+ boost/thread/lock_types.hpp [1:3]
+ boost/thread/lockable_traits.hpp [1:3]
+ boost/thread/locks.hpp [1:3]
+ boost/thread/ostream_buffer.hpp [2:4]
+ boost/thread/pthread/condition_variable.hpp [3:5]
+ boost/thread/pthread/condition_variable_fwd.hpp [3:5]
+ boost/thread/pthread/mutex.hpp [5:7]
+ boost/thread/pthread/recursive_mutex.hpp [5:7]
+ boost/thread/pthread/thread_data.hpp [3:5]
+ boost/thread/pthread/thread_heap_alloc.hpp [1:3]
+ boost/thread/reverse_lock.hpp [1:3]
+ boost/thread/scoped_thread.hpp [1:3]
+ boost/thread/shared_lock_guard.hpp [1:3]
+ boost/thread/strict_lock.hpp [1:3]
+ boost/thread/synchronized_value.hpp [3:5]
+ boost/thread/testable_mutex.hpp [2:4]
+ boost/thread/thread_functors.hpp [1:3]
+ boost/thread/thread_guard.hpp [1:3]
+ boost/thread/tss.hpp [3:5]
+ boost/thread/win32/condition_variable.hpp [3:5]
+ boost/thread/win32/mfc_thread_init.hpp [3:5]
+ boost/thread/win32/mutex.hpp [5:7]
+ boost/thread/win32/thread_data.hpp [3:5]
+ boost/thread/win32/thread_heap_alloc.hpp [1:3]
+ boost/tuple/detail/tuple_basic.hpp [5:7]
+ boost/tuple/tuple.hpp [5:7]
+ boost/tuple/tuple_comparison.hpp [6:8]
+ boost/tuple/tuple_io.hpp [6:8]
+ boost/type.hpp [2:4]
+ boost/type_traits/aligned_storage.hpp [9:11]
+ boost/type_traits/floating_point_promotion.hpp [2:4]
+ boost/type_traits/integral_promotion.hpp [2:4]
+ boost/type_traits/promote.hpp [2:4]
+ boost/units/absolute.hpp [7:9]
+ boost/units/base_dimension.hpp [7:9]
+ boost/units/base_unit.hpp [7:9]
+ boost/units/base_units/angle/arcminute.hpp [7:9]
+ boost/units/base_units/angle/arcsecond.hpp [7:9]
+ boost/units/base_units/angle/degree.hpp [7:9]
+ boost/units/base_units/angle/gradian.hpp [7:9]
+ boost/units/base_units/angle/radian.hpp [7:9]
+ boost/units/base_units/angle/revolution.hpp [7:9]
+ boost/units/base_units/angle/steradian.hpp [7:9]
+ boost/units/base_units/astronomical/astronomical_unit.hpp [7:9]
+ boost/units/base_units/astronomical/light_day.hpp [7:9]
+ boost/units/base_units/astronomical/light_hour.hpp [7:9]
+ boost/units/base_units/astronomical/light_minute.hpp [7:9]
+ boost/units/base_units/astronomical/light_second.hpp [7:9]
+ boost/units/base_units/astronomical/light_year.hpp [7:9]
+ boost/units/base_units/astronomical/parsec.hpp [7:9]
+ boost/units/base_units/cgs/biot.hpp [7:9]
+ boost/units/base_units/cgs/centimeter.hpp [7:9]
+ boost/units/base_units/cgs/gram.hpp [7:9]
+ boost/units/base_units/imperial/conversions.hpp [7:9]
+ boost/units/base_units/imperial/drachm.hpp [7:9]
+ boost/units/base_units/imperial/fluid_ounce.hpp [7:9]
+ boost/units/base_units/imperial/foot.hpp [7:9]
+ boost/units/base_units/imperial/furlong.hpp [7:9]
+ boost/units/base_units/imperial/gallon.hpp [7:9]
+ boost/units/base_units/imperial/gill.hpp [7:9]
+ boost/units/base_units/imperial/grain.hpp [7:9]
+ boost/units/base_units/imperial/hundredweight.hpp [7:9]
+ boost/units/base_units/imperial/inch.hpp [7:9]
+ boost/units/base_units/imperial/league.hpp [7:9]
+ boost/units/base_units/imperial/mile.hpp [7:9]
+ boost/units/base_units/imperial/ounce.hpp [7:9]
+ boost/units/base_units/imperial/pint.hpp [7:9]
+ boost/units/base_units/imperial/pound.hpp [7:9]
+ boost/units/base_units/imperial/quart.hpp [7:9]
+ boost/units/base_units/imperial/quarter.hpp [7:9]
+ boost/units/base_units/imperial/stone.hpp [7:9]
+ boost/units/base_units/imperial/thou.hpp [7:9]
+ boost/units/base_units/imperial/ton.hpp [7:9]
+ boost/units/base_units/imperial/yard.hpp [7:9]
+ boost/units/base_units/information/bit.hpp [6:8]
+ boost/units/base_units/information/byte.hpp [6:8]
+ boost/units/base_units/information/hartley.hpp [6:8]
+ boost/units/base_units/information/nat.hpp [6:8]
+ boost/units/base_units/information/shannon.hpp [6:8]
+ boost/units/base_units/metric/angstrom.hpp [7:9]
+ boost/units/base_units/metric/are.hpp [7:9]
+ boost/units/base_units/metric/atmosphere.hpp [7:9]
+ boost/units/base_units/metric/bar.hpp [7:9]
+ boost/units/base_units/metric/barn.hpp [7:9]
+ boost/units/base_units/metric/day.hpp [7:9]
+ boost/units/base_units/metric/fermi.hpp [7:9]
+ boost/units/base_units/metric/hectare.hpp [7:9]
+ boost/units/base_units/metric/hour.hpp [7:9]
+ boost/units/base_units/metric/knot.hpp [7:9]
+ boost/units/base_units/metric/liter.hpp [7:9]
+ boost/units/base_units/metric/micron.hpp [7:9]
+ boost/units/base_units/metric/minute.hpp [7:9]
+ boost/units/base_units/metric/mmHg.hpp [7:9]
+ boost/units/base_units/metric/nautical_mile.hpp [7:9]
+ boost/units/base_units/metric/ton.hpp [7:9]
+ boost/units/base_units/metric/torr.hpp [7:9]
+ boost/units/base_units/metric/year.hpp [7:9]
+ boost/units/base_units/si/ampere.hpp [7:9]
+ boost/units/base_units/si/candela.hpp [7:9]
+ boost/units/base_units/si/kelvin.hpp [7:9]
+ boost/units/base_units/si/kilogram.hpp [7:9]
+ boost/units/base_units/si/meter.hpp [7:9]
+ boost/units/base_units/si/mole.hpp [7:9]
+ boost/units/base_units/si/second.hpp [7:9]
+ boost/units/base_units/temperature/celsius.hpp [7:9]
+ boost/units/base_units/temperature/conversions.hpp [7:9]
+ boost/units/base_units/temperature/fahrenheit.hpp [7:9]
+ boost/units/base_units/us/cup.hpp [7:9]
+ boost/units/base_units/us/dram.hpp [7:9]
+ boost/units/base_units/us/fluid_dram.hpp [7:9]
+ boost/units/base_units/us/fluid_ounce.hpp [7:9]
+ boost/units/base_units/us/foot.hpp [7:9]
+ boost/units/base_units/us/gallon.hpp [7:9]
+ boost/units/base_units/us/gill.hpp [7:9]
+ boost/units/base_units/us/grain.hpp [7:9]
+ boost/units/base_units/us/hundredweight.hpp [7:9]
+ boost/units/base_units/us/inch.hpp [7:9]
+ boost/units/base_units/us/mil.hpp [7:9]
+ boost/units/base_units/us/mile.hpp [7:9]
+ boost/units/base_units/us/minim.hpp [7:9]
+ boost/units/base_units/us/ounce.hpp [7:9]
+ boost/units/base_units/us/pint.hpp [7:9]
+ boost/units/base_units/us/pound.hpp [7:9]
+ boost/units/base_units/us/pound_force.hpp [7:9]
+ boost/units/base_units/us/quart.hpp [7:9]
+ boost/units/base_units/us/tablespoon.hpp [7:9]
+ boost/units/base_units/us/teaspoon.hpp [7:9]
+ boost/units/base_units/us/ton.hpp [7:9]
+ boost/units/base_units/us/yard.hpp [7:9]
+ boost/units/cmath.hpp [7:9]
+ boost/units/config.hpp [7:9]
+ boost/units/conversion.hpp [7:9]
+ boost/units/derived_dimension.hpp [7:9]
+ boost/units/detail/absolute_impl.hpp [7:9]
+ boost/units/detail/cmath_impl.hpp [7:9]
+ boost/units/detail/conversion_impl.hpp [7:9]
+ boost/units/detail/dim_impl.hpp [7:9]
+ boost/units/detail/dimension_impl.hpp [7:9]
+ boost/units/detail/dimension_list.hpp [7:9]
+ boost/units/detail/dimensionless_unit.hpp [7:9]
+ boost/units/detail/heterogeneous_conversion.hpp [7:9]
+ boost/units/detail/linear_algebra.hpp [7:9]
+ boost/units/detail/one.hpp [7:9]
+ boost/units/detail/ordinal.hpp [7:9]
+ boost/units/detail/prevent_redefinition.hpp [7:9]
+ boost/units/detail/push_front_if.hpp [7:9]
+ boost/units/detail/push_front_or_add.hpp [7:9]
+ boost/units/detail/sort.hpp [7:9]
+ boost/units/detail/static_rational_power.hpp [7:9]
+ boost/units/detail/unscale.hpp [7:9]
+ boost/units/detail/utility.hpp [7:9]
+ boost/units/dim.hpp [7:9]
+ boost/units/dimension.hpp [7:9]
+ boost/units/dimensionless_quantity.hpp [7:9]
+ boost/units/dimensionless_type.hpp [7:9]
+ boost/units/dimensionless_unit.hpp [7:9]
+ boost/units/get_dimension.hpp [7:9]
+ boost/units/get_system.hpp [7:9]
+ boost/units/heterogeneous_system.hpp [7:9]
+ boost/units/homogeneous_system.hpp [7:9]
+ boost/units/io.hpp [7:9]
+ boost/units/is_dim.hpp [7:9]
+ boost/units/is_dimension_list.hpp [7:9]
+ boost/units/is_dimensionless.hpp [7:9]
+ boost/units/is_dimensionless_quantity.hpp [7:9]
+ boost/units/is_dimensionless_unit.hpp [7:9]
+ boost/units/is_quantity.hpp [7:9]
+ boost/units/is_quantity_of_dimension.hpp [7:9]
+ boost/units/is_quantity_of_system.hpp [7:9]
+ boost/units/is_unit.hpp [7:9]
+ boost/units/is_unit_of_dimension.hpp [7:9]
+ boost/units/is_unit_of_system.hpp [7:9]
+ boost/units/lambda.hpp [7:9]
+ boost/units/limits.hpp [7:9]
+ boost/units/make_scaled_unit.hpp [7:9]
+ boost/units/make_system.hpp [7:9]
+ boost/units/operators.hpp [7:9]
+ boost/units/physical_dimensions.hpp [7:9]
+ boost/units/physical_dimensions/absorbed_dose.hpp [7:9]
+ boost/units/physical_dimensions/acceleration.hpp [7:9]
+ boost/units/physical_dimensions/action.hpp [7:9]
+ boost/units/physical_dimensions/activity.hpp [7:9]
+ boost/units/physical_dimensions/amount.hpp [7:9]
+ boost/units/physical_dimensions/angular_acceleration.hpp [7:9]
+ boost/units/physical_dimensions/angular_momentum.hpp [7:9]
+ boost/units/physical_dimensions/angular_velocity.hpp [7:9]
+ boost/units/physical_dimensions/area.hpp [7:9]
+ boost/units/physical_dimensions/capacitance.hpp [7:9]
+ boost/units/physical_dimensions/conductance.hpp [7:9]
+ boost/units/physical_dimensions/conductivity.hpp [7:9]
+ boost/units/physical_dimensions/current.hpp [7:9]
+ boost/units/physical_dimensions/dose_equivalent.hpp [7:9]
+ boost/units/physical_dimensions/dynamic_viscosity.hpp [7:9]
+ boost/units/physical_dimensions/electric_charge.hpp [7:9]
+ boost/units/physical_dimensions/electric_potential.hpp [7:9]
+ boost/units/physical_dimensions/energy.hpp [7:9]
+ boost/units/physical_dimensions/energy_density.hpp [7:9]
+ boost/units/physical_dimensions/force.hpp [7:9]
+ boost/units/physical_dimensions/frequency.hpp [7:9]
+ boost/units/physical_dimensions/heat_capacity.hpp [7:9]
+ boost/units/physical_dimensions/illuminance.hpp [7:9]
+ boost/units/physical_dimensions/impedance.hpp [7:9]
+ boost/units/physical_dimensions/inductance.hpp [7:9]
+ boost/units/physical_dimensions/information.hpp [6:8]
+ boost/units/physical_dimensions/kinematic_viscosity.hpp [7:9]
+ boost/units/physical_dimensions/length.hpp [7:9]
+ boost/units/physical_dimensions/luminance.hpp [7:9]
+ boost/units/physical_dimensions/luminous_flux.hpp [7:9]
+ boost/units/physical_dimensions/luminous_intensity.hpp [7:9]
+ boost/units/physical_dimensions/magnetic_field_intensity.hpp [7:9]
+ boost/units/physical_dimensions/magnetic_flux.hpp [7:9]
+ boost/units/physical_dimensions/magnetic_flux_density.hpp [7:9]
+ boost/units/physical_dimensions/mass.hpp [7:9]
+ boost/units/physical_dimensions/mass_density.hpp [7:9]
+ boost/units/physical_dimensions/molar_energy.hpp [7:9]
+ boost/units/physical_dimensions/molar_heat_capacity.hpp [7:9]
+ boost/units/physical_dimensions/moment_of_inertia.hpp [7:9]
+ boost/units/physical_dimensions/momentum.hpp [7:9]
+ boost/units/physical_dimensions/permeability.hpp [7:9]
+ boost/units/physical_dimensions/permittivity.hpp [7:9]
+ boost/units/physical_dimensions/plane_angle.hpp [7:9]
+ boost/units/physical_dimensions/power.hpp [7:9]
+ boost/units/physical_dimensions/pressure.hpp [7:9]
+ boost/units/physical_dimensions/reluctance.hpp [7:9]
+ boost/units/physical_dimensions/resistance.hpp [7:9]
+ boost/units/physical_dimensions/resistivity.hpp [7:9]
+ boost/units/physical_dimensions/solid_angle.hpp [7:9]
+ boost/units/physical_dimensions/specific_energy.hpp [7:9]
+ boost/units/physical_dimensions/specific_heat_capacity.hpp [7:9]
+ boost/units/physical_dimensions/specific_volume.hpp [7:9]
+ boost/units/physical_dimensions/stress.hpp [7:9]
+ boost/units/physical_dimensions/surface_density.hpp [7:9]
+ boost/units/physical_dimensions/surface_tension.hpp [7:9]
+ boost/units/physical_dimensions/temperature.hpp [7:9]
+ boost/units/physical_dimensions/thermal_conductivity.hpp [7:9]
+ boost/units/physical_dimensions/time.hpp [7:9]
+ boost/units/physical_dimensions/torque.hpp [7:9]
+ boost/units/physical_dimensions/velocity.hpp [7:9]
+ boost/units/physical_dimensions/volume.hpp [7:9]
+ boost/units/physical_dimensions/wavenumber.hpp [7:9]
+ boost/units/pow.hpp [7:9]
+ boost/units/quantity.hpp [7:9]
+ boost/units/reduce_unit.hpp [7:9]
+ boost/units/scale.hpp [7:9]
+ boost/units/scaled_base_unit.hpp [7:9]
+ boost/units/static_constant.hpp [7:9]
+ boost/units/static_rational.hpp [7:9]
+ boost/units/systems/abstract.hpp [7:9]
+ boost/units/systems/angle/degrees.hpp [7:9]
+ boost/units/systems/angle/gradians.hpp [7:9]
+ boost/units/systems/angle/revolutions.hpp [7:9]
+ boost/units/systems/cgs.hpp [7:9]
+ boost/units/systems/cgs/acceleration.hpp [7:9]
+ boost/units/systems/cgs/area.hpp [7:9]
+ boost/units/systems/cgs/base.hpp [7:9]
+ boost/units/systems/cgs/current.hpp [7:9]
+ boost/units/systems/cgs/dimensionless.hpp [7:9]
+ boost/units/systems/cgs/dynamic_viscosity.hpp [7:9]
+ boost/units/systems/cgs/energy.hpp [7:9]
+ boost/units/systems/cgs/force.hpp [7:9]
+ boost/units/systems/cgs/frequency.hpp [7:9]
+ boost/units/systems/cgs/io.hpp [7:9]
+ boost/units/systems/cgs/kinematic_viscosity.hpp [7:9]
+ boost/units/systems/cgs/length.hpp [7:9]
+ boost/units/systems/cgs/mass.hpp [7:9]
+ boost/units/systems/cgs/mass_density.hpp [7:9]
+ boost/units/systems/cgs/momentum.hpp [7:9]
+ boost/units/systems/cgs/power.hpp [7:9]
+ boost/units/systems/cgs/pressure.hpp [7:9]
+ boost/units/systems/cgs/time.hpp [7:9]
+ boost/units/systems/cgs/velocity.hpp [7:9]
+ boost/units/systems/cgs/volume.hpp [7:9]
+ boost/units/systems/cgs/wavenumber.hpp [7:9]
+ boost/units/systems/detail/constants.hpp [7:9]
+ boost/units/systems/information.hpp [6:8]
+ boost/units/systems/information/bit.hpp [6:8]
+ boost/units/systems/information/byte.hpp [6:8]
+ boost/units/systems/information/hartley.hpp [6:8]
+ boost/units/systems/information/nat.hpp [6:8]
+ boost/units/systems/information/prefixes.hpp [6:8]
+ boost/units/systems/information/shannon.hpp [6:8]
+ boost/units/systems/si.hpp [7:9]
+ boost/units/systems/si/absorbed_dose.hpp [7:9]
+ boost/units/systems/si/acceleration.hpp [7:9]
+ boost/units/systems/si/action.hpp [7:9]
+ boost/units/systems/si/activity.hpp [7:9]
+ boost/units/systems/si/amount.hpp [7:9]
+ boost/units/systems/si/angular_acceleration.hpp [7:9]
+ boost/units/systems/si/angular_momentum.hpp [7:9]
+ boost/units/systems/si/angular_velocity.hpp [7:9]
+ boost/units/systems/si/area.hpp [7:9]
+ boost/units/systems/si/base.hpp [7:9]
+ boost/units/systems/si/capacitance.hpp [7:9]
+ boost/units/systems/si/catalytic_activity.hpp [7:9]
+ boost/units/systems/si/codata/alpha_constants.hpp [7:9]
+ boost/units/systems/si/codata/atomic-nuclear_constants.hpp [7:9]
+ boost/units/systems/si/codata/deuteron_constants.hpp [7:9]
+ boost/units/systems/si/codata/electromagnetic_constants.hpp [7:9]
+ boost/units/systems/si/codata/electron_constants.hpp [7:9]
+ boost/units/systems/si/codata/helion_constants.hpp [7:9]
+ boost/units/systems/si/codata/muon_constants.hpp [7:9]
+ boost/units/systems/si/codata/neutron_constants.hpp [7:9]
+ boost/units/systems/si/codata/physico-chemical_constants.hpp [7:9]
+ boost/units/systems/si/codata/proton_constants.hpp [7:9]
+ boost/units/systems/si/codata/tau_constants.hpp [7:9]
+ boost/units/systems/si/codata/triton_constants.hpp [7:9]
+ boost/units/systems/si/codata/typedefs.hpp [7:9]
+ boost/units/systems/si/codata/universal_constants.hpp [7:9]
+ boost/units/systems/si/codata_constants.hpp [7:9]
+ boost/units/systems/si/conductance.hpp [7:9]
+ boost/units/systems/si/conductivity.hpp [7:9]
+ boost/units/systems/si/current.hpp [7:9]
+ boost/units/systems/si/dimensionless.hpp [7:9]
+ boost/units/systems/si/dose_equivalent.hpp [7:9]
+ boost/units/systems/si/dynamic_viscosity.hpp [7:9]
+ boost/units/systems/si/electric_charge.hpp [7:9]
+ boost/units/systems/si/electric_potential.hpp [7:9]
+ boost/units/systems/si/energy.hpp [7:9]
+ boost/units/systems/si/force.hpp [7:9]
+ boost/units/systems/si/frequency.hpp [7:9]
+ boost/units/systems/si/illuminance.hpp [7:9]
+ boost/units/systems/si/impedance.hpp [7:9]
+ boost/units/systems/si/inductance.hpp [7:9]
+ boost/units/systems/si/io.hpp [7:9]
+ boost/units/systems/si/kinematic_viscosity.hpp [7:9]
+ boost/units/systems/si/length.hpp [7:9]
+ boost/units/systems/si/luminous_flux.hpp [7:9]
+ boost/units/systems/si/luminous_intensity.hpp [7:9]
+ boost/units/systems/si/magnetic_field_intensity.hpp [7:9]
+ boost/units/systems/si/magnetic_flux.hpp [7:9]
+ boost/units/systems/si/magnetic_flux_density.hpp [7:9]
+ boost/units/systems/si/mass.hpp [7:9]
+ boost/units/systems/si/mass_density.hpp [7:9]
+ boost/units/systems/si/moment_of_inertia.hpp [7:9]
+ boost/units/systems/si/momentum.hpp [7:9]
+ boost/units/systems/si/permeability.hpp [7:9]
+ boost/units/systems/si/permittivity.hpp [7:9]
+ boost/units/systems/si/plane_angle.hpp [7:9]
+ boost/units/systems/si/power.hpp [7:9]
+ boost/units/systems/si/prefixes.hpp [7:9]
+ boost/units/systems/si/pressure.hpp [7:9]
+ boost/units/systems/si/reluctance.hpp [7:9]
+ boost/units/systems/si/resistance.hpp [7:9]
+ boost/units/systems/si/resistivity.hpp [7:9]
+ boost/units/systems/si/solid_angle.hpp [7:9]
+ boost/units/systems/si/surface_density.hpp [7:9]
+ boost/units/systems/si/surface_tension.hpp [7:9]
+ boost/units/systems/si/temperature.hpp [7:9]
+ boost/units/systems/si/time.hpp [7:9]
+ boost/units/systems/si/torque.hpp [7:9]
+ boost/units/systems/si/velocity.hpp [7:9]
+ boost/units/systems/si/volume.hpp [7:9]
+ boost/units/systems/si/wavenumber.hpp [7:9]
+ boost/units/systems/temperature/celsius.hpp [7:9]
+ boost/units/systems/temperature/fahrenheit.hpp [7:9]
+ boost/units/unit.hpp [7:9]
+ boost/units/units_fwd.hpp [7:9]
+ boost/utility/value_init.hpp [3:5]
+ boost/uuid/detail/md5.hpp [22:24]
+ boost/uuid/detail/sha1.hpp [4:6]
+ boost/uuid/nil_generator.hpp [4:6]
+ boost/uuid/random_generator.hpp [5:7]
+ boost/uuid/string_generator.hpp [4:6]
+ boost/uuid/uuid.hpp [4:6]
+ boost/uuid/uuid_generators.hpp [4:6]
+ boost/uuid/uuid_io.hpp [4:6]
+ boost/uuid/uuid_serialize.hpp [4:6]
+ boost/variant.hpp [9:11]
+ boost/variant/apply_visitor.hpp [9:11]
+ boost/variant/bad_visit.hpp [9:11]
+ boost/variant/detail/apply_visitor_binary.hpp [9:11]
+ boost/variant/detail/apply_visitor_delayed.hpp [9:11]
+ boost/variant/detail/apply_visitor_unary.hpp [9:11]
+ boost/variant/detail/backup_holder.hpp [9:11]
+ boost/variant/detail/cast_storage.hpp [9:11]
+ boost/variant/detail/config.hpp [9:11]
+ boost/variant/detail/element_index.hpp [8:10]
+ boost/variant/detail/enable_recursive.hpp [9:11]
+ boost/variant/detail/enable_recursive_fwd.hpp [9:11]
+ boost/variant/detail/forced_return.hpp [9:11]
+ boost/variant/detail/generic_result_type.hpp [9:11]
+ boost/variant/detail/has_result_type.hpp [8:10]
+ boost/variant/detail/hash_variant.hpp [9:11]
+ boost/variant/detail/initializer.hpp [9:11]
+ boost/variant/detail/make_variant_list.hpp [9:11]
+ boost/variant/detail/over_sequence.hpp [11:13]
+ boost/variant/detail/substitute.hpp [14:16]
+ boost/variant/detail/substitute_fwd.hpp [9:11]
+ boost/variant/detail/variant_io.hpp [9:11]
+ boost/variant/detail/visitation_impl.hpp [9:11]
+ boost/variant/get.hpp [9:11]
+ boost/variant/polymorphic_get.hpp [8:10]
+ boost/variant/recursive_variant.hpp [9:11]
+ boost/variant/recursive_wrapper.hpp [9:11]
+ boost/variant/recursive_wrapper_fwd.hpp [11:13]
+ boost/variant/static_visitor.hpp [9:11]
+ boost/variant/variant.hpp [9:11]
+ boost/variant/variant_fwd.hpp [9:11]
+ boost/variant/visitor_ptr.hpp [9:11]
+ libs/python/src/converter/arg_to_python_base.cpp [2:4]
+ libs/python/src/converter/builtin_converters.cpp [2:4]
+ libs/python/src/converter/from_python.cpp [2:4]
+ libs/python/src/converter/registry.cpp [2:4]
+ libs/python/src/converter/type_id.cpp [2:4]
+ libs/python/src/errors.cpp [2:4]
+ libs/python/src/exec.cpp [2:4]
+ libs/python/src/import.cpp [2:4]
+ libs/python/src/list.cpp [2:4]
+ libs/python/src/long.cpp [2:4]
+ libs/python/src/module.cpp [2:4]
+ libs/python/src/object/class.cpp [2:4]
+ libs/python/src/object/enum.cpp [2:4]
+ libs/python/src/object/function.cpp [2:4]
+ libs/python/src/object/function_doc_signature.cpp [2:4]
+ libs/python/src/object/inheritance.cpp [2:4]
+ libs/python/src/object/iterator.cpp [2:4]
+ libs/python/src/object/life_support.cpp [2:4]
+ libs/python/src/object/stl_iterator.cpp [2:4]
+ libs/python/src/object_operators.cpp [2:4]
+ libs/python/src/object_protocol.cpp [2:4]
+ libs/python/src/tuple.cpp [2:4]
+ libs/thread/src/win32/thread.cpp [1:3]
+
+KEEP BSL-1.0 47b22ecd1545b89e29a01cd6793d7a40
+BELONGS ya.make
+ License text:
+ // Version 1.0. See http://www.boost.org/LICENSE_1_0.txt.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : REFERENCE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/convert/detail/boost_parameter_ext.hpp [3:3]
+ boost/convert/detail/is_converter.hpp [3:3]
+ boost/convert/detail/is_string.hpp [3:3]
+ boost/convert/spirit.hpp [3:3]
+
+KEEP BSL-1.0 47b4c0f9d07b7c64eb3da0cafc305103
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/connection.hpp at line 9, boost/signals2/detail/foreign_ptr.hpp at line 6, boost/signals2/detail/null_output_iterator.hpp at line 6, boost/signals2/detail/unique_lock.hpp at line 7, boost/signals2/dummy_mutex.hpp at line 8, boost/signals2/optional_last_value.hpp at line 6
+ License text:
+ // Distributed under the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/signals2/connection.hpp [8:10]
+ boost/signals2/detail/foreign_ptr.hpp [5:7]
+ boost/signals2/detail/null_output_iterator.hpp [5:7]
+ boost/signals2/detail/unique_lock.hpp [6:8]
+ boost/signals2/dummy_mutex.hpp [7:9]
+ boost/signals2/optional_last_value.hpp [5:7]
+
+KEEP BSL-1.0 48493a6f602d8228b384d9aab3e50dbd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/local_time/conversion.hpp at line 6, boost/date_time/local_time/custom_time_zone.hpp at line 6, boost/date_time/local_time/local_date_time.hpp at line 6, boost/date_time/local_time/local_time_io.hpp at line 6, boost/date_time/time_zone_base.hpp at line 6
+ License text:
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 78.12
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/date_time/local_time/conversion.hpp [5:6]
+ boost/date_time/local_time/custom_time_zone.hpp [5:6]
+ boost/date_time/local_time/local_date_time.hpp [5:6]
+ boost/date_time/local_time/local_time_io.hpp [5:6]
+ boost/date_time/time_zone_base.hpp [5:6]
+
+KEEP BSL-1.0 49e6bc77399e998df4a19b5127671d43
+BELONGS libs/python/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator_adaptors.hpp at line 3, boost/python/detail/enable_if.hpp at line 3, boost/python/detail/indirect_traits.hpp at line 3, boost/python/detail/is_wrapper.hpp at line 3, boost/python/detail/sfinae.hpp at line 3, boost/python/detail/unwrap_type_id.hpp at line 3, boost/python/detail/unwrap_wrapper.hpp at line 3, boost/python/detail/value_arg.hpp at line 3, boost/python/detail/wrapper_base.hpp at line 3, boost/python/override.hpp at line 5, boost/python/wrapper.hpp at line 3, libs/python/src/dict.cpp at line 3, libs/python/src/str.cpp at line 3, libs/python/src/wrapper.cpp at line 3
+ License text:
+ // Copyright David Abrahams 2004. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/iterator_adaptors.hpp [1:3]
+ boost/python/detail/enable_if.hpp [1:3]
+ boost/python/detail/indirect_traits.hpp [1:3]
+ boost/python/detail/is_wrapper.hpp [1:3]
+ boost/python/detail/sfinae.hpp [1:3]
+ boost/python/detail/unwrap_type_id.hpp [1:3]
+ boost/python/detail/unwrap_wrapper.hpp [1:3]
+ boost/python/detail/value_arg.hpp [1:3]
+ boost/python/detail/wrapper_base.hpp [1:3]
+ boost/python/override.hpp [3:5]
+ boost/python/wrapper.hpp [1:3]
+ libs/python/src/dict.cpp [1:3]
+ libs/python/src/str.cpp [1:3]
+ libs/python/src/wrapper.cpp [1:3]
+
+KEEP Mit-Old-Style 4a0ba219f46e4fe5625b9889e52ace5c
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-mit-old-style
+ Score : 100.00
+ Match type : TEXT
+ Links : http://fedoraproject.org/wiki/Licensing:MIT#Old_Style, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE
+ Files with this license:
+ boost/detail/binary_search.hpp [9:15]
+ boost/multi_array/algorithm.hpp [9:15]
+
+KEEP BSL-1.0 4bc1c5915859ce2250046550c5c61a3b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/numeric/ublas/detail/returntype_deduction.hpp at line 5
+ License text:
+ * Use, modification and distribution is subject to the Boost Software
+ * License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/numeric/ublas/detail/returntype_deduction.hpp [4:6]
+
+KEEP BSL-1.0 4bf92e73158a277da24beb102ed42abb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/rolling_count.hpp at line 6, boost/accumulators/statistics/rolling_sum.hpp at line 6, boost/accumulators/statistics/rolling_window.hpp at line 6
+ License text:
+ // Copyright 2008 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/rolling_count.hpp [4:6]
+ boost/accumulators/statistics/rolling_sum.hpp [4:6]
+ boost/accumulators/statistics/rolling_window.hpp [4:6]
+
+KEEP BSL-1.0 4c18916c3f8400d0d3ea68d73e70192b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/circular_buffer.hpp at line 6, boost/circular_buffer/base.hpp at line 11, boost/circular_buffer/debug.hpp at line 6, boost/circular_buffer/details.hpp at line 9, boost/circular_buffer/space_optimized.hpp at line 8, boost/circular_buffer_fwd.hpp at line 6, boost/core/enable_if.hpp at line 6, boost/none_t.hpp at line 5, boost/optional.hpp at line 4, boost/optional/bad_optional_access.hpp at line 4, boost/optional/detail/experimental_traits.hpp at line 4, boost/optional/detail/old_optional_implementation.hpp at line 5, boost/optional/detail/optional_aligned_storage.hpp at line 5, boost/optional/detail/optional_config.hpp at line 5, boost/optional/detail/optional_factory_support.hpp at line 5, boost/optional/detail/optional_reference_spec.hpp at line 4, boost/optional/detail/optional_relops.hpp at line 5, boost/optional/detail/optional_swap.hpp at line 5, boost/optional/optional.hpp at line 5, boost/optional/optional_fwd.hpp at line 5, boost/optional/optional_io.hpp at line 4, boost/utility/compare_pointees.hpp at line 4, boost/utility/detail/in_place_factory_prefix.hpp at line 5, boost/utility/detail/in_place_factory_suffix.hpp at line 5, boost/utility/in_place_factory.hpp at line 5, boost/utility/typed_in_place_factory.hpp at line 5
+ License text:
+ // Use, modification, and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/circular_buffer.hpp [5:7]
+ boost/circular_buffer/base.hpp [10:12]
+ boost/circular_buffer/debug.hpp [5:7]
+ boost/circular_buffer/details.hpp [8:10]
+ boost/circular_buffer/space_optimized.hpp [7:9]
+ boost/circular_buffer_fwd.hpp [5:7]
+ boost/core/enable_if.hpp [5:7]
+ boost/none_t.hpp [4:6]
+ boost/optional.hpp [3:5]
+ boost/optional/bad_optional_access.hpp [3:5]
+ boost/optional/detail/experimental_traits.hpp [3:5]
+ boost/optional/detail/old_optional_implementation.hpp [4:6]
+ boost/optional/detail/optional_aligned_storage.hpp [4:6]
+ boost/optional/detail/optional_config.hpp [4:6]
+ boost/optional/detail/optional_factory_support.hpp [4:6]
+ boost/optional/detail/optional_reference_spec.hpp [3:5]
+ boost/optional/detail/optional_relops.hpp [4:6]
+ boost/optional/detail/optional_swap.hpp [4:6]
+ boost/optional/optional.hpp [4:6]
+ boost/optional/optional_fwd.hpp [4:6]
+ boost/optional/optional_io.hpp [3:5]
+ boost/utility/compare_pointees.hpp [3:5]
+ boost/utility/detail/in_place_factory_prefix.hpp [4:6]
+ boost/utility/detail/in_place_factory_suffix.hpp [4:6]
+ boost/utility/in_place_factory.hpp [4:6]
+ boost/utility/typed_in_place_factory.hpp [4:6]
+
+KEEP BSL-1.0 4c9557897114277994abc82dcb05944a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/chrono/typeof/boost/chrono/chrono.hpp at line 5, boost/chrono/typeof/boost/ratio.hpp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or
+ // copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/chrono/typeof/boost/chrono/chrono.hpp [4:6]
+ boost/chrono/typeof/boost/ratio.hpp [4:6]
+
+KEEP BSL-1.0 4d2821c205f13355ac67ff2f0c1356b6
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-boost-original
+ Score : 100.00
+ Match type : TEXT
+ Links : http://boost.org, https://github.com/boostorg/rational/blob/0fe0beca5397c812c4f85a7de0d0769de59e12e0/include/boost/rational.hpp, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-original.LICENSE
+ Files with this license:
+ boost/program_options/detail/utf8_codecvt_facet.hpp [2:6]
+
+KEEP BSL-1.0 4d2a8dc89c39573e23ad6a8f52bdd9a1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/utility/base_from_member.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/utility/base_from_member.hpp [3:6]
+
+KEEP BSL-1.0 4d5252e413de14514a327fd589154ef8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/adaptive_pool.hpp at line 5, boost/container/detail/adaptive_node_pool.hpp at line 5, boost/container/detail/adaptive_node_pool_impl.hpp at line 5, boost/container/detail/alloc_lib.h at line 5, boost/container/detail/allocation_type.hpp at line 5, boost/container/detail/config_begin.hpp at line 5, boost/container/detail/config_end.hpp at line 5, boost/container/detail/copy_move_algo.hpp at line 5, boost/container/detail/min_max.hpp at line 5, boost/container/detail/multiallocation_chain.hpp at line 5, boost/container/detail/node_alloc_holder.hpp at line 5, boost/container/detail/node_pool.hpp at line 5, boost/container/detail/node_pool_impl.hpp at line 5, boost/container/detail/pair_key_mapped_of_value.hpp at line 5, boost/container/detail/pool_common.hpp at line 5, boost/container/detail/pool_common_alloc.hpp at line 5, boost/container/detail/version_type.hpp at line 5, boost/container/detail/workaround.hpp at line 5, boost/container/flat_map.hpp at line 5, boost/container/flat_set.hpp at line 5, boost/container/map.hpp at line 5, boost/container/set.hpp at line 5, boost/interprocess/detail/os_thread_functions.hpp at line 5, boost/intrusive/detail/workaround.hpp at line 5, boost/move/adl_move_swap.hpp at line 6
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/adaptive_pool.hpp [3:5]
+ boost/container/detail/adaptive_node_pool.hpp [3:5]
+ boost/container/detail/adaptive_node_pool_impl.hpp [3:5]
+ boost/container/detail/alloc_lib.h [3:5]
+ boost/container/detail/allocation_type.hpp [3:5]
+ boost/container/detail/config_begin.hpp [3:5]
+ boost/container/detail/config_end.hpp [3:5]
+ boost/container/detail/copy_move_algo.hpp [3:5]
+ boost/container/detail/min_max.hpp [3:5]
+ boost/container/detail/multiallocation_chain.hpp [3:5]
+ boost/container/detail/node_alloc_holder.hpp [3:5]
+ boost/container/detail/node_pool.hpp [3:5]
+ boost/container/detail/node_pool_impl.hpp [3:5]
+ boost/container/detail/pair_key_mapped_of_value.hpp [3:5]
+ boost/container/detail/pool_common.hpp [3:5]
+ boost/container/detail/pool_common_alloc.hpp [3:5]
+ boost/container/detail/version_type.hpp [3:5]
+ boost/container/detail/workaround.hpp [3:5]
+ boost/container/flat_map.hpp [3:5]
+ boost/container/flat_set.hpp [3:5]
+ boost/container/map.hpp [3:5]
+ boost/container/set.hpp [3:5]
+ boost/interprocess/detail/os_thread_functions.hpp [3:5]
+ boost/intrusive/detail/workaround.hpp [3:5]
+ boost/move/adl_move_swap.hpp [4:6]
+
+KEEP BSL-1.0 4e866b0f702c0f86a7d853ca58d2b0d6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/utility/detail/result_of_iterate.hpp at line 10
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or
+ // copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/utility/detail/result_of_iterate.hpp [9:11]
+
+KEEP BSL-1.0 4ea1383dd870de8fa4ba78b3f077f660
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/containers/containers_fwd.hpp at line 5, boost/interprocess/detail/file_locking_helpers.hpp at line 5, boost/interprocess/detail/intermodule_singleton.hpp at line 5, boost/interprocess/detail/intermodule_singleton_common.hpp at line 5, boost/interprocess/detail/managed_global_memory.hpp at line 5, boost/interprocess/detail/portable_intermodule_singleton.hpp at line 5, boost/interprocess/detail/windows_intermodule_singleton.hpp at line 5, boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp at line 5, boost/interprocess/xsi_shared_memory.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2009-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/containers/containers_fwd.hpp [3:5]
+ boost/interprocess/detail/file_locking_helpers.hpp [3:5]
+ boost/interprocess/detail/intermodule_singleton.hpp [3:5]
+ boost/interprocess/detail/intermodule_singleton_common.hpp [3:5]
+ boost/interprocess/detail/managed_global_memory.hpp [3:5]
+ boost/interprocess/detail/portable_intermodule_singleton.hpp [3:5]
+ boost/interprocess/detail/windows_intermodule_singleton.hpp [3:5]
+ boost/interprocess/detail/xsi_shared_memory_file_wrapper.hpp [3:5]
+ boost/interprocess/xsi_shared_memory.hpp [3:5]
+
+KEEP BSL-1.0 4ebf5547dee6ab6b8aeb6b822352227b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/deque.hpp at line 5, boost/container/detail/flat_tree.hpp at line 5, boost/container/detail/tree.hpp at line 5, boost/container/list.hpp at line 5, boost/container/string.hpp at line 5, boost/container/vector.hpp at line 5, boost/interprocess/detail/win32_api.hpp at line 5, boost/interprocess/detail/workaround.hpp at line 5, boost/interprocess/exceptions.hpp at line 5, boost/interprocess/offset_ptr.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/deque.hpp [3:5]
+ boost/container/detail/flat_tree.hpp [3:5]
+ boost/container/detail/tree.hpp [3:5]
+ boost/container/list.hpp [3:5]
+ boost/container/string.hpp [3:5]
+ boost/container/vector.hpp [3:5]
+ boost/interprocess/detail/win32_api.hpp [3:5]
+ boost/interprocess/detail/workaround.hpp [3:5]
+ boost/interprocess/exceptions.hpp [3:5]
+ boost/interprocess/offset_ptr.hpp [3:5]
+
+KEEP BSL-1.0 4ee4563f1657e4bee051a7033c20db63
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/xsi_key.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2009. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/xsi_key.hpp [3:5]
+
+KEEP BSL-1.0 50c03a0f9bee856a44f9bf0a4cffed91
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iostreams/detail/absolute_path.hpp at line 3, boost/iostreams/detail/adapter/device_adapter.hpp at line 13, boost/iostreams/detail/adapter/filter_adapter.hpp at line 12, boost/iostreams/detail/config/rtl.hpp at line 3, boost/iostreams/detail/current_directory.hpp at line 3, boost/iostreams/detail/execute.hpp at line 3, boost/iostreams/detail/file_handle.hpp at line 3, boost/iostreams/detail/functional.hpp at line 3, boost/iostreams/detail/path.hpp at line 3, boost/iostreams/detail/restrict_impl.hpp at line 3, boost/iostreams/filter/grep.hpp at line 3, boost/iostreams/restrict.hpp at line 3, boost/iostreams/slice.hpp at line 3
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/iostreams/detail/absolute_path.hpp [2:3]
+ boost/iostreams/detail/adapter/device_adapter.hpp [12:13]
+ boost/iostreams/detail/adapter/filter_adapter.hpp [11:12]
+ boost/iostreams/detail/config/rtl.hpp [2:3]
+ boost/iostreams/detail/current_directory.hpp [2:3]
+ boost/iostreams/detail/execute.hpp [2:3]
+ boost/iostreams/detail/file_handle.hpp [2:3]
+ boost/iostreams/detail/functional.hpp [2:3]
+ boost/iostreams/detail/path.hpp [2:3]
+ boost/iostreams/detail/restrict_impl.hpp [2:3]
+ boost/iostreams/filter/grep.hpp [2:3]
+ boost/iostreams/restrict.hpp [2:3]
+ boost/iostreams/slice.hpp [2:3]
+
+KEEP BSL-1.0 50dc18b27f34dab68ff41aa3f7880dda
+BELONGS libs/context/ya.make libs/coroutine/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/platform/cloudabi.hpp at line 3, boost/container/detail/function_detector.hpp at line 6, boost/container/detail/minimal_char_traits_header.hpp at line 6, boost/container/options.hpp at line 6, boost/context/all.hpp at line 4, boost/context/continuation.hpp at line 4, boost/context/continuation_fcontext.hpp at line 4, boost/context/continuation_ucontext.hpp at line 4, boost/context/continuation_winfib.hpp at line 4, boost/context/detail/apply.hpp at line 4, boost/context/detail/config.hpp at line 4, boost/context/detail/disable_overload.hpp at line 4, boost/context/detail/exception.hpp at line 4, boost/context/detail/exchange.hpp at line 4, boost/context/detail/externc.hpp at line 4, boost/context/detail/fcontext.hpp at line 4, boost/context/detail/index_sequence.hpp at line 4, boost/context/detail/invoke.hpp at line 4, boost/context/detail/prefetch.hpp at line 3, boost/context/detail/tuple.hpp at line 4, boost/context/execution_context.hpp at line 4, boost/context/execution_context_v1.hpp at line 4, boost/context/execution_context_v2.hpp at line 4, boost/context/execution_context_v2_void.ipp at line 4, boost/context/fiber.hpp at line 4, boost/context/fiber_fcontext.hpp at line 4, boost/context/fiber_ucontext.hpp at line 4, boost/context/fiber_winfib.hpp at line 4, boost/context/fixedsize_stack.hpp at line 4, boost/context/flags.hpp at line 4, boost/context/pooled_fixedsize_stack.hpp at line 4, boost/context/posix/protected_fixedsize_stack.hpp at line 4, boost/context/posix/segmented_stack.hpp at line 4, boost/context/preallocated.hpp at line 4, boost/context/protected_fixedsize_stack.hpp at line 4, boost/context/segmented_stack.hpp at line 4, boost/context/stack_context.hpp at line 4, boost/context/stack_traits.hpp at line 4, boost/context/windows/protected_fixedsize_stack.hpp at line 4, boost/coroutine/all.hpp at line 4, boost/coroutine/asymmetric_coroutine.hpp at line 4, boost/coroutine/attributes.hpp at line 4, boost/coroutine/coroutine.hpp at line 4, boost/coroutine/detail/config.hpp at line 4, boost/coroutine/detail/coroutine_context.hpp at line 4, boost/coroutine/detail/data.hpp at line 4, boost/coroutine/detail/flags.hpp at line 4, boost/coroutine/detail/parameters.hpp at line 4, boost/coroutine/detail/preallocated.hpp at line 4, boost/coroutine/detail/pull_coroutine_impl.hpp at line 4, boost/coroutine/detail/pull_coroutine_object.hpp at line 4, boost/coroutine/detail/pull_coroutine_synthesized.hpp at line 4, boost/coroutine/detail/push_coroutine_impl.hpp at line 4, boost/coroutine/detail/push_coroutine_object.hpp at line 4, boost/coroutine/detail/push_coroutine_synthesized.hpp at line 4, boost/coroutine/detail/setup.hpp at line 4, boost/coroutine/detail/symmetric_coroutine_call.hpp at line 4, boost/coroutine/detail/symmetric_coroutine_impl.hpp at line 4, boost/coroutine/detail/symmetric_coroutine_object.hpp at line 4, boost/coroutine/detail/symmetric_coroutine_yield.hpp at line 4, boost/coroutine/detail/trampoline.hpp at line 4, boost/coroutine/detail/trampoline_pull.hpp at line 4, boost/coroutine/detail/trampoline_push.hpp at line 4, boost/coroutine/exceptions.hpp at line 4, boost/coroutine/flags.hpp at line 4, boost/coroutine/posix/protected_stack_allocator.hpp at line 4, boost/coroutine/posix/segmented_stack_allocator.hpp at line 4, boost/coroutine/protected_stack_allocator.hpp at line 4, boost/coroutine/segmented_stack_allocator.hpp at line 4, boost/coroutine/stack_allocator.hpp at line 4, boost/coroutine/stack_context.hpp at line 4, boost/coroutine/stack_traits.hpp at line 4, boost/coroutine/standard_stack_allocator.hpp at line 4, boost/coroutine/symmetric_coroutine.hpp at line 4, boost/coroutine/windows/protected_stack_allocator.hpp at line 4, boost/coroutine2/all.hpp at line 4, boost/coroutine2/coroutine.hpp at line 4, boost/coroutine2/detail/config.hpp at line 4, boost/coroutine2/detail/coroutine.hpp at line 4, boost/coroutine2/detail/create_control_block.ipp at line 4, boost/coroutine2/detail/decay_copy.hpp at line 4, boost/coroutine2/detail/disable_overload.hpp at line 4, boost/coroutine2/detail/forced_unwind.hpp at line 4, boost/coroutine2/detail/pull_control_block_cc.hpp at line 4, boost/coroutine2/detail/pull_control_block_cc.ipp at line 4, boost/coroutine2/detail/pull_coroutine.hpp at line 4, boost/coroutine2/detail/pull_coroutine.ipp at line 4, boost/coroutine2/detail/push_control_block_cc.hpp at line 4, boost/coroutine2/detail/push_control_block_cc.ipp at line 4, boost/coroutine2/detail/push_coroutine.hpp at line 4, boost/coroutine2/detail/push_coroutine.ipp at line 4, boost/coroutine2/detail/state.hpp at line 4, boost/coroutine2/detail/wrap.hpp at line 4, boost/coroutine2/fixedsize_stack.hpp at line 4, boost/coroutine2/pooled_fixedsize_stack.hpp at line 4, boost/coroutine2/protected_fixedsize_stack.hpp at line 4, boost/coroutine2/segmented_stack.hpp at line 4, boost/detail/dynamic_bitset.hpp at line 10, boost/dynamic_bitset.hpp at line 7, boost/dynamic_bitset/config.hpp at line 7, boost/dynamic_bitset/dynamic_bitset.hpp at line 12, boost/dynamic_bitset/serialization.hpp at line 6, boost/dynamic_bitset_fwd.hpp at line 7, boost/fiber/algo/algorithm.hpp at line 3, boost/fiber/algo/numa/work_stealing.hpp at line 4, boost/fiber/algo/round_robin.hpp at line 3, boost/fiber/algo/shared_work.hpp at line 4, boost/fiber/algo/work_stealing.hpp at line 4, boost/fiber/all.hpp at line 4, boost/fiber/barrier.hpp at line 4, boost/fiber/buffered_channel.hpp at line 4, boost/fiber/channel_op_status.hpp at line 3, boost/fiber/condition_variable.hpp at line 4, boost/fiber/context.hpp at line 4, boost/fiber/cuda/waitfor.hpp at line 4, boost/fiber/detail/config.hpp at line 4, boost/fiber/detail/context_spinlock_queue.hpp at line 4, boost/fiber/detail/context_spmc_queue.hpp at line 4, boost/fiber/detail/convert.hpp at line 4, boost/fiber/detail/cpu_relax.hpp at line 4, boost/fiber/detail/data.hpp at line 4, boost/fiber/detail/decay_copy.hpp at line 4, boost/fiber/detail/disable_overload.hpp at line 4, boost/fiber/detail/fss.hpp at line 4, boost/fiber/detail/futex.hpp at line 4, boost/fiber/detail/is_all_same.hpp at line 4, boost/fiber/detail/rtm.hpp at line 4, boost/fiber/detail/spinlock.hpp at line 4, boost/fiber/detail/spinlock_rtm.hpp at line 4, boost/fiber/detail/spinlock_status.hpp at line 4, boost/fiber/detail/spinlock_ttas.hpp at line 4, boost/fiber/detail/spinlock_ttas_adaptive.hpp at line 4, boost/fiber/detail/spinlock_ttas_adaptive_futex.hpp at line 4, boost/fiber/detail/spinlock_ttas_futex.hpp at line 4, boost/fiber/exceptions.hpp at line 4, boost/fiber/fiber.hpp at line 4, boost/fiber/fixedsize_stack.hpp at line 4, boost/fiber/fss.hpp at line 4, boost/fiber/future.hpp at line 4, boost/fiber/future/async.hpp at line 4, boost/fiber/future/detail/shared_state.hpp at line 4, boost/fiber/future/detail/shared_state_object.hpp at line 4, boost/fiber/future/detail/task_base.hpp at line 3, boost/fiber/future/detail/task_object.hpp at line 4, boost/fiber/future/future.hpp at line 4, boost/fiber/future/future_status.hpp at line 4, boost/fiber/future/packaged_task.hpp at line 4, boost/fiber/future/promise.hpp at line 4, boost/fiber/hip/waitfor.hpp at line 4, boost/fiber/mutex.hpp at line 4, boost/fiber/numa/pin_thread.hpp at line 4, boost/fiber/numa/topology.hpp at line 4, boost/fiber/operations.hpp at line 3, boost/fiber/policy.hpp at line 4, boost/fiber/pooled_fixedsize_stack.hpp at line 4, boost/fiber/properties.hpp at line 3, boost/fiber/protected_fixedsize_stack.hpp at line 4, boost/fiber/recursive_mutex.hpp at line 4, boost/fiber/recursive_timed_mutex.hpp at line 4, boost/fiber/scheduler.hpp at line 3, boost/fiber/segmented_stack.hpp at line 4, boost/fiber/timed_mutex.hpp at line 4, boost/fiber/type.hpp at line 4, boost/fiber/unbuffered_channel.hpp at line 4, boost/format/exceptions.hpp at line 8, boost/graph/two_graphs_common_spanning_trees.hpp at line 3, boost/integer/integer_log2.hpp at line 10, boost/intrusive/any_hook.hpp at line 6, boost/intrusive/avl_set.hpp at line 6, boost/intrusive/avl_set_hook.hpp at line 6, boost/intrusive/avltree.hpp at line 6, boost/intrusive/avltree_algorithms.hpp at line 7, boost/intrusive/bs_set.hpp at line 6, boost/intrusive/bs_set_hook.hpp at line 6, boost/intrusive/bstree.hpp at line 6, boost/intrusive/bstree_algorithms.hpp at line 6, boost/intrusive/circular_list_algorithms.hpp at line 7, boost/intrusive/circular_slist_algorithms.hpp at line 7, boost/intrusive/derivation_value_traits.hpp at line 6, boost/intrusive/detail/algo_type.hpp at line 6, boost/intrusive/detail/any_node_and_algorithms.hpp at line 6, boost/intrusive/detail/array_initializer.hpp at line 6, boost/intrusive/detail/assert.hpp at line 6, boost/intrusive/detail/avltree_node.hpp at line 6, boost/intrusive/detail/bstree_algorithms_base.hpp at line 6, boost/intrusive/detail/common_slist_algorithms.hpp at line 6, boost/intrusive/detail/config_begin.hpp at line 6, boost/intrusive/detail/config_end.hpp at line 6, boost/intrusive/detail/default_header_holder.hpp at line 6, boost/intrusive/detail/ebo_functor_holder.hpp at line 7, boost/intrusive/detail/empty_node_checker.hpp at line 6, boost/intrusive/detail/equal_to_value.hpp at line 6, boost/intrusive/detail/exception_disposer.hpp at line 6, boost/intrusive/detail/function_detector.hpp at line 6, boost/intrusive/detail/generic_hook.hpp at line 6, boost/intrusive/detail/get_value_traits.hpp at line 6, boost/intrusive/detail/hashtable_node.hpp at line 6, boost/intrusive/detail/hook_traits.hpp at line 6, boost/intrusive/detail/iiterator.hpp at line 6, boost/intrusive/detail/is_stateful_value_traits.hpp at line 6, boost/intrusive/detail/iterator.hpp at line 6, boost/intrusive/detail/key_nodeptr_comp.hpp at line 6, boost/intrusive/detail/list_iterator.hpp at line 7, boost/intrusive/detail/list_node.hpp at line 7, boost/intrusive/detail/math.hpp at line 6, boost/intrusive/detail/minimal_less_equal_header.hpp at line 6, boost/intrusive/detail/minimal_pair_header.hpp at line 6, boost/intrusive/detail/mpl.hpp at line 7, boost/intrusive/detail/node_cloner_disposer.hpp at line 6, boost/intrusive/detail/node_holder.hpp at line 6, boost/intrusive/detail/node_to_value.hpp at line 6, boost/intrusive/detail/parent_from_member.hpp at line 6, boost/intrusive/detail/rbtree_node.hpp at line 7, boost/intrusive/detail/reverse_iterator.hpp at line 6, boost/intrusive/detail/simple_disposers.hpp at line 6, boost/intrusive/detail/size_holder.hpp at line 6, boost/intrusive/detail/slist_iterator.hpp at line 7, boost/intrusive/detail/slist_node.hpp at line 7, boost/intrusive/detail/transform_iterator.hpp at line 6, boost/intrusive/detail/tree_iterator.hpp at line 6, boost/intrusive/detail/tree_node.hpp at line 6, boost/intrusive/detail/uncast.hpp at line 6, boost/intrusive/hashtable.hpp at line 6, boost/intrusive/intrusive_fwd.hpp at line 6, boost/intrusive/linear_slist_algorithms.hpp at line 7, boost/intrusive/link_mode.hpp at line 6, boost/intrusive/list.hpp at line 7, boost/intrusive/list_hook.hpp at line 7, boost/intrusive/member_value_traits.hpp at line 6, boost/intrusive/options.hpp at line 6, boost/intrusive/pack_options.hpp at line 6, boost/intrusive/parent_from_member.hpp at line 6, boost/intrusive/pointer_plus_bits.hpp at line 6, boost/intrusive/priority_compare.hpp at line 6, boost/intrusive/rbtree.hpp at line 6, boost/intrusive/rbtree_algorithms.hpp at line 7, boost/intrusive/set.hpp at line 7, boost/intrusive/set_hook.hpp at line 7, boost/intrusive/sg_set.hpp at line 6, boost/intrusive/sgtree.hpp at line 6, boost/intrusive/sgtree_algorithms.hpp at line 6, boost/intrusive/slist.hpp at line 7, boost/intrusive/slist_hook.hpp at line 7, boost/intrusive/splay_set.hpp at line 6, boost/intrusive/splaytree.hpp at line 6, boost/intrusive/splaytree_algorithms.hpp at line 6, boost/intrusive/treap.hpp at line 6, boost/intrusive/treap_algorithms.hpp at line 6, boost/intrusive/treap_set.hpp at line 6, boost/intrusive/trivial_value_traits.hpp at line 6, boost/intrusive/unordered_set.hpp at line 7, boost/intrusive/unordered_set_hook.hpp at line 7, boost/metaparse.hpp at line 3, boost/metaparse/accept.hpp at line 6, boost/metaparse/accept_tag.hpp at line 6, boost/metaparse/accept_when.hpp at line 6, boost/metaparse/alphanum.hpp at line 6, boost/metaparse/always.hpp at line 6, boost/metaparse/always_c.hpp at line 6, boost/metaparse/build_parser.hpp at line 6, boost/metaparse/change_error_message.hpp at line 6, boost/metaparse/config.hpp at line 6, boost/metaparse/debug_parsing_error.hpp at line 6, boost/metaparse/define_error.hpp at line 6, boost/metaparse/digit.hpp at line 6, boost/metaparse/digit_val.hpp at line 6, boost/metaparse/empty.hpp at line 6, boost/metaparse/entire_input.hpp at line 6, boost/metaparse/error/digit_expected.hpp at line 6, boost/metaparse/error/end_of_input_expected.hpp at line 6, boost/metaparse/error/index_out_of_range.hpp at line 6, boost/metaparse/error/letter_expected.hpp at line 6, boost/metaparse/error/literal_expected.hpp at line 6, boost/metaparse/error/none_of_the_expected_cases_found.hpp at line 6, boost/metaparse/error/unexpected_character.hpp at line 6, boost/metaparse/error/unexpected_end_of_input.hpp at line 6, boost/metaparse/error/unpaired.hpp at line 6, boost/metaparse/error/whitespace_expected.hpp at line 6, boost/metaparse/except.hpp at line 6, boost/metaparse/fail.hpp at line 6, boost/metaparse/fail_at_first_char_expected.hpp at line 6, boost/metaparse/fail_tag.hpp at line 6, boost/metaparse/first_of.hpp at line 6, boost/metaparse/foldl.hpp at line 6, boost/metaparse/foldl1.hpp at line 6, boost/metaparse/foldl_reject_incomplete.hpp at line 6, boost/metaparse/foldl_reject_incomplete1.hpp at line 6, boost/metaparse/foldl_reject_incomplete_start_with_parser.hpp at line 6, boost/metaparse/foldl_start_with_parser.hpp at line 6, boost/metaparse/foldr.hpp at line 6, boost/metaparse/foldr1.hpp at line 6, boost/metaparse/foldr_reject_incomplete.hpp at line 6, boost/metaparse/foldr_reject_incomplete1.hpp at line 6, boost/metaparse/foldr_start_with_parser.hpp at line 6, boost/metaparse/get_col.hpp at line 6, boost/metaparse/get_line.hpp at line 6, boost/metaparse/get_message.hpp at line 6, boost/metaparse/get_position.hpp at line 6, boost/metaparse/get_prev_char.hpp at line 6, boost/metaparse/get_remaining.hpp at line 6, boost/metaparse/get_result.hpp at line 6, boost/metaparse/grammar.hpp at line 6, boost/metaparse/if_.hpp at line 6, boost/metaparse/int_.hpp at line 6, boost/metaparse/is_error.hpp at line 6, boost/metaparse/iterate.hpp at line 6, boost/metaparse/iterate_c.hpp at line 6, boost/metaparse/keyword.hpp at line 6, boost/metaparse/last_of.hpp at line 6, boost/metaparse/letter.hpp at line 6, boost/metaparse/limit_one_char_except_size.hpp at line 6, boost/metaparse/limit_one_of_size.hpp at line 6, boost/metaparse/limit_sequence_size.hpp at line 6, boost/metaparse/limit_string_size.hpp at line 6, boost/metaparse/lit.hpp at line 6, boost/metaparse/lit_c.hpp at line 6, boost/metaparse/look_ahead.hpp at line 6, boost/metaparse/middle_of.hpp at line 6, boost/metaparse/next_char.hpp at line 6, boost/metaparse/next_line.hpp at line 6, boost/metaparse/nth_of.hpp at line 6, boost/metaparse/nth_of_c.hpp at line 6, boost/metaparse/one_char.hpp at line 6, boost/metaparse/one_char_except.hpp at line 6, boost/metaparse/one_char_except_c.hpp at line 6, boost/metaparse/one_of.hpp at line 6, boost/metaparse/one_of_c.hpp at line 6, boost/metaparse/optional.hpp at line 6, boost/metaparse/range.hpp at line 6, boost/metaparse/range_c.hpp at line 6, boost/metaparse/reject.hpp at line 6, boost/metaparse/repeated.hpp at line 6, boost/metaparse/repeated1.hpp at line 6, boost/metaparse/repeated_one_of.hpp at line 6, boost/metaparse/repeated_one_of1.hpp at line 6, boost/metaparse/repeated_reject_incomplete.hpp at line 6, boost/metaparse/repeated_reject_incomplete1.hpp at line 6, boost/metaparse/return_.hpp at line 6, boost/metaparse/sequence.hpp at line 6, boost/metaparse/sequence_apply.hpp at line 6, boost/metaparse/source_position.hpp at line 6, boost/metaparse/source_position_tag.hpp at line 6, boost/metaparse/space.hpp at line 6, boost/metaparse/spaces.hpp at line 6, boost/metaparse/start.hpp at line 6, boost/metaparse/string.hpp at line 3, boost/metaparse/string_tag.hpp at line 6, boost/metaparse/token.hpp at line 6, boost/metaparse/transform.hpp at line 6, boost/metaparse/transform_error.hpp at line 6, boost/metaparse/transform_error_message.hpp at line 6, boost/metaparse/unless_error.hpp at line 6, boost/metaparse/util/digit_to_int.hpp at line 6, boost/metaparse/util/digit_to_int_c.hpp at line 6, boost/metaparse/util/in_range.hpp at line 6, boost/metaparse/util/in_range_c.hpp at line 6, boost/metaparse/util/int_to_digit.hpp at line 6, boost/metaparse/util/int_to_digit_c.hpp at line 6, boost/metaparse/util/is_digit.hpp at line 6, boost/metaparse/util/is_lcase_letter.hpp at line 6, boost/metaparse/util/is_letter.hpp at line 6, boost/metaparse/util/is_ucase_letter.hpp at line 6, boost/metaparse/util/is_whitespace.hpp at line 6, boost/metaparse/util/is_whitespace_c.hpp at line 6, boost/metaparse/v1/accept.hpp at line 6, boost/metaparse/v1/accept_tag.hpp at line 6, boost/metaparse/v1/accept_when.hpp at line 6, boost/metaparse/v1/alphanum.hpp at line 6, boost/metaparse/v1/always.hpp at line 6, boost/metaparse/v1/always_c.hpp at line 6, boost/metaparse/v1/build_parser.hpp at line 6, boost/metaparse/v1/change_error_message.hpp at line 6, boost/metaparse/v1/cpp11/first_of.hpp at line 6, boost/metaparse/v1/cpp11/fwd/string.hpp at line 6, boost/metaparse/v1/cpp11/impl/at_c.hpp at line 6, boost/metaparse/v1/cpp11/impl/concat.hpp at line 6, boost/metaparse/v1/cpp11/impl/empty_string.hpp at line 6, boost/metaparse/v1/cpp11/impl/nth_of_c.hpp at line 6, boost/metaparse/v1/cpp11/impl/nth_of_c_skip_remaining.hpp at line 6, boost/metaparse/v1/cpp11/impl/pop_back.hpp at line 6, boost/metaparse/v1/cpp11/impl/pop_front.hpp at line 6, boost/metaparse/v1/cpp11/impl/push_back_c.hpp at line 6, boost/metaparse/v1/cpp11/impl/push_front_c.hpp at line 6, boost/metaparse/v1/cpp11/impl/remove_trailing_no_chars.hpp at line 6, boost/metaparse/v1/cpp11/impl/size.hpp at line 6, boost/metaparse/v1/cpp11/impl/string_at.hpp at line 6, boost/metaparse/v1/cpp11/last_of.hpp at line 6, boost/metaparse/v1/cpp11/nth_of.hpp at line 6, boost/metaparse/v1/cpp11/nth_of_c.hpp at line 6, boost/metaparse/v1/cpp11/string.hpp at line 6, boost/metaparse/v1/cpp98/first_of.hpp at line 6, boost/metaparse/v1/cpp98/fwd/string.hpp at line 6, boost/metaparse/v1/cpp98/impl/at_c.hpp at line 6, boost/metaparse/v1/cpp98/impl/empty_string.hpp at line 6, boost/metaparse/v1/cpp98/impl/nth_of_c.hpp at line 6, boost/metaparse/v1/cpp98/impl/nth_of_c_impl.hpp at line 6, boost/metaparse/v1/cpp98/impl/pop_back.hpp at line 6, boost/metaparse/v1/cpp98/impl/pop_front.hpp at line 6, boost/metaparse/v1/cpp98/impl/push_back_c.hpp at line 6, boost/metaparse/v1/cpp98/impl/push_front_c.hpp at line 6, boost/metaparse/v1/cpp98/impl/size.hpp at line 6, boost/metaparse/v1/cpp98/impl/skip_seq.hpp at line 6, boost/metaparse/v1/cpp98/impl/update_c.hpp at line 6, boost/metaparse/v1/cpp98/last_of.hpp at line 6, boost/metaparse/v1/cpp98/nth_of.hpp at line 6, boost/metaparse/v1/cpp98/nth_of_c.hpp at line 6, boost/metaparse/v1/cpp98/string.hpp at line 6, boost/metaparse/v1/debug_parsing_error.hpp at line 6, boost/metaparse/v1/define_error.hpp at line 6, boost/metaparse/v1/digit.hpp at line 6, boost/metaparse/v1/digit_val.hpp at line 6, boost/metaparse/v1/empty.hpp at line 6, boost/metaparse/v1/entire_input.hpp at line 6, boost/metaparse/v1/error/digit_expected.hpp at line 6, boost/metaparse/v1/error/end_of_input_expected.hpp at line 6, boost/metaparse/v1/error/expected_to_fail.hpp at line 6, boost/metaparse/v1/error/index_out_of_range.hpp at line 6, boost/metaparse/v1/error/letter_expected.hpp at line 6, boost/metaparse/v1/error/literal_expected.hpp at line 6, boost/metaparse/v1/error/none_of_the_expected_cases_found.hpp at line 6, boost/metaparse/v1/error/unexpected_character.hpp at line 6, boost/metaparse/v1/error/unexpected_end_of_input.hpp at line 6, boost/metaparse/v1/error/unpaired.hpp at line 6, boost/metaparse/v1/error/whitespace_expected.hpp at line 6, boost/metaparse/v1/except.hpp at line 6, boost/metaparse/v1/fail.hpp at line 6, boost/metaparse/v1/fail_at_first_char_expected.hpp at line 6, boost/metaparse/v1/fail_tag.hpp at line 6, boost/metaparse/v1/first_of.hpp at line 6, boost/metaparse/v1/foldl.hpp at line 6, boost/metaparse/v1/foldl1.hpp at line 6, boost/metaparse/v1/foldl_reject_incomplete.hpp at line 6, boost/metaparse/v1/foldl_reject_incomplete1.hpp at line 6, boost/metaparse/v1/foldl_reject_incomplete_start_with_parser.hpp at line 6, boost/metaparse/v1/foldl_start_with_parser.hpp at line 6, boost/metaparse/v1/foldr.hpp at line 6, boost/metaparse/v1/foldr1.hpp at line 6, boost/metaparse/v1/foldr_reject_incomplete.hpp at line 6, boost/metaparse/v1/foldr_reject_incomplete1.hpp at line 6, boost/metaparse/v1/foldr_start_with_parser.hpp at line 6, boost/metaparse/v1/fwd/accept.hpp at line 6, boost/metaparse/v1/fwd/build_parser.hpp at line 6, boost/metaparse/v1/fwd/get_col.hpp at line 6, boost/metaparse/v1/fwd/get_line.hpp at line 6, boost/metaparse/v1/fwd/get_message.hpp at line 6, boost/metaparse/v1/fwd/get_position.hpp at line 6, boost/metaparse/v1/fwd/get_prev_char.hpp at line 6, boost/metaparse/v1/fwd/get_remaining.hpp at line 6, boost/metaparse/v1/fwd/get_result.hpp at line 6, boost/metaparse/v1/fwd/next_char.hpp at line 6, boost/metaparse/v1/fwd/next_line.hpp at line 6, boost/metaparse/v1/fwd/reject.hpp at line 6, boost/metaparse/v1/fwd/source_position.hpp at line 6, boost/metaparse/v1/fwd/string.hpp at line 6, boost/metaparse/v1/get_col.hpp at line 6, boost/metaparse/v1/get_line.hpp at line 6, boost/metaparse/v1/get_message.hpp at line 6, boost/metaparse/v1/get_position.hpp at line 6, boost/metaparse/v1/get_prev_char.hpp at line 6, boost/metaparse/v1/get_remaining.hpp at line 6, boost/metaparse/v1/get_result.hpp at line 6, boost/metaparse/v1/grammar.hpp at line 6, boost/metaparse/v1/if_.hpp at line 6, boost/metaparse/v1/impl/apply_parser.hpp at line 6, boost/metaparse/v1/impl/assert_string_length.hpp at line 6, boost/metaparse/v1/impl/at_c.hpp at line 6, boost/metaparse/v1/impl/back_inserter.hpp at line 6, boost/metaparse/v1/impl/front_inserter.hpp at line 6, boost/metaparse/v1/impl/fwd/iterate_impl.hpp at line 6, boost/metaparse/v1/impl/has_type.hpp at line 6, boost/metaparse/v1/impl/is_any.hpp at line 6, boost/metaparse/v1/impl/is_char_c.hpp at line 6, boost/metaparse/v1/impl/iterate_impl.hpp at line 6, boost/metaparse/v1/impl/iterate_impl_unchecked.hpp at line 6, boost/metaparse/v1/impl/later_result.hpp at line 6, boost/metaparse/v1/impl/next_digit.hpp at line 6, boost/metaparse/v1/impl/no_char.hpp at line 6, boost/metaparse/v1/impl/one_char_except_not_used.hpp at line 6, boost/metaparse/v1/impl/one_of.hpp at line 6, boost/metaparse/v1/impl/one_of_fwd_op.hpp at line 6, boost/metaparse/v1/impl/returns.hpp at line 6, boost/metaparse/v1/impl/sequence.hpp at line 6, boost/metaparse/v1/impl/sequence_impl.hpp at line 6, boost/metaparse/v1/impl/string_iterator.hpp at line 6, boost/metaparse/v1/impl/string_iterator_tag.hpp at line 6, boost/metaparse/v1/impl/void_.hpp at line 6, boost/metaparse/v1/int_.hpp at line 6, boost/metaparse/v1/is_error.hpp at line 6, boost/metaparse/v1/iterate.hpp at line 6, boost/metaparse/v1/iterate_c.hpp at line 6, boost/metaparse/v1/keyword.hpp at line 6, boost/metaparse/v1/last_of.hpp at line 6, boost/metaparse/v1/letter.hpp at line 6, boost/metaparse/v1/lit.hpp at line 6, boost/metaparse/v1/lit_c.hpp at line 6, boost/metaparse/v1/look_ahead.hpp at line 6, boost/metaparse/v1/middle_of.hpp at line 6, boost/metaparse/v1/next_char.hpp at line 6, boost/metaparse/v1/next_line.hpp at line 6, boost/metaparse/v1/nth_of.hpp at line 6, boost/metaparse/v1/nth_of_c.hpp at line 6, boost/metaparse/v1/one_char.hpp at line 6, boost/metaparse/v1/one_char_except.hpp at line 6, boost/metaparse/v1/one_char_except_c.hpp at line 6, boost/metaparse/v1/one_of.hpp at line 6, boost/metaparse/v1/one_of_c.hpp at line 6, boost/metaparse/v1/optional.hpp at line 6, boost/metaparse/v1/range.hpp at line 6, boost/metaparse/v1/range_c.hpp at line 6, boost/metaparse/v1/reject.hpp at line 6, boost/metaparse/v1/repeated.hpp at line 6, boost/metaparse/v1/repeated1.hpp at line 6, boost/metaparse/v1/repeated_one_of.hpp at line 6, boost/metaparse/v1/repeated_one_of1.hpp at line 6, boost/metaparse/v1/repeated_reject_incomplete.hpp at line 6, boost/metaparse/v1/repeated_reject_incomplete1.hpp at line 6, boost/metaparse/v1/return_.hpp at line 6, boost/metaparse/v1/sequence.hpp at line 6, boost/metaparse/v1/sequence_apply.hpp at line 6, boost/metaparse/v1/source_position.hpp at line 6, boost/metaparse/v1/source_position_tag.hpp at line 6, boost/metaparse/v1/space.hpp at line 6, boost/metaparse/v1/spaces.hpp at line 6, boost/metaparse/v1/start.hpp at line 6, boost/metaparse/v1/string.hpp at line 6, boost/metaparse/v1/string_tag.hpp at line 6, boost/metaparse/v1/swap.hpp at line 6, boost/metaparse/v1/token.hpp at line 6, boost/metaparse/v1/transform.hpp at line 6, boost/metaparse/v1/transform_error.hpp at line 6, boost/metaparse/v1/transform_error_message.hpp at line 6, boost/metaparse/v1/unless_error.hpp at line 6, boost/metaparse/v1/util/digit_to_int.hpp at line 6, boost/metaparse/v1/util/digit_to_int_c.hpp at line 6, boost/metaparse/v1/util/in_range.hpp at line 6, boost/metaparse/v1/util/in_range_c.hpp at line 6, boost/metaparse/v1/util/int_to_digit.hpp at line 6, boost/metaparse/v1/util/int_to_digit_c.hpp at line 6, boost/metaparse/v1/util/is_digit.hpp at line 6, boost/metaparse/v1/util/is_lcase_letter.hpp at line 6, boost/metaparse/v1/util/is_letter.hpp at line 6, boost/metaparse/v1/util/is_ucase_letter.hpp at line 6, boost/metaparse/v1/util/is_whitespace.hpp at line 6, boost/metaparse/v1/util/is_whitespace_c.hpp at line 6, boost/metaparse/version.hpp at line 6, boost/move/detail/reverse_iterator.hpp at line 6, boost/move/detail/to_raw_pointer.hpp at line 6, boost/mpi/cartesian_communicator.hpp at line 3, boost/mpi/detail/antiques.hpp at line 3, boost/mpi/detail/offsets.hpp at line 3, boost/multiprecision/detail/functions/constants.hpp at line 3, boost/multiprecision/detail/functions/pow.hpp at line 5, boost/multiprecision/detail/functions/trig.hpp at line 5, boost/non_type.hpp at line 6, boost/pending/lowest_bit.hpp at line 9, boost/sort/pdqsort/pdqsort.hpp at line 5, boost/sort/sort.hpp at line 5, boost/sort/spreadsort/detail/constants.hpp at line 5, boost/sort/spreadsort/detail/float_sort.hpp at line 5, boost/sort/spreadsort/detail/integer_sort.hpp at line 5, boost/sort/spreadsort/detail/spreadsort_common.hpp at line 6, boost/sort/spreadsort/detail/string_sort.hpp at line 5, boost/sort/spreadsort/float_sort.hpp at line 5, boost/sort/spreadsort/integer_sort.hpp at line 5, boost/sort/spreadsort/spreadsort.hpp at line 5, boost/sort/spreadsort/string_sort.hpp at line 5, libs/context/src/continuation.cpp at line 4, libs/context/src/execution_context.cpp at line 4, libs/context/src/fiber.cpp at line 4, libs/context/src/posix/stack_traits.cpp at line 4, libs/context/src/untested.cpp at line 4, libs/context/src/windows/stack_traits.cpp at line 4, libs/coroutine/src/detail/coroutine_context.cpp at line 4, libs/coroutine/src/exceptions.cpp at line 4, libs/coroutine/src/posix/stack_traits.cpp at line 4, libs/coroutine/src/windows/stack_traits.cpp at line 4
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/config/platform/cloudabi.hpp [2:4]
+ boost/container/detail/function_detector.hpp [5:7]
+ boost/container/detail/minimal_char_traits_header.hpp [5:7]
+ boost/container/options.hpp [5:7]
+ boost/context/all.hpp [3:5]
+ boost/context/continuation.hpp [3:5]
+ boost/context/continuation_fcontext.hpp [3:5]
+ boost/context/continuation_ucontext.hpp [3:5]
+ boost/context/continuation_winfib.hpp [3:5]
+ boost/context/detail/apply.hpp [3:5]
+ boost/context/detail/config.hpp [3:5]
+ boost/context/detail/disable_overload.hpp [3:5]
+ boost/context/detail/exception.hpp [3:5]
+ boost/context/detail/exchange.hpp [3:5]
+ boost/context/detail/externc.hpp [3:5]
+ boost/context/detail/fcontext.hpp [3:5]
+ boost/context/detail/index_sequence.hpp [3:5]
+ boost/context/detail/invoke.hpp [3:5]
+ boost/context/detail/prefetch.hpp [2:4]
+ boost/context/detail/tuple.hpp [3:5]
+ boost/context/execution_context.hpp [3:5]
+ boost/context/execution_context_v1.hpp [3:5]
+ boost/context/execution_context_v2.hpp [3:5]
+ boost/context/execution_context_v2_void.ipp [3:5]
+ boost/context/fiber.hpp [3:5]
+ boost/context/fiber_fcontext.hpp [3:5]
+ boost/context/fiber_ucontext.hpp [3:5]
+ boost/context/fiber_winfib.hpp [3:5]
+ boost/context/fixedsize_stack.hpp [3:5]
+ boost/context/flags.hpp [3:5]
+ boost/context/pooled_fixedsize_stack.hpp [3:5]
+ boost/context/posix/protected_fixedsize_stack.hpp [3:5]
+ boost/context/posix/segmented_stack.hpp [3:5]
+ boost/context/preallocated.hpp [3:5]
+ boost/context/protected_fixedsize_stack.hpp [3:5]
+ boost/context/segmented_stack.hpp [3:5]
+ boost/context/stack_context.hpp [3:5]
+ boost/context/stack_traits.hpp [3:5]
+ boost/context/windows/protected_fixedsize_stack.hpp [3:5]
+ boost/coroutine/all.hpp [3:5]
+ boost/coroutine/asymmetric_coroutine.hpp [3:5]
+ boost/coroutine/attributes.hpp [3:5]
+ boost/coroutine/coroutine.hpp [3:5]
+ boost/coroutine/detail/config.hpp [3:5]
+ boost/coroutine/detail/coroutine_context.hpp [3:5]
+ boost/coroutine/detail/data.hpp [3:5]
+ boost/coroutine/detail/flags.hpp [3:5]
+ boost/coroutine/detail/parameters.hpp [3:5]
+ boost/coroutine/detail/preallocated.hpp [3:5]
+ boost/coroutine/detail/pull_coroutine_impl.hpp [3:5]
+ boost/coroutine/detail/pull_coroutine_object.hpp [3:5]
+ boost/coroutine/detail/pull_coroutine_synthesized.hpp [3:5]
+ boost/coroutine/detail/push_coroutine_impl.hpp [3:5]
+ boost/coroutine/detail/push_coroutine_object.hpp [3:5]
+ boost/coroutine/detail/push_coroutine_synthesized.hpp [3:5]
+ boost/coroutine/detail/setup.hpp [3:5]
+ boost/coroutine/detail/symmetric_coroutine_call.hpp [3:5]
+ boost/coroutine/detail/symmetric_coroutine_impl.hpp [3:5]
+ boost/coroutine/detail/symmetric_coroutine_object.hpp [3:5]
+ boost/coroutine/detail/symmetric_coroutine_yield.hpp [3:5]
+ boost/coroutine/detail/trampoline.hpp [3:5]
+ boost/coroutine/detail/trampoline_pull.hpp [3:5]
+ boost/coroutine/detail/trampoline_push.hpp [3:5]
+ boost/coroutine/exceptions.hpp [3:5]
+ boost/coroutine/flags.hpp [3:5]
+ boost/coroutine/posix/protected_stack_allocator.hpp [3:5]
+ boost/coroutine/posix/segmented_stack_allocator.hpp [3:5]
+ boost/coroutine/protected_stack_allocator.hpp [3:5]
+ boost/coroutine/segmented_stack_allocator.hpp [3:5]
+ boost/coroutine/stack_allocator.hpp [3:5]
+ boost/coroutine/stack_context.hpp [3:5]
+ boost/coroutine/stack_traits.hpp [3:5]
+ boost/coroutine/standard_stack_allocator.hpp [3:5]
+ boost/coroutine/symmetric_coroutine.hpp [3:5]
+ boost/coroutine/windows/protected_stack_allocator.hpp [3:5]
+ boost/coroutine2/all.hpp [3:5]
+ boost/coroutine2/coroutine.hpp [3:5]
+ boost/coroutine2/detail/config.hpp [3:5]
+ boost/coroutine2/detail/coroutine.hpp [3:5]
+ boost/coroutine2/detail/create_control_block.ipp [3:5]
+ boost/coroutine2/detail/decay_copy.hpp [3:5]
+ boost/coroutine2/detail/disable_overload.hpp [3:5]
+ boost/coroutine2/detail/forced_unwind.hpp [3:5]
+ boost/coroutine2/detail/pull_control_block_cc.hpp [3:5]
+ boost/coroutine2/detail/pull_control_block_cc.ipp [3:5]
+ boost/coroutine2/detail/pull_coroutine.hpp [3:5]
+ boost/coroutine2/detail/pull_coroutine.ipp [3:5]
+ boost/coroutine2/detail/push_control_block_cc.hpp [3:5]
+ boost/coroutine2/detail/push_control_block_cc.ipp [3:5]
+ boost/coroutine2/detail/push_coroutine.hpp [3:5]
+ boost/coroutine2/detail/push_coroutine.ipp [3:5]
+ boost/coroutine2/detail/state.hpp [3:5]
+ boost/coroutine2/detail/wrap.hpp [3:5]
+ boost/coroutine2/fixedsize_stack.hpp [3:5]
+ boost/coroutine2/pooled_fixedsize_stack.hpp [3:5]
+ boost/coroutine2/protected_fixedsize_stack.hpp [3:5]
+ boost/coroutine2/segmented_stack.hpp [3:5]
+ boost/detail/dynamic_bitset.hpp [9:11]
+ boost/dynamic_bitset.hpp [6:8]
+ boost/dynamic_bitset/config.hpp [6:8]
+ boost/dynamic_bitset/dynamic_bitset.hpp [11:13]
+ boost/dynamic_bitset/serialization.hpp [5:7]
+ boost/dynamic_bitset_fwd.hpp [6:8]
+ boost/fiber/algo/algorithm.hpp [2:4]
+ boost/fiber/algo/numa/work_stealing.hpp [3:5]
+ boost/fiber/algo/round_robin.hpp [2:4]
+ boost/fiber/algo/shared_work.hpp [3:5]
+ boost/fiber/algo/work_stealing.hpp [3:5]
+ boost/fiber/all.hpp [3:5]
+ boost/fiber/barrier.hpp [3:5]
+ boost/fiber/buffered_channel.hpp [3:5]
+ boost/fiber/channel_op_status.hpp [2:4]
+ boost/fiber/condition_variable.hpp [3:5]
+ boost/fiber/context.hpp [3:5]
+ boost/fiber/cuda/waitfor.hpp [3:5]
+ boost/fiber/detail/config.hpp [3:5]
+ boost/fiber/detail/context_spinlock_queue.hpp [3:5]
+ boost/fiber/detail/context_spmc_queue.hpp [3:5]
+ boost/fiber/detail/convert.hpp [3:5]
+ boost/fiber/detail/cpu_relax.hpp [3:5]
+ boost/fiber/detail/data.hpp [3:5]
+ boost/fiber/detail/decay_copy.hpp [3:5]
+ boost/fiber/detail/disable_overload.hpp [3:5]
+ boost/fiber/detail/fss.hpp [3:5]
+ boost/fiber/detail/futex.hpp [3:5]
+ boost/fiber/detail/is_all_same.hpp [3:5]
+ boost/fiber/detail/rtm.hpp [3:5]
+ boost/fiber/detail/spinlock.hpp [3:5]
+ boost/fiber/detail/spinlock_rtm.hpp [3:5]
+ boost/fiber/detail/spinlock_status.hpp [3:5]
+ boost/fiber/detail/spinlock_ttas.hpp [3:5]
+ boost/fiber/detail/spinlock_ttas_adaptive.hpp [3:5]
+ boost/fiber/detail/spinlock_ttas_adaptive_futex.hpp [3:5]
+ boost/fiber/detail/spinlock_ttas_futex.hpp [3:5]
+ boost/fiber/exceptions.hpp [3:5]
+ boost/fiber/fiber.hpp [3:5]
+ boost/fiber/fixedsize_stack.hpp [3:5]
+ boost/fiber/fss.hpp [3:5]
+ boost/fiber/future.hpp [3:5]
+ boost/fiber/future/async.hpp [3:5]
+ boost/fiber/future/detail/shared_state.hpp [3:5]
+ boost/fiber/future/detail/shared_state_object.hpp [3:5]
+ boost/fiber/future/detail/task_base.hpp [2:4]
+ boost/fiber/future/detail/task_object.hpp [3:5]
+ boost/fiber/future/future.hpp [3:5]
+ boost/fiber/future/future_status.hpp [3:5]
+ boost/fiber/future/packaged_task.hpp [3:5]
+ boost/fiber/future/promise.hpp [3:5]
+ boost/fiber/hip/waitfor.hpp [3:5]
+ boost/fiber/mutex.hpp [3:5]
+ boost/fiber/numa/pin_thread.hpp [3:5]
+ boost/fiber/numa/topology.hpp [3:5]
+ boost/fiber/operations.hpp [2:4]
+ boost/fiber/policy.hpp [3:5]
+ boost/fiber/pooled_fixedsize_stack.hpp [3:5]
+ boost/fiber/properties.hpp [2:4]
+ boost/fiber/protected_fixedsize_stack.hpp [3:5]
+ boost/fiber/recursive_mutex.hpp [3:5]
+ boost/fiber/recursive_timed_mutex.hpp [3:5]
+ boost/fiber/scheduler.hpp [2:4]
+ boost/fiber/segmented_stack.hpp [3:5]
+ boost/fiber/timed_mutex.hpp [3:5]
+ boost/fiber/type.hpp [3:5]
+ boost/fiber/unbuffered_channel.hpp [3:5]
+ boost/format/exceptions.hpp [7:9]
+ boost/graph/two_graphs_common_spanning_trees.hpp [2:4]
+ boost/integer/integer_log2.hpp [9:11]
+ boost/intrusive/any_hook.hpp [5:7]
+ boost/intrusive/avl_set.hpp [5:7]
+ boost/intrusive/avl_set_hook.hpp [5:7]
+ boost/intrusive/avltree.hpp [5:7]
+ boost/intrusive/avltree_algorithms.hpp [6:8]
+ boost/intrusive/bs_set.hpp [5:7]
+ boost/intrusive/bs_set_hook.hpp [5:7]
+ boost/intrusive/bstree.hpp [5:7]
+ boost/intrusive/bstree_algorithms.hpp [5:7]
+ boost/intrusive/circular_list_algorithms.hpp [6:8]
+ boost/intrusive/circular_slist_algorithms.hpp [6:8]
+ boost/intrusive/derivation_value_traits.hpp [5:7]
+ boost/intrusive/detail/algo_type.hpp [5:7]
+ boost/intrusive/detail/any_node_and_algorithms.hpp [5:7]
+ boost/intrusive/detail/array_initializer.hpp [5:7]
+ boost/intrusive/detail/assert.hpp [5:7]
+ boost/intrusive/detail/avltree_node.hpp [5:7]
+ boost/intrusive/detail/bstree_algorithms_base.hpp [5:7]
+ boost/intrusive/detail/common_slist_algorithms.hpp [5:7]
+ boost/intrusive/detail/config_begin.hpp [5:7]
+ boost/intrusive/detail/config_end.hpp [5:7]
+ boost/intrusive/detail/default_header_holder.hpp [5:7]
+ boost/intrusive/detail/ebo_functor_holder.hpp [6:8]
+ boost/intrusive/detail/empty_node_checker.hpp [5:7]
+ boost/intrusive/detail/equal_to_value.hpp [5:7]
+ boost/intrusive/detail/exception_disposer.hpp [5:7]
+ boost/intrusive/detail/function_detector.hpp [5:7]
+ boost/intrusive/detail/generic_hook.hpp [5:7]
+ boost/intrusive/detail/get_value_traits.hpp [5:7]
+ boost/intrusive/detail/hashtable_node.hpp [5:7]
+ boost/intrusive/detail/hook_traits.hpp [5:7]
+ boost/intrusive/detail/iiterator.hpp [5:7]
+ boost/intrusive/detail/is_stateful_value_traits.hpp [5:7]
+ boost/intrusive/detail/iterator.hpp [5:7]
+ boost/intrusive/detail/key_nodeptr_comp.hpp [5:7]
+ boost/intrusive/detail/list_iterator.hpp [6:8]
+ boost/intrusive/detail/list_node.hpp [6:8]
+ boost/intrusive/detail/math.hpp [5:7]
+ boost/intrusive/detail/minimal_less_equal_header.hpp [5:7]
+ boost/intrusive/detail/minimal_pair_header.hpp [5:7]
+ boost/intrusive/detail/mpl.hpp [6:8]
+ boost/intrusive/detail/node_cloner_disposer.hpp [5:7]
+ boost/intrusive/detail/node_holder.hpp [5:7]
+ boost/intrusive/detail/node_to_value.hpp [5:7]
+ boost/intrusive/detail/parent_from_member.hpp [5:7]
+ boost/intrusive/detail/rbtree_node.hpp [6:8]
+ boost/intrusive/detail/reverse_iterator.hpp [5:7]
+ boost/intrusive/detail/simple_disposers.hpp [5:7]
+ boost/intrusive/detail/size_holder.hpp [5:7]
+ boost/intrusive/detail/slist_iterator.hpp [6:8]
+ boost/intrusive/detail/slist_node.hpp [6:8]
+ boost/intrusive/detail/transform_iterator.hpp [5:7]
+ boost/intrusive/detail/tree_iterator.hpp [5:7]
+ boost/intrusive/detail/tree_node.hpp [5:7]
+ boost/intrusive/detail/uncast.hpp [5:7]
+ boost/intrusive/hashtable.hpp [5:7]
+ boost/intrusive/intrusive_fwd.hpp [5:7]
+ boost/intrusive/linear_slist_algorithms.hpp [6:8]
+ boost/intrusive/link_mode.hpp [5:7]
+ boost/intrusive/list.hpp [6:8]
+ boost/intrusive/list_hook.hpp [6:8]
+ boost/intrusive/member_value_traits.hpp [5:7]
+ boost/intrusive/options.hpp [5:7]
+ boost/intrusive/pack_options.hpp [5:7]
+ boost/intrusive/parent_from_member.hpp [5:7]
+ boost/intrusive/pointer_plus_bits.hpp [5:7]
+ boost/intrusive/priority_compare.hpp [5:7]
+ boost/intrusive/rbtree.hpp [5:7]
+ boost/intrusive/rbtree_algorithms.hpp [6:8]
+ boost/intrusive/set.hpp [6:8]
+ boost/intrusive/set_hook.hpp [6:8]
+ boost/intrusive/sg_set.hpp [5:7]
+ boost/intrusive/sgtree.hpp [5:7]
+ boost/intrusive/sgtree_algorithms.hpp [5:7]
+ boost/intrusive/slist.hpp [6:8]
+ boost/intrusive/slist_hook.hpp [6:8]
+ boost/intrusive/splay_set.hpp [5:7]
+ boost/intrusive/splaytree.hpp [5:7]
+ boost/intrusive/splaytree_algorithms.hpp [5:7]
+ boost/intrusive/treap.hpp [5:7]
+ boost/intrusive/treap_algorithms.hpp [5:7]
+ boost/intrusive/treap_set.hpp [5:7]
+ boost/intrusive/trivial_value_traits.hpp [5:7]
+ boost/intrusive/unordered_set.hpp [6:8]
+ boost/intrusive/unordered_set_hook.hpp [6:8]
+ boost/metaparse.hpp [2:4]
+ boost/metaparse/accept.hpp [5:7]
+ boost/metaparse/accept_tag.hpp [5:7]
+ boost/metaparse/accept_when.hpp [5:7]
+ boost/metaparse/alphanum.hpp [5:7]
+ boost/metaparse/always.hpp [5:7]
+ boost/metaparse/always_c.hpp [5:7]
+ boost/metaparse/build_parser.hpp [5:7]
+ boost/metaparse/change_error_message.hpp [5:7]
+ boost/metaparse/config.hpp [5:7]
+ boost/metaparse/debug_parsing_error.hpp [5:7]
+ boost/metaparse/define_error.hpp [5:7]
+ boost/metaparse/digit.hpp [5:7]
+ boost/metaparse/digit_val.hpp [5:7]
+ boost/metaparse/empty.hpp [5:7]
+ boost/metaparse/entire_input.hpp [5:7]
+ boost/metaparse/error/digit_expected.hpp [5:7]
+ boost/metaparse/error/end_of_input_expected.hpp [5:7]
+ boost/metaparse/error/index_out_of_range.hpp [5:7]
+ boost/metaparse/error/letter_expected.hpp [5:7]
+ boost/metaparse/error/literal_expected.hpp [5:7]
+ boost/metaparse/error/none_of_the_expected_cases_found.hpp [5:7]
+ boost/metaparse/error/unexpected_character.hpp [5:7]
+ boost/metaparse/error/unexpected_end_of_input.hpp [5:7]
+ boost/metaparse/error/unpaired.hpp [5:7]
+ boost/metaparse/error/whitespace_expected.hpp [5:7]
+ boost/metaparse/except.hpp [5:7]
+ boost/metaparse/fail.hpp [5:7]
+ boost/metaparse/fail_at_first_char_expected.hpp [5:7]
+ boost/metaparse/fail_tag.hpp [5:7]
+ boost/metaparse/first_of.hpp [5:7]
+ boost/metaparse/foldl.hpp [5:7]
+ boost/metaparse/foldl1.hpp [5:7]
+ boost/metaparse/foldl_reject_incomplete.hpp [5:7]
+ boost/metaparse/foldl_reject_incomplete1.hpp [5:7]
+ boost/metaparse/foldl_reject_incomplete_start_with_parser.hpp [5:7]
+ boost/metaparse/foldl_start_with_parser.hpp [5:7]
+ boost/metaparse/foldr.hpp [5:7]
+ boost/metaparse/foldr1.hpp [5:7]
+ boost/metaparse/foldr_reject_incomplete.hpp [5:7]
+ boost/metaparse/foldr_reject_incomplete1.hpp [5:7]
+ boost/metaparse/foldr_start_with_parser.hpp [5:7]
+ boost/metaparse/get_col.hpp [5:7]
+ boost/metaparse/get_line.hpp [5:7]
+ boost/metaparse/get_message.hpp [5:7]
+ boost/metaparse/get_position.hpp [5:7]
+ boost/metaparse/get_prev_char.hpp [5:7]
+ boost/metaparse/get_remaining.hpp [5:7]
+ boost/metaparse/get_result.hpp [5:7]
+ boost/metaparse/grammar.hpp [5:7]
+ boost/metaparse/if_.hpp [5:7]
+ boost/metaparse/int_.hpp [5:7]
+ boost/metaparse/is_error.hpp [5:7]
+ boost/metaparse/iterate.hpp [5:7]
+ boost/metaparse/iterate_c.hpp [5:7]
+ boost/metaparse/keyword.hpp [5:7]
+ boost/metaparse/last_of.hpp [5:7]
+ boost/metaparse/letter.hpp [5:7]
+ boost/metaparse/limit_one_char_except_size.hpp [5:7]
+ boost/metaparse/limit_one_of_size.hpp [5:7]
+ boost/metaparse/limit_sequence_size.hpp [5:7]
+ boost/metaparse/limit_string_size.hpp [5:7]
+ boost/metaparse/lit.hpp [5:7]
+ boost/metaparse/lit_c.hpp [5:7]
+ boost/metaparse/look_ahead.hpp [5:7]
+ boost/metaparse/middle_of.hpp [5:7]
+ boost/metaparse/next_char.hpp [5:7]
+ boost/metaparse/next_line.hpp [5:7]
+ boost/metaparse/nth_of.hpp [5:7]
+ boost/metaparse/nth_of_c.hpp [5:7]
+ boost/metaparse/one_char.hpp [5:7]
+ boost/metaparse/one_char_except.hpp [5:7]
+ boost/metaparse/one_char_except_c.hpp [5:7]
+ boost/metaparse/one_of.hpp [5:7]
+ boost/metaparse/one_of_c.hpp [5:7]
+ boost/metaparse/optional.hpp [5:7]
+ boost/metaparse/range.hpp [5:7]
+ boost/metaparse/range_c.hpp [5:7]
+ boost/metaparse/reject.hpp [5:7]
+ boost/metaparse/repeated.hpp [5:7]
+ boost/metaparse/repeated1.hpp [5:7]
+ boost/metaparse/repeated_one_of.hpp [5:7]
+ boost/metaparse/repeated_one_of1.hpp [5:7]
+ boost/metaparse/repeated_reject_incomplete.hpp [5:7]
+ boost/metaparse/repeated_reject_incomplete1.hpp [5:7]
+ boost/metaparse/return_.hpp [5:7]
+ boost/metaparse/sequence.hpp [5:7]
+ boost/metaparse/sequence_apply.hpp [5:7]
+ boost/metaparse/source_position.hpp [5:7]
+ boost/metaparse/source_position_tag.hpp [5:7]
+ boost/metaparse/space.hpp [5:7]
+ boost/metaparse/spaces.hpp [5:7]
+ boost/metaparse/start.hpp [5:7]
+ boost/metaparse/string.hpp [2:4]
+ boost/metaparse/string_tag.hpp [5:7]
+ boost/metaparse/token.hpp [5:7]
+ boost/metaparse/transform.hpp [5:7]
+ boost/metaparse/transform_error.hpp [5:7]
+ boost/metaparse/transform_error_message.hpp [5:7]
+ boost/metaparse/unless_error.hpp [5:7]
+ boost/metaparse/util/digit_to_int.hpp [5:7]
+ boost/metaparse/util/digit_to_int_c.hpp [5:7]
+ boost/metaparse/util/in_range.hpp [5:7]
+ boost/metaparse/util/in_range_c.hpp [5:7]
+ boost/metaparse/util/int_to_digit.hpp [5:7]
+ boost/metaparse/util/int_to_digit_c.hpp [5:7]
+ boost/metaparse/util/is_digit.hpp [5:7]
+ boost/metaparse/util/is_lcase_letter.hpp [5:7]
+ boost/metaparse/util/is_letter.hpp [5:7]
+ boost/metaparse/util/is_ucase_letter.hpp [5:7]
+ boost/metaparse/util/is_whitespace.hpp [5:7]
+ boost/metaparse/util/is_whitespace_c.hpp [5:7]
+ boost/metaparse/v1/accept.hpp [5:7]
+ boost/metaparse/v1/accept_tag.hpp [5:7]
+ boost/metaparse/v1/accept_when.hpp [5:7]
+ boost/metaparse/v1/alphanum.hpp [5:7]
+ boost/metaparse/v1/always.hpp [5:7]
+ boost/metaparse/v1/always_c.hpp [5:7]
+ boost/metaparse/v1/build_parser.hpp [5:7]
+ boost/metaparse/v1/change_error_message.hpp [5:7]
+ boost/metaparse/v1/cpp11/first_of.hpp [5:7]
+ boost/metaparse/v1/cpp11/fwd/string.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/at_c.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/concat.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/empty_string.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/nth_of_c.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/nth_of_c_skip_remaining.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/pop_back.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/pop_front.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/push_back_c.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/push_front_c.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/remove_trailing_no_chars.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/size.hpp [5:7]
+ boost/metaparse/v1/cpp11/impl/string_at.hpp [5:7]
+ boost/metaparse/v1/cpp11/last_of.hpp [5:7]
+ boost/metaparse/v1/cpp11/nth_of.hpp [5:7]
+ boost/metaparse/v1/cpp11/nth_of_c.hpp [5:7]
+ boost/metaparse/v1/cpp11/string.hpp [5:7]
+ boost/metaparse/v1/cpp98/first_of.hpp [5:7]
+ boost/metaparse/v1/cpp98/fwd/string.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/at_c.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/empty_string.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/nth_of_c.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/nth_of_c_impl.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/pop_back.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/pop_front.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/push_back_c.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/push_front_c.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/size.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/skip_seq.hpp [5:7]
+ boost/metaparse/v1/cpp98/impl/update_c.hpp [5:7]
+ boost/metaparse/v1/cpp98/last_of.hpp [5:7]
+ boost/metaparse/v1/cpp98/nth_of.hpp [5:7]
+ boost/metaparse/v1/cpp98/nth_of_c.hpp [5:7]
+ boost/metaparse/v1/cpp98/string.hpp [5:7]
+ boost/metaparse/v1/debug_parsing_error.hpp [5:7]
+ boost/metaparse/v1/define_error.hpp [5:7]
+ boost/metaparse/v1/digit.hpp [5:7]
+ boost/metaparse/v1/digit_val.hpp [5:7]
+ boost/metaparse/v1/empty.hpp [5:7]
+ boost/metaparse/v1/entire_input.hpp [5:7]
+ boost/metaparse/v1/error/digit_expected.hpp [5:7]
+ boost/metaparse/v1/error/end_of_input_expected.hpp [5:7]
+ boost/metaparse/v1/error/expected_to_fail.hpp [5:7]
+ boost/metaparse/v1/error/index_out_of_range.hpp [5:7]
+ boost/metaparse/v1/error/letter_expected.hpp [5:7]
+ boost/metaparse/v1/error/literal_expected.hpp [5:7]
+ boost/metaparse/v1/error/none_of_the_expected_cases_found.hpp [5:7]
+ boost/metaparse/v1/error/unexpected_character.hpp [5:7]
+ boost/metaparse/v1/error/unexpected_end_of_input.hpp [5:7]
+ boost/metaparse/v1/error/unpaired.hpp [5:7]
+ boost/metaparse/v1/error/whitespace_expected.hpp [5:7]
+ boost/metaparse/v1/except.hpp [5:7]
+ boost/metaparse/v1/fail.hpp [5:7]
+ boost/metaparse/v1/fail_at_first_char_expected.hpp [5:7]
+ boost/metaparse/v1/fail_tag.hpp [5:7]
+ boost/metaparse/v1/first_of.hpp [5:7]
+ boost/metaparse/v1/foldl.hpp [5:7]
+ boost/metaparse/v1/foldl1.hpp [5:7]
+ boost/metaparse/v1/foldl_reject_incomplete.hpp [5:7]
+ boost/metaparse/v1/foldl_reject_incomplete1.hpp [5:7]
+ boost/metaparse/v1/foldl_reject_incomplete_start_with_parser.hpp [5:7]
+ boost/metaparse/v1/foldl_start_with_parser.hpp [5:7]
+ boost/metaparse/v1/foldr.hpp [5:7]
+ boost/metaparse/v1/foldr1.hpp [5:7]
+ boost/metaparse/v1/foldr_reject_incomplete.hpp [5:7]
+ boost/metaparse/v1/foldr_reject_incomplete1.hpp [5:7]
+ boost/metaparse/v1/foldr_start_with_parser.hpp [5:7]
+ boost/metaparse/v1/fwd/accept.hpp [5:7]
+ boost/metaparse/v1/fwd/build_parser.hpp [5:7]
+ boost/metaparse/v1/fwd/get_col.hpp [5:7]
+ boost/metaparse/v1/fwd/get_line.hpp [5:7]
+ boost/metaparse/v1/fwd/get_message.hpp [5:7]
+ boost/metaparse/v1/fwd/get_position.hpp [5:7]
+ boost/metaparse/v1/fwd/get_prev_char.hpp [5:7]
+ boost/metaparse/v1/fwd/get_remaining.hpp [5:7]
+ boost/metaparse/v1/fwd/get_result.hpp [5:7]
+ boost/metaparse/v1/fwd/next_char.hpp [5:7]
+ boost/metaparse/v1/fwd/next_line.hpp [5:7]
+ boost/metaparse/v1/fwd/reject.hpp [5:7]
+ boost/metaparse/v1/fwd/source_position.hpp [5:7]
+ boost/metaparse/v1/fwd/string.hpp [5:7]
+ boost/metaparse/v1/get_col.hpp [5:7]
+ boost/metaparse/v1/get_line.hpp [5:7]
+ boost/metaparse/v1/get_message.hpp [5:7]
+ boost/metaparse/v1/get_position.hpp [5:7]
+ boost/metaparse/v1/get_prev_char.hpp [5:7]
+ boost/metaparse/v1/get_remaining.hpp [5:7]
+ boost/metaparse/v1/get_result.hpp [5:7]
+ boost/metaparse/v1/grammar.hpp [5:7]
+ boost/metaparse/v1/if_.hpp [5:7]
+ boost/metaparse/v1/impl/apply_parser.hpp [5:7]
+ boost/metaparse/v1/impl/assert_string_length.hpp [5:7]
+ boost/metaparse/v1/impl/at_c.hpp [5:7]
+ boost/metaparse/v1/impl/back_inserter.hpp [5:7]
+ boost/metaparse/v1/impl/front_inserter.hpp [5:7]
+ boost/metaparse/v1/impl/fwd/iterate_impl.hpp [5:7]
+ boost/metaparse/v1/impl/has_type.hpp [5:7]
+ boost/metaparse/v1/impl/is_any.hpp [5:7]
+ boost/metaparse/v1/impl/is_char_c.hpp [5:7]
+ boost/metaparse/v1/impl/iterate_impl.hpp [5:7]
+ boost/metaparse/v1/impl/iterate_impl_unchecked.hpp [5:7]
+ boost/metaparse/v1/impl/later_result.hpp [5:7]
+ boost/metaparse/v1/impl/next_digit.hpp [5:7]
+ boost/metaparse/v1/impl/no_char.hpp [5:7]
+ boost/metaparse/v1/impl/one_char_except_not_used.hpp [5:7]
+ boost/metaparse/v1/impl/one_of.hpp [5:7]
+ boost/metaparse/v1/impl/one_of_fwd_op.hpp [5:7]
+ boost/metaparse/v1/impl/returns.hpp [5:7]
+ boost/metaparse/v1/impl/sequence.hpp [5:7]
+ boost/metaparse/v1/impl/sequence_impl.hpp [5:7]
+ boost/metaparse/v1/impl/string_iterator.hpp [5:7]
+ boost/metaparse/v1/impl/string_iterator_tag.hpp [5:7]
+ boost/metaparse/v1/impl/void_.hpp [5:7]
+ boost/metaparse/v1/int_.hpp [5:7]
+ boost/metaparse/v1/is_error.hpp [5:7]
+ boost/metaparse/v1/iterate.hpp [5:7]
+ boost/metaparse/v1/iterate_c.hpp [5:7]
+ boost/metaparse/v1/keyword.hpp [5:7]
+ boost/metaparse/v1/last_of.hpp [5:7]
+ boost/metaparse/v1/letter.hpp [5:7]
+ boost/metaparse/v1/lit.hpp [5:7]
+ boost/metaparse/v1/lit_c.hpp [5:7]
+ boost/metaparse/v1/look_ahead.hpp [5:7]
+ boost/metaparse/v1/middle_of.hpp [5:7]
+ boost/metaparse/v1/next_char.hpp [5:7]
+ boost/metaparse/v1/next_line.hpp [5:7]
+ boost/metaparse/v1/nth_of.hpp [5:7]
+ boost/metaparse/v1/nth_of_c.hpp [5:7]
+ boost/metaparse/v1/one_char.hpp [5:7]
+ boost/metaparse/v1/one_char_except.hpp [5:7]
+ boost/metaparse/v1/one_char_except_c.hpp [5:7]
+ boost/metaparse/v1/one_of.hpp [5:7]
+ boost/metaparse/v1/one_of_c.hpp [5:7]
+ boost/metaparse/v1/optional.hpp [5:7]
+ boost/metaparse/v1/range.hpp [5:7]
+ boost/metaparse/v1/range_c.hpp [5:7]
+ boost/metaparse/v1/reject.hpp [5:7]
+ boost/metaparse/v1/repeated.hpp [5:7]
+ boost/metaparse/v1/repeated1.hpp [5:7]
+ boost/metaparse/v1/repeated_one_of.hpp [5:7]
+ boost/metaparse/v1/repeated_one_of1.hpp [5:7]
+ boost/metaparse/v1/repeated_reject_incomplete.hpp [5:7]
+ boost/metaparse/v1/repeated_reject_incomplete1.hpp [5:7]
+ boost/metaparse/v1/return_.hpp [5:7]
+ boost/metaparse/v1/sequence.hpp [5:7]
+ boost/metaparse/v1/sequence_apply.hpp [5:7]
+ boost/metaparse/v1/source_position.hpp [5:7]
+ boost/metaparse/v1/source_position_tag.hpp [5:7]
+ boost/metaparse/v1/space.hpp [5:7]
+ boost/metaparse/v1/spaces.hpp [5:7]
+ boost/metaparse/v1/start.hpp [5:7]
+ boost/metaparse/v1/string.hpp [5:7]
+ boost/metaparse/v1/string_tag.hpp [5:7]
+ boost/metaparse/v1/swap.hpp [5:7]
+ boost/metaparse/v1/token.hpp [5:7]
+ boost/metaparse/v1/transform.hpp [5:7]
+ boost/metaparse/v1/transform_error.hpp [5:7]
+ boost/metaparse/v1/transform_error_message.hpp [5:7]
+ boost/metaparse/v1/unless_error.hpp [5:7]
+ boost/metaparse/v1/util/digit_to_int.hpp [5:7]
+ boost/metaparse/v1/util/digit_to_int_c.hpp [5:7]
+ boost/metaparse/v1/util/in_range.hpp [5:7]
+ boost/metaparse/v1/util/in_range_c.hpp [5:7]
+ boost/metaparse/v1/util/int_to_digit.hpp [5:7]
+ boost/metaparse/v1/util/int_to_digit_c.hpp [5:7]
+ boost/metaparse/v1/util/is_digit.hpp [5:7]
+ boost/metaparse/v1/util/is_lcase_letter.hpp [5:7]
+ boost/metaparse/v1/util/is_letter.hpp [5:7]
+ boost/metaparse/v1/util/is_ucase_letter.hpp [5:7]
+ boost/metaparse/v1/util/is_whitespace.hpp [5:7]
+ boost/metaparse/v1/util/is_whitespace_c.hpp [5:7]
+ boost/metaparse/version.hpp [5:7]
+ boost/move/detail/reverse_iterator.hpp [5:7]
+ boost/move/detail/to_raw_pointer.hpp [5:7]
+ boost/mpi/cartesian_communicator.hpp [2:4]
+ boost/mpi/detail/antiques.hpp [2:4]
+ boost/mpi/detail/offsets.hpp [2:4]
+ boost/multiprecision/detail/functions/constants.hpp [2:4]
+ boost/multiprecision/detail/functions/pow.hpp [4:6]
+ boost/multiprecision/detail/functions/trig.hpp [4:6]
+ boost/non_type.hpp [5:7]
+ boost/pending/lowest_bit.hpp [8:10]
+ boost/sort/pdqsort/pdqsort.hpp [4:6]
+ boost/sort/sort.hpp [4:6]
+ boost/sort/spreadsort/detail/constants.hpp [4:6]
+ boost/sort/spreadsort/detail/float_sort.hpp [4:6]
+ boost/sort/spreadsort/detail/integer_sort.hpp [4:6]
+ boost/sort/spreadsort/detail/spreadsort_common.hpp [5:7]
+ boost/sort/spreadsort/detail/string_sort.hpp [4:6]
+ boost/sort/spreadsort/float_sort.hpp [4:6]
+ boost/sort/spreadsort/integer_sort.hpp [4:6]
+ boost/sort/spreadsort/spreadsort.hpp [4:6]
+ boost/sort/spreadsort/string_sort.hpp [4:6]
+ libs/context/src/continuation.cpp [3:5]
+ libs/context/src/execution_context.cpp [3:5]
+ libs/context/src/fiber.cpp [3:5]
+ libs/context/src/posix/stack_traits.cpp [3:5]
+ libs/context/src/untested.cpp [3:5]
+ libs/context/src/windows/stack_traits.cpp [3:5]
+ libs/coroutine/src/detail/coroutine_context.cpp [3:5]
+ libs/coroutine/src/exceptions.cpp [3:5]
+ libs/coroutine/src/posix/stack_traits.cpp [3:5]
+ libs/coroutine/src/windows/stack_traits.cpp [3:5]
+
+KEEP BSL-1.0 519e01acec4b7ae39f375d1d02c207c7
+BELONGS ya.make
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.
+ * See http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/winapi/access_rights.hpp [4:5]
+ boost/detail/winapi/apc.hpp [4:5]
+ boost/detail/winapi/basic_types.hpp [4:5]
+ boost/detail/winapi/bcrypt.hpp [4:5]
+ boost/detail/winapi/character_code_conversion.hpp [4:5]
+ boost/detail/winapi/condition_variable.hpp [4:5]
+ boost/detail/winapi/config.hpp [4:5]
+ boost/detail/winapi/critical_section.hpp [4:5]
+ boost/detail/winapi/crypt.hpp [4:5]
+ boost/detail/winapi/dbghelp.hpp [4:5]
+ boost/detail/winapi/debugapi.hpp [4:5]
+ boost/detail/winapi/detail/deprecated_namespace.hpp [4:5]
+ boost/detail/winapi/directory_management.hpp [4:5]
+ boost/detail/winapi/dll.hpp [4:5]
+ boost/detail/winapi/environment.hpp [4:5]
+ boost/detail/winapi/error_codes.hpp [4:5]
+ boost/detail/winapi/error_handling.hpp [4:5]
+ boost/detail/winapi/event.hpp [4:5]
+ boost/detail/winapi/file_management.hpp [4:5]
+ boost/detail/winapi/file_mapping.hpp [4:5]
+ boost/detail/winapi/get_current_process.hpp [4:5]
+ boost/detail/winapi/get_current_process_id.hpp [4:5]
+ boost/detail/winapi/get_current_thread.hpp [4:5]
+ boost/detail/winapi/get_current_thread_id.hpp [4:5]
+ boost/detail/winapi/get_last_error.hpp [4:5]
+ boost/detail/winapi/get_process_times.hpp [4:5]
+ boost/detail/winapi/get_system_directory.hpp [4:5]
+ boost/detail/winapi/get_thread_times.hpp [4:5]
+ boost/detail/winapi/handle_info.hpp [4:5]
+ boost/detail/winapi/handles.hpp [4:5]
+ boost/detail/winapi/heap_memory.hpp [4:5]
+ boost/detail/winapi/init_once.hpp [4:5]
+ boost/detail/winapi/jobs.hpp [4:5]
+ boost/detail/winapi/limits.hpp [4:5]
+ boost/detail/winapi/local_memory.hpp [4:5]
+ boost/detail/winapi/memory.hpp [4:5]
+ boost/detail/winapi/mutex.hpp [4:5]
+ boost/detail/winapi/overlapped.hpp [4:5]
+ boost/detail/winapi/page_protection_flags.hpp [4:5]
+ boost/detail/winapi/pipes.hpp [4:5]
+ boost/detail/winapi/priority_class.hpp [4:5]
+ boost/detail/winapi/process.hpp [4:5]
+ boost/detail/winapi/security.hpp [4:5]
+ boost/detail/winapi/semaphore.hpp [4:5]
+ boost/detail/winapi/shell.hpp [4:5]
+ boost/detail/winapi/show_window.hpp [4:5]
+ boost/detail/winapi/srw_lock.hpp [4:5]
+ boost/detail/winapi/stack_backtrace.hpp [4:5]
+ boost/detail/winapi/synchronization.hpp [4:5]
+ boost/detail/winapi/system.hpp [4:5]
+ boost/detail/winapi/thread.hpp [4:5]
+ boost/detail/winapi/thread_pool.hpp [4:5]
+ boost/detail/winapi/time.hpp [4:5]
+ boost/detail/winapi/timers.hpp [4:5]
+ boost/detail/winapi/tls.hpp [4:5]
+ boost/detail/winapi/wait.hpp [4:5]
+ boost/detail/winapi/waitable_timer.hpp [4:5]
+ boost/winapi/access_rights.hpp [4:5]
+ boost/winapi/apc.hpp [5:6]
+ boost/winapi/basic_types.hpp [5:6]
+ boost/winapi/bcrypt.hpp [4:5]
+ boost/winapi/character_code_conversion.hpp [4:5]
+ boost/winapi/condition_variable.hpp [5:6]
+ boost/winapi/config.hpp [5:6]
+ boost/winapi/critical_section.hpp [5:6]
+ boost/winapi/crypt.hpp [5:6]
+ boost/winapi/dbghelp.hpp [6:7]
+ boost/winapi/debugapi.hpp [4:5]
+ boost/winapi/detail/cast_ptr.hpp [4:5]
+ boost/winapi/directory_management.hpp [5:6]
+ boost/winapi/dll.hpp [7:8]
+ boost/winapi/environment.hpp [4:5]
+ boost/winapi/error_codes.hpp [4:5]
+ boost/winapi/error_handling.hpp [6:7]
+ boost/winapi/event.hpp [5:6]
+ boost/winapi/file_management.hpp [7:8]
+ boost/winapi/file_mapping.hpp [7:8]
+ boost/winapi/get_current_process.hpp [5:6]
+ boost/winapi/get_current_process_id.hpp [4:5]
+ boost/winapi/get_current_thread.hpp [5:6]
+ boost/winapi/get_current_thread_id.hpp [5:6]
+ boost/winapi/get_last_error.hpp [5:6]
+ boost/winapi/get_process_times.hpp [4:5]
+ boost/winapi/get_system_directory.hpp [4:5]
+ boost/winapi/get_thread_times.hpp [5:6]
+ boost/winapi/handle_info.hpp [4:5]
+ boost/winapi/handles.hpp [5:6]
+ boost/winapi/heap_memory.hpp [5:6]
+ boost/winapi/init_once.hpp [5:6]
+ boost/winapi/jobs.hpp [4:5]
+ boost/winapi/limits.hpp [4:5]
+ boost/winapi/local_memory.hpp [5:6]
+ boost/winapi/memory.hpp [5:6]
+ boost/winapi/mutex.hpp [5:6]
+ boost/winapi/overlapped.hpp [4:5]
+ boost/winapi/page_protection_flags.hpp [4:5]
+ boost/winapi/pipes.hpp [5:6]
+ boost/winapi/priority_class.hpp [5:6]
+ boost/winapi/process.hpp [5:6]
+ boost/winapi/security.hpp [5:6]
+ boost/winapi/semaphore.hpp [5:6]
+ boost/winapi/shell.hpp [4:5]
+ boost/winapi/show_window.hpp [4:5]
+ boost/winapi/srw_lock.hpp [5:6]
+ boost/winapi/stack_backtrace.hpp [4:5]
+ boost/winapi/synchronization.hpp [5:6]
+ boost/winapi/system.hpp [6:7]
+ boost/winapi/thread.hpp [5:6]
+ boost/winapi/thread_pool.hpp [4:5]
+ boost/winapi/time.hpp [6:7]
+ boost/winapi/timers.hpp [5:6]
+ boost/winapi/tls.hpp [4:5]
+ boost/winapi/wait.hpp [6:7]
+ boost/winapi/waitable_timer.hpp [4:5]
+
+KEEP BSL-1.0 52079c0b53c8857e80de09aa3fcd4632
+BELONGS libs/chrono/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/chrono.hpp at line 6, libs/chrono/stopwatches/include/boost/chrono/stopwatches.hpp at line 6
+ License text:
+ // Distributed under the Boost
+ // Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or
+ // copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/chrono.hpp [4:7]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches.hpp [4:7]
+
+KEEP BSL-1.0 524e838f61fea095d692df7fee05bf3f
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-boost-original
+ Score : 100.00
+ Match type : TEXT
+ Links : http://boost.org, https://github.com/boostorg/rational/blob/0fe0beca5397c812c4f85a7de0d0769de59e12e0/include/boost/rational.hpp, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-original.LICENSE
+ Files with this license:
+ boost/shared_container_iterator.hpp [1:4]
+
+KEEP BSL-1.0 526847f759a8183ebfa4b8cff5c6effb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/local_time/dst_transition_day_rules.hpp at line 6, boost/date_time/local_time/local_time.hpp at line 6, boost/date_time/local_time/local_time_types.hpp at line 6, boost/date_time/local_time/tz_database.hpp at line 6, boost/date_time/tz_db_base.hpp at line 6
+ License text:
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 78.12
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/date_time/local_time/dst_transition_day_rules.hpp [5:6]
+ boost/date_time/local_time/local_time.hpp [5:6]
+ boost/date_time/local_time/local_time_types.hpp [5:6]
+ boost/date_time/local_time/tz_database.hpp [5:6]
+ boost/date_time/tz_db_base.hpp [5:6]
+
+KEEP BSL-1.0 52bb7ffef4964d9161d4ca3967722670
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/abi_prefix.hpp at line 6, boost/config/abi_suffix.hpp at line 6, boost/polygon/detail/polygon_simplify.hpp at line 4, boost/range/detail/has_member_size.hpp at line 6
+ License text:
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/config/abi_prefix.hpp [5:7]
+ boost/config/abi_suffix.hpp [5:7]
+ boost/polygon/detail/polygon_simplify.hpp [3:5]
+ boost/range/detail/has_member_size.hpp [5:7]
+
+KEEP BSL-1.0 53ad0b71e5a62dd6936dcbc49d561492
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/is_xxx.hpp at line 3, boost/parameter/aux_/result_of0.hpp at line 3, boost/parameter/aux_/tag.hpp at line 3, boost/parameter/binding.hpp at line 3, boost/parameter/match.hpp at line 3
+ License text:
+ // Copyright David Abrahams 2005. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/is_xxx.hpp [1:3]
+ boost/parameter/aux_/result_of0.hpp [1:3]
+ boost/parameter/aux_/tag.hpp [1:3]
+ boost/parameter/binding.hpp [1:3]
+ boost/parameter/match.hpp [1:3]
+
+KEEP BSL-1.0 540637cc651c55d1ebf9438ca4ad8fbe
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/formatted.hpp at line 5, boost/range/adaptors.hpp at line 6, boost/range/algorithm/equal.hpp at line 5, boost/range/detail/extract_optional_type.hpp at line 5, boost/range/iterator_range.hpp at line 5, boost/range/iterator_range_core.hpp at line 5, boost/range/iterator_range_hash.hpp at line 5, boost/range/iterator_range_io.hpp at line 5, boost/range/range_fwd.hpp at line 5
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/adaptor/formatted.hpp [4:6]
+ boost/range/adaptors.hpp [5:7]
+ boost/range/algorithm/equal.hpp [4:6]
+ boost/range/detail/extract_optional_type.hpp [4:6]
+ boost/range/iterator_range.hpp [4:6]
+ boost/range/iterator_range_core.hpp [4:6]
+ boost/range/iterator_range_hash.hpp [4:6]
+ boost/range/iterator_range_io.hpp [4:6]
+ boost/range/range_fwd.hpp [4:6]
+
+KEEP BSL-1.0 5441d5621bc00e9e901c5b220a3040c4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/array/data.hpp at line 5, boost/preprocessor/array/elem.hpp at line 5, boost/preprocessor/array/insert.hpp at line 5, boost/preprocessor/array/pop_back.hpp at line 5, boost/preprocessor/array/pop_front.hpp at line 5, boost/preprocessor/array/push_back.hpp at line 6, boost/preprocessor/array/push_front.hpp at line 6, boost/preprocessor/array/remove.hpp at line 5, boost/preprocessor/array/replace.hpp at line 5, boost/preprocessor/array/reverse.hpp at line 5, boost/preprocessor/array/size.hpp at line 5, boost/preprocessor/assert_msg.hpp at line 5, boost/preprocessor/comma.hpp at line 5, boost/preprocessor/comma_if.hpp at line 5, boost/preprocessor/control.hpp at line 5, boost/preprocessor/control/deduce_d.hpp at line 5, boost/preprocessor/control/expr_iif.hpp at line 5, boost/preprocessor/control/iif.hpp at line 5, boost/preprocessor/debug.hpp at line 5, boost/preprocessor/debug/error.hpp at line 5, boost/preprocessor/debug/line.hpp at line 5, boost/preprocessor/dec.hpp at line 5, boost/preprocessor/detail/auto_rec.hpp at line 5, boost/preprocessor/detail/check.hpp at line 5, boost/preprocessor/detail/dmc/auto_rec.hpp at line 5, boost/preprocessor/detail/is_binary.hpp at line 5, boost/preprocessor/detail/is_nullary.hpp at line 5, boost/preprocessor/detail/is_unary.hpp at line 5, boost/preprocessor/detail/null.hpp at line 5, boost/preprocessor/detail/split.hpp at line 5, boost/preprocessor/empty.hpp at line 5, boost/preprocessor/enum.hpp at line 5, boost/preprocessor/enum_params.hpp at line 5, boost/preprocessor/enum_params_with_a_default.hpp at line 5, boost/preprocessor/enum_params_with_defaults.hpp at line 5, boost/preprocessor/enum_shifted.hpp at line 5, boost/preprocessor/enum_shifted_params.hpp at line 5, boost/preprocessor/expand.hpp at line 5, boost/preprocessor/expr_if.hpp at line 5, boost/preprocessor/facilities/apply.hpp at line 5, boost/preprocessor/facilities/detail/is_empty.hpp at line 5, boost/preprocessor/facilities/intercept.hpp at line 5, boost/preprocessor/facilities/is_1.hpp at line 5, boost/preprocessor/facilities/is_empty.hpp at line 6, boost/preprocessor/facilities/is_empty_or_1.hpp at line 5, boost/preprocessor/facilities/is_empty_variadic.hpp at line 5, boost/preprocessor/for.hpp at line 5, boost/preprocessor/identity.hpp at line 5, boost/preprocessor/if.hpp at line 5, boost/preprocessor/inc.hpp at line 5, boost/preprocessor/iterate.hpp at line 5, boost/preprocessor/iteration.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower1.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower2.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower3.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower4.hpp at line 5, boost/preprocessor/iteration/detail/bounds/lower5.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper1.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper2.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper3.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper4.hpp at line 5, boost/preprocessor/iteration/detail/bounds/upper5.hpp at line 5, boost/preprocessor/iteration/detail/finish.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward1.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward2.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward3.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward4.hpp at line 5, boost/preprocessor/iteration/detail/iter/forward5.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse1.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse2.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse3.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse4.hpp at line 5, boost/preprocessor/iteration/detail/iter/reverse5.hpp at line 5, boost/preprocessor/iteration/detail/local.hpp at line 5, boost/preprocessor/iteration/detail/rlocal.hpp at line 5, boost/preprocessor/iteration/detail/self.hpp at line 5, boost/preprocessor/iteration/detail/start.hpp at line 5, boost/preprocessor/iteration/iterate.hpp at line 5, boost/preprocessor/iteration/local.hpp at line 5, boost/preprocessor/iteration/self.hpp at line 5, boost/preprocessor/limits.hpp at line 5, boost/preprocessor/list/to_seq.hpp at line 5, boost/preprocessor/logical/bitand.hpp at line 5, boost/preprocessor/logical/bitnor.hpp at line 5, boost/preprocessor/logical/bitor.hpp at line 5, boost/preprocessor/logical/bitxor.hpp at line 5, boost/preprocessor/logical/compl.hpp at line 5, boost/preprocessor/max.hpp at line 5, boost/preprocessor/min.hpp at line 5, boost/preprocessor/punctuation.hpp at line 5, boost/preprocessor/punctuation/detail/is_begin_parens.hpp at line 5, boost/preprocessor/punctuation/is_begin_parens.hpp at line 5, boost/preprocessor/punctuation/paren.hpp at line 5, boost/preprocessor/punctuation/paren_if.hpp at line 5, boost/preprocessor/punctuation/remove_parens.hpp at line 5, boost/preprocessor/repeat.hpp at line 5, boost/preprocessor/repeat_2nd.hpp at line 5, boost/preprocessor/repeat_3rd.hpp at line 5, boost/preprocessor/repeat_from_to.hpp at line 5, boost/preprocessor/repeat_from_to_2nd.hpp at line 5, boost/preprocessor/repeat_from_to_3rd.hpp at line 5, boost/preprocessor/repetition.hpp at line 5, boost/preprocessor/repetition/deduce_r.hpp at line 5, boost/preprocessor/repetition/deduce_z.hpp at line 5, boost/preprocessor/repetition/enum_binary_params.hpp at line 5, boost/preprocessor/repetition/enum_trailing.hpp at line 5, boost/preprocessor/repetition/enum_trailing_binary_params.hpp at line 5, boost/preprocessor/repetition/enum_trailing_params.hpp at line 5, boost/preprocessor/selection.hpp at line 5, boost/preprocessor/seq/cat.hpp at line 5, boost/preprocessor/seq/detail/is_empty.hpp at line 5, boost/preprocessor/seq/detail/split.hpp at line 5, boost/preprocessor/seq/elem.hpp at line 5, boost/preprocessor/seq/enum.hpp at line 5, boost/preprocessor/seq/filter.hpp at line 5, boost/preprocessor/seq/first_n.hpp at line 5, boost/preprocessor/seq/fold_left.hpp at line 5, boost/preprocessor/seq/fold_right.hpp at line 5, boost/preprocessor/seq/for_each.hpp at line 5, boost/preprocessor/seq/for_each_i.hpp at line 5, boost/preprocessor/seq/for_each_product.hpp at line 5, boost/preprocessor/seq/insert.hpp at line 5, boost/preprocessor/seq/pop_back.hpp at line 5, boost/preprocessor/seq/pop_front.hpp at line 5, boost/preprocessor/seq/push_back.hpp at line 5, boost/preprocessor/seq/push_front.hpp at line 5, boost/preprocessor/seq/remove.hpp at line 5, boost/preprocessor/seq/replace.hpp at line 5, boost/preprocessor/seq/rest_n.hpp at line 5, boost/preprocessor/seq/reverse.hpp at line 5, boost/preprocessor/seq/seq.hpp at line 5, boost/preprocessor/seq/size.hpp at line 5, boost/preprocessor/seq/subseq.hpp at line 5, boost/preprocessor/seq/to_array.hpp at line 5, boost/preprocessor/seq/to_tuple.hpp at line 5, boost/preprocessor/seq/transform.hpp at line 5, boost/preprocessor/slot.hpp at line 5, boost/preprocessor/slot/detail/def.hpp at line 5, boost/preprocessor/slot/detail/shared.hpp at line 5, boost/preprocessor/slot/detail/slot1.hpp at line 5, boost/preprocessor/slot/detail/slot2.hpp at line 5, boost/preprocessor/slot/detail/slot3.hpp at line 5, boost/preprocessor/slot/detail/slot4.hpp at line 5, boost/preprocessor/slot/detail/slot5.hpp at line 5, boost/preprocessor/slot/slot.hpp at line 5, boost/preprocessor/tuple/insert.hpp at line 5, boost/preprocessor/tuple/pop_back.hpp at line 5, boost/preprocessor/tuple/pop_front.hpp at line 5, boost/preprocessor/tuple/push_back.hpp at line 5, boost/preprocessor/tuple/push_front.hpp at line 5, boost/preprocessor/tuple/remove.hpp at line 5, boost/preprocessor/tuple/replace.hpp at line 5, boost/preprocessor/while.hpp at line 5, boost/preprocessor/wstringize.hpp at line 5
+ License text:
+ \# * Distributed under the Boost Software License, Version 1.0. (See
+ \# * accompanying file LICENSE_1_0.txt or copy at
+ \# * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/preprocessor/array/data.hpp [4:6]
+ boost/preprocessor/array/elem.hpp [4:6]
+ boost/preprocessor/array/insert.hpp [4:6]
+ boost/preprocessor/array/pop_back.hpp [4:6]
+ boost/preprocessor/array/pop_front.hpp [4:6]
+ boost/preprocessor/array/push_back.hpp [5:7]
+ boost/preprocessor/array/push_front.hpp [5:7]
+ boost/preprocessor/array/remove.hpp [4:6]
+ boost/preprocessor/array/replace.hpp [4:6]
+ boost/preprocessor/array/reverse.hpp [4:6]
+ boost/preprocessor/array/size.hpp [4:6]
+ boost/preprocessor/assert_msg.hpp [4:6]
+ boost/preprocessor/comma.hpp [4:6]
+ boost/preprocessor/comma_if.hpp [4:6]
+ boost/preprocessor/control.hpp [4:6]
+ boost/preprocessor/control/deduce_d.hpp [4:6]
+ boost/preprocessor/control/expr_iif.hpp [4:6]
+ boost/preprocessor/control/iif.hpp [4:6]
+ boost/preprocessor/debug.hpp [4:6]
+ boost/preprocessor/debug/error.hpp [4:6]
+ boost/preprocessor/debug/line.hpp [4:6]
+ boost/preprocessor/dec.hpp [4:6]
+ boost/preprocessor/detail/auto_rec.hpp [4:6]
+ boost/preprocessor/detail/check.hpp [4:6]
+ boost/preprocessor/detail/dmc/auto_rec.hpp [4:6]
+ boost/preprocessor/detail/is_binary.hpp [4:6]
+ boost/preprocessor/detail/is_nullary.hpp [4:6]
+ boost/preprocessor/detail/is_unary.hpp [4:6]
+ boost/preprocessor/detail/null.hpp [4:6]
+ boost/preprocessor/detail/split.hpp [4:6]
+ boost/preprocessor/empty.hpp [4:6]
+ boost/preprocessor/enum.hpp [4:6]
+ boost/preprocessor/enum_params.hpp [4:6]
+ boost/preprocessor/enum_params_with_a_default.hpp [4:6]
+ boost/preprocessor/enum_params_with_defaults.hpp [4:6]
+ boost/preprocessor/enum_shifted.hpp [4:6]
+ boost/preprocessor/enum_shifted_params.hpp [4:6]
+ boost/preprocessor/expand.hpp [4:6]
+ boost/preprocessor/expr_if.hpp [4:6]
+ boost/preprocessor/facilities/apply.hpp [4:6]
+ boost/preprocessor/facilities/detail/is_empty.hpp [4:6]
+ boost/preprocessor/facilities/intercept.hpp [4:6]
+ boost/preprocessor/facilities/is_1.hpp [4:6]
+ boost/preprocessor/facilities/is_empty.hpp [5:7]
+ boost/preprocessor/facilities/is_empty_or_1.hpp [4:6]
+ boost/preprocessor/facilities/is_empty_variadic.hpp [4:6]
+ boost/preprocessor/for.hpp [4:6]
+ boost/preprocessor/identity.hpp [4:6]
+ boost/preprocessor/if.hpp [4:6]
+ boost/preprocessor/inc.hpp [4:6]
+ boost/preprocessor/iterate.hpp [4:6]
+ boost/preprocessor/iteration.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/lower1.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/lower2.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/lower3.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/lower4.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/lower5.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/upper1.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/upper2.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/upper3.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/upper4.hpp [4:6]
+ boost/preprocessor/iteration/detail/bounds/upper5.hpp [4:6]
+ boost/preprocessor/iteration/detail/finish.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/forward1.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/forward2.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/forward3.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/forward4.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/forward5.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/reverse1.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/reverse2.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/reverse3.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/reverse4.hpp [4:6]
+ boost/preprocessor/iteration/detail/iter/reverse5.hpp [4:6]
+ boost/preprocessor/iteration/detail/local.hpp [4:6]
+ boost/preprocessor/iteration/detail/rlocal.hpp [4:6]
+ boost/preprocessor/iteration/detail/self.hpp [4:6]
+ boost/preprocessor/iteration/detail/start.hpp [4:6]
+ boost/preprocessor/iteration/iterate.hpp [4:6]
+ boost/preprocessor/iteration/local.hpp [4:6]
+ boost/preprocessor/iteration/self.hpp [4:6]
+ boost/preprocessor/limits.hpp [4:6]
+ boost/preprocessor/list/to_seq.hpp [4:6]
+ boost/preprocessor/logical/bitand.hpp [4:6]
+ boost/preprocessor/logical/bitnor.hpp [4:6]
+ boost/preprocessor/logical/bitor.hpp [4:6]
+ boost/preprocessor/logical/bitxor.hpp [4:6]
+ boost/preprocessor/logical/compl.hpp [4:6]
+ boost/preprocessor/max.hpp [4:6]
+ boost/preprocessor/min.hpp [4:6]
+ boost/preprocessor/punctuation.hpp [4:6]
+ boost/preprocessor/punctuation/detail/is_begin_parens.hpp [4:6]
+ boost/preprocessor/punctuation/is_begin_parens.hpp [4:6]
+ boost/preprocessor/punctuation/paren.hpp [4:6]
+ boost/preprocessor/punctuation/paren_if.hpp [4:6]
+ boost/preprocessor/punctuation/remove_parens.hpp [4:6]
+ boost/preprocessor/repeat.hpp [4:6]
+ boost/preprocessor/repeat_2nd.hpp [4:6]
+ boost/preprocessor/repeat_3rd.hpp [4:6]
+ boost/preprocessor/repeat_from_to.hpp [4:6]
+ boost/preprocessor/repeat_from_to_2nd.hpp [4:6]
+ boost/preprocessor/repeat_from_to_3rd.hpp [4:6]
+ boost/preprocessor/repetition.hpp [4:6]
+ boost/preprocessor/repetition/deduce_r.hpp [4:6]
+ boost/preprocessor/repetition/deduce_z.hpp [4:6]
+ boost/preprocessor/repetition/enum_binary_params.hpp [4:6]
+ boost/preprocessor/repetition/enum_trailing.hpp [4:6]
+ boost/preprocessor/repetition/enum_trailing_binary_params.hpp [4:6]
+ boost/preprocessor/repetition/enum_trailing_params.hpp [4:6]
+ boost/preprocessor/selection.hpp [4:6]
+ boost/preprocessor/seq/cat.hpp [4:6]
+ boost/preprocessor/seq/detail/is_empty.hpp [4:6]
+ boost/preprocessor/seq/detail/split.hpp [4:6]
+ boost/preprocessor/seq/elem.hpp [4:6]
+ boost/preprocessor/seq/enum.hpp [4:6]
+ boost/preprocessor/seq/filter.hpp [4:6]
+ boost/preprocessor/seq/first_n.hpp [4:6]
+ boost/preprocessor/seq/fold_left.hpp [4:6]
+ boost/preprocessor/seq/fold_right.hpp [4:6]
+ boost/preprocessor/seq/for_each.hpp [4:6]
+ boost/preprocessor/seq/for_each_i.hpp [4:6]
+ boost/preprocessor/seq/for_each_product.hpp [4:6]
+ boost/preprocessor/seq/insert.hpp [4:6]
+ boost/preprocessor/seq/pop_back.hpp [4:6]
+ boost/preprocessor/seq/pop_front.hpp [4:6]
+ boost/preprocessor/seq/push_back.hpp [4:6]
+ boost/preprocessor/seq/push_front.hpp [4:6]
+ boost/preprocessor/seq/remove.hpp [4:6]
+ boost/preprocessor/seq/replace.hpp [4:6]
+ boost/preprocessor/seq/rest_n.hpp [4:6]
+ boost/preprocessor/seq/reverse.hpp [4:6]
+ boost/preprocessor/seq/seq.hpp [4:6]
+ boost/preprocessor/seq/size.hpp [4:6]
+ boost/preprocessor/seq/subseq.hpp [4:6]
+ boost/preprocessor/seq/to_array.hpp [4:6]
+ boost/preprocessor/seq/to_tuple.hpp [4:6]
+ boost/preprocessor/seq/transform.hpp [4:6]
+ boost/preprocessor/slot.hpp [4:6]
+ boost/preprocessor/slot/detail/def.hpp [4:6]
+ boost/preprocessor/slot/detail/shared.hpp [4:6]
+ boost/preprocessor/slot/detail/slot1.hpp [4:6]
+ boost/preprocessor/slot/detail/slot2.hpp [4:6]
+ boost/preprocessor/slot/detail/slot3.hpp [4:6]
+ boost/preprocessor/slot/detail/slot4.hpp [4:6]
+ boost/preprocessor/slot/detail/slot5.hpp [4:6]
+ boost/preprocessor/slot/slot.hpp [4:6]
+ boost/preprocessor/tuple/insert.hpp [4:6]
+ boost/preprocessor/tuple/pop_back.hpp [4:6]
+ boost/preprocessor/tuple/pop_front.hpp [4:6]
+ boost/preprocessor/tuple/push_back.hpp [4:6]
+ boost/preprocessor/tuple/push_front.hpp [4:6]
+ boost/preprocessor/tuple/remove.hpp [4:6]
+ boost/preprocessor/tuple/replace.hpp [4:6]
+ boost/preprocessor/while.hpp [4:6]
+ boost/preprocessor/wstringize.hpp [4:6]
+
+KEEP BSL-1.0 559be58c893ad9d438fca25af1254413
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/is_abstract.hpp at line 13
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.74
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/type_traits/is_abstract.hpp [12:16]
+
+KEEP BSL-1.0 559c1c9a22131873e7b18f9995722903
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-boost-original
+ Score : 100.00
+ Match type : TEXT
+ Links : http://boost.org, https://github.com/boostorg/rational/blob/0fe0beca5397c812c4f85a7de0d0769de59e12e0/include/boost/rational.hpp, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-original.LICENSE
+ Files with this license:
+ boost/rational.hpp [3:6]
+
+KEEP Mit-Old-Style 55e81d3c6ec19a0377f36e6e6d487cd9
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-mit-old-style
+ Score : 100.00
+ Match type : TEXT
+ Links : http://fedoraproject.org/wiki/Licensing:MIT#Old_Style, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE
+ Files with this license:
+ boost/interprocess/sync/interprocess_recursive_mutex.hpp [18:22]
+ boost/interprocess/sync/posix/mutex.hpp [18:22]
+ boost/interprocess/sync/posix/recursive_mutex.hpp [18:22]
+ boost/interprocess/sync/spin/recursive_mutex.hpp [18:22]
+
+KEEP BSL-1.0 563e4f804388196518aa056f2cf30221
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/detail/as_expr.hpp at line 9, boost/proto/functional.hpp at line 7, boost/proto/functional/fusion.hpp at line 7, boost/proto/functional/fusion/at.hpp at line 7, boost/proto/functional/fusion/pop_back.hpp at line 7, boost/proto/functional/fusion/pop_front.hpp at line 7, boost/proto/functional/fusion/push_back.hpp at line 7, boost/proto/functional/fusion/push_front.hpp at line 7, boost/proto/functional/fusion/reverse.hpp at line 7, boost/proto/functional/std.hpp at line 7, boost/proto/functional/std/utility.hpp at line 7
+ License text:
+ // Copyright 2010 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/proto/detail/as_expr.hpp [7:9]
+ boost/proto/functional.hpp [5:7]
+ boost/proto/functional/fusion.hpp [5:7]
+ boost/proto/functional/fusion/at.hpp [5:7]
+ boost/proto/functional/fusion/pop_back.hpp [5:7]
+ boost/proto/functional/fusion/pop_front.hpp [5:7]
+ boost/proto/functional/fusion/push_back.hpp [5:7]
+ boost/proto/functional/fusion/push_front.hpp [5:7]
+ boost/proto/functional/fusion/reverse.hpp [5:7]
+ boost/proto/functional/std.hpp [5:7]
+ boost/proto/functional/std/utility.hpp [5:7]
+
+KEEP BSL-1.0 563f38bd7e093c7e1caf078634008d40
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/numeric/odeint.hpp at line 13, boost/numeric/odeint/algebra/algebra_dispatcher.hpp at line 13, boost/numeric/odeint/algebra/array_algebra.hpp at line 17, boost/numeric/odeint/algebra/detail/extract_value_type.hpp at line 13, boost/numeric/odeint/algebra/detail/macros.hpp at line 13, boost/numeric/odeint/algebra/detail/norm_inf.hpp at line 13, boost/numeric/odeint/algebra/fusion_algebra.hpp at line 13, boost/numeric/odeint/algebra/norm_result_type.hpp at line 13, boost/numeric/odeint/algebra/operations_dispatcher.hpp at line 13, boost/numeric/odeint/algebra/vector_space_algebra.hpp at line 13, boost/numeric/odeint/config.hpp at line 13, boost/numeric/odeint/external/compute/compute_algebra.hpp at line 13, boost/numeric/odeint/external/compute/compute_operations.hpp at line 13, boost/numeric/odeint/external/compute/compute_resize.hpp at line 13, boost/numeric/odeint/external/gsl/gsl_wrapper.hpp at line 13, boost/numeric/odeint/external/mkl/mkl_operations.hpp at line 15, boost/numeric/odeint/external/mpi/mpi.hpp at line 14, boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp at line 14, boost/numeric/odeint/external/mpi/mpi_state.hpp at line 14, boost/numeric/odeint/external/mpi/mpi_vector_state.hpp at line 14, boost/numeric/odeint/external/mtl4/mtl4.hpp at line 13, boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp at line 13, boost/numeric/odeint/external/openmp/openmp.hpp at line 14, boost/numeric/odeint/external/openmp/openmp_state.hpp at line 14, boost/numeric/odeint/external/thrust/thrust_algebra.hpp at line 14, boost/numeric/odeint/external/thrust/thrust_operations.hpp at line 13, boost/numeric/odeint/external/thrust/thrust_resize.hpp at line 13, boost/numeric/odeint/external/vexcl/vexcl_copy.hpp at line 13, boost/numeric/odeint/external/vexcl/vexcl_resize.hpp at line 14, boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp at line 13, boost/numeric/odeint/external/viennacl/viennacl_operations.hpp at line 14, boost/numeric/odeint/external/viennacl/viennacl_resize.hpp at line 14, boost/numeric/odeint/integrate/check_adapter.hpp at line 12, boost/numeric/odeint/integrate/detail/functors.hpp at line 13, boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp at line 14, boost/numeric/odeint/integrate/detail/integrate_const.hpp at line 14, boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp at line 14, boost/numeric/odeint/integrate/detail/integrate_times.hpp at line 14, boost/numeric/odeint/integrate/integrate.hpp at line 13, boost/numeric/odeint/integrate/integrate_adaptive.hpp at line 13, boost/numeric/odeint/integrate/integrate_const.hpp at line 14, boost/numeric/odeint/integrate/integrate_n_steps.hpp at line 13, boost/numeric/odeint/integrate/integrate_times.hpp at line 13, boost/numeric/odeint/integrate/max_step_checker.hpp at line 12, boost/numeric/odeint/integrate/null_observer.hpp at line 13, boost/numeric/odeint/integrate/observer_collection.hpp at line 13, boost/numeric/odeint/iterator/adaptive_iterator.hpp at line 14, boost/numeric/odeint/iterator/adaptive_time_iterator.hpp at line 14, boost/numeric/odeint/iterator/const_step_iterator.hpp at line 14, boost/numeric/odeint/iterator/const_step_time_iterator.hpp at line 14, boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp at line 14, boost/numeric/odeint/iterator/integrate/detail/functors.hpp at line 13, boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp at line 13, boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp at line 13, boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp at line 13, boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp at line 13, boost/numeric/odeint/iterator/integrate/integrate.hpp at line 13, boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp at line 13, boost/numeric/odeint/iterator/integrate/integrate_const.hpp at line 14, boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp at line 13, boost/numeric/odeint/iterator/integrate/integrate_times.hpp at line 13, boost/numeric/odeint/iterator/integrate/null_observer.hpp at line 13, boost/numeric/odeint/iterator/integrate/observer_collection.hpp at line 13, boost/numeric/odeint/iterator/n_step_iterator.hpp at line 14, boost/numeric/odeint/iterator/n_step_time_iterator.hpp at line 15, boost/numeric/odeint/iterator/times_iterator.hpp at line 14, boost/numeric/odeint/iterator/times_time_iterator.hpp at line 15, boost/numeric/odeint/stepper/adams_bashforth.hpp at line 16, boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp at line 14, boost/numeric/odeint/stepper/adams_moulton.hpp at line 15, boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp at line 13, boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp at line 14, boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp at line 14, boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp at line 14, boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp at line 14, boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp at line 14, boost/numeric/odeint/stepper/controlled_runge_kutta.hpp at line 13, boost/numeric/odeint/stepper/controlled_step_result.hpp at line 13, boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp at line 15, boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp at line 13, boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp at line 13, boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp at line 13, boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp at line 13, boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp at line 14, boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp at line 13, boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp at line 13, boost/numeric/odeint/stepper/detail/rotating_buffer.hpp at line 13, boost/numeric/odeint/stepper/euler.hpp at line 14, boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp at line 14, boost/numeric/odeint/stepper/explicit_generic_rk.hpp at line 14, boost/numeric/odeint/stepper/generation.hpp at line 13, boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp at line 13, boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp at line 13, boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp at line 13, boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp at line 13, boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp at line 14, boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp at line 13, boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp at line 13, boost/numeric/odeint/stepper/generation/make_controlled.hpp at line 13, boost/numeric/odeint/stepper/generation/make_dense_output.hpp at line 13, boost/numeric/odeint/stepper/implicit_euler.hpp at line 14, boost/numeric/odeint/stepper/modified_midpoint.hpp at line 14, boost/numeric/odeint/stepper/rosenbrock4.hpp at line 15, boost/numeric/odeint/stepper/rosenbrock4_controller.hpp at line 14, boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp at line 14, boost/numeric/odeint/stepper/runge_kutta4.hpp at line 13, boost/numeric/odeint/stepper/runge_kutta4_classic.hpp at line 14, boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp at line 13, boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp at line 14, boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp at line 14, boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp at line 13, boost/numeric/odeint/stepper/stepper_categories.hpp at line 13, boost/numeric/odeint/stepper/symplectic_euler.hpp at line 13, boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp at line 13, boost/numeric/odeint/util/copy.hpp at line 13, boost/numeric/odeint/util/detail/is_range.hpp at line 15, boost/numeric/odeint/util/detail/less_with_sign.hpp at line 13, boost/numeric/odeint/util/is_pair.hpp at line 13, boost/numeric/odeint/util/is_resizeable.hpp at line 13, boost/numeric/odeint/util/n_ary_helper.hpp at line 12, boost/numeric/odeint/util/odeint_error.hpp at line 12, boost/numeric/odeint/util/resize.hpp at line 14, boost/numeric/odeint/util/resizer.hpp at line 13, boost/numeric/odeint/util/same_instance.hpp at line 13, boost/numeric/odeint/util/same_size.hpp at line 14, boost/numeric/odeint/util/split.hpp at line 14, boost/numeric/odeint/util/split_adaptor.hpp at line 14, boost/numeric/odeint/util/state_wrapper.hpp at line 14, boost/numeric/odeint/util/ublas_wrapper.hpp at line 13, boost/numeric/odeint/util/unwrap_reference.hpp at line 13, boost/numeric/odeint/version.hpp at line 13
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or
+ copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/numeric/odeint.hpp [12:14]
+ boost/numeric/odeint/algebra/algebra_dispatcher.hpp [12:14]
+ boost/numeric/odeint/algebra/array_algebra.hpp [16:18]
+ boost/numeric/odeint/algebra/detail/extract_value_type.hpp [12:14]
+ boost/numeric/odeint/algebra/detail/macros.hpp [12:14]
+ boost/numeric/odeint/algebra/detail/norm_inf.hpp [12:14]
+ boost/numeric/odeint/algebra/fusion_algebra.hpp [12:14]
+ boost/numeric/odeint/algebra/norm_result_type.hpp [12:14]
+ boost/numeric/odeint/algebra/operations_dispatcher.hpp [12:14]
+ boost/numeric/odeint/algebra/vector_space_algebra.hpp [12:14]
+ boost/numeric/odeint/config.hpp [12:14]
+ boost/numeric/odeint/external/compute/compute_algebra.hpp [12:14]
+ boost/numeric/odeint/external/compute/compute_operations.hpp [12:14]
+ boost/numeric/odeint/external/compute/compute_resize.hpp [12:14]
+ boost/numeric/odeint/external/gsl/gsl_wrapper.hpp [12:14]
+ boost/numeric/odeint/external/mkl/mkl_operations.hpp [14:16]
+ boost/numeric/odeint/external/mpi/mpi.hpp [13:15]
+ boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp [13:15]
+ boost/numeric/odeint/external/mpi/mpi_state.hpp [13:15]
+ boost/numeric/odeint/external/mpi/mpi_vector_state.hpp [13:15]
+ boost/numeric/odeint/external/mtl4/mtl4.hpp [12:14]
+ boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp [12:14]
+ boost/numeric/odeint/external/openmp/openmp.hpp [13:15]
+ boost/numeric/odeint/external/openmp/openmp_state.hpp [13:15]
+ boost/numeric/odeint/external/thrust/thrust_algebra.hpp [13:15]
+ boost/numeric/odeint/external/thrust/thrust_operations.hpp [12:14]
+ boost/numeric/odeint/external/thrust/thrust_resize.hpp [12:14]
+ boost/numeric/odeint/external/vexcl/vexcl_copy.hpp [12:14]
+ boost/numeric/odeint/external/vexcl/vexcl_resize.hpp [13:15]
+ boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp [12:14]
+ boost/numeric/odeint/external/viennacl/viennacl_operations.hpp [13:15]
+ boost/numeric/odeint/external/viennacl/viennacl_resize.hpp [13:15]
+ boost/numeric/odeint/integrate/check_adapter.hpp [11:13]
+ boost/numeric/odeint/integrate/detail/functors.hpp [12:14]
+ boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp [13:15]
+ boost/numeric/odeint/integrate/detail/integrate_const.hpp [13:15]
+ boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp [13:15]
+ boost/numeric/odeint/integrate/detail/integrate_times.hpp [13:15]
+ boost/numeric/odeint/integrate/integrate.hpp [12:14]
+ boost/numeric/odeint/integrate/integrate_adaptive.hpp [12:14]
+ boost/numeric/odeint/integrate/integrate_const.hpp [13:15]
+ boost/numeric/odeint/integrate/integrate_n_steps.hpp [12:14]
+ boost/numeric/odeint/integrate/integrate_times.hpp [12:14]
+ boost/numeric/odeint/integrate/max_step_checker.hpp [11:13]
+ boost/numeric/odeint/integrate/null_observer.hpp [12:14]
+ boost/numeric/odeint/integrate/observer_collection.hpp [12:14]
+ boost/numeric/odeint/iterator/adaptive_iterator.hpp [13:15]
+ boost/numeric/odeint/iterator/adaptive_time_iterator.hpp [13:15]
+ boost/numeric/odeint/iterator/const_step_iterator.hpp [13:15]
+ boost/numeric/odeint/iterator/const_step_time_iterator.hpp [13:15]
+ boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp [13:15]
+ boost/numeric/odeint/iterator/integrate/detail/functors.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/integrate.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/integrate_const.hpp [13:15]
+ boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/integrate_times.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/null_observer.hpp [12:14]
+ boost/numeric/odeint/iterator/integrate/observer_collection.hpp [12:14]
+ boost/numeric/odeint/iterator/n_step_iterator.hpp [13:15]
+ boost/numeric/odeint/iterator/n_step_time_iterator.hpp [14:16]
+ boost/numeric/odeint/iterator/times_iterator.hpp [13:15]
+ boost/numeric/odeint/iterator/times_time_iterator.hpp [14:16]
+ boost/numeric/odeint/stepper/adams_bashforth.hpp [15:17]
+ boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp [13:15]
+ boost/numeric/odeint/stepper/adams_moulton.hpp [14:16]
+ boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp [12:14]
+ boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp [13:15]
+ boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp [13:15]
+ boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp [13:15]
+ boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp [13:15]
+ boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp [13:15]
+ boost/numeric/odeint/stepper/controlled_runge_kutta.hpp [12:14]
+ boost/numeric/odeint/stepper/controlled_step_result.hpp [12:14]
+ boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp [14:16]
+ boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp [12:14]
+ boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp [12:14]
+ boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp [12:14]
+ boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp [12:14]
+ boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp [13:15]
+ boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp [12:14]
+ boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp [12:14]
+ boost/numeric/odeint/stepper/detail/rotating_buffer.hpp [12:14]
+ boost/numeric/odeint/stepper/euler.hpp [13:15]
+ boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp [13:15]
+ boost/numeric/odeint/stepper/explicit_generic_rk.hpp [13:15]
+ boost/numeric/odeint/stepper/generation.hpp [12:14]
+ boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp [12:14]
+ boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp [12:14]
+ boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp [12:14]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp [12:14]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp [13:15]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp [12:14]
+ boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp [12:14]
+ boost/numeric/odeint/stepper/generation/make_controlled.hpp [12:14]
+ boost/numeric/odeint/stepper/generation/make_dense_output.hpp [12:14]
+ boost/numeric/odeint/stepper/implicit_euler.hpp [13:15]
+ boost/numeric/odeint/stepper/modified_midpoint.hpp [13:15]
+ boost/numeric/odeint/stepper/rosenbrock4.hpp [14:16]
+ boost/numeric/odeint/stepper/rosenbrock4_controller.hpp [13:15]
+ boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp [13:15]
+ boost/numeric/odeint/stepper/runge_kutta4.hpp [12:14]
+ boost/numeric/odeint/stepper/runge_kutta4_classic.hpp [13:15]
+ boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp [12:14]
+ boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp [13:15]
+ boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp [13:15]
+ boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp [12:14]
+ boost/numeric/odeint/stepper/stepper_categories.hpp [12:14]
+ boost/numeric/odeint/stepper/symplectic_euler.hpp [12:14]
+ boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp [12:14]
+ boost/numeric/odeint/util/copy.hpp [12:14]
+ boost/numeric/odeint/util/detail/is_range.hpp [14:16]
+ boost/numeric/odeint/util/detail/less_with_sign.hpp [12:14]
+ boost/numeric/odeint/util/is_pair.hpp [12:14]
+ boost/numeric/odeint/util/is_resizeable.hpp [12:14]
+ boost/numeric/odeint/util/n_ary_helper.hpp [11:13]
+ boost/numeric/odeint/util/odeint_error.hpp [11:13]
+ boost/numeric/odeint/util/resize.hpp [13:15]
+ boost/numeric/odeint/util/resizer.hpp [12:14]
+ boost/numeric/odeint/util/same_instance.hpp [12:14]
+ boost/numeric/odeint/util/same_size.hpp [13:15]
+ boost/numeric/odeint/util/split.hpp [13:15]
+ boost/numeric/odeint/util/split_adaptor.hpp [13:15]
+ boost/numeric/odeint/util/state_wrapper.hpp [13:15]
+ boost/numeric/odeint/util/ublas_wrapper.hpp [12:14]
+ boost/numeric/odeint/util/unwrap_reference.hpp [12:14]
+ boost/numeric/odeint/version.hpp [12:14]
+
+KEEP BSL-1.0 56f0f1ae21573cb9dc1a9925ad7eae91
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/combine_cxx03.hpp at line 5, boost/range/detail/combine_cxx11.hpp at line 3, boost/range/detail/combine_no_rvalue.hpp at line 5, boost/range/detail/combine_rvalue.hpp at line 5, boost/range/detail/default_constructible_unary_fn.hpp at line 5, boost/range/traversal.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/detail/combine_cxx03.hpp [3:6]
+ boost/range/detail/combine_cxx11.hpp [1:4]
+ boost/range/detail/combine_no_rvalue.hpp [3:6]
+ boost/range/detail/combine_rvalue.hpp [3:6]
+ boost/range/detail/default_constructible_unary_fn.hpp [3:6]
+ boost/range/traversal.hpp [3:6]
+
+KEEP BSL-1.0 56f4fcb5d91e0daef7ad21bf68734337
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/allocators/detail/allocator_common.hpp at line 5, boost/interprocess/containers/allocation_type.hpp at line 5, boost/interprocess/containers/deque.hpp at line 5, boost/interprocess/containers/flat_map.hpp at line 5, boost/interprocess/containers/flat_set.hpp at line 5, boost/interprocess/containers/list.hpp at line 5, boost/interprocess/containers/map.hpp at line 5, boost/interprocess/containers/pair.hpp at line 5, boost/interprocess/containers/set.hpp at line 5, boost/interprocess/containers/slist.hpp at line 5, boost/interprocess/containers/stable_vector.hpp at line 5, boost/interprocess/containers/string.hpp at line 5, boost/interprocess/containers/vector.hpp at line 5, boost/interprocess/containers/version_type.hpp at line 5, boost/interprocess/detail/variadic_templates_tools.hpp at line 5, boost/interprocess/managed_xsi_shared_memory.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/allocators/detail/allocator_common.hpp [3:5]
+ boost/interprocess/containers/allocation_type.hpp [3:5]
+ boost/interprocess/containers/deque.hpp [3:5]
+ boost/interprocess/containers/flat_map.hpp [3:5]
+ boost/interprocess/containers/flat_set.hpp [3:5]
+ boost/interprocess/containers/list.hpp [3:5]
+ boost/interprocess/containers/map.hpp [3:5]
+ boost/interprocess/containers/pair.hpp [3:5]
+ boost/interprocess/containers/set.hpp [3:5]
+ boost/interprocess/containers/slist.hpp [3:5]
+ boost/interprocess/containers/stable_vector.hpp [3:5]
+ boost/interprocess/containers/string.hpp [3:5]
+ boost/interprocess/containers/vector.hpp [3:5]
+ boost/interprocess/containers/version_type.hpp [3:5]
+ boost/interprocess/detail/variadic_templates_tools.hpp [3:5]
+ boost/interprocess/managed_xsi_shared_memory.hpp [3:5]
+
+KEEP BSL-1.0 58d7e90122d79b0017c88c4661121868
+BELONGS ya.make
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 76.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/callable_traits.hpp [4:5]
+ boost/callable_traits/add_member_const.hpp [4:5]
+ boost/callable_traits/add_member_cv.hpp [4:5]
+ boost/callable_traits/add_member_lvalue_reference.hpp [4:5]
+ boost/callable_traits/add_member_rvalue_reference.hpp [4:5]
+ boost/callable_traits/add_member_volatile.hpp [4:5]
+ boost/callable_traits/add_noexcept.hpp [5:6]
+ boost/callable_traits/add_transaction_safe.hpp [5:6]
+ boost/callable_traits/add_varargs.hpp [4:5]
+ boost/callable_traits/apply_member_pointer.hpp [4:5]
+ boost/callable_traits/apply_return.hpp [4:5]
+ boost/callable_traits/args.hpp [4:5]
+ boost/callable_traits/class_of.hpp [4:5]
+ boost/callable_traits/detail/config.hpp [4:5]
+ boost/callable_traits/detail/core.hpp [4:5]
+ boost/callable_traits/detail/function.hpp [4:5]
+ boost/callable_traits/detail/function_object.hpp [4:5]
+ boost/callable_traits/detail/is_invocable_impl.hpp [5:6]
+ boost/callable_traits/detail/pmd.hpp [4:5]
+ boost/callable_traits/detail/pmf.hpp [4:5]
+ boost/callable_traits/detail/polyfills/disjunction.hpp [4:5]
+ boost/callable_traits/detail/polyfills/make_index_sequence.hpp [4:5]
+ boost/callable_traits/detail/qualifier_flags.hpp [5:6]
+ boost/callable_traits/detail/set_function_qualifiers.hpp [4:5]
+ boost/callable_traits/detail/sfinae_errors.hpp [4:5]
+ boost/callable_traits/detail/traits.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function_2.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function_3.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function_ptr.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function_ptr_2.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function_ptr_3.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function_ptr_varargs.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function_ptr_varargs_2.hpp [4:5]
+ boost/callable_traits/detail/unguarded/function_ptr_varargs_3.hpp [4:5]
+ boost/callable_traits/detail/unguarded/pmf.hpp [5:6]
+ boost/callable_traits/detail/unguarded/pmf_2.hpp [4:5]
+ boost/callable_traits/detail/unguarded/pmf_3.hpp [4:5]
+ boost/callable_traits/detail/unguarded/pmf_4.hpp [4:5]
+ boost/callable_traits/detail/unguarded/pmf_varargs.hpp [4:5]
+ boost/callable_traits/detail/unguarded/pmf_varargs_2.hpp [4:5]
+ boost/callable_traits/detail/unguarded/pmf_varargs_3.hpp [4:5]
+ boost/callable_traits/detail/unguarded/pmf_varargs_4.hpp [4:5]
+ boost/callable_traits/detail/utility.hpp [4:5]
+ boost/callable_traits/function_type.hpp [4:5]
+ boost/callable_traits/has_member_qualifiers.hpp [4:5]
+ boost/callable_traits/has_varargs.hpp [4:5]
+ boost/callable_traits/has_void_return.hpp [4:5]
+ boost/callable_traits/is_const_member.hpp [4:5]
+ boost/callable_traits/is_cv_member.hpp [4:5]
+ boost/callable_traits/is_invocable.hpp [4:5]
+ boost/callable_traits/is_lvalue_reference_member.hpp [4:5]
+ boost/callable_traits/is_noexcept.hpp [5:6]
+ boost/callable_traits/is_reference_member.hpp [5:6]
+ boost/callable_traits/is_rvalue_reference_member.hpp [5:6]
+ boost/callable_traits/is_transaction_safe.hpp [5:6]
+ boost/callable_traits/is_volatile_member.hpp [5:6]
+ boost/callable_traits/qualified_class_of.hpp [5:6]
+ boost/callable_traits/remove_member_const.hpp [4:5]
+ boost/callable_traits/remove_member_cv.hpp [5:6]
+ boost/callable_traits/remove_member_reference.hpp [4:5]
+ boost/callable_traits/remove_member_volatile.hpp [4:5]
+ boost/callable_traits/remove_noexcept.hpp [5:6]
+ boost/callable_traits/remove_transaction_safe.hpp [5:6]
+ boost/callable_traits/remove_varargs.hpp [5:6]
+ boost/callable_traits/return_type.hpp [5:6]
+ boost/hana.hpp [7:8]
+ boost/hana/accessors.hpp [6:7]
+ boost/hana/adapt_adt.hpp [6:7]
+ boost/hana/adapt_struct.hpp [6:7]
+ boost/hana/adjust.hpp [6:7]
+ boost/hana/adjust_if.hpp [6:7]
+ boost/hana/all.hpp [6:7]
+ boost/hana/all_of.hpp [6:7]
+ boost/hana/and.hpp [6:7]
+ boost/hana/any.hpp [6:7]
+ boost/hana/any_of.hpp [6:7]
+ boost/hana/ap.hpp [6:7]
+ boost/hana/append.hpp [6:7]
+ boost/hana/assert.hpp [6:7]
+ boost/hana/at.hpp [6:7]
+ boost/hana/at_key.hpp [7:8]
+ boost/hana/back.hpp [6:7]
+ boost/hana/basic_tuple.hpp [6:7]
+ boost/hana/bool.hpp [6:7]
+ boost/hana/cartesian_product.hpp [6:7]
+ boost/hana/chain.hpp [6:7]
+ boost/hana/comparing.hpp [6:7]
+ boost/hana/concat.hpp [6:7]
+ boost/hana/concept.hpp [6:7]
+ boost/hana/concept/applicative.hpp [6:7]
+ boost/hana/concept/comonad.hpp [6:7]
+ boost/hana/concept/comparable.hpp [6:7]
+ boost/hana/concept/constant.hpp [6:7]
+ boost/hana/concept/euclidean_ring.hpp [6:7]
+ boost/hana/concept/foldable.hpp [6:7]
+ boost/hana/concept/functor.hpp [6:7]
+ boost/hana/concept/group.hpp [6:7]
+ boost/hana/concept/hashable.hpp [7:8]
+ boost/hana/concept/integral_constant.hpp [6:7]
+ boost/hana/concept/iterable.hpp [6:7]
+ boost/hana/concept/logical.hpp [6:7]
+ boost/hana/concept/metafunction.hpp [6:7]
+ boost/hana/concept/monad.hpp [6:7]
+ boost/hana/concept/monad_plus.hpp [6:7]
+ boost/hana/concept/monoid.hpp [6:7]
+ boost/hana/concept/orderable.hpp [6:7]
+ boost/hana/concept/product.hpp [6:7]
+ boost/hana/concept/ring.hpp [6:7]
+ boost/hana/concept/searchable.hpp [6:7]
+ boost/hana/concept/sequence.hpp [6:7]
+ boost/hana/concept/struct.hpp [6:7]
+ boost/hana/config.hpp [6:7]
+ boost/hana/contains.hpp [6:7]
+ boost/hana/core.hpp [6:7]
+ boost/hana/core/common.hpp [6:7]
+ boost/hana/core/default.hpp [6:7]
+ boost/hana/core/dispatch.hpp [6:7]
+ boost/hana/core/is_a.hpp [6:7]
+ boost/hana/core/make.hpp [6:7]
+ boost/hana/core/tag_of.hpp [6:7]
+ boost/hana/core/to.hpp [6:7]
+ boost/hana/core/when.hpp [6:7]
+ boost/hana/count.hpp [6:7]
+ boost/hana/count_if.hpp [6:7]
+ boost/hana/cycle.hpp [6:7]
+ boost/hana/define_struct.hpp [6:7]
+ boost/hana/detail/algorithm.hpp [6:7]
+ boost/hana/detail/any_of.hpp [6:7]
+ boost/hana/detail/array.hpp [6:7]
+ boost/hana/detail/canonical_constant.hpp [6:7]
+ boost/hana/detail/concepts.hpp [6:7]
+ boost/hana/detail/create.hpp [6:7]
+ boost/hana/detail/decay.hpp [7:8]
+ boost/hana/detail/dispatch_if.hpp [6:7]
+ boost/hana/detail/ebo.hpp [6:7]
+ boost/hana/detail/fast_and.hpp [6:7]
+ boost/hana/detail/first_unsatisfied_index.hpp [6:7]
+ boost/hana/detail/has_common_embedding.hpp [6:7]
+ boost/hana/detail/has_duplicates.hpp [6:7]
+ boost/hana/detail/hash_table.hpp [7:8]
+ boost/hana/detail/index_if.hpp [7:8]
+ boost/hana/detail/integral_constant.hpp [7:8]
+ boost/hana/detail/intrinsics.hpp [6:7]
+ boost/hana/detail/nested_by.hpp [6:7]
+ boost/hana/detail/nested_by_fwd.hpp [6:7]
+ boost/hana/detail/nested_than.hpp [6:7]
+ boost/hana/detail/nested_than_fwd.hpp [6:7]
+ boost/hana/detail/nested_to.hpp [6:7]
+ boost/hana/detail/nested_to_fwd.hpp [6:7]
+ boost/hana/detail/operators/adl.hpp [6:7]
+ boost/hana/detail/operators/arithmetic.hpp [6:7]
+ boost/hana/detail/operators/comparable.hpp [6:7]
+ boost/hana/detail/operators/iterable.hpp [6:7]
+ boost/hana/detail/operators/logical.hpp [6:7]
+ boost/hana/detail/operators/monad.hpp [6:7]
+ boost/hana/detail/operators/orderable.hpp [6:7]
+ boost/hana/detail/operators/searchable.hpp [6:7]
+ boost/hana/detail/preprocessor.hpp [6:7]
+ boost/hana/detail/std_common_type.hpp [6:7]
+ boost/hana/detail/struct_macros.hpp [11:12]
+ boost/hana/detail/type_at.hpp [6:7]
+ boost/hana/detail/type_foldl1.hpp [6:7]
+ boost/hana/detail/type_foldr1.hpp [6:7]
+ boost/hana/detail/unpack_flatten.hpp [6:7]
+ boost/hana/detail/variadic/at.hpp [6:7]
+ boost/hana/detail/variadic/drop_into.hpp [6:7]
+ boost/hana/detail/variadic/foldl1.hpp [6:7]
+ boost/hana/detail/variadic/foldr1.hpp [6:7]
+ boost/hana/detail/variadic/reverse_apply.hpp [6:7]
+ boost/hana/detail/variadic/reverse_apply/flat.hpp [6:7]
+ boost/hana/detail/variadic/reverse_apply/unrolled.hpp [6:7]
+ boost/hana/detail/variadic/split_at.hpp [6:7]
+ boost/hana/detail/variadic/take.hpp [6:7]
+ boost/hana/detail/void_t.hpp [6:7]
+ boost/hana/detail/wrong.hpp [6:7]
+ boost/hana/difference.hpp [6:7]
+ boost/hana/div.hpp [6:7]
+ boost/hana/drop_back.hpp [6:7]
+ boost/hana/drop_front.hpp [6:7]
+ boost/hana/drop_front_exactly.hpp [6:7]
+ boost/hana/drop_while.hpp [6:7]
+ boost/hana/duplicate.hpp [6:7]
+ boost/hana/empty.hpp [6:7]
+ boost/hana/equal.hpp [6:7]
+ boost/hana/erase_key.hpp [6:7]
+ boost/hana/eval.hpp [6:7]
+ boost/hana/eval_if.hpp [6:7]
+ boost/hana/experimental/printable.hpp [6:7]
+ boost/hana/experimental/type_name.hpp [6:7]
+ boost/hana/experimental/types.hpp [6:7]
+ boost/hana/experimental/view.hpp [6:7]
+ boost/hana/ext/boost.hpp [6:7]
+ boost/hana/ext/boost/fusion.hpp [6:7]
+ boost/hana/ext/boost/fusion/deque.hpp [6:7]
+ boost/hana/ext/boost/fusion/detail/common.hpp [6:7]
+ boost/hana/ext/boost/fusion/list.hpp [6:7]
+ boost/hana/ext/boost/fusion/tuple.hpp [10:11]
+ boost/hana/ext/boost/fusion/vector.hpp [6:7]
+ boost/hana/ext/boost/mpl.hpp [6:7]
+ boost/hana/ext/boost/mpl/integral_c.hpp [6:7]
+ boost/hana/ext/boost/mpl/list.hpp [6:7]
+ boost/hana/ext/boost/mpl/vector.hpp [6:7]
+ boost/hana/ext/boost/tuple.hpp [6:7]
+ boost/hana/ext/std.hpp [6:7]
+ boost/hana/ext/std/array.hpp [6:7]
+ boost/hana/ext/std/integer_sequence.hpp [6:7]
+ boost/hana/ext/std/integral_constant.hpp [6:7]
+ boost/hana/ext/std/pair.hpp [6:7]
+ boost/hana/ext/std/ratio.hpp [6:7]
+ boost/hana/ext/std/tuple.hpp [6:7]
+ boost/hana/ext/std/vector.hpp [7:8]
+ boost/hana/extend.hpp [6:7]
+ boost/hana/extract.hpp [6:7]
+ boost/hana/fill.hpp [6:7]
+ boost/hana/filter.hpp [6:7]
+ boost/hana/find.hpp [6:7]
+ boost/hana/find_if.hpp [7:8]
+ boost/hana/first.hpp [6:7]
+ boost/hana/flatten.hpp [6:7]
+ boost/hana/fold.hpp [6:7]
+ boost/hana/fold_left.hpp [6:7]
+ boost/hana/fold_right.hpp [6:7]
+ boost/hana/for_each.hpp [6:7]
+ boost/hana/front.hpp [6:7]
+ boost/hana/functional.hpp [6:7]
+ boost/hana/functional/always.hpp [6:7]
+ boost/hana/functional/apply.hpp [6:7]
+ boost/hana/functional/arg.hpp [6:7]
+ boost/hana/functional/capture.hpp [6:7]
+ boost/hana/functional/compose.hpp [6:7]
+ boost/hana/functional/curry.hpp [6:7]
+ boost/hana/functional/demux.hpp [6:7]
+ boost/hana/functional/fix.hpp [6:7]
+ boost/hana/functional/flip.hpp [6:7]
+ boost/hana/functional/id.hpp [6:7]
+ boost/hana/functional/infix.hpp [6:7]
+ boost/hana/functional/iterate.hpp [6:7]
+ boost/hana/functional/lockstep.hpp [6:7]
+ boost/hana/functional/on.hpp [6:7]
+ boost/hana/functional/overload.hpp [6:7]
+ boost/hana/functional/overload_linearly.hpp [6:7]
+ boost/hana/functional/partial.hpp [6:7]
+ boost/hana/functional/placeholder.hpp [6:7]
+ boost/hana/functional/reverse_partial.hpp [6:7]
+ boost/hana/fuse.hpp [6:7]
+ boost/hana/fwd/accessors.hpp [6:7]
+ boost/hana/fwd/adapt_adt.hpp [6:7]
+ boost/hana/fwd/adapt_struct.hpp [6:7]
+ boost/hana/fwd/adjust.hpp [6:7]
+ boost/hana/fwd/adjust_if.hpp [6:7]
+ boost/hana/fwd/all.hpp [6:7]
+ boost/hana/fwd/all_of.hpp [6:7]
+ boost/hana/fwd/and.hpp [6:7]
+ boost/hana/fwd/any.hpp [6:7]
+ boost/hana/fwd/any_of.hpp [6:7]
+ boost/hana/fwd/ap.hpp [6:7]
+ boost/hana/fwd/append.hpp [6:7]
+ boost/hana/fwd/at.hpp [6:7]
+ boost/hana/fwd/at_key.hpp [6:7]
+ boost/hana/fwd/back.hpp [6:7]
+ boost/hana/fwd/basic_tuple.hpp [6:7]
+ boost/hana/fwd/bool.hpp [6:7]
+ boost/hana/fwd/cartesian_product.hpp [6:7]
+ boost/hana/fwd/chain.hpp [6:7]
+ boost/hana/fwd/comparing.hpp [6:7]
+ boost/hana/fwd/concat.hpp [6:7]
+ boost/hana/fwd/concept/applicative.hpp [6:7]
+ boost/hana/fwd/concept/comonad.hpp [6:7]
+ boost/hana/fwd/concept/comparable.hpp [6:7]
+ boost/hana/fwd/concept/constant.hpp [6:7]
+ boost/hana/fwd/concept/euclidean_ring.hpp [6:7]
+ boost/hana/fwd/concept/foldable.hpp [6:7]
+ boost/hana/fwd/concept/functor.hpp [6:7]
+ boost/hana/fwd/concept/group.hpp [6:7]
+ boost/hana/fwd/concept/hashable.hpp [7:8]
+ boost/hana/fwd/concept/integral_constant.hpp [6:7]
+ boost/hana/fwd/concept/iterable.hpp [6:7]
+ boost/hana/fwd/concept/logical.hpp [6:7]
+ boost/hana/fwd/concept/metafunction.hpp [6:7]
+ boost/hana/fwd/concept/monad.hpp [6:7]
+ boost/hana/fwd/concept/monad_plus.hpp [6:7]
+ boost/hana/fwd/concept/monoid.hpp [6:7]
+ boost/hana/fwd/concept/orderable.hpp [6:7]
+ boost/hana/fwd/concept/product.hpp [6:7]
+ boost/hana/fwd/concept/ring.hpp [6:7]
+ boost/hana/fwd/concept/searchable.hpp [6:7]
+ boost/hana/fwd/concept/sequence.hpp [6:7]
+ boost/hana/fwd/concept/struct.hpp [6:7]
+ boost/hana/fwd/contains.hpp [6:7]
+ boost/hana/fwd/core.hpp [6:7]
+ boost/hana/fwd/core/common.hpp [6:7]
+ boost/hana/fwd/core/default.hpp [6:7]
+ boost/hana/fwd/core/is_a.hpp [6:7]
+ boost/hana/fwd/core/make.hpp [6:7]
+ boost/hana/fwd/core/tag_of.hpp [6:7]
+ boost/hana/fwd/core/to.hpp [6:7]
+ boost/hana/fwd/core/when.hpp [6:7]
+ boost/hana/fwd/count.hpp [6:7]
+ boost/hana/fwd/count_if.hpp [6:7]
+ boost/hana/fwd/cycle.hpp [6:7]
+ boost/hana/fwd/define_struct.hpp [6:7]
+ boost/hana/fwd/difference.hpp [6:7]
+ boost/hana/fwd/div.hpp [6:7]
+ boost/hana/fwd/drop_back.hpp [6:7]
+ boost/hana/fwd/drop_front.hpp [6:7]
+ boost/hana/fwd/drop_front_exactly.hpp [6:7]
+ boost/hana/fwd/drop_while.hpp [6:7]
+ boost/hana/fwd/duplicate.hpp [6:7]
+ boost/hana/fwd/empty.hpp [6:7]
+ boost/hana/fwd/equal.hpp [6:7]
+ boost/hana/fwd/erase_key.hpp [6:7]
+ boost/hana/fwd/eval.hpp [6:7]
+ boost/hana/fwd/eval_if.hpp [6:7]
+ boost/hana/fwd/extend.hpp [6:7]
+ boost/hana/fwd/extract.hpp [6:7]
+ boost/hana/fwd/fill.hpp [6:7]
+ boost/hana/fwd/filter.hpp [6:7]
+ boost/hana/fwd/find.hpp [6:7]
+ boost/hana/fwd/find_if.hpp [6:7]
+ boost/hana/fwd/first.hpp [6:7]
+ boost/hana/fwd/flatten.hpp [6:7]
+ boost/hana/fwd/fold.hpp [6:7]
+ boost/hana/fwd/fold_left.hpp [6:7]
+ boost/hana/fwd/fold_right.hpp [6:7]
+ boost/hana/fwd/for_each.hpp [6:7]
+ boost/hana/fwd/front.hpp [6:7]
+ boost/hana/fwd/fuse.hpp [6:7]
+ boost/hana/fwd/greater.hpp [6:7]
+ boost/hana/fwd/greater_equal.hpp [6:7]
+ boost/hana/fwd/group.hpp [6:7]
+ boost/hana/fwd/hash.hpp [7:8]
+ boost/hana/fwd/if.hpp [6:7]
+ boost/hana/fwd/index_if.hpp [7:8]
+ boost/hana/fwd/insert.hpp [6:7]
+ boost/hana/fwd/insert_range.hpp [6:7]
+ boost/hana/fwd/integral_constant.hpp [6:7]
+ boost/hana/fwd/intersection.hpp [6:7]
+ boost/hana/fwd/intersperse.hpp [6:7]
+ boost/hana/fwd/is_disjoint.hpp [6:7]
+ boost/hana/fwd/is_empty.hpp [6:7]
+ boost/hana/fwd/is_subset.hpp [6:7]
+ boost/hana/fwd/keys.hpp [6:7]
+ boost/hana/fwd/lazy.hpp [6:7]
+ boost/hana/fwd/length.hpp [6:7]
+ boost/hana/fwd/less.hpp [6:7]
+ boost/hana/fwd/less_equal.hpp [6:7]
+ boost/hana/fwd/lexicographical_compare.hpp [6:7]
+ boost/hana/fwd/lift.hpp [6:7]
+ boost/hana/fwd/map.hpp [6:7]
+ boost/hana/fwd/max.hpp [6:7]
+ boost/hana/fwd/maximum.hpp [6:7]
+ boost/hana/fwd/members.hpp [6:7]
+ boost/hana/fwd/min.hpp [6:7]
+ boost/hana/fwd/minimum.hpp [6:7]
+ boost/hana/fwd/minus.hpp [6:7]
+ boost/hana/fwd/mod.hpp [6:7]
+ boost/hana/fwd/monadic_compose.hpp [6:7]
+ boost/hana/fwd/monadic_fold_left.hpp [6:7]
+ boost/hana/fwd/monadic_fold_right.hpp [6:7]
+ boost/hana/fwd/mult.hpp [6:7]
+ boost/hana/fwd/negate.hpp [6:7]
+ boost/hana/fwd/none.hpp [6:7]
+ boost/hana/fwd/none_of.hpp [6:7]
+ boost/hana/fwd/not.hpp [6:7]
+ boost/hana/fwd/not_equal.hpp [6:7]
+ boost/hana/fwd/one.hpp [6:7]
+ boost/hana/fwd/optional.hpp [6:7]
+ boost/hana/fwd/or.hpp [6:7]
+ boost/hana/fwd/ordering.hpp [6:7]
+ boost/hana/fwd/pair.hpp [6:7]
+ boost/hana/fwd/partition.hpp [6:7]
+ boost/hana/fwd/permutations.hpp [6:7]
+ boost/hana/fwd/plus.hpp [6:7]
+ boost/hana/fwd/power.hpp [6:7]
+ boost/hana/fwd/prefix.hpp [6:7]
+ boost/hana/fwd/prepend.hpp [6:7]
+ boost/hana/fwd/product.hpp [6:7]
+ boost/hana/fwd/range.hpp [6:7]
+ boost/hana/fwd/remove.hpp [6:7]
+ boost/hana/fwd/remove_at.hpp [6:7]
+ boost/hana/fwd/remove_if.hpp [6:7]
+ boost/hana/fwd/remove_range.hpp [6:7]
+ boost/hana/fwd/repeat.hpp [6:7]
+ boost/hana/fwd/replace.hpp [6:7]
+ boost/hana/fwd/replace_if.hpp [6:7]
+ boost/hana/fwd/replicate.hpp [6:7]
+ boost/hana/fwd/reverse.hpp [6:7]
+ boost/hana/fwd/reverse_fold.hpp [6:7]
+ boost/hana/fwd/scan_left.hpp [6:7]
+ boost/hana/fwd/scan_right.hpp [6:7]
+ boost/hana/fwd/second.hpp [6:7]
+ boost/hana/fwd/set.hpp [6:7]
+ boost/hana/fwd/size.hpp [6:7]
+ boost/hana/fwd/slice.hpp [6:7]
+ boost/hana/fwd/sort.hpp [6:7]
+ boost/hana/fwd/span.hpp [6:7]
+ boost/hana/fwd/string.hpp [6:7]
+ boost/hana/fwd/suffix.hpp [6:7]
+ boost/hana/fwd/sum.hpp [6:7]
+ boost/hana/fwd/symmetric_difference.hpp [6:7]
+ boost/hana/fwd/take_back.hpp [6:7]
+ boost/hana/fwd/take_front.hpp [6:7]
+ boost/hana/fwd/take_while.hpp [6:7]
+ boost/hana/fwd/tap.hpp [6:7]
+ boost/hana/fwd/then.hpp [6:7]
+ boost/hana/fwd/transform.hpp [6:7]
+ boost/hana/fwd/tuple.hpp [6:7]
+ boost/hana/fwd/type.hpp [6:7]
+ boost/hana/fwd/unfold_left.hpp [6:7]
+ boost/hana/fwd/unfold_right.hpp [6:7]
+ boost/hana/fwd/union.hpp [6:7]
+ boost/hana/fwd/unique.hpp [6:7]
+ boost/hana/fwd/unpack.hpp [6:7]
+ boost/hana/fwd/value.hpp [6:7]
+ boost/hana/fwd/while.hpp [6:7]
+ boost/hana/fwd/zero.hpp [6:7]
+ boost/hana/fwd/zip.hpp [6:7]
+ boost/hana/fwd/zip_shortest.hpp [6:7]
+ boost/hana/fwd/zip_shortest_with.hpp [6:7]
+ boost/hana/fwd/zip_with.hpp [6:7]
+ boost/hana/greater.hpp [6:7]
+ boost/hana/greater_equal.hpp [6:7]
+ boost/hana/group.hpp [6:7]
+ boost/hana/hash.hpp [6:7]
+ boost/hana/if.hpp [6:7]
+ boost/hana/index_if.hpp [7:8]
+ boost/hana/insert.hpp [6:7]
+ boost/hana/insert_range.hpp [6:7]
+ boost/hana/integral_constant.hpp [6:7]
+ boost/hana/intersection.hpp [6:7]
+ boost/hana/intersperse.hpp [6:7]
+ boost/hana/is_disjoint.hpp [6:7]
+ boost/hana/is_empty.hpp [6:7]
+ boost/hana/is_subset.hpp [6:7]
+ boost/hana/keys.hpp [6:7]
+ boost/hana/lazy.hpp [6:7]
+ boost/hana/length.hpp [6:7]
+ boost/hana/less.hpp [6:7]
+ boost/hana/less_equal.hpp [6:7]
+ boost/hana/lexicographical_compare.hpp [6:7]
+ boost/hana/lift.hpp [6:7]
+ boost/hana/map.hpp [6:7]
+ boost/hana/max.hpp [6:7]
+ boost/hana/maximum.hpp [6:7]
+ boost/hana/members.hpp [6:7]
+ boost/hana/min.hpp [6:7]
+ boost/hana/minimum.hpp [6:7]
+ boost/hana/minus.hpp [6:7]
+ boost/hana/mod.hpp [6:7]
+ boost/hana/monadic_compose.hpp [6:7]
+ boost/hana/monadic_fold_left.hpp [6:7]
+ boost/hana/monadic_fold_right.hpp [6:7]
+ boost/hana/mult.hpp [6:7]
+ boost/hana/negate.hpp [6:7]
+ boost/hana/none.hpp [6:7]
+ boost/hana/none_of.hpp [6:7]
+ boost/hana/not.hpp [6:7]
+ boost/hana/not_equal.hpp [6:7]
+ boost/hana/one.hpp [6:7]
+ boost/hana/optional.hpp [6:7]
+ boost/hana/or.hpp [6:7]
+ boost/hana/ordering.hpp [6:7]
+ boost/hana/pair.hpp [6:7]
+ boost/hana/partition.hpp [6:7]
+ boost/hana/permutations.hpp [6:7]
+ boost/hana/plus.hpp [6:7]
+ boost/hana/power.hpp [6:7]
+ boost/hana/prefix.hpp [6:7]
+ boost/hana/prepend.hpp [6:7]
+ boost/hana/product.hpp [6:7]
+ boost/hana/range.hpp [6:7]
+ boost/hana/remove.hpp [6:7]
+ boost/hana/remove_at.hpp [6:7]
+ boost/hana/remove_if.hpp [6:7]
+ boost/hana/remove_range.hpp [6:7]
+ boost/hana/repeat.hpp [6:7]
+ boost/hana/replace.hpp [6:7]
+ boost/hana/replace_if.hpp [6:7]
+ boost/hana/replicate.hpp [6:7]
+ boost/hana/reverse.hpp [6:7]
+ boost/hana/reverse_fold.hpp [6:7]
+ boost/hana/scan_left.hpp [6:7]
+ boost/hana/scan_right.hpp [6:7]
+ boost/hana/second.hpp [6:7]
+ boost/hana/set.hpp [6:7]
+ boost/hana/size.hpp [6:7]
+ boost/hana/slice.hpp [6:7]
+ boost/hana/sort.hpp [6:7]
+ boost/hana/span.hpp [6:7]
+ boost/hana/string.hpp [6:7]
+ boost/hana/suffix.hpp [6:7]
+ boost/hana/sum.hpp [6:7]
+ boost/hana/symmetric_difference.hpp [6:7]
+ boost/hana/take_back.hpp [6:7]
+ boost/hana/take_front.hpp [6:7]
+ boost/hana/take_while.hpp [6:7]
+ boost/hana/tap.hpp [6:7]
+ boost/hana/then.hpp [6:7]
+ boost/hana/traits.hpp [7:8]
+ boost/hana/transform.hpp [6:7]
+ boost/hana/tuple.hpp [7:8]
+ boost/hana/type.hpp [6:7]
+ boost/hana/unfold_left.hpp [6:7]
+ boost/hana/unfold_right.hpp [6:7]
+ boost/hana/union.hpp [6:7]
+ boost/hana/unique.hpp [6:7]
+ boost/hana/unpack.hpp [6:7]
+ boost/hana/value.hpp [6:7]
+ boost/hana/version.hpp [6:7]
+ boost/hana/while.hpp [6:7]
+ boost/hana/zero.hpp [6:7]
+ boost/hana/zip.hpp [6:7]
+ boost/hana/zip_shortest.hpp [6:7]
+ boost/hana/zip_shortest_with.hpp [6:7]
+ boost/hana/zip_with.hpp [6:7]
+
+KEEP BSD-3-Clause 5921395c41a81cf68ebfde6c58320ef0
+BELONGS ya.make
+ License text:
+ // Using the Mac OS X system BSD-style C library.
+ Scancode info:
+ Original SPDX id: BSD-3-Clause
+ Score : 90.00
+ Match type : REFERENCE
+ Links : http://www.opensource.org/licenses/BSD-3-Clause, https://spdx.org/licenses/BSD-3-Clause
+ Files with this license:
+ boost/config/platform/macos.hpp [16:16]
+
+KEEP BSL-1.0 597dc579281e71ba9d4dd39bf2d15a12
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/args.hpp at line 8, boost/proto/context.hpp at line 7, boost/proto/context/callable.hpp at line 11, boost/proto/context/default.hpp at line 9, boost/proto/context/null.hpp at line 9, boost/proto/core.hpp at line 8, boost/proto/debug.hpp at line 7, boost/proto/deep_copy.hpp at line 7, boost/proto/detail/as_lvalue.hpp at line 7, boost/proto/detail/decltype.hpp at line 7, boost/proto/detail/deprecated.hpp at line 8, boost/proto/detail/dont_care.hpp at line 7, boost/proto/detail/expr_funop.hpp at line 7, boost/proto/detail/ignore_unused.hpp at line 8, boost/proto/detail/is_noncopyable.hpp at line 7, boost/proto/detail/local.hpp at line 7, boost/proto/detail/poly_function.hpp at line 9, boost/proto/detail/static_const.hpp at line 7, boost/proto/domain.hpp at line 9, boost/proto/eval.hpp at line 7, boost/proto/expr.hpp at line 7, boost/proto/extends.hpp at line 7, boost/proto/fusion.hpp at line 7, boost/proto/generate.hpp at line 8, boost/proto/literal.hpp at line 8, boost/proto/make_expr.hpp at line 9, boost/proto/matches.hpp at line 8, boost/proto/operators.hpp at line 8, boost/proto/proto.hpp at line 7, boost/proto/proto_fwd.hpp at line 7, boost/proto/proto_typeof.hpp at line 8, boost/proto/repeat.hpp at line 7, boost/proto/tags.hpp at line 7, boost/proto/traits.hpp at line 9, boost/proto/transform.hpp at line 7, boost/proto/transform/arg.hpp at line 7, boost/proto/transform/call.hpp at line 7, boost/proto/transform/default.hpp at line 8, boost/proto/transform/fold.hpp at line 7, boost/proto/transform/fold_tree.hpp at line 7, boost/proto/transform/impl.hpp at line 7, boost/proto/transform/lazy.hpp at line 7, boost/proto/transform/make.hpp at line 7, boost/proto/transform/pass_through.hpp at line 10, boost/proto/transform/when.hpp at line 7, boost/xpressive/basic_regex.hpp at line 8, boost/xpressive/detail/core/access.hpp at line 6, boost/xpressive/detail/core/action.hpp at line 6, boost/xpressive/detail/core/adaptor.hpp at line 6, boost/xpressive/detail/core/finder.hpp at line 5, boost/xpressive/detail/core/flow_control.hpp at line 6, boost/xpressive/detail/core/icase.hpp at line 6, boost/xpressive/detail/core/linker.hpp at line 6, boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/alternate_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/any_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/assert_line_base.hpp at line 6, boost/xpressive/detail/core/matcher/assert_word_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/attr_end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/charset_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/epsilon_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/keeper_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/literal_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/lookahead_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/mark_end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/mark_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/optional_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/predicate_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/range_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/regex_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/set_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/string_matcher.hpp at line 6, boost/xpressive/detail/core/matcher/true_matcher.hpp at line 6, boost/xpressive/detail/core/matchers.hpp at line 6, boost/xpressive/detail/core/optimize.hpp at line 6, boost/xpressive/detail/core/peeker.hpp at line 6, boost/xpressive/detail/core/quant_style.hpp at line 6, boost/xpressive/detail/core/regex_impl.hpp at line 6, boost/xpressive/detail/core/results_cache.hpp at line 6, boost/xpressive/detail/core/state.hpp at line 6, boost/xpressive/detail/core/sub_match_impl.hpp at line 6, boost/xpressive/detail/core/sub_match_vector.hpp at line 6, boost/xpressive/detail/detail_fwd.hpp at line 6, boost/xpressive/detail/dynamic/dynamic.hpp at line 6, boost/xpressive/detail/dynamic/matchable.hpp at line 6, boost/xpressive/detail/dynamic/parse_charset.hpp at line 6, boost/xpressive/detail/dynamic/parser.hpp at line 8, boost/xpressive/detail/dynamic/parser_enum.hpp at line 6, boost/xpressive/detail/dynamic/parser_traits.hpp at line 6, boost/xpressive/detail/dynamic/sequence.hpp at line 6, boost/xpressive/detail/static/compile.hpp at line 6, boost/xpressive/detail/static/grammar.hpp at line 6, boost/xpressive/detail/static/is_pure.hpp at line 6, boost/xpressive/detail/static/modifier.hpp at line 6, boost/xpressive/detail/static/placeholders.hpp at line 6, boost/xpressive/detail/static/static.hpp at line 6, boost/xpressive/detail/static/transforms/as_alternate.hpp at line 6, boost/xpressive/detail/static/transforms/as_independent.hpp at line 6, boost/xpressive/detail/static/transforms/as_inverse.hpp at line 6, boost/xpressive/detail/static/transforms/as_marker.hpp at line 6, boost/xpressive/detail/static/transforms/as_matcher.hpp at line 6, boost/xpressive/detail/static/transforms/as_modifier.hpp at line 6, boost/xpressive/detail/static/transforms/as_quantifier.hpp at line 6, boost/xpressive/detail/static/transforms/as_sequence.hpp at line 6, boost/xpressive/detail/static/transforms/as_set.hpp at line 6, boost/xpressive/detail/static/transmogrify.hpp at line 6, boost/xpressive/detail/static/type_traits.hpp at line 6, boost/xpressive/detail/static/visitor.hpp at line 6, boost/xpressive/detail/static/width_of.hpp at line 6, boost/xpressive/detail/utility/algorithm.hpp at line 6, boost/xpressive/detail/utility/any.hpp at line 6, boost/xpressive/detail/utility/boyer_moore.hpp at line 9, boost/xpressive/detail/utility/chset/chset.hpp at line 6, boost/xpressive/detail/utility/cons.hpp at line 6, boost/xpressive/detail/utility/dont_care.hpp at line 6, boost/xpressive/detail/utility/hash_peek_bitset.hpp at line 6, boost/xpressive/detail/utility/ignore_unused.hpp at line 6, boost/xpressive/detail/utility/literals.hpp at line 6, boost/xpressive/detail/utility/never_true.hpp at line 6, boost/xpressive/detail/utility/save_restore.hpp at line 6, boost/xpressive/detail/utility/sequence_stack.hpp at line 6, boost/xpressive/detail/utility/tracking_ptr.hpp at line 6, boost/xpressive/detail/utility/traits_utils.hpp at line 6, boost/xpressive/detail/utility/width.hpp at line 6, boost/xpressive/match_results.hpp at line 9, boost/xpressive/regex_actions.hpp at line 7, boost/xpressive/regex_algorithms.hpp at line 7, boost/xpressive/regex_compiler.hpp at line 8, boost/xpressive/regex_constants.hpp at line 8, boost/xpressive/regex_error.hpp at line 7, boost/xpressive/regex_iterator.hpp at line 8, boost/xpressive/regex_primitives.hpp at line 7, boost/xpressive/regex_token_iterator.hpp at line 8, boost/xpressive/regex_traits.hpp at line 8, boost/xpressive/sub_match.hpp at line 8, boost/xpressive/traits/c_regex_traits.hpp at line 9, boost/xpressive/traits/cpp_regex_traits.hpp at line 9, boost/xpressive/traits/detail/c_ctype.hpp at line 6, boost/xpressive/traits/null_regex_traits.hpp at line 9, boost/xpressive/xpressive.hpp at line 8, boost/xpressive/xpressive_dynamic.hpp at line 7, boost/xpressive/xpressive_fwd.hpp at line 7, boost/xpressive/xpressive_static.hpp at line 8, boost/xpressive/xpressive_typeof.hpp at line 7
+ License text:
+ // Copyright 2008 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/proto/args.hpp [6:8]
+ boost/proto/context.hpp [5:7]
+ boost/proto/context/callable.hpp [9:11]
+ boost/proto/context/default.hpp [7:9]
+ boost/proto/context/null.hpp [7:9]
+ boost/proto/core.hpp [6:8]
+ boost/proto/debug.hpp [5:7]
+ boost/proto/deep_copy.hpp [5:7]
+ boost/proto/detail/as_lvalue.hpp [5:7]
+ boost/proto/detail/decltype.hpp [5:7]
+ boost/proto/detail/deprecated.hpp [6:8]
+ boost/proto/detail/dont_care.hpp [5:7]
+ boost/proto/detail/expr_funop.hpp [5:7]
+ boost/proto/detail/ignore_unused.hpp [6:8]
+ boost/proto/detail/is_noncopyable.hpp [5:7]
+ boost/proto/detail/local.hpp [5:7]
+ boost/proto/detail/poly_function.hpp [7:9]
+ boost/proto/detail/static_const.hpp [5:7]
+ boost/proto/domain.hpp [7:9]
+ boost/proto/eval.hpp [5:7]
+ boost/proto/expr.hpp [5:7]
+ boost/proto/extends.hpp [5:7]
+ boost/proto/fusion.hpp [5:7]
+ boost/proto/generate.hpp [6:8]
+ boost/proto/literal.hpp [6:8]
+ boost/proto/make_expr.hpp [7:9]
+ boost/proto/matches.hpp [6:8]
+ boost/proto/operators.hpp [6:8]
+ boost/proto/proto.hpp [5:7]
+ boost/proto/proto_fwd.hpp [5:7]
+ boost/proto/proto_typeof.hpp [6:8]
+ boost/proto/repeat.hpp [5:7]
+ boost/proto/tags.hpp [5:7]
+ boost/proto/traits.hpp [7:9]
+ boost/proto/transform.hpp [5:7]
+ boost/proto/transform/arg.hpp [5:7]
+ boost/proto/transform/call.hpp [5:7]
+ boost/proto/transform/default.hpp [6:8]
+ boost/proto/transform/fold.hpp [5:7]
+ boost/proto/transform/fold_tree.hpp [5:7]
+ boost/proto/transform/impl.hpp [5:7]
+ boost/proto/transform/lazy.hpp [5:7]
+ boost/proto/transform/make.hpp [5:7]
+ boost/proto/transform/pass_through.hpp [8:10]
+ boost/proto/transform/when.hpp [5:7]
+ boost/xpressive/basic_regex.hpp [6:8]
+ boost/xpressive/detail/core/access.hpp [4:6]
+ boost/xpressive/detail/core/action.hpp [4:6]
+ boost/xpressive/detail/core/adaptor.hpp [4:6]
+ boost/xpressive/detail/core/finder.hpp [3:5]
+ boost/xpressive/detail/core/flow_control.hpp [4:6]
+ boost/xpressive/detail/core/icase.hpp [4:6]
+ boost/xpressive/detail/core/linker.hpp [4:6]
+ boost/xpressive/detail/core/matcher/alternate_end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/alternate_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/any_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_bol_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_bos_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_eol_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_eos_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_line_base.hpp [4:6]
+ boost/xpressive/detail/core/matcher/assert_word_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/attr_begin_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/attr_end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/charset_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/epsilon_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/keeper_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/literal_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/logical_newline_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/lookahead_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/lookbehind_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/mark_end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/mark_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/optional_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/posix_charset_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/predicate_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/range_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/regex_byref_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/regex_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/repeat_begin_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/set_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/string_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matcher/true_matcher.hpp [4:6]
+ boost/xpressive/detail/core/matchers.hpp [4:6]
+ boost/xpressive/detail/core/optimize.hpp [4:6]
+ boost/xpressive/detail/core/peeker.hpp [4:6]
+ boost/xpressive/detail/core/quant_style.hpp [4:6]
+ boost/xpressive/detail/core/regex_impl.hpp [4:6]
+ boost/xpressive/detail/core/results_cache.hpp [4:6]
+ boost/xpressive/detail/core/state.hpp [4:6]
+ boost/xpressive/detail/core/sub_match_impl.hpp [4:6]
+ boost/xpressive/detail/core/sub_match_vector.hpp [4:6]
+ boost/xpressive/detail/detail_fwd.hpp [4:6]
+ boost/xpressive/detail/dynamic/dynamic.hpp [4:6]
+ boost/xpressive/detail/dynamic/matchable.hpp [4:6]
+ boost/xpressive/detail/dynamic/parse_charset.hpp [4:6]
+ boost/xpressive/detail/dynamic/parser.hpp [6:8]
+ boost/xpressive/detail/dynamic/parser_enum.hpp [4:6]
+ boost/xpressive/detail/dynamic/parser_traits.hpp [4:6]
+ boost/xpressive/detail/dynamic/sequence.hpp [4:6]
+ boost/xpressive/detail/static/compile.hpp [4:6]
+ boost/xpressive/detail/static/grammar.hpp [4:6]
+ boost/xpressive/detail/static/is_pure.hpp [4:6]
+ boost/xpressive/detail/static/modifier.hpp [4:6]
+ boost/xpressive/detail/static/placeholders.hpp [4:6]
+ boost/xpressive/detail/static/static.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_alternate.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_independent.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_inverse.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_marker.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_matcher.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_modifier.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_quantifier.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_sequence.hpp [4:6]
+ boost/xpressive/detail/static/transforms/as_set.hpp [4:6]
+ boost/xpressive/detail/static/transmogrify.hpp [4:6]
+ boost/xpressive/detail/static/type_traits.hpp [4:6]
+ boost/xpressive/detail/static/visitor.hpp [4:6]
+ boost/xpressive/detail/static/width_of.hpp [4:6]
+ boost/xpressive/detail/utility/algorithm.hpp [4:6]
+ boost/xpressive/detail/utility/any.hpp [4:6]
+ boost/xpressive/detail/utility/boyer_moore.hpp [7:9]
+ boost/xpressive/detail/utility/chset/chset.hpp [4:6]
+ boost/xpressive/detail/utility/cons.hpp [4:6]
+ boost/xpressive/detail/utility/dont_care.hpp [4:6]
+ boost/xpressive/detail/utility/hash_peek_bitset.hpp [4:6]
+ boost/xpressive/detail/utility/ignore_unused.hpp [4:6]
+ boost/xpressive/detail/utility/literals.hpp [4:6]
+ boost/xpressive/detail/utility/never_true.hpp [4:6]
+ boost/xpressive/detail/utility/save_restore.hpp [4:6]
+ boost/xpressive/detail/utility/sequence_stack.hpp [4:6]
+ boost/xpressive/detail/utility/tracking_ptr.hpp [4:6]
+ boost/xpressive/detail/utility/traits_utils.hpp [4:6]
+ boost/xpressive/detail/utility/width.hpp [4:6]
+ boost/xpressive/match_results.hpp [7:9]
+ boost/xpressive/regex_actions.hpp [5:7]
+ boost/xpressive/regex_algorithms.hpp [5:7]
+ boost/xpressive/regex_compiler.hpp [6:8]
+ boost/xpressive/regex_constants.hpp [6:8]
+ boost/xpressive/regex_error.hpp [5:7]
+ boost/xpressive/regex_iterator.hpp [6:8]
+ boost/xpressive/regex_primitives.hpp [5:7]
+ boost/xpressive/regex_token_iterator.hpp [6:8]
+ boost/xpressive/regex_traits.hpp [6:8]
+ boost/xpressive/sub_match.hpp [6:8]
+ boost/xpressive/traits/c_regex_traits.hpp [7:9]
+ boost/xpressive/traits/cpp_regex_traits.hpp [7:9]
+ boost/xpressive/traits/detail/c_ctype.hpp [4:6]
+ boost/xpressive/traits/null_regex_traits.hpp [7:9]
+ boost/xpressive/xpressive.hpp [6:8]
+ boost/xpressive/xpressive_dynamic.hpp [5:7]
+ boost/xpressive/xpressive_fwd.hpp [5:7]
+ boost/xpressive/xpressive_static.hpp [6:8]
+ boost/xpressive/xpressive_typeof.hpp [5:7]
+
+KEEP BSL-1.0 59b97879dbe85145abb5fd7c850cbd1e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/collection_traits.hpp at line 15
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/detail/collection_traits.hpp [13:16]
+
+KEEP BSL-1.0 59bff4c0e4760c67aaf640952b9691ab
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/advanced_insert_int.hpp at line 5, boost/container/detail/variadic_templates_tools.hpp at line 5, boost/container/node_allocator.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2008-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/advanced_insert_int.hpp [3:5]
+ boost/container/detail/variadic_templates_tools.hpp [3:5]
+ boost/container/node_allocator.hpp [3:5]
+
+KEEP BSL-1.0 59e0ba9e4e0ad69ac0e39991a0f51a81
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/core/noncopyable.hpp at line 5
+ License text:
+ // (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/core/noncopyable.hpp [3:5]
+
+KEEP BSL-1.0 59f772b611d1719332041cf35a9361d2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/define_adaptor.hpp at line 5, boost/range/adaptor/type_erased.hpp at line 5, boost/range/any_range.hpp at line 3, boost/range/combine.hpp at line 3, boost/range/counting_range.hpp at line 3, boost/range/detail/any_iterator.hpp at line 5, boost/range/detail/any_iterator_buffer.hpp at line 5, boost/range/detail/any_iterator_interface.hpp at line 5, boost/range/detail/any_iterator_wrapper.hpp at line 5, boost/range/has_range_iterator.hpp at line 5, boost/range/irange.hpp at line 5, boost/range/istream_range.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/adaptor/define_adaptor.hpp [3:6]
+ boost/range/adaptor/type_erased.hpp [3:6]
+ boost/range/any_range.hpp [1:4]
+ boost/range/combine.hpp [1:4]
+ boost/range/counting_range.hpp [1:4]
+ boost/range/detail/any_iterator.hpp [3:6]
+ boost/range/detail/any_iterator_buffer.hpp [3:6]
+ boost/range/detail/any_iterator_interface.hpp [3:6]
+ boost/range/detail/any_iterator_wrapper.hpp [3:6]
+ boost/range/has_range_iterator.hpp [3:6]
+ boost/range/irange.hpp [3:6]
+ boost/range/istream_range.hpp [1:4]
+
+KEEP BSL-1.0 5a00611854a32f9db24177ae4dd00807
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/framework/accumulators/value_accumulator.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/framework/accumulators/value_accumulator.hpp [4:6]
+
+KEEP BSL-1.0 5a63de69aa56c81fb958a32053feb9c1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/msm/mpl_graph/adjacency_list_graph.hpp at line 3, boost/msm/mpl_graph/breadth_first_search.hpp at line 3, boost/msm/mpl_graph/depth_first_search.hpp at line 3, boost/msm/mpl_graph/detail/adjacency_list_graph.ipp at line 3, boost/msm/mpl_graph/detail/graph_implementation_interface.ipp at line 3, boost/msm/mpl_graph/detail/incidence_list_graph.ipp at line 3, boost/msm/mpl_graph/incidence_list_graph.hpp at line 3, boost/msm/mpl_graph/mpl_graph.hpp at line 3, boost/msm/mpl_graph/mpl_utils.hpp at line 3, boost/msm/mpl_graph/search_colors.hpp at line 3
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/msm/mpl_graph/adjacency_list_graph.hpp [2:3]
+ boost/msm/mpl_graph/breadth_first_search.hpp [2:3]
+ boost/msm/mpl_graph/depth_first_search.hpp [2:3]
+ boost/msm/mpl_graph/detail/adjacency_list_graph.ipp [2:3]
+ boost/msm/mpl_graph/detail/graph_implementation_interface.ipp [2:3]
+ boost/msm/mpl_graph/detail/incidence_list_graph.ipp [2:3]
+ boost/msm/mpl_graph/incidence_list_graph.hpp [2:3]
+ boost/msm/mpl_graph/mpl_graph.hpp [2:3]
+ boost/msm/mpl_graph/mpl_utils.hpp [2:3]
+ boost/msm/mpl_graph/search_colors.hpp [2:3]
+
+KEEP BSL-1.0 5cd4044c79f85aa40c2edd653c1d76f4
+BELONGS ya.make
+ License text:
+ (http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 44.00
+ Match type : REFERENCE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/align/align.hpp [6:6]
+ boost/align/align_down.hpp [6:6]
+ boost/align/align_up.hpp [6:6]
+ boost/align/alignment_of.hpp [6:6]
+ boost/align/alignment_of_forward.hpp [6:6]
+ boost/align/detail/addressof.hpp [6:6]
+ boost/align/detail/align.hpp [6:6]
+ boost/align/detail/align_cxx11.hpp [6:6]
+ boost/align/detail/align_down.hpp [6:6]
+ boost/align/detail/align_up.hpp [6:6]
+ boost/align/detail/alignment_of.hpp [6:6]
+ boost/align/detail/alignment_of_clang.hpp [6:6]
+ boost/align/detail/alignment_of_codegear.hpp [6:6]
+ boost/align/detail/alignment_of_cxx11.hpp [6:6]
+ boost/align/detail/alignment_of_gcc.hpp [6:6]
+ boost/align/detail/alignment_of_msvc.hpp [6:6]
+ boost/align/detail/element_type.hpp [6:6]
+ boost/align/detail/integral_constant.hpp [6:6]
+ boost/align/detail/is_alignment.hpp [6:6]
+ boost/align/detail/is_alignment_constant.hpp [6:6]
+ boost/align/detail/max_align.hpp [6:6]
+ boost/align/detail/max_objects.hpp [6:6]
+ boost/align/detail/max_size.hpp [6:6]
+ boost/align/detail/min_size.hpp [6:6]
+ boost/core/pointer_traits.hpp [6:6]
+ boost/make_unique.hpp [6:6]
+ boost/smart_ptr/allocate_local_shared_array.hpp [6:6]
+ boost/smart_ptr/make_local_shared_array.hpp [7:7]
+ boost/smart_ptr/make_shared_array.hpp [6:6]
+ boost/smart_ptr/make_unique.hpp [6:6]
+
+KEEP BSL-1.0 5d3f4e3a463155508087e87bdaed167f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/bind/mem_fn_vw.hpp at line 9
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/bind/mem_fn_vw.hpp [8:10]
+
+KEEP BSL-1.0 5e86ae8795e27b0044f152917a08e65a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/additive_combine.hpp at line 5, boost/random/bernoulli_distribution.hpp at line 6, boost/random/cauchy_distribution.hpp at line 5, boost/random/detail/const_mod.hpp at line 5, boost/random/discard_block.hpp at line 6, boost/random/exponential_distribution.hpp at line 7, boost/random/geometric_distribution.hpp at line 6, boost/random/inversive_congruential.hpp at line 5, boost/random/lagged_fibonacci.hpp at line 5, boost/random/linear_congruential.hpp at line 5, boost/random/lognormal_distribution.hpp at line 6, boost/random/mersenne_twister.hpp at line 6, boost/random/normal_distribution.hpp at line 6, boost/random/random_number_generator.hpp at line 5, boost/random/ranlux.hpp at line 5, boost/random/shuffle_output.hpp at line 5, boost/random/subtract_with_carry.hpp at line 5, boost/random/triangle_distribution.hpp at line 6, boost/random/uniform_01.hpp at line 5, boost/random/uniform_int.hpp at line 5, boost/random/uniform_int_distribution.hpp at line 6, boost/random/uniform_on_sphere.hpp at line 6, boost/random/uniform_real.hpp at line 5, boost/random/uniform_smallint.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.11
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/random/additive_combine.hpp [4:12]
+ boost/random/bernoulli_distribution.hpp [5:13]
+ boost/random/cauchy_distribution.hpp [4:12]
+ boost/random/detail/const_mod.hpp [4:12]
+ boost/random/discard_block.hpp [5:13]
+ boost/random/exponential_distribution.hpp [6:14]
+ boost/random/geometric_distribution.hpp [5:13]
+ boost/random/inversive_congruential.hpp [4:12]
+ boost/random/lagged_fibonacci.hpp [4:12]
+ boost/random/linear_congruential.hpp [4:12]
+ boost/random/lognormal_distribution.hpp [5:13]
+ boost/random/mersenne_twister.hpp [5:13]
+ boost/random/normal_distribution.hpp [5:13]
+ boost/random/random_number_generator.hpp [4:12]
+ boost/random/ranlux.hpp [4:12]
+ boost/random/shuffle_output.hpp [4:12]
+ boost/random/subtract_with_carry.hpp [4:12]
+ boost/random/triangle_distribution.hpp [5:13]
+ boost/random/uniform_01.hpp [4:12]
+ boost/random/uniform_int.hpp [4:12]
+ boost/random/uniform_int_distribution.hpp [5:13]
+ boost/random/uniform_on_sphere.hpp [5:13]
+ boost/random/uniform_real.hpp [4:12]
+ boost/random/uniform_smallint.hpp [4:12]
+
+KEEP BSL-1.0 5f5f9a893ece810d87b5e28ea7075229
+BELONGS ya.make
+ License text:
+ * \license Boost Software License 1.0
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : REFERENCE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/serialization/bitset.hpp [8:8]
+
+KEEP BSL-1.0 62881692e33fda8a4e634744b528c964
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/collection_traits.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/detail/collection_traits.hpp [3:6]
+
+KEEP BSL-1.0 640497c5c0981032c5f90f36d23a054d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/local_function/detail/preprocessor/void_list.hpp at line 4, boost/scope_exit.hpp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0
+ // (see accompanying file LICENSE_1_0.txt or a copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/local_function/detail/preprocessor/void_list.hpp [3:5]
+ boost/scope_exit.hpp [4:6]
+
+KEEP BSL-1.0 6412456b52d8f0c4f1bb7dcb4002993d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_20.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_30.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_40.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_50.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_20.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_30.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_40.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_50.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_20.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_30.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_40.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_50.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_20.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_30.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_40.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_50.hpp at line 5
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_20.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_30.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_40.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_50.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_20.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_30.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_40.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_50.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_20.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_30.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_40.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_50.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_20.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_30.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_40.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_50.hpp [4:5]
+
+KEEP BSL-1.0 64cda77ac5c375c937ec6f7ef224550d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/spirit/home/classic/core/composite/impl/alternative.ipp at line 8, boost/spirit/home/classic/core/composite/impl/difference.ipp at line 8, boost/spirit/home/classic/core/composite/impl/directives.ipp at line 9, boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp at line 8, boost/spirit/home/classic/core/composite/impl/intersection.ipp at line 8, boost/spirit/home/classic/core/composite/impl/kleene_star.ipp at line 8, boost/spirit/home/classic/core/composite/impl/list.ipp at line 8, boost/spirit/home/classic/core/composite/impl/optional.ipp at line 8, boost/spirit/home/classic/core/composite/impl/positive.ipp at line 8, boost/spirit/home/classic/core/composite/impl/sequence.ipp at line 8, boost/spirit/home/classic/core/composite/impl/sequential_and.ipp at line 8, boost/spirit/home/classic/core/composite/impl/sequential_or.ipp at line 8, boost/spirit/home/classic/core/impl/match.ipp at line 6, boost/spirit/home/classic/core/impl/match_attr_traits.ipp at line 6, boost/spirit/home/classic/core/impl/parser.ipp at line 6, boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp at line 8, boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp at line 7, boost/spirit/home/classic/core/non_terminal/impl/rule.ipp at line 6, boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp at line 7, boost/spirit/home/classic/core/primitives/impl/numerics.ipp at line 7, boost/spirit/home/classic/core/primitives/impl/primitives.ipp at line 7, boost/spirit/home/classic/core/scanner/impl/skipper.ipp at line 6, boost/spirit/home/classic/debug/impl/parser_names.ipp at line 7, boost/spirit/home/classic/dynamic/impl/conditions.ipp at line 6, boost/spirit/home/classic/dynamic/impl/select.ipp at line 6, boost/spirit/home/classic/dynamic/impl/switch.ipp at line 6, boost/spirit/home/classic/error_handling/impl/exceptions.ipp at line 6, boost/spirit/home/classic/iterator/impl/file_iterator.ipp at line 8, boost/spirit/home/classic/iterator/impl/position_iterator.ipp at line 8, boost/spirit/home/classic/meta/impl/fundamental.ipp at line 6, boost/spirit/home/classic/meta/impl/parser_traits.ipp at line 8, boost/spirit/home/classic/meta/impl/refactoring.ipp at line 6, boost/spirit/home/classic/meta/impl/traverse.ipp at line 7, boost/spirit/home/classic/symbols/impl/symbols.ipp at line 6, boost/spirit/home/classic/symbols/impl/tst.ipp at line 6, boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp at line 7, boost/spirit/home/classic/tree/impl/tree_to_xml.ipp at line 7, boost/spirit/home/classic/utility/impl/chset.ipp at line 7, boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp at line 7, boost/spirit/home/classic/utility/impl/chset/range_run.ipp at line 6, boost/spirit/home/classic/utility/impl/chset_operators.ipp at line 6, boost/spirit/home/classic/utility/impl/confix.ipp at line 6, boost/spirit/home/classic/utility/impl/escape_char.ipp at line 7, boost/spirit/home/classic/utility/impl/lists.ipp at line 6, boost/spirit/home/classic/utility/impl/regex.ipp at line 6, boost/utility/binary.hpp at line 5, boost/xpressive/detail/utility/chset/basic_chset.hpp at line 7, boost/xpressive/detail/utility/chset/basic_chset.ipp at line 7, boost/xpressive/detail/utility/chset/range_run.hpp at line 6, boost/xpressive/detail/utility/chset/range_run.ipp at line 6
+ License text:
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/classic/core/composite/impl/alternative.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/difference.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/directives.ipp [8:10]
+ boost/spirit/home/classic/core/composite/impl/exclusive_or.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/intersection.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/kleene_star.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/list.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/optional.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/positive.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/sequence.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/sequential_and.ipp [7:9]
+ boost/spirit/home/classic/core/composite/impl/sequential_or.ipp [7:9]
+ boost/spirit/home/classic/core/impl/match.ipp [5:7]
+ boost/spirit/home/classic/core/impl/match_attr_traits.ipp [5:7]
+ boost/spirit/home/classic/core/impl/parser.ipp [5:7]
+ boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp [7:9]
+ boost/spirit/home/classic/core/non_terminal/impl/object_with_id.ipp [6:8]
+ boost/spirit/home/classic/core/non_terminal/impl/rule.ipp [5:7]
+ boost/spirit/home/classic/core/non_terminal/impl/subrule.ipp [6:8]
+ boost/spirit/home/classic/core/primitives/impl/numerics.ipp [6:8]
+ boost/spirit/home/classic/core/primitives/impl/primitives.ipp [6:8]
+ boost/spirit/home/classic/core/scanner/impl/skipper.ipp [5:7]
+ boost/spirit/home/classic/debug/impl/parser_names.ipp [6:8]
+ boost/spirit/home/classic/dynamic/impl/conditions.ipp [5:7]
+ boost/spirit/home/classic/dynamic/impl/select.ipp [5:7]
+ boost/spirit/home/classic/dynamic/impl/switch.ipp [5:7]
+ boost/spirit/home/classic/error_handling/impl/exceptions.ipp [5:7]
+ boost/spirit/home/classic/iterator/impl/file_iterator.ipp [7:9]
+ boost/spirit/home/classic/iterator/impl/position_iterator.ipp [7:9]
+ boost/spirit/home/classic/meta/impl/fundamental.ipp [5:7]
+ boost/spirit/home/classic/meta/impl/parser_traits.ipp [7:9]
+ boost/spirit/home/classic/meta/impl/refactoring.ipp [5:7]
+ boost/spirit/home/classic/meta/impl/traverse.ipp [6:8]
+ boost/spirit/home/classic/symbols/impl/symbols.ipp [5:7]
+ boost/spirit/home/classic/symbols/impl/tst.ipp [5:7]
+ boost/spirit/home/classic/tree/impl/parse_tree_utils.ipp [6:8]
+ boost/spirit/home/classic/tree/impl/tree_to_xml.ipp [6:8]
+ boost/spirit/home/classic/utility/impl/chset.ipp [6:8]
+ boost/spirit/home/classic/utility/impl/chset/basic_chset.ipp [6:8]
+ boost/spirit/home/classic/utility/impl/chset/range_run.ipp [5:7]
+ boost/spirit/home/classic/utility/impl/chset_operators.ipp [5:7]
+ boost/spirit/home/classic/utility/impl/confix.ipp [5:7]
+ boost/spirit/home/classic/utility/impl/escape_char.ipp [6:8]
+ boost/spirit/home/classic/utility/impl/lists.ipp [5:7]
+ boost/spirit/home/classic/utility/impl/regex.ipp [5:7]
+ boost/utility/binary.hpp [4:6]
+ boost/xpressive/detail/utility/chset/basic_chset.hpp [6:8]
+ boost/xpressive/detail/utility/chset/basic_chset.ipp [6:8]
+ boost/xpressive/detail/utility/chset/range_run.hpp [5:7]
+ boost/xpressive/detail/utility/chset/range_run.ipp [5:7]
+
+KEEP BSL-1.0 656ec37923a70b65b2e26f2b21cdb51b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/p_square_cumul_dist.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/p_square_cumul_dist.hpp [4:6]
+
+KEEP BSL-1.0 65724380ee1601b28f0db6323a0ad006
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/quadrature/naive_monte_carlo.hpp at line 5, boost/math/quadrature/trapezoidal.hpp at line 5, boost/regex/config.hpp at line 8, boost/regex/v4/char_regex_traits.hpp at line 8, boost/regex/v4/cregex.hpp at line 8, boost/regex/v4/error_type.hpp at line 8, boost/regex/v4/instances.hpp at line 8, boost/regex/v4/regex_traits_defaults.hpp at line 8
+ License text:
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math/quadrature/naive_monte_carlo.hpp [3:5]
+ boost/math/quadrature/trapezoidal.hpp [3:5]
+ boost/regex/config.hpp [6:8]
+ boost/regex/v4/char_regex_traits.hpp [6:8]
+ boost/regex/v4/cregex.hpp [6:8]
+ boost/regex/v4/error_type.hpp [6:8]
+ boost/regex/v4/instances.hpp [6:8]
+ boost/regex/v4/regex_traits_defaults.hpp [6:8]
+
+KEEP BSL-1.0 65901d5d3d32ad3b749311a01a61016f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/platform/cloudabi.h at line 4
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/predef/platform/cloudabi.h [3:5]
+
+KEEP BSL-1.0 65994368fe8331ee696a2db81b45b669
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/intrusive/pointer_traits.hpp at line 11
+ License text:
+ // (C) Copyright Ion Gaztanaga 2011-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/intrusive/pointer_traits.hpp [9:11]
+
+KEEP BSL-1.0 65c29595096261f1e51b6f0288dd04dd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/parameter.hpp [1:4]
+
+KEEP Zlib 65cdcfa09914055b79725d09bc2f36f2
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: Zlib
+ Score : 92.42
+ Match type : TEXT
+ Links : http://www.gzip.org/zlib/zlib_license.html, http://www.zlib.net/, https://spdx.org/licenses/Zlib
+ Files with this license:
+ boost/beast/core/detail/base64.hpp [18:34]
+
+KEEP BSL-1.0 65e937e8455a3a3eea3fd902b60ef37d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math_fwd.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math_fwd.hpp [3:5]
+
+KEEP BSL-1.0 66bc794ea150e32a66fbddbc258d931a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/experimental/parallel/v2/task_region.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/thread/experimental/parallel/v2/task_region.hpp [6:8]
+
+KEEP BSL-1.0 6770682f396d57a247067122271a057b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/catch_exceptions.hpp at line 5
+ License text:
+ // Copyright Beman Dawes 1995-2001. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/catch_exceptions.hpp [3:5]
+
+KEEP BSL-1.0 67c315f84c9f7fe64ea5034b22a3514e
+BELONGS libs/filesystem/ya.make libs/timer/ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // See http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/filesystem/src/codecvt_error_category.cpp [5:6]
+ libs/timer/src/auto_timers_construction.cpp [5:6]
+
+KEEP BSL-1.0 67d6eeedc82fbc62f6f52eb0c128e9e6
+BELONGS libs/container/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/allocator_version_traits.hpp at line 5, boost/container/throw_exception.hpp at line 5, boost/interprocess/sync/detail/common_algorithms.hpp at line 5, libs/container/src/alloc_lib.c at line 5, libs/container/src/dlmalloc.cpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/allocator_version_traits.hpp [3:5]
+ boost/container/throw_exception.hpp [3:5]
+ boost/interprocess/sync/detail/common_algorithms.hpp [3:5]
+ libs/container/src/alloc_lib.c [3:5]
+ libs/container/src/dlmalloc.cpp [3:5]
+
+KEEP BSL-1.0 690c428b6f6c5e3219b8dd9abdb64215
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/move/detail/pointer_element.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2014-2017. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/move/detail/pointer_element.hpp [3:5]
+
+KEEP BSL-1.0 AND BSL-1.0 694ab5306b45aee9eba6e6115bb8593f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/detail/random_provider_arc4random.ipp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENCE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 85.19
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/uuid/detail/random_provider.hpp [4:6]
+ boost/uuid/detail/random_provider_bcrypt.ipp [4:6]
+ boost/uuid/detail/random_provider_detect_platform.hpp [4:6]
+ boost/uuid/detail/random_provider_getentropy.ipp [4:6]
+ boost/uuid/detail/random_provider_include_platform.hpp [4:6]
+ boost/uuid/entropy_error.hpp [4:6]
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 65.62
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/uuid/detail/random_provider_arc4random.ipp [4:6]
+
+SKIP MPL-1.1 695c14b33a53ff0673eb14307611656b
+BELONGS ya.make
+ License text:
+ //! Given a MPL-style metafunction, `metafunction<f>` is a `Metafunction`
+ Scancode info:
+ Original SPDX id: MPL-1.1
+ Score : 80.00
+ Match type : REFERENCE
+ Links : http://www.mozilla.com/MPL/1.1/index.html, http://www.mozilla.org/MPL/MPL-1.1.html, https://spdx.org/licenses/MPL-1.1
+ Files with this license:
+ boost/hana/fwd/type.hpp [422:422]
+
+KEEP BSL-1.0 6b3c3fd5760f1bb9404086d2d1a83860
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/last_value.hpp at line 5, boost/signals/signal0.hpp at line 5, boost/signals/signal1.hpp at line 5, boost/signals/signal10.hpp at line 5, boost/signals/signal2.hpp at line 5, boost/signals/signal3.hpp at line 5, boost/signals/signal4.hpp at line 5, boost/signals/signal5.hpp at line 5, boost/signals/signal6.hpp at line 5, boost/signals/signal7.hpp at line 5, boost/signals/signal8.hpp at line 5, boost/signals/signal9.hpp at line 5, boost/signals2/last_value.hpp at line 6, boost/visit_each.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/last_value.hpp [3:6]
+ boost/signals/signal0.hpp [3:6]
+ boost/signals/signal1.hpp [3:6]
+ boost/signals/signal10.hpp [3:6]
+ boost/signals/signal2.hpp [3:6]
+ boost/signals/signal3.hpp [3:6]
+ boost/signals/signal4.hpp [3:6]
+ boost/signals/signal5.hpp [3:6]
+ boost/signals/signal6.hpp [3:6]
+ boost/signals/signal7.hpp [3:6]
+ boost/signals/signal8.hpp [3:6]
+ boost/signals/signal9.hpp [3:6]
+ boost/signals2/last_value.hpp [4:7]
+ boost/visit_each.hpp [3:6]
+
+KEEP BSL-1.0 6c55b338a1fa3f5f5d727d2dba9cb631
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/meta_functions.hpp at line 6, boost/ptr_container/ptr_circular_buffer.hpp at line 6, boost/ptr_container/ptr_inserter.hpp at line 6, boost/ptr_container/ptr_unordered_map.hpp at line 6, boost/ptr_container/ptr_unordered_set.hpp at line 6, boost/ptr_container/serialize_ptr_circular_buffer.hpp at line 6, boost/ptr_container/serialize_ptr_unordered_map.hpp at line 6, boost/ptr_container/serialize_ptr_unordered_set.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/ptr_container/detail/meta_functions.hpp [4:7]
+ boost/ptr_container/ptr_circular_buffer.hpp [4:7]
+ boost/ptr_container/ptr_inserter.hpp [4:7]
+ boost/ptr_container/ptr_unordered_map.hpp [4:7]
+ boost/ptr_container/ptr_unordered_set.hpp [4:7]
+ boost/ptr_container/serialize_ptr_circular_buffer.hpp [4:7]
+ boost/ptr_container/serialize_ptr_unordered_map.hpp [4:7]
+ boost/ptr_container/serialize_ptr_unordered_set.hpp [4:7]
+
+KEEP BSL-1.0 6cee195f9161a1b94784d4975695337c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/is_incrementable.hpp at line 3, boost/indirect_reference.hpp at line 7, boost/pointee.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/is_incrementable.hpp [1:3]
+ boost/indirect_reference.hpp [5:7]
+ boost/pointee.hpp [5:7]
+
+KEEP BSL-1.0 6d847ee42ef80ba973b8bd6fff3322e0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/io_fwd.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/io_fwd.hpp [3:5]
+
+KEEP BSL-1.0 6dd5c9f652ff038348bb42aa68a7164c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/detail/robust_emulation.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2010-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/detail/robust_emulation.hpp [3:5]
+
+KEEP BSL-1.0 6e3b14a26b7c150c6f55f9b939af109f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/default_ops.hpp at line 4, boost/multiprecision/detail/et_ops.hpp at line 4, boost/multiprecision/detail/generic_interconvert.hpp at line 4, boost/multiprecision/detail/number_base.hpp at line 4, boost/multiprecision/gmp.hpp at line 4, boost/multiprecision/mpfi.hpp at line 4, boost/multiprecision/number.hpp at line 4, boost/multiprecision/tommath.hpp at line 4
+ License text:
+ // Copyright 2011 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/detail/default_ops.hpp [2:4]
+ boost/multiprecision/detail/et_ops.hpp [2:4]
+ boost/multiprecision/detail/generic_interconvert.hpp [2:4]
+ boost/multiprecision/detail/number_base.hpp [2:4]
+ boost/multiprecision/gmp.hpp [2:4]
+ boost/multiprecision/mpfi.hpp [2:4]
+ boost/multiprecision/number.hpp [2:4]
+ boost/multiprecision/tommath.hpp [2:4]
+
+KEEP BSL-1.0 6e9c8d42e61a3e26d6d176e26f813a97
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/rational_adaptor.hpp at line 4
+ License text:
+ // Copyright 2011 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.59
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/rational_adaptor.hpp [2:4]
+
+KEEP BSL-1.0 6ebf86a0841782c69f5ccb7da6b4b79d
+BELONGS libs/container/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/block_list.hpp at line 5, boost/container/detail/block_slist.hpp at line 5, boost/container/detail/dispatch_uses_allocator.hpp at line 5, boost/container/detail/dlmalloc.hpp at line 5, boost/container/detail/pool_resource.hpp at line 5, boost/container/pmr/deque.hpp at line 5, boost/container/pmr/flat_map.hpp at line 5, boost/container/pmr/flat_set.hpp at line 5, boost/container/pmr/global_resource.hpp at line 5, boost/container/pmr/list.hpp at line 5, boost/container/pmr/map.hpp at line 5, boost/container/pmr/memory_resource.hpp at line 5, boost/container/pmr/monotonic_buffer_resource.hpp at line 5, boost/container/pmr/polymorphic_allocator.hpp at line 5, boost/container/pmr/pool_options.hpp at line 5, boost/container/pmr/resource_adaptor.hpp at line 5, boost/container/pmr/set.hpp at line 5, boost/container/pmr/slist.hpp at line 5, boost/container/pmr/small_vector.hpp at line 5, boost/container/pmr/stable_vector.hpp at line 5, boost/container/pmr/string.hpp at line 5, boost/container/pmr/synchronized_pool_resource.hpp at line 5, boost/container/pmr/unsynchronized_pool_resource.hpp at line 5, boost/container/pmr/vector.hpp at line 5, boost/container/scoped_allocator_fwd.hpp at line 5, boost/container/small_vector.hpp at line 5, boost/container/uses_allocator_fwd.hpp at line 5, boost/intrusive/detail/tree_value_compare.hpp at line 5, libs/container/src/global_resource.cpp at line 5, libs/container/src/monotonic_buffer_resource.cpp at line 5, libs/container/src/pool_resource.cpp at line 5, libs/container/src/synchronized_pool_resource.cpp at line 5, libs/container/src/unsynchronized_pool_resource.cpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/block_list.hpp [3:5]
+ boost/container/detail/block_slist.hpp [3:5]
+ boost/container/detail/dispatch_uses_allocator.hpp [3:5]
+ boost/container/detail/dlmalloc.hpp [3:5]
+ boost/container/detail/pool_resource.hpp [3:5]
+ boost/container/pmr/deque.hpp [3:5]
+ boost/container/pmr/flat_map.hpp [3:5]
+ boost/container/pmr/flat_set.hpp [3:5]
+ boost/container/pmr/global_resource.hpp [3:5]
+ boost/container/pmr/list.hpp [3:5]
+ boost/container/pmr/map.hpp [3:5]
+ boost/container/pmr/memory_resource.hpp [3:5]
+ boost/container/pmr/monotonic_buffer_resource.hpp [3:5]
+ boost/container/pmr/polymorphic_allocator.hpp [3:5]
+ boost/container/pmr/pool_options.hpp [3:5]
+ boost/container/pmr/resource_adaptor.hpp [3:5]
+ boost/container/pmr/set.hpp [3:5]
+ boost/container/pmr/slist.hpp [3:5]
+ boost/container/pmr/small_vector.hpp [3:5]
+ boost/container/pmr/stable_vector.hpp [3:5]
+ boost/container/pmr/string.hpp [3:5]
+ boost/container/pmr/synchronized_pool_resource.hpp [3:5]
+ boost/container/pmr/unsynchronized_pool_resource.hpp [3:5]
+ boost/container/pmr/vector.hpp [3:5]
+ boost/container/scoped_allocator_fwd.hpp [3:5]
+ boost/container/small_vector.hpp [3:5]
+ boost/container/uses_allocator_fwd.hpp [3:5]
+ boost/intrusive/detail/tree_value_compare.hpp [3:5]
+ libs/container/src/global_resource.cpp [3:5]
+ libs/container/src/monotonic_buffer_resource.cpp [3:5]
+ libs/container/src/pool_resource.cpp [3:5]
+ libs/container/src/synchronized_pool_resource.cpp [3:5]
+ libs/container/src/unsynchronized_pool_resource.cpp [3:5]
+
+KEEP BSL-1.0 6f142535a1deefdedb1f10f224c9b0ed
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/algorithm/string/detail/formatter.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/algorithm/string/detail/formatter.hpp [5:9]
+
+KEEP BSL-1.0 6f58c862f763ee945f279dbe9d509166
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/compare_functors.hpp at line 5, boost/container/detail/std_fwd.hpp at line 5, boost/intrusive/detail/has_member_function_callable_with.hpp at line 5, boost/intrusive/detail/std_fwd.hpp at line 5, boost/intrusive/pointer_rebind.hpp at line 5, boost/move/default_delete.hpp at line 5, boost/move/detail/fwd_macros.hpp at line 5, boost/move/detail/workaround.hpp at line 5, boost/move/unique_ptr.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/compare_functors.hpp [3:5]
+ boost/container/detail/std_fwd.hpp [3:5]
+ boost/intrusive/detail/has_member_function_callable_with.hpp [3:5]
+ boost/intrusive/detail/std_fwd.hpp [3:5]
+ boost/intrusive/pointer_rebind.hpp [3:5]
+ boost/move/default_delete.hpp [3:5]
+ boost/move/detail/fwd_macros.hpp [3:5]
+ boost/move/detail/workaround.hpp [3:5]
+ boost/move/unique_ptr.hpp [3:5]
+
+KEEP BSL-1.0 6f5903013620b3e63b872211596c814c
+BELONGS libs/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/data/monomorphic/fwd.hpp at line 3, boost/test/data/monomorphic/generators/random.hpp at line 3, boost/test/data/monomorphic/singleton.hpp at line 3, boost/test/tools/floating_point_comparison.hpp at line 3, libs/test/src/compiler_log_formatter.cpp at line 3, libs/test/src/cpp_main.cpp at line 3, libs/test/src/debug.cpp at line 3, libs/test/src/decorator.cpp at line 3, libs/test/src/execution_monitor.cpp at line 3, libs/test/src/framework.cpp at line 3, libs/test/src/plain_report_formatter.cpp at line 3, libs/test/src/progress_monitor.cpp at line 3, libs/test/src/results_collector.cpp at line 3, libs/test/src/results_reporter.cpp at line 3, libs/test/src/test_main.cpp at line 3, libs/test/src/test_tools.cpp at line 3, libs/test/src/test_tree.cpp at line 3, libs/test/src/unit_test_log.cpp at line 3, libs/test/src/unit_test_main.cpp at line 3, libs/test/src/unit_test_monitor.cpp at line 3, libs/test/src/unit_test_parameters.cpp at line 3, libs/test/src/xml_log_formatter.cpp at line 3, libs/test/src/xml_report_formatter.cpp at line 3
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/test/data/monomorphic/fwd.hpp [2:4]
+ boost/test/data/monomorphic/generators/random.hpp [2:4]
+ boost/test/data/monomorphic/singleton.hpp [2:4]
+ boost/test/tools/floating_point_comparison.hpp [2:4]
+ libs/test/src/compiler_log_formatter.cpp [2:4]
+ libs/test/src/cpp_main.cpp [2:4]
+ libs/test/src/debug.cpp [2:4]
+ libs/test/src/decorator.cpp [2:4]
+ libs/test/src/execution_monitor.cpp [2:4]
+ libs/test/src/framework.cpp [2:4]
+ libs/test/src/plain_report_formatter.cpp [2:4]
+ libs/test/src/progress_monitor.cpp [2:4]
+ libs/test/src/results_collector.cpp [2:4]
+ libs/test/src/results_reporter.cpp [2:4]
+ libs/test/src/test_main.cpp [2:4]
+ libs/test/src/test_tools.cpp [2:4]
+ libs/test/src/test_tree.cpp [2:4]
+ libs/test/src/unit_test_log.cpp [2:4]
+ libs/test/src/unit_test_main.cpp [2:4]
+ libs/test/src/unit_test_monitor.cpp [2:4]
+ libs/test/src/unit_test_parameters.cpp [2:4]
+ libs/test/src/xml_log_formatter.cpp [2:4]
+ libs/test/src/xml_report_formatter.cpp [2:4]
+
+KEEP Zlib 6f639f15f71c2f16f1a3459658b193c0
+BELONGS ya.make
+ License text:
+ /* A std::uint16_t is an index in the character window. We use short instead of int to
+ * save space in the various tables. IPos is used only for parameter passing.
+ Scancode info:
+ Original SPDX id: Zlib
+ Score : 96.43
+ Match type : REFERENCE
+ Links : http://www.gzip.org/zlib/zlib_license.html, http://www.zlib.net/, https://spdx.org/licenses/Zlib
+ Files with this license:
+ boost/beast/zlib/detail/deflate_stream.hpp [291:292]
+
+KEEP BSL-1.0 6fb8dab2fa17abac18f239108501392d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/smart_ptr.hpp at line 12
+ License text:
+ // Copyright (c) 2003 Peter Dimov Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/smart_ptr.hpp [10:12]
+
+KEEP BSL-1.0 70284ad8e3e2d935ac16b320b8af06a2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer/static_log2.hpp at line 8
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/integer/static_log2.hpp [7:9]
+
+KEEP BSL-1.0 7046eb5e05d97f8094aad004556f5459
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/smart_ptr/unique_ptr.hpp at line 5, boost/move/make_unique.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006-2014. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/smart_ptr/unique_ptr.hpp [3:5]
+ boost/move/make_unique.hpp [3:5]
+
+KEEP BSL-1.0 715771b101b3fd6543920c82e8bbf36b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/impl/archive_serializer_map.ipp at line 6, boost/archive/impl/basic_text_iprimitive.ipp at line 6, boost/archive/impl/basic_xml_oarchive.ipp at line 6, boost/archive/impl/text_iarchive_impl.ipp at line 6, boost/archive/impl/text_oarchive_impl.ipp at line 6, boost/archive/impl/text_wiarchive_impl.ipp at line 6, boost/archive/impl/text_woarchive_impl.ipp at line 6, boost/archive/impl/xml_iarchive_impl.ipp at line 6, boost/archive/impl/xml_wiarchive_impl.ipp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/archive/impl/archive_serializer_map.ipp [5:9]
+ boost/archive/impl/basic_text_iprimitive.ipp [5:9]
+ boost/archive/impl/basic_xml_oarchive.ipp [5:9]
+ boost/archive/impl/text_iarchive_impl.ipp [5:9]
+ boost/archive/impl/text_oarchive_impl.ipp [5:9]
+ boost/archive/impl/text_wiarchive_impl.ipp [5:9]
+ boost/archive/impl/text_woarchive_impl.ipp [5:9]
+ boost/archive/impl/xml_iarchive_impl.ipp [5:9]
+ boost/archive/impl/xml_wiarchive_impl.ipp [5:9]
+
+KEEP BSL-1.0 71e59b956feb5a436a3a5a5360ecfd21
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/block_indirect_sort/blk_detail/backbone.hpp at line 8, boost/sort/block_indirect_sort/blk_detail/block.hpp at line 8, boost/sort/block_indirect_sort/blk_detail/constants.hpp at line 7, boost/sort/block_indirect_sort/blk_detail/merge_blocks.hpp at line 8, boost/sort/block_indirect_sort/blk_detail/move_blocks.hpp at line 8, boost/sort/block_indirect_sort/blk_detail/parallel_sort.hpp at line 8, boost/sort/block_indirect_sort/block_indirect_sort.hpp at line 7, boost/sort/common/indirect.hpp at line 7, boost/sort/common/merge_block.hpp at line 8, boost/sort/common/merge_four.hpp at line 7, boost/sort/common/merge_vector.hpp at line 8, boost/sort/common/pivot.hpp at line 7, boost/sort/common/rearrange.hpp at line 7, boost/sort/common/sort_basic.hpp at line 7, boost/sort/common/util/algorithm.hpp at line 7, boost/sort/common/util/atomic.hpp at line 6, boost/sort/common/util/insert.hpp at line 7, boost/sort/common/util/merge.hpp at line 7, boost/sort/common/util/traits.hpp at line 7, boost/sort/flat_stable_sort/flat_stable_sort.hpp at line 7, boost/sort/heap_sort/heap_sort.hpp at line 7, boost/sort/insert_sort/insert_sort.hpp at line 7, boost/sort/parallel_stable_sort/parallel_stable_sort.hpp at line 7, boost/sort/sample_sort/sample_sort.hpp at line 7, boost/sort/spinsort/spinsort.hpp at line 7
+ License text:
+ /// Distributed under the Boost Software License, Version 1.0.\n
+ /// ( See accompanying file LICENSE_1_0.txt or copy at
+ /// http://www.boost.org/LICENSE_1_0.txt )
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/sort/block_indirect_sort/blk_detail/backbone.hpp [7:9]
+ boost/sort/block_indirect_sort/blk_detail/block.hpp [7:9]
+ boost/sort/block_indirect_sort/blk_detail/constants.hpp [6:8]
+ boost/sort/block_indirect_sort/blk_detail/merge_blocks.hpp [7:9]
+ boost/sort/block_indirect_sort/blk_detail/move_blocks.hpp [7:9]
+ boost/sort/block_indirect_sort/blk_detail/parallel_sort.hpp [7:9]
+ boost/sort/block_indirect_sort/block_indirect_sort.hpp [6:8]
+ boost/sort/common/indirect.hpp [6:8]
+ boost/sort/common/merge_block.hpp [7:9]
+ boost/sort/common/merge_four.hpp [6:8]
+ boost/sort/common/merge_vector.hpp [7:9]
+ boost/sort/common/pivot.hpp [6:8]
+ boost/sort/common/rearrange.hpp [6:8]
+ boost/sort/common/sort_basic.hpp [6:8]
+ boost/sort/common/util/algorithm.hpp [6:8]
+ boost/sort/common/util/atomic.hpp [5:7]
+ boost/sort/common/util/insert.hpp [6:8]
+ boost/sort/common/util/merge.hpp [6:8]
+ boost/sort/common/util/traits.hpp [6:8]
+ boost/sort/flat_stable_sort/flat_stable_sort.hpp [6:8]
+ boost/sort/heap_sort/heap_sort.hpp [6:8]
+ boost/sort/insert_sort/insert_sort.hpp [6:8]
+ boost/sort/parallel_stable_sort/parallel_stable_sort.hpp [6:8]
+ boost/sort/sample_sort/sample_sort.hpp [6:8]
+ boost/sort/spinsort/spinsort.hpp [6:8]
+
+KEEP NCSA AND MIT 72d4e9e6f06ffb6f0c77cb800c3ac442
+BELONGS ya.make
+ License text:
+ // This file is dual licensed under the MIT and the University of Illinois Open
+ // Source Licenses. See LICENSE.TXT for details.
+ Scancode info:
+ Original SPDX id: NCSA
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.otm.illinois.edu/faculty/forms/opensource.asp, https://spdx.org/licenses/NCSA
+ Files with this license:
+ boost/chrono/detail/scan_keyword.hpp [6:7]
+ boost/thread/detail/invoke.hpp [19:20]
+ boost/thread/detail/invoker.hpp [17:18]
+ boost/thread/detail/make_tuple_indices.hpp [15:16]
+ Scancode info:
+ Original SPDX id: MIT
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://opensource.org/licenses/mit-license.php, https://spdx.org/licenses/MIT
+ Files with this license:
+ boost/chrono/detail/scan_keyword.hpp [6:7]
+ boost/thread/detail/invoke.hpp [19:20]
+ boost/thread/detail/invoker.hpp [17:18]
+ boost/thread/detail/make_tuple_indices.hpp [15:16]
+
+KEEP BSL-1.0 72eb5cd559a68e29409e1e14d281e49e
+BELONGS ya.make
+ License text:
+ /// Distributed under the Boost Software License, Version 1.0.\n
+ /// ( See copy at http://www.boost.org/LICENSE_1_0.txt )
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 90.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/sort/common/util/search.hpp [5:6]
+
+KEEP BSL-1.0 732a43b99a41bcb7df6969a215704085
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/cstdfloat/cstdfloat_complex_std.hpp at line 6
+ License text:
+ // Distributed under the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt
+ // or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math/cstdfloat/cstdfloat_complex_std.hpp [5:7]
+
+KEEP BSL-1.0 744fe4ef3652113826a015c6780732de
+BELONGS libs/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/next_prior.hpp at line 7, boost/test/auto_unit_test.hpp at line 3, boost/test/data/config.hpp at line 3, boost/test/data/dataset.hpp at line 3, boost/test/data/for_each_sample.hpp at line 3, boost/test/data/generators.hpp at line 3, boost/test/data/index_sequence.hpp at line 3, boost/test/data/monomorphic.hpp at line 3, boost/test/data/monomorphic/array.hpp at line 3, boost/test/data/monomorphic/collection.hpp at line 3, boost/test/data/monomorphic/generate.hpp at line 3, boost/test/data/monomorphic/generators.hpp at line 3, boost/test/data/monomorphic/generators/keywords.hpp at line 3, boost/test/data/monomorphic/generators/xrange.hpp at line 3, boost/test/data/monomorphic/grid.hpp at line 3, boost/test/data/monomorphic/initializer_list.hpp at line 3, boost/test/data/monomorphic/join.hpp at line 3, boost/test/data/monomorphic/sample_merge.hpp at line 3, boost/test/data/monomorphic/zip.hpp at line 3, boost/test/data/size.hpp at line 3, boost/test/data/test_case.hpp at line 3, boost/test/debug.hpp at line 3, boost/test/debug_config.hpp at line 3, boost/test/detail/config.hpp at line 3, boost/test/detail/enable_warnings.hpp at line 3, boost/test/detail/fwd_decl.hpp at line 3, boost/test/detail/global_typedef.hpp at line 3, boost/test/detail/log_level.hpp at line 3, boost/test/detail/pp_variadic.hpp at line 3, boost/test/detail/suppress_warnings.hpp at line 3, boost/test/detail/throw_exception.hpp at line 3, boost/test/detail/workaround.hpp at line 3, boost/test/execution_monitor.hpp at line 4, boost/test/floating_point_comparison.hpp at line 3, boost/test/framework.hpp at line 3, boost/test/impl/compiler_log_formatter.ipp at line 3, boost/test/impl/cpp_main.ipp at line 4, boost/test/impl/decorator.ipp at line 3, boost/test/impl/framework.ipp at line 3, boost/test/impl/junit_log_formatter.ipp at line 3, boost/test/impl/plain_report_formatter.ipp at line 3, boost/test/impl/progress_monitor.ipp at line 3, boost/test/impl/results_collector.ipp at line 3, boost/test/impl/results_reporter.ipp at line 3, boost/test/impl/test_main.ipp at line 4, boost/test/impl/test_tools.ipp at line 3, boost/test/impl/test_tree.ipp at line 3, boost/test/impl/unit_test_log.ipp at line 3, boost/test/impl/unit_test_main.ipp at line 3, boost/test/impl/unit_test_monitor.ipp at line 3, boost/test/impl/unit_test_parameters.ipp at line 3, boost/test/impl/xml_log_formatter.ipp at line 3, boost/test/impl/xml_report_formatter.ipp at line 3, boost/test/included/execution_monitor.hpp at line 3, boost/test/included/prg_exec_monitor.hpp at line 3, boost/test/included/test_exec_monitor.hpp at line 3, boost/test/included/unit_test.hpp at line 3, boost/test/included/unit_test_framework.hpp at line 3, boost/test/minimal.hpp at line 3, boost/test/output/compiler_log_formatter.hpp at line 3, boost/test/output/junit_log_formatter.hpp at line 3, boost/test/output/plain_report_formatter.hpp at line 3, boost/test/output/xml_log_formatter.hpp at line 3, boost/test/output/xml_report_formatter.hpp at line 3, boost/test/output_test_stream.hpp at line 3, boost/test/parameterized_test.hpp at line 3, boost/test/predicate_result.hpp at line 3, boost/test/prg_exec_monitor.hpp at line 3, boost/test/progress_monitor.hpp at line 3, boost/test/results_collector.hpp at line 3, boost/test/results_reporter.hpp at line 3, boost/test/test_case_template.hpp at line 3, boost/test/test_exec_monitor.hpp at line 3, boost/test/test_tools.hpp at line 3, boost/test/tools/assertion.hpp at line 3, boost/test/tools/assertion_result.hpp at line 3, boost/test/tools/collection_comparison_op.hpp at line 3, boost/test/tools/context.hpp at line 3, boost/test/tools/cstring_comparison_op.hpp at line 3, boost/test/tools/detail/bitwise_manip.hpp at line 3, boost/test/tools/detail/expression_holder.hpp at line 3, boost/test/tools/detail/fwd.hpp at line 3, boost/test/tools/detail/indirections.hpp at line 3, boost/test/tools/detail/it_pair.hpp at line 3, boost/test/tools/detail/lexicographic_manip.hpp at line 3, boost/test/tools/detail/per_element_manip.hpp at line 3, boost/test/tools/detail/print_helper.hpp at line 3, boost/test/tools/detail/tolerance_manip.hpp at line 3, boost/test/tools/fpc_op.hpp at line 3, boost/test/tools/fpc_tolerance.hpp at line 3, boost/test/tools/interface.hpp at line 3, boost/test/tools/old/impl.hpp at line 3, boost/test/tools/old/interface.hpp at line 3, boost/test/tools/output_test_stream.hpp at line 3, boost/test/tree/auto_registration.hpp at line 3, boost/test/tree/decorator.hpp at line 3, boost/test/tree/fixture.hpp at line 3, boost/test/tree/global_fixture.hpp at line 3, boost/test/tree/observer.hpp at line 3, boost/test/tree/test_case_counter.hpp at line 3, boost/test/tree/test_case_template.hpp at line 3, boost/test/tree/test_unit.hpp at line 3, boost/test/tree/traverse.hpp at line 3, boost/test/tree/visitor.hpp at line 3, boost/test/unit_test.hpp at line 3, boost/test/unit_test_log.hpp at line 3, boost/test/unit_test_log_formatter.hpp at line 3, boost/test/unit_test_monitor.hpp at line 3, boost/test/unit_test_parameters.hpp at line 3, boost/test/unit_test_suite.hpp at line 3, boost/test/utils/algorithm.hpp at line 3, boost/test/utils/assign_op.hpp at line 3, boost/test/utils/basic_cstring/basic_cstring.hpp at line 3, boost/test/utils/basic_cstring/basic_cstring_fwd.hpp at line 3, boost/test/utils/basic_cstring/bcs_char_traits.hpp at line 3, boost/test/utils/basic_cstring/compare.hpp at line 3, boost/test/utils/basic_cstring/io.hpp at line 3, boost/test/utils/class_properties.hpp at line 3, boost/test/utils/custom_manip.hpp at line 3, boost/test/utils/foreach.hpp at line 4, boost/test/utils/is_cstring.hpp at line 3, boost/test/utils/is_forward_iterable.hpp at line 3, boost/test/utils/iterator/input_iterator_facade.hpp at line 3, boost/test/utils/iterator/token_iterator.hpp at line 3, boost/test/utils/lazy_ostream.hpp at line 3, boost/test/utils/named_params.hpp at line 3, boost/test/utils/nullstream.hpp at line 4, boost/test/utils/rtti.hpp at line 3, boost/test/utils/runtime/argument.hpp at line 3, boost/test/utils/runtime/argument_factory.hpp at line 3, boost/test/utils/runtime/env/fetch.hpp at line 3, boost/test/utils/runtime/errors.hpp at line 3, boost/test/utils/runtime/finalize.hpp at line 3, boost/test/utils/runtime/fwd.hpp at line 3, boost/test/utils/runtime/parameter.hpp at line 3, boost/test/utils/setcolor.hpp at line 3, boost/test/utils/string_cast.hpp at line 3, boost/test/utils/trivial_singleton.hpp at line 3, boost/test/utils/wrap_stringstream.hpp at line 3, boost/test/utils/xml_printer.hpp at line 3, libs/test/src/junit_log_formatter.cpp at line 3
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/next_prior.hpp [6:8]
+ boost/test/auto_unit_test.hpp [2:4]
+ boost/test/data/config.hpp [2:4]
+ boost/test/data/dataset.hpp [2:4]
+ boost/test/data/for_each_sample.hpp [2:4]
+ boost/test/data/generators.hpp [2:4]
+ boost/test/data/index_sequence.hpp [2:4]
+ boost/test/data/monomorphic.hpp [2:4]
+ boost/test/data/monomorphic/array.hpp [2:4]
+ boost/test/data/monomorphic/collection.hpp [2:4]
+ boost/test/data/monomorphic/generate.hpp [2:4]
+ boost/test/data/monomorphic/generators.hpp [2:4]
+ boost/test/data/monomorphic/generators/keywords.hpp [2:4]
+ boost/test/data/monomorphic/generators/xrange.hpp [2:4]
+ boost/test/data/monomorphic/grid.hpp [2:4]
+ boost/test/data/monomorphic/initializer_list.hpp [2:4]
+ boost/test/data/monomorphic/join.hpp [2:4]
+ boost/test/data/monomorphic/sample_merge.hpp [2:4]
+ boost/test/data/monomorphic/zip.hpp [2:4]
+ boost/test/data/size.hpp [2:4]
+ boost/test/data/test_case.hpp [2:4]
+ boost/test/debug.hpp [2:4]
+ boost/test/debug_config.hpp [2:4]
+ boost/test/detail/config.hpp [2:4]
+ boost/test/detail/enable_warnings.hpp [2:4]
+ boost/test/detail/fwd_decl.hpp [2:4]
+ boost/test/detail/global_typedef.hpp [2:4]
+ boost/test/detail/log_level.hpp [2:4]
+ boost/test/detail/pp_variadic.hpp [2:4]
+ boost/test/detail/suppress_warnings.hpp [2:4]
+ boost/test/detail/throw_exception.hpp [2:4]
+ boost/test/detail/workaround.hpp [2:4]
+ boost/test/execution_monitor.hpp [3:5]
+ boost/test/floating_point_comparison.hpp [2:4]
+ boost/test/framework.hpp [2:4]
+ boost/test/impl/compiler_log_formatter.ipp [2:4]
+ boost/test/impl/cpp_main.ipp [3:5]
+ boost/test/impl/decorator.ipp [2:4]
+ boost/test/impl/framework.ipp [2:4]
+ boost/test/impl/junit_log_formatter.ipp [2:4]
+ boost/test/impl/plain_report_formatter.ipp [2:4]
+ boost/test/impl/progress_monitor.ipp [2:4]
+ boost/test/impl/results_collector.ipp [2:4]
+ boost/test/impl/results_reporter.ipp [2:4]
+ boost/test/impl/test_main.ipp [3:5]
+ boost/test/impl/test_tools.ipp [2:4]
+ boost/test/impl/test_tree.ipp [2:4]
+ boost/test/impl/unit_test_log.ipp [2:4]
+ boost/test/impl/unit_test_main.ipp [2:4]
+ boost/test/impl/unit_test_monitor.ipp [2:4]
+ boost/test/impl/unit_test_parameters.ipp [2:4]
+ boost/test/impl/xml_log_formatter.ipp [2:4]
+ boost/test/impl/xml_report_formatter.ipp [2:4]
+ boost/test/included/execution_monitor.hpp [2:4]
+ boost/test/included/prg_exec_monitor.hpp [2:4]
+ boost/test/included/test_exec_monitor.hpp [2:4]
+ boost/test/included/unit_test.hpp [2:4]
+ boost/test/included/unit_test_framework.hpp [2:4]
+ boost/test/minimal.hpp [2:4]
+ boost/test/output/compiler_log_formatter.hpp [2:4]
+ boost/test/output/junit_log_formatter.hpp [2:4]
+ boost/test/output/plain_report_formatter.hpp [2:4]
+ boost/test/output/xml_log_formatter.hpp [2:4]
+ boost/test/output/xml_report_formatter.hpp [2:4]
+ boost/test/output_test_stream.hpp [2:4]
+ boost/test/parameterized_test.hpp [2:4]
+ boost/test/predicate_result.hpp [2:4]
+ boost/test/prg_exec_monitor.hpp [2:4]
+ boost/test/progress_monitor.hpp [2:4]
+ boost/test/results_collector.hpp [2:4]
+ boost/test/results_reporter.hpp [2:4]
+ boost/test/test_case_template.hpp [2:4]
+ boost/test/test_exec_monitor.hpp [2:4]
+ boost/test/test_tools.hpp [2:4]
+ boost/test/tools/assertion.hpp [2:4]
+ boost/test/tools/assertion_result.hpp [2:4]
+ boost/test/tools/collection_comparison_op.hpp [2:4]
+ boost/test/tools/context.hpp [2:4]
+ boost/test/tools/cstring_comparison_op.hpp [2:4]
+ boost/test/tools/detail/bitwise_manip.hpp [2:4]
+ boost/test/tools/detail/expression_holder.hpp [2:4]
+ boost/test/tools/detail/fwd.hpp [2:4]
+ boost/test/tools/detail/indirections.hpp [2:4]
+ boost/test/tools/detail/it_pair.hpp [2:4]
+ boost/test/tools/detail/lexicographic_manip.hpp [2:4]
+ boost/test/tools/detail/per_element_manip.hpp [2:4]
+ boost/test/tools/detail/print_helper.hpp [2:4]
+ boost/test/tools/detail/tolerance_manip.hpp [2:4]
+ boost/test/tools/fpc_op.hpp [2:4]
+ boost/test/tools/fpc_tolerance.hpp [2:4]
+ boost/test/tools/interface.hpp [2:4]
+ boost/test/tools/old/impl.hpp [2:4]
+ boost/test/tools/old/interface.hpp [2:4]
+ boost/test/tools/output_test_stream.hpp [2:4]
+ boost/test/tree/auto_registration.hpp [2:4]
+ boost/test/tree/decorator.hpp [2:4]
+ boost/test/tree/fixture.hpp [2:4]
+ boost/test/tree/global_fixture.hpp [2:4]
+ boost/test/tree/observer.hpp [2:4]
+ boost/test/tree/test_case_counter.hpp [2:4]
+ boost/test/tree/test_case_template.hpp [2:4]
+ boost/test/tree/test_unit.hpp [2:4]
+ boost/test/tree/traverse.hpp [2:4]
+ boost/test/tree/visitor.hpp [2:4]
+ boost/test/unit_test.hpp [2:4]
+ boost/test/unit_test_log.hpp [2:4]
+ boost/test/unit_test_log_formatter.hpp [2:4]
+ boost/test/unit_test_monitor.hpp [2:4]
+ boost/test/unit_test_parameters.hpp [2:4]
+ boost/test/unit_test_suite.hpp [2:4]
+ boost/test/utils/algorithm.hpp [2:4]
+ boost/test/utils/assign_op.hpp [2:4]
+ boost/test/utils/basic_cstring/basic_cstring.hpp [2:4]
+ boost/test/utils/basic_cstring/basic_cstring_fwd.hpp [2:4]
+ boost/test/utils/basic_cstring/bcs_char_traits.hpp [2:4]
+ boost/test/utils/basic_cstring/compare.hpp [2:4]
+ boost/test/utils/basic_cstring/io.hpp [2:4]
+ boost/test/utils/class_properties.hpp [2:4]
+ boost/test/utils/custom_manip.hpp [2:4]
+ boost/test/utils/foreach.hpp [3:5]
+ boost/test/utils/is_cstring.hpp [2:4]
+ boost/test/utils/is_forward_iterable.hpp [2:4]
+ boost/test/utils/iterator/input_iterator_facade.hpp [2:4]
+ boost/test/utils/iterator/token_iterator.hpp [2:4]
+ boost/test/utils/lazy_ostream.hpp [2:4]
+ boost/test/utils/named_params.hpp [2:4]
+ boost/test/utils/nullstream.hpp [3:5]
+ boost/test/utils/rtti.hpp [2:4]
+ boost/test/utils/runtime/argument.hpp [2:4]
+ boost/test/utils/runtime/argument_factory.hpp [2:4]
+ boost/test/utils/runtime/env/fetch.hpp [2:4]
+ boost/test/utils/runtime/errors.hpp [2:4]
+ boost/test/utils/runtime/finalize.hpp [2:4]
+ boost/test/utils/runtime/fwd.hpp [2:4]
+ boost/test/utils/runtime/parameter.hpp [2:4]
+ boost/test/utils/setcolor.hpp [2:4]
+ boost/test/utils/string_cast.hpp [2:4]
+ boost/test/utils/trivial_singleton.hpp [2:4]
+ boost/test/utils/wrap_stringstream.hpp [2:4]
+ boost/test/utils/xml_printer.hpp [2:4]
+ libs/test/src/junit_log_formatter.cpp [2:4]
+
+KEEP BSL-1.0 745252704aa72167f50d9aad40337785
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/assert.hpp at line 14, boost/bind.hpp at line 16, boost/bind/bind_mf2_cc.hpp at line 10, boost/bind/placeholders.hpp at line 17, boost/bind/storage.hpp at line 18, boost/config/compiler/xlcpp_zos.hpp at line 4, boost/config/platform/zos.hpp at line 4, boost/config/stdlib/xlcpp_zos.hpp at line 4, boost/core/lightweight_test.hpp at line 18, boost/current_function.hpp at line 16, boost/detail/atomic_count.hpp at line 16, boost/detail/lightweight_mutex.hpp at line 16, boost/detail/lightweight_thread.hpp at line 16, boost/detail/quick_allocator.hpp at line 17, boost/enable_shared_from_this.hpp at line 10, boost/interprocess/detail/os_thread_functions.hpp at line 19, boost/intrusive_ptr.hpp at line 10, boost/make_shared.hpp at line 9, boost/mem_fn.hpp at line 16, boost/range/detail/safe_bool.hpp at line 5, boost/signals2/deconstruct.hpp at line 21, boost/smart_ptr/detail/atomic_count.hpp at line 17, boost/smart_ptr/detail/atomic_count_nt.hpp at line 14, boost/smart_ptr/detail/atomic_count_spin.hpp at line 10, boost/smart_ptr/detail/atomic_count_std_atomic.hpp at line 12, boost/smart_ptr/detail/operator_bool.hpp at line 6, boost/smart_ptr/detail/sp_convertible.hpp at line 15, boost/smart_ptr/detail/sp_counted_base_clang.hpp at line 15, boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp at line 17, boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp at line 17, boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp at line 15, boost/smart_ptr/detail/sp_counted_base_sync.hpp at line 15, boost/smart_ptr/detail/sp_forward.hpp at line 15, boost/smart_ptr/detail/sp_interlocked.hpp at line 16, boost/smart_ptr/detail/sp_noexcept.hpp at line 15, boost/smart_ptr/detail/sp_nullptr_t.hpp at line 15, boost/smart_ptr/detail/yield_k.hpp at line 23, boost/smart_ptr/enable_shared_from_raw.hpp at line 11, boost/smart_ptr/enable_shared_from_this.hpp at line 10, boost/smart_ptr/make_local_shared.hpp at line 9, boost/smart_ptr/make_local_shared_object.hpp at line 9, boost/smart_ptr/make_shared.hpp at line 9, boost/smart_ptr/make_shared_object.hpp at line 9, boost/type_traits/common_type.hpp at line 8, boost/type_traits/copy_cv.hpp at line 8, boost/type_traits/detail/common_arithmetic_type.hpp at line 8, boost/type_traits/detail/common_type_impl.hpp at line 8, boost/type_traits/detail/composite_member_pointer_type.hpp at line 8, boost/type_traits/detail/composite_pointer_type.hpp at line 8, boost/type_traits/detail/mp_defer.hpp at line 8, boost/type_traits/is_list_constructible.hpp at line 7, boost/type_traits/is_nothrow_swappable.hpp at line 7, boost/type_traits/type_identity.hpp at line 8, boost/weak_ptr.hpp at line 10
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/assert.hpp [13:15]
+ boost/bind.hpp [15:17]
+ boost/bind/bind_mf2_cc.hpp [9:11]
+ boost/bind/placeholders.hpp [16:18]
+ boost/bind/storage.hpp [17:19]
+ boost/config/compiler/xlcpp_zos.hpp [3:5]
+ boost/config/platform/zos.hpp [3:5]
+ boost/config/stdlib/xlcpp_zos.hpp [3:5]
+ boost/core/lightweight_test.hpp [17:19]
+ boost/current_function.hpp [15:17]
+ boost/detail/atomic_count.hpp [15:17]
+ boost/detail/lightweight_mutex.hpp [15:17]
+ boost/detail/lightweight_thread.hpp [15:17]
+ boost/detail/quick_allocator.hpp [16:18]
+ boost/enable_shared_from_this.hpp [9:11]
+ boost/interprocess/detail/os_thread_functions.hpp [18:20]
+ boost/intrusive_ptr.hpp [9:11]
+ boost/make_shared.hpp [8:10]
+ boost/mem_fn.hpp [15:17]
+ boost/range/detail/safe_bool.hpp [4:6]
+ boost/signals2/deconstruct.hpp [20:22]
+ boost/smart_ptr/detail/atomic_count.hpp [16:18]
+ boost/smart_ptr/detail/atomic_count_nt.hpp [13:15]
+ boost/smart_ptr/detail/atomic_count_spin.hpp [9:11]
+ boost/smart_ptr/detail/atomic_count_std_atomic.hpp [11:13]
+ boost/smart_ptr/detail/operator_bool.hpp [5:7]
+ boost/smart_ptr/detail/sp_convertible.hpp [14:16]
+ boost/smart_ptr/detail/sp_counted_base_clang.hpp [14:16]
+ boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp [14:16]
+ boost/smart_ptr/detail/sp_counted_base_sync.hpp [14:16]
+ boost/smart_ptr/detail/sp_forward.hpp [14:16]
+ boost/smart_ptr/detail/sp_interlocked.hpp [15:17]
+ boost/smart_ptr/detail/sp_noexcept.hpp [14:16]
+ boost/smart_ptr/detail/sp_nullptr_t.hpp [14:16]
+ boost/smart_ptr/detail/yield_k.hpp [22:24]
+ boost/smart_ptr/enable_shared_from_raw.hpp [10:12]
+ boost/smart_ptr/enable_shared_from_this.hpp [9:11]
+ boost/smart_ptr/make_local_shared.hpp [8:10]
+ boost/smart_ptr/make_local_shared_object.hpp [8:10]
+ boost/smart_ptr/make_shared.hpp [8:10]
+ boost/smart_ptr/make_shared_object.hpp [8:10]
+ boost/type_traits/common_type.hpp [7:9]
+ boost/type_traits/copy_cv.hpp [7:9]
+ boost/type_traits/detail/common_arithmetic_type.hpp [7:9]
+ boost/type_traits/detail/common_type_impl.hpp [7:9]
+ boost/type_traits/detail/composite_member_pointer_type.hpp [7:9]
+ boost/type_traits/detail/composite_pointer_type.hpp [7:9]
+ boost/type_traits/detail/mp_defer.hpp [7:9]
+ boost/type_traits/is_list_constructible.hpp [6:8]
+ boost/type_traits/is_nothrow_swappable.hpp [6:8]
+ boost/type_traits/type_identity.hpp [7:9]
+ boost/weak_ptr.hpp [9:11]
+
+KEEP BSL-1.0 7526d5c5fd651b8d0d6103857fbf3a46
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/call_traits.hpp at line 3, boost/chrono/chrono_io.hpp at line 7, boost/chrono/clock_string.hpp at line 4, boost/chrono/include.hpp at line 6, boost/chrono/io/duration_get.hpp at line 4, boost/chrono/io/duration_io.hpp at line 4, boost/chrono/io/duration_put.hpp at line 4, boost/chrono/io/duration_style.hpp at line 4, boost/chrono/io/duration_units.hpp at line 4, boost/chrono/io/ios_base_state.hpp at line 3, boost/chrono/io/time_point_get.hpp at line 4, boost/chrono/io/time_point_put.hpp at line 4, boost/chrono/io/time_point_units.hpp at line 5, boost/chrono/io/timezone.hpp at line 4, boost/chrono/io/utility/to_string.hpp at line 5, boost/chrono/io_v1/chrono_io.hpp at line 7, boost/compressed_pair.hpp at line 3, boost/detail/call_traits.hpp at line 3, boost/detail/compressed_pair.hpp at line 3, boost/detail/has_default_constructor.hpp at line 4, boost/detail/ob_compressed_pair.hpp at line 3, boost/ratio/detail/ratio_io.hpp at line 6, boost/ratio/mpl/abs.hpp at line 5, boost/ratio/mpl/divides.hpp at line 5, boost/ratio/mpl/equal_to.hpp at line 5, boost/ratio/mpl/gcd.hpp at line 5, boost/ratio/mpl/greater.hpp at line 5, boost/ratio/mpl/greater_equal.hpp at line 5, boost/ratio/mpl/lcm.hpp at line 5, boost/ratio/mpl/less.hpp at line 5, boost/ratio/mpl/less_equal.hpp at line 5, boost/ratio/mpl/minus.hpp at line 5, boost/ratio/mpl/negate.hpp at line 5, boost/ratio/mpl/not_equal_to.hpp at line 5, boost/ratio/mpl/numeric_cast.hpp at line 5, boost/ratio/mpl/plus.hpp at line 5, boost/ratio/mpl/rational_c_tag.hpp at line 5, boost/ratio/mpl/sign.hpp at line 5, boost/ratio/mpl/times.hpp at line 5, boost/ratio/ratio_io.hpp at line 6, boost/tti/detail/dcomp_mem_fun.hpp at line 4, boost/tti/detail/ddata.hpp at line 4, boost/tti/detail/ddeftype.hpp at line 4, boost/tti/detail/dftclass.hpp at line 4, boost/tti/detail/dfunction.hpp at line 4, boost/tti/detail/dlambda.hpp at line 4, boost/tti/detail/dmem_data.hpp at line 4, boost/tti/detail/dmem_fun.hpp at line 4, boost/tti/detail/dmem_type.hpp at line 4, boost/tti/detail/dmetafunc.hpp at line 4, boost/tti/detail/dnotype.hpp at line 4, boost/tti/detail/dnullptr.hpp at line 4, boost/tti/detail/dplaceholder.hpp at line 4, boost/tti/detail/dptmf.hpp at line 4, boost/tti/detail/dstatic_mem_data.hpp at line 4, boost/tti/detail/dstatic_mem_fun.hpp at line 4, boost/tti/detail/dtclass.hpp at line 4, boost/tti/detail/dtemplate.hpp at line 4, boost/tti/detail/dtemplate_params.hpp at line 4, boost/tti/detail/dtfunction.hpp at line 4, boost/tti/detail/dtype.hpp at line 4, boost/tti/detail/dvm_template_params.hpp at line 4, boost/tti/gen/has_data_gen.hpp at line 4, boost/tti/gen/has_function_gen.hpp at line 4, boost/tti/gen/has_member_data_gen.hpp at line 4, boost/tti/gen/has_member_function_gen.hpp at line 4, boost/tti/gen/has_static_member_data_gen.hpp at line 4, boost/tti/gen/has_static_member_function_gen.hpp at line 4, boost/tti/gen/has_template_gen.hpp at line 4, boost/tti/gen/has_type_gen.hpp at line 4, boost/tti/gen/member_type_gen.hpp at line 4, boost/tti/gen/namespace_gen.hpp at line 4, boost/tti/has_data.hpp at line 4, boost/tti/has_function.hpp at line 4, boost/tti/has_member_data.hpp at line 4, boost/tti/has_member_function.hpp at line 4, boost/tti/has_static_member_data.hpp at line 4, boost/tti/has_static_member_function.hpp at line 4, boost/tti/has_template.hpp at line 4, boost/tti/has_type.hpp at line 4, boost/tti/member_type.hpp at line 4, boost/tti/tti.hpp at line 4, boost/type_traits.hpp at line 3, boost/type_traits/add_const.hpp at line 5, boost/type_traits/add_cv.hpp at line 5, boost/type_traits/add_pointer.hpp at line 4, boost/type_traits/add_reference.hpp at line 4, boost/type_traits/add_volatile.hpp at line 5, boost/type_traits/alignment_of.hpp at line 4, boost/type_traits/alignment_traits.hpp at line 4, boost/type_traits/arithmetic_traits.hpp at line 3, boost/type_traits/array_traits.hpp at line 4, boost/type_traits/broken_compiler_spec.hpp at line 4, boost/type_traits/composite_traits.hpp at line 4, boost/type_traits/conditional.hpp at line 3, boost/type_traits/config.hpp at line 4, boost/type_traits/conversion_traits.hpp at line 7, boost/type_traits/cv_traits.hpp at line 4, boost/type_traits/decay.hpp at line 3, boost/type_traits/detail/config.hpp at line 4, boost/type_traits/detail/has_binary_operator.hpp at line 4, boost/type_traits/detail/has_postfix_operator.hpp at line 4, boost/type_traits/detail/has_prefix_operator.hpp at line 4, boost/type_traits/detail/ice_and.hpp at line 4, boost/type_traits/detail/ice_eq.hpp at line 3, boost/type_traits/detail/ice_not.hpp at line 3, boost/type_traits/detail/ice_or.hpp at line 3, boost/type_traits/detail/is_function_ptr_helper.hpp at line 6, boost/type_traits/detail/is_mem_fun_pointer_impl.hpp at line 5, boost/type_traits/detail/is_mem_fun_pointer_tester.hpp at line 5, boost/type_traits/detail/yes_no_type.hpp at line 4, boost/type_traits/extent.hpp at line 4, boost/type_traits/function_traits.hpp at line 4, boost/type_traits/has_bit_and.hpp at line 4, boost/type_traits/has_bit_and_assign.hpp at line 4, boost/type_traits/has_bit_or.hpp at line 4, boost/type_traits/has_bit_or_assign.hpp at line 4, boost/type_traits/has_bit_xor.hpp at line 4, boost/type_traits/has_bit_xor_assign.hpp at line 4, boost/type_traits/has_complement.hpp at line 4, boost/type_traits/has_dereference.hpp at line 4, boost/type_traits/has_divides.hpp at line 4, boost/type_traits/has_divides_assign.hpp at line 4, boost/type_traits/has_equal_to.hpp at line 4, boost/type_traits/has_greater.hpp at line 4, boost/type_traits/has_greater_equal.hpp at line 4, boost/type_traits/has_left_shift.hpp at line 4, boost/type_traits/has_left_shift_assign.hpp at line 4, boost/type_traits/has_less.hpp at line 4, boost/type_traits/has_less_equal.hpp at line 4, boost/type_traits/has_logical_and.hpp at line 4, boost/type_traits/has_logical_not.hpp at line 4, boost/type_traits/has_logical_or.hpp at line 4, boost/type_traits/has_minus.hpp at line 4, boost/type_traits/has_minus_assign.hpp at line 4, boost/type_traits/has_modulus.hpp at line 4, boost/type_traits/has_modulus_assign.hpp at line 4, boost/type_traits/has_multiplies.hpp at line 4, boost/type_traits/has_multiplies_assign.hpp at line 4, boost/type_traits/has_negate.hpp at line 4, boost/type_traits/has_new_operator.hpp at line 4, boost/type_traits/has_not_equal_to.hpp at line 4, boost/type_traits/has_nothrow_assign.hpp at line 4, boost/type_traits/has_nothrow_constructor.hpp at line 4, boost/type_traits/has_nothrow_copy.hpp at line 4, boost/type_traits/has_nothrow_destructor.hpp at line 4, boost/type_traits/has_operator.hpp at line 4, boost/type_traits/has_plus.hpp at line 4, boost/type_traits/has_post_decrement.hpp at line 4, boost/type_traits/has_post_increment.hpp at line 4, boost/type_traits/has_pre_decrement.hpp at line 4, boost/type_traits/has_pre_increment.hpp at line 4, boost/type_traits/has_right_shift.hpp at line 4, boost/type_traits/has_right_shift_assign.hpp at line 4, boost/type_traits/has_trivial_assign.hpp at line 4, boost/type_traits/has_trivial_constructor.hpp at line 4, boost/type_traits/has_trivial_copy.hpp at line 4, boost/type_traits/has_trivial_destructor.hpp at line 4, boost/type_traits/has_trivial_move_assign.hpp at line 6, boost/type_traits/has_trivial_move_constructor.hpp at line 6, boost/type_traits/has_unary_minus.hpp at line 4, boost/type_traits/has_unary_plus.hpp at line 4, boost/type_traits/has_virtual_destructor.hpp at line 4, boost/type_traits/ice.hpp at line 4, boost/type_traits/intrinsics.hpp at line 3, boost/type_traits/is_arithmetic.hpp at line 4, boost/type_traits/is_array.hpp at line 5, boost/type_traits/is_assignable.hpp at line 4, boost/type_traits/is_base_and_derived.hpp at line 4, boost/type_traits/is_base_of.hpp at line 4, boost/type_traits/is_base_of_tr1.hpp at line 4, boost/type_traits/is_class.hpp at line 4, boost/type_traits/is_complete.hpp at line 4, boost/type_traits/is_complex.hpp at line 3, boost/type_traits/is_compound.hpp at line 4, boost/type_traits/is_const.hpp at line 7, boost/type_traits/is_constructible.hpp at line 4, boost/type_traits/is_convertible.hpp at line 7, boost/type_traits/is_copy_assignable.hpp at line 4, boost/type_traits/is_copy_constructible.hpp at line 4, boost/type_traits/is_default_constructible.hpp at line 4, boost/type_traits/is_destructible.hpp at line 4, boost/type_traits/is_empty.hpp at line 4, boost/type_traits/is_enum.hpp at line 5, boost/type_traits/is_final.hpp at line 5, boost/type_traits/is_float.hpp at line 3, boost/type_traits/is_floating_point.hpp at line 3, boost/type_traits/is_function.hpp at line 6, boost/type_traits/is_fundamental.hpp at line 4, boost/type_traits/is_integral.hpp at line 4, boost/type_traits/is_lvalue_reference.hpp at line 7, boost/type_traits/is_member_function_pointer.hpp at line 5, boost/type_traits/is_member_object_pointer.hpp at line 4, boost/type_traits/is_member_pointer.hpp at line 7, boost/type_traits/is_nothrow_move_assignable.hpp at line 6, boost/type_traits/is_nothrow_move_constructible.hpp at line 6, boost/type_traits/is_object.hpp at line 4, boost/type_traits/is_pod.hpp at line 4, boost/type_traits/is_pointer.hpp at line 7, boost/type_traits/is_polymorphic.hpp at line 3, boost/type_traits/is_reference.hpp at line 7, boost/type_traits/is_rvalue_reference.hpp at line 4, boost/type_traits/is_same.hpp at line 7, boost/type_traits/is_scalar.hpp at line 4, boost/type_traits/is_signed.hpp at line 4, boost/type_traits/is_stateless.hpp at line 4, boost/type_traits/is_union.hpp at line 5, boost/type_traits/is_unsigned.hpp at line 4, boost/type_traits/is_virtual_base_of.hpp at line 3, boost/type_traits/is_void.hpp at line 4, boost/type_traits/is_volatile.hpp at line 7, boost/type_traits/make_signed.hpp at line 4, boost/type_traits/make_unsigned.hpp at line 4, boost/type_traits/object_traits.hpp at line 3, boost/type_traits/rank.hpp at line 4, boost/type_traits/reference_traits.hpp at line 4, boost/type_traits/remove_all_extents.hpp at line 4, boost/type_traits/remove_bounds.hpp at line 4, boost/type_traits/remove_const.hpp at line 5, boost/type_traits/remove_cv.hpp at line 5, boost/type_traits/remove_cv_ref.hpp at line 4, boost/type_traits/remove_extent.hpp at line 4, boost/type_traits/remove_pointer.hpp at line 4, boost/type_traits/remove_reference.hpp at line 4, boost/type_traits/remove_volatile.hpp at line 5, boost/type_traits/same_traits.hpp at line 3, boost/type_traits/transform_traits.hpp at line 3, boost/type_traits/type_with_alignment.hpp at line 3, boost/vmd/array.hpp at line 4, boost/vmd/array/to_seq.hpp at line 4, boost/vmd/array/to_tuple.hpp at line 4, boost/vmd/assert.hpp at line 4, boost/vmd/assert_is_array.hpp at line 4, boost/vmd/assert_is_empty.hpp at line 4, boost/vmd/assert_is_identifier.hpp at line 4, boost/vmd/assert_is_list.hpp at line 4, boost/vmd/assert_is_number.hpp at line 4, boost/vmd/assert_is_seq.hpp at line 4, boost/vmd/assert_is_tuple.hpp at line 4, boost/vmd/assert_is_type.hpp at line 4, boost/vmd/detail/adjust_tuple_type.hpp at line 4, boost/vmd/detail/array.hpp at line 4, boost/vmd/detail/assert.hpp at line 4, boost/vmd/detail/data_equal.hpp at line 4, boost/vmd/detail/data_equal_common.hpp at line 4, boost/vmd/detail/empty_result.hpp at line 4, boost/vmd/detail/equal.hpp at line 4, boost/vmd/detail/equal_common.hpp at line 4, boost/vmd/detail/equal_type.hpp at line 4, boost/vmd/detail/identifier.hpp at line 4, boost/vmd/detail/identifier_concat.hpp at line 4, boost/vmd/detail/identifier_type.hpp at line 4, boost/vmd/detail/idprefix.hpp at line 4, boost/vmd/detail/is_array.hpp at line 4, boost/vmd/detail/is_array_common.hpp at line 4, boost/vmd/detail/is_empty.hpp at line 4, boost/vmd/detail/is_empty_array.hpp at line 4, boost/vmd/detail/is_empty_tuple.hpp at line 4, boost/vmd/detail/is_entire.hpp at line 4, boost/vmd/detail/is_identifier.hpp at line 4, boost/vmd/detail/is_list.hpp at line 4, boost/vmd/detail/is_number.hpp at line 4, boost/vmd/detail/is_seq.hpp at line 4, boost/vmd/detail/is_tuple.hpp at line 4, boost/vmd/detail/is_type.hpp at line 4, boost/vmd/detail/is_type_type.hpp at line 4, boost/vmd/detail/list.hpp at line 4, boost/vmd/detail/match_identifier.hpp at line 4, boost/vmd/detail/match_identifier_common.hpp at line 4, boost/vmd/detail/match_single_identifier.hpp at line 4, boost/vmd/detail/modifiers.hpp at line 4, boost/vmd/detail/mods.hpp at line 4, boost/vmd/detail/nil_registration.hpp at line 4, boost/vmd/detail/not_empty.hpp at line 4, boost/vmd/detail/number_registration.hpp at line 4, boost/vmd/detail/only_after.hpp at line 4, boost/vmd/detail/parens.hpp at line 4, boost/vmd/detail/parens_common.hpp at line 4, boost/vmd/detail/parens_split.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_1.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_10.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_11.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_12.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_13.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_14.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_15.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_16.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_2.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_3.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_4.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_5.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_6.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_7.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_8.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_9.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp at line 4, boost/vmd/detail/recurse/data_equal/data_equal_specific.hpp at line 4, boost/vmd/detail/recurse/equal/equal_1.hpp at line 4, boost/vmd/detail/recurse/equal/equal_10.hpp at line 4, boost/vmd/detail/recurse/equal/equal_11.hpp at line 4, boost/vmd/detail/recurse/equal/equal_12.hpp at line 4, boost/vmd/detail/recurse/equal/equal_13.hpp at line 4, boost/vmd/detail/recurse/equal/equal_14.hpp at line 4, boost/vmd/detail/recurse/equal/equal_15.hpp at line 4, boost/vmd/detail/recurse/equal/equal_16.hpp at line 4, boost/vmd/detail/recurse/equal/equal_2.hpp at line 4, boost/vmd/detail/recurse/equal/equal_3.hpp at line 4, boost/vmd/detail/recurse/equal/equal_4.hpp at line 4, boost/vmd/detail/recurse/equal/equal_5.hpp at line 4, boost/vmd/detail/recurse/equal/equal_6.hpp at line 4, boost/vmd/detail/recurse/equal/equal_7.hpp at line 4, boost/vmd/detail/recurse/equal/equal_8.hpp at line 4, boost/vmd/detail/recurse/equal/equal_9.hpp at line 4, boost/vmd/detail/recurse/equal/equal_headers.hpp at line 4, boost/vmd/detail/seq.hpp at line 4, boost/vmd/detail/sequence_arity.hpp at line 4, boost/vmd/detail/sequence_common.hpp at line 4, boost/vmd/detail/sequence_elem.hpp at line 4, boost/vmd/detail/sequence_enum.hpp at line 4, boost/vmd/detail/sequence_size.hpp at line 4, boost/vmd/detail/sequence_to_array.hpp at line 4, boost/vmd/detail/sequence_to_list.hpp at line 4, boost/vmd/detail/sequence_to_seq.hpp at line 4, boost/vmd/detail/sequence_to_tuple.hpp at line 4, boost/vmd/detail/sequence_type.hpp at line 4, boost/vmd/detail/setup.hpp at line 4, boost/vmd/detail/tuple.hpp at line 4, boost/vmd/detail/type_registration.hpp at line 4, boost/vmd/detail/variadic_pop_front.hpp at line 4, boost/vmd/elem.hpp at line 4, boost/vmd/empty.hpp at line 4, boost/vmd/enum.hpp at line 4, boost/vmd/equal.hpp at line 4, boost/vmd/get_type.hpp at line 4, boost/vmd/identity.hpp at line 4, boost/vmd/is_array.hpp at line 4, boost/vmd/is_empty.hpp at line 4, boost/vmd/is_empty_array.hpp at line 4, boost/vmd/is_empty_list.hpp at line 4, boost/vmd/is_identifier.hpp at line 4, boost/vmd/is_list.hpp at line 4, boost/vmd/is_multi.hpp at line 4, boost/vmd/is_number.hpp at line 4, boost/vmd/is_parens_empty.hpp at line 4, boost/vmd/is_seq.hpp at line 4, boost/vmd/is_tuple.hpp at line 4, boost/vmd/is_type.hpp at line 4, boost/vmd/is_unary.hpp at line 4, boost/vmd/list.hpp at line 4, boost/vmd/list/to_seq.hpp at line 4, boost/vmd/list/to_tuple.hpp at line 4, boost/vmd/not_equal.hpp at line 4, boost/vmd/seq.hpp at line 4, boost/vmd/seq/is_vmd_seq.hpp at line 4, boost/vmd/seq/pop_back.hpp at line 4, boost/vmd/seq/pop_front.hpp at line 4, boost/vmd/seq/push_back.hpp at line 4, boost/vmd/seq/push_front.hpp at line 4, boost/vmd/seq/remove.hpp at line 4, boost/vmd/seq/size.hpp at line 4, boost/vmd/seq/to_array.hpp at line 4, boost/vmd/seq/to_list.hpp at line 4, boost/vmd/seq/to_tuple.hpp at line 4, boost/vmd/size.hpp at line 4, boost/vmd/to_array.hpp at line 4, boost/vmd/to_list.hpp at line 4, boost/vmd/to_seq.hpp at line 4, boost/vmd/to_tuple.hpp at line 4, boost/vmd/tuple.hpp at line 4, boost/vmd/tuple/is_vmd_tuple.hpp at line 4, boost/vmd/tuple/pop_back.hpp at line 4, boost/vmd/tuple/pop_front.hpp at line 4, boost/vmd/tuple/push_back.hpp at line 4, boost/vmd/tuple/push_front.hpp at line 4, boost/vmd/tuple/remove.hpp at line 4, boost/vmd/tuple/size.hpp at line 4, boost/vmd/tuple/to_array.hpp at line 4, boost/vmd/tuple/to_list.hpp at line 4, boost/vmd/tuple/to_seq.hpp at line 4, boost/vmd/vmd.hpp at line 4
+ License text:
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/call_traits.hpp [2:4]
+ boost/chrono/chrono_io.hpp [6:8]
+ boost/chrono/clock_string.hpp [3:5]
+ boost/chrono/include.hpp [5:7]
+ boost/chrono/io/duration_get.hpp [3:5]
+ boost/chrono/io/duration_io.hpp [3:5]
+ boost/chrono/io/duration_put.hpp [3:5]
+ boost/chrono/io/duration_style.hpp [3:5]
+ boost/chrono/io/duration_units.hpp [3:5]
+ boost/chrono/io/ios_base_state.hpp [2:4]
+ boost/chrono/io/time_point_get.hpp [3:5]
+ boost/chrono/io/time_point_put.hpp [3:5]
+ boost/chrono/io/time_point_units.hpp [4:6]
+ boost/chrono/io/timezone.hpp [3:5]
+ boost/chrono/io/utility/to_string.hpp [4:6]
+ boost/chrono/io_v1/chrono_io.hpp [6:8]
+ boost/compressed_pair.hpp [2:4]
+ boost/detail/call_traits.hpp [2:4]
+ boost/detail/compressed_pair.hpp [2:4]
+ boost/detail/has_default_constructor.hpp [3:5]
+ boost/detail/ob_compressed_pair.hpp [2:4]
+ boost/ratio/detail/ratio_io.hpp [5:7]
+ boost/ratio/mpl/abs.hpp [4:6]
+ boost/ratio/mpl/divides.hpp [4:6]
+ boost/ratio/mpl/equal_to.hpp [4:6]
+ boost/ratio/mpl/gcd.hpp [4:6]
+ boost/ratio/mpl/greater.hpp [4:6]
+ boost/ratio/mpl/greater_equal.hpp [4:6]
+ boost/ratio/mpl/lcm.hpp [4:6]
+ boost/ratio/mpl/less.hpp [4:6]
+ boost/ratio/mpl/less_equal.hpp [4:6]
+ boost/ratio/mpl/minus.hpp [4:6]
+ boost/ratio/mpl/negate.hpp [4:6]
+ boost/ratio/mpl/not_equal_to.hpp [4:6]
+ boost/ratio/mpl/numeric_cast.hpp [4:6]
+ boost/ratio/mpl/plus.hpp [4:6]
+ boost/ratio/mpl/rational_c_tag.hpp [4:6]
+ boost/ratio/mpl/sign.hpp [4:6]
+ boost/ratio/mpl/times.hpp [4:6]
+ boost/ratio/ratio_io.hpp [5:7]
+ boost/tti/detail/dcomp_mem_fun.hpp [3:5]
+ boost/tti/detail/ddata.hpp [3:5]
+ boost/tti/detail/ddeftype.hpp [3:5]
+ boost/tti/detail/dftclass.hpp [3:5]
+ boost/tti/detail/dfunction.hpp [3:5]
+ boost/tti/detail/dlambda.hpp [3:5]
+ boost/tti/detail/dmem_data.hpp [3:5]
+ boost/tti/detail/dmem_fun.hpp [3:5]
+ boost/tti/detail/dmem_type.hpp [3:5]
+ boost/tti/detail/dmetafunc.hpp [3:5]
+ boost/tti/detail/dnotype.hpp [3:5]
+ boost/tti/detail/dnullptr.hpp [3:5]
+ boost/tti/detail/dplaceholder.hpp [3:5]
+ boost/tti/detail/dptmf.hpp [3:5]
+ boost/tti/detail/dstatic_mem_data.hpp [3:5]
+ boost/tti/detail/dstatic_mem_fun.hpp [3:5]
+ boost/tti/detail/dtclass.hpp [3:5]
+ boost/tti/detail/dtemplate.hpp [3:5]
+ boost/tti/detail/dtemplate_params.hpp [3:5]
+ boost/tti/detail/dtfunction.hpp [3:5]
+ boost/tti/detail/dtype.hpp [3:5]
+ boost/tti/detail/dvm_template_params.hpp [3:5]
+ boost/tti/gen/has_data_gen.hpp [3:5]
+ boost/tti/gen/has_function_gen.hpp [3:5]
+ boost/tti/gen/has_member_data_gen.hpp [3:5]
+ boost/tti/gen/has_member_function_gen.hpp [3:5]
+ boost/tti/gen/has_static_member_data_gen.hpp [3:5]
+ boost/tti/gen/has_static_member_function_gen.hpp [3:5]
+ boost/tti/gen/has_template_gen.hpp [3:5]
+ boost/tti/gen/has_type_gen.hpp [3:5]
+ boost/tti/gen/member_type_gen.hpp [3:5]
+ boost/tti/gen/namespace_gen.hpp [3:5]
+ boost/tti/has_data.hpp [3:5]
+ boost/tti/has_function.hpp [3:5]
+ boost/tti/has_member_data.hpp [3:5]
+ boost/tti/has_member_function.hpp [3:5]
+ boost/tti/has_static_member_data.hpp [3:5]
+ boost/tti/has_static_member_function.hpp [3:5]
+ boost/tti/has_template.hpp [3:5]
+ boost/tti/has_type.hpp [3:5]
+ boost/tti/member_type.hpp [3:5]
+ boost/tti/tti.hpp [3:5]
+ boost/type_traits.hpp [2:4]
+ boost/type_traits/add_const.hpp [4:6]
+ boost/type_traits/add_cv.hpp [4:6]
+ boost/type_traits/add_pointer.hpp [3:5]
+ boost/type_traits/add_reference.hpp [3:5]
+ boost/type_traits/add_volatile.hpp [4:6]
+ boost/type_traits/alignment_of.hpp [3:5]
+ boost/type_traits/alignment_traits.hpp [3:5]
+ boost/type_traits/arithmetic_traits.hpp [2:4]
+ boost/type_traits/array_traits.hpp [3:5]
+ boost/type_traits/broken_compiler_spec.hpp [3:5]
+ boost/type_traits/composite_traits.hpp [3:5]
+ boost/type_traits/conditional.hpp [2:4]
+ boost/type_traits/config.hpp [3:5]
+ boost/type_traits/conversion_traits.hpp [6:8]
+ boost/type_traits/cv_traits.hpp [3:5]
+ boost/type_traits/decay.hpp [2:4]
+ boost/type_traits/detail/config.hpp [3:5]
+ boost/type_traits/detail/has_binary_operator.hpp [3:5]
+ boost/type_traits/detail/has_postfix_operator.hpp [3:5]
+ boost/type_traits/detail/has_prefix_operator.hpp [3:5]
+ boost/type_traits/detail/ice_and.hpp [3:5]
+ boost/type_traits/detail/ice_eq.hpp [2:4]
+ boost/type_traits/detail/ice_not.hpp [2:4]
+ boost/type_traits/detail/ice_or.hpp [2:4]
+ boost/type_traits/detail/is_function_ptr_helper.hpp [5:7]
+ boost/type_traits/detail/is_mem_fun_pointer_impl.hpp [4:6]
+ boost/type_traits/detail/is_mem_fun_pointer_tester.hpp [4:6]
+ boost/type_traits/detail/yes_no_type.hpp [3:5]
+ boost/type_traits/extent.hpp [3:5]
+ boost/type_traits/function_traits.hpp [3:5]
+ boost/type_traits/has_bit_and.hpp [3:5]
+ boost/type_traits/has_bit_and_assign.hpp [3:5]
+ boost/type_traits/has_bit_or.hpp [3:5]
+ boost/type_traits/has_bit_or_assign.hpp [3:5]
+ boost/type_traits/has_bit_xor.hpp [3:5]
+ boost/type_traits/has_bit_xor_assign.hpp [3:5]
+ boost/type_traits/has_complement.hpp [3:5]
+ boost/type_traits/has_dereference.hpp [3:5]
+ boost/type_traits/has_divides.hpp [3:5]
+ boost/type_traits/has_divides_assign.hpp [3:5]
+ boost/type_traits/has_equal_to.hpp [3:5]
+ boost/type_traits/has_greater.hpp [3:5]
+ boost/type_traits/has_greater_equal.hpp [3:5]
+ boost/type_traits/has_left_shift.hpp [3:5]
+ boost/type_traits/has_left_shift_assign.hpp [3:5]
+ boost/type_traits/has_less.hpp [3:5]
+ boost/type_traits/has_less_equal.hpp [3:5]
+ boost/type_traits/has_logical_and.hpp [3:5]
+ boost/type_traits/has_logical_not.hpp [3:5]
+ boost/type_traits/has_logical_or.hpp [3:5]
+ boost/type_traits/has_minus.hpp [3:5]
+ boost/type_traits/has_minus_assign.hpp [3:5]
+ boost/type_traits/has_modulus.hpp [3:5]
+ boost/type_traits/has_modulus_assign.hpp [3:5]
+ boost/type_traits/has_multiplies.hpp [3:5]
+ boost/type_traits/has_multiplies_assign.hpp [3:5]
+ boost/type_traits/has_negate.hpp [3:5]
+ boost/type_traits/has_new_operator.hpp [3:5]
+ boost/type_traits/has_not_equal_to.hpp [3:5]
+ boost/type_traits/has_nothrow_assign.hpp [3:5]
+ boost/type_traits/has_nothrow_constructor.hpp [3:5]
+ boost/type_traits/has_nothrow_copy.hpp [3:5]
+ boost/type_traits/has_nothrow_destructor.hpp [3:5]
+ boost/type_traits/has_operator.hpp [3:5]
+ boost/type_traits/has_plus.hpp [3:5]
+ boost/type_traits/has_post_decrement.hpp [3:5]
+ boost/type_traits/has_post_increment.hpp [3:5]
+ boost/type_traits/has_pre_decrement.hpp [3:5]
+ boost/type_traits/has_pre_increment.hpp [3:5]
+ boost/type_traits/has_right_shift.hpp [3:5]
+ boost/type_traits/has_right_shift_assign.hpp [3:5]
+ boost/type_traits/has_trivial_assign.hpp [3:5]
+ boost/type_traits/has_trivial_constructor.hpp [3:5]
+ boost/type_traits/has_trivial_copy.hpp [3:5]
+ boost/type_traits/has_trivial_destructor.hpp [3:5]
+ boost/type_traits/has_trivial_move_assign.hpp [5:7]
+ boost/type_traits/has_trivial_move_constructor.hpp [5:7]
+ boost/type_traits/has_unary_minus.hpp [3:5]
+ boost/type_traits/has_unary_plus.hpp [3:5]
+ boost/type_traits/has_virtual_destructor.hpp [3:5]
+ boost/type_traits/ice.hpp [3:5]
+ boost/type_traits/intrinsics.hpp [2:4]
+ boost/type_traits/is_arithmetic.hpp [3:5]
+ boost/type_traits/is_array.hpp [4:6]
+ boost/type_traits/is_assignable.hpp [3:5]
+ boost/type_traits/is_base_and_derived.hpp [3:5]
+ boost/type_traits/is_base_of.hpp [3:5]
+ boost/type_traits/is_base_of_tr1.hpp [3:5]
+ boost/type_traits/is_class.hpp [3:5]
+ boost/type_traits/is_complete.hpp [3:5]
+ boost/type_traits/is_complex.hpp [2:4]
+ boost/type_traits/is_compound.hpp [3:5]
+ boost/type_traits/is_const.hpp [6:8]
+ boost/type_traits/is_constructible.hpp [3:5]
+ boost/type_traits/is_convertible.hpp [6:8]
+ boost/type_traits/is_copy_assignable.hpp [3:5]
+ boost/type_traits/is_copy_constructible.hpp [3:5]
+ boost/type_traits/is_default_constructible.hpp [3:5]
+ boost/type_traits/is_destructible.hpp [3:5]
+ boost/type_traits/is_empty.hpp [3:5]
+ boost/type_traits/is_enum.hpp [4:6]
+ boost/type_traits/is_final.hpp [4:6]
+ boost/type_traits/is_float.hpp [2:4]
+ boost/type_traits/is_floating_point.hpp [2:4]
+ boost/type_traits/is_function.hpp [5:7]
+ boost/type_traits/is_fundamental.hpp [3:5]
+ boost/type_traits/is_integral.hpp [3:5]
+ boost/type_traits/is_lvalue_reference.hpp [6:8]
+ boost/type_traits/is_member_function_pointer.hpp [4:6]
+ boost/type_traits/is_member_object_pointer.hpp [3:5]
+ boost/type_traits/is_member_pointer.hpp [6:8]
+ boost/type_traits/is_nothrow_move_assignable.hpp [5:7]
+ boost/type_traits/is_nothrow_move_constructible.hpp [5:7]
+ boost/type_traits/is_object.hpp [3:5]
+ boost/type_traits/is_pod.hpp [3:5]
+ boost/type_traits/is_pointer.hpp [6:8]
+ boost/type_traits/is_polymorphic.hpp [2:4]
+ boost/type_traits/is_reference.hpp [6:8]
+ boost/type_traits/is_rvalue_reference.hpp [3:5]
+ boost/type_traits/is_same.hpp [6:8]
+ boost/type_traits/is_scalar.hpp [3:5]
+ boost/type_traits/is_signed.hpp [3:5]
+ boost/type_traits/is_stateless.hpp [3:5]
+ boost/type_traits/is_union.hpp [4:6]
+ boost/type_traits/is_unsigned.hpp [3:5]
+ boost/type_traits/is_virtual_base_of.hpp [2:4]
+ boost/type_traits/is_void.hpp [3:5]
+ boost/type_traits/is_volatile.hpp [6:8]
+ boost/type_traits/make_signed.hpp [3:5]
+ boost/type_traits/make_unsigned.hpp [3:5]
+ boost/type_traits/object_traits.hpp [2:4]
+ boost/type_traits/rank.hpp [3:5]
+ boost/type_traits/reference_traits.hpp [3:5]
+ boost/type_traits/remove_all_extents.hpp [3:5]
+ boost/type_traits/remove_bounds.hpp [3:5]
+ boost/type_traits/remove_const.hpp [4:6]
+ boost/type_traits/remove_cv.hpp [4:6]
+ boost/type_traits/remove_cv_ref.hpp [3:5]
+ boost/type_traits/remove_extent.hpp [3:5]
+ boost/type_traits/remove_pointer.hpp [3:5]
+ boost/type_traits/remove_reference.hpp [3:5]
+ boost/type_traits/remove_volatile.hpp [4:6]
+ boost/type_traits/same_traits.hpp [2:4]
+ boost/type_traits/transform_traits.hpp [2:4]
+ boost/type_traits/type_with_alignment.hpp [2:4]
+ boost/vmd/array.hpp [3:5]
+ boost/vmd/array/to_seq.hpp [3:5]
+ boost/vmd/array/to_tuple.hpp [3:5]
+ boost/vmd/assert.hpp [3:5]
+ boost/vmd/assert_is_array.hpp [3:5]
+ boost/vmd/assert_is_empty.hpp [3:5]
+ boost/vmd/assert_is_identifier.hpp [3:5]
+ boost/vmd/assert_is_list.hpp [3:5]
+ boost/vmd/assert_is_number.hpp [3:5]
+ boost/vmd/assert_is_seq.hpp [3:5]
+ boost/vmd/assert_is_tuple.hpp [3:5]
+ boost/vmd/assert_is_type.hpp [3:5]
+ boost/vmd/detail/adjust_tuple_type.hpp [3:5]
+ boost/vmd/detail/array.hpp [3:5]
+ boost/vmd/detail/assert.hpp [3:5]
+ boost/vmd/detail/data_equal.hpp [3:5]
+ boost/vmd/detail/data_equal_common.hpp [3:5]
+ boost/vmd/detail/empty_result.hpp [3:5]
+ boost/vmd/detail/equal.hpp [3:5]
+ boost/vmd/detail/equal_common.hpp [3:5]
+ boost/vmd/detail/equal_type.hpp [3:5]
+ boost/vmd/detail/identifier.hpp [3:5]
+ boost/vmd/detail/identifier_concat.hpp [3:5]
+ boost/vmd/detail/identifier_type.hpp [3:5]
+ boost/vmd/detail/idprefix.hpp [3:5]
+ boost/vmd/detail/is_array.hpp [3:5]
+ boost/vmd/detail/is_array_common.hpp [3:5]
+ boost/vmd/detail/is_empty.hpp [3:5]
+ boost/vmd/detail/is_empty_array.hpp [3:5]
+ boost/vmd/detail/is_empty_tuple.hpp [3:5]
+ boost/vmd/detail/is_entire.hpp [3:5]
+ boost/vmd/detail/is_identifier.hpp [3:5]
+ boost/vmd/detail/is_list.hpp [3:5]
+ boost/vmd/detail/is_number.hpp [3:5]
+ boost/vmd/detail/is_seq.hpp [3:5]
+ boost/vmd/detail/is_tuple.hpp [3:5]
+ boost/vmd/detail/is_type.hpp [3:5]
+ boost/vmd/detail/is_type_type.hpp [3:5]
+ boost/vmd/detail/list.hpp [3:5]
+ boost/vmd/detail/match_identifier.hpp [3:5]
+ boost/vmd/detail/match_identifier_common.hpp [3:5]
+ boost/vmd/detail/match_single_identifier.hpp [3:5]
+ boost/vmd/detail/modifiers.hpp [3:5]
+ boost/vmd/detail/mods.hpp [3:5]
+ boost/vmd/detail/nil_registration.hpp [3:5]
+ boost/vmd/detail/not_empty.hpp [3:5]
+ boost/vmd/detail/number_registration.hpp [3:5]
+ boost/vmd/detail/only_after.hpp [3:5]
+ boost/vmd/detail/parens.hpp [3:5]
+ boost/vmd/detail/parens_common.hpp [3:5]
+ boost/vmd/detail/parens_split.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_1.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_10.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_11.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_12.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_13.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_14.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_15.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_16.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_2.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_3.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_4.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_5.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_6.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_7.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_8.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_9.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_headers.hpp [3:5]
+ boost/vmd/detail/recurse/data_equal/data_equal_specific.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_1.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_10.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_11.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_12.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_13.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_14.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_15.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_16.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_2.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_3.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_4.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_5.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_6.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_7.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_8.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_9.hpp [3:5]
+ boost/vmd/detail/recurse/equal/equal_headers.hpp [3:5]
+ boost/vmd/detail/seq.hpp [3:5]
+ boost/vmd/detail/sequence_arity.hpp [3:5]
+ boost/vmd/detail/sequence_common.hpp [3:5]
+ boost/vmd/detail/sequence_elem.hpp [3:5]
+ boost/vmd/detail/sequence_enum.hpp [3:5]
+ boost/vmd/detail/sequence_size.hpp [3:5]
+ boost/vmd/detail/sequence_to_array.hpp [3:5]
+ boost/vmd/detail/sequence_to_list.hpp [3:5]
+ boost/vmd/detail/sequence_to_seq.hpp [3:5]
+ boost/vmd/detail/sequence_to_tuple.hpp [3:5]
+ boost/vmd/detail/sequence_type.hpp [3:5]
+ boost/vmd/detail/setup.hpp [3:5]
+ boost/vmd/detail/tuple.hpp [3:5]
+ boost/vmd/detail/type_registration.hpp [3:5]
+ boost/vmd/detail/variadic_pop_front.hpp [3:5]
+ boost/vmd/elem.hpp [3:5]
+ boost/vmd/empty.hpp [3:5]
+ boost/vmd/enum.hpp [3:5]
+ boost/vmd/equal.hpp [3:5]
+ boost/vmd/get_type.hpp [3:5]
+ boost/vmd/identity.hpp [3:5]
+ boost/vmd/is_array.hpp [3:5]
+ boost/vmd/is_empty.hpp [3:5]
+ boost/vmd/is_empty_array.hpp [3:5]
+ boost/vmd/is_empty_list.hpp [3:5]
+ boost/vmd/is_identifier.hpp [3:5]
+ boost/vmd/is_list.hpp [3:5]
+ boost/vmd/is_multi.hpp [3:5]
+ boost/vmd/is_number.hpp [3:5]
+ boost/vmd/is_parens_empty.hpp [3:5]
+ boost/vmd/is_seq.hpp [3:5]
+ boost/vmd/is_tuple.hpp [3:5]
+ boost/vmd/is_type.hpp [3:5]
+ boost/vmd/is_unary.hpp [3:5]
+ boost/vmd/list.hpp [3:5]
+ boost/vmd/list/to_seq.hpp [3:5]
+ boost/vmd/list/to_tuple.hpp [3:5]
+ boost/vmd/not_equal.hpp [3:5]
+ boost/vmd/seq.hpp [3:5]
+ boost/vmd/seq/is_vmd_seq.hpp [3:5]
+ boost/vmd/seq/pop_back.hpp [3:5]
+ boost/vmd/seq/pop_front.hpp [3:5]
+ boost/vmd/seq/push_back.hpp [3:5]
+ boost/vmd/seq/push_front.hpp [3:5]
+ boost/vmd/seq/remove.hpp [3:5]
+ boost/vmd/seq/size.hpp [3:5]
+ boost/vmd/seq/to_array.hpp [3:5]
+ boost/vmd/seq/to_list.hpp [3:5]
+ boost/vmd/seq/to_tuple.hpp [3:5]
+ boost/vmd/size.hpp [3:5]
+ boost/vmd/to_array.hpp [3:5]
+ boost/vmd/to_list.hpp [3:5]
+ boost/vmd/to_seq.hpp [3:5]
+ boost/vmd/to_tuple.hpp [3:5]
+ boost/vmd/tuple.hpp [3:5]
+ boost/vmd/tuple/is_vmd_tuple.hpp [3:5]
+ boost/vmd/tuple/pop_back.hpp [3:5]
+ boost/vmd/tuple/pop_front.hpp [3:5]
+ boost/vmd/tuple/push_back.hpp [3:5]
+ boost/vmd/tuple/push_front.hpp [3:5]
+ boost/vmd/tuple/remove.hpp [3:5]
+ boost/vmd/tuple/size.hpp [3:5]
+ boost/vmd/tuple/to_array.hpp [3:5]
+ boost/vmd/tuple/to_list.hpp [3:5]
+ boost/vmd/tuple/to_seq.hpp [3:5]
+ boost/vmd/vmd.hpp [3:5]
+
+KEEP BSL-1.0 7532067c3573c5daab384401428cd124
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/detail/template_arity.hpp at line 7, boost/proto/transform/integral_c.hpp at line 7
+ License text:
+ // Copyright 2011 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/proto/detail/template_arity.hpp [5:7]
+ boost/proto/transform/integral_c.hpp [5:7]
+
+KEEP BSL-1.0 7593fec1642a6ccc15d9c9dadadd5985
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals/connection.hpp at line 5, boost/signals/detail/named_slot_map.hpp at line 5, boost/signals/detail/signal_base.hpp at line 5, boost/signals/detail/signals_common.hpp at line 5, boost/signals/detail/slot_call_iterator.hpp at line 5, boost/signals/signal_template.hpp at line 5, boost/signals/slot.hpp at line 5, boost/signals/trackable.hpp at line 5, boost/signals2/detail/preprocessed_arg_type.hpp at line 7, boost/signals2/detail/slot_template.hpp at line 7, boost/signals2/detail/tracked_objects_visitor.hpp at line 7, boost/signals2/preprocessed_slot.hpp at line 7, boost/signals2/slot_base.hpp at line 7, boost/signals2/trackable.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/signals/connection.hpp [3:6]
+ boost/signals/detail/named_slot_map.hpp [3:6]
+ boost/signals/detail/signal_base.hpp [3:6]
+ boost/signals/detail/signals_common.hpp [3:6]
+ boost/signals/detail/slot_call_iterator.hpp [3:6]
+ boost/signals/signal_template.hpp [3:6]
+ boost/signals/slot.hpp [3:6]
+ boost/signals/trackable.hpp [3:6]
+ boost/signals2/detail/preprocessed_arg_type.hpp [5:8]
+ boost/signals2/detail/slot_template.hpp [5:8]
+ boost/signals2/detail/tracked_objects_visitor.hpp [5:8]
+ boost/signals2/preprocessed_slot.hpp [5:8]
+ boost/signals2/slot_base.hpp [5:8]
+ boost/signals2/trackable.hpp [5:8]
+
+KEEP BSL-1.0 75a19a6388a7f4489e2a025313437ca8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/allocators/adaptive_pool.hpp at line 5, boost/interprocess/allocators/allocator.hpp at line 5, boost/interprocess/allocators/cached_adaptive_pool.hpp at line 5, boost/interprocess/allocators/cached_node_allocator.hpp at line 5, boost/interprocess/allocators/detail/adaptive_node_pool.hpp at line 5, boost/interprocess/allocators/detail/node_pool.hpp at line 5, boost/interprocess/allocators/node_allocator.hpp at line 5, boost/interprocess/allocators/private_adaptive_pool.hpp at line 5, boost/interprocess/allocators/private_node_allocator.hpp at line 5, boost/interprocess/anonymous_shared_memory.hpp at line 5, boost/interprocess/creation_tags.hpp at line 5, boost/interprocess/detail/cast_tags.hpp at line 5, boost/interprocess/detail/config_begin.hpp at line 5, boost/interprocess/detail/config_end.hpp at line 5, boost/interprocess/detail/in_place_interface.hpp at line 5, boost/interprocess/detail/intersegment_ptr.hpp at line 5, boost/interprocess/detail/managed_memory_impl.hpp at line 5, boost/interprocess/detail/managed_multi_shared_memory.hpp at line 5, boost/interprocess/detail/named_proxy.hpp at line 5, boost/interprocess/detail/os_file_functions.hpp at line 5, boost/interprocess/detail/posix_time_types_wrk.hpp at line 5, boost/interprocess/detail/segment_manager_helper.hpp at line 5, boost/interprocess/errors.hpp at line 5, boost/interprocess/file_mapping.hpp at line 5, boost/interprocess/indexes/flat_map_index.hpp at line 5, boost/interprocess/indexes/iset_index.hpp at line 5, boost/interprocess/indexes/iunordered_set_index.hpp at line 5, boost/interprocess/indexes/map_index.hpp at line 5, boost/interprocess/indexes/null_index.hpp at line 5, boost/interprocess/indexes/unordered_map_index.hpp at line 5, boost/interprocess/interprocess_fwd.hpp at line 5, boost/interprocess/ipc/message_queue.hpp at line 5, boost/interprocess/managed_external_buffer.hpp at line 5, boost/interprocess/managed_heap_memory.hpp at line 5, boost/interprocess/managed_mapped_file.hpp at line 5, boost/interprocess/managed_shared_memory.hpp at line 5, boost/interprocess/managed_windows_shared_memory.hpp at line 5, boost/interprocess/mapped_region.hpp at line 5, boost/interprocess/mem_algo/detail/mem_algo_common.hpp at line 5, boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp at line 5, boost/interprocess/mem_algo/rbtree_best_fit.hpp at line 5, boost/interprocess/mem_algo/simple_seq_fit.hpp at line 5, boost/interprocess/permissions.hpp at line 5, boost/interprocess/segment_manager.hpp at line 5, boost/interprocess/shared_memory_object.hpp at line 5, boost/interprocess/streams/bufferstream.hpp at line 5, boost/interprocess/streams/vectorstream.hpp at line 5, boost/interprocess/sync/detail/condition_algorithm_8a.hpp at line 5, boost/interprocess/sync/file_lock.hpp at line 5, boost/interprocess/sync/interprocess_condition.hpp at line 5, boost/interprocess/sync/interprocess_mutex.hpp at line 5, boost/interprocess/sync/interprocess_recursive_mutex.hpp at line 5, boost/interprocess/sync/interprocess_semaphore.hpp at line 5, boost/interprocess/sync/interprocess_sharable_mutex.hpp at line 9, boost/interprocess/sync/interprocess_upgradable_mutex.hpp at line 7, boost/interprocess/sync/lock_options.hpp at line 5, boost/interprocess/sync/mutex_family.hpp at line 5, boost/interprocess/sync/named_condition.hpp at line 5, boost/interprocess/sync/named_condition_any.hpp at line 5, boost/interprocess/sync/named_mutex.hpp at line 5, boost/interprocess/sync/named_recursive_mutex.hpp at line 5, boost/interprocess/sync/named_semaphore.hpp at line 5, boost/interprocess/sync/named_sharable_mutex.hpp at line 5, boost/interprocess/sync/named_upgradable_mutex.hpp at line 5, boost/interprocess/sync/null_mutex.hpp at line 5, boost/interprocess/sync/posix/condition.hpp at line 5, boost/interprocess/sync/posix/mutex.hpp at line 5, boost/interprocess/sync/posix/named_mutex.hpp at line 5, boost/interprocess/sync/posix/named_semaphore.hpp at line 5, boost/interprocess/sync/posix/pthread_helpers.hpp at line 5, boost/interprocess/sync/posix/ptime_to_timespec.hpp at line 5, boost/interprocess/sync/posix/recursive_mutex.hpp at line 5, boost/interprocess/sync/posix/semaphore.hpp at line 5, boost/interprocess/sync/posix/semaphore_wrapper.hpp at line 5, boost/interprocess/sync/scoped_lock.hpp at line 5, boost/interprocess/sync/sharable_lock.hpp at line 5, boost/interprocess/sync/shm/named_condition.hpp at line 5, boost/interprocess/sync/shm/named_condition_any.hpp at line 5, boost/interprocess/sync/shm/named_mutex.hpp at line 5, boost/interprocess/sync/shm/named_recursive_mutex.hpp at line 5, boost/interprocess/sync/shm/named_semaphore.hpp at line 5, boost/interprocess/sync/shm/named_upgradable_mutex.hpp at line 5, boost/interprocess/sync/spin/condition.hpp at line 5, boost/interprocess/sync/spin/mutex.hpp at line 5, boost/interprocess/sync/spin/recursive_mutex.hpp at line 5, boost/interprocess/sync/spin/semaphore.hpp at line 5, boost/interprocess/sync/upgradable_lock.hpp at line 5, boost/interprocess/sync/windows/condition.hpp at line 5, boost/interprocess/sync/windows/mutex.hpp at line 5, boost/interprocess/sync/windows/recursive_mutex.hpp at line 5, boost/interprocess/sync/windows/semaphore.hpp at line 5, boost/interprocess/sync/windows/sync_utils.hpp at line 5, boost/interprocess/windows_shared_memory.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/allocators/adaptive_pool.hpp [3:5]
+ boost/interprocess/allocators/allocator.hpp [3:5]
+ boost/interprocess/allocators/cached_adaptive_pool.hpp [3:5]
+ boost/interprocess/allocators/cached_node_allocator.hpp [3:5]
+ boost/interprocess/allocators/detail/adaptive_node_pool.hpp [3:5]
+ boost/interprocess/allocators/detail/node_pool.hpp [3:5]
+ boost/interprocess/allocators/node_allocator.hpp [3:5]
+ boost/interprocess/allocators/private_adaptive_pool.hpp [3:5]
+ boost/interprocess/allocators/private_node_allocator.hpp [3:5]
+ boost/interprocess/anonymous_shared_memory.hpp [3:5]
+ boost/interprocess/creation_tags.hpp [3:5]
+ boost/interprocess/detail/cast_tags.hpp [3:5]
+ boost/interprocess/detail/config_begin.hpp [3:5]
+ boost/interprocess/detail/config_end.hpp [3:5]
+ boost/interprocess/detail/in_place_interface.hpp [3:5]
+ boost/interprocess/detail/intersegment_ptr.hpp [3:5]
+ boost/interprocess/detail/managed_memory_impl.hpp [3:5]
+ boost/interprocess/detail/managed_multi_shared_memory.hpp [3:5]
+ boost/interprocess/detail/named_proxy.hpp [3:5]
+ boost/interprocess/detail/os_file_functions.hpp [3:5]
+ boost/interprocess/detail/posix_time_types_wrk.hpp [3:5]
+ boost/interprocess/detail/segment_manager_helper.hpp [3:5]
+ boost/interprocess/errors.hpp [3:5]
+ boost/interprocess/file_mapping.hpp [3:5]
+ boost/interprocess/indexes/flat_map_index.hpp [3:5]
+ boost/interprocess/indexes/iset_index.hpp [3:5]
+ boost/interprocess/indexes/iunordered_set_index.hpp [3:5]
+ boost/interprocess/indexes/map_index.hpp [3:5]
+ boost/interprocess/indexes/null_index.hpp [3:5]
+ boost/interprocess/indexes/unordered_map_index.hpp [3:5]
+ boost/interprocess/interprocess_fwd.hpp [3:5]
+ boost/interprocess/ipc/message_queue.hpp [3:5]
+ boost/interprocess/managed_external_buffer.hpp [3:5]
+ boost/interprocess/managed_heap_memory.hpp [3:5]
+ boost/interprocess/managed_mapped_file.hpp [3:5]
+ boost/interprocess/managed_shared_memory.hpp [3:5]
+ boost/interprocess/managed_windows_shared_memory.hpp [3:5]
+ boost/interprocess/mapped_region.hpp [3:5]
+ boost/interprocess/mem_algo/detail/mem_algo_common.hpp [3:5]
+ boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp [3:5]
+ boost/interprocess/mem_algo/rbtree_best_fit.hpp [3:5]
+ boost/interprocess/mem_algo/simple_seq_fit.hpp [3:5]
+ boost/interprocess/permissions.hpp [3:5]
+ boost/interprocess/segment_manager.hpp [3:5]
+ boost/interprocess/shared_memory_object.hpp [3:5]
+ boost/interprocess/streams/bufferstream.hpp [3:5]
+ boost/interprocess/streams/vectorstream.hpp [3:5]
+ boost/interprocess/sync/detail/condition_algorithm_8a.hpp [3:5]
+ boost/interprocess/sync/file_lock.hpp [3:5]
+ boost/interprocess/sync/interprocess_condition.hpp [3:5]
+ boost/interprocess/sync/interprocess_mutex.hpp [3:5]
+ boost/interprocess/sync/interprocess_recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/interprocess_semaphore.hpp [3:5]
+ boost/interprocess/sync/interprocess_sharable_mutex.hpp [7:9]
+ boost/interprocess/sync/interprocess_upgradable_mutex.hpp [5:7]
+ boost/interprocess/sync/lock_options.hpp [3:5]
+ boost/interprocess/sync/mutex_family.hpp [3:5]
+ boost/interprocess/sync/named_condition.hpp [3:5]
+ boost/interprocess/sync/named_condition_any.hpp [3:5]
+ boost/interprocess/sync/named_mutex.hpp [3:5]
+ boost/interprocess/sync/named_recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/named_semaphore.hpp [3:5]
+ boost/interprocess/sync/named_sharable_mutex.hpp [3:5]
+ boost/interprocess/sync/named_upgradable_mutex.hpp [3:5]
+ boost/interprocess/sync/null_mutex.hpp [3:5]
+ boost/interprocess/sync/posix/condition.hpp [3:5]
+ boost/interprocess/sync/posix/mutex.hpp [3:5]
+ boost/interprocess/sync/posix/named_mutex.hpp [3:5]
+ boost/interprocess/sync/posix/named_semaphore.hpp [3:5]
+ boost/interprocess/sync/posix/pthread_helpers.hpp [3:5]
+ boost/interprocess/sync/posix/ptime_to_timespec.hpp [3:5]
+ boost/interprocess/sync/posix/recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/posix/semaphore.hpp [3:5]
+ boost/interprocess/sync/posix/semaphore_wrapper.hpp [3:5]
+ boost/interprocess/sync/scoped_lock.hpp [3:5]
+ boost/interprocess/sync/sharable_lock.hpp [3:5]
+ boost/interprocess/sync/shm/named_condition.hpp [3:5]
+ boost/interprocess/sync/shm/named_condition_any.hpp [3:5]
+ boost/interprocess/sync/shm/named_mutex.hpp [3:5]
+ boost/interprocess/sync/shm/named_recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/shm/named_semaphore.hpp [3:5]
+ boost/interprocess/sync/shm/named_upgradable_mutex.hpp [3:5]
+ boost/interprocess/sync/spin/condition.hpp [3:5]
+ boost/interprocess/sync/spin/mutex.hpp [3:5]
+ boost/interprocess/sync/spin/recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/spin/semaphore.hpp [3:5]
+ boost/interprocess/sync/upgradable_lock.hpp [3:5]
+ boost/interprocess/sync/windows/condition.hpp [3:5]
+ boost/interprocess/sync/windows/mutex.hpp [3:5]
+ boost/interprocess/sync/windows/recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/windows/semaphore.hpp [3:5]
+ boost/interprocess/sync/windows/sync_utils.hpp [3:5]
+ boost/interprocess/windows_shared_memory.hpp [3:5]
+
+KEEP BSL-1.0 75ef0605ddf04e80832100a2bfa49411
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/covariance.hpp at line 6, boost/accumulators/statistics/density.hpp at line 7, boost/accumulators/statistics/peaks_over_threshold.hpp at line 6, boost/accumulators/statistics/pot_quantile.hpp at line 6, boost/accumulators/statistics/pot_tail_mean.hpp at line 6, boost/accumulators/statistics/tail_mean.hpp at line 6, boost/accumulators/statistics/tail_quantile.hpp at line 6, boost/accumulators/statistics/tail_variate_means.hpp at line 6, boost/accumulators/statistics/weighted_covariance.hpp at line 6, boost/accumulators/statistics/weighted_density.hpp at line 6, boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp at line 6, boost/accumulators/statistics/weighted_peaks_over_threshold.hpp at line 6, boost/accumulators/statistics/weighted_tail_mean.hpp at line 6, boost/accumulators/statistics/weighted_tail_quantile.hpp at line 6, boost/accumulators/statistics/weighted_tail_variate_means.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/covariance.hpp [4:6]
+ boost/accumulators/statistics/density.hpp [5:7]
+ boost/accumulators/statistics/peaks_over_threshold.hpp [4:6]
+ boost/accumulators/statistics/pot_quantile.hpp [4:6]
+ boost/accumulators/statistics/pot_tail_mean.hpp [4:6]
+ boost/accumulators/statistics/tail_mean.hpp [4:6]
+ boost/accumulators/statistics/tail_quantile.hpp [4:6]
+ boost/accumulators/statistics/tail_variate_means.hpp [4:6]
+ boost/accumulators/statistics/weighted_covariance.hpp [4:6]
+ boost/accumulators/statistics/weighted_density.hpp [4:6]
+ boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp [4:6]
+ boost/accumulators/statistics/weighted_peaks_over_threshold.hpp [4:6]
+ boost/accumulators/statistics/weighted_tail_mean.hpp [4:6]
+ boost/accumulators/statistics/weighted_tail_quantile.hpp [4:6]
+ boost/accumulators/statistics/weighted_tail_variate_means.hpp [4:6]
+
+KEEP BSL-1.0 76283d3ba21930b39430ed67346ed1df
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/predestructible.hpp at line 12
+ License text:
+ //Use, modification and
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/signals2/predestructible.hpp [10:13]
+
+KEEP BSL-1.0 76d332554d0e0dcfe9c9b3caf48262f9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function/detail/function_iterate.hpp at line 5, boost/function/detail/maybe_include.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function/detail/function_iterate.hpp [3:6]
+ boost/function/detail/maybe_include.hpp [3:6]
+
+KEEP BSL-1.0 77795e223e37217964bfdecbffd04c93
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/context/detail/callable_eval.hpp at line 25, boost/proto/context/detail/default_eval.hpp at line 21, boost/proto/context/detail/null_eval.hpp at line 21, boost/proto/detail/and_n.hpp at line 17, boost/proto/detail/args.hpp at line 30, boost/proto/detail/basic_expr.hpp at line 30, boost/proto/detail/class_member_traits.hpp at line 17, boost/proto/detail/deduce_domain_n.hpp at line 23, boost/proto/detail/deep_copy.hpp at line 29, boost/proto/detail/expr.hpp at line 35, boost/proto/detail/extends_funop.hpp at line 27, boost/proto/detail/extends_funop_const.hpp at line 26, boost/proto/detail/funop.hpp at line 25, boost/proto/detail/generate_by_value.hpp at line 17, boost/proto/detail/lambda_matches.hpp at line 23, boost/proto/detail/make_expr.hpp at line 17, boost/proto/detail/make_expr_.hpp at line 17, boost/proto/detail/make_expr_funop.hpp at line 17, boost/proto/detail/matches_.hpp at line 31, boost/proto/detail/memfun_funop.hpp at line 17, boost/proto/detail/or_n.hpp at line 17, boost/proto/detail/poly_function_funop.hpp at line 22, boost/proto/detail/poly_function_traits.hpp at line 17, boost/proto/detail/preprocessed/args.hpp at line 8, boost/proto/detail/preprocessed/class_member_traits.hpp at line 7, boost/proto/detail/preprocessed/make_expr.hpp at line 7, boost/proto/detail/preprocessed/make_expr_funop.hpp at line 7, boost/proto/detail/preprocessed/memfun_funop.hpp at line 7, boost/proto/detail/preprocessed/or_n.hpp at line 7, boost/proto/detail/preprocessed/poly_function_traits.hpp at line 7, boost/proto/detail/preprocessed/template_arity_helper.hpp at line 7, boost/proto/detail/preprocessed/vararg_matches_impl.hpp at line 7, boost/proto/detail/template_arity_helper.hpp at line 17, boost/proto/detail/traits.hpp at line 22, boost/proto/detail/unpack_expr_.hpp at line 82, boost/proto/detail/vararg_matches_impl.hpp at line 17, boost/proto/transform/detail/call.hpp at line 28, boost/proto/transform/detail/construct_funop.hpp at line 17, boost/proto/transform/detail/construct_pod_funop.hpp at line 17, boost/proto/transform/detail/default_function_impl.hpp at line 21, boost/proto/transform/detail/fold_impl.hpp at line 75, boost/proto/transform/detail/lazy.hpp at line 17, boost/proto/transform/detail/make.hpp at line 35, boost/proto/transform/detail/make_gcc_workaround.hpp at line 26, boost/proto/transform/detail/pass_through_impl.hpp at line 37, boost/proto/transform/detail/preprocessed/construct_funop.hpp at line 7, boost/proto/transform/detail/preprocessed/construct_pod_funop.hpp at line 7, boost/proto/transform/detail/preprocessed/lazy.hpp at line 7, boost/proto/transform/detail/preprocessed/when.hpp at line 7, boost/proto/transform/detail/when.hpp at line 17
+ License text:
+ // Copyright 2008 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/proto/context/detail/callable_eval.hpp [23:25]
+ boost/proto/context/detail/default_eval.hpp [19:21]
+ boost/proto/context/detail/null_eval.hpp [19:21]
+ boost/proto/detail/and_n.hpp [15:17]
+ boost/proto/detail/args.hpp [28:30]
+ boost/proto/detail/basic_expr.hpp [28:30]
+ boost/proto/detail/class_member_traits.hpp [15:17]
+ boost/proto/detail/deduce_domain_n.hpp [21:23]
+ boost/proto/detail/deep_copy.hpp [27:29]
+ boost/proto/detail/expr.hpp [33:35]
+ boost/proto/detail/extends_funop.hpp [25:27]
+ boost/proto/detail/extends_funop_const.hpp [24:26]
+ boost/proto/detail/funop.hpp [23:25]
+ boost/proto/detail/generate_by_value.hpp [15:17]
+ boost/proto/detail/lambda_matches.hpp [21:23]
+ boost/proto/detail/make_expr.hpp [15:17]
+ boost/proto/detail/make_expr_.hpp [15:17]
+ boost/proto/detail/make_expr_funop.hpp [15:17]
+ boost/proto/detail/matches_.hpp [29:31]
+ boost/proto/detail/memfun_funop.hpp [15:17]
+ boost/proto/detail/or_n.hpp [15:17]
+ boost/proto/detail/poly_function_funop.hpp [20:22]
+ boost/proto/detail/poly_function_traits.hpp [15:17]
+ boost/proto/detail/preprocessed/args.hpp [6:8]
+ boost/proto/detail/preprocessed/class_member_traits.hpp [5:7]
+ boost/proto/detail/preprocessed/make_expr.hpp [5:7]
+ boost/proto/detail/preprocessed/make_expr_funop.hpp [5:7]
+ boost/proto/detail/preprocessed/memfun_funop.hpp [5:7]
+ boost/proto/detail/preprocessed/or_n.hpp [5:7]
+ boost/proto/detail/preprocessed/poly_function_traits.hpp [5:7]
+ boost/proto/detail/preprocessed/template_arity_helper.hpp [5:7]
+ boost/proto/detail/preprocessed/vararg_matches_impl.hpp [5:7]
+ boost/proto/detail/template_arity_helper.hpp [15:17]
+ boost/proto/detail/traits.hpp [20:22]
+ boost/proto/detail/unpack_expr_.hpp [80:82]
+ boost/proto/detail/vararg_matches_impl.hpp [15:17]
+ boost/proto/transform/detail/call.hpp [26:28]
+ boost/proto/transform/detail/construct_funop.hpp [15:17]
+ boost/proto/transform/detail/construct_pod_funop.hpp [15:17]
+ boost/proto/transform/detail/default_function_impl.hpp [19:21]
+ boost/proto/transform/detail/fold_impl.hpp [73:75]
+ boost/proto/transform/detail/lazy.hpp [15:17]
+ boost/proto/transform/detail/make.hpp [33:35]
+ boost/proto/transform/detail/make_gcc_workaround.hpp [24:26]
+ boost/proto/transform/detail/pass_through_impl.hpp [35:37]
+ boost/proto/transform/detail/preprocessed/construct_funop.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/construct_pod_funop.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/lazy.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/when.hpp [5:7]
+ boost/proto/transform/detail/when.hpp [15:17]
+
+KEEP BSL-1.0 78aea327bac86d71b524e110a6804d07
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/numeric/odeint/util/bind.hpp at line 13
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/numeric/odeint/util/bind.hpp [12:14]
+
+KEEP BSL-1.0 78e141595344e7e88ebac427a369a9d6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/p_square_cumulative_distribution.hpp at line 6, boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp at line 6, boost/proto/detail/any.hpp at line 7, boost/proto/functional/range.hpp at line 7, boost/proto/functional/range/begin.hpp at line 7, boost/proto/functional/range/empty.hpp at line 7, boost/proto/functional/range/end.hpp at line 7, boost/proto/functional/range/rbegin.hpp at line 7, boost/proto/functional/range/rend.hpp at line 7, boost/proto/functional/range/size.hpp at line 7, boost/proto/functional/std/iterator.hpp at line 7, boost/proto/transform/detail/pack.hpp at line 7, boost/proto/transform/env.hpp at line 7
+ License text:
+ // Copyright 2012 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/p_square_cumulative_distribution.hpp [4:6]
+ boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp [4:6]
+ boost/proto/detail/any.hpp [5:7]
+ boost/proto/functional/range.hpp [5:7]
+ boost/proto/functional/range/begin.hpp [5:7]
+ boost/proto/functional/range/empty.hpp [5:7]
+ boost/proto/functional/range/end.hpp [5:7]
+ boost/proto/functional/range/rbegin.hpp [5:7]
+ boost/proto/functional/range/rend.hpp [5:7]
+ boost/proto/functional/range/size.hpp [5:7]
+ boost/proto/functional/std/iterator.hpp [5:7]
+ boost/proto/transform/detail/pack.hpp [5:7]
+ boost/proto/transform/env.hpp [5:7]
+
+KEEP BSL-1.0 78f7dffc575e9ab83ba643ecd766473e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/algorithm/adjacent_find.hpp at line 3, boost/range/algorithm/binary_search.hpp at line 3, boost/range/algorithm/copy.hpp at line 3, boost/range/algorithm/copy_backward.hpp at line 3, boost/range/algorithm/count.hpp at line 3, boost/range/algorithm/count_if.hpp at line 3, boost/range/algorithm/equal_range.hpp at line 3, boost/range/algorithm/fill.hpp at line 3, boost/range/algorithm/fill_n.hpp at line 3, boost/range/algorithm/find.hpp at line 3, boost/range/algorithm/find_end.hpp at line 3, boost/range/algorithm/find_first_of.hpp at line 3, boost/range/algorithm/find_if.hpp at line 3, boost/range/algorithm/for_each.hpp at line 3, boost/range/algorithm/generate.hpp at line 3, boost/range/algorithm/heap_algorithm.hpp at line 3, boost/range/algorithm/inplace_merge.hpp at line 3, boost/range/algorithm/lexicographical_compare.hpp at line 3, boost/range/algorithm/lower_bound.hpp at line 3, boost/range/algorithm/max_element.hpp at line 3, boost/range/algorithm/merge.hpp at line 3, boost/range/algorithm/min_element.hpp at line 3, boost/range/algorithm/mismatch.hpp at line 3, boost/range/algorithm/nth_element.hpp at line 3, boost/range/algorithm/partial_sort.hpp at line 3, boost/range/algorithm/partial_sort_copy.hpp at line 3, boost/range/algorithm/partition.hpp at line 3, boost/range/algorithm/permutation.hpp at line 3, boost/range/algorithm/random_shuffle.hpp at line 3, boost/range/algorithm/remove.hpp at line 3, boost/range/algorithm/remove_copy.hpp at line 3, boost/range/algorithm/remove_copy_if.hpp at line 3, boost/range/algorithm/remove_if.hpp at line 3, boost/range/algorithm/replace.hpp at line 3, boost/range/algorithm/replace_copy.hpp at line 3, boost/range/algorithm/replace_copy_if.hpp at line 3, boost/range/algorithm/replace_if.hpp at line 3, boost/range/algorithm/reverse.hpp at line 3, boost/range/algorithm/reverse_copy.hpp at line 3, boost/range/algorithm/rotate.hpp at line 3, boost/range/algorithm/rotate_copy.hpp at line 3, boost/range/algorithm/search.hpp at line 3, boost/range/algorithm/search_n.hpp at line 3, boost/range/algorithm/set_algorithm.hpp at line 3, boost/range/algorithm/sort.hpp at line 3, boost/range/algorithm/stable_partition.hpp at line 3, boost/range/algorithm/stable_sort.hpp at line 3, boost/range/algorithm/swap_ranges.hpp at line 3, boost/range/algorithm/transform.hpp at line 3, boost/range/algorithm/unique.hpp at line 3, boost/range/algorithm/unique_copy.hpp at line 3, boost/range/algorithm/upper_bound.hpp at line 3, boost/range/algorithm_ext/copy_n.hpp at line 3, boost/range/algorithm_ext/erase.hpp at line 5, boost/range/algorithm_ext/for_each.hpp at line 5, boost/range/algorithm_ext/insert.hpp at line 5, boost/range/algorithm_ext/iota.hpp at line 5, boost/range/algorithm_ext/is_sorted.hpp at line 4, boost/range/algorithm_ext/overwrite.hpp at line 5, boost/range/algorithm_ext/push_back.hpp at line 5, boost/range/algorithm_ext/push_front.hpp at line 5, boost/range/detail/demote_iterator_traversal_tag.hpp at line 5, boost/range/detail/join_iterator.hpp at line 5, boost/range/detail/range_return.hpp at line 3, boost/range/join.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/algorithm/adjacent_find.hpp [1:4]
+ boost/range/algorithm/binary_search.hpp [1:4]
+ boost/range/algorithm/copy.hpp [1:4]
+ boost/range/algorithm/copy_backward.hpp [1:4]
+ boost/range/algorithm/count.hpp [1:4]
+ boost/range/algorithm/count_if.hpp [1:4]
+ boost/range/algorithm/equal_range.hpp [1:4]
+ boost/range/algorithm/fill.hpp [1:4]
+ boost/range/algorithm/fill_n.hpp [1:4]
+ boost/range/algorithm/find.hpp [1:4]
+ boost/range/algorithm/find_end.hpp [1:4]
+ boost/range/algorithm/find_first_of.hpp [1:4]
+ boost/range/algorithm/find_if.hpp [1:4]
+ boost/range/algorithm/for_each.hpp [1:4]
+ boost/range/algorithm/generate.hpp [1:4]
+ boost/range/algorithm/heap_algorithm.hpp [1:4]
+ boost/range/algorithm/inplace_merge.hpp [1:4]
+ boost/range/algorithm/lexicographical_compare.hpp [1:4]
+ boost/range/algorithm/lower_bound.hpp [1:4]
+ boost/range/algorithm/max_element.hpp [1:4]
+ boost/range/algorithm/merge.hpp [1:4]
+ boost/range/algorithm/min_element.hpp [1:4]
+ boost/range/algorithm/mismatch.hpp [1:4]
+ boost/range/algorithm/nth_element.hpp [1:4]
+ boost/range/algorithm/partial_sort.hpp [1:4]
+ boost/range/algorithm/partial_sort_copy.hpp [1:4]
+ boost/range/algorithm/partition.hpp [1:4]
+ boost/range/algorithm/permutation.hpp [1:4]
+ boost/range/algorithm/random_shuffle.hpp [1:4]
+ boost/range/algorithm/remove.hpp [1:4]
+ boost/range/algorithm/remove_copy.hpp [1:4]
+ boost/range/algorithm/remove_copy_if.hpp [1:4]
+ boost/range/algorithm/remove_if.hpp [1:4]
+ boost/range/algorithm/replace.hpp [1:4]
+ boost/range/algorithm/replace_copy.hpp [1:4]
+ boost/range/algorithm/replace_copy_if.hpp [1:4]
+ boost/range/algorithm/replace_if.hpp [1:4]
+ boost/range/algorithm/reverse.hpp [1:4]
+ boost/range/algorithm/reverse_copy.hpp [1:4]
+ boost/range/algorithm/rotate.hpp [1:4]
+ boost/range/algorithm/rotate_copy.hpp [1:4]
+ boost/range/algorithm/search.hpp [1:4]
+ boost/range/algorithm/search_n.hpp [1:4]
+ boost/range/algorithm/set_algorithm.hpp [1:4]
+ boost/range/algorithm/sort.hpp [1:4]
+ boost/range/algorithm/stable_partition.hpp [1:4]
+ boost/range/algorithm/stable_sort.hpp [1:4]
+ boost/range/algorithm/swap_ranges.hpp [1:4]
+ boost/range/algorithm/transform.hpp [1:4]
+ boost/range/algorithm/unique.hpp [1:4]
+ boost/range/algorithm/unique_copy.hpp [1:4]
+ boost/range/algorithm/upper_bound.hpp [1:4]
+ boost/range/algorithm_ext/copy_n.hpp [1:4]
+ boost/range/algorithm_ext/erase.hpp [3:6]
+ boost/range/algorithm_ext/for_each.hpp [3:6]
+ boost/range/algorithm_ext/insert.hpp [3:6]
+ boost/range/algorithm_ext/iota.hpp [3:6]
+ boost/range/algorithm_ext/is_sorted.hpp [2:5]
+ boost/range/algorithm_ext/overwrite.hpp [3:6]
+ boost/range/algorithm_ext/push_back.hpp [3:6]
+ boost/range/algorithm_ext/push_front.hpp [3:6]
+ boost/range/detail/demote_iterator_traversal_tag.hpp [3:6]
+ boost/range/detail/join_iterator.hpp [3:6]
+ boost/range/detail/range_return.hpp [1:4]
+ boost/range/join.hpp [3:6]
+
+KEEP BSL-1.0 796d4cea34dcc1ae5e911c9e4e63030e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/sum_kahan.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/sum_kahan.hpp [4:6]
+
+KEEP BSL-1.0 7bb81c7e56dd6df833123be5c3742521
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/header_deprecated.hpp at line 8, boost/config/helper_macros.hpp at line 9, boost/config/pragma_message.hpp at line 8, boost/is_placeholder.hpp at line 17, boost/mp11.hpp at line 8, boost/mp11/algorithm.hpp at line 8, boost/mp11/bind.hpp at line 8, boost/mp11/detail/config.hpp at line 8, boost/mp11/detail/mp_append.hpp at line 8, boost/mp11/detail/mp_count.hpp at line 8, boost/mp11/detail/mp_fold.hpp at line 8, boost/mp11/detail/mp_list.hpp at line 8, boost/mp11/detail/mp_map_find.hpp at line 8, boost/mp11/detail/mp_min_element.hpp at line 8, boost/mp11/detail/mp_plus.hpp at line 8, boost/mp11/detail/mp_void.hpp at line 8, boost/mp11/detail/mp_with_index.hpp at line 8, boost/mp11/function.hpp at line 8, boost/mp11/integer_sequence.hpp at line 8, boost/mp11/integral.hpp at line 8, boost/mp11/list.hpp at line 8, boost/mp11/map.hpp at line 8, boost/mp11/set.hpp at line 8, boost/mp11/tuple.hpp at line 8, boost/mp11/utility.hpp at line 8
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ //
+ // See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/config/header_deprecated.hpp [6:9]
+ boost/config/helper_macros.hpp [7:10]
+ boost/config/pragma_message.hpp [6:9]
+ boost/is_placeholder.hpp [15:18]
+ boost/mp11.hpp [6:9]
+ boost/mp11/algorithm.hpp [6:9]
+ boost/mp11/bind.hpp [6:9]
+ boost/mp11/detail/config.hpp [6:9]
+ boost/mp11/detail/mp_append.hpp [6:9]
+ boost/mp11/detail/mp_count.hpp [6:9]
+ boost/mp11/detail/mp_fold.hpp [6:9]
+ boost/mp11/detail/mp_list.hpp [6:9]
+ boost/mp11/detail/mp_map_find.hpp [6:9]
+ boost/mp11/detail/mp_min_element.hpp [6:9]
+ boost/mp11/detail/mp_plus.hpp [6:9]
+ boost/mp11/detail/mp_void.hpp [6:9]
+ boost/mp11/detail/mp_with_index.hpp [6:9]
+ boost/mp11/function.hpp [6:9]
+ boost/mp11/integer_sequence.hpp [6:9]
+ boost/mp11/integral.hpp [6:9]
+ boost/mp11/list.hpp [6:9]
+ boost/mp11/map.hpp [6:9]
+ boost/mp11/set.hpp [6:9]
+ boost/mp11/tuple.hpp [6:9]
+ boost/mp11/utility.hpp [6:9]
+
+KEEP BSL-1.0 7dd8de26ac392d25f996e40e98028698
+BELONGS libs/regex/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cregex.hpp at line 8, boost/regex.h at line 8, boost/regex.hpp at line 8, boost/regex/concepts.hpp at line 8, boost/regex/config/borland.hpp at line 8, boost/regex/config/cwchar.hpp at line 8, boost/regex/icu.hpp at line 8, boost/regex/mfc.hpp at line 8, boost/regex/pattern_except.hpp at line 8, boost/regex/pending/object_cache.hpp at line 8, boost/regex/pending/static_mutex.hpp at line 8, boost/regex/pending/unicode_iterator.hpp at line 8, boost/regex/regex_traits.hpp at line 8, boost/regex/user.hpp at line 8, boost/regex/v4/basic_regex_creator.hpp at line 8, boost/regex/v4/c_regex_traits.hpp at line 8, boost/regex/v4/cpp_regex_traits.hpp at line 8, boost/regex/v4/fileiter.hpp at line 8, boost/regex/v4/iterator_category.hpp at line 8, boost/regex/v4/iterator_traits.hpp at line 8, boost/regex/v4/match_flags.hpp at line 8, boost/regex/v4/match_results.hpp at line 8, boost/regex/v4/mem_block_cache.hpp at line 7, boost/regex/v4/perl_matcher.hpp at line 8, boost/regex/v4/perl_matcher_common.hpp at line 8, boost/regex/v4/perl_matcher_non_recursive.hpp at line 8, boost/regex/v4/perl_matcher_recursive.hpp at line 8, boost/regex/v4/primary_transform.hpp at line 8, boost/regex/v4/protected_call.hpp at line 8, boost/regex/v4/regbase.hpp at line 8, boost/regex/v4/regex.hpp at line 8, boost/regex/v4/regex_format.hpp at line 8, boost/regex/v4/regex_fwd.hpp at line 8, boost/regex/v4/regex_grep.hpp at line 8, boost/regex/v4/regex_iterator.hpp at line 8, boost/regex/v4/regex_match.hpp at line 8, boost/regex/v4/regex_merge.hpp at line 8, boost/regex/v4/regex_raw_buffer.hpp at line 8, boost/regex/v4/regex_replace.hpp at line 8, boost/regex/v4/regex_search.hpp at line 8, boost/regex/v4/regex_split.hpp at line 8, boost/regex/v4/regex_traits.hpp at line 8, boost/regex/v4/regex_workaround.hpp at line 8, boost/regex/v4/states.hpp at line 8, boost/regex/v4/sub_match.hpp at line 8, boost/regex/v4/syntax_type.hpp at line 8, boost/regex/v4/u32regex_iterator.hpp at line 8, boost/regex/v4/u32regex_token_iterator.hpp at line 8, boost/regex/v4/w32_regex_traits.hpp at line 8, boost/regex_fwd.hpp at line 8, libs/regex/src/c_regex_traits.cpp at line 8, libs/regex/src/cpp_regex_traits.cpp at line 8, libs/regex/src/cregex.cpp at line 8, libs/regex/src/fileiter.cpp at line 8, libs/regex/src/icu.cpp at line 8, libs/regex/src/instances.cpp at line 8, libs/regex/src/internals.hpp at line 8, libs/regex/src/posix_api.cpp at line 8, libs/regex/src/regex.cpp at line 8, libs/regex/src/regex_debug.cpp at line 8, libs/regex/src/regex_raw_buffer.cpp at line 8, libs/regex/src/regex_traits_defaults.cpp at line 8, libs/regex/src/static_mutex.cpp at line 8, libs/regex/src/usinstances.cpp at line 8, libs/regex/src/w32_regex_traits.cpp at line 8, libs/regex/src/wc_regex_traits.cpp at line 8, libs/regex/src/wide_posix_api.cpp at line 8, libs/regex/src/winstances.cpp at line 8
+ License text:
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/cregex.hpp [6:8]
+ boost/regex.h [6:8]
+ boost/regex.hpp [6:8]
+ boost/regex/concepts.hpp [6:8]
+ boost/regex/config/borland.hpp [6:8]
+ boost/regex/config/cwchar.hpp [6:8]
+ boost/regex/icu.hpp [6:8]
+ boost/regex/mfc.hpp [6:8]
+ boost/regex/pattern_except.hpp [6:8]
+ boost/regex/pending/object_cache.hpp [6:8]
+ boost/regex/pending/static_mutex.hpp [6:8]
+ boost/regex/pending/unicode_iterator.hpp [6:8]
+ boost/regex/regex_traits.hpp [6:8]
+ boost/regex/user.hpp [6:8]
+ boost/regex/v4/basic_regex_creator.hpp [6:8]
+ boost/regex/v4/c_regex_traits.hpp [6:8]
+ boost/regex/v4/cpp_regex_traits.hpp [6:8]
+ boost/regex/v4/fileiter.hpp [6:8]
+ boost/regex/v4/iterator_category.hpp [6:8]
+ boost/regex/v4/iterator_traits.hpp [6:8]
+ boost/regex/v4/match_flags.hpp [6:8]
+ boost/regex/v4/match_results.hpp [6:8]
+ boost/regex/v4/mem_block_cache.hpp [5:7]
+ boost/regex/v4/perl_matcher.hpp [6:8]
+ boost/regex/v4/perl_matcher_common.hpp [6:8]
+ boost/regex/v4/perl_matcher_non_recursive.hpp [6:8]
+ boost/regex/v4/perl_matcher_recursive.hpp [6:8]
+ boost/regex/v4/primary_transform.hpp [6:8]
+ boost/regex/v4/protected_call.hpp [6:8]
+ boost/regex/v4/regbase.hpp [6:8]
+ boost/regex/v4/regex.hpp [6:8]
+ boost/regex/v4/regex_format.hpp [6:8]
+ boost/regex/v4/regex_fwd.hpp [6:8]
+ boost/regex/v4/regex_grep.hpp [6:8]
+ boost/regex/v4/regex_iterator.hpp [6:8]
+ boost/regex/v4/regex_match.hpp [6:8]
+ boost/regex/v4/regex_merge.hpp [6:8]
+ boost/regex/v4/regex_raw_buffer.hpp [6:8]
+ boost/regex/v4/regex_replace.hpp [6:8]
+ boost/regex/v4/regex_search.hpp [6:8]
+ boost/regex/v4/regex_split.hpp [6:8]
+ boost/regex/v4/regex_traits.hpp [6:8]
+ boost/regex/v4/regex_workaround.hpp [6:8]
+ boost/regex/v4/states.hpp [6:8]
+ boost/regex/v4/sub_match.hpp [6:8]
+ boost/regex/v4/syntax_type.hpp [6:8]
+ boost/regex/v4/u32regex_iterator.hpp [6:8]
+ boost/regex/v4/u32regex_token_iterator.hpp [6:8]
+ boost/regex/v4/w32_regex_traits.hpp [6:8]
+ boost/regex_fwd.hpp [6:8]
+ libs/regex/src/c_regex_traits.cpp [6:8]
+ libs/regex/src/cpp_regex_traits.cpp [6:8]
+ libs/regex/src/cregex.cpp [6:8]
+ libs/regex/src/fileiter.cpp [6:8]
+ libs/regex/src/icu.cpp [6:8]
+ libs/regex/src/instances.cpp [6:8]
+ libs/regex/src/internals.hpp [6:8]
+ libs/regex/src/posix_api.cpp [6:8]
+ libs/regex/src/regex.cpp [6:8]
+ libs/regex/src/regex_debug.cpp [6:8]
+ libs/regex/src/regex_raw_buffer.cpp [6:8]
+ libs/regex/src/regex_traits_defaults.cpp [6:8]
+ libs/regex/src/static_mutex.cpp [6:8]
+ libs/regex/src/usinstances.cpp [6:8]
+ libs/regex/src/w32_regex_traits.cpp [6:8]
+ libs/regex/src/wc_regex_traits.cpp [6:8]
+ libs/regex/src/wide_posix_api.cpp [6:8]
+ libs/regex/src/winstances.cpp [6:8]
+
+KEEP BSL-1.0 7e488dcc33e05aa7d1480d1328f86b4e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/gregorian/greg_duration_types.hpp at line 6
+ License text:
+ * Subject to Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 81.48
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/date_time/gregorian/greg_duration_types.hpp [5:6]
+
+KEEP BSL-1.0 7f762e9633d1993f42a043b4063080c5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/median.hpp at line 6, boost/accumulators/statistics/weighted_mean.hpp at line 6, boost/accumulators/statistics/weighted_median.hpp at line 6, boost/accumulators/statistics/weighted_sum.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/median.hpp [4:6]
+ boost/accumulators/statistics/weighted_mean.hpp [4:6]
+ boost/accumulators/statistics/weighted_median.hpp [4:6]
+ boost/accumulators/statistics/weighted_sum.hpp [4:6]
+
+SKIP MPL-1.1 80499698582f4da56012c9acc6d83c52
+BELONGS ya.make
+ License text:
+ //! Lift a MPL-style metafunction class to a Metafunction.
+ Scancode info:
+ Original SPDX id: MPL-1.1
+ Score : 80.00
+ Match type : REFERENCE
+ Links : http://www.mozilla.com/MPL/1.1/index.html, http://www.mozilla.org/MPL/MPL-1.1.html, https://spdx.org/licenses/MPL-1.1
+ Files with this license:
+ boost/hana/fwd/type.hpp [446:446]
+
+KEEP BSL-1.0 813f8ac244dee01bf8132c98b185b1f1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/geometry/algorithms/detail/point_on_border.hpp at line 15
+ License text:
+ // Use, modification and distribution is subject to the Boost Software License,
+ // Version 1.Dimension. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 93.75
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/geometry/algorithms/detail/point_on_border.hpp [14:16]
+
+KEEP BSL-1.0 AND BSL-1.0 81534fdf11ce43c96d75f25a8fd6c0ab
+BELONGS ya.make
+ License text:
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. See http://www.boost.org/LICENSE_1_0.txt.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 59.38
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/convert.hpp [22:23]
+ boost/convert/base.hpp [2:3]
+ boost/convert/detail/char.hpp [2:3]
+ boost/convert/detail/config.hpp [2:3]
+ boost/convert/detail/has_member.hpp [2:3]
+ boost/convert/detail/is_callable.hpp [2:3]
+ boost/convert/detail/is_fun.hpp [2:3]
+ boost/convert/detail/range.hpp [2:3]
+ boost/convert/lexical_cast.hpp [2:3]
+ boost/convert/parameters.hpp [2:3]
+ boost/convert/printf.hpp [2:3]
+ boost/convert/stream.hpp [2:3]
+ boost/convert/strtol.hpp [2:3]
+ boost/make_default.hpp [3:4]
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/convert/detail/boost_parameter_ext.hpp [2:3]
+ boost/convert/detail/is_converter.hpp [2:3]
+ boost/convert/detail/is_string.hpp [2:3]
+ boost/convert/spirit.hpp [2:3]
+
+KEEP BSL-1.0 81e66a23cd062438370d4f6bb173b77a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/extended_p_square.hpp at line 6, boost/accumulators/statistics/extended_p_square_quantile.hpp at line 6, boost/accumulators/statistics/p_square_quantile.hpp at line 6, boost/accumulators/statistics/weighted_extended_p_square.hpp at line 6, boost/accumulators/statistics/weighted_p_square_quantile.hpp at line 6
+ License text:
+ // Copyright 2005 Daniel Egloff. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/extended_p_square.hpp [4:6]
+ boost/accumulators/statistics/extended_p_square_quantile.hpp [4:6]
+ boost/accumulators/statistics/p_square_quantile.hpp [4:6]
+ boost/accumulators/statistics/weighted_extended_p_square.hpp [4:6]
+ boost/accumulators/statistics/weighted_p_square_quantile.hpp [4:6]
+
+KEEP BSL-1.0 8400d1479aa5d0f1d34303e9c6b21e12
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/distributed/adjlist/serialization.hpp at line 3, boost/graph/distributed/shuffled_distribution.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/distributed/adjlist/serialization.hpp [1:3]
+ boost/graph/distributed/shuffled_distribution.hpp [1:3]
+
+KEEP BSL-1.0 845ce6060100deffb4edaf2bf0afa16b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function_equal.hpp at line 6
+ License text:
+ // Use, modification and distribution is subject to
+ // the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function_equal.hpp [4:7]
+
+KEEP BSL-1.0 AND BSL-1.0 8643809499b430f347d7dc1bb3dfd0a5
+BELONGS ya.make
+ License text:
+ // Use modification and distribution are subject to the boost Software License,
+ // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 59.38
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function_types/components.hpp [4:5]
+ boost/function_types/config/cc_names.hpp [4:5]
+ boost/function_types/config/config.hpp [4:5]
+ boost/function_types/detail/class_transform.hpp [4:5]
+ boost/function_types/detail/classifier.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity10_0.hpp [4:5]
+ boost/function_types/detail/classifier_impl/arity10_1.hpp [4:5]
+ boost/function_types/detail/classifier_impl/master.hpp [4:5]
+ boost/function_types/detail/components_as_mpl_sequence.hpp [4:5]
+ boost/function_types/detail/components_impl/arity10_0.hpp [4:5]
+ boost/function_types/detail/components_impl/arity10_1.hpp [4:5]
+ boost/function_types/detail/components_impl/master.hpp [4:5]
+ boost/function_types/detail/encoding/aliases_def.hpp [4:5]
+ boost/function_types/detail/encoding/aliases_undef.hpp [4:5]
+ boost/function_types/detail/encoding/def.hpp [4:5]
+ boost/function_types/detail/encoding/undef.hpp [4:5]
+ boost/function_types/detail/pp_arity_loop.hpp [4:5]
+ boost/function_types/detail/pp_cc_loop/master.hpp [4:5]
+ boost/function_types/detail/pp_cc_loop/preprocessed.hpp [4:5]
+ boost/function_types/detail/pp_loop.hpp [4:5]
+ boost/function_types/detail/pp_retag_default_cc/master.hpp [4:5]
+ boost/function_types/detail/pp_retag_default_cc/preprocessed.hpp [4:5]
+ boost/function_types/detail/pp_tags/cc_tag.hpp [4:5]
+ boost/function_types/detail/pp_tags/master.hpp [4:5]
+ boost/function_types/detail/pp_tags/preprocessed.hpp [4:5]
+ boost/function_types/detail/pp_variate_loop/master.hpp [4:5]
+ boost/function_types/detail/retag_default_cc.hpp [4:5]
+ boost/function_types/detail/synthesize.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity10_0.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/arity10_1.hpp [4:5]
+ boost/function_types/detail/synthesize_impl/master.hpp [4:5]
+ boost/function_types/detail/to_sequence.hpp [4:5]
+ boost/function_types/function_arity.hpp [4:5]
+ boost/function_types/function_pointer.hpp [4:5]
+ boost/function_types/function_reference.hpp [4:5]
+ boost/function_types/is_callable_builtin.hpp [4:5]
+ boost/function_types/is_function.hpp [4:5]
+ boost/function_types/is_function_pointer.hpp [4:5]
+ boost/function_types/is_function_reference.hpp [4:5]
+ boost/function_types/is_member_function_pointer.hpp [4:5]
+ boost/function_types/is_member_object_pointer.hpp [4:5]
+ boost/function_types/is_member_pointer.hpp [4:5]
+ boost/function_types/is_nonmember_callable_builtin.hpp [4:5]
+ boost/function_types/member_function_pointer.hpp [4:5]
+ boost/function_types/member_object_pointer.hpp [4:5]
+ boost/function_types/parameter_types.hpp [4:5]
+ boost/function_types/property_tags.hpp [4:5]
+ boost/function_types/result_type.hpp [4:5]
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function_types/config/compiler.hpp [4:5]
+ boost/function_types/detail/cv_traits.hpp [4:5]
+ boost/function_types/detail/pp_variate_loop/preprocessed.hpp [4:5]
+ boost/function_types/function_type.hpp [4:5]
+ boost/typeof/vector100.hpp [5:6]
+ boost/typeof/vector150.hpp [5:6]
+ boost/typeof/vector200.hpp [5:6]
+
+KEEP BSL-1.0 87615bb769df65be73962ba4b234a0af
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/gil/algorithm.hpp at line 5, boost/gil/bit_aligned_pixel_iterator.hpp at line 5, boost/gil/bit_aligned_pixel_reference.hpp at line 5, boost/gil/channel.hpp at line 5, boost/gil/channel_algorithm.hpp at line 5, boost/gil/cmyk.hpp at line 5, boost/gil/color_base.hpp at line 5, boost/gil/color_base_algorithm.hpp at line 5, boost/gil/color_convert.hpp at line 5, boost/gil/deprecated.hpp at line 5, boost/gil/device_n.hpp at line 5, boost/gil/extension/dynamic_image/algorithm.hpp at line 5, boost/gil/extension/dynamic_image/any_image.hpp at line 5, boost/gil/extension/dynamic_image/any_image_view.hpp at line 5, boost/gil/extension/dynamic_image/apply_operation.hpp at line 5, boost/gil/extension/dynamic_image/apply_operation_base.hpp at line 5, boost/gil/extension/dynamic_image/dynamic_at_c.hpp at line 5, boost/gil/extension/dynamic_image/dynamic_image_all.hpp at line 5, boost/gil/extension/dynamic_image/image_view_factory.hpp at line 5, boost/gil/extension/dynamic_image/reduce.hpp at line 5, boost/gil/extension/dynamic_image/variant.hpp at line 5, boost/gil/extension/io/dynamic_io.hpp at line 5, boost/gil/extension/io/io_error.hpp at line 5, boost/gil/extension/io/jpeg_dynamic_io.hpp at line 5, boost/gil/extension/io/jpeg_io.hpp at line 5, boost/gil/extension/io/jpeg_io_private.hpp at line 5, boost/gil/extension/io/png_dynamic_io.hpp at line 5, boost/gil/extension/io/png_io.hpp at line 5, boost/gil/extension/io/png_io_private.hpp at line 5, boost/gil/extension/io/tiff_dynamic_io.hpp at line 5, boost/gil/extension/io/tiff_io.hpp at line 5, boost/gil/gil_all.hpp at line 5, boost/gil/gil_concept.hpp at line 5, boost/gil/gil_config.hpp at line 5, boost/gil/gray.hpp at line 5, boost/gil/image.hpp at line 5, boost/gil/image_view.hpp at line 5, boost/gil/image_view_factory.hpp at line 5, boost/gil/iterator_from_2d.hpp at line 5, boost/gil/locator.hpp at line 5, boost/gil/metafunctions.hpp at line 5, boost/gil/packed_pixel.hpp at line 5, boost/gil/pixel.hpp at line 5, boost/gil/pixel_iterator.hpp at line 5, boost/gil/pixel_iterator_adaptor.hpp at line 5, boost/gil/planar_pixel_iterator.hpp at line 5, boost/gil/planar_pixel_reference.hpp at line 5, boost/gil/position_iterator.hpp at line 5, boost/gil/rgb.hpp at line 5, boost/gil/rgba.hpp at line 5, boost/gil/step_iterator.hpp at line 5, boost/gil/typedefs.hpp at line 5, boost/gil/utilities.hpp at line 5, boost/gil/virtual_locator.hpp at line 5, boost/polygon/detail/polygon_45_formation.hpp at line 5, boost/polygon/detail/polygon_arbitrary_formation.hpp at line 5, boost/polygon/detail/polygon_formation.hpp at line 5, boost/polygon/detail/rectangle_formation.hpp at line 5
+ License text:
+ Use, modification and distribution are subject to the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/gil/algorithm.hpp [4:6]
+ boost/gil/bit_aligned_pixel_iterator.hpp [4:6]
+ boost/gil/bit_aligned_pixel_reference.hpp [4:6]
+ boost/gil/channel.hpp [4:6]
+ boost/gil/channel_algorithm.hpp [4:6]
+ boost/gil/cmyk.hpp [4:6]
+ boost/gil/color_base.hpp [4:6]
+ boost/gil/color_base_algorithm.hpp [4:6]
+ boost/gil/color_convert.hpp [4:6]
+ boost/gil/deprecated.hpp [4:6]
+ boost/gil/device_n.hpp [4:6]
+ boost/gil/extension/dynamic_image/algorithm.hpp [4:6]
+ boost/gil/extension/dynamic_image/any_image.hpp [4:6]
+ boost/gil/extension/dynamic_image/any_image_view.hpp [4:6]
+ boost/gil/extension/dynamic_image/apply_operation.hpp [4:6]
+ boost/gil/extension/dynamic_image/apply_operation_base.hpp [4:6]
+ boost/gil/extension/dynamic_image/dynamic_at_c.hpp [4:6]
+ boost/gil/extension/dynamic_image/dynamic_image_all.hpp [4:6]
+ boost/gil/extension/dynamic_image/image_view_factory.hpp [4:6]
+ boost/gil/extension/dynamic_image/reduce.hpp [4:6]
+ boost/gil/extension/dynamic_image/variant.hpp [4:6]
+ boost/gil/extension/io/dynamic_io.hpp [4:6]
+ boost/gil/extension/io/io_error.hpp [4:6]
+ boost/gil/extension/io/jpeg_dynamic_io.hpp [4:6]
+ boost/gil/extension/io/jpeg_io.hpp [4:6]
+ boost/gil/extension/io/jpeg_io_private.hpp [4:6]
+ boost/gil/extension/io/png_dynamic_io.hpp [4:6]
+ boost/gil/extension/io/png_io.hpp [4:6]
+ boost/gil/extension/io/png_io_private.hpp [4:6]
+ boost/gil/extension/io/tiff_dynamic_io.hpp [4:6]
+ boost/gil/extension/io/tiff_io.hpp [4:6]
+ boost/gil/gil_all.hpp [4:6]
+ boost/gil/gil_concept.hpp [4:6]
+ boost/gil/gil_config.hpp [4:6]
+ boost/gil/gray.hpp [4:6]
+ boost/gil/image.hpp [4:6]
+ boost/gil/image_view.hpp [4:6]
+ boost/gil/image_view_factory.hpp [4:6]
+ boost/gil/iterator_from_2d.hpp [4:6]
+ boost/gil/locator.hpp [4:6]
+ boost/gil/metafunctions.hpp [4:6]
+ boost/gil/packed_pixel.hpp [4:6]
+ boost/gil/pixel.hpp [4:6]
+ boost/gil/pixel_iterator.hpp [4:6]
+ boost/gil/pixel_iterator_adaptor.hpp [4:6]
+ boost/gil/planar_pixel_iterator.hpp [4:6]
+ boost/gil/planar_pixel_reference.hpp [4:6]
+ boost/gil/position_iterator.hpp [4:6]
+ boost/gil/rgb.hpp [4:6]
+ boost/gil/rgba.hpp [4:6]
+ boost/gil/step_iterator.hpp [4:6]
+ boost/gil/typedefs.hpp [4:6]
+ boost/gil/utilities.hpp [4:6]
+ boost/gil/virtual_locator.hpp [4:6]
+ boost/polygon/detail/polygon_45_formation.hpp [4:6]
+ boost/polygon/detail/polygon_arbitrary_formation.hpp [4:6]
+ boost/polygon/detail/polygon_formation.hpp [4:6]
+ boost/polygon/detail/rectangle_formation.hpp [4:6]
+
+KEEP BSL-1.0 88098ea217207abacf6209d2ad07530d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/cstdlib.hpp at line 5
+ License text:
+ // Copyright Beman Dawes 2001. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/cstdlib.hpp [3:5]
+
+KEEP BSL-1.0 88b58de1d7149f0278b4887961d64fc8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/quadrature/detail/exp_sinh_detail.hpp at line 4, boost/math/quadrature/detail/sinh_sinh_detail.hpp at line 4, boost/math/quadrature/detail/tanh_sinh_constants.hpp at line 4, boost/math/quadrature/detail/tanh_sinh_detail.hpp at line 4
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt
+ // or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math/quadrature/detail/exp_sinh_detail.hpp [2:5]
+ boost/math/quadrature/detail/sinh_sinh_detail.hpp [2:5]
+ boost/math/quadrature/detail/tanh_sinh_constants.hpp [2:5]
+ boost/math/quadrature/detail/tanh_sinh_detail.hpp [2:5]
+
+KEEP BSL-1.0 88c4d29e0aacbf465a938844cbc5d047
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/lcast_precision.hpp at line 5, boost/math/distributions/arcsine.hpp at line 8, boost/math/distributions/bernoulli.hpp at line 8, boost/math/distributions/beta.hpp at line 8, boost/math/distributions/binomial.hpp at line 8, boost/math/distributions/chi_squared.hpp at line 6, boost/math/distributions/detail/common_error_handling.hpp at line 6, boost/math/distributions/detail/generic_mode.hpp at line 5, boost/math/distributions/detail/hypergeometric_cdf.hpp at line 5, boost/math/distributions/detail/hypergeometric_pdf.hpp at line 6, boost/math/distributions/detail/hypergeometric_quantile.hpp at line 5, boost/math/distributions/fisher_f.hpp at line 5, boost/math/distributions/fwd.hpp at line 8, boost/math/distributions/geometric.hpp at line 8, boost/math/distributions/hypergeometric.hpp at line 6, boost/math/distributions/inverse_chi_squared.hpp at line 6, boost/math/distributions/logistic.hpp at line 5, boost/math/distributions/negative_binomial.hpp at line 8, boost/math/distributions/non_central_beta.hpp at line 7, boost/math/distributions/non_central_chi_squared.hpp at line 7, boost/math/distributions/non_central_f.hpp at line 7, boost/math/distributions/non_central_t.hpp at line 7, boost/math/distributions/poisson.hpp at line 8, boost/math/interpolators/cubic_b_spline.hpp at line 4, boost/math/interpolators/detail/cubic_b_spline_detail.hpp at line 4, boost/math/quadrature/exp_sinh.hpp at line 4, boost/math/quadrature/sinh_sinh.hpp at line 4, boost/math/quadrature/tanh_sinh.hpp at line 4, boost/math/special_functions/airy.hpp at line 4, boost/math/special_functions/detail/round_fwd.hpp at line 5, boost/math/special_functions/hankel.hpp at line 4, boost/math/special_functions/jacobi_elliptic.hpp at line 4, boost/math/special_functions/legendre_stieltjes.hpp at line 4, boost/math/special_functions/math_fwd.hpp at line 10, boost/math/special_functions/prime.hpp at line 5, boost/math/tools/promotion.hpp at line 8, boost/math/tools/user.hpp at line 6, boost/math/tr1.hpp at line 4, boost/math/tr1_c_macros.ipp at line 4
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt
+ // or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/lcast_precision.hpp [3:6]
+ boost/math/distributions/arcsine.hpp [6:9]
+ boost/math/distributions/bernoulli.hpp [6:9]
+ boost/math/distributions/beta.hpp [6:9]
+ boost/math/distributions/binomial.hpp [6:9]
+ boost/math/distributions/chi_squared.hpp [4:7]
+ boost/math/distributions/detail/common_error_handling.hpp [4:7]
+ boost/math/distributions/detail/generic_mode.hpp [3:6]
+ boost/math/distributions/detail/hypergeometric_cdf.hpp [3:6]
+ boost/math/distributions/detail/hypergeometric_pdf.hpp [4:7]
+ boost/math/distributions/detail/hypergeometric_quantile.hpp [3:6]
+ boost/math/distributions/fisher_f.hpp [3:6]
+ boost/math/distributions/fwd.hpp [6:9]
+ boost/math/distributions/geometric.hpp [6:9]
+ boost/math/distributions/hypergeometric.hpp [4:7]
+ boost/math/distributions/inverse_chi_squared.hpp [4:7]
+ boost/math/distributions/logistic.hpp [3:6]
+ boost/math/distributions/negative_binomial.hpp [6:9]
+ boost/math/distributions/non_central_beta.hpp [5:8]
+ boost/math/distributions/non_central_chi_squared.hpp [5:8]
+ boost/math/distributions/non_central_f.hpp [5:8]
+ boost/math/distributions/non_central_t.hpp [5:8]
+ boost/math/distributions/poisson.hpp [6:9]
+ boost/math/interpolators/cubic_b_spline.hpp [2:5]
+ boost/math/interpolators/detail/cubic_b_spline_detail.hpp [2:5]
+ boost/math/quadrature/exp_sinh.hpp [2:5]
+ boost/math/quadrature/sinh_sinh.hpp [2:5]
+ boost/math/quadrature/tanh_sinh.hpp [2:5]
+ boost/math/special_functions/airy.hpp [2:5]
+ boost/math/special_functions/detail/round_fwd.hpp [3:6]
+ boost/math/special_functions/hankel.hpp [2:5]
+ boost/math/special_functions/jacobi_elliptic.hpp [2:5]
+ boost/math/special_functions/legendre_stieltjes.hpp [2:5]
+ boost/math/special_functions/math_fwd.hpp [8:11]
+ boost/math/special_functions/prime.hpp [3:6]
+ boost/math/tools/promotion.hpp [6:9]
+ boost/math/tools/user.hpp [4:7]
+ boost/math/tr1.hpp [2:5]
+ boost/math/tr1_c_macros.ipp [2:5]
+
+KEEP BSL-1.0 89e2554ef35082c6fb4690ee1e33d5c2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function/detail/prologue.hpp at line 5, boost/function/function0.hpp at line 5, boost/function/function1.hpp at line 5, boost/function/function10.hpp at line 5, boost/function/function2.hpp at line 5, boost/function/function3.hpp at line 5, boost/function/function4.hpp at line 5, boost/function/function5.hpp at line 5, boost/function/function6.hpp at line 5, boost/function/function7.hpp at line 5, boost/function/function8.hpp at line 5, boost/function/function9.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function/detail/prologue.hpp [3:6]
+ boost/function/function0.hpp [3:6]
+ boost/function/function1.hpp [3:6]
+ boost/function/function10.hpp [3:6]
+ boost/function/function2.hpp [3:6]
+ boost/function/function3.hpp [3:6]
+ boost/function/function4.hpp [3:6]
+ boost/function/function5.hpp [3:6]
+ boost/function/function6.hpp [3:6]
+ boost/function/function7.hpp [3:6]
+ boost/function/function8.hpp [3:6]
+ boost/function/function9.hpp [3:6]
+
+SKIP LGPL-2.0-or-later 8a1040dc7b7219719cc0c3ae86702fcb
+BELONGS ya.make
+ License text:
+ \note The implementation is inspired by terralib http://www.terralib.org (LGPL)
+ Scancode info:
+ Original SPDX id: LGPL-2.0-or-later
+ Score : 75.00
+ Match type : REFERENCE
+ Links : http://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html, http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html, https://spdx.org/licenses/LGPL-2.0-or-later
+ Files with this license:
+ boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp [39:39]
+ boost/geometry/strategies/cartesian/point_in_poly_winding.hpp [45:45]
+
+KEEP BSL-1.0 8a8e0b18cc05e7bc28034b7fb1c69575
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/atomic.hpp at line 7, boost/atomic/detail/interlocked.hpp at line 8, boost/core/typeinfo.hpp at line 15, boost/detail/sp_typeinfo.hpp at line 17, boost/memory_order.hpp at line 9, boost/ptr_container/detail/ptr_container_disable_deprecated.hpp at line 16, boost/smart_ptr/detail/sp_disable_deprecated.hpp at line 16, boost/smart_ptr/detail/sp_has_sync.hpp at line 16, boost/smart_ptr/detail/spinlock.hpp at line 16, boost/smart_ptr/detail/spinlock_gcc_arm.hpp at line 8, boost/smart_ptr/detail/spinlock_nt.hpp at line 14, boost/smart_ptr/detail/spinlock_pool.hpp at line 16, boost/smart_ptr/detail/spinlock_pt.hpp at line 14, boost/smart_ptr/detail/spinlock_std_atomic.hpp at line 14, boost/smart_ptr/detail/spinlock_sync.hpp at line 14, boost/smart_ptr/detail/spinlock_w32.hpp at line 14
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/atomic.hpp [6:8]
+ boost/atomic/detail/interlocked.hpp [7:9]
+ boost/core/typeinfo.hpp [14:16]
+ boost/detail/sp_typeinfo.hpp [16:18]
+ boost/memory_order.hpp [8:10]
+ boost/ptr_container/detail/ptr_container_disable_deprecated.hpp [15:17]
+ boost/smart_ptr/detail/sp_disable_deprecated.hpp [15:17]
+ boost/smart_ptr/detail/sp_has_sync.hpp [15:17]
+ boost/smart_ptr/detail/spinlock.hpp [15:17]
+ boost/smart_ptr/detail/spinlock_gcc_arm.hpp [7:9]
+ boost/smart_ptr/detail/spinlock_nt.hpp [13:15]
+ boost/smart_ptr/detail/spinlock_pool.hpp [15:17]
+ boost/smart_ptr/detail/spinlock_pt.hpp [13:15]
+ boost/smart_ptr/detail/spinlock_std_atomic.hpp [13:15]
+ boost/smart_ptr/detail/spinlock_sync.hpp [13:15]
+ boost/smart_ptr/detail/spinlock_w32.hpp [13:15]
+
+KEEP BSL-1.0 8abbac2c705b0911702566954b0ebe9b
+BELONGS libs/locale/ya.make libs/python/ya.make libs/thread/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/algorithm/cxx11/is_sorted.hpp at line 7, boost/core/checked_delete.hpp at line 18, boost/detail/interlocked.hpp at line 10, boost/locale.hpp at line 5, boost/locale/boundary.hpp at line 5, boost/locale/boundary/boundary_point.hpp at line 5, boost/locale/boundary/facets.hpp at line 5, boost/locale/boundary/index.hpp at line 5, boost/locale/boundary/segment.hpp at line 5, boost/locale/boundary/types.hpp at line 5, boost/locale/collator.hpp at line 5, boost/locale/config.hpp at line 5, boost/locale/conversion.hpp at line 5, boost/locale/date_time.hpp at line 5, boost/locale/date_time_facet.hpp at line 5, boost/locale/definitions.hpp at line 5, boost/locale/encoding.hpp at line 5, boost/locale/encoding_errors.hpp at line 5, boost/locale/encoding_utf.hpp at line 5, boost/locale/format.hpp at line 5, boost/locale/formatting.hpp at line 5, boost/locale/generator.hpp at line 5, boost/locale/gnu_gettext.hpp at line 5, boost/locale/hold_ptr.hpp at line 5, boost/locale/info.hpp at line 5, boost/locale/localization_backend.hpp at line 5, boost/locale/message.hpp at line 5, boost/locale/time_zone.hpp at line 5, boost/locale/utf.hpp at line 5, boost/locale/utf8_codecvt.hpp at line 5, boost/locale/util.hpp at line 5, boost/lockfree/detail/atomic.hpp at line 4, boost/lockfree/detail/copy_payload.hpp at line 6, boost/lockfree/detail/freelist.hpp at line 6, boost/lockfree/detail/prefix.hpp at line 4, boost/lockfree/detail/tagged_ptr.hpp at line 6, boost/lockfree/detail/tagged_ptr_dcas.hpp at line 6, boost/lockfree/detail/tagged_ptr_ptrcompression.hpp at line 6, boost/lockfree/lockfree_forward.hpp at line 4, boost/lockfree/queue.hpp at line 8, boost/lockfree/spsc_queue.hpp at line 7, boost/lockfree/stack.hpp at line 4, boost/numeric/conversion/detail/numeric_cast_traits.hpp at line 33, boost/numeric/conversion/detail/numeric_cast_traits.hpp at line 6, boost/numeric/conversion/detail/numeric_cast_traits.hpp at line 84, boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp at line 6, boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp at line 6, boost/numeric/conversion/numeric_cast_traits.hpp at line 6, boost/numeric/ublas/assignment.hpp at line 5, boost/numeric/ublas/banded.hpp at line 6, boost/numeric/ublas/blas.hpp at line 4, boost/numeric/ublas/detail/concepts.hpp at line 6, boost/numeric/ublas/detail/config.hpp at line 6, boost/numeric/ublas/detail/definitions.hpp at line 6, boost/numeric/ublas/detail/documentation.hpp at line 6, boost/numeric/ublas/detail/duff.hpp at line 6, boost/numeric/ublas/detail/iterator.hpp at line 6, boost/numeric/ublas/detail/matrix_assign.hpp at line 6, boost/numeric/ublas/detail/raw.hpp at line 6, boost/numeric/ublas/detail/temporary.hpp at line 6, boost/numeric/ublas/detail/vector_assign.hpp at line 6, boost/numeric/ublas/doxydoc.hpp at line 4, boost/numeric/ublas/exception.hpp at line 4, boost/numeric/ublas/experimental/sparse_view.hpp at line 6, boost/numeric/ublas/expression_types.hpp at line 5, boost/numeric/ublas/functional.hpp at line 6, boost/numeric/ublas/fwd.hpp at line 6, boost/numeric/ublas/hermitian.hpp at line 6, boost/numeric/ublas/io.hpp at line 6, boost/numeric/ublas/lu.hpp at line 6, boost/numeric/ublas/matrix.hpp at line 7, boost/numeric/ublas/matrix_expression.hpp at line 6, boost/numeric/ublas/matrix_proxy.hpp at line 6, boost/numeric/ublas/matrix_sparse.hpp at line 6, boost/numeric/ublas/matrix_vector.hpp at line 5, boost/numeric/ublas/operation.hpp at line 6, boost/numeric/ublas/operation_blocked.hpp at line 6, boost/numeric/ublas/operation_sparse.hpp at line 6, boost/numeric/ublas/storage.hpp at line 6, boost/numeric/ublas/storage_sparse.hpp at line 6, boost/numeric/ublas/symmetric.hpp at line 6, boost/numeric/ublas/traits.hpp at line 6, boost/numeric/ublas/triangular.hpp at line 6, boost/numeric/ublas/vector_expression.hpp at line 6, boost/numeric/ublas/vector_of_vector.hpp at line 6, boost/numeric/ublas/vector_proxy.hpp at line 6, boost/numeric/ublas/vector_sparse.hpp at line 6, boost/operators.hpp at line 6, boost/operators_v1.hpp at line 5, boost/pending/container_traits.hpp at line 5, boost/pending/detail/disjoint_sets.hpp at line 3, boost/pending/detail/int_iterator.hpp at line 3, boost/pending/detail/property.hpp at line 3, boost/pending/fenced_priority_queue.hpp at line 3, boost/pending/property.hpp at line 3, boost/pending/property_serialize.hpp at line 3, boost/pending/queue.hpp at line 3, boost/pending/stringtok.hpp at line 3, boost/python/object/pickle_support.hpp at line 3, boost/python/suite/indexing/container_utils.hpp at line 4, boost/python/suite/indexing/detail/indexing_suite_detail.hpp at line 3, boost/python/suite/indexing/indexing_suite.hpp at line 3, boost/python/suite/indexing/map_indexing_suite.hpp at line 3, boost/python/suite/indexing/vector_indexing_suite.hpp at line 3, boost/scoped_array.hpp at line 8, boost/scoped_ptr.hpp at line 8, boost/serialization/detail/shared_ptr_132.hpp at line 11, boost/serialization/detail/shared_ptr_nmt_132.hpp at line 11, boost/shared_array.hpp at line 11, boost/shared_ptr.hpp at line 11, boost/smart_ptr/atomic_shared_ptr.hpp at line 10, boost/smart_ptr/detail/atomic_count_gcc.hpp at line 16, boost/smart_ptr/detail/atomic_count_gcc_x86.hpp at line 12, boost/smart_ptr/detail/atomic_count_sync.hpp at line 14, boost/smart_ptr/detail/local_counted_base.hpp at line 15, boost/smart_ptr/detail/local_sp_deleter.hpp at line 15, boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp at line 11, boost/smart_ptr/detail/sp_counted_base_aix.hpp at line 13, boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp at line 17, boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp at line 18, boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp at line 12, boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp at line 16, boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp at line 17, boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp at line 17, boost/smart_ptr/detail/sp_counted_base_solaris.hpp at line 13, boost/smart_ptr/detail/sp_counted_base_spin.hpp at line 17, boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp at line 14, boost/smart_ptr/detail/sp_counted_base_w32.hpp at line 17, boost/smart_ptr/intrusive_ptr.hpp at line 10, boost/smart_ptr/local_shared_ptr.hpp at line 9, boost/smart_ptr/owner_less.hpp at line 11, boost/smart_ptr/scoped_array.hpp at line 8, boost/smart_ptr/scoped_ptr.hpp at line 8, boost/smart_ptr/shared_array.hpp at line 11, boost/smart_ptr/shared_ptr.hpp at line 11, boost/smart_ptr/weak_ptr.hpp at line 10, boost/thread/condition.hpp at line 6, boost/thread/condition_variable.hpp at line 9, boost/thread/cv_status.hpp at line 6, boost/thread/detail/platform_time.hpp at line 7, boost/thread/detail/thread_heap_alloc.hpp at line 9, boost/thread/executors/work.hpp at line 4, boost/thread/future.hpp at line 5, boost/thread/futures/future_error.hpp at line 5, boost/thread/futures/future_error_code.hpp at line 5, boost/thread/futures/future_status.hpp at line 5, boost/thread/futures/is_future_type.hpp at line 5, boost/thread/futures/launch.hpp at line 5, boost/thread/futures/wait_for_all.hpp at line 5, boost/thread/futures/wait_for_any.hpp at line 5, boost/thread/mutex.hpp at line 9, boost/thread/once.hpp at line 9, boost/thread/pthread/once.hpp at line 10, boost/thread/pthread/once_atomic.hpp at line 10, boost/thread/pthread/pthread_helpers.hpp at line 7, boost/thread/pthread/pthread_mutex_scoped_lock.hpp at line 6, boost/thread/pthread/shared_mutex.hpp at line 8, boost/thread/recursive_mutex.hpp at line 9, boost/thread/shared_mutex.hpp at line 10, boost/thread/thread.hpp at line 9, boost/thread/thread_only.hpp at line 9, boost/thread/thread_time.hpp at line 6, boost/thread/v2/shared_mutex.hpp at line 10, boost/thread/win32/basic_recursive_mutex.hpp at line 10, boost/thread/win32/basic_timed_mutex.hpp at line 10, boost/thread/win32/interlocked_read.hpp at line 11, boost/thread/win32/once.hpp at line 11, boost/thread/win32/recursive_mutex.hpp at line 9, boost/thread/win32/shared_mutex.hpp at line 8, boost/thread/win32/thread_primitives.hpp at line 10, boost/throw_exception.hpp at line 23, boost/xpressive/detail/core/matcher/action_matcher.hpp at line 8, boost/xpressive/detail/core/matcher/attr_matcher.hpp at line 8, boost/xpressive/detail/static/transforms/as_action.hpp at line 8, boost/xpressive/detail/utility/symbols.hpp at line 13, libs/locale/src/encoding/codepage.cpp at line 5, libs/locale/src/encoding/conv.hpp at line 5, libs/locale/src/encoding/iconv_codepage.ipp at line 5, libs/locale/src/encoding/uconv_codepage.ipp at line 5, libs/locale/src/encoding/wconv_codepage.ipp at line 5, libs/locale/src/icu/all_generator.hpp at line 5, libs/locale/src/icu/boundary.cpp at line 5, libs/locale/src/icu/cdata.hpp at line 5, libs/locale/src/icu/codecvt.cpp at line 5, libs/locale/src/icu/codecvt.hpp at line 5, libs/locale/src/icu/collator.cpp at line 5, libs/locale/src/icu/conversion.cpp at line 5, libs/locale/src/icu/date_time.cpp at line 5, libs/locale/src/icu/formatter.cpp at line 5, libs/locale/src/icu/formatter.hpp at line 5, libs/locale/src/icu/icu_backend.cpp at line 5, libs/locale/src/icu/icu_backend.hpp at line 5, libs/locale/src/icu/icu_util.hpp at line 5, libs/locale/src/icu/numeric.cpp at line 5, libs/locale/src/icu/predefined_formatters.hpp at line 5, libs/locale/src/icu/time_zone.cpp at line 5, libs/locale/src/icu/time_zone.hpp at line 5, libs/locale/src/icu/uconv.hpp at line 5, libs/locale/src/posix/all_generator.hpp at line 5, libs/locale/src/posix/codecvt.cpp at line 5, libs/locale/src/posix/codecvt.hpp at line 5, libs/locale/src/posix/collate.cpp at line 5, libs/locale/src/posix/converter.cpp at line 5, libs/locale/src/posix/numeric.cpp at line 5, libs/locale/src/posix/posix_backend.cpp at line 5, libs/locale/src/posix/posix_backend.hpp at line 5, libs/locale/src/shared/date_time.cpp at line 5, libs/locale/src/shared/format.cpp at line 5, libs/locale/src/shared/formatting.cpp at line 5, libs/locale/src/shared/generator.cpp at line 5, libs/locale/src/shared/ids.cpp at line 5, libs/locale/src/shared/ios_prop.hpp at line 5, libs/locale/src/shared/localization_backend.cpp at line 5, libs/locale/src/shared/message.cpp at line 5, libs/locale/src/shared/mo_hash.hpp at line 5, libs/locale/src/shared/mo_lambda.cpp at line 5, libs/locale/src/shared/mo_lambda.hpp at line 5, libs/locale/src/std/all_generator.hpp at line 5, libs/locale/src/std/codecvt.cpp at line 5, libs/locale/src/std/collate.cpp at line 5, libs/locale/src/std/converter.cpp at line 5, libs/locale/src/std/numeric.cpp at line 5, libs/locale/src/std/std_backend.cpp at line 5, libs/locale/src/std/std_backend.hpp at line 5, libs/locale/src/util/codecvt_converter.cpp at line 5, libs/locale/src/util/default_locale.cpp at line 5, libs/locale/src/util/gregorian.cpp at line 5, libs/locale/src/util/gregorian.hpp at line 5, libs/locale/src/util/iconv.hpp at line 5, libs/locale/src/util/info.cpp at line 5, libs/locale/src/util/locale_data.cpp at line 5, libs/locale/src/util/locale_data.hpp at line 5, libs/locale/src/util/numeric.hpp at line 5, libs/locale/src/util/timezone.hpp at line 5, libs/locale/src/win32/all_generator.hpp at line 5, libs/locale/src/win32/api.hpp at line 5, libs/locale/src/win32/collate.cpp at line 5, libs/locale/src/win32/converter.cpp at line 5, libs/locale/src/win32/lcid.cpp at line 5, libs/locale/src/win32/lcid.hpp at line 5, libs/locale/src/win32/numeric.cpp at line 5, libs/locale/src/win32/win_backend.cpp at line 5, libs/locale/src/win32/win_backend.hpp at line 5, libs/python/src/object/pickle_support.cpp at line 3, libs/thread/src/win32/thread_primitives.cpp at line 6
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/algorithm/cxx11/is_sorted.hpp [6:8]
+ boost/core/checked_delete.hpp [17:19]
+ boost/detail/interlocked.hpp [9:11]
+ boost/locale.hpp [4:6]
+ boost/locale/boundary.hpp [4:6]
+ boost/locale/boundary/boundary_point.hpp [4:6]
+ boost/locale/boundary/facets.hpp [4:6]
+ boost/locale/boundary/index.hpp [4:6]
+ boost/locale/boundary/segment.hpp [4:6]
+ boost/locale/boundary/types.hpp [4:6]
+ boost/locale/collator.hpp [4:6]
+ boost/locale/config.hpp [4:6]
+ boost/locale/conversion.hpp [4:6]
+ boost/locale/date_time.hpp [4:6]
+ boost/locale/date_time_facet.hpp [4:6]
+ boost/locale/definitions.hpp [4:6]
+ boost/locale/encoding.hpp [4:6]
+ boost/locale/encoding_errors.hpp [4:6]
+ boost/locale/encoding_utf.hpp [4:6]
+ boost/locale/format.hpp [4:6]
+ boost/locale/formatting.hpp [4:6]
+ boost/locale/generator.hpp [4:6]
+ boost/locale/gnu_gettext.hpp [4:6]
+ boost/locale/hold_ptr.hpp [4:6]
+ boost/locale/info.hpp [4:6]
+ boost/locale/localization_backend.hpp [4:6]
+ boost/locale/message.hpp [4:6]
+ boost/locale/time_zone.hpp [4:6]
+ boost/locale/utf.hpp [4:6]
+ boost/locale/utf8_codecvt.hpp [4:6]
+ boost/locale/util.hpp [4:6]
+ boost/lockfree/detail/atomic.hpp [3:5]
+ boost/lockfree/detail/copy_payload.hpp [5:7]
+ boost/lockfree/detail/freelist.hpp [5:7]
+ boost/lockfree/detail/prefix.hpp [3:5]
+ boost/lockfree/detail/tagged_ptr.hpp [5:7]
+ boost/lockfree/detail/tagged_ptr_dcas.hpp [5:7]
+ boost/lockfree/detail/tagged_ptr_ptrcompression.hpp [5:7]
+ boost/lockfree/lockfree_forward.hpp [3:5]
+ boost/lockfree/queue.hpp [7:9]
+ boost/lockfree/spsc_queue.hpp [6:8]
+ boost/lockfree/stack.hpp [3:5]
+ boost/numeric/conversion/detail/numeric_cast_traits.hpp [5:7]
+ boost/numeric/conversion/detail/numeric_cast_traits.hpp [32:34]
+ boost/numeric/conversion/detail/numeric_cast_traits.hpp [83:85]
+ boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp [5:7]
+ boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp [5:7]
+ boost/numeric/conversion/numeric_cast_traits.hpp [5:7]
+ boost/numeric/ublas/assignment.hpp [4:6]
+ boost/numeric/ublas/banded.hpp [5:7]
+ boost/numeric/ublas/blas.hpp [3:5]
+ boost/numeric/ublas/detail/concepts.hpp [5:7]
+ boost/numeric/ublas/detail/config.hpp [5:7]
+ boost/numeric/ublas/detail/definitions.hpp [5:7]
+ boost/numeric/ublas/detail/documentation.hpp [5:7]
+ boost/numeric/ublas/detail/duff.hpp [5:7]
+ boost/numeric/ublas/detail/iterator.hpp [5:7]
+ boost/numeric/ublas/detail/matrix_assign.hpp [5:7]
+ boost/numeric/ublas/detail/raw.hpp [5:7]
+ boost/numeric/ublas/detail/temporary.hpp [5:7]
+ boost/numeric/ublas/detail/vector_assign.hpp [5:7]
+ boost/numeric/ublas/doxydoc.hpp [3:5]
+ boost/numeric/ublas/exception.hpp [3:5]
+ boost/numeric/ublas/experimental/sparse_view.hpp [5:7]
+ boost/numeric/ublas/expression_types.hpp [4:6]
+ boost/numeric/ublas/functional.hpp [5:7]
+ boost/numeric/ublas/fwd.hpp [5:7]
+ boost/numeric/ublas/hermitian.hpp [5:7]
+ boost/numeric/ublas/io.hpp [5:7]
+ boost/numeric/ublas/lu.hpp [5:7]
+ boost/numeric/ublas/matrix.hpp [6:8]
+ boost/numeric/ublas/matrix_expression.hpp [5:7]
+ boost/numeric/ublas/matrix_proxy.hpp [5:7]
+ boost/numeric/ublas/matrix_sparse.hpp [5:7]
+ boost/numeric/ublas/matrix_vector.hpp [4:6]
+ boost/numeric/ublas/operation.hpp [5:7]
+ boost/numeric/ublas/operation_blocked.hpp [5:7]
+ boost/numeric/ublas/operation_sparse.hpp [5:7]
+ boost/numeric/ublas/storage.hpp [5:7]
+ boost/numeric/ublas/storage_sparse.hpp [5:7]
+ boost/numeric/ublas/symmetric.hpp [5:7]
+ boost/numeric/ublas/traits.hpp [5:7]
+ boost/numeric/ublas/triangular.hpp [5:7]
+ boost/numeric/ublas/vector_expression.hpp [5:7]
+ boost/numeric/ublas/vector_of_vector.hpp [5:7]
+ boost/numeric/ublas/vector_proxy.hpp [5:7]
+ boost/numeric/ublas/vector_sparse.hpp [5:7]
+ boost/operators.hpp [5:7]
+ boost/operators_v1.hpp [4:6]
+ boost/pending/container_traits.hpp [4:6]
+ boost/pending/detail/disjoint_sets.hpp [2:4]
+ boost/pending/detail/int_iterator.hpp [2:4]
+ boost/pending/detail/property.hpp [2:4]
+ boost/pending/fenced_priority_queue.hpp [2:4]
+ boost/pending/property.hpp [2:4]
+ boost/pending/property_serialize.hpp [2:4]
+ boost/pending/queue.hpp [2:4]
+ boost/pending/stringtok.hpp [2:4]
+ boost/python/object/pickle_support.hpp [2:4]
+ boost/python/suite/indexing/container_utils.hpp [3:5]
+ boost/python/suite/indexing/detail/indexing_suite_detail.hpp [2:4]
+ boost/python/suite/indexing/indexing_suite.hpp [2:4]
+ boost/python/suite/indexing/map_indexing_suite.hpp [2:4]
+ boost/python/suite/indexing/vector_indexing_suite.hpp [2:4]
+ boost/scoped_array.hpp [7:9]
+ boost/scoped_ptr.hpp [7:9]
+ boost/serialization/detail/shared_ptr_132.hpp [10:12]
+ boost/serialization/detail/shared_ptr_nmt_132.hpp [10:12]
+ boost/shared_array.hpp [10:12]
+ boost/shared_ptr.hpp [10:12]
+ boost/smart_ptr/atomic_shared_ptr.hpp [9:11]
+ boost/smart_ptr/detail/atomic_count_gcc.hpp [15:17]
+ boost/smart_ptr/detail/atomic_count_gcc_x86.hpp [11:13]
+ boost/smart_ptr/detail/atomic_count_sync.hpp [13:15]
+ boost/smart_ptr/detail/local_counted_base.hpp [14:16]
+ boost/smart_ptr/detail/local_sp_deleter.hpp [14:16]
+ boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp [10:12]
+ boost/smart_ptr/detail/sp_counted_base_aix.hpp [12:14]
+ boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp [17:19]
+ boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp [11:13]
+ boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp [15:17]
+ boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_base_solaris.hpp [12:14]
+ boost/smart_ptr/detail/sp_counted_base_spin.hpp [16:18]
+ boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp [13:15]
+ boost/smart_ptr/detail/sp_counted_base_w32.hpp [16:18]
+ boost/smart_ptr/intrusive_ptr.hpp [9:11]
+ boost/smart_ptr/local_shared_ptr.hpp [8:10]
+ boost/smart_ptr/owner_less.hpp [10:12]
+ boost/smart_ptr/scoped_array.hpp [7:9]
+ boost/smart_ptr/scoped_ptr.hpp [7:9]
+ boost/smart_ptr/shared_array.hpp [10:12]
+ boost/smart_ptr/shared_ptr.hpp [10:12]
+ boost/smart_ptr/weak_ptr.hpp [9:11]
+ boost/thread/condition.hpp [5:7]
+ boost/thread/condition_variable.hpp [8:10]
+ boost/thread/cv_status.hpp [5:7]
+ boost/thread/detail/platform_time.hpp [6:8]
+ boost/thread/detail/thread_heap_alloc.hpp [8:10]
+ boost/thread/executors/work.hpp [3:5]
+ boost/thread/future.hpp [4:6]
+ boost/thread/futures/future_error.hpp [4:6]
+ boost/thread/futures/future_error_code.hpp [4:6]
+ boost/thread/futures/future_status.hpp [4:6]
+ boost/thread/futures/is_future_type.hpp [4:6]
+ boost/thread/futures/launch.hpp [4:6]
+ boost/thread/futures/wait_for_all.hpp [4:6]
+ boost/thread/futures/wait_for_any.hpp [4:6]
+ boost/thread/mutex.hpp [8:10]
+ boost/thread/once.hpp [8:10]
+ boost/thread/pthread/once.hpp [9:11]
+ boost/thread/pthread/once_atomic.hpp [9:11]
+ boost/thread/pthread/pthread_helpers.hpp [6:8]
+ boost/thread/pthread/pthread_mutex_scoped_lock.hpp [5:7]
+ boost/thread/pthread/shared_mutex.hpp [7:9]
+ boost/thread/recursive_mutex.hpp [8:10]
+ boost/thread/shared_mutex.hpp [9:11]
+ boost/thread/thread.hpp [8:10]
+ boost/thread/thread_only.hpp [8:10]
+ boost/thread/thread_time.hpp [5:7]
+ boost/thread/v2/shared_mutex.hpp [9:11]
+ boost/thread/win32/basic_recursive_mutex.hpp [9:11]
+ boost/thread/win32/basic_timed_mutex.hpp [9:11]
+ boost/thread/win32/interlocked_read.hpp [10:12]
+ boost/thread/win32/once.hpp [10:12]
+ boost/thread/win32/recursive_mutex.hpp [8:10]
+ boost/thread/win32/shared_mutex.hpp [7:9]
+ boost/thread/win32/thread_primitives.hpp [9:11]
+ boost/throw_exception.hpp [22:24]
+ boost/xpressive/detail/core/matcher/action_matcher.hpp [7:9]
+ boost/xpressive/detail/core/matcher/attr_matcher.hpp [7:9]
+ boost/xpressive/detail/static/transforms/as_action.hpp [7:9]
+ boost/xpressive/detail/utility/symbols.hpp [12:14]
+ libs/locale/src/encoding/codepage.cpp [4:6]
+ libs/locale/src/encoding/conv.hpp [4:6]
+ libs/locale/src/encoding/iconv_codepage.ipp [4:6]
+ libs/locale/src/encoding/uconv_codepage.ipp [4:6]
+ libs/locale/src/encoding/wconv_codepage.ipp [4:6]
+ libs/locale/src/icu/all_generator.hpp [4:6]
+ libs/locale/src/icu/boundary.cpp [4:6]
+ libs/locale/src/icu/cdata.hpp [4:6]
+ libs/locale/src/icu/codecvt.cpp [4:6]
+ libs/locale/src/icu/codecvt.hpp [4:6]
+ libs/locale/src/icu/collator.cpp [4:6]
+ libs/locale/src/icu/conversion.cpp [4:6]
+ libs/locale/src/icu/date_time.cpp [4:6]
+ libs/locale/src/icu/formatter.cpp [4:6]
+ libs/locale/src/icu/formatter.hpp [4:6]
+ libs/locale/src/icu/icu_backend.cpp [4:6]
+ libs/locale/src/icu/icu_backend.hpp [4:6]
+ libs/locale/src/icu/icu_util.hpp [4:6]
+ libs/locale/src/icu/numeric.cpp [4:6]
+ libs/locale/src/icu/predefined_formatters.hpp [4:6]
+ libs/locale/src/icu/time_zone.cpp [4:6]
+ libs/locale/src/icu/time_zone.hpp [4:6]
+ libs/locale/src/icu/uconv.hpp [4:6]
+ libs/locale/src/posix/all_generator.hpp [4:6]
+ libs/locale/src/posix/codecvt.cpp [4:6]
+ libs/locale/src/posix/codecvt.hpp [4:6]
+ libs/locale/src/posix/collate.cpp [4:6]
+ libs/locale/src/posix/converter.cpp [4:6]
+ libs/locale/src/posix/numeric.cpp [4:6]
+ libs/locale/src/posix/posix_backend.cpp [4:6]
+ libs/locale/src/posix/posix_backend.hpp [4:6]
+ libs/locale/src/shared/date_time.cpp [4:6]
+ libs/locale/src/shared/format.cpp [4:6]
+ libs/locale/src/shared/formatting.cpp [4:6]
+ libs/locale/src/shared/generator.cpp [4:6]
+ libs/locale/src/shared/ids.cpp [4:6]
+ libs/locale/src/shared/ios_prop.hpp [4:6]
+ libs/locale/src/shared/localization_backend.cpp [4:6]
+ libs/locale/src/shared/message.cpp [4:6]
+ libs/locale/src/shared/mo_hash.hpp [4:6]
+ libs/locale/src/shared/mo_lambda.cpp [4:6]
+ libs/locale/src/shared/mo_lambda.hpp [4:6]
+ libs/locale/src/std/all_generator.hpp [4:6]
+ libs/locale/src/std/codecvt.cpp [4:6]
+ libs/locale/src/std/collate.cpp [4:6]
+ libs/locale/src/std/converter.cpp [4:6]
+ libs/locale/src/std/numeric.cpp [4:6]
+ libs/locale/src/std/std_backend.cpp [4:6]
+ libs/locale/src/std/std_backend.hpp [4:6]
+ libs/locale/src/util/codecvt_converter.cpp [4:6]
+ libs/locale/src/util/default_locale.cpp [4:6]
+ libs/locale/src/util/gregorian.cpp [4:6]
+ libs/locale/src/util/gregorian.hpp [4:6]
+ libs/locale/src/util/iconv.hpp [4:6]
+ libs/locale/src/util/info.cpp [4:6]
+ libs/locale/src/util/locale_data.cpp [4:6]
+ libs/locale/src/util/locale_data.hpp [4:6]
+ libs/locale/src/util/numeric.hpp [4:6]
+ libs/locale/src/util/timezone.hpp [4:6]
+ libs/locale/src/win32/all_generator.hpp [4:6]
+ libs/locale/src/win32/api.hpp [4:6]
+ libs/locale/src/win32/collate.cpp [4:6]
+ libs/locale/src/win32/converter.cpp [4:6]
+ libs/locale/src/win32/lcid.cpp [4:6]
+ libs/locale/src/win32/lcid.hpp [4:6]
+ libs/locale/src/win32/numeric.cpp [4:6]
+ libs/locale/src/win32/win_backend.cpp [4:6]
+ libs/locale/src/win32/win_backend.hpp [4:6]
+ libs/python/src/object/pickle_support.cpp [2:4]
+ libs/thread/src/win32/thread_primitives.cpp [5:7]
+
+KEEP BSL-1.0 8b16adbc58945f3e7e0b3d19eea06be7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/concepts.hpp at line 10
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/concepts.hpp [8:11]
+
+KEEP BSL-1.0 8b3c7908dfd4ca26fd15bdde0b547bbf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/wave/util/flex_string.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/wave/util/flex_string.hpp [5:7]
+
+KEEP BSL-1.0 8c631061c1944053948acdaf321fc114
+BELONGS libs/thread/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/detail/tss_hooks.hpp at line 4, libs/thread/src/future.cpp at line 4, libs/thread/src/tss_null.cpp at line 5, libs/thread/src/win32/tss_dll.cpp at line 4, libs/thread/src/win32/tss_pe.cpp at line 8
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/thread/detail/tss_hooks.hpp [2:4]
+ libs/thread/src/future.cpp [2:4]
+ libs/thread/src/tss_null.cpp [3:5]
+ libs/thread/src/win32/tss_dll.cpp [2:4]
+ libs/thread/src/win32/tss_pe.cpp [6:8]
+
+KEEP BSL-1.0 8cff6babbb6f0996f11c8e41aea364b2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor.hpp at line 6, boost/preprocessor/arithmetic.hpp at line 6, boost/preprocessor/arithmetic/add.hpp at line 6, boost/preprocessor/arithmetic/dec.hpp at line 6, boost/preprocessor/arithmetic/detail/div_base.hpp at line 6, boost/preprocessor/arithmetic/div.hpp at line 6, boost/preprocessor/arithmetic/inc.hpp at line 6, boost/preprocessor/arithmetic/mod.hpp at line 6, boost/preprocessor/arithmetic/mul.hpp at line 6, boost/preprocessor/arithmetic/sub.hpp at line 6, boost/preprocessor/cat.hpp at line 6, boost/preprocessor/comparison.hpp at line 6, boost/preprocessor/comparison/equal.hpp at line 6, boost/preprocessor/comparison/greater.hpp at line 6, boost/preprocessor/comparison/greater_equal.hpp at line 6, boost/preprocessor/comparison/less.hpp at line 6, boost/preprocessor/comparison/less_equal.hpp at line 6, boost/preprocessor/comparison/not_equal.hpp at line 6, boost/preprocessor/config/limits.hpp at line 6, boost/preprocessor/control/detail/dmc/while.hpp at line 6, boost/preprocessor/control/detail/edg/while.hpp at line 6, boost/preprocessor/control/detail/msvc/while.hpp at line 6, boost/preprocessor/control/detail/while.hpp at line 6, boost/preprocessor/control/expr_if.hpp at line 6, boost/preprocessor/control/if.hpp at line 6, boost/preprocessor/debug/assert.hpp at line 6, boost/preprocessor/facilities/empty.hpp at line 6, boost/preprocessor/facilities/expand.hpp at line 6, boost/preprocessor/facilities/identity.hpp at line 6, boost/preprocessor/list.hpp at line 6, boost/preprocessor/list/adt.hpp at line 6, boost/preprocessor/list/append.hpp at line 6, boost/preprocessor/list/at.hpp at line 6, boost/preprocessor/list/cat.hpp at line 6, boost/preprocessor/list/detail/dmc/fold_left.hpp at line 6, boost/preprocessor/list/detail/edg/fold_left.hpp at line 6, boost/preprocessor/list/detail/edg/fold_right.hpp at line 6, boost/preprocessor/list/detail/fold_left.hpp at line 6, boost/preprocessor/list/detail/fold_right.hpp at line 6, boost/preprocessor/list/enum.hpp at line 6, boost/preprocessor/list/filter.hpp at line 6, boost/preprocessor/list/first_n.hpp at line 6, boost/preprocessor/list/fold_left.hpp at line 6, boost/preprocessor/list/fold_right.hpp at line 6, boost/preprocessor/list/for_each.hpp at line 6, boost/preprocessor/list/for_each_i.hpp at line 6, boost/preprocessor/list/for_each_product.hpp at line 6, boost/preprocessor/list/rest_n.hpp at line 6, boost/preprocessor/list/reverse.hpp at line 6, boost/preprocessor/list/size.hpp at line 6, boost/preprocessor/list/to_tuple.hpp at line 6, boost/preprocessor/list/transform.hpp at line 6, boost/preprocessor/logical.hpp at line 6, boost/preprocessor/logical/and.hpp at line 6, boost/preprocessor/logical/bool.hpp at line 6, boost/preprocessor/logical/nor.hpp at line 6, boost/preprocessor/logical/not.hpp at line 6, boost/preprocessor/logical/or.hpp at line 6, boost/preprocessor/logical/xor.hpp at line 6, boost/preprocessor/punctuation/comma.hpp at line 6, boost/preprocessor/punctuation/comma_if.hpp at line 6, boost/preprocessor/repetition/detail/dmc/for.hpp at line 6, boost/preprocessor/repetition/detail/edg/for.hpp at line 6, boost/preprocessor/repetition/detail/for.hpp at line 6, boost/preprocessor/repetition/detail/msvc/for.hpp at line 6, boost/preprocessor/repetition/enum.hpp at line 6, boost/preprocessor/repetition/enum_params.hpp at line 6, boost/preprocessor/repetition/enum_params_with_a_default.hpp at line 6, boost/preprocessor/repetition/enum_params_with_defaults.hpp at line 6, boost/preprocessor/repetition/enum_shifted.hpp at line 6, boost/preprocessor/repetition/enum_shifted_params.hpp at line 6, boost/preprocessor/repetition/for.hpp at line 6, boost/preprocessor/repetition/repeat.hpp at line 6, boost/preprocessor/repetition/repeat_from_to.hpp at line 6, boost/preprocessor/selection/max.hpp at line 6, boost/preprocessor/selection/min.hpp at line 6, boost/preprocessor/stringize.hpp at line 6, boost/preprocessor/tuple.hpp at line 6
+ License text:
+ \# * Distributed under the Boost Software License, Version 1.0. (See
+ \# * accompanying file LICENSE_1_0.txt or copy at
+ \# * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/preprocessor.hpp [5:7]
+ boost/preprocessor/arithmetic.hpp [5:7]
+ boost/preprocessor/arithmetic/add.hpp [5:7]
+ boost/preprocessor/arithmetic/dec.hpp [5:7]
+ boost/preprocessor/arithmetic/detail/div_base.hpp [5:7]
+ boost/preprocessor/arithmetic/div.hpp [5:7]
+ boost/preprocessor/arithmetic/inc.hpp [5:7]
+ boost/preprocessor/arithmetic/mod.hpp [5:7]
+ boost/preprocessor/arithmetic/mul.hpp [5:7]
+ boost/preprocessor/arithmetic/sub.hpp [5:7]
+ boost/preprocessor/cat.hpp [5:7]
+ boost/preprocessor/comparison.hpp [5:7]
+ boost/preprocessor/comparison/equal.hpp [5:7]
+ boost/preprocessor/comparison/greater.hpp [5:7]
+ boost/preprocessor/comparison/greater_equal.hpp [5:7]
+ boost/preprocessor/comparison/less.hpp [5:7]
+ boost/preprocessor/comparison/less_equal.hpp [5:7]
+ boost/preprocessor/comparison/not_equal.hpp [5:7]
+ boost/preprocessor/config/limits.hpp [5:7]
+ boost/preprocessor/control/detail/dmc/while.hpp [5:7]
+ boost/preprocessor/control/detail/edg/while.hpp [5:7]
+ boost/preprocessor/control/detail/msvc/while.hpp [5:7]
+ boost/preprocessor/control/detail/while.hpp [5:7]
+ boost/preprocessor/control/expr_if.hpp [5:7]
+ boost/preprocessor/control/if.hpp [5:7]
+ boost/preprocessor/debug/assert.hpp [5:7]
+ boost/preprocessor/facilities/empty.hpp [5:7]
+ boost/preprocessor/facilities/expand.hpp [5:7]
+ boost/preprocessor/facilities/identity.hpp [5:7]
+ boost/preprocessor/list.hpp [5:7]
+ boost/preprocessor/list/adt.hpp [5:7]
+ boost/preprocessor/list/append.hpp [5:7]
+ boost/preprocessor/list/at.hpp [5:7]
+ boost/preprocessor/list/cat.hpp [5:7]
+ boost/preprocessor/list/detail/dmc/fold_left.hpp [5:7]
+ boost/preprocessor/list/detail/edg/fold_left.hpp [5:7]
+ boost/preprocessor/list/detail/edg/fold_right.hpp [5:7]
+ boost/preprocessor/list/detail/fold_left.hpp [5:7]
+ boost/preprocessor/list/detail/fold_right.hpp [5:7]
+ boost/preprocessor/list/enum.hpp [5:7]
+ boost/preprocessor/list/filter.hpp [5:7]
+ boost/preprocessor/list/first_n.hpp [5:7]
+ boost/preprocessor/list/fold_left.hpp [5:7]
+ boost/preprocessor/list/fold_right.hpp [5:7]
+ boost/preprocessor/list/for_each.hpp [5:7]
+ boost/preprocessor/list/for_each_i.hpp [5:7]
+ boost/preprocessor/list/for_each_product.hpp [5:7]
+ boost/preprocessor/list/rest_n.hpp [5:7]
+ boost/preprocessor/list/reverse.hpp [5:7]
+ boost/preprocessor/list/size.hpp [5:7]
+ boost/preprocessor/list/to_tuple.hpp [5:7]
+ boost/preprocessor/list/transform.hpp [5:7]
+ boost/preprocessor/logical.hpp [5:7]
+ boost/preprocessor/logical/and.hpp [5:7]
+ boost/preprocessor/logical/bool.hpp [5:7]
+ boost/preprocessor/logical/nor.hpp [5:7]
+ boost/preprocessor/logical/not.hpp [5:7]
+ boost/preprocessor/logical/or.hpp [5:7]
+ boost/preprocessor/logical/xor.hpp [5:7]
+ boost/preprocessor/punctuation/comma.hpp [5:7]
+ boost/preprocessor/punctuation/comma_if.hpp [5:7]
+ boost/preprocessor/repetition/detail/dmc/for.hpp [5:7]
+ boost/preprocessor/repetition/detail/edg/for.hpp [5:7]
+ boost/preprocessor/repetition/detail/for.hpp [5:7]
+ boost/preprocessor/repetition/detail/msvc/for.hpp [5:7]
+ boost/preprocessor/repetition/enum.hpp [5:7]
+ boost/preprocessor/repetition/enum_params.hpp [5:7]
+ boost/preprocessor/repetition/enum_params_with_a_default.hpp [5:7]
+ boost/preprocessor/repetition/enum_params_with_defaults.hpp [5:7]
+ boost/preprocessor/repetition/enum_shifted.hpp [5:7]
+ boost/preprocessor/repetition/enum_shifted_params.hpp [5:7]
+ boost/preprocessor/repetition/for.hpp [5:7]
+ boost/preprocessor/repetition/repeat.hpp [5:7]
+ boost/preprocessor/repetition/repeat_from_to.hpp [5:7]
+ boost/preprocessor/selection/max.hpp [5:7]
+ boost/preprocessor/selection/min.hpp [5:7]
+ boost/preprocessor/stringize.hpp [5:7]
+ boost/preprocessor/tuple.hpp [5:7]
+
+KEEP BSL-1.0 8e0227f825163b0c4b28b330397fa5eb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/collection_traits.hpp at line 10
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/detail/collection_traits.hpp [8:11]
+
+KEEP BSL-1.0 8e69b0b2f16cd74aa0e5e63a0b06674e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/detail/result_type_wrapper.hpp at line 6, boost/signals2/detail/signals_common.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/signals2/detail/result_type_wrapper.hpp [4:7]
+ boost/signals2/detail/signals_common.hpp [4:7]
+
+KEEP BSL-1.0 8eecb41322fd21e26f9e556e8aa5c20f
+BELONGS libs/python/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/python/src/converter/type_id.cpp at line 147
+ License text:
+ // Contributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.30
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/python/src/converter/type_id.cpp [146:148]
+
+KEEP BSL-1.0 8f3bd9a6adf2e880def921a200c6089c
+BELONGS ya.make
+ License text:
+ // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : REFERENCE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function_types/config/compiler.hpp [5:5]
+ boost/function_types/detail/cv_traits.hpp [5:5]
+ boost/function_types/detail/pp_variate_loop/preprocessed.hpp [5:5]
+ boost/function_types/function_type.hpp [5:5]
+ boost/typeof/vector100.hpp [6:6]
+ boost/typeof/vector150.hpp [6:6]
+ boost/typeof/vector200.hpp [6:6]
+
+KEEP BSL-1.0 8f6a7508df640acaeae6c00eb6b48dc2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pool/detail/pool_construct.ipp at line 4
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 97.37
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/pool/detail/pool_construct.ipp [3:6]
+
+KEEP BSL-1.0 8fc1de4a757b09268729457d0978f08e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/cpp_int/import_export.hpp at line 4
+ License text:
+ // Copyright 2015 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.59
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/cpp_int/import_export.hpp [2:4]
+
+KEEP BSL-1.0 90107d2b937b306faf40f2deb0858e34
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/detail/any_conversion_eater.hpp at line 3, boost/iterator/detail/facade_iterator_category.hpp at line 3, boost/iterator/detail/minimum_category.hpp at line 3, boost/iterator/is_lvalue_iterator.hpp at line 3, boost/iterator/is_readable_iterator.hpp at line 3, boost/iterator/minimum_category.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/iterator/detail/any_conversion_eater.hpp [1:3]
+ boost/iterator/detail/facade_iterator_category.hpp [1:3]
+ boost/iterator/detail/minimum_category.hpp [1:3]
+ boost/iterator/is_lvalue_iterator.hpp [1:3]
+ boost/iterator/is_readable_iterator.hpp [1:3]
+ boost/iterator/minimum_category.hpp [1:3]
+
+SKIP LicenseRef-scancode-proprietary-license 90211759450bb4abe057697e60d3aa0b
+BELONGS ya.make
+ License text:
+ http://software.intel.com/en-us/articles/non-commercial-software-download/
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-proprietary-license
+ Score : 100.00
+ Match type : REFERENCE
+ Links : https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/proprietary-license.LICENSE
+ Files with this license:
+ boost/numeric/odeint/external/mkl/mkl_operations.hpp [8:8]
+
+KEEP BSL-1.0 90cabaecb5b34cc68a2a39693a8a953f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/container_or_allocator_rebind.hpp at line 5, boost/container/detail/container_rebind.hpp at line 5, boost/container/detail/is_container.hpp at line 5, boost/container/detail/is_contiguous_container.hpp at line 5, boost/container/detail/value_functors.hpp at line 7
+ License text:
+ // (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/container_or_allocator_rebind.hpp [3:5]
+ boost/container/detail/container_rebind.hpp [3:5]
+ boost/container/detail/is_container.hpp [3:5]
+ boost/container/detail/is_contiguous_container.hpp [3:5]
+ boost/container/detail/value_functors.hpp [5:7]
+
+KEEP BSL-1.0 916300612debc9bebbe59992654a8a6c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/stable_vector.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2008-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/stable_vector.hpp [3:5]
+
+KEEP BSL-1.0 9345cd12d4429cfc366f36202f6b68bd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/allocators/detail/node_tools.hpp at line 5, boost/interprocess/detail/interprocess_tester.hpp at line 5, boost/interprocess/sync/shm/named_creation_functor.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2007-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/allocators/detail/node_tools.hpp [3:5]
+ boost/interprocess/detail/interprocess_tester.hpp [3:5]
+ boost/interprocess/sync/shm/named_creation_functor.hpp [3:5]
+
+KEEP BSL-1.0 937b7f0a3b5ebb47be156fcbd17ef2d6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/phoenix/bind/detail/cpp03/member_function_ptr.hpp at line 5
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/phoenix/bind/detail/cpp03/member_function_ptr.hpp [4:5]
+
+KEEP BSL-1.0 959290e55386dd6d1518500478c61ec1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/limits.hpp at line 5
+ License text:
+ // (C) David Abrahams 2002. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/limits.hpp [3:5]
+
+KEEP BSL-1.0 95b08d3d1741353adb0aa5200d17d761
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/test/utils/runtime/cla/argv_traverser.hpp at line 4, boost/test/utils/runtime/cla/parser.hpp at line 4, boost/test/utils/runtime/modifier.hpp at line 4
+ License text:
+ // Use, modification, and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/test/utils/runtime/cla/argv_traverser.hpp [2:4]
+ boost/test/utils/runtime/cla/parser.hpp [2:4]
+ boost/test/utils/runtime/modifier.hpp [2:4]
+
+KEEP BSL-1.0 96478893d86ff4047edf31e2e63149c3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/assign/ptr_list_inserter.hpp at line 5, boost/assign/ptr_list_of.hpp at line 5, boost/ptr_container/clone_allocator.hpp at line 6, boost/ptr_container/detail/associative_ptr_container.hpp at line 6, boost/ptr_container/detail/map_iterator.hpp at line 6, boost/ptr_container/detail/reversible_ptr_container.hpp at line 6, boost/ptr_container/detail/scoped_deleter.hpp at line 6, boost/ptr_container/detail/void_ptr_iterator.hpp at line 6, boost/ptr_container/exception.hpp at line 6, boost/ptr_container/nullable.hpp at line 6, boost/ptr_container/ptr_array.hpp at line 6, boost/ptr_container/ptr_deque.hpp at line 6, boost/ptr_container/ptr_list.hpp at line 6, boost/ptr_container/ptr_map.hpp at line 6, boost/ptr_container/ptr_map_adapter.hpp at line 6, boost/ptr_container/ptr_sequence_adapter.hpp at line 6, boost/ptr_container/ptr_set.hpp at line 6, boost/ptr_container/ptr_set_adapter.hpp at line 6, boost/ptr_container/ptr_vector.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/assign/ptr_list_inserter.hpp [3:6]
+ boost/assign/ptr_list_of.hpp [3:6]
+ boost/ptr_container/clone_allocator.hpp [4:7]
+ boost/ptr_container/detail/associative_ptr_container.hpp [4:7]
+ boost/ptr_container/detail/map_iterator.hpp [4:7]
+ boost/ptr_container/detail/reversible_ptr_container.hpp [4:7]
+ boost/ptr_container/detail/scoped_deleter.hpp [4:7]
+ boost/ptr_container/detail/void_ptr_iterator.hpp [4:7]
+ boost/ptr_container/exception.hpp [4:7]
+ boost/ptr_container/nullable.hpp [4:7]
+ boost/ptr_container/ptr_array.hpp [4:7]
+ boost/ptr_container/ptr_deque.hpp [4:7]
+ boost/ptr_container/ptr_list.hpp [4:7]
+ boost/ptr_container/ptr_map.hpp [4:7]
+ boost/ptr_container/ptr_map_adapter.hpp [4:7]
+ boost/ptr_container/ptr_sequence_adapter.hpp [4:7]
+ boost/ptr_container/ptr_set.hpp [4:7]
+ boost/ptr_container/ptr_set_adapter.hpp [4:7]
+ boost/ptr_container/ptr_vector.hpp [4:7]
+
+KEEP BSL-1.0 974662d1636f9053127d3f90231dc590
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/locale/generic_codecvt.hpp at line 5, boost/numeric/ublas/vector.hpp at line 7
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/locale/generic_codecvt.hpp [4:6]
+ boost/numeric/ublas/vector.hpp [6:8]
+
+KEEP BSL-1.0 9789d43d789d7742ae74056e544e9848
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/cast.hpp at line 3, boost/parameter/aux_/maybe.hpp at line 3, boost/parameter/aux_/set.hpp at line 3, boost/parameter/aux_/template_keyword.hpp at line 3, boost/parameter/name.hpp at line 3, boost/parameter/preprocessor.hpp at line 3, boost/parameter/python.hpp at line 3, boost/parameter/value_type.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/parameter/aux_/cast.hpp [1:3]
+ boost/parameter/aux_/maybe.hpp [1:3]
+ boost/parameter/aux_/set.hpp [1:3]
+ boost/parameter/aux_/template_keyword.hpp [1:3]
+ boost/parameter/name.hpp [1:3]
+ boost/parameter/preprocessor.hpp [1:3]
+ boost/parameter/python.hpp [1:3]
+ boost/parameter/value_type.hpp [1:3]
+
+KEEP BSL-1.0 97bce3fe99c8cde881a7ce7abdb5af68
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/ublas_interop.hpp at line 4
+ License text:
+ // Copyright 2013 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/detail/ublas_interop.hpp [2:4]
+
+KEEP BSL-1.0 993611176c66f479092f1d200d68e07f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp at line 13, boost/numeric/odeint/algebra/multi_array_algebra.hpp at line 13, boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp at line 13, boost/numeric/odeint/external/blaze/blaze_resize.hpp at line 13, boost/numeric/odeint/external/compute/compute.hpp at line 13, boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp at line 13, boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp at line 13, boost/numeric/odeint/external/eigen/eigen.hpp at line 13, boost/numeric/odeint/external/eigen/eigen_algebra.hpp at line 13, boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp at line 13, boost/numeric/odeint/external/eigen/eigen_resize.hpp at line 13, boost/numeric/odeint/external/thrust/thrust.hpp at line 13, boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp at line 13, boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp at line 13, boost/numeric/odeint/external/vexcl/vexcl.hpp at line 13, boost/numeric/odeint/external/vexcl/vexcl_abs.hpp at line 13, boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp at line 13, boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp at line 13, boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp at line 13, boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp at line 13, boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp at line 13, boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp at line 13, boost/numeric/odeint/stepper/bulirsch_stoer.hpp at line 17, boost/numeric/odeint/stepper/extrapolation_stepper.hpp at line 12, boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp at line 13, boost/numeric/odeint/stepper/velocity_verlet.hpp at line 13, boost/numeric/odeint/util/multi_array_adaption.hpp at line 13, boost/numeric/odeint/util/stepper_traits.hpp at line 13, boost/numeric/odeint/util/unit_helper.hpp at line 13
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or
+ copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp [12:14]
+ boost/numeric/odeint/algebra/multi_array_algebra.hpp [12:14]
+ boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp [12:14]
+ boost/numeric/odeint/external/blaze/blaze_resize.hpp [12:14]
+ boost/numeric/odeint/external/compute/compute.hpp [12:14]
+ boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp [12:14]
+ boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp [12:14]
+ boost/numeric/odeint/external/eigen/eigen.hpp [12:14]
+ boost/numeric/odeint/external/eigen/eigen_algebra.hpp [12:14]
+ boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp [12:14]
+ boost/numeric/odeint/external/eigen/eigen_resize.hpp [12:14]
+ boost/numeric/odeint/external/thrust/thrust.hpp [12:14]
+ boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp [12:14]
+ boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp [12:14]
+ boost/numeric/odeint/external/vexcl/vexcl.hpp [12:14]
+ boost/numeric/odeint/external/vexcl/vexcl_abs.hpp [12:14]
+ boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp [12:14]
+ boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp [12:14]
+ boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp [12:14]
+ boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp [12:14]
+ boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp [12:14]
+ boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp [12:14]
+ boost/numeric/odeint/stepper/bulirsch_stoer.hpp [16:18]
+ boost/numeric/odeint/stepper/extrapolation_stepper.hpp [11:13]
+ boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp [12:14]
+ boost/numeric/odeint/stepper/velocity_verlet.hpp [12:14]
+ boost/numeric/odeint/util/multi_array_adaption.hpp [12:14]
+ boost/numeric/odeint/util/stepper_traits.hpp [12:14]
+ boost/numeric/odeint/util/unit_helper.hpp [12:14]
+
+KEEP BSL-1.0 996aeb007415a6ef8ea5b321bc17500c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/array.hpp at line 6, boost/preprocessor/array/detail/get_data.hpp at line 5, boost/preprocessor/array/enum.hpp at line 6, boost/preprocessor/array/to_list.hpp at line 6, boost/preprocessor/array/to_seq.hpp at line 6, boost/preprocessor/array/to_tuple.hpp at line 6, boost/preprocessor/facilities.hpp at line 6, boost/preprocessor/facilities/overload.hpp at line 6, boost/preprocessor/library.hpp at line 6, boost/preprocessor/repetition/enum_shifted_binary_params.hpp at line 5, boost/preprocessor/seq.hpp at line 6, boost/preprocessor/seq/detail/binary_transform.hpp at line 5, boost/preprocessor/seq/detail/to_list_msvc.hpp at line 5, boost/preprocessor/seq/to_list.hpp at line 6, boost/preprocessor/seq/variadic_seq_to_seq.hpp at line 5, boost/preprocessor/slot/counter.hpp at line 5, boost/preprocessor/tuple/detail/is_single_return.hpp at line 5, boost/preprocessor/tuple/enum.hpp at line 6, boost/preprocessor/tuple/size.hpp at line 6, boost/preprocessor/tuple/to_array.hpp at line 6, boost/preprocessor/variadic.hpp at line 6, boost/preprocessor/variadic/detail/is_single_return.hpp at line 5, boost/preprocessor/variadic/to_array.hpp at line 6, boost/preprocessor/variadic/to_list.hpp at line 6, boost/preprocessor/variadic/to_seq.hpp at line 6, boost/preprocessor/variadic/to_tuple.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/preprocessor/array.hpp [5:7]
+ boost/preprocessor/array/detail/get_data.hpp [4:6]
+ boost/preprocessor/array/enum.hpp [5:7]
+ boost/preprocessor/array/to_list.hpp [5:7]
+ boost/preprocessor/array/to_seq.hpp [5:7]
+ boost/preprocessor/array/to_tuple.hpp [5:7]
+ boost/preprocessor/facilities.hpp [5:7]
+ boost/preprocessor/facilities/overload.hpp [5:7]
+ boost/preprocessor/library.hpp [5:7]
+ boost/preprocessor/repetition/enum_shifted_binary_params.hpp [4:6]
+ boost/preprocessor/seq.hpp [5:7]
+ boost/preprocessor/seq/detail/binary_transform.hpp [4:6]
+ boost/preprocessor/seq/detail/to_list_msvc.hpp [4:6]
+ boost/preprocessor/seq/to_list.hpp [5:7]
+ boost/preprocessor/seq/variadic_seq_to_seq.hpp [4:6]
+ boost/preprocessor/slot/counter.hpp [4:6]
+ boost/preprocessor/tuple/detail/is_single_return.hpp [4:6]
+ boost/preprocessor/tuple/enum.hpp [5:7]
+ boost/preprocessor/tuple/size.hpp [5:7]
+ boost/preprocessor/tuple/to_array.hpp [5:7]
+ boost/preprocessor/variadic.hpp [5:7]
+ boost/preprocessor/variadic/detail/is_single_return.hpp [4:6]
+ boost/preprocessor/variadic/to_array.hpp [5:7]
+ boost/preprocessor/variadic/to_list.hpp [5:7]
+ boost/preprocessor/variadic/to_seq.hpp [5:7]
+ boost/preprocessor/variadic/to_tuple.hpp [5:7]
+
+KEEP BSL-1.0 99a2517494483ddaf8422369bcf4f9f9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/sort/common/deque_cnc.hpp at line 8, boost/sort/common/file_vector.hpp at line 9, boost/sort/common/int_array.hpp at line 9, boost/sort/common/range.hpp at line 7, boost/sort/common/scheduler.hpp at line 8, boost/sort/common/spinlock.hpp at line 7, boost/sort/common/stack_cnc.hpp at line 7, boost/sort/common/time_measure.hpp at line 8, boost/sort/common/util/circular_buffer.hpp at line 7
+ License text:
+ /// Distributed under the Boost Software License, Version 1.0.\n
+ /// ( See accompanyingfile LICENSE_1_0.txt or copy at
+ /// http://www.boost.org/LICENSE_1_0.txt )
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.59
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/sort/common/deque_cnc.hpp [7:9]
+ boost/sort/common/file_vector.hpp [8:10]
+ boost/sort/common/int_array.hpp [8:10]
+ boost/sort/common/range.hpp [6:8]
+ boost/sort/common/scheduler.hpp [7:9]
+ boost/sort/common/spinlock.hpp [6:8]
+ boost/sort/common/stack_cnc.hpp [6:8]
+ boost/sort/common/time_measure.hpp [7:9]
+ boost/sort/common/util/circular_buffer.hpp [6:8]
+
+KEEP Mit-Old-Style 99b210ed9efe704d061e43a6c4c4beb3
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-mit-old-style
+ Score : 100.00
+ Match type : TEXT
+ Links : http://fedoraproject.org/wiki/Licensing:MIT#Old_Style, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE
+ Files with this license:
+ boost/detail/algorithm.hpp [22:28]
+ boost/interprocess/streams/bufferstream.hpp [20:26]
+ boost/interprocess/streams/vectorstream.hpp [20:26]
+ boost/multi_index/detail/ord_index_impl.hpp [14:20]
+ boost/multi_index/detail/ord_index_node.hpp [14:20]
+ boost/multi_index/detail/ord_index_ops.hpp [14:20]
+
+KEEP BSL-1.0 99b6858285788dea8099fc1db476bbc4
+BELONGS ya.make
+ License text:
+ Many thanks to Howard for making his code available under the Boost license.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 99.00
+ Match type : REFERENCE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/chrono/duration.hpp [13:13]
+ boost/chrono/system_clocks.hpp [13:13]
+ boost/chrono/time_point.hpp [13:13]
+ boost/ratio/detail/overflow_helpers.hpp [13:13]
+ boost/ratio/ratio.hpp [13:13]
+ boost/ratio/ratio_fwd.hpp [13:13]
+
+KEEP BSL-1.0 9a500d42904daddc6b36adcda04d4788
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/program_options/config.hpp at line 4
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/program_options/config.hpp [3:5]
+
+KEEP Mit-Old-Style 9b8db1be709ff8d6f1f61d67245cc319
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-mit-old-style
+ Score : 100.00
+ Match type : TEXT
+ Links : http://fedoraproject.org/wiki/Licensing:MIT#Old_Style, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE
+ Files with this license:
+ boost/detail/binary_search.hpp [20:26]
+ boost/multi_array/algorithm.hpp [21:27]
+
+KEEP BSL-1.0 9d20a7ec1d8fe9db95139a9118182659
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/smart_cast.hpp at line 14, boost/serialization/state_saver.hpp at line 14, boost/serialization/strong_typedef.hpp at line 15
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.74
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/serialization/smart_cast.hpp [13:17]
+ boost/serialization/state_saver.hpp [13:17]
+ boost/serialization/strong_typedef.hpp [14:18]
+
+KEEP BSL-1.0 9d31b67c9d23516796387b3bb5abe050
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/singleton.hpp at line 14
+ License text:
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/serialization/singleton.hpp [12:14]
+
+KEEP BSL-1.0 9e5c81a5e33b167767ac3b6aa4556426
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/fenv.hpp at line 5, boost/detail/is_sorted.hpp at line 5, boost/fusion/adapted.hpp at line 6, boost/fusion/adapted/adt.hpp at line 7, boost/fusion/adapted/adt/adapt_adt.hpp at line 8, boost/fusion/adapted/adt/adapt_adt_named.hpp at line 7, boost/fusion/adapted/adt/adapt_assoc_adt.hpp at line 8, boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp at line 5, boost/fusion/adapted/adt/detail/adapt_base.hpp at line 7, boost/fusion/adapted/adt/detail/adapt_base_assoc_attr_filler.hpp at line 5, boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp at line 5, boost/fusion/adapted/adt/detail/extension.hpp at line 7, boost/fusion/adapted/array/deref_impl.hpp at line 5, boost/fusion/adapted/array/size_impl.hpp at line 5, boost/fusion/adapted/array/value_of_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/build_cons.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/convert_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/mpl/clear.hpp at line 5, boost/fusion/adapted/mpl.hpp at line 6, boost/fusion/adapted/mpl/detail/empty_impl.hpp at line 6, boost/fusion/adapted/std_pair.hpp at line 7, boost/fusion/adapted/std_tuple.hpp at line 5, boost/fusion/adapted/std_tuple/detail/at_impl.hpp at line 5, boost/fusion/adapted/std_tuple/detail/begin_impl.hpp at line 5, boost/fusion/adapted/std_tuple/detail/build_std_tuple.hpp at line 5, boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp at line 5, boost/fusion/adapted/std_tuple/detail/convert_impl.hpp at line 5, boost/fusion/adapted/std_tuple/detail/end_impl.hpp at line 5, boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp at line 5, boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp at line 5, boost/fusion/adapted/std_tuple/detail/size_impl.hpp at line 5, boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp at line 5, boost/fusion/adapted/std_tuple/mpl/clear.hpp at line 5, boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp at line 5, boost/fusion/adapted/std_tuple/tag_of.hpp at line 5, boost/fusion/adapted/struct.hpp at line 7, boost/fusion/adapted/struct/adapt_assoc_struct.hpp at line 7, boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp at line 5, boost/fusion/adapted/struct/adapt_struct.hpp at line 7, boost/fusion/adapted/struct/adapt_struct_named.hpp at line 7, boost/fusion/adapted/struct/define_assoc_struct.hpp at line 5, boost/fusion/adapted/struct/define_struct.hpp at line 5, boost/fusion/adapted/struct/define_struct_inline.hpp at line 5, boost/fusion/adapted/struct/detail/adapt_auto.hpp at line 5, boost/fusion/adapted/struct/detail/adapt_base.hpp at line 8, boost/fusion/adapted/struct/detail/adapt_base_assoc_attr_filler.hpp at line 5, boost/fusion/adapted/struct/detail/adapt_base_attr_filler.hpp at line 5, boost/fusion/adapted/struct/detail/adapt_is_tpl.hpp at line 5, boost/fusion/adapted/struct/detail/at_impl.hpp at line 7, boost/fusion/adapted/struct/detail/begin_impl.hpp at line 7, boost/fusion/adapted/struct/detail/category_of_impl.hpp at line 7, boost/fusion/adapted/struct/detail/define_struct.hpp at line 5, boost/fusion/adapted/struct/detail/define_struct_inline.hpp at line 5, boost/fusion/adapted/struct/detail/deref_data_impl.hpp at line 5, boost/fusion/adapted/struct/detail/deref_impl.hpp at line 5, boost/fusion/adapted/struct/detail/end_impl.hpp at line 7, boost/fusion/adapted/struct/detail/extension.hpp at line 7, boost/fusion/adapted/struct/detail/is_sequence_impl.hpp at line 7, boost/fusion/adapted/struct/detail/is_view_impl.hpp at line 7, boost/fusion/adapted/struct/detail/key_of_impl.hpp at line 5, boost/fusion/adapted/struct/detail/namespace.hpp at line 6, boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp at line 9, boost/fusion/adapted/struct/detail/proxy_type.hpp at line 6, boost/fusion/adapted/struct/detail/size_impl.hpp at line 7, boost/fusion/adapted/struct/detail/value_at_impl.hpp at line 7, boost/fusion/adapted/struct/detail/value_of_data_impl.hpp at line 5, boost/fusion/adapted/struct/detail/value_of_impl.hpp at line 5, boost/fusion/algorithm/auxiliary.hpp at line 5, boost/fusion/algorithm/auxiliary/copy.hpp at line 5, boost/fusion/algorithm/auxiliary/move.hpp at line 5, boost/fusion/algorithm/iteration/detail/fold.hpp at line 8, boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp at line 7, boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp at line 6, boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp at line 6, boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp at line 6, boost/fusion/algorithm/iteration/fold.hpp at line 40, boost/fusion/algorithm/iteration/fold.hpp at line 8, boost/fusion/algorithm/iteration/fold_fwd.hpp at line 5, boost/fusion/algorithm/iteration/iter_fold.hpp at line 41, boost/fusion/algorithm/iteration/iter_fold.hpp at line 7, boost/fusion/algorithm/iteration/iter_fold_fwd.hpp at line 5, boost/fusion/algorithm/iteration/reverse_fold.hpp at line 41, boost/fusion/algorithm/iteration/reverse_fold.hpp at line 7, boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp at line 5, boost/fusion/algorithm/iteration/reverse_iter_fold.hpp at line 41, boost/fusion/algorithm/iteration/reverse_iter_fold.hpp at line 7, boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp at line 5, boost/fusion/algorithm/transformation/detail/preprocessed/zip.hpp at line 5, boost/fusion/algorithm/transformation/erase.hpp at line 5, boost/fusion/algorithm/transformation/flatten.hpp at line 5, boost/fusion/algorithm/transformation/insert.hpp at line 5, boost/fusion/algorithm/transformation/insert_range.hpp at line 5, boost/fusion/algorithm/transformation/pop_back.hpp at line 5, boost/fusion/algorithm/transformation/zip.hpp at line 47, boost/fusion/algorithm/transformation/zip.hpp at line 6, boost/fusion/container.hpp at line 5, boost/fusion/container/deque.hpp at line 6, boost/fusion/container/deque/back_extended_deque.hpp at line 6, boost/fusion/container/deque/convert.hpp at line 6, boost/fusion/container/deque/deque.hpp at line 6, boost/fusion/container/deque/deque_fwd.hpp at line 6, boost/fusion/container/deque/deque_iterator.hpp at line 6, boost/fusion/container/deque/detail/at_impl.hpp at line 6, boost/fusion/container/deque/detail/begin_impl.hpp at line 6, boost/fusion/container/deque/detail/build_deque.hpp at line 5, boost/fusion/container/deque/detail/convert_impl.hpp at line 7, boost/fusion/container/deque/detail/cpp03/as_deque.hpp at line 6, boost/fusion/container/deque/detail/cpp03/as_deque.hpp at line 69, boost/fusion/container/deque/detail/cpp03/build_deque.hpp at line 5, boost/fusion/container/deque/detail/cpp03/deque.hpp at line 54, boost/fusion/container/deque/detail/cpp03/deque.hpp at line 6, boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp at line 6, boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp at line 29, boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp at line 6, boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp at line 38, boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp at line 6, boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp at line 46, boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp at line 6, boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp at line 6, boost/fusion/container/deque/detail/cpp03/limits.hpp at line 6, boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp at line 5, boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp at line 5, boost/fusion/container/deque/detail/deque_keyed_values.hpp at line 6, boost/fusion/container/deque/detail/end_impl.hpp at line 6, boost/fusion/container/deque/detail/is_sequence_impl.hpp at line 5, boost/fusion/container/deque/detail/keyed_element.hpp at line 6, boost/fusion/container/deque/detail/value_at_impl.hpp at line 6, boost/fusion/container/deque/front_extended_deque.hpp at line 6, boost/fusion/container/generation.hpp at line 5, boost/fusion/container/generation/deque_tie.hpp at line 5, boost/fusion/container/generation/detail/pp_deque_tie.hpp at line 31, boost/fusion/container/generation/detail/pp_deque_tie.hpp at line 6, boost/fusion/container/generation/detail/pp_list_tie.hpp at line 30, boost/fusion/container/generation/detail/pp_list_tie.hpp at line 5, boost/fusion/container/generation/detail/pp_make_deque.hpp at line 31, boost/fusion/container/generation/detail/pp_make_deque.hpp at line 6, boost/fusion/container/generation/detail/pp_make_list.hpp at line 30, boost/fusion/container/generation/detail/pp_make_list.hpp at line 5, boost/fusion/container/generation/detail/pp_make_map.hpp at line 31, boost/fusion/container/generation/detail/pp_make_map.hpp at line 5, boost/fusion/container/generation/detail/pp_make_set.hpp at line 32, boost/fusion/container/generation/detail/pp_make_set.hpp at line 5, boost/fusion/container/generation/detail/pp_make_vector.hpp at line 30, boost/fusion/container/generation/detail/pp_make_vector.hpp at line 5, boost/fusion/container/generation/detail/pp_map_tie.hpp at line 34, boost/fusion/container/generation/detail/pp_map_tie.hpp at line 6, boost/fusion/container/generation/detail/pp_vector_tie.hpp at line 30, boost/fusion/container/generation/detail/pp_vector_tie.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/list_tie.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_deque.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_list.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_map.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_set.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/make_vector.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/map_tie.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/vector_tie.hpp at line 5, boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp at line 5, boost/fusion/container/generation/list_tie.hpp at line 5, boost/fusion/container/generation/make_deque.hpp at line 5, boost/fusion/container/generation/make_list.hpp at line 5, boost/fusion/container/generation/make_map.hpp at line 5, boost/fusion/container/generation/make_set.hpp at line 5, boost/fusion/container/generation/make_vector.hpp at line 5, boost/fusion/container/generation/map_tie.hpp at line 5, boost/fusion/container/generation/vector_tie.hpp at line 5, boost/fusion/container/list.hpp at line 5, boost/fusion/container/list/cons_fwd.hpp at line 6, boost/fusion/container/list/convert.hpp at line 5, boost/fusion/container/list/detail/at_impl.hpp at line 5, boost/fusion/container/list/detail/convert_impl.hpp at line 6, boost/fusion/container/list/detail/cpp03/limits.hpp at line 5, boost/fusion/container/list/detail/cpp03/list.hpp at line 29, boost/fusion/container/list/detail/cpp03/list.hpp at line 5, boost/fusion/container/list/detail/cpp03/list_fwd.hpp at line 25, boost/fusion/container/list/detail/cpp03/list_fwd.hpp at line 5, boost/fusion/container/list/detail/cpp03/list_to_cons.hpp at line 37, boost/fusion/container/list/detail/cpp03/list_to_cons.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list10_fwd.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list_fwd.hpp at line 5, boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons.hpp at line 5, boost/fusion/container/list/detail/list_to_cons.hpp at line 5, boost/fusion/container/list/detail/reverse_cons.hpp at line 5, boost/fusion/container/list/list.hpp at line 5, boost/fusion/container/list/list_fwd.hpp at line 5, boost/fusion/container/map.hpp at line 5, boost/fusion/container/map/convert.hpp at line 5, boost/fusion/container/map/detail/at_impl.hpp at line 5, boost/fusion/container/map/detail/at_key_impl.hpp at line 5, boost/fusion/container/map/detail/begin_impl.hpp at line 5, boost/fusion/container/map/detail/build_map.hpp at line 5, boost/fusion/container/map/detail/cpp03/as_map.hpp at line 5, boost/fusion/container/map/detail/cpp03/as_map.hpp at line 68, boost/fusion/container/map/detail/cpp03/begin_impl.hpp at line 6, boost/fusion/container/map/detail/cpp03/convert.hpp at line 5, boost/fusion/container/map/detail/cpp03/convert_impl.hpp at line 6, boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp at line 5, boost/fusion/container/map/detail/cpp03/deref_impl.hpp at line 5, boost/fusion/container/map/detail/cpp03/end_impl.hpp at line 6, boost/fusion/container/map/detail/cpp03/key_of_impl.hpp at line 5, boost/fusion/container/map/detail/cpp03/limits.hpp at line 5, boost/fusion/container/map/detail/cpp03/map.hpp at line 48, boost/fusion/container/map/detail/cpp03/map.hpp at line 5, boost/fusion/container/map/detail/cpp03/map_fwd.hpp at line 25, boost/fusion/container/map/detail/cpp03/map_fwd.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/as_map.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map10_fwd.hpp at line 5, boost/fusion/container/map/detail/cpp03/preprocessed/map_fwd.hpp at line 5, boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp at line 5, boost/fusion/container/map/detail/cpp03/value_of_impl.hpp at line 5, boost/fusion/container/map/detail/end_impl.hpp at line 5, boost/fusion/container/map/detail/map_impl.hpp at line 5, boost/fusion/container/map/detail/map_index.hpp at line 5, boost/fusion/container/map/detail/value_at_impl.hpp at line 5, boost/fusion/container/map/detail/value_at_key_impl.hpp at line 5, boost/fusion/container/map/map.hpp at line 5, boost/fusion/container/map/map_fwd.hpp at line 5, boost/fusion/container/map/map_iterator.hpp at line 6, boost/fusion/container/set.hpp at line 5, boost/fusion/container/set/convert.hpp at line 5, boost/fusion/container/set/detail/as_set.hpp at line 5, boost/fusion/container/set/detail/begin_impl.hpp at line 6, boost/fusion/container/set/detail/convert_impl.hpp at line 6, boost/fusion/container/set/detail/cpp03/as_set.hpp at line 5, boost/fusion/container/set/detail/cpp03/as_set.hpp at line 68, boost/fusion/container/set/detail/cpp03/limits.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/as_set.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set10_fwd.hpp at line 5, boost/fusion/container/set/detail/cpp03/preprocessed/set_fwd.hpp at line 5, boost/fusion/container/set/detail/cpp03/set.hpp at line 41, boost/fusion/container/set/detail/cpp03/set.hpp at line 5, boost/fusion/container/set/detail/cpp03/set_fwd.hpp at line 25, boost/fusion/container/set/detail/cpp03/set_fwd.hpp at line 5, boost/fusion/container/set/detail/deref_data_impl.hpp at line 5, boost/fusion/container/set/detail/deref_impl.hpp at line 5, boost/fusion/container/set/detail/end_impl.hpp at line 6, boost/fusion/container/set/detail/key_of_impl.hpp at line 5, boost/fusion/container/set/detail/value_of_data_impl.hpp at line 5, boost/fusion/container/set/detail/value_of_impl.hpp at line 5, boost/fusion/container/set/set.hpp at line 5, boost/fusion/container/set/set_fwd.hpp at line 5, boost/fusion/container/vector.hpp at line 5, boost/fusion/container/vector/convert.hpp at line 5, boost/fusion/container/vector/detail/as_vector.hpp at line 5, boost/fusion/container/vector/detail/at_impl.hpp at line 5, boost/fusion/container/vector/detail/config.hpp at line 5, boost/fusion/container/vector/detail/convert_impl.hpp at line 6, boost/fusion/container/vector/detail/cpp03/as_vector.hpp at line 5, boost/fusion/container/vector/detail/cpp03/as_vector.hpp at line 68, boost/fusion/container/vector/detail/cpp03/limits.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector10_fwd.hpp at line 6, boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser10.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vector_fwd.hpp at line 5, boost/fusion/container/vector/detail/cpp03/preprocessed/vvector10_fwd.hpp at line 5, boost/fusion/container/vector/detail/cpp03/value_at_impl.hpp at line 5, boost/fusion/container/vector/detail/cpp03/vector.hpp at line 6, boost/fusion/container/vector/detail/cpp03/vector.hpp at line 73, boost/fusion/container/vector/detail/cpp03/vector10.hpp at line 5, boost/fusion/container/vector/detail/cpp03/vector10.hpp at line 76, boost/fusion/container/vector/detail/cpp03/vector10_fwd.hpp at line 35, boost/fusion/container/vector/detail/cpp03/vector10_fwd.hpp at line 7, boost/fusion/container/vector/detail/cpp03/vector20.hpp at line 51, boost/fusion/container/vector/detail/cpp03/vector20.hpp at line 6, boost/fusion/container/vector/detail/cpp03/vector20_fwd.hpp at line 29, boost/fusion/container/vector/detail/cpp03/vector20_fwd.hpp at line 7, boost/fusion/container/vector/detail/cpp03/vector30.hpp at line 5, boost/fusion/container/vector/detail/cpp03/vector30.hpp at line 50, boost/fusion/container/vector/detail/cpp03/vector30_fwd.hpp at line 29, boost/fusion/container/vector/detail/cpp03/vector30_fwd.hpp at line 7, boost/fusion/container/vector/detail/cpp03/vector40.hpp at line 51, boost/fusion/container/vector/detail/cpp03/vector40.hpp at line 6, boost/fusion/container/vector/detail/cpp03/vector40_fwd.hpp at line 29, boost/fusion/container/vector/detail/cpp03/vector40_fwd.hpp at line 7, boost/fusion/container/vector/detail/cpp03/vector50.hpp at line 5, boost/fusion/container/vector/detail/cpp03/vector50.hpp at line 50, boost/fusion/container/vector/detail/cpp03/vector50_fwd.hpp at line 29, boost/fusion/container/vector/detail/cpp03/vector50_fwd.hpp at line 7, boost/fusion/container/vector/detail/cpp03/vector_forward_ctor.hpp at line 5, boost/fusion/container/vector/detail/cpp03/vector_fwd.hpp at line 40, boost/fusion/container/vector/detail/cpp03/vector_fwd.hpp at line 6, boost/fusion/container/vector/detail/cpp03/vector_n.hpp at line 5, boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp at line 5, boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp at line 51, boost/fusion/container/vector/detail/value_at_impl.hpp at line 5, boost/fusion/container/vector/vector.hpp at line 5, boost/fusion/container/vector/vector10.hpp at line 5, boost/fusion/container/vector/vector20.hpp at line 5, boost/fusion/container/vector/vector30.hpp at line 5, boost/fusion/container/vector/vector40.hpp at line 5, boost/fusion/container/vector/vector50.hpp at line 5, boost/fusion/container/vector/vector_fwd.hpp at line 5, boost/fusion/include/accumulate.hpp at line 5, boost/fusion/include/adapt_adt.hpp at line 5, boost/fusion/include/adapt_adt_named.hpp at line 5, boost/fusion/include/adapt_assoc_adt.hpp at line 5, boost/fusion/include/adapt_assoc_adt_named.hpp at line 5, boost/fusion/include/adapt_assoc_struct.hpp at line 5, boost/fusion/include/adapt_assoc_struct_named.hpp at line 5, boost/fusion/include/adapt_struct.hpp at line 5, boost/fusion/include/adapt_struct_named.hpp at line 5, boost/fusion/include/adapted.hpp at line 5, boost/fusion/include/adapter.hpp at line 5, boost/fusion/include/advance.hpp at line 5, boost/fusion/include/algorithm.hpp at line 5, boost/fusion/include/all.hpp at line 5, boost/fusion/include/any.hpp at line 5, boost/fusion/include/array.hpp at line 5, boost/fusion/include/as_deque.hpp at line 5, boost/fusion/include/as_list.hpp at line 5, boost/fusion/include/as_map.hpp at line 5, boost/fusion/include/as_set.hpp at line 5, boost/fusion/include/at_c.hpp at line 5, boost/fusion/include/at_key.hpp at line 5, boost/fusion/include/auxiliary.hpp at line 5, boost/fusion/include/back.hpp at line 5, boost/fusion/include/begin.hpp at line 5, boost/fusion/include/boost_array.hpp at line 5, boost/fusion/include/boost_tuple.hpp at line 5, boost/fusion/include/category_of.hpp at line 5, boost/fusion/include/clear.hpp at line 5, boost/fusion/include/comparison.hpp at line 5, boost/fusion/include/cons.hpp at line 5, boost/fusion/include/cons_tie.hpp at line 5, boost/fusion/include/container.hpp at line 5, boost/fusion/include/convert.hpp at line 5, boost/fusion/include/copy.hpp at line 5, boost/fusion/include/count.hpp at line 5, boost/fusion/include/count_if.hpp at line 5, boost/fusion/include/deduce.hpp at line 5, boost/fusion/include/deduce_sequence.hpp at line 5, boost/fusion/include/define_assoc_struct.hpp at line 5, boost/fusion/include/define_struct.hpp at line 5, boost/fusion/include/define_struct_inline.hpp at line 5, boost/fusion/include/deque.hpp at line 5, boost/fusion/include/deque_fwd.hpp at line 5, boost/fusion/include/deque_tie.hpp at line 5, boost/fusion/include/deref.hpp at line 5, boost/fusion/include/deref_data.hpp at line 5, boost/fusion/include/distance.hpp at line 5, boost/fusion/include/empty.hpp at line 5, boost/fusion/include/end.hpp at line 5, boost/fusion/include/equal_to.hpp at line 5, boost/fusion/include/erase.hpp at line 5, boost/fusion/include/erase_key.hpp at line 5, boost/fusion/include/filter.hpp at line 5, boost/fusion/include/filter_if.hpp at line 5, boost/fusion/include/filter_view.hpp at line 5, boost/fusion/include/find.hpp at line 5, boost/fusion/include/find_if.hpp at line 5, boost/fusion/include/flatten.hpp at line 5, boost/fusion/include/flatten_view.hpp at line 5, boost/fusion/include/fold.hpp at line 5, boost/fusion/include/for_each.hpp at line 5, boost/fusion/include/front.hpp at line 5, boost/fusion/include/functional.hpp at line 5, boost/fusion/include/fused.hpp at line 5, boost/fusion/include/fused_function_object.hpp at line 5, boost/fusion/include/fused_procedure.hpp at line 5, boost/fusion/include/generation.hpp at line 5, boost/fusion/include/greater.hpp at line 5, boost/fusion/include/greater_equal.hpp at line 5, boost/fusion/include/has_key.hpp at line 5, boost/fusion/include/hash.hpp at line 5, boost/fusion/include/ignore.hpp at line 5, boost/fusion/include/in.hpp at line 5, boost/fusion/include/insert.hpp at line 5, boost/fusion/include/insert_range.hpp at line 5, boost/fusion/include/intrinsic.hpp at line 5, boost/fusion/include/invocation.hpp at line 5, boost/fusion/include/invoke.hpp at line 5, boost/fusion/include/invoke_function_object.hpp at line 5, boost/fusion/include/invoke_procedure.hpp at line 5, boost/fusion/include/is_iterator.hpp at line 5, boost/fusion/include/is_segmented.hpp at line 5, boost/fusion/include/is_view.hpp at line 5, boost/fusion/include/iter_fold.hpp at line 5, boost/fusion/include/iteration.hpp at line 5, boost/fusion/include/iterator.hpp at line 5, boost/fusion/include/iterator_adapter.hpp at line 5, boost/fusion/include/iterator_base.hpp at line 5, boost/fusion/include/iterator_facade.hpp at line 5, boost/fusion/include/iterator_range.hpp at line 5, boost/fusion/include/key_of.hpp at line 5, boost/fusion/include/less.hpp at line 5, boost/fusion/include/less_equal.hpp at line 5, boost/fusion/include/list.hpp at line 5, boost/fusion/include/list_fwd.hpp at line 5, boost/fusion/include/list_tie.hpp at line 5, boost/fusion/include/make_cons.hpp at line 5, boost/fusion/include/make_deque.hpp at line 5, boost/fusion/include/make_fused.hpp at line 5, boost/fusion/include/make_fused_function_object.hpp at line 5, boost/fusion/include/make_fused_procedure.hpp at line 5, boost/fusion/include/make_list.hpp at line 5, boost/fusion/include/make_map.hpp at line 5, boost/fusion/include/make_set.hpp at line 5, boost/fusion/include/make_tuple.hpp at line 5, boost/fusion/include/make_unfused.hpp at line 5, boost/fusion/include/make_vector.hpp at line 5, boost/fusion/include/map.hpp at line 5, boost/fusion/include/map_fwd.hpp at line 5, boost/fusion/include/map_tie.hpp at line 5, boost/fusion/include/move.hpp at line 5, boost/fusion/include/mpl.hpp at line 5, boost/fusion/include/next.hpp at line 5, boost/fusion/include/nil.hpp at line 5, boost/fusion/include/none.hpp at line 5, boost/fusion/include/not_equal_to.hpp at line 5, boost/fusion/include/nview.hpp at line 5, boost/fusion/include/out.hpp at line 5, boost/fusion/include/pair.hpp at line 5, boost/fusion/include/pair_tie.hpp at line 5, boost/fusion/include/pop_back.hpp at line 5, boost/fusion/include/pop_front.hpp at line 5, boost/fusion/include/prior.hpp at line 5, boost/fusion/include/proxy_type.hpp at line 5, boost/fusion/include/push_back.hpp at line 5, boost/fusion/include/query.hpp at line 5, boost/fusion/include/remove.hpp at line 5, boost/fusion/include/remove_if.hpp at line 5, boost/fusion/include/repetitive_view.hpp at line 5, boost/fusion/include/replace.hpp at line 5, boost/fusion/include/replace_if.hpp at line 5, boost/fusion/include/reverse.hpp at line 5, boost/fusion/include/reverse_fold.hpp at line 5, boost/fusion/include/reverse_iter_fold.hpp at line 5, boost/fusion/include/reverse_view.hpp at line 5, boost/fusion/include/segmented_fold_until.hpp at line 5, boost/fusion/include/segmented_iterator.hpp at line 5, boost/fusion/include/segments.hpp at line 5, boost/fusion/include/sequence.hpp at line 5, boost/fusion/include/sequence_base.hpp at line 5, boost/fusion/include/sequence_facade.hpp at line 5, boost/fusion/include/set.hpp at line 5, boost/fusion/include/set_fwd.hpp at line 5, boost/fusion/include/size.hpp at line 5, boost/fusion/include/std_array.hpp at line 5, boost/fusion/include/std_pair.hpp at line 5, boost/fusion/include/std_tuple.hpp at line 4, boost/fusion/include/struct.hpp at line 5, boost/fusion/include/support.hpp at line 5, boost/fusion/include/swap.hpp at line 5, boost/fusion/include/tag_of.hpp at line 5, boost/fusion/include/tag_of_fwd.hpp at line 5, boost/fusion/include/transformation.hpp at line 5, boost/fusion/include/tuple.hpp at line 5, boost/fusion/include/tuple_fwd.hpp at line 5, boost/fusion/include/tuple_tie.hpp at line 5, boost/fusion/include/unfused.hpp at line 5, boost/fusion/include/unfused_typed.hpp at line 5, boost/fusion/include/unused.hpp at line 5, boost/fusion/include/value_at_key.hpp at line 5, boost/fusion/include/value_of.hpp at line 5, boost/fusion/include/value_of_data.hpp at line 5, boost/fusion/include/vector.hpp at line 5, boost/fusion/include/vector10.hpp at line 5, boost/fusion/include/vector20.hpp at line 5, boost/fusion/include/vector30.hpp at line 5, boost/fusion/include/vector40.hpp at line 5, boost/fusion/include/vector50.hpp at line 5, boost/fusion/include/vector_fwd.hpp at line 5, boost/fusion/include/vector_tie.hpp at line 5, boost/fusion/include/view.hpp at line 5, boost/fusion/include/void.hpp at line 5, boost/fusion/include/zip.hpp at line 5, boost/fusion/include/zip_view.hpp at line 5, boost/fusion/iterator.hpp at line 5, boost/fusion/iterator/advance.hpp at line 5, boost/fusion/iterator/basic_iterator.hpp at line 5, boost/fusion/iterator/deref_data.hpp at line 5, boost/fusion/iterator/detail/segment_sequence.hpp at line 5, boost/fusion/iterator/detail/segmented_equal_to.hpp at line 5, boost/fusion/iterator/detail/segmented_iterator.hpp at line 5, boost/fusion/iterator/detail/segmented_next_impl.hpp at line 5, boost/fusion/iterator/equal_to.hpp at line 5, boost/fusion/iterator/iterator_adapter.hpp at line 5, boost/fusion/iterator/iterator_facade.hpp at line 5, boost/fusion/iterator/key_of.hpp at line 5, boost/fusion/iterator/mpl/convert_iterator.hpp at line 5, boost/fusion/iterator/segmented_iterator.hpp at line 5, boost/fusion/iterator/value_of_data.hpp at line 5, boost/fusion/mpl.hpp at line 5, boost/fusion/mpl/erase.hpp at line 5, boost/fusion/mpl/erase_key.hpp at line 5, boost/fusion/mpl/insert.hpp at line 5, boost/fusion/mpl/insert_range.hpp at line 5, boost/fusion/mpl/pop_back.hpp at line 5, boost/fusion/mpl/pop_front.hpp at line 5, boost/fusion/mpl/push_back.hpp at line 5, boost/fusion/mpl/push_front.hpp at line 5, boost/fusion/sequence.hpp at line 5, boost/fusion/sequence/comparison/enable_comparison.hpp at line 5, boost/fusion/sequence/comparison/equal_to.hpp at line 6, boost/fusion/sequence/comparison/greater.hpp at line 6, boost/fusion/sequence/comparison/greater_equal.hpp at line 6, boost/fusion/sequence/comparison/less.hpp at line 6, boost/fusion/sequence/comparison/less_equal.hpp at line 6, boost/fusion/sequence/comparison/not_equal_to.hpp at line 6, boost/fusion/sequence/convert.hpp at line 5, boost/fusion/sequence/hash.hpp at line 5, boost/fusion/sequence/intrinsic.hpp at line 5, boost/fusion/sequence/intrinsic/at.hpp at line 5, boost/fusion/sequence/intrinsic/at_c.hpp at line 5, boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp at line 5, boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp at line 5, boost/fusion/sequence/intrinsic/detail/segmented_end.hpp at line 5, boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp at line 5, boost/fusion/sequence/intrinsic_fwd.hpp at line 5, boost/fusion/sequence/io/in.hpp at line 7, boost/fusion/sequence/sequence_facade.hpp at line 5, boost/fusion/support.hpp at line 5, boost/fusion/support/as_const.hpp at line 5, boost/fusion/support/config.hpp at line 6, boost/fusion/support/detail/access.hpp at line 5, boost/fusion/support/detail/and.hpp at line 5, boost/fusion/support/detail/enabler.hpp at line 5, boost/fusion/support/detail/index_sequence.hpp at line 6, boost/fusion/support/detail/is_same_size.hpp at line 5, boost/fusion/support/detail/pp_round.hpp at line 5, boost/fusion/support/detail/segmented_fold_until_impl.hpp at line 5, boost/fusion/support/is_sequence.hpp at line 5, boost/fusion/support/iterator_base.hpp at line 5, boost/fusion/support/pair.hpp at line 6, boost/fusion/support/segmented_fold_until.hpp at line 5, boost/fusion/support/sequence_base.hpp at line 6, boost/fusion/support/tag_of.hpp at line 5, boost/fusion/support/tag_of_fwd.hpp at line 6, boost/fusion/support/unused.hpp at line 5, boost/fusion/support/void.hpp at line 5, boost/fusion/tuple/detail/make_tuple.hpp at line 37, boost/fusion/tuple/detail/make_tuple.hpp at line 5, boost/fusion/tuple/detail/preprocessed/make_tuple.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple10_fwd.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple_fwd.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple_tie.hpp at line 5, boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp at line 5, boost/fusion/tuple/detail/tuple.hpp at line 33, boost/fusion/tuple/detail/tuple.hpp at line 5, boost/fusion/tuple/detail/tuple_expand.hpp at line 5, boost/fusion/tuple/detail/tuple_fwd.hpp at line 25, boost/fusion/tuple/detail/tuple_fwd.hpp at line 5, boost/fusion/tuple/detail/tuple_tie.hpp at line 28, boost/fusion/tuple/detail/tuple_tie.hpp at line 5, boost/fusion/tuple/make_tuple.hpp at line 5, boost/fusion/tuple/tuple.hpp at line 5, boost/fusion/tuple/tuple_fwd.hpp at line 5, boost/fusion/tuple/tuple_tie.hpp at line 5, boost/fusion/view/detail/strictest_traversal.hpp at line 6, boost/fusion/view/filter_view/detail/deref_data_impl.hpp at line 5, boost/fusion/view/filter_view/detail/key_of_impl.hpp at line 5, boost/fusion/view/filter_view/detail/value_of_data_impl.hpp at line 5, boost/fusion/view/filter_view/filter_view_iterator.hpp at line 5, boost/fusion/view/flatten_view.hpp at line 5, boost/fusion/view/flatten_view/flatten_view.hpp at line 5, boost/fusion/view/flatten_view/flatten_view_iterator.hpp at line 5, boost/fusion/view/iterator_range/detail/at_impl.hpp at line 5, boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp at line 5, boost/fusion/view/iterator_range/detail/size_impl.hpp at line 5, boost/fusion/view/iterator_range/detail/value_at_impl.hpp at line 5, boost/fusion/view/iterator_range/iterator_range.hpp at line 5, boost/fusion/view/joint_view/detail/deref_data_impl.hpp at line 5, boost/fusion/view/joint_view/detail/key_of_impl.hpp at line 5, boost/fusion/view/joint_view/detail/value_of_data_impl.hpp at line 5, boost/fusion/view/joint_view/joint_view.hpp at line 5, boost/fusion/view/joint_view/joint_view_fwd.hpp at line 5, boost/fusion/view/joint_view/joint_view_iterator.hpp at line 5, boost/fusion/view/nview/detail/advance_impl.hpp at line 5, boost/fusion/view/nview/detail/begin_impl.hpp at line 5, boost/fusion/view/nview/detail/cpp03/nview_impl.hpp at line 5, boost/fusion/view/nview/detail/deref_impl.hpp at line 5, boost/fusion/view/nview/detail/distance_impl.hpp at line 5, boost/fusion/view/nview/detail/end_impl.hpp at line 5, boost/fusion/view/nview/detail/equal_to_impl.hpp at line 5, boost/fusion/view/nview/detail/next_impl.hpp at line 5, boost/fusion/view/nview/detail/nview_impl.hpp at line 5, boost/fusion/view/nview/detail/prior_impl.hpp at line 5, boost/fusion/view/nview/detail/value_of_impl.hpp at line 5, boost/fusion/view/repetitive_view.hpp at line 5, boost/fusion/view/repetitive_view/detail/begin_impl.hpp at line 5, boost/fusion/view/repetitive_view/detail/deref_impl.hpp at line 5, boost/fusion/view/repetitive_view/detail/end_impl.hpp at line 5, boost/fusion/view/repetitive_view/detail/next_impl.hpp at line 5, boost/fusion/view/repetitive_view/detail/value_of_impl.hpp at line 5, boost/fusion/view/repetitive_view/repetitive_view.hpp at line 5, boost/fusion/view/repetitive_view/repetitive_view_fwd.hpp at line 5, boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp at line 5, boost/fusion/view/reverse_view/detail/at_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/deref_data_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/key_of_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/value_at_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp at line 5, boost/fusion/view/reverse_view/reverse_view_iterator.hpp at line 5, boost/fusion/view/single_view/detail/distance_impl.hpp at line 5, boost/fusion/view/single_view/detail/equal_to_impl.hpp at line 5, boost/fusion/view/single_view/detail/next_impl.hpp at line 6, boost/fusion/view/single_view/detail/prior_impl.hpp at line 5, boost/fusion/view/transform_view/detail/value_at_impl.hpp at line 6, boost/fusion/view/transform_view/transform_view_iterator.hpp at line 5, boost/fusion/view/zip_view/detail/value_of_impl.hpp at line 6, boost/hof.hpp at line 5, boost/hof/alias.hpp at line 5, boost/hof/always.hpp at line 5, boost/hof/apply.hpp at line 5, boost/hof/apply_eval.hpp at line 5, boost/hof/arg.hpp at line 5, boost/hof/capture.hpp at line 5, boost/hof/combine.hpp at line 5, boost/hof/compose.hpp at line 5, boost/hof/config.hpp at line 5, boost/hof/construct.hpp at line 5, boost/hof/decay.hpp at line 5, boost/hof/decorate.hpp at line 5, boost/hof/detail/and.hpp at line 5, boost/hof/detail/callable_base.hpp at line 5, boost/hof/detail/can_be_called.hpp at line 5, boost/hof/detail/compressed_pair.hpp at line 5, boost/hof/detail/constexpr_deduce.hpp at line 5, boost/hof/detail/delegate.hpp at line 5, boost/hof/detail/forward.hpp at line 5, boost/hof/detail/holder.hpp at line 5, boost/hof/detail/intrinsics.hpp at line 5, boost/hof/detail/join.hpp at line 5, boost/hof/detail/make.hpp at line 5, boost/hof/detail/move.hpp at line 5, boost/hof/detail/noexcept.hpp at line 5, boost/hof/detail/pp.hpp at line 5, boost/hof/detail/recursive_constexpr_depth.hpp at line 5, boost/hof/detail/remove_rvalue_reference.hpp at line 5, boost/hof/detail/result_of.hpp at line 5, boost/hof/detail/result_type.hpp at line 5, boost/hof/detail/seq.hpp at line 5, boost/hof/detail/static_const_var.hpp at line 5, boost/hof/detail/unpack_tuple.hpp at line 5, boost/hof/detail/unwrap.hpp at line 5, boost/hof/detail/using.hpp at line 5, boost/hof/eval.hpp at line 5, boost/hof/first_of.hpp at line 5, boost/hof/fix.hpp at line 5, boost/hof/flip.hpp at line 5, boost/hof/flow.hpp at line 5, boost/hof/fold.hpp at line 5, boost/hof/function.hpp at line 5, boost/hof/function_param_limit.hpp at line 5, boost/hof/identity.hpp at line 5, boost/hof/if.hpp at line 5, boost/hof/implicit.hpp at line 5, boost/hof/indirect.hpp at line 5, boost/hof/infix.hpp at line 5, boost/hof/is_invocable.hpp at line 5, boost/hof/is_unpackable.hpp at line 5, boost/hof/lambda.hpp at line 5, boost/hof/lazy.hpp at line 5, boost/hof/lift.hpp at line 5, boost/hof/limit.hpp at line 5, boost/hof/match.hpp at line 5, boost/hof/mutable.hpp at line 5, boost/hof/pack.hpp at line 5, boost/hof/partial.hpp at line 5, boost/hof/pipable.hpp at line 5, boost/hof/placeholders.hpp at line 5, boost/hof/proj.hpp at line 5, boost/hof/protect.hpp at line 5, boost/hof/repeat.hpp at line 5, boost/hof/repeat_while.hpp at line 5, boost/hof/result.hpp at line 5, boost/hof/returns.hpp at line 5, boost/hof/reveal.hpp at line 5, boost/hof/reverse_fold.hpp at line 5, boost/hof/rotate.hpp at line 5, boost/hof/static.hpp at line 5, boost/hof/tap.hpp at line 5, boost/hof/unpack.hpp at line 5, boost/hof/unpack_sequence.hpp at line 5, boost/hof/version.hpp at line 5, boost/phoenix.hpp at line 6, boost/phoenix/bind.hpp at line 5, boost/phoenix/bind/bind_function.hpp at line 5, boost/phoenix/bind/bind_function_object.hpp at line 5, boost/phoenix/bind/bind_member_function.hpp at line 5, boost/phoenix/bind/bind_member_variable.hpp at line 6, boost/phoenix/bind/detail/cpp03/bind_member_function.hpp at line 6, boost/phoenix/bind/detail/member_variable.hpp at line 5, boost/phoenix/config.hpp at line 8, boost/phoenix/core/actor.hpp at line 8, boost/phoenix/core/argument.hpp at line 121, boost/phoenix/core/argument.hpp at line 7, boost/phoenix/core/argument.hpp at line 90, boost/phoenix/core/arity.hpp at line 6, boost/phoenix/core/call.hpp at line 6, boost/phoenix/core/debug.hpp at line 7, boost/phoenix/core/detail/argument.hpp at line 7, boost/phoenix/core/detail/cpp03/actor_operator.hpp at line 28, boost/phoenix/core/detail/cpp03/actor_result_of.hpp at line 29, boost/phoenix/core/detail/cpp03/call.hpp at line 25, boost/phoenix/core/detail/cpp03/expression.hpp at line 23, boost/phoenix/core/detail/cpp03/function_equal.hpp at line 26, boost/phoenix/core/detail/cpp03/function_equal.hpp at line 6, boost/phoenix/core/detail/cpp03/function_eval.hpp at line 16, boost/phoenix/core/detail/cpp03/function_eval_expr.hpp at line 21, boost/phoenix/core/detail/cpp03/function_eval_expr.hpp at line 5, boost/phoenix/core/detail/cpp03/phx2_result.hpp at line 27, boost/phoenix/core/detail/cpp03/phx2_result.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/actor_operator.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_10.hpp at line 6, boost/phoenix/core/detail/cpp03/preprocessed/call.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/expression.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_10.hpp at line 5, boost/phoenix/core/detail/function_eval.hpp at line 6, boost/phoenix/core/detail/index_sequence.hpp at line 5, boost/phoenix/core/detail/phx2_result.hpp at line 5, boost/phoenix/core/environment.hpp at line 6, boost/phoenix/core/function_equal.hpp at line 6, boost/phoenix/core/is_actor.hpp at line 5, boost/phoenix/core/is_value.hpp at line 6, boost/phoenix/core/nothing.hpp at line 5, boost/phoenix/core/reference.hpp at line 6, boost/phoenix/core/terminal.hpp at line 6, boost/phoenix/core/terminal_fwd.hpp at line 6, boost/phoenix/core/value.hpp at line 6, boost/phoenix/core/visit_each.hpp at line 6, boost/phoenix/function.hpp at line 5, boost/phoenix/function/adapt_callable.hpp at line 6, boost/phoenix/function/adapt_function.hpp at line 7, boost/phoenix/function/detail/cpp03/function_operator.hpp at line 25, boost/phoenix/function/detail/cpp03/preprocessed/function_operator.hpp at line 5, boost/phoenix/function/detail/cpp03/preprocessed/function_operator_10.hpp at line 6, boost/phoenix/function/function.hpp at line 7, boost/phoenix/function/lazy_list.hpp at line 38, boost/phoenix/function/lazy_operator.hpp at line 32, boost/phoenix/function/lazy_prelude.hpp at line 120, boost/phoenix/function/lazy_reuse.hpp at line 29, boost/phoenix/function/lazy_signature.hpp at line 39, boost/phoenix/function/lazy_smart.hpp at line 16, boost/phoenix/fusion.hpp at line 6, boost/phoenix/fusion/at.hpp at line 7, boost/phoenix/object.hpp at line 6, boost/phoenix/object/const_cast.hpp at line 6, boost/phoenix/object/construct.hpp at line 6, boost/phoenix/object/delete.hpp at line 6, boost/phoenix/object/detail/cpp03/construct.hpp at line 25, boost/phoenix/object/detail/cpp03/construct_eval.hpp at line 27, boost/phoenix/object/detail/cpp03/construct_expr.hpp at line 15, boost/phoenix/object/detail/cpp03/new.hpp at line 25, boost/phoenix/object/detail/cpp03/new_eval.hpp at line 27, boost/phoenix/object/detail/cpp03/new_expr.hpp at line 15, boost/phoenix/object/detail/cpp03/preprocessed/construct.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/construct_10.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/construct_eval.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/construct_expr.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/new.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/new_10.hpp at line 6, boost/phoenix/object/detail/cpp03/preprocessed/new_eval.hpp at line 5, boost/phoenix/object/detail/cpp03/preprocessed/new_expr.hpp at line 5, boost/phoenix/object/detail/target.hpp at line 6, boost/phoenix/object/dynamic_cast.hpp at line 6, boost/phoenix/object/new.hpp at line 6, boost/phoenix/object/reinterpret_cast.hpp at line 6, boost/phoenix/object/static_cast.hpp at line 6, boost/phoenix/operator.hpp at line 6, boost/phoenix/operator/arithmetic.hpp at line 6, boost/phoenix/operator/bitwise.hpp at line 6, boost/phoenix/operator/comparison.hpp at line 6, boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval.hpp at line 20, boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval_result_of.hpp at line 20, boost/phoenix/operator/detail/cpp03/mem_fun_ptr_expr.hpp at line 14, boost/phoenix/operator/detail/cpp03/mem_fun_ptr_gen.hpp at line 19, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_10.hpp at line 7, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen.hpp at line 5, boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_10.hpp at line 6, boost/phoenix/operator/detail/define_operator.hpp at line 6, boost/phoenix/operator/detail/undef_operator.hpp at line 5, boost/phoenix/operator/if_else.hpp at line 6, boost/phoenix/operator/io.hpp at line 6, boost/phoenix/operator/logical.hpp at line 6, boost/phoenix/operator/member.hpp at line 7, boost/phoenix/operator/self.hpp at line 6, boost/phoenix/phoenix.hpp at line 6, boost/phoenix/scope.hpp at line 6, boost/phoenix/scope/detail/cpp03/dynamic.hpp at line 29, boost/phoenix/scope/detail/cpp03/lambda.hpp at line 20, boost/phoenix/scope/detail/cpp03/local_gen.hpp at line 7, boost/phoenix/scope/detail/cpp03/preprocessed/dynamic.hpp at line 5, boost/phoenix/scope/detail/local_gen.hpp at line 5, boost/phoenix/scope/detail/local_variable.hpp at line 7, boost/phoenix/scope/dynamic.hpp at line 7, boost/phoenix/scope/lambda.hpp at line 8, boost/phoenix/scope/let.hpp at line 8, boost/phoenix/scope/local_variable.hpp at line 6, boost/phoenix/scope/scoped_environment.hpp at line 6, boost/phoenix/statement.hpp at line 5, boost/phoenix/statement/detail/catch_push_back.hpp at line 24, boost/phoenix/statement/detail/preprocessed/catch_push_back.hpp at line 5, boost/phoenix/statement/detail/preprocessed/switch.hpp at line 5, boost/phoenix/statement/detail/preprocessed/try_catch_eval.hpp at line 5, boost/phoenix/statement/detail/preprocessed/try_catch_expression.hpp at line 5, boost/phoenix/statement/detail/preprocessed/try_catch_expression_10.hpp at line 6, boost/phoenix/statement/detail/preprocessed/try_catch_expression_20.hpp at line 6, boost/phoenix/statement/detail/switch.hpp at line 29, boost/phoenix/statement/detail/try_catch_eval.hpp at line 29, boost/phoenix/statement/detail/try_catch_expression.hpp at line 29, boost/phoenix/statement/do_while.hpp at line 6, boost/phoenix/statement/for.hpp at line 6, boost/phoenix/statement/if.hpp at line 6, boost/phoenix/statement/sequence.hpp at line 7, boost/phoenix/statement/switch.hpp at line 6, boost/phoenix/statement/throw.hpp at line 7, boost/phoenix/statement/try_catch.hpp at line 7, boost/phoenix/statement/while.hpp at line 6, boost/phoenix/stl/cmath.hpp at line 5, boost/phoenix/stl/container/container.hpp at line 6, boost/phoenix/support/detail/iterate.hpp at line 5, boost/phoenix/support/detail/iterate_define.hpp at line 5, boost/phoenix/support/detail/iterate_undef.hpp at line 5, boost/phoenix/support/iterate.hpp at line 5, boost/phoenix/support/vector.hpp at line 45, boost/phoenix/version.hpp at line 7, boost/spirit/home/karma/detail/pass_container.hpp at line 6, boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp at line 7, boost/spirit/home/qi.hpp at line 5, boost/spirit/home/qi/action/action.hpp at line 5, boost/spirit/home/qi/auto.hpp at line 5, boost/spirit/home/qi/auxiliary.hpp at line 6, boost/spirit/home/qi/auxiliary/attr.hpp at line 6, boost/spirit/home/qi/auxiliary/eoi.hpp at line 6, boost/spirit/home/qi/auxiliary/eol.hpp at line 6, boost/spirit/home/qi/auxiliary/eps.hpp at line 5, boost/spirit/home/qi/auxiliary/lazy.hpp at line 5, boost/spirit/home/qi/binary.hpp at line 5, boost/spirit/home/qi/binary/binary.hpp at line 6, boost/spirit/home/qi/char/char.hpp at line 7, boost/spirit/home/qi/char/char_class.hpp at line 5, boost/spirit/home/qi/char/char_parser.hpp at line 5, boost/spirit/home/qi/copy.hpp at line 5, boost/spirit/home/qi/detail/alternative_function.hpp at line 5, boost/spirit/home/qi/detail/assign_to.hpp at line 7, boost/spirit/home/qi/detail/construct.hpp at line 6, boost/spirit/home/qi/detail/expect_function.hpp at line 5, boost/spirit/home/qi/detail/fail_function.hpp at line 5, boost/spirit/home/qi/detail/parse.hpp at line 5, boost/spirit/home/qi/detail/parse_auto.hpp at line 5, boost/spirit/home/qi/detail/pass_container.hpp at line 6, boost/spirit/home/qi/detail/pass_function.hpp at line 5, boost/spirit/home/qi/detail/permute_function.hpp at line 5, boost/spirit/home/qi/detail/string_parse.hpp at line 5, boost/spirit/home/qi/directive.hpp at line 5, boost/spirit/home/qi/directive/as.hpp at line 7, boost/spirit/home/qi/directive/encoding.hpp at line 5, boost/spirit/home/qi/directive/hold.hpp at line 5, boost/spirit/home/qi/directive/lexeme.hpp at line 5, boost/spirit/home/qi/directive/matches.hpp at line 5, boost/spirit/home/qi/directive/no_case.hpp at line 5, boost/spirit/home/qi/directive/no_skip.hpp at line 6, boost/spirit/home/qi/directive/omit.hpp at line 5, boost/spirit/home/qi/directive/raw.hpp at line 5, boost/spirit/home/qi/directive/repeat.hpp at line 6, boost/spirit/home/qi/directive/skip.hpp at line 5, boost/spirit/home/qi/domain.hpp at line 5, boost/spirit/home/qi/meta_compiler.hpp at line 5, boost/spirit/home/qi/nonterminal.hpp at line 5, boost/spirit/home/qi/nonterminal/debug_handler.hpp at line 5, boost/spirit/home/qi/nonterminal/debug_handler_state.hpp at line 5, boost/spirit/home/qi/nonterminal/detail/fcall.hpp at line 5, boost/spirit/home/qi/nonterminal/detail/parameterized.hpp at line 6, boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp at line 5, boost/spirit/home/qi/nonterminal/error_handler.hpp at line 5, boost/spirit/home/qi/nonterminal/grammar.hpp at line 5, boost/spirit/home/qi/nonterminal/rule.hpp at line 5, boost/spirit/home/qi/nonterminal/simple_trace.hpp at line 6, boost/spirit/home/qi/nonterminal/success_handler.hpp at line 5, boost/spirit/home/qi/numeric.hpp at line 5, boost/spirit/home/qi/numeric/bool.hpp at line 6, boost/spirit/home/qi/numeric/bool_policies.hpp at line 5, boost/spirit/home/qi/numeric/detail/numeric_utils.hpp at line 9, boost/spirit/home/qi/numeric/detail/real_impl.hpp at line 7, boost/spirit/home/qi/numeric/int.hpp at line 6, boost/spirit/home/qi/numeric/numeric_utils.hpp at line 6, boost/spirit/home/qi/numeric/real.hpp at line 6, boost/spirit/home/qi/numeric/real_policies.hpp at line 6, boost/spirit/home/qi/numeric/uint.hpp at line 7, boost/spirit/home/qi/operator.hpp at line 5, boost/spirit/home/qi/operator/alternative.hpp at line 6, boost/spirit/home/qi/operator/and_predicate.hpp at line 5, boost/spirit/home/qi/operator/difference.hpp at line 5, boost/spirit/home/qi/operator/expect.hpp at line 6, boost/spirit/home/qi/operator/kleene.hpp at line 6, boost/spirit/home/qi/operator/list.hpp at line 6, boost/spirit/home/qi/operator/not_predicate.hpp at line 5, boost/spirit/home/qi/operator/optional.hpp at line 6, boost/spirit/home/qi/operator/permutation.hpp at line 5, boost/spirit/home/qi/operator/plus.hpp at line 6, boost/spirit/home/qi/operator/sequence.hpp at line 6, boost/spirit/home/qi/operator/sequence_base.hpp at line 6, boost/spirit/home/qi/operator/sequential_or.hpp at line 5, boost/spirit/home/qi/parse.hpp at line 6, boost/spirit/home/qi/parser.hpp at line 5, boost/spirit/home/qi/reference.hpp at line 5, boost/spirit/home/qi/skip_flag.hpp at line 5, boost/spirit/home/qi/skip_over.hpp at line 5, boost/spirit/home/qi/stream.hpp at line 5, boost/spirit/home/qi/stream/detail/iterator_source.hpp at line 5, boost/spirit/home/qi/stream/detail/match_manip.hpp at line 5, boost/spirit/home/qi/stream/detail/match_manip_auto.hpp at line 5, boost/spirit/home/qi/stream/match_manip.hpp at line 6, boost/spirit/home/qi/stream/match_manip_attr.hpp at line 6, boost/spirit/home/qi/stream/stream.hpp at line 5, boost/spirit/home/qi/string.hpp at line 5, boost/spirit/home/qi/string/detail/tst.hpp at line 5, boost/spirit/home/qi/string/lit.hpp at line 7, boost/spirit/home/qi/string/symbols.hpp at line 5, boost/spirit/home/qi/string/tst.hpp at line 5, boost/spirit/home/qi/string/tst_map.hpp at line 5, boost/spirit/home/qi/what.hpp at line 5, boost/spirit/home/support.hpp at line 5, boost/spirit/home/support/action_dispatch.hpp at line 7, boost/spirit/home/support/algorithm/any.hpp at line 5, boost/spirit/home/support/algorithm/any_if.hpp at line 6, boost/spirit/home/support/algorithm/any_if_ns.hpp at line 6, boost/spirit/home/support/algorithm/any_if_ns_so.hpp at line 6, boost/spirit/home/support/algorithm/any_ns.hpp at line 5, boost/spirit/home/support/algorithm/any_ns_so.hpp at line 5, boost/spirit/home/support/argument.hpp at line 7, boost/spirit/home/support/argument_expression.hpp at line 7, boost/spirit/home/support/attributes.hpp at line 6, boost/spirit/home/support/attributes_fwd.hpp at line 7, boost/spirit/home/support/auto.hpp at line 5, boost/spirit/home/support/char_class.hpp at line 6, boost/spirit/home/support/char_encoding/ascii.hpp at line 6, boost/spirit/home/support/char_encoding/iso8859_1.hpp at line 6, boost/spirit/home/support/char_encoding/standard.hpp at line 6, boost/spirit/home/support/char_encoding/standard_wide.hpp at line 6, boost/spirit/home/support/char_encoding/unicode.hpp at line 6, boost/spirit/home/support/char_encoding/unicode/category_table.hpp at line 5, boost/spirit/home/support/char_encoding/unicode/create_tables.cpp at line 5, boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp at line 5, boost/spirit/home/support/char_encoding/unicode/query.hpp at line 5, boost/spirit/home/support/char_encoding/unicode/script_table.hpp at line 5, boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp at line 5, boost/spirit/home/support/char_set/range.hpp at line 5, boost/spirit/home/support/char_set/range_functions.hpp at line 5, boost/spirit/home/support/char_set/range_run.hpp at line 5, boost/spirit/home/support/char_set/range_run_impl.hpp at line 5, boost/spirit/home/support/container.hpp at line 7, boost/spirit/home/support/context.hpp at line 7, boost/spirit/home/support/detail/as_variant.hpp at line 5, boost/spirit/home/support/detail/hold_any.hpp at line 8, boost/spirit/home/support/detail/is_spirit_tag.hpp at line 5, boost/spirit/home/support/detail/make_vector.hpp at line 5, boost/spirit/home/support/detail/pow10.hpp at line 7, boost/spirit/home/support/detail/sign.hpp at line 7, boost/spirit/home/support/detail/what_function.hpp at line 5, boost/spirit/home/support/extended_variant.hpp at line 5, boost/spirit/home/support/handles_container.hpp at line 5, boost/spirit/home/support/has_semantic_action.hpp at line 5, boost/spirit/home/support/info.hpp at line 5, boost/spirit/home/support/iterators/line_pos_iterator.hpp at line 7, boost/spirit/home/support/iterators/multi_pass_fwd.hpp at line 7, boost/spirit/home/support/lazy.hpp at line 5, boost/spirit/home/support/nonterminal/expand_arg.hpp at line 5, boost/spirit/home/support/nonterminal/extract_param.hpp at line 7, boost/spirit/home/support/nonterminal/locals.hpp at line 6, boost/spirit/home/support/sequence_base_id.hpp at line 5, boost/spirit/home/support/string_traits.hpp at line 7, boost/spirit/home/support/terminal.hpp at line 7, boost/spirit/home/support/terminal_expression.hpp at line 7, boost/spirit/home/support/unused.hpp at line 6, boost/spirit/home/support/utf8.hpp at line 5, boost/spirit/home/support/utree.hpp at line 5, boost/spirit/home/support/utree/detail/utree_detail1.hpp at line 7, boost/spirit/home/support/utree/detail/utree_detail2.hpp at line 7, boost/spirit/home/support/utree/operators.hpp at line 7, boost/spirit/home/support/utree/utree.hpp at line 7, boost/spirit/home/support/utree/utree_traits.hpp at line 7, boost/spirit/home/support/utree/utree_traits_fwd.hpp at line 5, boost/spirit/home/x3.hpp at line 5, boost/spirit/home/x3/auxiliary.hpp at line 6, boost/spirit/home/x3/auxiliary/any_parser.hpp at line 6, boost/spirit/home/x3/auxiliary/attr.hpp at line 7, boost/spirit/home/x3/auxiliary/eoi.hpp at line 6, boost/spirit/home/x3/auxiliary/eol.hpp at line 6, boost/spirit/home/x3/auxiliary/eps.hpp at line 5, boost/spirit/home/x3/auxiliary/guard.hpp at line 5, boost/spirit/home/x3/binary.hpp at line 5, boost/spirit/home/x3/binary/binary.hpp at line 6, boost/spirit/home/x3/char.hpp at line 5, boost/spirit/home/x3/char/any_char.hpp at line 5, boost/spirit/home/x3/char/char.hpp at line 5, boost/spirit/home/x3/char/char_class.hpp at line 5, boost/spirit/home/x3/char/char_class_tags.hpp at line 5, boost/spirit/home/x3/char/char_parser.hpp at line 5, boost/spirit/home/x3/char/char_set.hpp at line 5, boost/spirit/home/x3/char/detail/cast_char.hpp at line 6, boost/spirit/home/x3/char/literal_char.hpp at line 5, boost/spirit/home/x3/char/negated_char_parser.hpp at line 5, boost/spirit/home/x3/char/unicode.hpp at line 5, boost/spirit/home/x3/core.hpp at line 5, boost/spirit/home/x3/core/action.hpp at line 5, boost/spirit/home/x3/core/call.hpp at line 5, boost/spirit/home/x3/core/detail/parse_into_container.hpp at line 5, boost/spirit/home/x3/core/parse.hpp at line 5, boost/spirit/home/x3/core/parser.hpp at line 6, boost/spirit/home/x3/core/proxy.hpp at line 5, boost/spirit/home/x3/core/skip_over.hpp at line 5, boost/spirit/home/x3/directive.hpp at line 5, boost/spirit/home/x3/directive/confix.hpp at line 6, boost/spirit/home/x3/directive/expect.hpp at line 5, boost/spirit/home/x3/directive/lexeme.hpp at line 5, boost/spirit/home/x3/directive/matches.hpp at line 6, boost/spirit/home/x3/directive/no_case.hpp at line 5, boost/spirit/home/x3/directive/no_skip.hpp at line 7, boost/spirit/home/x3/directive/omit.hpp at line 5, boost/spirit/home/x3/directive/raw.hpp at line 5, boost/spirit/home/x3/directive/repeat.hpp at line 7, boost/spirit/home/x3/directive/seek.hpp at line 6, boost/spirit/home/x3/directive/skip.hpp at line 6, boost/spirit/home/x3/directive/with.hpp at line 5, boost/spirit/home/x3/nonterminal.hpp at line 5, boost/spirit/home/x3/nonterminal/debug_handler_state.hpp at line 5, boost/spirit/home/x3/nonterminal/detail/rule.hpp at line 5, boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp at line 6, boost/spirit/home/x3/nonterminal/rule.hpp at line 5, boost/spirit/home/x3/nonterminal/simple_trace.hpp at line 6, boost/spirit/home/x3/numeric.hpp at line 5, boost/spirit/home/x3/numeric/bool.hpp at line 6, boost/spirit/home/x3/numeric/bool_policies.hpp at line 6, boost/spirit/home/x3/numeric/int.hpp at line 5, boost/spirit/home/x3/numeric/real.hpp at line 5, boost/spirit/home/x3/numeric/real_policies.hpp at line 6, boost/spirit/home/x3/numeric/uint.hpp at line 6, boost/spirit/home/x3/operator.hpp at line 5, boost/spirit/home/x3/operator/alternative.hpp at line 5, boost/spirit/home/x3/operator/and_predicate.hpp at line 5, boost/spirit/home/x3/operator/detail/alternative.hpp at line 5, boost/spirit/home/x3/operator/detail/sequence.hpp at line 5, boost/spirit/home/x3/operator/difference.hpp at line 5, boost/spirit/home/x3/operator/kleene.hpp at line 6, boost/spirit/home/x3/operator/list.hpp at line 6, boost/spirit/home/x3/operator/not_predicate.hpp at line 5, boost/spirit/home/x3/operator/optional.hpp at line 6, boost/spirit/home/x3/operator/plus.hpp at line 6, boost/spirit/home/x3/operator/sequence.hpp at line 5, boost/spirit/home/x3/string.hpp at line 5, boost/spirit/home/x3/string/detail/no_case_string_parse.hpp at line 5, boost/spirit/home/x3/string/detail/string_parse.hpp at line 5, boost/spirit/home/x3/string/detail/tst.hpp at line 5, boost/spirit/home/x3/string/literal_string.hpp at line 5, boost/spirit/home/x3/string/symbols.hpp at line 6, boost/spirit/home/x3/string/tst.hpp at line 5, boost/spirit/home/x3/string/tst_map.hpp at line 5, boost/spirit/home/x3/support/ast/position_tagged.hpp at line 5, boost/spirit/home/x3/support/ast/variant.hpp at line 5, boost/spirit/home/x3/support/context.hpp at line 6, boost/spirit/home/x3/support/no_case.hpp at line 5, boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp at line 9, boost/spirit/home/x3/support/numeric_utils/extract_int.hpp at line 6, boost/spirit/home/x3/support/numeric_utils/extract_real.hpp at line 7, boost/spirit/home/x3/support/numeric_utils/pow10.hpp at line 7, boost/spirit/home/x3/support/numeric_utils/sign.hpp at line 7, boost/spirit/home/x3/support/subcontext.hpp at line 7, boost/spirit/home/x3/support/traits/attribute_category.hpp at line 6, boost/spirit/home/x3/support/traits/attribute_of.hpp at line 7, boost/spirit/home/x3/support/traits/attribute_type.hpp at line 6, boost/spirit/home/x3/support/traits/container_traits.hpp at line 7, boost/spirit/home/x3/support/traits/handles_container.hpp at line 6, boost/spirit/home/x3/support/traits/has_attribute.hpp at line 7, boost/spirit/home/x3/support/traits/is_parser.hpp at line 6, boost/spirit/home/x3/support/traits/is_range.hpp at line 6, boost/spirit/home/x3/support/traits/is_substitute.hpp at line 6, boost/spirit/home/x3/support/traits/is_variant.hpp at line 6, boost/spirit/home/x3/support/traits/make_attribute.hpp at line 7, boost/spirit/home/x3/support/traits/move_to.hpp at line 7, boost/spirit/home/x3/support/traits/optional_traits.hpp at line 7, boost/spirit/home/x3/support/traits/print_attribute.hpp at line 6, boost/spirit/home/x3/support/traits/print_token.hpp at line 6, boost/spirit/home/x3/support/traits/string_traits.hpp at line 7, boost/spirit/home/x3/support/traits/transform_attribute.hpp at line 7, boost/spirit/home/x3/support/traits/tuple_traits.hpp at line 5, boost/spirit/home/x3/support/traits/value_traits.hpp at line 7, boost/spirit/home/x3/support/traits/variant_find_substitute.hpp at line 6, boost/spirit/home/x3/support/traits/variant_has_substitute.hpp at line 6, boost/spirit/home/x3/support/unused.hpp at line 6, boost/spirit/home/x3/support/utility/annotate_on_success.hpp at line 5, boost/spirit/home/x3/support/utility/error_reporting.hpp at line 5, boost/spirit/home/x3/support/utility/is_callable.hpp at line 5, boost/spirit/home/x3/support/utility/lambda_visitor.hpp at line 5, boost/spirit/home/x3/support/utility/sfinae.hpp at line 6, boost/spirit/home/x3/support/utility/testing.hpp at line 5, boost/spirit/home/x3/support/utility/unrefcv.hpp at line 5, boost/spirit/home/x3/support/utility/utf8.hpp at line 5, boost/spirit/include/karma.hpp at line 7, boost/spirit/include/karma_action.hpp at line 7, boost/spirit/include/karma_alternative.hpp at line 7, boost/spirit/include/karma_and_predicate.hpp at line 7, boost/spirit/include/karma_as.hpp at line 8, boost/spirit/include/karma_attr_cast.hpp at line 7, boost/spirit/include/karma_auto.hpp at line 7, boost/spirit/include/karma_auxiliary.hpp at line 7, boost/spirit/include/karma_binary.hpp at line 7, boost/spirit/include/karma_bool.hpp at line 7, boost/spirit/include/karma_buffer.hpp at line 7, boost/spirit/include/karma_center_alignment.hpp at line 7, boost/spirit/include/karma_char.hpp at line 7, boost/spirit/include/karma_char_.hpp at line 7, boost/spirit/include/karma_char_class.hpp at line 7, boost/spirit/include/karma_columns.hpp at line 7, boost/spirit/include/karma_delimit.hpp at line 7, boost/spirit/include/karma_directive.hpp at line 7, boost/spirit/include/karma_domain.hpp at line 7, boost/spirit/include/karma_duplicate.hpp at line 7, boost/spirit/include/karma_eol.hpp at line 7, boost/spirit/include/karma_eps.hpp at line 7, boost/spirit/include/karma_format.hpp at line 7, boost/spirit/include/karma_format_attr.hpp at line 7, boost/spirit/include/karma_format_auto.hpp at line 7, boost/spirit/include/karma_generate.hpp at line 7, boost/spirit/include/karma_generate_attr.hpp at line 7, boost/spirit/include/karma_generate_auto.hpp at line 7, boost/spirit/include/karma_grammar.hpp at line 7, boost/spirit/include/karma_int.hpp at line 7, boost/spirit/include/karma_kleene.hpp at line 7, boost/spirit/include/karma_lazy.hpp at line 7, boost/spirit/include/karma_left_alignment.hpp at line 7, boost/spirit/include/karma_list.hpp at line 7, boost/spirit/include/karma_maxwidth.hpp at line 7, boost/spirit/include/karma_no_delimit.hpp at line 7, boost/spirit/include/karma_nonterminal.hpp at line 7, boost/spirit/include/karma_not_predicate.hpp at line 7, boost/spirit/include/karma_numeric.hpp at line 7, boost/spirit/include/karma_omit.hpp at line 7, boost/spirit/include/karma_operator.hpp at line 7, boost/spirit/include/karma_optional.hpp at line 7, boost/spirit/include/karma_phoenix_attributes.hpp at line 7, boost/spirit/include/karma_plus.hpp at line 7, boost/spirit/include/karma_real.hpp at line 7, boost/spirit/include/karma_repeat.hpp at line 7, boost/spirit/include/karma_right_alignment.hpp at line 7, boost/spirit/include/karma_rule.hpp at line 7, boost/spirit/include/karma_sequence.hpp at line 7, boost/spirit/include/karma_stream.hpp at line 7, boost/spirit/include/karma_strict_relaxed.hpp at line 7, boost/spirit/include/karma_string.hpp at line 7, boost/spirit/include/karma_symbols.hpp at line 7, boost/spirit/include/karma_uint.hpp at line 7, boost/spirit/include/karma_upper_lower_case.hpp at line 7, boost/spirit/include/karma_verbatim.hpp at line 7, boost/spirit/include/karma_what.hpp at line 7, boost/spirit/include/lex.hpp at line 7, boost/spirit/include/lex_char_token_def.hpp at line 7, boost/spirit/include/lex_domain.hpp at line 7, boost/spirit/include/lex_generate_static_lexertl.hpp at line 7, boost/spirit/include/lex_lexer.hpp at line 7, boost/spirit/include/lex_lexertl.hpp at line 7, boost/spirit/include/lex_lexertl_position_token.hpp at line 7, boost/spirit/include/lex_lexertl_token.hpp at line 7, boost/spirit/include/lex_plain_token.hpp at line 7, boost/spirit/include/lex_primitives.hpp at line 7, boost/spirit/include/lex_static_lexertl.hpp at line 7, boost/spirit/include/lex_tokenize_and_parse.hpp at line 7, boost/spirit/include/lex_tokenize_and_parse_attr.hpp at line 7, boost/spirit/include/phoenix.hpp at line 7, boost/spirit/include/phoenix_algorithm.hpp at line 7, boost/spirit/include/phoenix_bind.hpp at line 7, boost/spirit/include/phoenix_container.hpp at line 7, boost/spirit/include/phoenix_core.hpp at line 7, boost/spirit/include/phoenix_function.hpp at line 7, boost/spirit/include/phoenix_fusion.hpp at line 7, boost/spirit/include/phoenix_limits.hpp at line 7, boost/spirit/include/phoenix_object.hpp at line 7, boost/spirit/include/phoenix_operator.hpp at line 7, boost/spirit/include/phoenix_scope.hpp at line 7, boost/spirit/include/phoenix_statement.hpp at line 7, boost/spirit/include/phoenix_stl.hpp at line 7, boost/spirit/include/phoenix_version.hpp at line 7, boost/spirit/include/qi.hpp at line 7, boost/spirit/include/qi_action.hpp at line 7, boost/spirit/include/qi_alternative.hpp at line 7, boost/spirit/include/qi_and_predicate.hpp at line 7, boost/spirit/include/qi_as.hpp at line 8, boost/spirit/include/qi_as_string.hpp at line 7, boost/spirit/include/qi_attr.hpp at line 7, boost/spirit/include/qi_attr_cast.hpp at line 7, boost/spirit/include/qi_auto.hpp at line 7, boost/spirit/include/qi_auxiliary.hpp at line 7, boost/spirit/include/qi_binary.hpp at line 7, boost/spirit/include/qi_bool.hpp at line 7, boost/spirit/include/qi_char.hpp at line 7, boost/spirit/include/qi_char_.hpp at line 7, boost/spirit/include/qi_char_class.hpp at line 7, boost/spirit/include/qi_copy.hpp at line 6, boost/spirit/include/qi_core.hpp at line 7, boost/spirit/include/qi_difference.hpp at line 7, boost/spirit/include/qi_directive.hpp at line 7, boost/spirit/include/qi_domain.hpp at line 7, boost/spirit/include/qi_eoi.hpp at line 7, boost/spirit/include/qi_eol.hpp at line 7, boost/spirit/include/qi_eps.hpp at line 7, boost/spirit/include/qi_expect.hpp at line 7, boost/spirit/include/qi_grammar.hpp at line 7, boost/spirit/include/qi_hold.hpp at line 7, boost/spirit/include/qi_int.hpp at line 7, boost/spirit/include/qi_kleene.hpp at line 7, boost/spirit/include/qi_lazy.hpp at line 7, boost/spirit/include/qi_lexeme.hpp at line 7, boost/spirit/include/qi_list.hpp at line 7, boost/spirit/include/qi_lit.hpp at line 7, boost/spirit/include/qi_match.hpp at line 7, boost/spirit/include/qi_match_attr.hpp at line 7, boost/spirit/include/qi_match_auto.hpp at line 7, boost/spirit/include/qi_matches.hpp at line 7, boost/spirit/include/qi_no_case.hpp at line 7, boost/spirit/include/qi_no_skip.hpp at line 7, boost/spirit/include/qi_nonterminal.hpp at line 7, boost/spirit/include/qi_not_predicate.hpp at line 7, boost/spirit/include/qi_numeric.hpp at line 7, boost/spirit/include/qi_omit.hpp at line 7, boost/spirit/include/qi_operator.hpp at line 7, boost/spirit/include/qi_optional.hpp at line 7, boost/spirit/include/qi_parse.hpp at line 7, boost/spirit/include/qi_parse_attr.hpp at line 7, boost/spirit/include/qi_parse_auto.hpp at line 7, boost/spirit/include/qi_permutation.hpp at line 7, boost/spirit/include/qi_plus.hpp at line 7, boost/spirit/include/qi_raw.hpp at line 7, boost/spirit/include/qi_real.hpp at line 7, boost/spirit/include/qi_repeat.hpp at line 7, boost/spirit/include/qi_rule.hpp at line 7, boost/spirit/include/qi_sequence.hpp at line 7, boost/spirit/include/qi_sequential_or.hpp at line 7, boost/spirit/include/qi_skip.hpp at line 7, boost/spirit/include/qi_stream.hpp at line 7, boost/spirit/include/qi_string.hpp at line 7, boost/spirit/include/qi_symbols.hpp at line 7, boost/spirit/include/qi_uint.hpp at line 7, boost/spirit/include/qi_what.hpp at line 7, boost/spirit/include/support.hpp at line 7, boost/spirit/include/support_adapt_adt_attributes.hpp at line 7, boost/spirit/include/support_any.hpp at line 7, boost/spirit/include/support_any_if.hpp at line 7, boost/spirit/include/support_any_if_ns.hpp at line 7, boost/spirit/include/support_any_if_ns_so.hpp at line 7, boost/spirit/include/support_any_ns.hpp at line 7, boost/spirit/include/support_any_ns_so.hpp at line 7, boost/spirit/include/support_argument.hpp at line 7, boost/spirit/include/support_ascii.hpp at line 7, boost/spirit/include/support_attributes.hpp at line 7, boost/spirit/include/support_attributes_fwd.hpp at line 7, boost/spirit/include/support_auto.hpp at line 6, boost/spirit/include/support_char_class.hpp at line 7, boost/spirit/include/support_container.hpp at line 7, boost/spirit/include/support_extended_variant.hpp at line 7, boost/spirit/include/support_info.hpp at line 6, boost/spirit/include/support_iso8859_1.hpp at line 7, boost/spirit/include/support_istream_iterator.hpp at line 7, boost/spirit/include/support_line_pos_iterator.hpp at line 8, boost/spirit/include/support_locals.hpp at line 7, boost/spirit/include/support_look_ahead.hpp at line 7, boost/spirit/include/support_modify.hpp at line 7, boost/spirit/include/support_multi_pass.hpp at line 7, boost/spirit/include/support_multi_pass_fwd.hpp at line 7, boost/spirit/include/support_ostream_iterator.hpp at line 7, boost/spirit/include/support_standard.hpp at line 7, boost/spirit/include/support_standard_wide.hpp at line 7, boost/spirit/include/support_string_traits.hpp at line 7, boost/spirit/include/support_unused.hpp at line 7, boost/spirit/include/support_utree.hpp at line 7, boost/spirit/repository/home/qi/directive/kwd.hpp at line 6, boost/spirit/repository/home/qi/directive/seek.hpp at line 5, boost/spirit/repository/home/qi/nonterminal/subrule.hpp at line 6, boost/spirit/repository/home/qi/operator/keywords.hpp at line 6, boost/spirit/repository/home/support/seek.hpp at line 5, boost/spirit/repository/home/support/subrule_context.hpp at line 6, boost/spirit/repository/include/karma.hpp at line 7, boost/spirit/repository/include/karma_confix.hpp at line 7, boost/spirit/repository/include/karma_directive.hpp at line 7, boost/spirit/repository/include/karma_nonterminal.hpp at line 8, boost/spirit/repository/include/karma_subrule.hpp at line 8, boost/spirit/repository/include/qi.hpp at line 7, boost/spirit/repository/include/qi_advance.hpp at line 6, boost/spirit/repository/include/qi_confix.hpp at line 7, boost/spirit/repository/include/qi_directive.hpp at line 7, boost/spirit/repository/include/qi_distinct.hpp at line 7, boost/spirit/repository/include/qi_flush_multi_pass.hpp at line 7, boost/spirit/repository/include/qi_iter_pos.hpp at line 7, boost/spirit/repository/include/qi_keywords.hpp at line 8, boost/spirit/repository/include/qi_kwd.hpp at line 27, boost/spirit/repository/include/qi_kwd.hpp at line 8, boost/spirit/repository/include/qi_nonterminal.hpp at line 8, boost/spirit/repository/include/qi_primitive.hpp at line 7, boost/spirit/repository/include/qi_seek.hpp at line 5, boost/spirit/repository/include/qi_subrule.hpp at line 8, boost/wave/cpplexer/re2clex/aq.hpp at line 9, boost/wave/cpplexer/re2clex/scanner.hpp at line 9, boost/wave/whitespace_handling.hpp at line 10
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/fenv.hpp [4:5]
+ boost/detail/is_sorted.hpp [4:5]
+ boost/fusion/adapted.hpp [5:6]
+ boost/fusion/adapted/adt.hpp [6:7]
+ boost/fusion/adapted/adt/adapt_adt.hpp [7:8]
+ boost/fusion/adapted/adt/adapt_adt_named.hpp [6:7]
+ boost/fusion/adapted/adt/adapt_assoc_adt.hpp [7:8]
+ boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp [4:5]
+ boost/fusion/adapted/adt/detail/adapt_base.hpp [6:7]
+ boost/fusion/adapted/adt/detail/adapt_base_assoc_attr_filler.hpp [4:5]
+ boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp [4:5]
+ boost/fusion/adapted/adt/detail/extension.hpp [6:7]
+ boost/fusion/adapted/array/deref_impl.hpp [4:5]
+ boost/fusion/adapted/array/size_impl.hpp [4:5]
+ boost/fusion/adapted/array/value_of_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/build_cons.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/convert_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/mpl/clear.hpp [4:5]
+ boost/fusion/adapted/mpl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/empty_impl.hpp [5:6]
+ boost/fusion/adapted/std_pair.hpp [6:7]
+ boost/fusion/adapted/std_tuple.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/at_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/begin_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/build_std_tuple.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/convert_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/end_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/size_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp [4:5]
+ boost/fusion/adapted/std_tuple/mpl/clear.hpp [4:5]
+ boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp [4:5]
+ boost/fusion/adapted/std_tuple/tag_of.hpp [4:5]
+ boost/fusion/adapted/struct.hpp [6:7]
+ boost/fusion/adapted/struct/adapt_assoc_struct.hpp [6:7]
+ boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp [4:5]
+ boost/fusion/adapted/struct/adapt_struct.hpp [6:7]
+ boost/fusion/adapted/struct/adapt_struct_named.hpp [6:7]
+ boost/fusion/adapted/struct/define_assoc_struct.hpp [4:5]
+ boost/fusion/adapted/struct/define_struct.hpp [4:5]
+ boost/fusion/adapted/struct/define_struct_inline.hpp [4:5]
+ boost/fusion/adapted/struct/detail/adapt_auto.hpp [4:5]
+ boost/fusion/adapted/struct/detail/adapt_base.hpp [7:8]
+ boost/fusion/adapted/struct/detail/adapt_base_assoc_attr_filler.hpp [4:5]
+ boost/fusion/adapted/struct/detail/adapt_base_attr_filler.hpp [4:5]
+ boost/fusion/adapted/struct/detail/adapt_is_tpl.hpp [4:5]
+ boost/fusion/adapted/struct/detail/at_impl.hpp [6:7]
+ boost/fusion/adapted/struct/detail/begin_impl.hpp [6:7]
+ boost/fusion/adapted/struct/detail/category_of_impl.hpp [6:7]
+ boost/fusion/adapted/struct/detail/define_struct.hpp [4:5]
+ boost/fusion/adapted/struct/detail/define_struct_inline.hpp [4:5]
+ boost/fusion/adapted/struct/detail/deref_data_impl.hpp [4:5]
+ boost/fusion/adapted/struct/detail/deref_impl.hpp [4:5]
+ boost/fusion/adapted/struct/detail/end_impl.hpp [6:7]
+ boost/fusion/adapted/struct/detail/extension.hpp [6:7]
+ boost/fusion/adapted/struct/detail/is_sequence_impl.hpp [6:7]
+ boost/fusion/adapted/struct/detail/is_view_impl.hpp [6:7]
+ boost/fusion/adapted/struct/detail/key_of_impl.hpp [4:5]
+ boost/fusion/adapted/struct/detail/namespace.hpp [5:6]
+ boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp [8:9]
+ boost/fusion/adapted/struct/detail/proxy_type.hpp [5:6]
+ boost/fusion/adapted/struct/detail/size_impl.hpp [6:7]
+ boost/fusion/adapted/struct/detail/value_at_impl.hpp [6:7]
+ boost/fusion/adapted/struct/detail/value_of_data_impl.hpp [4:5]
+ boost/fusion/adapted/struct/detail/value_of_impl.hpp [4:5]
+ boost/fusion/algorithm/auxiliary.hpp [4:5]
+ boost/fusion/algorithm/auxiliary/copy.hpp [4:5]
+ boost/fusion/algorithm/auxiliary/move.hpp [4:5]
+ boost/fusion/algorithm/iteration/detail/fold.hpp [7:8]
+ boost/fusion/algorithm/iteration/detail/preprocessed/fold.hpp [6:7]
+ boost/fusion/algorithm/iteration/detail/preprocessed/iter_fold.hpp [5:6]
+ boost/fusion/algorithm/iteration/detail/preprocessed/reverse_fold.hpp [5:6]
+ boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp [5:6]
+ boost/fusion/algorithm/iteration/fold.hpp [7:8]
+ boost/fusion/algorithm/iteration/fold.hpp [39:40]
+ boost/fusion/algorithm/iteration/fold_fwd.hpp [4:5]
+ boost/fusion/algorithm/iteration/iter_fold.hpp [6:7]
+ boost/fusion/algorithm/iteration/iter_fold.hpp [40:41]
+ boost/fusion/algorithm/iteration/iter_fold_fwd.hpp [4:5]
+ boost/fusion/algorithm/iteration/reverse_fold.hpp [6:7]
+ boost/fusion/algorithm/iteration/reverse_fold.hpp [40:41]
+ boost/fusion/algorithm/iteration/reverse_fold_fwd.hpp [4:5]
+ boost/fusion/algorithm/iteration/reverse_iter_fold.hpp [6:7]
+ boost/fusion/algorithm/iteration/reverse_iter_fold.hpp [40:41]
+ boost/fusion/algorithm/iteration/reverse_iter_fold_fwd.hpp [4:5]
+ boost/fusion/algorithm/transformation/detail/preprocessed/zip.hpp [4:5]
+ boost/fusion/algorithm/transformation/erase.hpp [4:5]
+ boost/fusion/algorithm/transformation/flatten.hpp [4:5]
+ boost/fusion/algorithm/transformation/insert.hpp [4:5]
+ boost/fusion/algorithm/transformation/insert_range.hpp [4:5]
+ boost/fusion/algorithm/transformation/pop_back.hpp [4:5]
+ boost/fusion/algorithm/transformation/zip.hpp [5:6]
+ boost/fusion/algorithm/transformation/zip.hpp [46:47]
+ boost/fusion/container.hpp [4:5]
+ boost/fusion/container/deque.hpp [5:6]
+ boost/fusion/container/deque/back_extended_deque.hpp [5:6]
+ boost/fusion/container/deque/convert.hpp [5:6]
+ boost/fusion/container/deque/deque.hpp [5:6]
+ boost/fusion/container/deque/deque_fwd.hpp [5:6]
+ boost/fusion/container/deque/deque_iterator.hpp [5:6]
+ boost/fusion/container/deque/detail/at_impl.hpp [5:6]
+ boost/fusion/container/deque/detail/begin_impl.hpp [5:6]
+ boost/fusion/container/deque/detail/build_deque.hpp [4:5]
+ boost/fusion/container/deque/detail/convert_impl.hpp [6:7]
+ boost/fusion/container/deque/detail/cpp03/as_deque.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/as_deque.hpp [68:69]
+ boost/fusion/container/deque/detail/cpp03/build_deque.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/deque.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/deque.hpp [53:54]
+ boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp [28:29]
+ boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp [37:38]
+ boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp [45:46]
+ boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/limits.hpp [5:6]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp [4:5]
+ boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp [4:5]
+ boost/fusion/container/deque/detail/deque_keyed_values.hpp [5:6]
+ boost/fusion/container/deque/detail/end_impl.hpp [5:6]
+ boost/fusion/container/deque/detail/is_sequence_impl.hpp [4:5]
+ boost/fusion/container/deque/detail/keyed_element.hpp [5:6]
+ boost/fusion/container/deque/detail/value_at_impl.hpp [5:6]
+ boost/fusion/container/deque/front_extended_deque.hpp [5:6]
+ boost/fusion/container/generation.hpp [4:5]
+ boost/fusion/container/generation/deque_tie.hpp [4:5]
+ boost/fusion/container/generation/detail/pp_deque_tie.hpp [5:6]
+ boost/fusion/container/generation/detail/pp_deque_tie.hpp [30:31]
+ boost/fusion/container/generation/detail/pp_list_tie.hpp [4:5]
+ boost/fusion/container/generation/detail/pp_list_tie.hpp [29:30]
+ boost/fusion/container/generation/detail/pp_make_deque.hpp [5:6]
+ boost/fusion/container/generation/detail/pp_make_deque.hpp [30:31]
+ boost/fusion/container/generation/detail/pp_make_list.hpp [4:5]
+ boost/fusion/container/generation/detail/pp_make_list.hpp [29:30]
+ boost/fusion/container/generation/detail/pp_make_map.hpp [4:5]
+ boost/fusion/container/generation/detail/pp_make_map.hpp [30:31]
+ boost/fusion/container/generation/detail/pp_make_set.hpp [4:5]
+ boost/fusion/container/generation/detail/pp_make_set.hpp [31:32]
+ boost/fusion/container/generation/detail/pp_make_vector.hpp [4:5]
+ boost/fusion/container/generation/detail/pp_make_vector.hpp [29:30]
+ boost/fusion/container/generation/detail/pp_map_tie.hpp [5:6]
+ boost/fusion/container/generation/detail/pp_map_tie.hpp [33:34]
+ boost/fusion/container/generation/detail/pp_vector_tie.hpp [4:5]
+ boost/fusion/container/generation/detail/pp_vector_tie.hpp [29:30]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/deque_tie10.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/list_tie.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/list_tie10.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_deque.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_list.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_map.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_set.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/make_vector.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/map_tie.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie.hpp [4:5]
+ boost/fusion/container/generation/detail/preprocessed/vector_tie10.hpp [4:5]
+ boost/fusion/container/generation/list_tie.hpp [4:5]
+ boost/fusion/container/generation/make_deque.hpp [4:5]
+ boost/fusion/container/generation/make_list.hpp [4:5]
+ boost/fusion/container/generation/make_map.hpp [4:5]
+ boost/fusion/container/generation/make_set.hpp [4:5]
+ boost/fusion/container/generation/make_vector.hpp [4:5]
+ boost/fusion/container/generation/map_tie.hpp [4:5]
+ boost/fusion/container/generation/vector_tie.hpp [4:5]
+ boost/fusion/container/list.hpp [4:5]
+ boost/fusion/container/list/cons_fwd.hpp [5:6]
+ boost/fusion/container/list/convert.hpp [4:5]
+ boost/fusion/container/list/detail/at_impl.hpp [4:5]
+ boost/fusion/container/list/detail/convert_impl.hpp [5:6]
+ boost/fusion/container/list/detail/cpp03/limits.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/list.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/list.hpp [28:29]
+ boost/fusion/container/list/detail/cpp03/list_fwd.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/list_fwd.hpp [24:25]
+ boost/fusion/container/list/detail/cpp03/list_to_cons.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/list_to_cons.hpp [36:37]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list10_fwd.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_fwd.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/preprocessed/list_to_cons.hpp [4:5]
+ boost/fusion/container/list/detail/list_to_cons.hpp [4:5]
+ boost/fusion/container/list/detail/reverse_cons.hpp [4:5]
+ boost/fusion/container/list/list.hpp [4:5]
+ boost/fusion/container/list/list_fwd.hpp [4:5]
+ boost/fusion/container/map.hpp [4:5]
+ boost/fusion/container/map/convert.hpp [4:5]
+ boost/fusion/container/map/detail/at_impl.hpp [4:5]
+ boost/fusion/container/map/detail/at_key_impl.hpp [4:5]
+ boost/fusion/container/map/detail/begin_impl.hpp [4:5]
+ boost/fusion/container/map/detail/build_map.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/as_map.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/as_map.hpp [67:68]
+ boost/fusion/container/map/detail/cpp03/begin_impl.hpp [5:6]
+ boost/fusion/container/map/detail/cpp03/convert.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/convert_impl.hpp [5:6]
+ boost/fusion/container/map/detail/cpp03/deref_data_impl.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/deref_impl.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/end_impl.hpp [5:6]
+ boost/fusion/container/map/detail/cpp03/key_of_impl.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/limits.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/map.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/map.hpp [47:48]
+ boost/fusion/container/map/detail/cpp03/map_fwd.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/map_fwd.hpp [24:25]
+ boost/fusion/container/map/detail/cpp03/preprocessed/as_map.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map10_fwd.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/preprocessed/map_fwd.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/value_of_data_impl.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/value_of_impl.hpp [4:5]
+ boost/fusion/container/map/detail/end_impl.hpp [4:5]
+ boost/fusion/container/map/detail/map_impl.hpp [4:5]
+ boost/fusion/container/map/detail/map_index.hpp [4:5]
+ boost/fusion/container/map/detail/value_at_impl.hpp [4:5]
+ boost/fusion/container/map/detail/value_at_key_impl.hpp [4:5]
+ boost/fusion/container/map/map.hpp [4:5]
+ boost/fusion/container/map/map_fwd.hpp [4:5]
+ boost/fusion/container/map/map_iterator.hpp [5:6]
+ boost/fusion/container/set.hpp [4:5]
+ boost/fusion/container/set/convert.hpp [4:5]
+ boost/fusion/container/set/detail/as_set.hpp [4:5]
+ boost/fusion/container/set/detail/begin_impl.hpp [5:6]
+ boost/fusion/container/set/detail/convert_impl.hpp [5:6]
+ boost/fusion/container/set/detail/cpp03/as_set.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/as_set.hpp [67:68]
+ boost/fusion/container/set/detail/cpp03/limits.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/as_set.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set10_fwd.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/preprocessed/set_fwd.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/set.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/set.hpp [40:41]
+ boost/fusion/container/set/detail/cpp03/set_fwd.hpp [4:5]
+ boost/fusion/container/set/detail/cpp03/set_fwd.hpp [24:25]
+ boost/fusion/container/set/detail/deref_data_impl.hpp [4:5]
+ boost/fusion/container/set/detail/deref_impl.hpp [4:5]
+ boost/fusion/container/set/detail/end_impl.hpp [5:6]
+ boost/fusion/container/set/detail/key_of_impl.hpp [4:5]
+ boost/fusion/container/set/detail/value_of_data_impl.hpp [4:5]
+ boost/fusion/container/set/detail/value_of_impl.hpp [4:5]
+ boost/fusion/container/set/set.hpp [4:5]
+ boost/fusion/container/set/set_fwd.hpp [4:5]
+ boost/fusion/container/vector.hpp [4:5]
+ boost/fusion/container/vector/convert.hpp [4:5]
+ boost/fusion/container/vector/detail/as_vector.hpp [4:5]
+ boost/fusion/container/vector/detail/at_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/config.hpp [4:5]
+ boost/fusion/container/vector/detail/convert_impl.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/as_vector.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/as_vector.hpp [67:68]
+ boost/fusion/container/vector/detail/cpp03/limits.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/as_vector.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector10_fwd.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_chooser10.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vector_fwd.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/preprocessed/vvector10_fwd.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/value_at_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/vector.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/vector.hpp [72:73]
+ boost/fusion/container/vector/detail/cpp03/vector10.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/vector10.hpp [75:76]
+ boost/fusion/container/vector/detail/cpp03/vector10_fwd.hpp [6:7]
+ boost/fusion/container/vector/detail/cpp03/vector10_fwd.hpp [34:35]
+ boost/fusion/container/vector/detail/cpp03/vector20.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/vector20.hpp [50:51]
+ boost/fusion/container/vector/detail/cpp03/vector20_fwd.hpp [6:7]
+ boost/fusion/container/vector/detail/cpp03/vector20_fwd.hpp [28:29]
+ boost/fusion/container/vector/detail/cpp03/vector30.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/vector30.hpp [49:50]
+ boost/fusion/container/vector/detail/cpp03/vector30_fwd.hpp [6:7]
+ boost/fusion/container/vector/detail/cpp03/vector30_fwd.hpp [28:29]
+ boost/fusion/container/vector/detail/cpp03/vector40.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/vector40.hpp [50:51]
+ boost/fusion/container/vector/detail/cpp03/vector40_fwd.hpp [6:7]
+ boost/fusion/container/vector/detail/cpp03/vector40_fwd.hpp [28:29]
+ boost/fusion/container/vector/detail/cpp03/vector50.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/vector50.hpp [49:50]
+ boost/fusion/container/vector/detail/cpp03/vector50_fwd.hpp [6:7]
+ boost/fusion/container/vector/detail/cpp03/vector50_fwd.hpp [28:29]
+ boost/fusion/container/vector/detail/cpp03/vector_forward_ctor.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/vector_fwd.hpp [5:6]
+ boost/fusion/container/vector/detail/cpp03/vector_fwd.hpp [39:40]
+ boost/fusion/container/vector/detail/cpp03/vector_n.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp [4:5]
+ boost/fusion/container/vector/detail/cpp03/vector_n_chooser.hpp [50:51]
+ boost/fusion/container/vector/detail/value_at_impl.hpp [4:5]
+ boost/fusion/container/vector/vector.hpp [4:5]
+ boost/fusion/container/vector/vector10.hpp [4:5]
+ boost/fusion/container/vector/vector20.hpp [4:5]
+ boost/fusion/container/vector/vector30.hpp [4:5]
+ boost/fusion/container/vector/vector40.hpp [4:5]
+ boost/fusion/container/vector/vector50.hpp [4:5]
+ boost/fusion/container/vector/vector_fwd.hpp [4:5]
+ boost/fusion/include/accumulate.hpp [4:5]
+ boost/fusion/include/adapt_adt.hpp [4:5]
+ boost/fusion/include/adapt_adt_named.hpp [4:5]
+ boost/fusion/include/adapt_assoc_adt.hpp [4:5]
+ boost/fusion/include/adapt_assoc_adt_named.hpp [4:5]
+ boost/fusion/include/adapt_assoc_struct.hpp [4:5]
+ boost/fusion/include/adapt_assoc_struct_named.hpp [4:5]
+ boost/fusion/include/adapt_struct.hpp [4:5]
+ boost/fusion/include/adapt_struct_named.hpp [4:5]
+ boost/fusion/include/adapted.hpp [4:5]
+ boost/fusion/include/adapter.hpp [4:5]
+ boost/fusion/include/advance.hpp [4:5]
+ boost/fusion/include/algorithm.hpp [4:5]
+ boost/fusion/include/all.hpp [4:5]
+ boost/fusion/include/any.hpp [4:5]
+ boost/fusion/include/array.hpp [4:5]
+ boost/fusion/include/as_deque.hpp [4:5]
+ boost/fusion/include/as_list.hpp [4:5]
+ boost/fusion/include/as_map.hpp [4:5]
+ boost/fusion/include/as_set.hpp [4:5]
+ boost/fusion/include/at_c.hpp [4:5]
+ boost/fusion/include/at_key.hpp [4:5]
+ boost/fusion/include/auxiliary.hpp [4:5]
+ boost/fusion/include/back.hpp [4:5]
+ boost/fusion/include/begin.hpp [4:5]
+ boost/fusion/include/boost_array.hpp [4:5]
+ boost/fusion/include/boost_tuple.hpp [4:5]
+ boost/fusion/include/category_of.hpp [4:5]
+ boost/fusion/include/clear.hpp [4:5]
+ boost/fusion/include/comparison.hpp [4:5]
+ boost/fusion/include/cons.hpp [4:5]
+ boost/fusion/include/cons_tie.hpp [4:5]
+ boost/fusion/include/container.hpp [4:5]
+ boost/fusion/include/convert.hpp [4:5]
+ boost/fusion/include/copy.hpp [4:5]
+ boost/fusion/include/count.hpp [4:5]
+ boost/fusion/include/count_if.hpp [4:5]
+ boost/fusion/include/deduce.hpp [4:5]
+ boost/fusion/include/deduce_sequence.hpp [4:5]
+ boost/fusion/include/define_assoc_struct.hpp [4:5]
+ boost/fusion/include/define_struct.hpp [4:5]
+ boost/fusion/include/define_struct_inline.hpp [4:5]
+ boost/fusion/include/deque.hpp [4:5]
+ boost/fusion/include/deque_fwd.hpp [4:5]
+ boost/fusion/include/deque_tie.hpp [4:5]
+ boost/fusion/include/deref.hpp [4:5]
+ boost/fusion/include/deref_data.hpp [4:5]
+ boost/fusion/include/distance.hpp [4:5]
+ boost/fusion/include/empty.hpp [4:5]
+ boost/fusion/include/end.hpp [4:5]
+ boost/fusion/include/equal_to.hpp [4:5]
+ boost/fusion/include/erase.hpp [4:5]
+ boost/fusion/include/erase_key.hpp [4:5]
+ boost/fusion/include/filter.hpp [4:5]
+ boost/fusion/include/filter_if.hpp [4:5]
+ boost/fusion/include/filter_view.hpp [4:5]
+ boost/fusion/include/find.hpp [4:5]
+ boost/fusion/include/find_if.hpp [4:5]
+ boost/fusion/include/flatten.hpp [4:5]
+ boost/fusion/include/flatten_view.hpp [4:5]
+ boost/fusion/include/fold.hpp [4:5]
+ boost/fusion/include/for_each.hpp [4:5]
+ boost/fusion/include/front.hpp [4:5]
+ boost/fusion/include/functional.hpp [4:5]
+ boost/fusion/include/fused.hpp [4:5]
+ boost/fusion/include/fused_function_object.hpp [4:5]
+ boost/fusion/include/fused_procedure.hpp [4:5]
+ boost/fusion/include/generation.hpp [4:5]
+ boost/fusion/include/greater.hpp [4:5]
+ boost/fusion/include/greater_equal.hpp [4:5]
+ boost/fusion/include/has_key.hpp [4:5]
+ boost/fusion/include/hash.hpp [4:5]
+ boost/fusion/include/ignore.hpp [4:5]
+ boost/fusion/include/in.hpp [4:5]
+ boost/fusion/include/insert.hpp [4:5]
+ boost/fusion/include/insert_range.hpp [4:5]
+ boost/fusion/include/intrinsic.hpp [4:5]
+ boost/fusion/include/invocation.hpp [4:5]
+ boost/fusion/include/invoke.hpp [4:5]
+ boost/fusion/include/invoke_function_object.hpp [4:5]
+ boost/fusion/include/invoke_procedure.hpp [4:5]
+ boost/fusion/include/is_iterator.hpp [4:5]
+ boost/fusion/include/is_segmented.hpp [4:5]
+ boost/fusion/include/is_view.hpp [4:5]
+ boost/fusion/include/iter_fold.hpp [4:5]
+ boost/fusion/include/iteration.hpp [4:5]
+ boost/fusion/include/iterator.hpp [4:5]
+ boost/fusion/include/iterator_adapter.hpp [4:5]
+ boost/fusion/include/iterator_base.hpp [4:5]
+ boost/fusion/include/iterator_facade.hpp [4:5]
+ boost/fusion/include/iterator_range.hpp [4:5]
+ boost/fusion/include/key_of.hpp [4:5]
+ boost/fusion/include/less.hpp [4:5]
+ boost/fusion/include/less_equal.hpp [4:5]
+ boost/fusion/include/list.hpp [4:5]
+ boost/fusion/include/list_fwd.hpp [4:5]
+ boost/fusion/include/list_tie.hpp [4:5]
+ boost/fusion/include/make_cons.hpp [4:5]
+ boost/fusion/include/make_deque.hpp [4:5]
+ boost/fusion/include/make_fused.hpp [4:5]
+ boost/fusion/include/make_fused_function_object.hpp [4:5]
+ boost/fusion/include/make_fused_procedure.hpp [4:5]
+ boost/fusion/include/make_list.hpp [4:5]
+ boost/fusion/include/make_map.hpp [4:5]
+ boost/fusion/include/make_set.hpp [4:5]
+ boost/fusion/include/make_tuple.hpp [4:5]
+ boost/fusion/include/make_unfused.hpp [4:5]
+ boost/fusion/include/make_vector.hpp [4:5]
+ boost/fusion/include/map.hpp [4:5]
+ boost/fusion/include/map_fwd.hpp [4:5]
+ boost/fusion/include/map_tie.hpp [4:5]
+ boost/fusion/include/move.hpp [4:5]
+ boost/fusion/include/mpl.hpp [4:5]
+ boost/fusion/include/next.hpp [4:5]
+ boost/fusion/include/nil.hpp [4:5]
+ boost/fusion/include/none.hpp [4:5]
+ boost/fusion/include/not_equal_to.hpp [4:5]
+ boost/fusion/include/nview.hpp [4:5]
+ boost/fusion/include/out.hpp [4:5]
+ boost/fusion/include/pair.hpp [4:5]
+ boost/fusion/include/pair_tie.hpp [4:5]
+ boost/fusion/include/pop_back.hpp [4:5]
+ boost/fusion/include/pop_front.hpp [4:5]
+ boost/fusion/include/prior.hpp [4:5]
+ boost/fusion/include/proxy_type.hpp [4:5]
+ boost/fusion/include/push_back.hpp [4:5]
+ boost/fusion/include/query.hpp [4:5]
+ boost/fusion/include/remove.hpp [4:5]
+ boost/fusion/include/remove_if.hpp [4:5]
+ boost/fusion/include/repetitive_view.hpp [4:5]
+ boost/fusion/include/replace.hpp [4:5]
+ boost/fusion/include/replace_if.hpp [4:5]
+ boost/fusion/include/reverse.hpp [4:5]
+ boost/fusion/include/reverse_fold.hpp [4:5]
+ boost/fusion/include/reverse_iter_fold.hpp [4:5]
+ boost/fusion/include/reverse_view.hpp [4:5]
+ boost/fusion/include/segmented_fold_until.hpp [4:5]
+ boost/fusion/include/segmented_iterator.hpp [4:5]
+ boost/fusion/include/segments.hpp [4:5]
+ boost/fusion/include/sequence.hpp [4:5]
+ boost/fusion/include/sequence_base.hpp [4:5]
+ boost/fusion/include/sequence_facade.hpp [4:5]
+ boost/fusion/include/set.hpp [4:5]
+ boost/fusion/include/set_fwd.hpp [4:5]
+ boost/fusion/include/size.hpp [4:5]
+ boost/fusion/include/std_array.hpp [4:5]
+ boost/fusion/include/std_pair.hpp [4:5]
+ boost/fusion/include/std_tuple.hpp [3:4]
+ boost/fusion/include/struct.hpp [4:5]
+ boost/fusion/include/support.hpp [4:5]
+ boost/fusion/include/swap.hpp [4:5]
+ boost/fusion/include/tag_of.hpp [4:5]
+ boost/fusion/include/tag_of_fwd.hpp [4:5]
+ boost/fusion/include/transformation.hpp [4:5]
+ boost/fusion/include/tuple.hpp [4:5]
+ boost/fusion/include/tuple_fwd.hpp [4:5]
+ boost/fusion/include/tuple_tie.hpp [4:5]
+ boost/fusion/include/unfused.hpp [4:5]
+ boost/fusion/include/unfused_typed.hpp [4:5]
+ boost/fusion/include/unused.hpp [4:5]
+ boost/fusion/include/value_at_key.hpp [4:5]
+ boost/fusion/include/value_of.hpp [4:5]
+ boost/fusion/include/value_of_data.hpp [4:5]
+ boost/fusion/include/vector.hpp [4:5]
+ boost/fusion/include/vector10.hpp [4:5]
+ boost/fusion/include/vector20.hpp [4:5]
+ boost/fusion/include/vector30.hpp [4:5]
+ boost/fusion/include/vector40.hpp [4:5]
+ boost/fusion/include/vector50.hpp [4:5]
+ boost/fusion/include/vector_fwd.hpp [4:5]
+ boost/fusion/include/vector_tie.hpp [4:5]
+ boost/fusion/include/view.hpp [4:5]
+ boost/fusion/include/void.hpp [4:5]
+ boost/fusion/include/zip.hpp [4:5]
+ boost/fusion/include/zip_view.hpp [4:5]
+ boost/fusion/iterator.hpp [4:5]
+ boost/fusion/iterator/advance.hpp [4:5]
+ boost/fusion/iterator/basic_iterator.hpp [4:5]
+ boost/fusion/iterator/deref_data.hpp [4:5]
+ boost/fusion/iterator/detail/segment_sequence.hpp [4:5]
+ boost/fusion/iterator/detail/segmented_equal_to.hpp [4:5]
+ boost/fusion/iterator/detail/segmented_iterator.hpp [4:5]
+ boost/fusion/iterator/detail/segmented_next_impl.hpp [4:5]
+ boost/fusion/iterator/equal_to.hpp [4:5]
+ boost/fusion/iterator/iterator_adapter.hpp [4:5]
+ boost/fusion/iterator/iterator_facade.hpp [4:5]
+ boost/fusion/iterator/key_of.hpp [4:5]
+ boost/fusion/iterator/mpl/convert_iterator.hpp [4:5]
+ boost/fusion/iterator/segmented_iterator.hpp [4:5]
+ boost/fusion/iterator/value_of_data.hpp [4:5]
+ boost/fusion/mpl.hpp [4:5]
+ boost/fusion/mpl/erase.hpp [4:5]
+ boost/fusion/mpl/erase_key.hpp [4:5]
+ boost/fusion/mpl/insert.hpp [4:5]
+ boost/fusion/mpl/insert_range.hpp [4:5]
+ boost/fusion/mpl/pop_back.hpp [4:5]
+ boost/fusion/mpl/pop_front.hpp [4:5]
+ boost/fusion/mpl/push_back.hpp [4:5]
+ boost/fusion/mpl/push_front.hpp [4:5]
+ boost/fusion/sequence.hpp [4:5]
+ boost/fusion/sequence/comparison/enable_comparison.hpp [4:5]
+ boost/fusion/sequence/comparison/equal_to.hpp [5:6]
+ boost/fusion/sequence/comparison/greater.hpp [5:6]
+ boost/fusion/sequence/comparison/greater_equal.hpp [5:6]
+ boost/fusion/sequence/comparison/less.hpp [5:6]
+ boost/fusion/sequence/comparison/less_equal.hpp [5:6]
+ boost/fusion/sequence/comparison/not_equal_to.hpp [5:6]
+ boost/fusion/sequence/convert.hpp [4:5]
+ boost/fusion/sequence/hash.hpp [4:5]
+ boost/fusion/sequence/intrinsic.hpp [4:5]
+ boost/fusion/sequence/intrinsic/at.hpp [4:5]
+ boost/fusion/sequence/intrinsic/at_c.hpp [4:5]
+ boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp [4:5]
+ boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp [4:5]
+ boost/fusion/sequence/intrinsic/detail/segmented_end.hpp [4:5]
+ boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp [4:5]
+ boost/fusion/sequence/intrinsic_fwd.hpp [4:5]
+ boost/fusion/sequence/io/in.hpp [6:7]
+ boost/fusion/sequence/sequence_facade.hpp [4:5]
+ boost/fusion/support.hpp [4:5]
+ boost/fusion/support/as_const.hpp [4:5]
+ boost/fusion/support/config.hpp [5:6]
+ boost/fusion/support/detail/access.hpp [4:5]
+ boost/fusion/support/detail/and.hpp [4:5]
+ boost/fusion/support/detail/enabler.hpp [4:5]
+ boost/fusion/support/detail/index_sequence.hpp [5:6]
+ boost/fusion/support/detail/is_same_size.hpp [4:5]
+ boost/fusion/support/detail/pp_round.hpp [4:5]
+ boost/fusion/support/detail/segmented_fold_until_impl.hpp [4:5]
+ boost/fusion/support/is_sequence.hpp [4:5]
+ boost/fusion/support/iterator_base.hpp [4:5]
+ boost/fusion/support/pair.hpp [5:6]
+ boost/fusion/support/segmented_fold_until.hpp [4:5]
+ boost/fusion/support/sequence_base.hpp [5:6]
+ boost/fusion/support/tag_of.hpp [4:5]
+ boost/fusion/support/tag_of_fwd.hpp [5:6]
+ boost/fusion/support/unused.hpp [4:5]
+ boost/fusion/support/void.hpp [4:5]
+ boost/fusion/tuple/detail/make_tuple.hpp [4:5]
+ boost/fusion/tuple/detail/make_tuple.hpp [36:37]
+ boost/fusion/tuple/detail/preprocessed/make_tuple.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple10_fwd.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple_fwd.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie.hpp [4:5]
+ boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp [4:5]
+ boost/fusion/tuple/detail/tuple.hpp [4:5]
+ boost/fusion/tuple/detail/tuple.hpp [32:33]
+ boost/fusion/tuple/detail/tuple_expand.hpp [4:5]
+ boost/fusion/tuple/detail/tuple_fwd.hpp [4:5]
+ boost/fusion/tuple/detail/tuple_fwd.hpp [24:25]
+ boost/fusion/tuple/detail/tuple_tie.hpp [4:5]
+ boost/fusion/tuple/detail/tuple_tie.hpp [27:28]
+ boost/fusion/tuple/make_tuple.hpp [4:5]
+ boost/fusion/tuple/tuple.hpp [4:5]
+ boost/fusion/tuple/tuple_fwd.hpp [4:5]
+ boost/fusion/tuple/tuple_tie.hpp [4:5]
+ boost/fusion/view/detail/strictest_traversal.hpp [5:6]
+ boost/fusion/view/filter_view/detail/deref_data_impl.hpp [4:5]
+ boost/fusion/view/filter_view/detail/key_of_impl.hpp [4:5]
+ boost/fusion/view/filter_view/detail/value_of_data_impl.hpp [4:5]
+ boost/fusion/view/filter_view/filter_view_iterator.hpp [4:5]
+ boost/fusion/view/flatten_view.hpp [4:5]
+ boost/fusion/view/flatten_view/flatten_view.hpp [4:5]
+ boost/fusion/view/flatten_view/flatten_view_iterator.hpp [4:5]
+ boost/fusion/view/iterator_range/detail/at_impl.hpp [4:5]
+ boost/fusion/view/iterator_range/detail/segmented_iterator_range.hpp [4:5]
+ boost/fusion/view/iterator_range/detail/size_impl.hpp [4:5]
+ boost/fusion/view/iterator_range/detail/value_at_impl.hpp [4:5]
+ boost/fusion/view/iterator_range/iterator_range.hpp [4:5]
+ boost/fusion/view/joint_view/detail/deref_data_impl.hpp [4:5]
+ boost/fusion/view/joint_view/detail/key_of_impl.hpp [4:5]
+ boost/fusion/view/joint_view/detail/value_of_data_impl.hpp [4:5]
+ boost/fusion/view/joint_view/joint_view.hpp [4:5]
+ boost/fusion/view/joint_view/joint_view_fwd.hpp [4:5]
+ boost/fusion/view/joint_view/joint_view_iterator.hpp [4:5]
+ boost/fusion/view/nview/detail/advance_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/begin_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/cpp03/nview_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/deref_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/distance_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/end_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/equal_to_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/next_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/nview_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/prior_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/value_of_impl.hpp [4:5]
+ boost/fusion/view/repetitive_view.hpp [4:5]
+ boost/fusion/view/repetitive_view/detail/begin_impl.hpp [4:5]
+ boost/fusion/view/repetitive_view/detail/deref_impl.hpp [4:5]
+ boost/fusion/view/repetitive_view/detail/end_impl.hpp [4:5]
+ boost/fusion/view/repetitive_view/detail/next_impl.hpp [4:5]
+ boost/fusion/view/repetitive_view/detail/value_of_impl.hpp [4:5]
+ boost/fusion/view/repetitive_view/repetitive_view.hpp [4:5]
+ boost/fusion/view/repetitive_view/repetitive_view_fwd.hpp [4:5]
+ boost/fusion/view/repetitive_view/repetitive_view_iterator.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/at_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/deref_data_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/key_of_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/value_at_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/value_of_data_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/reverse_view_iterator.hpp [4:5]
+ boost/fusion/view/single_view/detail/distance_impl.hpp [4:5]
+ boost/fusion/view/single_view/detail/equal_to_impl.hpp [4:5]
+ boost/fusion/view/single_view/detail/next_impl.hpp [5:6]
+ boost/fusion/view/single_view/detail/prior_impl.hpp [4:5]
+ boost/fusion/view/transform_view/detail/value_at_impl.hpp [5:6]
+ boost/fusion/view/transform_view/transform_view_iterator.hpp [4:5]
+ boost/fusion/view/zip_view/detail/value_of_impl.hpp [5:6]
+ boost/hof.hpp [4:5]
+ boost/hof/alias.hpp [4:5]
+ boost/hof/always.hpp [4:5]
+ boost/hof/apply.hpp [4:5]
+ boost/hof/apply_eval.hpp [4:5]
+ boost/hof/arg.hpp [4:5]
+ boost/hof/capture.hpp [4:5]
+ boost/hof/combine.hpp [4:5]
+ boost/hof/compose.hpp [4:5]
+ boost/hof/config.hpp [4:5]
+ boost/hof/construct.hpp [4:5]
+ boost/hof/decay.hpp [4:5]
+ boost/hof/decorate.hpp [4:5]
+ boost/hof/detail/and.hpp [4:5]
+ boost/hof/detail/callable_base.hpp [4:5]
+ boost/hof/detail/can_be_called.hpp [4:5]
+ boost/hof/detail/compressed_pair.hpp [4:5]
+ boost/hof/detail/constexpr_deduce.hpp [4:5]
+ boost/hof/detail/delegate.hpp [4:5]
+ boost/hof/detail/forward.hpp [4:5]
+ boost/hof/detail/holder.hpp [4:5]
+ boost/hof/detail/intrinsics.hpp [4:5]
+ boost/hof/detail/join.hpp [4:5]
+ boost/hof/detail/make.hpp [4:5]
+ boost/hof/detail/move.hpp [4:5]
+ boost/hof/detail/noexcept.hpp [4:5]
+ boost/hof/detail/pp.hpp [4:5]
+ boost/hof/detail/recursive_constexpr_depth.hpp [4:5]
+ boost/hof/detail/remove_rvalue_reference.hpp [4:5]
+ boost/hof/detail/result_of.hpp [4:5]
+ boost/hof/detail/result_type.hpp [4:5]
+ boost/hof/detail/seq.hpp [4:5]
+ boost/hof/detail/static_const_var.hpp [4:5]
+ boost/hof/detail/unpack_tuple.hpp [4:5]
+ boost/hof/detail/unwrap.hpp [4:5]
+ boost/hof/detail/using.hpp [4:5]
+ boost/hof/eval.hpp [4:5]
+ boost/hof/first_of.hpp [4:5]
+ boost/hof/fix.hpp [4:5]
+ boost/hof/flip.hpp [4:5]
+ boost/hof/flow.hpp [4:5]
+ boost/hof/fold.hpp [4:5]
+ boost/hof/function.hpp [4:5]
+ boost/hof/function_param_limit.hpp [4:5]
+ boost/hof/identity.hpp [4:5]
+ boost/hof/if.hpp [4:5]
+ boost/hof/implicit.hpp [4:5]
+ boost/hof/indirect.hpp [4:5]
+ boost/hof/infix.hpp [4:5]
+ boost/hof/is_invocable.hpp [4:5]
+ boost/hof/is_unpackable.hpp [4:5]
+ boost/hof/lambda.hpp [4:5]
+ boost/hof/lazy.hpp [4:5]
+ boost/hof/lift.hpp [4:5]
+ boost/hof/limit.hpp [4:5]
+ boost/hof/match.hpp [4:5]
+ boost/hof/mutable.hpp [4:5]
+ boost/hof/pack.hpp [4:5]
+ boost/hof/partial.hpp [4:5]
+ boost/hof/pipable.hpp [4:5]
+ boost/hof/placeholders.hpp [4:5]
+ boost/hof/proj.hpp [4:5]
+ boost/hof/protect.hpp [4:5]
+ boost/hof/repeat.hpp [4:5]
+ boost/hof/repeat_while.hpp [4:5]
+ boost/hof/result.hpp [4:5]
+ boost/hof/returns.hpp [4:5]
+ boost/hof/reveal.hpp [4:5]
+ boost/hof/reverse_fold.hpp [4:5]
+ boost/hof/rotate.hpp [4:5]
+ boost/hof/static.hpp [4:5]
+ boost/hof/tap.hpp [4:5]
+ boost/hof/unpack.hpp [4:5]
+ boost/hof/unpack_sequence.hpp [4:5]
+ boost/hof/version.hpp [4:5]
+ boost/phoenix.hpp [5:6]
+ boost/phoenix/bind.hpp [4:5]
+ boost/phoenix/bind/bind_function.hpp [4:5]
+ boost/phoenix/bind/bind_function_object.hpp [4:5]
+ boost/phoenix/bind/bind_member_function.hpp [4:5]
+ boost/phoenix/bind/bind_member_variable.hpp [5:6]
+ boost/phoenix/bind/detail/cpp03/bind_member_function.hpp [5:6]
+ boost/phoenix/bind/detail/member_variable.hpp [4:5]
+ boost/phoenix/config.hpp [7:8]
+ boost/phoenix/core/actor.hpp [7:8]
+ boost/phoenix/core/argument.hpp [6:7]
+ boost/phoenix/core/argument.hpp [89:90]
+ boost/phoenix/core/argument.hpp [120:121]
+ boost/phoenix/core/arity.hpp [5:6]
+ boost/phoenix/core/call.hpp [5:6]
+ boost/phoenix/core/debug.hpp [6:7]
+ boost/phoenix/core/detail/argument.hpp [6:7]
+ boost/phoenix/core/detail/cpp03/actor_operator.hpp [27:28]
+ boost/phoenix/core/detail/cpp03/actor_result_of.hpp [28:29]
+ boost/phoenix/core/detail/cpp03/call.hpp [24:25]
+ boost/phoenix/core/detail/cpp03/expression.hpp [22:23]
+ boost/phoenix/core/detail/cpp03/function_equal.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/function_equal.hpp [25:26]
+ boost/phoenix/core/detail/cpp03/function_eval.hpp [15:16]
+ boost/phoenix/core/detail/cpp03/function_eval_expr.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/function_eval_expr.hpp [20:21]
+ boost/phoenix/core/detail/cpp03/phx2_result.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/phx2_result.hpp [26:27]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_operator.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/actor_result_of_10.hpp [5:6]
+ boost/phoenix/core/detail/cpp03/preprocessed/call.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/expression.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result_10.hpp [4:5]
+ boost/phoenix/core/detail/function_eval.hpp [5:6]
+ boost/phoenix/core/detail/index_sequence.hpp [4:5]
+ boost/phoenix/core/detail/phx2_result.hpp [4:5]
+ boost/phoenix/core/environment.hpp [5:6]
+ boost/phoenix/core/function_equal.hpp [5:6]
+ boost/phoenix/core/is_actor.hpp [4:5]
+ boost/phoenix/core/is_value.hpp [5:6]
+ boost/phoenix/core/nothing.hpp [4:5]
+ boost/phoenix/core/reference.hpp [5:6]
+ boost/phoenix/core/terminal.hpp [5:6]
+ boost/phoenix/core/terminal_fwd.hpp [5:6]
+ boost/phoenix/core/value.hpp [5:6]
+ boost/phoenix/core/visit_each.hpp [5:6]
+ boost/phoenix/function.hpp [4:5]
+ boost/phoenix/function/adapt_callable.hpp [5:6]
+ boost/phoenix/function/adapt_function.hpp [6:7]
+ boost/phoenix/function/detail/cpp03/function_operator.hpp [24:25]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator.hpp [4:5]
+ boost/phoenix/function/detail/cpp03/preprocessed/function_operator_10.hpp [5:6]
+ boost/phoenix/function/function.hpp [6:7]
+ boost/phoenix/function/lazy_list.hpp [37:38]
+ boost/phoenix/function/lazy_operator.hpp [31:32]
+ boost/phoenix/function/lazy_prelude.hpp [119:120]
+ boost/phoenix/function/lazy_reuse.hpp [28:29]
+ boost/phoenix/function/lazy_signature.hpp [38:39]
+ boost/phoenix/function/lazy_smart.hpp [15:16]
+ boost/phoenix/fusion.hpp [5:6]
+ boost/phoenix/fusion/at.hpp [6:7]
+ boost/phoenix/object.hpp [5:6]
+ boost/phoenix/object/const_cast.hpp [5:6]
+ boost/phoenix/object/construct.hpp [5:6]
+ boost/phoenix/object/delete.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/construct.hpp [24:25]
+ boost/phoenix/object/detail/cpp03/construct_eval.hpp [26:27]
+ boost/phoenix/object/detail/cpp03/construct_expr.hpp [14:15]
+ boost/phoenix/object/detail/cpp03/new.hpp [24:25]
+ boost/phoenix/object/detail/cpp03/new_eval.hpp [26:27]
+ boost/phoenix/object/detail/cpp03/new_expr.hpp [14:15]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_10.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_eval.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/construct_expr.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/new.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_10.hpp [5:6]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_eval.hpp [4:5]
+ boost/phoenix/object/detail/cpp03/preprocessed/new_expr.hpp [4:5]
+ boost/phoenix/object/detail/target.hpp [5:6]
+ boost/phoenix/object/dynamic_cast.hpp [5:6]
+ boost/phoenix/object/new.hpp [5:6]
+ boost/phoenix/object/reinterpret_cast.hpp [5:6]
+ boost/phoenix/object/static_cast.hpp [5:6]
+ boost/phoenix/operator.hpp [5:6]
+ boost/phoenix/operator/arithmetic.hpp [5:6]
+ boost/phoenix/operator/bitwise.hpp [5:6]
+ boost/phoenix/operator/comparison.hpp [5:6]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval.hpp [19:20]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_eval_result_of.hpp [19:20]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_expr.hpp [13:14]
+ boost/phoenix/operator/detail/cpp03/mem_fun_ptr_gen.hpp [18:19]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_10.hpp [6:7]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_eval_result_of.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_expr.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen.hpp [4:5]
+ boost/phoenix/operator/detail/cpp03/preprocessed/mem_fun_ptr_gen_10.hpp [5:6]
+ boost/phoenix/operator/detail/define_operator.hpp [5:6]
+ boost/phoenix/operator/detail/undef_operator.hpp [4:5]
+ boost/phoenix/operator/if_else.hpp [5:6]
+ boost/phoenix/operator/io.hpp [5:6]
+ boost/phoenix/operator/logical.hpp [5:6]
+ boost/phoenix/operator/member.hpp [6:7]
+ boost/phoenix/operator/self.hpp [5:6]
+ boost/phoenix/phoenix.hpp [5:6]
+ boost/phoenix/scope.hpp [5:6]
+ boost/phoenix/scope/detail/cpp03/dynamic.hpp [28:29]
+ boost/phoenix/scope/detail/cpp03/lambda.hpp [19:20]
+ boost/phoenix/scope/detail/cpp03/local_gen.hpp [6:7]
+ boost/phoenix/scope/detail/cpp03/preprocessed/dynamic.hpp [4:5]
+ boost/phoenix/scope/detail/local_gen.hpp [4:5]
+ boost/phoenix/scope/detail/local_variable.hpp [6:7]
+ boost/phoenix/scope/dynamic.hpp [6:7]
+ boost/phoenix/scope/lambda.hpp [7:8]
+ boost/phoenix/scope/let.hpp [7:8]
+ boost/phoenix/scope/local_variable.hpp [5:6]
+ boost/phoenix/scope/scoped_environment.hpp [5:6]
+ boost/phoenix/statement.hpp [4:5]
+ boost/phoenix/statement/detail/catch_push_back.hpp [23:24]
+ boost/phoenix/statement/detail/preprocessed/catch_push_back.hpp [4:5]
+ boost/phoenix/statement/detail/preprocessed/switch.hpp [4:5]
+ boost/phoenix/statement/detail/preprocessed/try_catch_eval.hpp [4:5]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression.hpp [4:5]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_10.hpp [5:6]
+ boost/phoenix/statement/detail/preprocessed/try_catch_expression_20.hpp [5:6]
+ boost/phoenix/statement/detail/switch.hpp [28:29]
+ boost/phoenix/statement/detail/try_catch_eval.hpp [28:29]
+ boost/phoenix/statement/detail/try_catch_expression.hpp [28:29]
+ boost/phoenix/statement/do_while.hpp [5:6]
+ boost/phoenix/statement/for.hpp [5:6]
+ boost/phoenix/statement/if.hpp [5:6]
+ boost/phoenix/statement/sequence.hpp [6:7]
+ boost/phoenix/statement/switch.hpp [5:6]
+ boost/phoenix/statement/throw.hpp [6:7]
+ boost/phoenix/statement/try_catch.hpp [6:7]
+ boost/phoenix/statement/while.hpp [5:6]
+ boost/phoenix/stl/cmath.hpp [4:5]
+ boost/phoenix/stl/container/container.hpp [5:6]
+ boost/phoenix/support/detail/iterate.hpp [4:5]
+ boost/phoenix/support/detail/iterate_define.hpp [4:5]
+ boost/phoenix/support/detail/iterate_undef.hpp [4:5]
+ boost/phoenix/support/iterate.hpp [4:5]
+ boost/phoenix/support/vector.hpp [44:45]
+ boost/phoenix/version.hpp [6:7]
+ boost/spirit/home/karma/detail/pass_container.hpp [5:6]
+ boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp [6:7]
+ boost/spirit/home/qi.hpp [4:5]
+ boost/spirit/home/qi/action/action.hpp [4:5]
+ boost/spirit/home/qi/auto.hpp [4:5]
+ boost/spirit/home/qi/auxiliary.hpp [5:6]
+ boost/spirit/home/qi/auxiliary/attr.hpp [5:6]
+ boost/spirit/home/qi/auxiliary/eoi.hpp [5:6]
+ boost/spirit/home/qi/auxiliary/eol.hpp [5:6]
+ boost/spirit/home/qi/auxiliary/eps.hpp [4:5]
+ boost/spirit/home/qi/auxiliary/lazy.hpp [4:5]
+ boost/spirit/home/qi/binary.hpp [4:5]
+ boost/spirit/home/qi/binary/binary.hpp [5:6]
+ boost/spirit/home/qi/char/char.hpp [6:7]
+ boost/spirit/home/qi/char/char_class.hpp [4:5]
+ boost/spirit/home/qi/char/char_parser.hpp [4:5]
+ boost/spirit/home/qi/copy.hpp [4:5]
+ boost/spirit/home/qi/detail/alternative_function.hpp [4:5]
+ boost/spirit/home/qi/detail/assign_to.hpp [6:7]
+ boost/spirit/home/qi/detail/construct.hpp [5:6]
+ boost/spirit/home/qi/detail/expect_function.hpp [4:5]
+ boost/spirit/home/qi/detail/fail_function.hpp [4:5]
+ boost/spirit/home/qi/detail/parse.hpp [4:5]
+ boost/spirit/home/qi/detail/parse_auto.hpp [4:5]
+ boost/spirit/home/qi/detail/pass_container.hpp [5:6]
+ boost/spirit/home/qi/detail/pass_function.hpp [4:5]
+ boost/spirit/home/qi/detail/permute_function.hpp [4:5]
+ boost/spirit/home/qi/detail/string_parse.hpp [4:5]
+ boost/spirit/home/qi/directive.hpp [4:5]
+ boost/spirit/home/qi/directive/as.hpp [6:7]
+ boost/spirit/home/qi/directive/encoding.hpp [4:5]
+ boost/spirit/home/qi/directive/hold.hpp [4:5]
+ boost/spirit/home/qi/directive/lexeme.hpp [4:5]
+ boost/spirit/home/qi/directive/matches.hpp [4:5]
+ boost/spirit/home/qi/directive/no_case.hpp [4:5]
+ boost/spirit/home/qi/directive/no_skip.hpp [5:6]
+ boost/spirit/home/qi/directive/omit.hpp [4:5]
+ boost/spirit/home/qi/directive/raw.hpp [4:5]
+ boost/spirit/home/qi/directive/repeat.hpp [5:6]
+ boost/spirit/home/qi/directive/skip.hpp [4:5]
+ boost/spirit/home/qi/domain.hpp [4:5]
+ boost/spirit/home/qi/meta_compiler.hpp [4:5]
+ boost/spirit/home/qi/nonterminal.hpp [4:5]
+ boost/spirit/home/qi/nonterminal/debug_handler.hpp [4:5]
+ boost/spirit/home/qi/nonterminal/debug_handler_state.hpp [4:5]
+ boost/spirit/home/qi/nonterminal/detail/fcall.hpp [4:5]
+ boost/spirit/home/qi/nonterminal/detail/parameterized.hpp [5:6]
+ boost/spirit/home/qi/nonterminal/detail/parser_binder.hpp [4:5]
+ boost/spirit/home/qi/nonterminal/error_handler.hpp [4:5]
+ boost/spirit/home/qi/nonterminal/grammar.hpp [4:5]
+ boost/spirit/home/qi/nonterminal/rule.hpp [4:5]
+ boost/spirit/home/qi/nonterminal/simple_trace.hpp [5:6]
+ boost/spirit/home/qi/nonterminal/success_handler.hpp [4:5]
+ boost/spirit/home/qi/numeric.hpp [4:5]
+ boost/spirit/home/qi/numeric/bool.hpp [5:6]
+ boost/spirit/home/qi/numeric/bool_policies.hpp [4:5]
+ boost/spirit/home/qi/numeric/detail/numeric_utils.hpp [8:9]
+ boost/spirit/home/qi/numeric/detail/real_impl.hpp [6:7]
+ boost/spirit/home/qi/numeric/int.hpp [5:6]
+ boost/spirit/home/qi/numeric/numeric_utils.hpp [5:6]
+ boost/spirit/home/qi/numeric/real.hpp [5:6]
+ boost/spirit/home/qi/numeric/real_policies.hpp [5:6]
+ boost/spirit/home/qi/numeric/uint.hpp [6:7]
+ boost/spirit/home/qi/operator.hpp [4:5]
+ boost/spirit/home/qi/operator/alternative.hpp [5:6]
+ boost/spirit/home/qi/operator/and_predicate.hpp [4:5]
+ boost/spirit/home/qi/operator/difference.hpp [4:5]
+ boost/spirit/home/qi/operator/expect.hpp [5:6]
+ boost/spirit/home/qi/operator/kleene.hpp [5:6]
+ boost/spirit/home/qi/operator/list.hpp [5:6]
+ boost/spirit/home/qi/operator/not_predicate.hpp [4:5]
+ boost/spirit/home/qi/operator/optional.hpp [5:6]
+ boost/spirit/home/qi/operator/permutation.hpp [4:5]
+ boost/spirit/home/qi/operator/plus.hpp [5:6]
+ boost/spirit/home/qi/operator/sequence.hpp [5:6]
+ boost/spirit/home/qi/operator/sequence_base.hpp [5:6]
+ boost/spirit/home/qi/operator/sequential_or.hpp [4:5]
+ boost/spirit/home/qi/parse.hpp [5:6]
+ boost/spirit/home/qi/parser.hpp [4:5]
+ boost/spirit/home/qi/reference.hpp [4:5]
+ boost/spirit/home/qi/skip_flag.hpp [4:5]
+ boost/spirit/home/qi/skip_over.hpp [4:5]
+ boost/spirit/home/qi/stream.hpp [4:5]
+ boost/spirit/home/qi/stream/detail/iterator_source.hpp [4:5]
+ boost/spirit/home/qi/stream/detail/match_manip.hpp [4:5]
+ boost/spirit/home/qi/stream/detail/match_manip_auto.hpp [4:5]
+ boost/spirit/home/qi/stream/match_manip.hpp [5:6]
+ boost/spirit/home/qi/stream/match_manip_attr.hpp [5:6]
+ boost/spirit/home/qi/stream/stream.hpp [4:5]
+ boost/spirit/home/qi/string.hpp [4:5]
+ boost/spirit/home/qi/string/detail/tst.hpp [4:5]
+ boost/spirit/home/qi/string/lit.hpp [6:7]
+ boost/spirit/home/qi/string/symbols.hpp [4:5]
+ boost/spirit/home/qi/string/tst.hpp [4:5]
+ boost/spirit/home/qi/string/tst_map.hpp [4:5]
+ boost/spirit/home/qi/what.hpp [4:5]
+ boost/spirit/home/support.hpp [4:5]
+ boost/spirit/home/support/action_dispatch.hpp [6:7]
+ boost/spirit/home/support/algorithm/any.hpp [4:5]
+ boost/spirit/home/support/algorithm/any_if.hpp [5:6]
+ boost/spirit/home/support/algorithm/any_if_ns.hpp [5:6]
+ boost/spirit/home/support/algorithm/any_if_ns_so.hpp [5:6]
+ boost/spirit/home/support/algorithm/any_ns.hpp [4:5]
+ boost/spirit/home/support/algorithm/any_ns_so.hpp [4:5]
+ boost/spirit/home/support/argument.hpp [6:7]
+ boost/spirit/home/support/argument_expression.hpp [6:7]
+ boost/spirit/home/support/attributes.hpp [5:6]
+ boost/spirit/home/support/attributes_fwd.hpp [6:7]
+ boost/spirit/home/support/auto.hpp [4:5]
+ boost/spirit/home/support/char_class.hpp [5:6]
+ boost/spirit/home/support/char_encoding/ascii.hpp [5:6]
+ boost/spirit/home/support/char_encoding/iso8859_1.hpp [5:6]
+ boost/spirit/home/support/char_encoding/standard.hpp [5:6]
+ boost/spirit/home/support/char_encoding/standard_wide.hpp [5:6]
+ boost/spirit/home/support/char_encoding/unicode.hpp [5:6]
+ boost/spirit/home/support/char_encoding/unicode/category_table.hpp [4:5]
+ boost/spirit/home/support/char_encoding/unicode/create_tables.cpp [4:5]
+ boost/spirit/home/support/char_encoding/unicode/lowercase_table.hpp [4:5]
+ boost/spirit/home/support/char_encoding/unicode/query.hpp [4:5]
+ boost/spirit/home/support/char_encoding/unicode/script_table.hpp [4:5]
+ boost/spirit/home/support/char_encoding/unicode/uppercase_table.hpp [4:5]
+ boost/spirit/home/support/char_set/range.hpp [4:5]
+ boost/spirit/home/support/char_set/range_functions.hpp [4:5]
+ boost/spirit/home/support/char_set/range_run.hpp [4:5]
+ boost/spirit/home/support/char_set/range_run_impl.hpp [4:5]
+ boost/spirit/home/support/container.hpp [6:7]
+ boost/spirit/home/support/context.hpp [6:7]
+ boost/spirit/home/support/detail/as_variant.hpp [4:5]
+ boost/spirit/home/support/detail/hold_any.hpp [7:8]
+ boost/spirit/home/support/detail/is_spirit_tag.hpp [4:5]
+ boost/spirit/home/support/detail/make_vector.hpp [4:5]
+ boost/spirit/home/support/detail/pow10.hpp [6:7]
+ boost/spirit/home/support/detail/sign.hpp [6:7]
+ boost/spirit/home/support/detail/what_function.hpp [4:5]
+ boost/spirit/home/support/extended_variant.hpp [4:5]
+ boost/spirit/home/support/handles_container.hpp [4:5]
+ boost/spirit/home/support/has_semantic_action.hpp [4:5]
+ boost/spirit/home/support/info.hpp [4:5]
+ boost/spirit/home/support/iterators/line_pos_iterator.hpp [6:7]
+ boost/spirit/home/support/iterators/multi_pass_fwd.hpp [6:7]
+ boost/spirit/home/support/lazy.hpp [4:5]
+ boost/spirit/home/support/nonterminal/expand_arg.hpp [4:5]
+ boost/spirit/home/support/nonterminal/extract_param.hpp [6:7]
+ boost/spirit/home/support/nonterminal/locals.hpp [5:6]
+ boost/spirit/home/support/sequence_base_id.hpp [4:5]
+ boost/spirit/home/support/string_traits.hpp [6:7]
+ boost/spirit/home/support/terminal.hpp [6:7]
+ boost/spirit/home/support/terminal_expression.hpp [6:7]
+ boost/spirit/home/support/unused.hpp [5:6]
+ boost/spirit/home/support/utf8.hpp [4:5]
+ boost/spirit/home/support/utree.hpp [4:5]
+ boost/spirit/home/support/utree/detail/utree_detail1.hpp [6:7]
+ boost/spirit/home/support/utree/detail/utree_detail2.hpp [6:7]
+ boost/spirit/home/support/utree/operators.hpp [6:7]
+ boost/spirit/home/support/utree/utree.hpp [6:7]
+ boost/spirit/home/support/utree/utree_traits.hpp [6:7]
+ boost/spirit/home/support/utree/utree_traits_fwd.hpp [4:5]
+ boost/spirit/home/x3.hpp [4:5]
+ boost/spirit/home/x3/auxiliary.hpp [5:6]
+ boost/spirit/home/x3/auxiliary/any_parser.hpp [5:6]
+ boost/spirit/home/x3/auxiliary/attr.hpp [6:7]
+ boost/spirit/home/x3/auxiliary/eoi.hpp [5:6]
+ boost/spirit/home/x3/auxiliary/eol.hpp [5:6]
+ boost/spirit/home/x3/auxiliary/eps.hpp [4:5]
+ boost/spirit/home/x3/auxiliary/guard.hpp [4:5]
+ boost/spirit/home/x3/binary.hpp [4:5]
+ boost/spirit/home/x3/binary/binary.hpp [5:6]
+ boost/spirit/home/x3/char.hpp [4:5]
+ boost/spirit/home/x3/char/any_char.hpp [4:5]
+ boost/spirit/home/x3/char/char.hpp [4:5]
+ boost/spirit/home/x3/char/char_class.hpp [4:5]
+ boost/spirit/home/x3/char/char_class_tags.hpp [4:5]
+ boost/spirit/home/x3/char/char_parser.hpp [4:5]
+ boost/spirit/home/x3/char/char_set.hpp [4:5]
+ boost/spirit/home/x3/char/detail/cast_char.hpp [5:6]
+ boost/spirit/home/x3/char/literal_char.hpp [4:5]
+ boost/spirit/home/x3/char/negated_char_parser.hpp [4:5]
+ boost/spirit/home/x3/char/unicode.hpp [4:5]
+ boost/spirit/home/x3/core.hpp [4:5]
+ boost/spirit/home/x3/core/action.hpp [4:5]
+ boost/spirit/home/x3/core/call.hpp [4:5]
+ boost/spirit/home/x3/core/detail/parse_into_container.hpp [4:5]
+ boost/spirit/home/x3/core/parse.hpp [4:5]
+ boost/spirit/home/x3/core/parser.hpp [5:6]
+ boost/spirit/home/x3/core/proxy.hpp [4:5]
+ boost/spirit/home/x3/core/skip_over.hpp [4:5]
+ boost/spirit/home/x3/directive.hpp [4:5]
+ boost/spirit/home/x3/directive/confix.hpp [5:6]
+ boost/spirit/home/x3/directive/expect.hpp [4:5]
+ boost/spirit/home/x3/directive/lexeme.hpp [4:5]
+ boost/spirit/home/x3/directive/matches.hpp [5:6]
+ boost/spirit/home/x3/directive/no_case.hpp [4:5]
+ boost/spirit/home/x3/directive/no_skip.hpp [6:7]
+ boost/spirit/home/x3/directive/omit.hpp [4:5]
+ boost/spirit/home/x3/directive/raw.hpp [4:5]
+ boost/spirit/home/x3/directive/repeat.hpp [6:7]
+ boost/spirit/home/x3/directive/seek.hpp [5:6]
+ boost/spirit/home/x3/directive/skip.hpp [5:6]
+ boost/spirit/home/x3/directive/with.hpp [4:5]
+ boost/spirit/home/x3/nonterminal.hpp [4:5]
+ boost/spirit/home/x3/nonterminal/debug_handler_state.hpp [4:5]
+ boost/spirit/home/x3/nonterminal/detail/rule.hpp [4:5]
+ boost/spirit/home/x3/nonterminal/detail/transform_attribute.hpp [5:6]
+ boost/spirit/home/x3/nonterminal/rule.hpp [4:5]
+ boost/spirit/home/x3/nonterminal/simple_trace.hpp [5:6]
+ boost/spirit/home/x3/numeric.hpp [4:5]
+ boost/spirit/home/x3/numeric/bool.hpp [5:6]
+ boost/spirit/home/x3/numeric/bool_policies.hpp [5:6]
+ boost/spirit/home/x3/numeric/int.hpp [4:5]
+ boost/spirit/home/x3/numeric/real.hpp [4:5]
+ boost/spirit/home/x3/numeric/real_policies.hpp [5:6]
+ boost/spirit/home/x3/numeric/uint.hpp [5:6]
+ boost/spirit/home/x3/operator.hpp [4:5]
+ boost/spirit/home/x3/operator/alternative.hpp [4:5]
+ boost/spirit/home/x3/operator/and_predicate.hpp [4:5]
+ boost/spirit/home/x3/operator/detail/alternative.hpp [4:5]
+ boost/spirit/home/x3/operator/detail/sequence.hpp [4:5]
+ boost/spirit/home/x3/operator/difference.hpp [4:5]
+ boost/spirit/home/x3/operator/kleene.hpp [5:6]
+ boost/spirit/home/x3/operator/list.hpp [5:6]
+ boost/spirit/home/x3/operator/not_predicate.hpp [4:5]
+ boost/spirit/home/x3/operator/optional.hpp [5:6]
+ boost/spirit/home/x3/operator/plus.hpp [5:6]
+ boost/spirit/home/x3/operator/sequence.hpp [4:5]
+ boost/spirit/home/x3/string.hpp [4:5]
+ boost/spirit/home/x3/string/detail/no_case_string_parse.hpp [4:5]
+ boost/spirit/home/x3/string/detail/string_parse.hpp [4:5]
+ boost/spirit/home/x3/string/detail/tst.hpp [4:5]
+ boost/spirit/home/x3/string/literal_string.hpp [4:5]
+ boost/spirit/home/x3/string/symbols.hpp [5:6]
+ boost/spirit/home/x3/string/tst.hpp [4:5]
+ boost/spirit/home/x3/string/tst_map.hpp [4:5]
+ boost/spirit/home/x3/support/ast/position_tagged.hpp [4:5]
+ boost/spirit/home/x3/support/ast/variant.hpp [4:5]
+ boost/spirit/home/x3/support/context.hpp [5:6]
+ boost/spirit/home/x3/support/no_case.hpp [4:5]
+ boost/spirit/home/x3/support/numeric_utils/detail/extract_int.hpp [8:9]
+ boost/spirit/home/x3/support/numeric_utils/extract_int.hpp [5:6]
+ boost/spirit/home/x3/support/numeric_utils/extract_real.hpp [6:7]
+ boost/spirit/home/x3/support/numeric_utils/pow10.hpp [6:7]
+ boost/spirit/home/x3/support/numeric_utils/sign.hpp [6:7]
+ boost/spirit/home/x3/support/subcontext.hpp [6:7]
+ boost/spirit/home/x3/support/traits/attribute_category.hpp [5:6]
+ boost/spirit/home/x3/support/traits/attribute_of.hpp [6:7]
+ boost/spirit/home/x3/support/traits/attribute_type.hpp [5:6]
+ boost/spirit/home/x3/support/traits/container_traits.hpp [6:7]
+ boost/spirit/home/x3/support/traits/handles_container.hpp [5:6]
+ boost/spirit/home/x3/support/traits/has_attribute.hpp [6:7]
+ boost/spirit/home/x3/support/traits/is_parser.hpp [5:6]
+ boost/spirit/home/x3/support/traits/is_range.hpp [5:6]
+ boost/spirit/home/x3/support/traits/is_substitute.hpp [5:6]
+ boost/spirit/home/x3/support/traits/is_variant.hpp [5:6]
+ boost/spirit/home/x3/support/traits/make_attribute.hpp [6:7]
+ boost/spirit/home/x3/support/traits/move_to.hpp [6:7]
+ boost/spirit/home/x3/support/traits/optional_traits.hpp [6:7]
+ boost/spirit/home/x3/support/traits/print_attribute.hpp [5:6]
+ boost/spirit/home/x3/support/traits/print_token.hpp [5:6]
+ boost/spirit/home/x3/support/traits/string_traits.hpp [6:7]
+ boost/spirit/home/x3/support/traits/transform_attribute.hpp [6:7]
+ boost/spirit/home/x3/support/traits/tuple_traits.hpp [4:5]
+ boost/spirit/home/x3/support/traits/value_traits.hpp [6:7]
+ boost/spirit/home/x3/support/traits/variant_find_substitute.hpp [5:6]
+ boost/spirit/home/x3/support/traits/variant_has_substitute.hpp [5:6]
+ boost/spirit/home/x3/support/unused.hpp [5:6]
+ boost/spirit/home/x3/support/utility/annotate_on_success.hpp [4:5]
+ boost/spirit/home/x3/support/utility/error_reporting.hpp [4:5]
+ boost/spirit/home/x3/support/utility/is_callable.hpp [4:5]
+ boost/spirit/home/x3/support/utility/lambda_visitor.hpp [4:5]
+ boost/spirit/home/x3/support/utility/sfinae.hpp [5:6]
+ boost/spirit/home/x3/support/utility/testing.hpp [4:5]
+ boost/spirit/home/x3/support/utility/unrefcv.hpp [4:5]
+ boost/spirit/home/x3/support/utility/utf8.hpp [4:5]
+ boost/spirit/include/karma.hpp [6:7]
+ boost/spirit/include/karma_action.hpp [6:7]
+ boost/spirit/include/karma_alternative.hpp [6:7]
+ boost/spirit/include/karma_and_predicate.hpp [6:7]
+ boost/spirit/include/karma_as.hpp [7:8]
+ boost/spirit/include/karma_attr_cast.hpp [6:7]
+ boost/spirit/include/karma_auto.hpp [6:7]
+ boost/spirit/include/karma_auxiliary.hpp [6:7]
+ boost/spirit/include/karma_binary.hpp [6:7]
+ boost/spirit/include/karma_bool.hpp [6:7]
+ boost/spirit/include/karma_buffer.hpp [6:7]
+ boost/spirit/include/karma_center_alignment.hpp [6:7]
+ boost/spirit/include/karma_char.hpp [6:7]
+ boost/spirit/include/karma_char_.hpp [6:7]
+ boost/spirit/include/karma_char_class.hpp [6:7]
+ boost/spirit/include/karma_columns.hpp [6:7]
+ boost/spirit/include/karma_delimit.hpp [6:7]
+ boost/spirit/include/karma_directive.hpp [6:7]
+ boost/spirit/include/karma_domain.hpp [6:7]
+ boost/spirit/include/karma_duplicate.hpp [6:7]
+ boost/spirit/include/karma_eol.hpp [6:7]
+ boost/spirit/include/karma_eps.hpp [6:7]
+ boost/spirit/include/karma_format.hpp [6:7]
+ boost/spirit/include/karma_format_attr.hpp [6:7]
+ boost/spirit/include/karma_format_auto.hpp [6:7]
+ boost/spirit/include/karma_generate.hpp [6:7]
+ boost/spirit/include/karma_generate_attr.hpp [6:7]
+ boost/spirit/include/karma_generate_auto.hpp [6:7]
+ boost/spirit/include/karma_grammar.hpp [6:7]
+ boost/spirit/include/karma_int.hpp [6:7]
+ boost/spirit/include/karma_kleene.hpp [6:7]
+ boost/spirit/include/karma_lazy.hpp [6:7]
+ boost/spirit/include/karma_left_alignment.hpp [6:7]
+ boost/spirit/include/karma_list.hpp [6:7]
+ boost/spirit/include/karma_maxwidth.hpp [6:7]
+ boost/spirit/include/karma_no_delimit.hpp [6:7]
+ boost/spirit/include/karma_nonterminal.hpp [6:7]
+ boost/spirit/include/karma_not_predicate.hpp [6:7]
+ boost/spirit/include/karma_numeric.hpp [6:7]
+ boost/spirit/include/karma_omit.hpp [6:7]
+ boost/spirit/include/karma_operator.hpp [6:7]
+ boost/spirit/include/karma_optional.hpp [6:7]
+ boost/spirit/include/karma_phoenix_attributes.hpp [6:7]
+ boost/spirit/include/karma_plus.hpp [6:7]
+ boost/spirit/include/karma_real.hpp [6:7]
+ boost/spirit/include/karma_repeat.hpp [6:7]
+ boost/spirit/include/karma_right_alignment.hpp [6:7]
+ boost/spirit/include/karma_rule.hpp [6:7]
+ boost/spirit/include/karma_sequence.hpp [6:7]
+ boost/spirit/include/karma_stream.hpp [6:7]
+ boost/spirit/include/karma_strict_relaxed.hpp [6:7]
+ boost/spirit/include/karma_string.hpp [6:7]
+ boost/spirit/include/karma_symbols.hpp [6:7]
+ boost/spirit/include/karma_uint.hpp [6:7]
+ boost/spirit/include/karma_upper_lower_case.hpp [6:7]
+ boost/spirit/include/karma_verbatim.hpp [6:7]
+ boost/spirit/include/karma_what.hpp [6:7]
+ boost/spirit/include/lex.hpp [6:7]
+ boost/spirit/include/lex_char_token_def.hpp [6:7]
+ boost/spirit/include/lex_domain.hpp [6:7]
+ boost/spirit/include/lex_generate_static_lexertl.hpp [6:7]
+ boost/spirit/include/lex_lexer.hpp [6:7]
+ boost/spirit/include/lex_lexertl.hpp [6:7]
+ boost/spirit/include/lex_lexertl_position_token.hpp [6:7]
+ boost/spirit/include/lex_lexertl_token.hpp [6:7]
+ boost/spirit/include/lex_plain_token.hpp [6:7]
+ boost/spirit/include/lex_primitives.hpp [6:7]
+ boost/spirit/include/lex_static_lexertl.hpp [6:7]
+ boost/spirit/include/lex_tokenize_and_parse.hpp [6:7]
+ boost/spirit/include/lex_tokenize_and_parse_attr.hpp [6:7]
+ boost/spirit/include/phoenix.hpp [6:7]
+ boost/spirit/include/phoenix_algorithm.hpp [6:7]
+ boost/spirit/include/phoenix_bind.hpp [6:7]
+ boost/spirit/include/phoenix_container.hpp [6:7]
+ boost/spirit/include/phoenix_core.hpp [6:7]
+ boost/spirit/include/phoenix_function.hpp [6:7]
+ boost/spirit/include/phoenix_fusion.hpp [6:7]
+ boost/spirit/include/phoenix_limits.hpp [6:7]
+ boost/spirit/include/phoenix_object.hpp [6:7]
+ boost/spirit/include/phoenix_operator.hpp [6:7]
+ boost/spirit/include/phoenix_scope.hpp [6:7]
+ boost/spirit/include/phoenix_statement.hpp [6:7]
+ boost/spirit/include/phoenix_stl.hpp [6:7]
+ boost/spirit/include/phoenix_version.hpp [6:7]
+ boost/spirit/include/qi.hpp [6:7]
+ boost/spirit/include/qi_action.hpp [6:7]
+ boost/spirit/include/qi_alternative.hpp [6:7]
+ boost/spirit/include/qi_and_predicate.hpp [6:7]
+ boost/spirit/include/qi_as.hpp [7:8]
+ boost/spirit/include/qi_as_string.hpp [6:7]
+ boost/spirit/include/qi_attr.hpp [6:7]
+ boost/spirit/include/qi_attr_cast.hpp [6:7]
+ boost/spirit/include/qi_auto.hpp [6:7]
+ boost/spirit/include/qi_auxiliary.hpp [6:7]
+ boost/spirit/include/qi_binary.hpp [6:7]
+ boost/spirit/include/qi_bool.hpp [6:7]
+ boost/spirit/include/qi_char.hpp [6:7]
+ boost/spirit/include/qi_char_.hpp [6:7]
+ boost/spirit/include/qi_char_class.hpp [6:7]
+ boost/spirit/include/qi_copy.hpp [5:6]
+ boost/spirit/include/qi_core.hpp [6:7]
+ boost/spirit/include/qi_difference.hpp [6:7]
+ boost/spirit/include/qi_directive.hpp [6:7]
+ boost/spirit/include/qi_domain.hpp [6:7]
+ boost/spirit/include/qi_eoi.hpp [6:7]
+ boost/spirit/include/qi_eol.hpp [6:7]
+ boost/spirit/include/qi_eps.hpp [6:7]
+ boost/spirit/include/qi_expect.hpp [6:7]
+ boost/spirit/include/qi_grammar.hpp [6:7]
+ boost/spirit/include/qi_hold.hpp [6:7]
+ boost/spirit/include/qi_int.hpp [6:7]
+ boost/spirit/include/qi_kleene.hpp [6:7]
+ boost/spirit/include/qi_lazy.hpp [6:7]
+ boost/spirit/include/qi_lexeme.hpp [6:7]
+ boost/spirit/include/qi_list.hpp [6:7]
+ boost/spirit/include/qi_lit.hpp [6:7]
+ boost/spirit/include/qi_match.hpp [6:7]
+ boost/spirit/include/qi_match_attr.hpp [6:7]
+ boost/spirit/include/qi_match_auto.hpp [6:7]
+ boost/spirit/include/qi_matches.hpp [6:7]
+ boost/spirit/include/qi_no_case.hpp [6:7]
+ boost/spirit/include/qi_no_skip.hpp [6:7]
+ boost/spirit/include/qi_nonterminal.hpp [6:7]
+ boost/spirit/include/qi_not_predicate.hpp [6:7]
+ boost/spirit/include/qi_numeric.hpp [6:7]
+ boost/spirit/include/qi_omit.hpp [6:7]
+ boost/spirit/include/qi_operator.hpp [6:7]
+ boost/spirit/include/qi_optional.hpp [6:7]
+ boost/spirit/include/qi_parse.hpp [6:7]
+ boost/spirit/include/qi_parse_attr.hpp [6:7]
+ boost/spirit/include/qi_parse_auto.hpp [6:7]
+ boost/spirit/include/qi_permutation.hpp [6:7]
+ boost/spirit/include/qi_plus.hpp [6:7]
+ boost/spirit/include/qi_raw.hpp [6:7]
+ boost/spirit/include/qi_real.hpp [6:7]
+ boost/spirit/include/qi_repeat.hpp [6:7]
+ boost/spirit/include/qi_rule.hpp [6:7]
+ boost/spirit/include/qi_sequence.hpp [6:7]
+ boost/spirit/include/qi_sequential_or.hpp [6:7]
+ boost/spirit/include/qi_skip.hpp [6:7]
+ boost/spirit/include/qi_stream.hpp [6:7]
+ boost/spirit/include/qi_string.hpp [6:7]
+ boost/spirit/include/qi_symbols.hpp [6:7]
+ boost/spirit/include/qi_uint.hpp [6:7]
+ boost/spirit/include/qi_what.hpp [6:7]
+ boost/spirit/include/support.hpp [6:7]
+ boost/spirit/include/support_adapt_adt_attributes.hpp [6:7]
+ boost/spirit/include/support_any.hpp [6:7]
+ boost/spirit/include/support_any_if.hpp [6:7]
+ boost/spirit/include/support_any_if_ns.hpp [6:7]
+ boost/spirit/include/support_any_if_ns_so.hpp [6:7]
+ boost/spirit/include/support_any_ns.hpp [6:7]
+ boost/spirit/include/support_any_ns_so.hpp [6:7]
+ boost/spirit/include/support_argument.hpp [6:7]
+ boost/spirit/include/support_ascii.hpp [6:7]
+ boost/spirit/include/support_attributes.hpp [6:7]
+ boost/spirit/include/support_attributes_fwd.hpp [6:7]
+ boost/spirit/include/support_auto.hpp [5:6]
+ boost/spirit/include/support_char_class.hpp [6:7]
+ boost/spirit/include/support_container.hpp [6:7]
+ boost/spirit/include/support_extended_variant.hpp [6:7]
+ boost/spirit/include/support_info.hpp [5:6]
+ boost/spirit/include/support_iso8859_1.hpp [6:7]
+ boost/spirit/include/support_istream_iterator.hpp [6:7]
+ boost/spirit/include/support_line_pos_iterator.hpp [7:8]
+ boost/spirit/include/support_locals.hpp [6:7]
+ boost/spirit/include/support_look_ahead.hpp [6:7]
+ boost/spirit/include/support_modify.hpp [6:7]
+ boost/spirit/include/support_multi_pass.hpp [6:7]
+ boost/spirit/include/support_multi_pass_fwd.hpp [6:7]
+ boost/spirit/include/support_ostream_iterator.hpp [6:7]
+ boost/spirit/include/support_standard.hpp [6:7]
+ boost/spirit/include/support_standard_wide.hpp [6:7]
+ boost/spirit/include/support_string_traits.hpp [6:7]
+ boost/spirit/include/support_unused.hpp [6:7]
+ boost/spirit/include/support_utree.hpp [6:7]
+ boost/spirit/repository/home/qi/directive/kwd.hpp [5:6]
+ boost/spirit/repository/home/qi/directive/seek.hpp [4:5]
+ boost/spirit/repository/home/qi/nonterminal/subrule.hpp [5:6]
+ boost/spirit/repository/home/qi/operator/keywords.hpp [5:6]
+ boost/spirit/repository/home/support/seek.hpp [4:5]
+ boost/spirit/repository/home/support/subrule_context.hpp [5:6]
+ boost/spirit/repository/include/karma.hpp [6:7]
+ boost/spirit/repository/include/karma_confix.hpp [6:7]
+ boost/spirit/repository/include/karma_directive.hpp [6:7]
+ boost/spirit/repository/include/karma_nonterminal.hpp [7:8]
+ boost/spirit/repository/include/karma_subrule.hpp [7:8]
+ boost/spirit/repository/include/qi.hpp [6:7]
+ boost/spirit/repository/include/qi_advance.hpp [5:6]
+ boost/spirit/repository/include/qi_confix.hpp [6:7]
+ boost/spirit/repository/include/qi_directive.hpp [6:7]
+ boost/spirit/repository/include/qi_distinct.hpp [6:7]
+ boost/spirit/repository/include/qi_flush_multi_pass.hpp [6:7]
+ boost/spirit/repository/include/qi_iter_pos.hpp [6:7]
+ boost/spirit/repository/include/qi_keywords.hpp [7:8]
+ boost/spirit/repository/include/qi_kwd.hpp [7:8]
+ boost/spirit/repository/include/qi_kwd.hpp [26:27]
+ boost/spirit/repository/include/qi_nonterminal.hpp [7:8]
+ boost/spirit/repository/include/qi_primitive.hpp [6:7]
+ boost/spirit/repository/include/qi_seek.hpp [4:5]
+ boost/spirit/repository/include/qi_subrule.hpp [7:8]
+ boost/wave/cpplexer/re2clex/aq.hpp [8:9]
+ boost/wave/cpplexer/re2clex/scanner.hpp [8:9]
+ boost/wave/whitespace_handling.hpp [9:10]
+
+KEEP BSL-1.0 9fb081f2a852987d2716ab3ba93685bc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/max_cardinality_matching.hpp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/max_cardinality_matching.hpp [4:6]
+
+KEEP BSL-1.0 9fb8b120ca696580426b88ed5a5c689b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/detail/expr.hpp at line 63, boost/proto/detail/preprocessed/expr.hpp at line 7
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/proto/detail/expr.hpp [61:63]
+ boost/proto/detail/preprocessed/expr.hpp [5:7]
+
+KEEP BSL-1.0 a015b34eee4e5d1c766df0beb1fbb028
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/signals.hpp [3:6]
+
+KEEP BSL-1.0 a0c313f5525cd61a817a8bd728719d3a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/numeric/interval.hpp at line 7, boost/numeric/interval/arith.hpp at line 7, boost/numeric/interval/arith2.hpp at line 10, boost/numeric/interval/arith3.hpp at line 11, boost/numeric/interval/checking.hpp at line 6, boost/numeric/interval/compare.hpp at line 6, boost/numeric/interval/compare/certain.hpp at line 6, boost/numeric/interval/compare/explicit.hpp at line 7, boost/numeric/interval/compare/lexicographic.hpp at line 6, boost/numeric/interval/compare/possible.hpp at line 6, boost/numeric/interval/compare/set.hpp at line 6, boost/numeric/interval/compare/tribool.hpp at line 6, boost/numeric/interval/constants.hpp at line 6, boost/numeric/interval/detail/alpha_rounding_control.hpp at line 6, boost/numeric/interval/detail/bcc_rounding_control.hpp at line 7, boost/numeric/interval/detail/bugs.hpp at line 7, boost/numeric/interval/detail/c99_rounding_control.hpp at line 7, boost/numeric/interval/detail/c99sub_rounding_control.hpp at line 7, boost/numeric/interval/detail/division.hpp at line 6, boost/numeric/interval/detail/ia64_rounding_control.hpp at line 6, boost/numeric/interval/detail/interval_prototype.hpp at line 6, boost/numeric/interval/detail/msvc_rounding_control.hpp at line 7, boost/numeric/interval/detail/ppc_rounding_control.hpp at line 8, boost/numeric/interval/detail/sparc_rounding_control.hpp at line 7, boost/numeric/interval/detail/test_input.hpp at line 6, boost/numeric/interval/detail/x86_rounding_control.hpp at line 7, boost/numeric/interval/detail/x86gcc_rounding_control.hpp at line 7, boost/numeric/interval/ext/integer.hpp at line 6, boost/numeric/interval/ext/x86_fast_rounding_control.hpp at line 13, boost/numeric/interval/hw_rounding.hpp at line 7, boost/numeric/interval/interval.hpp at line 6, boost/numeric/interval/io.hpp at line 13, boost/numeric/interval/limits.hpp at line 7, boost/numeric/interval/policies.hpp at line 6, boost/numeric/interval/rounded_arith.hpp at line 6, boost/numeric/interval/rounded_transc.hpp at line 6, boost/numeric/interval/rounding.hpp at line 6, boost/numeric/interval/transc.hpp at line 7, boost/numeric/interval/utility.hpp at line 7
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/numeric/interval.hpp [6:8]
+ boost/numeric/interval/arith.hpp [6:8]
+ boost/numeric/interval/arith2.hpp [9:11]
+ boost/numeric/interval/arith3.hpp [10:12]
+ boost/numeric/interval/checking.hpp [5:7]
+ boost/numeric/interval/compare.hpp [5:7]
+ boost/numeric/interval/compare/certain.hpp [5:7]
+ boost/numeric/interval/compare/explicit.hpp [6:8]
+ boost/numeric/interval/compare/lexicographic.hpp [5:7]
+ boost/numeric/interval/compare/possible.hpp [5:7]
+ boost/numeric/interval/compare/set.hpp [5:7]
+ boost/numeric/interval/compare/tribool.hpp [5:7]
+ boost/numeric/interval/constants.hpp [5:7]
+ boost/numeric/interval/detail/alpha_rounding_control.hpp [5:7]
+ boost/numeric/interval/detail/bcc_rounding_control.hpp [6:8]
+ boost/numeric/interval/detail/bugs.hpp [6:8]
+ boost/numeric/interval/detail/c99_rounding_control.hpp [6:8]
+ boost/numeric/interval/detail/c99sub_rounding_control.hpp [6:8]
+ boost/numeric/interval/detail/division.hpp [5:7]
+ boost/numeric/interval/detail/ia64_rounding_control.hpp [5:7]
+ boost/numeric/interval/detail/interval_prototype.hpp [5:7]
+ boost/numeric/interval/detail/msvc_rounding_control.hpp [6:8]
+ boost/numeric/interval/detail/ppc_rounding_control.hpp [7:9]
+ boost/numeric/interval/detail/sparc_rounding_control.hpp [6:8]
+ boost/numeric/interval/detail/test_input.hpp [5:7]
+ boost/numeric/interval/detail/x86_rounding_control.hpp [6:8]
+ boost/numeric/interval/detail/x86gcc_rounding_control.hpp [6:8]
+ boost/numeric/interval/ext/integer.hpp [5:7]
+ boost/numeric/interval/ext/x86_fast_rounding_control.hpp [12:14]
+ boost/numeric/interval/hw_rounding.hpp [6:8]
+ boost/numeric/interval/interval.hpp [5:7]
+ boost/numeric/interval/io.hpp [12:14]
+ boost/numeric/interval/limits.hpp [6:8]
+ boost/numeric/interval/policies.hpp [5:7]
+ boost/numeric/interval/rounded_arith.hpp [5:7]
+ boost/numeric/interval/rounded_transc.hpp [5:7]
+ boost/numeric/interval/rounding.hpp [5:7]
+ boost/numeric/interval/transc.hpp [6:8]
+ boost/numeric/interval/utility.hpp [6:8]
+
+KEEP BSL-1.0 a138a947ff9ed38e8f57fe26c02cbbf2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/random/detail/iterator_mixin.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.11
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/random/detail/iterator_mixin.hpp [4:10]
+
+KEEP BSL-1.0 a17fcea4674a991c2ced55620c9f9ef3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function.hpp [3:6]
+
+KEEP BSL-1.0 a33a9326898e5c686dcfd60e20f5be85
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/pointer_cast.hpp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/pointer_cast.hpp [4:6]
+
+KEEP BSL-1.0 a36dba6b40d537acb66da7cd7f754fef
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/spirit/home/support/char_encoding/unicode/create_tables.cpp at line 453
+ License text:
+ << " Distributed under the Boost Software License, Version 1.0. (See accompanying\n"
+ << " file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n"
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/support/char_encoding/unicode/create_tables.cpp [452:453]
+
+KEEP BSL-1.0 a436b72bbdfb67382aecedd9507e3ad1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/utility.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/utility.hpp [3:5]
+
+KEEP BSL-1.0 a481dd7f992b299b42a5bfb04aafbb70
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/date_time/adjust_functors.hpp at line 7, boost/date_time/c_time.hpp at line 7, boost/date_time/date.hpp at line 7, boost/date_time/date_duration.hpp at line 7, boost/date_time/date_facet.hpp at line 7, boost/date_time/date_formatting_locales.hpp at line 7, boost/date_time/date_generators.hpp at line 7, boost/date_time/date_iterator.hpp at line 7, boost/date_time/date_names_put.hpp at line 7, boost/date_time/date_parsing.hpp at line 7, boost/date_time/filetime_functions.hpp at line 7, boost/date_time/gregorian/conversion.hpp at line 7, boost/date_time/gregorian/greg_calendar.hpp at line 7, boost/date_time/gregorian/greg_date.hpp at line 7, boost/date_time/gregorian/gregorian_io.hpp at line 7, boost/date_time/gregorian_calendar.hpp at line 7, boost/date_time/gregorian_calendar.ipp at line 4, boost/date_time/locale_config.hpp at line 7, boost/date_time/microsec_time_clock.hpp at line 7, boost/date_time/posix_time/conversion.hpp at line 7, boost/date_time/posix_time/posix_time_config.hpp at line 7, boost/date_time/posix_time/posix_time_io.hpp at line 7, boost/date_time/posix_time/time_formatters.hpp at line 7, boost/date_time/posix_time/time_formatters_limited.hpp at line 7, boost/date_time/string_parse_tree.hpp at line 7, boost/date_time/strings_from_facet.hpp at line 7, boost/date_time/time_clock.hpp at line 7, boost/date_time/time_duration.hpp at line 7, boost/date_time/time_facet.hpp at line 8, boost/date_time/time_iterator.hpp at line 7, boost/date_time/time_resolution_traits.hpp at line 7, boost/date_time/wrapping_int.hpp at line 7
+ License text:
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 90.62
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/date_time/adjust_functors.hpp [5:7]
+ boost/date_time/c_time.hpp [5:7]
+ boost/date_time/date.hpp [5:7]
+ boost/date_time/date_duration.hpp [5:7]
+ boost/date_time/date_facet.hpp [5:7]
+ boost/date_time/date_formatting_locales.hpp [5:7]
+ boost/date_time/date_generators.hpp [5:7]
+ boost/date_time/date_iterator.hpp [5:7]
+ boost/date_time/date_names_put.hpp [5:7]
+ boost/date_time/date_parsing.hpp [5:7]
+ boost/date_time/filetime_functions.hpp [5:7]
+ boost/date_time/gregorian/conversion.hpp [5:7]
+ boost/date_time/gregorian/greg_calendar.hpp [5:7]
+ boost/date_time/gregorian/greg_date.hpp [5:7]
+ boost/date_time/gregorian/gregorian_io.hpp [5:7]
+ boost/date_time/gregorian_calendar.hpp [5:7]
+ boost/date_time/gregorian_calendar.ipp [2:4]
+ boost/date_time/locale_config.hpp [5:7]
+ boost/date_time/microsec_time_clock.hpp [5:7]
+ boost/date_time/posix_time/conversion.hpp [5:7]
+ boost/date_time/posix_time/posix_time_config.hpp [5:7]
+ boost/date_time/posix_time/posix_time_io.hpp [5:7]
+ boost/date_time/posix_time/time_formatters.hpp [5:7]
+ boost/date_time/posix_time/time_formatters_limited.hpp [5:7]
+ boost/date_time/string_parse_tree.hpp [5:7]
+ boost/date_time/strings_from_facet.hpp [5:7]
+ boost/date_time/time_clock.hpp [5:7]
+ boost/date_time/time_duration.hpp [5:7]
+ boost/date_time/time_facet.hpp [6:8]
+ boost/date_time/time_iterator.hpp [5:7]
+ boost/date_time/time_resolution_traits.hpp [5:7]
+ boost/date_time/wrapping_int.hpp [5:7]
+
+KEEP BSL-1.0 a4b06853a77321815bca2cbd7654b649
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/algorithm.hpp at line 3, boost/detail/endian.hpp at line 3, boost/detail/utf8_codecvt_facet.hpp at line 4, boost/functional.hpp at line 4, boost/statechart/asynchronous_state_machine.hpp at line 6, boost/statechart/custom_reaction.hpp at line 6, boost/statechart/deep_history.hpp at line 6, boost/statechart/deferral.hpp at line 6, boost/statechart/detail/avoid_unused_warning.hpp at line 6, boost/statechart/detail/constructor.hpp at line 6, boost/statechart/detail/counted_base.hpp at line 6, boost/statechart/detail/leaf_state.hpp at line 6, boost/statechart/detail/memory.hpp at line 6, boost/statechart/detail/node_state.hpp at line 6, boost/statechart/detail/reaction_dispatcher.hpp at line 6, boost/statechart/detail/rtti_policy.hpp at line 6, boost/statechart/detail/state_base.hpp at line 6, boost/statechart/event.hpp at line 6, boost/statechart/event_base.hpp at line 6, boost/statechart/event_processor.hpp at line 6, boost/statechart/exception_translator.hpp at line 6, boost/statechart/fifo_scheduler.hpp at line 6, boost/statechart/fifo_worker.hpp at line 6, boost/statechart/history.hpp at line 6, boost/statechart/in_state_reaction.hpp at line 6, boost/statechart/null_exception_translator.hpp at line 6, boost/statechart/processor_container.hpp at line 6, boost/statechart/result.hpp at line 6, boost/statechart/shallow_history.hpp at line 6, boost/statechart/simple_state.hpp at line 6, boost/statechart/state.hpp at line 6, boost/statechart/state_machine.hpp at line 6, boost/statechart/termination.hpp at line 6, boost/statechart/transition.hpp at line 6, boost/xpressive/detail/utility/counted_base.hpp at line 4
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompany-
+ // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.30
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/algorithm.hpp [2:3]
+ boost/detail/endian.hpp [2:3]
+ boost/detail/utf8_codecvt_facet.hpp [3:4]
+ boost/functional.hpp [3:4]
+ boost/statechart/asynchronous_state_machine.hpp [5:6]
+ boost/statechart/custom_reaction.hpp [5:6]
+ boost/statechart/deep_history.hpp [5:6]
+ boost/statechart/deferral.hpp [5:6]
+ boost/statechart/detail/avoid_unused_warning.hpp [5:6]
+ boost/statechart/detail/constructor.hpp [5:6]
+ boost/statechart/detail/counted_base.hpp [5:6]
+ boost/statechart/detail/leaf_state.hpp [5:6]
+ boost/statechart/detail/memory.hpp [5:6]
+ boost/statechart/detail/node_state.hpp [5:6]
+ boost/statechart/detail/reaction_dispatcher.hpp [5:6]
+ boost/statechart/detail/rtti_policy.hpp [5:6]
+ boost/statechart/detail/state_base.hpp [5:6]
+ boost/statechart/event.hpp [5:6]
+ boost/statechart/event_base.hpp [5:6]
+ boost/statechart/event_processor.hpp [5:6]
+ boost/statechart/exception_translator.hpp [5:6]
+ boost/statechart/fifo_scheduler.hpp [5:6]
+ boost/statechart/fifo_worker.hpp [5:6]
+ boost/statechart/history.hpp [5:6]
+ boost/statechart/in_state_reaction.hpp [5:6]
+ boost/statechart/null_exception_translator.hpp [5:6]
+ boost/statechart/processor_container.hpp [5:6]
+ boost/statechart/result.hpp [5:6]
+ boost/statechart/shallow_history.hpp [5:6]
+ boost/statechart/simple_state.hpp [5:6]
+ boost/statechart/state.hpp [5:6]
+ boost/statechart/state_machine.hpp [5:6]
+ boost/statechart/termination.hpp [5:6]
+ boost/statechart/transition.hpp [5:6]
+ boost/xpressive/detail/utility/counted_base.hpp [3:4]
+
+KEEP BSL-1.0 a4cb981d0e39a7a7883dd77549fe4448
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/functional/factory.hpp at line 5, boost/functional/forward_adapter.hpp at line 5, boost/functional/lightweight_forward_adapter.hpp at line 5, boost/functional/value_factory.hpp at line 5, boost/fusion/functional.hpp at line 5, boost/fusion/functional/adapter.hpp at line 5, boost/fusion/functional/adapter/detail/access.hpp at line 5, boost/fusion/functional/adapter/fused.hpp at line 5, boost/fusion/functional/adapter/fused_function_object.hpp at line 5, boost/fusion/functional/adapter/fused_procedure.hpp at line 5, boost/fusion/functional/adapter/limits.hpp at line 5, boost/fusion/functional/adapter/unfused.hpp at line 5, boost/fusion/functional/adapter/unfused_typed.hpp at line 5, boost/fusion/functional/generation.hpp at line 5, boost/fusion/functional/generation/detail/gen_make_adapter.hpp at line 5, boost/fusion/functional/generation/make_fused.hpp at line 5, boost/fusion/functional/generation/make_fused_function_object.hpp at line 5, boost/fusion/functional/generation/make_fused_procedure.hpp at line 5, boost/fusion/functional/generation/make_unfused.hpp at line 5, boost/fusion/functional/invocation.hpp at line 5, boost/fusion/functional/invocation/detail/that_ptr.hpp at line 5, boost/fusion/functional/invocation/limits.hpp at line 5, boost/fusion/support/deduce.hpp at line 5
+ License text:
+ Use modification and distribution are subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/functional/factory.hpp [4:6]
+ boost/functional/forward_adapter.hpp [4:6]
+ boost/functional/lightweight_forward_adapter.hpp [4:6]
+ boost/functional/value_factory.hpp [4:6]
+ boost/fusion/functional.hpp [4:6]
+ boost/fusion/functional/adapter.hpp [4:6]
+ boost/fusion/functional/adapter/detail/access.hpp [4:6]
+ boost/fusion/functional/adapter/fused.hpp [4:6]
+ boost/fusion/functional/adapter/fused_function_object.hpp [4:6]
+ boost/fusion/functional/adapter/fused_procedure.hpp [4:6]
+ boost/fusion/functional/adapter/limits.hpp [4:6]
+ boost/fusion/functional/adapter/unfused.hpp [4:6]
+ boost/fusion/functional/adapter/unfused_typed.hpp [4:6]
+ boost/fusion/functional/generation.hpp [4:6]
+ boost/fusion/functional/generation/detail/gen_make_adapter.hpp [4:6]
+ boost/fusion/functional/generation/make_fused.hpp [4:6]
+ boost/fusion/functional/generation/make_fused_function_object.hpp [4:6]
+ boost/fusion/functional/generation/make_fused_procedure.hpp [4:6]
+ boost/fusion/functional/generation/make_unfused.hpp [4:6]
+ boost/fusion/functional/invocation.hpp [4:6]
+ boost/fusion/functional/invocation/detail/that_ptr.hpp [4:6]
+ boost/fusion/functional/invocation/limits.hpp [4:6]
+ boost/fusion/support/deduce.hpp [4:6]
+
+KEEP BSL-1.0 a5255d1626f948de09c788692e999646
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator/new_iterator_tests.hpp at line 11
+ License text:
+ // Use, modification and distribution is subject to the
+ // Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/iterator/new_iterator_tests.hpp [9:12]
+
+SKIP MPL-1.1 a63fd5557ce55633633e929b4c64c3dc
+BELONGS ya.make
+ License text:
+ // Boost Graph concepts, MPL style
+ Scancode info:
+ Original SPDX id: MPL-1.1
+ Score : 80.00
+ Match type : REFERENCE
+ Links : http://www.mozilla.com/MPL/1.1/index.html, http://www.mozilla.org/MPL/MPL-1.1.html, https://spdx.org/licenses/MPL-1.1
+ Files with this license:
+ boost/msm/mpl_graph/mpl_graph.hpp [31:31]
+
+KEEP BSL-1.0 a69d72c945db8bb62438c724b48f68ff
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/platform/vms.hpp at line 4
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/config/platform/vms.hpp [2:4]
+
+KEEP BSL-1.0 a779859d4b2e8896d4ed9ba8f600ca99
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/filesystem/detail/utf8_codecvt_facet.hpp [4:5]
+
+KEEP BSL-1.0 a9a210144b79b61e200d7e95b17a4c56
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/cpp_dec_float.hpp at line 5
+ License text:
+ // Copyright 2011 -2013 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/cpp_dec_float.hpp [3:5]
+
+KEEP BSL-1.0 a9bd4fe8e436ddc987c2955b5f755fc5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/lambda/closures.hpp at line 8
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See
+ accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/lambda/closures.hpp [7:9]
+
+KEEP BSL-1.0 aa4e261023dac76b1b286d3163a0bae7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/compute/detail/variadic_macros.hpp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0
+ // See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/compute/detail/variadic_macros.hpp [4:6]
+
+KEEP BSL-1.0 aa58ff9cdc0b0b6a3fedf7f97fd19c54
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/chrono/io/time_point_io.hpp at line 4, boost/type_traits/detail/is_function_ptr_tester.hpp at line 5, boost/type_traits/has_plus_assign.hpp at line 4
+ License text:
+ // Use, modification and distribution are subject to the Boost Software License,
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/chrono/io/time_point_io.hpp [3:5]
+ boost/type_traits/detail/is_function_ptr_tester.hpp [4:6]
+ boost/type_traits/has_plus_assign.hpp [3:5]
+
+KEEP BSL-1.0 ab2348e8edf8e5498ae8350b5bf110e4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/special_functions/pow.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math/special_functions/pow.hpp [5:9]
+
+KEEP BSL-1.0 acdc17904c74d5a0d08bc93d13a7b566
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/kurtosis.hpp at line 6, boost/accumulators/statistics/skewness.hpp at line 6, boost/accumulators/statistics/weighted_kurtosis.hpp at line 6, boost/accumulators/statistics/weighted_skewness.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/kurtosis.hpp [4:6]
+ boost/accumulators/statistics/skewness.hpp [4:6]
+ boost/accumulators/statistics/weighted_kurtosis.hpp [4:6]
+ boost/accumulators/statistics/weighted_skewness.hpp [4:6]
+
+KEEP BSL-1.0 acfba401bcd0325193760b4e6f196b4b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/weighted_moment.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/weighted_moment.hpp [4:6]
+
+KEEP BSL-1.0 ad51c5b487e806da41e2a29ffec41bd1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/crc.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/crc.hpp [3:5]
+
+KEEP BSL-1.0 ad90ac470f35ec851ed16dc644a6d6ae
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/msm/active_state_switching_policies.hpp at line 8, boost/msm/back/args.hpp at line 8, boost/msm/back/bind_helpers.hpp at line 8, boost/msm/back/common_types.hpp at line 8, boost/msm/back/copy_policies.hpp at line 8, boost/msm/back/default_compile_policy.hpp at line 8, boost/msm/back/dispatch_table.hpp at line 8, boost/msm/back/favor_compile_time.hpp at line 8, boost/msm/back/history_policies.hpp at line 8, boost/msm/back/metafunctions.hpp at line 8, boost/msm/back/mpl_graph_fsm_check.hpp at line 8, boost/msm/back/no_fsm_check.hpp at line 8, boost/msm/back/queue_container_circular.hpp at line 8, boost/msm/back/queue_container_deque.hpp at line 8, boost/msm/back/state_machine.hpp at line 8, boost/msm/back/tools.hpp at line 8, boost/msm/common.hpp at line 8, boost/msm/event_traits.hpp at line 8, boost/msm/front/common_states.hpp at line 8, boost/msm/front/completion_event.hpp at line 8, boost/msm/front/detail/common_states.hpp at line 8, boost/msm/front/detail/row2_helper.hpp at line 8, boost/msm/front/euml/algorithm.hpp at line 8, boost/msm/front/euml/common.hpp at line 8, boost/msm/front/euml/container.hpp at line 8, boost/msm/front/euml/euml.hpp at line 8, boost/msm/front/euml/euml_typeof.hpp at line 8, boost/msm/front/euml/guard_grammar.hpp at line 8, boost/msm/front/euml/iteration.hpp at line 8, boost/msm/front/euml/operator.hpp at line 8, boost/msm/front/euml/phoenix_placeholders.hpp at line 8, boost/msm/front/euml/querying.hpp at line 8, boost/msm/front/euml/state_grammar.hpp at line 8, boost/msm/front/euml/stl.hpp at line 8, boost/msm/front/euml/stt_grammar.hpp at line 8, boost/msm/front/euml/transformation.hpp at line 8, boost/msm/front/functor_row.hpp at line 8, boost/msm/front/internal_row.hpp at line 8, boost/msm/front/row2.hpp at line 8, boost/msm/front/state_machine_def.hpp at line 8, boost/msm/front/states.hpp at line 8, boost/msm/msm_grammar.hpp at line 8, boost/msm/proto_config.hpp at line 8, boost/msm/row_tags.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/msm/active_state_switching_policies.hpp [6:9]
+ boost/msm/back/args.hpp [6:9]
+ boost/msm/back/bind_helpers.hpp [6:9]
+ boost/msm/back/common_types.hpp [6:9]
+ boost/msm/back/copy_policies.hpp [6:9]
+ boost/msm/back/default_compile_policy.hpp [6:9]
+ boost/msm/back/dispatch_table.hpp [6:9]
+ boost/msm/back/favor_compile_time.hpp [6:9]
+ boost/msm/back/history_policies.hpp [6:9]
+ boost/msm/back/metafunctions.hpp [6:9]
+ boost/msm/back/mpl_graph_fsm_check.hpp [6:9]
+ boost/msm/back/no_fsm_check.hpp [6:9]
+ boost/msm/back/queue_container_circular.hpp [6:9]
+ boost/msm/back/queue_container_deque.hpp [6:9]
+ boost/msm/back/state_machine.hpp [6:9]
+ boost/msm/back/tools.hpp [6:9]
+ boost/msm/common.hpp [6:9]
+ boost/msm/event_traits.hpp [6:9]
+ boost/msm/front/common_states.hpp [6:9]
+ boost/msm/front/completion_event.hpp [6:9]
+ boost/msm/front/detail/common_states.hpp [6:9]
+ boost/msm/front/detail/row2_helper.hpp [6:9]
+ boost/msm/front/euml/algorithm.hpp [6:9]
+ boost/msm/front/euml/common.hpp [6:9]
+ boost/msm/front/euml/container.hpp [6:9]
+ boost/msm/front/euml/euml.hpp [6:9]
+ boost/msm/front/euml/euml_typeof.hpp [6:9]
+ boost/msm/front/euml/guard_grammar.hpp [6:9]
+ boost/msm/front/euml/iteration.hpp [6:9]
+ boost/msm/front/euml/operator.hpp [6:9]
+ boost/msm/front/euml/phoenix_placeholders.hpp [6:9]
+ boost/msm/front/euml/querying.hpp [6:9]
+ boost/msm/front/euml/state_grammar.hpp [6:9]
+ boost/msm/front/euml/stl.hpp [6:9]
+ boost/msm/front/euml/stt_grammar.hpp [6:9]
+ boost/msm/front/euml/transformation.hpp [6:9]
+ boost/msm/front/functor_row.hpp [6:9]
+ boost/msm/front/internal_row.hpp [6:9]
+ boost/msm/front/row2.hpp [6:9]
+ boost/msm/front/state_machine_def.hpp [6:9]
+ boost/msm/front/states.hpp [6:9]
+ boost/msm/msm_grammar.hpp [6:9]
+ boost/msm/proto_config.hpp [6:9]
+ boost/msm/row_tags.hpp [6:9]
+
+KEEP BSL-1.0 ada711a3dd063624125a231887c8bac6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/is_maybe.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/parameter/aux_/is_maybe.hpp [1:4]
+
+KEEP BSL-1.0 b03e7ad31a88c7f7892fe8557944edb4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/bron_kerbosch_all_cliques.hpp at line 5, boost/graph/closeness_centrality.hpp at line 5, boost/graph/clustering_coefficient.hpp at line 5, boost/graph/degree_centrality.hpp at line 5, boost/graph/detail/geodesic.hpp at line 5, boost/graph/detail/index.hpp at line 5, boost/graph/directed_graph.hpp at line 5, boost/graph/eccentricity.hpp at line 5, boost/graph/exterior_property.hpp at line 5, boost/graph/geodesic_distance.hpp at line 5, boost/graph/numeric_values.hpp at line 5, boost/graph/property_maps/constant_property_map.hpp at line 5, boost/graph/property_maps/container_property_map.hpp at line 5, boost/graph/property_maps/matrix_property_map.hpp at line 5, boost/graph/property_maps/null_property_map.hpp at line 5, boost/graph/tiernan_all_cycles.hpp at line 5, boost/graph/transitive_reduction.hpp at line 5, boost/graph/undirected_graph.hpp at line 5
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0 (See accompanying file
+ // LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 93.75
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/bron_kerbosch_all_cliques.hpp [3:5]
+ boost/graph/closeness_centrality.hpp [3:5]
+ boost/graph/clustering_coefficient.hpp [3:5]
+ boost/graph/degree_centrality.hpp [3:5]
+ boost/graph/detail/geodesic.hpp [3:5]
+ boost/graph/detail/index.hpp [3:5]
+ boost/graph/directed_graph.hpp [3:5]
+ boost/graph/eccentricity.hpp [3:5]
+ boost/graph/exterior_property.hpp [3:5]
+ boost/graph/geodesic_distance.hpp [3:5]
+ boost/graph/numeric_values.hpp [3:5]
+ boost/graph/property_maps/constant_property_map.hpp [3:5]
+ boost/graph/property_maps/container_property_map.hpp [3:5]
+ boost/graph/property_maps/matrix_property_map.hpp [3:5]
+ boost/graph/property_maps/null_property_map.hpp [3:5]
+ boost/graph/tiernan_all_cycles.hpp [3:5]
+ boost/graph/transitive_reduction.hpp [3:5]
+ boost/graph/undirected_graph.hpp [3:5]
+
+KEEP BSL-1.0 b057fb663f90e3d81c396da228ff46a1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/config/config.hpp at line 6, boost/preprocessor/slot/detail/counter.hpp at line 5, boost/preprocessor/tuple/rem.hpp at line 6, boost/preprocessor/tuple/to_seq.hpp at line 6, boost/preprocessor/variadic/elem.hpp at line 6, boost/preprocessor/variadic/size.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/preprocessor/config/config.hpp [5:7]
+ boost/preprocessor/slot/detail/counter.hpp [4:6]
+ boost/preprocessor/tuple/rem.hpp [5:7]
+ boost/preprocessor/tuple/to_seq.hpp [5:7]
+ boost/preprocessor/variadic/elem.hpp [5:7]
+ boost/preprocessor/variadic/size.hpp [5:7]
+
+KEEP Mit-Old-Style b202f5e6061e3eeef6c7dcc2414164b3
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-mit-old-style
+ Score : 100.00
+ Match type : TEXT
+ Links : http://fedoraproject.org/wiki/Licensing:MIT#Old_Style, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit-old-style.LICENSE
+ Files with this license:
+ boost/detail/algorithm.hpp [10:16]
+ boost/multi_index/detail/ord_index_impl.hpp [26:32]
+ boost/multi_index/detail/ord_index_node.hpp [26:32]
+ boost/multi_index/detail/ord_index_ops.hpp [26:32]
+
+KEEP BSL-1.0 b2055be15799034e5690865f2062c03a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/sync/windows/named_condition.hpp at line 5, boost/interprocess/sync/windows/named_condition_any.hpp at line 5, boost/interprocess/sync/windows/named_mutex.hpp at line 5, boost/interprocess/sync/windows/named_recursive_mutex.hpp at line 5, boost/interprocess/sync/windows/named_semaphore.hpp at line 5, boost/interprocess/sync/windows/named_sync.hpp at line 5, boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp at line 5, boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp at line 5, boost/interprocess/sync/windows/winapi_wrapper_common.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/sync/windows/named_condition.hpp [3:5]
+ boost/interprocess/sync/windows/named_condition_any.hpp [3:5]
+ boost/interprocess/sync/windows/named_mutex.hpp [3:5]
+ boost/interprocess/sync/windows/named_recursive_mutex.hpp [3:5]
+ boost/interprocess/sync/windows/named_semaphore.hpp [3:5]
+ boost/interprocess/sync/windows/named_sync.hpp [3:5]
+ boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp [3:5]
+ boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp [3:5]
+ boost/interprocess/sync/windows/winapi_wrapper_common.hpp [3:5]
+
+KEEP BSL-1.0 b28554be9e679e0afc207f28ee3501c9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/token_functions.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.11
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/token_functions.hpp [5:11]
+
+KEEP BSL-1.0 b411822b31044e9f74317c11d6e100e8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/variant/detail/multivisitors_cpp11_based.hpp at line 10, boost/variant/detail/multivisitors_cpp14_based.hpp at line 11, boost/variant/detail/multivisitors_preprocessor_based.hpp at line 10, boost/variant/multivisitors.hpp at line 10
+ License text:
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/variant/detail/multivisitors_cpp11_based.hpp [8:10]
+ boost/variant/detail/multivisitors_cpp14_based.hpp [9:11]
+ boost/variant/detail/multivisitors_preprocessor_based.hpp [8:10]
+ boost/variant/multivisitors.hpp [8:10]
+
+KEEP BSL-1.0 b51d81a9a19afcd47f87805af0a81f71
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/iterator.hpp at line 3
+ License text:
+ // (C) Copyright Beman Dawes 2000. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/iterator.hpp [1:3]
+
+KEEP BSL-1.0 b5a1e7b4dadbf479f176645e2fd707dd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/variance.hpp at line 6, boost/accumulators/statistics/weighted_variance.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/variance.hpp [4:6]
+ boost/accumulators/statistics/weighted_variance.hpp [4:6]
+
+KEEP CC0-1.0 b5f764fc4eb42084bd48338af5d0b73e
+BELONGS libs/container/ya.make
+ License text:
+ Doug Lea and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/ Send questions,
+ Scancode info:
+ Original SPDX id: CC0-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://creativecommons.org/publicdomain/zero/1.0/, http://creativecommons.org/publicdomain/zero/1.0/legalcode, https://spdx.org/licenses/CC0-1.0
+ Files with this license:
+ libs/container/src/dlmalloc_2_8_6.c [3:4]
+
+KEEP MIT b5ff104ececbb5c6cc9c1d8e6e363649
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: MIT
+ Score : 100.00
+ Match type : TEXT
+ Links : http://opensource.org/licenses/mit-license.php, https://spdx.org/licenses/MIT
+ Files with this license:
+ boost/geometry/srs/projections/proj/gstmerc.hpp [26:42]
+
+KEEP BSL-1.0 b639b89caf10a43d7b73bd47dbd000b4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/numeric/detail/function1.hpp at line 3, boost/accumulators/numeric/detail/function2.hpp at line 3, boost/accumulators/numeric/detail/function3.hpp at line 3, boost/accumulators/numeric/detail/function4.hpp at line 3, boost/accumulators/numeric/detail/function_n.hpp at line 3, boost/accumulators/numeric/detail/pod_singleton.hpp at line 3, boost/archive/detail/register_archive.hpp at line 3, boost/concept/assert.hpp at line 3, boost/concept/detail/borland.hpp at line 3, boost/concept/detail/concept_def.hpp at line 3, boost/concept/detail/concept_undef.hpp at line 3, boost/concept/detail/general.hpp at line 3, boost/concept/detail/has_constraints.hpp at line 3, boost/concept/detail/msvc.hpp at line 3, boost/concept/requires.hpp at line 3, boost/concept/usage.hpp at line 3, boost/concept_check/borland.hpp at line 3, boost/concept_check/general.hpp at line 3, boost/concept_check/has_constraints.hpp at line 3, boost/concept_check/msvc.hpp at line 3, boost/parameter/aux_/parenthesized_type.hpp at line 3
+ License text:
+ // Copyright David Abrahams 2006. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/numeric/detail/function1.hpp [1:3]
+ boost/accumulators/numeric/detail/function2.hpp [1:3]
+ boost/accumulators/numeric/detail/function3.hpp [1:3]
+ boost/accumulators/numeric/detail/function4.hpp [1:3]
+ boost/accumulators/numeric/detail/function_n.hpp [1:3]
+ boost/accumulators/numeric/detail/pod_singleton.hpp [1:3]
+ boost/archive/detail/register_archive.hpp [1:3]
+ boost/concept/assert.hpp [1:3]
+ boost/concept/detail/borland.hpp [1:3]
+ boost/concept/detail/concept_def.hpp [1:3]
+ boost/concept/detail/concept_undef.hpp [1:3]
+ boost/concept/detail/general.hpp [1:3]
+ boost/concept/detail/has_constraints.hpp [1:3]
+ boost/concept/detail/msvc.hpp [1:3]
+ boost/concept/requires.hpp [1:3]
+ boost/concept/usage.hpp [1:3]
+ boost/concept_check/borland.hpp [1:3]
+ boost/concept_check/general.hpp [1:3]
+ boost/concept_check/has_constraints.hpp [1:3]
+ boost/concept_check/msvc.hpp [1:3]
+ boost/parameter/aux_/parenthesized_type.hpp [1:3]
+
+KEEP BSL-1.0 b6974e875e1c1eb08eee24cb09689b8d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/ptr_container.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/ptr_container/ptr_container.hpp [4:7]
+
+KEEP BSL-1.0 b6a409674a4ee07847ea12b101a0118a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp at line 8, boost/interprocess/sync/spin/interprocess_barrier.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/smart_ptr/detail/bad_weak_ptr.hpp [6:8]
+ boost/interprocess/sync/spin/interprocess_barrier.hpp [3:5]
+
+KEEP BSL-1.0 b708add3dbcdfc5b211f22144bb32fef
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/weighted_sum_kahan.hpp at line 6
+ License text:
+ // Copyright 2011 Simon West. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/weighted_sum_kahan.hpp [4:6]
+
+KEEP BSL-1.0 b76da68edf2a4f406db6266fa75d52c8
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/lockable_adapter.hpp at line 5, boost/thread/null_mutex.hpp at line 5, boost/thread/poly_lockable.hpp at line 5, boost/thread/poly_lockable_adapter.hpp at line 5, boost/thread/poly_shared_lockable.hpp at line 5, boost/thread/poly_shared_lockable_adapter.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/thread/lockable_adapter.hpp [3:5]
+ boost/thread/null_mutex.hpp [3:5]
+ boost/thread/poly_lockable.hpp [3:5]
+ boost/thread/poly_lockable_adapter.hpp [3:5]
+ boost/thread/poly_shared_lockable.hpp [3:5]
+ boost/thread/poly_shared_lockable_adapter.hpp [3:5]
+
+KEEP BSL-1.0 b8289cd244d7708c52552bdeeba10e21
+BELONGS ya.make
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 76.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/callable_traits/detail/default_callable_traits.hpp [4:5]
+
+KEEP BSL-1.0 b862f691db6b1f393df1444cfd7c7ca7
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // See accompanying file LICENSE.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp [5:7]
+ boost/numeric/odeint/external/nt2/nt2_copy.hpp [6:8]
+ boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp [5:7]
+ boost/numeric/odeint/external/nt2/nt2_resize.hpp [5:7]
+ boost/proto/detail/remove_typename.hpp [6:8]
+
+KEEP BSL-1.0 b8b468abbff6b81e74e440e7d4c9daaa
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/spirit/home/x3/support/traits/numeric_traits.hpp at line 5
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/x3/support/traits/numeric_traits.hpp [4:5]
+
+KEEP BSL-1.0 b9e8f30d851c60e76394d2c0ad75e462
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/concepts/mp_number_archetypes.hpp at line 4, boost/multiprecision/cpp_int/checked.hpp at line 4, boost/multiprecision/cpp_int/comparison.hpp at line 4, boost/multiprecision/debug_adaptor.hpp at line 4, boost/multiprecision/detail/digits.hpp at line 4, boost/multiprecision/detail/integer_ops.hpp at line 4, boost/multiprecision/integer.hpp at line 4, boost/multiprecision/logged_adaptor.hpp at line 4, boost/multiprecision/miller_rabin.hpp at line 4, boost/multiprecision/random.hpp at line 6, boost/multiprecision/traits/extract_exponent_type.hpp at line 4
+ License text:
+ // Copyright 2012 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.59
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/concepts/mp_number_archetypes.hpp [2:4]
+ boost/multiprecision/cpp_int/checked.hpp [2:4]
+ boost/multiprecision/cpp_int/comparison.hpp [2:4]
+ boost/multiprecision/debug_adaptor.hpp [2:4]
+ boost/multiprecision/detail/digits.hpp [2:4]
+ boost/multiprecision/detail/integer_ops.hpp [2:4]
+ boost/multiprecision/integer.hpp [2:4]
+ boost/multiprecision/logged_adaptor.hpp [2:4]
+ boost/multiprecision/miller_rabin.hpp [2:4]
+ boost/multiprecision/random.hpp [4:6]
+ boost/multiprecision/traits/extract_exponent_type.hpp [2:4]
+
+KEEP BSL-1.0 ba1e62e24c3a9267634f49eb092f0afb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/detail/msvc_has_iterator_workaround.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/detail/msvc_has_iterator_workaround.hpp [3:6]
+
+KEEP BSL-1.0 bb0492d92471ff074c380f255ab94b94
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/hawick_circuits.hpp at line 4
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+ // at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/hawick_circuits.hpp [3:5]
+
+KEEP BSL-1.0 bb6c4a594a57e74611676fda9449a7e3
+BELONGS libs/log/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/atomic/detail/pause.hpp at line 3, boost/core/explicit_operator_bool.hpp at line 4, boost/core/null_deleter.hpp at line 4, boost/log/attributes.hpp at line 4, boost/log/attributes/attribute.hpp at line 4, boost/log/attributes/attribute_cast.hpp at line 4, boost/log/attributes/attribute_name.hpp at line 4, boost/log/attributes/attribute_set.hpp at line 4, boost/log/attributes/attribute_value.hpp at line 4, boost/log/attributes/attribute_value_impl.hpp at line 4, boost/log/attributes/attribute_value_set.hpp at line 4, boost/log/attributes/clock.hpp at line 4, boost/log/attributes/constant.hpp at line 4, boost/log/attributes/counter.hpp at line 4, boost/log/attributes/current_process_id.hpp at line 4, boost/log/attributes/current_process_name.hpp at line 4, boost/log/attributes/current_thread_id.hpp at line 4, boost/log/attributes/fallback_policy.hpp at line 4, boost/log/attributes/fallback_policy_fwd.hpp at line 4, boost/log/attributes/function.hpp at line 4, boost/log/attributes/mutable_constant.hpp at line 4, boost/log/attributes/named_scope.hpp at line 4, boost/log/attributes/scoped_attribute.hpp at line 4, boost/log/attributes/time_traits.hpp at line 4, boost/log/attributes/timer.hpp at line 4, boost/log/attributes/value_extraction.hpp at line 4, boost/log/attributes/value_extraction_fwd.hpp at line 4, boost/log/attributes/value_visitation.hpp at line 4, boost/log/attributes/value_visitation_fwd.hpp at line 4, boost/log/common.hpp at line 4, boost/log/core.hpp at line 4, boost/log/core/core.hpp at line 4, boost/log/core/record.hpp at line 4, boost/log/core/record_view.hpp at line 4, boost/log/detail/adaptive_mutex.hpp at line 4, boost/log/detail/allocator_traits.hpp at line 4, boost/log/detail/asio_fwd.hpp at line 4, boost/log/detail/attachable_sstream_buf.hpp at line 4, boost/log/detail/attr_output_impl.hpp at line 4, boost/log/detail/attr_output_terminal.hpp at line 4, boost/log/detail/attribute_get_value_impl.hpp at line 4, boost/log/detail/attribute_predicate.hpp at line 4, boost/log/detail/c_str.hpp at line 4, boost/log/detail/cleanup_scope_guard.hpp at line 4, boost/log/detail/code_conversion.hpp at line 4, boost/log/detail/config.hpp at line 4, boost/log/detail/copy_cv.hpp at line 4, boost/log/detail/custom_terminal_spec.hpp at line 4, boost/log/detail/date_time_fmt_gen_traits_fwd.hpp at line 4, boost/log/detail/date_time_format_parser.hpp at line 4, boost/log/detail/decomposed_time.hpp at line 4, boost/log/detail/deduce_char_type.hpp at line 4, boost/log/detail/default_attribute_names.hpp at line 4, boost/log/detail/embedded_string_type.hpp at line 4, boost/log/detail/enqueued_record.hpp at line 4, boost/log/detail/event.hpp at line 4, boost/log/detail/fake_mutex.hpp at line 4, boost/log/detail/footer.hpp at line 4, boost/log/detail/format.hpp at line 4, boost/log/detail/function_traits.hpp at line 4, boost/log/detail/generate_overloads.hpp at line 4, boost/log/detail/header.hpp at line 4, boost/log/detail/id.hpp at line 4, boost/log/detail/is_character_type.hpp at line 4, boost/log/detail/is_ostream.hpp at line 4, boost/log/detail/light_function.hpp at line 4, boost/log/detail/light_function_pp.hpp at line 4, boost/log/detail/light_rw_mutex.hpp at line 4, boost/log/detail/locking_ptr.hpp at line 4, boost/log/detail/locks.hpp at line 4, boost/log/detail/named_scope_fmt_pp.hpp at line 4, boost/log/detail/native_typeof.hpp at line 4, boost/log/detail/parameter_tools.hpp at line 4, boost/log/detail/pause.hpp at line 4, boost/log/detail/pp_identity.hpp at line 4, boost/log/detail/process_id.hpp at line 4, boost/log/detail/setup_config.hpp at line 4, boost/log/detail/sfinae_tools.hpp at line 4, boost/log/detail/singleton.hpp at line 4, boost/log/detail/sink_init_helpers.hpp at line 4, boost/log/detail/snprintf.hpp at line 4, boost/log/detail/tagged_integer.hpp at line 4, boost/log/detail/thread_id.hpp at line 4, boost/log/detail/thread_specific.hpp at line 4, boost/log/detail/threadsafe_queue.hpp at line 4, boost/log/detail/timestamp.hpp at line 4, boost/log/detail/trivial_keyword.hpp at line 4, boost/log/detail/unary_function_terminal.hpp at line 4, boost/log/detail/unhandled_exception_count.hpp at line 4, boost/log/detail/value_ref_visitation.hpp at line 4, boost/log/exceptions.hpp at line 4, boost/log/expressions.hpp at line 4, boost/log/expressions/attr.hpp at line 4, boost/log/expressions/attr_fwd.hpp at line 4, boost/log/expressions/filter.hpp at line 4, boost/log/expressions/formatter.hpp at line 4, boost/log/expressions/formatters.hpp at line 4, boost/log/expressions/formatters/c_decorator.hpp at line 4, boost/log/expressions/formatters/char_decorator.hpp at line 4, boost/log/expressions/formatters/csv_decorator.hpp at line 4, boost/log/expressions/formatters/date_time.hpp at line 4, boost/log/expressions/formatters/format.hpp at line 4, boost/log/expressions/formatters/if.hpp at line 4, boost/log/expressions/formatters/max_size_decorator.hpp at line 4, boost/log/expressions/formatters/named_scope.hpp at line 4, boost/log/expressions/formatters/stream.hpp at line 4, boost/log/expressions/formatters/wrap_formatter.hpp at line 4, boost/log/expressions/formatters/xml_decorator.hpp at line 4, boost/log/expressions/is_keyword_descriptor.hpp at line 4, boost/log/expressions/keyword.hpp at line 4, boost/log/expressions/keyword_fwd.hpp at line 4, boost/log/expressions/message.hpp at line 4, boost/log/expressions/predicates.hpp at line 4, boost/log/expressions/predicates/begins_with.hpp at line 4, boost/log/expressions/predicates/channel_severity_filter.hpp at line 4, boost/log/expressions/predicates/contains.hpp at line 4, boost/log/expressions/predicates/ends_with.hpp at line 4, boost/log/expressions/predicates/has_attr.hpp at line 4, boost/log/expressions/predicates/is_debugger_present.hpp at line 4, boost/log/expressions/predicates/is_in_range.hpp at line 4, boost/log/expressions/predicates/matches.hpp at line 4, boost/log/expressions/record.hpp at line 4, boost/log/keywords/auto_flush.hpp at line 4, boost/log/keywords/block_size.hpp at line 4, boost/log/keywords/capacity.hpp at line 4, boost/log/keywords/channel.hpp at line 4, boost/log/keywords/delimiter.hpp at line 4, boost/log/keywords/depth.hpp at line 4, boost/log/keywords/empty_marker.hpp at line 4, boost/log/keywords/enable_final_rotation.hpp at line 4, boost/log/keywords/facility.hpp at line 4, boost/log/keywords/file_name.hpp at line 4, boost/log/keywords/filter.hpp at line 4, boost/log/keywords/format.hpp at line 4, boost/log/keywords/ident.hpp at line 4, boost/log/keywords/incomplete_marker.hpp at line 4, boost/log/keywords/ip_version.hpp at line 4, boost/log/keywords/iteration.hpp at line 4, boost/log/keywords/log_name.hpp at line 4, boost/log/keywords/log_source.hpp at line 4, boost/log/keywords/max_files.hpp at line 4, boost/log/keywords/max_size.hpp at line 4, boost/log/keywords/message_file.hpp at line 4, boost/log/keywords/min_free_space.hpp at line 4, boost/log/keywords/name.hpp at line 4, boost/log/keywords/open_mode.hpp at line 4, boost/log/keywords/order.hpp at line 4, boost/log/keywords/ordering_window.hpp at line 4, boost/log/keywords/overflow_policy.hpp at line 4, boost/log/keywords/permissions.hpp at line 4, boost/log/keywords/registration.hpp at line 4, boost/log/keywords/rotation_size.hpp at line 4, boost/log/keywords/scan_method.hpp at line 4, boost/log/keywords/severity.hpp at line 4, boost/log/keywords/start_thread.hpp at line 4, boost/log/keywords/target.hpp at line 4, boost/log/keywords/time_based_rotation.hpp at line 4, boost/log/keywords/use_impl.hpp at line 4, boost/log/sinks.hpp at line 4, boost/log/sinks/async_frontend.hpp at line 4, boost/log/sinks/attribute_mapping.hpp at line 4, boost/log/sinks/basic_sink_backend.hpp at line 4, boost/log/sinks/basic_sink_frontend.hpp at line 4, boost/log/sinks/block_on_overflow.hpp at line 4, boost/log/sinks/bounded_fifo_queue.hpp at line 4, boost/log/sinks/bounded_ordering_queue.hpp at line 4, boost/log/sinks/debug_output_backend.hpp at line 4, boost/log/sinks/drop_on_overflow.hpp at line 4, boost/log/sinks/event_log_backend.hpp at line 4, boost/log/sinks/event_log_constants.hpp at line 4, boost/log/sinks/frontend_requirements.hpp at line 4, boost/log/sinks/sink.hpp at line 4, boost/log/sinks/sync_frontend.hpp at line 4, boost/log/sinks/syslog_backend.hpp at line 4, boost/log/sinks/syslog_constants.hpp at line 4, boost/log/sinks/text_file_backend.hpp at line 4, boost/log/sinks/text_ipc_message_queue_backend.hpp at line 5, boost/log/sinks/text_multifile_backend.hpp at line 4, boost/log/sinks/text_ostream_backend.hpp at line 4, boost/log/sinks/unbounded_fifo_queue.hpp at line 4, boost/log/sinks/unbounded_ordering_queue.hpp at line 4, boost/log/sinks/unlocked_frontend.hpp at line 4, boost/log/sources/basic_logger.hpp at line 4, boost/log/sources/channel_feature.hpp at line 4, boost/log/sources/channel_logger.hpp at line 4, boost/log/sources/exception_handler_feature.hpp at line 4, boost/log/sources/features.hpp at line 4, boost/log/sources/global_logger_storage.hpp at line 4, boost/log/sources/logger.hpp at line 4, boost/log/sources/record_ostream.hpp at line 4, boost/log/sources/severity_channel_logger.hpp at line 4, boost/log/sources/severity_feature.hpp at line 4, boost/log/sources/severity_logger.hpp at line 4, boost/log/sources/threading_models.hpp at line 4, boost/log/support/date_time.hpp at line 4, boost/log/support/exception.hpp at line 4, boost/log/support/regex.hpp at line 4, boost/log/support/spirit_classic.hpp at line 4, boost/log/support/spirit_qi.hpp at line 4, boost/log/support/std_regex.hpp at line 4, boost/log/support/xpressive.hpp at line 4, boost/log/trivial.hpp at line 4, boost/log/utility/exception_handler.hpp at line 4, boost/log/utility/formatting_ostream.hpp at line 4, boost/log/utility/formatting_ostream_fwd.hpp at line 4, boost/log/utility/functional.hpp at line 4, boost/log/utility/functional/as_action.hpp at line 4, boost/log/utility/functional/begins_with.hpp at line 4, boost/log/utility/functional/bind.hpp at line 4, boost/log/utility/functional/bind_assign.hpp at line 4, boost/log/utility/functional/bind_output.hpp at line 4, boost/log/utility/functional/bind_to_log.hpp at line 4, boost/log/utility/functional/contains.hpp at line 4, boost/log/utility/functional/ends_with.hpp at line 4, boost/log/utility/functional/fun_ref.hpp at line 4, boost/log/utility/functional/in_range.hpp at line 4, boost/log/utility/functional/logical.hpp at line 4, boost/log/utility/functional/matches.hpp at line 4, boost/log/utility/functional/nop.hpp at line 4, boost/log/utility/functional/save_result.hpp at line 4, boost/log/utility/ipc/object_name.hpp at line 4, boost/log/utility/ipc/reliable_message_queue.hpp at line 5, boost/log/utility/manipulators.hpp at line 4, boost/log/utility/manipulators/add_value.hpp at line 4, boost/log/utility/manipulators/dump.hpp at line 4, boost/log/utility/manipulators/to_log.hpp at line 4, boost/log/utility/once_block.hpp at line 4, boost/log/utility/open_mode.hpp at line 4, boost/log/utility/permissions.hpp at line 5, boost/log/utility/record_ordering.hpp at line 4, boost/log/utility/setup.hpp at line 4, boost/log/utility/setup/common_attributes.hpp at line 4, boost/log/utility/setup/console.hpp at line 4, boost/log/utility/setup/file.hpp at line 4, boost/log/utility/setup/filter_parser.hpp at line 4, boost/log/utility/setup/formatter_parser.hpp at line 4, boost/log/utility/setup/from_settings.hpp at line 4, boost/log/utility/setup/from_stream.hpp at line 4, boost/log/utility/setup/settings.hpp at line 4, boost/log/utility/setup/settings_parser.hpp at line 4, boost/log/utility/strictest_lock.hpp at line 4, boost/log/utility/string_literal.hpp at line 4, boost/log/utility/string_literal_fwd.hpp at line 4, boost/log/utility/type_dispatch/date_time_types.hpp at line 4, boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp at line 4, boost/log/utility/type_dispatch/standard_types.hpp at line 4, boost/log/utility/type_dispatch/static_type_dispatcher.hpp at line 4, boost/log/utility/type_dispatch/type_dispatcher.hpp at line 4, boost/log/utility/unique_identifier_name.hpp at line 4, boost/log/utility/unused_variable.hpp at line 4, boost/log/utility/value_ref.hpp at line 4, boost/log/utility/value_ref_fwd.hpp at line 4, boost/smart_ptr/intrusive_ref_counter.hpp at line 4, boost/uuid/detail/config.hpp at line 4, boost/uuid/detail/uuid_generic.ipp at line 4, boost/uuid/detail/uuid_x86.ipp at line 4, boost/uuid/sha1.hpp at line 3, libs/log/config/atomic-int32/atomic_int32.cpp at line 4, libs/log/config/native-syslog/native_syslog.cpp at line 4, libs/log/config/pthread-mutex-robust/pthread_mutex_robust.cpp at line 4, libs/log/config/visibility/visibility.cpp at line 4, libs/log/config/x86-ext/avx2.cpp at line 4, libs/log/config/x86-ext/ssse3.cpp at line 4, libs/log/config/xopen-source-600/xopen_source_600.cpp at line 4, libs/log/src/alignment_gap_between.hpp at line 4, libs/log/src/attribute_name.cpp at line 4, libs/log/src/attribute_set.cpp at line 4, libs/log/src/attribute_set_impl.hpp at line 4, libs/log/src/attribute_value_set.cpp at line 4, libs/log/src/bit_tools.hpp at line 4, libs/log/src/code_conversion.cpp at line 4, libs/log/src/core.cpp at line 4, libs/log/src/date_time_format_parser.cpp at line 4, libs/log/src/default_attribute_names.cpp at line 4, libs/log/src/default_sink.cpp at line 4, libs/log/src/default_sink.hpp at line 4, libs/log/src/dump.cpp at line 4, libs/log/src/dump_avx2.cpp at line 4, libs/log/src/dump_ssse3.cpp at line 4, libs/log/src/event.cpp at line 4, libs/log/src/exceptions.cpp at line 4, libs/log/src/format_parser.cpp at line 4, libs/log/src/global_logger_storage.cpp at line 4, libs/log/src/id_formatting.hpp at line 4, libs/log/src/murmur3.hpp at line 4, libs/log/src/named_scope.cpp at line 4, libs/log/src/named_scope_format_parser.cpp at line 4, libs/log/src/once_block.cpp at line 4, libs/log/src/permissions.cpp at line 4, libs/log/src/posix/ipc_reliable_message_queue.cpp at line 5, libs/log/src/posix/ipc_sync_wrappers.hpp at line 4, libs/log/src/posix/object_name.cpp at line 4, libs/log/src/process_id.cpp at line 4, libs/log/src/process_name.cpp at line 4, libs/log/src/record_ostream.cpp at line 4, libs/log/src/setup/default_filter_factory.cpp at line 4, libs/log/src/setup/default_filter_factory.hpp at line 4, libs/log/src/setup/default_formatter_factory.cpp at line 4, libs/log/src/setup/default_formatter_factory.hpp at line 4, libs/log/src/setup/filter_parser.cpp at line 4, libs/log/src/setup/formatter_parser.cpp at line 4, libs/log/src/setup/init_from_settings.cpp at line 4, libs/log/src/setup/init_from_stream.cpp at line 4, libs/log/src/setup/matches_relation_factory.cpp at line 4, libs/log/src/setup/parser_utils.cpp at line 4, libs/log/src/setup/parser_utils.hpp at line 4, libs/log/src/setup/settings_parser.cpp at line 4, libs/log/src/severity_level.cpp at line 4, libs/log/src/spirit_encoding.cpp at line 4, libs/log/src/spirit_encoding.hpp at line 4, libs/log/src/stateless_allocator.hpp at line 4, libs/log/src/syslog_backend.cpp at line 4, libs/log/src/text_file_backend.cpp at line 4, libs/log/src/text_multifile_backend.cpp at line 4, libs/log/src/text_ostream_backend.cpp at line 4, libs/log/src/thread_id.cpp at line 4, libs/log/src/thread_specific.cpp at line 4, libs/log/src/threadsafe_queue.cpp at line 4, libs/log/src/timer.cpp at line 4, libs/log/src/timestamp.cpp at line 4, libs/log/src/trivial.cpp at line 4, libs/log/src/unhandled_exception_count.cpp at line 4, libs/log/src/unique_ptr.hpp at line 4, libs/log/src/windows/auto_handle.hpp at line 4, libs/log/src/windows/debug_output_backend.cpp at line 4, libs/log/src/windows/event_log_backend.cpp at line 4, libs/log/src/windows/event_log_registry.hpp at line 4, libs/log/src/windows/ipc_reliable_message_queue.cpp at line 5, libs/log/src/windows/ipc_sync_wrappers.cpp at line 4, libs/log/src/windows/ipc_sync_wrappers.hpp at line 4, libs/log/src/windows/light_rw_mutex.cpp at line 4, libs/log/src/windows/mapped_shared_memory.cpp at line 4, libs/log/src/windows/mapped_shared_memory.hpp at line 4, libs/log/src/windows/object_name.cpp at line 4, libs/log/src/windows/utf_code_conversion.hpp at line 4
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/atomic/detail/pause.hpp [2:4]
+ boost/core/explicit_operator_bool.hpp [3:5]
+ boost/core/null_deleter.hpp [3:5]
+ boost/log/attributes.hpp [3:5]
+ boost/log/attributes/attribute.hpp [3:5]
+ boost/log/attributes/attribute_cast.hpp [3:5]
+ boost/log/attributes/attribute_name.hpp [3:5]
+ boost/log/attributes/attribute_set.hpp [3:5]
+ boost/log/attributes/attribute_value.hpp [3:5]
+ boost/log/attributes/attribute_value_impl.hpp [3:5]
+ boost/log/attributes/attribute_value_set.hpp [3:5]
+ boost/log/attributes/clock.hpp [3:5]
+ boost/log/attributes/constant.hpp [3:5]
+ boost/log/attributes/counter.hpp [3:5]
+ boost/log/attributes/current_process_id.hpp [3:5]
+ boost/log/attributes/current_process_name.hpp [3:5]
+ boost/log/attributes/current_thread_id.hpp [3:5]
+ boost/log/attributes/fallback_policy.hpp [3:5]
+ boost/log/attributes/fallback_policy_fwd.hpp [3:5]
+ boost/log/attributes/function.hpp [3:5]
+ boost/log/attributes/mutable_constant.hpp [3:5]
+ boost/log/attributes/named_scope.hpp [3:5]
+ boost/log/attributes/scoped_attribute.hpp [3:5]
+ boost/log/attributes/time_traits.hpp [3:5]
+ boost/log/attributes/timer.hpp [3:5]
+ boost/log/attributes/value_extraction.hpp [3:5]
+ boost/log/attributes/value_extraction_fwd.hpp [3:5]
+ boost/log/attributes/value_visitation.hpp [3:5]
+ boost/log/attributes/value_visitation_fwd.hpp [3:5]
+ boost/log/common.hpp [3:5]
+ boost/log/core.hpp [3:5]
+ boost/log/core/core.hpp [3:5]
+ boost/log/core/record.hpp [3:5]
+ boost/log/core/record_view.hpp [3:5]
+ boost/log/detail/adaptive_mutex.hpp [3:5]
+ boost/log/detail/allocator_traits.hpp [3:5]
+ boost/log/detail/asio_fwd.hpp [3:5]
+ boost/log/detail/attachable_sstream_buf.hpp [3:5]
+ boost/log/detail/attr_output_impl.hpp [3:5]
+ boost/log/detail/attr_output_terminal.hpp [3:5]
+ boost/log/detail/attribute_get_value_impl.hpp [3:5]
+ boost/log/detail/attribute_predicate.hpp [3:5]
+ boost/log/detail/c_str.hpp [3:5]
+ boost/log/detail/cleanup_scope_guard.hpp [3:5]
+ boost/log/detail/code_conversion.hpp [3:5]
+ boost/log/detail/config.hpp [3:5]
+ boost/log/detail/copy_cv.hpp [3:5]
+ boost/log/detail/custom_terminal_spec.hpp [3:5]
+ boost/log/detail/date_time_fmt_gen_traits_fwd.hpp [3:5]
+ boost/log/detail/date_time_format_parser.hpp [3:5]
+ boost/log/detail/decomposed_time.hpp [3:5]
+ boost/log/detail/deduce_char_type.hpp [3:5]
+ boost/log/detail/default_attribute_names.hpp [3:5]
+ boost/log/detail/embedded_string_type.hpp [3:5]
+ boost/log/detail/enqueued_record.hpp [3:5]
+ boost/log/detail/event.hpp [3:5]
+ boost/log/detail/fake_mutex.hpp [3:5]
+ boost/log/detail/footer.hpp [3:5]
+ boost/log/detail/format.hpp [3:5]
+ boost/log/detail/function_traits.hpp [3:5]
+ boost/log/detail/generate_overloads.hpp [3:5]
+ boost/log/detail/header.hpp [3:5]
+ boost/log/detail/id.hpp [3:5]
+ boost/log/detail/is_character_type.hpp [3:5]
+ boost/log/detail/is_ostream.hpp [3:5]
+ boost/log/detail/light_function.hpp [3:5]
+ boost/log/detail/light_function_pp.hpp [3:5]
+ boost/log/detail/light_rw_mutex.hpp [3:5]
+ boost/log/detail/locking_ptr.hpp [3:5]
+ boost/log/detail/locks.hpp [3:5]
+ boost/log/detail/named_scope_fmt_pp.hpp [3:5]
+ boost/log/detail/native_typeof.hpp [3:5]
+ boost/log/detail/parameter_tools.hpp [3:5]
+ boost/log/detail/pause.hpp [3:5]
+ boost/log/detail/pp_identity.hpp [3:5]
+ boost/log/detail/process_id.hpp [3:5]
+ boost/log/detail/setup_config.hpp [3:5]
+ boost/log/detail/sfinae_tools.hpp [3:5]
+ boost/log/detail/singleton.hpp [3:5]
+ boost/log/detail/sink_init_helpers.hpp [3:5]
+ boost/log/detail/snprintf.hpp [3:5]
+ boost/log/detail/tagged_integer.hpp [3:5]
+ boost/log/detail/thread_id.hpp [3:5]
+ boost/log/detail/thread_specific.hpp [3:5]
+ boost/log/detail/threadsafe_queue.hpp [3:5]
+ boost/log/detail/timestamp.hpp [3:5]
+ boost/log/detail/trivial_keyword.hpp [3:5]
+ boost/log/detail/unary_function_terminal.hpp [3:5]
+ boost/log/detail/unhandled_exception_count.hpp [3:5]
+ boost/log/detail/value_ref_visitation.hpp [3:5]
+ boost/log/exceptions.hpp [3:5]
+ boost/log/expressions.hpp [3:5]
+ boost/log/expressions/attr.hpp [3:5]
+ boost/log/expressions/attr_fwd.hpp [3:5]
+ boost/log/expressions/filter.hpp [3:5]
+ boost/log/expressions/formatter.hpp [3:5]
+ boost/log/expressions/formatters.hpp [3:5]
+ boost/log/expressions/formatters/c_decorator.hpp [3:5]
+ boost/log/expressions/formatters/char_decorator.hpp [3:5]
+ boost/log/expressions/formatters/csv_decorator.hpp [3:5]
+ boost/log/expressions/formatters/date_time.hpp [3:5]
+ boost/log/expressions/formatters/format.hpp [3:5]
+ boost/log/expressions/formatters/if.hpp [3:5]
+ boost/log/expressions/formatters/max_size_decorator.hpp [3:5]
+ boost/log/expressions/formatters/named_scope.hpp [3:5]
+ boost/log/expressions/formatters/stream.hpp [3:5]
+ boost/log/expressions/formatters/wrap_formatter.hpp [3:5]
+ boost/log/expressions/formatters/xml_decorator.hpp [3:5]
+ boost/log/expressions/is_keyword_descriptor.hpp [3:5]
+ boost/log/expressions/keyword.hpp [3:5]
+ boost/log/expressions/keyword_fwd.hpp [3:5]
+ boost/log/expressions/message.hpp [3:5]
+ boost/log/expressions/predicates.hpp [3:5]
+ boost/log/expressions/predicates/begins_with.hpp [3:5]
+ boost/log/expressions/predicates/channel_severity_filter.hpp [3:5]
+ boost/log/expressions/predicates/contains.hpp [3:5]
+ boost/log/expressions/predicates/ends_with.hpp [3:5]
+ boost/log/expressions/predicates/has_attr.hpp [3:5]
+ boost/log/expressions/predicates/is_debugger_present.hpp [3:5]
+ boost/log/expressions/predicates/is_in_range.hpp [3:5]
+ boost/log/expressions/predicates/matches.hpp [3:5]
+ boost/log/expressions/record.hpp [3:5]
+ boost/log/keywords/auto_flush.hpp [3:5]
+ boost/log/keywords/block_size.hpp [3:5]
+ boost/log/keywords/capacity.hpp [3:5]
+ boost/log/keywords/channel.hpp [3:5]
+ boost/log/keywords/delimiter.hpp [3:5]
+ boost/log/keywords/depth.hpp [3:5]
+ boost/log/keywords/empty_marker.hpp [3:5]
+ boost/log/keywords/enable_final_rotation.hpp [3:5]
+ boost/log/keywords/facility.hpp [3:5]
+ boost/log/keywords/file_name.hpp [3:5]
+ boost/log/keywords/filter.hpp [3:5]
+ boost/log/keywords/format.hpp [3:5]
+ boost/log/keywords/ident.hpp [3:5]
+ boost/log/keywords/incomplete_marker.hpp [3:5]
+ boost/log/keywords/ip_version.hpp [3:5]
+ boost/log/keywords/iteration.hpp [3:5]
+ boost/log/keywords/log_name.hpp [3:5]
+ boost/log/keywords/log_source.hpp [3:5]
+ boost/log/keywords/max_files.hpp [3:5]
+ boost/log/keywords/max_size.hpp [3:5]
+ boost/log/keywords/message_file.hpp [3:5]
+ boost/log/keywords/min_free_space.hpp [3:5]
+ boost/log/keywords/name.hpp [3:5]
+ boost/log/keywords/open_mode.hpp [3:5]
+ boost/log/keywords/order.hpp [3:5]
+ boost/log/keywords/ordering_window.hpp [3:5]
+ boost/log/keywords/overflow_policy.hpp [3:5]
+ boost/log/keywords/permissions.hpp [3:5]
+ boost/log/keywords/registration.hpp [3:5]
+ boost/log/keywords/rotation_size.hpp [3:5]
+ boost/log/keywords/scan_method.hpp [3:5]
+ boost/log/keywords/severity.hpp [3:5]
+ boost/log/keywords/start_thread.hpp [3:5]
+ boost/log/keywords/target.hpp [3:5]
+ boost/log/keywords/time_based_rotation.hpp [3:5]
+ boost/log/keywords/use_impl.hpp [3:5]
+ boost/log/sinks.hpp [3:5]
+ boost/log/sinks/async_frontend.hpp [3:5]
+ boost/log/sinks/attribute_mapping.hpp [3:5]
+ boost/log/sinks/basic_sink_backend.hpp [3:5]
+ boost/log/sinks/basic_sink_frontend.hpp [3:5]
+ boost/log/sinks/block_on_overflow.hpp [3:5]
+ boost/log/sinks/bounded_fifo_queue.hpp [3:5]
+ boost/log/sinks/bounded_ordering_queue.hpp [3:5]
+ boost/log/sinks/debug_output_backend.hpp [3:5]
+ boost/log/sinks/drop_on_overflow.hpp [3:5]
+ boost/log/sinks/event_log_backend.hpp [3:5]
+ boost/log/sinks/event_log_constants.hpp [3:5]
+ boost/log/sinks/frontend_requirements.hpp [3:5]
+ boost/log/sinks/sink.hpp [3:5]
+ boost/log/sinks/sync_frontend.hpp [3:5]
+ boost/log/sinks/syslog_backend.hpp [3:5]
+ boost/log/sinks/syslog_constants.hpp [3:5]
+ boost/log/sinks/text_file_backend.hpp [3:5]
+ boost/log/sinks/text_ipc_message_queue_backend.hpp [4:6]
+ boost/log/sinks/text_multifile_backend.hpp [3:5]
+ boost/log/sinks/text_ostream_backend.hpp [3:5]
+ boost/log/sinks/unbounded_fifo_queue.hpp [3:5]
+ boost/log/sinks/unbounded_ordering_queue.hpp [3:5]
+ boost/log/sinks/unlocked_frontend.hpp [3:5]
+ boost/log/sources/basic_logger.hpp [3:5]
+ boost/log/sources/channel_feature.hpp [3:5]
+ boost/log/sources/channel_logger.hpp [3:5]
+ boost/log/sources/exception_handler_feature.hpp [3:5]
+ boost/log/sources/features.hpp [3:5]
+ boost/log/sources/global_logger_storage.hpp [3:5]
+ boost/log/sources/logger.hpp [3:5]
+ boost/log/sources/record_ostream.hpp [3:5]
+ boost/log/sources/severity_channel_logger.hpp [3:5]
+ boost/log/sources/severity_feature.hpp [3:5]
+ boost/log/sources/severity_logger.hpp [3:5]
+ boost/log/sources/threading_models.hpp [3:5]
+ boost/log/support/date_time.hpp [3:5]
+ boost/log/support/exception.hpp [3:5]
+ boost/log/support/regex.hpp [3:5]
+ boost/log/support/spirit_classic.hpp [3:5]
+ boost/log/support/spirit_qi.hpp [3:5]
+ boost/log/support/std_regex.hpp [3:5]
+ boost/log/support/xpressive.hpp [3:5]
+ boost/log/trivial.hpp [3:5]
+ boost/log/utility/exception_handler.hpp [3:5]
+ boost/log/utility/formatting_ostream.hpp [3:5]
+ boost/log/utility/formatting_ostream_fwd.hpp [3:5]
+ boost/log/utility/functional.hpp [3:5]
+ boost/log/utility/functional/as_action.hpp [3:5]
+ boost/log/utility/functional/begins_with.hpp [3:5]
+ boost/log/utility/functional/bind.hpp [3:5]
+ boost/log/utility/functional/bind_assign.hpp [3:5]
+ boost/log/utility/functional/bind_output.hpp [3:5]
+ boost/log/utility/functional/bind_to_log.hpp [3:5]
+ boost/log/utility/functional/contains.hpp [3:5]
+ boost/log/utility/functional/ends_with.hpp [3:5]
+ boost/log/utility/functional/fun_ref.hpp [3:5]
+ boost/log/utility/functional/in_range.hpp [3:5]
+ boost/log/utility/functional/logical.hpp [3:5]
+ boost/log/utility/functional/matches.hpp [3:5]
+ boost/log/utility/functional/nop.hpp [3:5]
+ boost/log/utility/functional/save_result.hpp [3:5]
+ boost/log/utility/ipc/object_name.hpp [3:5]
+ boost/log/utility/ipc/reliable_message_queue.hpp [4:6]
+ boost/log/utility/manipulators.hpp [3:5]
+ boost/log/utility/manipulators/add_value.hpp [3:5]
+ boost/log/utility/manipulators/dump.hpp [3:5]
+ boost/log/utility/manipulators/to_log.hpp [3:5]
+ boost/log/utility/once_block.hpp [3:5]
+ boost/log/utility/open_mode.hpp [3:5]
+ boost/log/utility/permissions.hpp [4:6]
+ boost/log/utility/record_ordering.hpp [3:5]
+ boost/log/utility/setup.hpp [3:5]
+ boost/log/utility/setup/common_attributes.hpp [3:5]
+ boost/log/utility/setup/console.hpp [3:5]
+ boost/log/utility/setup/file.hpp [3:5]
+ boost/log/utility/setup/filter_parser.hpp [3:5]
+ boost/log/utility/setup/formatter_parser.hpp [3:5]
+ boost/log/utility/setup/from_settings.hpp [3:5]
+ boost/log/utility/setup/from_stream.hpp [3:5]
+ boost/log/utility/setup/settings.hpp [3:5]
+ boost/log/utility/setup/settings_parser.hpp [3:5]
+ boost/log/utility/strictest_lock.hpp [3:5]
+ boost/log/utility/string_literal.hpp [3:5]
+ boost/log/utility/string_literal_fwd.hpp [3:5]
+ boost/log/utility/type_dispatch/date_time_types.hpp [3:5]
+ boost/log/utility/type_dispatch/dynamic_type_dispatcher.hpp [3:5]
+ boost/log/utility/type_dispatch/standard_types.hpp [3:5]
+ boost/log/utility/type_dispatch/static_type_dispatcher.hpp [3:5]
+ boost/log/utility/type_dispatch/type_dispatcher.hpp [3:5]
+ boost/log/utility/unique_identifier_name.hpp [3:5]
+ boost/log/utility/unused_variable.hpp [3:5]
+ boost/log/utility/value_ref.hpp [3:5]
+ boost/log/utility/value_ref_fwd.hpp [3:5]
+ boost/smart_ptr/intrusive_ref_counter.hpp [3:5]
+ boost/uuid/detail/config.hpp [3:5]
+ boost/uuid/detail/uuid_generic.ipp [3:5]
+ boost/uuid/detail/uuid_x86.ipp [3:5]
+ boost/uuid/sha1.hpp [2:4]
+ libs/log/config/atomic-int32/atomic_int32.cpp [3:5]
+ libs/log/config/native-syslog/native_syslog.cpp [3:5]
+ libs/log/config/pthread-mutex-robust/pthread_mutex_robust.cpp [3:5]
+ libs/log/config/visibility/visibility.cpp [3:5]
+ libs/log/config/x86-ext/avx2.cpp [3:5]
+ libs/log/config/x86-ext/ssse3.cpp [3:5]
+ libs/log/config/xopen-source-600/xopen_source_600.cpp [3:5]
+ libs/log/src/alignment_gap_between.hpp [3:5]
+ libs/log/src/attribute_name.cpp [3:5]
+ libs/log/src/attribute_set.cpp [3:5]
+ libs/log/src/attribute_set_impl.hpp [3:5]
+ libs/log/src/attribute_value_set.cpp [3:5]
+ libs/log/src/bit_tools.hpp [3:5]
+ libs/log/src/code_conversion.cpp [3:5]
+ libs/log/src/core.cpp [3:5]
+ libs/log/src/date_time_format_parser.cpp [3:5]
+ libs/log/src/default_attribute_names.cpp [3:5]
+ libs/log/src/default_sink.cpp [3:5]
+ libs/log/src/default_sink.hpp [3:5]
+ libs/log/src/dump.cpp [3:5]
+ libs/log/src/dump_avx2.cpp [3:5]
+ libs/log/src/dump_ssse3.cpp [3:5]
+ libs/log/src/event.cpp [3:5]
+ libs/log/src/exceptions.cpp [3:5]
+ libs/log/src/format_parser.cpp [3:5]
+ libs/log/src/global_logger_storage.cpp [3:5]
+ libs/log/src/id_formatting.hpp [3:5]
+ libs/log/src/murmur3.hpp [3:5]
+ libs/log/src/named_scope.cpp [3:5]
+ libs/log/src/named_scope_format_parser.cpp [3:5]
+ libs/log/src/once_block.cpp [3:5]
+ libs/log/src/permissions.cpp [3:5]
+ libs/log/src/posix/ipc_reliable_message_queue.cpp [4:6]
+ libs/log/src/posix/ipc_sync_wrappers.hpp [3:5]
+ libs/log/src/posix/object_name.cpp [3:5]
+ libs/log/src/process_id.cpp [3:5]
+ libs/log/src/process_name.cpp [3:5]
+ libs/log/src/record_ostream.cpp [3:5]
+ libs/log/src/setup/default_filter_factory.cpp [3:5]
+ libs/log/src/setup/default_filter_factory.hpp [3:5]
+ libs/log/src/setup/default_formatter_factory.cpp [3:5]
+ libs/log/src/setup/default_formatter_factory.hpp [3:5]
+ libs/log/src/setup/filter_parser.cpp [3:5]
+ libs/log/src/setup/formatter_parser.cpp [3:5]
+ libs/log/src/setup/init_from_settings.cpp [3:5]
+ libs/log/src/setup/init_from_stream.cpp [3:5]
+ libs/log/src/setup/matches_relation_factory.cpp [3:5]
+ libs/log/src/setup/parser_utils.cpp [3:5]
+ libs/log/src/setup/parser_utils.hpp [3:5]
+ libs/log/src/setup/settings_parser.cpp [3:5]
+ libs/log/src/severity_level.cpp [3:5]
+ libs/log/src/spirit_encoding.cpp [3:5]
+ libs/log/src/spirit_encoding.hpp [3:5]
+ libs/log/src/stateless_allocator.hpp [3:5]
+ libs/log/src/syslog_backend.cpp [3:5]
+ libs/log/src/text_file_backend.cpp [3:5]
+ libs/log/src/text_multifile_backend.cpp [3:5]
+ libs/log/src/text_ostream_backend.cpp [3:5]
+ libs/log/src/thread_id.cpp [3:5]
+ libs/log/src/thread_specific.cpp [3:5]
+ libs/log/src/threadsafe_queue.cpp [3:5]
+ libs/log/src/timer.cpp [3:5]
+ libs/log/src/timestamp.cpp [3:5]
+ libs/log/src/trivial.cpp [3:5]
+ libs/log/src/unhandled_exception_count.cpp [3:5]
+ libs/log/src/unique_ptr.hpp [3:5]
+ libs/log/src/windows/auto_handle.hpp [3:5]
+ libs/log/src/windows/debug_output_backend.cpp [3:5]
+ libs/log/src/windows/event_log_backend.cpp [3:5]
+ libs/log/src/windows/event_log_registry.hpp [3:5]
+ libs/log/src/windows/ipc_reliable_message_queue.cpp [4:6]
+ libs/log/src/windows/ipc_sync_wrappers.cpp [3:5]
+ libs/log/src/windows/ipc_sync_wrappers.hpp [3:5]
+ libs/log/src/windows/light_rw_mutex.cpp [3:5]
+ libs/log/src/windows/mapped_shared_memory.cpp [3:5]
+ libs/log/src/windows/mapped_shared_memory.hpp [3:5]
+ libs/log/src/windows/object_name.cpp [3:5]
+ libs/log/src/windows/utf_code_conversion.hpp [3:5]
+
+KEEP BSL-1.0 bd5d1d3e2ab4557acb808f71d4a03783
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/detail/binary_search.hpp at line 3, boost/mpl/O1_size.hpp at line 8, boost/mpl/O1_size_fwd.hpp at line 8, boost/mpl/accumulate.hpp at line 9, boost/mpl/advance.hpp at line 8, boost/mpl/advance_fwd.hpp at line 8, boost/mpl/alias.hpp at line 8, boost/mpl/always.hpp at line 8, boost/mpl/and.hpp at line 8, boost/mpl/apply.hpp at line 12, boost/mpl/apply_fwd.hpp at line 12, boost/mpl/apply_wrap.hpp at line 12, boost/mpl/arg.hpp at line 13, boost/mpl/arg_fwd.hpp at line 9, boost/mpl/arithmetic.hpp at line 8, boost/mpl/as_sequence.hpp at line 8, boost/mpl/assert.hpp at line 8, boost/mpl/at.hpp at line 8, boost/mpl/at_fwd.hpp at line 8, boost/mpl/aux_/O1_size_impl.hpp at line 8, boost/mpl/aux_/adl_barrier.hpp at line 8, boost/mpl/aux_/advance_backward.hpp at line 12, boost/mpl/aux_/advance_forward.hpp at line 12, boost/mpl/aux_/apply_1st.hpp at line 8, boost/mpl/aux_/arg_typedef.hpp at line 8, boost/mpl/aux_/arithmetic_op.hpp at line 7, boost/mpl/aux_/arity.hpp at line 8, boost/mpl/aux_/arity_spec.hpp at line 8, boost/mpl/aux_/at_impl.hpp at line 8, boost/mpl/aux_/back_impl.hpp at line 8, boost/mpl/aux_/basic_bind.hpp at line 9, boost/mpl/aux_/clear_impl.hpp at line 8, boost/mpl/aux_/common_name_wknd.hpp at line 8, boost/mpl/aux_/comparison_op.hpp at line 7, boost/mpl/aux_/config/adl.hpp at line 8, boost/mpl/aux_/config/arrays.hpp at line 8, boost/mpl/aux_/config/bcc.hpp at line 8, boost/mpl/aux_/config/bind.hpp at line 9, boost/mpl/aux_/config/compiler.hpp at line 8, boost/mpl/aux_/config/ctps.hpp at line 8, boost/mpl/aux_/config/dependent_nttp.hpp at line 8, boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp at line 8, boost/mpl/aux_/config/dtp.hpp at line 8, boost/mpl/aux_/config/eti.hpp at line 8, boost/mpl/aux_/config/forwarding.hpp at line 8, boost/mpl/aux_/config/gcc.hpp at line 8, boost/mpl/aux_/config/has_apply.hpp at line 8, boost/mpl/aux_/config/has_xxx.hpp at line 9, boost/mpl/aux_/config/integral.hpp at line 8, boost/mpl/aux_/config/intel.hpp at line 8, boost/mpl/aux_/config/lambda.hpp at line 8, boost/mpl/aux_/config/msvc.hpp at line 8, boost/mpl/aux_/config/msvc_typename.hpp at line 8, boost/mpl/aux_/config/nttp.hpp at line 8, boost/mpl/aux_/config/operators.hpp at line 8, boost/mpl/aux_/config/overload_resolution.hpp at line 8, boost/mpl/aux_/config/pp_counter.hpp at line 8, boost/mpl/aux_/config/preprocessor.hpp at line 8, boost/mpl/aux_/config/static_constant.hpp at line 8, boost/mpl/aux_/config/ttp.hpp at line 8, boost/mpl/aux_/config/typeof.hpp at line 8, boost/mpl/aux_/config/use_preprocessed.hpp at line 8, boost/mpl/aux_/config/workaround.hpp at line 8, boost/mpl/aux_/contains_impl.hpp at line 9, boost/mpl/aux_/count_args.hpp at line 7, boost/mpl/aux_/count_impl.hpp at line 8, boost/mpl/aux_/empty_impl.hpp at line 8, boost/mpl/aux_/erase_impl.hpp at line 8, boost/mpl/aux_/erase_key_impl.hpp at line 8, boost/mpl/aux_/filter_iter.hpp at line 8, boost/mpl/aux_/find_if_pred.hpp at line 9, boost/mpl/aux_/fold_impl.hpp at line 8, boost/mpl/aux_/fold_impl_body.hpp at line 9, boost/mpl/aux_/fold_op.hpp at line 8, boost/mpl/aux_/fold_pred.hpp at line 8, boost/mpl/aux_/front_impl.hpp at line 8, boost/mpl/aux_/full_lambda.hpp at line 12, boost/mpl/aux_/has_apply.hpp at line 8, boost/mpl/aux_/has_begin.hpp at line 8, boost/mpl/aux_/has_key_impl.hpp at line 9, boost/mpl/aux_/has_rebind.hpp at line 8, boost/mpl/aux_/has_size.hpp at line 8, boost/mpl/aux_/has_tag.hpp at line 8, boost/mpl/aux_/has_type.hpp at line 8, boost/mpl/aux_/include_preprocessed.hpp at line 7, boost/mpl/aux_/insert_impl.hpp at line 8, boost/mpl/aux_/insert_range_impl.hpp at line 8, boost/mpl/aux_/inserter_algorithm.hpp at line 9, boost/mpl/aux_/integral_wrapper.hpp at line 5, boost/mpl/aux_/is_msvc_eti_arg.hpp at line 8, boost/mpl/aux_/iter_apply.hpp at line 8, boost/mpl/aux_/iter_fold_if_impl.hpp at line 9, boost/mpl/aux_/iter_fold_impl.hpp at line 8, boost/mpl/aux_/iter_push_front.hpp at line 8, boost/mpl/aux_/joint_iter.hpp at line 8, boost/mpl/aux_/lambda_arity_param.hpp at line 8, boost/mpl/aux_/lambda_no_ctps.hpp at line 12, boost/mpl/aux_/lambda_spec.hpp at line 8, boost/mpl/aux_/lambda_support.hpp at line 8, boost/mpl/aux_/largest_int.hpp at line 8, boost/mpl/aux_/logical_op.hpp at line 5, boost/mpl/aux_/msvc_dtw.hpp at line 5, boost/mpl/aux_/msvc_eti_base.hpp at line 8, boost/mpl/aux_/msvc_is_class.hpp at line 8, boost/mpl/aux_/msvc_never_true.hpp at line 8, boost/mpl/aux_/msvc_type.hpp at line 8, boost/mpl/aux_/na.hpp at line 8, boost/mpl/aux_/na_assert.hpp at line 8, boost/mpl/aux_/na_fwd.hpp at line 8, boost/mpl/aux_/na_spec.hpp at line 8, boost/mpl/aux_/nested_type_wknd.hpp at line 8, boost/mpl/aux_/nttp_decl.hpp at line 8, boost/mpl/aux_/numeric_cast_utils.hpp at line 8, boost/mpl/aux_/numeric_op.hpp at line 11, boost/mpl/aux_/order_impl.hpp at line 9, boost/mpl/aux_/overload_names.hpp at line 8, boost/mpl/aux_/partition_op.hpp at line 9, boost/mpl/aux_/pop_back_impl.hpp at line 8, boost/mpl/aux_/pop_front_impl.hpp at line 8, boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/and.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/apply.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/arg.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/bind.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/deque.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/divides.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/greater.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/less.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/list.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/map.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/minus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/or.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/plus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/quote.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/set.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/bcc/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/times.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/vector.hpp at line 5, boost/mpl/aux_/preprocessed/bcc/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/and.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/apply.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/arg.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/bind.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/deque.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/divides.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/greater.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/less.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/list.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/map.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/minus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/or.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/plus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/quote.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/set.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/times.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/vector.hpp at line 5, boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp at line 5, boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/and.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/apply.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/arg.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/bind.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/deque.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/divides.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/greater.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/less.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/list.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/map.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/minus.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/or.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/plus.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/quote.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/set.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/dmc/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/times.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/vector.hpp at line 5, boost/mpl/aux_/preprocessed/dmc/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/and.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/apply.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/arg.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/bind.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/deque.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/divides.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/greater.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/less.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/list.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/map.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/minus.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/or.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/plus.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/quote.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/set.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/gcc/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/times.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/vector.hpp at line 5, boost/mpl/aux_/preprocessed/gcc/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/and.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/apply.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/arg.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/bind.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/deque.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/divides.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/greater.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/less.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/list.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/map.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/minus.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/or.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/plus.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/quote.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/set.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/times.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/vector.hpp at line 5, boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/and.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/apply.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/arg.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/bind.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/deque.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/divides.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/greater.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/less.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/list.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/map.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/minus.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/or.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/plus.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/quote.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/set.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/times.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/vector.hpp at line 5, boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/and.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/apply.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/arg.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/bind.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/deque.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/divides.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/greater.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/less.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/list.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/map.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/minus.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/or.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/plus.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/quote.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/set.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/times.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/vector.hpp at line 5, boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/and.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/apply.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/arg.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/bind.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/deque.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/divides.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/greater.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/less.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/list.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/map.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/minus.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/or.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/plus.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/quote.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/set.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/times.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/vector.hpp at line 5, boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/and.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/apply.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/arg.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/bind.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/deque.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/divides.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/greater.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/less.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/list.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/map.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/minus.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/or.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/plus.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/quote.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/set.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/times.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/vector.hpp at line 5, boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp at line 5, boost/mpl/aux_/preprocessed/plain/advance_backward.hpp at line 5, boost/mpl/aux_/preprocessed/plain/advance_forward.hpp at line 5, boost/mpl/aux_/preprocessed/plain/and.hpp at line 5, boost/mpl/aux_/preprocessed/plain/apply.hpp at line 5, boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp at line 5, boost/mpl/aux_/preprocessed/plain/arg.hpp at line 6, boost/mpl/aux_/preprocessed/plain/basic_bind.hpp at line 6, boost/mpl/aux_/preprocessed/plain/bind.hpp at line 6, boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp at line 5, boost/mpl/aux_/preprocessed/plain/bitand.hpp at line 6, boost/mpl/aux_/preprocessed/plain/bitor.hpp at line 6, boost/mpl/aux_/preprocessed/plain/bitxor.hpp at line 6, boost/mpl/aux_/preprocessed/plain/deque.hpp at line 5, boost/mpl/aux_/preprocessed/plain/divides.hpp at line 5, boost/mpl/aux_/preprocessed/plain/equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/plain/fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/plain/full_lambda.hpp at line 5, boost/mpl/aux_/preprocessed/plain/greater.hpp at line 5, boost/mpl/aux_/preprocessed/plain/greater_equal.hpp at line 5, boost/mpl/aux_/preprocessed/plain/inherit.hpp at line 5, boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp at line 6, boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp at line 5, boost/mpl/aux_/preprocessed/plain/less.hpp at line 5, boost/mpl/aux_/preprocessed/plain/less_equal.hpp at line 5, boost/mpl/aux_/preprocessed/plain/list.hpp at line 5, boost/mpl/aux_/preprocessed/plain/list_c.hpp at line 5, boost/mpl/aux_/preprocessed/plain/map.hpp at line 5, boost/mpl/aux_/preprocessed/plain/minus.hpp at line 5, boost/mpl/aux_/preprocessed/plain/modulus.hpp at line 5, boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp at line 5, boost/mpl/aux_/preprocessed/plain/or.hpp at line 5, boost/mpl/aux_/preprocessed/plain/placeholders.hpp at line 6, boost/mpl/aux_/preprocessed/plain/plus.hpp at line 5, boost/mpl/aux_/preprocessed/plain/quote.hpp at line 5, boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp at line 5, boost/mpl/aux_/preprocessed/plain/set.hpp at line 5, boost/mpl/aux_/preprocessed/plain/set_c.hpp at line 5, boost/mpl/aux_/preprocessed/plain/shift_left.hpp at line 6, boost/mpl/aux_/preprocessed/plain/shift_right.hpp at line 6, boost/mpl/aux_/preprocessed/plain/template_arity.hpp at line 5, boost/mpl/aux_/preprocessed/plain/times.hpp at line 5, boost/mpl/aux_/preprocessed/plain/unpack_args.hpp at line 5, boost/mpl/aux_/preprocessed/plain/vector.hpp at line 5, boost/mpl/aux_/preprocessed/plain/vector_c.hpp at line 5, boost/mpl/aux_/preprocessor/add.hpp at line 8, boost/mpl/aux_/preprocessor/def_params_tail.hpp at line 8, boost/mpl/aux_/preprocessor/default_params.hpp at line 8, boost/mpl/aux_/preprocessor/enum.hpp at line 8, boost/mpl/aux_/preprocessor/ext_params.hpp at line 8, boost/mpl/aux_/preprocessor/filter_params.hpp at line 8, boost/mpl/aux_/preprocessor/is_seq.hpp at line 9, boost/mpl/aux_/preprocessor/params.hpp at line 8, boost/mpl/aux_/preprocessor/partial_spec_params.hpp at line 8, boost/mpl/aux_/preprocessor/range.hpp at line 8, boost/mpl/aux_/preprocessor/repeat.hpp at line 8, boost/mpl/aux_/preprocessor/sub.hpp at line 8, boost/mpl/aux_/preprocessor/token_equal.hpp at line 9, boost/mpl/aux_/preprocessor/tuple.hpp at line 8, boost/mpl/aux_/ptr_to_ref.hpp at line 8, boost/mpl/aux_/push_back_impl.hpp at line 8, boost/mpl/aux_/push_front_impl.hpp at line 8, boost/mpl/aux_/range_c/O1_size.hpp at line 8, boost/mpl/aux_/range_c/back.hpp at line 8, boost/mpl/aux_/range_c/empty.hpp at line 8, boost/mpl/aux_/range_c/front.hpp at line 8, boost/mpl/aux_/range_c/iterator.hpp at line 8, boost/mpl/aux_/range_c/size.hpp at line 8, boost/mpl/aux_/range_c/tag.hpp at line 8, boost/mpl/aux_/reverse_fold_impl.hpp at line 8, boost/mpl/aux_/reverse_fold_impl_body.hpp at line 9, boost/mpl/aux_/reverse_iter_fold_impl.hpp at line 8, boost/mpl/aux_/sequence_wrapper.hpp at line 11, boost/mpl/aux_/shift_op.hpp at line 7, boost/mpl/aux_/single_element_iter.hpp at line 8, boost/mpl/aux_/size_impl.hpp at line 8, boost/mpl/aux_/sort_impl.hpp at line 8, boost/mpl/aux_/static_cast.hpp at line 8, boost/mpl/aux_/template_arity.hpp at line 12, boost/mpl/aux_/template_arity_fwd.hpp at line 8, boost/mpl/aux_/test.hpp at line 8, boost/mpl/aux_/test/assert.hpp at line 8, boost/mpl/aux_/test/data.hpp at line 8, boost/mpl/aux_/test/test_case.hpp at line 8, boost/mpl/aux_/traits_lambda_spec.hpp at line 8, boost/mpl/aux_/transform_iter.hpp at line 8, boost/mpl/aux_/type_wrapper.hpp at line 9, boost/mpl/aux_/unwrap.hpp at line 9, boost/mpl/aux_/value_wknd.hpp at line 8, boost/mpl/aux_/yes_no.hpp at line 8, boost/mpl/back.hpp at line 8, boost/mpl/back_fwd.hpp at line 8, boost/mpl/back_inserter.hpp at line 9, boost/mpl/base.hpp at line 8, boost/mpl/begin.hpp at line 8, boost/mpl/begin_end.hpp at line 8, boost/mpl/begin_end_fwd.hpp at line 8, boost/mpl/bind.hpp at line 13, boost/mpl/bind_fwd.hpp at line 12, boost/mpl/bitand.hpp at line 9, boost/mpl/bitor.hpp at line 9, boost/mpl/bitwise.hpp at line 9, boost/mpl/bitxor.hpp at line 9, boost/mpl/bool.hpp at line 8, boost/mpl/bool_fwd.hpp at line 8, boost/mpl/char.hpp at line 8, boost/mpl/char_fwd.hpp at line 8, boost/mpl/clear.hpp at line 8, boost/mpl/clear_fwd.hpp at line 8, boost/mpl/comparison.hpp at line 8, boost/mpl/contains.hpp at line 9, boost/mpl/contains_fwd.hpp at line 9, boost/mpl/copy.hpp at line 9, boost/mpl/copy_if.hpp at line 9, boost/mpl/count.hpp at line 8, boost/mpl/count_fwd.hpp at line 8, boost/mpl/count_if.hpp at line 8, boost/mpl/deque.hpp at line 8, boost/mpl/deref.hpp at line 8, boost/mpl/distance.hpp at line 8, boost/mpl/distance_fwd.hpp at line 8, boost/mpl/divides.hpp at line 8, boost/mpl/empty.hpp at line 8, boost/mpl/empty_base.hpp at line 8, boost/mpl/empty_fwd.hpp at line 8, boost/mpl/empty_sequence.hpp at line 9, boost/mpl/end.hpp at line 8, boost/mpl/equal.hpp at line 8, boost/mpl/equal_to.hpp at line 8, boost/mpl/erase.hpp at line 8, boost/mpl/erase_fwd.hpp at line 8, boost/mpl/erase_key.hpp at line 8, boost/mpl/erase_key_fwd.hpp at line 8, boost/mpl/filter_view.hpp at line 8, boost/mpl/find.hpp at line 8, boost/mpl/find_if.hpp at line 8, boost/mpl/fold.hpp at line 9, boost/mpl/for_each.hpp at line 8, boost/mpl/front.hpp at line 8, boost/mpl/front_fwd.hpp at line 8, boost/mpl/front_inserter.hpp at line 9, boost/mpl/greater.hpp at line 8, boost/mpl/greater_equal.hpp at line 8, boost/mpl/has_key.hpp at line 9, boost/mpl/has_key_fwd.hpp at line 9, boost/mpl/has_xxx.hpp at line 10, boost/mpl/identity.hpp at line 8, boost/mpl/if.hpp at line 8, boost/mpl/index_if.hpp at line 8, boost/mpl/index_of.hpp at line 9, boost/mpl/inherit.hpp at line 12, boost/mpl/inherit_linearly.hpp at line 8, boost/mpl/insert.hpp at line 8, boost/mpl/insert_fwd.hpp at line 8, boost/mpl/insert_range.hpp at line 8, boost/mpl/insert_range_fwd.hpp at line 8, boost/mpl/inserter.hpp at line 9, boost/mpl/int.hpp at line 8, boost/mpl/int_fwd.hpp at line 8, boost/mpl/integral_c.hpp at line 8, boost/mpl/integral_c_fwd.hpp at line 8, boost/mpl/integral_c_tag.hpp at line 8, boost/mpl/is_placeholder.hpp at line 8, boost/mpl/is_sequence.hpp at line 8, boost/mpl/iter_fold.hpp at line 9, boost/mpl/iter_fold_if.hpp at line 9, boost/mpl/iterator_category.hpp at line 8, boost/mpl/iterator_range.hpp at line 8, boost/mpl/iterator_tags.hpp at line 8, boost/mpl/joint_view.hpp at line 8, boost/mpl/key_type.hpp at line 9, boost/mpl/key_type_fwd.hpp at line 9, boost/mpl/lambda.hpp at line 8, boost/mpl/lambda_fwd.hpp at line 8, boost/mpl/less.hpp at line 8, boost/mpl/less_equal.hpp at line 8, boost/mpl/limits/arity.hpp at line 8, boost/mpl/limits/list.hpp at line 8, boost/mpl/limits/map.hpp at line 8, boost/mpl/limits/set.hpp at line 8, boost/mpl/limits/string.hpp at line 8, boost/mpl/limits/unrolling.hpp at line 8, boost/mpl/limits/vector.hpp at line 8, boost/mpl/list.hpp at line 8, boost/mpl/list/aux_/O1_size.hpp at line 8, boost/mpl/list/aux_/begin_end.hpp at line 8, boost/mpl/list/aux_/clear.hpp at line 8, boost/mpl/list/aux_/empty.hpp at line 8, boost/mpl/list/aux_/front.hpp at line 8, boost/mpl/list/aux_/include_preprocessed.hpp at line 5, boost/mpl/list/aux_/item.hpp at line 8, boost/mpl/list/aux_/iterator.hpp at line 8, boost/mpl/list/aux_/numbered.hpp at line 8, boost/mpl/list/aux_/numbered_c.hpp at line 7, boost/mpl/list/aux_/pop_front.hpp at line 8, boost/mpl/list/aux_/preprocessed/plain/list10.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list20.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list30.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list40.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list50.hpp at line 5, boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp at line 5, boost/mpl/list/aux_/push_back.hpp at line 8, boost/mpl/list/aux_/push_front.hpp at line 8, boost/mpl/list/aux_/size.hpp at line 8, boost/mpl/list/aux_/tag.hpp at line 8, boost/mpl/list/list0.hpp at line 8, boost/mpl/list/list0_c.hpp at line 8, boost/mpl/list/list10.hpp at line 8, boost/mpl/list/list10_c.hpp at line 8, boost/mpl/list/list20.hpp at line 8, boost/mpl/list/list20_c.hpp at line 8, boost/mpl/list/list30.hpp at line 8, boost/mpl/list/list30_c.hpp at line 8, boost/mpl/list/list40.hpp at line 8, boost/mpl/list/list40_c.hpp at line 8, boost/mpl/list/list50.hpp at line 8, boost/mpl/list/list50_c.hpp at line 8, boost/mpl/list_c.hpp at line 8, boost/mpl/logical.hpp at line 8, boost/mpl/long.hpp at line 8, boost/mpl/long_fwd.hpp at line 8, boost/mpl/lower_bound.hpp at line 8, boost/mpl/map.hpp at line 8, boost/mpl/map/aux_/at_impl.hpp at line 9, boost/mpl/map/aux_/begin_end_impl.hpp at line 9, boost/mpl/map/aux_/clear_impl.hpp at line 9, boost/mpl/map/aux_/contains_impl.hpp at line 8, boost/mpl/map/aux_/empty_impl.hpp at line 8, boost/mpl/map/aux_/erase_impl.hpp at line 9, boost/mpl/map/aux_/erase_key_impl.hpp at line 9, boost/mpl/map/aux_/has_key_impl.hpp at line 9, boost/mpl/map/aux_/include_preprocessed.hpp at line 5, boost/mpl/map/aux_/insert_impl.hpp at line 9, boost/mpl/map/aux_/insert_range_impl.hpp at line 8, boost/mpl/map/aux_/item.hpp at line 9, boost/mpl/map/aux_/iterator.hpp at line 9, boost/mpl/map/aux_/key_type_impl.hpp at line 9, boost/mpl/map/aux_/map0.hpp at line 9, boost/mpl/map/aux_/numbered.hpp at line 9, boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp at line 6, boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp at line 6, boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp at line 6, boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp at line 6, boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp at line 6, boost/mpl/map/aux_/preprocessed/plain/map10.hpp at line 6, boost/mpl/map/aux_/preprocessed/plain/map20.hpp at line 6, boost/mpl/map/aux_/preprocessed/plain/map30.hpp at line 6, boost/mpl/map/aux_/preprocessed/plain/map40.hpp at line 6, boost/mpl/map/aux_/preprocessed/plain/map50.hpp at line 6, boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp at line 6, boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp at line 6, boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp at line 6, boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp at line 6, boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp at line 6, boost/mpl/map/aux_/size_impl.hpp at line 8, boost/mpl/map/aux_/tag.hpp at line 9, boost/mpl/map/aux_/value_type_impl.hpp at line 9, boost/mpl/map/map0.hpp at line 9, boost/mpl/map/map10.hpp at line 9, boost/mpl/map/map20.hpp at line 9, boost/mpl/map/map30.hpp at line 9, boost/mpl/map/map40.hpp at line 9, boost/mpl/map/map50.hpp at line 9, boost/mpl/math/fixed_c.hpp at line 8, boost/mpl/math/is_even.hpp at line 8, boost/mpl/math/rational_c.hpp at line 8, boost/mpl/max.hpp at line 8, boost/mpl/max_element.hpp at line 8, boost/mpl/min.hpp at line 8, boost/mpl/min_element.hpp at line 8, boost/mpl/min_max.hpp at line 8, boost/mpl/minus.hpp at line 8, boost/mpl/modulus.hpp at line 8, boost/mpl/multiplies.hpp at line 8, boost/mpl/multiset/aux_/count_impl.hpp at line 8, boost/mpl/multiset/aux_/insert_impl.hpp at line 8, boost/mpl/multiset/aux_/item.hpp at line 8, boost/mpl/multiset/aux_/multiset0.hpp at line 8, boost/mpl/multiset/aux_/tag.hpp at line 8, boost/mpl/multiset/multiset0.hpp at line 8, boost/mpl/negate.hpp at line 8, boost/mpl/next.hpp at line 8, boost/mpl/next_prior.hpp at line 8, boost/mpl/not.hpp at line 8, boost/mpl/not_equal_to.hpp at line 8, boost/mpl/or.hpp at line 8, boost/mpl/order.hpp at line 9, boost/mpl/order_fwd.hpp at line 9, boost/mpl/pair.hpp at line 8, boost/mpl/pair_view.hpp at line 9, boost/mpl/partition.hpp at line 9, boost/mpl/placeholders.hpp at line 13, boost/mpl/plus.hpp at line 8, boost/mpl/pop_back.hpp at line 8, boost/mpl/pop_back_fwd.hpp at line 8, boost/mpl/pop_front.hpp at line 8, boost/mpl/pop_front_fwd.hpp at line 8, boost/mpl/print.hpp at line 9, boost/mpl/prior.hpp at line 8, boost/mpl/protect.hpp at line 9, boost/mpl/push_back.hpp at line 8, boost/mpl/push_back_fwd.hpp at line 8, boost/mpl/push_front.hpp at line 8, boost/mpl/push_front_fwd.hpp at line 8, boost/mpl/quote.hpp at line 12, boost/mpl/range_c.hpp at line 8, boost/mpl/remove.hpp at line 9, boost/mpl/remove_if.hpp at line 9, boost/mpl/replace.hpp at line 10, boost/mpl/replace_if.hpp at line 10, boost/mpl/reverse.hpp at line 8, boost/mpl/reverse_fold.hpp at line 9, boost/mpl/reverse_iter_fold.hpp at line 9, boost/mpl/same_as.hpp at line 8, boost/mpl/sequence_tag.hpp at line 8, boost/mpl/sequence_tag_fwd.hpp at line 8, boost/mpl/set.hpp at line 8, boost/mpl/set/aux_/at_impl.hpp at line 8, boost/mpl/set/aux_/begin_end_impl.hpp at line 9, boost/mpl/set/aux_/clear_impl.hpp at line 9, boost/mpl/set/aux_/empty_impl.hpp at line 8, boost/mpl/set/aux_/erase_impl.hpp at line 9, boost/mpl/set/aux_/erase_key_impl.hpp at line 9, boost/mpl/set/aux_/has_key_impl.hpp at line 9, boost/mpl/set/aux_/include_preprocessed.hpp at line 7, boost/mpl/set/aux_/insert_impl.hpp at line 9, boost/mpl/set/aux_/insert_range_impl.hpp at line 8, boost/mpl/set/aux_/item.hpp at line 9, boost/mpl/set/aux_/iterator.hpp at line 9, boost/mpl/set/aux_/key_type_impl.hpp at line 9, boost/mpl/set/aux_/numbered.hpp at line 9, boost/mpl/set/aux_/numbered_c.hpp at line 9, boost/mpl/set/aux_/preprocessed/plain/set10.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set20.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set30.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set40.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set50.hpp at line 6, boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp at line 6, boost/mpl/set/aux_/set0.hpp at line 9, boost/mpl/set/aux_/size_impl.hpp at line 8, boost/mpl/set/aux_/tag.hpp at line 9, boost/mpl/set/aux_/value_type_impl.hpp at line 9, boost/mpl/set/set0.hpp at line 9, boost/mpl/set/set0_c.hpp at line 9, boost/mpl/set/set10.hpp at line 9, boost/mpl/set/set10_c.hpp at line 9, boost/mpl/set/set20.hpp at line 9, boost/mpl/set/set20_c.hpp at line 9, boost/mpl/set/set30.hpp at line 9, boost/mpl/set/set30_c.hpp at line 9, boost/mpl/set/set40.hpp at line 9, boost/mpl/set/set40_c.hpp at line 9, boost/mpl/set/set50.hpp at line 9, boost/mpl/set/set50_c.hpp at line 9, boost/mpl/set_c.hpp at line 8, boost/mpl/shift_left.hpp at line 9, boost/mpl/shift_right.hpp at line 9, boost/mpl/single_view.hpp at line 8, boost/mpl/size.hpp at line 8, boost/mpl/size_fwd.hpp at line 8, boost/mpl/size_t.hpp at line 8, boost/mpl/size_t_fwd.hpp at line 8, boost/mpl/sizeof.hpp at line 8, boost/mpl/sort.hpp at line 9, boost/mpl/stable_partition.hpp at line 9, boost/mpl/switch.hpp at line 8, boost/mpl/tag.hpp at line 8, boost/mpl/times.hpp at line 8, boost/mpl/transform.hpp at line 9, boost/mpl/transform_view.hpp at line 8, boost/mpl/unique.hpp at line 9, boost/mpl/unpack_args.hpp at line 12, boost/mpl/upper_bound.hpp at line 8, boost/mpl/value_type.hpp at line 9, boost/mpl/value_type_fwd.hpp at line 9, boost/mpl/vector.hpp at line 8, boost/mpl/vector/aux_/O1_size.hpp at line 8, boost/mpl/vector/aux_/at.hpp at line 8, boost/mpl/vector/aux_/back.hpp at line 8, boost/mpl/vector/aux_/begin_end.hpp at line 8, boost/mpl/vector/aux_/clear.hpp at line 8, boost/mpl/vector/aux_/empty.hpp at line 8, boost/mpl/vector/aux_/front.hpp at line 8, boost/mpl/vector/aux_/include_preprocessed.hpp at line 7, boost/mpl/vector/aux_/item.hpp at line 8, boost/mpl/vector/aux_/iterator.hpp at line 8, boost/mpl/vector/aux_/numbered.hpp at line 9, boost/mpl/vector/aux_/numbered_c.hpp at line 9, boost/mpl/vector/aux_/pop_back.hpp at line 8, boost/mpl/vector/aux_/pop_front.hpp at line 8, boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp at line 5, boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp at line 5, boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp at line 5, boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp at line 5, boost/mpl/vector/aux_/push_back.hpp at line 8, boost/mpl/vector/aux_/push_front.hpp at line 8, boost/mpl/vector/aux_/size.hpp at line 8, boost/mpl/vector/aux_/tag.hpp at line 8, boost/mpl/vector/aux_/vector0.hpp at line 8, boost/mpl/vector/vector0.hpp at line 8, boost/mpl/vector/vector0_c.hpp at line 8, boost/mpl/vector/vector10.hpp at line 8, boost/mpl/vector/vector10_c.hpp at line 8, boost/mpl/vector/vector20.hpp at line 8, boost/mpl/vector/vector20_c.hpp at line 8, boost/mpl/vector/vector30.hpp at line 8, boost/mpl/vector/vector30_c.hpp at line 8, boost/mpl/vector/vector40.hpp at line 8, boost/mpl/vector/vector40_c.hpp at line 8, boost/mpl/vector/vector50.hpp at line 8, boost/mpl/vector/vector50_c.hpp at line 8, boost/mpl/vector_c.hpp at line 8, boost/mpl/void.hpp at line 8, boost/mpl/void_fwd.hpp at line 8, boost/property_tree/detail/exception_implementation.hpp at line 6, boost/property_tree/detail/file_parser_error.hpp at line 5, boost/property_tree/detail/info_parser_error.hpp at line 5, boost/property_tree/detail/info_parser_read.hpp at line 5, boost/property_tree/detail/info_parser_utils.hpp at line 5, boost/property_tree/detail/info_parser_write.hpp at line 5, boost/property_tree/detail/info_parser_writer_settings.hpp at line 6, boost/property_tree/detail/ptree_utils.hpp at line 5, boost/property_tree/detail/rapidxml.hpp at line 5, boost/property_tree/detail/xml_parser_error.hpp at line 5, boost/property_tree/detail/xml_parser_flags.hpp at line 5, boost/property_tree/detail/xml_parser_read_rapidxml.hpp at line 5, boost/property_tree/detail/xml_parser_utils.hpp at line 5, boost/property_tree/detail/xml_parser_write.hpp at line 6, boost/property_tree/detail/xml_parser_writer_settings.hpp at line 6, boost/property_tree/exceptions.hpp at line 6, boost/property_tree/id_translator.hpp at line 5, boost/property_tree/info_parser.hpp at line 5, boost/property_tree/ini_parser.hpp at line 6, boost/property_tree/json_parser.hpp at line 6, boost/property_tree/json_parser/detail/read.hpp at line 5, boost/property_tree/json_parser/detail/write.hpp at line 5, boost/property_tree/json_parser/error.hpp at line 5, boost/property_tree/ptree.hpp at line 6, boost/property_tree/ptree_fwd.hpp at line 6, boost/property_tree/ptree_serialization.hpp at line 5, boost/property_tree/stream_translator.hpp at line 5, boost/property_tree/string_path.hpp at line 5, boost/property_tree/xml_parser.hpp at line 6, boost/range/atl.hpp at line 11, boost/range/detail/microsoft.hpp at line 8, boost/range/mfc.hpp at line 11, boost/type_traits/detail/bool_trait_def.hpp at line 7, boost/type_traits/detail/bool_trait_undef.hpp at line 7, boost/type_traits/detail/template_arity_spec.hpp at line 6
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/binary_search.hpp [2:4]
+ boost/mpl/O1_size.hpp [7:9]
+ boost/mpl/O1_size_fwd.hpp [7:9]
+ boost/mpl/accumulate.hpp [8:10]
+ boost/mpl/advance.hpp [7:9]
+ boost/mpl/advance_fwd.hpp [7:9]
+ boost/mpl/alias.hpp [7:9]
+ boost/mpl/always.hpp [7:9]
+ boost/mpl/and.hpp [7:9]
+ boost/mpl/apply.hpp [11:13]
+ boost/mpl/apply_fwd.hpp [11:13]
+ boost/mpl/apply_wrap.hpp [11:13]
+ boost/mpl/arg.hpp [12:14]
+ boost/mpl/arg_fwd.hpp [8:10]
+ boost/mpl/arithmetic.hpp [7:9]
+ boost/mpl/as_sequence.hpp [7:9]
+ boost/mpl/assert.hpp [7:9]
+ boost/mpl/at.hpp [7:9]
+ boost/mpl/at_fwd.hpp [7:9]
+ boost/mpl/aux_/O1_size_impl.hpp [7:9]
+ boost/mpl/aux_/adl_barrier.hpp [7:9]
+ boost/mpl/aux_/advance_backward.hpp [11:13]
+ boost/mpl/aux_/advance_forward.hpp [11:13]
+ boost/mpl/aux_/apply_1st.hpp [7:9]
+ boost/mpl/aux_/arg_typedef.hpp [7:9]
+ boost/mpl/aux_/arithmetic_op.hpp [6:8]
+ boost/mpl/aux_/arity.hpp [7:9]
+ boost/mpl/aux_/arity_spec.hpp [7:9]
+ boost/mpl/aux_/at_impl.hpp [7:9]
+ boost/mpl/aux_/back_impl.hpp [7:9]
+ boost/mpl/aux_/basic_bind.hpp [8:10]
+ boost/mpl/aux_/clear_impl.hpp [7:9]
+ boost/mpl/aux_/common_name_wknd.hpp [7:9]
+ boost/mpl/aux_/comparison_op.hpp [6:8]
+ boost/mpl/aux_/config/adl.hpp [7:9]
+ boost/mpl/aux_/config/arrays.hpp [7:9]
+ boost/mpl/aux_/config/bcc.hpp [7:9]
+ boost/mpl/aux_/config/bind.hpp [8:10]
+ boost/mpl/aux_/config/compiler.hpp [7:9]
+ boost/mpl/aux_/config/ctps.hpp [7:9]
+ boost/mpl/aux_/config/dependent_nttp.hpp [7:9]
+ boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp [7:9]
+ boost/mpl/aux_/config/dtp.hpp [7:9]
+ boost/mpl/aux_/config/eti.hpp [7:9]
+ boost/mpl/aux_/config/forwarding.hpp [7:9]
+ boost/mpl/aux_/config/gcc.hpp [7:9]
+ boost/mpl/aux_/config/has_apply.hpp [7:9]
+ boost/mpl/aux_/config/has_xxx.hpp [8:10]
+ boost/mpl/aux_/config/integral.hpp [7:9]
+ boost/mpl/aux_/config/intel.hpp [7:9]
+ boost/mpl/aux_/config/lambda.hpp [7:9]
+ boost/mpl/aux_/config/msvc.hpp [7:9]
+ boost/mpl/aux_/config/msvc_typename.hpp [7:9]
+ boost/mpl/aux_/config/nttp.hpp [7:9]
+ boost/mpl/aux_/config/operators.hpp [7:9]
+ boost/mpl/aux_/config/overload_resolution.hpp [7:9]
+ boost/mpl/aux_/config/pp_counter.hpp [7:9]
+ boost/mpl/aux_/config/preprocessor.hpp [7:9]
+ boost/mpl/aux_/config/static_constant.hpp [7:9]
+ boost/mpl/aux_/config/ttp.hpp [7:9]
+ boost/mpl/aux_/config/typeof.hpp [7:9]
+ boost/mpl/aux_/config/use_preprocessed.hpp [7:9]
+ boost/mpl/aux_/config/workaround.hpp [7:9]
+ boost/mpl/aux_/contains_impl.hpp [8:10]
+ boost/mpl/aux_/count_args.hpp [6:8]
+ boost/mpl/aux_/count_impl.hpp [7:9]
+ boost/mpl/aux_/empty_impl.hpp [7:9]
+ boost/mpl/aux_/erase_impl.hpp [7:9]
+ boost/mpl/aux_/erase_key_impl.hpp [7:9]
+ boost/mpl/aux_/filter_iter.hpp [7:9]
+ boost/mpl/aux_/find_if_pred.hpp [8:10]
+ boost/mpl/aux_/fold_impl.hpp [7:9]
+ boost/mpl/aux_/fold_impl_body.hpp [8:10]
+ boost/mpl/aux_/fold_op.hpp [7:9]
+ boost/mpl/aux_/fold_pred.hpp [7:9]
+ boost/mpl/aux_/front_impl.hpp [7:9]
+ boost/mpl/aux_/full_lambda.hpp [11:13]
+ boost/mpl/aux_/has_apply.hpp [7:9]
+ boost/mpl/aux_/has_begin.hpp [7:9]
+ boost/mpl/aux_/has_key_impl.hpp [8:10]
+ boost/mpl/aux_/has_rebind.hpp [7:9]
+ boost/mpl/aux_/has_size.hpp [7:9]
+ boost/mpl/aux_/has_tag.hpp [7:9]
+ boost/mpl/aux_/has_type.hpp [7:9]
+ boost/mpl/aux_/include_preprocessed.hpp [6:8]
+ boost/mpl/aux_/insert_impl.hpp [7:9]
+ boost/mpl/aux_/insert_range_impl.hpp [7:9]
+ boost/mpl/aux_/inserter_algorithm.hpp [8:10]
+ boost/mpl/aux_/integral_wrapper.hpp [4:6]
+ boost/mpl/aux_/is_msvc_eti_arg.hpp [7:9]
+ boost/mpl/aux_/iter_apply.hpp [7:9]
+ boost/mpl/aux_/iter_fold_if_impl.hpp [8:10]
+ boost/mpl/aux_/iter_fold_impl.hpp [7:9]
+ boost/mpl/aux_/iter_push_front.hpp [7:9]
+ boost/mpl/aux_/joint_iter.hpp [7:9]
+ boost/mpl/aux_/lambda_arity_param.hpp [7:9]
+ boost/mpl/aux_/lambda_no_ctps.hpp [11:13]
+ boost/mpl/aux_/lambda_spec.hpp [7:9]
+ boost/mpl/aux_/lambda_support.hpp [7:9]
+ boost/mpl/aux_/largest_int.hpp [7:9]
+ boost/mpl/aux_/logical_op.hpp [4:6]
+ boost/mpl/aux_/msvc_dtw.hpp [4:6]
+ boost/mpl/aux_/msvc_eti_base.hpp [7:9]
+ boost/mpl/aux_/msvc_is_class.hpp [7:9]
+ boost/mpl/aux_/msvc_never_true.hpp [7:9]
+ boost/mpl/aux_/msvc_type.hpp [7:9]
+ boost/mpl/aux_/na.hpp [7:9]
+ boost/mpl/aux_/na_assert.hpp [7:9]
+ boost/mpl/aux_/na_fwd.hpp [7:9]
+ boost/mpl/aux_/na_spec.hpp [7:9]
+ boost/mpl/aux_/nested_type_wknd.hpp [7:9]
+ boost/mpl/aux_/nttp_decl.hpp [7:9]
+ boost/mpl/aux_/numeric_cast_utils.hpp [7:9]
+ boost/mpl/aux_/numeric_op.hpp [10:12]
+ boost/mpl/aux_/order_impl.hpp [8:10]
+ boost/mpl/aux_/overload_names.hpp [7:9]
+ boost/mpl/aux_/partition_op.hpp [8:10]
+ boost/mpl/aux_/pop_back_impl.hpp [7:9]
+ boost/mpl/aux_/pop_front_impl.hpp [7:9]
+ boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/dmc/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/dmc/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/gcc/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/gcc/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/advance_backward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/advance_forward.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/and.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/apply.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/arg.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/basic_bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/bind.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/bitand.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/bitor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/bitxor.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/deque.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/divides.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/full_lambda.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/greater.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/greater_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/inherit.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/less.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/less_equal.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/list.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/list_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/map.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/minus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/modulus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/or.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/placeholders.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/plus.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/quote.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/set.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/set_c.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/shift_left.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/shift_right.hpp [5:7]
+ boost/mpl/aux_/preprocessed/plain/template_arity.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/times.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/unpack_args.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/vector.hpp [4:6]
+ boost/mpl/aux_/preprocessed/plain/vector_c.hpp [4:6]
+ boost/mpl/aux_/preprocessor/add.hpp [7:9]
+ boost/mpl/aux_/preprocessor/def_params_tail.hpp [7:9]
+ boost/mpl/aux_/preprocessor/default_params.hpp [7:9]
+ boost/mpl/aux_/preprocessor/enum.hpp [7:9]
+ boost/mpl/aux_/preprocessor/ext_params.hpp [7:9]
+ boost/mpl/aux_/preprocessor/filter_params.hpp [7:9]
+ boost/mpl/aux_/preprocessor/is_seq.hpp [8:10]
+ boost/mpl/aux_/preprocessor/params.hpp [7:9]
+ boost/mpl/aux_/preprocessor/partial_spec_params.hpp [7:9]
+ boost/mpl/aux_/preprocessor/range.hpp [7:9]
+ boost/mpl/aux_/preprocessor/repeat.hpp [7:9]
+ boost/mpl/aux_/preprocessor/sub.hpp [7:9]
+ boost/mpl/aux_/preprocessor/token_equal.hpp [8:10]
+ boost/mpl/aux_/preprocessor/tuple.hpp [7:9]
+ boost/mpl/aux_/ptr_to_ref.hpp [7:9]
+ boost/mpl/aux_/push_back_impl.hpp [7:9]
+ boost/mpl/aux_/push_front_impl.hpp [7:9]
+ boost/mpl/aux_/range_c/O1_size.hpp [7:9]
+ boost/mpl/aux_/range_c/back.hpp [7:9]
+ boost/mpl/aux_/range_c/empty.hpp [7:9]
+ boost/mpl/aux_/range_c/front.hpp [7:9]
+ boost/mpl/aux_/range_c/iterator.hpp [7:9]
+ boost/mpl/aux_/range_c/size.hpp [7:9]
+ boost/mpl/aux_/range_c/tag.hpp [7:9]
+ boost/mpl/aux_/reverse_fold_impl.hpp [7:9]
+ boost/mpl/aux_/reverse_fold_impl_body.hpp [8:10]
+ boost/mpl/aux_/reverse_iter_fold_impl.hpp [7:9]
+ boost/mpl/aux_/sequence_wrapper.hpp [10:12]
+ boost/mpl/aux_/shift_op.hpp [6:8]
+ boost/mpl/aux_/single_element_iter.hpp [7:9]
+ boost/mpl/aux_/size_impl.hpp [7:9]
+ boost/mpl/aux_/sort_impl.hpp [7:9]
+ boost/mpl/aux_/static_cast.hpp [7:9]
+ boost/mpl/aux_/template_arity.hpp [11:13]
+ boost/mpl/aux_/template_arity_fwd.hpp [7:9]
+ boost/mpl/aux_/test.hpp [7:9]
+ boost/mpl/aux_/test/assert.hpp [7:9]
+ boost/mpl/aux_/test/data.hpp [7:9]
+ boost/mpl/aux_/test/test_case.hpp [7:9]
+ boost/mpl/aux_/traits_lambda_spec.hpp [7:9]
+ boost/mpl/aux_/transform_iter.hpp [7:9]
+ boost/mpl/aux_/type_wrapper.hpp [8:10]
+ boost/mpl/aux_/unwrap.hpp [8:10]
+ boost/mpl/aux_/value_wknd.hpp [7:9]
+ boost/mpl/aux_/yes_no.hpp [7:9]
+ boost/mpl/back.hpp [7:9]
+ boost/mpl/back_fwd.hpp [7:9]
+ boost/mpl/back_inserter.hpp [8:10]
+ boost/mpl/base.hpp [7:9]
+ boost/mpl/begin.hpp [7:9]
+ boost/mpl/begin_end.hpp [7:9]
+ boost/mpl/begin_end_fwd.hpp [7:9]
+ boost/mpl/bind.hpp [12:14]
+ boost/mpl/bind_fwd.hpp [11:13]
+ boost/mpl/bitand.hpp [8:10]
+ boost/mpl/bitor.hpp [8:10]
+ boost/mpl/bitwise.hpp [8:10]
+ boost/mpl/bitxor.hpp [8:10]
+ boost/mpl/bool.hpp [7:9]
+ boost/mpl/bool_fwd.hpp [7:9]
+ boost/mpl/char.hpp [7:9]
+ boost/mpl/char_fwd.hpp [7:9]
+ boost/mpl/clear.hpp [7:9]
+ boost/mpl/clear_fwd.hpp [7:9]
+ boost/mpl/comparison.hpp [7:9]
+ boost/mpl/contains.hpp [8:10]
+ boost/mpl/contains_fwd.hpp [8:10]
+ boost/mpl/copy.hpp [8:10]
+ boost/mpl/copy_if.hpp [8:10]
+ boost/mpl/count.hpp [7:9]
+ boost/mpl/count_fwd.hpp [7:9]
+ boost/mpl/count_if.hpp [7:9]
+ boost/mpl/deque.hpp [7:9]
+ boost/mpl/deref.hpp [7:9]
+ boost/mpl/distance.hpp [7:9]
+ boost/mpl/distance_fwd.hpp [7:9]
+ boost/mpl/divides.hpp [7:9]
+ boost/mpl/empty.hpp [7:9]
+ boost/mpl/empty_base.hpp [7:9]
+ boost/mpl/empty_fwd.hpp [7:9]
+ boost/mpl/empty_sequence.hpp [8:10]
+ boost/mpl/end.hpp [7:9]
+ boost/mpl/equal.hpp [7:9]
+ boost/mpl/equal_to.hpp [7:9]
+ boost/mpl/erase.hpp [7:9]
+ boost/mpl/erase_fwd.hpp [7:9]
+ boost/mpl/erase_key.hpp [7:9]
+ boost/mpl/erase_key_fwd.hpp [7:9]
+ boost/mpl/filter_view.hpp [7:9]
+ boost/mpl/find.hpp [7:9]
+ boost/mpl/find_if.hpp [7:9]
+ boost/mpl/fold.hpp [8:10]
+ boost/mpl/for_each.hpp [7:9]
+ boost/mpl/front.hpp [7:9]
+ boost/mpl/front_fwd.hpp [7:9]
+ boost/mpl/front_inserter.hpp [8:10]
+ boost/mpl/greater.hpp [7:9]
+ boost/mpl/greater_equal.hpp [7:9]
+ boost/mpl/has_key.hpp [8:10]
+ boost/mpl/has_key_fwd.hpp [8:10]
+ boost/mpl/has_xxx.hpp [9:11]
+ boost/mpl/identity.hpp [7:9]
+ boost/mpl/if.hpp [7:9]
+ boost/mpl/index_if.hpp [7:9]
+ boost/mpl/index_of.hpp [8:10]
+ boost/mpl/inherit.hpp [11:13]
+ boost/mpl/inherit_linearly.hpp [7:9]
+ boost/mpl/insert.hpp [7:9]
+ boost/mpl/insert_fwd.hpp [7:9]
+ boost/mpl/insert_range.hpp [7:9]
+ boost/mpl/insert_range_fwd.hpp [7:9]
+ boost/mpl/inserter.hpp [8:10]
+ boost/mpl/int.hpp [7:9]
+ boost/mpl/int_fwd.hpp [7:9]
+ boost/mpl/integral_c.hpp [7:9]
+ boost/mpl/integral_c_fwd.hpp [7:9]
+ boost/mpl/integral_c_tag.hpp [7:9]
+ boost/mpl/is_placeholder.hpp [7:9]
+ boost/mpl/is_sequence.hpp [7:9]
+ boost/mpl/iter_fold.hpp [8:10]
+ boost/mpl/iter_fold_if.hpp [8:10]
+ boost/mpl/iterator_category.hpp [7:9]
+ boost/mpl/iterator_range.hpp [7:9]
+ boost/mpl/iterator_tags.hpp [7:9]
+ boost/mpl/joint_view.hpp [7:9]
+ boost/mpl/key_type.hpp [8:10]
+ boost/mpl/key_type_fwd.hpp [8:10]
+ boost/mpl/lambda.hpp [7:9]
+ boost/mpl/lambda_fwd.hpp [7:9]
+ boost/mpl/less.hpp [7:9]
+ boost/mpl/less_equal.hpp [7:9]
+ boost/mpl/limits/arity.hpp [7:9]
+ boost/mpl/limits/list.hpp [7:9]
+ boost/mpl/limits/map.hpp [7:9]
+ boost/mpl/limits/set.hpp [7:9]
+ boost/mpl/limits/string.hpp [7:9]
+ boost/mpl/limits/unrolling.hpp [7:9]
+ boost/mpl/limits/vector.hpp [7:9]
+ boost/mpl/list.hpp [7:9]
+ boost/mpl/list/aux_/O1_size.hpp [7:9]
+ boost/mpl/list/aux_/begin_end.hpp [7:9]
+ boost/mpl/list/aux_/clear.hpp [7:9]
+ boost/mpl/list/aux_/empty.hpp [7:9]
+ boost/mpl/list/aux_/front.hpp [7:9]
+ boost/mpl/list/aux_/include_preprocessed.hpp [4:6]
+ boost/mpl/list/aux_/item.hpp [7:9]
+ boost/mpl/list/aux_/iterator.hpp [7:9]
+ boost/mpl/list/aux_/numbered.hpp [7:9]
+ boost/mpl/list/aux_/numbered_c.hpp [6:8]
+ boost/mpl/list/aux_/pop_front.hpp [7:9]
+ boost/mpl/list/aux_/preprocessed/plain/list10.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list20.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list30.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list40.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list50.hpp [4:6]
+ boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp [4:6]
+ boost/mpl/list/aux_/push_back.hpp [7:9]
+ boost/mpl/list/aux_/push_front.hpp [7:9]
+ boost/mpl/list/aux_/size.hpp [7:9]
+ boost/mpl/list/aux_/tag.hpp [7:9]
+ boost/mpl/list/list0.hpp [7:9]
+ boost/mpl/list/list0_c.hpp [7:9]
+ boost/mpl/list/list10.hpp [7:9]
+ boost/mpl/list/list10_c.hpp [7:9]
+ boost/mpl/list/list20.hpp [7:9]
+ boost/mpl/list/list20_c.hpp [7:9]
+ boost/mpl/list/list30.hpp [7:9]
+ boost/mpl/list/list30_c.hpp [7:9]
+ boost/mpl/list/list40.hpp [7:9]
+ boost/mpl/list/list40_c.hpp [7:9]
+ boost/mpl/list/list50.hpp [7:9]
+ boost/mpl/list/list50_c.hpp [7:9]
+ boost/mpl/list_c.hpp [7:9]
+ boost/mpl/logical.hpp [7:9]
+ boost/mpl/long.hpp [7:9]
+ boost/mpl/long_fwd.hpp [7:9]
+ boost/mpl/lower_bound.hpp [7:9]
+ boost/mpl/map.hpp [7:9]
+ boost/mpl/map/aux_/at_impl.hpp [8:10]
+ boost/mpl/map/aux_/begin_end_impl.hpp [8:10]
+ boost/mpl/map/aux_/clear_impl.hpp [8:10]
+ boost/mpl/map/aux_/contains_impl.hpp [7:9]
+ boost/mpl/map/aux_/empty_impl.hpp [7:9]
+ boost/mpl/map/aux_/erase_impl.hpp [8:10]
+ boost/mpl/map/aux_/erase_key_impl.hpp [8:10]
+ boost/mpl/map/aux_/has_key_impl.hpp [8:10]
+ boost/mpl/map/aux_/include_preprocessed.hpp [4:6]
+ boost/mpl/map/aux_/insert_impl.hpp [8:10]
+ boost/mpl/map/aux_/insert_range_impl.hpp [7:9]
+ boost/mpl/map/aux_/item.hpp [8:10]
+ boost/mpl/map/aux_/iterator.hpp [8:10]
+ boost/mpl/map/aux_/key_type_impl.hpp [8:10]
+ boost/mpl/map/aux_/map0.hpp [8:10]
+ boost/mpl/map/aux_/numbered.hpp [8:10]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/plain/map10.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/plain/map20.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/plain/map30.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/plain/map40.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/plain/map50.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp [5:7]
+ boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp [5:7]
+ boost/mpl/map/aux_/size_impl.hpp [7:9]
+ boost/mpl/map/aux_/tag.hpp [8:10]
+ boost/mpl/map/aux_/value_type_impl.hpp [8:10]
+ boost/mpl/map/map0.hpp [8:10]
+ boost/mpl/map/map10.hpp [8:10]
+ boost/mpl/map/map20.hpp [8:10]
+ boost/mpl/map/map30.hpp [8:10]
+ boost/mpl/map/map40.hpp [8:10]
+ boost/mpl/map/map50.hpp [8:10]
+ boost/mpl/math/fixed_c.hpp [7:9]
+ boost/mpl/math/is_even.hpp [7:9]
+ boost/mpl/math/rational_c.hpp [7:9]
+ boost/mpl/max.hpp [7:9]
+ boost/mpl/max_element.hpp [7:9]
+ boost/mpl/min.hpp [7:9]
+ boost/mpl/min_element.hpp [7:9]
+ boost/mpl/min_max.hpp [7:9]
+ boost/mpl/minus.hpp [7:9]
+ boost/mpl/modulus.hpp [7:9]
+ boost/mpl/multiplies.hpp [7:9]
+ boost/mpl/multiset/aux_/count_impl.hpp [7:9]
+ boost/mpl/multiset/aux_/insert_impl.hpp [7:9]
+ boost/mpl/multiset/aux_/item.hpp [7:9]
+ boost/mpl/multiset/aux_/multiset0.hpp [7:9]
+ boost/mpl/multiset/aux_/tag.hpp [7:9]
+ boost/mpl/multiset/multiset0.hpp [7:9]
+ boost/mpl/negate.hpp [7:9]
+ boost/mpl/next.hpp [7:9]
+ boost/mpl/next_prior.hpp [7:9]
+ boost/mpl/not.hpp [7:9]
+ boost/mpl/not_equal_to.hpp [7:9]
+ boost/mpl/or.hpp [7:9]
+ boost/mpl/order.hpp [8:10]
+ boost/mpl/order_fwd.hpp [8:10]
+ boost/mpl/pair.hpp [7:9]
+ boost/mpl/pair_view.hpp [8:10]
+ boost/mpl/partition.hpp [8:10]
+ boost/mpl/placeholders.hpp [12:14]
+ boost/mpl/plus.hpp [7:9]
+ boost/mpl/pop_back.hpp [7:9]
+ boost/mpl/pop_back_fwd.hpp [7:9]
+ boost/mpl/pop_front.hpp [7:9]
+ boost/mpl/pop_front_fwd.hpp [7:9]
+ boost/mpl/print.hpp [8:10]
+ boost/mpl/prior.hpp [7:9]
+ boost/mpl/protect.hpp [8:10]
+ boost/mpl/push_back.hpp [7:9]
+ boost/mpl/push_back_fwd.hpp [7:9]
+ boost/mpl/push_front.hpp [7:9]
+ boost/mpl/push_front_fwd.hpp [7:9]
+ boost/mpl/quote.hpp [11:13]
+ boost/mpl/range_c.hpp [7:9]
+ boost/mpl/remove.hpp [8:10]
+ boost/mpl/remove_if.hpp [8:10]
+ boost/mpl/replace.hpp [9:11]
+ boost/mpl/replace_if.hpp [9:11]
+ boost/mpl/reverse.hpp [7:9]
+ boost/mpl/reverse_fold.hpp [8:10]
+ boost/mpl/reverse_iter_fold.hpp [8:10]
+ boost/mpl/same_as.hpp [7:9]
+ boost/mpl/sequence_tag.hpp [7:9]
+ boost/mpl/sequence_tag_fwd.hpp [7:9]
+ boost/mpl/set.hpp [7:9]
+ boost/mpl/set/aux_/at_impl.hpp [7:9]
+ boost/mpl/set/aux_/begin_end_impl.hpp [8:10]
+ boost/mpl/set/aux_/clear_impl.hpp [8:10]
+ boost/mpl/set/aux_/empty_impl.hpp [7:9]
+ boost/mpl/set/aux_/erase_impl.hpp [8:10]
+ boost/mpl/set/aux_/erase_key_impl.hpp [8:10]
+ boost/mpl/set/aux_/has_key_impl.hpp [8:10]
+ boost/mpl/set/aux_/include_preprocessed.hpp [6:8]
+ boost/mpl/set/aux_/insert_impl.hpp [8:10]
+ boost/mpl/set/aux_/insert_range_impl.hpp [7:9]
+ boost/mpl/set/aux_/item.hpp [8:10]
+ boost/mpl/set/aux_/iterator.hpp [8:10]
+ boost/mpl/set/aux_/key_type_impl.hpp [8:10]
+ boost/mpl/set/aux_/numbered.hpp [8:10]
+ boost/mpl/set/aux_/numbered_c.hpp [8:10]
+ boost/mpl/set/aux_/preprocessed/plain/set10.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set20.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set30.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set40.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set50.hpp [5:7]
+ boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp [5:7]
+ boost/mpl/set/aux_/set0.hpp [8:10]
+ boost/mpl/set/aux_/size_impl.hpp [7:9]
+ boost/mpl/set/aux_/tag.hpp [8:10]
+ boost/mpl/set/aux_/value_type_impl.hpp [8:10]
+ boost/mpl/set/set0.hpp [8:10]
+ boost/mpl/set/set0_c.hpp [8:10]
+ boost/mpl/set/set10.hpp [8:10]
+ boost/mpl/set/set10_c.hpp [8:10]
+ boost/mpl/set/set20.hpp [8:10]
+ boost/mpl/set/set20_c.hpp [8:10]
+ boost/mpl/set/set30.hpp [8:10]
+ boost/mpl/set/set30_c.hpp [8:10]
+ boost/mpl/set/set40.hpp [8:10]
+ boost/mpl/set/set40_c.hpp [8:10]
+ boost/mpl/set/set50.hpp [8:10]
+ boost/mpl/set/set50_c.hpp [8:10]
+ boost/mpl/set_c.hpp [7:9]
+ boost/mpl/shift_left.hpp [8:10]
+ boost/mpl/shift_right.hpp [8:10]
+ boost/mpl/single_view.hpp [7:9]
+ boost/mpl/size.hpp [7:9]
+ boost/mpl/size_fwd.hpp [7:9]
+ boost/mpl/size_t.hpp [7:9]
+ boost/mpl/size_t_fwd.hpp [7:9]
+ boost/mpl/sizeof.hpp [7:9]
+ boost/mpl/sort.hpp [8:10]
+ boost/mpl/stable_partition.hpp [8:10]
+ boost/mpl/switch.hpp [7:9]
+ boost/mpl/tag.hpp [7:9]
+ boost/mpl/times.hpp [7:9]
+ boost/mpl/transform.hpp [8:10]
+ boost/mpl/transform_view.hpp [7:9]
+ boost/mpl/unique.hpp [8:10]
+ boost/mpl/unpack_args.hpp [11:13]
+ boost/mpl/upper_bound.hpp [7:9]
+ boost/mpl/value_type.hpp [8:10]
+ boost/mpl/value_type_fwd.hpp [8:10]
+ boost/mpl/vector.hpp [7:9]
+ boost/mpl/vector/aux_/O1_size.hpp [7:9]
+ boost/mpl/vector/aux_/at.hpp [7:9]
+ boost/mpl/vector/aux_/back.hpp [7:9]
+ boost/mpl/vector/aux_/begin_end.hpp [7:9]
+ boost/mpl/vector/aux_/clear.hpp [7:9]
+ boost/mpl/vector/aux_/empty.hpp [7:9]
+ boost/mpl/vector/aux_/front.hpp [7:9]
+ boost/mpl/vector/aux_/include_preprocessed.hpp [6:8]
+ boost/mpl/vector/aux_/item.hpp [7:9]
+ boost/mpl/vector/aux_/iterator.hpp [7:9]
+ boost/mpl/vector/aux_/numbered.hpp [8:10]
+ boost/mpl/vector/aux_/numbered_c.hpp [8:10]
+ boost/mpl/vector/aux_/pop_back.hpp [7:9]
+ boost/mpl/vector/aux_/pop_front.hpp [7:9]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp [4:6]
+ boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp [4:6]
+ boost/mpl/vector/aux_/push_back.hpp [7:9]
+ boost/mpl/vector/aux_/push_front.hpp [7:9]
+ boost/mpl/vector/aux_/size.hpp [7:9]
+ boost/mpl/vector/aux_/tag.hpp [7:9]
+ boost/mpl/vector/aux_/vector0.hpp [7:9]
+ boost/mpl/vector/vector0.hpp [7:9]
+ boost/mpl/vector/vector0_c.hpp [7:9]
+ boost/mpl/vector/vector10.hpp [7:9]
+ boost/mpl/vector/vector10_c.hpp [7:9]
+ boost/mpl/vector/vector20.hpp [7:9]
+ boost/mpl/vector/vector20_c.hpp [7:9]
+ boost/mpl/vector/vector30.hpp [7:9]
+ boost/mpl/vector/vector30_c.hpp [7:9]
+ boost/mpl/vector/vector40.hpp [7:9]
+ boost/mpl/vector/vector40_c.hpp [7:9]
+ boost/mpl/vector/vector50.hpp [7:9]
+ boost/mpl/vector/vector50_c.hpp [7:9]
+ boost/mpl/vector_c.hpp [7:9]
+ boost/mpl/void.hpp [7:9]
+ boost/mpl/void_fwd.hpp [7:9]
+ boost/property_tree/detail/exception_implementation.hpp [5:7]
+ boost/property_tree/detail/file_parser_error.hpp [4:6]
+ boost/property_tree/detail/info_parser_error.hpp [4:6]
+ boost/property_tree/detail/info_parser_read.hpp [4:6]
+ boost/property_tree/detail/info_parser_utils.hpp [4:6]
+ boost/property_tree/detail/info_parser_write.hpp [4:6]
+ boost/property_tree/detail/info_parser_writer_settings.hpp [5:7]
+ boost/property_tree/detail/ptree_utils.hpp [4:6]
+ boost/property_tree/detail/rapidxml.hpp [4:6]
+ boost/property_tree/detail/xml_parser_error.hpp [4:6]
+ boost/property_tree/detail/xml_parser_flags.hpp [4:6]
+ boost/property_tree/detail/xml_parser_read_rapidxml.hpp [4:6]
+ boost/property_tree/detail/xml_parser_utils.hpp [4:6]
+ boost/property_tree/detail/xml_parser_write.hpp [5:7]
+ boost/property_tree/detail/xml_parser_writer_settings.hpp [5:7]
+ boost/property_tree/exceptions.hpp [5:7]
+ boost/property_tree/id_translator.hpp [4:6]
+ boost/property_tree/info_parser.hpp [4:6]
+ boost/property_tree/ini_parser.hpp [5:7]
+ boost/property_tree/json_parser.hpp [5:7]
+ boost/property_tree/json_parser/detail/read.hpp [4:6]
+ boost/property_tree/json_parser/detail/write.hpp [4:6]
+ boost/property_tree/json_parser/error.hpp [4:6]
+ boost/property_tree/ptree.hpp [5:7]
+ boost/property_tree/ptree_fwd.hpp [5:7]
+ boost/property_tree/ptree_serialization.hpp [4:6]
+ boost/property_tree/stream_translator.hpp [4:6]
+ boost/property_tree/string_path.hpp [4:6]
+ boost/property_tree/xml_parser.hpp [5:7]
+ boost/range/atl.hpp [10:12]
+ boost/range/detail/microsoft.hpp [7:9]
+ boost/range/mfc.hpp [10:12]
+ boost/type_traits/detail/bool_trait_def.hpp [6:8]
+ boost/type_traits/detail/bool_trait_undef.hpp [6:8]
+ boost/type_traits/detail/template_arity_spec.hpp [5:7]
+
+KEEP BSL-1.0 be6811730f85c4929521c5b10c472668
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/archive/basic_streambuf_locale_saver.hpp at line 23
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/archive/basic_streambuf_locale_saver.hpp [21:23]
+
+KEEP BSL-1.0 bf0fd55850dbf83aac86f825081dbe20
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/graph/buffer_concepts.hpp at line 3, boost/graph/stoer_wagner_min_cut.hpp at line 3
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or the copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.43
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/graph/buffer_concepts.hpp [2:4]
+ boost/graph/stoer_wagner_min_cut.hpp [2:4]
+
+KEEP BSL-1.0 bf51e8acf94582b5acb97f1eefc18468
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/predef/library/c/cloudabi.h at line 5
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/predef/library/c/cloudabi.h [4:6]
+
+KEEP BSL-1.0 bfa2e9f25dcd3278b51a40bdb6b5edc5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/core/no_exceptions_support.hpp at line 11
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+ // or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/core/no_exceptions_support.hpp [10:12]
+
+KEEP BSL-1.0 bfce030a4887d21b304b87b154737065
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/sync/spin/wait.hpp at line 6
+ License text:
+ // (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/sync/spin/wait.hpp [4:6]
+
+KEEP BSL-1.0 c01de0902348b7c9494d50eaacc721eb
+BELONGS libs/atomic/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/atomic/atomic.hpp at line 3, boost/atomic/atomic_flag.hpp at line 3, boost/atomic/capabilities.hpp at line 3, boost/atomic/detail/addressof.hpp at line 3, boost/atomic/detail/atomic_flag.hpp at line 3, boost/atomic/detail/atomic_template.hpp at line 3, boost/atomic/detail/bitwise_cast.hpp at line 3, boost/atomic/detail/bitwise_fp_cast.hpp at line 3, boost/atomic/detail/caps_gcc_alpha.hpp at line 3, boost/atomic/detail/caps_gcc_arm.hpp at line 3, boost/atomic/detail/caps_gcc_atomic.hpp at line 3, boost/atomic/detail/caps_gcc_ppc.hpp at line 3, boost/atomic/detail/caps_gcc_sparc.hpp at line 3, boost/atomic/detail/caps_gcc_sync.hpp at line 3, boost/atomic/detail/caps_gcc_x86.hpp at line 3, boost/atomic/detail/caps_linux_arm.hpp at line 3, boost/atomic/detail/caps_msvc_arm.hpp at line 3, boost/atomic/detail/caps_msvc_x86.hpp at line 3, boost/atomic/detail/caps_windows.hpp at line 3, boost/atomic/detail/config.hpp at line 3, boost/atomic/detail/extra_fp_operations.hpp at line 3, boost/atomic/detail/extra_fp_operations_fwd.hpp at line 3, boost/atomic/detail/extra_fp_ops_emulated.hpp at line 3, boost/atomic/detail/extra_fp_ops_generic.hpp at line 3, boost/atomic/detail/extra_operations.hpp at line 3, boost/atomic/detail/extra_operations_fwd.hpp at line 3, boost/atomic/detail/extra_ops_emulated.hpp at line 3, boost/atomic/detail/extra_ops_gcc_arm.hpp at line 3, boost/atomic/detail/extra_ops_gcc_ppc.hpp at line 3, boost/atomic/detail/extra_ops_gcc_x86.hpp at line 3, boost/atomic/detail/extra_ops_generic.hpp at line 3, boost/atomic/detail/extra_ops_msvc_arm.hpp at line 3, boost/atomic/detail/extra_ops_msvc_x86.hpp at line 3, boost/atomic/detail/float_sizes.hpp at line 3, boost/atomic/detail/fp_operations.hpp at line 3, boost/atomic/detail/fp_operations_fwd.hpp at line 3, boost/atomic/detail/fp_ops_emulated.hpp at line 3, boost/atomic/detail/fp_ops_generic.hpp at line 3, boost/atomic/detail/hwcaps_gcc_arm.hpp at line 3, boost/atomic/detail/hwcaps_gcc_ppc.hpp at line 3, boost/atomic/detail/hwcaps_gcc_x86.hpp at line 3, boost/atomic/detail/int_sizes.hpp at line 3, boost/atomic/detail/integral_extend.hpp at line 3, boost/atomic/detail/link.hpp at line 3, boost/atomic/detail/lockpool.hpp at line 3, boost/atomic/detail/operations.hpp at line 3, boost/atomic/detail/operations_fwd.hpp at line 3, boost/atomic/detail/operations_lockfree.hpp at line 3, boost/atomic/detail/ops_cas_based.hpp at line 3, boost/atomic/detail/ops_emulated.hpp at line 3, boost/atomic/detail/ops_extending_cas_based.hpp at line 3, boost/atomic/detail/ops_gcc_alpha.hpp at line 3, boost/atomic/detail/ops_gcc_arm.hpp at line 3, boost/atomic/detail/ops_gcc_arm_common.hpp at line 3, boost/atomic/detail/ops_gcc_atomic.hpp at line 3, boost/atomic/detail/ops_gcc_ppc.hpp at line 3, boost/atomic/detail/ops_gcc_ppc_common.hpp at line 3, boost/atomic/detail/ops_gcc_sparc.hpp at line 3, boost/atomic/detail/ops_gcc_sync.hpp at line 3, boost/atomic/detail/ops_gcc_x86.hpp at line 3, boost/atomic/detail/ops_gcc_x86_dcas-linux.hpp at line 3, boost/atomic/detail/ops_gcc_x86_dcas-osx.hpp at line 3, boost/atomic/detail/ops_gcc_x86_dcas.hpp at line 3, boost/atomic/detail/ops_linux_arm.hpp at line 3, boost/atomic/detail/ops_msvc_arm.hpp at line 3, boost/atomic/detail/ops_msvc_common.hpp at line 3, boost/atomic/detail/ops_msvc_x86.hpp at line 3, boost/atomic/detail/ops_windows.hpp at line 3, boost/atomic/detail/platform.hpp at line 3, boost/atomic/detail/storage_type.hpp at line 3, boost/atomic/detail/string_ops.hpp at line 3, boost/atomic/detail/type_traits/conditional.hpp at line 3, boost/atomic/detail/type_traits/integral_constant.hpp at line 3, boost/atomic/detail/type_traits/is_floating_point.hpp at line 3, boost/atomic/detail/type_traits/is_function.hpp at line 3, boost/atomic/detail/type_traits/is_iec559.hpp at line 3, boost/atomic/detail/type_traits/is_integral.hpp at line 3, boost/atomic/detail/type_traits/is_signed.hpp at line 3, boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp at line 3, boost/atomic/detail/type_traits/make_signed.hpp at line 3, boost/atomic/detail/type_traits/make_unsigned.hpp at line 3, boost/atomic/fences.hpp at line 3, boost/detail/allocator_utilities.hpp at line 3, boost/flyweight.hpp at line 3, boost/flyweight/assoc_container_factory.hpp at line 3, boost/flyweight/assoc_container_factory_fwd.hpp at line 3, boost/flyweight/detail/archive_constructed.hpp at line 3, boost/flyweight/detail/default_value_policy.hpp at line 3, boost/flyweight/detail/dyn_perfect_fwd.hpp at line 3, boost/flyweight/detail/flyweight_core.hpp at line 3, boost/flyweight/detail/is_placeholder_expr.hpp at line 3, boost/flyweight/detail/nested_xxx_if_not_ph.hpp at line 3, boost/flyweight/detail/not_placeholder_expr.hpp at line 3, boost/flyweight/detail/perfect_fwd.hpp at line 3, boost/flyweight/detail/pp_perfect_fwd.hpp at line 3, boost/flyweight/detail/recursive_lw_mutex.hpp at line 3, boost/flyweight/detail/serialization_helper.hpp at line 3, boost/flyweight/detail/value_tag.hpp at line 3, boost/flyweight/factory_tag.hpp at line 3, boost/flyweight/flyweight.hpp at line 5, boost/flyweight/flyweight_fwd.hpp at line 3, boost/flyweight/hashed_factory.hpp at line 3, boost/flyweight/hashed_factory_fwd.hpp at line 3, boost/flyweight/holder_tag.hpp at line 3, boost/flyweight/intermodule_holder.hpp at line 3, boost/flyweight/intermodule_holder_fwd.hpp at line 3, boost/flyweight/key_value.hpp at line 3, boost/flyweight/key_value_fwd.hpp at line 3, boost/flyweight/locking_tag.hpp at line 3, boost/flyweight/no_locking.hpp at line 3, boost/flyweight/no_locking_fwd.hpp at line 3, boost/flyweight/no_tracking.hpp at line 3, boost/flyweight/no_tracking_fwd.hpp at line 3, boost/flyweight/refcounted.hpp at line 3, boost/flyweight/refcounted_fwd.hpp at line 3, boost/flyweight/serialize.hpp at line 3, boost/flyweight/set_factory.hpp at line 3, boost/flyweight/set_factory_fwd.hpp at line 3, boost/flyweight/simple_locking.hpp at line 3, boost/flyweight/simple_locking_fwd.hpp at line 3, boost/flyweight/static_holder.hpp at line 3, boost/flyweight/static_holder_fwd.hpp at line 3, boost/flyweight/tag.hpp at line 3, boost/flyweight/tracking_tag.hpp at line 3, boost/multi_index/composite_key.hpp at line 3, boost/multi_index/detail/access_specifier.hpp at line 3, boost/multi_index/detail/adl_swap.hpp at line 3, boost/multi_index/detail/archive_constructed.hpp at line 3, boost/multi_index/detail/auto_space.hpp at line 3, boost/multi_index/detail/base_type.hpp at line 3, boost/multi_index/detail/bidir_node_iterator.hpp at line 3, boost/multi_index/detail/bucket_array.hpp at line 3, boost/multi_index/detail/cons_stdtuple.hpp at line 3, boost/multi_index/detail/converter.hpp at line 3, boost/multi_index/detail/copy_map.hpp at line 3, boost/multi_index/detail/do_not_copy_elements_tag.hpp at line 3, boost/multi_index/detail/duplicates_iterator.hpp at line 3, boost/multi_index/detail/has_tag.hpp at line 3, boost/multi_index/detail/hash_index_args.hpp at line 3, boost/multi_index/detail/hash_index_iterator.hpp at line 3, boost/multi_index/detail/hash_index_node.hpp at line 3, boost/multi_index/detail/header_holder.hpp at line 3, boost/multi_index/detail/ignore_wstrict_aliasing.hpp at line 3, boost/multi_index/detail/index_base.hpp at line 3, boost/multi_index/detail/index_loader.hpp at line 3, boost/multi_index/detail/index_matcher.hpp at line 3, boost/multi_index/detail/index_node_base.hpp at line 3, boost/multi_index/detail/index_saver.hpp at line 3, boost/multi_index/detail/invariant_assert.hpp at line 3, boost/multi_index/detail/is_index_list.hpp at line 3, boost/multi_index/detail/is_transparent.hpp at line 3, boost/multi_index/detail/iter_adaptor.hpp at line 3, boost/multi_index/detail/modify_key_adaptor.hpp at line 3, boost/multi_index/detail/no_duplicate_tags.hpp at line 3, boost/multi_index/detail/node_type.hpp at line 3, boost/multi_index/detail/ord_index_args.hpp at line 3, boost/multi_index/detail/ord_index_impl.hpp at line 3, boost/multi_index/detail/ord_index_impl_fwd.hpp at line 3, boost/multi_index/detail/ord_index_node.hpp at line 3, boost/multi_index/detail/ord_index_ops.hpp at line 3, boost/multi_index/detail/promotes_arg.hpp at line 3, boost/multi_index/detail/raw_ptr.hpp at line 3, boost/multi_index/detail/restore_wstrict_aliasing.hpp at line 3, boost/multi_index/detail/rnd_index_loader.hpp at line 3, boost/multi_index/detail/rnd_index_node.hpp at line 3, boost/multi_index/detail/rnd_index_ops.hpp at line 3, boost/multi_index/detail/rnd_index_ptr_array.hpp at line 3, boost/multi_index/detail/rnd_node_iterator.hpp at line 3, boost/multi_index/detail/rnk_index_ops.hpp at line 3, boost/multi_index/detail/safe_mode.hpp at line 3, boost/multi_index/detail/scope_guard.hpp at line 3, boost/multi_index/detail/seq_index_node.hpp at line 3, boost/multi_index/detail/seq_index_ops.hpp at line 3, boost/multi_index/detail/serialization_version.hpp at line 3, boost/multi_index/detail/uintptr_type.hpp at line 3, boost/multi_index/detail/unbounded.hpp at line 3, boost/multi_index/detail/value_compare.hpp at line 3, boost/multi_index/detail/vartempl_support.hpp at line 3, boost/multi_index/global_fun.hpp at line 3, boost/multi_index/hashed_index.hpp at line 3, boost/multi_index/hashed_index_fwd.hpp at line 3, boost/multi_index/identity.hpp at line 3, boost/multi_index/identity_fwd.hpp at line 3, boost/multi_index/indexed_by.hpp at line 3, boost/multi_index/key_extractors.hpp at line 3, boost/multi_index/mem_fun.hpp at line 3, boost/multi_index/member.hpp at line 3, boost/multi_index/ordered_index.hpp at line 3, boost/multi_index/ordered_index_fwd.hpp at line 3, boost/multi_index/random_access_index.hpp at line 3, boost/multi_index/random_access_index_fwd.hpp at line 3, boost/multi_index/ranked_index.hpp at line 3, boost/multi_index/ranked_index_fwd.hpp at line 3, boost/multi_index/safe_mode_errors.hpp at line 3, boost/multi_index/sequenced_index.hpp at line 3, boost/multi_index/sequenced_index_fwd.hpp at line 3, boost/multi_index/tag.hpp at line 3, boost/multi_index_container.hpp at line 5, boost/multi_index_container_fwd.hpp at line 3, boost/poly_collection/algorithm.hpp at line 3, boost/poly_collection/any_collection.hpp at line 3, boost/poly_collection/any_collection_fwd.hpp at line 3, boost/poly_collection/base_collection.hpp at line 3, boost/poly_collection/base_collection_fwd.hpp at line 3, boost/poly_collection/detail/any_iterator.hpp at line 3, boost/poly_collection/detail/any_model.hpp at line 3, boost/poly_collection/detail/auto_iterator.hpp at line 3, boost/poly_collection/detail/base_model.hpp at line 3, boost/poly_collection/detail/callable_wrapper.hpp at line 3, boost/poly_collection/detail/callable_wrapper_iterator.hpp at line 3, boost/poly_collection/detail/function_model.hpp at line 3, boost/poly_collection/detail/functional.hpp at line 3, boost/poly_collection/detail/integer_sequence.hpp at line 3, boost/poly_collection/detail/is_acceptable.hpp at line 3, boost/poly_collection/detail/is_constructible.hpp at line 3, boost/poly_collection/detail/is_equality_comparable.hpp at line 3, boost/poly_collection/detail/is_final.hpp at line 3, boost/poly_collection/detail/is_invocable.hpp at line 3, boost/poly_collection/detail/is_nothrow_eq_comparable.hpp at line 3, boost/poly_collection/detail/iterator_impl.hpp at line 3, boost/poly_collection/detail/iterator_traits.hpp at line 3, boost/poly_collection/detail/newdelete_allocator.hpp at line 3, boost/poly_collection/detail/packed_segment.hpp at line 3, boost/poly_collection/detail/poly_collection.hpp at line 3, boost/poly_collection/detail/segment.hpp at line 3, boost/poly_collection/detail/segment_backend.hpp at line 3, boost/poly_collection/detail/segment_split.hpp at line 3, boost/poly_collection/detail/split_segment.hpp at line 3, boost/poly_collection/detail/stride_iterator.hpp at line 3, boost/poly_collection/detail/type_info_map.hpp at line 3, boost/poly_collection/detail/type_restitution.hpp at line 3, boost/poly_collection/detail/value_holder.hpp at line 3, boost/poly_collection/exception.hpp at line 3, boost/poly_collection/function_collection.hpp at line 3, boost/poly_collection/function_collection_fwd.hpp at line 3, boost/regex/v4/basic_regex.hpp at line 7, boost/type_traits/detail/is_likely_lambda.hpp at line 3, libs/atomic/src/lockpool.cpp at line 3
+ License text:
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/atomic/atomic.hpp [2:4]
+ boost/atomic/atomic_flag.hpp [2:4]
+ boost/atomic/capabilities.hpp [2:4]
+ boost/atomic/detail/addressof.hpp [2:4]
+ boost/atomic/detail/atomic_flag.hpp [2:4]
+ boost/atomic/detail/atomic_template.hpp [2:4]
+ boost/atomic/detail/bitwise_cast.hpp [2:4]
+ boost/atomic/detail/bitwise_fp_cast.hpp [2:4]
+ boost/atomic/detail/caps_gcc_alpha.hpp [2:4]
+ boost/atomic/detail/caps_gcc_arm.hpp [2:4]
+ boost/atomic/detail/caps_gcc_atomic.hpp [2:4]
+ boost/atomic/detail/caps_gcc_ppc.hpp [2:4]
+ boost/atomic/detail/caps_gcc_sparc.hpp [2:4]
+ boost/atomic/detail/caps_gcc_sync.hpp [2:4]
+ boost/atomic/detail/caps_gcc_x86.hpp [2:4]
+ boost/atomic/detail/caps_linux_arm.hpp [2:4]
+ boost/atomic/detail/caps_msvc_arm.hpp [2:4]
+ boost/atomic/detail/caps_msvc_x86.hpp [2:4]
+ boost/atomic/detail/caps_windows.hpp [2:4]
+ boost/atomic/detail/config.hpp [2:4]
+ boost/atomic/detail/extra_fp_operations.hpp [2:4]
+ boost/atomic/detail/extra_fp_operations_fwd.hpp [2:4]
+ boost/atomic/detail/extra_fp_ops_emulated.hpp [2:4]
+ boost/atomic/detail/extra_fp_ops_generic.hpp [2:4]
+ boost/atomic/detail/extra_operations.hpp [2:4]
+ boost/atomic/detail/extra_operations_fwd.hpp [2:4]
+ boost/atomic/detail/extra_ops_emulated.hpp [2:4]
+ boost/atomic/detail/extra_ops_gcc_arm.hpp [2:4]
+ boost/atomic/detail/extra_ops_gcc_ppc.hpp [2:4]
+ boost/atomic/detail/extra_ops_gcc_x86.hpp [2:4]
+ boost/atomic/detail/extra_ops_generic.hpp [2:4]
+ boost/atomic/detail/extra_ops_msvc_arm.hpp [2:4]
+ boost/atomic/detail/extra_ops_msvc_x86.hpp [2:4]
+ boost/atomic/detail/float_sizes.hpp [2:4]
+ boost/atomic/detail/fp_operations.hpp [2:4]
+ boost/atomic/detail/fp_operations_fwd.hpp [2:4]
+ boost/atomic/detail/fp_ops_emulated.hpp [2:4]
+ boost/atomic/detail/fp_ops_generic.hpp [2:4]
+ boost/atomic/detail/hwcaps_gcc_arm.hpp [2:4]
+ boost/atomic/detail/hwcaps_gcc_ppc.hpp [2:4]
+ boost/atomic/detail/hwcaps_gcc_x86.hpp [2:4]
+ boost/atomic/detail/int_sizes.hpp [2:4]
+ boost/atomic/detail/integral_extend.hpp [2:4]
+ boost/atomic/detail/link.hpp [2:4]
+ boost/atomic/detail/lockpool.hpp [2:4]
+ boost/atomic/detail/operations.hpp [2:4]
+ boost/atomic/detail/operations_fwd.hpp [2:4]
+ boost/atomic/detail/operations_lockfree.hpp [2:4]
+ boost/atomic/detail/ops_cas_based.hpp [2:4]
+ boost/atomic/detail/ops_emulated.hpp [2:4]
+ boost/atomic/detail/ops_extending_cas_based.hpp [2:4]
+ boost/atomic/detail/ops_gcc_alpha.hpp [2:4]
+ boost/atomic/detail/ops_gcc_arm.hpp [2:4]
+ boost/atomic/detail/ops_gcc_arm_common.hpp [2:4]
+ boost/atomic/detail/ops_gcc_atomic.hpp [2:4]
+ boost/atomic/detail/ops_gcc_ppc.hpp [2:4]
+ boost/atomic/detail/ops_gcc_ppc_common.hpp [2:4]
+ boost/atomic/detail/ops_gcc_sparc.hpp [2:4]
+ boost/atomic/detail/ops_gcc_sync.hpp [2:4]
+ boost/atomic/detail/ops_gcc_x86.hpp [2:4]
+ boost/atomic/detail/ops_gcc_x86_dcas-linux.hpp [2:4]
+ boost/atomic/detail/ops_gcc_x86_dcas-osx.hpp [2:4]
+ boost/atomic/detail/ops_gcc_x86_dcas.hpp [2:4]
+ boost/atomic/detail/ops_linux_arm.hpp [2:4]
+ boost/atomic/detail/ops_msvc_arm.hpp [2:4]
+ boost/atomic/detail/ops_msvc_common.hpp [2:4]
+ boost/atomic/detail/ops_msvc_x86.hpp [2:4]
+ boost/atomic/detail/ops_windows.hpp [2:4]
+ boost/atomic/detail/platform.hpp [2:4]
+ boost/atomic/detail/storage_type.hpp [2:4]
+ boost/atomic/detail/string_ops.hpp [2:4]
+ boost/atomic/detail/type_traits/conditional.hpp [2:4]
+ boost/atomic/detail/type_traits/integral_constant.hpp [2:4]
+ boost/atomic/detail/type_traits/is_floating_point.hpp [2:4]
+ boost/atomic/detail/type_traits/is_function.hpp [2:4]
+ boost/atomic/detail/type_traits/is_iec559.hpp [2:4]
+ boost/atomic/detail/type_traits/is_integral.hpp [2:4]
+ boost/atomic/detail/type_traits/is_signed.hpp [2:4]
+ boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp [2:4]
+ boost/atomic/detail/type_traits/make_signed.hpp [2:4]
+ boost/atomic/detail/type_traits/make_unsigned.hpp [2:4]
+ boost/atomic/fences.hpp [2:4]
+ boost/detail/allocator_utilities.hpp [2:4]
+ boost/flyweight.hpp [2:4]
+ boost/flyweight/assoc_container_factory.hpp [2:4]
+ boost/flyweight/assoc_container_factory_fwd.hpp [2:4]
+ boost/flyweight/detail/archive_constructed.hpp [2:4]
+ boost/flyweight/detail/default_value_policy.hpp [2:4]
+ boost/flyweight/detail/dyn_perfect_fwd.hpp [2:4]
+ boost/flyweight/detail/flyweight_core.hpp [2:4]
+ boost/flyweight/detail/is_placeholder_expr.hpp [2:4]
+ boost/flyweight/detail/nested_xxx_if_not_ph.hpp [2:4]
+ boost/flyweight/detail/not_placeholder_expr.hpp [2:4]
+ boost/flyweight/detail/perfect_fwd.hpp [2:4]
+ boost/flyweight/detail/pp_perfect_fwd.hpp [2:4]
+ boost/flyweight/detail/recursive_lw_mutex.hpp [2:4]
+ boost/flyweight/detail/serialization_helper.hpp [2:4]
+ boost/flyweight/detail/value_tag.hpp [2:4]
+ boost/flyweight/factory_tag.hpp [2:4]
+ boost/flyweight/flyweight.hpp [4:6]
+ boost/flyweight/flyweight_fwd.hpp [2:4]
+ boost/flyweight/hashed_factory.hpp [2:4]
+ boost/flyweight/hashed_factory_fwd.hpp [2:4]
+ boost/flyweight/holder_tag.hpp [2:4]
+ boost/flyweight/intermodule_holder.hpp [2:4]
+ boost/flyweight/intermodule_holder_fwd.hpp [2:4]
+ boost/flyweight/key_value.hpp [2:4]
+ boost/flyweight/key_value_fwd.hpp [2:4]
+ boost/flyweight/locking_tag.hpp [2:4]
+ boost/flyweight/no_locking.hpp [2:4]
+ boost/flyweight/no_locking_fwd.hpp [2:4]
+ boost/flyweight/no_tracking.hpp [2:4]
+ boost/flyweight/no_tracking_fwd.hpp [2:4]
+ boost/flyweight/refcounted.hpp [2:4]
+ boost/flyweight/refcounted_fwd.hpp [2:4]
+ boost/flyweight/serialize.hpp [2:4]
+ boost/flyweight/set_factory.hpp [2:4]
+ boost/flyweight/set_factory_fwd.hpp [2:4]
+ boost/flyweight/simple_locking.hpp [2:4]
+ boost/flyweight/simple_locking_fwd.hpp [2:4]
+ boost/flyweight/static_holder.hpp [2:4]
+ boost/flyweight/static_holder_fwd.hpp [2:4]
+ boost/flyweight/tag.hpp [2:4]
+ boost/flyweight/tracking_tag.hpp [2:4]
+ boost/multi_index/composite_key.hpp [2:4]
+ boost/multi_index/detail/access_specifier.hpp [2:4]
+ boost/multi_index/detail/adl_swap.hpp [2:4]
+ boost/multi_index/detail/archive_constructed.hpp [2:4]
+ boost/multi_index/detail/auto_space.hpp [2:4]
+ boost/multi_index/detail/base_type.hpp [2:4]
+ boost/multi_index/detail/bidir_node_iterator.hpp [2:4]
+ boost/multi_index/detail/bucket_array.hpp [2:4]
+ boost/multi_index/detail/cons_stdtuple.hpp [2:4]
+ boost/multi_index/detail/converter.hpp [2:4]
+ boost/multi_index/detail/copy_map.hpp [2:4]
+ boost/multi_index/detail/do_not_copy_elements_tag.hpp [2:4]
+ boost/multi_index/detail/duplicates_iterator.hpp [2:4]
+ boost/multi_index/detail/has_tag.hpp [2:4]
+ boost/multi_index/detail/hash_index_args.hpp [2:4]
+ boost/multi_index/detail/hash_index_iterator.hpp [2:4]
+ boost/multi_index/detail/hash_index_node.hpp [2:4]
+ boost/multi_index/detail/header_holder.hpp [2:4]
+ boost/multi_index/detail/ignore_wstrict_aliasing.hpp [2:4]
+ boost/multi_index/detail/index_base.hpp [2:4]
+ boost/multi_index/detail/index_loader.hpp [2:4]
+ boost/multi_index/detail/index_matcher.hpp [2:4]
+ boost/multi_index/detail/index_node_base.hpp [2:4]
+ boost/multi_index/detail/index_saver.hpp [2:4]
+ boost/multi_index/detail/invariant_assert.hpp [2:4]
+ boost/multi_index/detail/is_index_list.hpp [2:4]
+ boost/multi_index/detail/is_transparent.hpp [2:4]
+ boost/multi_index/detail/iter_adaptor.hpp [2:4]
+ boost/multi_index/detail/modify_key_adaptor.hpp [2:4]
+ boost/multi_index/detail/no_duplicate_tags.hpp [2:4]
+ boost/multi_index/detail/node_type.hpp [2:4]
+ boost/multi_index/detail/ord_index_args.hpp [2:4]
+ boost/multi_index/detail/ord_index_impl.hpp [2:4]
+ boost/multi_index/detail/ord_index_impl_fwd.hpp [2:4]
+ boost/multi_index/detail/ord_index_node.hpp [2:4]
+ boost/multi_index/detail/ord_index_ops.hpp [2:4]
+ boost/multi_index/detail/promotes_arg.hpp [2:4]
+ boost/multi_index/detail/raw_ptr.hpp [2:4]
+ boost/multi_index/detail/restore_wstrict_aliasing.hpp [2:4]
+ boost/multi_index/detail/rnd_index_loader.hpp [2:4]
+ boost/multi_index/detail/rnd_index_node.hpp [2:4]
+ boost/multi_index/detail/rnd_index_ops.hpp [2:4]
+ boost/multi_index/detail/rnd_index_ptr_array.hpp [2:4]
+ boost/multi_index/detail/rnd_node_iterator.hpp [2:4]
+ boost/multi_index/detail/rnk_index_ops.hpp [2:4]
+ boost/multi_index/detail/safe_mode.hpp [2:4]
+ boost/multi_index/detail/scope_guard.hpp [2:4]
+ boost/multi_index/detail/seq_index_node.hpp [2:4]
+ boost/multi_index/detail/seq_index_ops.hpp [2:4]
+ boost/multi_index/detail/serialization_version.hpp [2:4]
+ boost/multi_index/detail/uintptr_type.hpp [2:4]
+ boost/multi_index/detail/unbounded.hpp [2:4]
+ boost/multi_index/detail/value_compare.hpp [2:4]
+ boost/multi_index/detail/vartempl_support.hpp [2:4]
+ boost/multi_index/global_fun.hpp [2:4]
+ boost/multi_index/hashed_index.hpp [2:4]
+ boost/multi_index/hashed_index_fwd.hpp [2:4]
+ boost/multi_index/identity.hpp [2:4]
+ boost/multi_index/identity_fwd.hpp [2:4]
+ boost/multi_index/indexed_by.hpp [2:4]
+ boost/multi_index/key_extractors.hpp [2:4]
+ boost/multi_index/mem_fun.hpp [2:4]
+ boost/multi_index/member.hpp [2:4]
+ boost/multi_index/ordered_index.hpp [2:4]
+ boost/multi_index/ordered_index_fwd.hpp [2:4]
+ boost/multi_index/random_access_index.hpp [2:4]
+ boost/multi_index/random_access_index_fwd.hpp [2:4]
+ boost/multi_index/ranked_index.hpp [2:4]
+ boost/multi_index/ranked_index_fwd.hpp [2:4]
+ boost/multi_index/safe_mode_errors.hpp [2:4]
+ boost/multi_index/sequenced_index.hpp [2:4]
+ boost/multi_index/sequenced_index_fwd.hpp [2:4]
+ boost/multi_index/tag.hpp [2:4]
+ boost/multi_index_container.hpp [4:6]
+ boost/multi_index_container_fwd.hpp [2:4]
+ boost/poly_collection/algorithm.hpp [2:4]
+ boost/poly_collection/any_collection.hpp [2:4]
+ boost/poly_collection/any_collection_fwd.hpp [2:4]
+ boost/poly_collection/base_collection.hpp [2:4]
+ boost/poly_collection/base_collection_fwd.hpp [2:4]
+ boost/poly_collection/detail/any_iterator.hpp [2:4]
+ boost/poly_collection/detail/any_model.hpp [2:4]
+ boost/poly_collection/detail/auto_iterator.hpp [2:4]
+ boost/poly_collection/detail/base_model.hpp [2:4]
+ boost/poly_collection/detail/callable_wrapper.hpp [2:4]
+ boost/poly_collection/detail/callable_wrapper_iterator.hpp [2:4]
+ boost/poly_collection/detail/function_model.hpp [2:4]
+ boost/poly_collection/detail/functional.hpp [2:4]
+ boost/poly_collection/detail/integer_sequence.hpp [2:4]
+ boost/poly_collection/detail/is_acceptable.hpp [2:4]
+ boost/poly_collection/detail/is_constructible.hpp [2:4]
+ boost/poly_collection/detail/is_equality_comparable.hpp [2:4]
+ boost/poly_collection/detail/is_final.hpp [2:4]
+ boost/poly_collection/detail/is_invocable.hpp [2:4]
+ boost/poly_collection/detail/is_nothrow_eq_comparable.hpp [2:4]
+ boost/poly_collection/detail/iterator_impl.hpp [2:4]
+ boost/poly_collection/detail/iterator_traits.hpp [2:4]
+ boost/poly_collection/detail/newdelete_allocator.hpp [2:4]
+ boost/poly_collection/detail/packed_segment.hpp [2:4]
+ boost/poly_collection/detail/poly_collection.hpp [2:4]
+ boost/poly_collection/detail/segment.hpp [2:4]
+ boost/poly_collection/detail/segment_backend.hpp [2:4]
+ boost/poly_collection/detail/segment_split.hpp [2:4]
+ boost/poly_collection/detail/split_segment.hpp [2:4]
+ boost/poly_collection/detail/stride_iterator.hpp [2:4]
+ boost/poly_collection/detail/type_info_map.hpp [2:4]
+ boost/poly_collection/detail/type_restitution.hpp [2:4]
+ boost/poly_collection/detail/value_holder.hpp [2:4]
+ boost/poly_collection/exception.hpp [2:4]
+ boost/poly_collection/function_collection.hpp [2:4]
+ boost/poly_collection/function_collection_fwd.hpp [2:4]
+ boost/regex/v4/basic_regex.hpp [6:8]
+ boost/type_traits/detail/is_likely_lambda.hpp [2:4]
+ libs/atomic/src/lockpool.cpp [2:4]
+
+KEEP BSL-1.0 c1b846d2f0addcc3ea1d7704985c0a13
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/polygon/detail/voronoi_ctypes.hpp at line 5, boost/polygon/detail/voronoi_predicates.hpp at line 5, boost/polygon/detail/voronoi_robust_fpt.hpp at line 5, boost/polygon/detail/voronoi_structures.hpp at line 5, boost/polygon/voronoi.hpp at line 5, boost/polygon/voronoi_builder.hpp at line 5, boost/polygon/voronoi_diagram.hpp at line 5, boost/polygon/voronoi_geometry_type.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/polygon/detail/voronoi_ctypes.hpp [4:8]
+ boost/polygon/detail/voronoi_predicates.hpp [4:8]
+ boost/polygon/detail/voronoi_robust_fpt.hpp [4:8]
+ boost/polygon/detail/voronoi_structures.hpp [4:8]
+ boost/polygon/voronoi.hpp [4:8]
+ boost/polygon/voronoi_builder.hpp [4:8]
+ boost/polygon/voronoi_diagram.hpp [4:8]
+ boost/polygon/voronoi_geometry_type.hpp [4:8]
+
+KEEP BSL-1.0 c2c06b4b0401328c4a7db06845377814
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/process/shell.hpp at line 9
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/process/shell.hpp [8:9]
+
+KEEP BSL-1.0 c34ac6985916f763b687de4468776cc6
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 40.62
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/support/detail/lexer/generate_cpp.hpp [84:87]
+ boost/spirit/home/support/detail/lexer/generate_re2c.hpp [118:121]
+
+KEEP BSL-1.0 c3616e6a4ba8162a065541626a8ff94c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_erasure/any.hpp at line 6, boost/type_erasure/any_cast.hpp at line 6, boost/type_erasure/binding.hpp at line 6, boost/type_erasure/binding_of.hpp at line 6, boost/type_erasure/builtin.hpp at line 6, boost/type_erasure/call.hpp at line 6, boost/type_erasure/callable.hpp at line 6, boost/type_erasure/check_match.hpp at line 6, boost/type_erasure/concept_interface.hpp at line 6, boost/type_erasure/concept_of.hpp at line 6, boost/type_erasure/config.hpp at line 6, boost/type_erasure/constructible.hpp at line 6, boost/type_erasure/deduced.hpp at line 6, boost/type_erasure/derived.hpp at line 6, boost/type_erasure/detail/access.hpp at line 6, boost/type_erasure/detail/adapt_to_vtable.hpp at line 6, boost/type_erasure/detail/any_base.hpp at line 6, boost/type_erasure/detail/auto_link.hpp at line 6, boost/type_erasure/detail/check_call.hpp at line 6, boost/type_erasure/detail/check_map.hpp at line 6, boost/type_erasure/detail/const.hpp at line 6, boost/type_erasure/detail/construct.hpp at line 6, boost/type_erasure/detail/dynamic_vtable.hpp at line 6, boost/type_erasure/detail/extract_concept.hpp at line 6, boost/type_erasure/detail/get_placeholders.hpp at line 6, boost/type_erasure/detail/get_signature.hpp at line 6, boost/type_erasure/detail/instantiate.hpp at line 6, boost/type_erasure/detail/macro.hpp at line 6, boost/type_erasure/detail/member11.hpp at line 6, boost/type_erasure/detail/meta.hpp at line 6, boost/type_erasure/detail/normalize.hpp at line 6, boost/type_erasure/detail/normalize_deduced.hpp at line 6, boost/type_erasure/detail/null.hpp at line 6, boost/type_erasure/detail/rebind_placeholders.hpp at line 6, boost/type_erasure/detail/storage.hpp at line 6, boost/type_erasure/detail/vtable.hpp at line 6, boost/type_erasure/dynamic_any_cast.hpp at line 6, boost/type_erasure/dynamic_binding.hpp at line 6, boost/type_erasure/exception.hpp at line 6, boost/type_erasure/free.hpp at line 6, boost/type_erasure/is_empty.hpp at line 6, boost/type_erasure/is_placeholder.hpp at line 6, boost/type_erasure/is_subconcept.hpp at line 6, boost/type_erasure/iterator.hpp at line 6, boost/type_erasure/member.hpp at line 6, boost/type_erasure/operators.hpp at line 6, boost/type_erasure/param.hpp at line 6, boost/type_erasure/placeholder.hpp at line 6, boost/type_erasure/placeholder_of.hpp at line 6, boost/type_erasure/rebind_any.hpp at line 6, boost/type_erasure/register_binding.hpp at line 6, boost/type_erasure/relaxed.hpp at line 6, boost/type_erasure/require_match.hpp at line 6, boost/type_erasure/same_type.hpp at line 6, boost/type_erasure/static_binding.hpp at line 6, boost/type_erasure/tuple.hpp at line 6, boost/type_erasure/typeid_of.hpp at line 6
+ License text:
+ // Distributed under the Boost Software License Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/type_erasure/any.hpp [5:7]
+ boost/type_erasure/any_cast.hpp [5:7]
+ boost/type_erasure/binding.hpp [5:7]
+ boost/type_erasure/binding_of.hpp [5:7]
+ boost/type_erasure/builtin.hpp [5:7]
+ boost/type_erasure/call.hpp [5:7]
+ boost/type_erasure/callable.hpp [5:7]
+ boost/type_erasure/check_match.hpp [5:7]
+ boost/type_erasure/concept_interface.hpp [5:7]
+ boost/type_erasure/concept_of.hpp [5:7]
+ boost/type_erasure/config.hpp [5:7]
+ boost/type_erasure/constructible.hpp [5:7]
+ boost/type_erasure/deduced.hpp [5:7]
+ boost/type_erasure/derived.hpp [5:7]
+ boost/type_erasure/detail/access.hpp [5:7]
+ boost/type_erasure/detail/adapt_to_vtable.hpp [5:7]
+ boost/type_erasure/detail/any_base.hpp [5:7]
+ boost/type_erasure/detail/auto_link.hpp [5:7]
+ boost/type_erasure/detail/check_call.hpp [5:7]
+ boost/type_erasure/detail/check_map.hpp [5:7]
+ boost/type_erasure/detail/const.hpp [5:7]
+ boost/type_erasure/detail/construct.hpp [5:7]
+ boost/type_erasure/detail/dynamic_vtable.hpp [5:7]
+ boost/type_erasure/detail/extract_concept.hpp [5:7]
+ boost/type_erasure/detail/get_placeholders.hpp [5:7]
+ boost/type_erasure/detail/get_signature.hpp [5:7]
+ boost/type_erasure/detail/instantiate.hpp [5:7]
+ boost/type_erasure/detail/macro.hpp [5:7]
+ boost/type_erasure/detail/member11.hpp [5:7]
+ boost/type_erasure/detail/meta.hpp [5:7]
+ boost/type_erasure/detail/normalize.hpp [5:7]
+ boost/type_erasure/detail/normalize_deduced.hpp [5:7]
+ boost/type_erasure/detail/null.hpp [5:7]
+ boost/type_erasure/detail/rebind_placeholders.hpp [5:7]
+ boost/type_erasure/detail/storage.hpp [5:7]
+ boost/type_erasure/detail/vtable.hpp [5:7]
+ boost/type_erasure/dynamic_any_cast.hpp [5:7]
+ boost/type_erasure/dynamic_binding.hpp [5:7]
+ boost/type_erasure/exception.hpp [5:7]
+ boost/type_erasure/free.hpp [5:7]
+ boost/type_erasure/is_empty.hpp [5:7]
+ boost/type_erasure/is_placeholder.hpp [5:7]
+ boost/type_erasure/is_subconcept.hpp [5:7]
+ boost/type_erasure/iterator.hpp [5:7]
+ boost/type_erasure/member.hpp [5:7]
+ boost/type_erasure/operators.hpp [5:7]
+ boost/type_erasure/param.hpp [5:7]
+ boost/type_erasure/placeholder.hpp [5:7]
+ boost/type_erasure/placeholder_of.hpp [5:7]
+ boost/type_erasure/rebind_any.hpp [5:7]
+ boost/type_erasure/register_binding.hpp [5:7]
+ boost/type_erasure/relaxed.hpp [5:7]
+ boost/type_erasure/require_match.hpp [5:7]
+ boost/type_erasure/same_type.hpp [5:7]
+ boost/type_erasure/static_binding.hpp [5:7]
+ boost/type_erasure/tuple.hpp [5:7]
+ boost/type_erasure/typeid_of.hpp [5:7]
+
+KEEP BSL-1.0 c433ef677447b140a1c2a340c08bac97
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/special_functions/detail/unchecked_bernoulli.hpp at line 9, boost/multiprecision/mpfr.hpp at line 4
+ License text:
+ // Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math/special_functions/detail/unchecked_bernoulli.hpp [7:9]
+ boost/multiprecision/mpfr.hpp [2:4]
+
+KEEP BSL-1.0 c459d5208b405409bcf56c0a521c48c6
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/slice.hpp at line 7
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/python/slice.hpp [5:7]
+
+KEEP BSL-1.0 c46f3c60dd92897a012b3be18f48ec4c
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config.hpp at line 6, boost/config/abi/borland_prefix.hpp at line 4, boost/config/abi/borland_suffix.hpp at line 4, boost/config/abi/msvc_prefix.hpp at line 4, boost/config/abi/msvc_suffix.hpp at line 4, boost/config/compiler/comeau.hpp at line 9, boost/config/compiler/compaq_cxx.hpp at line 4, boost/config/compiler/greenhills.hpp at line 4, boost/config/compiler/kai.hpp at line 6, boost/config/compiler/nvcc.hpp at line 4, boost/config/compiler/sgi_mipspro.hpp at line 4, boost/config/detail/cxx_composite.hpp at line 6, boost/config/detail/posix_features.hpp at line 4, boost/config/detail/select_platform_config.hpp at line 7, boost/config/detail/select_stdlib_config.hpp at line 7, boost/config/platform/aix.hpp at line 4, boost/config/platform/amigaos.hpp at line 4, boost/config/platform/beos.hpp at line 4, boost/config/platform/bsd.hpp at line 6, boost/config/platform/cygwin.hpp at line 4, boost/config/platform/hpux.hpp at line 8, boost/config/platform/irix.hpp at line 5, boost/config/platform/linux.hpp at line 5, boost/config/platform/macos.hpp at line 6, boost/config/platform/qnxnto.hpp at line 4, boost/config/platform/solaris.hpp at line 5, boost/config/platform/symbian.hpp at line 6, boost/config/platform/win32.hpp at line 7, boost/config/requires_threads.hpp at line 4, boost/config/stdlib/libcomo.hpp at line 6, boost/config/stdlib/modena.hpp at line 4, boost/config/stdlib/msl.hpp at line 5, boost/config/stdlib/roguewave.hpp at line 7, boost/config/stdlib/sgi.hpp at line 6, boost/config/stdlib/stlport.hpp at line 6, boost/config/stdlib/vacpp.hpp at line 4, boost/config/user.hpp at line 6, boost/static_assert.hpp at line 4, boost/type_traits/integral_constant.hpp at line 4
+ License text:
+ // Use, modification and distribution are subject to the
+ // Boost Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/config.hpp [4:6]
+ boost/config/abi/borland_prefix.hpp [2:4]
+ boost/config/abi/borland_suffix.hpp [2:4]
+ boost/config/abi/msvc_prefix.hpp [2:4]
+ boost/config/abi/msvc_suffix.hpp [2:4]
+ boost/config/compiler/comeau.hpp [7:9]
+ boost/config/compiler/compaq_cxx.hpp [2:4]
+ boost/config/compiler/greenhills.hpp [2:4]
+ boost/config/compiler/kai.hpp [4:6]
+ boost/config/compiler/nvcc.hpp [2:4]
+ boost/config/compiler/sgi_mipspro.hpp [2:4]
+ boost/config/detail/cxx_composite.hpp [4:6]
+ boost/config/detail/posix_features.hpp [2:4]
+ boost/config/detail/select_platform_config.hpp [5:7]
+ boost/config/detail/select_stdlib_config.hpp [5:7]
+ boost/config/platform/aix.hpp [2:4]
+ boost/config/platform/amigaos.hpp [2:4]
+ boost/config/platform/beos.hpp [2:4]
+ boost/config/platform/bsd.hpp [4:6]
+ boost/config/platform/cygwin.hpp [2:4]
+ boost/config/platform/hpux.hpp [6:8]
+ boost/config/platform/irix.hpp [3:5]
+ boost/config/platform/linux.hpp [3:5]
+ boost/config/platform/macos.hpp [4:6]
+ boost/config/platform/qnxnto.hpp [2:4]
+ boost/config/platform/solaris.hpp [3:5]
+ boost/config/platform/symbian.hpp [4:6]
+ boost/config/platform/win32.hpp [5:7]
+ boost/config/requires_threads.hpp [2:4]
+ boost/config/stdlib/libcomo.hpp [4:6]
+ boost/config/stdlib/modena.hpp [2:4]
+ boost/config/stdlib/msl.hpp [3:5]
+ boost/config/stdlib/roguewave.hpp [5:7]
+ boost/config/stdlib/sgi.hpp [4:6]
+ boost/config/stdlib/stlport.hpp [4:6]
+ boost/config/stdlib/vacpp.hpp [2:4]
+ boost/config/user.hpp [4:6]
+ boost/static_assert.hpp [2:4]
+ boost/type_traits/integral_constant.hpp [2:4]
+
+KEEP BSL-1.0 c59f2f51498a38af0e57d64a7b0fe0e3
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/octonion.hpp at line 5, boost/math/quaternion.hpp at line 5, boost/math/special_functions/acosh.hpp at line 6, boost/math/special_functions/asinh.hpp at line 6, boost/math/special_functions/atanh.hpp at line 6, boost/math/special_functions/sinc.hpp at line 5, boost/math/special_functions/sinhc.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math/octonion.hpp [4:8]
+ boost/math/quaternion.hpp [4:8]
+ boost/math/special_functions/acosh.hpp [5:9]
+ boost/math/special_functions/asinh.hpp [5:9]
+ boost/math/special_functions/atanh.hpp [5:9]
+ boost/math/special_functions/sinc.hpp [4:8]
+ boost/math/special_functions/sinhc.hpp [4:8]
+
+KEEP BSL-1.0 c5cd7ca7ac43f5faf5d32f349420dc46
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/fusion/functional/invocation/invoke.hpp at line 6, boost/fusion/functional/invocation/invoke_function_object.hpp at line 6, boost/fusion/functional/invocation/invoke_procedure.hpp at line 6, boost/fusion/support/deduce_sequence.hpp at line 5
+ License text:
+ Use modification and distribution are subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/fusion/functional/invocation/invoke.hpp [5:7]
+ boost/fusion/functional/invocation/invoke_function_object.hpp [5:7]
+ boost/fusion/functional/invocation/invoke_procedure.hpp [5:7]
+ boost/fusion/support/deduce_sequence.hpp [4:6]
+
+KEEP BSL-1.0 c6aa4544098c85be9acaf93ddfa53cc1
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/context/detail/preprocessed/callable_eval.hpp at line 7, boost/proto/context/detail/preprocessed/default_eval.hpp at line 7, boost/proto/context/detail/preprocessed/null_eval.hpp at line 7, boost/proto/detail/preprocessed/and_n.hpp at line 7, boost/proto/detail/preprocessed/basic_expr.hpp at line 7, boost/proto/detail/preprocessed/deduce_domain_n.hpp at line 7, boost/proto/detail/preprocessed/deep_copy.hpp at line 7, boost/proto/detail/preprocessed/expr_variadic.hpp at line 7, boost/proto/detail/preprocessed/extends_funop.hpp at line 7, boost/proto/detail/preprocessed/extends_funop_const.hpp at line 7, boost/proto/detail/preprocessed/funop.hpp at line 7, boost/proto/detail/preprocessed/generate_by_value.hpp at line 7, boost/proto/detail/preprocessed/lambda_matches.hpp at line 7, boost/proto/detail/preprocessed/make_expr_.hpp at line 7, boost/proto/detail/preprocessed/matches_.hpp at line 7, boost/proto/detail/preprocessed/poly_function_funop.hpp at line 7, boost/proto/detail/preprocessed/traits.hpp at line 7, boost/proto/detail/preprocessed/unpack_expr_.hpp at line 7, boost/proto/transform/detail/preprocessed/call.hpp at line 7, boost/proto/transform/detail/preprocessed/default_function_impl.hpp at line 8, boost/proto/transform/detail/preprocessed/expand_pack.hpp at line 7, boost/proto/transform/detail/preprocessed/fold_impl.hpp at line 7, boost/proto/transform/detail/preprocessed/make.hpp at line 7, boost/proto/transform/detail/preprocessed/make_gcc_workaround.hpp at line 8, boost/proto/transform/detail/preprocessed/pack_impl.hpp at line 7, boost/proto/transform/detail/preprocessed/pass_through_impl.hpp at line 9
+ License text:
+ // Copyright 2008 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/proto/context/detail/preprocessed/callable_eval.hpp [5:7]
+ boost/proto/context/detail/preprocessed/default_eval.hpp [5:7]
+ boost/proto/context/detail/preprocessed/null_eval.hpp [5:7]
+ boost/proto/detail/preprocessed/and_n.hpp [5:7]
+ boost/proto/detail/preprocessed/basic_expr.hpp [5:7]
+ boost/proto/detail/preprocessed/deduce_domain_n.hpp [5:7]
+ boost/proto/detail/preprocessed/deep_copy.hpp [5:7]
+ boost/proto/detail/preprocessed/expr_variadic.hpp [5:7]
+ boost/proto/detail/preprocessed/extends_funop.hpp [5:7]
+ boost/proto/detail/preprocessed/extends_funop_const.hpp [5:7]
+ boost/proto/detail/preprocessed/funop.hpp [5:7]
+ boost/proto/detail/preprocessed/generate_by_value.hpp [5:7]
+ boost/proto/detail/preprocessed/lambda_matches.hpp [5:7]
+ boost/proto/detail/preprocessed/make_expr_.hpp [5:7]
+ boost/proto/detail/preprocessed/matches_.hpp [5:7]
+ boost/proto/detail/preprocessed/poly_function_funop.hpp [5:7]
+ boost/proto/detail/preprocessed/traits.hpp [5:7]
+ boost/proto/detail/preprocessed/unpack_expr_.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/call.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/default_function_impl.hpp [6:8]
+ boost/proto/transform/detail/preprocessed/expand_pack.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/fold_impl.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/make.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/make_gcc_workaround.hpp [6:8]
+ boost/proto/transform/detail/preprocessed/pack_impl.hpp [5:7]
+ boost/proto/transform/detail/preprocessed/pass_through_impl.hpp [7:9]
+
+KEEP BSL-1.0 c845c94a100efcde577d412c3aa41ae0
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/xpressive/detail/core/list.hpp at line 9, boost/xpressive/detail/core/regex_domain.hpp at line 7
+ License text:
+ // Copyright 2009 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/xpressive/detail/core/list.hpp [7:9]
+ boost/xpressive/detail/core/regex_domain.hpp [5:7]
+
+KEEP BSL-1.0 c8669cc72deaaf2d47e765121d8e33a7
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 59.26
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/support/detail/lexer/char_traits.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/consts.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/containers/ptr_list.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/containers/ptr_vector.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/conversion/char_state_machine.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/debug.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/file_input.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/generate_cpp.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/generate_re2c.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/generator.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/input.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/internals.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/parser.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tokeniser/num_token.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_helper.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tokeniser/re_tokeniser_state.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tree/end_node.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tree/iteration_node.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tree/leaf_node.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tree/node.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tree/selection_node.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/parser/tree/sequence_node.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/partition/charset.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/partition/equivset.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/rules.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/runtime_error.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/serialise.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/size_t.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/state_machine.hpp [4:5]
+ boost/spirit/home/support/detail/lexer/string_token.hpp [4:5]
+
+KEEP BSL-1.0 c91ac62eaa0324e39010493f644405e7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/core/addressof.hpp at line 10, boost/predef.h at line 4, boost/predef/architecture.h at line 4, boost/predef/architecture/alpha.h at line 4, boost/predef/architecture/arm.h at line 6, boost/predef/architecture/blackfin.h at line 4, boost/predef/architecture/convex.h at line 4, boost/predef/architecture/ia64.h at line 4, boost/predef/architecture/m68k.h at line 4, boost/predef/architecture/mips.h at line 4, boost/predef/architecture/parisc.h at line 4, boost/predef/architecture/ppc.h at line 4, boost/predef/architecture/pyramid.h at line 4, boost/predef/architecture/rs6k.h at line 4, boost/predef/architecture/sparc.h at line 4, boost/predef/architecture/superh.h at line 4, boost/predef/architecture/sys370.h at line 4, boost/predef/architecture/sys390.h at line 4, boost/predef/architecture/x86.h at line 4, boost/predef/architecture/x86/32.h at line 4, boost/predef/architecture/x86/64.h at line 4, boost/predef/architecture/z.h at line 4, boost/predef/compiler.h at line 4, boost/predef/compiler/borland.h at line 4, boost/predef/compiler/clang.h at line 4, boost/predef/compiler/comeau.h at line 4, boost/predef/compiler/compaq.h at line 4, boost/predef/compiler/diab.h at line 4, boost/predef/compiler/digitalmars.h at line 4, boost/predef/compiler/dignus.h at line 4, boost/predef/compiler/edg.h at line 4, boost/predef/compiler/ekopath.h at line 4, boost/predef/compiler/gcc.h at line 4, boost/predef/compiler/gcc_xml.h at line 4, boost/predef/compiler/greenhills.h at line 4, boost/predef/compiler/hp_acc.h at line 4, boost/predef/compiler/iar.h at line 4, boost/predef/compiler/ibm.h at line 4, boost/predef/compiler/intel.h at line 4, boost/predef/compiler/kai.h at line 4, boost/predef/compiler/llvm.h at line 4, boost/predef/compiler/metaware.h at line 4, boost/predef/compiler/metrowerks.h at line 4, boost/predef/compiler/microtec.h at line 4, boost/predef/compiler/mpw.h at line 4, boost/predef/compiler/palm.h at line 4, boost/predef/compiler/pgi.h at line 4, boost/predef/compiler/sgi_mipspro.h at line 4, boost/predef/compiler/sunpro.h at line 4, boost/predef/compiler/tendra.h at line 4, boost/predef/compiler/visualc.h at line 4, boost/predef/compiler/watcom.h at line 4, boost/predef/detail/_cassert.h at line 4, boost/predef/detail/_exception.h at line 4, boost/predef/detail/comp_detected.h at line 4, boost/predef/detail/endian_compat.h at line 4, boost/predef/detail/os_detected.h at line 4, boost/predef/detail/platform_detected.h at line 4, boost/predef/detail/test.h at line 4, boost/predef/detail/test_def.h at line 4, boost/predef/hardware.h at line 5, boost/predef/hardware/simd.h at line 5, boost/predef/hardware/simd/arm.h at line 5, boost/predef/hardware/simd/arm/versions.h at line 5, boost/predef/hardware/simd/ppc.h at line 5, boost/predef/hardware/simd/ppc/versions.h at line 5, boost/predef/hardware/simd/x86.h at line 5, boost/predef/hardware/simd/x86/versions.h at line 5, boost/predef/hardware/simd/x86_amd.h at line 5, boost/predef/hardware/simd/x86_amd/versions.h at line 5, boost/predef/language.h at line 4, boost/predef/language/objc.h at line 4, boost/predef/language/stdc.h at line 4, boost/predef/language/stdcpp.h at line 4, boost/predef/library.h at line 4, boost/predef/library/c.h at line 4, boost/predef/library/c/_prefix.h at line 4, boost/predef/library/c/gnu.h at line 4, boost/predef/library/c/uc.h at line 4, boost/predef/library/c/vms.h at line 4, boost/predef/library/c/zos.h at line 4, boost/predef/library/std.h at line 4, boost/predef/library/std/_prefix.h at line 4, boost/predef/library/std/cxx.h at line 4, boost/predef/library/std/dinkumware.h at line 4, boost/predef/library/std/libcomo.h at line 4, boost/predef/library/std/modena.h at line 4, boost/predef/library/std/msl.h at line 4, boost/predef/library/std/roguewave.h at line 4, boost/predef/library/std/sgi.h at line 4, boost/predef/library/std/stdcpp3.h at line 4, boost/predef/library/std/stlport.h at line 4, boost/predef/library/std/vacpp.h at line 4, boost/predef/make.h at line 4, boost/predef/os.h at line 5, boost/predef/os/aix.h at line 4, boost/predef/os/amigaos.h at line 4, boost/predef/os/android.h at line 4, boost/predef/os/beos.h at line 4, boost/predef/os/bsd.h at line 4, boost/predef/os/bsd/bsdi.h at line 4, boost/predef/os/bsd/dragonfly.h at line 4, boost/predef/os/bsd/free.h at line 4, boost/predef/os/bsd/net.h at line 4, boost/predef/os/bsd/open.h at line 4, boost/predef/os/cygwin.h at line 4, boost/predef/os/haiku.h at line 5, boost/predef/os/hpux.h at line 4, boost/predef/os/ios.h at line 5, boost/predef/os/irix.h at line 4, boost/predef/os/linux.h at line 4, boost/predef/os/macos.h at line 5, boost/predef/os/os400.h at line 4, boost/predef/os/qnxnto.h at line 4, boost/predef/os/solaris.h at line 4, boost/predef/os/unix.h at line 4, boost/predef/os/vms.h at line 4, boost/predef/os/windows.h at line 4, boost/predef/other.h at line 4, boost/predef/other/endian.h at line 4, boost/predef/other/workaround.h at line 4, boost/predef/platform.h at line 5, boost/predef/platform/ios.h at line 5, boost/predef/platform/mingw.h at line 4, boost/predef/platform/mingw32.h at line 4, boost/predef/platform/mingw64.h at line 4, boost/predef/platform/windows_desktop.h at line 5, boost/predef/platform/windows_phone.h at line 5, boost/predef/platform/windows_runtime.h at line 5, boost/predef/platform/windows_server.h at line 4, boost/predef/platform/windows_store.h at line 5, boost/predef/platform/windows_system.h at line 4, boost/predef/platform/windows_uwp.h at line 4, boost/predef/version.h at line 4, boost/predef/version_number.h at line 4
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/core/addressof.hpp [9:11]
+ boost/predef.h [3:5]
+ boost/predef/architecture.h [3:5]
+ boost/predef/architecture/alpha.h [3:5]
+ boost/predef/architecture/arm.h [5:7]
+ boost/predef/architecture/blackfin.h [3:5]
+ boost/predef/architecture/convex.h [3:5]
+ boost/predef/architecture/ia64.h [3:5]
+ boost/predef/architecture/m68k.h [3:5]
+ boost/predef/architecture/mips.h [3:5]
+ boost/predef/architecture/parisc.h [3:5]
+ boost/predef/architecture/ppc.h [3:5]
+ boost/predef/architecture/pyramid.h [3:5]
+ boost/predef/architecture/rs6k.h [3:5]
+ boost/predef/architecture/sparc.h [3:5]
+ boost/predef/architecture/superh.h [3:5]
+ boost/predef/architecture/sys370.h [3:5]
+ boost/predef/architecture/sys390.h [3:5]
+ boost/predef/architecture/x86.h [3:5]
+ boost/predef/architecture/x86/32.h [3:5]
+ boost/predef/architecture/x86/64.h [3:5]
+ boost/predef/architecture/z.h [3:5]
+ boost/predef/compiler.h [3:5]
+ boost/predef/compiler/borland.h [3:5]
+ boost/predef/compiler/clang.h [3:5]
+ boost/predef/compiler/comeau.h [3:5]
+ boost/predef/compiler/compaq.h [3:5]
+ boost/predef/compiler/diab.h [3:5]
+ boost/predef/compiler/digitalmars.h [3:5]
+ boost/predef/compiler/dignus.h [3:5]
+ boost/predef/compiler/edg.h [3:5]
+ boost/predef/compiler/ekopath.h [3:5]
+ boost/predef/compiler/gcc.h [3:5]
+ boost/predef/compiler/gcc_xml.h [3:5]
+ boost/predef/compiler/greenhills.h [3:5]
+ boost/predef/compiler/hp_acc.h [3:5]
+ boost/predef/compiler/iar.h [3:5]
+ boost/predef/compiler/ibm.h [3:5]
+ boost/predef/compiler/intel.h [3:5]
+ boost/predef/compiler/kai.h [3:5]
+ boost/predef/compiler/llvm.h [3:5]
+ boost/predef/compiler/metaware.h [3:5]
+ boost/predef/compiler/metrowerks.h [3:5]
+ boost/predef/compiler/microtec.h [3:5]
+ boost/predef/compiler/mpw.h [3:5]
+ boost/predef/compiler/palm.h [3:5]
+ boost/predef/compiler/pgi.h [3:5]
+ boost/predef/compiler/sgi_mipspro.h [3:5]
+ boost/predef/compiler/sunpro.h [3:5]
+ boost/predef/compiler/tendra.h [3:5]
+ boost/predef/compiler/visualc.h [3:5]
+ boost/predef/compiler/watcom.h [3:5]
+ boost/predef/detail/_cassert.h [3:5]
+ boost/predef/detail/_exception.h [3:5]
+ boost/predef/detail/comp_detected.h [3:5]
+ boost/predef/detail/endian_compat.h [3:5]
+ boost/predef/detail/os_detected.h [3:5]
+ boost/predef/detail/platform_detected.h [3:5]
+ boost/predef/detail/test.h [3:5]
+ boost/predef/detail/test_def.h [3:5]
+ boost/predef/hardware.h [4:6]
+ boost/predef/hardware/simd.h [4:6]
+ boost/predef/hardware/simd/arm.h [4:6]
+ boost/predef/hardware/simd/arm/versions.h [4:6]
+ boost/predef/hardware/simd/ppc.h [4:6]
+ boost/predef/hardware/simd/ppc/versions.h [4:6]
+ boost/predef/hardware/simd/x86.h [4:6]
+ boost/predef/hardware/simd/x86/versions.h [4:6]
+ boost/predef/hardware/simd/x86_amd.h [4:6]
+ boost/predef/hardware/simd/x86_amd/versions.h [4:6]
+ boost/predef/language.h [3:5]
+ boost/predef/language/objc.h [3:5]
+ boost/predef/language/stdc.h [3:5]
+ boost/predef/language/stdcpp.h [3:5]
+ boost/predef/library.h [3:5]
+ boost/predef/library/c.h [3:5]
+ boost/predef/library/c/_prefix.h [3:5]
+ boost/predef/library/c/gnu.h [3:5]
+ boost/predef/library/c/uc.h [3:5]
+ boost/predef/library/c/vms.h [3:5]
+ boost/predef/library/c/zos.h [3:5]
+ boost/predef/library/std.h [3:5]
+ boost/predef/library/std/_prefix.h [3:5]
+ boost/predef/library/std/cxx.h [3:5]
+ boost/predef/library/std/dinkumware.h [3:5]
+ boost/predef/library/std/libcomo.h [3:5]
+ boost/predef/library/std/modena.h [3:5]
+ boost/predef/library/std/msl.h [3:5]
+ boost/predef/library/std/roguewave.h [3:5]
+ boost/predef/library/std/sgi.h [3:5]
+ boost/predef/library/std/stdcpp3.h [3:5]
+ boost/predef/library/std/stlport.h [3:5]
+ boost/predef/library/std/vacpp.h [3:5]
+ boost/predef/make.h [3:5]
+ boost/predef/os.h [4:6]
+ boost/predef/os/aix.h [3:5]
+ boost/predef/os/amigaos.h [3:5]
+ boost/predef/os/android.h [3:5]
+ boost/predef/os/beos.h [3:5]
+ boost/predef/os/bsd.h [3:5]
+ boost/predef/os/bsd/bsdi.h [3:5]
+ boost/predef/os/bsd/dragonfly.h [3:5]
+ boost/predef/os/bsd/free.h [3:5]
+ boost/predef/os/bsd/net.h [3:5]
+ boost/predef/os/bsd/open.h [3:5]
+ boost/predef/os/cygwin.h [3:5]
+ boost/predef/os/haiku.h [4:6]
+ boost/predef/os/hpux.h [3:5]
+ boost/predef/os/ios.h [4:6]
+ boost/predef/os/irix.h [3:5]
+ boost/predef/os/linux.h [3:5]
+ boost/predef/os/macos.h [4:6]
+ boost/predef/os/os400.h [3:5]
+ boost/predef/os/qnxnto.h [3:5]
+ boost/predef/os/solaris.h [3:5]
+ boost/predef/os/unix.h [3:5]
+ boost/predef/os/vms.h [3:5]
+ boost/predef/os/windows.h [3:5]
+ boost/predef/other.h [3:5]
+ boost/predef/other/endian.h [3:5]
+ boost/predef/other/workaround.h [3:5]
+ boost/predef/platform.h [4:6]
+ boost/predef/platform/ios.h [4:6]
+ boost/predef/platform/mingw.h [3:5]
+ boost/predef/platform/mingw32.h [3:5]
+ boost/predef/platform/mingw64.h [3:5]
+ boost/predef/platform/windows_desktop.h [4:6]
+ boost/predef/platform/windows_phone.h [4:6]
+ boost/predef/platform/windows_runtime.h [4:6]
+ boost/predef/platform/windows_server.h [3:5]
+ boost/predef/platform/windows_store.h [4:6]
+ boost/predef/platform/windows_system.h [3:5]
+ boost/predef/platform/windows_uwp.h [3:5]
+ boost/predef/version.h [3:5]
+ boost/predef/version_number.h [3:5]
+
+KEEP BSL-1.0 ca05dbe6a64cb6bf8779bd19f5bb4d80
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/algorithm/is_palindrome.hpp at line 5
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See
+ accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/algorithm/is_palindrome.hpp [4:6]
+
+KEEP BSL-1.0 ca0ee9f69bfbb2bfa5a3f24854cffdb6
+BELONGS ya.make
+ License text:
+ // Licensed under the Boost Software License version 1.0.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/geometry/algorithms/densify.hpp [7:7]
+ boost/geometry/algorithms/detail/check_iterator_range.hpp [7:7]
+ boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp [7:7]
+ boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp [7:7]
+ boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp [7:7]
+ boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp [9:9]
+ boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp [8:8]
+ boost/geometry/algorithms/detail/distance/box_to_box.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/is_comparable.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/iterator_selector.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/linear_to_linear.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/segment_to_box.hpp [7:7]
+ boost/geometry/algorithms/detail/distance/segment_to_segment.hpp [7:7]
+ boost/geometry/algorithms/detail/is_simple/always_simple.hpp [8:8]
+ boost/geometry/algorithms/detail/is_simple/areal.hpp [8:8]
+ boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp [7:7]
+ boost/geometry/algorithms/detail/is_simple/failure_policy.hpp [7:7]
+ boost/geometry/algorithms/detail/is_simple/implementation.hpp [7:7]
+ boost/geometry/algorithms/detail/is_simple/interface.hpp [8:8]
+ boost/geometry/algorithms/detail/is_simple/linear.hpp [8:8]
+ boost/geometry/algorithms/detail/is_simple/multipoint.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/box.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/complement_graph.hpp [7:7]
+ boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp [7:7]
+ boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp [7:7]
+ boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp [7:7]
+ boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp [7:7]
+ boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/has_spikes.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/implementation.hpp [7:7]
+ boost/geometry/algorithms/detail/is_valid/interface.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp [7:7]
+ boost/geometry/algorithms/detail/is_valid/linear.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/multipolygon.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/pointlike.hpp [8:8]
+ boost/geometry/algorithms/detail/is_valid/polygon.hpp [10:10]
+ boost/geometry/algorithms/detail/is_valid/ring.hpp [10:10]
+ boost/geometry/algorithms/detail/is_valid/segment.hpp [8:8]
+ boost/geometry/algorithms/detail/max_interval_gap.hpp [7:7]
+ boost/geometry/algorithms/detail/normalize.hpp [8:8]
+ boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp [7:7]
+ boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp [10:10]
+ boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp [5:5]
+ boost/geometry/algorithms/detail/overlay/linear_linear.hpp [5:5]
+ boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp [10:10]
+ boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp [8:8]
+ boost/geometry/algorithms/detail/sweep.hpp [7:7]
+ boost/geometry/algorithms/detail/turns/compare_turns.hpp [5:5]
+ boost/geometry/algorithms/detail/turns/debug_turn.hpp [5:5]
+ boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp [5:5]
+ boost/geometry/algorithms/detail/turns/print_turns.hpp [5:5]
+ boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp [5:5]
+ boost/geometry/algorithms/dispatch/is_simple.hpp [7:7]
+ boost/geometry/algorithms/dispatch/is_valid.hpp [7:7]
+ boost/geometry/algorithms/is_empty.hpp [7:7]
+ boost/geometry/algorithms/is_simple.hpp [7:7]
+ boost/geometry/algorithms/is_valid.hpp [7:7]
+ boost/geometry/algorithms/num_segments.hpp [7:7]
+ boost/geometry/algorithms/validity_failure_type.hpp [7:7]
+ boost/geometry/geometries/helper_geometry.hpp [8:8]
+ boost/geometry/geometries/pointing_segment.hpp [7:7]
+ boost/geometry/iterators/concatenate_iterator.hpp [7:7]
+ boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp [7:7]
+ boost/geometry/iterators/detail/point_iterator/iterator_type.hpp [7:7]
+ boost/geometry/iterators/detail/point_iterator/value_type.hpp [7:7]
+ boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp [7:7]
+ boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp [7:7]
+ boost/geometry/iterators/detail/segment_iterator/value_type.hpp [7:7]
+ boost/geometry/iterators/dispatch/point_iterator.hpp [7:7]
+ boost/geometry/iterators/dispatch/segment_iterator.hpp [7:7]
+ boost/geometry/iterators/flatten_iterator.hpp [7:7]
+ boost/geometry/iterators/has_one_element.hpp [7:7]
+ boost/geometry/iterators/point_iterator.hpp [7:7]
+ boost/geometry/iterators/point_reverse_iterator.hpp [7:7]
+ boost/geometry/iterators/segment_iterator.hpp [7:7]
+ boost/geometry/policies/is_valid/default_policy.hpp [7:7]
+ boost/geometry/policies/is_valid/failing_reason_policy.hpp [8:8]
+ boost/geometry/policies/is_valid/failure_type_policy.hpp [7:7]
+ boost/geometry/policies/predicate_based_interrupt_policy.hpp [7:7]
+ boost/geometry/strategies/cartesian/densify.hpp [7:7]
+ boost/geometry/strategies/comparable_distance_result.hpp [7:7]
+ boost/geometry/strategies/densify.hpp [7:7]
+ boost/geometry/strategies/geographic/densify.hpp [7:7]
+ boost/geometry/strategies/spherical/densify.hpp [7:7]
+ boost/geometry/util/normalize_spheroidal_box_coordinates.hpp [8:8]
+ boost/geometry/util/normalize_spheroidal_coordinates.hpp [10:10]
+ boost/geometry/util/promote_integral.hpp [7:7]
+ boost/geometry/views/detail/boundary_view.hpp [7:7]
+ boost/geometry/views/detail/boundary_view/implementation.hpp [7:7]
+ boost/geometry/views/detail/boundary_view/interface.hpp [7:7]
+ boost/geometry/views/detail/two_dimensional_view.hpp [7:7]
+
+KEEP BSL-1.0 ca1c6ea93da75bad84f3dba0d52554dd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signal.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/signal.hpp [3:6]
+
+KEEP BSL-1.0 cbdcef074fb3341d2a9edaadc23a7c2d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/config/detail/select_compiler_config.hpp at line 8
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/config/detail/select_compiler_config.hpp [7:9]
+
+KEEP BSL-1.0 cbe82e847fd3d30a102c9c62ec3d188a
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/tokenizer.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.11
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/tokenizer.hpp [5:11]
+
+KEEP Public-Domain cd42fcbb8d96b51cc3475aed7d09df1c
+BELONGS ya.make
+ License text:
+ // and is in the public domain.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-public-domain
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.linfo.org/publicdomain.html, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/public-domain.LICENSE
+ Files with this license:
+ boost/geometry/srs/projections/proj/isea.hpp [27:27]
+
+KEEP BSL-1.0 cdc5eaf687f57e7bd84ebeb4c1db8f35
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/adjacent_filtered.hpp at line 5, boost/range/adaptor/argument_fwd.hpp at line 5, boost/range/adaptor/filtered.hpp at line 5, boost/range/adaptor/indirected.hpp at line 5, boost/range/adaptor/map.hpp at line 5, boost/range/adaptor/reversed.hpp at line 5, boost/range/adaptor/sliced.hpp at line 5, boost/range/adaptor/transformed.hpp at line 5, boost/range/adaptor/uniqued.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/adaptor/adjacent_filtered.hpp [3:6]
+ boost/range/adaptor/argument_fwd.hpp [3:6]
+ boost/range/adaptor/filtered.hpp [3:6]
+ boost/range/adaptor/indirected.hpp [3:6]
+ boost/range/adaptor/map.hpp [3:6]
+ boost/range/adaptor/reversed.hpp [3:6]
+ boost/range/adaptor/sliced.hpp [3:6]
+ boost/range/adaptor/transformed.hpp [3:6]
+ boost/range/adaptor/uniqued.hpp [3:6]
+
+KEEP BSL-1.0 cff4cece9d95e7e6aa69248f318c9f04
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/integer.hpp [3:5]
+
+KEEP BSL-1.0 d16849ba3420a74948970493c91f9145
+BELONGS ya.make
+ License text:
+ // Use modification and distribution are subject to the boost Software License,
+ // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/typeof/vector50.hpp [5:6]
+
+KEEP BSL-1.0 d22835a98ac2f82e1281deb13b9ab9ba
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/spirit/home/qi/detail/expectation_failure.hpp at line 5, boost/spirit/home/qi/directive/expect.hpp at line 5
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/qi/detail/expectation_failure.hpp [4:5]
+ boost/spirit/home/qi/directive/expect.hpp [4:5]
+
+KEEP BSL-1.0 d256b9bf6722d228c66f5e2ac3e9fa57
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/detail/random_provider_arc4random.ipp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.86
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/uuid/detail/random_provider_arc4random.ipp [4:5]
+
+KEEP BSL-1.0 d2c1802e562226f7f860cad601ecc23e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/core/demangle.hpp at line 10, boost/core/is_same.hpp at line 15, boost/core/lightweight_test_trait.hpp at line 17
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/core/demangle.hpp [9:11]
+ boost/core/is_same.hpp [14:16]
+ boost/core/lightweight_test_trait.hpp [16:18]
+
+KEEP BSL-1.0 d2c8a44919aa32341a7db67f113f3186
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/thread/concurrent_queues/detail/sync_deque_base.hpp at line 8, boost/thread/concurrent_queues/detail/sync_queue_base.hpp at line 8
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/thread/concurrent_queues/detail/sync_deque_base.hpp [6:8]
+ boost/thread/concurrent_queues/detail/sync_queue_base.hpp [6:8]
+
+KEEP BSL-1.0 d2e8e36a364746befb04b885a12a1e24
+BELONGS libs/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/mpl/aux_/begin_end_impl.hpp at line 8, boost/mpl/zip_view.hpp at line 9, libs/test/src/test_framework_init_observer.cpp at line 3
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/mpl/aux_/begin_end_impl.hpp [7:9]
+ boost/mpl/zip_view.hpp [8:10]
+ libs/test/src/test_framework_init_observer.cpp [2:4]
+
+KEEP BSL-1.0 d398f407edc1c91c48f2e7613f7602d5
+BELONGS libs/context/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/context/src/asm/jump_i386_ms_pe_gas.asm at line 5, libs/context/src/asm/jump_x86_64_ms_pe_gas.asm at line 5, libs/context/src/asm/jump_x86_64_sysv_elf_gas.S at line 4, libs/context/src/asm/jump_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/make_i386_ms_pe_gas.asm at line 5, libs/context/src/asm/make_x86_64_ms_pe_gas.asm at line 5, libs/context/src/asm/make_x86_64_sysv_elf_gas.S at line 4, libs/context/src/asm/make_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_i386_ms_pe_gas.asm at line 5, libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm at line 5, libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S at line 4, libs/context/src/asm/ontop_x86_64_sysv_macho_gas.S at line 4
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/context/src/asm/jump_i386_ms_pe_gas.asm [4:6]
+ libs/context/src/asm/jump_x86_64_ms_pe_gas.asm [4:6]
+ libs/context/src/asm/jump_x86_64_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/jump_x86_64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/make_i386_ms_pe_gas.asm [4:6]
+ libs/context/src/asm/make_x86_64_ms_pe_gas.asm [4:6]
+ libs/context/src/asm/make_x86_64_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/make_x86_64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_i386_ms_pe_gas.asm [4:6]
+ libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm [4:6]
+ libs/context/src/asm/ontop_x86_64_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/ontop_x86_64_sysv_macho_gas.S [3:5]
+
+KEEP BSL-1.0 d3e1fafd8c6aeea1c3c9ddcfd13b5fc4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/accumulators/statistics/tail.hpp at line 6, boost/accumulators/statistics/tail_variate.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/accumulators/statistics/tail.hpp [4:6]
+ boost/accumulators/statistics/tail_variate.hpp [4:6]
+
+KEEP BSL-1.0 d4d0d34f805f5eee001a987f1e04a4a4
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/detail/config_external_begin.hpp at line 5, boost/interprocess/detail/config_external_end.hpp at line 5, boost/interprocess/sync/detail/condition_any_algorithm.hpp at line 5, boost/interprocess/sync/detail/locks.hpp at line 5, boost/interprocess/sync/interprocess_condition_any.hpp at line 5, boost/move/detail/config_begin.hpp at line 5, boost/move/detail/config_end.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/detail/config_external_begin.hpp [3:5]
+ boost/interprocess/detail/config_external_end.hpp [3:5]
+ boost/interprocess/sync/detail/condition_any_algorithm.hpp [3:5]
+ boost/interprocess/sync/detail/locks.hpp [3:5]
+ boost/interprocess/sync/interprocess_condition_any.hpp [3:5]
+ boost/move/detail/config_begin.hpp [3:5]
+ boost/move/detail/config_end.hpp [3:5]
+
+KEEP BSL-1.0 d57c02a6cdaa26d1c644f290e8569503
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/serialization/void_cast.hpp at line 14, boost/serialization/void_cast_fwd.hpp at line 14
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.74
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/serialization/void_cast.hpp [13:18]
+ boost/serialization/void_cast_fwd.hpp [13:18]
+
+KEEP BSL-1.0 d5856aeb5be655b8e7149bd70f048333
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/endian/std_pair.hpp [5:5]
+
+KEEP BSL-1.0 d5ae6e3c2dad0c6e4008b1526b2291dd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/arg_list.hpp at line 3, boost/parameter/aux_/default.hpp at line 3, boost/parameter/aux_/parameter_requirements.hpp at line 3, boost/parameter/aux_/tagged_argument.hpp at line 3, boost/parameter/aux_/unwrap_cv_reference.hpp at line 3, boost/parameter/aux_/void.hpp at line 3, boost/parameter/aux_/yesno.hpp at line 3, boost/parameter/config.hpp at line 3, boost/parameter/keyword.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/parameter/aux_/arg_list.hpp [1:4]
+ boost/parameter/aux_/default.hpp [1:4]
+ boost/parameter/aux_/parameter_requirements.hpp [1:4]
+ boost/parameter/aux_/tagged_argument.hpp [1:4]
+ boost/parameter/aux_/unwrap_cv_reference.hpp [1:4]
+ boost/parameter/aux_/void.hpp [1:4]
+ boost/parameter/aux_/yesno.hpp [1:4]
+ boost/parameter/config.hpp [1:4]
+ boost/parameter/keyword.hpp [1:4]
+
+KEEP BSL-1.0 d61752484f220755bd1f5e838c59307b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/addressof.hpp at line 5, boost/container/detail/alloc_helpers.hpp at line 5, boost/container/detail/iterator_to_raw_pointer.hpp at line 5, boost/container/detail/next_capacity.hpp at line 5, boost/container/detail/placement_new.hpp at line 7, boost/container/new_allocator.hpp at line 5, boost/interprocess/detail/nothrow.hpp at line 5, boost/interprocess/detail/simple_swap.hpp at line 7, boost/interprocess/detail/std_fwd.hpp at line 5, boost/move/detail/iterator_to_raw_pointer.hpp at line 5, boost/move/detail/placement_new.hpp at line 7
+ License text:
+ // (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/addressof.hpp [3:5]
+ boost/container/detail/alloc_helpers.hpp [3:5]
+ boost/container/detail/iterator_to_raw_pointer.hpp [3:5]
+ boost/container/detail/next_capacity.hpp [3:5]
+ boost/container/detail/placement_new.hpp [5:7]
+ boost/container/new_allocator.hpp [3:5]
+ boost/interprocess/detail/nothrow.hpp [3:5]
+ boost/interprocess/detail/simple_swap.hpp [5:7]
+ boost/interprocess/detail/std_fwd.hpp [3:5]
+ boost/move/detail/iterator_to_raw_pointer.hpp [3:5]
+ boost/move/detail/placement_new.hpp [5:7]
+
+KEEP Zlib d7d091c33e6a568a05ce9a60ee1f64e2
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: Zlib
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.gzip.org/zlib/zlib_license.html, http://www.zlib.net/, https://spdx.org/licenses/Zlib
+ Files with this license:
+ boost/beast/zlib/deflate_stream.hpp [31:48]
+ boost/beast/zlib/detail/bitstream.hpp [13:30]
+ boost/beast/zlib/detail/deflate_stream.hpp [13:30]
+ boost/beast/zlib/detail/inflate_stream.hpp [13:30]
+ boost/beast/zlib/detail/ranges.hpp [13:30]
+ boost/beast/zlib/detail/window.hpp [13:30]
+ boost/beast/zlib/error.hpp [24:41]
+ boost/beast/zlib/impl/error.ipp [13:30]
+ boost/beast/zlib/inflate_stream.hpp [20:37]
+ boost/beast/zlib/zlib.hpp [21:38]
+
+KEEP BSL-1.0 d7f87ea2cced5bb8dd0a81e515f54c30
+BELONGS libs/chrono/ya.make libs/system/ya.make libs/thread/ya.make libs/timer/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/chrono/ceil.hpp at line 7, boost/chrono/config.hpp at line 8, boost/chrono/floor.hpp at line 7, boost/chrono/io/utility/ios_base_state_ptr.hpp at line 6, boost/chrono/io/utility/manip_base.hpp at line 6, boost/chrono/round.hpp at line 7, boost/detail/identifier.hpp at line 6, boost/endian/detail/cover_operators.hpp at line 7, boost/math/complex/acos.hpp at line 3, boost/math/complex/asin.hpp at line 3, boost/spirit/home/karma.hpp at line 4, boost/spirit/home/karma/action/action.hpp at line 4, boost/spirit/home/karma/auto.hpp at line 4, boost/spirit/home/karma/auto/auto.hpp at line 4, boost/spirit/home/karma/auto/create_generator.hpp at line 4, boost/spirit/home/karma/auto/meta_create.hpp at line 4, boost/spirit/home/karma/auxiliary/attr_cast.hpp at line 4, boost/spirit/home/karma/auxiliary/eps.hpp at line 4, boost/spirit/home/karma/binary/binary.hpp at line 4, boost/spirit/home/karma/char/char.hpp at line 5, boost/spirit/home/karma/char/char_class.hpp at line 4, boost/spirit/home/karma/char/char_generator.hpp at line 5, boost/spirit/home/karma/delimit_out.hpp at line 4, boost/spirit/home/karma/detail/alternative_function.hpp at line 5, boost/spirit/home/karma/detail/as.hpp at line 4, boost/spirit/home/karma/detail/attributes.hpp at line 5, boost/spirit/home/karma/detail/default_width.hpp at line 4, boost/spirit/home/karma/detail/enable_lit.hpp at line 4, boost/spirit/home/karma/detail/extract_from.hpp at line 4, boost/spirit/home/karma/detail/indirect_iterator.hpp at line 4, boost/spirit/home/karma/detail/unused_delimiter.hpp at line 4, boost/spirit/home/karma/directive/as.hpp at line 5, boost/spirit/home/karma/directive/buffer.hpp at line 4, boost/spirit/home/karma/directive/center_alignment.hpp at line 4, boost/spirit/home/karma/directive/columns.hpp at line 4, boost/spirit/home/karma/directive/delimit.hpp at line 4, boost/spirit/home/karma/directive/duplicate.hpp at line 4, boost/spirit/home/karma/directive/encoding.hpp at line 5, boost/spirit/home/karma/directive/left_alignment.hpp at line 4, boost/spirit/home/karma/directive/maxwidth.hpp at line 4, boost/spirit/home/karma/directive/omit.hpp at line 4, boost/spirit/home/karma/directive/repeat.hpp at line 5, boost/spirit/home/karma/directive/right_alignment.hpp at line 4, boost/spirit/home/karma/domain.hpp at line 5, boost/spirit/home/karma/format.hpp at line 4, boost/spirit/home/karma/format_auto.hpp at line 4, boost/spirit/home/karma/nonterminal/debug_handler.hpp at line 5, boost/spirit/home/karma/nonterminal/debug_handler_state.hpp at line 4, boost/spirit/home/karma/nonterminal/rule.hpp at line 5, boost/spirit/home/karma/nonterminal/simple_trace.hpp at line 5, boost/spirit/home/karma/numeric/bool.hpp at line 4, boost/spirit/home/karma/numeric/detail/numeric_utils.hpp at line 4, boost/spirit/home/karma/numeric/int.hpp at line 4, boost/spirit/home/karma/numeric/real.hpp at line 4, boost/spirit/home/karma/numeric/uint.hpp at line 4, boost/spirit/home/karma/operator/alternative.hpp at line 5, boost/spirit/home/karma/operator/and_predicate.hpp at line 5, boost/spirit/home/karma/operator/kleene.hpp at line 5, boost/spirit/home/karma/operator/list.hpp at line 5, boost/spirit/home/karma/operator/not_predicate.hpp at line 5, boost/spirit/home/karma/operator/optional.hpp at line 5, boost/spirit/home/karma/operator/plus.hpp at line 5, boost/spirit/home/karma/operator/sequence.hpp at line 5, boost/spirit/home/karma/stream.hpp at line 4, boost/spirit/home/karma/stream/stream.hpp at line 4, boost/spirit/home/karma/string/lit.hpp at line 5, boost/spirit/home/karma/string/symbols.hpp at line 4, boost/spirit/home/lex/lexer/lexertl/generate_static.hpp at line 5, boost/spirit/home/lex/lexer/lexertl/lexer.hpp at line 4, boost/spirit/home/lex/qi/plain_raw_token.hpp at line 4, boost/spirit/home/lex/qi/plain_token.hpp at line 4, boost/spirit/home/lex/qi/plain_tokenid.hpp at line 4, boost/spirit/home/lex/qi/plain_tokenid_mask.hpp at line 4, boost/spirit/home/lex/qi/state_switcher.hpp at line 5, boost/spirit/home/qi/auto/auto.hpp at line 4, boost/spirit/home/qi/auto/create_parser.hpp at line 4, boost/spirit/home/qi/auto/meta_create.hpp at line 4, boost/spirit/home/qi/auxiliary/attr_cast.hpp at line 4, boost/spirit/home/qi/detail/attributes.hpp at line 5, boost/spirit/home/qi/detail/enable_lit.hpp at line 4, boost/spirit/home/qi/detail/unused_skipper.hpp at line 4, boost/spirit/home/qi/match.hpp at line 4, boost/spirit/home/qi/match_auto.hpp at line 4, boost/spirit/home/support/adapt_adt_attributes.hpp at line 4, boost/spirit/home/support/assert_msg.hpp at line 4, boost/spirit/home/support/auto/meta_create.hpp at line 4, boost/spirit/home/support/auxiliary/attr_cast.hpp at line 4, boost/spirit/home/support/detail/endian.hpp at line 5, boost/spirit/home/support/detail/endian/cover_operators.hpp at line 7, boost/spirit/home/support/detail/get_encoding.hpp at line 5, boost/spirit/home/support/detail/scoped_enum_emulation.hpp at line 5, boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/combine_policies.hpp at line 4, boost/spirit/home/support/iterators/detail/first_owner_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp at line 5, boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/functor_input_policy.hpp at line 4, boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/istream_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/lex_input_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/multi_pass.hpp at line 5, boost/spirit/home/support/iterators/detail/no_check_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp at line 5, boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp at line 4, boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp at line 5, boost/spirit/home/support/iterators/istream_iterator.hpp at line 4, boost/spirit/home/support/iterators/look_ahead.hpp at line 6, boost/spirit/home/support/iterators/multi_pass.hpp at line 6, boost/spirit/home/support/iterators/ostream_iterator.hpp at line 4, boost/spirit/home/support/limits.hpp at line 4, boost/spirit/home/support/multi_pass.hpp at line 4, boost/spirit/home/support/numeric_traits.hpp at line 4, boost/spirit/repository/home/karma.hpp at line 5, boost/spirit/repository/home/karma/directive.hpp at line 5, boost/spirit/repository/home/karma/nonterminal.hpp at line 6, boost/spirit/repository/home/karma/nonterminal/subrule.hpp at line 6, boost/spirit/repository/home/qi.hpp at line 5, boost/spirit/repository/home/qi/directive.hpp at line 5, boost/spirit/repository/home/qi/directive/distinct.hpp at line 6, boost/spirit/repository/home/qi/nonterminal.hpp at line 6, boost/spirit/repository/home/qi/operator.hpp at line 6, boost/spirit/repository/home/qi/primitive.hpp at line 5, boost/spirit/repository/home/qi/primitive/advance.hpp at line 4, boost/system/config.hpp at line 6, boost/system/cygwin_error.hpp at line 6, boost/system/detail/error_code.ipp at line 6, boost/system/error_code.hpp at line 8, boost/system/linux_error.hpp at line 6, boost/system/system_error.hpp at line 6, boost/system/windows_error.hpp at line 6, boost/thread/barrier.hpp at line 7, boost/thread/concurrent_queues/sync_priority_queue.hpp at line 5, boost/thread/concurrent_queues/sync_timed_queue.hpp at line 5, boost/thread/csbl/deque.hpp at line 4, boost/thread/csbl/devector.hpp at line 4, boost/thread/csbl/functional.hpp at line 4, boost/thread/csbl/list.hpp at line 4, boost/thread/csbl/memory.hpp at line 4, boost/thread/csbl/memory/allocator_arg.hpp at line 4, boost/thread/csbl/memory/allocator_traits.hpp at line 4, boost/thread/csbl/memory/config.hpp at line 4, boost/thread/csbl/memory/default_delete.hpp at line 4, boost/thread/csbl/memory/pointer_traits.hpp at line 4, boost/thread/csbl/memory/scoped_allocator.hpp at line 4, boost/thread/csbl/memory/shared_ptr.hpp at line 4, boost/thread/csbl/memory/unique_ptr.hpp at line 4, boost/thread/csbl/queue.hpp at line 4, boost/thread/csbl/tuple.hpp at line 4, boost/thread/csbl/vector.hpp at line 4, boost/thread/detail/atomic_redef_macros.hpp at line 4, boost/thread/detail/atomic_undef_macros.hpp at line 4, boost/thread/detail/config.hpp at line 6, boost/thread/detail/delete.hpp at line 4, boost/thread/detail/function_wrapper.hpp at line 4, boost/thread/detail/invoke.hpp at line 4, boost/thread/detail/invoker.hpp at line 4, boost/thread/detail/is_convertible.hpp at line 6, boost/thread/detail/log.hpp at line 4, boost/thread/detail/make_tuple_indices.hpp at line 4, boost/thread/detail/memory.hpp at line 6, boost/thread/detail/nullary_function.hpp at line 4, boost/thread/detail/variadic_footer.hpp at line 4, boost/thread/detail/variadic_header.hpp at line 4, boost/thread/exceptions.hpp at line 7, boost/thread/executor.hpp at line 4, boost/thread/executors/basic_thread_pool.hpp at line 4, boost/thread/executors/detail/priority_executor_base.hpp at line 5, boost/thread/executors/detail/scheduled_executor_base.hpp at line 5, boost/thread/executors/executor.hpp at line 4, boost/thread/executors/executor_adaptor.hpp at line 4, boost/thread/executors/generic_executor_ref.hpp at line 4, boost/thread/executors/inline_executor.hpp at line 4, boost/thread/executors/loop_executor.hpp at line 4, boost/thread/executors/scheduled_thread_pool.hpp at line 5, boost/thread/executors/scheduler.hpp at line 4, boost/thread/executors/scheduling_adaptor.hpp at line 5, boost/thread/executors/serial_executor.hpp at line 4, boost/thread/executors/serial_executor_cont.hpp at line 4, boost/thread/executors/thread_executor.hpp at line 4, boost/thread/lock_concepts.hpp at line 4, boost/thread/lockable_concepts.hpp at line 4, boost/thread/thread_pool.hpp at line 4, boost/thread/user_scheduler.hpp at line 4, boost/thread/xtime.hpp at line 6, libs/chrono/stopwatches/include/boost/chrono/stopwatches/dont_start.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/laps_stopwatch.hpp at line 5, libs/chrono/stopwatches/include/boost/chrono/stopwatches/simple_stopwatch.hpp at line 5, libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch.hpp at line 5, libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch_scoped.hpp at line 4, libs/chrono/stopwatches/include/boost/chrono/stopwatches/strict_stopwatch.hpp at line 5, libs/chrono/stopwatches/include/boost/chrono/stopwatches/suspendable_stopwatch.hpp at line 4, libs/system/src/error_code.cpp at line 6, libs/thread/src/pthread/once.cpp at line 4, libs/thread/src/pthread/once_atomic.cpp at line 5, libs/thread/src/pthread/thread.cpp at line 7, libs/timer/src/cpu_timer.cpp at line 6
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/chrono/ceil.hpp [6:7]
+ boost/chrono/config.hpp [7:8]
+ boost/chrono/floor.hpp [6:7]
+ boost/chrono/io/utility/ios_base_state_ptr.hpp [5:6]
+ boost/chrono/io/utility/manip_base.hpp [5:6]
+ boost/chrono/round.hpp [6:7]
+ boost/detail/identifier.hpp [5:6]
+ boost/endian/detail/cover_operators.hpp [6:7]
+ boost/math/complex/acos.hpp [2:3]
+ boost/math/complex/asin.hpp [2:3]
+ boost/spirit/home/karma.hpp [3:4]
+ boost/spirit/home/karma/action/action.hpp [3:4]
+ boost/spirit/home/karma/auto.hpp [3:4]
+ boost/spirit/home/karma/auto/auto.hpp [3:4]
+ boost/spirit/home/karma/auto/create_generator.hpp [3:4]
+ boost/spirit/home/karma/auto/meta_create.hpp [3:4]
+ boost/spirit/home/karma/auxiliary/attr_cast.hpp [3:4]
+ boost/spirit/home/karma/auxiliary/eps.hpp [3:4]
+ boost/spirit/home/karma/binary/binary.hpp [3:4]
+ boost/spirit/home/karma/char/char.hpp [4:5]
+ boost/spirit/home/karma/char/char_class.hpp [3:4]
+ boost/spirit/home/karma/char/char_generator.hpp [4:5]
+ boost/spirit/home/karma/delimit_out.hpp [3:4]
+ boost/spirit/home/karma/detail/alternative_function.hpp [4:5]
+ boost/spirit/home/karma/detail/as.hpp [3:4]
+ boost/spirit/home/karma/detail/attributes.hpp [4:5]
+ boost/spirit/home/karma/detail/default_width.hpp [3:4]
+ boost/spirit/home/karma/detail/enable_lit.hpp [3:4]
+ boost/spirit/home/karma/detail/extract_from.hpp [3:4]
+ boost/spirit/home/karma/detail/indirect_iterator.hpp [3:4]
+ boost/spirit/home/karma/detail/unused_delimiter.hpp [3:4]
+ boost/spirit/home/karma/directive/as.hpp [4:5]
+ boost/spirit/home/karma/directive/buffer.hpp [3:4]
+ boost/spirit/home/karma/directive/center_alignment.hpp [3:4]
+ boost/spirit/home/karma/directive/columns.hpp [3:4]
+ boost/spirit/home/karma/directive/delimit.hpp [3:4]
+ boost/spirit/home/karma/directive/duplicate.hpp [3:4]
+ boost/spirit/home/karma/directive/encoding.hpp [4:5]
+ boost/spirit/home/karma/directive/left_alignment.hpp [3:4]
+ boost/spirit/home/karma/directive/maxwidth.hpp [3:4]
+ boost/spirit/home/karma/directive/omit.hpp [3:4]
+ boost/spirit/home/karma/directive/repeat.hpp [4:5]
+ boost/spirit/home/karma/directive/right_alignment.hpp [3:4]
+ boost/spirit/home/karma/domain.hpp [4:5]
+ boost/spirit/home/karma/format.hpp [3:4]
+ boost/spirit/home/karma/format_auto.hpp [3:4]
+ boost/spirit/home/karma/nonterminal/debug_handler.hpp [4:5]
+ boost/spirit/home/karma/nonterminal/debug_handler_state.hpp [3:4]
+ boost/spirit/home/karma/nonterminal/rule.hpp [4:5]
+ boost/spirit/home/karma/nonterminal/simple_trace.hpp [4:5]
+ boost/spirit/home/karma/numeric/bool.hpp [3:4]
+ boost/spirit/home/karma/numeric/detail/numeric_utils.hpp [3:4]
+ boost/spirit/home/karma/numeric/int.hpp [3:4]
+ boost/spirit/home/karma/numeric/real.hpp [3:4]
+ boost/spirit/home/karma/numeric/uint.hpp [3:4]
+ boost/spirit/home/karma/operator/alternative.hpp [4:5]
+ boost/spirit/home/karma/operator/and_predicate.hpp [4:5]
+ boost/spirit/home/karma/operator/kleene.hpp [4:5]
+ boost/spirit/home/karma/operator/list.hpp [4:5]
+ boost/spirit/home/karma/operator/not_predicate.hpp [4:5]
+ boost/spirit/home/karma/operator/optional.hpp [4:5]
+ boost/spirit/home/karma/operator/plus.hpp [4:5]
+ boost/spirit/home/karma/operator/sequence.hpp [4:5]
+ boost/spirit/home/karma/stream.hpp [3:4]
+ boost/spirit/home/karma/stream/stream.hpp [3:4]
+ boost/spirit/home/karma/string/lit.hpp [4:5]
+ boost/spirit/home/karma/string/symbols.hpp [3:4]
+ boost/spirit/home/lex/lexer/lexertl/generate_static.hpp [4:5]
+ boost/spirit/home/lex/lexer/lexertl/lexer.hpp [3:4]
+ boost/spirit/home/lex/qi/plain_raw_token.hpp [3:4]
+ boost/spirit/home/lex/qi/plain_token.hpp [3:4]
+ boost/spirit/home/lex/qi/plain_tokenid.hpp [3:4]
+ boost/spirit/home/lex/qi/plain_tokenid_mask.hpp [3:4]
+ boost/spirit/home/lex/qi/state_switcher.hpp [4:5]
+ boost/spirit/home/qi/auto/auto.hpp [3:4]
+ boost/spirit/home/qi/auto/create_parser.hpp [3:4]
+ boost/spirit/home/qi/auto/meta_create.hpp [3:4]
+ boost/spirit/home/qi/auxiliary/attr_cast.hpp [3:4]
+ boost/spirit/home/qi/detail/attributes.hpp [4:5]
+ boost/spirit/home/qi/detail/enable_lit.hpp [3:4]
+ boost/spirit/home/qi/detail/unused_skipper.hpp [3:4]
+ boost/spirit/home/qi/match.hpp [3:4]
+ boost/spirit/home/qi/match_auto.hpp [3:4]
+ boost/spirit/home/support/adapt_adt_attributes.hpp [3:4]
+ boost/spirit/home/support/assert_msg.hpp [3:4]
+ boost/spirit/home/support/auto/meta_create.hpp [3:4]
+ boost/spirit/home/support/auxiliary/attr_cast.hpp [3:4]
+ boost/spirit/home/support/detail/endian.hpp [4:5]
+ boost/spirit/home/support/detail/endian/cover_operators.hpp [6:7]
+ boost/spirit/home/support/detail/get_encoding.hpp [4:5]
+ boost/spirit/home/support/detail/scoped_enum_emulation.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/buf_id_check_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/buffering_input_iterator_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/combine_policies.hpp [3:4]
+ boost/spirit/home/support/iterators/detail/first_owner_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/fixed_size_queue.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/fixed_size_queue_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/functor_input_policy.hpp [3:4]
+ boost/spirit/home/support/iterators/detail/input_iterator_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/istream_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/lex_input_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/multi_pass.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/no_check_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/ref_counted_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/detail/split_functor_input_policy.hpp [3:4]
+ boost/spirit/home/support/iterators/detail/split_std_deque_policy.hpp [4:5]
+ boost/spirit/home/support/iterators/istream_iterator.hpp [3:4]
+ boost/spirit/home/support/iterators/look_ahead.hpp [5:6]
+ boost/spirit/home/support/iterators/multi_pass.hpp [5:6]
+ boost/spirit/home/support/iterators/ostream_iterator.hpp [3:4]
+ boost/spirit/home/support/limits.hpp [3:4]
+ boost/spirit/home/support/multi_pass.hpp [3:4]
+ boost/spirit/home/support/numeric_traits.hpp [3:4]
+ boost/spirit/repository/home/karma.hpp [4:5]
+ boost/spirit/repository/home/karma/directive.hpp [4:5]
+ boost/spirit/repository/home/karma/nonterminal.hpp [5:6]
+ boost/spirit/repository/home/karma/nonterminal/subrule.hpp [5:6]
+ boost/spirit/repository/home/qi.hpp [4:5]
+ boost/spirit/repository/home/qi/directive.hpp [4:5]
+ boost/spirit/repository/home/qi/directive/distinct.hpp [5:6]
+ boost/spirit/repository/home/qi/nonterminal.hpp [5:6]
+ boost/spirit/repository/home/qi/operator.hpp [5:6]
+ boost/spirit/repository/home/qi/primitive.hpp [4:5]
+ boost/spirit/repository/home/qi/primitive/advance.hpp [3:4]
+ boost/system/config.hpp [5:6]
+ boost/system/cygwin_error.hpp [5:6]
+ boost/system/detail/error_code.ipp [5:6]
+ boost/system/error_code.hpp [7:8]
+ boost/system/linux_error.hpp [5:6]
+ boost/system/system_error.hpp [5:6]
+ boost/system/windows_error.hpp [5:6]
+ boost/thread/barrier.hpp [6:7]
+ boost/thread/concurrent_queues/sync_priority_queue.hpp [4:5]
+ boost/thread/concurrent_queues/sync_timed_queue.hpp [4:5]
+ boost/thread/csbl/deque.hpp [3:4]
+ boost/thread/csbl/devector.hpp [3:4]
+ boost/thread/csbl/functional.hpp [3:4]
+ boost/thread/csbl/list.hpp [3:4]
+ boost/thread/csbl/memory.hpp [3:4]
+ boost/thread/csbl/memory/allocator_arg.hpp [3:4]
+ boost/thread/csbl/memory/allocator_traits.hpp [3:4]
+ boost/thread/csbl/memory/config.hpp [3:4]
+ boost/thread/csbl/memory/default_delete.hpp [3:4]
+ boost/thread/csbl/memory/pointer_traits.hpp [3:4]
+ boost/thread/csbl/memory/scoped_allocator.hpp [3:4]
+ boost/thread/csbl/memory/shared_ptr.hpp [3:4]
+ boost/thread/csbl/memory/unique_ptr.hpp [3:4]
+ boost/thread/csbl/queue.hpp [3:4]
+ boost/thread/csbl/tuple.hpp [3:4]
+ boost/thread/csbl/vector.hpp [3:4]
+ boost/thread/detail/atomic_redef_macros.hpp [3:4]
+ boost/thread/detail/atomic_undef_macros.hpp [3:4]
+ boost/thread/detail/config.hpp [5:6]
+ boost/thread/detail/delete.hpp [3:4]
+ boost/thread/detail/function_wrapper.hpp [3:4]
+ boost/thread/detail/invoke.hpp [3:4]
+ boost/thread/detail/invoker.hpp [3:4]
+ boost/thread/detail/is_convertible.hpp [5:6]
+ boost/thread/detail/log.hpp [3:4]
+ boost/thread/detail/make_tuple_indices.hpp [3:4]
+ boost/thread/detail/memory.hpp [5:6]
+ boost/thread/detail/nullary_function.hpp [3:4]
+ boost/thread/detail/variadic_footer.hpp [3:4]
+ boost/thread/detail/variadic_header.hpp [3:4]
+ boost/thread/exceptions.hpp [6:7]
+ boost/thread/executor.hpp [3:4]
+ boost/thread/executors/basic_thread_pool.hpp [3:4]
+ boost/thread/executors/detail/priority_executor_base.hpp [4:5]
+ boost/thread/executors/detail/scheduled_executor_base.hpp [4:5]
+ boost/thread/executors/executor.hpp [3:4]
+ boost/thread/executors/executor_adaptor.hpp [3:4]
+ boost/thread/executors/generic_executor_ref.hpp [3:4]
+ boost/thread/executors/inline_executor.hpp [3:4]
+ boost/thread/executors/loop_executor.hpp [3:4]
+ boost/thread/executors/scheduled_thread_pool.hpp [4:5]
+ boost/thread/executors/scheduler.hpp [3:4]
+ boost/thread/executors/scheduling_adaptor.hpp [4:5]
+ boost/thread/executors/serial_executor.hpp [3:4]
+ boost/thread/executors/serial_executor_cont.hpp [3:4]
+ boost/thread/executors/thread_executor.hpp [3:4]
+ boost/thread/lock_concepts.hpp [3:4]
+ boost/thread/lockable_concepts.hpp [3:4]
+ boost/thread/thread_pool.hpp [3:4]
+ boost/thread/user_scheduler.hpp [3:4]
+ boost/thread/xtime.hpp [5:6]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/dont_start.hpp [3:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/laps_stopwatch.hpp [4:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/simple_stopwatch.hpp [4:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch.hpp [4:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch_scoped.hpp [3:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/strict_stopwatch.hpp [4:5]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/suspendable_stopwatch.hpp [3:4]
+ libs/system/src/error_code.cpp [5:6]
+ libs/thread/src/pthread/once.cpp [3:4]
+ libs/thread/src/pthread/once_atomic.cpp [4:5]
+ libs/thread/src/pthread/thread.cpp [6:7]
+ libs/timer/src/cpu_timer.cpp [5:6]
+
+KEEP BSL-1.0 d805a275e860e62f7f327b1245d5a0cc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/function/function_fwd.hpp at line 6, boost/function/function_typeof.hpp at line 6
+ License text:
+ // Use, modification and distribution is subject to the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/function/function_fwd.hpp [4:6]
+ boost/function/function_typeof.hpp [4:6]
+
+KEEP BSL-1.0 d926734e1804ae63ec294903c1492c12
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/utility/detail/result_of_iterate.hpp at line 5, boost/utility/result_of.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/utility/detail/result_of_iterate.hpp [3:6]
+ boost/utility/result_of.hpp [3:6]
+
+KEEP Zlib d9ef8ba02957d17a494a01d92326a8f3
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: Zlib
+ Score : 99.24
+ Match type : TEXT
+ Links : http://www.gzip.org/zlib/zlib_license.html, http://www.zlib.net/, https://spdx.org/licenses/Zlib
+ Files with this license:
+ boost/archive/impl/basic_xml_grammar.hpp [29:46]
+
+KEEP BSL-1.0 da2a87ccf5ae416e33c8d6bfe78baa14
+BELONGS libs/chrono/ya.make libs/filesystem/ya.make ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // See http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/chrono/chrono.hpp [5:6]
+ boost/chrono/detail/inlined/chrono.hpp [6:7]
+ boost/chrono/detail/inlined/mac/chrono.hpp [6:7]
+ boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp [6:7]
+ boost/chrono/detail/inlined/mac/thread_clock.hpp [7:8]
+ boost/chrono/detail/inlined/posix/chrono.hpp [6:7]
+ boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp [6:7]
+ boost/chrono/detail/inlined/posix/thread_clock.hpp [6:7]
+ boost/chrono/detail/inlined/process_cpu_clocks.hpp [5:6]
+ boost/chrono/detail/inlined/thread_clock.hpp [5:6]
+ boost/chrono/detail/inlined/win/chrono.hpp [6:7]
+ boost/chrono/detail/inlined/win/process_cpu_clocks.hpp [7:8]
+ boost/chrono/detail/inlined/win/thread_clock.hpp [5:6]
+ boost/chrono/detail/is_evenly_divisible_by.hpp [5:6]
+ boost/chrono/detail/no_warning/signed_unsigned_cmp.hpp [5:6]
+ boost/chrono/detail/scan_keyword.hpp [14:15]
+ boost/chrono/detail/static_assert.hpp [5:6]
+ boost/chrono/detail/system.hpp [3:4]
+ boost/chrono/duration.hpp [7:8]
+ boost/chrono/process_cpu_clocks.hpp [6:7]
+ boost/chrono/system_clocks.hpp [7:8]
+ boost/chrono/thread_clock.hpp [5:6]
+ boost/chrono/time_point.hpp [7:8]
+ boost/core/scoped_enum.hpp [7:8]
+ boost/core/underlying_type.hpp [8:9]
+ boost/cxx11_char_types.hpp [5:6]
+ boost/detail/lightweight_main.hpp [5:6]
+ boost/detail/lightweight_test_report.hpp [5:6]
+ boost/dll/detail/demangling/demangle_symbol.hpp [5:6]
+ boost/endian/arithmetic.hpp [6:7]
+ boost/endian/buffers.hpp [6:7]
+ boost/endian/detail/config.hpp [5:6]
+ boost/endian/detail/disable_warnings.hpp [5:6]
+ boost/endian/detail/disable_warnings_pop.hpp [5:6]
+ boost/endian/detail/lightweight_test.hpp [17:18]
+ boost/endian/endian.hpp [5:6]
+ boost/filesystem.hpp [5:6]
+ boost/filesystem/config.hpp [5:6]
+ boost/filesystem/detail/macro_value.hpp [9:10]
+ boost/filesystem/fstream.hpp [5:6]
+ boost/filesystem/operations.hpp [8:9]
+ boost/filesystem/path.hpp [6:7]
+ boost/filesystem/path_traits.hpp [5:6]
+ boost/filesystem/string_file.hpp [5:6]
+ boost/io/detail/quoted_manip.hpp [5:6]
+ boost/ratio.hpp [5:6]
+ boost/ratio/config.hpp [5:6]
+ boost/ratio/detail/overflow_helpers.hpp [7:8]
+ boost/ratio/include.hpp [5:6]
+ boost/ratio/mpl/arithmetic.hpp [5:6]
+ boost/ratio/mpl/comparison.hpp [5:6]
+ boost/ratio/mpl/rational_constant.hpp [3:4]
+ boost/ratio/ratio.hpp [7:8]
+ boost/ratio/ratio_fwd.hpp [7:8]
+ boost/spirit/home/support/detail/endian/endian.hpp [6:7]
+ boost/system/api_config.hpp [5:6]
+ boost/system/detail/local_free_on_destruction.hpp [6:7]
+ boost/timer/config.hpp [5:6]
+ boost/timer/timer.hpp [5:6]
+ boost/type_traits/add_lvalue_reference.hpp [3:4]
+ boost/type_traits/add_rvalue_reference.hpp [5:6]
+ boost/type_traits/declval.hpp [5:6]
+ boost/utility/declval.hpp [5:6]
+ libs/chrono/src/chrono.cpp [6:7]
+ libs/chrono/src/process_cpu_clocks.cpp [5:6]
+ libs/chrono/src/thread_clock.cpp [5:6]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/accumulator_set_formatter.hpp [3:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/base_formatter.hpp [3:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/elapsed_formatter.hpp [3:4]
+ libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp [3:4]
+ libs/filesystem/src/operations.cpp [6:7]
+ libs/filesystem/src/path.cpp [5:6]
+ libs/filesystem/src/path_traits.cpp [5:6]
+ libs/filesystem/src/unique_path.cpp [5:6]
+ libs/filesystem/src/windows_file_codecvt.cpp [5:6]
+ libs/filesystem/src/windows_file_codecvt.hpp [5:6]
+
+KEEP BSL-1.0 db63392c774d3d4c1bd5d57fe2eb26f2
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multi_array.hpp at line 4, boost/multi_array/algorithm.hpp at line 33, boost/multi_array/base.hpp at line 4, boost/multi_array/collection_concept.hpp at line 4, boost/multi_array/concept_checks.hpp at line 4, boost/multi_array/copy_array.hpp at line 4, boost/multi_array/extent_gen.hpp at line 4, boost/multi_array/extent_range.hpp at line 4, boost/multi_array/index_gen.hpp at line 4, boost/multi_array/index_range.hpp at line 4, boost/multi_array/iterator.hpp at line 4, boost/multi_array/multi_array_ref.hpp at line 4, boost/multi_array/range_list.hpp at line 4, boost/multi_array/storage_order.hpp at line 4, boost/multi_array/subarray.hpp at line 4, boost/multi_array/types.hpp at line 4, boost/multi_array/view.hpp at line 4, boost/phoenix/stl/algorithm/detail/decay_array.hpp at line 5, boost/phoenix/stl/algorithm/iteration.hpp at line 6
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multi_array.hpp [3:5]
+ boost/multi_array/algorithm.hpp [32:34]
+ boost/multi_array/base.hpp [3:5]
+ boost/multi_array/collection_concept.hpp [3:5]
+ boost/multi_array/concept_checks.hpp [3:5]
+ boost/multi_array/copy_array.hpp [3:5]
+ boost/multi_array/extent_gen.hpp [3:5]
+ boost/multi_array/extent_range.hpp [3:5]
+ boost/multi_array/index_gen.hpp [3:5]
+ boost/multi_array/index_range.hpp [3:5]
+ boost/multi_array/iterator.hpp [3:5]
+ boost/multi_array/multi_array_ref.hpp [3:5]
+ boost/multi_array/range_list.hpp [3:5]
+ boost/multi_array/storage_order.hpp [3:5]
+ boost/multi_array/subarray.hpp [3:5]
+ boost/multi_array/types.hpp [3:5]
+ boost/multi_array/view.hpp [3:5]
+ boost/phoenix/stl/algorithm/detail/decay_array.hpp [4:6]
+ boost/phoenix/stl/algorithm/iteration.hpp [5:7]
+
+KEEP BSL-1.0 dbb5e9f500df89fb594d4004510207dd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/mp11/mpl.hpp at line 8
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ //
+ // See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/mp11/mpl.hpp [6:9]
+
+KEEP BSL-1.0 dd654fb37bcdf81209c428bf00444ddb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/fusion/adapted/array.hpp at line 7, boost/fusion/adapted/array/at_impl.hpp at line 5, boost/fusion/adapted/array/begin_impl.hpp at line 5, boost/fusion/adapted/array/category_of_impl.hpp at line 5, boost/fusion/adapted/array/end_impl.hpp at line 5, boost/fusion/adapted/array/is_sequence_impl.hpp at line 5, boost/fusion/adapted/array/is_view_impl.hpp at line 5, boost/fusion/adapted/array/tag_of.hpp at line 5, boost/fusion/adapted/array/value_at_impl.hpp at line 5, boost/fusion/adapted/boost_array.hpp at line 6, boost/fusion/adapted/boost_array/array_iterator.hpp at line 6, boost/fusion/adapted/boost_array/detail/at_impl.hpp at line 6, boost/fusion/adapted/boost_array/detail/begin_impl.hpp at line 6, boost/fusion/adapted/boost_array/detail/category_of_impl.hpp at line 6, boost/fusion/adapted/boost_array/detail/end_impl.hpp at line 6, boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp at line 6, boost/fusion/adapted/boost_array/detail/is_view_impl.hpp at line 6, boost/fusion/adapted/boost_array/detail/size_impl.hpp at line 6, boost/fusion/adapted/boost_array/detail/value_at_impl.hpp at line 6, boost/fusion/adapted/boost_array/tag_of.hpp at line 6, boost/fusion/adapted/boost_tuple.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/at_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/category_of_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/end_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/size_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp at line 5, boost/fusion/adapted/boost_tuple/tag_of.hpp at line 5, boost/fusion/adapted/mpl/detail/at_impl.hpp at line 6, boost/fusion/adapted/mpl/detail/begin_impl.hpp at line 6, boost/fusion/adapted/mpl/detail/category_of_impl.hpp at line 6, boost/fusion/adapted/mpl/detail/end_impl.hpp at line 6, boost/fusion/adapted/mpl/detail/has_key_impl.hpp at line 6, boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp at line 6, boost/fusion/adapted/mpl/detail/is_view_impl.hpp at line 6, boost/fusion/adapted/mpl/detail/size_impl.hpp at line 6, boost/fusion/adapted/mpl/detail/value_at_impl.hpp at line 6, boost/fusion/adapted/mpl/mpl_iterator.hpp at line 5, boost/fusion/adapted/std_array.hpp at line 7, boost/fusion/adapted/std_array/detail/array_size.hpp at line 5, boost/fusion/adapted/std_array/detail/at_impl.hpp at line 6, boost/fusion/adapted/std_array/detail/begin_impl.hpp at line 7, boost/fusion/adapted/std_array/detail/category_of_impl.hpp at line 6, boost/fusion/adapted/std_array/detail/end_impl.hpp at line 7, boost/fusion/adapted/std_array/detail/is_sequence_impl.hpp at line 7, boost/fusion/adapted/std_array/detail/is_view_impl.hpp at line 7, boost/fusion/adapted/std_array/detail/size_impl.hpp at line 7, boost/fusion/adapted/std_array/detail/value_at_impl.hpp at line 6, boost/fusion/adapted/std_array/std_array_iterator.hpp at line 7, boost/fusion/adapted/std_array/tag_of.hpp at line 6, boost/fusion/algorithm.hpp at line 5, boost/fusion/algorithm/iteration.hpp at line 5, boost/fusion/algorithm/iteration/accumulate.hpp at line 6, boost/fusion/algorithm/iteration/accumulate_fwd.hpp at line 6, boost/fusion/algorithm/iteration/detail/for_each.hpp at line 5, boost/fusion/algorithm/iteration/detail/segmented_fold.hpp at line 5, boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp at line 5, boost/fusion/algorithm/iteration/for_each.hpp at line 6, boost/fusion/algorithm/iteration/for_each_fwd.hpp at line 5, boost/fusion/algorithm/query.hpp at line 5, boost/fusion/algorithm/query/all.hpp at line 6, boost/fusion/algorithm/query/any.hpp at line 7, boost/fusion/algorithm/query/count.hpp at line 6, boost/fusion/algorithm/query/count_if.hpp at line 6, boost/fusion/algorithm/query/detail/all.hpp at line 6, boost/fusion/algorithm/query/detail/any.hpp at line 7, boost/fusion/algorithm/query/detail/count.hpp at line 5, boost/fusion/algorithm/query/detail/count_if.hpp at line 6, boost/fusion/algorithm/query/detail/find_if.hpp at line 7, boost/fusion/algorithm/query/detail/segmented_find.hpp at line 5, boost/fusion/algorithm/query/detail/segmented_find_if.hpp at line 5, boost/fusion/algorithm/query/find.hpp at line 6, boost/fusion/algorithm/query/find_fwd.hpp at line 5, boost/fusion/algorithm/query/find_if.hpp at line 6, boost/fusion/algorithm/query/find_if_fwd.hpp at line 5, boost/fusion/algorithm/query/none.hpp at line 6, boost/fusion/algorithm/transformation.hpp at line 5, boost/fusion/algorithm/transformation/clear.hpp at line 5, boost/fusion/algorithm/transformation/detail/replace.hpp at line 5, boost/fusion/algorithm/transformation/detail/replace_if.hpp at line 5, boost/fusion/algorithm/transformation/erase_key.hpp at line 5, boost/fusion/algorithm/transformation/filter.hpp at line 6, boost/fusion/algorithm/transformation/filter_if.hpp at line 5, boost/fusion/algorithm/transformation/join.hpp at line 6, boost/fusion/algorithm/transformation/pop_front.hpp at line 5, boost/fusion/algorithm/transformation/push_back.hpp at line 5, boost/fusion/algorithm/transformation/push_front.hpp at line 5, boost/fusion/algorithm/transformation/remove.hpp at line 5, boost/fusion/algorithm/transformation/remove_if.hpp at line 5, boost/fusion/algorithm/transformation/replace.hpp at line 5, boost/fusion/algorithm/transformation/replace_if.hpp at line 5, boost/fusion/algorithm/transformation/reverse.hpp at line 5, boost/fusion/algorithm/transformation/transform.hpp at line 5, boost/fusion/container/generation/cons_tie.hpp at line 5, boost/fusion/container/generation/ignore.hpp at line 7, boost/fusion/container/generation/make_cons.hpp at line 6, boost/fusion/container/generation/pair_tie.hpp at line 6, boost/fusion/container/list/cons.hpp at line 6, boost/fusion/container/list/cons_iterator.hpp at line 6, boost/fusion/container/list/detail/begin_impl.hpp at line 6, boost/fusion/container/list/detail/build_cons.hpp at line 5, boost/fusion/container/list/detail/cpp03/list_forward_ctor.hpp at line 5, boost/fusion/container/list/detail/cpp03/list_to_cons_call.hpp at line 5, boost/fusion/container/list/detail/deref_impl.hpp at line 6, boost/fusion/container/list/detail/empty_impl.hpp at line 5, boost/fusion/container/list/detail/end_impl.hpp at line 6, boost/fusion/container/list/detail/equal_to_impl.hpp at line 5, boost/fusion/container/list/detail/next_impl.hpp at line 6, boost/fusion/container/list/detail/value_at_impl.hpp at line 5, boost/fusion/container/list/detail/value_of_impl.hpp at line 6, boost/fusion/container/list/nil.hpp at line 6, boost/fusion/container/map/detail/cpp03/at_impl.hpp at line 6, boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp at line 5, boost/fusion/container/map/detail/cpp03/value_at_impl.hpp at line 6, boost/fusion/container/set/detail/cpp03/set_forward_ctor.hpp at line 5, boost/fusion/container/vector/detail/advance_impl.hpp at line 5, boost/fusion/container/vector/detail/begin_impl.hpp at line 5, boost/fusion/container/vector/detail/deref_impl.hpp at line 5, boost/fusion/container/vector/detail/distance_impl.hpp at line 5, boost/fusion/container/vector/detail/end_impl.hpp at line 5, boost/fusion/container/vector/detail/equal_to_impl.hpp at line 5, boost/fusion/container/vector/detail/next_impl.hpp at line 5, boost/fusion/container/vector/detail/prior_impl.hpp at line 5, boost/fusion/container/vector/detail/value_of_impl.hpp at line 5, boost/fusion/container/vector/vector_iterator.hpp at line 5, boost/fusion/include/as_vector.hpp at line 5, boost/fusion/include/at.hpp at line 5, boost/fusion/include/io.hpp at line 5, boost/fusion/include/is_sequence.hpp at line 5, boost/fusion/include/join.hpp at line 5, boost/fusion/include/joint_view.hpp at line 5, boost/fusion/include/push_front.hpp at line 5, boost/fusion/include/single_view.hpp at line 5, boost/fusion/include/transform.hpp at line 5, boost/fusion/include/transform_view.hpp at line 5, boost/fusion/include/value_at.hpp at line 5, boost/fusion/iterator/deref.hpp at line 5, boost/fusion/iterator/detail/adapt_deref_traits.hpp at line 5, boost/fusion/iterator/detail/adapt_value_traits.hpp at line 5, boost/fusion/iterator/detail/advance.hpp at line 5, boost/fusion/iterator/detail/distance.hpp at line 5, boost/fusion/iterator/distance.hpp at line 5, boost/fusion/iterator/mpl.hpp at line 5, boost/fusion/iterator/mpl/fusion_iterator.hpp at line 5, boost/fusion/iterator/next.hpp at line 5, boost/fusion/iterator/prior.hpp at line 5, boost/fusion/iterator/value_of.hpp at line 5, boost/fusion/mpl/at.hpp at line 5, boost/fusion/mpl/back.hpp at line 5, boost/fusion/mpl/begin.hpp at line 5, boost/fusion/mpl/clear.hpp at line 5, boost/fusion/mpl/detail/clear.hpp at line 5, boost/fusion/mpl/empty.hpp at line 5, boost/fusion/mpl/end.hpp at line 5, boost/fusion/mpl/front.hpp at line 5, boost/fusion/mpl/has_key.hpp at line 5, boost/fusion/mpl/size.hpp at line 5, boost/fusion/sequence/comparison.hpp at line 5, boost/fusion/sequence/comparison/detail/equal_to.hpp at line 6, boost/fusion/sequence/comparison/detail/greater.hpp at line 6, boost/fusion/sequence/comparison/detail/greater_equal.hpp at line 6, boost/fusion/sequence/comparison/detail/less.hpp at line 6, boost/fusion/sequence/comparison/detail/less_equal.hpp at line 6, boost/fusion/sequence/comparison/detail/not_equal_to.hpp at line 6, boost/fusion/sequence/intrinsic/at_key.hpp at line 6, boost/fusion/sequence/intrinsic/back.hpp at line 5, boost/fusion/sequence/intrinsic/begin.hpp at line 5, boost/fusion/sequence/intrinsic/detail/segmented_size.hpp at line 5, boost/fusion/sequence/intrinsic/empty.hpp at line 5, boost/fusion/sequence/intrinsic/end.hpp at line 5, boost/fusion/sequence/intrinsic/front.hpp at line 5, boost/fusion/sequence/intrinsic/has_key.hpp at line 5, boost/fusion/sequence/intrinsic/segments.hpp at line 5, boost/fusion/sequence/intrinsic/size.hpp at line 5, boost/fusion/sequence/intrinsic/swap.hpp at line 6, boost/fusion/sequence/intrinsic/value_at.hpp at line 5, boost/fusion/sequence/intrinsic/value_at_key.hpp at line 6, boost/fusion/sequence/io.hpp at line 5, boost/fusion/sequence/io/detail/in.hpp at line 7, boost/fusion/sequence/io/detail/manip.hpp at line 7, boost/fusion/sequence/io/detail/out.hpp at line 7, boost/fusion/sequence/io/out.hpp at line 7, boost/fusion/support/category_of.hpp at line 5, boost/fusion/support/detail/as_fusion_element.hpp at line 6, boost/fusion/support/detail/category_of.hpp at line 5, boost/fusion/support/detail/is_mpl_sequence.hpp at line 6, boost/fusion/support/detail/is_view.hpp at line 5, boost/fusion/support/detail/mpl_iterator_category.hpp at line 5, boost/fusion/support/detail/unknown_key.hpp at line 5, boost/fusion/support/is_iterator.hpp at line 5, boost/fusion/support/is_segmented.hpp at line 5, boost/fusion/support/is_view.hpp at line 5, boost/fusion/tuple.hpp at line 5, boost/fusion/view.hpp at line 5, boost/fusion/view/filter_view.hpp at line 5, boost/fusion/view/filter_view/detail/begin_impl.hpp at line 5, boost/fusion/view/filter_view/detail/deref_impl.hpp at line 5, boost/fusion/view/filter_view/detail/end_impl.hpp at line 5, boost/fusion/view/filter_view/detail/equal_to_impl.hpp at line 6, boost/fusion/view/filter_view/detail/next_impl.hpp at line 5, boost/fusion/view/filter_view/detail/size_impl.hpp at line 5, boost/fusion/view/filter_view/detail/value_of_impl.hpp at line 5, boost/fusion/view/filter_view/filter_view.hpp at line 5, boost/fusion/view/iterator_range.hpp at line 5, boost/fusion/view/iterator_range/detail/begin_impl.hpp at line 5, boost/fusion/view/iterator_range/detail/end_impl.hpp at line 5, boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp at line 5, boost/fusion/view/iterator_range/detail/segments_impl.hpp at line 5, boost/fusion/view/joint_view.hpp at line 5, boost/fusion/view/joint_view/detail/begin_impl.hpp at line 5, boost/fusion/view/joint_view/detail/deref_impl.hpp at line 5, boost/fusion/view/joint_view/detail/end_impl.hpp at line 5, boost/fusion/view/joint_view/detail/next_impl.hpp at line 5, boost/fusion/view/joint_view/detail/value_of_impl.hpp at line 5, boost/fusion/view/nview.hpp at line 7, boost/fusion/view/nview/detail/at_impl.hpp at line 5, boost/fusion/view/nview/detail/size_impl.hpp at line 5, boost/fusion/view/nview/detail/value_at_impl.hpp at line 5, boost/fusion/view/nview/nview.hpp at line 5, boost/fusion/view/nview/nview_iterator.hpp at line 5, boost/fusion/view/reverse_view.hpp at line 5, boost/fusion/view/reverse_view/detail/advance_impl.hpp at line 6, boost/fusion/view/reverse_view/detail/begin_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/deref_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/distance_impl.hpp at line 6, boost/fusion/view/reverse_view/detail/end_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/next_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/prior_impl.hpp at line 5, boost/fusion/view/reverse_view/detail/value_of_impl.hpp at line 5, boost/fusion/view/reverse_view/reverse_view.hpp at line 5, boost/fusion/view/single_view.hpp at line 5, boost/fusion/view/single_view/detail/advance_impl.hpp at line 5, boost/fusion/view/single_view/detail/at_impl.hpp at line 5, boost/fusion/view/single_view/detail/begin_impl.hpp at line 6, boost/fusion/view/single_view/detail/deref_impl.hpp at line 6, boost/fusion/view/single_view/detail/end_impl.hpp at line 6, boost/fusion/view/single_view/detail/size_impl.hpp at line 5, boost/fusion/view/single_view/detail/value_at_impl.hpp at line 5, boost/fusion/view/single_view/detail/value_of_impl.hpp at line 6, boost/fusion/view/single_view/single_view.hpp at line 6, boost/fusion/view/single_view/single_view_iterator.hpp at line 6, boost/fusion/view/transform_view.hpp at line 5, boost/fusion/view/transform_view/detail/advance_impl.hpp at line 6, boost/fusion/view/transform_view/detail/apply_transform_result.hpp at line 6, boost/fusion/view/transform_view/detail/at_impl.hpp at line 6, boost/fusion/view/transform_view/detail/begin_impl.hpp at line 5, boost/fusion/view/transform_view/detail/deref_impl.hpp at line 5, boost/fusion/view/transform_view/detail/distance_impl.hpp at line 6, boost/fusion/view/transform_view/detail/end_impl.hpp at line 5, boost/fusion/view/transform_view/detail/equal_to_impl.hpp at line 5, boost/fusion/view/transform_view/detail/next_impl.hpp at line 5, boost/fusion/view/transform_view/detail/prior_impl.hpp at line 6, boost/fusion/view/transform_view/detail/value_of_impl.hpp at line 5, boost/fusion/view/transform_view/transform_view.hpp at line 5, boost/fusion/view/transform_view/transform_view_fwd.hpp at line 5, boost/fusion/view/zip_view.hpp at line 6, boost/fusion/view/zip_view/detail/advance_impl.hpp at line 6, boost/fusion/view/zip_view/detail/at_impl.hpp at line 6, boost/fusion/view/zip_view/detail/begin_impl.hpp at line 6, boost/fusion/view/zip_view/detail/deref_impl.hpp at line 6, boost/fusion/view/zip_view/detail/distance_impl.hpp at line 6, boost/fusion/view/zip_view/detail/end_impl.hpp at line 6, boost/fusion/view/zip_view/detail/equal_to_impl.hpp at line 6, boost/fusion/view/zip_view/detail/next_impl.hpp at line 6, boost/fusion/view/zip_view/detail/prior_impl.hpp at line 6, boost/fusion/view/zip_view/detail/size_impl.hpp at line 6, boost/fusion/view/zip_view/detail/value_at_impl.hpp at line 6, boost/fusion/view/zip_view/zip_view.hpp at line 6, boost/fusion/view/zip_view/zip_view_iterator.hpp at line 6, boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp at line 6, boost/phoenix/bind/detail/cpp03/bind_function.hpp at line 5, boost/phoenix/bind/detail/cpp03/bind_function.hpp at line 57, boost/phoenix/bind/detail/cpp03/bind_function_object.hpp at line 34, boost/phoenix/bind/detail/cpp03/bind_function_object.hpp at line 5, boost/phoenix/bind/detail/cpp03/bind_member_function.hpp at line 109, boost/phoenix/bind/detail/cpp03/function_ptr.hpp at line 5, boost/phoenix/bind/detail/cpp03/function_ptr.hpp at line 98, boost/phoenix/bind/detail/cpp03/member_function_ptr.hpp at line 87, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_10.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_10.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_10.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_20.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_30.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_40.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_50.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_10.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr.hpp at line 5, boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_10.hpp at line 5, boost/phoenix/core/as_actor.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/argument.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/function_equal.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/function_eval.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr.hpp at line 5, boost/phoenix/core/detail/cpp03/preprocessed/phx2_result.hpp at line 5, boost/phoenix/core/detail/expression.hpp at line 5, boost/phoenix/core/domain.hpp at line 6, boost/phoenix/core/expression.hpp at line 5, boost/phoenix/core/is_nullary.hpp at line 7, boost/phoenix/core/limits.hpp at line 5, boost/phoenix/core/meta_grammar.hpp at line 7, boost/phoenix/core/v2_eval.hpp at line 5, boost/phoenix/scope/detail/cpp03/preprocessed/lambda.hpp at line 5, boost/phoenix/scope/this.hpp at line 6, boost/phoenix/stl.hpp at line 7, boost/phoenix/stl/algorithm.hpp at line 8, boost/phoenix/stl/container.hpp at line 6, boost/phoenix/stl/container/detail/container.hpp at line 6, boost/phoenix/support/preprocessed/vector.hpp at line 5, boost/phoenix/support/preprocessor/round.hpp at line 5, boost/spirit/home/qi/action.hpp at line 5, boost/spirit/home/qi/char.hpp at line 5
+ License text:
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/fusion/adapted/array.hpp [6:7]
+ boost/fusion/adapted/array/at_impl.hpp [4:5]
+ boost/fusion/adapted/array/begin_impl.hpp [4:5]
+ boost/fusion/adapted/array/category_of_impl.hpp [4:5]
+ boost/fusion/adapted/array/end_impl.hpp [4:5]
+ boost/fusion/adapted/array/is_sequence_impl.hpp [4:5]
+ boost/fusion/adapted/array/is_view_impl.hpp [4:5]
+ boost/fusion/adapted/array/tag_of.hpp [4:5]
+ boost/fusion/adapted/array/value_at_impl.hpp [4:5]
+ boost/fusion/adapted/boost_array.hpp [5:6]
+ boost/fusion/adapted/boost_array/array_iterator.hpp [5:6]
+ boost/fusion/adapted/boost_array/detail/at_impl.hpp [5:6]
+ boost/fusion/adapted/boost_array/detail/begin_impl.hpp [5:6]
+ boost/fusion/adapted/boost_array/detail/category_of_impl.hpp [5:6]
+ boost/fusion/adapted/boost_array/detail/end_impl.hpp [5:6]
+ boost/fusion/adapted/boost_array/detail/is_sequence_impl.hpp [5:6]
+ boost/fusion/adapted/boost_array/detail/is_view_impl.hpp [5:6]
+ boost/fusion/adapted/boost_array/detail/size_impl.hpp [5:6]
+ boost/fusion/adapted/boost_array/detail/value_at_impl.hpp [5:6]
+ boost/fusion/adapted/boost_array/tag_of.hpp [5:6]
+ boost/fusion/adapted/boost_tuple.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/at_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/begin_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/category_of_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/end_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/size_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp [4:5]
+ boost/fusion/adapted/boost_tuple/tag_of.hpp [4:5]
+ boost/fusion/adapted/mpl/detail/at_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/begin_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/category_of_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/end_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/has_key_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/is_view_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/size_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/detail/value_at_impl.hpp [5:6]
+ boost/fusion/adapted/mpl/mpl_iterator.hpp [4:5]
+ boost/fusion/adapted/std_array.hpp [6:7]
+ boost/fusion/adapted/std_array/detail/array_size.hpp [4:5]
+ boost/fusion/adapted/std_array/detail/at_impl.hpp [5:6]
+ boost/fusion/adapted/std_array/detail/begin_impl.hpp [6:7]
+ boost/fusion/adapted/std_array/detail/category_of_impl.hpp [5:6]
+ boost/fusion/adapted/std_array/detail/end_impl.hpp [6:7]
+ boost/fusion/adapted/std_array/detail/is_sequence_impl.hpp [6:7]
+ boost/fusion/adapted/std_array/detail/is_view_impl.hpp [6:7]
+ boost/fusion/adapted/std_array/detail/size_impl.hpp [6:7]
+ boost/fusion/adapted/std_array/detail/value_at_impl.hpp [5:6]
+ boost/fusion/adapted/std_array/std_array_iterator.hpp [6:7]
+ boost/fusion/adapted/std_array/tag_of.hpp [5:6]
+ boost/fusion/algorithm.hpp [4:5]
+ boost/fusion/algorithm/iteration.hpp [4:5]
+ boost/fusion/algorithm/iteration/accumulate.hpp [5:6]
+ boost/fusion/algorithm/iteration/accumulate_fwd.hpp [5:6]
+ boost/fusion/algorithm/iteration/detail/for_each.hpp [4:5]
+ boost/fusion/algorithm/iteration/detail/segmented_fold.hpp [4:5]
+ boost/fusion/algorithm/iteration/detail/segmented_for_each.hpp [4:5]
+ boost/fusion/algorithm/iteration/for_each.hpp [5:6]
+ boost/fusion/algorithm/iteration/for_each_fwd.hpp [4:5]
+ boost/fusion/algorithm/query.hpp [4:5]
+ boost/fusion/algorithm/query/all.hpp [5:6]
+ boost/fusion/algorithm/query/any.hpp [6:7]
+ boost/fusion/algorithm/query/count.hpp [5:6]
+ boost/fusion/algorithm/query/count_if.hpp [5:6]
+ boost/fusion/algorithm/query/detail/all.hpp [5:6]
+ boost/fusion/algorithm/query/detail/any.hpp [6:7]
+ boost/fusion/algorithm/query/detail/count.hpp [4:5]
+ boost/fusion/algorithm/query/detail/count_if.hpp [5:6]
+ boost/fusion/algorithm/query/detail/find_if.hpp [6:7]
+ boost/fusion/algorithm/query/detail/segmented_find.hpp [4:5]
+ boost/fusion/algorithm/query/detail/segmented_find_if.hpp [4:5]
+ boost/fusion/algorithm/query/find.hpp [5:6]
+ boost/fusion/algorithm/query/find_fwd.hpp [4:5]
+ boost/fusion/algorithm/query/find_if.hpp [5:6]
+ boost/fusion/algorithm/query/find_if_fwd.hpp [4:5]
+ boost/fusion/algorithm/query/none.hpp [5:6]
+ boost/fusion/algorithm/transformation.hpp [4:5]
+ boost/fusion/algorithm/transformation/clear.hpp [4:5]
+ boost/fusion/algorithm/transformation/detail/replace.hpp [4:5]
+ boost/fusion/algorithm/transformation/detail/replace_if.hpp [4:5]
+ boost/fusion/algorithm/transformation/erase_key.hpp [4:5]
+ boost/fusion/algorithm/transformation/filter.hpp [5:6]
+ boost/fusion/algorithm/transformation/filter_if.hpp [4:5]
+ boost/fusion/algorithm/transformation/join.hpp [5:6]
+ boost/fusion/algorithm/transformation/pop_front.hpp [4:5]
+ boost/fusion/algorithm/transformation/push_back.hpp [4:5]
+ boost/fusion/algorithm/transformation/push_front.hpp [4:5]
+ boost/fusion/algorithm/transformation/remove.hpp [4:5]
+ boost/fusion/algorithm/transformation/remove_if.hpp [4:5]
+ boost/fusion/algorithm/transformation/replace.hpp [4:5]
+ boost/fusion/algorithm/transformation/replace_if.hpp [4:5]
+ boost/fusion/algorithm/transformation/reverse.hpp [4:5]
+ boost/fusion/algorithm/transformation/transform.hpp [4:5]
+ boost/fusion/container/generation/cons_tie.hpp [4:5]
+ boost/fusion/container/generation/ignore.hpp [6:7]
+ boost/fusion/container/generation/make_cons.hpp [5:6]
+ boost/fusion/container/generation/pair_tie.hpp [5:6]
+ boost/fusion/container/list/cons.hpp [5:6]
+ boost/fusion/container/list/cons_iterator.hpp [5:6]
+ boost/fusion/container/list/detail/begin_impl.hpp [5:6]
+ boost/fusion/container/list/detail/build_cons.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/list_forward_ctor.hpp [4:5]
+ boost/fusion/container/list/detail/cpp03/list_to_cons_call.hpp [4:5]
+ boost/fusion/container/list/detail/deref_impl.hpp [5:6]
+ boost/fusion/container/list/detail/empty_impl.hpp [4:5]
+ boost/fusion/container/list/detail/end_impl.hpp [5:6]
+ boost/fusion/container/list/detail/equal_to_impl.hpp [4:5]
+ boost/fusion/container/list/detail/next_impl.hpp [5:6]
+ boost/fusion/container/list/detail/value_at_impl.hpp [4:5]
+ boost/fusion/container/list/detail/value_of_impl.hpp [5:6]
+ boost/fusion/container/list/nil.hpp [5:6]
+ boost/fusion/container/map/detail/cpp03/at_impl.hpp [5:6]
+ boost/fusion/container/map/detail/cpp03/map_forward_ctor.hpp [4:5]
+ boost/fusion/container/map/detail/cpp03/value_at_impl.hpp [5:6]
+ boost/fusion/container/set/detail/cpp03/set_forward_ctor.hpp [4:5]
+ boost/fusion/container/vector/detail/advance_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/begin_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/deref_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/distance_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/end_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/equal_to_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/next_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/prior_impl.hpp [4:5]
+ boost/fusion/container/vector/detail/value_of_impl.hpp [4:5]
+ boost/fusion/container/vector/vector_iterator.hpp [4:5]
+ boost/fusion/include/as_vector.hpp [4:5]
+ boost/fusion/include/at.hpp [4:5]
+ boost/fusion/include/io.hpp [4:5]
+ boost/fusion/include/is_sequence.hpp [4:5]
+ boost/fusion/include/join.hpp [4:5]
+ boost/fusion/include/joint_view.hpp [4:5]
+ boost/fusion/include/push_front.hpp [4:5]
+ boost/fusion/include/single_view.hpp [4:5]
+ boost/fusion/include/transform.hpp [4:5]
+ boost/fusion/include/transform_view.hpp [4:5]
+ boost/fusion/include/value_at.hpp [4:5]
+ boost/fusion/iterator/deref.hpp [4:5]
+ boost/fusion/iterator/detail/adapt_deref_traits.hpp [4:5]
+ boost/fusion/iterator/detail/adapt_value_traits.hpp [4:5]
+ boost/fusion/iterator/detail/advance.hpp [4:5]
+ boost/fusion/iterator/detail/distance.hpp [4:5]
+ boost/fusion/iterator/distance.hpp [4:5]
+ boost/fusion/iterator/mpl.hpp [4:5]
+ boost/fusion/iterator/mpl/fusion_iterator.hpp [4:5]
+ boost/fusion/iterator/next.hpp [4:5]
+ boost/fusion/iterator/prior.hpp [4:5]
+ boost/fusion/iterator/value_of.hpp [4:5]
+ boost/fusion/mpl/at.hpp [4:5]
+ boost/fusion/mpl/back.hpp [4:5]
+ boost/fusion/mpl/begin.hpp [4:5]
+ boost/fusion/mpl/clear.hpp [4:5]
+ boost/fusion/mpl/detail/clear.hpp [4:5]
+ boost/fusion/mpl/empty.hpp [4:5]
+ boost/fusion/mpl/end.hpp [4:5]
+ boost/fusion/mpl/front.hpp [4:5]
+ boost/fusion/mpl/has_key.hpp [4:5]
+ boost/fusion/mpl/size.hpp [4:5]
+ boost/fusion/sequence/comparison.hpp [4:5]
+ boost/fusion/sequence/comparison/detail/equal_to.hpp [5:6]
+ boost/fusion/sequence/comparison/detail/greater.hpp [5:6]
+ boost/fusion/sequence/comparison/detail/greater_equal.hpp [5:6]
+ boost/fusion/sequence/comparison/detail/less.hpp [5:6]
+ boost/fusion/sequence/comparison/detail/less_equal.hpp [5:6]
+ boost/fusion/sequence/comparison/detail/not_equal_to.hpp [5:6]
+ boost/fusion/sequence/intrinsic/at_key.hpp [5:6]
+ boost/fusion/sequence/intrinsic/back.hpp [4:5]
+ boost/fusion/sequence/intrinsic/begin.hpp [4:5]
+ boost/fusion/sequence/intrinsic/detail/segmented_size.hpp [4:5]
+ boost/fusion/sequence/intrinsic/empty.hpp [4:5]
+ boost/fusion/sequence/intrinsic/end.hpp [4:5]
+ boost/fusion/sequence/intrinsic/front.hpp [4:5]
+ boost/fusion/sequence/intrinsic/has_key.hpp [4:5]
+ boost/fusion/sequence/intrinsic/segments.hpp [4:5]
+ boost/fusion/sequence/intrinsic/size.hpp [4:5]
+ boost/fusion/sequence/intrinsic/swap.hpp [5:6]
+ boost/fusion/sequence/intrinsic/value_at.hpp [4:5]
+ boost/fusion/sequence/intrinsic/value_at_key.hpp [5:6]
+ boost/fusion/sequence/io.hpp [4:5]
+ boost/fusion/sequence/io/detail/in.hpp [6:7]
+ boost/fusion/sequence/io/detail/manip.hpp [6:7]
+ boost/fusion/sequence/io/detail/out.hpp [6:7]
+ boost/fusion/sequence/io/out.hpp [6:7]
+ boost/fusion/support/category_of.hpp [4:5]
+ boost/fusion/support/detail/as_fusion_element.hpp [5:6]
+ boost/fusion/support/detail/category_of.hpp [4:5]
+ boost/fusion/support/detail/is_mpl_sequence.hpp [5:6]
+ boost/fusion/support/detail/is_view.hpp [4:5]
+ boost/fusion/support/detail/mpl_iterator_category.hpp [4:5]
+ boost/fusion/support/detail/unknown_key.hpp [4:5]
+ boost/fusion/support/is_iterator.hpp [4:5]
+ boost/fusion/support/is_segmented.hpp [4:5]
+ boost/fusion/support/is_view.hpp [4:5]
+ boost/fusion/tuple.hpp [4:5]
+ boost/fusion/view.hpp [4:5]
+ boost/fusion/view/filter_view.hpp [4:5]
+ boost/fusion/view/filter_view/detail/begin_impl.hpp [4:5]
+ boost/fusion/view/filter_view/detail/deref_impl.hpp [4:5]
+ boost/fusion/view/filter_view/detail/end_impl.hpp [4:5]
+ boost/fusion/view/filter_view/detail/equal_to_impl.hpp [5:6]
+ boost/fusion/view/filter_view/detail/next_impl.hpp [4:5]
+ boost/fusion/view/filter_view/detail/size_impl.hpp [4:5]
+ boost/fusion/view/filter_view/detail/value_of_impl.hpp [4:5]
+ boost/fusion/view/filter_view/filter_view.hpp [4:5]
+ boost/fusion/view/iterator_range.hpp [4:5]
+ boost/fusion/view/iterator_range/detail/begin_impl.hpp [4:5]
+ boost/fusion/view/iterator_range/detail/end_impl.hpp [4:5]
+ boost/fusion/view/iterator_range/detail/is_segmented_impl.hpp [4:5]
+ boost/fusion/view/iterator_range/detail/segments_impl.hpp [4:5]
+ boost/fusion/view/joint_view.hpp [4:5]
+ boost/fusion/view/joint_view/detail/begin_impl.hpp [4:5]
+ boost/fusion/view/joint_view/detail/deref_impl.hpp [4:5]
+ boost/fusion/view/joint_view/detail/end_impl.hpp [4:5]
+ boost/fusion/view/joint_view/detail/next_impl.hpp [4:5]
+ boost/fusion/view/joint_view/detail/value_of_impl.hpp [4:5]
+ boost/fusion/view/nview.hpp [6:7]
+ boost/fusion/view/nview/detail/at_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/size_impl.hpp [4:5]
+ boost/fusion/view/nview/detail/value_at_impl.hpp [4:5]
+ boost/fusion/view/nview/nview.hpp [4:5]
+ boost/fusion/view/nview/nview_iterator.hpp [4:5]
+ boost/fusion/view/reverse_view.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/advance_impl.hpp [5:6]
+ boost/fusion/view/reverse_view/detail/begin_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/deref_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/distance_impl.hpp [5:6]
+ boost/fusion/view/reverse_view/detail/end_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/next_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/prior_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/detail/value_of_impl.hpp [4:5]
+ boost/fusion/view/reverse_view/reverse_view.hpp [4:5]
+ boost/fusion/view/single_view.hpp [4:5]
+ boost/fusion/view/single_view/detail/advance_impl.hpp [4:5]
+ boost/fusion/view/single_view/detail/at_impl.hpp [4:5]
+ boost/fusion/view/single_view/detail/begin_impl.hpp [5:6]
+ boost/fusion/view/single_view/detail/deref_impl.hpp [5:6]
+ boost/fusion/view/single_view/detail/end_impl.hpp [5:6]
+ boost/fusion/view/single_view/detail/size_impl.hpp [4:5]
+ boost/fusion/view/single_view/detail/value_at_impl.hpp [4:5]
+ boost/fusion/view/single_view/detail/value_of_impl.hpp [5:6]
+ boost/fusion/view/single_view/single_view.hpp [5:6]
+ boost/fusion/view/single_view/single_view_iterator.hpp [5:6]
+ boost/fusion/view/transform_view.hpp [4:5]
+ boost/fusion/view/transform_view/detail/advance_impl.hpp [5:6]
+ boost/fusion/view/transform_view/detail/apply_transform_result.hpp [5:6]
+ boost/fusion/view/transform_view/detail/at_impl.hpp [5:6]
+ boost/fusion/view/transform_view/detail/begin_impl.hpp [4:5]
+ boost/fusion/view/transform_view/detail/deref_impl.hpp [4:5]
+ boost/fusion/view/transform_view/detail/distance_impl.hpp [5:6]
+ boost/fusion/view/transform_view/detail/end_impl.hpp [4:5]
+ boost/fusion/view/transform_view/detail/equal_to_impl.hpp [4:5]
+ boost/fusion/view/transform_view/detail/next_impl.hpp [4:5]
+ boost/fusion/view/transform_view/detail/prior_impl.hpp [5:6]
+ boost/fusion/view/transform_view/detail/value_of_impl.hpp [4:5]
+ boost/fusion/view/transform_view/transform_view.hpp [4:5]
+ boost/fusion/view/transform_view/transform_view_fwd.hpp [4:5]
+ boost/fusion/view/zip_view.hpp [5:6]
+ boost/fusion/view/zip_view/detail/advance_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/at_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/begin_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/deref_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/distance_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/end_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/equal_to_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/next_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/prior_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/size_impl.hpp [5:6]
+ boost/fusion/view/zip_view/detail/value_at_impl.hpp [5:6]
+ boost/fusion/view/zip_view/zip_view.hpp [5:6]
+ boost/fusion/view/zip_view/zip_view_iterator.hpp [5:6]
+ boost/fusion/view/zip_view/zip_view_iterator_fwd.hpp [5:6]
+ boost/phoenix/bind/detail/cpp03/bind_function.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/bind_function.hpp [56:57]
+ boost/phoenix/bind/detail/cpp03/bind_function_object.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/bind_function_object.hpp [33:34]
+ boost/phoenix/bind/detail/cpp03/bind_member_function.hpp [108:109]
+ boost/phoenix/bind/detail/cpp03/function_ptr.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/function_ptr.hpp [97:98]
+ boost/phoenix/bind/detail/cpp03/member_function_ptr.hpp [86:87]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_10.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_function_object_10.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_10.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_20.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_30.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_40.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/bind_member_function_50.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/function_ptr_10.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr.hpp [4:5]
+ boost/phoenix/bind/detail/cpp03/preprocessed/member_function_ptr_10.hpp [4:5]
+ boost/phoenix/core/as_actor.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/argument.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_equal.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/function_eval_expr.hpp [4:5]
+ boost/phoenix/core/detail/cpp03/preprocessed/phx2_result.hpp [4:5]
+ boost/phoenix/core/detail/expression.hpp [4:5]
+ boost/phoenix/core/domain.hpp [5:6]
+ boost/phoenix/core/expression.hpp [4:5]
+ boost/phoenix/core/is_nullary.hpp [6:7]
+ boost/phoenix/core/limits.hpp [4:5]
+ boost/phoenix/core/meta_grammar.hpp [6:7]
+ boost/phoenix/core/v2_eval.hpp [4:5]
+ boost/phoenix/scope/detail/cpp03/preprocessed/lambda.hpp [4:5]
+ boost/phoenix/scope/this.hpp [5:6]
+ boost/phoenix/stl.hpp [6:7]
+ boost/phoenix/stl/algorithm.hpp [7:8]
+ boost/phoenix/stl/container.hpp [5:6]
+ boost/phoenix/stl/container/detail/container.hpp [5:6]
+ boost/phoenix/support/preprocessed/vector.hpp [4:5]
+ boost/phoenix/support/preprocessor/round.hpp [4:5]
+ boost/spirit/home/qi/action.hpp [4:5]
+ boost/spirit/home/qi/char.hpp [4:5]
+
+KEEP BSL-1.0 dde9acabf5742901105539d5f17431bd
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/preprocessor/list/to_array.hpp at line 6
+ License text:
+ \# * Distributed under the Boost Software License, Version 1.0. (See
+ \# * accompanying file LICENSE_1_0.txt or copy at
+ \# * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/preprocessor/list/to_array.hpp [5:7]
+
+KEEP BSL-1.0 ddf3aa9096c8b1813b5286b27c8ff567
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/concept/detail/backward_compatibility.hpp at line 3
+ License text:
+ // Copyright David Abrahams 2009. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/concept/detail/backward_compatibility.hpp [1:3]
+
+KEEP BSL-1.0 deee9a766b5b9de6341124086cf18c15
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/allocator.hpp at line 5, boost/container/detail/auto_link.hpp at line 5, boost/container/detail/singleton.hpp at line 16
+ License text:
+ // (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/allocator.hpp [3:5]
+ boost/container/detail/auto_link.hpp [3:5]
+ boost/container/detail/singleton.hpp [14:16]
+
+KEEP BSL-1.0 e03c043ca7052925e34194f3fe2631e4
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/msm/mpl_graph/mpl_graph.hpp [8:8]
+ boost/utility/detail/minstd_rand.hpp [6:6]
+
+KEEP BSL-1.0 e30802d624ab26a07227b82c6380e880
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/proto/detail/deduce_domain.hpp at line 9
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/proto/detail/deduce_domain.hpp [7:9]
+
+KEEP BSL-1.0 e36b3a71b94a65181100fbb5aeb04562
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/type_traits/detail/detector.hpp at line 6, boost/type_traits/detected.hpp at line 6, boost/type_traits/detected_or.hpp at line 6, boost/type_traits/is_detected.hpp at line 6, boost/type_traits/is_detected_convertible.hpp at line 6, boost/type_traits/is_detected_exact.hpp at line 6, boost/type_traits/make_void.hpp at line 6, boost/type_traits/nonesuch.hpp at line 6
+ License text:
+ Distributed under the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt
+ or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/type_traits/detail/detector.hpp [5:7]
+ boost/type_traits/detected.hpp [5:7]
+ boost/type_traits/detected_or.hpp [5:7]
+ boost/type_traits/is_detected.hpp [5:7]
+ boost/type_traits/is_detected_convertible.hpp [5:7]
+ boost/type_traits/is_detected_exact.hpp [5:7]
+ boost/type_traits/make_void.hpp [5:7]
+ boost/type_traits/nonesuch.hpp [5:7]
+
+KEEP BSL-1.0 e4571f5c07b0b6bd8c6bbcb297d4610d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/signals2/variadic_slot.hpp at line 6
+ License text:
+ // distribution is subject to the Boost Software License, Version
+ // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 87.50
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/signals2/variadic_slot.hpp [5:7]
+
+SKIP Public-Domain e554616ea381325a766aa070edbb78a7
+BELONGS ya.make
+ License text:
+ // Derived from a public domain implementation written by Daniel Casimiro.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-public-domain
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.linfo.org/publicdomain.html, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/public-domain.LICENSE
+ Files with this license:
+ boost/asio/local/basic_endpoint.hpp [6:6]
+ boost/asio/local/detail/endpoint.hpp [6:6]
+ boost/asio/local/detail/impl/endpoint.ipp [6:6]
+
+SKIP MPL-1.1 e5f161acc2254dcdb84c03a759f0ad62
+BELONGS ya.make
+ License text:
+ //! Classic MPL-style metafunction returning the nth element of a type
+ Scancode info:
+ Original SPDX id: MPL-1.1
+ Score : 80.00
+ Match type : REFERENCE
+ Links : http://www.mozilla.com/MPL/1.1/index.html, http://www.mozilla.org/MPL/MPL-1.1.html, https://spdx.org/licenses/MPL-1.1
+ Files with this license:
+ boost/hana/detail/type_at.hpp [44:44]
+
+KEEP BSL-1.0 e62661610d95a7bb4df4f06296a137df
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/ptr_container/detail/serialize_xml_names.hpp at line 6, boost/ptr_container/indirect_fun.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/ptr_container/detail/serialize_xml_names.hpp [4:7]
+ boost/ptr_container/indirect_fun.hpp [4:7]
+
+KEEP BSL-1.0 e6392165abe6e8ce8497cc77611fbaaf
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/wave.hpp at line 10, boost/wave/cpp_context.hpp at line 9, boost/wave/cpp_exceptions.hpp at line 8, boost/wave/cpp_iteration_context.hpp at line 9, boost/wave/cpp_throw.hpp at line 8, boost/wave/cpplexer/convert_trigraphs.hpp at line 10, boost/wave/cpplexer/cpp_lex_interface.hpp at line 10, boost/wave/cpplexer/cpp_lex_interface_generator.hpp at line 10, boost/wave/cpplexer/cpp_lex_iterator.hpp at line 10, boost/wave/cpplexer/cpp_lex_token.hpp at line 10, boost/wave/cpplexer/cpplexer_exceptions.hpp at line 8, boost/wave/cpplexer/detect_include_guards.hpp at line 27, boost/wave/cpplexer/re2clex/cpp_re.hpp at line 10, boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp at line 10, boost/wave/cpplexer/token_cache.hpp at line 8, boost/wave/cpplexer/validate_universal_char.hpp at line 10, boost/wave/grammars/cpp_chlit_grammar.hpp at line 8, boost/wave/grammars/cpp_defined_grammar.hpp at line 8, boost/wave/grammars/cpp_defined_grammar_gen.hpp at line 8, boost/wave/grammars/cpp_expression_grammar.hpp at line 8, boost/wave/grammars/cpp_expression_grammar_gen.hpp at line 8, boost/wave/grammars/cpp_expression_value.hpp at line 8, boost/wave/grammars/cpp_grammar.hpp at line 8, boost/wave/grammars/cpp_grammar_gen.hpp at line 8, boost/wave/grammars/cpp_intlit_grammar.hpp at line 8, boost/wave/grammars/cpp_literal_grammar_gen.hpp at line 8, boost/wave/grammars/cpp_predef_macros_gen.hpp at line 8, boost/wave/grammars/cpp_predef_macros_grammar.hpp at line 8, boost/wave/grammars/cpp_value_error.hpp at line 8, boost/wave/language_support.hpp at line 9, boost/wave/preprocessing_hooks.hpp at line 8, boost/wave/token_ids.hpp at line 10, boost/wave/util/cpp_ifblock.hpp at line 8, boost/wave/util/cpp_include_paths.hpp at line 8, boost/wave/util/cpp_iterator.hpp at line 10, boost/wave/util/cpp_macromap.hpp at line 10, boost/wave/util/cpp_macromap_predef.hpp at line 10, boost/wave/util/cpp_macromap_utils.hpp at line 10, boost/wave/util/file_position.hpp at line 10, boost/wave/util/filesystem_compatibility.hpp at line 8, boost/wave/util/functor_input.hpp at line 8, boost/wave/util/insert_whitespace_detection.hpp at line 10, boost/wave/util/interpret_pragma.hpp at line 8, boost/wave/util/iteration_context.hpp at line 8, boost/wave/util/macro_definition.hpp at line 8, boost/wave/util/macro_helpers.hpp at line 8, boost/wave/util/pattern_parser.hpp at line 10, boost/wave/util/symbol_table.hpp at line 8, boost/wave/util/time_conversion_helper.hpp at line 8, boost/wave/util/transform_iterator.hpp at line 8, boost/wave/util/unput_queue_iterator.hpp at line 10, boost/wave/wave_config.hpp at line 10, boost/wave/wave_config_constant.hpp at line 9, boost/wave/wave_version.hpp at line 10
+ License text:
+ Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/wave.hpp [8:10]
+ boost/wave/cpp_context.hpp [7:9]
+ boost/wave/cpp_exceptions.hpp [6:8]
+ boost/wave/cpp_iteration_context.hpp [7:9]
+ boost/wave/cpp_throw.hpp [6:8]
+ boost/wave/cpplexer/convert_trigraphs.hpp [8:10]
+ boost/wave/cpplexer/cpp_lex_interface.hpp [8:10]
+ boost/wave/cpplexer/cpp_lex_interface_generator.hpp [8:10]
+ boost/wave/cpplexer/cpp_lex_iterator.hpp [8:10]
+ boost/wave/cpplexer/cpp_lex_token.hpp [8:10]
+ boost/wave/cpplexer/cpplexer_exceptions.hpp [6:8]
+ boost/wave/cpplexer/detect_include_guards.hpp [25:27]
+ boost/wave/cpplexer/re2clex/cpp_re.hpp [8:10]
+ boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp [8:10]
+ boost/wave/cpplexer/token_cache.hpp [6:8]
+ boost/wave/cpplexer/validate_universal_char.hpp [8:10]
+ boost/wave/grammars/cpp_chlit_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_defined_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_defined_grammar_gen.hpp [6:8]
+ boost/wave/grammars/cpp_expression_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_expression_grammar_gen.hpp [6:8]
+ boost/wave/grammars/cpp_expression_value.hpp [6:8]
+ boost/wave/grammars/cpp_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_grammar_gen.hpp [6:8]
+ boost/wave/grammars/cpp_intlit_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_literal_grammar_gen.hpp [6:8]
+ boost/wave/grammars/cpp_predef_macros_gen.hpp [6:8]
+ boost/wave/grammars/cpp_predef_macros_grammar.hpp [6:8]
+ boost/wave/grammars/cpp_value_error.hpp [6:8]
+ boost/wave/language_support.hpp [7:9]
+ boost/wave/preprocessing_hooks.hpp [6:8]
+ boost/wave/token_ids.hpp [8:10]
+ boost/wave/util/cpp_ifblock.hpp [6:8]
+ boost/wave/util/cpp_include_paths.hpp [6:8]
+ boost/wave/util/cpp_iterator.hpp [8:10]
+ boost/wave/util/cpp_macromap.hpp [8:10]
+ boost/wave/util/cpp_macromap_predef.hpp [8:10]
+ boost/wave/util/cpp_macromap_utils.hpp [8:10]
+ boost/wave/util/file_position.hpp [8:10]
+ boost/wave/util/filesystem_compatibility.hpp [6:8]
+ boost/wave/util/functor_input.hpp [6:8]
+ boost/wave/util/insert_whitespace_detection.hpp [8:10]
+ boost/wave/util/interpret_pragma.hpp [6:8]
+ boost/wave/util/iteration_context.hpp [6:8]
+ boost/wave/util/macro_definition.hpp [6:8]
+ boost/wave/util/macro_helpers.hpp [6:8]
+ boost/wave/util/pattern_parser.hpp [8:10]
+ boost/wave/util/symbol_table.hpp [6:8]
+ boost/wave/util/time_conversion_helper.hpp [6:8]
+ boost/wave/util/transform_iterator.hpp [6:8]
+ boost/wave/util/unput_queue_iterator.hpp [8:10]
+ boost/wave/wave_config.hpp [8:10]
+ boost/wave/wave_config_constant.hpp [7:9]
+ boost/wave/wave_version.hpp [8:10]
+
+KEEP BSL-1.0 e6a3c462b8c40b8d1b8ef9a1bfe334ea
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/progress.hpp at line 5, boost/timer.hpp at line 5
+ License text:
+ // Copyright Beman Dawes 1994-99. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/progress.hpp [3:5]
+ boost/timer.hpp [3:5]
+
+KEEP BSL-1.0 e7b5dc404b6b2102b4aa561aee20a2fc
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/min_max.hpp at line 4
+ License text:
+ // Copyright 2016 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/detail/min_max.hpp [2:4]
+
+KEEP BSL-1.0 e839de25ce13e3e85a6d98035de17196
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/token_iterator.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.11
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/token_iterator.hpp [4:10]
+
+KEEP BSL-1.0 e87c3dd71a4ef19d4c3d2331ca65352f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/uuid/basic_name_generator.hpp at line 7, boost/uuid/name_generator.hpp at line 7, boost/uuid/name_generator_md5.hpp at line 6, boost/uuid/name_generator_sha1.hpp at line 7
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/uuid/basic_name_generator.hpp [6:8]
+ boost/uuid/name_generator.hpp [6:8]
+ boost/uuid/name_generator_md5.hpp [5:7]
+ boost/uuid/name_generator_sha1.hpp [6:8]
+
+KEEP MIT e8fa61ad26065c016c4c968298a683bd
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: MIT
+ Score : 100.00
+ Match type : TEXT
+ Links : http://opensource.org/licenses/mit-license.php, https://spdx.org/licenses/MIT
+ Files with this license:
+ boost/graph/boykov_kolmogorov_max_flow.hpp [5:24]
+ boost/graph/write_dimacs.hpp [5:24]
+
+KEEP BSL-1.0 e9074560eedac47c976141d60b050ab5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/traits/is_backend.hpp at line 4, boost/multiprecision/traits/is_byte_container.hpp at line 4
+ License text:
+ // Copyright 2015 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/traits/is_backend.hpp [2:4]
+ boost/multiprecision/traits/is_byte_container.hpp [2:4]
+
+KEEP BSL-1.0 e91594a20efc45dd4517624478c6c351
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/detail/no_et_ops.hpp at line 4, boost/multiprecision/detail/number_compare.hpp at line 4, boost/multiprecision/traits/explicit_conversion.hpp at line 5, boost/multiprecision/traits/is_restricted_conversion.hpp at line 5
+ License text:
+ // Copyright 2012 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/detail/no_et_ops.hpp [2:4]
+ boost/multiprecision/detail/number_compare.hpp [2:4]
+ boost/multiprecision/traits/explicit_conversion.hpp [3:5]
+ boost/multiprecision/traits/is_restricted_conversion.hpp [3:5]
+
+KEEP BSL-1.0 e933f75317e8b0dd6596263caf28e994
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/numeric/odeint/algebra/default_operations.hpp at line 13, boost/numeric/odeint/algebra/detail/for_each.hpp at line 13, boost/numeric/odeint/algebra/range_algebra.hpp at line 14, boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp at line 14, boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp at line 14
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or
+ copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/numeric/odeint/algebra/default_operations.hpp [12:14]
+ boost/numeric/odeint/algebra/detail/for_each.hpp [12:14]
+ boost/numeric/odeint/algebra/range_algebra.hpp [13:15]
+ boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp [13:15]
+ boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp [13:15]
+
+KEEP BSL-1.0 e9bbf58ab1f2bd1f5073e4b511502f61
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/copied.hpp at line 5, boost/range/adaptor/tokenized.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/adaptor/copied.hpp [3:6]
+ boost/range/adaptor/tokenized.hpp [3:6]
+
+KEEP BSL-1.0 ecd6153baa3f865870856f438e1eeac7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/io/ios_state.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/io/ios_state.hpp [3:5]
+
+KEEP BSL-1.0 ee282eae3937cec525b57093b02f02a8
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.44
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/detail/bitmask.hpp [5:6]
+
+KEEP BSL-1.0 ee3962a5a0bcf4ba36442d07459aa81f
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/compute.hpp at line 5, boost/compute/algorithm.hpp at line 5, boost/compute/algorithm/accumulate.hpp at line 5, boost/compute/algorithm/adjacent_difference.hpp at line 5, boost/compute/algorithm/adjacent_find.hpp at line 5, boost/compute/algorithm/all_of.hpp at line 5, boost/compute/algorithm/any_of.hpp at line 5, boost/compute/algorithm/binary_search.hpp at line 5, boost/compute/algorithm/copy.hpp at line 5, boost/compute/algorithm/copy_if.hpp at line 5, boost/compute/algorithm/copy_n.hpp at line 5, boost/compute/algorithm/count.hpp at line 5, boost/compute/algorithm/count_if.hpp at line 5, boost/compute/algorithm/detail/balanced_path.hpp at line 5, boost/compute/algorithm/detail/binary_find.hpp at line 5, boost/compute/algorithm/detail/compact.hpp at line 5, boost/compute/algorithm/detail/copy_on_device.hpp at line 5, boost/compute/algorithm/detail/copy_to_device.hpp at line 5, boost/compute/algorithm/detail/copy_to_host.hpp at line 5, boost/compute/algorithm/detail/count_if_with_ballot.hpp at line 5, boost/compute/algorithm/detail/count_if_with_reduce.hpp at line 5, boost/compute/algorithm/detail/count_if_with_threads.hpp at line 5, boost/compute/algorithm/detail/find_extrema.hpp at line 5, boost/compute/algorithm/detail/find_extrema_on_cpu.hpp at line 5, boost/compute/algorithm/detail/find_extrema_with_atomics.hpp at line 5, boost/compute/algorithm/detail/find_extrema_with_reduce.hpp at line 5, boost/compute/algorithm/detail/find_if_with_atomics.hpp at line 5, boost/compute/algorithm/detail/inplace_reduce.hpp at line 5, boost/compute/algorithm/detail/insertion_sort.hpp at line 5, boost/compute/algorithm/detail/merge_path.hpp at line 5, boost/compute/algorithm/detail/merge_sort_on_cpu.hpp at line 5, boost/compute/algorithm/detail/merge_sort_on_gpu.hpp at line 5, boost/compute/algorithm/detail/merge_with_merge_path.hpp at line 5, boost/compute/algorithm/detail/radix_sort.hpp at line 5, boost/compute/algorithm/detail/random_fill.hpp at line 5, boost/compute/algorithm/detail/reduce_by_key.hpp at line 5, boost/compute/algorithm/detail/reduce_by_key_with_scan.hpp at line 5, boost/compute/algorithm/detail/reduce_on_cpu.hpp at line 5, boost/compute/algorithm/detail/reduce_on_gpu.hpp at line 5, boost/compute/algorithm/detail/scan.hpp at line 5, boost/compute/algorithm/detail/scan_on_cpu.hpp at line 5, boost/compute/algorithm/detail/scan_on_gpu.hpp at line 5, boost/compute/algorithm/detail/search_all.hpp at line 5, boost/compute/algorithm/detail/serial_accumulate.hpp at line 5, boost/compute/algorithm/detail/serial_count_if.hpp at line 5, boost/compute/algorithm/detail/serial_find_extrema.hpp at line 5, boost/compute/algorithm/detail/serial_merge.hpp at line 5, boost/compute/algorithm/detail/serial_reduce.hpp at line 5, boost/compute/algorithm/detail/serial_reduce_by_key.hpp at line 5, boost/compute/algorithm/detail/serial_scan.hpp at line 5, boost/compute/algorithm/equal.hpp at line 5, boost/compute/algorithm/equal_range.hpp at line 5, boost/compute/algorithm/exclusive_scan.hpp at line 5, boost/compute/algorithm/fill.hpp at line 5, boost/compute/algorithm/fill_n.hpp at line 5, boost/compute/algorithm/find.hpp at line 5, boost/compute/algorithm/find_end.hpp at line 5, boost/compute/algorithm/find_if.hpp at line 5, boost/compute/algorithm/find_if_not.hpp at line 5, boost/compute/algorithm/for_each.hpp at line 5, boost/compute/algorithm/for_each_n.hpp at line 5, boost/compute/algorithm/gather.hpp at line 5, boost/compute/algorithm/generate.hpp at line 5, boost/compute/algorithm/generate_n.hpp at line 5, boost/compute/algorithm/includes.hpp at line 5, boost/compute/algorithm/inclusive_scan.hpp at line 5, boost/compute/algorithm/inner_product.hpp at line 5, boost/compute/algorithm/inplace_merge.hpp at line 5, boost/compute/algorithm/iota.hpp at line 5, boost/compute/algorithm/is_partitioned.hpp at line 5, boost/compute/algorithm/is_permutation.hpp at line 5, boost/compute/algorithm/is_sorted.hpp at line 5, boost/compute/algorithm/lexicographical_compare.hpp at line 5, boost/compute/algorithm/lower_bound.hpp at line 5, boost/compute/algorithm/max_element.hpp at line 5, boost/compute/algorithm/merge.hpp at line 5, boost/compute/algorithm/min_element.hpp at line 5, boost/compute/algorithm/minmax_element.hpp at line 5, boost/compute/algorithm/mismatch.hpp at line 5, boost/compute/algorithm/next_permutation.hpp at line 5, boost/compute/algorithm/none_of.hpp at line 5, boost/compute/algorithm/nth_element.hpp at line 5, boost/compute/algorithm/partial_sum.hpp at line 5, boost/compute/algorithm/partition.hpp at line 5, boost/compute/algorithm/partition_copy.hpp at line 5, boost/compute/algorithm/partition_point.hpp at line 5, boost/compute/algorithm/prev_permutation.hpp at line 5, boost/compute/algorithm/random_shuffle.hpp at line 5, boost/compute/algorithm/reduce.hpp at line 5, boost/compute/algorithm/reduce_by_key.hpp at line 5, boost/compute/algorithm/remove.hpp at line 5, boost/compute/algorithm/remove_if.hpp at line 5, boost/compute/algorithm/replace.hpp at line 5, boost/compute/algorithm/replace_copy.hpp at line 5, boost/compute/algorithm/reverse.hpp at line 5, boost/compute/algorithm/reverse_copy.hpp at line 5, boost/compute/algorithm/rotate.hpp at line 5, boost/compute/algorithm/rotate_copy.hpp at line 5, boost/compute/algorithm/scatter.hpp at line 5, boost/compute/algorithm/scatter_if.hpp at line 5, boost/compute/algorithm/search.hpp at line 5, boost/compute/algorithm/search_n.hpp at line 5, boost/compute/algorithm/set_difference.hpp at line 5, boost/compute/algorithm/set_intersection.hpp at line 5, boost/compute/algorithm/set_symmetric_difference.hpp at line 5, boost/compute/algorithm/set_union.hpp at line 5, boost/compute/algorithm/sort.hpp at line 5, boost/compute/algorithm/sort_by_key.hpp at line 5, boost/compute/algorithm/stable_partition.hpp at line 5, boost/compute/algorithm/stable_sort.hpp at line 5, boost/compute/algorithm/stable_sort_by_key.hpp at line 5, boost/compute/algorithm/swap_ranges.hpp at line 5, boost/compute/algorithm/transform.hpp at line 5, boost/compute/algorithm/transform_if.hpp at line 5, boost/compute/algorithm/transform_reduce.hpp at line 5, boost/compute/algorithm/unique.hpp at line 5, boost/compute/algorithm/unique_copy.hpp at line 5, boost/compute/algorithm/upper_bound.hpp at line 5, boost/compute/allocator.hpp at line 5, boost/compute/allocator/buffer_allocator.hpp at line 5, boost/compute/allocator/pinned_allocator.hpp at line 5, boost/compute/async.hpp at line 5, boost/compute/async/future.hpp at line 5, boost/compute/async/wait.hpp at line 5, boost/compute/async/wait_guard.hpp at line 5, boost/compute/buffer.hpp at line 5, boost/compute/cl.hpp at line 5, boost/compute/cl_ext.hpp at line 5, boost/compute/closure.hpp at line 5, boost/compute/command_queue.hpp at line 5, boost/compute/config.hpp at line 5, boost/compute/container.hpp at line 5, boost/compute/container/array.hpp at line 5, boost/compute/container/basic_string.hpp at line 5, boost/compute/container/detail/scalar.hpp at line 5, boost/compute/container/dynamic_bitset.hpp at line 5, boost/compute/container/flat_map.hpp at line 5, boost/compute/container/flat_set.hpp at line 5, boost/compute/container/mapped_view.hpp at line 5, boost/compute/container/stack.hpp at line 5, boost/compute/container/string.hpp at line 5, boost/compute/container/valarray.hpp at line 5, boost/compute/container/vector.hpp at line 5, boost/compute/context.hpp at line 5, boost/compute/core.hpp at line 5, boost/compute/detail/assert_cl_success.hpp at line 5, boost/compute/detail/buffer_value.hpp at line 5, boost/compute/detail/device_ptr.hpp at line 5, boost/compute/detail/diagnostic.hpp at line 5, boost/compute/detail/duration.hpp at line 5, boost/compute/detail/get_object_info.hpp at line 5, boost/compute/detail/getenv.hpp at line 5, boost/compute/detail/global_static.hpp at line 5, boost/compute/detail/is_buffer_iterator.hpp at line 5, boost/compute/detail/is_contiguous_iterator.hpp at line 5, boost/compute/detail/iterator_plus_distance.hpp at line 5, boost/compute/detail/iterator_range_size.hpp at line 5, boost/compute/detail/iterator_traits.hpp at line 5, boost/compute/detail/literal.hpp at line 5, boost/compute/detail/lru_cache.hpp at line 5, boost/compute/detail/meta_kernel.hpp at line 5, boost/compute/detail/mpl_vector_to_tuple.hpp at line 5, boost/compute/detail/nvidia_compute_capability.hpp at line 5, boost/compute/detail/parameter_cache.hpp at line 5, boost/compute/detail/path.hpp at line 5, boost/compute/detail/print_range.hpp at line 5, boost/compute/detail/read_write_single_value.hpp at line 5, boost/compute/detail/sha1.hpp at line 5, boost/compute/detail/vendor.hpp at line 5, boost/compute/detail/work_size.hpp at line 5, boost/compute/device.hpp at line 5, boost/compute/event.hpp at line 5, boost/compute/exception.hpp at line 5, boost/compute/exception/context_error.hpp at line 5, boost/compute/exception/no_device_found.hpp at line 5, boost/compute/exception/opencl_error.hpp at line 5, boost/compute/exception/unsupported_extension_error.hpp at line 5, boost/compute/experimental/clamp_range.hpp at line 5, boost/compute/experimental/malloc.hpp at line 5, boost/compute/experimental/sort_by_transform.hpp at line 5, boost/compute/experimental/tabulate.hpp at line 5, boost/compute/function.hpp at line 5, boost/compute/functional.hpp at line 5, boost/compute/functional/as.hpp at line 5, boost/compute/functional/atomic.hpp at line 5, boost/compute/functional/bind.hpp at line 5, boost/compute/functional/common.hpp at line 5, boost/compute/functional/convert.hpp at line 5, boost/compute/functional/detail/macros.hpp at line 5, boost/compute/functional/detail/nvidia_ballot.hpp at line 5, boost/compute/functional/detail/nvidia_popcount.hpp at line 5, boost/compute/functional/detail/unpack.hpp at line 5, boost/compute/functional/field.hpp at line 5, boost/compute/functional/geometry.hpp at line 5, boost/compute/functional/get.hpp at line 5, boost/compute/functional/hash.hpp at line 5, boost/compute/functional/identity.hpp at line 5, boost/compute/functional/integer.hpp at line 5, boost/compute/functional/logical.hpp at line 5, boost/compute/functional/math.hpp at line 5, boost/compute/functional/operator.hpp at line 5, boost/compute/functional/popcount.hpp at line 5, boost/compute/functional/relational.hpp at line 5, boost/compute/image.hpp at line 5, boost/compute/image/image1d.hpp at line 5, boost/compute/image/image2d.hpp at line 5, boost/compute/image/image3d.hpp at line 5, boost/compute/image/image_format.hpp at line 5, boost/compute/image/image_object.hpp at line 5, boost/compute/image/image_sampler.hpp at line 5, boost/compute/image2d.hpp at line 5, boost/compute/image3d.hpp at line 5, boost/compute/image_format.hpp at line 5, boost/compute/image_sampler.hpp at line 5, boost/compute/interop/eigen.hpp at line 5, boost/compute/interop/eigen/core.hpp at line 5, boost/compute/interop/opencv.hpp at line 5, boost/compute/interop/opencv/core.hpp at line 5, boost/compute/interop/opencv/highgui.hpp at line 5, boost/compute/interop/opencv/ocl.hpp at line 5, boost/compute/interop/opengl.hpp at line 5, boost/compute/interop/opengl/acquire.hpp at line 5, boost/compute/interop/opengl/cl_gl.hpp at line 5, boost/compute/interop/opengl/cl_gl_ext.hpp at line 5, boost/compute/interop/opengl/context.hpp at line 5, boost/compute/interop/opengl/gl.hpp at line 5, boost/compute/interop/opengl/opengl_buffer.hpp at line 5, boost/compute/interop/opengl/opengl_renderbuffer.hpp at line 5, boost/compute/interop/opengl/opengl_texture.hpp at line 5, boost/compute/interop/qt.hpp at line 5, boost/compute/interop/qt/qimage.hpp at line 5, boost/compute/interop/qt/qpoint.hpp at line 5, boost/compute/interop/qt/qpointf.hpp at line 5, boost/compute/interop/qt/qtcore.hpp at line 5, boost/compute/interop/qt/qtgui.hpp at line 5, boost/compute/interop/qt/qvector.hpp at line 5, boost/compute/interop/vtk.hpp at line 5, boost/compute/interop/vtk/bounds.hpp at line 5, boost/compute/interop/vtk/data_array.hpp at line 5, boost/compute/interop/vtk/matrix4x4.hpp at line 5, boost/compute/interop/vtk/points.hpp at line 5, boost/compute/iterator.hpp at line 5, boost/compute/iterator/buffer_iterator.hpp at line 5, boost/compute/iterator/constant_buffer_iterator.hpp at line 5, boost/compute/iterator/constant_iterator.hpp at line 5, boost/compute/iterator/counting_iterator.hpp at line 5, boost/compute/iterator/detail/get_base_iterator_buffer.hpp at line 5, boost/compute/iterator/detail/swizzle_iterator.hpp at line 5, boost/compute/iterator/discard_iterator.hpp at line 5, boost/compute/iterator/function_input_iterator.hpp at line 5, boost/compute/iterator/permutation_iterator.hpp at line 5, boost/compute/iterator/strided_iterator.hpp at line 5, boost/compute/iterator/transform_iterator.hpp at line 5, boost/compute/iterator/zip_iterator.hpp at line 5, boost/compute/kernel.hpp at line 5, boost/compute/lambda.hpp at line 5, boost/compute/lambda/context.hpp at line 5, boost/compute/lambda/functional.hpp at line 5, boost/compute/lambda/get.hpp at line 5, boost/compute/lambda/make_pair.hpp at line 5, boost/compute/lambda/make_tuple.hpp at line 5, boost/compute/lambda/placeholder.hpp at line 5, boost/compute/lambda/placeholders.hpp at line 5, boost/compute/lambda/result_of.hpp at line 5, boost/compute/memory.hpp at line 5, boost/compute/memory/local_buffer.hpp at line 5, boost/compute/memory/svm_ptr.hpp at line 5, boost/compute/memory_object.hpp at line 5, boost/compute/pipe.hpp at line 5, boost/compute/platform.hpp at line 5, boost/compute/program.hpp at line 5, boost/compute/random.hpp at line 5, boost/compute/random/bernoulli_distribution.hpp at line 5, boost/compute/random/default_random_engine.hpp at line 5, boost/compute/random/discrete_distribution.hpp at line 5, boost/compute/random/linear_congruential_engine.hpp at line 5, boost/compute/random/mersenne_twister_engine.hpp at line 5, boost/compute/random/normal_distribution.hpp at line 5, boost/compute/random/threefry_engine.hpp at line 5, boost/compute/random/uniform_int_distribution.hpp at line 5, boost/compute/random/uniform_real_distribution.hpp at line 5, boost/compute/source.hpp at line 5, boost/compute/svm.hpp at line 5, boost/compute/system.hpp at line 5, boost/compute/type_traits.hpp at line 5, boost/compute/type_traits/common_type.hpp at line 5, boost/compute/type_traits/detail/capture_traits.hpp at line 5, boost/compute/type_traits/is_device_iterator.hpp at line 5, boost/compute/type_traits/is_fundamental.hpp at line 5, boost/compute/type_traits/is_vector_type.hpp at line 5, boost/compute/type_traits/make_vector_type.hpp at line 5, boost/compute/type_traits/result_of.hpp at line 5, boost/compute/type_traits/scalar_type.hpp at line 5, boost/compute/type_traits/type_definition.hpp at line 5, boost/compute/type_traits/type_name.hpp at line 5, boost/compute/type_traits/vector_size.hpp at line 5, boost/compute/types.hpp at line 5, boost/compute/types/builtin.hpp at line 5, boost/compute/types/complex.hpp at line 5, boost/compute/types/fundamental.hpp at line 5, boost/compute/types/pair.hpp at line 5, boost/compute/types/size_t.hpp at line 5, boost/compute/types/struct.hpp at line 5, boost/compute/types/tuple.hpp at line 5, boost/compute/user_event.hpp at line 5, boost/compute/utility.hpp at line 5, boost/compute/utility/dim.hpp at line 5, boost/compute/utility/extents.hpp at line 5, boost/compute/utility/invoke.hpp at line 5, boost/compute/utility/program_cache.hpp at line 5, boost/compute/utility/source.hpp at line 5, boost/compute/utility/wait_list.hpp at line 5, boost/compute/version.hpp at line 5, boost/compute/wait_list.hpp at line 5
+ License text:
+ // Distributed under the Boost Software License, Version 1.0
+ // See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/compute.hpp [4:6]
+ boost/compute/algorithm.hpp [4:6]
+ boost/compute/algorithm/accumulate.hpp [4:6]
+ boost/compute/algorithm/adjacent_difference.hpp [4:6]
+ boost/compute/algorithm/adjacent_find.hpp [4:6]
+ boost/compute/algorithm/all_of.hpp [4:6]
+ boost/compute/algorithm/any_of.hpp [4:6]
+ boost/compute/algorithm/binary_search.hpp [4:6]
+ boost/compute/algorithm/copy.hpp [4:6]
+ boost/compute/algorithm/copy_if.hpp [4:6]
+ boost/compute/algorithm/copy_n.hpp [4:6]
+ boost/compute/algorithm/count.hpp [4:6]
+ boost/compute/algorithm/count_if.hpp [4:6]
+ boost/compute/algorithm/detail/balanced_path.hpp [4:6]
+ boost/compute/algorithm/detail/binary_find.hpp [4:6]
+ boost/compute/algorithm/detail/compact.hpp [4:6]
+ boost/compute/algorithm/detail/copy_on_device.hpp [4:6]
+ boost/compute/algorithm/detail/copy_to_device.hpp [4:6]
+ boost/compute/algorithm/detail/copy_to_host.hpp [4:6]
+ boost/compute/algorithm/detail/count_if_with_ballot.hpp [4:6]
+ boost/compute/algorithm/detail/count_if_with_reduce.hpp [4:6]
+ boost/compute/algorithm/detail/count_if_with_threads.hpp [4:6]
+ boost/compute/algorithm/detail/find_extrema.hpp [4:6]
+ boost/compute/algorithm/detail/find_extrema_on_cpu.hpp [4:6]
+ boost/compute/algorithm/detail/find_extrema_with_atomics.hpp [4:6]
+ boost/compute/algorithm/detail/find_extrema_with_reduce.hpp [4:6]
+ boost/compute/algorithm/detail/find_if_with_atomics.hpp [4:6]
+ boost/compute/algorithm/detail/inplace_reduce.hpp [4:6]
+ boost/compute/algorithm/detail/insertion_sort.hpp [4:6]
+ boost/compute/algorithm/detail/merge_path.hpp [4:6]
+ boost/compute/algorithm/detail/merge_sort_on_cpu.hpp [4:6]
+ boost/compute/algorithm/detail/merge_sort_on_gpu.hpp [4:6]
+ boost/compute/algorithm/detail/merge_with_merge_path.hpp [4:6]
+ boost/compute/algorithm/detail/radix_sort.hpp [4:6]
+ boost/compute/algorithm/detail/random_fill.hpp [4:6]
+ boost/compute/algorithm/detail/reduce_by_key.hpp [4:6]
+ boost/compute/algorithm/detail/reduce_by_key_with_scan.hpp [4:6]
+ boost/compute/algorithm/detail/reduce_on_cpu.hpp [4:6]
+ boost/compute/algorithm/detail/reduce_on_gpu.hpp [4:6]
+ boost/compute/algorithm/detail/scan.hpp [4:6]
+ boost/compute/algorithm/detail/scan_on_cpu.hpp [4:6]
+ boost/compute/algorithm/detail/scan_on_gpu.hpp [4:6]
+ boost/compute/algorithm/detail/search_all.hpp [4:6]
+ boost/compute/algorithm/detail/serial_accumulate.hpp [4:6]
+ boost/compute/algorithm/detail/serial_count_if.hpp [4:6]
+ boost/compute/algorithm/detail/serial_find_extrema.hpp [4:6]
+ boost/compute/algorithm/detail/serial_merge.hpp [4:6]
+ boost/compute/algorithm/detail/serial_reduce.hpp [4:6]
+ boost/compute/algorithm/detail/serial_reduce_by_key.hpp [4:6]
+ boost/compute/algorithm/detail/serial_scan.hpp [4:6]
+ boost/compute/algorithm/equal.hpp [4:6]
+ boost/compute/algorithm/equal_range.hpp [4:6]
+ boost/compute/algorithm/exclusive_scan.hpp [4:6]
+ boost/compute/algorithm/fill.hpp [4:6]
+ boost/compute/algorithm/fill_n.hpp [4:6]
+ boost/compute/algorithm/find.hpp [4:6]
+ boost/compute/algorithm/find_end.hpp [4:6]
+ boost/compute/algorithm/find_if.hpp [4:6]
+ boost/compute/algorithm/find_if_not.hpp [4:6]
+ boost/compute/algorithm/for_each.hpp [4:6]
+ boost/compute/algorithm/for_each_n.hpp [4:6]
+ boost/compute/algorithm/gather.hpp [4:6]
+ boost/compute/algorithm/generate.hpp [4:6]
+ boost/compute/algorithm/generate_n.hpp [4:6]
+ boost/compute/algorithm/includes.hpp [4:6]
+ boost/compute/algorithm/inclusive_scan.hpp [4:6]
+ boost/compute/algorithm/inner_product.hpp [4:6]
+ boost/compute/algorithm/inplace_merge.hpp [4:6]
+ boost/compute/algorithm/iota.hpp [4:6]
+ boost/compute/algorithm/is_partitioned.hpp [4:6]
+ boost/compute/algorithm/is_permutation.hpp [4:6]
+ boost/compute/algorithm/is_sorted.hpp [4:6]
+ boost/compute/algorithm/lexicographical_compare.hpp [4:6]
+ boost/compute/algorithm/lower_bound.hpp [4:6]
+ boost/compute/algorithm/max_element.hpp [4:6]
+ boost/compute/algorithm/merge.hpp [4:6]
+ boost/compute/algorithm/min_element.hpp [4:6]
+ boost/compute/algorithm/minmax_element.hpp [4:6]
+ boost/compute/algorithm/mismatch.hpp [4:6]
+ boost/compute/algorithm/next_permutation.hpp [4:6]
+ boost/compute/algorithm/none_of.hpp [4:6]
+ boost/compute/algorithm/nth_element.hpp [4:6]
+ boost/compute/algorithm/partial_sum.hpp [4:6]
+ boost/compute/algorithm/partition.hpp [4:6]
+ boost/compute/algorithm/partition_copy.hpp [4:6]
+ boost/compute/algorithm/partition_point.hpp [4:6]
+ boost/compute/algorithm/prev_permutation.hpp [4:6]
+ boost/compute/algorithm/random_shuffle.hpp [4:6]
+ boost/compute/algorithm/reduce.hpp [4:6]
+ boost/compute/algorithm/reduce_by_key.hpp [4:6]
+ boost/compute/algorithm/remove.hpp [4:6]
+ boost/compute/algorithm/remove_if.hpp [4:6]
+ boost/compute/algorithm/replace.hpp [4:6]
+ boost/compute/algorithm/replace_copy.hpp [4:6]
+ boost/compute/algorithm/reverse.hpp [4:6]
+ boost/compute/algorithm/reverse_copy.hpp [4:6]
+ boost/compute/algorithm/rotate.hpp [4:6]
+ boost/compute/algorithm/rotate_copy.hpp [4:6]
+ boost/compute/algorithm/scatter.hpp [4:6]
+ boost/compute/algorithm/scatter_if.hpp [4:6]
+ boost/compute/algorithm/search.hpp [4:6]
+ boost/compute/algorithm/search_n.hpp [4:6]
+ boost/compute/algorithm/set_difference.hpp [4:6]
+ boost/compute/algorithm/set_intersection.hpp [4:6]
+ boost/compute/algorithm/set_symmetric_difference.hpp [4:6]
+ boost/compute/algorithm/set_union.hpp [4:6]
+ boost/compute/algorithm/sort.hpp [4:6]
+ boost/compute/algorithm/sort_by_key.hpp [4:6]
+ boost/compute/algorithm/stable_partition.hpp [4:6]
+ boost/compute/algorithm/stable_sort.hpp [4:6]
+ boost/compute/algorithm/stable_sort_by_key.hpp [4:6]
+ boost/compute/algorithm/swap_ranges.hpp [4:6]
+ boost/compute/algorithm/transform.hpp [4:6]
+ boost/compute/algorithm/transform_if.hpp [4:6]
+ boost/compute/algorithm/transform_reduce.hpp [4:6]
+ boost/compute/algorithm/unique.hpp [4:6]
+ boost/compute/algorithm/unique_copy.hpp [4:6]
+ boost/compute/algorithm/upper_bound.hpp [4:6]
+ boost/compute/allocator.hpp [4:6]
+ boost/compute/allocator/buffer_allocator.hpp [4:6]
+ boost/compute/allocator/pinned_allocator.hpp [4:6]
+ boost/compute/async.hpp [4:6]
+ boost/compute/async/future.hpp [4:6]
+ boost/compute/async/wait.hpp [4:6]
+ boost/compute/async/wait_guard.hpp [4:6]
+ boost/compute/buffer.hpp [4:6]
+ boost/compute/cl.hpp [4:6]
+ boost/compute/cl_ext.hpp [4:6]
+ boost/compute/closure.hpp [4:6]
+ boost/compute/command_queue.hpp [4:6]
+ boost/compute/config.hpp [4:6]
+ boost/compute/container.hpp [4:6]
+ boost/compute/container/array.hpp [4:6]
+ boost/compute/container/basic_string.hpp [4:6]
+ boost/compute/container/detail/scalar.hpp [4:6]
+ boost/compute/container/dynamic_bitset.hpp [4:6]
+ boost/compute/container/flat_map.hpp [4:6]
+ boost/compute/container/flat_set.hpp [4:6]
+ boost/compute/container/mapped_view.hpp [4:6]
+ boost/compute/container/stack.hpp [4:6]
+ boost/compute/container/string.hpp [4:6]
+ boost/compute/container/valarray.hpp [4:6]
+ boost/compute/container/vector.hpp [4:6]
+ boost/compute/context.hpp [4:6]
+ boost/compute/core.hpp [4:6]
+ boost/compute/detail/assert_cl_success.hpp [4:6]
+ boost/compute/detail/buffer_value.hpp [4:6]
+ boost/compute/detail/device_ptr.hpp [4:6]
+ boost/compute/detail/diagnostic.hpp [4:6]
+ boost/compute/detail/duration.hpp [4:6]
+ boost/compute/detail/get_object_info.hpp [4:6]
+ boost/compute/detail/getenv.hpp [4:6]
+ boost/compute/detail/global_static.hpp [4:6]
+ boost/compute/detail/is_buffer_iterator.hpp [4:6]
+ boost/compute/detail/is_contiguous_iterator.hpp [4:6]
+ boost/compute/detail/iterator_plus_distance.hpp [4:6]
+ boost/compute/detail/iterator_range_size.hpp [4:6]
+ boost/compute/detail/iterator_traits.hpp [4:6]
+ boost/compute/detail/literal.hpp [4:6]
+ boost/compute/detail/lru_cache.hpp [4:6]
+ boost/compute/detail/meta_kernel.hpp [4:6]
+ boost/compute/detail/mpl_vector_to_tuple.hpp [4:6]
+ boost/compute/detail/nvidia_compute_capability.hpp [4:6]
+ boost/compute/detail/parameter_cache.hpp [4:6]
+ boost/compute/detail/path.hpp [4:6]
+ boost/compute/detail/print_range.hpp [4:6]
+ boost/compute/detail/read_write_single_value.hpp [4:6]
+ boost/compute/detail/sha1.hpp [4:6]
+ boost/compute/detail/vendor.hpp [4:6]
+ boost/compute/detail/work_size.hpp [4:6]
+ boost/compute/device.hpp [4:6]
+ boost/compute/event.hpp [4:6]
+ boost/compute/exception.hpp [4:6]
+ boost/compute/exception/context_error.hpp [4:6]
+ boost/compute/exception/no_device_found.hpp [4:6]
+ boost/compute/exception/opencl_error.hpp [4:6]
+ boost/compute/exception/unsupported_extension_error.hpp [4:6]
+ boost/compute/experimental/clamp_range.hpp [4:6]
+ boost/compute/experimental/malloc.hpp [4:6]
+ boost/compute/experimental/sort_by_transform.hpp [4:6]
+ boost/compute/experimental/tabulate.hpp [4:6]
+ boost/compute/function.hpp [4:6]
+ boost/compute/functional.hpp [4:6]
+ boost/compute/functional/as.hpp [4:6]
+ boost/compute/functional/atomic.hpp [4:6]
+ boost/compute/functional/bind.hpp [4:6]
+ boost/compute/functional/common.hpp [4:6]
+ boost/compute/functional/convert.hpp [4:6]
+ boost/compute/functional/detail/macros.hpp [4:6]
+ boost/compute/functional/detail/nvidia_ballot.hpp [4:6]
+ boost/compute/functional/detail/nvidia_popcount.hpp [4:6]
+ boost/compute/functional/detail/unpack.hpp [4:6]
+ boost/compute/functional/field.hpp [4:6]
+ boost/compute/functional/geometry.hpp [4:6]
+ boost/compute/functional/get.hpp [4:6]
+ boost/compute/functional/hash.hpp [4:6]
+ boost/compute/functional/identity.hpp [4:6]
+ boost/compute/functional/integer.hpp [4:6]
+ boost/compute/functional/logical.hpp [4:6]
+ boost/compute/functional/math.hpp [4:6]
+ boost/compute/functional/operator.hpp [4:6]
+ boost/compute/functional/popcount.hpp [4:6]
+ boost/compute/functional/relational.hpp [4:6]
+ boost/compute/image.hpp [4:6]
+ boost/compute/image/image1d.hpp [4:6]
+ boost/compute/image/image2d.hpp [4:6]
+ boost/compute/image/image3d.hpp [4:6]
+ boost/compute/image/image_format.hpp [4:6]
+ boost/compute/image/image_object.hpp [4:6]
+ boost/compute/image/image_sampler.hpp [4:6]
+ boost/compute/image2d.hpp [4:6]
+ boost/compute/image3d.hpp [4:6]
+ boost/compute/image_format.hpp [4:6]
+ boost/compute/image_sampler.hpp [4:6]
+ boost/compute/interop/eigen.hpp [4:6]
+ boost/compute/interop/eigen/core.hpp [4:6]
+ boost/compute/interop/opencv.hpp [4:6]
+ boost/compute/interop/opencv/core.hpp [4:6]
+ boost/compute/interop/opencv/highgui.hpp [4:6]
+ boost/compute/interop/opencv/ocl.hpp [4:6]
+ boost/compute/interop/opengl.hpp [4:6]
+ boost/compute/interop/opengl/acquire.hpp [4:6]
+ boost/compute/interop/opengl/cl_gl.hpp [4:6]
+ boost/compute/interop/opengl/cl_gl_ext.hpp [4:6]
+ boost/compute/interop/opengl/context.hpp [4:6]
+ boost/compute/interop/opengl/gl.hpp [4:6]
+ boost/compute/interop/opengl/opengl_buffer.hpp [4:6]
+ boost/compute/interop/opengl/opengl_renderbuffer.hpp [4:6]
+ boost/compute/interop/opengl/opengl_texture.hpp [4:6]
+ boost/compute/interop/qt.hpp [4:6]
+ boost/compute/interop/qt/qimage.hpp [4:6]
+ boost/compute/interop/qt/qpoint.hpp [4:6]
+ boost/compute/interop/qt/qpointf.hpp [4:6]
+ boost/compute/interop/qt/qtcore.hpp [4:6]
+ boost/compute/interop/qt/qtgui.hpp [4:6]
+ boost/compute/interop/qt/qvector.hpp [4:6]
+ boost/compute/interop/vtk.hpp [4:6]
+ boost/compute/interop/vtk/bounds.hpp [4:6]
+ boost/compute/interop/vtk/data_array.hpp [4:6]
+ boost/compute/interop/vtk/matrix4x4.hpp [4:6]
+ boost/compute/interop/vtk/points.hpp [4:6]
+ boost/compute/iterator.hpp [4:6]
+ boost/compute/iterator/buffer_iterator.hpp [4:6]
+ boost/compute/iterator/constant_buffer_iterator.hpp [4:6]
+ boost/compute/iterator/constant_iterator.hpp [4:6]
+ boost/compute/iterator/counting_iterator.hpp [4:6]
+ boost/compute/iterator/detail/get_base_iterator_buffer.hpp [4:6]
+ boost/compute/iterator/detail/swizzle_iterator.hpp [4:6]
+ boost/compute/iterator/discard_iterator.hpp [4:6]
+ boost/compute/iterator/function_input_iterator.hpp [4:6]
+ boost/compute/iterator/permutation_iterator.hpp [4:6]
+ boost/compute/iterator/strided_iterator.hpp [4:6]
+ boost/compute/iterator/transform_iterator.hpp [4:6]
+ boost/compute/iterator/zip_iterator.hpp [4:6]
+ boost/compute/kernel.hpp [4:6]
+ boost/compute/lambda.hpp [4:6]
+ boost/compute/lambda/context.hpp [4:6]
+ boost/compute/lambda/functional.hpp [4:6]
+ boost/compute/lambda/get.hpp [4:6]
+ boost/compute/lambda/make_pair.hpp [4:6]
+ boost/compute/lambda/make_tuple.hpp [4:6]
+ boost/compute/lambda/placeholder.hpp [4:6]
+ boost/compute/lambda/placeholders.hpp [4:6]
+ boost/compute/lambda/result_of.hpp [4:6]
+ boost/compute/memory.hpp [4:6]
+ boost/compute/memory/local_buffer.hpp [4:6]
+ boost/compute/memory/svm_ptr.hpp [4:6]
+ boost/compute/memory_object.hpp [4:6]
+ boost/compute/pipe.hpp [4:6]
+ boost/compute/platform.hpp [4:6]
+ boost/compute/program.hpp [4:6]
+ boost/compute/random.hpp [4:6]
+ boost/compute/random/bernoulli_distribution.hpp [4:6]
+ boost/compute/random/default_random_engine.hpp [4:6]
+ boost/compute/random/discrete_distribution.hpp [4:6]
+ boost/compute/random/linear_congruential_engine.hpp [4:6]
+ boost/compute/random/mersenne_twister_engine.hpp [4:6]
+ boost/compute/random/normal_distribution.hpp [4:6]
+ boost/compute/random/threefry_engine.hpp [4:6]
+ boost/compute/random/uniform_int_distribution.hpp [4:6]
+ boost/compute/random/uniform_real_distribution.hpp [4:6]
+ boost/compute/source.hpp [4:6]
+ boost/compute/svm.hpp [4:6]
+ boost/compute/system.hpp [4:6]
+ boost/compute/type_traits.hpp [4:6]
+ boost/compute/type_traits/common_type.hpp [4:6]
+ boost/compute/type_traits/detail/capture_traits.hpp [4:6]
+ boost/compute/type_traits/is_device_iterator.hpp [4:6]
+ boost/compute/type_traits/is_fundamental.hpp [4:6]
+ boost/compute/type_traits/is_vector_type.hpp [4:6]
+ boost/compute/type_traits/make_vector_type.hpp [4:6]
+ boost/compute/type_traits/result_of.hpp [4:6]
+ boost/compute/type_traits/scalar_type.hpp [4:6]
+ boost/compute/type_traits/type_definition.hpp [4:6]
+ boost/compute/type_traits/type_name.hpp [4:6]
+ boost/compute/type_traits/vector_size.hpp [4:6]
+ boost/compute/types.hpp [4:6]
+ boost/compute/types/builtin.hpp [4:6]
+ boost/compute/types/complex.hpp [4:6]
+ boost/compute/types/fundamental.hpp [4:6]
+ boost/compute/types/pair.hpp [4:6]
+ boost/compute/types/size_t.hpp [4:6]
+ boost/compute/types/struct.hpp [4:6]
+ boost/compute/types/tuple.hpp [4:6]
+ boost/compute/user_event.hpp [4:6]
+ boost/compute/utility.hpp [4:6]
+ boost/compute/utility/dim.hpp [4:6]
+ boost/compute/utility/extents.hpp [4:6]
+ boost/compute/utility/invoke.hpp [4:6]
+ boost/compute/utility/program_cache.hpp [4:6]
+ boost/compute/utility/source.hpp [4:6]
+ boost/compute/utility/wait_list.hpp [4:6]
+ boost/compute/version.hpp [4:6]
+ boost/compute/wait_list.hpp [4:6]
+
+KEEP BSL-1.0 ee822d50ddfbcc656f14b57a196ccef9
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/functional/overloaded_function.hpp at line 4, boost/functional/overloaded_function/config.hpp at line 4, boost/functional/overloaded_function/detail/base.hpp at line 4, boost/functional/overloaded_function/detail/function_type.hpp at line 4, boost/local_function.hpp at line 4, boost/local_function/aux_/add_pointed_const.hpp at line 4, boost/local_function/aux_/function.hpp at line 4, boost/local_function/aux_/macro/code_/bind.hpp at line 4, boost/local_function/aux_/macro/code_/functor.hpp at line 4, boost/local_function/aux_/macro/code_/result.hpp at line 4, boost/local_function/aux_/macro/decl.hpp at line 4, boost/local_function/aux_/macro/name.hpp at line 4, boost/local_function/aux_/macro/typeof.hpp at line 4, boost/local_function/aux_/member.hpp at line 4, boost/local_function/aux_/nobind.hpp at line 4, boost/local_function/aux_/preprocessor/traits/bind.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/append.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/index.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/nil.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/set_error.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/validate.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/validate_/return_count.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_/validate_/this_count.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_binds.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_const_binds.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_error.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_params.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_returns.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/any_bind_type.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/sign.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/validate.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/defaults.hpp at line 4, boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/this.hpp at line 4, boost/local_function/aux_/preprocessor/traits/param.hpp at line 4, boost/local_function/aux_/symbol.hpp at line 4, boost/local_function/config.hpp at line 4, boost/local_function/detail/preprocessor/keyword/auto.hpp at line 4, boost/local_function/detail/preprocessor/keyword/bind.hpp at line 4, boost/local_function/detail/preprocessor/keyword/const.hpp at line 4, boost/local_function/detail/preprocessor/keyword/const_bind.hpp at line 4, boost/local_function/detail/preprocessor/keyword/default.hpp at line 4, boost/local_function/detail/preprocessor/keyword/facility/add.hpp at line 4, boost/local_function/detail/preprocessor/keyword/facility/is.hpp at line 4, boost/local_function/detail/preprocessor/keyword/facility/remove.hpp at line 4, boost/local_function/detail/preprocessor/keyword/inline.hpp at line 4, boost/local_function/detail/preprocessor/keyword/recursive.hpp at line 4, boost/local_function/detail/preprocessor/keyword/register.hpp at line 4, boost/local_function/detail/preprocessor/keyword/return.hpp at line 4, boost/local_function/detail/preprocessor/keyword/this.hpp at line 4, boost/local_function/detail/preprocessor/keyword/thisunderscore.hpp at line 4, boost/local_function/detail/preprocessor/keyword/void.hpp at line 4, boost/local_function/detail/preprocessor/line_counter.hpp at line 4, boost/utility/identity_type.hpp at line 4
+ License text:
+ // Distributed under the Boost Software License, Version 1.0
+ // (see accompanying file LICENSE_1_0.txt or a copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/functional/overloaded_function.hpp [3:5]
+ boost/functional/overloaded_function/config.hpp [3:5]
+ boost/functional/overloaded_function/detail/base.hpp [3:5]
+ boost/functional/overloaded_function/detail/function_type.hpp [3:5]
+ boost/local_function.hpp [3:5]
+ boost/local_function/aux_/add_pointed_const.hpp [3:5]
+ boost/local_function/aux_/function.hpp [3:5]
+ boost/local_function/aux_/macro/code_/bind.hpp [3:5]
+ boost/local_function/aux_/macro/code_/functor.hpp [3:5]
+ boost/local_function/aux_/macro/code_/result.hpp [3:5]
+ boost/local_function/aux_/macro/decl.hpp [3:5]
+ boost/local_function/aux_/macro/name.hpp [3:5]
+ boost/local_function/aux_/macro/typeof.hpp [3:5]
+ boost/local_function/aux_/member.hpp [3:5]
+ boost/local_function/aux_/nobind.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/bind.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_/append.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_/index.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_/nil.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_/set_error.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_/validate.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_/validate_/return_count.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_/validate_/this_count.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_binds.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_const_binds.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_error.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_params.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_returns.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/any_bind_type.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/sign.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/validate.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/defaults.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/decl_sign_/validate_/this.hpp [3:5]
+ boost/local_function/aux_/preprocessor/traits/param.hpp [3:5]
+ boost/local_function/aux_/symbol.hpp [3:5]
+ boost/local_function/config.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/auto.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/bind.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/const.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/const_bind.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/default.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/facility/add.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/facility/is.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/facility/remove.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/inline.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/recursive.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/register.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/return.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/this.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/thisunderscore.hpp [3:5]
+ boost/local_function/detail/preprocessor/keyword/void.hpp [3:5]
+ boost/local_function/detail/preprocessor/line_counter.hpp [3:5]
+ boost/utility/identity_type.hpp [3:5]
+
+KEEP BSL-1.0 eeda69591b5957fb1dbf0286c30acb85
+BELONGS ya.make
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/align/align.hpp [5:5]
+ boost/align/align_down.hpp [5:5]
+ boost/align/align_up.hpp [5:5]
+ boost/align/alignment_of.hpp [5:5]
+ boost/align/alignment_of_forward.hpp [5:5]
+ boost/align/detail/addressof.hpp [5:5]
+ boost/align/detail/align.hpp [5:5]
+ boost/align/detail/align_cxx11.hpp [5:5]
+ boost/align/detail/align_down.hpp [5:5]
+ boost/align/detail/align_up.hpp [5:5]
+ boost/align/detail/alignment_of.hpp [5:5]
+ boost/align/detail/alignment_of_clang.hpp [5:5]
+ boost/align/detail/alignment_of_codegear.hpp [5:5]
+ boost/align/detail/alignment_of_cxx11.hpp [5:5]
+ boost/align/detail/alignment_of_gcc.hpp [5:5]
+ boost/align/detail/alignment_of_msvc.hpp [5:5]
+ boost/align/detail/element_type.hpp [5:5]
+ boost/align/detail/integral_constant.hpp [5:5]
+ boost/align/detail/is_alignment.hpp [5:5]
+ boost/align/detail/is_alignment_constant.hpp [5:5]
+ boost/align/detail/max_align.hpp [5:5]
+ boost/align/detail/max_objects.hpp [5:5]
+ boost/align/detail/max_size.hpp [5:5]
+ boost/align/detail/min_size.hpp [5:5]
+ boost/core/pointer_traits.hpp [5:5]
+ boost/make_unique.hpp [5:5]
+ boost/smart_ptr/allocate_local_shared_array.hpp [5:5]
+ boost/smart_ptr/make_local_shared_array.hpp [6:6]
+ boost/smart_ptr/make_shared_array.hpp [5:5]
+ boost/smart_ptr/make_unique.hpp [5:5]
+
+KEEP BSL-1.0 ef2bc99a1661a97a27956252dfd290a1
+BELONGS libs/serialization/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/serialization/src/void_cast.cpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 94.74
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/serialization/src/void_cast.cpp [5:10]
+
+KEEP BSL-1.0 f0421be5a87b237d5f722433355f7a9e
+BELONGS libs/filesystem/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/interprocess/errors.hpp at line 16, libs/filesystem/src/portability.cpp at line 5
+ License text:
+ // Use, modification, and distribution is subject to the Boost Software
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+ // at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/errors.hpp [15:17]
+ libs/filesystem/src/portability.cpp [4:6]
+
+KEEP BSL-1.0 f061e3fef6f6b3386bb5d0db71ea0724
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: LicenseRef-scancode-boost-original
+ Score : 100.00
+ Match type : TEXT
+ Links : http://boost.org, https://github.com/boostorg/rational/blob/0fe0beca5397c812c4f85a7de0d0769de59e12e0/include/boost/rational.hpp, https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/boost-original.LICENSE
+ Files with this license:
+ boost/intrusive/splaytree_algorithms.hpp [23:26]
+
+KEEP BSL-1.0 f20f9faff5dff60d6b8844771d700dd5
+BELONGS libs/random/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/array.hpp at line 13, boost/checked_delete.hpp at line 5, boost/detail/lightweight_test.hpp at line 5, boost/detail/no_exceptions_support.hpp at line 5, boost/detail/scoped_enum_emulation.hpp at line 5, boost/graph/bipartite.hpp at line 8, boost/integer_traits.hpp at line 5, boost/noncopyable.hpp at line 5, boost/nondet_random.hpp at line 5, boost/numeric/ublas/operation/begin.hpp at line 11, boost/numeric/ublas/operation/c_array.hpp at line 11, boost/numeric/ublas/operation/end.hpp at line 11, boost/numeric/ublas/operation/num_columns.hpp at line 11, boost/numeric/ublas/operation/num_rows.hpp at line 11, boost/numeric/ublas/operation/size.hpp at line 9, boost/numeric/ublas/operations.hpp at line 11, boost/numeric/ublas/tags.hpp at line 11, boost/numeric/ublas/traits/c_array.hpp at line 11, boost/numeric/ublas/traits/const_iterator_type.hpp at line 11, boost/numeric/ublas/traits/iterator_type.hpp at line 11, boost/random.hpp at line 5, boost/random/beta_distribution.hpp at line 5, boost/random/binomial_distribution.hpp at line 5, boost/random/chi_squared_distribution.hpp at line 5, boost/random/detail/auto_link.hpp at line 5, boost/random/detail/config.hpp at line 5, boost/random/detail/disable_warnings.hpp at line 5, boost/random/detail/enable_warnings.hpp at line 5, boost/random/detail/generator_bits.hpp at line 5, boost/random/detail/generator_seed_seq.hpp at line 6, boost/random/detail/int_float_pair.hpp at line 6, boost/random/detail/integer_log2.hpp at line 5, boost/random/detail/large_arithmetic.hpp at line 5, boost/random/detail/operators.hpp at line 5, boost/random/detail/polynomial.hpp at line 5, boost/random/detail/ptr_helper.hpp at line 5, boost/random/detail/seed.hpp at line 5, boost/random/detail/seed_impl.hpp at line 5, boost/random/detail/signed_unsigned_tools.hpp at line 5, boost/random/detail/uniform_int_float.hpp at line 6, boost/random/detail/vector_io.hpp at line 5, boost/random/discrete_distribution.hpp at line 5, boost/random/extreme_value_distribution.hpp at line 5, boost/random/fisher_f_distribution.hpp at line 5, boost/random/gamma_distribution.hpp at line 6, boost/random/generate_canonical.hpp at line 5, boost/random/hyperexponential_distribution.hpp at line 5, boost/random/independent_bits.hpp at line 5, boost/random/laplace_distribution.hpp at line 5, boost/random/linear_feedback_shift.hpp at line 6, boost/random/negative_binomial_distribution.hpp at line 5, boost/random/non_central_chi_squared_distribution.hpp at line 6, boost/random/piecewise_constant_distribution.hpp at line 5, boost/random/piecewise_linear_distribution.hpp at line 5, boost/random/poisson_distribution.hpp at line 6, boost/random/random_device.hpp at line 6, boost/random/seed_seq.hpp at line 5, boost/random/shuffle_order.hpp at line 6, boost/random/student_t_distribution.hpp at line 5, boost/random/taus88.hpp at line 6, boost/random/traits.hpp at line 5, boost/random/uniform_real_distribution.hpp at line 6, boost/random/variate_generator.hpp at line 6, boost/random/weibull_distribution.hpp at line 5, boost/random/xor_combine.hpp at line 5, boost/ref.hpp at line 5, boost/signals/detail/config.hpp at line 10, boost/swap.hpp at line 5, boost/utility/addressof.hpp at line 5, boost/utility/enable_if.hpp at line 5, boost/utility/explicit_operator_bool.hpp at line 5, boost/utility/swap.hpp at line 5, libs/random/src/random_device.cpp at line 6
+ License text:
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/array.hpp [12:14]
+ boost/checked_delete.hpp [4:6]
+ boost/detail/lightweight_test.hpp [4:6]
+ boost/detail/no_exceptions_support.hpp [4:6]
+ boost/detail/scoped_enum_emulation.hpp [4:6]
+ boost/graph/bipartite.hpp [7:9]
+ boost/integer_traits.hpp [4:6]
+ boost/noncopyable.hpp [4:6]
+ boost/nondet_random.hpp [4:6]
+ boost/numeric/ublas/operation/begin.hpp [10:12]
+ boost/numeric/ublas/operation/c_array.hpp [10:12]
+ boost/numeric/ublas/operation/end.hpp [10:12]
+ boost/numeric/ublas/operation/num_columns.hpp [10:12]
+ boost/numeric/ublas/operation/num_rows.hpp [10:12]
+ boost/numeric/ublas/operation/size.hpp [8:10]
+ boost/numeric/ublas/operations.hpp [10:12]
+ boost/numeric/ublas/tags.hpp [10:12]
+ boost/numeric/ublas/traits/c_array.hpp [10:12]
+ boost/numeric/ublas/traits/const_iterator_type.hpp [10:12]
+ boost/numeric/ublas/traits/iterator_type.hpp [10:12]
+ boost/random.hpp [4:6]
+ boost/random/beta_distribution.hpp [4:6]
+ boost/random/binomial_distribution.hpp [4:6]
+ boost/random/chi_squared_distribution.hpp [4:6]
+ boost/random/detail/auto_link.hpp [4:6]
+ boost/random/detail/config.hpp [4:6]
+ boost/random/detail/disable_warnings.hpp [4:6]
+ boost/random/detail/enable_warnings.hpp [4:6]
+ boost/random/detail/generator_bits.hpp [4:6]
+ boost/random/detail/generator_seed_seq.hpp [5:7]
+ boost/random/detail/int_float_pair.hpp [5:7]
+ boost/random/detail/integer_log2.hpp [4:6]
+ boost/random/detail/large_arithmetic.hpp [4:6]
+ boost/random/detail/operators.hpp [4:6]
+ boost/random/detail/polynomial.hpp [4:6]
+ boost/random/detail/ptr_helper.hpp [4:6]
+ boost/random/detail/seed.hpp [4:6]
+ boost/random/detail/seed_impl.hpp [4:6]
+ boost/random/detail/signed_unsigned_tools.hpp [4:6]
+ boost/random/detail/uniform_int_float.hpp [5:7]
+ boost/random/detail/vector_io.hpp [4:6]
+ boost/random/discrete_distribution.hpp [4:6]
+ boost/random/extreme_value_distribution.hpp [4:6]
+ boost/random/fisher_f_distribution.hpp [4:6]
+ boost/random/gamma_distribution.hpp [5:7]
+ boost/random/generate_canonical.hpp [4:6]
+ boost/random/hyperexponential_distribution.hpp [4:6]
+ boost/random/independent_bits.hpp [4:6]
+ boost/random/laplace_distribution.hpp [4:6]
+ boost/random/linear_feedback_shift.hpp [5:7]
+ boost/random/negative_binomial_distribution.hpp [4:6]
+ boost/random/non_central_chi_squared_distribution.hpp [5:7]
+ boost/random/piecewise_constant_distribution.hpp [4:6]
+ boost/random/piecewise_linear_distribution.hpp [4:6]
+ boost/random/poisson_distribution.hpp [5:7]
+ boost/random/random_device.hpp [5:7]
+ boost/random/seed_seq.hpp [4:6]
+ boost/random/shuffle_order.hpp [5:7]
+ boost/random/student_t_distribution.hpp [4:6]
+ boost/random/taus88.hpp [5:7]
+ boost/random/traits.hpp [4:6]
+ boost/random/uniform_real_distribution.hpp [5:7]
+ boost/random/variate_generator.hpp [5:7]
+ boost/random/weibull_distribution.hpp [4:6]
+ boost/random/xor_combine.hpp [4:6]
+ boost/ref.hpp [4:6]
+ boost/signals/detail/config.hpp [9:11]
+ boost/swap.hpp [4:6]
+ boost/utility/addressof.hpp [4:6]
+ boost/utility/enable_if.hpp [4:6]
+ boost/utility/explicit_operator_bool.hpp [4:6]
+ boost/utility/swap.hpp [4:6]
+ libs/random/src/random_device.cpp [5:7]
+
+KEEP BSL-1.0 f262303c7ce4d7bb32412cf8e6aa42e5
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/algorithm/string.hpp at line 6, boost/algorithm/string/case_conv.hpp at line 6, boost/algorithm/string/classification.hpp at line 6, boost/algorithm/string/compare.hpp at line 6, boost/algorithm/string/concept.hpp at line 6, boost/algorithm/string/config.hpp at line 6, boost/algorithm/string/constants.hpp at line 6, boost/algorithm/string/detail/case_conv.hpp at line 6, boost/algorithm/string/detail/classification.hpp at line 6, boost/algorithm/string/detail/find_format.hpp at line 6, boost/algorithm/string/detail/find_format_all.hpp at line 6, boost/algorithm/string/detail/find_format_store.hpp at line 6, boost/algorithm/string/detail/find_iterator.hpp at line 6, boost/algorithm/string/detail/finder.hpp at line 6, boost/algorithm/string/detail/finder_regex.hpp at line 6, boost/algorithm/string/detail/formatter_regex.hpp at line 6, boost/algorithm/string/detail/predicate.hpp at line 6, boost/algorithm/string/detail/replace_storage.hpp at line 6, boost/algorithm/string/detail/sequence.hpp at line 6, boost/algorithm/string/detail/trim.hpp at line 6, boost/algorithm/string/detail/util.hpp at line 6, boost/algorithm/string/erase.hpp at line 6, boost/algorithm/string/find.hpp at line 6, boost/algorithm/string/find_format.hpp at line 6, boost/algorithm/string/find_iterator.hpp at line 6, boost/algorithm/string/finder.hpp at line 6, boost/algorithm/string/formatter.hpp at line 6, boost/algorithm/string/iter_find.hpp at line 6, boost/algorithm/string/join.hpp at line 6, boost/algorithm/string/predicate.hpp at line 6, boost/algorithm/string/predicate_facade.hpp at line 6, boost/algorithm/string/regex.hpp at line 6, boost/algorithm/string/regex_find_format.hpp at line 6, boost/algorithm/string/replace.hpp at line 6, boost/algorithm/string/sequence_traits.hpp at line 6, boost/algorithm/string/split.hpp at line 6, boost/algorithm/string/std/list_traits.hpp at line 6, boost/algorithm/string/std/rope_traits.hpp at line 6, boost/algorithm/string/std/slist_traits.hpp at line 6, boost/algorithm/string/std/string_traits.hpp at line 6, boost/algorithm/string/std_containers_traits.hpp at line 6, boost/algorithm/string/trim.hpp at line 6, boost/algorithm/string/trim_all.hpp at line 6, boost/algorithm/string/yes_no_type.hpp at line 6, boost/algorithm/string_regex.hpp at line 6
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/algorithm/string.hpp [5:9]
+ boost/algorithm/string/case_conv.hpp [5:9]
+ boost/algorithm/string/classification.hpp [5:9]
+ boost/algorithm/string/compare.hpp [5:9]
+ boost/algorithm/string/concept.hpp [5:9]
+ boost/algorithm/string/config.hpp [5:9]
+ boost/algorithm/string/constants.hpp [5:9]
+ boost/algorithm/string/detail/case_conv.hpp [5:9]
+ boost/algorithm/string/detail/classification.hpp [5:9]
+ boost/algorithm/string/detail/find_format.hpp [5:9]
+ boost/algorithm/string/detail/find_format_all.hpp [5:9]
+ boost/algorithm/string/detail/find_format_store.hpp [5:9]
+ boost/algorithm/string/detail/find_iterator.hpp [5:9]
+ boost/algorithm/string/detail/finder.hpp [5:9]
+ boost/algorithm/string/detail/finder_regex.hpp [5:9]
+ boost/algorithm/string/detail/formatter_regex.hpp [5:9]
+ boost/algorithm/string/detail/predicate.hpp [5:9]
+ boost/algorithm/string/detail/replace_storage.hpp [5:9]
+ boost/algorithm/string/detail/sequence.hpp [5:9]
+ boost/algorithm/string/detail/trim.hpp [5:9]
+ boost/algorithm/string/detail/util.hpp [5:9]
+ boost/algorithm/string/erase.hpp [5:9]
+ boost/algorithm/string/find.hpp [5:9]
+ boost/algorithm/string/find_format.hpp [5:9]
+ boost/algorithm/string/find_iterator.hpp [5:9]
+ boost/algorithm/string/finder.hpp [5:9]
+ boost/algorithm/string/formatter.hpp [5:9]
+ boost/algorithm/string/iter_find.hpp [5:9]
+ boost/algorithm/string/join.hpp [5:9]
+ boost/algorithm/string/predicate.hpp [5:9]
+ boost/algorithm/string/predicate_facade.hpp [5:9]
+ boost/algorithm/string/regex.hpp [5:9]
+ boost/algorithm/string/regex_find_format.hpp [5:9]
+ boost/algorithm/string/replace.hpp [5:9]
+ boost/algorithm/string/sequence_traits.hpp [5:9]
+ boost/algorithm/string/split.hpp [5:9]
+ boost/algorithm/string/std/list_traits.hpp [5:9]
+ boost/algorithm/string/std/rope_traits.hpp [5:9]
+ boost/algorithm/string/std/slist_traits.hpp [5:9]
+ boost/algorithm/string/std/string_traits.hpp [5:9]
+ boost/algorithm/string/std_containers_traits.hpp [5:9]
+ boost/algorithm/string/trim.hpp [5:9]
+ boost/algorithm/string/trim_all.hpp [5:9]
+ boost/algorithm/string/yes_no_type.hpp [5:9]
+ boost/algorithm/string_regex.hpp [5:9]
+
+KEEP BSL-1.0 f2a214a077783d66d0e315e633d467a7
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/polygon/detail/boolean_op.hpp at line 5, boost/polygon/detail/boolean_op_45.hpp at line 5, boost/polygon/detail/iterator_compact_to_points.hpp at line 5, boost/polygon/detail/iterator_geometry_to_set.hpp at line 5, boost/polygon/detail/iterator_points_to_compact.hpp at line 5, boost/polygon/detail/max_cover.hpp at line 5, boost/polygon/detail/minkowski.hpp at line 5, boost/polygon/detail/polygon_45_set_view.hpp at line 5, boost/polygon/detail/polygon_45_touch.hpp at line 5, boost/polygon/detail/polygon_90_set_view.hpp at line 5, boost/polygon/detail/polygon_90_touch.hpp at line 5, boost/polygon/detail/polygon_set_view.hpp at line 5, boost/polygon/detail/polygon_sort_adaptor.hpp at line 5, boost/polygon/detail/property_merge.hpp at line 5, boost/polygon/detail/property_merge_45.hpp at line 5, boost/polygon/detail/scan_arbitrary.hpp at line 5, boost/polygon/gmp_override.hpp at line 5, boost/polygon/gtl.hpp at line 5, boost/polygon/isotropy.hpp at line 5, boost/polygon/polygon.hpp at line 5, boost/polygon/polygon_45_data.hpp at line 5, boost/polygon/polygon_45_set_concept.hpp at line 5, boost/polygon/polygon_45_set_data.hpp at line 5, boost/polygon/polygon_45_set_traits.hpp at line 5, boost/polygon/polygon_45_with_holes_data.hpp at line 5, boost/polygon/polygon_90_data.hpp at line 5, boost/polygon/polygon_90_set_concept.hpp at line 5, boost/polygon/polygon_90_set_data.hpp at line 5, boost/polygon/polygon_90_set_traits.hpp at line 5, boost/polygon/polygon_90_with_holes_data.hpp at line 5, boost/polygon/polygon_data.hpp at line 5, boost/polygon/polygon_set_concept.hpp at line 5, boost/polygon/polygon_set_data.hpp at line 5, boost/polygon/polygon_set_traits.hpp at line 5, boost/polygon/polygon_traits.hpp at line 5, boost/polygon/polygon_with_holes_data.hpp at line 5, boost/polygon/rectangle_concept.hpp at line 5, boost/polygon/rectangle_data.hpp at line 5, boost/polygon/rectangle_traits.hpp at line 5, boost/polygon/segment_utils.hpp at line 5
+ License text:
+ Use, modification and distribution are subject to the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/polygon/detail/boolean_op.hpp [4:6]
+ boost/polygon/detail/boolean_op_45.hpp [4:6]
+ boost/polygon/detail/iterator_compact_to_points.hpp [4:6]
+ boost/polygon/detail/iterator_geometry_to_set.hpp [4:6]
+ boost/polygon/detail/iterator_points_to_compact.hpp [4:6]
+ boost/polygon/detail/max_cover.hpp [4:6]
+ boost/polygon/detail/minkowski.hpp [4:6]
+ boost/polygon/detail/polygon_45_set_view.hpp [4:6]
+ boost/polygon/detail/polygon_45_touch.hpp [4:6]
+ boost/polygon/detail/polygon_90_set_view.hpp [4:6]
+ boost/polygon/detail/polygon_90_touch.hpp [4:6]
+ boost/polygon/detail/polygon_set_view.hpp [4:6]
+ boost/polygon/detail/polygon_sort_adaptor.hpp [4:6]
+ boost/polygon/detail/property_merge.hpp [4:6]
+ boost/polygon/detail/property_merge_45.hpp [4:6]
+ boost/polygon/detail/scan_arbitrary.hpp [4:6]
+ boost/polygon/gmp_override.hpp [4:6]
+ boost/polygon/gtl.hpp [4:6]
+ boost/polygon/isotropy.hpp [4:6]
+ boost/polygon/polygon.hpp [4:6]
+ boost/polygon/polygon_45_data.hpp [4:6]
+ boost/polygon/polygon_45_set_concept.hpp [4:6]
+ boost/polygon/polygon_45_set_data.hpp [4:6]
+ boost/polygon/polygon_45_set_traits.hpp [4:6]
+ boost/polygon/polygon_45_with_holes_data.hpp [4:6]
+ boost/polygon/polygon_90_data.hpp [4:6]
+ boost/polygon/polygon_90_set_concept.hpp [4:6]
+ boost/polygon/polygon_90_set_data.hpp [4:6]
+ boost/polygon/polygon_90_set_traits.hpp [4:6]
+ boost/polygon/polygon_90_with_holes_data.hpp [4:6]
+ boost/polygon/polygon_data.hpp [4:6]
+ boost/polygon/polygon_set_concept.hpp [4:6]
+ boost/polygon/polygon_set_data.hpp [4:6]
+ boost/polygon/polygon_set_traits.hpp [4:6]
+ boost/polygon/polygon_traits.hpp [4:6]
+ boost/polygon/polygon_with_holes_data.hpp [4:6]
+ boost/polygon/rectangle_concept.hpp [4:6]
+ boost/polygon/rectangle_data.hpp [4:6]
+ boost/polygon/rectangle_traits.hpp [4:6]
+ boost/polygon/segment_utils.hpp [4:6]
+
+KEEP BSL-1.0 f328b5d41ed9ab62066d53579e348e68
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/detail/is_sorted.hpp at line 5, boost/container/node_handle.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2016-2016. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/detail/is_sorted.hpp [3:5]
+ boost/container/node_handle.hpp [3:5]
+
+KEEP BSL-1.0 f722943fafba4cf1dfeba6f5929ae35d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/container/slist.hpp at line 5
+ License text:
+ // (C) Copyright Ion Gaztanaga 2004-2015. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/container/slist.hpp [3:5]
+
+KEEP BSL-1.0 f7fc7cf8401fcdc9ee199dd8d85831fb
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/cpp_bin_float/io.hpp at line 4, boost/multiprecision/cpp_int.hpp at line 4, boost/multiprecision/cpp_int/add.hpp at line 4, boost/multiprecision/cpp_int/bitwise.hpp at line 4, boost/multiprecision/cpp_int/cpp_int_config.hpp at line 4, boost/multiprecision/cpp_int/divide.hpp at line 4, boost/multiprecision/cpp_int/limits.hpp at line 4, boost/multiprecision/cpp_int/misc.hpp at line 4, boost/multiprecision/cpp_int/multiply.hpp at line 4, boost/multiprecision/float128.hpp at line 4
+ License text:
+ // Copyright 2012 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.59
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/cpp_bin_float/io.hpp [2:4]
+ boost/multiprecision/cpp_int.hpp [2:4]
+ boost/multiprecision/cpp_int/add.hpp [2:4]
+ boost/multiprecision/cpp_int/bitwise.hpp [2:4]
+ boost/multiprecision/cpp_int/cpp_int_config.hpp [2:4]
+ boost/multiprecision/cpp_int/divide.hpp [2:4]
+ boost/multiprecision/cpp_int/limits.hpp [2:4]
+ boost/multiprecision/cpp_int/misc.hpp [2:4]
+ boost/multiprecision/cpp_int/multiply.hpp [2:4]
+ boost/multiprecision/float128.hpp [2:4]
+
+KEEP BSL-1.0 f862443d1366b0002c5e50e5579b1c6e
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/math/interpolators/barycentric_rational.hpp at line 5, boost/math/interpolators/detail/barycentric_rational_detail.hpp at line 5
+ License text:
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/math/interpolators/barycentric_rational.hpp [3:5]
+ boost/math/interpolators/detail/barycentric_rational_detail.hpp [3:5]
+
+KEEP BSL-1.0 f9017d20b23c39e85a02ca3c65f61f86
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/range/adaptor/replaced.hpp at line 5, boost/range/adaptor/replaced_if.hpp at line 5, boost/range/adaptor/strided.hpp at line 5, boost/range/algorithm_ext.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/range/adaptor/replaced.hpp [3:6]
+ boost/range/adaptor/replaced_if.hpp [3:6]
+ boost/range/adaptor/strided.hpp [3:6]
+ boost/range/algorithm_ext.hpp [3:6]
+
+KEEP BSL-1.0 f978f4f2508f8a0c5f62f3f5ecedc8ce
+BELONGS libs/exception/ya.make ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/exception/all.hpp at line 4, boost/exception/current_exception_cast.hpp at line 4, boost/exception/detail/clone_current_exception.hpp at line 4, boost/exception/detail/error_info_impl.hpp at line 4, boost/exception/detail/exception_ptr.hpp at line 4, boost/exception/detail/is_output_streamable.hpp at line 4, boost/exception/detail/object_hex_dump.hpp at line 4, boost/exception/detail/shared_ptr.hpp at line 4, boost/exception/detail/type_info.hpp at line 4, boost/exception/diagnostic_information.hpp at line 4, boost/exception/enable_current_exception.hpp at line 4, boost/exception/enable_error_info.hpp at line 4, boost/exception/errinfo_api_function.hpp at line 4, boost/exception/errinfo_at_line.hpp at line 4, boost/exception/errinfo_errno.hpp at line 4, boost/exception/errinfo_file_handle.hpp at line 4, boost/exception/errinfo_file_name.hpp at line 4, boost/exception/errinfo_file_open_mode.hpp at line 4, boost/exception/errinfo_nested_exception.hpp at line 4, boost/exception/errinfo_type_info_name.hpp at line 4, boost/exception/error_info.hpp at line 4, boost/exception/exception.hpp at line 4, boost/exception/get_error_info.hpp at line 4, boost/exception/info.hpp at line 4, boost/exception/info_tuple.hpp at line 4, boost/exception/to_string.hpp at line 4, boost/exception/to_string_stub.hpp at line 4, boost/exception_ptr.hpp at line 4, libs/exception/src/clone_current_exception_non_intrusive.cpp at line 4
+ License text:
+ //Distributed under the Boost Software License, Version 1.0. (See accompanying
+ //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/exception/all.hpp [3:4]
+ boost/exception/current_exception_cast.hpp [3:4]
+ boost/exception/detail/clone_current_exception.hpp [3:4]
+ boost/exception/detail/error_info_impl.hpp [3:4]
+ boost/exception/detail/exception_ptr.hpp [3:4]
+ boost/exception/detail/is_output_streamable.hpp [3:4]
+ boost/exception/detail/object_hex_dump.hpp [3:4]
+ boost/exception/detail/shared_ptr.hpp [3:4]
+ boost/exception/detail/type_info.hpp [3:4]
+ boost/exception/diagnostic_information.hpp [3:4]
+ boost/exception/enable_current_exception.hpp [3:4]
+ boost/exception/enable_error_info.hpp [3:4]
+ boost/exception/errinfo_api_function.hpp [3:4]
+ boost/exception/errinfo_at_line.hpp [3:4]
+ boost/exception/errinfo_errno.hpp [3:4]
+ boost/exception/errinfo_file_handle.hpp [3:4]
+ boost/exception/errinfo_file_name.hpp [3:4]
+ boost/exception/errinfo_file_open_mode.hpp [3:4]
+ boost/exception/errinfo_nested_exception.hpp [3:4]
+ boost/exception/errinfo_type_info_name.hpp [3:4]
+ boost/exception/error_info.hpp [3:4]
+ boost/exception/exception.hpp [3:4]
+ boost/exception/get_error_info.hpp [3:4]
+ boost/exception/info.hpp [3:4]
+ boost/exception/info_tuple.hpp [3:4]
+ boost/exception/to_string.hpp [3:4]
+ boost/exception/to_string_stub.hpp [3:4]
+ boost/exception_ptr.hpp [3:4]
+ libs/exception/src/clone_current_exception_non_intrusive.cpp [3:4]
+
+KEEP BSL-1.0 fc51d7cd9c354504daf9028ce7e6605d
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/parameter/aux_/overloads.hpp at line 3, boost/parameter/macros.hpp at line 3, boost/parameter/parameters.hpp at line 3
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 96.88
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/parameter/aux_/overloads.hpp [1:4]
+ boost/parameter/macros.hpp [1:4]
+ boost/parameter/parameters.hpp [1:4]
+
+KEEP BSL-1.0 fc5c644f1c0d63a394437a895a2e4812
+BELONGS ya.make
+ License text:
+ LICENSE(BSL-1.0)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : TAG
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost_common.inc [5:5]
+
+KEEP BSL-1.0 fc6fd3f07edbb2f20bf4654b73114e1a
+BELONGS ya.make
+ License text:
+ // Use, modification and distribution is subject to the Boost Software
+ // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 53.12
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/typeof/decltype.hpp [3:4]
+ boost/typeof/dmc/typeof_impl.hpp [3:4]
+ boost/typeof/incr_registration_group.hpp [2:3]
+ boost/typeof/int_encoding.hpp [2:3]
+ boost/typeof/message.hpp [2:3]
+ boost/typeof/msvc/typeof_impl.hpp [6:7]
+ boost/typeof/native.hpp [2:3]
+ boost/typeof/pointers_data_members.hpp [2:3]
+ boost/typeof/register_functions.hpp [2:3]
+ boost/typeof/register_fundamental.hpp [3:4]
+ boost/typeof/register_mem_functions.hpp [2:3]
+ boost/typeof/std/bitset.hpp [2:3]
+ boost/typeof/std/complex.hpp [2:3]
+ boost/typeof/std/deque.hpp [2:3]
+ boost/typeof/std/fstream.hpp [2:3]
+ boost/typeof/std/functional.hpp [2:3]
+ boost/typeof/std/iostream.hpp [2:3]
+ boost/typeof/std/istream.hpp [2:3]
+ boost/typeof/std/iterator.hpp [2:3]
+ boost/typeof/std/list.hpp [2:3]
+ boost/typeof/std/locale.hpp [2:3]
+ boost/typeof/std/map.hpp [2:3]
+ boost/typeof/std/memory.hpp [2:3]
+ boost/typeof/std/ostream.hpp [2:3]
+ boost/typeof/std/queue.hpp [2:3]
+ boost/typeof/std/set.hpp [2:3]
+ boost/typeof/std/sstream.hpp [2:3]
+ boost/typeof/std/stack.hpp [2:3]
+ boost/typeof/std/streambuf.hpp [2:3]
+ boost/typeof/std/string.hpp [2:3]
+ boost/typeof/std/utility.hpp [2:3]
+ boost/typeof/std/valarray.hpp [2:3]
+ boost/typeof/std/vector.hpp [2:3]
+ boost/typeof/unsupported.hpp [2:3]
+ boost/typeof/vector.hpp [6:7]
+
+KEEP BSL-1.0 fc958ebd9e0749eafd1c497f645bca04
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/python/detail/make_tuple.hpp at line 4, boost/python/object_call.hpp at line 4
+ License text:
+ \# // Distributed under the Boost Software License, Version 1.0. (See
+ \# // accompanying file LICENSE_1_0.txt or copy at
+ \# // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/python/detail/make_tuple.hpp [3:5]
+ boost/python/object_call.hpp [3:5]
+
+KEEP BSL-1.0 fc9f1903055632f6e8253bf22f3992f0
+BELONGS libs/context/ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: libs/context/src/asm/jump_arm64_aapcs_elf_gas.S at line 4, libs/context/src/asm/jump_arm64_aapcs_macho_gas.S at line 4, libs/context/src/asm/jump_arm_aapcs_elf_gas.S at line 4, libs/context/src/asm/jump_arm_aapcs_macho_gas.S at line 4, libs/context/src/asm/jump_combined_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_i386_sysv_elf_gas.S at line 4, libs/context/src/asm/jump_i386_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_mips32_o32_elf_gas.S at line 4, libs/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_ppc32_sysv_elf_gas.S at line 4, libs/context/src/asm/jump_ppc32_sysv_macho_gas.S at line 4, libs/context/src/asm/jump_ppc32_sysv_xcoff_gas.S at line 4, libs/context/src/asm/jump_ppc64_sysv_elf_gas.S at line 4, libs/context/src/asm/jump_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/make_arm64_aapcs_elf_gas.S at line 4, libs/context/src/asm/make_arm64_aapcs_macho_gas.S at line 4, libs/context/src/asm/make_arm_aapcs_elf_gas.S at line 4, libs/context/src/asm/make_arm_aapcs_macho_gas.S at line 4, libs/context/src/asm/make_combined_sysv_macho_gas.S at line 4, libs/context/src/asm/make_i386_sysv_elf_gas.S at line 4, libs/context/src/asm/make_i386_sysv_macho_gas.S at line 4, libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/make_mips32_o32_elf_gas.S at line 4, libs/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/make_ppc32_sysv_elf_gas.S at line 4, libs/context/src/asm/make_ppc32_sysv_macho_gas.S at line 4, libs/context/src/asm/make_ppc32_sysv_xcoff_gas.S at line 4, libs/context/src/asm/make_ppc64_sysv_elf_gas.S at line 4, libs/context/src/asm/make_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S at line 4, libs/context/src/asm/ontop_arm64_aapcs_macho_gas.S at line 4, libs/context/src/asm/ontop_arm_aapcs_elf_gas.S at line 4, libs/context/src/asm/ontop_arm_aapcs_macho_gas.S at line 4, libs/context/src/asm/ontop_combined_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_i386_sysv_elf_gas.S at line 4, libs/context/src/asm/ontop_i386_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_mips32_o32_elf_gas.S at line 4, libs/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_ppc32_sysv_elf_gas.S at line 4, libs/context/src/asm/ontop_ppc32_sysv_macho_gas.S at line 4, libs/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S at line 4, libs/context/src/asm/ontop_ppc64_sysv_elf_gas.S at line 4, libs/context/src/asm/ontop_ppc64_sysv_macho_gas.S at line 4
+ License text:
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ libs/context/src/asm/jump_arm64_aapcs_elf_gas.S [3:5]
+ libs/context/src/asm/jump_arm64_aapcs_macho_gas.S [3:5]
+ libs/context/src/asm/jump_arm_aapcs_elf_gas.S [3:5]
+ libs/context/src/asm/jump_arm_aapcs_macho_gas.S [3:5]
+ libs/context/src/asm/jump_combined_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/jump_i386_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/jump_i386_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/jump_mips32_o32_elf_gas.S [3:5]
+ libs/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/jump_ppc32_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/jump_ppc32_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/jump_ppc32_sysv_xcoff_gas.S [3:5]
+ libs/context/src/asm/jump_ppc64_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/jump_ppc64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/make_arm64_aapcs_elf_gas.S [3:5]
+ libs/context/src/asm/make_arm64_aapcs_macho_gas.S [3:5]
+ libs/context/src/asm/make_arm_aapcs_elf_gas.S [3:5]
+ libs/context/src/asm/make_arm_aapcs_macho_gas.S [3:5]
+ libs/context/src/asm/make_combined_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/make_i386_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/make_i386_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/make_mips32_o32_elf_gas.S [3:5]
+ libs/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/make_ppc32_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/make_ppc32_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/make_ppc32_sysv_xcoff_gas.S [3:5]
+ libs/context/src/asm/make_ppc64_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/make_ppc64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S [3:5]
+ libs/context/src/asm/ontop_arm64_aapcs_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_arm_aapcs_elf_gas.S [3:5]
+ libs/context/src/asm/ontop_arm_aapcs_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_combined_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_i386_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/ontop_i386_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_mips32_o32_elf_gas.S [3:5]
+ libs/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_ppc32_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/ontop_ppc32_sysv_macho_gas.S [3:5]
+ libs/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S [3:5]
+ libs/context/src/asm/ontop_ppc64_sysv_elf_gas.S [3:5]
+ libs/context/src/asm/ontop_ppc64_sysv_macho_gas.S [3:5]
+
+KEEP BSL-1.0 fcbcf40a265cd169c46d2bba83794f5b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/integer/common_factor.hpp at line 5, boost/integer/common_factor_ct.hpp at line 5, boost/integer/integer_mask.hpp at line 5, boost/integer/static_min_max.hpp at line 5, boost/math/common_factor.hpp at line 5, boost/math/common_factor_ct.hpp at line 5
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/integer/common_factor.hpp [4:8]
+ boost/integer/common_factor_ct.hpp [4:8]
+ boost/integer/integer_mask.hpp [4:8]
+ boost/integer/static_min_max.hpp [4:8]
+ boost/math/common_factor.hpp [4:8]
+ boost/math/common_factor_ct.hpp [4:8]
+
+KEEP BSL-1.0 fd01eb9a5849508d1c17276e547f8c1b
+BELONGS ya.make
+FILE_INCLUDE LICENSE_1_0.txt found in files: boost/multiprecision/cpp_bin_float.hpp at line 4, boost/multiprecision/cpp_bin_float/transcendental.hpp at line 4, boost/multiprecision/cpp_int/literals.hpp at line 4, boost/multiprecision/cpp_int/serialize.hpp at line 4, boost/multiprecision/cpp_int/value_pack.hpp at line 4, boost/multiprecision/detail/bitscan.hpp at line 4, boost/multiprecision/detail/float_string_cvt.hpp at line 4
+ License text:
+ // Copyright 2013 John Maddock. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 92.59
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/multiprecision/cpp_bin_float.hpp [2:4]
+ boost/multiprecision/cpp_bin_float/transcendental.hpp [2:4]
+ boost/multiprecision/cpp_int/literals.hpp [2:4]
+ boost/multiprecision/cpp_int/serialize.hpp [2:4]
+ boost/multiprecision/cpp_int/value_pack.hpp [2:4]
+ boost/multiprecision/detail/bitscan.hpp [2:4]
+ boost/multiprecision/detail/float_string_cvt.hpp [2:4]
+
+SKIP OFL-1.0 AND OFL-1.0 fd4de3c3add0c3a3dba403576cda6f13
+BELONGS ya.make
+ License text:
+ // Licensed under the Boost Software License version 1.0.
+ // http://www.boost.org/users/license.html
+ Scancode info:
+ Original SPDX id: OFL-1.0
+ Score : 17.67
+ Match type : NOTICE
+ Links : http://scripts.sil.org/cms/scripts/page.php?item_id=OFL10_web, https://scripts.sil.org/cms/scripts/render_download.php?format=file&media_id=OFL10_plaintext&filename=OFL10.txt, https://spdx.org/licenses/OFL-1.0
+ Files with this license:
+ boost/geometry/algorithms/densify.hpp [7:8]
+ boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp [7:8]
+ boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp [7:8]
+ boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp [7:8]
+ boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp [8:9]
+ boost/geometry/algorithms/detail/distance/box_to_box.hpp [7:8]
+ boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp [7:8]
+ boost/geometry/algorithms/detail/distance/iterator_selector.hpp [7:8]
+ boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp [7:8]
+ boost/geometry/algorithms/detail/distance/linear_to_linear.hpp [7:8]
+ boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp [7:8]
+ boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp [7:8]
+ boost/geometry/algorithms/detail/distance/segment_to_segment.hpp [7:8]
+ boost/geometry/algorithms/detail/normalize.hpp [8:9]
+ boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp [7:8]
+ boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp [10:11]
+ boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/linear_linear.hpp [5:6]
+ boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp [10:11]
+ boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp [8:9]
+ boost/geometry/algorithms/detail/sweep.hpp [7:8]
+ boost/geometry/algorithms/detail/turns/compare_turns.hpp [5:6]
+ boost/geometry/iterators/detail/point_iterator/iterator_type.hpp [7:8]
+ boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp [7:8]
+ boost/geometry/iterators/dispatch/point_iterator.hpp [7:8]
+ boost/geometry/iterators/dispatch/segment_iterator.hpp [7:8]
+ boost/geometry/iterators/has_one_element.hpp [7:8]
+ boost/geometry/policies/is_valid/failing_reason_policy.hpp [8:9]
+ boost/geometry/policies/is_valid/failure_type_policy.hpp [7:8]
+ boost/geometry/policies/predicate_based_interrupt_policy.hpp [7:8]
+ boost/geometry/strategies/cartesian/densify.hpp [7:8]
+ boost/geometry/strategies/spherical/densify.hpp [7:8]
+ boost/geometry/util/normalize_spheroidal_box_coordinates.hpp [8:9]
+ boost/geometry/util/normalize_spheroidal_coordinates.hpp [10:11]
+ boost/geometry/views/detail/boundary_view.hpp [7:8]
+ boost/geometry/views/detail/boundary_view/implementation.hpp [7:8]
+ boost/geometry/views/detail/boundary_view/interface.hpp [7:8]
+ Scancode info:
+ Original SPDX id: OFL-1.0
+ Score : 18.60
+ Match type : NOTICE
+ Links : http://scripts.sil.org/cms/scripts/page.php?item_id=OFL10_web, https://scripts.sil.org/cms/scripts/render_download.php?format=file&media_id=OFL10_plaintext&filename=OFL10.txt, https://spdx.org/licenses/OFL-1.0
+ Files with this license:
+ boost/geometry/algorithms/detail/max_interval_gap.hpp [7:8]
+ boost/geometry/algorithms/detail/turns/debug_turn.hpp [5:6]
+ boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp [5:6]
+ boost/geometry/algorithms/detail/turns/print_turns.hpp [5:6]
+ boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp [5:6]
+
+KEEP BSL-1.0 fd7de4e3b7045682df9b61ed7cb1f99d
+BELONGS ya.make
+ License text:
+ // http://www.boost.org/LICENSE_1_0.txt
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 44.00
+ Match type : REFERENCE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/endian/std_pair.hpp [6:6]
+
+KEEP BSL-1.0 fdd2dd3e25498c4dda5bc3412ed28bb9
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 40.62
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/spirit/home/lex/lexer/lexertl/generate_static.hpp [893:896]
+
+KEEP BSL-1.0 fe371f5eab8bfd96a6b2bcb62751072f
+BELONGS ya.make
+ License text:
+ // (C) Copyright Howard Hinnant 2007-2010. Distributed under the Boost
+ // Software License, Version 1.0. (see http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ boost/interprocess/sync/interprocess_sharable_mutex.hpp [4:5]
+
+KEEP Zlib feac64119d30e7019060ba88ec6d5f1a
+BELONGS ya.make
+ Note: matched license text is too long. Read it in the source files.
+ Scancode info:
+ Original SPDX id: Zlib
+ Score : 100.00
+ Match type : TEXT
+ Links : http://www.gzip.org/zlib/zlib_license.html, http://www.zlib.net/, https://spdx.org/licenses/Zlib
+ Files with this license:
+ boost/move/algo/detail/pdqsort.hpp [25:34]
diff --git a/contrib/restricted/boost/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..8552c20720
--- /dev/null
+++ b/contrib/restricted/boost/.yandex_meta/licenses.list.txt
@@ -0,0 +1,10142 @@
+====================BSD-3-Clause====================
+ // Redistribution and use in source and binary forms, with or without
+ // modification, are permitted provided that the following conditions are
+ // met:
+
+ // * Redistributions of source code must retain the above copyright
+ // notice, this list of conditions, and the following disclaimer.
+
+ // * Redistributions in binary form must reproduce the above copyright
+ // notice, this list of conditions, and the following disclaimer in the
+ // documentation and/or other materials provided with the distribution.
+
+ // * Neither the name of D. E. Shaw Research nor the names of its
+ // contributors may be used to endorse or promote products derived from
+ // this software without specific prior written permission.
+
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+====================BSD-3-Clause====================
+// Using the Mac OS X system BSD-style C library.
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ // Copyright 2008 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ << " Distributed under the Boost Software License, Version 1.0. (See accompanying\n"
+ << " file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n"
+
+
+====================BSL-1.0====================
+ os_ << "// Distributed under the Boost Software License, "
+ "Version 1.0. (See accompanying\n";
+ os_ << "// file licence_1_0.txt or copy at "
+ "http://www.boost.org/LICENSE_1_0.txt)\n\n";
+
+
+====================BSL-1.0====================
+ // Copyright 2008 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ // Copyright 2012 Eric Niebler. Distributed under the Boost
+ // Software License, Version 1.0. (See accompanying file
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Copyright (c) 2001 by Andrei Alexandrescu. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See
+ accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Use modification and distribution are subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+ Use modification and distribution are subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+ Use, modification and distribution are subject to the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+ Use, modification and distribution is subject to the Boost Software
+ License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ os_ << "// Distributed under the Boost Software License, "
+ "Version 1.0. (See accompanying\n";
+ os_ << "// file licence_1_0.txt or copy at "
+ "http://www.boost.org/LICENSE_1_0.txt)\n\n";
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE10.txt or copy at http://www.boost.org/LICENSE10.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or
+ copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See
+ accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Use, modification and distribution are subject to the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Use, modification and distribution is subject to the Boost Software
+ * License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.
+ * See http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * $Id$
+ *
+ * Revision history
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * See http://www.boost.org for most recent version including documentation.
+ *
+ * Revision history
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================BSL-1.0====================
+ * Subject to Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Subject to the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ * \license Boost Software License 1.0
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or
+ copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+# * http://www.boost.org/LICENSE_1_0.txt) *
+
+
+====================BSL-1.0====================
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+# * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+# // Distributed under the Boost Software License, Version 1.0. (See
+# // accompanying file LICENSE_1_0.txt or copy at
+# // http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+#// Distributed under the Boost Software License, Version 1.0.
+#// (See accompanying file LICENSE_1_0.txt or copy at
+#// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+(http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+* Distributed under the Boost Software License, Version 1.0. (See
+* accompanying file LICENSE_1_0.txt or copy at
+* http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Beman Dawes 2000. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Dave Abrahams and Daryle Walker 2001. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Hubert Holin and Daryle Walker 2001-2002. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright John maddock 1999. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Paul Moore 1999. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or
+// implied warranty, and with no claim as to its suitability for any purpose.
+
+
+====================BSL-1.0====================
+// (C) David Abrahams 2002. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright (c) 2003 Peter Dimov Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 1999-2003 Aleksey Gurtovoy. Use, modification, and distribution are
+// subject to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================BSL-1.0====================
+// Copyright 2001, 2003, 2004, 2012 Daryle Walker. Use, modification, and
+// distribution are subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or a copy at
+// <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================BSL-1.0====================
+// Copyright 2001, 2004 Daryle Walker. Use, modification, and distribution are
+// subject to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================BSL-1.0====================
+// Copyright 2002 Daryle Walker. Use, modification, and distribution are subject
+// to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================BSL-1.0====================
+// Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution
+// are subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================BSL-1.0====================
+// Copyright 2005 Daniel Egloff, Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2005 Daniel Egloff, Olivier Gygi. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2005 Daniel Egloff. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2005 Eric Niebler, Daniel Egloff. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2005 Eric Niebler, Michael Gauckler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2005 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2006 Daniel Egloff, Olivier Gygi. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2006 Eric Niebler, Olivier Gygi. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2006 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2006 Olivier Gygi, Daniel Egloff. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2006, Eric Niebler, Olivier Gygi. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2008 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2009 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2010 Daniel Wallin, Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2010 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2010 Gaetano Mendola, 2011 Simon West. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2011 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2011 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+
+====================BSL-1.0====================
+// Copyright 2011 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2011 Simon West. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2012 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+
+====================BSL-1.0====================
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2013 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+
+====================BSL-1.0====================
+// Copyright 2013 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2015 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+
+====================BSL-1.0====================
+// Copyright 2015 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2016 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Adam D. Walling 2012. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Beman Dawes 1994-99. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Beman Dawes 1995-2001. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Beman Dawes 2001. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Beman Dawes and Daryle Walker 1999. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Christopher Kormanyos 2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Daniel Walker 2006. Use, modification and distribution
+// are subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Eric Niebler 2014. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Jonathan Turkanis 2005. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Neil Groves 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Neil Groves 2009. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Neil Groves 2009. Use, modification and distribution
+// are subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Neil Groves 2010. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Neil Groves 2014. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Pavol Droba 2002-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Samuel Krempp 2003. Use, modification, and distribution are
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen 2003-2006. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen 2003-2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen 2003-2008. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen 2006. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen 2008. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Thorsten Ottosen, Neil Groves 2006. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+//
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+//
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boist.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Permission to copy, use, modify, sell and distribute this software
+// is granted provided this copyright notice appears in all copies.
+// This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to
+// the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification, and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification, and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+// at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// (C) Copyright Howard Hinnant 2007-2010. Distributed under the Boost
+// Software License, Version 1.0. (see http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2004-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2005-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2005-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2006-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2006-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2007-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2007-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2008-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2008-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2009-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2010-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2011-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2014-2017. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2016-2016. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2017-2018. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Jeremy Siek 2001. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Pablo Halpern 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ronald Garcia 2002. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+
+====================BSL-1.0====================
+// (C) Copyright Thorsten Ottosen 2002-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Vicente J. Botet Escriba 2008-2009,2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Vicente J. Botet Escriba 2013-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Vicente J. Botet Escriba 2013-2017. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Vicente J. Botet Escriba 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Vicente J. Botet Escriba 2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu). Permission to copy,
+// use, modify, sell and distribute this software is granted provided this
+// copyright notice appears in all copies. This software is provided "as is"
+// without express or implied warranty, and with no claim as to its suitability
+// for any purpose.
+
+
+====================BSL-1.0====================
+// Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution
+// are subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================BSL-1.0====================
+// Copyright 2005 David Abrahams and Aleksey Gurtovoy. Distributed
+// under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2008 Eric Niebler. Distributed
+// under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2008 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright 2011 -2013 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Daniel Wallin 2005. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Daniel Wallin 2007. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Daniel Wallin, David Abrahams 2010. Use, modification and
+// distribution is subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams 2003. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams 2004. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams 2005. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
+// distribution is subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams, Daniel Wallin 2005. Use, modification and
+// distribution is subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2001-2006. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2002-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Douglas Gregor 2003-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright Frank Mori Hess 2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost
+// Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0 (see accompanying
+// file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+//
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/ for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or the copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/tokenizer for documenation
+
+// Revision History:
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/tokenizer for documentation.
+
+// Revision History:
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/tokenizer/ for documentation.
+
+// Revision History:
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for most recent version including documentation.
+
+// Revision History
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Licensed under the Boost Software License version 1.0.
+
+
+====================BSL-1.0====================
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+// Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0 (See accompanying file
+// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the
+// Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+// at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// MS compatible compilers support #pragma once
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org/libs/serialization for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// gennadiy.rozental@tfn.com
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software License,
+// Version 1.Dimension. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0====================
+// Version 1.0. See http://www.boost.org/LICENSE_1_0.txt.
+
+
+====================BSL-1.0====================
+// boostinspect:nolicense (don't complain about the lack of a Boost license)
+
+
+====================BSL-1.0====================
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+/// Distributed under the Boost Software License, Version 1.0.\n
+/// ( See accompanying file LICENSE_1_0.txt or copy at
+/// http://www.boost.org/LICENSE_1_0.txt )
+
+
+====================BSL-1.0====================
+/// Distributed under the Boost Software License, Version 1.0.\n
+/// ( See accompanyingfile LICENSE_1_0.txt or copy at
+/// http://www.boost.org/LICENSE_1_0.txt )
+
+
+====================BSL-1.0====================
+/// Distributed under the Boost Software License, Version 1.0.\n
+/// ( See copy at http://www.boost.org/LICENSE_1_0.txt )
+
+
+====================BSL-1.0====================
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+//Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+====================BSL-1.0====================
+Distributed under the Boost Software License,
+Version 1.0. (See accompanying file LICENSE_1_0.txt
+or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+Distributed under the Boost Software License, Version 1.0.
+
+
+====================BSL-1.0====================
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or
+copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+Distributed under the Boost Software License, Version 1.0.
+(http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+Distributed under the Boost Software License, Version 1.0. (See accompanying
+file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+Distributed under the Boost Software License, Version 1.0. (See accompanying
+file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+LICENSE(BSL-1.0)
+
+
+====================BSL-1.0====================
+Many thanks to Howard for making his code available under the Boost license.
+
+
+====================BSL-1.0 AND BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENCE.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0 AND BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENCE_1_0.txt)
+
+
+====================BSL-1.0 AND BSL-1.0====================
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================BSL-1.0 AND BSL-1.0====================
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. See http://www.boost.org/LICENSE_1_0.txt.
+
+
+====================COPYRIGHT====================
+ // Copyright 2010-2012, D. E. Shaw Research.
+ // All rights reserved.
+
+
+====================COPYRIGHT====================
+ Autogenerated by MultiStageTable.py (Unicode multi-stage
+ table builder) (c) Peter Kankowski, 2008
+
+
+====================COPYRIGHT====================
+ Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+
+====================COPYRIGHT====================
+ Copyright (arg) 2001-2014 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2002 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2001 Bruce Florman
+ Copyright (c) 2002 Raghavendra Satish
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ Copyright (c) 2002 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002 Raghavendra Satish
+ Copyright (c) 2002 Jeff Westfahl
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2002 Raghavendra Satish
+ Copyright (c) 2001 Bruce Florman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2001-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ Copyright (c) 2003 Vaclav Vesely
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1998-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002 Raghavendra Satish
+ Copyright (c) 2002 Jeff Westfahl
+ Copyright (c) 2001 Bruce Florman
+ Copyright (c) 2003 Giovanni Bajo
+ Copyright (c) 2003 Vaclav Vesely
+ Copyright (c) 2003 Jonathan de Halleux
+ http://spirit.sourceforge.net/
+ http://www.boost.org/libs/spirit
+
+
+====================COPYRIGHT====================
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 1999-2003 Jeremiah Willcock
+ Copyright (c) 2001-2011 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2000-2003 Brian McNamara and Yannis Smaragdakis
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2015 John Fletcher
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001 Doug Gregor
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001 by Andrei Alexandrescu. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001, Daniel C. Nuffer
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001, Daniel C. Nuffer
+ Copyright (c) 2003, Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001, Daniel C. Nuffer
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2002 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2007 Hartmut Kaiser
+ Revised 2007, Copyright (c) Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2001-2007 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2003 Daniel Nuffer
+ Copyright (c) 2003 Giovanni Bajo
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ Copyright (c) 2003 Gustavo Guerra
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Martin Wille
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2007 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2007 Hartmut Kaiser
+ Copyright (c) 2001-2003 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+ Copyright (c) 2009-2011 Christopher Schmidt
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2007 Joel de Guzman
+ Copyright (c) 2014 John Fletcher
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+ Copyright (c) 2010-2011 Christopher Schmidt
+ Copyright (c) 2013-2014 Damien Buhl
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2009 Joel de Guzman
+ Copyright (c) 2009-2010 Hartmut Kaiser
+ Copyright (c) 2010-2011 Christopher Schmidt
+ Copyright (c) 2013-2014 Damien Buhl
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2010 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2001-2010 Hartmut Kaiser
+ Copyright (c) 2010 Bryce Lelbach
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2001-2010 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2004 Daniel Wallin
+ Copyright (c) 2010 Thomas Heller
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2010 Joel de Guzman
+ Copyright (c) 2010 Eric Niebler
+ Copyright (c) 2014-2015 John Fletcher
+ Copyright (c) 2016 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Agustin Berge
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2011 Bryce Lelbach
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2009 Daniel Nuffer
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2009 Francois Barel
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2011 Jan Frederick Eick
+ Copyright (c) 2011 Christopher Jefferson
+ Copyright (c) 2006 Stephen Nutt
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ Copyright (c) 2011 Thomas Bernard
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005, 2014 Eric Niebler
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Copyright (c) 2009-2010 Christopher Schmidt
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+ Copyright (c) 2010 Christopher Schmidt
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+ Copyright (c) 2009 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+ Copyright (c) 2009-2010 Christopher Schmidt
+ Copyright (c) 2015 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2006 Tobias Schwinger
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2007
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2007 Dan Marsden
+ Copyright (c) 2009 Christopher Schmidt
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2010 Bryce Lelbach
+ Copyright (c) 2014 Tomoki Imai
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2011 Brandon Kohn
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2011 Jan Frederick Eick
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2011-2012 Thomas Bernard
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2015 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2017 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
+ Software License, Version 1.0. (See accompanying file
+ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2012 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2012 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2013 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2001-2012 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013 Carl Barron
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2014 Joel de Guzman
+ Copyright (c) 2013-2014 Agustin Berge
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2014 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2015 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2002 Joel de Guzman
+ Copyright (c) 2002-2003 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2006 Hartmut Kaiser
+ Copyright (c) 2003 Giovanni Bajo
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002 Juan Carlos Arevalo-Baeza
+ Copyright (c) 2002-2003 Martin Wille
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2002-2003 Joel de Guzman
+ Copyright (c) 2002-2003 Juan Carlos Arevalo-Baeza
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2003 Giovanni Bajo
+ Copyright (c) 2003 Martin Wille
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2003 Giovanni Bajo
+ Copyright (c) 2003 Thomas Witt
+ Copyright (c) 2003 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2003 Hartmut Kaiser
+ Copyright (c) 2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2003 Joel de Guzman
+ Copyright (c) 2003 Vaclav Vesely
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2003 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ Copyright (c) 2011 Bryce Lelbach
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2003 Paul Mensonides
+ Copyright (c) 2001-2012 Hartmut Kaiser.
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2004 Angus Leeming
+ Copyright (c) 2004 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2004 Angus Leeming
+ Copyright (c) 2006 Daniel Wallin
+ Copyright (c) 2005 Dan Marsden
+ Copyright (c) 2007 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005 Matthew Calabrese
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2006 Joao Abecasis
+ Copyright (c) 2006-2007 Tobias Schwinger
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2008 Hartmut Kaiser
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2014-2015 John Fletcher
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010 Thomas Heller
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010 Thomas Heller
+ Copyright (c) 2018 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2010-2011 Thomas Heller
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2010 Joel de Guzman
+ Copyright (c) 2015 John Fletcher
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2011 Joel de Guzman
+ Copyright (c) 2011 Thomas Heller
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2012 Joel de Guzman
+ Copyright (c) 2005-2007 Dan Marsden
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2005-2013 Joel de Guzman
+ Copyright (c) 2006 Dan Marsden
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2006 Daniel Wallin
+ Copyright (c) 2005 Dan Marsden
+ Copyright (c) 2007 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2006 Eric Niebler
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2006 Joao Abecasis
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2006 Tobias Schwinger
+ Copyright (c) 2002-2006 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2006 Tobias Schwinger
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2006-2007 Tobias Schwinger
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2007 Tobias Schwinger
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2007-2008 Tobias Schwinger
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2007-2011 Hartmut Kaiser
+ Copyright (c) Christopher Diggins 2005
+ Copyright (c) Pablo Aguilar 2005
+ Copyright (c) Kevlin Henney 2001
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2009 Chris Hoeppler
+ Copyright (c) 2014 Lee Clagett
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2010 Bryce Lelbach
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2010-2011 Bryce Lelbach
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2011 Aaron Graham
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2011 Eric Niebler
+ Copyright (c) 2015 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2011 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2011 Jamboree
+ Copyright (c) 2014 Lee Clagett
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2011 Steven Watanabe
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2011 Thomas Heller
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2012 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2012 Nathan Ridge
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2012 Paul Fultz II
+ first_of.h
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2012-2014 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2013 Jamboree
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2013 Mateusz Loskot
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2005-2006 Dan Marsden
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2014 Christoph Weiss
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2014 Eric Niebler
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2014 Jamboree
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2014 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2014 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2014 Paul Fultz II
+ always.h
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2014 Thomas Bernard
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2014-2015 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2015 Agustin K-ballo Berge
+ Copyright (c) 2015 Kohei Takahashi
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2015 Mario Lang
+ Copyright (c) 2001-2011 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2015 Paul Fultz II
+ alias.h
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2016 Lee Clagett
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2016 Paul Fultz II
+ boost/hof.hpp
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+ Copyright 2005-2007 Adobe Systems Incorporated
+
+
+====================COPYRIGHT====================
+ Copyright 2008 Adobe Systems Incorporated
+
+
+====================COPYRIGHT====================
+ Copyright Andrey Semashev 2007 - 2015.
+
+
+====================COPYRIGHT====================
+ Copyright Paul Mensonides 2003
+ Copyright Aleksey Gurtovoy 2003-2004
+
+
+====================COPYRIGHT====================
+ Copyright (C) 2004-2008 Rene Nyffenegger
+
+
+====================COPYRIGHT====================
+ Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.by>, 2017.
+
+
+====================COPYRIGHT====================
+ Copyright (c) Marshall Clow 2008-2012.
+
+
+====================COPYRIGHT====================
+ Copyright (c) Marshall Clow 2010-2012.
+
+
+====================COPYRIGHT====================
+ Copyright (c) Marshall Clow 2011-2012.
+
+
+====================COPYRIGHT====================
+ Copyright (c) Marshall Clow 2012-2012.
+
+
+====================COPYRIGHT====================
+ Copyright (c) Marshall Clow 2012-2015.
+
+
+====================COPYRIGHT====================
+ Copyright (c) Marshall Clow 2012-2015.
+ Copyright (c) Beman Dawes 2015
+
+
+====================COPYRIGHT====================
+ Copyright (c) Marshall Clow 2014.
+
+
+====================COPYRIGHT====================
+ Copyright (c) Marshall Clow 2017.
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2008 Joel de Guzman
+ Copyright (c) 2001-2008 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ Copyright (c) 2001-2011 Hartmut Kaiser
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) 2001-2011 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+
+====================COPYRIGHT====================
+ Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.com>, 2016
+
+
+====================COPYRIGHT====================
+ Copyright 2008 Intel Corporation
+
+
+====================COPYRIGHT====================
+ Copyright 2009-2012 Karsten Ahnert
+ Copyright 2009-2012 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2009-2013 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2009-2015 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2012 Lucanus Simonson
+
+
+====================COPYRIGHT====================
+ Copyright 2013 Ankur Sinha
+ Copyright 2013 Karsten Ahnert
+
+
+====================COPYRIGHT====================
+ Copyright 2013 Christian Shelton
+ Copyright 2013 Karsten Ahnert
+
+
+====================COPYRIGHT====================
+ Copyright 2013-2014 Karsten Ahnert
+ Copyright 2013-2014 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2017 James E. King, III
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Lingxi Li 2015.
+ * Copyright Andrey Semashev 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Lingxi Li 2015.
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2018.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andy Tompkins 2006.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2007 - 2013.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2007 - 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2001-2003 Joel de Guzman
+
+
+====================COPYRIGHT====================
+ * Copyright Nick Thompson, 2017
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+ * (C) Copyright 2013 Tim Blechmann
+ * (C) Copyright 2013 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * (C) Copyright Nicolai M. Josuttis 2001.
+
+
+====================COPYRIGHT====================
+ * Copyright (C) 2017 James E. King III
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1994
+ * Hewlett-Packard Company
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1996
+ * Silicon Graphics Computer Systems, Inc.
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1996,1997
+ * Silicon Graphics Computer Systems, Inc.
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1998
+ * Silicon Graphics Computer Systems, Inc.
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1998-2000
+ * Dr John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1998-2002
+ * John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1998-2004 John Maddock
+ * Copyright 2011 Garmin Ltd. or its subsidiaries
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1998-2005
+ * John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1998-2009
+ * John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2002
+ * John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2003
+ * John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2003-2004
+ * Douglas Gregor
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2003-2005
+ * John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2004
+ * John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2009 Phil Endecott
+ * Copyright (c) 2013 Tim Blechmann
+ * ARM Code by Phil Endecott, based on other architectures.
+ * Copyright (c) 2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2013 - 2018 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2012 Tim Blechmann
+ * Copyright (c) 2014 - 2018 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2012 - 2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009, 2011 Helge Bahmann
+ * Copyright (c) 2009 Phil Endecott
+ * Copyright (c) 2013 Tim Blechmann
+ * Linux-specific code by Phil Endecott
+ * Copyright (c) 2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009, Gunter Winkler
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009, Marco Guazzone
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009-2010, Marco Guazzone
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2009-2012, Marco Guazzone
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2010 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2010 Matthias Walter (xammy@xammy.homelinux.net)
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013 Tim Blechmann
+ * Copyright (c) 2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013-2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2012 Hartmut Kaiser
+ * Copyright (c) 2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2014 Glen Fernandes
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2015 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2017 - 2018 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2017 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+
+
+====================COPYRIGHT====================
+ * Copyright 2000 Jens Maurer
+ * Copyright 2002-2003 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+
+
+====================COPYRIGHT====================
+ * Copyright 2000 Maarten Keijzer
+ * Copyright 2002 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+
+
+====================COPYRIGHT====================
+ * Copyright 2002 Hervรฉ Brรถnnimann, Guillaume Melquiond, Sylvain Pion
+ * Copyright 2005 Guillaume Melquiond
+
+
+====================COPYRIGHT====================
+ * Copyright 2002-2003 Guillaume Melquiond
+
+
+====================COPYRIGHT====================
+ * Copyright 2003 Guillaume Melquiond
+
+
+====================COPYRIGHT====================
+ * Copyright 2003 Guillaume Melquiond, Sylvain Pion
+
+
+====================COPYRIGHT====================
+ * Copyright 2003-2018 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright 2005 Felix Hรถfling, Guillaume Melquiond
+
+
+====================COPYRIGHT====================
+ * Copyright 2006-2007 Boris Gubenko
+
+
+====================COPYRIGHT====================
+ * Copyright 2010 Vicente J. Botet Escriba
+ * Copyright 2015 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2010 Vicente J. Botet Escriba
+ * Copyright 2015, 2017 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2013 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2013, 2017 Andrey Semashev
+ * Copyright 2017 James E. King, III
+
+
+====================COPYRIGHT====================
+ * Copyright 2014 Antony Polukhin
+ * Copyright 2015 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2015 Klemens Morgenstern
+ * Copyright 2016 Jorge Lodos
+ * Copyright 2016 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2016 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2016 Klemens D. Morgenstern
+
+
+====================COPYRIGHT====================
+ * Copyright 2016 Klemens D. Morgenstern
+ * Copyright 2016, 2017 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2017 Andrey Semashev
+
+
+====================COPYRIGHT====================
+ * Copyright 2017 Vinnie Falco
+
+
+====================COPYRIGHT====================
+ * Copyright Jens Maurer 2000
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Jens Maurer 2000-2001
+ * Copyright Steven Watanabe 2010-2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Jens Maurer 2000-2001
+ * Copyright Steven Watanabe 2011
+ * Copyright Jason Rhinelander 2016
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Jens Maurer 2000-2001
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Jens Maurer 2002
+ * Copyright Steven Watanabe 2010
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Jens Maurer 2006
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Marco Guazzone 2014
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Nick Thompson, 2018
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+ * Copyright Steven Watanabe 2009
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Steven Watanabe 2009-2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Steven Watanabe 2010
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Steven Watanabe 2014
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Thijs van den Berg 2014
+
+
+====================COPYRIGHT====================
+ * Date: Sun Jan 06 12:57:30 MST 2008
+ * Copyright: 2008 CodeRage, LLC
+ 2004-2007 Jonathan Turkanis
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+
+
+====================COPYRIGHT====================
+ * Date: Sun Jun 22 14:23:12 MDT 2008
+ * Copyright: 2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+
+
+====================COPYRIGHT====================
+ * Date: Thu Dec 06 13:21:54 MST 2007
+ * Copyright: 2007-2008 CodeRage, LLC
+ * Author: Jonathan Turkanis
+ * Contact: turkanis at coderage dot com
+
+
+====================COPYRIGHT====================
+ * This software was written by Alexander Peslyak in 2001. No copyright is
+ * claimed, and the software is hereby placed in the public domain.
+ * In case this attempt to disclaim copyright and place the software in the
+ * public domain is deemed null and void, then the software is
+ * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
+ * general public under the following terms:
+
+
+====================COPYRIGHT====================
+ * \author Brian Ravnsgaard Riis
+ * \author Kenneth Riddile
+ * \date 16.09.2004, updated 04.03.2009
+ * \copyright 2004 Brian Ravnsgaard Riis
+ * \license Boost Software License 1.0
+
+
+====================COPYRIGHT====================
+ Copyright 2009-2011 Karsten Ahnert
+ Copyright 2009-2011 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2009-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2011 Mario Mulansky
+ Copyright 2011-2013 Karsten Ahnert
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2010 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2011 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2012 Mario Mulansky
+ Copyright 2010-2012 Karsten Ahnert
+ Copyright 2012 Christoph Koke
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2013 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2013 Karsten Ahnert
+ Copyright 2010-2015 Mario Mulansky
+ Copyright 2012 Christoph Koke
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2013 Mario Mulansky
+ Copyright 2010-2011 Karsten Ahnert
+ Copyright 2013 Kyle Lutz
+
+
+====================COPYRIGHT====================
+ Copyright 2010-2014 Mario Mulansky
+ Copyright 2010-2011 Karsten Ahnert
+
+
+====================COPYRIGHT====================
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011 Karsten Ahnert
+
+
+====================COPYRIGHT====================
+ Copyright 2011-2012 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+
+
+====================COPYRIGHT====================
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2013 Thorsten Ottosen
+
+
+====================COPYRIGHT====================
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2015 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2011-2013 Karsten Ahnert
+ Copyright 2011-2015 Mario Mulansky
+ Copyright 2012 Christoph Koke
+
+
+====================COPYRIGHT====================
+ Copyright 2011-2013 Mario Mulansky
+ Copyright 2011-2012 Karsten Ahnert
+
+
+====================COPYRIGHT====================
+ Copyright 2012 Karsten Ahnert
+ Copyright 2012 Mario Mulansky
+ Copyright 2012 Denis Demidov
+
+
+====================COPYRIGHT====================
+ Copyright 2012-2015 Mario Mulansky
+ Copyright 2012 Christoph Koke
+ Copyright 2012 Karsten Ahnert
+
+
+====================COPYRIGHT====================
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+
+
+====================COPYRIGHT====================
+ Copyright 2013 Karsten Ahnert
+ Copyright 2013 Mario Mulansky
+ Copyright 2013 Pascal Germroth
+
+
+====================COPYRIGHT====================
+ Copyright 2015 Mario Mulansky
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Edward Diener 2011. *
+# * (C) Copyright Paul Mensonides 2011. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Edward Diener 2013.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Edward Diener 2015.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Edward Diener 2016. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Paul Mensonides 2002-2011. *
+# * (C) Copyright Edward Diener 2011,2013. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Paul Mensonides 2002-2011. *
+# * (C) Copyright Edward Diener 2011. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Paul Mensonides 2002.
+# * (C) Copyright Edward Diener 2014.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Paul Mensonides 2002.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Paul Mensonides 2003.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Paul Mensonides 2005. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Paul Mensonides 2011.
+# * (C) Copyright Edward Diener 2011,2014.
+# * Distributed under the Boost Software License, Version 1.0. (See
+# * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+# * (C) Copyright Paul Mensonides 2012. *
+# * Distributed under the Boost Software License, Version 1.0. (See *
+# * accompanying file LICENSE_1_0.txt or copy at *
+
+
+====================COPYRIGHT====================
+# /* Copyright (C) 2001
+# * Housemarque Oy
+# * http://www.housemarque.com
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002,2003, 2007 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002-2003,2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002-2006 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2003-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2003-2005 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2006 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright 2003-2008 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2003-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2003-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2003-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2003-2016 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2003-2017 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2006-2008 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2006-2009 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2006-2011 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2006-2013 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2006-2014 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2006-2015 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2016 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2016-2017 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2016-2018 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2017 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/* Copyright 2017-2018 Joaquin M Lopez Munoz.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001 Daryle Walker.
+// Copyright (C) 2003 Vesa Karvonen.
+// Copyright (C) 2003 Gennaro Prota.
+
+
+====================COPYRIGHT====================
+// Copyright Orson Peters 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Daniel Trebbien 2010.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or the copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennaro Prota 2003.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2012, Michele Caini.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Alain Miniussi 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Andrii Sydorchuk 2010-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Nat Goodspeed + Oliver Kowalke 2015.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Nat Goodspeed 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2013.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2015.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Steven J. Ross 2001 - 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Steven J. Ross 2001 - 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Steven J. Ross 2014
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2003 - 2011 LASMEA UMR 6602 CNRS/Univ. Clermont II
+// Copyright 2009 - 2011 LRI UMR 8623 CNRS/Univ Paris Sud XI
+// Copyright 2011 Eric Niebler
+
+
+====================COPYRIGHT====================
+// Copyright 2014 LASMEA UMR 6602 CNRS/Univ. Clermont II
+// Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+// Copyright 2014 MetaScale SAS
+
+
+====================COPYRIGHT====================
+// Copyright 2014 LRI UMR 8623 CNRS/Univ Paris Sud XI
+// Copyright 2014 NumScale SAS
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002 Python Software Foundation; All Rights
+// Reserved
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2004 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2011.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+// Copyright (c) 2003-2004 Gennaro Prota
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+// Copyright (c) 2003-2004, 2008 Gennaro Prota
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+// Copyright (c) 2003-2006, 2008 Gennaro Prota
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2002 Chuck Allison and Jeremy Siek
+// Copyright (c) 2003-2006, 2008 Gennaro Prota
+// Copyright (c) 2014 Ahmed Charles
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002 Rani Sharoni (rani_sharoni@hotmail.com) and Robert Ramey
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005-7 Anthony Williams
+// (C) Copyright 2005 John Maddock
+// (C) Copyright 2011-2013 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005-7 Anthony Williams
+// (C) Copyright 2007 David Deakins
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005-8 Anthony Williams
+// (C) Copyright 2012 Vicente J. Botet Escriba
+// (C) Copyright 2017 Andrey Semashev
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2006-7 Anthony Williams
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2006-8 Anthony Williams
+// (C) Copyright 2011-2012,2017-2018 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2006-8 Anthony Williams
+// (C) Copyright 2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007 Anthony Williams
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007-8 Anthony Williams
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 Anthony Williams
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008-10 Anthony Williams
+// (C) Copyright 2011-2012,2015 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008-10 Anthony Williams
+// (C) Copyright 2011-2015 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2009-2011 Frederic Bron, Robert Stewart, Steven Watanabe & Roman Perepelitsa.
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2009-2011 Frederic Bron.
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2011 Vicente J. Botet Escriba
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2011Vicente J. Botet Escriba
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2013,2014 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2016 Raffi Enficiaud.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Antony Polukhin 2014.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Artyom Beilis 2010.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Beman Dawes 1999-2003. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Beman Dawes 1999.
+// (C) Copyright Jens Mauer 2001
+// (C) Copyright John Maddock 2001
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Beman Dawes 2000. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Boris Rasin and Antony Polukhin 2014-2015.
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Brian Kuhl 2016.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Bruno Lalande 2008.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Bryce Lelbach 2011
+
+
+====================COPYRIGHT====================
+// (C) Copyright Christopher Jefferson 2011.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Daniel Frey and Robert Ramey 2009.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Darin Adler 2000
+// (C) Copyright Beman Dawes 2006, 2009
+
+
+====================COPYRIGHT====================
+// (C) Copyright Darin Adler 2000
+// (C) Copyright Beman Dawes 2006, 2009, 2014
+
+
+====================COPYRIGHT====================
+// (C) Copyright Daryle Walker 2001-2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Daryle Walker 2001.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Daryle Walker and Stephen Cleary 2001-2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Dave Abrahams and Daniel Walker 1999-2003.
+// Copyright (c) Andrey Semashev 2017
+
+
+====================COPYRIGHT====================
+// (C) Copyright Dave Abrahams and Daryle Walker 2001. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Howard Hinnant and John Maddock 2000, 2010.
+// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+
+====================COPYRIGHT====================
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Howard Hinnant and John Maddock 2000.
+// (C) Copyright Mat Marcus, Jesse Jones and Adobe Systems Inc 2001
+
+
+====================COPYRIGHT====================
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes,
+// Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000-2003.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright David Abrahams 2000.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright David Abrahams Steve Cleary, Beman Dawes, Howard
+// Hinnant & John Maddock 2000-2002.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright David Abrahams, Jeremy Siek, Daryle Walker 1999-2001.
+// (C) Copyright Daniel Frey 2002-2017.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Dustin Spicuzza 2009.
+// Adapted to vxWorks 6.9 by Peter Brockamp 2012.
+// Updated for VxWorks 7 by Brian Kuhl 2016
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Edward Diener 2011,2012
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Edward Diener 2011,2012,2013
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Edward Diener 2011-2015
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Edward Diener 2012
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Edward Diener 2012,2013
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Eric Ford & Hubert Holin 2001.
+// (C) Copyright John Maddock 2008.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Eric Ford 2001 & Hubert Holin.
+// (C) Copyright John Maddock 2008.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Eric Jourdanneau, Joel Falcou 2010
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Eric Niebler 2004-2005
+// (C) Copyright Gennadiy Rozental 2001.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennadiy Rozental 2001.
+// (C) Copyright Beman Dawes 1995-2001.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennadiy Rozental 2001.
+// (C) Copyright Beman Dawes 2001.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennadiy Rozental 2001.
+// (C) Copyright Beman Dawes and Ullrich Koethe 1995-2001.
+// Use, modification, and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennadiy Rozental 2001.
+// (C) Copyright Daryle Walker 2000-2001.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennadiy Rozental 2001.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002 Peter Dimov
+
+
+====================COPYRIGHT====================
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002, 2012 Peter Dimov
+
+
+====================COPYRIGHT====================
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001-2008 Peter Dimov
+
+
+====================COPYRIGHT====================
+// (C) Copyright Herve Bronnimann 2004.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Howard Hinnant
+// (C) Copyright 2010 Vicente J. Botet Escriba
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Howard Hinnant
+// (C) Copyright 2010-2011 Vicente J. Botet Escriba
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Howard Hinnant
+// Copyright 2011 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright Hubert Holin 2001.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Hubert Holin and Daryle Walker 2001-2002. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2005.
+// Copyright (c) 2005 Peter Dimov.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2014.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremiah Willcock 2004
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy Siek 1999-2001.
+// Copyright (C) 2006 Trustees of Indiana University
+// Authors: Douglas Gregor and Jeremy Siek
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy Siek 1999.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy Siek 2004
+// (C) Copyright Thomas Claveirole 2010
+// (C) Copyright Ignacy Gawedzki 2010
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy Siek 2006
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy William Murphy 2016.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jessica Hamilton 2014.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jim Douglas 2005.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Joel de Guzman 2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock & Thorsten Ottosen 2005.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2000.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2002.
+// (C) Copyright Jens Maurer 2001.
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// (C) Copyright Markus Schoepflin 2005.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003
+// (C) Copyright Jens Maurer 2001
+// (C) Copyright Peter Dimov 2001
+// (C) Copyright Darin Adler 2001
+// (C) Copyright Beman Dawes 2002
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001 - 2002.
+// (C) Copyright Jens Maurer 2001 - 2002.
+// (C) Copyright Beman Dawes 2001 - 2003.
+// (C) Copyright Douglas Gregor 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Synge Todo 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// (C) Copyright Aleksey Gurtovoy 2002.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Toon Knapen 2003.
+// (C) Copyright Boris Gubenko 2006 - 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Toon Knapen 2001 - 2003.
+// (C) Copyright Lie-Quan Lee 2001.
+// (C) Copyright Markus Schoepflin 2002 - 2003.
+// (C) Copyright Beman Dawes 2002 - 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Bill Kempf 2001.
+// (C) Copyright Aleksey Gurtovoy 2003.
+// (C) Copyright Rene Rivera 2005.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Darin Adler 2001 - 2002.
+// (C) Copyright Bill Kempf 2002.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001.
+// (C) Copyright David Abrahams 2003.
+// (C) Copyright Boris Gubenko 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Martin Wille 2003.
+// (C) Copyright Guillaume Melquiond 2003.
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001-8.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright Jens Maurer 2001.
+// (C) Copyright David Abrahams 2002 - 2003.
+// (C) Copyright Aleksey Gurtovoy 2002 - 2003.
+// (C) Copyright Guillaume Melquiond 2002 - 2003.
+// (C) Copyright Beman Dawes 2003.
+// (C) Copyright Martin Wille 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Darin Adler 2001.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright David Abrahams 2001 - 2002.
+// (C) Copyright Beman Dawes 2001 - 2003.
+// (C) Copyright Stefan Slapeta 2004.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// (C) Copyright Peter Dimov 2002.
+// (C) Copyright Aleksey Gurtovoy 2002 - 2003.
+// (C) Copyright David Abrahams 2002.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2001.
+// (C) Copyright Douglas Gregor 2001.
+// (C) Copyright Peter Dimov 2001.
+// (C) Copyright Aleksey Gurtovoy 2003.
+// (C) Copyright Beman Dawes 2003.
+// (C) Copyright Jens Maurer 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2002 - 2003.
+// (C) Copyright Jens Maurer 2002 - 2003.
+// (C) Copyright Beman Dawes 2002 - 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2002.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2005-2006.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2005.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2006, 2015
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2006-8.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2006.
+// (C) Copyright Jeremy William Murphy 2015.
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2006.
+// (C) Copyright Johan Rade 2006.
+// (C) Copyright Paul A. Bristow 2011 (added changesign).
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2006.
+// (C) Copyright Paul A. Bristow 2006.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2006.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2008.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2010.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2011.
+// (C) Copyright Cray, Inc. 2013
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2015.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock 2017.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright John Maddock and Steve Cleary 2000.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright John maddock 1999.
+// (C) David Abrahams 2002. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Kevlin Henney and Dave Abrahams 1999.
+// (C) Copyright Boris Rasin 2014.
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Matthias Troyerk 2006.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Nick Thompson 2017.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Nick Thompson 2018.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Noel Belcourt 2007.
+// Copyright 2017, NVIDIA CORPORATION.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Paul Moore 1999. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or
+// implied warranty, and with no claim as to its suitability for any purpose.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Peter Dimov 2017.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright R.W. Grosse-Kunstleve 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Rani Sharoni 2003-2005.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Rani Sharoni 2003.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Robert Ramey 2003. Jonathan Turkanis 2004.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Runar Undheim, Robert Ramey & John Maddock 2008.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Samuli-Petrus Korhonen 2017.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// (C) Copyright Eric Friedman 2002-2003.
+// (C) Copyright Antony Polukhin 2013.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
+// Use, modification and distribution are subject to the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Yuriy Krasnoschek 2009.
+// (C) Copyright John Maddock 2001 - 2003.
+// (C) Copyright Jens Maurer 2001 - 2003.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (c) Copyright Robert Ramey 2004
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2001, 2002 Peter Dimov
+// Copyright (C) 2002 David Abrahams
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002 Beman Dawes
+// Copyright (C) 2001 Dietmar Kuehl
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2008, 2009, 2016 Tim Blechmann, based on code by Cory Nelson
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2008, 2016 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2008-2013 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2008-2016 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2009 Trustees of Indiana University
+// Authors: Jeremiah Willcock, Andrew Lumsdaine
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2009, 2016 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2009-2013 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2011, 2016 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2011-2013, 2016 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2012 David Stone
+// Copyright Beman Dawes 2013
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2014 Glen Joseph Fernandes
+// glenfe at live dot com
+// Copyright (C) 2014 Agustin Berge
+
+
+====================COPYRIGHT====================
+// Copyright (C) Christof Meerwald 2003
+// Copyright (C) Dan Watkins 2003
+
+
+====================COPYRIGHT====================
+// Copyright (C) Douglas Gregor 2008
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2004
+// Joerg Walter, Mathias Koch
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2007
+// Joerg Walter, Mathias Koch, Gunter Winkler
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2009
+// Joerg Walter, Mathias Koch, Gunter Winkler
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2010
+// Joerg Walter, Mathias Koch, David Bellot
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2010
+// Joerg Walter, Mathias Koch, Gunter Winkler, David Bellot
+// Copyright (c) 2014, Athanasios Iliopoulos
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2011 Joerg Walter, Mathias Koch, David Bellot
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2013
+// Joerg Walter, Mathias Koch, Athanasios Iliopoulos
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000-2013
+// Joerg Walter, Mathias Koch. David Bellot
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001 Daniel C. Nuffer
+// Copyright (c) 2001-2011 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2008 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2001 David Abrahams
+// Copyright (c) 2003-2005 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2002 Lars Gullik Bjรธnnes <larsbj@lyx.org>
+// Copyright 2003-2005 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2007, 2014 Peter Dimov
+// Copyright (c) Beman Dawes 2011
+// Copyright (c) 2015 Ion Gaztanaga
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2013 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002, 2003 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+// Copyright 2005 Rene Rivera
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+// Copyright 2006 Ion Gaztanaga
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+// Copyright 2006 Michael van der Westhuizen
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+// Copyright 2006 Michael van der Westhuizen
+// Copyright 2012 IBM Corp.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2005 Peter Dimov
+// Copyright 2007-2012 Ion Gaztanaga
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2006 Peter Dimov
+// Copyright 2005 Ben Hutchings
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright 2004-2008 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2003 John Maddock
+// Copyright (c) 2001 Darin Adler
+// Copyright (c) 2001 Peter Dimov
+// Copyright (c) 2002 Bill Kempf
+// Copyright (c) 2002 Jens Maurer
+// Copyright (c) 2002-2003 David Abrahams
+// Copyright (c) 2003 Gennaro Prota
+// Copyright (c) 2003 Eric Friedman
+// Copyright (c) 2010 Eric Jourdanneau, Joel Falcou
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2001 David Abrahams
+// Copyright (c) 2005 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2005 Peter Dimov
+// Copyright (c) 2006 Michael van der Westhuizen
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2009, 2012 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2009, Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2010 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2011 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2011 Hartmut Kaiser
+// Copyright (c) 2001-2011 Joel de Guzman
+// Copyright (c) 2009 Carl Barron
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2011 Hartmut Kaiser
+// Copyright (c) 2001-2011 Joel de Guzman
+// Copyright (c) 2011 Thomas Bernard
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2011 Joel de Guzman
+// Copyright (c) 2001-2011 Hartmut Kaiser
+// Copyright (c) 2009 Francois Barel
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2011 Thomas Bernard
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001-2013 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2008-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2009 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002, 2003 Peter Dimov
+// Copyright (c) 2003 Daniel Frey
+// Copyright (c) 2003 Howard Hinnant
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002, 2003 Peter Dimov and Multi Media Ltd.
+// Copyright (c) 2008 Frank Mori Hess
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002, 2009, 2014 Peter Dimov
+// Copyright (2) Beman Dawes 2010, 2011
+// Copyright (3) Ion Gaztanaga 2013
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002-2003
+// Toon Knapen, Kresimir Fresl, Joerg Walter
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002-2003 Eric Friedman
+// Copyright (c) 2002 by Andrei Alexandrescu
+// Copyright (c) 2013-2014 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003
+// Gunter Winkler, Joerg Walter
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003 David Abrahams
+// Copyright (c) 2003 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003 Peter Dimov Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003 Vladimir Prus.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2010 Beman Dawes
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2004 Ralf Mattethat
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006 Piotr Wyderski
+// Copyright (c) 2006 Tomas Puverle
+// Copyright (c) 2006 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006 Piotr Wyderski
+// Copyright (c) 2006 Tomas Puverle
+// Copyright (c) 2006 Peter Dimov
+// Copyright (c) 2011 Emil Dotchevski
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006 Xiaogang Zhang
+// Copyright (c) 2006 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006 Xiaogang Zhang
+// Copyright (c) 2017 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006 Xiaogang Zhang, 2015 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006, Stephan Diederich
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006-7 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007, 2008 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007, 2008 Peter Dimov
+// Copyright (c) 2008 Michael Marcin
+// Copyright (c) 2009 Frank Mori Hess
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007, 2008, 2012 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007, 2013 John Maddock
+// Copyright Christopher Kormanyos 2013.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007, 2013 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007, 2013, 2015 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008 Frank Mori Hess
+// Copyright (c) 2016 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008, 2009 Peter Dimov
+// Copyright (c) 2018 Andrey Semashev
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008, 2011 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008-2009 Ben Hanson
+// Copyright (c) 2008-2011 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008-2009 Frank Mori Hess
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009
+// Gunter Winkler
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009 Helge Bahmann
+// Copyright (c) 2012 - 2014, 2017 Andrey Semashev
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009, 2015 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009, Spirent Communications, Inc.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2010 Artyom Beilis (Tonkikh)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2010 Athanasios Iliopoulos
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2010 Ilya Murav'jov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2010 Neil Groves
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2010 Nuovation System Designs, LLC
+// Grant Erickson <gerickson@nuovations.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2010-2011 David Bellot
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011 Aaron Graham
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011 Helge Bahmann
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2012 Oswin Krause
+// Copyright (c) 2013 Joaquim Duran
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013 Anton Bikineev
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013 Christopher Kormanyos
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 Artyom Beilis (Tonkikh)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 Orson Peters
+// This software is provided 'as-is', without any express or implied warranty. In no event will the
+// authors be held liable for any damages arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose, including commercial
+// applications, and to alter it and redistribute it freely, subject to the following restrictions:
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017 Dynatrace
+
+
+====================COPYRIGHT====================
+// Copyright 1999-2003 Aleksey Gurtovoy. Use, modification, and distribution are
+// subject to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================COPYRIGHT====================
+// Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+// Copyright 2002 Aleksey Gurtovoy (agurtovoy@meta-comm.com)
+
+
+====================COPYRIGHT====================
+// Copyright 2001 John Maddock.
+// Copyright 2017 Peter Dimov.
+
+
+====================COPYRIGHT====================
+// Copyright 2001, 2003, 2004, 2012 Daryle Walker. Use, modification, and
+// distribution are subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or a copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2001, 2004 Daryle Walker. Use, modification, and distribution are
+// subject to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================COPYRIGHT====================
+// Copyright 2002 Daryle Walker. Use, modification, and distribution are subject
+// to the Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================COPYRIGHT====================
+// Copyright 2002, 2009 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2002, 2009, 2014 Peter Dimov
+// Copyright 2008-2009 Frank Mori Hess
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Daniel Egloff, Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Daniel Egloff, Olivier Gygi. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Daniel Egloff. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Eric Niebler, Daniel Egloff. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Eric Niebler, Michael Gauckler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005, 2014 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2005-2013 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2006 Daniel Egloff, Olivier Gygi. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2006 Eric Niebler, Olivier Gygi. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2006 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2006 Olivier Gygi, Daniel Egloff. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2006, Eric Niebler, Olivier Gygi. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2007 Baruch Zilber
+// Copyright 2007 Boris Gubenko
+
+
+====================COPYRIGHT====================
+// Copyright 2007 David Jenkins.
+// Copyright 2007 Eric Niebler.
+
+
+====================COPYRIGHT====================
+// Copyright 2007 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2007, 2014 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Eric Niebler.
+// Copyright 2008 David Jenkins.
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Howard Hinnant
+// Copyright 2008 Beman Dawes
+// Copyright 2009 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Howard Hinnant
+// Copyright 2008 Beman Dawes
+// Copyright 2009-2011 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Howard Hinnant
+// Copyright 2008 Beman Dawes
+// Copyright 2009-2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2008,2012 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2009 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2009-2010 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2009-2011 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2010 Daniel Wallin, Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2010 Gaetano Mendola, 2011 Simon West. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2010 John Maddock
+
+
+====================COPYRIGHT====================
+// Copyright 2010 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2011 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2011 Simon West. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2012 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+
+====================COPYRIGHT====================
+// Copyright 2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2013 Nikhar Agrawal
+// Copyright 2013 Christopher Kormanyos
+// Copyright 2013 John Maddock
+// Copyright 2013 Paul Bristow
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright 2013 Nikhar Agrawal
+// Copyright 2013 Christopher Kormanyos
+// Copyright 2014 John Maddock
+// Copyright 2013 Paul Bristow
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright 2013 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2014 Marco Guazzone (marco.guazzone@gmail.com)
+
+
+====================COPYRIGHT====================
+// Copyright 2014 Neil Groves
+
+
+====================COPYRIGHT====================
+// Copyright 2015 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+
+====================COPYRIGHT====================
+// Copyright 2015 Klemens Morgenstern
+
+
+====================COPYRIGHT====================
+// Copyright 2015 Peter Dimov.
+
+
+====================COPYRIGHT====================
+// Copyright 2015, 2016 Peter Dimov.
+
+
+====================COPYRIGHT====================
+// Copyright 2015, 2017 Peter Dimov.
+
+
+====================COPYRIGHT====================
+// Copyright 2015-2017 Peter Dimov.
+
+
+====================COPYRIGHT====================
+// Copyright 2016 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2016 Klemens Morgenstern
+
+
+====================COPYRIGHT====================
+// Copyright 2016 Peter Dimov.
+
+
+====================COPYRIGHT====================
+// Copyright 2016, 2017 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright 2017 John Maddock
+// Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright 2017 Peter Dimov.
+
+
+====================COPYRIGHT====================
+// Copyright Adam D. Walling 2012. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Antony Polukhin, 2013-2014.
+
+
+====================COPYRIGHT====================
+// Copyright Arno Schoedl & Neil Groves 2009.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 1994, 2006, 2008
+// Copyright Vicente J. Botet Escriba 2009
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 1994, 2006, 2008
+// Copyright Vicente J. Botet Escriba 2009-2011
+// Copyright Christopher Brown 2013
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 1994-2007, 2011
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 1994-99. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 1995-2001. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2001. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2002
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2002, 2006
+// Copyright (c) Microsoft Corporation 2014
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2002-2005, 2009
+// Copyright Vladimir Prus 2002
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2002-2009
+// Copyright Jan Langer 2002
+// Copyright Dietmar Kuehl 2001
+// Copyright Vladimir Prus 2002
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2003
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2003, 2006
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2003, 2006, 2008
+// Copyright 2009-2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2003, 2006, 2010
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2003, 2006, 2011
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2003, 2010
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2005.
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2006
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2006, 2007
+// Copyright Christoper Kohlhoff 2007
+// Copyright Peter Dimov 2017, 2018
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2007
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2008
+// Copyright Vicente J. Botet Escriba 2009
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2009
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2010
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2010, 2011, 2014
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2011
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2013
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2014
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2015
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes and Daryle Walker 1999. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes, 2002-2005
+// Copyright Vladimir Prus, 2002
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes, 2009
+// Copyright (C) 2011-2012 Vicente J. Botet Escriba
+// Copyright (C) 2012 Anthony Williams
+
+
+====================COPYRIGHT====================
+// Copyright Benjamin Sobotta 2012
+
+
+====================COPYRIGHT====================
+// Copyright Bryce Lelbach 2010
+// Copyright Neil Groves 2009. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Daniel Walker 2006. Use, modification and distribution
+// are subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Daniel Walker, Eric Niebler, Michel Morin 2008-2012.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or
+
+
+====================COPYRIGHT====================
+// Copyright Darin Adler 2000
+// Copyright Beman Dawes 2008
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2001-2006
+// Copyright Emil Dotchevski 2007
+// Use, modification and distribution is subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2002-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2004.
+// Copyright 2005 Peter Dimov
+
+
+====================COPYRIGHT====================
+// Copyright Jens Maurer 2006-1011
+// Copyright Steven Watanabe 2011
+// Copyright 2012 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2005-2006, 2011.
+// Copyright Paul A. Bristow 2006-2011.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2005-2006.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2005-2008.
+// Copyright (c) 2006-2008 Johan Rade
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006, 2007, 2012, 2014.
+// Copyright Paul A. Bristow 2006, 2007, 2012
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006, 2007.
+// Copyright Paul A. Bristow 2006, 2007, 2009, 2010.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006, 2007.
+// Copyright Paul A. Bristow 2006, 2007.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006, 2010.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006-7, 2013-14.
+// Copyright Paul A. Bristow 2007, 2013-14.
+// Copyright Nikhar Agrawal 2013-14
+// Copyright Christopher Kormanyos 2013-14
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006.
+// Copyright Paul A. Bristow 2006, 2012, 2017.
+// Copyright Thomas Mang 2012.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2007, 2014.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2007-8.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2007.
+// Copyright Paul A. Bristow 2007, 2009
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2008
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2010, 2012.
+// Copyright Paul A. Bristow 2011, 2012.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2010.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2015.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2016.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2017.
+// Copyright Nick Thompson 2017.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright Jonathan Turkanis 2005. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Neil Groves & Thorsten Ottosen & Pavol Droba 2003-2004.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Neil Groves 2003-2004.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Neil Groves 2007.
+// Copyright Thorsten Ottosen 2006.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Neil Groves 2009. Use, modification and distribution
+// are subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Neil Groves 2010. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Neil Groves 2014
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Pavol Droba 2002-2003.
+
+
+====================COPYRIGHT====================
+// Copyright Pavol Droba 2002-2004.
+
+
+====================COPYRIGHT====================
+// Copyright Pavol Droba 2002-2006.
+
+
+====================COPYRIGHT====================
+// Copyright Samuel Krempp 2003. Use, modification, and distribution are
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Thijs van den Berg, 2008.
+// Copyright John Maddock 2008.
+// Copyright Paul A. Bristow 2008, 2014.
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen 2003-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen 2003-2005. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen 2003-2006. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen 2003-2007. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen 2003-2008. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen 2006. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen 2008. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen, Neil Groves 2006 - 2008. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen, Neil Groves 2006. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// This file was automatically generated on Tue Aug 17 16:27:31 2021
+// by libs/config/tools/generate.cpp
+// Copyright John Maddock 2002-21.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// (C) Copyright 2014 Jim Bell
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// (C) Copyright 2016 Ashish Sadanandan
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002-2008 Robert Ramey and Joaquin M Lopez Munoz
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal.
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002-2009 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002-2014 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002-4 Pavel Vozenilek .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2003-4 Pavel Vozenilek and Robert Ramey - http://www.rrsd.com.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2004 Pavel Vozenilek.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2004 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2004 Robert Ramey and Martin Ecker
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2004-2009 Robert Ramey, Martin Ecker and Takatoshi Kondo
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005 Matthias Troyer
+// (C) Copyright 2006 Douglas Gregor <doug.gregor -at- gmail.com>
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005 Matthias Troyer and Dave Abrahams
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005 Robert Ramey - http://www.rrsd.com
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005-2006 Matthias Troyer
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005-2007 Matthias Troyer
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005-7 Anthony Williams
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2006 David Abrahams - http://www.boost.org.
+// implementation of class export functionality. This is an alternative to
+// "forward declaration" method to provoke instantiation of derived classes
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007 Andrew Sutton
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007 Matthias Troyer .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007-10 Anthony Williams
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007-2009 Andrew Sutton
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007-2010 Anthony Williams
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007-8 Anthony Williams
+// (C) Copyright 2011,2012,2015 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007-9 Anthony Williams
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// (C) Copyright 2002, 2003 Beman Dawes Boost.Filesystem
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2004-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// (C) Copyright David Abrahams 2004.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// (C) Copyright Jonathan Graehl 2004.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 Matthias Troyer
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 Robert Ramey
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008-2009,2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2009 Eric Bose-Wolf
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2009 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2009-2012 Anthony Williams
+// (C) Copyright 2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2009-2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2010 Daniel James
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2010 Just Software Solutions Ltd http://www.justsoftwaresolutions.co.uk
+// (C) Copyright 2012 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2010 Robert Ramey
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2012 Vicente Botet
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2012 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2013 Ruslan Baratov
+// Copyright (C) 2014 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2013,2015 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2014 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2014 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright Andrew Sutton 2007
+
+
+====================COPYRIGHT====================
+// (C) Copyright Andrey Semashev 2017.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Daniel K. O. 2005.
+// (C) Copyright Ion Gaztanaga 2007-2014
+
+
+====================COPYRIGHT====================
+// (C) Copyright Daniel Wallin 2004.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright David Abrahams 2001, Howard Hinnant 2001.
+
+
+====================COPYRIGHT====================
+// (C) Copyright David Abrahams 2001.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright David Abrahams 2002.
+// (C) Copyright Jeremy Siek 2002.
+// (C) Copyright Thomas Witt 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright David Abrahams, Vicente Botet 2009.
+// (C) Copyright Ion Gaztanaga 2009-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Douglas Gregor 2010
+
+
+====================COPYRIGHT====================
+// (C) Copyright Francois Faure, iMAGIS-GRAVIR / UJF, 2001.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// (C) Copyright Peter Dimov 2001, 2002, 2003
+// (C) Copyright Ion Gaztanaga 2006-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Howard Hinnant 2007-2010. Distributed under the Boost
+// Software License, Version 1.0. (see http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2006-2014
+// (C) Copyright Microsoft Corporation 2014
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2006-2013
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2006-2015
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2009-2013.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2010-2013
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2013-2013
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2013-2014
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2004-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2005-2013.
+// (C) Copyright Gennaro Prota 2003 - 2004.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2005-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2005-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2005-2016.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2005.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2006-2012
+// (C) Copyright Markus Schoepflin 2007
+// (C) Copyright Bryce Lelbach 2010
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2006-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2007-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2007-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2008
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2008-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2008-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2008-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2009-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2010-2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2010-2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2011-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2011-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2012-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2012-2015.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2012-2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2014-2014.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2014-2017. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2015-2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2016-2016. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2017-2018.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jens Maurer 2001.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy Siek 2000.
+// Copyright 2002 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy Siek 2000.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy Siek 2001.
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jeremy Siek, 2001.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Joaquin M Lopez Munoz 2006-2013
+// (C) Copyright Ion Gaztanaga 2014-2014
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jonathan Turkanis 2004-2005.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jorge Lodos 2008.
+// (C) Copyright Jonathan Turkanis 2003.
+// (C) Copyright Craig Henderson 2002. 'boost/memmap.hpp' from sandbox
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Michael Glassford 2004.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Milan Svoboda 2008.
+// Originally developed under the fusecompress project.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Olaf Krzikalla 2004-2006.
+// (C) Copyright Ion Gaztanaga 2006-2014
+
+
+====================COPYRIGHT====================
+// (C) Copyright Orson Peters 2017.
+// (C) Copyright Ion Gaztanaga 2017-2018.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Pablo Halpern 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Peter Dimov 2001, 2002
+// (C) Copyright Ion Gaztanaga 2006-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Peter Dimov 2008.
+// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Peter Dimov and Multi Media Ltd. 2001, 2002, 2003
+// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Peter Dimov and Multi Media Ltd. 2001, 2002, 2003
+// (C) Copyright Peter Dimov 2004-2005
+// (C) Copyright Ion Gaztanaga 2006-2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ronald Garcia 2002. Permission to copy, use, modify, sell and
+// distribute this software is granted provided this copyright notice appears
+// in all copies. This software is provided "as is" without express or implied
+// warranty, and with no claim as to its suitability for any purpose.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Stephen Cleary 2000
+// (C) Copyright Ion Gaztanaga 2015-2017.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Stephen Cleary 2000.
+// (C) Copyright Ion Gaztanaga 2007-2013.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Thorsten Ottosen 2002-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Thorsten Ottosen 2005
+// (C) Copyright Howard Hinnant 2004
+// (C) Copyright Jonathan Turkanis 2004
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Tobias Schwinger
+
+
+====================COPYRIGHT====================
+// (C) Copyright Toon Knapen 2001.
+// (C) Copyright David Abrahams 2003.
+// (C) Copyright Roland Richter 2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Vicente J. Botet Escriba 20010.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+
+
+====================COPYRIGHT====================
+// (C) Copyright Vicente J. Botet Escriba 2008-2009,2012. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Vicente J. Botet Escriba 2010.
+// Distributed under the Boost
+// Software License, Version 1.0.
+
+
+====================COPYRIGHT====================
+// (C) Copyright Vicente J. Botet Escriba 2013-2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Vicente J. Botet Escriba 2013-2017. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Vicente J. Botet Escriba 2014-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Vicente J. Botet Escriba 2014. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (c) 2008 Gordon Woodhull
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSEmpl::_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (c) Copyright Andreas Huber Doenni 2002-2005, Eric Niebler 2006
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (c) Copyright Jeremy Siek and John R. Bandela 2001.
+
+
+====================COPYRIGHT====================
+// (c) Copyright John Maddock 2003
+
+
+====================COPYRIGHT====================
+// (c) Copyright Juergen Hunold 2008
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (c) Copyright Raffi Enficiaud 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Author: Gerald Evenden
+// Copyright (c) 1995, Gerald Evenden
+
+
+====================COPYRIGHT====================
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2000 Gary Powell (gary.powell@sierra.com)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 1999-2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+// Gary Powell (gwpowell@hotmail.com)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2000 Gary Powell (gwpowell@hotmail.com)
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
+// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2000 Stephen Cleary
+// Copyright (C) 2008 Ion Gaztanaga
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2000, 2001 Stephen Cleary
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2000, 2001 Stephen Cleary
+// Copyright (C) 2010 Paul A. Bristow added Doxygen comments.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+// 2001 Gary Powell (gary.powell@sierra.com)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2001 Gary Powell (gary.powell@sierra.com)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001 Jeremy Siek, Douglas Gregor, Brian Osman
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001 Vladimir Prus <ghost@cs.msu.su>
+// Copyright (C) 2001 Jeremy Siek <jsiek@cs.indiana.edu>
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001-2003
+// Mac Murrett
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001-2003
+// William E. Kempf
+// (C) Copyright 2008-9 Anthony Williams
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001-2003
+// William E. Kempf
+// Copyright (C) 2007-9 Anthony Williams
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001-2003
+// William E. Kempf
+// Copyright (C) 2011-2013 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002-2003
+// David Moore, William E. Kempf
+// Copyright (C) 2007-8 Anthony Williams
+// (C) Copyright 2013 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2007 Alexey Baskakov
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2009 Sebastian Redl
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2013 Sebastian Redl
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002-2006 Marcin Kalicinski
+// Copyright (C) 2015 Sebastian Redl
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002-2007 Marcin Kalicinski
+// Copyright (C) 2007 Alexey Baskakov
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+// Copyright (C) 2014 - 2017 Andrzej Krzemienski.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+// Copyright (C) 2014-2016 Andrzej Krzemienski.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+// Copyright (C) 2015 - 2017 Andrzej Krzemienski.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+// Copyright (C) 2015 Andrzej Krzemienski.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003, 2008 Fernando Luis Cacciola Carballal.
+// Copyright (C) 2016 Andrzej Krzemienski
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+// Copyright (C) 2007, Tobias Schwinger.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003, Fernando Luis Cacciola Carballal.
+// Copyright (C) 2014, 2015 Andrzej Krzemienski.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
+// Copyright (C) 2005-2008 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
+// Copyright (C) 2005-2011 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
+// Copyright (C) 2005-2016 Daniel James
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003-2008 Matthias Christian Schabel
+// Copyright (C) 2007-2008 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003-2008 Matthias Christian Schabel
+// Copyright (C) 2007-2010 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003-2008 Matthias Christian Schabel
+// Copyright (C) 2008 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2003-2009 Matthias Christian Schabel
+// Copyright (C) 2007-2009 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004 Arkadiy Vertleyb
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004 Arkadiy Vertleyb
+// Copyright (C) 2004 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004 Arkadiy Vertleyb
+// Copyright (C) 2005 Peder Holt
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004, 2005 Arkadiy Vertleyb
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004-2006 The Trustees of Indiana University.
+// Copyright (C) 2002 Brad King and Douglas Gregor
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004-2006 The Trustees of Indiana University.
+// Copyright (C) 2007 Douglas Gregor
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004-2008 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004-2008 The Trustees of Indiana University.
+// Copyright (C) 2007 Douglas Gregor
+// Copyright (C) 2007 Matthias Troyer <troyer@boost-consulting.com>
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004-2008 The Trustees of Indiana University.
+// Copyright (C) 2007 Douglas Gregor <doug.gregor@gmail.com>
+// Copyright (C) 2007 Matthias Troyer <troyer@boost-consulting.com>
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2004-2009 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005 Arkadiy Vertleyb
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005 Arkadiy Vertleyb, Peder Holt.
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005 Douglas Gregor.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005 Eric Niebler
+// Copyright (C) 2014 Pieter Bastiaan Ober (Integricom).
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005 Igor Chesnokov, mailto:ichesnokov@gmail.com (VC 6.5,VC 7.1 + counter code)
+// Copyright (C) 2005-2007 Peder Holt (VC 7.0 + framework)
+// Copyright (C) 2006 Steven Watanabe (VC 8.0)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005, 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+// Copyright (C) 2016 K. Noel Belcourt <kbelco -at- sandia.gov>.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005, Fernando Luis Cacciola Carballal.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005-2006 Alain Miniussi <alain.miniussi -at- oca.eu>.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005-2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005-2006 Douglas Gregor <doug.gregor@gmail.com>.
+// Copyright (C) 2004 The Trustees of Indiana University
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005-2006 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005-2008 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005-2009 Jongsoo Park <jongsoo.park -at- gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2005-2010 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2006 Tiago de Paula Peixoto <tiago@forked.de>
+// Copyright (C) 2004 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2006 Arkadiy Vertleyb
+// Copyright (C) 2017 Daniela Engert
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2006 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2006, 2009 Marcin Kalicinski
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2006-2009 Dmitry Bufistov and Andrey Parfenov
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2006-2009, 2012 Alexander Nasonov
+// Copyright (C) 2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2006-2010 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 Douglas Gregor
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 Douglas Gregor
+// Copyright (C) 2007 Hartmut Kaiser
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 Douglas Gregor and Matthias Troyer
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 Marcin Kalicinski
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 Matthias Troyer
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 Peder Holt
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 Trustees of Indiana University
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007, 2008 Steven Watanabe, Joseph Gauterin, Niels Dekker
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2008 Eric Niebler.
+// Copyright (C) 2012 Pieter Bastiaan Ober (Integricom).
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2008-2011 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2008-2016 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2008-2018 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0 (see accompanying
+// file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2009 Andrew Sutton
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2009-2012 Lorenzo Caminiti
+// Distributed under the Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2010 Peder Holt
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2010 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2010-2011 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2011 Jรบlio Hoffimann.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2011 Tim Blechmann
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2011 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2012 Flavio De Lorenzi (fdlorenzi@gmail.com)
+// Copyright (C) 2013 Jakob Lykke Andersen, University of Southern Denmark (jlandersen@imada.sdu.dk)
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2012-2013 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2013 Eurodecision
+// Authors: Guillaume Pinot
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2013 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2013,2014 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2013-2014 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2014 Erik Erlandson
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2014 Ian Forbed
+// Copyright (C) 2014-2015 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2014 Ian Forbed
+// Copyright (C) 2014-2017 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2014, Andrzej Krzemienski.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2015 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2015-2016 Andrzej Krzemienski.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2017
+// Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2017 Andrzej Krzemienski.
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2017 Michel Morin.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000 David Abrahams.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (c) 1995, 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 1995 Maarten Hilferink, Amsterdam, the Netherlands
+
+
+====================COPYRIGHT====================
+// Copyright (c) 1996-1998
+// Silicon Graphics Computer Systems, Inc.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000 Cadenza New Zealand Ltd
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2000, Frank Warmerdam
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001 Ronald Garcia, Indiana University (garcia@osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu).
+// Distributed under the Boost Software License, Version 1.0. (See
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2001, Thomas Flemming, tf@ttqv.com
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002 Eric Friedman, Itay Maman
+// Copyright (c) 2016-2017 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002-2003
+// Eric Friedman
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002-2003 Eric Friedman
+// Copyright (c) 2014-2017 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2002-2003 Eric Friedman, Itay Maman
+// Copyright (c) 2012-2016 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003
+// Eric Friedman
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003
+// Eric Friedman, Itay Maman
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003 Gerald I. Evenden
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003 Eric Friedman
+// Copyright (c) 2015-2016 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003 Eric Friedman
+// Copyright (c) 2016 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003 Eric Friedman, Itay Maman
+// Copyright (c) 2013-2016 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003 Eric Friedman, Itay Maman
+// Copyright (c) 2014 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003, 2006 Gerald I. Evenden
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2008 Jan Gaspar
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2008 Jan Gaspar
+// Copyright (c) 2013 Paul A. Bristow // Doxygen comments changed.
+// Copyright (c) 2013 Antony Polukhin // Move semantics implementation.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2005 Stefan Arentz (stefan at soze dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2008 Roelof Naude (roelof.naude at gmail dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2011 Boris Schaeling (boris@highscore.de)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2014 Oliver Kowalke (oliver dot kowalke at gmail dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2004 Gerald I. Evenden
+// Copyright (c) 2012 Martin Raspaud
+// See also (section 4.4.3.2):
+// http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2004 Jonathan Brandmeyer
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2004 Kristopher Beevers
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2005 Aaron Windsor
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com
+// Copyright (c) 2005-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006 Johan Rade
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011 Jeff Flinn, Boris Schaeling
+// Copyright (c) 2012 Boris Schaeling
+// Copyright (c) 2016 Klemens D. Morgenstern
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006, 2007 Julio M. Merino Vidal
+// Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
+// Copyright (c) 2009 Boris Schaeling
+// Copyright (c) 2010 Felipe Tanus, Boris Schaeling
+// Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
+// Copyright (c) 2016 Klemens D. Morgenstern
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2006-2007 Matias Capeletto
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2011 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2011 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2011 Mateusz Loskot, London, UK.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Samuel Debionne, Grenoble, France.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2014-2018 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2014 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+// Copyright (c) 2013-2015 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+// Copyright (c) 2014-2015 Samuel Debionne, Grenoble, France.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
+// Copyright (c) 2014-2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2016 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2007-2017 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2008-2017 Bruno Lalande, Paris, France.
+// Copyright (c) 2009-2017 Mateusz Loskot, London, UK.
+// Copyright (c) 2014-2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008 Gerald I. Evenden
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008 Federico J. Fernandez.
+// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008-2009 Ben Hanson (http://www.benhanson.net/)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2008-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2009-2014 Mateusz Loskot, London, UK.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2008-2015 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009 Ben Hanson (http://www.benhanson.net/)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009-2015 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009-2016 Vladimir Batov.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2010 Alfredo Correa
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2010 Alfredo Correa
+// Copyright (c) 2010-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2016 Norbert Wenzel
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011
+// Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011, 2012 Martin Lambers <marlam@marlam.de>
+// The QSC projection was introduced in:
+// [OL76]
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2011-2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2011-2012 Mateusz Loskot, London, UK.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2013 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2015 Akira Takahashi
+// Copyright (c) 2011-2015 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2015 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2016 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011-2018 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2012 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012 Bruno Lalande, Paris, France.
+// Copyright (c) 2012 Mateusz Loskot, London, UK.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2013 Andrew Hundt.
+// Copyright (c) 2013-2014 Ion Gaztanaga
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2012-2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2012-2014 Mateusz Loskot, London, UK.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2012-2015 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2011-2013 Andrew Hundt.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2012-2015 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2013 Bruno Lalande, Paris, France.
+// Copyright (c) 2013 Mateusz Loskot, London, UK.
+// Copyright (c) 2013 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013 John Maddock, Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013-2014 Kyle Lutz <kyle.r.lutz@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013-2015 Kyle Lutz <kyle.r.lutz@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013-2017 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014 Bruno Lalande, Paris, France.
+// Copyright (c) 2014 Mateusz Loskot, London, UK.
+// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014 Glen Joseph Fernandes
+// glenfe at live dot com
+// Copyright (c) 2014 Riccardo Marcangelo
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014 Mageswaran.D <mageswaran1989@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014 Roshan <thisisroshansmail@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014-2015 Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014-2015 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2014-2015 Bruno Lalande, Paris, France.
+// Copyright (c) 2014-2015 Mateusz Loskot, London, UK.
+// Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014-2015, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014-2016 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014-2017 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014-2017, Oracle and/or its affiliates.
+// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2014-2018, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 Jakub Pola <jakub.pola@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 Jakub Szuppe <j.szuppe@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 Muhammad Junaid Muzammil <mjunaidmuzammil@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015 Seth Heeren
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015-2016 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015-2016 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015-2016 Vinnie Falco (vinnie dot falco at gmail dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015-2017 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015-2017, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2015-2018 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2016 Jakub Szuppe <j.szuppe@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2016 Klemens D. Morgenstern
+// Copyright (c) 2008 Beman Dawes
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2016 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2016, Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2016-2017 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2016-2017, Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2016-2018 Oracle and/or its affiliates.
+// Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017 Barend Gehrels, Amsterdam, the Netherlands.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017 Denis Demidov <dennis.demidov@gmail.com>
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017 Klemens D. Morgenstern
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017 Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017 Vinnie Falco (vinnie dot falco at gmail dot com)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017, Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017-2017 Barend Gehrels, Amsterdam, the Netherlands.
+// Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2017-2018, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2018 Adam Wulkiewicz, Lodz, Poland.
+
+
+====================COPYRIGHT====================
+// Copyright (c) Aaron Windsor 2007
+
+
+====================COPYRIGHT====================
+// Copyright (c) Antony Polukhin, 2012-2016.
+
+
+====================COPYRIGHT====================
+// Copyright (c) Antony Polukhin, 2012-2018.
+
+
+====================COPYRIGHT====================
+// Copyright (c) Antony Polukhin, 2013-2014.
+
+
+====================COPYRIGHT====================
+// Copyright (c) Antony Polukhin, 2013-2018.
+
+
+====================COPYRIGHT====================
+// Copyright (c) Chris Glover, 2016.
+
+
+====================COPYRIGHT====================
+// Copyright (c) David Abrahams 2001.
+// Copyright (c) Jeremy Siek 2001-2003.
+// Copyright (c) Thomas Witt 2002.
+
+
+====================COPYRIGHT====================
+// Copyright (c) Intel Corporation 2008.
+// Copyright (c) 2008-2012 Simonson Lucanus.
+// Copyright (c) 2012-2012 Andrii Sydorchuk.
+
+
+====================COPYRIGHT====================
+// Copyright (c) Jeremy Siek 2001
+// Copyright (c) Douglas Gregor 2004
+
+
+====================COPYRIGHT====================
+// Copyright (c) Jeremy Siek 2001, Marc Wintermantel 2002
+
+
+====================COPYRIGHT====================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright (C) Vladimir Prus 2003
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+
+
+====================COPYRIGHT====================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2003 Bruce Barr
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+
+
+====================COPYRIGHT====================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2004 The Trustees of Indiana University.
+// Copyright 2007 University of Karlsruhe
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Douglas Gregor,
+// Jens Mueller
+
+
+====================COPYRIGHT====================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2004, 2005 Trustees of Indiana University
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek,
+// Doug Gregor, D. Kevin McGrath
+
+
+====================COPYRIGHT====================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2006 The Trustees of Indiana University.
+// Copyright (C) 2001 Vladimir Prus <ghost@cs.msu.su>
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Douglas Gregor
+
+
+====================COPYRIGHT====================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2009 Trustees of Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Michael Hansen
+
+
+====================COPYRIGHT====================
+// Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
+// Copyright 2010 Thomas Claveirole
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek, Thomas Claveirole
+
+
+====================COPYRIGHT====================
+// Copyright 1997-2001 University of Notre Dame.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+
+
+====================COPYRIGHT====================
+// Copyright 2000 John Maddock (john@johnmaddock.co.uk)
+// Copyright 2000 Jeremy Siek (jsiek@lsc.nd.edu)
+// Copyright 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
+
+
+====================COPYRIGHT====================
+// Copyright 2000 University of Notre Dame.
+// Authors: Jeremy G. Siek, Andrew Lumsdaine, Lie-Quan Lee
+
+
+====================COPYRIGHT====================
+// Copyright 2001 Indiana University
+// Author: Jeremy G. Siek
+
+
+====================COPYRIGHT====================
+// Copyright 2001 Universite Joseph Fourier, Grenoble.
+// Author: Francois Faure
+
+
+====================COPYRIGHT====================
+// Copyright 2001 University of Notre Dame.
+// Copyright 2003 Jeremy Siek
+// Authors: Lie-Quan Lee, Jeremy Siek, and Douglas Gregor
+
+
+====================COPYRIGHT====================
+// Copyright 2001 University of Notre Dame.
+// Copyright 2006 Trustees of Indiana University
+// Authors: Jeremy G. Siek and Douglas Gregor <dgregor@cs.indiana.edu>
+
+
+====================COPYRIGHT====================
+// Copyright 2002 Indiana University.
+// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
+
+
+====================COPYRIGHT====================
+// Copyright 2002 Marc Wintermantel (wintermantel@even-ag.ch)
+// ETH Zurich, Center of Structure Technologies (www.imes.ethz.ch/st)
+
+
+====================COPYRIGHT====================
+// Copyright 2002 Rensselaer Polytechnic Institute
+
+
+====================COPYRIGHT====================
+// Copyright 2002, 2005 Daryle Walker. Use, modification, and distribution
+// are subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
+
+
+====================COPYRIGHT====================
+// Copyright 2002-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2002-2007 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2002-2008 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2002-2010 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2003 (c) The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2004 Eric Niebler.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2004 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2004 The Trustees of Indiana University.
+// Copyright 2005 Matthias Troyer.
+// Copyright 2006 Douglas Gregor <doug.gregor -at- gmail.com>.
+
+
+====================COPYRIGHT====================
+// Copyright 2004, 2005 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2004-2006 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2004-5 The Trustees of Indiana University.
+// Copyright 2002 Brad King and Douglas Gregor
+
+
+====================COPYRIGHT====================
+// Copyright 2004-9 Trustees of Indiana University
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Alexander Nasonov.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Daniel Wallin.
+// Copyright 2005 Joel de Guzman.
+// Copyright 2005 Dan Marsden.
+// Copyright 2008 Hartmut Kaiser.
+// Copyright 2015 John Fletcher.
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Daniel Wallin.
+// Copyright 2005 Joel de Guzman.
+// Copyright 2005 Dan Marsden.
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Douglas Gregor.
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Eric Niebler.
+// Copyright (C) 2014 Pieter Bastiaan Ober (Integricom).
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Jeremy G. Siek
+// Authors: Jeremy G. Siek
+
+
+====================COPYRIGHT====================
+// Copyright 2005 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2005 Trustees of Indiana University
+// Authors: Andrew Lumsdaine, Douglas Gregor
+
+
+====================COPYRIGHT====================
+// Copyright 2005-2006 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005-2008 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005-2009 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005-2009 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2005-2011 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005-2012 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2005-2014 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2006 Andy Tompkins.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2006 Johan Rade
+// Copyright 2012 K R Walker
+// Copyright 2011, 2012 Paul A. Bristow
+
+
+====================COPYRIGHT====================
+// Copyright 2006 Roland Schwarz.
+// (C) Copyright 2007 Anthony Williams
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2006 Thorsten Ottosen.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2007 Aaron Windsor
+
+
+====================COPYRIGHT====================
+// Copyright 2007 Alexandre Courpron
+
+
+====================COPYRIGHT====================
+// Copyright 2007 Andy Tompkins.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2007 Stanford University
+// Authors: David Gleich
+
+
+====================COPYRIGHT====================
+// Copyright 2008
+// Author: Matyas W Egyhazy
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Andreas Huber Doenni
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Christophe Henry
+// henry UNDERSCORE christophe AT hotmail DOT com
+// This is an extended version of the state machine available in the boost::mpl library
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Eric Niebler. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Gautam Sewani
+// Copyright 2008 John Maddock
+
+
+====================COPYRIGHT====================
+// Copyright 2008 Joaquin M Lopez Munoz.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2008-2010 Gordon Woodhull
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2009 (C) Dean Michael Berris <me@deanberris.com>
+// Copyright 2012 (C) Google, Inc.
+// Copyright 2012 (C) Jeffrey Lee Hellrung, Jr.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2009 Andy Tompkins.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2009 Neil Groves.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2009 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2009, Andrew Sutton
+
+
+====================COPYRIGHT====================
+// Copyright 2009-2014 Neil Groves.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2010 Andy Tompkins.
+// Copyright 2017 James E. King III
+
+
+====================COPYRIGHT====================
+// Copyright 2010 Eric Niebler.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright 2010 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2011 Christophe Henry
+// henry UNDERSCORE christophe AT hotmail DOT com
+// This is an extended version of the state machine available in the boost::mpl library
+
+
+====================COPYRIGHT====================
+// Copyright 2011 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright 2011, Andrew Ross
+
+
+====================COPYRIGHT====================
+// Copyright 2011-2012 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright 2012 Fernando Vilas
+// 2010 Daniel Trebbien
+
+
+====================COPYRIGHT====================
+// Copyright 2012 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright 2012 The Trustees of Indiana University.
+
+
+====================COPYRIGHT====================
+// Copyright 2012, Philipp Moeller
+
+
+====================COPYRIGHT====================
+// Copyright 2012-2013 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright 2013 Maciej Piechotka
+// Authors: Maciej Piechotka
+
+
+====================COPYRIGHT====================
+// Copyright 2013 Rene Rivera
+// Distributed under the Boost Software License, Version 1.0. (See accompany-
+// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2013 University of Warsaw.
+// Authors: Piotr Wygocki
+
+
+====================COPYRIGHT====================
+// Copyright 2014 Peter Dimov
+// Copyright 2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+// Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+// Copyright 2015 Antony Polukhin.
+
+
+====================COPYRIGHT====================
+// Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+// Copyright 2015-2016 Antony Polukhin.
+
+
+====================COPYRIGHT====================
+// Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+// Copyright 2015-2017 Antony Polukhin.
+
+
+====================COPYRIGHT====================
+// Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+// Copyright 2015-2018 Antony Polukhin.
+
+
+====================COPYRIGHT====================
+// Copyright 2014,2018 Glen Joseph Fernandes
+// (glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+// Copyright 2014-2015 Renato Tegon Forti, Antony Polukhin.
+
+
+====================COPYRIGHT====================
+// Copyright 2015 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright 2015-2016 Klemens D. Morgenstern
+
+
+====================COPYRIGHT====================
+// Copyright 2016 Klemens Morgenstern, Antony Polukhin
+
+
+====================COPYRIGHT====================
+// Copyright 2017 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2018 Steven Watanabe
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2010.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2011.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2009 - 2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2010 - 2011.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2010.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2015.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2011 - 2012.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Abel Sinkovics (abel@sinkovics.hu) 2013.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2002
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2003
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2004
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright John R. Bandela 2000-2002
+// Copyright David Abrahams 2003-2004
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Peter Dimov 2000-2003
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2006
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2008
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2009
+// Copyright Jaap Suter 2003
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2000-2010
+// Copyright David Abrahams 2000-2002
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Dave Abrahams 2001-2002
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright Peter Dimov 2001-2003
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2001-2006
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2001-2007
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2001-2008
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2002-2004
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2002-2006
+// Copyright David Abrahams 2002-2003
+// Copyright Daniel Walker 2007
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2003-2007
+// Copyright David Abrahams 2003-2004
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2004
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2004
+// Copyright Alexander Nasonov 2004
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2006
+
+
+====================COPYRIGHT====================
+// Copyright Aleksey Gurtovoy 2008
+
+
+====================COPYRIGHT====================
+// Copyright Alexander Nasonov & Paul A. Bristow 2006.
+
+
+====================COPYRIGHT====================
+// Copyright Antony Polukhin, 2016-2017.
+
+
+====================COPYRIGHT====================
+// Copyright Antony Polukhin, 2016-2018.
+
+
+====================COPYRIGHT====================
+// Copyright Bruno Dutra 2015
+
+
+====================COPYRIGHT====================
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 John Maddock. Distributed under the Boost
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Christopher Kormanyos 2002 - 2013.
+// Copyright 2011 - 2013 John Maddock. Distributed under the Boost
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Christopher Kormanyos 2002 - 2013.
+// Copyright 2011 -2013 John Maddock. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Christopher Kormanyos 2014.
+// Copyright John Maddock 2014.
+// Copyright Paul Bristow 2014.
+// Distributed under the Boost Software License,
+// Version 1.0. (See accompanying file LICENSE_1_0.txt
+
+
+====================COPYRIGHT====================
+// Copyright Daniel Wallin 2005. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Daniel Wallin 2006. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Daniel Wallin 2007. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
+// distribution is subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Daniel Wallin, David Abrahams 2010. Use, modification and
+// distribution is subject to the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2002, Nikolay Mladenov 2007.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2002, Joel de Guzman, 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2005. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2006. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2009. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams and Jeremy Siek 2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams and Nikolay Mladenov 2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams and Thomas Becker 2000-2006.
+// Copyright Kohei Takahashi 2012-2014.
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams, Daniel Wallin 2003. Use, modification and
+// distribution is subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams, Daniel Wallin 2005. Use, modification and
+// distribution is subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2001-2006. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2002-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Douglas Gregor 2003-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Eric Friedman 2002
+// Copyright Aleksey Gurtovoy 2004
+
+
+====================COPYRIGHT====================
+// Copyright Eric Friedman 2002-2003
+// Copyright Aleksey Gurtovoy 2004
+
+
+====================COPYRIGHT====================
+// Copyright Eric Friedman 2003
+
+
+====================COPYRIGHT====================
+// Copyright Eric Niebler 2005.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Eric Niebler 2008
+
+
+====================COPYRIGHT====================
+// Copyright Eric Niebler 2009
+
+
+====================COPYRIGHT====================
+// Copyright Eric Niebler 2014
+
+
+====================COPYRIGHT====================
+// Copyright Frank Mori Hess 2007,2009.
+// Copyright Timmo Stange 2007.
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Frank Mori Hess 2007-2008.
+// Distributed under the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Frank Mori Hess 2007-2009.
+// Copyright Timmo Stange 2007.
+// Copyright Douglas Gregor 2001-2004. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Frank Mori Hess 2007-2010.
+// Use, modification and
+// distribution is subject to the Boost Software License, Version
+
+
+====================COPYRIGHT====================
+// Copyright Frank Mori Hess 2007.
+// Copyright Douglas Gregor 2001-2003. Use, modification and
+// distribution is subject to the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Frank Mori Hess 2008.
+// Distributed under the Boost Software License, Version
+// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Frank Mori Hess 2009
+// Use, modification and
+// distribution is subject to the Boost Software License, Version
+
+
+====================COPYRIGHT====================
+// Copyright Gottfried GanรŸauge 2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Gottfried GanรŸauge 2003..2006.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Howard Hinnant 2007-2010.
+// Copyright Vicente J. Botet Escriba 2012.
+
+
+====================COPYRIGHT====================
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006, 2007.
+// Copyright Paul A. Bristow 2008, 2010.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006.
+// Copyright Paul A. Bristow 2006.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2006.
+// Copyright Paul A. Bristow 2007.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2008-11.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2010.
+// Copyright Paul A. Bristow 2010.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2012.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0.
+
+
+====================COPYRIGHT====================
+// Copyright John Maddock 2014.
+// Copyright Paul A. Bristow 2014.
+
+
+====================COPYRIGHT====================
+// Copyright John R. Bandela 2001.
+
+
+====================COPYRIGHT====================
+// Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved.
+
+
+====================COPYRIGHT====================
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2014.
+
+
+====================COPYRIGHT====================
+// Copyright Kevlin Henney, 2000-2005.
+// Copyright Alexander Nasonov, 2006-2010.
+// Copyright Antony Polukhin, 2011-2016.
+
+
+====================COPYRIGHT====================
+// Copyright Louis Dionne 2013
+
+
+====================COPYRIGHT====================
+// Copyright Michael Drexl 2005, 2006.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Nikolay Mladenov 2007.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Paul A. Bristow 2007, 2010, 2012, 2014.
+// Copyright John Maddock 2007.
+
+
+====================COPYRIGHT====================
+// Copyright Peter Dimov 2000-2002
+// Copyright Aleksey Gurtovoy 2000-2004
+
+
+====================COPYRIGHT====================
+// Copyright Peter Dimov 2001
+// Copyright Aleksey Gurtovoy 2001-2004
+
+
+====================COPYRIGHT====================
+// Copyright Peter Dimov 2001-2002
+// Copyright Aleksey Gurtovoy 2001-2004
+
+
+====================COPYRIGHT====================
+// Copyright Peter Dimov and David Abrahams 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Peter Dimov and Multi Media Ltd 2001, 2002
+// Copyright David Abrahams 2001
+
+
+====================COPYRIGHT====================
+// Copyright Ralf W. Grosse-Kunstleve & David Abrahams 2006.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Ralf W. Grosse-Kunstleve 2006.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Robert Ramey 2007. Changes made to permit
+// application throughout the serialization library.
+
+
+====================COPYRIGHT====================
+// Copyright Sebastian Ramacher, 2007.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Sergey Krivonos 2017
+
+
+====================COPYRIGHT====================
+// Copyright Shreyans Doshi 2017.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Shunsuke Sogame 2005-2006.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Stefan Seefeld 2005.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Thorsten Ottosen, 2009.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Vicente J. Botet Escriba 2010
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2002-2004.
+// Copyright Bertolt Mildner 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================COPYRIGHT====================
+// Copyright for the original version:
+// Copyright 2005 David Abrahams and Aleksey Gurtovoy. Distributed
+// under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Portions Copyright (C) 2002 David Abrahams
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013, 2014, 2015.
+// Modifications copyright (c) 2013-2015 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013, 2014, 2015.
+// Modifications copyright (c) 2013-2015, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013, 2014, 2017.
+// Modifications copyright (c) 2013-2017 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013, 2014, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013, 2014.
+// Modifications copyright (c) 2013-2014 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013-2014.
+// Modifications copyright (c) 2013-2014, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013-2016.
+// Modifications copyright (c) 2013-2016 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013-2017.
+// Modifications copyright (c) 2013-2017, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2013.
+// Modifications copyright (c) 2013, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2014, 2015.
+// Modifications copyright (c) 2014-2015 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2014, 2015.
+// Modifications copyright (c) 2014-2015, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2014, 2016, 2017.
+// Modifications copyright (c) 2014-2017, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2014, 2017.
+// Modifications copyright (c) 2014-2017 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2014-2018.
+// Modifications copyright (c) 2014-2018 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2014.
+// Modifications copyright (c) 2014, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2015, 2016.
+// Modifications copyright (c) 2015-2016 Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2015, 2016.
+// Modifications copyright (c) 2015-2016, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2015, 2017.
+// Modifications copyright (c) 2015-2017 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2015, 2017.
+// Modifications copyright (c) 2015-2017, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2015.
+// Modifications copyright (c) 2015 Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2015.
+// Modifications copyright (c) 2015, Oracle and/or its affiliates.
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2016, 2017.
+// Modifications copyright (c) 2016-2017, Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2016-2017.
+// Modifications copyright (c) 2016-2017 Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2016.
+// Modifications copyright (c) 2016 Oracle and/or its affiliates.
+// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2016.
+// Modifications copyright (c) 2016, Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2017, 2018.
+// Modifications copyright (c) 2017-2018 Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2017, 2018.
+// Modifications copyright (c) 2017-2018, Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2017.
+// Modifications copyright (c) 2017 Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// This file was modified by Oracle on 2017.
+// Modifications copyright (c) 2017, Oracle and/or its affiliates.
+// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
+
+
+====================COPYRIGHT====================
+// copyright (c) 2005
+// troy d. straszheim <troy@resophonic.com>
+// http://www.resophonic.com
+
+
+====================COPYRIGHT====================
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+
+====================COPYRIGHT====================
+// is handled by pj_transform.c.
+// Author: Frank Warmerdam, warmerdam@pobox.com
+// Copyright (c) 2002, Frank Warmerdam
+
+
+====================COPYRIGHT====================
+// to the right implementation method. Most of the implementation details
+// are in separate headers and copyright Xiaogang Zhang.
+
+
+====================COPYRIGHT====================
+//! Copyright (c) 2011
+//! Brandon Kohn
+
+
+====================COPYRIGHT====================
+//! Copyright (c) 2011-2012
+//! Brandon Kohn
+
+
+====================COPYRIGHT====================
+/// @author Copyright (c) 2010 2015 Francisco Josรฉ Tapia (fjtapia@gmail.com )\n
+/// Distributed under the Boost Software License, Version 1.0.\n
+/// ( See accompanyingfile LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/// @author Copyright (c) 2015 Francisco Josรฉ Tapia (fjtapia@gmail.com )\n
+/// Distributed under the Boost Software License, Version 1.0.\n
+/// ( See accompanyingfile LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/// @author Copyright (c) 2016 Francisco Jose Tapia (fjtapia@gmail.com )\n
+/// Distributed under the Boost Software License, Version 1.0.\n
+/// ( See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+/// @author Copyright (c) 2017 Francisco Jose Tapia (fjtapia@gmail.com )\n
+/// Distributed under the Boost Software License, Version 1.0.\n
+/// ( See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.
+
+
+====================COPYRIGHT====================
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+
+====================COPYRIGHT====================
+//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
+
+
+====================COPYRIGHT====================
+//Copyright (c) 2006-2013 Emil Dotchevski and Reverge Studios, Inc.
+
+
+====================COPYRIGHT====================
+//Copyright (c) 2008-2016 Emil Dotchevski and Reverge Studios, Inc.
+
+
+====================COPYRIGHT====================
+//Copyright (c) 2008-2017 Emil Dotchevski and Reverge Studios, Inc.
+
+
+====================COPYRIGHT====================
+@Copyright Barrett Adair 2015-2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+@Copyright Barrett Adair 2016-2017
+
+
+====================COPYRIGHT====================
+@copyright Jason Rice 2016
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+@copyright Louis Dionne 2013-2016
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+@copyright Louis Dionne 2013-2017
+@copyright Gonzalo Brito Gadeschi 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+@copyright Louis Dionne 2013-2017
+@copyright Jason Rice 2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+@copyright Louis Dionne 2013-2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+@copyright Louis Dionne 2016
+@copyright Jason Rice 2016
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+Author: Joachim Faulhaber
+Copyright (c) 2009-2010: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Author: Joachim Faulhaber
+Copyright (c) 2009-2011: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (C) 2002 Brad King (brad.king@kitware.com)
+ Douglas Gregor (gregod@cs.rpi.edu)
+
+
+====================COPYRIGHT====================
+Copyright (C) 2002, 2008, 2013 Peter Dimov
+
+
+====================COPYRIGHT====================
+Copyright (C) 2017 Glen Joseph Fernandes (glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright (c) 2007-2009: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2007-2010: Joachim Faulhaber
+Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
+
+
+====================COPYRIGHT====================
+Copyright (c) 2007-2011: Joachim Faulhaber
+Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
+
+
+====================COPYRIGHT====================
+Copyright (c) 2007-2012: Joachim Faulhaber
+Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
+
+
+====================COPYRIGHT====================
+Copyright (c) 2008-2009: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2008-2010: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2008-2011: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2008-2012: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2009-2009: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2010-2010: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2010-2011: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2011-2011: Joachim Faulhaber
+
+
+====================COPYRIGHT====================
+Copyright (c) 2013 Agustin Berge http://spirit.sourceforge.net
+
+====================COPYRIGHT====================
+Copyright (c) 2016 Barrett Adair
+
+
+====================COPYRIGHT====================
+Copyright (c) 2016 Frank Hein, maxence business consulting gmbh
+
+
+====================COPYRIGHT====================
+Copyright (c) 2016 Modified Work Barrett Adair
+
+
+====================COPYRIGHT====================
+Copyright 2012-2013 Andreas Angelopoulos
+Copyright 2012-2013 Karsten Ahnert
+Copyright 2012-2013 Mario Mulansky
+
+
+====================COPYRIGHT====================
+Copyright 2012-2015 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2012-2017 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2014 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2014-2015 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2014-2016 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2015 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2015 NumScale SAS
+Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI
+
+
+====================COPYRIGHT====================
+Copyright 2017 Glen Joseph Fernandes
+
+
+====================COPYRIGHT====================
+Copyright 2017 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2017-2018 Glen Joseph Fernandes
+
+
+====================COPYRIGHT====================
+Copyright 2017-2018 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2018 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright 2020-2021 Glen Joseph Fernandes
+(glenjofe@gmail.com)
+
+
+====================COPYRIGHT====================
+Copyright Charly Chevalier 2015
+Copyright Joel Falcou 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright James E. King III, 2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Jessica Hamilton 2014
+Copyright Rene Rivera 2014-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2005-2016
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2008-2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2008-2015
+Copyright Franz Detro 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2008-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2008-2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2011-2012
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2011-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2012-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2013
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2013-2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2014
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2015
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2015-2016
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Rene Rivera 2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+Copyright Ruslan Baratov 2017
+Copyright Rene Rivera 2017
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+====================MIT====================
+// Permission is hereby granted, free of charge, to any person
+// obtaining a copy of this software and associated documentation
+// files (the "Software"), to deal in the Software without
+// restriction, including without limitation the rights to use,
+// copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following
+// conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE. OF SUCH DAMAGE.
+
+
+====================MIT====================
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+
+====================Mit-Old-Style====================
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Hewlett-Packard Company makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+
+
+====================Mit-Old-Style====================
+ * Permission to use, copy, modify, distribute and sell this software
+ * and its documentation for any purpose is hereby granted without fee,
+ * provided that the above copyright notice appear in all copies and
+ * that both that copyright notice and this permission notice appear
+ * in supporting documentation. Silicon Graphics makes no
+ * representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+
+
+====================Mit-Old-Style====================
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. Hewlett-Packard Company makes no
+// representations about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied warranty.
+
+
+====================Mit-Old-Style====================
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. Silicon Graphics makes no
+// representations about the suitability of this software for any
+// purpose. It is provided "as is" without express or implied warranty.
+
+
+====================Mit-Old-Style====================
+// Permission to use, copy, modify, distribute and sell this software
+// and its documentation for any purpose is hereby granted without fee,
+// provided that the above copyright notice appear in all copies and
+// that both that copyright notice and this permission notice appear
+// in supporting documentation. William E. Kempf makes no representations
+
+
+====================NCSA AND MIT====================
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+
+
+====================Public-Domain====================
+ * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
+ *
+ * Author:
+ * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
+ *
+ * This software was written by Alexander Peslyak in 2001. No copyright is
+ * claimed, and the software is hereby placed in the public domain.
+ * In case this attempt to disclaim copyright and place the software in the
+ * public domain is deemed null and void, then the software is
+ * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
+ * general public under the following terms:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted.
+ *
+ * There's ABSOLUTELY NO WARRANTY, express or implied.
+ *
+ */
+
+// Distributed under the Boost Software License, Version 1.0. (See
+
+
+====================Public-Domain====================
+// This also contains public domain code from MurmurHash. From the
+
+
+====================Public-Domain====================
+// MurmurHash3 was written by Austin Appleby, and is placed in the public
+// domain. The author hereby disclaims copyright to this source code.
+
+
+====================Public-Domain====================
+// This code is in the public domain. Anyone may use it or change it in any way that
+
+
+====================Public-Domain====================
+// and is in the public domain.
+
+
+====================Zlib====================
+ /* A std::uint16_t is an index in the character window. We use short instead of int to
+ * save space in the various tables. IPos is used only for parameter passing.
+
+
+====================Zlib====================
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+
+====================Zlib====================
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the copyright holder be held liable for
+ any damages arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute
+ it freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must
+ not claim that you wrote the original software. If you use this
+ software in a product, an acknowledgment in the product documentation
+ would be appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must
+ not be misrepresented as being the original software.
+
+ 3. This notice may not be removed or altered from any source
+ distribution.
+
+
+====================Zlib====================
+ This source code is provided 'as-is', without any express or implied
+ warranty. In no event will the author be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this source code must not be misrepresented; you must not
+ claim that you wrote the original source code. If you use this source code
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original source code.
+
+ 3. This notice may not be removed or altered from any source distribution.
+
+
+====================Zlib====================
+// This software is provided 'as-is', without any express or implied warranty. In no event will the
+// authors be held liable for any damages arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose, including commercial
+// applications, and to alter it and redistribute it freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not claim that you wrote the
+// original software. If you use this software in a product, an acknowledgment in the product
+// documentation would be appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be misrepresented as
+// being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
diff --git a/contrib/restricted/boost/CMakeLists.txt b/contrib/restricted/boost/CMakeLists.txt
index ba0a74c2f1..b7125fe2cb 100644
--- a/contrib/restricted/boost/CMakeLists.txt
+++ b/contrib/restricted/boost/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(libs)
add_library(contrib-restricted-boost INTERFACE)
target_include_directories(contrib-restricted-boost INTERFACE
diff --git a/contrib/restricted/boost/libs/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..db29dd547c
--- /dev/null
+++ b/contrib/restricted/boost/libs/.yandex_meta/licenses.list.txt
@@ -0,0 +1,72 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2016 Raffi Enficiaud.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennadiy Rozental 2005-2010.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennadiy Rozental 2006-2010.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Gennadiy Rozental 2011.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (c) Copyright Raffi Enficiaud 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/CMakeLists.darwin.txt b/contrib/restricted/boost/libs/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..8aa92aa277
--- /dev/null
+++ b/contrib/restricted/boost/libs/CMakeLists.darwin.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(chrono)
+add_subdirectory(system)
+add_subdirectory(thread)
diff --git a/contrib/restricted/boost/libs/CMakeLists.linux.txt b/contrib/restricted/boost/libs/CMakeLists.linux.txt
new file mode 100644
index 0000000000..a6641eba8d
--- /dev/null
+++ b/contrib/restricted/boost/libs/CMakeLists.linux.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(chrono)
+add_subdirectory(iostreams)
+add_subdirectory(program_options)
+add_subdirectory(system)
+add_subdirectory(thread)
diff --git a/contrib/restricted/boost/libs/CMakeLists.txt b/contrib/restricted/boost/libs/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/contrib/restricted/boost/libs/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/contrib/restricted/boost/libs/atomic/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/atomic/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..445e6b59c5
--- /dev/null
+++ b/contrib/restricted/boost/libs/atomic/.yandex_meta/licenses.list.txt
@@ -0,0 +1,39 @@
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2011 Helge Bahmann
+ * Copyright (c) 2013-2014 Andrey Semashev
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011 Helge Bahmann
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/chrono/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/chrono/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..261729da1d
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/.yandex_meta/licenses.list.txt
@@ -0,0 +1,86 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost
+// Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Howard Hinnant
+// Copyright 2011 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2009-2010 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2009-2011 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright 2010 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2003, 2006, 2008
+// Copyright 2009-2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2008
+// Copyright Vicente J. Botet Escriba 2009
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2008
+// Copyright Vicente J. Botet Escriba 2009-2010
+
+
+====================COPYRIGHT====================
+// (C) Copyright Vicente J. Botet Escriba 2010.
+// Distributed under the Boost
+// Software License, Version 1.0.
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/chrono/CMakeLists.txt b/contrib/restricted/boost/libs/chrono/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/restricted/boost/libs/chrono/CMakeLists.txt
+++ b/contrib/restricted/boost/libs/chrono/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches.hpp
new file mode 100644
index 0000000000..66fd02cb17
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches.hpp
@@ -0,0 +1,24 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Vicente J. Botet Escriba 2010.
+// Distributed under the Boost
+// Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/stm for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_STOPWATCHES_HPP
+#define BOOST_STOPWATCHES_HPP
+
+//-----------------------------------------------------------------------------
+#include <boost/chrono/stopwatches/simple_stopwatch.hpp>
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp>
+#include <boost/chrono/stopwatches/reporters/system_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/process_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/thread_default_formatter.hpp>
+//-----------------------------------------------------------------------------
+
+#endif // BOOST_STOPWATCHES_HPP
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp
new file mode 100644
index 0000000000..740c40d28c
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp
@@ -0,0 +1,66 @@
+// boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_MEMORIES_LAPS_ACCUMULATOR_SET_HPP
+#define BOOST_CHRONO_STOPWATCHES_MEMORIES_LAPS_ACCUMULATOR_SET_HPP
+
+#include <boost/chrono/stopwatches/collectors/last_lap.hpp>
+#include <boost/accumulators/framework/accumulator_set.hpp>
+#include <boost/accumulators/statistics/count.hpp>
+#include <boost/accumulators/statistics/sum.hpp>
+#include <boost/accumulators/statistics/min.hpp>
+#include <boost/accumulators/statistics/max.hpp>
+#include <boost/accumulators/statistics/mean.hpp>
+#include <boost/accumulators/accumulators.hpp>
+#include <boost/accumulators/framework/features.hpp>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<
+ typename Duration,
+ typename Features = accumulators::features<accumulators::tag::count,
+ accumulators::tag::sum, accumulators::tag::min,
+ accumulators::tag::max, accumulators::tag::mean>,
+ typename Weight = void>
+ struct laps_accumulator_set : last_lap<Duration>
+ {
+ typedef last_lap<Duration> base_type;
+ typedef Duration duration;
+ typedef typename duration::rep rep;
+ typedef accumulators::accumulator_set<rep, Features,
+ Weight> storage_type;
+ storage_type acc_;
+
+ void store(duration const& d)
+ {
+ this->base_type::store(d);
+ acc_(d.count());
+ }
+
+ void reset()
+ {
+ this->base_type::reset();
+ acc_ = storage_type();
+ }
+
+ storage_type const& accumulator_set() const { return acc_; }
+
+ duration elapsed() const { return duration(accumulators::sum(acc_)); }
+
+ };
+
+
+ } // namespace chrono
+} // namespace boost
+
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_sequence_container.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_sequence_container.hpp
new file mode 100644
index 0000000000..debb5fc102
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/laps_sequence_container.hpp
@@ -0,0 +1,65 @@
+// boost/chrono/stopwatches/collectors/laps_sequence_container.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_MEMORIES_LAPS_CONTAINER_HPP
+#define BOOST_CHRONO_STOPWATCHES_MEMORIES_LAPS_CONTAINER_HPP
+
+#include <list>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<
+ typename Duration,
+ typename SequenceContainer = std::list<Duration>
+ >
+ struct laps_sequence_container
+ {
+ typedef Duration duration;
+ typedef typename duration::rep rep;
+ typedef SequenceContainer storage_type;
+ typedef typename SequenceContainer::iterator iterator;
+ typedef typename SequenceContainer::const_iterator const_iterator;
+ storage_type cont_;
+
+ void store(duration const& d)
+ {
+ cont_.push_front(d);
+ }
+
+ void reset()
+ {
+ cont_.clear();
+ }
+
+ storage_type const& container() const { return cont_; }
+
+ duration last() const {
+ if (cont_.empty())
+ return duration::zero();
+ else
+ return *cont_.begin();
+ }
+
+ duration elapsed() const {
+ duration elapsed_ = duration::zero();
+ for (const_iterator it = cont_.begin(); it !=cont_.end(); ++it) elapsed_ += *it;
+ return elapsed_;
+ }
+
+ };
+
+
+ } // namespace chrono
+} // namespace boost
+
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/last_lap.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/last_lap.hpp
new file mode 100644
index 0000000000..1a24392f4b
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/last_lap.hpp
@@ -0,0 +1,42 @@
+// boost/chrono/stopwatches/collectors/last_lap.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_MEMORIES_LAST_LAP_HPP
+#define BOOST_CHRONO_STOPWATCHES_MEMORIES_LAST_LAP_HPP
+
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<typename Duration>
+ struct last_lap
+ {
+ typedef Duration duration;
+ duration last_;
+ void store(duration const& d)
+ {
+ last_ = d;
+ }
+ void reset()
+ {
+ last_ = duration::zero();
+ }
+ duration last() const { return last_; }
+ duration elapsed() const { return duration::zero(); }
+
+ };
+
+
+ } // namespace chrono
+} // namespace boost
+
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/no_memory.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/no_memory.hpp
new file mode 100644
index 0000000000..7c68b6cb0f
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/collectors/no_memory.hpp
@@ -0,0 +1,36 @@
+// boost/chrono/stopwatches/collectors/no_memory.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_MEMORIES_NO_MEMORY_HPP
+#define BOOST_CHRONO_STOPWATCHES_MEMORIES_NO_MEMORY_HPP
+
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<typename Duration>
+ struct no_memory
+ {
+ typedef Duration duration;
+
+ duration elapsed() const { return duration::zero(); }
+ duration last() const { return duration::zero(); }
+ void store(duration const& ) {}
+ void reset() {}
+
+ };
+
+
+ } // namespace chrono
+} // namespace boost
+
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/dont_start.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/dont_start.hpp
new file mode 100644
index 0000000000..e9c4df3667
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/dont_start.hpp
@@ -0,0 +1,32 @@
+// boost/chrono/stopwatches/dont.hpp ------------------------------------------------------------//
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_DONT_START__HPP
+#define BOOST_CHRONO_STOPWATCHES_DONT_START__HPP
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ /**
+ * Type used to don't start a basic_stopwatch at construction time.
+ */
+ struct dont_start_t
+ {
+ };
+
+ /**
+ * Instance used to don't start a basic_stopwatch at construction time.
+ */
+ static const dont_start_t dont_start =
+ { };
+
+
+ } // namespace chrono
+} // namespace boost
+
+#endif
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/accumulator_set_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/accumulator_set_formatter.hpp
new file mode 100644
index 0000000000..dc0cf18e74
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/accumulator_set_formatter.hpp
@@ -0,0 +1,133 @@
+// boost/chrono/stopwatches/formatters/ accumulator_set_formatter.hpp ------------------------------------------------------------//
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_FORMATTERS_ACCUMULATOR_SET_HPP
+#define BOOST_CHRONO_STOPWATCHES_FORMATTERS_ACCUMULATOR_SET_HPP
+
+#include <boost/chrono/stopwatches/formatters/base_formatter.hpp>
+#include <boost/chrono/chrono_io.hpp>
+#include <boost/current_function.hpp>
+#include <boost/accumulators/framework/accumulator_set.hpp>
+#include <boost/accumulators/statistics/count.hpp>
+#include <boost/accumulators/statistics/sum.hpp>
+#include <boost/accumulators/statistics/min.hpp>
+#include <boost/accumulators/statistics/max.hpp>
+#include <boost/accumulators/statistics/mean.hpp>
+#include <boost/accumulators/accumulators.hpp>
+#include <boost/format.hpp>
+#include <boost/format/group.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <string>
+#include <iostream>
+#include <cassert>
+#include <iomanip>
+
+#define BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FORMAT_DEFAULT "count=%1%, sum=%2%, min=%3%, max=%4%, mean=%5%\n"
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<typename Ratio = milli, typename CharT = char,
+ typename Traits = std::char_traits<CharT>,
+ class Alloc = std::allocator<CharT> >
+ class basic_accumulator_set_formatter: public base_formatter<CharT, Traits> , public basic_format<
+ CharT, Traits>
+ {
+
+ public:
+ typedef base_formatter<CharT, Traits> base_type;
+ typedef basic_format<CharT, Traits> format_type;
+ typedef std::basic_string<CharT, Traits, Alloc> string_type;
+ typedef CharT char_type;
+ typedef std::basic_ostream<CharT, Traits> ostream_type;
+
+ basic_accumulator_set_formatter() :
+ base_type(),
+ format_type(BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FORMAT_DEFAULT)
+ {
+ }
+ basic_accumulator_set_formatter(ostream_type& os) :
+ base_type(os),
+ format_type(BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FORMAT_DEFAULT)
+ {
+ }
+ basic_accumulator_set_formatter(const char* fmt, ostream_type& os =
+ std::cout) :
+ base_type(os), format_type(fmt)
+ {
+ }
+ basic_accumulator_set_formatter(string_type const& fmt, ostream_type& os =
+ std::cout) :
+ base_type(os), format_type(fmt)
+ {
+ }
+
+ // static string_type format(const char* s)
+ // {
+ // string_type res(s);
+ // res += boost::chrono::detail::adaptive_string(" : ");
+ // res += BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FORMAT_DEFAULT;
+ // return res;
+ // }
+
+ template<class Stopwatch>
+ void operator()(Stopwatch & stopwatch_
+ //, system::error_code & ec = BOOST_CHRONO_THROWS
+ )
+ {
+
+ typedef typename Stopwatch::laps_collector::storage_type
+ laps_collector_acc;
+ laps_collector_acc const& acc =
+ stopwatch_.get_laps_collector().accumulator_set();
+
+ typedef typename Stopwatch::duration duration_t;
+
+ duration_style_io_saver dsios(this->os_);
+ this->os_
+ << static_cast<format_type&> (*this)
+ % boost::accumulators::count(acc)
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), (boost::accumulators::count(acc)
+ == 0) ? boost::chrono::duration<double, Ratio>(duration_t::zero()) : boost::chrono::duration<
+ double, Ratio>(duration_t(boost::accumulators::sum(acc))))
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), (boost::accumulators::count(acc)
+ == 0) ? boost::chrono::duration<double, Ratio>(duration_t::zero()) : boost::chrono::duration<
+ double, Ratio>(duration_t((boost::accumulators::min)(acc))))
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), (boost::accumulators::count(acc)
+ == 0) ? boost::chrono::duration<double, Ratio>(duration_t::zero()) : boost::chrono::duration<
+ double, Ratio>(duration_t((boost::accumulators::max)(acc))))
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), ((boost::accumulators::count(acc)
+ > 0) ? boost::chrono::duration<double, Ratio>(duration_t(boost::accumulators::sum(acc)
+ / boost::accumulators::count(acc))) : boost::chrono::duration<
+ double, Ratio>(duration_t::zero())));
+
+ }
+ };
+
+ typedef basic_accumulator_set_formatter<milli, char>
+ accumulator_set_formatter;
+ typedef basic_accumulator_set_formatter<milli, wchar_t>
+ waccumulator_set_formatter;
+
+ } // namespace chrono
+} // namespace boost
+
+#if 0
+#define BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FORMAT(F) \
+ boost::chrono::detail::adaptive_string(F " : " BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FORMAT_DEFAULT)
+#ifdef __GNUC__
+#define BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FUNCTION_FORMAT \
+ boost::chrono::elapsed_formatter::format(BOOST_CURRENT_FUNCTION)
+#else
+#define BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FUNCTION_FORMAT \
+ BOOST_CHRONO_STOPWATCHES_ACCUMULATOR_SET_FORMAT(BOOST_CURRENT_FUNCTION)
+#endif
+#endif
+
+#endif
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/base_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/base_formatter.hpp
new file mode 100644
index 0000000000..855379ae1d
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/base_formatter.hpp
@@ -0,0 +1,65 @@
+// boost/chrono/stopwatches/formatters/base_formatter.hpp ------------------------------------------------------------//
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_FORMATTERS_BASE_FORMATTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_FORMATTERS_BASE_FORMATTER_HPP
+
+#include <boost/chrono/io/duration_style.hpp>
+#include <boost/chrono/duration.hpp>
+#include <boost/chrono/chrono_io.hpp>
+#include <boost/cstdint.hpp>
+#include <iostream>
+#include <iomanip>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<typename CharT = char, typename Traits = std::char_traits<CharT> >
+ class base_formatter
+ {
+ base_formatter& operator=(base_formatter const& rhs) ;
+
+ public:
+ typedef std::basic_ostream<CharT, Traits> ostream_type;
+
+ base_formatter() :
+ precision_(3), os_(std::cout), duration_style_(duration_style::symbol)
+ {
+ }
+ base_formatter(ostream_type& os) :
+ precision_(3), os_(os), duration_style_(duration_style::symbol)
+ {
+ }
+
+ void set_precision(std::size_t precision)
+ {
+ precision_ = precision;
+ if (precision_ > 9)
+ precision_ = 9; // sanity check
+ }
+ void set_os(ostream_type& os)
+ {
+ os_ = os;
+ }
+ void set_duration_style(duration_style style)
+ {
+ duration_style_ = style;
+ }
+
+ protected:
+ std::size_t precision_;
+ ostream_type & os_;
+ duration_style duration_style_;
+
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+
+#endif
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/elapsed_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/elapsed_formatter.hpp
new file mode 100644
index 0000000000..7ec23c8e4e
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/elapsed_formatter.hpp
@@ -0,0 +1,109 @@
+// boost/chrono/stopwatches/formatters/elapsed_formatter.hpp ------------------------------------------------------------//
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_FORMATTERS_ELAPSED_HPP
+#define BOOST_CHRONO_STOPWATCHES_FORMATTERS_ELAPSED_HPP
+
+#include <boost/chrono/stopwatches/formatters/base_formatter.hpp>
+#include <boost/chrono/chrono_io.hpp>
+#include <boost/current_function.hpp>
+#include <boost/format.hpp>
+#include <boost/format/group.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <string>
+#include <iostream>
+#include <cassert>
+#include <iomanip>
+
+#define BOOST_CHRONO_STOPWATCHES_ELAPSED_FORMAT_DEFAULT "%1%\n"
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<typename Ratio, typename CharT,
+ typename Traits = std::char_traits<CharT>,
+ class Alloc = std::allocator<CharT> >
+ class basic_elapsed_formatter: public base_formatter<CharT, Traits>, public basic_format<CharT, Traits>
+ {
+
+ public:
+ typedef base_formatter<CharT, Traits> base_type;
+ typedef basic_format<CharT, Traits> format_type;
+ typedef std::basic_string<CharT, Traits, Alloc> string_type;
+ typedef CharT char_type;
+ typedef std::basic_ostream<CharT, Traits> ostream_type;
+
+ basic_elapsed_formatter() :
+ base_type(),
+ format_type(BOOST_CHRONO_STOPWATCHES_ELAPSED_FORMAT_DEFAULT)
+ {
+ }
+ basic_elapsed_formatter(ostream_type& os) :
+ base_type(os),
+ format_type(BOOST_CHRONO_STOPWATCHES_ELAPSED_FORMAT_DEFAULT)
+ {
+ }
+ basic_elapsed_formatter(const char* fmt, ostream_type& os = std::cout) :
+ base_type(os), format_type(fmt)
+ {
+ }
+ basic_elapsed_formatter(string_type const& fmt, ostream_type& os =
+ std::cout) :
+ base_type(os), format_type(fmt)
+ {
+ }
+
+// static string_type format(const char* s)
+// {
+// string_type res(s);
+// res += boost::chrono::detail::adaptive_string(" : ");
+// res += BOOST_CHRONO_STOPWATCHES_ELAPSED_FORMAT_DEFAULT;
+// return res;
+// }
+
+ template<class Stopwatch>
+ void operator()(Stopwatch & stopwatch_
+ //, system::error_code & ec= BOOST_CHRONO_THROWS
+ )
+ {
+ typedef typename Stopwatch::duration duration_t;
+ duration_t d = stopwatch_.elapsed();
+ //duration_t d = stopwatch_.elapsed(ec);
+
+ if (d < duration_t::zero())
+ return;
+
+ duration_style_io_saver dsios(this->os_);
+ this->os_ << static_cast<format_type&>(*this)
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<
+ double, Ratio>(d))
+ ;
+
+ }
+ };
+
+ typedef basic_elapsed_formatter<milli, char> elapsed_formatter;
+ typedef basic_elapsed_formatter<milli, wchar_t> welapsed_formatter;
+
+ } // namespace chrono
+} // namespace boost
+
+#if 0
+#define BOOST_CHRONO_STOPWATCHES_ELAPSED_FORMAT(F) \
+ boost::chrono::detail::adaptive_string(F " : " BOOST_CHRONO_STOPWATCHES_ELAPSED_FORMAT_DEFAULT)
+#ifdef __GNUC__
+#define BOOST_CHRONO_STOPWATCHES_ELAPSED_FUNCTION_FORMAT \
+ boost::chrono::elapsed_formatter::format(BOOST_CURRENT_FUNCTION)
+#else
+#define BOOST_CHRONO_STOPWATCHES_ELAPSED_FUNCTION_FORMAT \
+ BOOST_CHRONO_STOPWATCHES_ELAPSED_FORMAT(BOOST_CURRENT_FUNCTION)
+#endif
+#endif
+
+#endif
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp
new file mode 100644
index 0000000000..4db70d08f7
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/formatters/times_formatter.hpp
@@ -0,0 +1,117 @@
+// boost/chrono/stopwatches/formatters/times_formatter.hpp ------------------------------------------------------------//
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_FORMATTERS_TIMES_HPP
+#define BOOST_CHRONO_STOPWATCHES_FORMATTERS_TIMES_HPP
+
+#include <boost/chrono/stopwatches/formatters/base_formatter.hpp>
+//#include <boost/chrono/detail/system.hpp>
+#include <boost/current_function.hpp>
+//#include <boost/chrono/stopwatches/detail/adaptive_string.hpp>
+#include <boost/format.hpp>
+#include <boost/format/group.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/assert.hpp>
+#include <string>
+#include <iostream>
+#include <cassert>
+#include <iomanip>
+
+#define BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT "real %1%, cpu %4% (%5%%%), user %2%, system %3%\n"
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<typename Ratio = milli, typename CharT = char,
+ typename Traits = std::char_traits<CharT>,
+ class Alloc = std::allocator<CharT> >
+ class basic_times_formatter: public base_formatter<CharT, Traits>, public basic_format<CharT, Traits>
+ {
+
+ public:
+ typedef base_formatter<CharT, Traits> base_type;
+ typedef basic_format<CharT, Traits> format_type;
+ typedef std::basic_string<CharT, Traits, Alloc> string_type;
+ typedef CharT char_type;
+ typedef std::basic_ostream<CharT, Traits> ostream_type;
+
+ basic_times_formatter() :
+ base_type(),
+ format_type(BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT)
+ {
+ }
+ basic_times_formatter(ostream_type& os) :
+ base_type(os),
+ format_type(BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT)
+ {
+ }
+ basic_times_formatter(const char* fmt, ostream_type& os = std::cout) :
+ base_type(os), format_type(fmt)
+ {
+ }
+ basic_times_formatter(string_type const& fmt, ostream_type& os =
+ std::cout) :
+ base_type(os), format_type(fmt)
+ {
+ }
+
+// static string_type format(const char* s)
+// {
+// string_type res(s);
+// res += boost::chrono::detail::adaptive_string(" : ");
+// res += BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT;
+// return res;
+// }
+
+ template<class Stopwatch>
+ void operator()(Stopwatch & stopwatch_
+ //, system::error_code & ec= BOOST_CHRONO_THROWS
+ )
+ {
+ typedef typename Stopwatch::duration::rep times_type;
+ //times_type times = stopwatch_.elapsed(ec).count();
+ times_type times = stopwatch_.elapsed().count();
+
+ if (times.real < 0)
+ return;
+ double p;
+ if (times.real > 0)
+ p=double(times.user+times.system)*100/times.real;
+ else
+ p=0;
+
+ duration_style_io_saver dsios(this->os_);
+ this->os_ << static_cast<format_type&>(*this)
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<double, Ratio>(nanoseconds(times.real)))
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<double, Ratio>(nanoseconds(times.user)))
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<double, Ratio>(nanoseconds(times.system)))
+ % io::group(std::fixed, std::setprecision(this->precision_), duration_fmt(this->duration_style_), boost::chrono::duration<double, Ratio>(nanoseconds(times.user+times.system)))
+ % io::group(std::fixed, std::setprecision(2), p)
+ ;
+ }
+ };
+
+ typedef basic_times_formatter<milli, char> times_formatter;
+ typedef basic_times_formatter<milli, wchar_t> wtimes_formatter;
+
+ } // namespace chrono
+} // namespace boost
+
+#if 0
+#define BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT(F) \
+ boost::chrono::detail::adaptive_string(F " : " BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT_DEFAULT)
+#ifdef __GNUC__
+#define BOOST_CHRONO_STOPWATCHES_TIMES_FUNCTION_FORMAT \
+ boost::chrono::times_formatter::format(BOOST_CURRENT_FUNCTION)
+#else
+#define BOOST_CHRONO_STOPWATCHES_TIMES_FUNCTION_FORMAT \
+ BOOST_CHRONO_STOPWATCHES_TIMES_FORMAT(BOOST_CURRENT_FUNCTION)
+#endif
+#endif
+
+#endif
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/laps_stopwatch.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/laps_stopwatch.hpp
new file mode 100644
index 0000000000..981644193a
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/laps_stopwatch.hpp
@@ -0,0 +1,442 @@
+// boost/chrono/stopwatches/laps_stopwatch.hpp -----------------------------//
+
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_LAPS_STOPWATCH_HPP
+#define BOOST_CHRONO_STOPWATCHES_LAPS_STOPWATCH_HPP
+
+
+#include <boost/chrono/config.hpp>
+
+#include <boost/chrono/stopwatches/stopwatch_scoped.hpp>
+#include <boost/chrono/stopwatches/collectors/no_memory.hpp> // default laps_collector
+#include <boost/chrono/stopwatches/dont_start.hpp>
+#include <boost/chrono/system_clocks.hpp> // default_clock
+#include <boost/system/error_code.hpp>
+#include <utility>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+
+ /**
+ * A laps_stopwatch is a model of @c Stopwatch taking as template parameters the @c Clock and the @c LapsCollector.
+ *
+ * The main difference respect to a @c simple_stopwatch is that the user can stop it.
+ * Each sequence of start-stop results in a new elapsed duration sample that is provided to the LapsCollector.
+ *
+ * It is up to the LapsCollector to make whatever wants with each sample.
+ * A LapCollector must define a store(duration const&) and a clear() functions.
+ *
+ * The library provides LapsCollectors that forget the sample, store the
+ * last one, cummulates the samples in an accumulator set or store them in a container.
+ * For simplicity the default LapCollector is the one that forget the samples.
+ *
+ * Even if it is preferable to use process or thread wide clocks,
+ * the default of the Clock parameter is high_resolution_clock,
+ * as it is the single one ensured on all platforms.
+ */
+ template<typename Clock=high_resolution_clock, typename LapsCollector=no_memory<typename Clock::duration> >
+ class laps_stopwatch
+ {
+ public:
+ typedef LapsCollector laps_collector;
+ typedef Clock clock;
+ typedef typename Clock::duration duration;
+ typedef typename Clock::time_point time_point;
+ typedef typename Clock::rep rep;
+ typedef typename Clock::period period;
+ BOOST_STATIC_CONSTEXPR bool is_steady = Clock::is_steady;
+
+ /**
+ * Default constructor.
+ *
+ * Effects: Starts the stopwatch.
+ * Post-conditions: is_running().
+ */
+ explicit laps_stopwatch()
+ :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_()
+ {
+ start();
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Default constructor.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: Starts the stopwatch.
+ * Post-conditions: is_running() if no error occur.
+ */
+ explicit laps_stopwatch(
+ system::error_code & ec
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_()
+ {
+ start(ec);
+ }
+#endif
+ /**
+ * Not starting constructor.
+ *
+ * Effects: Don't starts the stopwatch.
+ * Post-conditions: ! is_running() if no error occur.
+ */
+ explicit laps_stopwatch(
+ const dont_start_t&
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_()
+ {
+ }
+
+ /**
+ * Starting constructor from a LapsCollector instance.
+ *
+ * Effects: Copies the LapsCollector. Starts the stopwatch.
+ * Post-conditions: is_running() if no error occur.
+ *
+ * Remark: The LapsCollector is copied and owned by the stopwatch.
+ */
+ explicit laps_stopwatch(
+ laps_collector const& acc
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_(acc)
+ {
+ start();
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Starting constructor from a LapsCollector instance.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: Copies the LapsCollector. Starts the stopwatch.
+ * Post-conditions: is_running() if no error occur.
+ *
+ * Remark: The LapsCollector is copied and owned by the stopwatch.
+ */
+ explicit laps_stopwatch(
+ laps_collector const& acc,
+ system::error_code & ec
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_(acc)
+ {
+ start(ec);
+ }
+#endif
+
+ /**
+ * Not starting constructor from a LapsCollector instance.
+ *
+ * Effects: Copies the LapsCollector. Don't starts the stopwatch.
+ * Post-conditions: ! is_running() if no error occur.
+ *
+ * Remark: The LapsCollector is copied and owned by the stopwatch.
+ */
+ laps_stopwatch(
+ laps_collector const& acc,
+ const dont_start_t&
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_(acc)
+ {
+ }
+
+ /**
+ * Destructor.
+ *
+ * Effects: Do nothing.
+ */
+ ~laps_stopwatch()
+ {
+ }
+
+ /**
+ * Restart the stopwatch.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: As if stop(); start() were called, but ensuring that the start time is the same as the stop time.
+ *
+ * Post-conditions: is_running() if no error occur.
+ */
+ void restart()
+ {
+ time_point tmp = clock::now();
+
+ if (is_running())
+ {
+ laps_collector_.store(tmp - start_);
+ }
+ else
+ {
+ running_ = true;
+ }
+ start_ = tmp;
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Restart the stopwatch.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: As if stop(); start() were called, but ensuring that the start time is the same as the stop time.
+ *
+ * Post-conditions: is_running() if no error occur.
+ */
+ void restart(
+ system::error_code & ec
+ )
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ if (is_running())
+ {
+ laps_collector_.store(tmp - start_);
+ }
+ else
+ {
+ running_ = true;
+ }
+ start_ = tmp;
+ }
+#endif
+
+ /**
+ * Start the stopwatch.
+ *
+ * Effects: Memorize the current time.
+ *
+ * Post-conditions: is_running().
+ */
+ void start()
+ {
+ start_ = clock::now();
+ running_ = true;
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Start the stopwatch.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: Memorize the current time.
+ *
+ * Post-conditions: is_running() if no error occur.
+ */
+ void start(
+ system::error_code & ec
+ )
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ start_ = tmp;
+ running_ = true;
+ }
+#endif
+
+ /**
+ * Start the stopwatch.
+ *
+ * Effects: Gives the elapsed time since start time to the LapCollector.
+ *
+ * Throws: Any exception that the LapCollector can throw when .
+ *
+ * Post-conditions: !is_running() if no error occur.
+ */
+ void stop()
+ {
+ if (is_running())
+ {
+ laps_collector_.store(clock::now() - start_);
+ start_ = time_point(duration::zero());
+ running_ = false;
+ }
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Start the stopwatch.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: Gives the elapsed time since start time to the LapCollector if no internal error occurs.
+ *
+ * Throws: Any exception that the LapCollector can Throw.
+ *
+ * Post-conditions: !is_running() if no error occur.
+ */
+ void stop(
+ system::error_code & ec
+ )
+ {
+ if (is_running())
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ laps_collector_.store(tmp - start_);
+ start_ = time_point(duration::zero());
+ running_ = false;
+ }
+ }
+#endif
+
+ /**
+ * States if the Stopwatch is running.
+ */
+ bool is_running() const {
+ return running_;
+ }
+
+ /**
+ * Elapsed time getter for the current lap.
+ *
+ * Returns: the elapsed time since the last start if no internal error occur.
+ *
+ */
+ duration elapsed_current_lap() const
+ {
+ if (is_running())
+ {
+ return clock::now() - start_;
+ }
+ else
+ {
+ return duration::zero();
+ }
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Elapsed time getter for the current lap.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ *
+ * Returns: the elapsed time since the start if no internal error occur.
+ *
+ */
+ duration elapsed_current_lap(
+ system::error_code & ec
+ ) const
+ {
+ if (is_running())
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return duration::zero();
+
+ return tmp - start_;
+ } else
+ {
+ return duration::zero();
+ }
+ }
+#endif
+
+ /**
+ * Elapsed time getter.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ *
+ * Returns: the elapsed time since the start if no internal error occur.
+ *
+ */
+ duration elapsed() const
+ {
+ return laps_collector_.elapsed()+elapsed_current_lap();
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Elapsed time getter.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ *
+ * Returns: the elapsed time since the start if no internal error occur.
+ *
+ */
+ duration elapsed(
+ system::error_code & ec
+ ) const
+ {
+ duration tmp = elapsed_current_lap(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return duration::zero();
+ return laps_collector_.elapsed() + tmp;
+ }
+#endif
+ /**
+ * Elapsed time for the last lap.
+ *
+ * Returns: the elapsed time of the last lap.
+ *
+ */
+
+ duration last() const
+ {
+ return laps_collector_.last();
+ }
+ /**
+ * Resets the stopwatch.
+ *
+ * Effects: Resets the LapCollector.
+ *
+ * Post-conditions: !is_running() if no error occur.
+ *
+ */
+ void reset()
+ {
+
+ laps_collector_.reset();
+ running_ = false;
+ start_ = time_point(duration::zero());
+ }
+
+ /**
+ * LapsCollector getter.
+ *
+ * Returns: the LapCollector instance.
+ *
+ */
+ laps_collector const& get_laps_collector() BOOST_NOEXCEPT
+ {
+ return laps_collector_;
+ }
+
+ /**
+ * Useful typedef for scoped run
+ */
+ typedef stopwatch_runner<laps_stopwatch<Clock, LapsCollector> >
+ scoped_run;
+ /**
+ * Useful typedef for scoped stop
+ */
+ typedef stopwatch_stopper<laps_stopwatch<Clock, LapsCollector> >
+ scoped_stop;
+
+ private:
+ time_point start_;
+ bool running_;
+ laps_collector laps_collector_;
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+#endif // header
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/clock_default_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/clock_default_formatter.hpp
new file mode 100644
index 0000000000..d85039ab62
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/clock_default_formatter.hpp
@@ -0,0 +1,31 @@
+// boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_CLOCK_DEFAULT_FORMATTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_CLOCK_DEFAULT_FORMATTER_HPP
+
+#include <boost/chrono/stopwatches/formatters/elapsed_formatter.hpp>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<class CharT, class Clock>
+ struct basic_clock_default_formatter
+ {
+ typedef basic_elapsed_formatter<milli, CharT> type;
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp
new file mode 100644
index 0000000000..239833fcfc
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp
@@ -0,0 +1,34 @@
+// boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPWATCH_DEFAULT_FORMATTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPWATCH_DEFAULT_FORMATTER_HPP
+
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/formatters/accumulator_set_formatter.hpp>
+#include <boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp>
+#include <boost/chrono/stopwatches/stopwatch.hpp>
+#include <boost/chrono/thread_clock.hpp>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template <typename CharT, typename Clock, typename Features, typename Weight>
+ struct basic_stopwatch_reporter_default_formatter<CharT, stopwatch<Clock,laps_accumulator_set<typename Clock::duration,Features, Weight> > >
+ {
+ typedef basic_accumulator_set_formatter<milli,CharT> type;
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopclock.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopclock.hpp
new file mode 100644
index 0000000000..4debbc5518
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopclock.hpp
@@ -0,0 +1,176 @@
+// boost/chrono/stopwatches/reporters/stopclock.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+#error
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPCLOCK_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPCLOCK_HPP
+
+#include <boost/chrono/config.hpp>
+
+#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
+#if defined __GNUC__
+#pragma GCC system_header
+#elif defined __SUNPRO_CC
+#pragma disable_warn
+#elif defined _MSC_VER
+#pragma warning(push, 1)
+#endif
+#endif
+
+#include <boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp>
+#include <boost/chrono/stopwatches/stopwatch_scoped.hpp>
+#include <boost/chrono/stopwatches/stopwatch.hpp>
+#include <boost/chrono/stopwatches/dont_start.hpp>
+#include <boost/chrono/chrono.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/cstdint.hpp>
+#include <cassert>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<class CharT, typename Clock, typename LapsCollector, class Formatter>
+ class basic_stopclock: public basic_stopwatch_reporter<CharT, stopwatch<Clock, LapsCollector>, Formatter>
+ {
+ public:
+ typedef basic_stopwatch_reporter<CharT, stopwatch<Clock, LapsCollector>, Formatter> base_type;
+ typedef Clock clock;
+ typedef stopwatch<Clock, LapsCollector> stopwatch;
+ typedef Formatter formatter_type;
+
+ basic_stopclock()
+ {
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit basic_stopclock(system::error_code & ec) :
+ base_type(ec)
+ {
+ }
+#endif
+ explicit basic_stopclock(
+ const dont_start_t& tag
+ ) BOOST_NOEXCEPT :
+ base_type(tag)
+ {
+ }
+
+ explicit basic_stopclock(formatter_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ explicit basic_stopclock(const typename Formatter::char_type* fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit basic_stopclock(typename Formatter::string_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+ typedef stopwatch_runner<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
+ scoped_run;
+ typedef stopwatch_stopper<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
+ scoped_stop;
+ typedef stopwatch_suspender<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
+ scoped_suspend;
+ typedef stopwatch_resumer<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
+ scoped_resume;
+
+ protected:
+
+ basic_stopclock(const basic_stopclock&); // = delete;
+ basic_stopclock& operator=(const basic_stopclock&); // = delete;
+ };
+
+
+ template<typename Clock=high_resolution_clock, typename LapsCollector=no_memory<typename Clock::duration>,
+ class Formatter = typename basic_stopwatch_reporter_default_formatter<char, stopwatch<Clock, LapsCollector> >::type>
+ class stopclock;
+
+ template<class Stopwatch, class Formatter>
+ struct basic_stopwatch_reporter_default_formatter<char, stopclock<Stopwatch,
+ Formatter> >
+ {
+ typedef Formatter type;
+ };
+
+ template<typename Clock, typename LapsCollector, class Formatter>
+ class stopclock: public basic_stopclock<char, Clock, LapsCollector, Formatter>
+ {
+ typedef basic_stopclock<char, Clock, LapsCollector, Formatter> base_type;
+ public:
+ typedef Clock clock;
+ typedef typename base_type::stopwatch stopwatch;
+ typedef Formatter formatter_type;
+
+ stopclock()
+ {
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit stopclock(system::error_code & ec) :
+ base_type(ec)
+ {
+ }
+#endif
+ explicit stopclock(
+ const dont_start_t& tag
+ ) BOOST_NOEXCEPT :
+ base_type(tag)
+ {
+ }
+
+ explicit stopclock(formatter_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ explicit stopclock(const typename Formatter::char_type* fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit stopclock(typename Formatter::string_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+ typedef stopwatch_runner<stopclock<Clock, LapsCollector, Formatter> >
+ scoped_run;
+ typedef stopwatch_stopper<stopclock<Clock, LapsCollector, Formatter> >
+ scoped_stop;
+ typedef stopwatch_suspender<stopclock<Clock, LapsCollector, Formatter> >
+ scoped_suspend;
+ typedef stopwatch_resumer<stopclock<Clock, LapsCollector, Formatter> >
+ scoped_resume;
+
+ protected:
+
+ stopclock(const stopclock&); // = delete;
+ stopclock& operator=(const stopclock&); // = delete;
+ };
+
+
+
+ } // namespace chrono
+} // namespace boost
+
+
+#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
+#if defined __SUNPRO_CC
+#pragma enable_warn
+#elif defined _MSC_VER
+#pragma warning(pop)
+#endif
+#endif
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp
new file mode 100644
index 0000000000..e157eb39d2
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp
@@ -0,0 +1,37 @@
+// boost/chrono/stopwatches/reporters/laps_stopwatch_default_formatter.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPWATCH_DEFAULT_FORMATTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPWATCH_DEFAULT_FORMATTER_HPP
+
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/formatters/accumulator_set_formatter.hpp>
+#include <boost/chrono/stopwatches/collectors/laps_accumulator_set.hpp>
+#include <boost/chrono/stopwatches/laps_stopwatch.hpp>
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
+#include <boost/chrono/thread_clock.hpp>
+#endif
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template <typename CharT, typename Clock, typename Features, typename Weight>
+ struct basic_stopwatch_reporter_default_formatter<CharT, laps_stopwatch<Clock,laps_accumulator_set<typename Clock::duration,Features, Weight> > >
+ {
+ typedef basic_accumulator_set_formatter<milli,CharT> type;
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/process_default_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/process_default_formatter.hpp
new file mode 100644
index 0000000000..4b3c1c58e9
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/process_default_formatter.hpp
@@ -0,0 +1,42 @@
+// boost/chrono/stopwatches/reporters/process_default_formatter.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_PROCESS_DEFAULT_FORMATTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_PROCESS_DEFAULT_FORMATTER_HPP
+
+#include <boost/chrono/config.hpp>
+
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/clock_default_formatter.hpp>
+#include <boost/chrono/stopwatches/formatters/elapsed_formatter.hpp>
+#include <boost/chrono/stopwatches/formatters/times_formatter.hpp>
+#include <boost/chrono/process_cpu_clocks.hpp>
+
+#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+
+namespace boost
+{
+ namespace chrono
+ {
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
+
+ template <typename CharT>
+ struct basic_clock_default_formatter<CharT, process_cpu_clock>
+ {
+ typedef basic_times_formatter<milli, CharT> type;
+ };
+
+#endif
+ } // namespace chrono
+} // namespace boost
+
+
+#endif
+
+#endif
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopclock.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopclock.hpp
new file mode 100644
index 0000000000..937cabdd45
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopclock.hpp
@@ -0,0 +1,175 @@
+// boost/chrono/stopwatches/reporters/stopclock.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPCLOCK_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPCLOCK_HPP
+
+#include <boost/chrono/config.hpp>
+
+#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
+#if defined __GNUC__
+#pragma GCC system_header
+#elif defined __SUNPRO_CC
+#pragma disable_warn
+#elif defined _MSC_VER
+#pragma warning(push, 1)
+#endif
+#endif
+
+#include <boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp>
+#include <boost/chrono/stopwatches/stopwatch_scoped.hpp>
+#include <boost/chrono/stopwatches/stopwatch.hpp>
+#include <boost/chrono/stopwatches/dont_start.hpp>
+#include <boost/chrono/chrono.hpp>
+#include <boost/chrono/detail/system.hpp>
+#include <boost/cstdint.hpp>
+#include <cassert>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<class CharT, typename Clock, typename LapsCollector, class Formatter>
+ class basic_stopclock: public basic_stopwatch_reporter<CharT, stopwatch<Clock, LapsCollector>, Formatter>
+ {
+ public:
+ typedef basic_stopwatch_reporter<CharT, stopwatch<Clock, LapsCollector>, Formatter> base_type;
+ typedef Clock clock;
+ typedef stopwatch<Clock, LapsCollector> stopwatch_type;
+ typedef Formatter formatter_type;
+
+ basic_stopclock()
+ {
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit basic_stopclock(system::error_code & ec) :
+ base_type(ec)
+ {
+ }
+#endif
+ explicit basic_stopclock(
+ const dont_start_t& tag
+ ) BOOST_NOEXCEPT :
+ base_type(tag)
+ {
+ }
+
+ explicit basic_stopclock(formatter_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ explicit basic_stopclock(const typename Formatter::char_type* fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit basic_stopclock(typename Formatter::string_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+ typedef stopwatch_runner<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
+ scoped_run;
+ typedef stopwatch_stopper<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
+ scoped_stop;
+ typedef stopwatch_suspender<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
+ scoped_suspend;
+ typedef stopwatch_resumer<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
+ scoped_resume;
+
+ protected:
+
+ basic_stopclock(const basic_stopclock&); // = delete;
+ basic_stopclock& operator=(const basic_stopclock&); // = delete;
+ };
+
+
+ template<typename Clock=high_resolution_clock, typename LapsCollector=no_memory<typename Clock::duration>,
+ class Formatter = typename basic_stopwatch_reporter_default_formatter<char, stopwatch<Clock, LapsCollector> >::type>
+ class stopclock;
+
+ template<class Stopwatch, class Formatter>
+ struct basic_stopwatch_reporter_default_formatter<char, stopclock<Stopwatch,
+ Formatter> >
+ {
+ typedef Formatter type;
+ };
+
+ template<typename Clock, typename LapsCollector, class Formatter>
+ class stopclock: public basic_stopclock<char, Clock, LapsCollector, Formatter>
+ {
+ typedef basic_stopclock<char, Clock, LapsCollector, Formatter> base_type;
+ public:
+ typedef Clock clock;
+ typedef typename base_type::stopwatch_type stopwatch_type;
+ typedef Formatter formatter_type;
+
+ stopclock()
+ {
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit stopclock(system::error_code & ec) :
+ base_type(ec)
+ {
+ }
+#endif
+ explicit stopclock(
+ const dont_start_t& tag
+ ) BOOST_NOEXCEPT :
+ base_type(tag)
+ {
+ }
+
+ explicit stopclock(formatter_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ explicit stopclock(const typename Formatter::char_type* fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit stopclock(typename Formatter::string_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+ typedef stopwatch_runner<stopclock<Clock, LapsCollector, Formatter> >
+ scoped_run;
+ typedef stopwatch_stopper<stopclock<Clock, LapsCollector, Formatter> >
+ scoped_stop;
+ typedef stopwatch_suspender<stopclock<Clock, LapsCollector, Formatter> >
+ scoped_suspend;
+ typedef stopwatch_resumer<stopclock<Clock, LapsCollector, Formatter> >
+ scoped_resume;
+
+ protected:
+
+ stopclock(const stopclock&); // = delete;
+ stopclock& operator=(const stopclock&); // = delete;
+ };
+
+
+
+ } // namespace chrono
+} // namespace boost
+
+
+#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
+#if defined __SUNPRO_CC
+#pragma enable_warn
+#elif defined _MSC_VER
+#pragma warning(pop)
+#endif
+#endif
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp
new file mode 100644
index 0000000000..8d379cd9cf
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp
@@ -0,0 +1,259 @@
+// boost/chrono/stopwatches/stopwatch_reporter.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_STOPWATCH_REPORTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_STOPWATCH_REPORTER_HPP
+
+#include <boost/chrono/config.hpp>
+
+#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
+#if defined __GNUC__
+#pragma GCC system_header
+#elif defined __SUNPRO_CC
+#pragma disable_warn
+#elif defined _MSC_VER
+#pragma warning(push, 1)
+#endif
+#endif
+
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/stopwatch_scoped.hpp>
+#include <boost/chrono/stopwatches/dont_start.hpp>
+#include <boost/chrono/chrono.hpp>
+#include <boost/chrono/detail/system.hpp>
+#include <boost/cstdint.hpp>
+#include <cassert>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<class CharT, class Stopwatch, class Formatter=basic_stopwatch_reporter_default_formatter<CharT, Stopwatch> >
+ class basic_stopwatch_reporter: public Stopwatch
+ {
+ public:
+ typedef Stopwatch base_type;
+ typedef typename Stopwatch::clock clock;
+ typedef Stopwatch stopwatch_type;
+ typedef Formatter formatter_type;
+
+ basic_stopwatch_reporter() BOOST_NOEXCEPT :
+ formatter_(), reported_(false)
+ {
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit basic_stopwatch_reporter(system::error_code & ec) :
+ base_type(ec), formatter_(), reported_(false)
+ {
+ }
+#endif
+
+ explicit basic_stopwatch_reporter(
+ const dont_start_t& tag
+ ) BOOST_NOEXCEPT :
+ base_type(tag),
+ formatter_(), reported_(false)
+ {
+ }
+
+ explicit basic_stopwatch_reporter(const typename Formatter::char_type* fmt) :
+ formatter_(fmt), reported_(false)
+ {
+ }
+ explicit basic_stopwatch_reporter(typename Formatter::string_type const& fmt) :
+ formatter_(fmt), reported_(false)
+ {
+ }
+ explicit basic_stopwatch_reporter(formatter_type fmt) :
+ formatter_(fmt), reported_(false)
+ {
+ }
+
+ ~basic_stopwatch_reporter() BOOST_NOEXCEPT
+ {
+ if (!reported())
+ {
+ this->report();
+ }
+ }
+
+ inline void report() BOOST_NOEXCEPT
+ {
+ formatter_(*this);
+ reported_ = true;
+ }
+// inline void report(system::error_code & ec)
+// {
+// formatter_(*this, ec);
+// reported_ = true;
+// }
+
+ bool reported() const
+ {
+ return reported_;
+ }
+
+ formatter_type& format()
+ {
+ return formatter_;
+ }
+
+ protected:
+ formatter_type formatter_;
+ bool reported_;
+
+ basic_stopwatch_reporter(const basic_stopwatch_reporter&); // = delete;
+ basic_stopwatch_reporter& operator=(const basic_stopwatch_reporter&); // = delete;
+ };
+
+
+ template<class Stopwatch,
+ class Formatter = typename basic_stopwatch_reporter_default_formatter<char, Stopwatch>::type>
+ class stopwatch_reporter;
+
+ template<class Stopwatch, class Formatter>
+ struct basic_stopwatch_reporter_default_formatter<char, stopwatch_reporter<Stopwatch, Formatter> >
+ {
+ typedef Formatter type;
+ };
+
+ template<class Stopwatch, class Formatter>
+ class stopwatch_reporter: public basic_stopwatch_reporter<char, Stopwatch,
+ Formatter>
+ {
+ typedef basic_stopwatch_reporter<char, Stopwatch, Formatter> base_type;
+ public:
+ typedef typename Stopwatch::clock clock;
+ typedef Stopwatch stopwatch_type;
+ typedef Formatter formatter_type;
+
+ stopwatch_reporter()
+ {
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit stopwatch_reporter(system::error_code & ec) :
+ base_type(ec)
+ {
+ }
+#endif
+ explicit stopwatch_reporter(
+ const dont_start_t& tag
+ ) BOOST_NOEXCEPT :
+ base_type(tag)
+ {
+ }
+
+ explicit stopwatch_reporter(formatter_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ explicit stopwatch_reporter(const typename Formatter::char_type* fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit stopwatch_reporter(typename Formatter::string_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+ typedef stopwatch_runner<stopwatch_reporter<Stopwatch, Formatter> >
+ scoped_run;
+ typedef stopwatch_stopper<stopwatch_reporter<Stopwatch, Formatter> >
+ scoped_stop;
+ typedef stopwatch_suspender<stopwatch_reporter<Stopwatch, Formatter> >
+ scoped_suspend;
+ typedef stopwatch_resumer<stopwatch_reporter<Stopwatch, Formatter> >
+ scoped_resume;
+
+ protected:
+
+ stopwatch_reporter(const stopwatch_reporter&); // = delete;
+ stopwatch_reporter& operator=(const stopwatch_reporter&); // = delete;
+ };
+
+ template<class Stopwatch,
+ class Formatter = typename basic_stopwatch_reporter_default_formatter<wchar_t,
+ Stopwatch>::type>
+ class wstopwatch_reporter;
+
+ template<class Stopwatch, class Formatter>
+ struct basic_stopwatch_reporter_default_formatter<wchar_t, wstopwatch_reporter<Stopwatch, Formatter> >
+ {
+ typedef Formatter type;
+ };
+
+ template<class Stopwatch, class Formatter>
+ class wstopwatch_reporter: public basic_stopwatch_reporter<wchar_t, Stopwatch, Formatter>
+ {
+ typedef basic_stopwatch_reporter<wchar_t, Stopwatch, Formatter> base_type;
+ public:
+ typedef typename Stopwatch::clock clock;
+ typedef Stopwatch stopwatch_type;
+ typedef Formatter formatter_type;
+
+ wstopwatch_reporter() :
+ base_type()
+ {
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit wstopwatch_reporter(system::error_code & ec) :
+ base_type(ec)
+ {
+ }
+#endif
+ explicit wstopwatch_reporter(
+ const dont_start_t& tag
+ ) BOOST_NOEXCEPT :
+ base_type(tag)
+ {
+ }
+
+ explicit wstopwatch_reporter(formatter_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit wstopwatch_reporter(const typename Formatter::char_type* fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit wstopwatch_reporter(typename Formatter::string_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+ typedef stopwatch_runner<wstopwatch_reporter<Stopwatch, Formatter> >
+ scoped_run;
+ typedef stopwatch_stopper<wstopwatch_reporter<Stopwatch, Formatter> >
+ scoped_stop;
+ typedef stopwatch_suspender<wstopwatch_reporter<Stopwatch, Formatter> >
+ scoped_suspend;
+ typedef stopwatch_resumer<wstopwatch_reporter<Stopwatch, Formatter> >
+ scoped_resume;
+
+ protected:
+
+ wstopwatch_reporter(const wstopwatch_reporter&); // = delete;
+ wstopwatch_reporter& operator=(const wstopwatch_reporter&); // = delete;
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+
+#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
+#if defined __SUNPRO_CC
+#pragma enable_warn
+#elif defined _MSC_VER
+#pragma warning(pop)
+#endif
+#endif
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp
new file mode 100644
index 0000000000..bd81214eb2
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp
@@ -0,0 +1,31 @@
+// boost/chrono/stopwatches/stopwatch_reporter_default_formatter.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_DEFAULT_FORMATTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_DEFAULT_FORMATTER_HPP
+
+#include <boost/chrono/stopwatches/reporters/clock_default_formatter.hpp>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template <class CharT, class Stopwatch>
+ struct basic_stopwatch_reporter_default_formatter
+ : basic_clock_default_formatter<CharT, typename Stopwatch::clock>
+ {
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/strict_stopclock.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/strict_stopclock.hpp
new file mode 100644
index 0000000000..2252c8049a
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/strict_stopclock.hpp
@@ -0,0 +1,143 @@
+// boost/chrono/stopwatches/reporters/strict_stopclock.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_STRICT_STOPCLOCK_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_STRICT_STOPCLOCK_HPP
+
+#include <boost/chrono/config.hpp>
+
+#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
+#if defined __GNUC__
+#pragma GCC system_header
+#elif defined __SUNPRO_CC
+#pragma disable_warn
+#elif defined _MSC_VER
+#pragma warning(push, 1)
+#endif
+#endif
+
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp>
+#include <boost/chrono/stopwatches/strict_stopwatch.hpp>
+#include <boost/chrono/chrono.hpp>
+#include <boost/chrono/detail/system.hpp>
+#include <boost/cstdint.hpp>
+#include <cassert>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<class CharT, typename Clock, class Formatter>
+ class basic_strict_stopclock: public basic_stopwatch_reporter<CharT, strict_stopwatch<Clock>, Formatter>
+ {
+ public:
+ typedef basic_stopwatch_reporter<CharT, strict_stopwatch<Clock>, Formatter> base_type;
+ typedef Clock clock;
+ typedef strict_stopwatch<Clock> stopwatch;
+ typedef Formatter formatter_type;
+
+ basic_strict_stopclock()
+ {
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit basic_strict_stopclock(system::error_code & ec) :
+ base_type(ec)
+ {
+ }
+#endif
+
+ explicit basic_strict_stopclock(formatter_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ explicit basic_strict_stopclock(const typename Formatter::char_type* fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit basic_strict_stopclock(typename Formatter::string_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ protected:
+
+ basic_strict_stopclock(const basic_strict_stopclock&); // = delete;
+ basic_strict_stopclock& operator=(const basic_strict_stopclock&); // = delete;
+ };
+
+
+ template<typename Clock=high_resolution_clock,
+ class Formatter = typename basic_stopwatch_reporter_default_formatter<char, strict_stopwatch<Clock> >::type>
+ class strict_stopclock;
+
+ template<class Stopwatch, class Formatter>
+ struct basic_stopwatch_reporter_default_formatter<char, strict_stopclock<Stopwatch, Formatter> >
+ {
+ typedef Formatter type;
+ };
+
+ template<typename Clock, class Formatter>
+ class strict_stopclock: public basic_strict_stopclock<char, Clock, Formatter>
+ {
+ typedef basic_strict_stopclock<char, Clock, Formatter> base_type;
+ public:
+ typedef Clock clock;
+ typedef typename base_type::stopwatch stopwatch;
+ typedef Formatter formatter_type;
+
+ strict_stopclock()
+ {
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit strict_stopclock(system::error_code & ec) :
+ base_type(ec)
+ {
+ }
+#endif
+
+ explicit strict_stopclock(formatter_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ explicit strict_stopclock(const typename Formatter::char_type* fmt) :
+ base_type(fmt)
+ {
+ }
+ explicit strict_stopclock(typename Formatter::string_type const& fmt) :
+ base_type(fmt)
+ {
+ }
+
+ protected:
+
+ strict_stopclock(const strict_stopclock&); // = delete;
+ strict_stopclock& operator=(const strict_stopclock&); // = delete;
+ };
+
+
+
+ } // namespace chrono
+} // namespace boost
+
+
+#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
+#if defined __SUNPRO_CC
+#pragma enable_warn
+#elif defined _MSC_VER
+#pragma warning(pop)
+#endif
+#endif
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/system_default_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/system_default_formatter.hpp
new file mode 100644
index 0000000000..ed2a384412
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/system_default_formatter.hpp
@@ -0,0 +1,19 @@
+// boost/chrono/stopwatches/reporters/system_default_formatter.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_SYSTEM_DEFAULT_FORMATTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_SYSTEM_DEFAULT_FORMATTER_HPP
+
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/clock_default_formatter.hpp>
+#include <boost/chrono/stopwatches/formatters/elapsed_formatter.hpp>
+#include <boost/chrono/system_clocks.hpp>
+
+
+
+#endif
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/thread_default_formatter.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/thread_default_formatter.hpp
new file mode 100644
index 0000000000..40b0eb7d14
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/reporters/thread_default_formatter.hpp
@@ -0,0 +1,26 @@
+// boost/chrono/stopwatches/reporters/thread_default_formatter.hpp
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_THREAD_DEFAULT_FORMATTER_HPP
+#define BOOST_CHRONO_STOPWATCHES_REPORTERS_THREAD_DEFAULT_FORMATTER_HPP
+
+#include <boost/chrono/config.hpp>
+
+#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
+
+#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
+#include <boost/chrono/stopwatches/reporters/clock_default_formatter.hpp>
+#include <boost/chrono/stopwatches/formatters/elapsed_formatter.hpp>
+#include <boost/chrono/thread_clock.hpp>
+
+
+
+#endif
+
+#endif
+
+
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/simple_stopwatch.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/simple_stopwatch.hpp
new file mode 100644
index 0000000000..f36acbb714
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/simple_stopwatch.hpp
@@ -0,0 +1,110 @@
+// boost/chrono/stopwatches/simple_stopwatch.hpp ------------------------------------------------------------//
+// Copyright 2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_SIMPLE_STOPWATCH__HPP
+#define BOOST_CHRONO_STOPWATCHES_SIMPLE_STOPWATCH__HPP
+
+#include <boost/chrono/config.hpp>
+
+#include <boost/chrono/chrono.hpp>
+#include <boost/system/error_code.hpp>
+#include <boost/chrono/thread_clock.hpp>
+#include <boost/chrono/process_cpu_clocks.hpp>
+#include <utility>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ /**
+ * This class provides the simpler stopwatch which is just able to give the elapsed time since its construction.
+ */
+ template<typename Clock=high_resolution_clock>
+ class simple_stopwatch
+ {
+ public:
+ typedef Clock clock;
+ typedef typename Clock::duration duration;
+ typedef typename Clock::time_point time_point;
+ typedef typename Clock::rep rep;
+ typedef typename Clock::period period;
+ BOOST_STATIC_CONSTEXPR bool is_steady = Clock::is_steady;
+
+
+ simple_stopwatch() :
+ start_(clock::now())
+ {
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit simple_stopwatch(system::error_code & ec) :
+ start_(duration::zero())
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec))
+ {
+ if (ec)
+ {
+ return;
+ }
+ }
+ start_ = tmp;
+ }
+#endif
+
+ ~simple_stopwatch() BOOST_NOEXCEPT
+ {
+ }
+
+ duration elapsed()
+ {
+ return clock::now() - start_;
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ duration elapsed(system::error_code & ec) BOOST_NOEXCEPT
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec))
+ {
+ if (ec)
+ return duration::zero();
+ }
+ return tmp - start_;
+ }
+#endif
+
+ private:
+ time_point start_;
+ simple_stopwatch(const simple_stopwatch&); // = delete;
+ simple_stopwatch& operator=(const simple_stopwatch&); // = delete;
+ };
+
+ typedef simple_stopwatch<system_clock> system_simple_stopwatch;
+#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
+ typedef simple_stopwatch<steady_clock> steady_simple_stopwatch;
+#endif
+ typedef simple_stopwatch<high_resolution_clock> high_resolution_simple_stopwatch;
+
+#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+ typedef simple_stopwatch<process_real_cpu_clock> process_real_cpu_simple_stopwatch;
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
+ typedef simple_stopwatch<process_user_cpu_clock> process_user_cpu_simple_stopwatch;
+ typedef simple_stopwatch<process_system_cpu_clock> process_system_cpu_simple_stopwatch;
+ typedef simple_stopwatch<process_cpu_clock> process_cpu_simple_stopwatch;
+#endif
+#endif
+
+#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
+ typedef simple_stopwatch<thread_clock> thread_simple_stopwatch;
+#endif
+
+
+ } // namespace chrono
+} // namespace boost
+
+#endif
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch.hpp
new file mode 100644
index 0000000000..afa00806bf
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch.hpp
@@ -0,0 +1,444 @@
+// boost/chrono/stopwatches/stopwatch.hpp -----------------------------//
+
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_STOPWATCH_HPP
+#define BOOST_CHRONO_STOPWATCHES_STOPWATCH_HPP
+
+
+#include <boost/chrono/config.hpp>
+
+#include <boost/chrono/stopwatches/stopwatch_scoped.hpp>
+#include <boost/chrono/stopwatches/collectors/no_memory.hpp> // default laps_collector
+#include <boost/chrono/stopwatches/dont_start.hpp>
+#include <boost/chrono/system_clocks.hpp> // default_clock
+#include <boost/chrono/detail/system.hpp>
+#include <utility>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+
+ /**
+ * A stopwatch is a model of @c Stopwatch taking as parameters the @c Clock and the @c LapsCollector.
+ *
+ * The main difference respect to a @c simple_stopwatch is that the user can stop it.
+ * Each sequence of start-stop results in a new elapsed duration sample that is provided to the LapsCollector.
+ *
+ * It is up to the LapsCollector to do whatever it wants with each sample.
+ * A LapCollector must define a store(duration const&) and a clear() functions.
+ *
+ * The library provides LapsCollectors that forget the sample, store the
+ * last one, cummulates the samples in an accumulator set or store them in a container.
+ * For simplicity the default LapCollector is the one that forget the samples.
+ *
+ * Even if it is preferable to use process or thread wide clocks,
+ * the default of the Clock parameter is high_resolution_clock,
+ * as it is the single one ensured on all platforms.
+ */
+ template<typename Clock=high_resolution_clock, typename LapsCollector=no_memory<typename Clock::duration> >
+ class stopwatch
+ {
+ public:
+ typedef LapsCollector laps_collector;
+ typedef Clock clock;
+ typedef typename Clock::duration duration;
+ typedef typename Clock::time_point time_point;
+ typedef typename Clock::rep rep;
+ typedef typename Clock::period period;
+ BOOST_STATIC_CONSTEXPR bool is_steady = Clock::is_steady;
+
+ /**
+ * Default constructor.
+ *
+ * Effects: Starts the stopwatch.
+ * Post-conditions: is_running().
+ */
+ stopwatch()
+ :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_()
+ {
+ start();
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Default constructor.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: Starts the stopwatch.
+ * Post-conditions: is_running() if no error occur.
+ */
+ explicit stopwatch(
+ system::error_code & ec
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_()
+ {
+ start(ec);
+ }
+#endif
+ /**
+ * Not starting constructor.
+ *
+ * Effects: Don't starts the stopwatch.
+ * Post-conditions: ! is_running() if no error occur.
+ */
+ explicit stopwatch(
+ const dont_start_t&
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_()
+ {
+ }
+
+ /**
+ * Starting constructor from a LapsCollector instance.
+ *
+ * Effects: Copies the LapsCollector. Starts the stopwatch.
+ * Post-conditions: is_running() if no error occur.
+ *
+ * Remark: The LapsCollector is copied and owned by the stopwatch.
+ */
+ explicit stopwatch(
+ laps_collector const& acc
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_(acc)
+ {
+ start();
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Starting constructor from a LapsCollector instance.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: Copies the LapsCollector. Starts the stopwatch.
+ * Post-conditions: is_running() if no error occur.
+ *
+ * Remark: The LapsCollector is copied and owned by the stopwatch.
+ */
+ explicit stopwatch(
+ laps_collector const& acc,
+ system::error_code & ec
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_(acc)
+ {
+ start(ec);
+ }
+#endif
+
+ /**
+ * Not starting constructor from a LapsCollector instance.
+ *
+ * Effects: Copies the LapsCollector. Don't starts the stopwatch.
+ * Post-conditions: ! is_running() if no error occur.
+ *
+ * Remark: The LapsCollector is copied and owned by the stopwatch.
+ */
+ stopwatch(
+ laps_collector const& acc,
+ const dont_start_t&
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ laps_collector_(acc)
+ {
+ }
+
+ /**
+ * Destructor.
+ *
+ * Effects: Do nothing.
+ */
+ ~stopwatch() BOOST_NOEXCEPT
+ {
+ }
+
+ /**
+ * Restart the stopwatch.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: As if stop(); start() were called, but ensuring that the start time is the same as the stop time.
+ *
+ * Post-conditions: is_running() if no error occur.
+ */
+ void restart()
+ {
+ time_point tmp = clock::now();
+
+ if (is_running())
+ {
+ laps_collector_.store(tmp - start_);
+ }
+ else
+ {
+ running_ = true;
+ }
+ start_ = tmp;
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Restart the stopwatch.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: As if stop(); start() were called, but ensuring that the start time is the same as the stop time.
+ *
+ * Post-conditions: is_running() if no error occur.
+ */
+ void restart(
+ system::error_code & ec
+ )
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ if (is_running())
+ {
+ laps_collector_.store(tmp - start_);
+ }
+ else
+ {
+ running_ = true;
+ }
+ start_ = tmp;
+ }
+#endif
+
+ /**
+ * Start the stopwatch.
+ *
+ * Effects: Memorize the current time.
+ *
+ * Post-conditions: is_running().
+ */
+ void start()
+ {
+ start_ = clock::now();
+ running_ = true;
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Start the stopwatch.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: Memorize the current time.
+ *
+ * Post-conditions: @c is_running() if no error occur.
+ */
+ void start(
+ system::error_code & ec
+ )
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ start_ = tmp;
+ running_ = true;
+ }
+#endif
+
+ /**
+ * Start the stopwatch.
+ *
+ * Requires: is_running().
+ * Effects: Stores the elapsed time since start time into the LapCollector.
+ *
+ * Throws: Any exception that the LapCollector can throw.
+ *
+ * Post-conditions: !is_running() if no error occur.
+ */
+ void stop()
+ {
+ if (is_running())
+ {
+ laps_collector_.store(clock::now() - start_);
+ start_ = time_point(duration::zero());
+ running_ = false;
+ }
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Start the stopwatch.
+ *
+ * Requires: is_running().
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ * Effects: Stores the elapsed time since start time into the LapCollector if no internal error occurs.
+ *
+ * Throws: Any exception that the LapCollector can Throw.
+ *
+ * Post-conditions: !is_running() if no error occur.
+ */
+ void stop(
+ system::error_code & ec
+ )
+ {
+ if (is_running())
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ laps_collector_.store(tmp - start_);
+ start_ = time_point(duration::zero());
+ running_ = false;
+ }
+ }
+#endif
+
+ /**
+ * States if the Stopwatch is running.
+ */
+ bool is_running() const {
+ return running_;
+ }
+
+ /**
+ * Elapsed time getter for the current lap.
+ *
+ * Returns: the elapsed time since the last start if no internal error occur.
+ *
+ */
+ duration elapsed_current_lap() const
+ {
+ if (is_running())
+ {
+ return clock::now() - start_;
+ }
+ else
+ {
+ return duration::zero();
+ }
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Elapsed time getter for the current lap.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ *
+ * Returns: the elapsed time since the start if no internal error occur.
+ *
+ */
+ duration elapsed_current_lap(
+ system::error_code & ec
+ ) const
+ {
+ if (is_running())
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return duration::zero();
+
+ return tmp - start_;
+ } else
+ {
+ return duration::zero();
+ }
+ }
+#endif
+
+ /**
+ * Elapsed time getter.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ *
+ * Returns: the elapsed time since the start if no internal error occur.
+ *
+ */
+ duration elapsed() const
+ {
+ return laps_collector_.elapsed()+elapsed_current_lap();
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ /**
+ * Elapsed time getter.
+ *
+ * Effects: Assign the error code if any internal error occur while retrieving the current time.
+ *
+ * Returns: the elapsed time since the start if no internal error occur.
+ *
+ */
+ duration elapsed(
+ system::error_code & ec
+ ) const
+ {
+ duration tmp = elapsed_current_lap(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return duration::zero();
+ return laps_collector_.elapsed() + tmp;
+ }
+#endif
+ /**
+ * Elapsed time for the last lap.
+ *
+ * Returns: the elapsed time of the last lap.
+ *
+ */
+
+ duration last() const
+ {
+ return laps_collector_.last();
+ }
+ /**
+ * Resets the stopwatch.
+ *
+ * Effects: Resets the LapCollector.
+ *
+ * Post-conditions: !is_running() if no error occur.
+ *
+ */
+ void reset()
+ {
+
+ laps_collector_.reset();
+ running_ = false;
+ start_ = time_point(duration::zero());
+ }
+
+ /**
+ * LapsCollector getter.
+ *
+ * Returns: the LapCollector instance.
+ *
+ */
+ laps_collector const& get_laps_collector() BOOST_NOEXCEPT
+ {
+ return laps_collector_;
+ }
+
+ /**
+ * Useful typedef for scoped run
+ */
+ typedef stopwatch_runner<stopwatch<Clock, LapsCollector> >
+ scoped_run;
+ /**
+ * Useful typedef for scoped stop
+ */
+ typedef stopwatch_stopper<stopwatch<Clock, LapsCollector> >
+ scoped_stop;
+
+ private:
+ time_point start_;
+ bool running_;
+ laps_collector laps_collector_;
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+#endif // header
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch_scoped.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch_scoped.hpp
new file mode 100644
index 0000000000..836d0a9552
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/stopwatch_scoped.hpp
@@ -0,0 +1,142 @@
+// boost/chrono/stopwatches/stopwatch_scoped.hpp ------------------------------------------------------------//
+// Copyright 2009-2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_STOPWATCH_SCOPED_HPP
+#define BOOST_CHRONO_STOPWATCHES_STOPWATCH_SCOPED_HPP
+
+#include <boost/chrono/config.hpp>
+
+#include <boost/chrono/chrono.hpp>
+#include <boost/chrono/detail/system.hpp>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ //--------------------------------------------------------------------------------------//
+ template<class Stopwatch>
+ class stopwatch_runner
+ {
+ public:
+ typedef Stopwatch stopwatch;
+ stopwatch_runner(stopwatch & a) :
+ stopwatch_(a)
+ {
+ stopwatch_.start();
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ stopwatch_runner(stopwatch & a, system::error_code & ec) :
+ stopwatch_(a)
+ {
+ stopwatch_.start(ec);
+ }
+#endif
+ ~stopwatch_runner()
+ {
+ stopwatch_.stop();
+ }
+ private:
+ stopwatch& stopwatch_;
+ stopwatch_runner();//= delete;
+ stopwatch_runner(const stopwatch_runner&); // = delete;
+ stopwatch_runner& operator=(const stopwatch_runner&); // = delete;
+
+ };
+
+ //--------------------------------------------------------------------------------------//
+ template<class Stopwatch>
+ class stopwatch_stopper
+ {
+ public:
+ typedef Stopwatch stopwatch;
+ stopwatch_stopper(stopwatch & a) :
+ stopwatch_(a)
+ {
+ stopwatch_.stop();
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ stopwatch_stopper(stopwatch & a, system::error_code & ec) :
+ stopwatch_(a)
+ {
+ stopwatch_.stop(ec);
+ }
+#endif
+ ~stopwatch_stopper()
+ {
+ stopwatch_.start();
+ }
+ private:
+ stopwatch& stopwatch_;
+ stopwatch_stopper();//= delete;
+ stopwatch_stopper(const stopwatch_stopper&); // = delete;
+ stopwatch_stopper& operator=(const stopwatch_stopper&); // = delete;
+
+ };
+
+ //--------------------------------------------------------------------------------------//
+ template<class Stopwatch>
+ class stopwatch_suspender
+ {
+ public:
+ typedef Stopwatch stopwatch;
+ stopwatch_suspender(stopwatch & a) :
+ stopwatch_(a)
+ {
+ stopwatch_.suspend();
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ stopwatch_suspender(stopwatch & a, system::error_code & ec) :
+ stopwatch_(a)
+ {
+ stopwatch_.suspend(ec);
+ }
+#endif
+
+ ~stopwatch_suspender()
+ {
+ stopwatch_.resume();
+ }
+ private:
+ stopwatch& stopwatch_;
+ stopwatch_suspender(); // = delete;
+ stopwatch_suspender(const stopwatch_suspender&); // = delete;
+ stopwatch_suspender& operator=(const stopwatch_suspender&); // = delete;
+ };
+
+ //--------------------------------------------------------------------------------------//
+ template<class Stopwatch>
+ class stopwatch_resumer
+ {
+ public:
+ typedef Stopwatch stopwatch;
+ stopwatch_resumer(stopwatch & a) :
+ stopwatch_(a)
+ {
+ stopwatch_.resume();
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ stopwatch_resumer(stopwatch & a, system::error_code & ec) :
+ stopwatch_(a)
+ {
+ stopwatch_.resume(ec);
+ }
+#endif
+ ~stopwatch_resumer()
+ {
+ stopwatch_.suspend();
+ }
+ private:
+ stopwatch& stopwatch_;
+ stopwatch_resumer(); // = delete;
+ stopwatch_resumer(const stopwatch_resumer&); // = delete;
+ stopwatch_resumer& operator=(const stopwatch_resumer&); // = delete;
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+#endif
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/strict_stopwatch.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/strict_stopwatch.hpp
new file mode 100644
index 0000000000..ceb0be66da
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/strict_stopwatch.hpp
@@ -0,0 +1,115 @@
+// boost/chrono/stopwatches/strict_stopwatch.hpp ------------------------------------------------------------//
+// Copyright 2011 Vicente J. Botet Escriba
+// Copyright (c) Microsoft Corporation 2014
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_STRICT_STOPWATCH__HPP
+#define BOOST_CHRONO_STOPWATCHES_STRICT_STOPWATCH__HPP
+
+#include <boost/chrono/config.hpp>
+
+#include <boost/chrono/chrono.hpp>
+#include <boost/chrono/detail/system.hpp>
+#include <boost/chrono/thread_clock.hpp>
+#include <boost/chrono/process_cpu_clocks.hpp>
+#include <utility>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ /**
+ * This class provides the simpler stopwatch which is just able to give the elapsed time since its construction.
+ */
+ template<typename Clock=high_resolution_clock>
+ class strict_stopwatch
+ {
+ public:
+ typedef Clock clock;
+ typedef typename Clock::duration duration;
+ typedef typename Clock::time_point time_point;
+ typedef typename Clock::rep rep;
+ typedef typename Clock::period period;
+ BOOST_STATIC_CONSTEXPR bool is_steady = Clock::is_steady;
+
+
+ strict_stopwatch() :
+ start_(clock::now())
+ {
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit strict_stopwatch(system::error_code & ec) :
+ start_(duration::zero())
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec))
+ {
+ if (ec)
+ {
+ return;
+ }
+ }
+ start_ = tmp;
+ }
+#endif
+
+ ~strict_stopwatch() BOOST_NOEXCEPT
+ {
+ }
+
+ duration elapsed()
+ {
+ return clock::now() - start_;
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ duration elapsed(system::error_code & ec)
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec))
+ {
+ if (ec)
+ return duration::zero();
+ }
+ return tmp - start_;
+ }
+#endif
+ /**
+ * States if the Stopwatch is running.
+ */
+ bool is_running() const {
+ return true;
+ }
+ private:
+ time_point start_;
+ strict_stopwatch(const strict_stopwatch&); // = delete;
+ strict_stopwatch& operator=(const strict_stopwatch&); // = delete;
+ };
+
+ typedef strict_stopwatch<system_clock> system_strict_stopwatch;
+#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
+ typedef strict_stopwatch<steady_clock> steady_strict_stopwatch;
+#endif
+ typedef strict_stopwatch<high_resolution_clock> high_resolution_strict_stopwatch;
+
+#if defined(BOOST_CHRONO_HAS_PROCESS_CLOCKS)
+ typedef strict_stopwatch<process_real_cpu_clock> process_real_cpu_strict_stopwatch;
+#if ! BOOST_OS_WINDOWS || BOOST_PLAT_WINDOWS_DESKTOP
+ typedef strict_stopwatch<process_user_cpu_clock> process_user_cpu_strict_stopwatch;
+ typedef strict_stopwatch<process_system_cpu_clock> process_system_cpu_strict_stopwatch;
+ typedef strict_stopwatch<process_cpu_clock> process_cpu_strict_stopwatch;
+#endif
+#endif
+
+#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
+ typedef strict_stopwatch<thread_clock> thread_strict_stopwatch;
+#endif
+
+
+ } // namespace chrono
+} // namespace boost
+
+#endif
diff --git a/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/suspendable_stopwatch.hpp b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/suspendable_stopwatch.hpp
new file mode 100644
index 0000000000..5af8e948f6
--- /dev/null
+++ b/contrib/restricted/boost/libs/chrono/stopwatches/include/boost/chrono/stopwatches/suspendable_stopwatch.hpp
@@ -0,0 +1,334 @@
+// boost/chrono/stopwatches/suspendable_stopwatch.hpp ------------------------------------------------------------//
+// Copyright 2011 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+// See http://www.boost.org/libs/libs/chrono/stopwatches for documentation.
+
+#ifndef BOOST_CHRONO_STOPWATCHES_SUSPENDABLE_STOPWATCH__HPP
+#define BOOST_CHRONO_STOPWATCHES_SUSPENDABLE_STOPWATCH__HPP
+
+#include <boost/chrono/config.hpp>
+
+#include <boost/chrono/stopwatches/stopwatch_scoped.hpp>
+#include <boost/chrono/stopwatches/collectors/no_memory.hpp> // default laps_collector
+#include <boost/chrono/stopwatches/dont_start.hpp>
+#include <boost/chrono/detail/system.hpp>
+#include <boost/chrono/system_clocks.hpp>
+#include <utility>
+
+namespace boost
+{
+ namespace chrono
+ {
+
+ template<typename Clock=high_resolution_clock, typename LapsCollector=no_memory<typename Clock::duration> >
+ class suspendable_stopwatch
+ {
+ public:
+ typedef LapsCollector laps_collector;
+ typedef Clock clock;
+ typedef typename Clock::duration duration;
+ typedef typename Clock::time_point time_point;
+ typedef typename Clock::rep rep;
+ typedef typename Clock::period period;
+ BOOST_STATIC_CONSTEXPR bool is_steady = Clock::is_steady;
+
+ suspendable_stopwatch() :
+ start_(duration::zero()),
+ running_(false),
+ suspended_(false),
+ laps_collector_(),
+ partial_(duration::zero())
+ {
+ start();
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit suspendable_stopwatch(
+ system::error_code & ec
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ suspended_(false),
+ laps_collector_(),
+ partial_(duration::zero())
+ {
+ start(ec);
+ }
+#endif
+
+ explicit suspendable_stopwatch(
+ const dont_start_t&
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ suspended_(false),
+ laps_collector_(),
+ partial_(duration::zero())
+ {
+ }
+
+ explicit suspendable_stopwatch(
+ laps_collector const& acc
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ suspended_(false),
+ laps_collector_(acc),
+ partial_(duration::zero())
+ {
+ start();
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ explicit suspendable_stopwatch(
+ laps_collector const& acc,
+ system::error_code & ec
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ suspended_(false),
+ laps_collector_(acc),
+ partial_(duration::zero())
+ {
+ start(ec);
+ }
+#endif
+
+ suspendable_stopwatch(
+ laps_collector const& acc,
+ const dont_start_t&
+ ) :
+ start_(duration::zero()),
+ running_(false),
+ suspended_(false),
+ laps_collector_(acc),
+ partial_(duration::zero())
+ {
+ }
+
+ ~suspendable_stopwatch()
+ {
+ stop();
+ }
+
+ void restart()
+ {
+ time_point tmp = clock::now();
+
+ if (running_)
+ {
+ partial_ += tmp - start_;
+ laps_collector_.store(partial_);
+ partial_ = duration::zero();
+ }
+ else
+ {
+ running_ = true;
+ }
+ start_ = tmp;
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ void restart(system::error_code & ec)
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ if (running_)
+ {
+ partial_ += tmp - start_;
+ laps_collector_.store(partial_);
+ partial_ = duration::zero();
+ }
+ else
+ {
+ running_ = true;
+ }
+ start_ = tmp;
+ }
+#endif
+
+ void start()
+ {
+ start_ = clock::now();;
+ partial_ = duration::zero();
+ running_ = true;
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ void start(system::error_code & ec)
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ partial_ = duration::zero();
+ start_ = tmp;
+ running_ = true;
+ }
+#endif
+
+ void stop()
+ {
+ partial_ += clock::now() - start_;
+ laps_collector_.store(partial_);
+ start_ = time_point(duration::zero());
+ running_ = false;
+ suspended_ = false;
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ void stop(system::error_code & ec)
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ partial_ += tmp - start_;
+ laps_collector_.store(partial_);
+ start_ = time_point(duration::zero());
+ running_ = false;
+ suspended_ = false;
+ }
+#endif
+
+ void suspend()
+ {
+ if (is_running())
+ {
+ if (!suspended_)
+ {
+ partial_ += clock::now() - start_;
+ suspended_ = true;
+ }
+ }
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ void suspend(system::error_code & ec)
+ {
+ if (is_running())
+ {
+ if (!suspended_)
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ partial_ += tmp - start_;
+ suspended_ = true;
+ }
+ else
+ {
+ ec.clear();
+ }
+ } else
+ {
+ ec.clear();
+ }
+ }
+#endif
+
+ void resume()
+ {
+ if (suspended_)
+ {
+ start_ = clock::now();
+ suspended_ = false;
+ }
+ }
+
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ void resume(system::error_code & ec)
+ {
+ if (suspended_)
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return;
+
+ start_ = tmp;
+ suspended_ = false;
+ } else
+ {
+ ec.clear();
+ }
+ }
+#endif
+
+ bool is_running() const {
+ return running_;
+ }
+ bool is_suspended() const {
+ return suspended_;
+ }
+
+ duration elapsed() const
+ {
+ if (is_running())
+ {
+ if (suspended_) {
+ return partial_;
+ }
+ else
+ {
+ return partial_ + clock::now() - start_;
+ }
+ } else
+ {
+ return duration::zero();
+ }
+ }
+#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
+ duration elapsed(system::error_code & ec) const
+ {
+ if (is_running())
+ {
+ if (suspended_) {
+ return partial_;
+ }
+ else
+ {
+ time_point tmp = clock::now(ec);
+ if (!BOOST_CHRONO_IS_THROWS(ec) && ec) return duration::zero();
+
+ return partial_ + tmp - start_;
+ }
+ } else
+ {
+ return duration::zero();
+ }
+ }
+#endif
+
+ void reset(
+ )
+ {
+ laps_collector_.reset();
+ running_ = false;
+ suspended_ = false;
+ partial_ = duration::zero();
+ start_ = time_point(duration::zero());
+ }
+
+ laps_collector const& get_laps_collector()
+ {
+ return laps_collector_;
+ }
+
+
+ typedef stopwatch_runner<suspendable_stopwatch<Clock, LapsCollector> >
+ scoped_run;
+ typedef stopwatch_stopper<suspendable_stopwatch<Clock, LapsCollector> >
+ scoped_stop;
+ typedef stopwatch_suspender<suspendable_stopwatch<Clock, LapsCollector> >
+ scoped_suspend;
+ typedef stopwatch_resumer<suspendable_stopwatch<Clock, LapsCollector> >
+ scoped_resume;
+ private:
+ time_point start_;
+ bool running_;
+ bool suspended_;
+ laps_collector laps_collector_;
+ duration partial_;
+ };
+
+ } // namespace chrono
+} // namespace boost
+
+#endif
diff --git a/contrib/restricted/boost/libs/container/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/container/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..86ed39445e
--- /dev/null
+++ b/contrib/restricted/boost/libs/container/.yandex_meta/licenses.list.txt
@@ -0,0 +1,65 @@
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2007-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================CC0-1.0====================
+ Doug Lea and released to the public domain, as explained at
+ http://creativecommons.org/publicdomain/zero/1.0/ Send questions,
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2007-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/context/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/context/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..79fa1e073c
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/.yandex_meta/licenses.list.txt
@@ -0,0 +1,91 @@
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ Copyright Oliver Kowalke 2009.
+ Copyright Thomas Sailer 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ Copyright Edward Nevill + Oliver Kowalke 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
new file mode 100644
index 0000000000..1b8ce9eddb
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_arm64_aapcs_elf_gas.S
@@ -0,0 +1,113 @@
+/*
+ Copyright Edward Nevill + Oliver Kowalke 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | d8 | d9 | d10 | d11 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | d12 | d13 | d14 | d15 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * | x19 | x20 | x21 | x22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | x23 | x24 | x25 | x26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
+ * ------------------------------------------------- *
+ * | x27 | x28 | FP | LR | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | | | *
+ * ------------------------------------------------- *
+ * | 0xa0| 0xa4| 0xa8| 0xac| | | *
+ * ------------------------------------------------- *
+ * | PC | align | | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.align 2
+.global jump_fcontext
+.type jump_fcontext, %function
+jump_fcontext:
+ # prepare stack for GP + FPU
+ sub sp, sp, #0xb0
+
+ # save d8 - d15
+ stp d8, d9, [sp, #0x00]
+ stp d10, d11, [sp, #0x10]
+ stp d12, d13, [sp, #0x20]
+ stp d14, d15, [sp, #0x30]
+
+ # save x19-x30
+ stp x19, x20, [sp, #0x40]
+ stp x21, x22, [sp, #0x50]
+ stp x23, x24, [sp, #0x60]
+ stp x25, x26, [sp, #0x70]
+ stp x27, x28, [sp, #0x80]
+ stp x29, x30, [sp, #0x90]
+
+ # save LR as PC
+ str x30, [sp, #0xa0]
+
+ # store RSP (pointing to context-data) in X0
+ mov x4, sp
+
+ # restore RSP (pointing to context-data) from X1
+ mov sp, x0
+
+ # load d8 - d15
+ ldp d8, d9, [sp, #0x00]
+ ldp d10, d11, [sp, #0x10]
+ ldp d12, d13, [sp, #0x20]
+ ldp d14, d15, [sp, #0x30]
+
+ # load x19-x30
+ ldp x19, x20, [sp, #0x40]
+ ldp x21, x22, [sp, #0x50]
+ ldp x23, x24, [sp, #0x60]
+ ldp x25, x26, [sp, #0x70]
+ ldp x27, x28, [sp, #0x80]
+ ldp x29, x30, [sp, #0x90]
+
+ # return transfer_t from jump
+ # pass transfer_t as first arg in context function
+ # X0 == FCTX, X1 == DATA
+ mov x0, x4
+
+ # load pc
+ ldr x4, [sp, #0xa0]
+
+ # restore stack from GP + FPU
+ add sp, sp, #0xb0
+
+ ret x4
+.size jump_fcontext,.-jump_fcontext
+# Mark that we don't need executable stack.
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
new file mode 100644
index 0000000000..31738f7453
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_arm64_aapcs_macho_gas.S
@@ -0,0 +1,109 @@
+/*
+ Copyright Edward Nevill + Oliver Kowalke 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | d8 | d9 | d10 | d11 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | d12 | d13 | d14 | d15 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * | x19 | x20 | x21 | x22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | x23 | x24 | x25 | x26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
+ * ------------------------------------------------- *
+ * | x27 | x28 | FP | LR | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | | | *
+ * ------------------------------------------------- *
+ * | 0xa0| 0xa4| 0xa8| 0xac| | | *
+ * ------------------------------------------------- *
+ * | PC | align | | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl _jump_fcontext
+.balign 16
+_jump_fcontext:
+ ; prepare stack for GP + FPU
+ sub sp, sp, #0xb0
+
+ ; save d8 - d15
+ stp d8, d9, [sp, #0x00]
+ stp d10, d11, [sp, #0x10]
+ stp d12, d13, [sp, #0x20]
+ stp d14, d15, [sp, #0x30]
+
+ ; save x19-x30
+ stp x19, x20, [sp, #0x40]
+ stp x21, x22, [sp, #0x50]
+ stp x23, x24, [sp, #0x60]
+ stp x25, x26, [sp, #0x70]
+ stp x27, x28, [sp, #0x80]
+ stp fp, lr, [sp, #0x90]
+
+ ; save LR as PC
+ str lr, [sp, #0xa0]
+
+ ; store RSP (pointing to context-data) in X0
+ mov x4, sp
+
+ ; restore RSP (pointing to context-data) from X1
+ mov sp, x0
+
+ ; load d8 - d15
+ ldp d8, d9, [sp, #0x00]
+ ldp d10, d11, [sp, #0x10]
+ ldp d12, d13, [sp, #0x20]
+ ldp d14, d15, [sp, #0x30]
+
+ ; load x19-x30
+ ldp x19, x20, [sp, #0x40]
+ ldp x21, x22, [sp, #0x50]
+ ldp x23, x24, [sp, #0x60]
+ ldp x25, x26, [sp, #0x70]
+ ldp x27, x28, [sp, #0x80]
+ ldp fp, lr, [sp, #0x90]
+
+ ; return transfer_t from jump
+ ; pass transfer_t as first arg in context function
+ ; X0 == FCTX, X1 == DATA
+ mov x0, x4
+
+ ; load pc
+ ldr x4, [sp, #0xa0]
+
+ ; restore stack from GP + FPU
+ add sp, sp, #0xb0
+
+ ret x4
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_elf_gas.S
new file mode 100644
index 0000000000..d0f7fa24c6
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_elf_gas.S
@@ -0,0 +1,86 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | v8 | lr | pc | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl jump_fcontext
+.align 2
+.type jump_fcontext,%function
+jump_fcontext:
+ @ save LR as PC
+ push {lr}
+ @ save hidden,V1-V8,LR
+ push {a1,v1-v8,lr}
+
+ @ prepare stack for FPU
+ sub sp, sp, #64
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ @ save S16-S31
+ vstmia sp, {d8-d15}
+#endif
+
+ @ store RSP (pointing to context-data) in A1
+ mov a1, sp
+
+ @ restore RSP (pointing to context-data) from A2
+ mov sp, a2
+
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ @ restore S16-S31
+ vldmia sp, {d8-d15}
+#endif
+ @ prepare stack for FPU
+ add sp, sp, #64
+
+ @ restore hidden,V1-V8,LR
+ pop {a4,v1-v8,lr}
+
+ @ return transfer_t from jump
+ str a1, [a4, #0]
+ str a3, [a4, #4]
+ @ pass transfer_t as first arg in context function
+ @ A1 == FCTX, A2 == DATA
+ mov a2, a3
+
+ @ restore PC
+ pop {pc}
+.size jump_fcontext,.-jump_fcontext
+
+@ Mark that we don't need executable stack.
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_macho_gas.S
new file mode 100644
index 0000000000..077c36409e
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_macho_gas.S
@@ -0,0 +1,95 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | sjlj|hiddn| v1 | v2 | v3 | v4 | v5 | v6 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | v7 | v8 | lr | pc | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl _jump_fcontext
+.align 2
+_jump_fcontext:
+ @ save LR as PC
+ push {lr}
+ @ save hidden,V1-V8,LR
+ push {a1,v1-v8,lr}
+
+ @ locate TLS to save/restore SjLj handler
+ mrc p15, 0, v2, c13, c0, #3
+ bic v2, v2, #3
+
+ @ load TLS[__PTK_LIBC_DYLD_Unwind_SjLj_Key]
+ ldr v1, [v2, #72]
+ @ save SjLj handler
+ push {v1}
+
+ @ prepare stack for FPU
+ sub sp, sp, #64
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ @ save S16-S31
+ vstmia sp, {d8-d15}
+#endif
+
+ @ store RSP (pointing to context-data) in A1
+ mov a1, sp
+
+ @ restore RSP (pointing to context-data) from A2
+ mov sp, a2
+
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ @ restore S16-S31
+ vldmia sp, {d8-d15}
+#endif
+ @ prepare stack for FPU
+ add sp, sp, #64
+
+ @ r#estore SjLj handler
+ pop {v1}
+ @ store SjLj handler in TLS
+ str v1, [v2, #72]
+
+ @ restore hidden,V1-V8,LR
+ pop {a4,v1-v8,lr}
+
+ @ return transfer_t from jump
+ str a1, [a4, #0]
+ str a3, [a4, #4]
+ @ pass transfer_t as first arg in context function
+ @ A1 == FCTX, A2 == DATA
+ mov a2, a3
+
+ @ restore PC
+ pop {pc}
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_pe_armasm.asm b/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_pe_armasm.asm
new file mode 100644
index 0000000000..bca923c6c7
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_pe_armasm.asm
@@ -0,0 +1,81 @@
+;/*
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+;*/
+
+; *******************************************************
+; * *
+; * ------------------------------------------------- *
+; * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+; * ------------------------------------------------- *
+; * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+; * ------------------------------------------------- *
+; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
+; * ------------------------------------------------- *
+; * ------------------------------------------------- *
+; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+; * ------------------------------------------------- *
+; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+; * ------------------------------------------------- *
+; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
+; * ------------------------------------------------- *
+; * *
+; *******************************************************
+
+ AREA |.text|, CODE
+ ALIGN 4
+ EXPORT jump_fcontext
+
+jump_fcontext PROC
+ ; save LR as PC
+ push {lr}
+ ; save hidden,V1-V8,LR
+ push {a1,v1-v8,lr}
+
+ ; load TIB to save/restore thread size and limit.
+ ; we do not need preserve CPU flag and can use it's arg register
+ mrc p15, #0, v1, c13, c0, #2
+
+ ; save current stack base
+ ldr a5, [v1, #0x04]
+ push {a5}
+ ; save current stack limit
+ ldr a5, [v1, #0x08]
+ push {a5}
+ ; save current deallocation stack
+ ldr a5, [v1, #0xe0c]
+ push {a5}
+
+ ; store RSP (pointing to context-data) in A1
+ mov a1, sp
+
+ ; restore RSP (pointing to context-data) from A2
+ mov sp, a2
+
+ ; restore deallocation stack
+ pop {a5}
+ str a5, [v1, #0xe0c]
+ ; restore stack limit
+ pop {a5}
+ str a5, [v1, #0x08]
+ ; restore stack base
+ pop {a5}
+ str a5, [v1, #0x04]
+
+ ; restore hidden,V1-V8,LR
+ pop {a4,v1-v8,lr}
+
+ ; return transfer_t from jump
+ str a1, [a4, #0]
+ str a3, [a4, #4]
+ ; pass transfer_t as first arg in context function
+ ; A1 == FCTX, A2 == DATA
+ mov a2, a3
+
+ ; restore PC
+ pop {pc}
+
+ ENDP
+ END
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_pe_armasm.masm b/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_pe_armasm.masm
new file mode 100644
index 0000000000..bca923c6c7
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_arm_aapcs_pe_armasm.masm
@@ -0,0 +1,81 @@
+;/*
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+;*/
+
+; *******************************************************
+; * *
+; * ------------------------------------------------- *
+; * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+; * ------------------------------------------------- *
+; * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+; * ------------------------------------------------- *
+; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
+; * ------------------------------------------------- *
+; * ------------------------------------------------- *
+; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+; * ------------------------------------------------- *
+; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+; * ------------------------------------------------- *
+; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
+; * ------------------------------------------------- *
+; * *
+; *******************************************************
+
+ AREA |.text|, CODE
+ ALIGN 4
+ EXPORT jump_fcontext
+
+jump_fcontext PROC
+ ; save LR as PC
+ push {lr}
+ ; save hidden,V1-V8,LR
+ push {a1,v1-v8,lr}
+
+ ; load TIB to save/restore thread size and limit.
+ ; we do not need preserve CPU flag and can use it's arg register
+ mrc p15, #0, v1, c13, c0, #2
+
+ ; save current stack base
+ ldr a5, [v1, #0x04]
+ push {a5}
+ ; save current stack limit
+ ldr a5, [v1, #0x08]
+ push {a5}
+ ; save current deallocation stack
+ ldr a5, [v1, #0xe0c]
+ push {a5}
+
+ ; store RSP (pointing to context-data) in A1
+ mov a1, sp
+
+ ; restore RSP (pointing to context-data) from A2
+ mov sp, a2
+
+ ; restore deallocation stack
+ pop {a5}
+ str a5, [v1, #0xe0c]
+ ; restore stack limit
+ pop {a5}
+ str a5, [v1, #0x08]
+ ; restore stack base
+ pop {a5}
+ str a5, [v1, #0x04]
+
+ ; restore hidden,V1-V8,LR
+ pop {a4,v1-v8,lr}
+
+ ; return transfer_t from jump
+ str a1, [a4, #0]
+ str a3, [a4, #4]
+ ; pass transfer_t as first arg in context function
+ ; A1 == FCTX, A2 == DATA
+ mov a2, a3
+
+ ; restore PC
+ pop {pc}
+
+ ENDP
+ END
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_combined_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_combined_sysv_macho_gas.S
new file mode 100644
index 0000000000..1d27afad10
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_combined_sysv_macho_gas.S
@@ -0,0 +1,20 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__i386__)
+ #include "jump_i386_sysv_macho_gas.S"
+#elif defined(__x86_64__)
+ #include "jump_x86_64_sysv_macho_gas.S"
+#elif defined(__ppc__)
+ #include "jump_ppc32_sysv_macho_gas.S"
+#elif defined(__ppc64__)
+ #include "jump_ppc64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_gas.asm b/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_gas.asm
new file mode 100644
index 0000000000..8512a3d088
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_gas.asm
@@ -0,0 +1,117 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Copyright Thomas Sailer 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*************************************************************************************
+* --------------------------------------------------------------------------------- *
+* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+* --------------------------------------------------------------------------------- *
+* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
+* --------------------------------------------------------------------------------- *
+* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
+* --------------------------------------------------------------------------------- *
+* --------------------------------------------------------------------------------- *
+* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+* --------------------------------------------------------------------------------- *
+* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
+* --------------------------------------------------------------------------------- *
+* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
+* --------------------------------------------------------------------------------- *
+**************************************************************************************/
+
+.file "jump_i386_ms_pe_gas.asm"
+.text
+.p2align 4,,15
+.globl _jump_fcontext
+.def _jump_fcontext; .scl 2; .type 32; .endef
+_jump_fcontext:
+ /* prepare stack */
+ leal -0x2c(%esp), %esp
+
+#if !defined(BOOST_USE_TSX)
+ /* save MMX control- and status-word */
+ stmxcsr (%esp)
+ /* save x87 control-word */
+ fnstcw 0x4(%esp)
+#endif
+
+ /* load NT_TIB */
+ movl %fs:(0x18), %edx
+ /* load fiber local storage */
+ movl 0x10(%edx), %eax
+ movl %eax, 0x8(%esp)
+ /* load current dealloction stack */
+ movl 0xe0c(%edx), %eax
+ movl %eax, 0xc(%esp)
+ /* load current stack limit */
+ movl 0x8(%edx), %eax
+ movl %eax, 0x10(%esp)
+ /* load current stack base */
+ movl 0x4(%edx), %eax
+ movl %eax, 0x14(%esp)
+ /* load current SEH exception list */
+ movl (%edx), %eax
+ movl %eax, 0x18(%esp)
+
+ movl %edi, 0x1c(%esp) /* save EDI */
+ movl %esi, 0x20(%esp) /* save ESI */
+ movl %ebx, 0x24(%esp) /* save EBX */
+ movl %ebp, 0x28(%esp) /* save EBP */
+
+ /* store ESP (pointing to context-data) in EAX */
+ movl %esp, %eax
+
+ /* firstarg of jump_fcontext() == fcontext to jump to */
+ movl 0x30(%esp), %ecx
+
+ /* restore ESP (pointing to context-data) from ECX */
+ movl %ecx, %esp
+
+#if !defined(BOOST_USE_TSX)
+ /* restore MMX control- and status-word */
+ ldmxcsr (%esp)
+ /* restore x87 control-word */
+ fldcw 0x4(%esp)
+#endif
+
+ /* restore NT_TIB into EDX */
+ movl %fs:(0x18), %edx
+ /* restore fiber local storage */
+ movl 0x8(%esp), %ecx
+ movl %ecx, 0x10(%edx)
+ /* restore current deallocation stack */
+ movl 0xc(%esp), %ecx
+ movl %ecx, 0xe0c(%edx)
+ /* restore current stack limit */
+ movl 0x10(%esp), %ecx
+ movl %ecx, 0x8(%edx)
+ /* restore current stack base */
+ movl 0x14(%esp), %ecx
+ movl %ecx, 0x4(%edx)
+ /* restore current SEH exception list */
+ movl 0x18(%esp), %ecx
+ movl %ecx, (%edx)
+
+ movl 0x2c(%esp), %ecx /* restore EIP */
+
+ movl 0x1c(%esp), %edi /* restore EDI */
+ movl 0x20(%esp), %esi /* restore ESI */
+ movl 0x24(%esp), %ebx /* restore EBX */
+ movl 0x28(%esp), %ebp /* restore EBP */
+
+ /* prepare stack */
+ leal 0x30(%esp), %esp
+
+ /* return transfer_t */
+ /* FCTX == EAX, DATA == EDX */
+ movl 0x34(%eax), %edx
+
+ /* jump to context */
+ jmp *%ecx
+
+.section .drectve
+.ascii " -export:\"jump_fcontext\""
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_masm.asm b/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_masm.asm
new file mode 100644
index 0000000000..7a9e848f1c
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_masm.asm
@@ -0,0 +1,116 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ---------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ---------------------------------------------------------------------------------
+; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
+; ---------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
+; ---------------------------------------------------------------------------------
+; ---------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ---------------------------------------------------------------------------------
+; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
+; ---------------------------------------------------------------------------------
+; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
+; ---------------------------------------------------------------------------------
+
+.386
+.XMM
+.model flat, c
+.code
+
+jump_fcontext PROC BOOST_CONTEXT_EXPORT
+ ; prepare stack
+ lea esp, [esp-02ch]
+
+IFNDEF BOOST_USE_TSX
+ ; save MMX control- and status-word
+ stmxcsr [esp]
+ ; save x87 control-word
+ fnstcw [esp+04h]
+ENDIF
+
+ assume fs:nothing
+ ; load NT_TIB into ECX
+ mov edx, fs:[018h]
+ assume fs:error
+ ; load fiber local storage
+ mov eax, [edx+010h]
+ mov [esp+08h], eax
+ ; load current deallocation stack
+ mov eax, [edx+0e0ch]
+ mov [esp+0ch], eax
+ ; load current stack limit
+ mov eax, [edx+08h]
+ mov [esp+010h], eax
+ ; load current stack base
+ mov eax, [edx+04h]
+ mov [esp+014h], eax
+ ; load current SEH exception list
+ mov eax, [edx]
+ mov [esp+018h], eax
+
+ mov [esp+01ch], edi ; save EDI
+ mov [esp+020h], esi ; save ESI
+ mov [esp+024h], ebx ; save EBX
+ mov [esp+028h], ebp ; save EBP
+
+ ; store ESP (pointing to context-data) in EAX
+ mov eax, esp
+
+ ; firstarg of jump_fcontext() == fcontext to jump to
+ mov ecx, [esp+030h]
+
+ ; restore ESP (pointing to context-data) from ECX
+ mov esp, ecx
+
+IFNDEF BOOST_USE_TSX
+ ; restore MMX control- and status-word
+ ldmxcsr [esp]
+ ; restore x87 control-word
+ fldcw [esp+04h]
+ENDIF
+
+ assume fs:nothing
+ ; load NT_TIB into EDX
+ mov edx, fs:[018h]
+ assume fs:error
+ ; restore fiber local storage
+ mov ecx, [esp+08h]
+ mov [edx+010h], ecx
+ ; restore current deallocation stack
+ mov ecx, [esp+0ch]
+ mov [edx+0e0ch], ecx
+ ; restore current stack limit
+ mov ecx, [esp+010h]
+ mov [edx+08h], ecx
+ ; restore current stack base
+ mov ecx, [esp+014h]
+ mov [edx+04h], ecx
+ ; restore current SEH exception list
+ mov ecx, [esp+018h]
+ mov [edx], ecx
+
+ mov ecx, [esp+02ch] ; restore EIP
+
+ mov edi, [esp+01ch] ; restore EDI
+ mov esi, [esp+020h] ; restore ESI
+ mov ebx, [esp+024h] ; restore EBX
+ mov ebp, [esp+028h] ; restore EBP
+
+ ; prepare stack
+ lea esp, [esp+030h]
+
+ ; return transfer_t
+ ; FCTX == EAX, DATA == EDX
+ mov edx, [eax+034h]
+
+ ; jump to context
+ jmp ecx
+jump_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_masm.masm b/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_masm.masm
new file mode 100644
index 0000000000..7a9e848f1c
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_i386_ms_pe_masm.masm
@@ -0,0 +1,116 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ---------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ---------------------------------------------------------------------------------
+; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
+; ---------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
+; ---------------------------------------------------------------------------------
+; ---------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ---------------------------------------------------------------------------------
+; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
+; ---------------------------------------------------------------------------------
+; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
+; ---------------------------------------------------------------------------------
+
+.386
+.XMM
+.model flat, c
+.code
+
+jump_fcontext PROC BOOST_CONTEXT_EXPORT
+ ; prepare stack
+ lea esp, [esp-02ch]
+
+IFNDEF BOOST_USE_TSX
+ ; save MMX control- and status-word
+ stmxcsr [esp]
+ ; save x87 control-word
+ fnstcw [esp+04h]
+ENDIF
+
+ assume fs:nothing
+ ; load NT_TIB into ECX
+ mov edx, fs:[018h]
+ assume fs:error
+ ; load fiber local storage
+ mov eax, [edx+010h]
+ mov [esp+08h], eax
+ ; load current deallocation stack
+ mov eax, [edx+0e0ch]
+ mov [esp+0ch], eax
+ ; load current stack limit
+ mov eax, [edx+08h]
+ mov [esp+010h], eax
+ ; load current stack base
+ mov eax, [edx+04h]
+ mov [esp+014h], eax
+ ; load current SEH exception list
+ mov eax, [edx]
+ mov [esp+018h], eax
+
+ mov [esp+01ch], edi ; save EDI
+ mov [esp+020h], esi ; save ESI
+ mov [esp+024h], ebx ; save EBX
+ mov [esp+028h], ebp ; save EBP
+
+ ; store ESP (pointing to context-data) in EAX
+ mov eax, esp
+
+ ; firstarg of jump_fcontext() == fcontext to jump to
+ mov ecx, [esp+030h]
+
+ ; restore ESP (pointing to context-data) from ECX
+ mov esp, ecx
+
+IFNDEF BOOST_USE_TSX
+ ; restore MMX control- and status-word
+ ldmxcsr [esp]
+ ; restore x87 control-word
+ fldcw [esp+04h]
+ENDIF
+
+ assume fs:nothing
+ ; load NT_TIB into EDX
+ mov edx, fs:[018h]
+ assume fs:error
+ ; restore fiber local storage
+ mov ecx, [esp+08h]
+ mov [edx+010h], ecx
+ ; restore current deallocation stack
+ mov ecx, [esp+0ch]
+ mov [edx+0e0ch], ecx
+ ; restore current stack limit
+ mov ecx, [esp+010h]
+ mov [edx+08h], ecx
+ ; restore current stack base
+ mov ecx, [esp+014h]
+ mov [edx+04h], ecx
+ ; restore current SEH exception list
+ mov ecx, [esp+018h]
+ mov [edx], ecx
+
+ mov ecx, [esp+02ch] ; restore EIP
+
+ mov edi, [esp+01ch] ; restore EDI
+ mov esi, [esp+020h] ; restore ESI
+ mov ebx, [esp+024h] ; restore EBX
+ mov ebp, [esp+028h] ; restore EBP
+
+ ; prepare stack
+ lea esp, [esp+030h]
+
+ ; return transfer_t
+ ; FCTX == EAX, DATA == EDX
+ mov edx, [eax+034h]
+
+ ; jump to context
+ jmp ecx
+jump_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_i386_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_i386_sysv_elf_gas.S
new file mode 100644
index 0000000000..c56ef14202
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_i386_sysv_elf_gas.S
@@ -0,0 +1,92 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/****************************************************************************************
+ * *
+ * ---------------------------------------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+ * ---------------------------------------------------------------------------------- *
+ * | fc_mxcsr|fc_x87_cw| guard | EDI | ESI | EBX | EBP | EIP | *
+ * ---------------------------------------------------------------------------------- *
+ * ---------------------------------------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x20 | 0x24 | 0x28 | | *
+ * ---------------------------------------------------------------------------------- *
+ * | hidden | to | data | | *
+ * ---------------------------------------------------------------------------------- *
+ * *
+ ****************************************************************************************/
+
+.text
+.globl jump_fcontext
+.align 2
+.type jump_fcontext,@function
+jump_fcontext:
+ leal -0x1c(%esp), %esp /* prepare stack */
+
+#if !defined(BOOST_USE_TSX)
+ stmxcsr (%esp) /* save MMX control- and status-word */
+ fnstcw 0x4(%esp) /* save x87 control-word */
+#endif
+
+#if defined(TLS_STACK_PROTECTOR)
+ movl %gs:0x14, %ecx /* read stack guard from TLS record */
+ movl %ecx, 0x8(%esp) /* save stack guard */
+#endif
+
+ movl %edi, 0xc(%esp) /* save EDI */
+ movl %esi, 0x10(%esp) /* save ESI */
+ movl %ebx, 0x14(%esp) /* save EBX */
+ movl %ebp, 0x18(%esp) /* save EBP */
+
+ /* store ESP (pointing to context-data) in ECX */
+ movl %esp, %ecx
+
+ /* first arg of jump_fcontext() == fcontext to jump to */
+ movl 0x24(%esp), %eax
+
+ /* second arg of jump_fcontext() == data to be transferred */
+ movl 0x28(%esp), %edx
+
+ /* restore ESP (pointing to context-data) from EAX */
+ movl %eax, %esp
+
+ /* address of returned transport_t */
+ movl 0x20(%esp), %eax
+ /* return parent fcontext_t */
+ movl %ecx, (%eax)
+ /* return data */
+ movl %edx, 0x4(%eax)
+
+ movl 0x1c(%esp), %ecx /* restore EIP */
+
+#if !defined(BOOST_USE_TSX)
+ ldmxcsr (%esp) /* restore MMX control- and status-word */
+ fldcw 0x4(%esp) /* restore x87 control-word */
+#endif
+
+#if defined(TLS_STACK_PROTECTOR)
+ movl 0x8(%esp), %edx /* load stack guard */
+ movl %edx, %gs:0x14 /* restore stack guard to TLS record */
+#endif
+
+ movl 0xc(%esp), %edi /* restore EDI */
+ movl 0x10(%esp), %esi /* restore ESI */
+ movl 0x14(%esp), %ebx /* restore EBX */
+ movl 0x18(%esp), %ebp /* restore EBP */
+
+ leal 0x24(%esp), %esp /* prepare stack */
+
+ /* jump to context */
+ jmp *%ecx
+.size jump_fcontext,.-jump_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_i386_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_i386_sysv_macho_gas.S
new file mode 100644
index 0000000000..bfa3e23ed1
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_i386_sysv_macho_gas.S
@@ -0,0 +1,74 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/****************************************************************************************
+ * *
+ * ---------------------------------------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+ * ---------------------------------------------------------------------------------- *
+ * | fc_mxcsr|fc_x87_cw| EDI | ESI | EBX | EBP | EIP | to | *
+ * ---------------------------------------------------------------------------------- *
+ * ---------------------------------------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x20 | | *
+ * ---------------------------------------------------------------------------------- *
+ * | data | | *
+ * ---------------------------------------------------------------------------------- *
+ * *
+ ****************************************************************************************/
+
+.text
+.globl _jump_fcontext
+.align 2
+_jump_fcontext:
+ leal -0x18(%esp), %esp /* prepare stack */
+
+#if !defined(BOOST_USE_TSX)
+ stmxcsr (%esp) /* save MMX control- and status-word */
+ fnstcw 0x4(%esp) /* save x87 control-word */
+#endif
+
+ movl %edi, 0x8(%esp) /* save EDI */
+ movl %esi, 0xc(%esp) /* save ESI */
+ movl %ebx, 0x10(%esp) /* save EBX */
+ movl %ebp, 0x14(%esp) /* save EBP */
+
+ /* store ESP (pointing to context-data) in ECX */
+ movl %esp, %ecx
+
+ /* first arg of jump_fcontext() == fcontext to jump to */
+ movl 0x1c(%esp), %eax
+
+ /* second arg of jump_fcontext() == data to be transferred */
+ movl 0x20(%esp), %edx
+
+ /* restore ESP (pointing to context-data) from EAX */
+ movl %eax, %esp
+
+ /* return parent fcontext_t */
+ movl %ecx, %eax
+ /* returned data is stored in EDX */
+
+ movl 0x18(%esp), %ecx /* restore EIP */
+
+#if !defined(BOOST_USE_TSX)
+ ldmxcsr (%esp) /* restore MMX control- and status-word */
+ fldcw 0x4(%esp) /* restore x87 control-word */
+#endif
+
+ movl 0x8(%esp), %edi /* restore EDI */
+ movl 0xc(%esp), %esi /* restore ESI */
+ movl 0x10(%esp), %ebx /* restore EBX */
+ movl 0x14(%esp), %ebp /* restore EBP */
+
+ leal 0x1c(%esp), %esp /* prepare stack */
+
+ /* jump to context */
+ jmp *%ecx
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S
new file mode 100644
index 0000000000..959ddac16f
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S
@@ -0,0 +1,16 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__i386__)
+ #include "jump_i386_sysv_macho_gas.S"
+#elif defined(__x86_64__)
+ #include "jump_x86_64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_mips32_o32_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_mips32_o32_elf_gas.S
new file mode 100644
index 0000000000..a6671d323b
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_mips32_o32_elf_gas.S
@@ -0,0 +1,118 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F20 | F22 | F24 | F26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F28 | F30 | S0 | S1 | S2 | S3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | ABI ARGS | GP | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ * *****************************************************/
+
+.text
+.globl jump_fcontext
+.align 2
+.type jump_fcontext,@function
+.ent jump_fcontext
+jump_fcontext:
+ # reserve space on stack
+ addiu $sp, $sp, -96
+
+ sw $s0, 48($sp) # save S0
+ sw $s1, 52($sp) # save S1
+ sw $s2, 56($sp) # save S2
+ sw $s3, 60($sp) # save S3
+ sw $s4, 64($sp) # save S4
+ sw $s5, 68($sp) # save S5
+ sw $s6, 72($sp) # save S6
+ sw $s7, 76($sp) # save S7
+ sw $fp, 80($sp) # save FP
+ sw $a0, 84($sp) # save hidden, address of returned transfer_t
+ sw $ra, 88($sp) # save RA
+ sw $ra, 92($sp) # save RA as PC
+
+#if defined(__mips_hard_float)
+ s.d $f20, ($sp) # save F20
+ s.d $f22, 8($sp) # save F22
+ s.d $f24, 16($sp) # save F24
+ s.d $f26, 24($sp) # save F26
+ s.d $f28, 32($sp) # save F28
+ s.d $f30, 40($sp) # save F30
+#endif
+
+ # store SP (pointing to context-data) in A0
+ move $a0, $sp
+
+ # restore SP (pointing to context-data) from A1
+ move $sp, $a1
+
+#if defined(__mips_hard_float)
+ l.d $f20, ($sp) # restore F20
+ l.d $f22, 8($sp) # restore F22
+ l.d $f24, 16($sp) # restore F24
+ l.d $f26, 24($sp) # restore F26
+ l.d $f28, 32($sp) # restore F28
+ l.d $f30, 40($sp) # restore F30
+#endif
+
+ lw $s0, 48($sp) # restore S0
+ lw $s1, 52($sp) # restore S1
+ lw $s2, 56($sp) # restore S2
+ lw $s3, 60($sp) # restore S3
+ lw $s4, 64($sp) # restore S4
+ lw $s5, 68($sp) # restore S5
+ lw $s6, 72($sp) # restore S6
+ lw $s7, 76($sp) # restore S7
+ lw $fp, 80($sp) # restore FP
+ lw $v0, 84($sp) # restore hidden, address of returned transfer_t
+ lw $ra, 88($sp) # restore RA
+
+ # load PC
+ lw $t9, 92($sp)
+
+ # adjust stack
+ addiu $sp, $sp, 96
+
+ # return transfer_t from jump
+ sw $a0, ($v0) # fctx of transfer_t
+ sw $a2, 4($v0) # data of transfer_t
+ # pass transfer_t as first arg in context function
+ # A0 == fctx, A1 == data
+ move $a1, $a2
+
+ # jump to context
+ jr $t9
+.end jump_fcontext
+.size jump_fcontext, .-jump_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S
new file mode 100644
index 0000000000..f175e31233
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S
@@ -0,0 +1,16 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__ppc__)
+ #include "jump_ppc32_sysv_macho_gas.S"
+#elif defined(__ppc64__)
+ #include "jump_ppc64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_elf_gas.S
new file mode 100644
index 0000000000..5ade6b1ea7
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_elf_gas.S
@@ -0,0 +1,206 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl jump_fcontext
+.align 2
+.type jump_fcontext,@function
+jump_fcontext:
+ # reserve space on stack
+ subi %r1, %r1, 244
+
+ stfd %f14, 0(%r1) # save F14
+ stfd %f15, 8(%r1) # save F15
+ stfd %f16, 16(%r1) # save F16
+ stfd %f17, 24(%r1) # save F17
+ stfd %f18, 32(%r1) # save F18
+ stfd %f19, 40(%r1) # save F19
+ stfd %f20, 48(%r1) # save F20
+ stfd %f21, 56(%r1) # save F21
+ stfd %f22, 64(%r1) # save F22
+ stfd %f23, 72(%r1) # save F23
+ stfd %f24, 80(%r1) # save F24
+ stfd %f25, 88(%r1) # save F25
+ stfd %f26, 96(%r1) # save F26
+ stfd %f27, 104(%r1) # save F27
+ stfd %f28, 112(%r1) # save F28
+ stfd %f29, 120(%r1) # save F29
+ stfd %f30, 128(%r1) # save F30
+ stfd %f31, 136(%r1) # save F31
+ mffs %f0 # load FPSCR
+ stfd %f0, 144(%r1) # save FPSCR
+
+ stw %r13, 152(%r1) # save R13
+ stw %r14, 156(%r1) # save R14
+ stw %r15, 160(%r1) # save R15
+ stw %r16, 164(%r1) # save R16
+ stw %r17, 168(%r1) # save R17
+ stw %r18, 172(%r1) # save R18
+ stw %r19, 176(%r1) # save R19
+ stw %r20, 180(%r1) # save R20
+ stw %r21, 184(%r1) # save R21
+ stw %r22, 188(%r1) # save R22
+ stw %r23, 192(%r1) # save R23
+ stw %r24, 196(%r1) # save R24
+ stw %r25, 200(%r1) # save R25
+ stw %r26, 204(%r1) # save R26
+ stw %r27, 208(%r1) # save R27
+ stw %r28, 212(%r1) # save R28
+ stw %r29, 216(%r1) # save R29
+ stw %r30, 220(%r1) # save R30
+ stw %r31, 224(%r1) # save R31
+ stw %r3, 228(%r1) # save hidden
+
+ # save CR
+ mfcr %r0
+ stw %r0, 232(%r1)
+ # save LR
+ mflr %r0
+ stw %r0, 236(%r1)
+ # save LR as PC
+ stw %r0, 240(%r1)
+
+ # store RSP (pointing to context-data) in R6
+ mr %r6, %r1
+
+ # restore RSP (pointing to context-data) from R4
+ mr %r1, %r4
+
+ lfd %f14, 0(%r1) # restore F14
+ lfd %f15, 8(%r1) # restore F15
+ lfd %f16, 16(%r1) # restore F16
+ lfd %f17, 24(%r1) # restore F17
+ lfd %f18, 32(%r1) # restore F18
+ lfd %f19, 40(%r1) # restore F19
+ lfd %f20, 48(%r1) # restore F20
+ lfd %f21, 56(%r1) # restore F21
+ lfd %f22, 64(%r1) # restore F22
+ lfd %f23, 72(%r1) # restore F23
+ lfd %f24, 80(%r1) # restore F24
+ lfd %f25, 88(%r1) # restore F25
+ lfd %f26, 96(%r1) # restore F26
+ lfd %f27, 104(%r1) # restore F27
+ lfd %f28, 112(%r1) # restore F28
+ lfd %f29, 120(%r1) # restore F29
+ lfd %f30, 128(%r1) # restore F30
+ lfd %f31, 136(%r1) # restore F31
+ lfd %f0, 144(%r1) # load FPSCR
+ mtfsf 0xff, %f0 # restore FPSCR
+
+ lwz %r13, 152(%r1) # restore R13
+ lwz %r14, 156(%r1) # restore R14
+ lwz %r15, 160(%r1) # restore R15
+ lwz %r16, 164(%r1) # restore R16
+ lwz %r17, 168(%r1) # restore R17
+ lwz %r18, 172(%r1) # restore R18
+ lwz %r19, 176(%r1) # restore R19
+ lwz %r20, 180(%r1) # restore R20
+ lwz %r21, 184(%r1) # restore R21
+ lwz %r22, 188(%r1) # restore R22
+ lwz %r23, 192(%r1) # restore R23
+ lwz %r24, 196(%r1) # restore R24
+ lwz %r25, 200(%r1) # restore R25
+ lwz %r26, 204(%r1) # restore R26
+ lwz %r27, 208(%r1) # restore R27
+ lwz %r28, 212(%r1) # restore R28
+ lwz %r29, 216(%r1) # restore R29
+ lwz %r30, 220(%r1) # restore R30
+ lwz %r31, 224(%r1) # restore R31
+ lwz %r3, 228(%r1) # restore hidden
+
+ # restore CR
+ lwz %r0, 232(%r1)
+ mtcr %r0
+ # restore LR
+ lwz %r0, 236(%r1)
+ mtlr %r0
+ # load PC
+ lwz %r0, 240(%r1)
+ # restore CTR
+ mtctr %r0
+
+ # adjust stack
+ addi %r1, %r1, 244
+
+ # return transfer_t
+ stw %r6, 0(%r3)
+ stw %r5, 4(%r3)
+
+ # jump to context
+ bctr
+.size jump_fcontext, .-jump_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_macho_gas.S
new file mode 100644
index 0000000000..c555237afa
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_macho_gas.S
@@ -0,0 +1,201 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl _jump_fcontext
+.align 2
+_jump_fcontext:
+ ; reserve space on stack
+ subi r1, r1, 244
+
+ stfd f14, 0(r1) # save F14
+ stfd f15, 8(r1) # save F15
+ stfd f16, 16(r1) # save F16
+ stfd f17, 24(r1) # save F17
+ stfd f18, 32(r1) # save F18
+ stfd f19, 40(r1) # save F19
+ stfd f20, 48(r1) # save F20
+ stfd f21, 56(r1) # save F21
+ stfd f22, 64(r1) # save F22
+ stfd f23, 72(r1) # save F23
+ stfd f24, 80(r1) # save F24
+ stfd f25, 88(r1) # save F25
+ stfd f26, 96(r1) # save F26
+ stfd f27, 104(r1) # save F27
+ stfd f28, 112(r1) # save F28
+ stfd f29, 120(r1) # save F29
+ stfd f30, 128(r1) # save F30
+ stfd f31, 136(r1) # save F31
+ mffs f0 # load FPSCR
+ stfd f0, 144(r1) # save FPSCR
+
+ stw r13, 152(r1) # save R13
+ stw r14, 156(r1) # save R14
+ stw r15, 160(r1) # save R15
+ stw r16, 164(r1) # save R16
+ stw r17, 168(r1) # save R17
+ stw r18, 172(r1) # save R18
+ stw r19, 176(r1) # save R19
+ stw r20, 180(r1) # save R20
+ stw r21, 184(r1) # save R21
+ stw r22, 188(r1) # save R22
+ stw r23, 192(r1) # save R23
+ stw r24, 196(r1) # save R24
+ stw r25, 200(r1) # save R25
+ stw r26, 204(r1) # save R26
+ stw r27, 208(r1) # save R27
+ stw r28, 212(r1) # save R28
+ stw r29, 216(r1) # save R29
+ stw r30, 220(r1) # save R30
+ stw r31, 224(r1) # save R31
+ stw r3, 228(r1) # save hidden
+
+ # save CR
+ mfcr r0
+ stw r0, 232(r1)
+ # save LR
+ mflr r0
+ stw r0, 236(r1)
+ # save LR as PC
+ stw r0, 240(r1)
+
+ # store RSP (pointing to context-data) in R6
+ mr r6, r1
+
+ # restore RSP (pointing to context-data) from R4
+ mr r1, r4
+
+ lfd f14, 0(r1) # restore F14
+ lfd f15, 8(r1) # restore F15
+ lfd f16, 16(r1) # restore F16
+ lfd f17, 24(r1) # restore F17
+ lfd f18, 32(r1) # restore F18
+ lfd f19, 40(r1) # restore F19
+ lfd f20, 48(r1) # restore F20
+ lfd f21, 56(r1) # restore F21
+ lfd f22, 64(r1) # restore F22
+ lfd f23, 72(r1) # restore F23
+ lfd f24, 80(r1) # restore F24
+ lfd f25, 88(r1) # restore F25
+ lfd f26, 96(r1) # restore F26
+ lfd f27, 104(r1) # restore F27
+ lfd f28, 112(r1) # restore F28
+ lfd f29, 120(r1) # restore F29
+ lfd f30, 128(r1) # restore F30
+ lfd f31, 136(r1) # restore F31
+ lfd f0, 144(r1) # load FPSCR
+ mtfsf 0xff, f0 # restore FPSCR
+
+ lwz r13, 152(r1) # restore R13
+ lwz r14, 156(r1) # restore R14
+ lwz r15, 160(r1) # restore R15
+ lwz r16, 164(r1) # restore R16
+ lwz r17, 168(r1) # restore R17
+ lwz r18, 172(r1) # restore R18
+ lwz r19, 176(r1) # restore R19
+ lwz r20, 180(r1) # restore R20
+ lwz r21, 184(r1) # restore R21
+ lwz r22, 188(r1) # restore R22
+ lwz r23, 192(r1) # restore R23
+ lwz r24, 196(r1) # restore R24
+ lwz r25, 200(r1) # restore R25
+ lwz r26, 204(r1) # restore R26
+ lwz r27, 208(r1) # restore R27
+ lwz r28, 212(r1) # restore R28
+ lwz r29, 216(r1) # restore R29
+ lwz r30, 220(r1) # restore R30
+ lwz r31, 224(r1) # restore R31
+ lwz r3, 228(r1) # restore hidden
+
+ # restore CR
+ lwz r0, 232(r1)
+ mtcr r0
+ # restore LR
+ lwz r0, 236(r1)
+ mtlr r0
+ # load PC
+ lwz r0, 240(r1)
+ # restore CTR
+ mtctr r0
+
+ # adjust stack
+ addi r1, r1, 244
+
+ # return transfer_t
+ stw r6, 0(r3)
+ stw r5, 4(r3)
+
+ # jump to context
+ bctr
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_xcoff_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_xcoff_gas.S
new file mode 100644
index 0000000000..5a967726ad
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_ppc32_sysv_xcoff_gas.S
@@ -0,0 +1,203 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+.globl .jump_fcontext
+.globl jump_fcontext[DS]
+.align 2
+.csect jump_fcontext[DS]
+jump_fcontext:
+ .long .jump_fcontext
+.jump_fcontext:
+ # reserve space on stack
+ subi r1, r1, 244
+
+ stfd f14, 0(r1) # save F14
+ stfd f15, 8(r1) # save F15
+ stfd f16, 16(r1) # save F16
+ stfd f17, 24(r1) # save F17
+ stfd f18, 32(r1) # save F18
+ stfd f19, 40(r1) # save F19
+ stfd f20, 48(r1) # save F20
+ stfd f21, 56(r1) # save F21
+ stfd f22, 64(r1) # save F22
+ stfd f23, 72(r1) # save F23
+ stfd f24, 80(r1) # save F24
+ stfd f25, 88(r1) # save F25
+ stfd f26, 96(r1) # save F26
+ stfd f27, 104(r1) # save F27
+ stfd f28, 112(r1) # save F28
+ stfd f29, 120(r1) # save F29
+ stfd f30, 128(r1) # save F30
+ stfd f31, 136(r1) # save F31
+ mffs f0 # load FPSCR
+ stfd f0, 144(r1) # save FPSCR
+
+ stw r13, 152(r1) # save R13
+ stw r14, 156(r1) # save R14
+ stw r15, 160(r1) # save R15
+ stw r16, 164(r1) # save R16
+ stw r17, 168(r1) # save R17
+ stw r18, 172(r1) # save R18
+ stw r19, 176(r1) # save R19
+ stw r20, 180(r1) # save R20
+ stw r21, 184(r1) # save R21
+ stw r22, 188(r1) # save R22
+ stw r23, 192(r1) # save R23
+ stw r24, 196(r1) # save R24
+ stw r25, 200(r1) # save R25
+ stw r26, 204(r1) # save R26
+ stw r27, 208(r1) # save R27
+ stw r28, 212(r1) # save R28
+ stw r29, 216(r1) # save R29
+ stw r30, 220(r1) # save R30
+ stw r31, 224(r1) # save R31
+ stw r3, 228(r1) # save hidden
+
+ # save CR
+ mfcr r0
+ stw r0, 232(r1)
+ # save LR
+ mflr r0
+ stw r0, 236(r1)
+ # save LR as PC
+ stw r0, 240(r1)
+
+ # store RSP (pointing to context-data) in R6
+ mr r6, r1
+
+ # restore RSP (pointing to context-data) from R4
+ mr r1, r4
+
+ lfd f14, 0(r1) # restore F14
+ lfd f15, 8(r1) # restore F15
+ lfd f16, 16(r1) # restore F16
+ lfd f17, 24(r1) # restore F17
+ lfd f18, 32(r1) # restore F18
+ lfd f19, 40(r1) # restore F19
+ lfd f20, 48(r1) # restore F20
+ lfd f21, 56(r1) # restore F21
+ lfd f22, 64(r1) # restore F22
+ lfd f23, 72(r1) # restore F23
+ lfd f24, 80(r1) # restore F24
+ lfd f25, 88(r1) # restore F25
+ lfd f26, 96(r1) # restore F26
+ lfd f27, 104(r1) # restore F27
+ lfd f28, 112(r1) # restore F28
+ lfd f29, 120(r1) # restore F29
+ lfd f30, 128(r1) # restore F30
+ lfd f31, 136(r1) # restore F31
+ lfd f0, 144(r1) # load FPSCR
+ mtfsf 0xff, f0 # restore FPSCR
+
+ lwz r13, 152(r1) # restore R13
+ lwz r14, 156(r1) # restore R14
+ lwz r15, 160(r1) # restore R15
+ lwz r16, 164(r1) # restore R16
+ lwz r17, 168(r1) # restore R17
+ lwz r18, 172(r1) # restore R18
+ lwz r19, 176(r1) # restore R19
+ lwz r20, 180(r1) # restore R20
+ lwz r21, 184(r1) # restore R21
+ lwz r22, 188(r1) # restore R22
+ lwz r23, 192(r1) # restore R23
+ lwz r24, 196(r1) # restore R24
+ lwz r25, 200(r1) # restore R25
+ lwz r26, 204(r1) # restore R26
+ lwz r27, 208(r1) # restore R27
+ lwz r28, 212(r1) # restore R28
+ lwz r29, 216(r1) # restore R29
+ lwz r30, 220(r1) # restore R30
+ lwz r31, 224(r1) # restore R31
+ lwz r3, 228(r1) # restore hidden
+
+ # restore CR
+ lwz r0, 232(r1)
+ mtcr r0
+ # restore LR
+ lwz r0, 236(r1)
+ mtlr r0
+ # load PC
+ lwz r0, 240(r1)
+ # restore CTR
+ mtctr r0
+
+ # adjust stack
+ addi r1, r1, 244
+
+ # return transfer_t
+ stw r6, 0(r3)
+ stw r5, 4(r3)
+
+ # jump to context
+ bctr
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_elf_gas.S
new file mode 100644
index 0000000000..a27e606e6b
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_elf_gas.S
@@ -0,0 +1,220 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | TOC | R14 | R15 | R16 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | R17 | R18 | R19 | R20 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | R21 | R22 | R23 | R24 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | R25 | R26 | R27 | R28 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | R29 | R30 | R31 | hidden | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | CR | LR | PC | back-chain| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | cr saved | lr saved | compiler | linker | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | TOC saved | FCTX | DATA | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.globl jump_fcontext
+#if _CALL_ELF == 2
+ .text
+ .align 2
+jump_fcontext:
+ addis %r2, %r12, .TOC.-jump_fcontext@ha
+ addi %r2, %r2, .TOC.-jump_fcontext@l
+ .localentry jump_fcontext, . - jump_fcontext
+#else
+ .section ".opd","aw"
+ .align 3
+jump_fcontext:
+# ifdef _CALL_LINUX
+ .quad .L.jump_fcontext,.TOC.@tocbase,0
+ .type jump_fcontext,@function
+ .text
+ .align 2
+.L.jump_fcontext:
+# else
+ .hidden .jump_fcontext
+ .globl .jump_fcontext
+ .quad .jump_fcontext,.TOC.@tocbase,0
+ .size jump_fcontext,24
+ .type .jump_fcontext,@function
+ .text
+ .align 2
+.jump_fcontext:
+# endif
+#endif
+ # reserve space on stack
+ subi %r1, %r1, 184
+
+#if _CALL_ELF != 2
+ std %r2, 0(%r1) # save TOC
+#endif
+ std %r14, 8(%r1) # save R14
+ std %r15, 16(%r1) # save R15
+ std %r16, 24(%r1) # save R16
+ std %r17, 32(%r1) # save R17
+ std %r18, 40(%r1) # save R18
+ std %r19, 48(%r1) # save R19
+ std %r20, 56(%r1) # save R20
+ std %r21, 64(%r1) # save R21
+ std %r22, 72(%r1) # save R22
+ std %r23, 80(%r1) # save R23
+ std %r24, 88(%r1) # save R24
+ std %r25, 96(%r1) # save R25
+ std %r26, 104(%r1) # save R26
+ std %r27, 112(%r1) # save R27
+ std %r28, 120(%r1) # save R28
+ std %r29, 128(%r1) # save R29
+ std %r30, 136(%r1) # save R30
+ std %r31, 144(%r1) # save R31
+#if _CALL_ELF != 2
+ std %r3, 152(%r1) # save hidden
+#endif
+
+ # save CR
+ mfcr %r0
+ std %r0, 160(%r1)
+ # save LR
+ mflr %r0
+ std %r0, 168(%r1)
+ # save LR as PC
+ std %r0, 176(%r1)
+
+ # store RSP (pointing to context-data) in R6
+ mr %r6, %r1
+
+#if _CALL_ELF == 2
+ # restore RSP (pointing to context-data) from R3
+ mr %r1, %r3
+#else
+ # restore RSP (pointing to context-data) from R4
+ mr %r1, %r4
+
+ ld %r2, 0(%r1) # restore TOC
+#endif
+ ld %r14, 8(%r1) # restore R14
+ ld %r15, 16(%r1) # restore R15
+ ld %r16, 24(%r1) # restore R16
+ ld %r17, 32(%r1) # restore R17
+ ld %r18, 40(%r1) # restore R18
+ ld %r19, 48(%r1) # restore R19
+ ld %r20, 56(%r1) # restore R20
+ ld %r21, 64(%r1) # restore R21
+ ld %r22, 72(%r1) # restore R22
+ ld %r23, 80(%r1) # restore R23
+ ld %r24, 88(%r1) # restore R24
+ ld %r25, 96(%r1) # restore R25
+ ld %r26, 104(%r1) # restore R26
+ ld %r27, 112(%r1) # restore R27
+ ld %r28, 120(%r1) # restore R28
+ ld %r29, 128(%r1) # restore R29
+ ld %r30, 136(%r1) # restore R30
+ ld %r31, 144(%r1) # restore R31
+#if _CALL_ELF != 2
+ ld %r3, 152(%r1) # restore hidden
+#endif
+
+ # restore CR
+ ld %r0, 160(%r1)
+ mtcr %r0
+ # restore LR
+ ld %r0, 168(%r1)
+ mtlr %r0
+
+ # load PC
+ ld %r12, 176(%r1)
+ # restore CTR
+ mtctr %r12
+
+ # adjust stack
+ addi %r1, %r1, 184
+
+#if _CALL_ELF == 2
+ # copy transfer_t into transfer_fn arg registers
+ mr %r3, %r6
+ # arg pointer already in %r4
+
+ # jump to context
+ bctr
+ .size jump_fcontext, .-jump_fcontext
+#else
+ # zero in r3 indicates first jump to context-function
+ cmpdi %r3, 0
+ beq use_entry_arg
+
+ # return transfer_t
+ std %r6, 0(%r3)
+ std %r5, 8(%r3)
+
+ # jump to context
+ bctr
+
+use_entry_arg:
+ # copy transfer_t into transfer_fn arg registers
+ mr %r3, %r6
+ mr %r4, %r5
+
+ # jump to context
+ bctr
+# ifdef _CALL_LINUX
+ .size .jump_fcontext, .-.L.jump_fcontext
+# else
+ .size .jump_fcontext, .-.jump_fcontext
+# endif
+#endif
+
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_macho_gas.S
new file mode 100644
index 0000000000..74fcb2ab35
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_macho_gas.S
@@ -0,0 +1,164 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | TOC | R14 | R15 | R16 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | R17 | R18 | R19 | R20 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | R21 | R22 | R23 | R24 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | R25 | R26 | R27 | R28 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | R29 | R30 | R31 | hidden | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | CR | LR | PC | back-chain| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | cr saved | lr saved | compiler | linker | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | TOC saved | FCTX | DATA | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.align 2
+.globl _jump_fcontext
+
+_jump_fcontext:
+ ; reserve space on stack
+ subi r1, r1, 184
+
+ std r14, 8(r1) ; save R14
+ std r15, 16(r1) ; save R15
+ std r16, 24(r1) ; save R16
+ std r17, 32(r1) ; save R17
+ std r18, 40(r1) ; save R18
+ std r19, 48(r1) ; save R19
+ std r20, 56(r1) ; save R20
+ std r21, 64(r1) ; save R21
+ std r22, 72(r1) ; save R22
+ std r23, 80(r1) ; save R23
+ std r24, 88(r1) ; save R24
+ std r25, 96(r1) ; save R25
+ std r26, 104(r1) ; save R26
+ std r27, 112(r1) ; save R27
+ std r28, 120(r1) ; save R28
+ std r29, 128(r1) ; save R29
+ std r30, 136(r1) ; save R30
+ std r31, 144(r1) ; save R31
+ std r3, 152(r1) ; save hidden
+
+ ; save CR
+ mfcr r0
+ std r0, 160(r1)
+ ; save LR
+ mflr r0
+ std r0, 168(r1)
+ ; save LR as PC
+ std r0, 176(r1)
+
+ ; store RSP (pointing to context-data) in R6
+ mr r6, r1
+
+ ; restore RSP (pointing to context-data) from R4
+ mr r1, r4
+
+ ld r14, 8(r1) ; restore R14
+ ld r15, 16(r1) ; restore R15
+ ld r16, 24(r1) ; restore R16
+ ld r17, 32(r1) ; restore R17
+ ld r18, 40(r1) ; restore R18
+ ld r19, 48(r1) ; restore R19
+ ld r20, 56(r1) ; restore R20
+ ld r21, 64(r1) ; restore R21
+ ld r22, 72(r1) ; restore R22
+ ld r23, 80(r1) ; restore R23
+ ld r24, 88(r1) ; restore R24
+ ld r25, 96(r1) ; restore R25
+ ld r26, 104(r1) ; restore R26
+ ld r27, 112(r1) ; restore R27
+ ld r28, 120(r1) ; restore R28
+ ld r29, 128(r1) ; restore R29
+ ld r30, 136(r1) ; restore R30
+ ld r31, 144(r1) ; restore R31
+ ld r3, 152(r1) ; restore hidden
+
+ ; restore CR
+ ld r0, 160(r1)
+ mtcr r0
+ ; restore LR
+ ld r0, 168(r1)
+ mtlr r0
+
+ ; load PC
+ ld r12, 176(r1)
+ # restore CTR
+ mtctr r12
+
+ # adjust stack
+ addi r1, r1, 184
+
+ # zero in r3 indicates first jump to context-function
+ cmpdi r3, 0
+ beq use_entry_arg
+
+ # return transfer_t
+ std r6, 0(r3)
+ std r5, 8(r3)
+
+ # jump to context
+ bctr
+
+use_entry_arg:
+ # copy transfer_t into transfer_fn arg registers
+ mr r3, r6
+ mr r4, r5
+
+ # jump to context
+ bctr
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_xcoff_gas.S b/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_xcoff_gas.S
new file mode 100644
index 0000000000..013433f312
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_ppc64_sysv_xcoff_gas.S
@@ -0,0 +1,84 @@
+.align 2
+.globl .jump_fcontext
+.jump_fcontext:
+ # reserve space on stack
+ subi 1, 1, 184
+
+ std 13, 0(1) # save R13
+ std 14, 8(1) # save R14
+ std 15, 16(1) # save R15
+ std 16, 24(1) # save R16
+ std 17, 32(1) # save R17
+ std 18, 40(1) # save R18
+ std 19, 48(1) # save R19
+ std 20, 56(1) # save R20
+ std 21, 64(1) # save R21
+ std 22, 72(1) # save R22
+ std 23, 80(1) # save R23
+ std 24, 88(1) # save R24
+ std 25, 96(1) # save R25
+ std 26, 104(1) # save R26
+ std 27, 112(1) # save R27
+ std 29, 120(1) # save R28
+ std 29, 128(1) # save R29
+ std 30, 136(1) # save R30
+ std 31, 144(1) # save R31
+ std 3, 152(1) # save hidden
+
+ # save CR
+ mfcr 0
+ std 0, 160(1)
+ # save LR
+ mflr 0
+ std 0, 168(1)
+ # save LR as PC
+ std 0, 176(1)
+
+ # store RSP (pointing to context-data) in R6
+ mr 6, 1
+
+ # restore RSP (pointing to context-data) from R4
+ mr 1, 4
+
+ ld 13, 0(1) # restore R13
+ ld 14, 8(1) # restore R14
+ ld 15, 16(1) # restore R15
+ ld 16, 24(1) # restore R16
+ ld 17, 32(1) # restore R17
+ ld 18, 40(1) # restore R18
+ ld 19, 48(1) # restore R19
+ ld 20, 56(1) # restore R20
+ ld 21, 64(1) # restore R21
+ ld 22, 72(1) # restore R22
+ ld 23, 80(1) # restore R23
+ ld 24, 88(1) # restore R24
+ ld 25, 96(1) # restore R25
+ ld 26, 104(1) # restore R26
+ ld 27, 112(1) # restore R27
+ ld 28, 120(1) # restore R28
+ ld 29, 128(1) # restore R29
+ ld 30, 136(1) # restore R30
+ ld 31, 144(1) # restore R31
+ ld 3, 152(1) # restore hidden
+
+ # restore CR
+ ld 0, 160(1)
+ mtcr 0
+ # restore LR
+ ld 0, 168(1)
+ mtlr 0
+
+ # load PC
+ ld 0, 176(1)
+ # restore CTR
+ mtctr 0
+
+ # adjust stack
+ addi 1, 1, 184
+
+ # return transfer_t
+ std 6, 0(3)
+ std 5, 8(3)
+
+ # jump to context
+ bctr
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_gas.asm b/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_gas.asm
new file mode 100644
index 0000000000..ec4ecfe946
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_gas.asm
@@ -0,0 +1,209 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Copyright Thomas Sailer 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*************************************************************************************
+* ---------------------------------------------------------------------------------- *
+* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | *
+* ---------------------------------------------------------------------------------- *
+* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | *
+* ---------------------------------------------------------------------------------- *
+* | limit | base | R12 | R13 | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | *
+* ---------------------------------------------------------------------------------- *
+* | R14 | R15 | RDI | RSI | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | *
+* ---------------------------------------------------------------------------------- *
+* | RBX | RBP | hidden | RIP | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | *
+* ---------------------------------------------------------------------------------- *
+* | parameter area | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | *
+* ---------------------------------------------------------------------------------- *
+* | FCTX | DATA | | *
+* ---------------------------------------------------------------------------------- *
+**************************************************************************************/
+
+.file "jump_x86_64_ms_pe_gas.asm"
+.text
+.p2align 4,,15
+.globl jump_fcontext
+.def jump_fcontext; .scl 2; .type 32; .endef
+.seh_proc jump_fcontext
+jump_fcontext:
+.seh_endprologue
+
+ leaq -0x118(%rsp), %rsp /* prepare stack */
+
+#if !defined(BOOST_USE_TSX)
+ /* save XMM storage */
+ movaps %xmm6, 0x0(%rsp)
+ movaps %xmm7, 0x10(%rsp)
+ movaps %xmm8, 0x20(%rsp)
+ movaps %xmm9, 0x30(%rsp)
+ movaps %xmm10, 0x40(%rsp)
+ movaps %xmm11, 0x50(%rsp)
+ movaps %xmm12, 0x60(%rsp)
+ movaps %xmm13, 0x70(%rsp)
+ movaps %xmm14, 0x80(%rsp)
+ movaps %xmm15, 0x90(%rsp)
+ stmxcsr 0xa0(%rsp) /* save MMX control- and status-word */
+ fnstcw 0xa4(%rsp) /* save x87 control-word */
+#endif
+
+ /* load NT_TIB */
+ movq %gs:(0x30), %r10
+ /* save fiber local storage */
+ movq 0x20(%r10), %rax
+ movq %rax, 0xb0(%rsp)
+ /* save current deallocation stack */
+ movq 0x1478(%r10), %rax
+ movq %rax, 0xb8(%rsp)
+ /* save current stack limit */
+ movq 0x10(%r10), %rax
+ movq %rax, 0xc0(%rsp)
+ /* save current stack base */
+ movq 0x08(%r10), %rax
+ movq %rax, 0xc8(%rsp)
+
+ movq %r12, 0xd0(%rsp) /* save R12 */
+ movq %r13, 0xd8(%rsp) /* save R13 */
+ movq %r14, 0xe0(%rsp) /* save R14 */
+ movq %r15, 0xe8(%rsp) /* save R15 */
+ movq %rdi, 0xf0(%rsp) /* save RDI */
+ movq %rsi, 0xf8(%rsp) /* save RSI */
+ movq %rbx, 0x100(%rsp) /* save RBX */
+ movq %rbp, 0x108(%rsp) /* save RBP */
+
+ movq %rcx, 0x110(%rsp) /* save hidden address of transport_t */
+
+ /* preserve RSP (pointing to context-data) in R9 */
+ movq %rsp, %r9
+
+ /* restore RSP (pointing to context-data) from RDX */
+ movq %rdx, %rsp
+
+#if !defined(BOOST_USE_TSX)
+ /* restore XMM storage */
+ movaps 0x0(%rsp), %xmm6
+ movaps 0x10(%rsp), %xmm7
+ movaps 0x20(%rsp), %xmm8
+ movaps 0x30(%rsp), %xmm9
+ movaps 0x40(%rsp), %xmm10
+ movaps 0x50(%rsp), %xmm11
+ movaps 0x60(%rsp), %xmm12
+ movaps 0x70(%rsp), %xmm13
+ movaps 0x80(%rsp), %xmm14
+ movaps 0x90(%rsp), %xmm15
+ ldmxcsr 0xa0(%rsp) /* restore MMX control- and status-word */
+ fldcw 0xa4(%rsp) /* restore x87 control-word */
+#endif
+
+ /* load NT_TIB */
+ movq %gs:(0x30), %r10
+ /* restore fiber local storage */
+ movq 0xb0(%rsp), %rax
+ movq %rax, 0x20(%r10)
+ /* restore current deallocation stack */
+ movq 0xb8(%rsp), %rax
+ movq %rax, 0x1478(%r10)
+ /* restore current stack limit */
+ movq 0xc0(%rsp), %rax
+ movq %rax, 0x10(%r10)
+ /* restore current stack base */
+ movq 0xc8(%rsp), %rax
+ movq %rax, 0x08(%r10)
+
+ movq 0xd0(%rsp), %r12 /* restore R12 */
+ movq 0xd8(%rsp), %r13 /* restore R13 */
+ movq 0xe0(%rsp), %r14 /* restore R14 */
+ movq 0xe8(%rsp), %r15 /* restore R15 */
+ movq 0xf0(%rsp), %rdi /* restore RDI */
+ movq 0xf8(%rsp), %rsi /* restore RSI */
+ movq 0x100(%rsp), %rbx /* restore RBX */
+ movq 0x108(%rsp), %rbp /* restore RBP */
+
+ movq 0x110(%rsp), %rax /* restore hidden address of transport_t */
+
+ leaq 0x118(%rsp), %rsp /* prepare stack */
+
+ /* restore return-address */
+ popq %r10
+
+ /* transport_t returned in RAX */
+ /* return parent fcontext_t */
+ movq %r9, 0x0(%rax)
+ /* return data */
+ movq %r8, 0x8(%rax)
+
+ /* transport_t as 1.arg of context-function */
+ movq %rax, %rcx
+
+ /* indirect jump to context */
+ jmp *%r10
+.seh_endproc
+
+.section .drectve
+.ascii " -export:\"jump_fcontext\""
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_masm.asm b/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_masm.asm
new file mode 100644
index 0000000000..c8a28a558e
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_masm.asm
@@ -0,0 +1,205 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ----------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ----------------------------------------------------------------------------------
+; | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ----------------------------------------------------------------------------------
+; | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
+; ----------------------------------------------------------------------------------
+; | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
+; ----------------------------------------------------------------------------------
+; | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
+; ----------------------------------------------------------------------------------
+; | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
+; ----------------------------------------------------------------------------------
+; | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc |
+; ----------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
+; ----------------------------------------------------------------------------------
+; | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc |
+; ----------------------------------------------------------------------------------
+; | limit | base | R12 | R13 |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
+; ----------------------------------------------------------------------------------
+; | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc |
+; ----------------------------------------------------------------------------------
+; | R14 | R15 | RDI | RSI |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
+; ----------------------------------------------------------------------------------
+; | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c |
+; ----------------------------------------------------------------------------------
+; | RBX | RBP | hidden | RIP |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
+; ----------------------------------------------------------------------------------
+; | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c |
+; ----------------------------------------------------------------------------------
+; | parameter area |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
+; ----------------------------------------------------------------------------------
+; | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c |
+; ----------------------------------------------------------------------------------
+; | FCTX | DATA | |
+; ----------------------------------------------------------------------------------
+
+.code
+
+jump_fcontext PROC BOOST_CONTEXT_EXPORT FRAME
+ .endprolog
+
+ ; prepare stack
+ lea rsp, [rsp-0118h]
+
+IFNDEF BOOST_USE_TSX
+ ; save XMM storage
+ movaps [rsp], xmm6
+ movaps [rsp+010h], xmm7
+ movaps [rsp+020h], xmm8
+ movaps [rsp+030h], xmm9
+ movaps [rsp+040h], xmm10
+ movaps [rsp+050h], xmm11
+ movaps [rsp+060h], xmm12
+ movaps [rsp+070h], xmm13
+ movaps [rsp+080h], xmm14
+ movaps [rsp+090h], xmm15
+ ; save MMX control- and status-word
+ stmxcsr [rsp+0a0h]
+ ; save x87 control-word
+ fnstcw [rsp+0a4h]
+ENDIF
+
+ ; load NT_TIB
+ mov r10, gs:[030h]
+ ; save fiber local storage
+ mov rax, [r10+020h]
+ mov [rsp+0b0h], rax
+ ; save current deallocation stack
+ mov rax, [r10+01478h]
+ mov [rsp+0b8h], rax
+ ; save current stack limit
+ mov rax, [r10+010h]
+ mov [rsp+0c0h], rax
+ ; save current stack base
+ mov rax, [r10+08h]
+ mov [rsp+0c8h], rax
+
+ mov [rsp+0d0h], r12 ; save R12
+ mov [rsp+0d8h], r13 ; save R13
+ mov [rsp+0e0h], r14 ; save R14
+ mov [rsp+0e8h], r15 ; save R15
+ mov [rsp+0f0h], rdi ; save RDI
+ mov [rsp+0f8h], rsi ; save RSI
+ mov [rsp+0100h], rbx ; save RBX
+ mov [rsp+0108h], rbp ; save RBP
+
+ mov [rsp+0110h], rcx ; save hidden address of transport_t
+
+ ; preserve RSP (pointing to context-data) in R9
+ mov r9, rsp
+
+ ; restore RSP (pointing to context-data) from RDX
+ mov rsp, rdx
+
+IFNDEF BOOST_USE_TSX
+ ; restore XMM storage
+ movaps xmm6, [rsp]
+ movaps xmm7, [rsp+010h]
+ movaps xmm8, [rsp+020h]
+ movaps xmm9, [rsp+030h]
+ movaps xmm10, [rsp+040h]
+ movaps xmm11, [rsp+050h]
+ movaps xmm12, [rsp+060h]
+ movaps xmm13, [rsp+070h]
+ movaps xmm14, [rsp+080h]
+ movaps xmm15, [rsp+090h]
+ ; restore MMX control- and status-word
+ ldmxcsr [rsp+0a0h]
+ ; save x87 control-word
+ fldcw [rsp+0a4h]
+ENDIF
+
+ ; load NT_TIB
+ mov r10, gs:[030h]
+ ; restore fiber local storage
+ mov rax, [rsp+0b0h]
+ mov [r10+020h], rax
+ ; restore current deallocation stack
+ mov rax, [rsp+0b8h]
+ mov [r10+01478h], rax
+ ; restore current stack limit
+ mov rax, [rsp+0c0h]
+ mov [r10+010h], rax
+ ; restore current stack base
+ mov rax, [rsp+0c8h]
+ mov [r10+08h], rax
+
+ mov r12, [rsp+0d0h] ; restore R12
+ mov r13, [rsp+0d8h] ; restore R13
+ mov r14, [rsp+0e0h] ; restore R14
+ mov r15, [rsp+0e8h] ; restore R15
+ mov rdi, [rsp+0f0h] ; restore RDI
+ mov rsi, [rsp+0f8h] ; restore RSI
+ mov rbx, [rsp+0100h] ; restore RBX
+ mov rbp, [rsp+0108h] ; restore RBP
+
+ mov rax, [rsp+0110h] ; restore hidden address of transport_t
+
+ ; prepare stack
+ lea rsp, [rsp+0118h]
+
+ ; load return-address
+ pop r10
+
+ ; transport_t returned in RAX
+ ; return parent fcontext_t
+ mov [rax], r9
+ ; return data
+ mov [rax+08h], r8
+
+ ; transport_t as 1.arg of context-function
+ mov rcx, rax
+
+ ; indirect jump to context
+ jmp r10
+jump_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_masm.masm b/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_masm.masm
new file mode 100644
index 0000000000..c8a28a558e
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/jump_x86_64_ms_pe_masm.masm
@@ -0,0 +1,205 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ----------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ----------------------------------------------------------------------------------
+; | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ----------------------------------------------------------------------------------
+; | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
+; ----------------------------------------------------------------------------------
+; | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
+; ----------------------------------------------------------------------------------
+; | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
+; ----------------------------------------------------------------------------------
+; | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
+; ----------------------------------------------------------------------------------
+; | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc |
+; ----------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
+; ----------------------------------------------------------------------------------
+; | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc |
+; ----------------------------------------------------------------------------------
+; | limit | base | R12 | R13 |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
+; ----------------------------------------------------------------------------------
+; | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc |
+; ----------------------------------------------------------------------------------
+; | R14 | R15 | RDI | RSI |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
+; ----------------------------------------------------------------------------------
+; | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c |
+; ----------------------------------------------------------------------------------
+; | RBX | RBP | hidden | RIP |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
+; ----------------------------------------------------------------------------------
+; | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c |
+; ----------------------------------------------------------------------------------
+; | parameter area |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
+; ----------------------------------------------------------------------------------
+; | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c |
+; ----------------------------------------------------------------------------------
+; | FCTX | DATA | |
+; ----------------------------------------------------------------------------------
+
+.code
+
+jump_fcontext PROC BOOST_CONTEXT_EXPORT FRAME
+ .endprolog
+
+ ; prepare stack
+ lea rsp, [rsp-0118h]
+
+IFNDEF BOOST_USE_TSX
+ ; save XMM storage
+ movaps [rsp], xmm6
+ movaps [rsp+010h], xmm7
+ movaps [rsp+020h], xmm8
+ movaps [rsp+030h], xmm9
+ movaps [rsp+040h], xmm10
+ movaps [rsp+050h], xmm11
+ movaps [rsp+060h], xmm12
+ movaps [rsp+070h], xmm13
+ movaps [rsp+080h], xmm14
+ movaps [rsp+090h], xmm15
+ ; save MMX control- and status-word
+ stmxcsr [rsp+0a0h]
+ ; save x87 control-word
+ fnstcw [rsp+0a4h]
+ENDIF
+
+ ; load NT_TIB
+ mov r10, gs:[030h]
+ ; save fiber local storage
+ mov rax, [r10+020h]
+ mov [rsp+0b0h], rax
+ ; save current deallocation stack
+ mov rax, [r10+01478h]
+ mov [rsp+0b8h], rax
+ ; save current stack limit
+ mov rax, [r10+010h]
+ mov [rsp+0c0h], rax
+ ; save current stack base
+ mov rax, [r10+08h]
+ mov [rsp+0c8h], rax
+
+ mov [rsp+0d0h], r12 ; save R12
+ mov [rsp+0d8h], r13 ; save R13
+ mov [rsp+0e0h], r14 ; save R14
+ mov [rsp+0e8h], r15 ; save R15
+ mov [rsp+0f0h], rdi ; save RDI
+ mov [rsp+0f8h], rsi ; save RSI
+ mov [rsp+0100h], rbx ; save RBX
+ mov [rsp+0108h], rbp ; save RBP
+
+ mov [rsp+0110h], rcx ; save hidden address of transport_t
+
+ ; preserve RSP (pointing to context-data) in R9
+ mov r9, rsp
+
+ ; restore RSP (pointing to context-data) from RDX
+ mov rsp, rdx
+
+IFNDEF BOOST_USE_TSX
+ ; restore XMM storage
+ movaps xmm6, [rsp]
+ movaps xmm7, [rsp+010h]
+ movaps xmm8, [rsp+020h]
+ movaps xmm9, [rsp+030h]
+ movaps xmm10, [rsp+040h]
+ movaps xmm11, [rsp+050h]
+ movaps xmm12, [rsp+060h]
+ movaps xmm13, [rsp+070h]
+ movaps xmm14, [rsp+080h]
+ movaps xmm15, [rsp+090h]
+ ; restore MMX control- and status-word
+ ldmxcsr [rsp+0a0h]
+ ; save x87 control-word
+ fldcw [rsp+0a4h]
+ENDIF
+
+ ; load NT_TIB
+ mov r10, gs:[030h]
+ ; restore fiber local storage
+ mov rax, [rsp+0b0h]
+ mov [r10+020h], rax
+ ; restore current deallocation stack
+ mov rax, [rsp+0b8h]
+ mov [r10+01478h], rax
+ ; restore current stack limit
+ mov rax, [rsp+0c0h]
+ mov [r10+010h], rax
+ ; restore current stack base
+ mov rax, [rsp+0c8h]
+ mov [r10+08h], rax
+
+ mov r12, [rsp+0d0h] ; restore R12
+ mov r13, [rsp+0d8h] ; restore R13
+ mov r14, [rsp+0e0h] ; restore R14
+ mov r15, [rsp+0e8h] ; restore R15
+ mov rdi, [rsp+0f0h] ; restore RDI
+ mov rsi, [rsp+0f8h] ; restore RSI
+ mov rbx, [rsp+0100h] ; restore RBX
+ mov rbp, [rsp+0108h] ; restore RBP
+
+ mov rax, [rsp+0110h] ; restore hidden address of transport_t
+
+ ; prepare stack
+ lea rsp, [rsp+0118h]
+
+ ; load return-address
+ pop r10
+
+ ; transport_t returned in RAX
+ ; return parent fcontext_t
+ mov [rax], r9
+ ; return data
+ mov [rax+08h], r8
+
+ ; transport_t as 1.arg of context-function
+ mov rcx, rax
+
+ ; indirect jump to context
+ jmp r10
+jump_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_arm64_aapcs_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_arm64_aapcs_elf_gas.S
new file mode 100644
index 0000000000..c1fa84387d
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_arm64_aapcs_elf_gas.S
@@ -0,0 +1,84 @@
+/*
+ Copyright Edward Nevill + Oliver Kowalke 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | d8 | d9 | d10 | d11 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | d12 | d13 | d14 | d15 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * | x19 | x20 | x21 | x22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | x23 | x24 | x25 | x26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
+ * ------------------------------------------------- *
+ * | x27 | x28 | FP | LR | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | | | *
+ * ------------------------------------------------- *
+ * | 0xa0| 0xa4| 0xa8| 0xac| | | *
+ * ------------------------------------------------- *
+ * | PC | align | | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.align 2
+.global make_fcontext
+.type make_fcontext, %function
+make_fcontext:
+ # shift address in x0 (allocated stack) to lower 16 byte boundary
+ and x0, x0, ~0xF
+
+ # reserve space for context-data on context-stack
+ sub x0, x0, #0xb0
+
+ # third arg of make_fcontext() == address of context-function
+ # store address as a PC to jump in
+ str x2, [x0, #0xa0]
+
+ # save address of finish as return-address for context-function
+ # will be entered after context-function returns (LR register)
+ adr x1, finish
+ str x1, [x0, #0x98]
+
+ ret x30 // return pointer to context-data (x0)
+
+finish:
+ # exit code is zero
+ mov x0, #0
+ # exit application
+ bl _exit
+
+.size make_fcontext,.-make_fcontext
+# Mark that we don't need executable stack.
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_arm64_aapcs_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_arm64_aapcs_macho_gas.S
new file mode 100644
index 0000000000..a3716ff085
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_arm64_aapcs_macho_gas.S
@@ -0,0 +1,88 @@
+/*
+ Copyright Edward Nevill + Oliver Kowalke 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | d8 | d9 | d10 | d11 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | d12 | d13 | d14 | d15 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * | x19 | x20 | x21 | x22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | x23 | x24 | x25 | x26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
+ * ------------------------------------------------- *
+ * | x27 | x28 | FP | LR | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | | | *
+ * ------------------------------------------------- *
+ * | 0xa0| 0xa4| 0xa8| 0xac| | | *
+ * ------------------------------------------------- *
+ * | PC | align | | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl _make_fcontext
+.balign 16
+
+_make_fcontext:
+ ; shift address in x0 (allocated stack) to lower 16 byte boundary
+ and x0, x0, ~0xF
+
+ ; reserve space for context-data on context-stack
+ sub x0, x0, #0xb0
+
+ ; third arg of make_fcontext() == address of context-function
+ ; store address as a PC to jump in
+ str x2, [x0, #0xa0]
+
+ ; compute abs address of label finish
+ ; 0x0c = 3 instructions * size (4) before label 'finish'
+
+ ; TODO: Numeric offset since llvm still does not support labels in ADR. Fix:
+ ; http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20140407/212336.html
+ adr x1, 0x0c
+
+ ; save address of finish as return-address for context-function
+ ; will be entered after context-function returns (LR register)
+ str x1, [x0, #0x98]
+
+ ret lr ; return pointer to context-data (x0)
+
+finish:
+ ; exit code is zero
+ mov x0, #0
+ ; exit application
+ bl __exit
+
+
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_elf_gas.S
new file mode 100644
index 0000000000..98819a2a5f
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_elf_gas.S
@@ -0,0 +1,79 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | v8 | lr | pc | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl make_fcontext
+.align 2
+.type make_fcontext,%function
+make_fcontext:
+ @ shift address in A1 to lower 16 byte boundary
+ bic a1, a1, #15
+
+ @ reserve space for context-data on context-stack
+ sub a1, a1, #124
+
+ @ third arg of make_fcontext() == address of context-function
+ str a3, [a1, #104]
+
+ @ compute address of returned transfer_t
+ add a2, a1, #108
+ mov a3, a2
+ str a3, [a1, #64]
+
+ @ compute abs address of label finish
+ adr a2, finish
+ @ save address of finish as return-address for context-function
+ @ will be entered after context-function returns
+ str a2, [a1, #100]
+
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+#endif
+
+ bx lr @ return pointer to context-data
+
+finish:
+ @ exit code is zero
+ mov a1, #0
+ @ exit application
+ bl _exit@PLT
+.size make_fcontext,.-make_fcontext
+
+@ Mark that we don't need executable stack.
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_macho_gas.S
new file mode 100644
index 0000000000..c909ae9d43
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_macho_gas.S
@@ -0,0 +1,71 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | sjlj|hiddn| v1 | v2 | v3 | v4 | v5 | v6 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | v7 | v8 | lr | pc | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl _make_fcontext
+.align 2
+_make_fcontext:
+ @ shift address in A1 to lower 16 byte boundary
+ bic a1, a1, #15
+
+ @ reserve space for context-data on context-stack
+ sub a1, a1, #124
+
+ @ third arg of make_fcontext() == address of context-function
+ str a3, [a1, #108]
+
+ @ compute address of returned transfer_t
+ add a2, a1, #112
+ mov a3, a2
+ str a3, [a1, #68]
+
+ @ compute abs address of label finish
+ adr a2, finish
+ @ save address of finish as return-address for context-function
+ @ will be entered after context-function returns
+ str a2, [a1, #104]
+
+ bx lr @ return pointer to context-data
+
+finish:
+ @ exit code is zero
+ mov a1, #0
+ @ exit application
+ bl __exit
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_pe_armasm.asm b/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_pe_armasm.asm
new file mode 100644
index 0000000000..27cbfb0825
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_pe_armasm.asm
@@ -0,0 +1,77 @@
+;/*
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+;*/
+
+; *******************************************************
+; * *
+; * ------------------------------------------------- *
+; * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+; * ------------------------------------------------- *
+; * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+; * ------------------------------------------------- *
+; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
+; * ------------------------------------------------- *
+; * ------------------------------------------------- *
+; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+; * ------------------------------------------------- *
+; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+; * ------------------------------------------------- *
+; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
+; * ------------------------------------------------- *
+; * *
+; *******************************************************
+
+
+ AREA |.text|, CODE
+ ALIGN 4
+ EXPORT make_fcontext
+ IMPORT _exit
+
+make_fcontext PROC
+ ; first arg of make_fcontext() == top of context-stack
+ ; save top of context-stack (base) A4
+ mov a4, a1
+
+ ; shift address in A1 to lower 16 byte boundary
+ bic a1, a1, #0x0f
+
+ ; reserve space for context-data on context-stack
+ sub a1, a1, #0x48
+
+ ; save top address of context_stack as 'base'
+ str a4, [a1, #0x8]
+ ; second arg of make_fcontext() == size of context-stack
+ ; compute bottom address of context-stack (limit)
+ sub a4, a4, a2
+ ; save bottom address of context-stack as 'limit'
+ str a4, [a1, #0x4]
+ ; save bottom address of context-stack as 'dealloction stack'
+ str a4, [a1, #0x0]
+
+ ; third arg of make_fcontext() == address of context-function
+ str a3, [a1, #0x34]
+
+ ; compute address of returned transfer_t
+ add a2, a1, #0x38
+ mov a3, a2
+ str a3, [a1, #0xc]
+
+ ; compute abs address of label finish
+ adr a2, finish
+ ; save address of finish as return-address for context-function
+ ; will be entered after context-function returns
+ str a2, [a1, #0x30]
+
+ bx lr ; return pointer to context-data
+
+finish
+ ; exit code is zero
+ mov a1, #0
+ ; exit application
+ bl _exit
+
+ ENDP
+ END
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_pe_armasm.masm b/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_pe_armasm.masm
new file mode 100644
index 0000000000..27cbfb0825
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_arm_aapcs_pe_armasm.masm
@@ -0,0 +1,77 @@
+;/*
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+;*/
+
+; *******************************************************
+; * *
+; * ------------------------------------------------- *
+; * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+; * ------------------------------------------------- *
+; * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+; * ------------------------------------------------- *
+; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
+; * ------------------------------------------------- *
+; * ------------------------------------------------- *
+; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+; * ------------------------------------------------- *
+; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+; * ------------------------------------------------- *
+; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
+; * ------------------------------------------------- *
+; * *
+; *******************************************************
+
+
+ AREA |.text|, CODE
+ ALIGN 4
+ EXPORT make_fcontext
+ IMPORT _exit
+
+make_fcontext PROC
+ ; first arg of make_fcontext() == top of context-stack
+ ; save top of context-stack (base) A4
+ mov a4, a1
+
+ ; shift address in A1 to lower 16 byte boundary
+ bic a1, a1, #0x0f
+
+ ; reserve space for context-data on context-stack
+ sub a1, a1, #0x48
+
+ ; save top address of context_stack as 'base'
+ str a4, [a1, #0x8]
+ ; second arg of make_fcontext() == size of context-stack
+ ; compute bottom address of context-stack (limit)
+ sub a4, a4, a2
+ ; save bottom address of context-stack as 'limit'
+ str a4, [a1, #0x4]
+ ; save bottom address of context-stack as 'dealloction stack'
+ str a4, [a1, #0x0]
+
+ ; third arg of make_fcontext() == address of context-function
+ str a3, [a1, #0x34]
+
+ ; compute address of returned transfer_t
+ add a2, a1, #0x38
+ mov a3, a2
+ str a3, [a1, #0xc]
+
+ ; compute abs address of label finish
+ adr a2, finish
+ ; save address of finish as return-address for context-function
+ ; will be entered after context-function returns
+ str a2, [a1, #0x30]
+
+ bx lr ; return pointer to context-data
+
+finish
+ ; exit code is zero
+ mov a1, #0
+ ; exit application
+ bl _exit
+
+ ENDP
+ END
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_combined_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_combined_sysv_macho_gas.S
new file mode 100644
index 0000000000..727e9045fc
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_combined_sysv_macho_gas.S
@@ -0,0 +1,20 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__i386__)
+ #include "make_i386_sysv_macho_gas.S"
+#elif defined(__x86_64__)
+ #include "make_x86_64_sysv_macho_gas.S"
+#elif defined(__ppc__)
+ #include "make_ppc32_sysv_macho_gas.S"
+#elif defined(__ppc64__)
+ #include "make_ppc64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_gas.asm b/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_gas.asm
new file mode 100644
index 0000000000..dcb77000fa
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_gas.asm
@@ -0,0 +1,147 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Copyright Thomas Sailer 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*************************************************************************************
+* --------------------------------------------------------------------------------- *
+* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+* --------------------------------------------------------------------------------- *
+* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
+* --------------------------------------------------------------------------------- *
+* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
+* --------------------------------------------------------------------------------- *
+* --------------------------------------------------------------------------------- *
+* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+* --------------------------------------------------------------------------------- *
+* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
+* --------------------------------------------------------------------------------- *
+* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
+* --------------------------------------------------------------------------------- *
+**************************************************************************************/
+
+.file "make_i386_ms_pe_gas.asm"
+.text
+.p2align 4,,15
+.globl _make_fcontext
+.def _make_fcontext; .scl 2; .type 32; .endef
+_make_fcontext:
+ /* first arg of make_fcontext() == top of context-stack */
+ movl 0x04(%esp), %eax
+
+ /* reserve space for first argument of context-function */
+ /* EAX might already point to a 16byte border */
+ leal -0x8(%eax), %eax
+
+ /* shift address in EAX to lower 16 byte boundary */
+ andl $-16, %eax
+
+ /* reserve space for context-data on context-stack */
+ /* size for fc_mxcsr .. EIP + return-address for context-function */
+ /* on context-function entry: (ESP -0x4) % 8 == 0 */
+ /* additional space is required for SEH */
+ leal -0x40(%eax), %eax
+
+ /* save MMX control- and status-word */
+ stmxcsr (%eax)
+ /* save x87 control-word */
+ fnstcw 0x4(%eax)
+
+ /* first arg of make_fcontext() == top of context-stack */
+ movl 0x4(%esp), %ecx
+ /* save top address of context stack as 'base' */
+ movl %ecx, 0x14(%eax)
+ /* second arg of make_fcontext() == size of context-stack */
+ movl 0x8(%esp), %edx
+ /* negate stack size for LEA instruction (== substraction) */
+ negl %edx
+ /* compute bottom address of context stack (limit) */
+ leal (%ecx,%edx), %ecx
+ /* save bottom address of context-stack as 'limit' */
+ movl %ecx, 0x10(%eax)
+ /* save bottom address of context-stack as 'dealloction stack' */
+ movl %ecx, 0xc(%eax)
+ /* set fiber-storage to zero */
+ xorl %ecx, %ecx
+ movl %ecx, 0x8(%eax)
+
+ /* third arg of make_fcontext() == address of context-function */
+ /* stored in EBX */
+ movl 0xc(%esp), %ecx
+ movl %ecx, 0x24(%eax)
+
+ /* compute abs address of label trampoline */
+ movl $trampoline, %ecx
+ /* save address of trampoline as return-address for context-function */
+ /* will be entered after calling jump_fcontext() first time */
+ movl %ecx, 0x2c(%eax)
+
+ /* compute abs address of label finish */
+ movl $finish, %ecx
+ /* save address of finish as return-address for context-function */
+ /* will be entered after context-function returns */
+ movl %ecx, 0x28(%eax)
+
+ /* traverse current seh chain to get the last exception handler installed by Windows */
+ /* note that on Windows Server 2008 and 2008 R2, SEHOP is activated by default */
+ /* the exception handler chain is tested for the presence of ntdll.dll!FinalExceptionHandler */
+ /* at its end by RaiseException all seh andlers are disregarded if not present and the */
+ /* program is aborted */
+ /* load NT_TIB into ECX */
+ movl %fs:(0x0), %ecx
+
+walk:
+ /* load 'next' member of current SEH into EDX */
+ movl (%ecx), %edx
+ /* test if 'next' of current SEH is last (== 0xffffffff) */
+ incl %edx
+ jz found
+ decl %edx
+ /* exchange content; ECX contains address of next SEH */
+ xchgl %ecx, %edx
+ /* inspect next SEH */
+ jmp walk
+
+found:
+ /* load 'handler' member of SEH == address of last SEH handler installed by Windows */
+ movl 0x04(%ecx), %ecx
+ /* save address in ECX as SEH handler for context */
+ movl %ecx, 0x3c(%eax)
+ /* set ECX to -1 */
+ movl $0xffffffff, %ecx
+ /* save ECX as next SEH item */
+ movl %ecx, 0x38(%eax)
+ /* load address of next SEH item */
+ leal 0x38(%eax), %ecx
+ /* save next SEH */
+ movl %ecx, 0x18(%eax)
+
+ /* return pointer to context-data */
+ ret
+
+trampoline:
+ /* move transport_t for entering context-function */
+ /* FCTX == EAX, DATA == EDX */
+ movl %eax, (%esp)
+ movl %edx, 0x4(%esp)
+ /* label finish as return-address */
+ pushl %ebp
+ /* jump to context-function */
+ jmp *%ebx
+
+finish:
+ /* ESP points to same address as ESP on entry of context function + 0x4 */
+ xorl %eax, %eax
+ /* exit code is zero */
+ movl %eax, (%esp)
+ /* exit application */
+ call __exit
+ hlt
+
+.def __exit; .scl 2; .type 32; .endef /* standard C library function */
+
+.section .drectve
+.ascii " -export:\"make_fcontext\""
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_masm.asm b/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_masm.asm
new file mode 100644
index 0000000000..5246465cb9
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_masm.asm
@@ -0,0 +1,140 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ---------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ---------------------------------------------------------------------------------
+; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
+; ---------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
+; ---------------------------------------------------------------------------------
+; ---------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ---------------------------------------------------------------------------------
+; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
+; ---------------------------------------------------------------------------------
+; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
+; ---------------------------------------------------------------------------------
+
+.386
+.XMM
+.model flat, c
+; standard C library function
+_exit PROTO, value:SDWORD
+.code
+
+make_fcontext PROC BOOST_CONTEXT_EXPORT
+ ; first arg of make_fcontext() == top of context-stack
+ mov eax, [esp+04h]
+
+ ; reserve space for first argument of context-function
+ ; EAX might already point to a 16byte border
+ lea eax, [eax-08h]
+
+ ; shift address in EAX to lower 16 byte boundary
+ and eax, -16
+
+ ; reserve space for context-data on context-stack
+ ; on context-function entry: (ESP -0x4) % 8 == 0
+ ; additional space is required for SEH
+ lea eax, [eax-040h]
+
+ ; save MMX control- and status-word
+ stmxcsr [eax]
+ ; save x87 control-word
+ fnstcw [eax+04h]
+
+ ; first arg of make_fcontext() == top of context-stack
+ mov ecx, [esp+04h]
+ ; save top address of context stack as 'base'
+ mov [eax+014h], ecx
+ ; second arg of make_fcontext() == size of context-stack
+ mov edx, [esp+08h]
+ ; negate stack size for LEA instruction (== substraction)
+ neg edx
+ ; compute bottom address of context stack (limit)
+ lea ecx, [ecx+edx]
+ ; save bottom address of context-stack as 'limit'
+ mov [eax+010h], ecx
+ ; save bottom address of context-stack as 'dealloction stack'
+ mov [eax+0ch], ecx
+ ; set fiber-storage to zero
+ xor ecx, ecx
+ mov [eax+08h], ecx
+
+ ; third arg of make_fcontext() == address of context-function
+ ; stored in EBX
+ mov ecx, [esp+0ch]
+ mov [eax+024h], ecx
+
+ ; compute abs address of label trampoline
+ mov ecx, trampoline
+ ; save address of trampoline as return-address for context-function
+ ; will be entered after calling jump_fcontext() first time
+ mov [eax+02ch], ecx
+
+ ; compute abs address of label finish
+ mov ecx, finish
+ ; save address of finish as return-address for context-function in EBP
+ ; will be entered after context-function returns
+ mov [eax+028h], ecx
+
+ ; traverse current seh chain to get the last exception handler installed by Windows
+ ; note that on Windows Server 2008 and 2008 R2, SEHOP is activated by default
+ ; the exception handler chain is tested for the presence of ntdll.dll!FinalExceptionHandler
+ ; at its end by RaiseException all seh-handlers are disregarded if not present and the
+ ; program is aborted
+ assume fs:nothing
+ ; load NT_TIB into ECX
+ mov ecx, fs:[0h]
+ assume fs:error
+
+walk:
+ ; load 'next' member of current SEH into EDX
+ mov edx, [ecx]
+ ; test if 'next' of current SEH is last (== 0xffffffff)
+ inc edx
+ jz found
+ dec edx
+ ; exchange content; ECX contains address of next SEH
+ xchg edx, ecx
+ ; inspect next SEH
+ jmp walk
+
+found:
+ ; load 'handler' member of SEH == address of last SEH handler installed by Windows
+ mov ecx, [ecx+04h]
+ ; save address in ECX as SEH handler for context
+ mov [eax+03ch], ecx
+ ; set ECX to -1
+ mov ecx, 0ffffffffh
+ ; save ECX as next SEH item
+ mov [eax+038h], ecx
+ ; load address of next SEH item
+ lea ecx, [eax+038h]
+ ; save next SEH
+ mov [eax+018h], ecx
+
+ ret ; return pointer to context-data
+
+trampoline:
+ ; move transport_t for entering context-function
+ ; FCTX == EAX, DATA == EDX
+ mov [esp], eax
+ mov [esp+04h], edx
+ push ebp
+ ; jump to context-function
+ jmp ebx
+
+finish:
+ ; exit code is zero
+ xor eax, eax
+ mov [esp], eax
+ ; exit application
+ call _exit
+ hlt
+make_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_masm.masm b/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_masm.masm
new file mode 100644
index 0000000000..5246465cb9
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_i386_ms_pe_masm.masm
@@ -0,0 +1,140 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ---------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ---------------------------------------------------------------------------------
+; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
+; ---------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
+; ---------------------------------------------------------------------------------
+; ---------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ---------------------------------------------------------------------------------
+; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
+; ---------------------------------------------------------------------------------
+; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
+; ---------------------------------------------------------------------------------
+
+.386
+.XMM
+.model flat, c
+; standard C library function
+_exit PROTO, value:SDWORD
+.code
+
+make_fcontext PROC BOOST_CONTEXT_EXPORT
+ ; first arg of make_fcontext() == top of context-stack
+ mov eax, [esp+04h]
+
+ ; reserve space for first argument of context-function
+ ; EAX might already point to a 16byte border
+ lea eax, [eax-08h]
+
+ ; shift address in EAX to lower 16 byte boundary
+ and eax, -16
+
+ ; reserve space for context-data on context-stack
+ ; on context-function entry: (ESP -0x4) % 8 == 0
+ ; additional space is required for SEH
+ lea eax, [eax-040h]
+
+ ; save MMX control- and status-word
+ stmxcsr [eax]
+ ; save x87 control-word
+ fnstcw [eax+04h]
+
+ ; first arg of make_fcontext() == top of context-stack
+ mov ecx, [esp+04h]
+ ; save top address of context stack as 'base'
+ mov [eax+014h], ecx
+ ; second arg of make_fcontext() == size of context-stack
+ mov edx, [esp+08h]
+ ; negate stack size for LEA instruction (== substraction)
+ neg edx
+ ; compute bottom address of context stack (limit)
+ lea ecx, [ecx+edx]
+ ; save bottom address of context-stack as 'limit'
+ mov [eax+010h], ecx
+ ; save bottom address of context-stack as 'dealloction stack'
+ mov [eax+0ch], ecx
+ ; set fiber-storage to zero
+ xor ecx, ecx
+ mov [eax+08h], ecx
+
+ ; third arg of make_fcontext() == address of context-function
+ ; stored in EBX
+ mov ecx, [esp+0ch]
+ mov [eax+024h], ecx
+
+ ; compute abs address of label trampoline
+ mov ecx, trampoline
+ ; save address of trampoline as return-address for context-function
+ ; will be entered after calling jump_fcontext() first time
+ mov [eax+02ch], ecx
+
+ ; compute abs address of label finish
+ mov ecx, finish
+ ; save address of finish as return-address for context-function in EBP
+ ; will be entered after context-function returns
+ mov [eax+028h], ecx
+
+ ; traverse current seh chain to get the last exception handler installed by Windows
+ ; note that on Windows Server 2008 and 2008 R2, SEHOP is activated by default
+ ; the exception handler chain is tested for the presence of ntdll.dll!FinalExceptionHandler
+ ; at its end by RaiseException all seh-handlers are disregarded if not present and the
+ ; program is aborted
+ assume fs:nothing
+ ; load NT_TIB into ECX
+ mov ecx, fs:[0h]
+ assume fs:error
+
+walk:
+ ; load 'next' member of current SEH into EDX
+ mov edx, [ecx]
+ ; test if 'next' of current SEH is last (== 0xffffffff)
+ inc edx
+ jz found
+ dec edx
+ ; exchange content; ECX contains address of next SEH
+ xchg edx, ecx
+ ; inspect next SEH
+ jmp walk
+
+found:
+ ; load 'handler' member of SEH == address of last SEH handler installed by Windows
+ mov ecx, [ecx+04h]
+ ; save address in ECX as SEH handler for context
+ mov [eax+03ch], ecx
+ ; set ECX to -1
+ mov ecx, 0ffffffffh
+ ; save ECX as next SEH item
+ mov [eax+038h], ecx
+ ; load address of next SEH item
+ lea ecx, [eax+038h]
+ ; save next SEH
+ mov [eax+018h], ecx
+
+ ret ; return pointer to context-data
+
+trampoline:
+ ; move transport_t for entering context-function
+ ; FCTX == EAX, DATA == EDX
+ mov [esp], eax
+ mov [esp+04h], edx
+ push ebp
+ ; jump to context-function
+ jmp ebx
+
+finish:
+ ; exit code is zero
+ xor eax, eax
+ mov [esp], eax
+ ; exit application
+ call _exit
+ hlt
+make_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_i386_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_i386_sysv_elf_gas.S
new file mode 100644
index 0000000000..3ad353cfa2
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_i386_sysv_elf_gas.S
@@ -0,0 +1,112 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/****************************************************************************************
+ * *
+ * ---------------------------------------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+ * ---------------------------------------------------------------------------------- *
+ * | fc_mxcsr|fc_x87_cw| guard | EDI | ESI | EBX | EBP | EIP | *
+ * ---------------------------------------------------------------------------------- *
+ * ---------------------------------------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x20 | 0x24 | 0x28 | | *
+ * ---------------------------------------------------------------------------------- *
+ * | hidden | to | data | | *
+ * ---------------------------------------------------------------------------------- *
+ * *
+ ****************************************************************************************/
+
+.text
+.globl make_fcontext
+.align 2
+.type make_fcontext,@function
+make_fcontext:
+ /* first arg of make_fcontext() == top of context-stack */
+ movl 0x4(%esp), %eax
+
+ /* reserve space for first argument of context-function
+ eax might already point to a 16byte border */
+ leal -0x8(%eax), %eax
+
+ /* shift address in EAX to lower 16 byte boundary */
+ andl $-16, %eax
+
+ /* reserve space for context-data on context-stack */
+ leal -0x2c(%eax), %eax
+
+ /* third arg of make_fcontext() == address of context-function */
+ /* stored in EBX */
+ movl 0xc(%esp), %ecx
+ movl %ecx, 0x14(%eax)
+
+ /* save MMX control- and status-word */
+ stmxcsr (%eax)
+ /* save x87 control-word */
+ fnstcw 0x4(%eax)
+
+#if defined(TLS_STACK_PROTECTOR)
+ /* save stack guard */
+ movl %gs:0x14, %ecx /* read stack guard from TLS record */
+ movl %ecx, 0x8(%eax) /* save stack guard */
+#endif
+
+ /* return transport_t */
+ /* FCTX == EDI, DATA == ESI */
+ leal 0xc(%eax), %ecx
+ movl %ecx, 0x20(%eax)
+
+ /* compute abs address of label trampoline */
+ call 1f
+ /* address of trampoline 1 */
+1: popl %ecx
+ /* compute abs address of label trampoline */
+ addl $trampoline-1b, %ecx
+ /* save address of trampoline as return address */
+ /* will be entered after calling jump_fcontext() first time */
+ movl %ecx, 0x1c(%eax)
+
+ /* compute abs address of label finish */
+ call 2f
+ /* address of label 2 */
+2: popl %ecx
+ /* compute abs address of label finish */
+ addl $finish-2b, %ecx
+ /* save address of finish as return-address for context-function */
+ /* will be entered after context-function returns */
+ movl %ecx, 0x18(%eax)
+
+ ret /* return pointer to context-data */
+
+trampoline:
+ /* move transport_t for entering context-function */
+ movl %edi, (%esp)
+ movl %esi, 0x4(%esp)
+ pushl %ebp
+ /* jump to context-function */
+ jmp *%ebx
+
+finish:
+ call 3f
+ /* address of label 3 */
+3: popl %ebx
+ /* compute address of GOT and store it in EBX */
+ addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx
+
+ /* exit code is zero */
+ xorl %eax, %eax
+ movl %eax, (%esp)
+ /* exit application */
+ call _exit@PLT
+ hlt
+.size make_fcontext,.-make_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_i386_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_i386_sysv_macho_gas.S
new file mode 100644
index 0000000000..fdcdb7c80f
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_i386_sysv_macho_gas.S
@@ -0,0 +1,90 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/****************************************************************************************
+ * *
+ * ---------------------------------------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+ * ---------------------------------------------------------------------------------- *
+ * | fc_mxcsr|fc_x87_cw| EDI | ESI | EBX | EBP | EIP | to | *
+ * ---------------------------------------------------------------------------------- *
+ * ---------------------------------------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x20 | | *
+ * ---------------------------------------------------------------------------------- *
+ * | data | | *
+ * ---------------------------------------------------------------------------------- *
+ * *
+ ****************************************************************************************/
+
+.text
+.globl _make_fcontext
+.align 2
+_make_fcontext:
+ /* first arg of make_fcontext() == top of context-stack */
+ movl 0x4(%esp), %eax
+
+ /* reserve space for first argument of context-function
+ eax might already point to a 16byte border */
+ leal -0x8(%eax), %eax
+
+ /* shift address in EAX to lower 16 byte boundary */
+ andl $-16, %eax
+
+ /* reserve space for context-data on context-stack */
+ leal -0x2c(%eax), %eax
+
+ /* third arg of make_fcontext() == address of context-function */
+ /* stored in EBX */
+ movl 0xc(%esp), %ecx
+ movl %ecx, 0x10(%eax)
+
+ /* save MMX control- and status-word */
+ stmxcsr (%eax)
+ /* save x87 control-word */
+ fnstcw 0x4(%eax)
+
+ /* compute abs address of label trampoline */
+ call 1f
+ /* address of trampoline 1 */
+1: popl %ecx
+ /* compute abs address of label trampoline */
+ addl $trampoline-1b, %ecx
+ /* save address of trampoline as return address */
+ /* will be entered after calling jump_fcontext() first time */
+ movl %ecx, 0x18(%eax)
+
+ /* compute abs address of label finish */
+ call 2f
+ /* address of label 2 */
+2: popl %ecx
+ /* compute abs address of label finish */
+ addl $finish-2b, %ecx
+ /* save address of finish as return-address for context-function */
+ /* will be entered after context-function returns */
+ movl %ecx, 0x14(%eax)
+
+ ret /* return pointer to context-data */
+
+trampoline:
+ /* move transport_t for entering context-function */
+ movl %eax, (%esp)
+ movl %edx, 0x4(%esp)
+ pushl %ebp
+ /* jump to context-function */
+ jmp *%ebx
+
+finish:
+ /* exit code is zero */
+ xorl %eax, %eax
+ movl %eax, (%esp)
+ /* exit application */
+ call __exit
+ hlt
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S
new file mode 100644
index 0000000000..e364b2db62
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S
@@ -0,0 +1,16 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__i386__)
+ #include "make_i386_sysv_macho_gas.S"
+#elif defined(__x86_64__)
+ #include "make_x86_64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_mips32_o32_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_mips32_o32_elf_gas.S
new file mode 100644
index 0000000000..ff4e78488d
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_mips32_o32_elf_gas.S
@@ -0,0 +1,96 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F20 | F22 | F24 | F26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F28 | F30 | S0 | S1 | S2 | S3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | ABI ARGS | GP | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ * *****************************************************/
+
+.text
+.globl make_fcontext
+.align 2
+.type make_fcontext,@function
+.ent make_fcontext
+make_fcontext:
+#ifdef __PIC__
+.set noreorder
+.cpload $t9
+.set reorder
+#endif
+ # shift address in A0 to lower 16 byte boundary
+ li $v1, -16 # 0xfffffffffffffff0
+ and $v0, $v1, $a0
+
+ # reserve space for context-data on context-stack
+ # includes an extra 32 bytes for:
+ # - 16-byte incoming argument area required by mips ABI used when
+ # jump_context calls the initial function
+ # - 4 bytes to save our GP register used in finish
+ # - 8 bytes to as space for transfer_t returned to finish
+ # - 4 bytes for alignment
+ addiu $v0, $v0, -128
+
+ # third arg of make_fcontext() == address of context-function
+ sw $a2, 92($v0)
+ # save global pointer in context-data
+ sw $gp, 112($v0)
+
+ # compute address of returned transfer_t
+ addiu $t0, $v0, 116
+ sw $t0, 84($v0)
+
+ # compute abs address of label finish
+ la $t9, finish
+ # save address of finish as return-address for context-function
+ # will be entered after context-function returns
+ sw $t9, 88($v0)
+
+ jr $ra # return pointer to context-data
+
+finish:
+ # reload our gp register (needed for la)
+ lw $gp, 16($sp)
+
+ # call _exit(0)
+ # the previous function should have left the 16 bytes incoming argument
+ # area on the stack which we reuse for calling _exit
+ la $t9, _exit
+ move $a0, $zero
+ jr $t9
+.end make_fcontext
+.size make_fcontext, .-make_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S
new file mode 100644
index 0000000000..52e7220933
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S
@@ -0,0 +1,16 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__ppc__)
+ #include "make_ppc32_sysv_macho_gas.S"
+#elif defined(__ppc64__)
+ #include "make_ppc64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_elf_gas.S
new file mode 100644
index 0000000000..d009036367
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_elf_gas.S
@@ -0,0 +1,142 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl make_fcontext
+.align 2
+.type make_fcontext,@function
+make_fcontext:
+ # save return address into R6
+ mflr %r6
+
+ # first arg of make_fcontext() == top address of context-function
+ # shift address in R3 to lower 16 byte boundary
+ clrrwi %r3, %r3, 4
+
+ # reserve space for context-data on context-stack
+ # including 64 byte of linkage + parameter area (R1 % 16 == 0)
+ subi %r3, %r3, 336
+
+ # third arg of make_fcontext() == address of context-function
+ stw %r5, 240(%r3)
+
+ # set back-chain to zero
+ li %r0, 0
+ stw %r0, 244(%r3)
+
+ mffs %f0 # load FPSCR
+ stfd %f0, 144(%r3) # save FPSCR
+
+ # compute address of returned transfer_t
+ addi %r0, %r3, 252
+ mr %r4, %r0
+ stw %r4, 228(%r3)
+
+ # load LR
+ mflr %r0
+ # jump to label 1
+ bl 1f
+1:
+ # load LR into R4
+ mflr %r4
+ # compute abs address of label finish
+ addi %r4, %r4, finish - 1b
+ # restore LR
+ mtlr %r0
+ # save address of finish as return-address for context-function
+ # will be entered after context-function returns
+ stw %r4, 236(%r3)
+
+ # restore return address from R6
+ mtlr %r6
+
+ blr # return pointer to context-data
+
+finish:
+ # save return address into R0
+ mflr %r0
+ # save return address on stack, set up stack frame
+ stw %r0, 4(%r1)
+ # allocate stack space, R1 % 16 == 0
+ stwu %r1, -16(%r1)
+
+ # exit code is zero
+ li %r3, 0
+ # exit application
+ bl _exit@plt
+.size make_fcontext, .-make_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_macho_gas.S
new file mode 100644
index 0000000000..8f35eff9ab
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_macho_gas.S
@@ -0,0 +1,137 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl _make_fcontext
+.align 2
+_make_fcontext:
+ # save return address into R6
+ mflr r6
+
+ # first arg of make_fcontext() == top address of context-function
+ # shift address in R3 to lower 16 byte boundary
+ clrrwi r3, r3, 4
+
+ # reserve space for context-data on context-stack
+ # including 64 byte of linkage + parameter area (R1 16 == 0)
+ subi r3, r3, 336
+
+ # third arg of make_fcontext() == address of context-function
+ stw r5, 240(r3)
+
+ # set back-chain to zero
+ li r0, 0
+ stw r0, 244(r3)
+
+ mffs f0 # load FPSCR
+ stfd f0, 144(r3) # save FPSCR
+
+ # compute address of returned transfer_t
+ addi r0, r3, 252
+ mr r4, r0
+ stw r4, 228(r3)
+
+ # load LR
+ mflr r0
+ # jump to label 1
+ bl 1f
+1:
+ # load LR into R4
+ mflr r4
+ # compute abs address of label finish
+ addi r4, r4, finish - 1b
+ # restore LR
+ mtlr r0
+ # save address of finish as return-address for context-function
+ # will be entered after context-function returns
+ stw r4, 236(r3)
+
+ # restore return address from R6
+ mtlr r6
+
+ blr # return pointer to context-data
+
+finish:
+ # save return address into R0
+ mflr r0
+ # save return address on stack, set up stack frame
+ stw r0, 4(r1)
+ # allocate stack space, R1 16 == 0
+ stwu r1, -16(r1)
+
+ # exit code is zero
+ li r3, 0
+ # exit application
+ bl _exit@plt
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_xcoff_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_xcoff_gas.S
new file mode 100644
index 0000000000..f257258060
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_ppc32_sysv_xcoff_gas.S
@@ -0,0 +1,138 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+ .globl make_fcontext[DS]
+ .globl .make_fcontext[PR]
+ .align 2
+ .csect make_fcontext[DS]
+make_fcontext:
+ .long .make_fcontext[PR]
+ .csect .make_fcontext[PR], 3
+#.make_fcontext:
+ # save return address into R6
+ mflr 6
+
+ # first arg of make_fcontext() == top address of context-function
+ # shift address in R3 to lower 16 byte boundary
+ clrrwi 3, 3, 4
+
+ # reserve space for context-data on context-stack
+ # including 64 byte of linkage + parameter area (R1 % 16 == 0)
+ subi 3, 3, 336
+
+ # third arg of make_fcontext() == address of context-function
+ stw 5, 240(3)
+
+ # set back-chain to zero
+ li 0, 0
+ stw 0, 244(3)
+
+ # compute address of returned transfer_t
+ addi 0, 3, 252
+ mr 4, 0
+ stw 4, 228(3)
+
+ # load LR
+ mflr 0
+ # jump to label 1
+ bl .Label
+.Label:
+ # load LR into R4
+ mflr 4
+ # compute abs address of label .L_finish
+ addi 4, 4, .L_finish - .Label
+ # restore LR
+ mtlr 0
+ # save address of finish as return-address for context-function
+ # will be entered after context-function returns
+ stw 4, 236(3)
+
+ # restore return address from R6
+ mtlr 6
+
+ blr # return pointer to context-data
+
+.L_finish:
+ # save return address into R0
+ mflr 0
+ # save return address on stack, set up stack frame
+ stw 0, 4(1)
+ # allocate stack space, R1 % 16 == 0
+ stwu 1, -16(1)
+
+ # exit code is zero
+ li 3, 0
+ # exit application
+ bl ._exit
+ nop
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_elf_gas.S
new file mode 100644
index 0000000000..28188dfc8c
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_elf_gas.S
@@ -0,0 +1,176 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | TOC | R14 | R15 | R16 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | R17 | R18 | R19 | R20 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | R21 | R22 | R23 | R24 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | R25 | R26 | R27 | R28 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | R29 | R30 | R31 | hidden | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | CR | LR | PC | back-chain| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | cr saved | lr saved | compiler | linker | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | TOC saved | FCTX | DATA | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.globl make_fcontext
+#if _CALL_ELF == 2
+ .text
+ .align 2
+make_fcontext:
+ addis %r2, %r12, .TOC.-make_fcontext@ha
+ addi %r2, %r2, .TOC.-make_fcontext@l
+ .localentry make_fcontext, . - make_fcontext
+#else
+ .section ".opd","aw"
+ .align 3
+make_fcontext:
+# ifdef _CALL_LINUX
+ .quad .L.make_fcontext,.TOC.@tocbase,0
+ .type make_fcontext,@function
+ .text
+ .align 2
+.L.make_fcontext:
+# else
+ .hidden .make_fcontext
+ .globl .make_fcontext
+ .quad .make_fcontext,.TOC.@tocbase,0
+ .size make_fcontext,24
+ .type .make_fcontext,@function
+ .text
+ .align 2
+.make_fcontext:
+# endif
+#endif
+ # save return address into R6
+ mflr %r6
+
+ # first arg of make_fcontext() == top address of context-stack
+ # shift address in R3 to lower 16 byte boundary
+ clrrdi %r3, %r3, 4
+
+ # reserve space for context-data on context-stack
+ # including 64 byte of linkage + parameter area (R1 % 16 == 0)
+ subi %r3, %r3, 248
+
+ # third arg of make_fcontext() == address of context-function
+ # entry point (ELFv2) or descriptor (ELFv1)
+#if _CALL_ELF == 2
+ # save address of context-function entry point
+ std %r5, 176(%r3)
+#else
+ # save address of context-function entry point
+ ld %r4, 0(%r5)
+ std %r4, 176(%r3)
+ # save TOC of context-function
+ ld %r4, 8(%r5)
+ std %r4, 0(%r3)
+#endif
+
+ # set back-chain to zero
+ li %r0, 0
+ std %r0, 184(%r3)
+
+#if _CALL_ELF != 2
+ # zero in r3 indicates first jump to context-function
+ std %r0, 152(%r3)
+#endif
+
+ # load LR
+ mflr %r0
+ # jump to label 1
+ bl 1f
+1:
+ # load LR into R4
+ mflr %r4
+ # compute abs address of label finish
+ addi %r4, %r4, finish - 1b
+ # restore LR
+ mtlr %r0
+ # save address of finish as return-address for context-function
+ # will be entered after context-function returns
+ std %r4, 168(%r3)
+
+ # restore return address from R6
+ mtlr %r6
+
+ blr # return pointer to context-data
+
+finish:
+ # save return address into R0
+ mflr %r0
+ # save return address on stack, set up stack frame
+ std %r0, 8(%r1)
+ # allocate stack space, R1 % 16 == 0
+ stdu %r1, -32(%r1)
+
+ # exit code is zero
+ li %r3, 0
+ # exit application
+ bl _exit
+ nop
+#if _CALL_ELF == 2
+ .size make_fcontext, .-make_fcontext
+#else
+# ifdef _CALL_LINUX
+ .size .make_fcontext, .-.L.make_fcontext
+# else
+ .size .make_fcontext, .-.make_fcontext
+# endif
+#endif
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_macho_gas.S
new file mode 100644
index 0000000000..7b947bb6b0
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_macho_gas.S
@@ -0,0 +1,126 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | TOC | R14 | R15 | R16 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | R17 | R18 | R19 | R20 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | R21 | R22 | R23 | R24 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | R25 | R26 | R27 | R28 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | R29 | R30 | R31 | hidden | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | CR | LR | PC | back-chain| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | cr saved | lr saved | compiler | linker | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | TOC saved | FCTX | DATA | | *
+ * ------------------------------------------------- *
+ * *
+
+.text
+.globl _make_fcontext
+_make_fcontext:
+ ; save return address into R6
+ mflr r6
+
+ ; first arg of make_fcontext() == top address of context-function
+ ; shift address in R3 to lower 16 byte boundary
+ clrrwi r3, r3, 4
+
+ ; reserve space for context-data on context-stack
+ ; including 64 byte of linkage + parameter area (R1 16 == 0)
+ subi r3, r3, 248
+
+ ; third arg of make_fcontext() == address of context-function
+ stw r5, 176(r3)
+
+ ; set back-chain to zero
+ li %r0, 0
+ std %r0, 184(%r3)
+
+ ; compute address of returned transfer_t
+ addi %r0, %r3, 232
+ mr %r4, %r0
+ std %r4, 152(%r3)
+
+ ; load LR
+ mflr r0
+ ; jump to label 1
+ bl l1
+l1:
+ ; load LR into R4
+ mflr r4
+ ; compute abs address of label finish
+ addi r4, r4, lo16((finish - .) + 4)
+ ; restore LR
+ mtlr r0
+ ; save address of finish as return-address for context-function
+ ; will be entered after context-function returns
+ std r4, 168(r3)
+
+ ; restore return address from R6
+ mtlr r6
+
+ blr ; return pointer to context-data
+
+finish:
+ ; save return address into R0
+ mflr r0
+ ; save return address on stack, set up stack frame
+ stw r0, 8(r1)
+ ; allocate stack space, R1 16 == 0
+ stwu r1, -32(r1)
+
+ ; set return value to zero
+ li r3, 0
+ ; exit application
+ bl __exit
+ nop
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_xcoff_gas.S b/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_xcoff_gas.S
new file mode 100644
index 0000000000..b229ab1b36
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_ppc64_sysv_xcoff_gas.S
@@ -0,0 +1,62 @@
+ .globl make_fcontext[DS]
+ .globl .make_fcontext[PR]
+ .align 2
+ .csect .make_fcontext[PR], 3
+ .globl _make_fcontext
+#._make_fcontext:
+ # save return address into R6
+ mflr 6
+
+ # first arg of make_fcontext() == top address of context-function
+ # shift address in R3 to lower 16 byte boundary
+ clrrwi 3, 3, 4
+
+ # reserve space for context-data on context-stack
+ # including 64 byte of linkage + parameter area (R1 % 16 == 0)
+ subi 3, 3, 248
+
+ # third arg of make_fcontext() == address of context-function
+ stw 5, 176(3)
+
+ # set back-chain to zero
+ li 0, 0
+ std 0, 184(3)
+
+ # compute address of returned transfer_t
+ addi 0, 3, 232
+ mr 4, 0
+ std 4, 152(3)
+
+ # load LR
+ mflr 0
+ # jump to label 1
+ bl .Label
+.Label:
+ # load LR into R4
+ mflr 4
+ # compute abs address of label .L_finish
+ addi 4, 4, .L_finish - .Label
+ # restore LR
+ mtlr 0
+ # save address of finish as return-address for context-function
+ # will be entered after context-function returns
+ stw 4, 168(3)
+
+ # restore return address from R6
+ mtlr 6
+
+ blr # return pointer to context-data
+
+.L_finish:
+ # save return address into R0
+ mflr 0
+ # save return address on stack, set up stack frame
+ stw 0, 8(1)
+ # allocate stack space, R1 % 16 == 0
+ stwu 1, -32(1)
+
+ # exit code is zero
+ li 3, 0
+ # exit application
+ bl ._exit
+ nop
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_gas.asm b/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_gas.asm
new file mode 100644
index 0000000000..958a2a7b6d
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_gas.asm
@@ -0,0 +1,174 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Copyright Thomas Sailer 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*************************************************************************************
+* ---------------------------------------------------------------------------------- *
+* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | *
+* ---------------------------------------------------------------------------------- *
+* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | *
+* ---------------------------------------------------------------------------------- *
+* | limit | base | R12 | R13 | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | *
+* ---------------------------------------------------------------------------------- *
+* | R14 | R15 | RDI | RSI | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | *
+* ---------------------------------------------------------------------------------- *
+* | RBX | RBP | hidden | RIP | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | *
+* ---------------------------------------------------------------------------------- *
+* | parameter area | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | *
+* ---------------------------------------------------------------------------------- *
+* | FCTX | DATA | | *
+* ---------------------------------------------------------------------------------- *
+**************************************************************************************/
+
+.file "make_x86_64_ms_pe_gas.asm"
+.text
+.p2align 4,,15
+.globl make_fcontext
+.def make_fcontext; .scl 2; .type 32; .endef
+.seh_proc make_fcontext
+make_fcontext:
+.seh_endprologue
+
+ /* first arg of make_fcontext() == top of context-stack */
+ movq %rcx, %rax
+
+ /* shift address in RAX to lower 16 byte boundary */
+ /* == pointer to fcontext_t and address of context stack */
+ andq $-16, %rax
+
+ /* reserve space for context-data on context-stack */
+ /* on context-function entry: (RSP -0x8) % 16 == 0 */
+ leaq -0x150(%rax), %rax
+
+ /* third arg of make_fcontext() == address of context-function */
+ movq %r8, 0x100(%rax)
+
+ /* first arg of make_fcontext() == top of context-stack */
+ /* save top address of context stack as 'base' */
+ movq %rcx, 0xc8(%rax)
+ /* second arg of make_fcontext() == size of context-stack */
+ /* negate stack size for LEA instruction (== substraction) */
+ negq %rdx
+ /* compute bottom address of context stack (limit) */
+ leaq (%rcx,%rdx), %rcx
+ /* save bottom address of context stack as 'limit' */
+ movq %rcx, 0xc0(%rax)
+ /* save address of context stack limit as 'dealloction stack' */
+ movq %rcx, 0xb8(%rax)
+ /* set fiber-storage to zero */
+ xorq %rcx, %rcx
+ movq %rcx, 0xb0(%rax)
+
+ /* save MMX control- and status-word */
+ stmxcsr 0xa0(%rax)
+ /* save x87 control-word */
+ fnstcw 0xa4(%rax)
+
+ /* compute address of transport_t */
+ leaq 0x140(%rax), %rcx
+ /* store address of transport_t in hidden field */
+ movq %rcx, 0x110(%rax)
+
+ /* compute abs address of label trampoline */
+ leaq trampoline(%rip), %rcx
+ /* save address of finish as return-address for context-function */
+ /* will be entered after jump_fcontext() first time */
+ movq %rcx, 0x118(%rax)
+
+ /* compute abs address of label finish */
+ leaq finish(%rip), %rcx
+ /* save address of finish as return-address for context-function */
+ /* will be entered after context-function returns */
+ movq %rcx, 0x108(%rax)
+
+ ret /* return pointer to context-data */
+
+trampoline:
+ /* store return address on stack */
+ /* fix stack alignment */
+ pushq %rbp
+ /* jump to context-function */
+ jmp *%rbx
+
+finish:
+ /* 32byte shadow-space for _exit() */
+ andq $-32, %rsp
+ /* 32byte shadow-space for _exit() are */
+ /* already reserved by make_fcontext() */
+ /* exit code is zero */
+ xorq %rcx, %rcx
+ /* exit application */
+ call _exit
+ hlt
+.seh_endproc
+
+.def _exit; .scl 2; .type 32; .endef /* standard C library function */
+
+.section .drectve
+.ascii " -export:\"make_fcontext\""
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_masm.asm b/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_masm.asm
new file mode 100644
index 0000000000..8f6c959a83
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_masm.asm
@@ -0,0 +1,163 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ----------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ----------------------------------------------------------------------------------
+; | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ----------------------------------------------------------------------------------
+; | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
+; ----------------------------------------------------------------------------------
+; | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
+; ----------------------------------------------------------------------------------
+; | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
+; ----------------------------------------------------------------------------------
+; | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
+; ----------------------------------------------------------------------------------
+; | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc |
+; ----------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
+; ----------------------------------------------------------------------------------
+; | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc |
+; ----------------------------------------------------------------------------------
+; | limit | base | R12 | R13 |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
+; ----------------------------------------------------------------------------------
+; | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc |
+; ----------------------------------------------------------------------------------
+; | R14 | R15 | RDI | RSI |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
+; ----------------------------------------------------------------------------------
+; | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c |
+; ----------------------------------------------------------------------------------
+; | RBX | RBP | hidden | RIP |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
+; ----------------------------------------------------------------------------------
+; | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c |
+; ----------------------------------------------------------------------------------
+; | parameter area |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
+; ----------------------------------------------------------------------------------
+; | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c |
+; ----------------------------------------------------------------------------------
+; | FCTX | DATA | |
+; ----------------------------------------------------------------------------------
+
+; standard C library function
+EXTERN _exit:PROC
+.code
+
+; generate function table entry in .pdata and unwind information in
+make_fcontext PROC BOOST_CONTEXT_EXPORT FRAME
+ ; .xdata for a function's structured exception handling unwind behavior
+ .endprolog
+
+ ; first arg of make_fcontext() == top of context-stack
+ mov rax, rcx
+
+ ; shift address in RAX to lower 16 byte boundary
+ ; == pointer to fcontext_t and address of context stack
+ and rax, -16
+
+ ; reserve space for context-data on context-stack
+ ; on context-function entry: (RSP -0x8) % 16 == 0
+ sub rax, 0150h
+
+ ; third arg of make_fcontext() == address of context-function
+ ; stored in RBX
+ mov [rax+0100h], r8
+
+ ; first arg of make_fcontext() == top of context-stack
+ ; save top address of context stack as 'base'
+ mov [rax+0c8h], rcx
+ ; second arg of make_fcontext() == size of context-stack
+ ; negate stack size for LEA instruction (== substraction)
+ neg rdx
+ ; compute bottom address of context stack (limit)
+ lea rcx, [rcx+rdx]
+ ; save bottom address of context stack as 'limit'
+ mov [rax+0c0h], rcx
+ ; save address of context stack limit as 'dealloction stack'
+ mov [rax+0b8h], rcx
+ ; set fiber-storage to zero
+ xor rcx, rcx
+ mov [rax+0b0h], rcx
+
+ ; save MMX control- and status-word
+ stmxcsr [rax+0a0h]
+ ; save x87 control-word
+ fnstcw [rax+0a4h]
+
+ ; compute address of transport_t
+ lea rcx, [rax+0140h]
+ ; store address of transport_t in hidden field
+ mov [rax+0110h], rcx
+
+ ; compute abs address of label trampoline
+ lea rcx, trampoline
+ ; save address of trampoline as return-address for context-function
+ ; will be entered after calling jump_fcontext() first time
+ mov [rax+0118h], rcx
+
+ ; compute abs address of label finish
+ lea rcx, finish
+ ; save address of finish as return-address for context-function in RBP
+ ; will be entered after context-function returns
+ mov [rax+0108h], rcx
+
+ ret ; return pointer to context-data
+
+trampoline:
+ ; store return address on stack
+ ; fix stack alignment
+ push rbp
+ ; jump to context-function
+ jmp rbx
+
+finish:
+ ; exit code is zero
+ xor rcx, rcx
+ ; exit application
+ call _exit
+ hlt
+make_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_masm.masm b/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_masm.masm
new file mode 100644
index 0000000000..8f6c959a83
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/make_x86_64_ms_pe_masm.masm
@@ -0,0 +1,163 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ----------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ----------------------------------------------------------------------------------
+; | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ----------------------------------------------------------------------------------
+; | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
+; ----------------------------------------------------------------------------------
+; | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
+; ----------------------------------------------------------------------------------
+; | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
+; ----------------------------------------------------------------------------------
+; | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
+; ----------------------------------------------------------------------------------
+; | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc |
+; ----------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
+; ----------------------------------------------------------------------------------
+; | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc |
+; ----------------------------------------------------------------------------------
+; | limit | base | R12 | R13 |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
+; ----------------------------------------------------------------------------------
+; | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc |
+; ----------------------------------------------------------------------------------
+; | R14 | R15 | RDI | RSI |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
+; ----------------------------------------------------------------------------------
+; | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c |
+; ----------------------------------------------------------------------------------
+; | RBX | RBP | hidden | RIP |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
+; ----------------------------------------------------------------------------------
+; | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c |
+; ----------------------------------------------------------------------------------
+; | parameter area |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
+; ----------------------------------------------------------------------------------
+; | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c |
+; ----------------------------------------------------------------------------------
+; | FCTX | DATA | |
+; ----------------------------------------------------------------------------------
+
+; standard C library function
+EXTERN _exit:PROC
+.code
+
+; generate function table entry in .pdata and unwind information in
+make_fcontext PROC BOOST_CONTEXT_EXPORT FRAME
+ ; .xdata for a function's structured exception handling unwind behavior
+ .endprolog
+
+ ; first arg of make_fcontext() == top of context-stack
+ mov rax, rcx
+
+ ; shift address in RAX to lower 16 byte boundary
+ ; == pointer to fcontext_t and address of context stack
+ and rax, -16
+
+ ; reserve space for context-data on context-stack
+ ; on context-function entry: (RSP -0x8) % 16 == 0
+ sub rax, 0150h
+
+ ; third arg of make_fcontext() == address of context-function
+ ; stored in RBX
+ mov [rax+0100h], r8
+
+ ; first arg of make_fcontext() == top of context-stack
+ ; save top address of context stack as 'base'
+ mov [rax+0c8h], rcx
+ ; second arg of make_fcontext() == size of context-stack
+ ; negate stack size for LEA instruction (== substraction)
+ neg rdx
+ ; compute bottom address of context stack (limit)
+ lea rcx, [rcx+rdx]
+ ; save bottom address of context stack as 'limit'
+ mov [rax+0c0h], rcx
+ ; save address of context stack limit as 'dealloction stack'
+ mov [rax+0b8h], rcx
+ ; set fiber-storage to zero
+ xor rcx, rcx
+ mov [rax+0b0h], rcx
+
+ ; save MMX control- and status-word
+ stmxcsr [rax+0a0h]
+ ; save x87 control-word
+ fnstcw [rax+0a4h]
+
+ ; compute address of transport_t
+ lea rcx, [rax+0140h]
+ ; store address of transport_t in hidden field
+ mov [rax+0110h], rcx
+
+ ; compute abs address of label trampoline
+ lea rcx, trampoline
+ ; save address of trampoline as return-address for context-function
+ ; will be entered after calling jump_fcontext() first time
+ mov [rax+0118h], rcx
+
+ ; compute abs address of label finish
+ lea rcx, finish
+ ; save address of finish as return-address for context-function in RBP
+ ; will be entered after context-function returns
+ mov [rax+0108h], rcx
+
+ ret ; return pointer to context-data
+
+trampoline:
+ ; store return address on stack
+ ; fix stack alignment
+ push rbp
+ ; jump to context-function
+ jmp rbx
+
+finish:
+ ; exit code is zero
+ xor rcx, rcx
+ ; exit application
+ call _exit
+ hlt
+make_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S
new file mode 100644
index 0000000000..02a3b07fde
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_arm64_aapcs_elf_gas.S
@@ -0,0 +1,112 @@
+/*
+ Copyright Edward Nevill + Oliver Kowalke 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | d8 | d9 | d10 | d11 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | d12 | d13 | d14 | d15 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * | x19 | x20 | x21 | x22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | x23 | x24 | x25 | x26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
+ * ------------------------------------------------- *
+ * | x27 | x28 | FP | LR | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | | | *
+ * ------------------------------------------------- *
+ * | 0xa0| 0xa4| 0xa8| 0xac| | | *
+ * ------------------------------------------------- *
+ * | PC | align | | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.align 2
+.global ontop_fcontext
+.type ontop_fcontext, %function
+ontop_fcontext:
+ # prepare stack for GP + FPU
+ sub sp, sp, #0xb0
+
+ # save d8 - d15
+ stp d8, d9, [sp, #0x00]
+ stp d10, d11, [sp, #0x10]
+ stp d12, d13, [sp, #0x20]
+ stp d14, d15, [sp, #0x30]
+
+ # save x19-x30
+ stp x19, x20, [sp, #0x40]
+ stp x21, x22, [sp, #0x50]
+ stp x23, x24, [sp, #0x60]
+ stp x25, x26, [sp, #0x70]
+ stp x27, x28, [sp, #0x80]
+ stp x29, x30, [sp, #0x90]
+
+ # save LR as PC
+ str x30, [sp, #0xa0]
+
+ # store RSP (pointing to context-data) in X5
+ mov x4, sp
+
+ # restore RSP (pointing to context-data) from X1
+ mov sp, x0
+
+ # load d8 - d15
+ ldp d8, d9, [sp, #0x00]
+ ldp d10, d11, [sp, #0x10]
+ ldp d12, d13, [sp, #0x20]
+ ldp d14, d15, [sp, #0x30]
+
+ # load x19-x30
+ ldp x19, x20, [sp, #0x40]
+ ldp x21, x22, [sp, #0x50]
+ ldp x23, x24, [sp, #0x60]
+ ldp x25, x26, [sp, #0x70]
+ ldp x27, x28, [sp, #0x80]
+ ldp x29, x30, [sp, #0x90]
+
+ # return transfer_t from jump
+ # pass transfer_t as first arg in context function
+ # X0 == FCTX, X1 == DATA
+ mov x0, x4
+
+ # skip pc
+ # restore stack from GP + FPU
+ add sp, sp, #0xb0
+
+ # jump to ontop-function
+ ret x2
+.size ontop_fcontext,.-ontop_fcontext
+# Mark that we don't need executable stack.
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_arm64_aapcs_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_arm64_aapcs_macho_gas.S
new file mode 100644
index 0000000000..a387d06dd2
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_arm64_aapcs_macho_gas.S
@@ -0,0 +1,108 @@
+/*
+ Copyright Edward Nevill + Oliver Kowalke 2015
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | d8 | d9 | d10 | d11 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | d12 | d13 | d14 | d15 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * | x19 | x20 | x21 | x22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | x23 | x24 | x25 | x26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
+ * ------------------------------------------------- *
+ * | x27 | x28 | FP | LR | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | | | *
+ * ------------------------------------------------- *
+ * | 0xa0| 0xa4| 0xa8| 0xac| | | *
+ * ------------------------------------------------- *
+ * | PC | align | | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.global _ontop_fcontext
+.balign 16
+_ontop_fcontext:
+ ; prepare stack for GP + FPU
+ sub sp, sp, #0xb0
+
+ ; save d8 - d15
+ stp d8, d9, [sp, #0x00]
+ stp d10, d11, [sp, #0x10]
+ stp d12, d13, [sp, #0x20]
+ stp d14, d15, [sp, #0x30]
+
+ ; save x19-x30
+ stp x19, x20, [sp, #0x40]
+ stp x21, x22, [sp, #0x50]
+ stp x23, x24, [sp, #0x60]
+ stp x25, x26, [sp, #0x70]
+ stp x27, x28, [sp, #0x80]
+ stp x29, x30, [sp, #0x90]
+
+ ; save LR as PC
+ str x30, [sp, #0xa0]
+
+ ; store RSP (pointing to context-data) in X5
+ mov x4, sp
+
+ ; restore RSP (pointing to context-data) from X1
+ mov sp, x0
+
+ ; load d8 - d15
+ ldp d8, d9, [sp, #0x00]
+ ldp d10, d11, [sp, #0x10]
+ ldp d12, d13, [sp, #0x20]
+ ldp d14, d15, [sp, #0x30]
+
+ ; load x19-x30
+ ldp x19, x20, [sp, #0x40]
+ ldp x21, x22, [sp, #0x50]
+ ldp x23, x24, [sp, #0x60]
+ ldp x25, x26, [sp, #0x70]
+ ldp x27, x28, [sp, #0x80]
+ ldp x29, x30, [sp, #0x90]
+
+ ; return transfer_t from jump
+ ; pass transfer_t as first arg in context function
+ ; X0 == FCTX, X1 == DATA
+ mov x0, x4
+
+ ; skip pc
+ ; restore stack from GP + FPU
+ add sp, sp, #0xb0
+
+ ; jump to ontop-function
+ ret x2
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_elf_gas.S
new file mode 100644
index 0000000000..9d9198fc55
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_elf_gas.S
@@ -0,0 +1,91 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
+ * ------------------------------------------------- *
+ * |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
+ * ------------------------------------------------- *
+ * | v8 | lr | pc | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl ontop_fcontext
+.align 2
+.type ontop_fcontext,%function
+ontop_fcontext:
+ @ save LR as PC
+ push {lr}
+ @ save hidden,V1-V8,LR
+ push {a1,v1-v8,lr}
+
+ @ prepare stack for FPU
+ sub sp, sp, #64
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ @ save S16-S31
+ vstmia sp, {d8-d15}
+#endif
+
+ @ store RSP (pointing to context-data) in A1
+ mov a1, sp
+
+ @ restore RSP (pointing to context-data) from A2
+ mov sp, a2
+
+ @ store parent context in A2
+ mov a2, a1
+
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ @ restore S16-S31
+ vldmia sp, {d8-d15}
+#endif
+ @ prepare stack for FPU
+ add sp, sp, #64
+
+ @ restore hidden,V1-V8,LR
+ pop {a1,v1-v8,lr}
+
+ @ return transfer_t from jump
+ str a2, [a1, #0]
+ str a3, [a1, #4]
+ @ pass transfer_t as first arg in context function
+ @ A1 == hidden, A2 == FCTX, A3 == DATA
+
+ @ skip PC
+ add sp, sp, #4
+
+ @ jump to ontop-function
+ bx a4
+.size ontop_fcontext,.-ontop_fcontext
+
+@ Mark that we don't need executable stack.
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_macho_gas.S
new file mode 100644
index 0000000000..3633aca641
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_macho_gas.S
@@ -0,0 +1,100 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+ * ------------------------------------------------- *
+ * | sjlj|hiddn| v1 | v2 | v3 | v4 | v5 | v6 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+ * ------------------------------------------------- *
+ * | v7 | v8 | lr | pc | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl _ontop_fcontext
+.align 2
+_ontop_fcontext:
+ @ save LR as PC
+ push {lr}
+ @ save hidden,V1-V8,LR
+ push {a1,v1-v8,lr}
+
+ @ locate TLS to save/restore SjLj handler
+ mrc p15, 0, v2, c13, c0, #3
+ bic v2, v2, #3
+
+ @ load TLS[__PTK_LIBC_DYLD_Unwind_SjLj_Key]
+ ldr v1, [v2, #72]
+ @ save SjLj handler
+ push {v1}
+
+ @ prepare stack for FPU
+ sub sp, sp, #64
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ @ save S16-S31
+ vstmia sp, {d8-d15}
+#endif
+
+ @ store RSP (pointing to context-data) in A1
+ mov a1, sp
+
+ @ restore RSP (pointing to context-data) from A2
+ mov sp, a2
+
+#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
+ @ restore S16-S31
+ vldmia sp, {d8-d15}
+#endif
+ @ prepare stack for FPU
+ add sp, sp, #64
+
+ @ restore SjLj handler
+ pop {v1}
+ @ store SjLj handler in TLS
+ str v1, [v2, #72]
+
+ @ store parent context in A2
+ mov a2, a1
+
+ @ restore hidden,V1-V8,LR
+ pop {a1,v1-v8,lr}
+
+ @ return transfer_t from jump
+ str a2, [a1, #0]
+ str a3, [a1, #4]
+ @ pass transfer_t as first arg in context function
+ @ A1 == hidden, A2 == FCTX, A3 == DATA
+
+ @ skip PC
+ add sp, sp, #4
+
+ @ jump to ontop-function
+ bx a4
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_pe_armasm.asm b/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_pe_armasm.asm
new file mode 100644
index 0000000000..f360a8ffca
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_pe_armasm.asm
@@ -0,0 +1,86 @@
+;/*
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+;*/
+
+; *******************************************************
+; * *
+; * ------------------------------------------------- *
+; * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+; * ------------------------------------------------- *
+; * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+; * ------------------------------------------------- *
+; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
+; * ------------------------------------------------- *
+; * ------------------------------------------------- *
+; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+; * ------------------------------------------------- *
+; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+; * ------------------------------------------------- *
+; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
+; * ------------------------------------------------- *
+; * *
+; *******************************************************
+
+ AREA |.text|, CODE
+ ALIGN 4
+ EXPORT ontop_fcontext
+
+ontop_fcontext PROC
+ ; save LR as PC
+ push {lr}
+ ; save hidden,V1-V8,LR
+ push {a1,v1-v8,lr}
+
+ ; load TIB to save/restore thread size and limit.
+ ; we do not need preserve CPU flag and can use it's arg register
+ mrc p15, #0, v1, c13, c0, #2
+
+ ; save current stack base
+ ldr a1, [v1, #0x04]
+ push {a1}
+ ; save current stack limit
+ ldr a1, [v1, #0x08]
+ push {a1}
+ ; save current deallocation stack
+ ldr a1, [v1, #0xe0c]
+ push {a1}
+
+ ; store RSP (pointing to context-data) in A1
+ mov a1, sp
+
+ ; restore RSP (pointing to context-data) from A2
+ mov sp, a2
+
+ ; restore stack base
+ pop {a1}
+ str a1, [v1, #0x04]
+ ; restore stack limit
+ pop {a1}
+ str a1, [v1, #0x08]
+ ; restore deallocation stack
+ pop {a1}
+ str a1, [v1, #0xe0c]
+
+ ; store parent context in A2
+ mov a2, a1
+
+ ; restore hidden,V1-V8,LR
+ pop {a1,v1-v8,lr}
+
+ ; return transfer_t from jump
+ str a2, [a1, #0]
+ str a3, [a1, #4]
+ ; pass transfer_t as first arg in context function
+ ; A1 == hidden, A2 == FCTX, A3 == DATA
+
+ ; skip PC
+ add sp, sp, #4
+
+ ; jump to ontop-function
+ bx a4
+
+ ENDP
+ END
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_pe_armasm.masm b/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_pe_armasm.masm
new file mode 100644
index 0000000000..f360a8ffca
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_arm_aapcs_pe_armasm.masm
@@ -0,0 +1,86 @@
+;/*
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+;*/
+
+; *******************************************************
+; * *
+; * ------------------------------------------------- *
+; * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+; * ------------------------------------------------- *
+; * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
+; * ------------------------------------------------- *
+; * |deall|limit| base|hiddn| v1 | v2 | v3 | v4 | *
+; * ------------------------------------------------- *
+; * ------------------------------------------------- *
+; * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+; * ------------------------------------------------- *
+; * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
+; * ------------------------------------------------- *
+; * | v5 | v6 | v7 | v8 | lr | pc | FCTX| DATA| *
+; * ------------------------------------------------- *
+; * *
+; *******************************************************
+
+ AREA |.text|, CODE
+ ALIGN 4
+ EXPORT ontop_fcontext
+
+ontop_fcontext PROC
+ ; save LR as PC
+ push {lr}
+ ; save hidden,V1-V8,LR
+ push {a1,v1-v8,lr}
+
+ ; load TIB to save/restore thread size and limit.
+ ; we do not need preserve CPU flag and can use it's arg register
+ mrc p15, #0, v1, c13, c0, #2
+
+ ; save current stack base
+ ldr a1, [v1, #0x04]
+ push {a1}
+ ; save current stack limit
+ ldr a1, [v1, #0x08]
+ push {a1}
+ ; save current deallocation stack
+ ldr a1, [v1, #0xe0c]
+ push {a1}
+
+ ; store RSP (pointing to context-data) in A1
+ mov a1, sp
+
+ ; restore RSP (pointing to context-data) from A2
+ mov sp, a2
+
+ ; restore stack base
+ pop {a1}
+ str a1, [v1, #0x04]
+ ; restore stack limit
+ pop {a1}
+ str a1, [v1, #0x08]
+ ; restore deallocation stack
+ pop {a1}
+ str a1, [v1, #0xe0c]
+
+ ; store parent context in A2
+ mov a2, a1
+
+ ; restore hidden,V1-V8,LR
+ pop {a1,v1-v8,lr}
+
+ ; return transfer_t from jump
+ str a2, [a1, #0]
+ str a3, [a1, #4]
+ ; pass transfer_t as first arg in context function
+ ; A1 == hidden, A2 == FCTX, A3 == DATA
+
+ ; skip PC
+ add sp, sp, #4
+
+ ; jump to ontop-function
+ bx a4
+
+ ENDP
+ END
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_combined_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_combined_sysv_macho_gas.S
new file mode 100644
index 0000000000..20cbeb9f22
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_combined_sysv_macho_gas.S
@@ -0,0 +1,20 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__i386__)
+ #include "ontop_i386_sysv_macho_gas.S"
+#elif defined(__x86_64__)
+ #include "ontop_x86_64_sysv_macho_gas.S"
+#elif defined(__ppc__)
+ #include "ontop_ppc32_sysv_macho_gas.S"
+#elif defined(__ppc64__)
+ #include "ontop_ppc64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_gas.asm b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_gas.asm
new file mode 100644
index 0000000000..41f15f5b02
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_gas.asm
@@ -0,0 +1,125 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Copyright Thomas Sailer 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*************************************************************************************
+* --------------------------------------------------------------------------------- *
+* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+* --------------------------------------------------------------------------------- *
+* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | *
+* --------------------------------------------------------------------------------- *
+* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | *
+* --------------------------------------------------------------------------------- *
+* --------------------------------------------------------------------------------- *
+* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+* --------------------------------------------------------------------------------- *
+* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | *
+* --------------------------------------------------------------------------------- *
+* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| *
+* --------------------------------------------------------------------------------- *
+**************************************************************************************/
+
+.file "ontop_i386_ms_pe_gas.asm"
+.text
+.p2align 4,,15
+.globl _ontop_fcontext
+.def _ontop_fcontext; .scl 2; .type 32; .endef
+_ontop_fcontext:
+ /* prepare stack */
+ leal -0x2c(%esp), %esp
+
+#if !defined(BOOST_USE_TSX)
+ /* save MMX control- and status-word */
+ stmxcsr (%esp)
+ /* save x87 control-word */
+ fnstcw 0x4(%esp)
+#endif
+
+ /* load NT_TIB */
+ movl %fs:(0x18), %edx
+ /* load fiber local storage */
+ movl 0x10(%edx), %eax
+ movl %eax, 0x8(%esp)
+ /* load current dealloction stack */
+ movl 0xe0c(%edx), %eax
+ movl %eax, 0xc(%esp)
+ /* load current stack limit */
+ movl 0x8(%edx), %eax
+ movl %eax, 0x10(%esp)
+ /* load current stack base */
+ movl 0x4(%edx), %eax
+ movl %eax, 0x14(%esp)
+ /* load current SEH exception list */
+ movl (%edx), %eax
+ movl %eax, 0x18(%esp)
+
+ movl %edi, 0x1c(%esp) /* save EDI */
+ movl %esi, 0x20(%esp) /* save ESI */
+ movl %ebx, 0x24(%esp) /* save EBX */
+ movl %ebp, 0x28(%esp) /* save EBP */
+
+ /* store ESP (pointing to context-data) in ECX */
+ movl %esp, %ecx
+
+ /* first arg of ontop_fcontext() == fcontext to jump to */
+ movl 0x30(%esp), %eax
+
+ /* pass parent fcontext_t */
+ movl %ecx, 0x30(%eax)
+
+ /* second arg of ontop_fcontext() == data to be transferred */
+ movl 0x34(%esp), %ecx
+
+ /* pass data */
+ movl %ecx, 0x34(%eax)
+
+ /* third arg of ontop_fcontext() == ontop-function */
+ movl 0x38(%esp), %ecx
+
+ /* restore ESP (pointing to context-data) from EDX */
+ movl %eax, %esp
+
+#if !defined(BOOST_USE_TSX)
+ /* restore MMX control- and status-word */
+ ldmxcsr (%esp)
+ /* restore x87 control-word */
+ fldcw 0x4(%esp)
+#endif
+
+ /* restore NT_TIB into EDX */
+ movl %fs:(0x18), %edx
+ /* restore fiber local storage */
+ movl 0x8(%esp), %eax
+ movl %eax, 0x10(%edx)
+ /* restore current deallocation stack */
+ movl 0xc(%esp), %eax
+ movl %eax, 0xe0c(%edx)
+ /* restore current stack limit */
+ movl 0x10(%esp), %eax
+ movl %eax, 0x08(%edx)
+ /* restore current stack base */
+ movl 0x14(%esp), %eax
+ movl %eax, 0x04(%edx)
+ /* restore current SEH exception list */
+ movl 0x18(%esp), %eax
+ movl %eax, (%edx)
+
+ movl 0x1c(%esp), %edi /* restore EDI */
+ movl 0x20(%esp), %esi /* restore ESI */
+ movl 0x24(%esp), %ebx /* restore EBX */
+ movl 0x28(%esp), %ebp /* restore EBP */
+
+ /* prepare stack */
+ leal 0x2c(%esp), %esp
+
+ /* keep return-address on stack */
+
+ /* jump to context */
+ jmp *%ecx
+
+.section .drectve
+.ascii " -export:\"ontop_fcontext\""
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_masm.asm b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_masm.asm
new file mode 100644
index 0000000000..82246a4a2c
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_masm.asm
@@ -0,0 +1,124 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ---------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ---------------------------------------------------------------------------------
+; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
+; ---------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
+; ---------------------------------------------------------------------------------
+; ---------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ---------------------------------------------------------------------------------
+; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
+; ---------------------------------------------------------------------------------
+; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
+; ---------------------------------------------------------------------------------
+
+.386
+.XMM
+.model flat, c
+.code
+
+ontop_fcontext PROC BOOST_CONTEXT_EXPORT
+ ; prepare stack
+ lea esp, [esp-02ch]
+
+IFNDEF BOOST_USE_TSX
+ ; save MMX control- and status-word
+ stmxcsr [esp]
+ ; save x87 control-word
+ fnstcw [esp+04h]
+ENDIF
+
+ assume fs:nothing
+ ; load NT_TIB into ECX
+ mov edx, fs:[018h]
+ assume fs:error
+ ; load fiber local storage
+ mov eax, [edx+010h]
+ mov [esp+08h], eax
+ ; load current deallocation stack
+ mov eax, [edx+0e0ch]
+ mov [esp+0ch], eax
+ ; load current stack limit
+ mov eax, [edx+08h]
+ mov [esp+010h], eax
+ ; load current stack base
+ mov eax, [edx+04h]
+ mov [esp+014h], eax
+ ; load current SEH exception list
+ mov eax, [edx]
+ mov [esp+018h], eax
+
+ mov [esp+01ch], edi ; save EDI
+ mov [esp+020h], esi ; save ESI
+ mov [esp+024h], ebx ; save EBX
+ mov [esp+028h], ebp ; save EBP
+
+ ; store ESP (pointing to context-data) in ECX
+ mov ecx, esp
+
+ ; first arg of ontop_fcontext() == fcontext to jump to
+ mov eax, [esp+030h]
+
+ ; pass parent fcontext_t
+ mov [eax+030h], ecx
+
+ ; second arg of ontop_fcontext() == data to be transferred
+ mov ecx, [esp+034h]
+
+ ; pass data
+ mov [eax+034h], ecx
+
+ ; third arg of ontop_fcontext() == ontop-function
+ mov ecx, [esp+038h]
+
+ ; restore ESP (pointing to context-data) from EAX
+ mov esp, eax
+
+IFNDEF BOOST_USE_TSX
+ ; restore MMX control- and status-word
+ ldmxcsr [esp]
+ ; restore x87 control-word
+ fldcw [esp+04h]
+ENDIF
+
+ assume fs:nothing
+ ; load NT_TIB into EDX
+ mov edx, fs:[018h]
+ assume fs:error
+ ; restore fiber local storage
+ mov eax, [esp+08h]
+ mov [edx+010h], eax
+ ; restore current deallocation stack
+ mov eax, [esp+0ch]
+ mov [edx+0e0ch], eax
+ ; restore current stack limit
+ mov eax, [esp+010h]
+ mov [edx+08h], eax
+ ; restore current stack base
+ mov eax, [esp+014h]
+ mov [edx+04h], eax
+ ; restore current SEH exception list
+ mov eax, [esp+018h]
+ mov [edx], eax
+
+ mov edi, [esp+01ch] ; restore EDI
+ mov esi, [esp+020h] ; restore ESI
+ mov ebx, [esp+024h] ; restore EBX
+ mov ebp, [esp+028h] ; restore EBP
+
+ ; prepare stack
+ lea esp, [esp+02ch]
+
+ ; keep return-address on stack
+
+ ; jump to context
+ jmp ecx
+ontop_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_masm.masm b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_masm.masm
new file mode 100644
index 0000000000..82246a4a2c
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_ms_pe_masm.masm
@@ -0,0 +1,124 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ---------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ---------------------------------------------------------------------------------
+; | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch |
+; ---------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI |
+; ---------------------------------------------------------------------------------
+; ---------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ---------------------------------------------------------------------------------
+; | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch |
+; ---------------------------------------------------------------------------------
+; | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR|
+; ---------------------------------------------------------------------------------
+
+.386
+.XMM
+.model flat, c
+.code
+
+ontop_fcontext PROC BOOST_CONTEXT_EXPORT
+ ; prepare stack
+ lea esp, [esp-02ch]
+
+IFNDEF BOOST_USE_TSX
+ ; save MMX control- and status-word
+ stmxcsr [esp]
+ ; save x87 control-word
+ fnstcw [esp+04h]
+ENDIF
+
+ assume fs:nothing
+ ; load NT_TIB into ECX
+ mov edx, fs:[018h]
+ assume fs:error
+ ; load fiber local storage
+ mov eax, [edx+010h]
+ mov [esp+08h], eax
+ ; load current deallocation stack
+ mov eax, [edx+0e0ch]
+ mov [esp+0ch], eax
+ ; load current stack limit
+ mov eax, [edx+08h]
+ mov [esp+010h], eax
+ ; load current stack base
+ mov eax, [edx+04h]
+ mov [esp+014h], eax
+ ; load current SEH exception list
+ mov eax, [edx]
+ mov [esp+018h], eax
+
+ mov [esp+01ch], edi ; save EDI
+ mov [esp+020h], esi ; save ESI
+ mov [esp+024h], ebx ; save EBX
+ mov [esp+028h], ebp ; save EBP
+
+ ; store ESP (pointing to context-data) in ECX
+ mov ecx, esp
+
+ ; first arg of ontop_fcontext() == fcontext to jump to
+ mov eax, [esp+030h]
+
+ ; pass parent fcontext_t
+ mov [eax+030h], ecx
+
+ ; second arg of ontop_fcontext() == data to be transferred
+ mov ecx, [esp+034h]
+
+ ; pass data
+ mov [eax+034h], ecx
+
+ ; third arg of ontop_fcontext() == ontop-function
+ mov ecx, [esp+038h]
+
+ ; restore ESP (pointing to context-data) from EAX
+ mov esp, eax
+
+IFNDEF BOOST_USE_TSX
+ ; restore MMX control- and status-word
+ ldmxcsr [esp]
+ ; restore x87 control-word
+ fldcw [esp+04h]
+ENDIF
+
+ assume fs:nothing
+ ; load NT_TIB into EDX
+ mov edx, fs:[018h]
+ assume fs:error
+ ; restore fiber local storage
+ mov eax, [esp+08h]
+ mov [edx+010h], eax
+ ; restore current deallocation stack
+ mov eax, [esp+0ch]
+ mov [edx+0e0ch], eax
+ ; restore current stack limit
+ mov eax, [esp+010h]
+ mov [edx+08h], eax
+ ; restore current stack base
+ mov eax, [esp+014h]
+ mov [edx+04h], eax
+ ; restore current SEH exception list
+ mov eax, [esp+018h]
+ mov [edx], eax
+
+ mov edi, [esp+01ch] ; restore EDI
+ mov esi, [esp+020h] ; restore ESI
+ mov ebx, [esp+024h] ; restore EBX
+ mov ebp, [esp+028h] ; restore EBP
+
+ ; prepare stack
+ lea esp, [esp+02ch]
+
+ ; keep return-address on stack
+
+ ; jump to context
+ jmp ecx
+ontop_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_i386_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_sysv_elf_gas.S
new file mode 100644
index 0000000000..03eb0f0c09
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_sysv_elf_gas.S
@@ -0,0 +1,99 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/****************************************************************************************
+ * *
+ * ---------------------------------------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+ * ---------------------------------------------------------------------------------- *
+ * | fc_mxcsr|fc_x87_cw| guard | EDI | ESI | EBX | EBP | EIP | *
+ * ---------------------------------------------------------------------------------- *
+ * ---------------------------------------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x20 | 0x24 | 0x28 | | *
+ * ---------------------------------------------------------------------------------- *
+ * | hidden | to | data | | *
+ * ---------------------------------------------------------------------------------- *
+ * *
+ ****************************************************************************************/
+
+.text
+.globl ontop_fcontext
+.align 2
+.type ontop_fcontext,@function
+ontop_fcontext:
+ leal -0x1c(%esp), %esp /* prepare stack */
+
+#if !defined(BOOST_USE_TSX)
+ stmxcsr (%esp) /* save MMX control- and status-word */
+ fnstcw 0x4(%esp) /* save x87 control-word */
+#endif
+
+#if defined(TLS_STACK_PROTECTOR)
+ movl %gs:0x14, %ecx /* read stack guard from TLS record */
+ movl %ecx, 0x8(%esp) /* save stack guard */
+#endif
+
+ movl %edi, 0xc(%esp) /* save EDI */
+ movl %esi, 0x10(%esp) /* save ESI */
+ movl %ebx, 0x14(%esp) /* save EBX */
+ movl %ebp, 0x18(%esp) /* save EBP */
+
+ /* store ESP (pointing to context-data) in ECX */
+ movl %esp, %ecx
+
+ /* first arg of ontop_fcontext() == fcontext to jump to */
+ movl 0x24(%esp), %eax
+
+ /* pass parent fcontext_t */
+ movl %ecx, 0x24(%eax)
+
+ /* second arg of ontop_fcontext() == data to be transferred */
+ movl 0x28(%esp), %ecx
+
+ /* pass data */
+ movl %ecx, 0x28(%eax)
+
+ /* third arg of ontop_fcontext() == ontop-function */
+ movl 0x2c(%esp), %ecx
+
+ /* restore ESP (pointing to context-data) from EAX */
+ movl %eax, %esp
+
+ /* address of returned transport_t */
+ movl 0x20(%esp), %eax
+ /* return parent fcontext_t */
+ movl %ecx, (%eax)
+ /* return data */
+ movl %edx, 0x4(%eax)
+
+#if !defined(BOOST_USE_TSX)
+ ldmxcsr (%esp) /* restore MMX control- and status-word */
+ fldcw 0x4(%esp) /* restore x87 control-word */
+#endif
+
+#if defined(TLS_STACK_PROTECTOR)
+ movl 0x8(%esp), %edx /* load stack guard */
+ movl %edx, %gs:0x14 /* restore stack guard to TLS record */
+#endif
+
+ movl 0xc(%esp), %edi /* restore EDI */
+ movl 0x10(%esp), %esi /* restore ESI */
+ movl 0x14(%esp), %ebx /* restore EBX */
+ movl 0x18(%esp), %ebp /* restore EBP */
+
+ leal 0x1c(%esp), %esp /* prepare stack */
+
+ /* jump to context */
+ jmp *%ecx
+.size ontop_fcontext,.-ontop_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_i386_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_sysv_macho_gas.S
new file mode 100644
index 0000000000..3a88372b3a
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_sysv_macho_gas.S
@@ -0,0 +1,81 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/****************************************************************************************
+ * *
+ * ---------------------------------------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+ * ---------------------------------------------------------------------------------- *
+ * | fc_mxcsr|fc_x87_cw| EDI | ESI | EBX | EBP | EIP | to | *
+ * ---------------------------------------------------------------------------------- *
+ * ---------------------------------------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ---------------------------------------------------------------------------------- *
+ * | 0x20 | | *
+ * ---------------------------------------------------------------------------------- *
+ * | data | | *
+ * ---------------------------------------------------------------------------------- *
+ * *
+ ****************************************************************************************/
+
+.text
+.globl _ontop_fcontext
+.align 2
+_ontop_fcontext:
+ leal -0x18(%esp), %esp /* prepare stack */
+
+#if !defined(BOOST_USE_TSX)
+ stmxcsr (%esp) /* save MMX control- and status-word */
+ fnstcw 0x4(%esp) /* save x87 control-word */
+#endif
+
+ movl %edi, 0x8(%esp) /* save EDI */
+ movl %esi, 0xc(%esp) /* save ESI */
+ movl %ebx, 0x10(%esp) /* save EBX */
+ movl %ebp, 0x14(%esp) /* save EBP */
+
+ /* store ESP (pointing to context-data) in ECX */
+ movl %esp, %ecx
+
+ /* first arg of ontop_fcontext() == fcontext to jump to */
+ movl 0x1c(%esp), %eax
+
+ /* pass parent fcontext_t */
+ movl %ecx, 0x1c(%eax)
+
+ /* second arg of ontop_fcontext() == data to be transferred */
+ movl 0x20(%esp), %ecx
+
+ /* pass data */
+ movl %ecx, 0x20(%eax)
+
+ /* third arg of ontop_fcontext() == ontop-function */
+ movl 0x24(%esp), %ecx
+
+ /* restore ESP (pointing to context-data) from EAX */
+ movl %eax, %esp
+
+ /* return parent fcontext_t */
+ movl %ecx, %eax
+ /* returned data is stored in EDX */
+
+#if !defined(BOOST_USE_TSX)
+ ldmxcsr (%esp) /* restore MMX control- and status-word */
+ fldcw 0x4(%esp) /* restore x87 control-word */
+#endif
+
+ movl 0x8(%esp), %edi /* restore EDI */
+ movl 0xc(%esp), %esi /* restore ESI */
+ movl 0x10(%esp), %ebx /* restore EBX */
+ movl 0x14(%esp), %ebp /* restore EBP */
+
+ leal 0x18(%esp), %esp /* prepare stack */
+
+ /* jump to context */
+ jmp *%ecx
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S
new file mode 100644
index 0000000000..393c5fe43e
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S
@@ -0,0 +1,16 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__i386__)
+ #include "ontop_i386_sysv_macho_gas.S"
+#elif defined(__x86_64__)
+ #include "ontop_x86_64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_mips32_o32_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_mips32_o32_elf_gas.S
new file mode 100644
index 0000000000..238c00ecd7
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_mips32_o32_elf_gas.S
@@ -0,0 +1,119 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F20 | F22 | F24 | F26 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F28 | F30 | S0 | S1 | S2 | S3 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | ABI ARGS | GP | FCTX| DATA| | *
+ * ------------------------------------------------- *
+ * *
+ * *****************************************************/
+
+.text
+.globl ontop_fcontext
+.align 2
+.type ontop_fcontext,@function
+.ent ontop_fcontext
+ontop_fcontext:
+ # reserve space on stack
+ addiu $sp, $sp, -96
+
+ sw $s0, 48($sp) # save S0
+ sw $s1, 52($sp) # save S1
+ sw $s2, 56($sp) # save S2
+ sw $s3, 60($sp) # save S3
+ sw $s4, 64($sp) # save S4
+ sw $s5, 68($sp) # save S5
+ sw $s6, 72($sp) # save S6
+ sw $s7, 76($sp) # save S7
+ sw $fp, 80($sp) # save FP
+ sw $a0, 84($sp) # save hidden, address of returned transfer_t
+ sw $ra, 88($sp) # save RA
+ sw $ra, 92($sp) # save RA as PC
+
+#if defined(__mips_hard_float)
+ s.d $f20, ($sp) # save F20
+ s.d $f22, 8($sp) # save F22
+ s.d $f24, 16($sp) # save F24
+ s.d $f26, 24($sp) # save F26
+ s.d $f28, 32($sp) # save F28
+ s.d $f30, 40($sp) # save F30
+#endif
+
+ # store SP (pointing to context-data) in A0
+ move $a0, $sp
+
+ # restore SP (pointing to context-data) from A1
+ move $sp, $a1
+
+#if defined(__mips_hard_float)
+ l.d $f20, ($sp) # restore F20
+ l.d $f22, 8($sp) # restore F22
+ l.d $f24, 16($sp) # restore F24
+ l.d $f26, 24($sp) # restore F26
+ l.d $f28, 32($sp) # restore F28
+ l.d $f30, 40($sp) # restore F30
+#endif
+
+ lw $s0, 48($sp) # restore S0
+ lw $s1, 52($sp) # restore S1
+ lw $s2, 56($sp) # restore S2
+ lw $s3, 60($sp) # restore S3
+ lw $s4, 64($sp) # restore S4
+ lw $s5, 68($sp) # restore S5
+ lw $s6, 72($sp) # restore S6
+ lw $s7, 76($sp) # restore S7
+ lw $fp, 80($sp) # restore FP
+ lw $v0, 84($sp) # restore hidden, address of returned transfer_t
+ lw $ra, 88($sp) # restore RA
+
+ # load PC
+ move $t9, $a3
+
+ # adjust stack
+ addiu $sp, $sp, 96
+
+ # return transfer_t from jump
+ sw $a0, ($v0) # fctx of transfer_t
+ sw $a2, 4($v0) # data of transfer_t
+ # pass transfer_t as first arg in context function
+ # A0 == hidden, A1 == fctx, A2 == data
+ move $a1, $a0
+ move $a0, $v0
+
+ # jump to context
+ jr $t9
+.end ontop_fcontext
+.size ontop_fcontext, .-ontop_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S
new file mode 100644
index 0000000000..4632f4cc9e
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S
@@ -0,0 +1,16 @@
+/*
+ Copyright Sergue E. Leontiev 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+// Stub file for universal binary
+
+#if defined(__ppc__)
+ #include "ontop_ppc32_sysv_macho_gas.S"
+#elif defined(__ppc64__)
+ #include "ontop_ppc64_sysv_macho_gas.S"
+#else
+ #error "No arch's"
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_elf_gas.S
new file mode 100644
index 0000000000..54072694ef
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_elf_gas.S
@@ -0,0 +1,206 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl ontop_fcontext
+.align 2
+.type ontop_fcontext,@function
+ontop_fcontext:
+ # reserve space on stack
+ subi %r1, %r1, 244
+
+ stfd %f14, 0(%r1) # save F14
+ stfd %f15, 8(%r1) # save F15
+ stfd %f16, 16(%r1) # save F16
+ stfd %f17, 24(%r1) # save F17
+ stfd %f18, 32(%r1) # save F18
+ stfd %f19, 40(%r1) # save F19
+ stfd %f20, 48(%r1) # save F20
+ stfd %f21, 56(%r1) # save F21
+ stfd %f22, 64(%r1) # save F22
+ stfd %f23, 72(%r1) # save F23
+ stfd %f24, 80(%r1) # save F24
+ stfd %f25, 88(%r1) # save F25
+ stfd %f26, 96(%r1) # save F26
+ stfd %f27, 104(%r1) # save F27
+ stfd %f28, 112(%r1) # save F28
+ stfd %f29, 120(%r1) # save F29
+ stfd %f30, 128(%r1) # save F30
+ stfd %f31, 136(%r1) # save F31
+ mffs %f0 # load FPSCR
+ stfd %f0, 144(%r1) # save FPSCR
+
+ stw %r13, 152(%r1) # save R13
+ stw %r14, 156(%r1) # save R14
+ stw %r15, 160(%r1) # save R15
+ stw %r16, 164(%r1) # save R16
+ stw %r17, 168(%r1) # save R17
+ stw %r18, 172(%r1) # save R18
+ stw %r19, 176(%r1) # save R19
+ stw %r20, 180(%r1) # save R20
+ stw %r21, 184(%r1) # save R21
+ stw %r22, 188(%r1) # save R22
+ stw %r23, 192(%r1) # save R23
+ stw %r24, 196(%r1) # save R24
+ stw %r25, 200(%r1) # save R25
+ stw %r26, 204(%r1) # save R26
+ stw %r27, 208(%r1) # save R27
+ stw %r28, 212(%r1) # save R28
+ stw %r29, 216(%r1) # save R29
+ stw %r30, 220(%r1) # save R30
+ stw %r31, 224(%r1) # save R31
+ stw %r3, 228(%r1) # save hidden
+
+ # save CR
+ mfcr %r0
+ stw %r0, 232(%r1)
+ # save LR
+ mflr %r0
+ stw %r0, 236(%r1)
+ # save LR as PC
+ stw %r0, 240(%r1)
+
+ # store RSP (pointing to context-data) in R7
+ mr %r7, %r1
+
+ # restore RSP (pointing to context-data) from R4
+ mr %r1, %r4
+
+ lfd %f14, 0(%r1) # restore F14
+ lfd %f15, 8(%r1) # restore F15
+ lfd %f16, 16(%r1) # restore F16
+ lfd %f17, 24(%r1) # restore F17
+ lfd %f18, 32(%r1) # restore F18
+ lfd %f19, 40(%r1) # restore F19
+ lfd %f20, 48(%r1) # restore F20
+ lfd %f21, 56(%r1) # restore F21
+ lfd %f22, 64(%r1) # restore F22
+ lfd %f23, 72(%r1) # restore F23
+ lfd %f24, 80(%r1) # restore F24
+ lfd %f25, 88(%r1) # restore F25
+ lfd %f26, 96(%r1) # restore F26
+ lfd %f27, 104(%r1) # restore F27
+ lfd %f28, 112(%r1) # restore F28
+ lfd %f29, 120(%r1) # restore F29
+ lfd %f30, 128(%r1) # restore F30
+ lfd %f31, 136(%r1) # restore F31
+ lfd %f0, 144(%r1) # load FPSCR
+ mtfsf 0xff, %f0 # restore FPSCR
+
+ lwz %r13, 152(%r1) # restore R13
+ lwz %r14, 156(%r1) # restore R14
+ lwz %r15, 160(%r1) # restore R15
+ lwz %r16, 164(%r1) # restore R16
+ lwz %r17, 168(%r1) # restore R17
+ lwz %r18, 172(%r1) # restore R18
+ lwz %r19, 176(%r1) # restore R19
+ lwz %r20, 180(%r1) # restore R20
+ lwz %r21, 184(%r1) # restore R21
+ lwz %r22, 188(%r1) # restore R22
+ lwz %r23, 192(%r1) # restore R23
+ lwz %r24, 196(%r1) # restore R24
+ lwz %r25, 200(%r1) # restore R25
+ lwz %r26, 204(%r1) # restore R26
+ lwz %r27, 208(%r1) # restore R27
+ lwz %r28, 212(%r1) # restore R28
+ lwz %r29, 216(%r1) # restore R29
+ lwz %r30, 220(%r1) # restore R30
+ lwz %r31, 224(%r1) # restore R31
+ lwz %r4, 228(%r1) # restore hidden
+
+ # restore CR
+ lwz %r0, 232(%r1)
+ mtcr %r0
+ # restore LR
+ lwz %r0, 236(%r1)
+ mtlr %r0
+ # ignore PC
+
+ # adjust stack
+ addi %r1, %r1, 244
+
+ # return transfer_t
+ stw %r7, 0(%r4)
+ stw %r5, 4(%r4)
+
+ # restore CTR
+ mtctr %r6
+
+ # jump to ontop-function
+ bctr
+.size ontop_fcontext, .-ontop_fcontext
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_macho_gas.S
new file mode 100644
index 0000000000..1eb5f9340c
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_macho_gas.S
@@ -0,0 +1,201 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.globl _ontop_fcontext
+.align 2
+_ontop_fcontext:
+ # reserve space on stack
+ subi r1, r1, 244
+
+ stfd f14, 0(r1) # save F14
+ stfd f15, 8(r1) # save F15
+ stfd f16, 16(r1) # save F16
+ stfd f17, 24(r1) # save F17
+ stfd f18, 32(r1) # save F18
+ stfd f19, 40(r1) # save F19
+ stfd f20, 48(r1) # save F20
+ stfd f21, 56(r1) # save F21
+ stfd f22, 64(r1) # save F22
+ stfd f23, 72(r1) # save F23
+ stfd f24, 80(r1) # save F24
+ stfd f25, 88(r1) # save F25
+ stfd f26, 96(r1) # save F26
+ stfd f27, 104(r1) # save F27
+ stfd f28, 112(r1) # save F28
+ stfd f29, 120(r1) # save F29
+ stfd f30, 128(r1) # save F30
+ stfd f31, 136(r1) # save F31
+ mffs f0 # load FPSCR
+ stfd f0, 144(r1) # save FPSCR
+
+ stw r13, 152(r1) # save R13
+ stw r14, 156(r1) # save R14
+ stw r15, 160(r1) # save R15
+ stw r16, 164(r1) # save R16
+ stw r17, 168(r1) # save R17
+ stw r18, 172(r1) # save R18
+ stw r19, 176(r1) # save R19
+ stw r20, 180(r1) # save R20
+ stw r21, 184(r1) # save R21
+ stw r22, 188(r1) # save R22
+ stw r23, 192(r1) # save R23
+ stw r24, 196(r1) # save R24
+ stw r25, 200(r1) # save R25
+ stw r26, 204(r1) # save R26
+ stw r27, 208(r1) # save R27
+ stw r28, 212(r1) # save R28
+ stw r29, 216(r1) # save R29
+ stw r30, 220(r1) # save R30
+ stw r31, 224(r1) # save R31
+ stw r3, 228(r1) # save hidden
+
+ # save CR
+ mfcr r0
+ stw r0, 232(r1)
+ # save LR
+ mflr r0
+ stw r0, 236(r1)
+ # save LR as PC
+ stw r0, 240(r1)
+
+ # store RSP (pointing to context-data) in R7
+ mr r7, r1
+
+ # restore RSP (pointing to context-data) from R4
+ mr r1, r4
+
+ lfd f14, 0(r1) # restore F14
+ lfd f15, 8(r1) # restore F15
+ lfd f16, 16(r1) # restore F16
+ lfd f17, 24(r1) # restore F17
+ lfd f18, 32(r1) # restore F18
+ lfd f19, 40(r1) # restore F19
+ lfd f20, 48(r1) # restore F20
+ lfd f21, 56(r1) # restore F21
+ lfd f22, 64(r1) # restore F22
+ lfd f23, 72(r1) # restore F23
+ lfd f24, 80(r1) # restore F24
+ lfd f25, 88(r1) # restore F25
+ lfd f26, 96(r1) # restore F26
+ lfd f27, 104(r1) # restore F27
+ lfd f28, 112(r1) # restore F28
+ lfd f29, 120(r1) # restore F29
+ lfd f30, 128(r1) # restore F30
+ lfd f31, 136(r1) # restore F31
+ lfd f0, 144(r1) # load FPSCR
+ mtfsf 0xff, f0 # restore FPSCR
+
+ lwz r13, 152(r1) # restore R13
+ lwz r14, 156(r1) # restore R14
+ lwz r15, 160(r1) # restore R15
+ lwz r16, 164(r1) # restore R16
+ lwz r17, 168(r1) # restore R17
+ lwz r18, 172(r1) # restore R18
+ lwz r19, 176(r1) # restore R19
+ lwz r20, 180(r1) # restore R20
+ lwz r21, 184(r1) # restore R21
+ lwz r22, 188(r1) # restore R22
+ lwz r23, 192(r1) # restore R23
+ lwz r24, 196(r1) # restore R24
+ lwz r25, 200(r1) # restore R25
+ lwz r26, 204(r1) # restore R26
+ lwz r27, 208(r1) # restore R27
+ lwz r28, 212(r1) # restore R28
+ lwz r29, 216(r1) # restore R29
+ lwz r30, 220(r1) # restore R30
+ lwz r31, 224(r1) # restore R31
+ lwz r4, 228(r1) # restore hidden
+
+ # restore CR
+ lwz r0, 232(r1)
+ mtcr r0
+ # restore LR
+ lwz r0, 236(r1)
+ mtlr r0
+ # ignore PC
+
+ # adjust stack
+ addi r1, r1, 244
+
+ # return transfer_t
+ stw r7, 0(r4)
+ stw r5, 4(r4)
+
+ # restore CTR
+ mtctr r6
+
+ # jump to ontop-function
+ bctr
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S
new file mode 100644
index 0000000000..a3c9fa2336
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S
@@ -0,0 +1,203 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | F14 | F15 | F16 | F17 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | F18 | F19 | F20 | F21 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | F22 | F23 | F24 | F25 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | F26 | F27 | F28 | F29 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | F30 | F31 | fpscr | R13 | R14 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 64 | | *
+ * ------------------------------------------------- *
+ * | 256 | | *
+ * ------------------------------------------------- *
+ * | DATA| | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+.globl .ontop_fcontext
+.globl ontop_fcontext[DS]
+.align 2
+.csect ontop_fcontext[DS]
+ontop_fcontext:
+ .long .ontop_fcontext
+.ontop_fcontext:
+ # reserve space on stack
+ subi r1, r1, 244
+
+ stfd f14, 0(r1) # save F14
+ stfd f15, 8(r1) # save F15
+ stfd f16, 16(r1) # save F16
+ stfd f17, 24(r1) # save F17
+ stfd f18, 32(r1) # save F18
+ stfd f19, 40(r1) # save F19
+ stfd f20, 48(r1) # save F20
+ stfd f21, 56(r1) # save F21
+ stfd f22, 64(r1) # save F22
+ stfd f23, 72(r1) # save F23
+ stfd f24, 80(r1) # save F24
+ stfd f25, 88(r1) # save F25
+ stfd f26, 96(r1) # save F26
+ stfd f27, 104(r1) # save F27
+ stfd f28, 112(r1) # save F28
+ stfd f29, 120(r1) # save F29
+ stfd f30, 128(r1) # save F30
+ stfd f31, 136(r1) # save F31
+ mffs f0 # load FPSCR
+ stfd f0, 144(r1) # save FPSCR
+
+ stw r13, 152(r1) # save R13
+ stw r14, 156(r1) # save R14
+ stw r15, 160(r1) # save R15
+ stw r16, 164(r1) # save R16
+ stw r17, 168(r1) # save R17
+ stw r18, 172(r1) # save R18
+ stw r19, 176(r1) # save R19
+ stw r20, 180(r1) # save R20
+ stw r21, 184(r1) # save R21
+ stw r22, 188(r1) # save R22
+ stw r23, 192(r1) # save R23
+ stw r24, 196(r1) # save R24
+ stw r25, 200(r1) # save R25
+ stw r26, 204(r1) # save R26
+ stw r27, 208(r1) # save R27
+ stw r28, 212(r1) # save R28
+ stw r29, 216(r1) # save R29
+ stw r30, 220(r1) # save R30
+ stw r31, 224(r1) # save R31
+ stw r3, 228(r1) # save hidden
+
+ # save CR
+ mfcr r0
+ stw r0, 232(r1)
+ # save LR
+ mflr r0
+ stw r0, 236(r1)
+ # save LR as PC
+ stw r0, 240(r1)
+
+ # store RSP (pointing to context-data) in R7
+ mr r7, r1
+
+ # restore RSP (pointing to context-data) from R4
+ mr r1, r4
+
+ lfd f14, 0(r1) # restore F14
+ lfd f15, 8(r1) # restore F15
+ lfd f16, 16(r1) # restore F16
+ lfd f17, 24(r1) # restore F17
+ lfd f18, 32(r1) # restore F18
+ lfd f19, 40(r1) # restore F19
+ lfd f20, 48(r1) # restore F20
+ lfd f21, 56(r1) # restore F21
+ lfd f22, 64(r1) # restore F22
+ lfd f23, 72(r1) # restore F23
+ lfd f24, 80(r1) # restore F24
+ lfd f25, 88(r1) # restore F25
+ lfd f26, 96(r1) # restore F26
+ lfd f27, 104(r1) # restore F27
+ lfd f28, 112(r1) # restore F28
+ lfd f29, 120(r1) # restore F29
+ lfd f30, 128(r1) # restore F30
+ lfd f31, 136(r1) # restore F31
+ lfd f0, 144(r1) # load FPSCR
+ mtfsf 0xff, f0 # restore FPSCR
+
+ lwz r13, 152(r1) # restore R13
+ lwz r14, 156(r1) # restore R14
+ lwz r15, 160(r1) # restore R15
+ lwz r16, 164(r1) # restore R16
+ lwz r17, 168(r1) # restore R17
+ lwz r18, 172(r1) # restore R18
+ lwz r19, 176(r1) # restore R19
+ lwz r20, 180(r1) # restore R20
+ lwz r21, 184(r1) # restore R21
+ lwz r22, 188(r1) # restore R22
+ lwz r23, 192(r1) # restore R23
+ lwz r24, 196(r1) # restore R24
+ lwz r25, 200(r1) # restore R25
+ lwz r26, 204(r1) # restore R26
+ lwz r27, 208(r1) # restore R27
+ lwz r28, 212(r1) # restore R28
+ lwz r29, 216(r1) # restore R29
+ lwz r30, 220(r1) # restore R30
+ lwz r31, 224(r1) # restore R31
+ lwz r4, 228(r1) # restore hidden
+
+ # restore CR
+ lwz r0, 232(r1)
+ mtcr r0
+ # restore LR
+ lwz r0, 236(r1)
+ mtlr r0
+ # ignore PC
+
+ # adjust stack
+ addi r1, r1, 244
+
+ # return transfer_t
+ stw r7, 0(r4)
+ stw r5, 4(r4)
+
+ # restore CTR
+ mtctr r6
+
+ # jump to ontop-function
+ bctr
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_elf_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_elf_gas.S
new file mode 100644
index 0000000000..14981c85a0
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_elf_gas.S
@@ -0,0 +1,240 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | TOC | R14 | R15 | R16 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | R17 | R18 | R19 | R20 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | R21 | R22 | R23 | R24 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | R25 | R26 | R27 | R28 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | R29 | R30 | R31 | hidden | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | CR | LR | PC | back-chain| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | cr saved | lr saved | compiler | linker | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | TOC saved | FCTX | DATA | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.globl ontop_fcontext
+#if _CALL_ELF == 2
+ .text
+ .align 2
+ontop_fcontext:
+ addis %r2, %r12, .TOC.-ontop_fcontext@ha
+ addi %r2, %r2, .TOC.-ontop_fcontext@l
+ .localentry ontop_fcontext, . - ontop_fcontext
+#else
+ .section ".opd","aw"
+ .align 3
+ontop_fcontext:
+# ifdef _CALL_LINUX
+ .quad .L.ontop_fcontext,.TOC.@tocbase,0
+ .type ontop_fcontext,@function
+ .text
+ .align 2
+.L.ontop_fcontext:
+# else
+ .hidden .ontop_fcontext
+ .globl .ontop_fcontext
+ .quad .ontop_fcontext,.TOC.@tocbase,0
+ .size ontop_fcontext,24
+ .type .ontop_fcontext,@function
+ .text
+ .align 2
+.ontop_fcontext:
+# endif
+#endif
+ # reserve space on stack
+ subi %r1, %r1, 184
+
+#if _CALL_ELF != 2
+ std %r2, 0(%r1) # save TOC
+#endif
+ std %r14, 8(%r1) # save R14
+ std %r15, 16(%r1) # save R15
+ std %r16, 24(%r1) # save R16
+ std %r17, 32(%r1) # save R17
+ std %r18, 40(%r1) # save R18
+ std %r19, 48(%r1) # save R19
+ std %r20, 56(%r1) # save R20
+ std %r21, 64(%r1) # save R21
+ std %r22, 72(%r1) # save R22
+ std %r23, 80(%r1) # save R23
+ std %r24, 88(%r1) # save R24
+ std %r25, 96(%r1) # save R25
+ std %r26, 104(%r1) # save R26
+ std %r27, 112(%r1) # save R27
+ std %r28, 120(%r1) # save R28
+ std %r29, 128(%r1) # save R29
+ std %r30, 136(%r1) # save R30
+ std %r31, 144(%r1) # save R31
+#if _CALL_ELF != 2
+ std %r3, 152(%r1) # save hidden
+#endif
+
+ # save CR
+ mfcr %r0
+ std %r0, 160(%r1)
+ # save LR
+ mflr %r0
+ std %r0, 168(%r1)
+ # save LR as PC
+ std %r0, 176(%r1)
+
+ # store RSP (pointing to context-data) in R7
+ mr %r7, %r1
+
+#if _CALL_ELF == 2
+ # restore RSP (pointing to context-data) from R3
+ mr %r1, %r3
+#else
+ # restore RSP (pointing to context-data) from R4
+ mr %r1, %r4
+#endif
+
+ ld %r14, 8(%r1) # restore R14
+ ld %r15, 16(%r1) # restore R15
+ ld %r16, 24(%r1) # restore R16
+ ld %r17, 32(%r1) # restore R17
+ ld %r18, 40(%r1) # restore R18
+ ld %r19, 48(%r1) # restore R19
+ ld %r20, 56(%r1) # restore R20
+ ld %r21, 64(%r1) # restore R21
+ ld %r22, 72(%r1) # restore R22
+ ld %r23, 80(%r1) # restore R23
+ ld %r24, 88(%r1) # restore R24
+ ld %r25, 96(%r1) # restore R25
+ ld %r26, 104(%r1) # restore R26
+ ld %r27, 112(%r1) # restore R27
+ ld %r28, 120(%r1) # restore R28
+ ld %r29, 128(%r1) # restore R29
+ ld %r30, 136(%r1) # restore R30
+ ld %r31, 144(%r1) # restore R31
+#if _CALL_ELF != 2
+ ld %r3, 152(%r1) # restore hidden
+#endif
+
+ # restore CR
+ ld %r0, 160(%r1)
+ mtcr %r0
+
+#if _CALL_ELF == 2
+ # restore CTR
+ mtctr %r5
+
+ # copy transfer_t into ontop_fn arg registers
+ mr %r3, %r7
+ # arg pointer already in %r4
+#else
+ # copy transfer_t into ontop_fn arg registers
+ mr %r4, %r7
+ # arg pointer already in %r5
+ # hidden arg already in %r3
+
+ # restore CTR
+ ld %r7, 0(%r6)
+ mtctr %r7
+ # restore TOC
+ ld %r2, 8(%r6)
+
+ # zero in r3 indicates first jump to context-function
+ cmpdi %r3, 0
+ beq use_entry_arg
+#endif
+
+return_to_ctx:
+ # restore LR
+ ld %r0, 168(%r1)
+ mtlr %r0
+
+ # adjust stack
+ addi %r1, %r1, 184
+
+ # jump to context
+ bctr
+
+#if _CALL_ELF == 2
+ .size ontop_fcontext, .-ontop_fcontext
+#else
+use_entry_arg:
+ # compute return-value struct address
+ # (passed has hidden arg to ontop_fn)
+ addi %r3, %r1, 8
+
+ # jump to context and update LR
+ bctrl
+
+ # restore CTR
+ ld %r7, 176(%r1)
+ mtctr %r7
+#if _CALL_ELF != 2
+ # restore TOC
+ ld %r2, 0(%r1)
+#endif
+
+ # copy returned transfer_t into entry_fn arg registers
+ ld %r3, 8(%r1)
+ ld %r4, 16(%r1)
+
+ b return_to_ctx
+# ifdef _CALL_LINUX
+ .size .ontop_fcontext, .-.L.ontop_fcontext
+# else
+ .size .ontop_fcontext, .-.ontop_fcontext
+# endif
+#endif
+
+
+/* Mark that we don't need executable stack. */
+.section .note.GNU-stack,"",%progbits
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_macho_gas.S
new file mode 100644
index 0000000000..5de8acd10c
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_macho_gas.S
@@ -0,0 +1,151 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*******************************************************
+ * *
+ * ------------------------------------------------- *
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+ * ------------------------------------------------- *
+ * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | *
+ * ------------------------------------------------- *
+ * | TOC | R14 | R15 | R16 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+ * ------------------------------------------------- *
+ * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | *
+ * ------------------------------------------------- *
+ * | R17 | R18 | R19 | R20 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+ * ------------------------------------------------- *
+ * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | *
+ * ------------------------------------------------- *
+ * | R21 | R22 | R23 | R24 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+ * ------------------------------------------------- *
+ * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | *
+ * ------------------------------------------------- *
+ * | R25 | R26 | R27 | R28 | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
+ * ------------------------------------------------- *
+ * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | *
+ * ------------------------------------------------- *
+ * | R29 | R30 | R31 | hidden | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | *
+ * ------------------------------------------------- *
+ * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | *
+ * ------------------------------------------------- *
+ * | CR | LR | PC | back-chain| *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | *
+ * ------------------------------------------------- *
+ * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | *
+ * ------------------------------------------------- *
+ * | cr saved | lr saved | compiler | linker | *
+ * ------------------------------------------------- *
+ * ------------------------------------------------- *
+ * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | *
+ * ------------------------------------------------- *
+ * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | *
+ * ------------------------------------------------- *
+ * | TOC saved | FCTX | DATA | | *
+ * ------------------------------------------------- *
+ * *
+ *******************************************************/
+
+.text
+.align 2
+.globl _ontop_fcontext
+
+_ontop_fcontext:
+ ; reserve space on stack
+ subi r1, r1, 184
+
+ std r14, 8(r1) ; save R14
+ std r15, 16(r1) ; save R15
+ std r16, 24(r1) ; save R16
+ std r17, 32(r1) ; save R17
+ std r18, 40(r1) ; save R18
+ std r19, 48(r1) ; save R19
+ std r20, 56(r1) ; save R20
+ std r21, 64(r1) ; save R21
+ std r22, 72(r1) ; save R22
+ std r23, 80(r1) ; save R23
+ std r24, 88(r1) ; save R24
+ std r25, 96(r1) ; save R25
+ std r26, 104(r1) ; save R26
+ std r27, 112(r1) ; save R27
+ std r28, 120(r1) ; save R28
+ std r29, 128(r1) ; save R29
+ std r30, 136(r1) ; save R30
+ std r31, 144(r1) ; save R31
+ std r3, 152(r1) ; save hidden
+
+ ; save CR
+ mfcr r0
+ std r0, 160(r1)
+ ; save LR
+ mflr r0
+ std r0, 168(r1)
+ ; save LR as PC
+ std r0, 176(r1)
+
+ ; store RSP (pointing to context-data) in R7
+ mr r7, r1
+
+ ; restore RSP (pointing to context-data) from R4
+ mr r1, r4
+
+ ld r14, 8(r1) ; restore R14
+ ld r15, 16(r1) ; restore R15
+ ld r16, 24(r1) ; restore R16
+ ld r17, 32(r1) ; restore R17
+ ld r18, 40(r1) ; restore R18
+ ld r19, 48(r1) ; restore R19
+ ld r20, 56(r1) ; restore R20
+ ld r21, 64(r1) ; restore R21
+ ld r22, 72(r1) ; restore R22
+ ld r23, 80(r1) ; restore R23
+ ld r24, 88(r1) ; restore R24
+ ld r25, 96(r1) ; restore R25
+ ld r26, 104(r1) ; restore R26
+ ld r27, 112(r1) ; restore R27
+ ld r28, 120(r1) ; restore R28
+ ld r29, 128(r1) ; restore R29
+ ld r30, 136(r1) ; restore R30
+ ld r31, 144(r1) ; restore R31
+ ld r4, 152(r1) ; restore hidden
+
+ ; restore CR
+ ld r0, 160(r1)
+ mtcr r0
+ ; restore LR
+ ld r0, 168(r1)
+ mtlr r0
+ ; ignore PC
+
+ ; adjust stack
+ addi r1, r1, 184
+
+ ; return transfer_t
+ std r7, 0(r4)
+ std r5, 8(r4)
+
+ ; restore CTR
+ mtctr r6
+
+ ; jump to context
+ bctr
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_xcoff_gas.S b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_xcoff_gas.S
new file mode 100644
index 0000000000..93f8c23427
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_ppc64_sysv_xcoff_gas.S
@@ -0,0 +1,83 @@
+.align 2
+.globl .ontop_fcontext
+.ontop_fcontext:
+ # reserve space on stack
+ subi 1, 1, 184
+
+ std 13, 0(1) # save R13
+ std 14, 8(1) # save R14
+ std 15, 16(1) # save R15
+ std 16, 24(1) # save R16
+ std 17, 32(1) # save R17
+ std 18, 40(1) # save R18
+ std 19, 48(1) # save R19
+ std 20, 56(1) # save R20
+ std 21, 64(1) # save R21
+ std 22, 72(1) # save R22
+ std 23, 80(1) # save R23
+ std 24, 88(1) # save R24
+ std 25, 96(1) # save R25
+ std 26, 104(1) # save R26
+ std 27, 112(1) # save R27
+ std 29, 120(1) # save R28
+ std 29, 128(1) # save R29
+ std 30, 136(1) # save R30
+ std 31, 144(1) # save R31
+ std 3, 152(1) # save hidden
+
+ # save CR
+ mfcr 0
+ std 0, 160(1)
+ # save LR
+ mflr 0
+ std 0, 168(1)
+ # save LR as PC
+ std 0, 176(1)
+
+ # store RSP (pointing to context-data) in R7
+ mr 7, 1
+
+ # restore RSP (pointing to context-data) from R4
+ mr 1, 4
+
+ ld 13, 0(1) # restore R13
+ ld 14, 8(1) # restore R14
+ ld 15, 16(1) # restore R15
+ ld 16, 24(1) # restore R16
+ ld 17, 32(1) # restore R17
+ ld 18, 40(1) # restore R18
+ ld 19, 48(1) # restore R19
+ ld 20, 56(1) # restore R20
+ ld 21, 64(1) # restore R21
+ ld 22, 72(1) # restore R22
+ ld 23, 80(1) # restore R23
+ ld 24, 88(1) # restore R24
+ ld 25, 96(1) # restore R25
+ ld 26, 104(1) # restore R26
+ ld 27, 112(1) # restore R27
+ ld 28, 120(1) # restore R28
+ ld 29, 128(1) # restore R29
+ ld 30, 136(1) # restore R30
+ ld 31, 144(1) # restore R31
+ ld 4, 152(1) # restore hidden
+
+ # restore CR
+ ld 0, 160(1)
+ mtcr 0
+ # restore LR
+ ld 0, 168(1)
+ mtlr 0
+ # ignore PC
+
+ # adjust stack
+ addi 1, 1, 184
+
+ # return transfer_t
+ std 7, 0(4)
+ std 5, 8(4)
+
+ # restore CTR
+ mtctr 6
+
+ # jump to context
+ bctr
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm b/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm
new file mode 100644
index 0000000000..02e040c9dc
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_gas.asm
@@ -0,0 +1,211 @@
+/*
+ Copyright Oliver Kowalke 2009.
+ Copyright Thomas Sailer 2013.
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
+*/
+
+/*************************************************************************************
+* ---------------------------------------------------------------------------------- *
+* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | *
+* ---------------------------------------------------------------------------------- *
+* | SEE registers (XMM6-XMM15) | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | *
+* ---------------------------------------------------------------------------------- *
+* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | *
+* ---------------------------------------------------------------------------------- *
+* | limit | base | R12 | R13 | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | *
+* ---------------------------------------------------------------------------------- *
+* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | *
+* ---------------------------------------------------------------------------------- *
+* | R14 | R15 | RDI | RSI | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | *
+* ---------------------------------------------------------------------------------- *
+* | RBX | RBP | hidden | RIP | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | *
+* ---------------------------------------------------------------------------------- *
+* | parameter area | *
+* ---------------------------------------------------------------------------------- *
+* ---------------------------------------------------------------------------------- *
+* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | *
+* ---------------------------------------------------------------------------------- *
+* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | *
+* ---------------------------------------------------------------------------------- *
+* | FCTX | DATA | | *
+* ---------------------------------------------------------------------------------- *
+**************************************************************************************/
+
+.file "ontop_x86_64_ms_pe_gas.asm"
+.text
+.p2align 4,,15
+.globl ontop_fcontext
+.def ontop_fcontext; .scl 2; .type 32; .endef
+.seh_proc ontop_fcontext
+ontop_fcontext:
+.seh_endprologue
+
+ leaq -0x118(%rsp), %rsp /* prepare stack */
+
+#if !defined(BOOST_USE_TSX)
+ /* save XMM storage */
+ movaps %xmm6, 0x0(%rsp)
+ movaps %xmm7, 0x10(%rsp)
+ movaps %xmm8, 0x20(%rsp)
+ movaps %xmm9, 0x30(%rsp)
+ movaps %xmm10, 0x40(%rsp)
+ movaps %xmm11, 0x50(%rsp)
+ movaps %xmm12, 0x60(%rsp)
+ movaps %xmm13, 0x70(%rsp)
+ movaps %xmm14, 0x80(%rsp)
+ movaps %xmm15, 0x90(%rsp)
+ stmxcsr 0xa0(%rsp) /* save MMX control- and status-word */
+ fnstcw 0xa4(%rsp) /* save x87 control-word */
+#endif
+
+ /* load NT_TIB */
+ movq %gs:(0x30), %r10
+ /* save fiber local storage */
+ movq 0x20(%r10), %rax
+ movq %rax, 0xb0(%rsp)
+ /* save current deallocation stack */
+ movq 0x1478(%r10), %rax
+ movq %rax, 0xb8(%rsp)
+ /* save current stack limit */
+ movq 0x10(%r10), %rax
+ movq %rax, 0xc0(%rsp)
+ /* save current stack base */
+ movq 0x08(%r10), %rax
+ movq %rax, 0xc8(%rsp)
+
+ movq %r12, 0xd0(%rsp) /* save R12 */
+ movq %r13, 0xd8(%rsp) /* save R13 */
+ movq %r14, 0xe0(%rsp) /* save R14 */
+ movq %r15, 0xe8(%rsp) /* save R15 */
+ movq %rdi, 0xf0(%rsp) /* save RDI */
+ movq %rsi, 0xf8(%rsp) /* save RSI */
+ movq %rbx, 0x100(%rsp) /* save RBX */
+ movq %rbp, 0x108(%rsp) /* save RBP */
+
+ movq %rcx, 0x110(%rsp) /* save hidden address of transport_t */
+
+ /* preserve RSP (pointing to context-data) in RCX */
+ movq %rsp, %rcx
+
+ /* restore RSP (pointing to context-data) from RDX */
+ movq %rdx, %rsp
+
+#if !defined(BOOST_USE_TSX)
+ /* restore XMM storage */
+ movaps 0x0(%rsp), %xmm6
+ movaps 0x10(%rsp), %xmm7
+ movaps 0x20(%rsp), %xmm8
+ movaps 0x30(%rsp), %xmm9
+ movaps 0x40(%rsp), %xmm10
+ movaps 0x50(%rsp), %xmm11
+ movaps 0x60(%rsp), %xmm12
+ movaps 0x70(%rsp), %xmm13
+ movaps 0x80(%rsp), %xmm14
+ movaps 0x90(%rsp), %xmm15
+ ldmxcsr 0xa0(%rsp) /* restore MMX control- and status-word */
+ fldcw 0xa4(%rsp) /* restore x87 control-word */
+#endif
+
+ /* load NT_TIB */
+ movq %gs:(0x30), %r10
+ /* restore fiber local storage */
+ movq 0xb0(%rsp), %rax
+ movq %rax, 0x20(%r10)
+ /* restore current deallocation stack */
+ movq 0xb8(%rsp), %rax
+ movq %rax, 0x1478(%r10)
+ /* restore current stack limit */
+ movq 0xc0(%rsp), %rax
+ movq %rax, 0x10(%r10)
+ /* restore current stack base */
+ movq 0xc8(%rsp), %rax
+ movq %rax, 0x08(%r10)
+
+ movq 0xd0(%rsp), %r12 /* restore R12 */
+ movq 0xd8(%rsp), %r13 /* restore R13 */
+ movq 0xe0(%rsp), %r14 /* restore R14 */
+ movq 0xe8(%rsp), %r15 /* restore R15 */
+ movq 0xf0(%rsp), %rdi /* restore RDI */
+ movq 0xf8(%rsp), %rsi /* restore RSI */
+ movq 0x100(%rsp), %rbx /* restore RBX */
+ movq 0x108(%rsp), %rbp /* restore RBP */
+
+ movq 0x110(%rsp), %rax /* restore hidden address of transport_t */
+
+ leaq 0x118(%rsp), %rsp /* prepare stack */
+
+ /* keep return-address on stack */
+
+ /* transport_t returned in RAX */
+ /* return parent fcontext_t */
+ movq %rcx, 0x0(%rax)
+ /* return data */
+ movq %r8, 0x8(%rax)
+
+ /* transport_t as 1.arg of context-function */
+ /* RCX contains address of returned (hidden) transfer_t */
+ movq %rax, %rcx
+ /* RDX contains address of passed transfer_t */
+ movq %rax, %rdx
+
+ /* indirect jump to context */
+ jmp *%r9
+.seh_endproc
+
+.section .drectve
+.ascii " -export:\"ontop_fcontext\""
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm b/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm
new file mode 100644
index 0000000000..b57dd15884
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_masm.asm
@@ -0,0 +1,207 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ----------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ----------------------------------------------------------------------------------
+; | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ----------------------------------------------------------------------------------
+; | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
+; ----------------------------------------------------------------------------------
+; | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
+; ----------------------------------------------------------------------------------
+; | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
+; ----------------------------------------------------------------------------------
+; | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
+; ----------------------------------------------------------------------------------
+; | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc |
+; ----------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
+; ----------------------------------------------------------------------------------
+; | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc |
+; ----------------------------------------------------------------------------------
+; | limit | base | R12 | R13 |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
+; ----------------------------------------------------------------------------------
+; | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc |
+; ----------------------------------------------------------------------------------
+; | R14 | R15 | RDI | RSI |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
+; ----------------------------------------------------------------------------------
+; | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c |
+; ----------------------------------------------------------------------------------
+; | RBX | RBP | hidden | RIP |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
+; ----------------------------------------------------------------------------------
+; | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c |
+; ----------------------------------------------------------------------------------
+; | parameter area |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
+; ----------------------------------------------------------------------------------
+; | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c |
+; ----------------------------------------------------------------------------------
+; | FCTX | DATA | |
+; ----------------------------------------------------------------------------------
+
+.code
+
+ontop_fcontext PROC BOOST_CONTEXT_EXPORT FRAME
+ .endprolog
+
+ ; prepare stack
+ lea rsp, [rsp-0118h]
+
+IFNDEF BOOST_USE_TSX
+ ; save XMM storage
+ movaps [rsp], xmm6
+ movaps [rsp+010h], xmm7
+ movaps [rsp+020h], xmm8
+ movaps [rsp+030h], xmm9
+ movaps [rsp+040h], xmm10
+ movaps [rsp+050h], xmm11
+ movaps [rsp+060h], xmm12
+ movaps [rsp+070h], xmm13
+ movaps [rsp+080h], xmm14
+ movaps [rsp+090h], xmm15
+ ; save MMX control- and status-word
+ stmxcsr [rsp+0a0h]
+ ; save x87 control-word
+ fnstcw [rsp+0a4h]
+ENDIF
+
+ ; load NT_TIB
+ mov r10, gs:[030h]
+ ; save fiber local storage
+ mov rax, [r10+020h]
+ mov [rsp+0b0h], rax
+ ; save current deallocation stack
+ mov rax, [r10+01478h]
+ mov [rsp+0b8h], rax
+ ; save current stack limit
+ mov rax, [r10+010h]
+ mov [rsp+0c0h], rax
+ ; save current stack base
+ mov rax, [r10+08h]
+ mov [rsp+0c8h], rax
+
+ mov [rsp+0d0h], r12 ; save R12
+ mov [rsp+0d8h], r13 ; save R13
+ mov [rsp+0e0h], r14 ; save R14
+ mov [rsp+0e8h], r15 ; save R15
+ mov [rsp+0f0h], rdi ; save RDI
+ mov [rsp+0f8h], rsi ; save RSI
+ mov [rsp+0100h], rbx ; save RBX
+ mov [rsp+0108h], rbp ; save RBP
+
+ mov [rsp+0110h], rcx ; save hidden address of transport_t
+
+ ; preserve RSP (pointing to context-data) in RCX
+ mov rcx, rsp
+
+ ; restore RSP (pointing to context-data) from RDX
+ mov rsp, rdx
+
+IFNDEF BOOST_USE_TSX
+ ; restore XMM storage
+ movaps xmm6, [rsp]
+ movaps xmm7, [rsp+010h]
+ movaps xmm8, [rsp+020h]
+ movaps xmm9, [rsp+030h]
+ movaps xmm10, [rsp+040h]
+ movaps xmm11, [rsp+050h]
+ movaps xmm12, [rsp+060h]
+ movaps xmm13, [rsp+070h]
+ movaps xmm14, [rsp+080h]
+ movaps xmm15, [rsp+090h]
+ ; restore MMX control- and status-word
+ ldmxcsr [rsp+0a0h]
+ ; save x87 control-word
+ fldcw [rsp+0a4h]
+ENDIF
+
+ ; load NT_TIB
+ mov r10, gs:[030h]
+ ; restore fiber local storage
+ mov rax, [rsp+0b0h]
+ mov [r10+020h], rax
+ ; restore current deallocation stack
+ mov rax, [rsp+0b8h]
+ mov [r10+01478h], rax
+ ; restore current stack limit
+ mov rax, [rsp+0c0h]
+ mov [r10+010h], rax
+ ; restore current stack base
+ mov rax, [rsp+0c8h]
+ mov [r10+08h], rax
+
+ mov r12, [rsp+0d0h] ; restore R12
+ mov r13, [rsp+0d8h] ; restore R13
+ mov r14, [rsp+0e0h] ; restore R14
+ mov r15, [rsp+0e8h] ; restore R15
+ mov rdi, [rsp+0f0h] ; restore RDI
+ mov rsi, [rsp+0f8h] ; restore RSI
+ mov rbx, [rsp+0100h] ; restore RBX
+ mov rbp, [rsp+0108h] ; restore RBP
+
+ mov rax, [rsp+0110h] ; restore hidden address of transport_t
+
+ ; prepare stack
+ lea rsp, [rsp+0118h]
+
+ ; keep return-address on stack
+
+ ; transport_t returned in RAX
+ ; return parent fcontext_t
+ mov [rax], rcx
+ ; return data
+ mov [rax+08h], r8
+
+ ; transport_t as 1.arg of context-function
+ ; RCX contains address of returned (hidden) transfer_t
+ mov rcx, rax
+ ; RDX contains address of passed transfer_t
+ mov rdx, rax
+
+ ; indirect jump to context
+ jmp r9
+ontop_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_masm.masm b/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_masm.masm
new file mode 100644
index 0000000000..b57dd15884
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/asm/ontop_x86_64_ms_pe_masm.masm
@@ -0,0 +1,207 @@
+
+; Copyright Oliver Kowalke 2009.
+; Distributed under the Boost Software License, Version 1.0.
+; (See accompanying file LICENSE_1_0.txt or copy at
+; http://www.boost.org/LICENSE_1_0.txt)
+
+; ----------------------------------------------------------------------------------
+; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+; ----------------------------------------------------------------------------------
+; | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
+; ----------------------------------------------------------------------------------
+; | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
+; ----------------------------------------------------------------------------------
+; | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
+; ----------------------------------------------------------------------------------
+; | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
+; ----------------------------------------------------------------------------------
+; | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c |
+; ----------------------------------------------------------------------------------
+; | SEE registers (XMM6-XMM15) |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
+; ----------------------------------------------------------------------------------
+; | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc |
+; ----------------------------------------------------------------------------------
+; | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
+; ----------------------------------------------------------------------------------
+; | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc |
+; ----------------------------------------------------------------------------------
+; | limit | base | R12 | R13 |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
+; ----------------------------------------------------------------------------------
+; | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc |
+; ----------------------------------------------------------------------------------
+; | R14 | R15 | RDI | RSI |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
+; ----------------------------------------------------------------------------------
+; | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c |
+; ----------------------------------------------------------------------------------
+; | RBX | RBP | hidden | RIP |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 |
+; ----------------------------------------------------------------------------------
+; | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c |
+; ----------------------------------------------------------------------------------
+; | parameter area |
+; ----------------------------------------------------------------------------------
+; ----------------------------------------------------------------------------------
+; | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |
+; ----------------------------------------------------------------------------------
+; | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c |
+; ----------------------------------------------------------------------------------
+; | FCTX | DATA | |
+; ----------------------------------------------------------------------------------
+
+.code
+
+ontop_fcontext PROC BOOST_CONTEXT_EXPORT FRAME
+ .endprolog
+
+ ; prepare stack
+ lea rsp, [rsp-0118h]
+
+IFNDEF BOOST_USE_TSX
+ ; save XMM storage
+ movaps [rsp], xmm6
+ movaps [rsp+010h], xmm7
+ movaps [rsp+020h], xmm8
+ movaps [rsp+030h], xmm9
+ movaps [rsp+040h], xmm10
+ movaps [rsp+050h], xmm11
+ movaps [rsp+060h], xmm12
+ movaps [rsp+070h], xmm13
+ movaps [rsp+080h], xmm14
+ movaps [rsp+090h], xmm15
+ ; save MMX control- and status-word
+ stmxcsr [rsp+0a0h]
+ ; save x87 control-word
+ fnstcw [rsp+0a4h]
+ENDIF
+
+ ; load NT_TIB
+ mov r10, gs:[030h]
+ ; save fiber local storage
+ mov rax, [r10+020h]
+ mov [rsp+0b0h], rax
+ ; save current deallocation stack
+ mov rax, [r10+01478h]
+ mov [rsp+0b8h], rax
+ ; save current stack limit
+ mov rax, [r10+010h]
+ mov [rsp+0c0h], rax
+ ; save current stack base
+ mov rax, [r10+08h]
+ mov [rsp+0c8h], rax
+
+ mov [rsp+0d0h], r12 ; save R12
+ mov [rsp+0d8h], r13 ; save R13
+ mov [rsp+0e0h], r14 ; save R14
+ mov [rsp+0e8h], r15 ; save R15
+ mov [rsp+0f0h], rdi ; save RDI
+ mov [rsp+0f8h], rsi ; save RSI
+ mov [rsp+0100h], rbx ; save RBX
+ mov [rsp+0108h], rbp ; save RBP
+
+ mov [rsp+0110h], rcx ; save hidden address of transport_t
+
+ ; preserve RSP (pointing to context-data) in RCX
+ mov rcx, rsp
+
+ ; restore RSP (pointing to context-data) from RDX
+ mov rsp, rdx
+
+IFNDEF BOOST_USE_TSX
+ ; restore XMM storage
+ movaps xmm6, [rsp]
+ movaps xmm7, [rsp+010h]
+ movaps xmm8, [rsp+020h]
+ movaps xmm9, [rsp+030h]
+ movaps xmm10, [rsp+040h]
+ movaps xmm11, [rsp+050h]
+ movaps xmm12, [rsp+060h]
+ movaps xmm13, [rsp+070h]
+ movaps xmm14, [rsp+080h]
+ movaps xmm15, [rsp+090h]
+ ; restore MMX control- and status-word
+ ldmxcsr [rsp+0a0h]
+ ; save x87 control-word
+ fldcw [rsp+0a4h]
+ENDIF
+
+ ; load NT_TIB
+ mov r10, gs:[030h]
+ ; restore fiber local storage
+ mov rax, [rsp+0b0h]
+ mov [r10+020h], rax
+ ; restore current deallocation stack
+ mov rax, [rsp+0b8h]
+ mov [r10+01478h], rax
+ ; restore current stack limit
+ mov rax, [rsp+0c0h]
+ mov [r10+010h], rax
+ ; restore current stack base
+ mov rax, [rsp+0c8h]
+ mov [r10+08h], rax
+
+ mov r12, [rsp+0d0h] ; restore R12
+ mov r13, [rsp+0d8h] ; restore R13
+ mov r14, [rsp+0e0h] ; restore R14
+ mov r15, [rsp+0e8h] ; restore R15
+ mov rdi, [rsp+0f0h] ; restore RDI
+ mov rsi, [rsp+0f8h] ; restore RSI
+ mov rbx, [rsp+0100h] ; restore RBX
+ mov rbp, [rsp+0108h] ; restore RBP
+
+ mov rax, [rsp+0110h] ; restore hidden address of transport_t
+
+ ; prepare stack
+ lea rsp, [rsp+0118h]
+
+ ; keep return-address on stack
+
+ ; transport_t returned in RAX
+ ; return parent fcontext_t
+ mov [rax], rcx
+ ; return data
+ mov [rax+08h], r8
+
+ ; transport_t as 1.arg of context-function
+ ; RCX contains address of returned (hidden) transfer_t
+ mov rcx, rax
+ ; RDX contains address of passed transfer_t
+ mov rdx, rax
+
+ ; indirect jump to context
+ jmp r9
+ontop_fcontext ENDP
+END
diff --git a/contrib/restricted/boost/libs/context/src/continuation.cpp b/contrib/restricted/boost/libs/context/src/continuation.cpp
new file mode 100644
index 0000000000..0779baaba8
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/continuation.cpp
@@ -0,0 +1,60 @@
+
+// Copyright Oliver Kowalke 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#if defined(BOOST_USE_UCONTEXT)
+#include "boost/context/continuation_ucontext.hpp"
+#elif defined(BOOST_USE_WINFIB)
+#include "boost/context/continuation_winfib.hpp"
+#else
+#include "boost/context/execution_context.hpp"
+#endif
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace context {
+namespace detail {
+
+// zero-initialization
+thread_local activation_record * current_rec;
+thread_local static std::size_t counter;
+
+// schwarz counter
+activation_record_initializer::activation_record_initializer() noexcept {
+ if ( 0 == counter++) {
+ current_rec = new activation_record();
+ }
+}
+
+activation_record_initializer::~activation_record_initializer() {
+ if ( 0 == --counter) {
+ BOOST_ASSERT( current_rec->is_main_context() );
+ delete current_rec;
+ }
+}
+
+}
+
+namespace detail {
+
+activation_record *&
+activation_record::current() noexcept {
+ // initialized the first time control passes; per thread
+ thread_local static activation_record_initializer initializer;
+ return current_rec;
+}
+
+}
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/dummy.cpp b/contrib/restricted/boost/libs/context/src/dummy.cpp
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/dummy.cpp
diff --git a/contrib/restricted/boost/libs/context/src/execution_context.cpp b/contrib/restricted/boost/libs/context/src/execution_context.cpp
new file mode 100644
index 0000000000..fc593ecb03
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/execution_context.cpp
@@ -0,0 +1,69 @@
+
+// Copyright Oliver Kowalke 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include "boost/context/detail/config.hpp"
+
+#if ! defined(BOOST_CONTEXT_NO_CXX11)
+
+#include "boost/context/execution_context.hpp"
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace context {
+
+#if !defined(BOOST_NO_CXX11_THREAD_LOCAL)
+
+namespace detail {
+
+ecv1_activation_record::ptr_t &
+ecv1_activation_record::current() noexcept {
+ thread_local static ptr_t current;
+ return current;
+}
+
+// zero-initialization
+thread_local static std::size_t counter;
+
+// schwarz counter
+ecv1_activation_record_initializer::ecv1_activation_record_initializer() noexcept {
+ if ( 0 == counter++) {
+ ecv1_activation_record::current().reset( new ecv1_activation_record() );
+ }
+}
+
+ecv1_activation_record_initializer::~ecv1_activation_record_initializer() {
+ if ( 0 == --counter) {
+ BOOST_ASSERT( ecv1_activation_record::current()->is_main_context() );
+ delete ecv1_activation_record::current().detach();
+ }
+}
+
+}
+
+namespace v1 {
+
+execution_context
+execution_context::current() noexcept {
+ // initialized the first time control passes; per thread
+ thread_local static detail::ecv1_activation_record_initializer initializer;
+ return execution_context();
+}
+
+}
+
+#endif
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
+
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/fiber.cpp b/contrib/restricted/boost/libs/context/src/fiber.cpp
new file mode 100644
index 0000000000..9bb4ba6e03
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/fiber.cpp
@@ -0,0 +1,58 @@
+
+// Copyright Oliver Kowalke 2017.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#if defined(BOOST_USE_UCONTEXT)
+#include "boost/context/fiber_ucontext.hpp"
+#elif defined(BOOST_USE_WINFIB)
+#include "boost/context/fiber_winfib.hpp"
+#endif
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace boost {
+namespace context {
+namespace detail {
+
+// zero-initialization
+thread_local fiber_activation_record * current_rec;
+thread_local static std::size_t counter;
+
+// schwarz counter
+fiber_activation_record_initializer::fiber_activation_record_initializer() noexcept {
+ if ( 0 == counter++) {
+ current_rec = new fiber_activation_record();
+ }
+}
+
+fiber_activation_record_initializer::~fiber_activation_record_initializer() {
+ if ( 0 == --counter) {
+ BOOST_ASSERT( current_rec->is_main_context() );
+ delete current_rec;
+ }
+}
+
+}
+
+namespace detail {
+
+fiber_activation_record *&
+fiber_activation_record::current() noexcept {
+ // initialized the first time control passes; per thread
+ thread_local static fiber_activation_record_initializer initializer;
+ return current_rec;
+}
+
+}
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
diff --git a/contrib/restricted/boost/libs/context/src/untested.cpp b/contrib/restricted/boost/libs/context/src/untested.cpp
new file mode 100644
index 0000000000..d6e20868c5
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/untested.cpp
@@ -0,0 +1,7 @@
+
+// Copyright Oliver Kowalke 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#error "! code for this platform is untested - please remove this file from build/Jamfile.v2 and report the test-result on boost-track !"
diff --git a/contrib/restricted/boost/libs/context/src/windows/stack_traits.cpp b/contrib/restricted/boost/libs/context/src/windows/stack_traits.cpp
new file mode 100644
index 0000000000..14016b1b3a
--- /dev/null
+++ b/contrib/restricted/boost/libs/context/src/windows/stack_traits.cpp
@@ -0,0 +1,116 @@
+
+// Copyright Oliver Kowalke 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include "boost/context/stack_traits.hpp"
+
+extern "C" {
+#include <windows.h>
+}
+
+//#if defined (BOOST_WINDOWS) || _POSIX_C_SOURCE >= 200112L
+
+#include <algorithm>
+#include <cmath>
+#include <cstddef>
+#include <cstring>
+#include <stdexcept>
+
+#include <boost/assert.hpp>
+#include <boost/context/detail/config.hpp>
+#if defined(BOOST_NO_CXX11_HDR_MUTEX)
+# include <boost/thread.hpp>
+#else
+# include <mutex>
+#endif
+
+#include <boost/context/stack_context.hpp>
+
+// x86_64
+// test x86_64 before i386 because icc might
+// define __i686__ for x86_64 too
+#if defined(__x86_64__) || defined(__x86_64) \
+ || defined(__amd64__) || defined(__amd64) \
+ || defined(_M_X64) || defined(_M_AMD64)
+
+// Windows seams not to provide a constant or function
+// telling the minimal stacksize
+# define MIN_STACKSIZE 8 * 1024
+#else
+# define MIN_STACKSIZE 4 * 1024
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace {
+
+void system_info_( SYSTEM_INFO * si) BOOST_NOEXCEPT_OR_NOTHROW {
+ ::GetSystemInfo( si);
+}
+
+SYSTEM_INFO system_info() BOOST_NOEXCEPT_OR_NOTHROW {
+ static SYSTEM_INFO si;
+#if defined(BOOST_NO_CXX11_HDR_MUTEX)
+ static boost::once_flag flag = BOOST_ONCE_INIT;
+ boost::call_once( flag, static_cast< void(*)( SYSTEM_INFO *) >( system_info_), & si);
+#else
+ static std::once_flag flag;
+ std::call_once( flag, static_cast< void(*)( SYSTEM_INFO *) >( system_info_), & si);
+#endif
+ return si;
+}
+
+std::size_t pagesize() BOOST_NOEXCEPT_OR_NOTHROW {
+ return static_cast< std::size_t >( system_info().dwPageSize);
+}
+
+}
+
+namespace boost {
+namespace context {
+
+// Windows seams not to provide a limit for the stacksize
+// libcoco uses 32k+4k bytes as minimum
+BOOST_CONTEXT_DECL
+bool
+stack_traits::is_unbounded() BOOST_NOEXCEPT_OR_NOTHROW {
+ return true;
+}
+
+BOOST_CONTEXT_DECL
+std::size_t
+stack_traits::page_size() BOOST_NOEXCEPT_OR_NOTHROW {
+ return pagesize();
+}
+
+BOOST_CONTEXT_DECL
+std::size_t
+stack_traits::default_size() BOOST_NOEXCEPT_OR_NOTHROW {
+ return 128 * 1024;
+}
+
+// because Windows seams not to provide a limit for minimum stacksize
+BOOST_CONTEXT_DECL
+std::size_t
+stack_traits::minimum_size() BOOST_NOEXCEPT_OR_NOTHROW {
+ return MIN_STACKSIZE;
+}
+
+// because Windows seams not to provide a limit for maximum stacksize
+// maximum_size() can never be called (pre-condition ! is_unbounded() )
+BOOST_CONTEXT_DECL
+std::size_t
+stack_traits::maximum_size() BOOST_NOEXCEPT_OR_NOTHROW {
+ BOOST_ASSERT( ! is_unbounded() );
+ return 1 * 1024 * 1024 * 1024; // 1GB
+}
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
diff --git a/contrib/restricted/boost/libs/coroutine/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/coroutine/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..e36f8b9042
--- /dev/null
+++ b/contrib/restricted/boost/libs/coroutine/.yandex_meta/licenses.list.txt
@@ -0,0 +1,36 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Oliver Kowalke 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/coroutine/src/windows/stack_traits.cpp b/contrib/restricted/boost/libs/coroutine/src/windows/stack_traits.cpp
new file mode 100644
index 0000000000..bdf417a745
--- /dev/null
+++ b/contrib/restricted/boost/libs/coroutine/src/windows/stack_traits.cpp
@@ -0,0 +1,114 @@
+
+// Copyright Oliver Kowalke 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include "boost/coroutine/stack_traits.hpp"
+
+extern "C" {
+#include <windows.h>
+}
+
+//#if defined (BOOST_WINDOWS) || _POSIX_C_SOURCE >= 200112L
+
+#include <algorithm>
+#include <cmath>
+#include <cstddef>
+#include <cstring>
+#include <stdexcept>
+
+#include <boost/assert.hpp>
+#include <boost/coroutine/detail/config.hpp>
+#include <boost/thread.hpp>
+
+#include <boost/coroutine/stack_context.hpp>
+
+// x86_64
+// test x86_64 before i386 because icc might
+// define __i686__ for x86_64 too
+#if defined(__x86_64__) || defined(__x86_64) \
+ || defined(__amd64__) || defined(__amd64) \
+ || defined(_M_X64) || defined(_M_AMD64)
+
+// Windows seams not to provide a constant or function
+// telling the minimal stacksize
+# define MIN_STACKSIZE 8 * 1024
+#else
+# define MIN_STACKSIZE 4 * 1024
+#endif
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_PREFIX
+#endif
+
+namespace {
+
+void system_info_( SYSTEM_INFO * si)
+{ ::GetSystemInfo( si); }
+
+SYSTEM_INFO system_info()
+{
+ static SYSTEM_INFO si;
+ static boost::once_flag flag;
+ boost::call_once( flag, static_cast< void(*)( SYSTEM_INFO *) >( system_info_), & si);
+ return si;
+}
+
+std::size_t pagesize()
+{ return static_cast< std::size_t >( system_info().dwPageSize); }
+
+std::size_t page_count( std::size_t stacksize)
+{
+ return static_cast< std::size_t >(
+ std::floor(
+ static_cast< float >( stacksize) / pagesize() ) );
+}
+
+}
+
+namespace boost {
+namespace coroutines {
+
+// Windows seams not to provide a limit for the stacksize
+// libcoco uses 32k+4k bytes as minimum
+bool
+stack_traits::is_unbounded() BOOST_NOEXCEPT
+{ return true; }
+
+std::size_t
+stack_traits::page_size() BOOST_NOEXCEPT
+{ return pagesize(); }
+
+std::size_t
+stack_traits::default_size() BOOST_NOEXCEPT
+{
+ std::size_t size = 64 * 1024; // 64 kB
+ if ( is_unbounded() )
+ return (std::max)( size, minimum_size() );
+
+ BOOST_ASSERT( maximum_size() >= minimum_size() );
+ return maximum_size() == minimum_size()
+ ? minimum_size()
+ : ( std::min)( size, maximum_size() );
+}
+
+// because Windows seams not to provide a limit for minimum stacksize
+std::size_t
+stack_traits::minimum_size() BOOST_NOEXCEPT
+{ return MIN_STACKSIZE; }
+
+// because Windows seams not to provide a limit for maximum stacksize
+// maximum_size() can never be called (pre-condition ! is_unbounded() )
+std::size_t
+stack_traits::maximum_size() BOOST_NOEXCEPT
+{
+ BOOST_ASSERT( ! is_unbounded() );
+ return 1 * 1024 * 1024 * 1024; // 1GB
+}
+
+}}
+
+#ifdef BOOST_HAS_ABI_HEADERS
+# include BOOST_ABI_SUFFIX
+#endif
diff --git a/contrib/restricted/boost/libs/date_time/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/date_time/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..06ca92039d
--- /dev/null
+++ b/contrib/restricted/boost/libs/date_time/.yandex_meta/licenses.list.txt
@@ -0,0 +1,50 @@
+====================BSL-1.0====================
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Subject to the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland, Bart Garst
+ * $Date$
+
+
+====================COPYRIGHT====================
+/* Copyright (c) 2002-2005 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/date_time/src/gregorian/gregorian_types.cpp b/contrib/restricted/boost/libs/date_time/src/gregorian/gregorian_types.cpp
new file mode 100644
index 0000000000..7dd7f22bfc
--- /dev/null
+++ b/contrib/restricted/boost/libs/date_time/src/gregorian/gregorian_types.cpp
@@ -0,0 +1,62 @@
+/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+
+/** @defgroup date_basics Date Basics
+ This page summarizes some of the key user types and functions needed
+ to write programs using the gregorian date system. This is not a
+ comprehensive list, but rather some key types to start exploring.
+
+
+**/
+
+/** @defgroup date_alg Date Algorithms / Generators
+ Date algorithms or generators are tools for generating other dates or
+ schedules of dates. A generator function starts with some part of a
+ date such as a month and day and is supplied another part to then
+ generate a final date.
+
+**/
+
+/** @defgroup date_format Date Formatting
+ The functions on these page are some of the key formatting functions
+ for dates.
+**/
+
+
+//File doesn't have a current purpose except to generate docs
+//and keep it changeable without recompiles
+/*! @example days_alive.cpp
+ Calculate the number of days you have been living using durations and dates.
+*/
+/*! @example days_till_new_year.cpp
+ Calculate the number of days till new years
+*/
+/*! @example print_month.cpp
+ Simple utility to print out days of the month with the days of a month. Demontstrates date iteration (date_time::date_itr).
+*/
+/*! @example localization.cpp
+ An example showing localized stream-based I/O.
+*/
+/*! @example dates_as_strings.cpp
+ Various parsing and output of strings (mostly supported for
+ compilers that do not support localized streams).
+*/
+/*! @example period_calc.cpp
+ Calculates if a date is in an 'irregular' collection of periods using
+ period calculation functions.
+*/
+/*! @example print_holidays.cpp
+ This is an example of using functors to define a holiday schedule
+ */
+/*! @example localization.cpp
+ Demonstrates the use of facets to localize date output for Gregorian dates.
+ */
+
+
+
diff --git a/contrib/restricted/boost/libs/date_time/src/posix_time/posix_time_types.cpp b/contrib/restricted/boost/libs/date_time/src/posix_time/posix_time_types.cpp
new file mode 100644
index 0000000000..4395301040
--- /dev/null
+++ b/contrib/restricted/boost/libs/date_time/src/posix_time/posix_time_types.cpp
@@ -0,0 +1,35 @@
+
+/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
+ * Use, modification and distribution is subject to the
+ * Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+ * Author: Jeff Garland
+ * $Date$
+ */
+
+
+//File doesn't have a current purpose except to generate docs
+//and keep it changeable without recompiles
+
+/** @defgroup time_basics Time Basics
+
+**/
+
+/** @defgroup time_format Time Formatting
+
+**/
+
+
+
+/*! @example local_utc_conversion.cpp
+ Demonstrate utc to local and local to utc calculations including dst.
+*/
+/*! @example time_periods.cpp Demonstrate some simple uses of time periods.
+*/
+/*! @example print_hours.cpp Demonstrate time iteration, clock retrieval, and simple calculation.
+ */
+/*! @example time_math.cpp Various types of calculations with times and time durations.
+ */
+
+
+
diff --git a/contrib/restricted/boost/libs/exception/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/exception/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..ef636c0de3
--- /dev/null
+++ b/contrib/restricted/boost/libs/exception/.yandex_meta/licenses.list.txt
@@ -0,0 +1,33 @@
+====================BSL-1.0====================
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/filesystem/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/filesystem/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..65af627257
--- /dev/null
+++ b/contrib/restricted/boost/libs/filesystem/.yandex_meta/licenses.list.txt
@@ -0,0 +1,80 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+// at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright 2002-2005 Beman Dawes
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
+
+
+====================COPYRIGHT====================
+// Copyright 2002-2009, 2014 Beman Dawes
+// Copyright 2001 Dietmar Kuehl
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2008
+// Copyright Vicente J. Botet Escriba 2009
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2008, 2009
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2009
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2010
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/iostreams/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/iostreams/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..49ffba18e1
--- /dev/null
+++ b/contrib/restricted/boost/libs/iostreams/.yandex_meta/licenses.list.txt
@@ -0,0 +1,67 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2005-2007 Jonathan Turkanis
+// (C) Copyright Jonathan Graehl 2004.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Jorge Lodos 2008.
+// (C) Copyright Jonathan Turkanis 2003.
+// (C) Copyright Craig Henderson 2002. 'boost/memmap.hpp' from sandbox
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Milan Svoboda 2008.
+// Originally developed under the fusecompress project.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================COPYRIGHT====================
+// (C) Copyright Thorsten Ottosen 2005
+// (C) Copyright Howard Hinnant 2004
+// (C) Copyright Jonathan Turkanis 2004
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/iostreams/CMakeLists.txt b/contrib/restricted/boost/libs/iostreams/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/restricted/boost/libs/iostreams/CMakeLists.txt
+++ b/contrib/restricted/boost/libs/iostreams/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/boost/libs/iostreams/src/bzip2.cpp b/contrib/restricted/boost/libs/iostreams/src/bzip2.cpp
new file mode 100644
index 0000000000..af80cd2f94
--- /dev/null
+++ b/contrib/restricted/boost/libs/iostreams/src/bzip2.cpp
@@ -0,0 +1,168 @@
+// (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
+// (C) Copyright 2003-2007 Jonathan Turkanis
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// To configure Boost to work with libbz2, see the
+// installation instructions here:
+// http://boost.org/libs/iostreams/doc/index.html?path=7
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/bzip2.hpp>
+#include "bzlib.h" // Julian Seward's "bzip.h" header.
+ // To configure Boost to work with libbz2, see the
+ // installation instructions here:
+ // http://boost.org/libs/iostreams/doc/index.html?path=7
+
+namespace boost { namespace iostreams {
+
+namespace bzip2 {
+
+ // Status codes
+
+const int ok = BZ_OK;
+const int run_ok = BZ_RUN_OK;
+const int flush_ok = BZ_FLUSH_OK;
+const int finish_ok = BZ_FINISH_OK;
+const int stream_end = BZ_STREAM_END;
+const int sequence_error = BZ_SEQUENCE_ERROR;
+const int param_error = BZ_PARAM_ERROR;
+const int mem_error = BZ_MEM_ERROR;
+const int data_error = BZ_DATA_ERROR;
+const int data_error_magic = BZ_DATA_ERROR_MAGIC;
+const int io_error = BZ_IO_ERROR;
+const int unexpected_eof = BZ_UNEXPECTED_EOF;
+const int outbuff_full = BZ_OUTBUFF_FULL;
+const int config_error = BZ_CONFIG_ERROR;
+
+ // Action codes
+
+const int finish = BZ_FINISH;
+const int run = BZ_RUN;
+
+} // End namespace bzip2.
+
+//------------------Implementation of bzip2_error-----------------------------//
+
+bzip2_error::bzip2_error(int error)
+ : BOOST_IOSTREAMS_FAILURE("bzip2 error"), error_(error)
+ { }
+
+void bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(int error)
+{
+ switch (error) {
+ case BZ_OK:
+ case BZ_RUN_OK:
+ case BZ_FLUSH_OK:
+ case BZ_FINISH_OK:
+ case BZ_STREAM_END:
+ return;
+ case BZ_MEM_ERROR:
+ boost::throw_exception(std::bad_alloc());
+ default:
+ boost::throw_exception(bzip2_error(error));
+ }
+}
+
+//------------------Implementation of bzip2_base------------------------------//
+
+namespace detail {
+
+bzip2_base::bzip2_base(const bzip2_params& params)
+ : params_(params), stream_(new bz_stream), ready_(false)
+ { }
+
+bzip2_base::~bzip2_base() { delete static_cast<bz_stream*>(stream_); }
+
+void bzip2_base::before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end )
+{
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+ s->next_in = const_cast<char*>(src_begin);
+ s->avail_in = static_cast<unsigned>(src_end - src_begin);
+ s->next_out = reinterpret_cast<char*>(dest_begin);
+ s->avail_out= static_cast<unsigned>(dest_end - dest_begin);
+}
+
+void bzip2_base::after(const char*& src_begin, char*& dest_begin)
+{
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+ src_begin = const_cast<char*>(s->next_in);
+ dest_begin = s->next_out;
+}
+
+int bzip2_base::check_end(const char* src_begin, const char* dest_begin)
+{
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+ if( src_begin == s->next_in &&
+ s->avail_in == 0 &&
+ dest_begin == s->next_out) {
+ return bzip2::unexpected_eof;
+ } else {
+ return bzip2::ok;
+ }
+}
+
+void bzip2_base::end(bool compress)
+{
+ if(!ready_) return;
+ ready_ = false;
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+ bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ BZ2_bzCompressEnd(s) :
+ BZ2_bzDecompressEnd(s)
+ );
+}
+
+int bzip2_base::compress(int action)
+{
+ return BZ2_bzCompress(static_cast<bz_stream*>(stream_), action);
+}
+
+int bzip2_base::decompress()
+{
+ return BZ2_bzDecompress(static_cast<bz_stream*>(stream_));
+}
+
+void bzip2_base::do_init
+ ( bool compress,
+ bzip2::alloc_func /* alloc */,
+ bzip2::free_func /* free */,
+ void* derived )
+{
+ bz_stream* s = static_cast<bz_stream*>(stream_);
+
+ // Current interface for customizing memory management
+ // is non-conforming and has been disabled:
+ // s->bzalloc = alloc;
+ // s->bzfree = free;
+ s->bzalloc = 0;
+ s->bzfree = 0;
+ s->opaque = derived;
+ bzip2_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ BZ2_bzCompressInit( s,
+ params_.block_size,
+ 0,
+ params_.work_factor ) :
+ BZ2_bzDecompressInit( s,
+ 0,
+ params_.small )
+ );
+ ready_ = true;
+}
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
diff --git a/contrib/restricted/boost/libs/iostreams/src/lzma.cpp b/contrib/restricted/boost/libs/iostreams/src/lzma.cpp
new file mode 100644
index 0000000000..5d7bb3cfbd
--- /dev/null
+++ b/contrib/restricted/boost/libs/iostreams/src/lzma.cpp
@@ -0,0 +1,147 @@
+// (C) Copyright Milan Svoboda 2008.
+// Originally developed under the fusecompress project.
+// Based on bzip2.cpp by:
+// (C) Copyright Jonathan Turkanis 2003.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+
+// See http://www.boost.org/libs/iostreams for documentation.
+
+// Define BOOST_IOSTREAMS_SOURCE so that <boost/iostreams/detail/config.hpp>
+// knows that we are building the library (possibly exporting code), rather
+// than using it (possibly importing code).
+#define BOOST_IOSTREAMS_SOURCE
+
+#include <lzma.h>
+
+#include <boost/throw_exception.hpp>
+#include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/filter/lzma.hpp>
+
+namespace boost { namespace iostreams {
+
+namespace lzma {
+
+ // Compression levels
+
+const uint32_t no_compression = 0;
+const uint32_t best_speed = 1;
+const uint32_t best_compression = 9;
+const uint32_t default_compression = 2;
+
+ // Status codes
+
+const int okay = LZMA_OK;
+const int stream_end = LZMA_STREAM_END;
+const int unsupported_check = LZMA_UNSUPPORTED_CHECK;
+const int mem_error = LZMA_MEM_ERROR;
+const int options_error = LZMA_OPTIONS_ERROR;
+const int data_error = LZMA_DATA_ERROR;
+const int buf_error = LZMA_BUF_ERROR;
+const int prog_error = LZMA_PROG_ERROR;
+
+ // Flush codes
+
+const int finish = LZMA_FINISH;
+const int full_flush = LZMA_FULL_FLUSH;
+const int sync_flush = LZMA_SYNC_FLUSH;
+const int run = LZMA_RUN;
+
+ // Code for current OS
+
+} // End namespace lzma.
+
+//------------------Implementation of lzma_error------------------------------//
+
+lzma_error::lzma_error(int error)
+ : BOOST_IOSTREAMS_FAILURE("lzma error"), error_(error)
+ { }
+
+void lzma_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(int error)
+{
+ switch (error) {
+ case LZMA_OK:
+ case LZMA_STREAM_END:
+ return;
+ case LZMA_MEM_ERROR:
+ boost::throw_exception(std::bad_alloc());
+ default:
+ boost::throw_exception(lzma_error(error));
+ }
+}
+
+//------------------Implementation of lzma_base-------------------------------//
+
+namespace detail {
+
+lzma_base::lzma_base()
+ : stream_(new lzma_stream)
+ { }
+
+lzma_base::~lzma_base() { delete static_cast<lzma_stream*>(stream_); }
+
+void lzma_base::before( const char*& src_begin, const char* src_end,
+ char*& dest_begin, char* dest_end )
+{
+ lzma_stream* s = static_cast<lzma_stream*>(stream_);
+ s->next_in = reinterpret_cast<uint8_t*>(const_cast<char*>(src_begin));
+ s->avail_in = static_cast<size_t>(src_end - src_begin);
+ s->next_out = reinterpret_cast<uint8_t*>(dest_begin);
+ s->avail_out= static_cast<size_t>(dest_end - dest_begin);
+}
+
+void lzma_base::after(const char*& src_begin, char*& dest_begin, bool)
+{
+ lzma_stream* s = static_cast<lzma_stream*>(stream_);
+ src_begin = const_cast<const char*>(reinterpret_cast<const char*>(s->next_in));
+ dest_begin = reinterpret_cast<char*>(s->next_out);
+}
+
+int lzma_base::deflate(int action)
+{
+ return lzma_code(static_cast<lzma_stream*>(stream_), static_cast<lzma_action>(action));
+}
+
+int lzma_base::inflate(int action)
+{
+ return lzma_code(static_cast<lzma_stream*>(stream_), static_cast<lzma_action>(action));
+}
+
+void lzma_base::reset(bool compress, bool realloc)
+{
+ lzma_stream* s = static_cast<lzma_stream*>(stream_);
+ lzma_end(s);
+ if (realloc)
+ {
+ memset(s, 0, sizeof(*s));
+
+ lzma_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ lzma_easy_encoder(s, level, LZMA_CHECK_CRC32) :
+ lzma_stream_decoder(s, 100 * 1024 * 1024, LZMA_CONCATENATED)
+ );
+ }
+}
+
+void lzma_base::do_init
+ ( const lzma_params& p, bool compress,
+ lzma::alloc_func, lzma::free_func,
+ void* )
+{
+ lzma_stream* s = static_cast<lzma_stream*>(stream_);
+
+ memset(s, 0, sizeof(*s));
+
+ level = p.level;
+ lzma_error::check BOOST_PREVENT_MACRO_SUBSTITUTION(
+ compress ?
+ lzma_easy_encoder(s, p.level, LZMA_CHECK_CRC32) :
+ lzma_stream_decoder(s, 100 * 1024 * 1024, LZMA_CONCATENATED)
+ );
+}
+
+} // End namespace detail.
+
+//----------------------------------------------------------------------------//
+
+} } // End namespaces iostreams, boost.
diff --git a/contrib/restricted/boost/libs/locale/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/locale/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..43e19a74a4
--- /dev/null
+++ b/contrib/restricted/boost/libs/locale/.yandex_meta/licenses.list.txt
@@ -0,0 +1,38 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2009-2015 Artyom Beilis (Tonkikh)
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/locale/src/win32/all_generator.hpp b/contrib/restricted/boost/libs/locale/src/win32/all_generator.hpp
new file mode 100644
index 0000000000..083d056272
--- /dev/null
+++ b/contrib/restricted/boost/libs/locale/src/win32/all_generator.hpp
@@ -0,0 +1,45 @@
+//
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+#ifndef BOOST_LOCALE_IMPL_WIN32_ALL_GENERATOR_HPP
+#define BOOST_LOCALE_IMPL_WIN32_ALL_GENERATOR_HPP
+
+#include <boost/locale/generator.hpp>
+#include <vector>
+#include <locale.h>
+
+namespace boost {
+ namespace locale {
+ namespace impl_win {
+
+ class winlocale;
+
+ std::locale create_convert( std::locale const &in,
+ winlocale const &lc,
+ character_facet_type type);
+
+ std::locale create_collate( std::locale const &in,
+ winlocale const &lc,
+ character_facet_type type);
+
+ std::locale create_formatting( std::locale const &in,
+ winlocale const &lc,
+ character_facet_type type);
+
+ std::locale create_parsing( std::locale const &in,
+ winlocale const &lc,
+ character_facet_type type);
+
+ std::locale create_codecvt( std::locale const &in,
+ character_facet_type type);
+
+ }
+ }
+}
+
+#endif
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
diff --git a/contrib/restricted/boost/libs/locale/src/win32/api.hpp b/contrib/restricted/boost/libs/locale/src/win32/api.hpp
new file mode 100644
index 0000000000..a41fbde5e6
--- /dev/null
+++ b/contrib/restricted/boost/libs/locale/src/win32/api.hpp
@@ -0,0 +1,357 @@
+//
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+#ifndef BOOST_LOCALE_IMPL_WIN32_API_HPP
+#define BOOST_LOCALE_IMPL_WIN32_API_HPP
+
+#include <string>
+#include <vector>
+#include <sstream>
+#include <iomanip>
+#include <limits>
+#include <ctime>
+
+#include "lcid.hpp"
+
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
+#ifndef UNICODE
+#define UNICODE
+#endif
+#include <windows.h>
+
+#include <boost/locale/conversion.hpp>
+#include <boost/locale/collator.hpp>
+
+#define BOOST_LOCALE_WINDOWS_2000_API
+
+#if defined(_WIN32_NT) && _WIN32_NT >= 0x600 && !defined(BOOST_LOCALE_WINDOWS_2000_API)
+#define BOOST_LOCALE_WINDOWS_VISTA_API
+#else
+#define BOOST_LOCALE_WINDOWS_2000_API
+#endif
+
+namespace boost {
+namespace locale {
+namespace impl_win {
+
+ struct numeric_info {
+ std::wstring thousands_sep;
+ std::wstring decimal_point;
+ std::string grouping;
+ };
+
+ inline DWORD collation_level_to_flag(collator_base::level_type level)
+ {
+ DWORD flags;
+ switch(level) {
+ case collator_base::primary:
+ flags = NORM_IGNORESYMBOLS | NORM_IGNORECASE | NORM_IGNORENONSPACE;
+ break;
+ case collator_base::secondary:
+ flags = NORM_IGNORESYMBOLS | NORM_IGNORECASE;
+ break;
+ case collator_base::tertiary:
+ flags = NORM_IGNORESYMBOLS;
+ break;
+ default:
+ flags = 0;
+ }
+ return flags;
+ }
+
+
+
+ #ifdef BOOST_LOCALE_WINDOWS_2000_API
+
+ class winlocale{
+ public:
+ winlocale() :
+ lcid(0)
+ {
+ }
+
+ winlocale(std::string const &name)
+ {
+ lcid = locale_to_lcid(name);
+ }
+
+ unsigned lcid;
+
+ bool is_c() const
+ {
+ return lcid == 0;
+ }
+ };
+
+
+ ////////////////////////////////////////////////////////////////////////
+ ///
+ /// Number Format
+ ///
+ ////////////////////////////////////////////////////////////////////////
+
+ inline numeric_info wcsnumformat_l(winlocale const &l)
+ {
+ numeric_info res;
+ res.decimal_point = L'.';
+ unsigned lcid = l.lcid;
+
+ if(lcid == 0)
+ return res;
+
+ // limits according to MSDN
+ static const int th_size = 4;
+ static const int de_size = 4;
+ static const int gr_size = 10;
+
+ wchar_t th[th_size]={0};
+ wchar_t de[de_size]={0};
+ wchar_t gr[gr_size]={0};
+
+ if( GetLocaleInfoW(lcid,LOCALE_STHOUSAND,th,th_size)==0
+ || GetLocaleInfoW(lcid,LOCALE_SDECIMAL ,de,de_size)==0
+ || GetLocaleInfoW(lcid,LOCALE_SGROUPING,gr,gr_size)==0)
+ {
+ return res;
+ }
+ res.decimal_point = de;
+ res.thousands_sep = th;
+ bool inf_group = false;
+ for(unsigned i=0;gr[i];i++) {
+ if(gr[i]==L';')
+ continue;
+ if(L'1'<= gr[i] && gr[i]<=L'9') {
+ res.grouping += char(gr[i]-L'0');
+ }
+ else if(gr[i]==L'0')
+ inf_group = true;
+ }
+ if(!inf_group) {
+ if(std::numeric_limits<char>::is_signed) {
+ res.grouping+=std::numeric_limits<char>::min();
+ }
+ else {
+ res.grouping+=std::numeric_limits<char>::max();
+ }
+ }
+ return res;
+ }
+
+ inline std::wstring win_map_string_l(unsigned flags,wchar_t const *begin,wchar_t const *end,winlocale const &l)
+ {
+ std::wstring res;
+ int len = LCMapStringW(l.lcid,flags,begin,end-begin,0,0);
+ if(len == 0)
+ return res;
+ std::vector<wchar_t> buf(len+1);
+ int l2 = LCMapStringW(l.lcid,flags,begin,end-begin,&buf.front(),buf.size());
+ res.assign(&buf.front(),l2);
+ return res;
+ }
+
+ ////////////////////////////////////////////////////////////////////////
+ ///
+ /// Collation
+ ///
+ ////////////////////////////////////////////////////////////////////////
+
+
+ inline int wcscoll_l( collator_base::level_type level,
+ wchar_t const *lb,wchar_t const *le,
+ wchar_t const *rb,wchar_t const *re,
+ winlocale const &l)
+ {
+ return CompareStringW(l.lcid,collation_level_to_flag(level),lb,le-lb,rb,re-rb) - 2;
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////
+ ///
+ /// Money Format
+ ///
+ ////////////////////////////////////////////////////////////////////////
+
+ inline std::wstring wcsfmon_l(double value,winlocale const &l)
+ {
+ std::wostringstream ss;
+ ss.imbue(std::locale::classic());
+
+ ss << std::setprecision(std::numeric_limits<double>::digits10+1) << value;
+ std::wstring sval = ss.str();
+ int len = GetCurrencyFormatW(l.lcid,0,sval.c_str(),0,0,0);
+ std::vector<wchar_t> buf(len+1);
+ GetCurrencyFormatW(l.lcid,0,sval.c_str(),0,&buf.front(),len);
+ return &buf.front();
+ }
+
+ ////////////////////////////////////////////////////////////////////////
+ ///
+ /// Time Format
+ ///
+ ////////////////////////////////////////////////////////////////////////
+
+
+ inline std::wstring wcs_format_date_l(wchar_t const *format,SYSTEMTIME const *tm,winlocale const &l)
+ {
+ int len = GetDateFormatW(l.lcid,0,tm,format,0,0);
+ std::vector<wchar_t> buf(len+1);
+ GetDateFormatW(l.lcid,0,tm,format,&buf.front(),len);
+ return &buf.front();
+ }
+
+ inline std::wstring wcs_format_time_l(wchar_t const *format,SYSTEMTIME const *tm,winlocale const &l)
+ {
+ int len = GetTimeFormatW(l.lcid,0,tm,format,0,0);
+ std::vector<wchar_t> buf(len+1);
+ GetTimeFormatW(l.lcid,0,tm,format,&buf.front(),len);
+ return &buf.front();
+ }
+
+ inline std::wstring wcsfold(wchar_t const *begin,wchar_t const *end)
+ {
+ winlocale l;
+ l.lcid = 0x0409; // en-US
+ return win_map_string_l(LCMAP_LOWERCASE,begin,end,l);
+ }
+
+ inline std::wstring wcsnormalize(norm_type norm,wchar_t const *begin,wchar_t const *end)
+ {
+ // We use FoldString, under Vista it actually does normalization;
+ // under XP and below it does something similar, half job, better then nothing
+ unsigned flags = 0;
+ switch(norm) {
+ case norm_nfd:
+ flags = MAP_COMPOSITE;
+ break;
+ case norm_nfc:
+ flags = MAP_PRECOMPOSED;
+ break;
+ case norm_nfkd:
+ flags = MAP_FOLDCZONE;
+ break;
+ case norm_nfkc:
+ flags = MAP_FOLDCZONE | MAP_COMPOSITE;
+ break;
+ default:
+ flags = MAP_PRECOMPOSED;
+ }
+
+ int len = FoldStringW(flags,begin,end-begin,0,0);
+ if(len == 0)
+ return std::wstring();
+ std::vector<wchar_t> v(len+1);
+ len = FoldStringW(flags,begin,end-begin,&v.front(),len+1);
+ return std::wstring(&v.front(),len);
+ }
+
+
+ #endif
+
+ inline std::wstring wcsxfrm_l(collator_base::level_type level,wchar_t const *begin,wchar_t const *end,winlocale const &l)
+ {
+ int flag = LCMAP_SORTKEY | collation_level_to_flag(level);
+
+ return win_map_string_l(flag,begin,end,l);
+ }
+
+ inline std::wstring towupper_l(wchar_t const *begin,wchar_t const *end,winlocale const &l)
+ {
+ return win_map_string_l(LCMAP_UPPERCASE | LCMAP_LINGUISTIC_CASING,begin,end,l);
+ }
+
+ inline std::wstring towlower_l(wchar_t const *begin,wchar_t const *end,winlocale const &l)
+ {
+ return win_map_string_l(LCMAP_LOWERCASE | LCMAP_LINGUISTIC_CASING,begin,end,l);
+ }
+
+ inline std::wstring wcsftime_l(char c,std::tm const *tm,winlocale const &l)
+ {
+ SYSTEMTIME wtm=SYSTEMTIME();
+ wtm.wYear = tm->tm_year + 1900;
+ wtm.wMonth = tm->tm_mon+1;
+ wtm.wDayOfWeek = tm->tm_wday;
+ wtm.wDay = tm->tm_mday;
+ wtm.wHour = tm->tm_hour;
+ wtm.wMinute = tm->tm_min;
+ wtm.wSecond = tm->tm_sec;
+ switch(c) {
+ case 'a': // Abbr Weekday
+ return wcs_format_date_l(L"ddd",&wtm,l);
+ case 'A': // Full Weekday
+ return wcs_format_date_l(L"dddd",&wtm,l);
+ case 'b': // Abbr Month
+ return wcs_format_date_l(L"MMM",&wtm,l);
+ case 'B': // Full Month
+ return wcs_format_date_l(L"MMMM",&wtm,l);
+ case 'c': // DateTile Full
+ return wcs_format_date_l(0,&wtm,l) + L" " + wcs_format_time_l(0,&wtm,l);
+ // not supported by WIN ;(
+ // case 'C': // Century -> 1980 -> 19
+ // retur
+ case 'd': // Day of Month [01,31]
+ return wcs_format_date_l(L"dd",&wtm,l);
+ case 'D': // %m/%d/%y
+ return wcs_format_date_l(L"MM/dd/yy",&wtm,l);
+ case 'e': // Day of Month [1,31]
+ return wcs_format_date_l(L"d",&wtm,l);
+ case 'h': // == b
+ return wcs_format_date_l(L"MMM",&wtm,l);
+ case 'H': // 24 clock hour 00,23
+ return wcs_format_time_l(L"HH",&wtm,l);
+ case 'I': // 12 clock hour 01,12
+ return wcs_format_time_l(L"hh",&wtm,l);
+ /*
+ case 'j': // day of year 001,366
+ return "D";*/
+ case 'm': // month as [01,12]
+ return wcs_format_date_l(L"MM",&wtm,l);
+ case 'M': // minute [00,59]
+ return wcs_format_time_l(L"mm",&wtm,l);
+ case 'n': // \n
+ return L"\n";
+ case 'p': // am-pm
+ return wcs_format_time_l(L"tt",&wtm,l);
+ case 'r': // time with AM/PM %I:%M:%S %p
+ return wcs_format_time_l(L"hh:mm:ss tt",&wtm,l);
+ case 'R': // %H:%M
+ return wcs_format_time_l(L"HH:mm",&wtm,l);
+ case 'S': // second [00,61]
+ return wcs_format_time_l(L"ss",&wtm,l);
+ case 't': // \t
+ return L"\t";
+ case 'T': // %H:%M:%S
+ return wcs_format_time_l(L"HH:mm:ss",&wtm,l);
+/* case 'u': // weekday 1,7 1=Monday
+ case 'U': // week number of year [00,53] Sunday first
+ case 'V': // week number of year [01,53] Moday first
+ case 'w': // weekday 0,7 0=Sunday
+ case 'W': // week number of year [00,53] Moday first, */
+ case 'x': // Date
+ return wcs_format_date_l(0,&wtm,l);
+ case 'X': // Time
+ return wcs_format_time_l(0,&wtm,l);
+ case 'y': // Year [00-99]
+ return wcs_format_date_l(L"yy",&wtm,l);
+ case 'Y': // Year 1998
+ return wcs_format_date_l(L"yyyy",&wtm,l);
+ case '%': // %
+ return L"%";
+ default:
+ return L"";
+ }
+ }
+
+
+
+} // win
+} // locale
+} // boost
+#endif
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
+
diff --git a/contrib/restricted/boost/libs/locale/src/win32/collate.cpp b/contrib/restricted/boost/libs/locale/src/win32/collate.cpp
new file mode 100644
index 0000000000..40e8c3d217
--- /dev/null
+++ b/contrib/restricted/boost/libs/locale/src/win32/collate.cpp
@@ -0,0 +1,127 @@
+//
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+#define BOOST_LOCALE_SOURCE
+#include <locale>
+#include <string>
+#include <ios>
+#include <boost/locale/encoding.hpp>
+#include <boost/locale/generator.hpp>
+#include "api.hpp"
+#include "../shared/mo_hash.hpp"
+
+namespace boost {
+namespace locale {
+namespace impl_win {
+
+class utf8_collator : public collator<char> {
+public:
+ utf8_collator(winlocale lc,size_t refs = 0) :
+ collator<char>(refs),
+ lc_(lc)
+ {
+ }
+ virtual int do_compare(collator_base::level_type level,char const *lb,char const *le,char const *rb,char const *re) const
+ {
+ std::wstring l=conv::to_utf<wchar_t>(lb,le,"UTF-8");
+ std::wstring r=conv::to_utf<wchar_t>(rb,re,"UTF-8");
+ return wcscoll_l(level,l.c_str(),l.c_str()+l.size(),r.c_str(),r.c_str()+r.size(),lc_);
+ }
+ virtual long do_hash(collator_base::level_type level,char const *b,char const *e) const
+ {
+ std::string key = do_transform(level,b,e);
+ return gnu_gettext::pj_winberger_hash_function(key.c_str(),key.c_str() + key.size());
+ }
+ virtual std::string do_transform(collator_base::level_type level,char const *b,char const *e) const
+ {
+ std::wstring tmp=conv::to_utf<wchar_t>(b,e,"UTF-8");
+ std::wstring wkey = wcsxfrm_l(level,tmp.c_str(),tmp.c_str()+tmp.size(),lc_);
+ std::string key;
+ if(sizeof(wchar_t)==2)
+ key.reserve(wkey.size()*2);
+ else
+ key.reserve(wkey.size()*3);
+ for(unsigned i=0;i<wkey.size();i++) {
+ if(sizeof(wchar_t)==2) {
+ uint16_t tv = static_cast<uint16_t>(wkey[i]);
+ key += char(tv >> 8);
+ key += char(tv & 0xFF);
+ }
+ else { // 4
+ uint32_t tv = static_cast<uint32_t>(wkey[i]);
+ // 21 bit
+ key += char((tv >> 16) & 0xFF);
+ key += char((tv >> 8) & 0xFF);
+ key += char(tv & 0xFF);
+ }
+ }
+ return key;
+ }
+private:
+ winlocale lc_;
+};
+
+
+class utf16_collator : public collator<wchar_t> {
+public:
+ typedef std::collate<wchar_t> wfacet;
+ utf16_collator(winlocale lc,size_t refs = 0) :
+ collator<wchar_t>(refs),
+ lc_(lc)
+ {
+ }
+ virtual int do_compare(collator_base::level_type level,wchar_t const *lb,wchar_t const *le,wchar_t const *rb,wchar_t const *re) const
+ {
+ return wcscoll_l(level,lb,le,rb,re,lc_);
+ }
+ virtual long do_hash(collator_base::level_type level,wchar_t const *b,wchar_t const *e) const
+ {
+ std::wstring key = do_transform(level,b,e);
+ char const *begin = reinterpret_cast<char const *>(key.c_str());
+ char const *end = begin + key.size()*sizeof(wchar_t);
+ return gnu_gettext::pj_winberger_hash_function(begin,end);
+ }
+ virtual std::wstring do_transform(collator_base::level_type level,wchar_t const *b,wchar_t const *e) const
+ {
+ return wcsxfrm_l(level,b,e,lc_);
+ }
+private:
+ winlocale lc_;
+};
+
+
+std::locale create_collate( std::locale const &in,
+ winlocale const &lc,
+ character_facet_type type)
+{
+ if(lc.is_c()) {
+ switch(type) {
+ case char_facet:
+ return std::locale(in,new std::collate_byname<char>("C"));
+ case wchar_t_facet:
+ return std::locale(in,new std::collate_byname<wchar_t>("C"));
+ }
+ }
+ else {
+ switch(type) {
+ case char_facet:
+ return std::locale(in,new utf8_collator(lc));
+ case wchar_t_facet:
+ return std::locale(in,new utf16_collator(lc));
+ }
+ }
+ return in;
+}
+
+
+} // impl_std
+} // locale
+} //boost
+
+
+
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
diff --git a/contrib/restricted/boost/libs/locale/src/win32/converter.cpp b/contrib/restricted/boost/libs/locale/src/win32/converter.cpp
new file mode 100644
index 0000000000..fffb0c7b8a
--- /dev/null
+++ b/contrib/restricted/boost/libs/locale/src/win32/converter.cpp
@@ -0,0 +1,106 @@
+//
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+#define BOOST_LOCALE_SOURCE
+
+#include <locale>
+#include <stdexcept>
+#include <boost/locale/generator.hpp>
+#include <boost/locale/conversion.hpp>
+#include <boost/locale/encoding.hpp>
+#include <vector>
+#include <string.h>
+#include "api.hpp"
+#include "all_generator.hpp"
+
+namespace boost {
+namespace locale {
+namespace impl_win {
+
+class utf16_converter : public converter<wchar_t>
+{
+public:
+ utf16_converter(winlocale const &lc,size_t refs = 0) :
+ converter<wchar_t>(refs),
+ lc_(lc)
+ {
+ }
+ virtual std::wstring convert(converter_base::conversion_type how,wchar_t const *begin,wchar_t const *end,int flags = 0) const
+ {
+ switch(how) {
+ case converter_base::upper_case:
+ return towupper_l(begin,end,lc_);
+ case converter_base::lower_case:
+ return towlower_l(begin,end,lc_);
+ case converter_base::case_folding:
+ return wcsfold(begin,end);
+ case converter_base::normalization:
+ return wcsnormalize(static_cast<norm_type>(flags),begin,end);
+ default:
+ return std::wstring(begin,end-begin);
+ }
+ }
+private:
+ winlocale lc_;
+};
+
+class utf8_converter : public converter<char> {
+public:
+ utf8_converter(winlocale const &lc,size_t refs = 0) :
+ converter<char>(refs),
+ lc_(lc)
+ {
+ }
+ virtual std::string convert(converter_base::conversion_type how,char const *begin,char const *end,int flags = 0) const
+ {
+ std::wstring tmp = conv::to_utf<wchar_t>(begin,end,"UTF-8");
+ wchar_t const *wb=tmp.c_str();
+ wchar_t const *we=wb+tmp.size();
+
+ std::wstring res;
+
+ switch(how) {
+ case upper_case:
+ res = towupper_l(wb,we,lc_);
+ break;
+ case lower_case:
+ res = towlower_l(wb,we,lc_);
+ break;
+ case case_folding:
+ res = wcsfold(wb,we);
+ break;
+ case normalization:
+ res = wcsnormalize(static_cast<norm_type>(flags),wb,we);
+ break;
+ default:
+ res = tmp; // make gcc happy
+ }
+ return conv::from_utf(res,"UTF-8");
+ }
+private:
+ winlocale lc_;
+};
+
+std::locale create_convert( std::locale const &in,
+ winlocale const &lc,
+ character_facet_type type)
+{
+ switch(type) {
+ case char_facet:
+ return std::locale(in,new utf8_converter(lc));
+ case wchar_t_facet:
+ return std::locale(in,new utf16_converter(lc));
+ default:
+ return in;
+ }
+}
+
+
+} // namespace impl_win32
+} // locale
+} // boost
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
diff --git a/contrib/restricted/boost/libs/locale/src/win32/lcid.cpp b/contrib/restricted/boost/libs/locale/src/win32/lcid.cpp
new file mode 100644
index 0000000000..67542e6c6b
--- /dev/null
+++ b/contrib/restricted/boost/libs/locale/src/win32/lcid.cpp
@@ -0,0 +1,127 @@
+//
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+#define BOOST_LOCALE_SOURCE
+#include "lcid.hpp"
+#include <string.h>
+#include <string>
+#include <sstream>
+#include <map>
+
+#include "../util/locale_data.hpp"
+
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
+#include <windows.h>
+
+#include <boost/thread/mutex.hpp>
+
+namespace boost {
+namespace locale {
+namespace impl_win {
+
+typedef std::map<std::string,unsigned> table_type;
+
+static table_type * volatile table = 0;
+
+boost::mutex &lcid_table_mutex()
+{
+ static boost::mutex m;
+ return m;
+}
+
+table_type &real_lcid_table()
+{
+ static table_type table;
+ return table;
+}
+
+BOOL CALLBACK proc(char *s)
+{
+ table_type &tbl = real_lcid_table();
+ try {
+ std::istringstream ss;
+ ss.str(s);
+ ss >> std::hex;
+
+ unsigned lcid ;
+ ss >>lcid;
+ if(ss.fail() || !ss.eof()) {
+ return FALSE;
+ }
+
+ char iso_639_lang[16];
+ char iso_3166_country[16];
+ if(GetLocaleInfoA(lcid,LOCALE_SISO639LANGNAME,iso_639_lang,sizeof(iso_639_lang))==0)
+ return FALSE;
+ std::string lc_name = iso_639_lang;
+ if(GetLocaleInfoA(lcid,LOCALE_SISO3166CTRYNAME,iso_3166_country,sizeof(iso_3166_country))!=0) {
+ lc_name += "_";
+ lc_name += iso_3166_country;
+ }
+ table_type::iterator p = tbl.find(lc_name);
+ if(p!=tbl.end()) {
+ if(p->second > lcid)
+ p->second = lcid;
+ }
+ else {
+ tbl[lc_name]=lcid;
+ }
+ }
+ catch(...) {
+ tbl.clear();
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+table_type const &get_ready_lcid_table()
+{
+ if(table)
+ return *table;
+ else {
+ boost::unique_lock<boost::mutex> lock(lcid_table_mutex());
+ if(table)
+ return *table;
+ EnumSystemLocalesA(proc,LCID_INSTALLED);
+ table = &real_lcid_table();
+ return *table;
+ }
+}
+
+unsigned locale_to_lcid(std::string const &locale_name)
+{
+ if(locale_name.empty()) {
+ return LOCALE_USER_DEFAULT;
+ }
+ boost::locale::util::locale_data d;
+ d.parse(locale_name);
+ std::string id = d.language;
+
+ if(!d.country.empty()) {
+ id+="_"+d.country;
+ }
+ if(!d.variant.empty()) {
+ id+="@" + d.variant;
+ }
+
+ table_type const &tbl = get_ready_lcid_table();
+ table_type::const_iterator p = tbl.find(id);
+
+ unsigned lcid = 0;
+ if(p!=tbl.end())
+ lcid = p->second;
+ return lcid;
+}
+
+
+} // impl_win
+} // locale
+} // boost
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
diff --git a/contrib/restricted/boost/libs/locale/src/win32/numeric.cpp b/contrib/restricted/boost/libs/locale/src/win32/numeric.cpp
new file mode 100644
index 0000000000..00bc94fd6d
--- /dev/null
+++ b/contrib/restricted/boost/libs/locale/src/win32/numeric.cpp
@@ -0,0 +1,245 @@
+//
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+#define BOOST_LOCALE_SOURCE
+#include <locale>
+#include <string>
+#include <ios>
+#include <boost/locale/formatting.hpp>
+#include <boost/locale/generator.hpp>
+#include <boost/locale/encoding.hpp>
+#include <boost/shared_ptr.hpp>
+#include <sstream>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <wctype.h>
+#include <ctype.h>
+
+#include "all_generator.hpp"
+#include "api.hpp"
+#include "../util/numeric.hpp"
+
+namespace boost {
+namespace locale {
+namespace impl_win {
+ namespace {
+
+ std::ostreambuf_iterator<wchar_t> write_it(std::ostreambuf_iterator<wchar_t> out,std::wstring const &s)
+ {
+ for(size_t i=0;i<s.size();i++)
+ *out++ = s[i];
+ return out;
+ }
+
+ std::ostreambuf_iterator<char> write_it(std::ostreambuf_iterator<char> out,std::wstring const &s)
+ {
+ std::string tmp = conv::from_utf(s,"UTF-8");
+ for(size_t i=0;i<tmp.size();i++)
+ *out++ = tmp[i];
+ return out;
+ }
+ }
+
+
+template<typename CharType>
+class num_format : public util::base_num_format<CharType>
+{
+public:
+ typedef typename std::num_put<CharType>::iter_type iter_type;
+ typedef std::basic_string<CharType> string_type;
+ typedef CharType char_type;
+
+ num_format(winlocale const &lc,size_t refs = 0) :
+ util::base_num_format<CharType>(refs),
+ lc_(lc)
+ {
+ }
+private:
+
+ virtual
+ iter_type do_format_currency(bool /*intl*/,iter_type out,std::ios_base &ios,char_type fill,long double val) const
+ {
+ if(lc_.is_c()) {
+ std::locale loc = ios.getloc();
+ int digits = std::use_facet<std::moneypunct<char_type> >(loc).frac_digits();
+ while(digits > 0) {
+ val*=10;
+ digits --;
+ }
+ std::ios_base::fmtflags f=ios.flags();
+ ios.flags(f | std::ios_base::showbase);
+ out = std::use_facet<std::money_put<char_type> >(loc).put(out,false,ios,fill,val);
+ ios.flags(f);
+ return out;
+ }
+ else {
+ std::wstring cur = wcsfmon_l(val,lc_);
+ return write_it(out,cur);
+ }
+ }
+
+private:
+ winlocale lc_;
+
+}; /// num_format
+
+template<typename CharType>
+class time_put_win : public std::time_put<CharType> {
+public:
+ time_put_win(winlocale const &lc, size_t refs = 0) :
+ std::time_put<CharType>(refs),
+ lc_(lc)
+ {
+ }
+ virtual ~time_put_win()
+ {
+ }
+ typedef typename std::time_put<CharType>::iter_type iter_type;
+ typedef CharType char_type;
+ typedef std::basic_string<char_type> string_type;
+
+ virtual iter_type do_put( iter_type out,
+ std::ios_base &/*ios*/,
+ CharType /*fill*/,
+ std::tm const *tm,
+ char format,
+ char /*modifier*/) const
+ {
+ return write_it(out,wcsftime_l(format,tm,lc_));
+ }
+
+private:
+ winlocale lc_;
+};
+
+
+template<typename CharType>
+class num_punct_win : public std::numpunct<CharType> {
+public:
+ typedef std::basic_string<CharType> string_type;
+ num_punct_win(winlocale const &lc,size_t refs = 0) :
+ std::numpunct<CharType>(refs)
+ {
+ numeric_info np = wcsnumformat_l(lc) ;
+ if(sizeof(CharType) == 1 && np.thousands_sep == L"\xA0")
+ np.thousands_sep=L" ";
+
+ to_str(np.thousands_sep,thousands_sep_);
+ to_str(np.decimal_point,decimal_point_);
+ grouping_ = np.grouping;
+ if(thousands_sep_.size() > 1)
+ grouping_ = std::string();
+ if(decimal_point_.size() > 1)
+ decimal_point_ = CharType('.');
+ }
+
+ void to_str(std::wstring &s1,std::wstring &s2)
+ {
+ s2.swap(s1);
+ }
+
+ void to_str(std::wstring &s1,std::string &s2)
+ {
+ s2=conv::from_utf(s1,"UTF-8");
+ }
+ virtual CharType do_decimal_point() const
+ {
+ return *decimal_point_.c_str();
+ }
+ virtual CharType do_thousands_sep() const
+ {
+ return *thousands_sep_.c_str();
+ }
+ virtual std::string do_grouping() const
+ {
+ return grouping_;
+ }
+ virtual string_type do_truename() const
+ {
+ static const char t[]="true";
+ return string_type(t,t+sizeof(t)-1);
+ }
+ virtual string_type do_falsename() const
+ {
+ static const char t[]="false";
+ return string_type(t,t+sizeof(t)-1);
+ }
+private:
+ string_type decimal_point_;
+ string_type thousands_sep_;
+ std::string grouping_;
+};
+
+template<typename CharType>
+std::locale create_formatting_impl(std::locale const &in,winlocale const &lc)
+{
+ if(lc.is_c()) {
+ std::locale tmp(in,new std::numpunct_byname<CharType>("C"));
+ tmp=std::locale(tmp,new std::time_put_byname<CharType>("C"));
+ tmp = std::locale(tmp,new num_format<CharType>(lc));
+ return tmp;
+ }
+ else {
+ std::locale tmp(in,new num_punct_win<CharType>(lc));
+ tmp = std::locale(tmp,new time_put_win<CharType>(lc));
+ tmp = std::locale(tmp,new num_format<CharType>(lc));
+ return tmp;
+ }
+}
+
+template<typename CharType>
+std::locale create_parsing_impl(std::locale const &in,winlocale const &lc)
+{
+ std::numpunct<CharType> *np = 0;
+ if(lc.is_c())
+ np = new std::numpunct_byname<CharType>("C");
+ else
+ np = new num_punct_win<CharType>(lc);
+ std::locale tmp(in,np);
+ tmp = std::locale(tmp,new util::base_num_parse<CharType>());
+ return tmp;
+}
+
+
+std::locale create_formatting( std::locale const &in,
+ winlocale const &lc,
+ character_facet_type type)
+{
+ switch(type) {
+ case char_facet:
+ return create_formatting_impl<char>(in,lc);
+ case wchar_t_facet:
+ return create_formatting_impl<wchar_t>(in,lc);
+ default:
+ return in;
+ }
+}
+
+std::locale create_parsing( std::locale const &in,
+ winlocale const &lc,
+ character_facet_type type)
+{
+ switch(type) {
+ case char_facet:
+ return create_parsing_impl<char>(in,lc);
+ case wchar_t_facet:
+ return create_parsing_impl<wchar_t>(in,lc);
+ default:
+ return in;
+ }
+}
+
+
+
+} // impl_std
+} // locale
+} //boost
+
+
+
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
diff --git a/contrib/restricted/boost/libs/locale/src/win32/win_backend.cpp b/contrib/restricted/boost/libs/locale/src/win32/win_backend.cpp
new file mode 100644
index 0000000000..cd9ec8375b
--- /dev/null
+++ b/contrib/restricted/boost/libs/locale/src/win32/win_backend.cpp
@@ -0,0 +1,153 @@
+//
+// Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+#define BOOST_LOCALE_SOURCE
+#include <boost/locale/localization_backend.hpp>
+#include <boost/locale/gnu_gettext.hpp>
+#include <boost/locale/info.hpp>
+#include "all_generator.hpp"
+#include "win_backend.hpp"
+#include <boost/locale/util.hpp>
+#include "../util/gregorian.hpp"
+#include "../util/locale_data.hpp"
+#include "api.hpp"
+#include <algorithm>
+#include <iterator>
+
+namespace boost {
+namespace locale {
+namespace impl_win {
+
+ class winapi_localization_backend : public localization_backend {
+ public:
+ winapi_localization_backend() :
+ invalid_(true)
+ {
+ }
+ winapi_localization_backend(winapi_localization_backend const &other) :
+ localization_backend(),
+ paths_(other.paths_),
+ domains_(other.domains_),
+ locale_id_(other.locale_id_),
+ invalid_(true)
+ {
+ }
+ virtual winapi_localization_backend *clone() const
+ {
+ return new winapi_localization_backend(*this);
+ }
+
+ void set_option(std::string const &name,std::string const &value)
+ {
+ invalid_ = true;
+ if(name=="locale")
+ locale_id_ = value;
+ else if(name=="message_path")
+ paths_.push_back(value);
+ else if(name=="message_application")
+ domains_.push_back(value);
+
+ }
+ void clear_options()
+ {
+ invalid_ = true;
+ locale_id_.clear();
+ paths_.clear();
+ domains_.clear();
+ }
+
+ void prepare_data()
+ {
+ if(!invalid_)
+ return;
+ invalid_ = false;
+ if(locale_id_.empty()) {
+ real_id_ = util::get_system_locale(true); // always UTF-8
+ lc_ = winlocale(real_id_);
+ }
+ else {
+ lc_=winlocale(locale_id_);
+ real_id_ = locale_id_;
+ }
+ util::locale_data d;
+ d.parse(real_id_);
+ if(!d.utf8) {
+ lc_ = winlocale();
+ // Make it C as non-UTF8 locales are not supported
+ }
+ }
+
+ virtual std::locale install(std::locale const &base,
+ locale_category_type category,
+ character_facet_type type = nochar_facet)
+ {
+ prepare_data();
+
+ switch(category) {
+ case convert_facet:
+ return create_convert(base,lc_,type);
+ case collation_facet:
+ return create_collate(base,lc_,type);
+ case formatting_facet:
+ return create_formatting(base,lc_,type);
+ case parsing_facet:
+ return create_parsing(base,lc_,type);
+ case calendar_facet:
+ {
+ util::locale_data inf;
+ inf.parse(real_id_);
+ return util::install_gregorian_calendar(base,inf.country);
+ }
+ case message_facet:
+ {
+ gnu_gettext::messages_info minf;
+ std::locale tmp=util::create_info(std::locale::classic(),real_id_);
+ boost::locale::info const &inf=std::use_facet<boost::locale::info>(tmp);
+ minf.language = inf.language();
+ minf.country = inf.country();
+ minf.variant = inf.variant();
+ minf.encoding = inf.encoding();
+ std::copy(domains_.begin(),domains_.end(),std::back_inserter<gnu_gettext::messages_info::domains_type>(minf.domains));
+ minf.paths = paths_;
+ switch(type) {
+ case char_facet:
+ return std::locale(base,gnu_gettext::create_messages_facet<char>(minf));
+ case wchar_t_facet:
+ return std::locale(base,gnu_gettext::create_messages_facet<wchar_t>(minf));
+ default:
+ return base;
+ }
+ }
+ case information_facet:
+ return util::create_info(base,real_id_);
+ case codepage_facet:
+ return util::create_utf8_codecvt(base,type);
+ default:
+ return base;
+ }
+ }
+
+ private:
+
+ std::vector<std::string> paths_;
+ std::vector<std::string> domains_;
+ std::string locale_id_;
+ std::string real_id_;
+
+ bool invalid_;
+ winlocale lc_;
+ };
+
+ localization_backend *create_localization_backend()
+ {
+ return new winapi_localization_backend();
+ }
+
+} // impl win
+} // locale
+} // boost
+// vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
diff --git a/contrib/restricted/boost/libs/log/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/log/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..977477afbc
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/.yandex_meta/licenses.list.txt
@@ -0,0 +1,66 @@
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ Copyright Andrey Semashev 2007 - 2015.
+
+
+====================COPYRIGHT====================
+ * Copyright Lingxi Li 2015.
+ * Copyright Andrey Semashev 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Lingxi Li 2015.
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2017.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Andrey Semashev 2007 - 2018.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/log/config/atomic-int32/atomic_int32.cpp b/contrib/restricted/boost/libs/log/config/atomic-int32/atomic_int32.cpp
new file mode 100644
index 0000000000..f39bcc8f5b
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/config/atomic-int32/atomic_int32.cpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#include <boost/atomic.hpp>
+
+#if !defined(BOOST_ATOMIC_INT32_LOCK_FREE) || (BOOST_ATOMIC_INT32_LOCK_FREE+0) != 2
+#error Boost.Log: Native 32-bit atomic operations are required but not supported by Boost.Atomic on the target platform
+#endif
+
+int main(int, char*[])
+{
+ return 0;
+}
diff --git a/contrib/restricted/boost/libs/log/config/native-syslog/native_syslog.cpp b/contrib/restricted/boost/libs/log/config/native-syslog/native_syslog.cpp
new file mode 100644
index 0000000000..25605a682e
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/config/native-syslog/native_syslog.cpp
@@ -0,0 +1,26 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#include <syslog.h>
+
+int main(int, char*[])
+{
+ ::openlog("test", LOG_NDELAY, LOG_USER);
+
+ ::syslog(LOG_USER | LOG_DEBUG, "debug message");
+ ::syslog(LOG_USER | LOG_INFO, "info message");
+ ::syslog(LOG_USER | LOG_NOTICE, "notice message");
+ ::syslog(LOG_USER | LOG_WARNING, "warning message");
+ ::syslog(LOG_USER | LOG_ERR, "error message");
+ ::syslog(LOG_USER | LOG_CRIT, "critical message");
+ ::syslog(LOG_USER | LOG_ALERT, "alert message");
+ ::syslog(LOG_USER | LOG_EMERG, "emergency message");
+
+ ::closelog();
+
+ return 0;
+}
diff --git a/contrib/restricted/boost/libs/log/config/pthread-mutex-robust/pthread_mutex_robust.cpp b/contrib/restricted/boost/libs/log/config/pthread-mutex-robust/pthread_mutex_robust.cpp
new file mode 100644
index 0000000000..36415aca02
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/config/pthread-mutex-robust/pthread_mutex_robust.cpp
@@ -0,0 +1,37 @@
+/*
+ * Copyright Andrey Semashev 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#include <errno.h>
+#include <pthread.h>
+
+int main(int, char*[])
+{
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init(&attr);
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL);
+ pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
+ pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST);
+
+ pthread_mutex_t m;
+ pthread_mutex_init(&m, &attr);
+ pthread_mutexattr_destroy(&attr);
+
+ int err = pthread_mutex_lock(&m);
+ if (err == EOWNERDEAD)
+ {
+ err = pthread_mutex_consistent(&m);
+ }
+
+ if (err != ENOTRECOVERABLE)
+ {
+ pthread_mutex_unlock(&m);
+ }
+
+ pthread_mutex_destroy(&m);
+
+ return 0;
+}
diff --git a/contrib/restricted/boost/libs/log/config/visibility/visibility.cpp b/contrib/restricted/boost/libs/log/config/visibility/visibility.cpp
new file mode 100644
index 0000000000..30f1a64335
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/config/visibility/visibility.cpp
@@ -0,0 +1,16 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+// Guess what, MSVC doesn't ever fail on unknown options, even with /WX. Hence this additional check.
+#if !defined(__GNUC__)
+#error Visibility option is only supported by gcc and compatible compilers
+#endif
+
+int main(int, char*[])
+{
+ return 0;
+}
diff --git a/contrib/restricted/boost/libs/log/config/x86-ext/avx2.cpp b/contrib/restricted/boost/libs/log/config/x86-ext/avx2.cpp
new file mode 100644
index 0000000000..fcc1b9215e
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/config/x86-ext/avx2.cpp
@@ -0,0 +1,16 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#include <immintrin.h>
+
+int main(int, char*[])
+{
+ __m256i mm = _mm256_setzero_si256();
+ mm = _mm256_shuffle_epi8(_mm256_alignr_epi8(mm, mm, 10), mm);
+ _mm256_zeroupper();
+ return 0;
+}
diff --git a/contrib/restricted/boost/libs/log/config/x86-ext/ssse3.cpp b/contrib/restricted/boost/libs/log/config/x86-ext/ssse3.cpp
new file mode 100644
index 0000000000..f7bfb30847
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/config/x86-ext/ssse3.cpp
@@ -0,0 +1,15 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+#include <tmmintrin.h>
+
+int main(int, char*[])
+{
+ __m128i mm = _mm_setzero_si128();
+ mm = _mm_shuffle_epi8(_mm_alignr_epi8(mm, mm, 10), mm);
+ return 0;
+}
diff --git a/contrib/restricted/boost/libs/log/config/xopen-source-600/xopen_source_600.cpp b/contrib/restricted/boost/libs/log/config/xopen-source-600/xopen_source_600.cpp
new file mode 100644
index 0000000000..1b26467c9b
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/config/xopen-source-600/xopen_source_600.cpp
@@ -0,0 +1,17 @@
+/*
+ * Copyright Andrey Semashev 2017.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+
+// Test if we can include system headers with -D_XOPEN_SOURCE=600
+#undef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 600
+
+#include <unistd.h>
+
+int main(int, char*[])
+{
+ return 0;
+}
diff --git a/contrib/restricted/boost/libs/log/src/dump_avx2.cpp b/contrib/restricted/boost/libs/log/src/dump_avx2.cpp
new file mode 100644
index 0000000000..4ab12500fa
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/dump_avx2.cpp
@@ -0,0 +1,349 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file dump_avx2.cpp
+ * \author Andrey Semashev
+ * \date 05.05.2013
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+// NOTE: You should generally avoid including headers as much as possible here, because this file
+// is compiled with special compiler options, and any included header may result in generation of
+// unintended code with these options and violation of ODR.
+#include <boost/log/detail/config.hpp>
+#include <ostream>
+#include <immintrin.h>
+#include <boost/cstdint.hpp>
+#include <boost/log/detail/header.hpp>
+
+#if defined(__x86_64) || defined(__x86_64__) || \
+ defined(__amd64__) || defined(__amd64) || \
+ defined(_M_X64)
+#define BOOST_LOG_AUX_X86_64
+#endif
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace aux {
+
+extern const char g_hex_char_table[2][16];
+
+template< typename CharT >
+extern void dump_data_generic(const void* data, std::size_t size, std::basic_ostream< CharT >& strm);
+
+BOOST_LOG_ANONYMOUS_NAMESPACE {
+
+enum
+{
+ packs_per_stride = 32,
+ stride = packs_per_stride * 32
+};
+
+union ymm_constant
+{
+ uint8_t as_bytes[32];
+ __m256i as_mm;
+
+ BOOST_FORCEINLINE operator __m256i () const { return as_mm; }
+};
+
+static const ymm_constant mm_shuffle_pattern1 = {{ 0x80, 0, 1, 0x80, 2, 3, 0x80, 4, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 0x80, 0, 1, 0x80, 2, 3, 0x80, 4, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80 }};
+static const ymm_constant mm_shuffle_pattern2 = {{ 0, 1, 0x80, 2, 3, 0x80, 4, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 10, 0, 1, 0x80, 2, 3, 0x80, 4, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 10 }};
+static const ymm_constant mm_shuffle_pattern3 = {{ 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 10, 11, 0x80, 12, 13, 0x80, 14, 15, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 10, 11, 0x80, 12, 13, 0x80, 14, 15 }};
+static const ymm_constant mm_shuffle_pattern13 = {{ 0x80, 0, 1, 0x80, 2, 3, 0x80, 4, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 10, 11, 0x80, 12, 13, 0x80, 14, 15 }};
+
+#if defined(BOOST_LOG_AUX_X86_64)
+
+// x86-64 architecture has more registers which we can utilize to pass constants
+#define BOOST_LOG_AUX_MM_CONSTANT_ARGS_DECL __m256i mm_15, __m256i mm_9, __m256i mm_char_0, __m256i mm_char_space,
+#define BOOST_LOG_AUX_MM_CONSTANT_ARGS mm_15, mm_9, mm_char_0, mm_char_space,
+#define BOOST_LOG_AUX_MM_CONSTANTS \
+ const __m256i mm_15 = _mm256_set1_epi32(0x0F0F0F0F);\
+ const __m256i mm_9 = _mm256_set1_epi32(0x09090909);\
+ const __m256i mm_char_0 = _mm256_set1_epi32(0x30303030);\
+ const __m256i mm_char_space = _mm256_set1_epi32(0x20202020);
+
+#else
+
+// MSVC in 32-bit mode is not able to pass all constants to dump_pack, and is also not able to align them on the stack, so we have to fetch them from global constants
+static const ymm_constant mm_15 = {{ 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F }};
+static const ymm_constant mm_9 = {{ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09 }};
+static const ymm_constant mm_char_0 = {{ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 }};
+static const ymm_constant mm_char_space = {{ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }};
+#define BOOST_LOG_AUX_MM_CONSTANT_ARGS_DECL
+#define BOOST_LOG_AUX_MM_CONSTANT_ARGS
+#define BOOST_LOG_AUX_MM_CONSTANTS
+
+#endif
+
+/*!
+ * \brief Dumps a pack of input data into a string of 8 bit ASCII characters.
+ *
+ * The composed string is placed as follows (in Intel notation): mm_output1[127:0], mm_output2[127:0], mm_output3[127:0], mm_output1[255:128], mm_output2[255:128], mm_output3[255:128].
+ */
+static BOOST_FORCEINLINE void dump_pack
+(
+ BOOST_LOG_AUX_MM_CONSTANT_ARGS_DECL
+ __m256i mm_char_10_to_a, __m256i mm_input,
+ __m256i& mm_output1, __m256i& mm_output2, __m256i& mm_output3
+)
+{
+ // Split half-bytes
+ __m256i mm_input_hi = _mm256_and_si256(_mm256_srli_epi16(mm_input, 4), mm_15);
+ __m256i mm_input_lo = _mm256_and_si256(mm_input, mm_15);
+
+ // Stringize each of the halves
+ __m256i mm_addend_hi = _mm256_cmpgt_epi8(mm_input_hi, mm_9);
+ __m256i mm_addend_lo = _mm256_cmpgt_epi8(mm_input_lo, mm_9);
+ mm_addend_hi = _mm256_and_si256(mm_char_10_to_a, mm_addend_hi);
+ mm_addend_lo = _mm256_and_si256(mm_char_10_to_a, mm_addend_lo);
+
+ mm_input_hi = _mm256_add_epi8(mm_input_hi, mm_char_0);
+ mm_input_lo = _mm256_add_epi8(mm_input_lo, mm_char_0);
+
+ mm_input_hi = _mm256_add_epi8(mm_input_hi, mm_addend_hi);
+ mm_input_lo = _mm256_add_epi8(mm_input_lo, mm_addend_lo);
+
+ // Join them back together
+ __m256i mm_1 = _mm256_unpacklo_epi8(mm_input_hi, mm_input_lo);
+ __m256i mm_2 = _mm256_unpackhi_epi8(mm_input_hi, mm_input_lo);
+
+ // Insert spaces between stringized bytes:
+ // |0123456789abcdef|0123456789abcdef|
+ // | 01 23 45 67 89 |ab cd ef 01 23 4|5 67 89 ab cd ef|
+ __m256i mm_out1 = _mm256_shuffle_epi8(mm_1, mm_shuffle_pattern1.as_mm);
+ __m256i mm_out3 = _mm256_shuffle_epi8(mm_2, mm_shuffle_pattern3.as_mm);
+ __m256i mm_out2 = _mm256_shuffle_epi8(_mm256_alignr_epi8(mm_2, mm_1, 10), mm_shuffle_pattern2.as_mm);
+
+ mm_output1 = _mm256_max_epu8(mm_out1, mm_char_space);
+ mm_output2 = _mm256_max_epu8(mm_out2, mm_char_space);
+ mm_output3 = _mm256_max_epu8(mm_out3, mm_char_space);
+}
+
+//! Dumps a pack of input data into a string of 8 bit ASCII characters
+static BOOST_FORCEINLINE void dump_pack
+(
+ BOOST_LOG_AUX_MM_CONSTANT_ARGS_DECL
+ __m256i mm_char_10_to_a, __m128i mm_input,
+ __m128i& mm_output1, __m128i& mm_output2, __m128i& mm_output3
+)
+{
+ // Split half-bytes
+ __m128i mm_input_hi = _mm_srli_epi16(mm_input, 4);
+ __m256i mm = _mm256_inserti128_si256(_mm256_castsi128_si256(_mm_unpacklo_epi8(mm_input_hi, mm_input)), _mm_unpackhi_epi8(mm_input_hi, mm_input), 1);
+ mm = _mm256_and_si256(mm, mm_15);
+
+ // Stringize the halves
+ __m256i mm_addend = _mm256_cmpgt_epi8(mm, mm_9);
+ mm_addend = _mm256_and_si256(mm_char_10_to_a, mm_addend);
+
+ mm = _mm256_add_epi8(mm, mm_char_0);
+ mm = _mm256_add_epi8(mm, mm_addend);
+
+ // Insert spaces between stringized bytes:
+ __m256i mm_out13 = _mm256_shuffle_epi8(mm, mm_shuffle_pattern13.as_mm);
+ __m128i mm_out2 = _mm_shuffle_epi8(_mm_alignr_epi8(_mm256_extracti128_si256(mm, 1), _mm256_castsi256_si128(mm), 10), _mm256_castsi256_si128(mm_shuffle_pattern2.as_mm));
+
+ mm_out13 = _mm256_max_epu8(mm_out13, mm_char_space);
+ mm_output2 = _mm_max_epu8(mm_out2, _mm256_castsi256_si128(mm_char_space));
+ mm_output1 = _mm256_castsi256_si128(mm_out13);
+ mm_output3 = _mm256_extracti128_si256(mm_out13, 1);
+}
+
+template< typename CharT >
+BOOST_FORCEINLINE void store_characters(__m128i mm_chars, CharT* buf)
+{
+ switch (sizeof(CharT))
+ {
+ case 1:
+ _mm_store_si128(reinterpret_cast< __m128i* >(buf), mm_chars);
+ break;
+
+ case 2:
+ _mm256_store_si256(reinterpret_cast< __m256i* >(buf), _mm256_cvtepu8_epi16(mm_chars));
+ break;
+
+ case 4:
+ {
+ __m128i mm = _mm_unpackhi_epi64(mm_chars, mm_chars);
+ _mm256_store_si256(reinterpret_cast< __m256i* >(buf), _mm256_cvtepu8_epi32(mm_chars));
+ _mm256_store_si256(reinterpret_cast< __m256i* >(buf) + 1, _mm256_cvtepu8_epi32(mm));
+ }
+ break;
+ }
+}
+
+template< typename CharT >
+BOOST_FORCEINLINE void store_characters_x3(__m256i mm_chars1, __m256i mm_chars2, __m256i mm_chars3, CharT* buf)
+{
+ store_characters(_mm256_castsi256_si128(mm_chars1), buf);
+ store_characters(_mm256_castsi256_si128(mm_chars2), buf + 16);
+ store_characters(_mm256_castsi256_si128(mm_chars3), buf + 32);
+ store_characters(_mm256_extracti128_si256(mm_chars1, 1), buf + 48);
+ store_characters(_mm256_extracti128_si256(mm_chars2, 1), buf + 64);
+ store_characters(_mm256_extracti128_si256(mm_chars3, 1), buf + 80);
+}
+
+template< typename CharT >
+BOOST_FORCEINLINE void dump_data_avx2(const void* data, std::size_t size, std::basic_ostream< CharT >& strm)
+{
+ typedef CharT char_type;
+
+ char_type buf_storage[stride * 3u + 32u];
+ // Align the temporary buffer at 32 bytes
+ char_type* const buf = reinterpret_cast< char_type* >((uint8_t*)buf_storage + (32u - (((uintptr_t)(char_type*)buf_storage) & 31u)));
+ char_type* buf_begin = buf + 1u; // skip the first space of the first chunk
+ char_type* buf_end = buf + stride * 3u;
+
+ __m256i mm_char_10_to_a;
+ if (strm.flags() & std::ios_base::uppercase)
+ mm_char_10_to_a = _mm256_set1_epi32(0x07070707); // '9' is 0x39 and 'A' is 0x41 in ASCII, so we have to add 0x07 to 0x3A to get uppercase letters
+ else
+ mm_char_10_to_a = _mm256_set1_epi32(0x27272727); // ...and 'a' is 0x61, which means we have to add 0x27 to 0x3A to get lowercase letters
+
+ // First, check the input alignment. Also, if we can dump the whole data in one go, do it right away. It turns out to be faster than splitting
+ // the work between prealign and tail part. It is also a fairly common case since on most platforms memory is not aligned to 32 bytes (i.e. prealign is often needed).
+ const uint8_t* p = static_cast< const uint8_t* >(data);
+ const std::size_t prealign_size = size == 32u ? static_cast< std::size_t >(32u) : static_cast< std::size_t >((32u - ((uintptr_t)p & 31u)) & 31u);
+ if (prealign_size)
+ {
+ __m256i mm_input = _mm256_lddqu_si256(reinterpret_cast< const __m256i* >(p));
+ BOOST_LOG_AUX_MM_CONSTANTS
+
+ __m256i mm_output1, mm_output2, mm_output3;
+ dump_pack(BOOST_LOG_AUX_MM_CONSTANT_ARGS mm_char_10_to_a, mm_input, mm_output1, mm_output2, mm_output3);
+
+ store_characters_x3(mm_output1, mm_output2, mm_output3, buf);
+
+ _mm256_zeroall(); // need to zero all ymm registers to avoid register spills/restores the compler generates around the function call
+ strm.write(buf_begin, prealign_size * 3u - 1u);
+
+ buf_begin = buf;
+ size -= prealign_size;
+ p += prealign_size;
+ }
+
+ const std::size_t stride_count = size / stride;
+ std::size_t tail_size = size % stride;
+ for (std::size_t i = 0; i < stride_count; ++i)
+ {
+ char_type* b = buf;
+ BOOST_LOG_AUX_MM_CONSTANTS
+
+ for (unsigned int j = 0; j < packs_per_stride; ++j, b += 3u * 32u, p += 32u)
+ {
+ __m256i mm_input = _mm256_load_si256(reinterpret_cast< const __m256i* >(p));
+ __m256i mm_output1, mm_output2, mm_output3;
+ dump_pack(BOOST_LOG_AUX_MM_CONSTANT_ARGS mm_char_10_to_a, mm_input, mm_output1, mm_output2, mm_output3);
+
+ store_characters_x3(mm_output1, mm_output2, mm_output3, b);
+ }
+
+ _mm256_zeroall(); // need to zero all ymm registers to avoid register spills/restores the compler generates around the function call
+ strm.write(buf_begin, buf_end - buf_begin);
+ buf_begin = buf;
+ }
+
+ if (BOOST_UNLIKELY(tail_size > 0))
+ {
+ char_type* b = buf;
+ while (tail_size >= 16u)
+ {
+ __m128i mm_input = _mm_load_si128(reinterpret_cast< const __m128i* >(p));
+ BOOST_LOG_AUX_MM_CONSTANTS
+
+ __m128i mm_output1, mm_output2, mm_output3;
+ dump_pack(BOOST_LOG_AUX_MM_CONSTANT_ARGS mm_char_10_to_a, mm_input, mm_output1, mm_output2, mm_output3);
+
+ store_characters(mm_output1, b);
+ store_characters(mm_output2, b + 16u);
+ store_characters(mm_output3, b + 32u);
+
+ b += 3u * 16u;
+ p += 16u;
+ tail_size -= 16u;
+ }
+
+ _mm256_zeroall(); // need to zero all ymm registers to avoid register spills/restores the compler generates around the function call
+ const char* const char_table = g_hex_char_table[(strm.flags() & std::ios_base::uppercase) != 0];
+ for (unsigned int i = 0; i < tail_size; ++i, ++p, b += 3u)
+ {
+ uint32_t n = *p;
+ b[0] = static_cast< char_type >(' ');
+ b[1] = static_cast< char_type >(char_table[n >> 4]);
+ b[2] = static_cast< char_type >(char_table[n & 0x0F]);
+ }
+
+ strm.write(buf_begin, b - buf_begin);
+ }
+}
+
+} // namespace
+
+void dump_data_char_avx2(const void* data, std::size_t size, std::basic_ostream< char >& strm)
+{
+ if (size >= 32)
+ {
+ dump_data_avx2(data, size, strm);
+ }
+ else
+ {
+ dump_data_generic(data, size, strm);
+ }
+}
+
+void dump_data_wchar_avx2(const void* data, std::size_t size, std::basic_ostream< wchar_t >& strm)
+{
+ if (size >= 32)
+ {
+ dump_data_avx2(data, size, strm);
+ }
+ else
+ {
+ dump_data_generic(data, size, strm);
+ }
+}
+
+#if !defined(BOOST_NO_CXX11_CHAR16_T)
+void dump_data_char16_avx2(const void* data, std::size_t size, std::basic_ostream< char16_t >& strm)
+{
+ if (size >= 32)
+ {
+ dump_data_avx2(data, size, strm);
+ }
+ else
+ {
+ dump_data_generic(data, size, strm);
+ }
+}
+#endif
+
+#if !defined(BOOST_NO_CXX11_CHAR32_T)
+void dump_data_char32_avx2(const void* data, std::size_t size, std::basic_ostream< char32_t >& strm)
+{
+ if (size >= 32)
+ {
+ dump_data_avx2(data, size, strm);
+ }
+ else
+ {
+ dump_data_generic(data, size, strm);
+ }
+}
+#endif
+
+} // namespace aux
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
diff --git a/contrib/restricted/boost/libs/log/src/dump_ssse3.cpp b/contrib/restricted/boost/libs/log/src/dump_ssse3.cpp
new file mode 100644
index 0000000000..1325b49c04
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/dump_ssse3.cpp
@@ -0,0 +1,311 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file dump_ssse3.cpp
+ * \author Andrey Semashev
+ * \date 05.05.2013
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+// NOTE: You should generally avoid including headers as much as possible here, because this file
+// is compiled with special compiler options, and any included header may result in generation of
+// unintended code with these options and violation of ODR.
+#include <boost/log/detail/config.hpp>
+#include <ostream>
+#include <tmmintrin.h>
+#include <boost/cstdint.hpp>
+#include <boost/log/detail/header.hpp>
+
+#if defined(__x86_64) || defined(__x86_64__) || \
+ defined(__amd64__) || defined(__amd64) || \
+ defined(_M_X64)
+#define BOOST_LOG_AUX_X86_64
+#endif
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace aux {
+
+extern const char g_hex_char_table[2][16];
+
+template< typename CharT >
+extern void dump_data_generic(const void* data, std::size_t size, std::basic_ostream< CharT >& strm);
+
+BOOST_LOG_ANONYMOUS_NAMESPACE {
+
+enum
+{
+ packs_per_stride = 32,
+ stride = packs_per_stride * 16
+};
+
+union xmm_constant
+{
+ uint8_t as_bytes[16];
+ __m128i as_mm;
+
+ BOOST_FORCEINLINE operator __m128i () const { return as_mm; }
+};
+
+static const xmm_constant mm_shuffle_pattern1 = {{ 0x80, 0, 1, 0x80, 2, 3, 0x80, 4, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80 }};
+static const xmm_constant mm_shuffle_pattern2 = {{ 0, 1, 0x80, 2, 3, 0x80, 4, 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 10 }};
+static const xmm_constant mm_shuffle_pattern3 = {{ 5, 0x80, 6, 7, 0x80, 8, 9, 0x80, 10, 11, 0x80, 12, 13, 0x80, 14, 15 }};
+
+#if defined(BOOST_LOG_AUX_X86_64)
+
+// x86-64 architecture has more registers which we can utilize to pass constants
+#define BOOST_LOG_AUX_MM_CONSTANT_ARGS_DECL __m128i mm_15, __m128i mm_9, __m128i mm_char_0, __m128i mm_char_space,
+#define BOOST_LOG_AUX_MM_CONSTANT_ARGS mm_15, mm_9, mm_char_0, mm_char_space,
+#define BOOST_LOG_AUX_MM_CONSTANTS \
+ const __m128i mm_15 = _mm_set1_epi32(0x0F0F0F0F);\
+ const __m128i mm_9 = _mm_set1_epi32(0x09090909);\
+ const __m128i mm_char_0 = _mm_set1_epi32(0x30303030);\
+ const __m128i mm_char_space = _mm_set1_epi32(0x20202020);
+
+#else
+
+// MSVC in 32-bit mode is not able to pass all constants to dump_pack, and is also not able to align them on the stack, so we have to fetch them from global constants
+static const xmm_constant mm_15 = {{ 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F }};
+static const xmm_constant mm_9 = {{ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09 }};
+static const xmm_constant mm_char_0 = {{ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 }};
+static const xmm_constant mm_char_space = {{ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }};
+#define BOOST_LOG_AUX_MM_CONSTANT_ARGS_DECL
+#define BOOST_LOG_AUX_MM_CONSTANT_ARGS
+#define BOOST_LOG_AUX_MM_CONSTANTS
+
+#endif
+
+//! Dumps a pack of input data into a string of 8 bit ASCII characters
+static BOOST_FORCEINLINE void dump_pack
+(
+ BOOST_LOG_AUX_MM_CONSTANT_ARGS_DECL
+ __m128i mm_char_10_to_a, __m128i mm_input,
+ __m128i& mm_output1, __m128i& mm_output2, __m128i& mm_output3
+)
+{
+ // Split half-bytes
+ __m128i mm_input_hi = _mm_and_si128(_mm_srli_epi16(mm_input, 4), mm_15);
+ __m128i mm_input_lo = _mm_and_si128(mm_input, mm_15);
+
+ // Stringize each of the halves
+ __m128i mm_addend_hi = _mm_cmpgt_epi8(mm_input_hi, mm_9);
+ __m128i mm_addend_lo = _mm_cmpgt_epi8(mm_input_lo, mm_9);
+ mm_addend_hi = _mm_and_si128(mm_char_10_to_a, mm_addend_hi);
+ mm_addend_lo = _mm_and_si128(mm_char_10_to_a, mm_addend_lo);
+
+ mm_input_hi = _mm_add_epi8(mm_input_hi, mm_char_0);
+ mm_input_lo = _mm_add_epi8(mm_input_lo, mm_char_0);
+
+ mm_input_hi = _mm_add_epi8(mm_input_hi, mm_addend_hi);
+ mm_input_lo = _mm_add_epi8(mm_input_lo, mm_addend_lo);
+
+ // Join them back together
+ __m128i mm_1 = _mm_unpacklo_epi8(mm_input_hi, mm_input_lo);
+ __m128i mm_2 = _mm_unpackhi_epi8(mm_input_hi, mm_input_lo);
+
+ // Insert spaces between stringized bytes:
+ // |0123456789abcdef|0123456789abcdef|
+ // | 01 23 45 67 89 |ab cd ef 01 23 4|5 67 89 ab cd ef|
+ mm_output1 = _mm_shuffle_epi8(mm_1, mm_shuffle_pattern1.as_mm);
+ mm_output2 = _mm_shuffle_epi8(_mm_alignr_epi8(mm_2, mm_1, 10), mm_shuffle_pattern2.as_mm);
+ mm_output3 = _mm_shuffle_epi8(mm_2, mm_shuffle_pattern3.as_mm);
+
+ mm_output1 = _mm_max_epu8(mm_output1, mm_char_space);
+ mm_output2 = _mm_max_epu8(mm_output2, mm_char_space);
+ mm_output3 = _mm_max_epu8(mm_output3, mm_char_space);
+}
+
+template< typename CharT >
+BOOST_FORCEINLINE void store_characters(__m128i mm_chars, CharT* buf)
+{
+ switch (sizeof(CharT))
+ {
+ case 1:
+ _mm_store_si128(reinterpret_cast< __m128i* >(buf), mm_chars);
+ break;
+
+ case 2:
+ {
+ __m128i mm_0 = _mm_setzero_si128();
+ _mm_store_si128(reinterpret_cast< __m128i* >(buf), _mm_unpacklo_epi8(mm_chars, mm_0));
+ _mm_store_si128(reinterpret_cast< __m128i* >(buf) + 1, _mm_unpackhi_epi8(mm_chars, mm_0));
+ }
+ break;
+
+ case 4:
+ {
+ __m128i mm_0 = _mm_setzero_si128();
+ __m128i mm = _mm_unpacklo_epi8(mm_chars, mm_0);
+ _mm_store_si128(reinterpret_cast< __m128i* >(buf), _mm_unpacklo_epi16(mm, mm_0));
+ _mm_store_si128(reinterpret_cast< __m128i* >(buf) + 1, _mm_unpackhi_epi16(mm, mm_0));
+ mm = _mm_unpackhi_epi8(mm_chars, mm_0);
+ _mm_store_si128(reinterpret_cast< __m128i* >(buf) + 2, _mm_unpacklo_epi16(mm, mm_0));
+ _mm_store_si128(reinterpret_cast< __m128i* >(buf) + 3, _mm_unpackhi_epi16(mm, mm_0));
+ }
+ break;
+ }
+}
+
+template< typename CharT >
+BOOST_FORCEINLINE void dump_data_ssse3(const void* data, std::size_t size, std::basic_ostream< CharT >& strm)
+{
+ typedef CharT char_type;
+
+ char_type buf_storage[stride * 3u + 16u];
+ // Align the temporary buffer at 16 bytes
+ char_type* const buf = reinterpret_cast< char_type* >((uint8_t*)buf_storage + (16u - (((uintptr_t)(char_type*)buf_storage) & 15u)));
+ char_type* buf_begin = buf + 1u; // skip the first space of the first chunk
+ char_type* buf_end = buf + stride * 3u;
+
+ __m128i mm_char_10_to_a;
+ if (strm.flags() & std::ios_base::uppercase)
+ mm_char_10_to_a = _mm_set1_epi32(0x07070707); // '9' is 0x39 and 'A' is 0x41 in ASCII, so we have to add 0x07 to 0x3A to get uppercase letters
+ else
+ mm_char_10_to_a = _mm_set1_epi32(0x27272727); // ...and 'a' is 0x61, which means we have to add 0x27 to 0x3A to get lowercase letters
+
+ // First, check the input alignment
+ const uint8_t* p = static_cast< const uint8_t* >(data);
+ const std::size_t prealign_size = ((16u - ((uintptr_t)p & 15u)) & 15u);
+ if (BOOST_UNLIKELY(prealign_size > 0))
+ {
+ __m128i mm_input = _mm_lddqu_si128(reinterpret_cast< const __m128i* >(p));
+ BOOST_LOG_AUX_MM_CONSTANTS
+
+ __m128i mm_output1, mm_output2, mm_output3;
+ dump_pack(BOOST_LOG_AUX_MM_CONSTANT_ARGS mm_char_10_to_a, mm_input, mm_output1, mm_output2, mm_output3);
+
+ store_characters(mm_output1, buf);
+ store_characters(mm_output2, buf + 16u);
+ store_characters(mm_output3, buf + 32u);
+
+ strm.write(buf_begin, prealign_size * 3u - 1u);
+
+ buf_begin = buf;
+ size -= prealign_size;
+ p += prealign_size;
+ }
+
+ const std::size_t stride_count = size / stride;
+ std::size_t tail_size = size % stride;
+ for (std::size_t i = 0; i < stride_count; ++i)
+ {
+ char_type* b = buf;
+ BOOST_LOG_AUX_MM_CONSTANTS
+
+ for (unsigned int j = 0; j < packs_per_stride; ++j, b += 3u * 16u, p += 16u)
+ {
+ __m128i mm_input = _mm_load_si128(reinterpret_cast< const __m128i* >(p));
+ __m128i mm_output1, mm_output2, mm_output3;
+ dump_pack(BOOST_LOG_AUX_MM_CONSTANT_ARGS mm_char_10_to_a, mm_input, mm_output1, mm_output2, mm_output3);
+
+ store_characters(mm_output1, b);
+ store_characters(mm_output2, b + 16u);
+ store_characters(mm_output3, b + 32u);
+ }
+
+ strm.write(buf_begin, buf_end - buf_begin);
+ buf_begin = buf;
+ }
+
+ if (BOOST_UNLIKELY(tail_size > 0))
+ {
+ char_type* b = buf;
+ while (tail_size >= 16u)
+ {
+ __m128i mm_input = _mm_load_si128(reinterpret_cast< const __m128i* >(p));
+ BOOST_LOG_AUX_MM_CONSTANTS
+
+ __m128i mm_output1, mm_output2, mm_output3;
+ dump_pack(BOOST_LOG_AUX_MM_CONSTANT_ARGS mm_char_10_to_a, mm_input, mm_output1, mm_output2, mm_output3);
+
+ store_characters(mm_output1, b);
+ store_characters(mm_output2, b + 16u);
+ store_characters(mm_output3, b + 32u);
+
+ b += 3u * 16u;
+ p += 16u;
+ tail_size -= 16u;
+ }
+
+ const char* const char_table = g_hex_char_table[(strm.flags() & std::ios_base::uppercase) != 0];
+ for (unsigned int i = 0; i < tail_size; ++i, ++p, b += 3u)
+ {
+ uint32_t n = *p;
+ b[0] = static_cast< char_type >(' ');
+ b[1] = static_cast< char_type >(char_table[n >> 4]);
+ b[2] = static_cast< char_type >(char_table[n & 0x0F]);
+ }
+
+ strm.write(buf_begin, b - buf_begin);
+ }
+}
+
+} // namespace
+
+void dump_data_char_ssse3(const void* data, std::size_t size, std::basic_ostream< char >& strm)
+{
+ if (size >= 16)
+ {
+ dump_data_ssse3(data, size, strm);
+ }
+ else
+ {
+ dump_data_generic(data, size, strm);
+ }
+}
+
+void dump_data_wchar_ssse3(const void* data, std::size_t size, std::basic_ostream< wchar_t >& strm)
+{
+ if (size >= 16)
+ {
+ dump_data_ssse3(data, size, strm);
+ }
+ else
+ {
+ dump_data_generic(data, size, strm);
+ }
+}
+
+#if !defined(BOOST_NO_CXX11_CHAR16_T)
+void dump_data_char16_ssse3(const void* data, std::size_t size, std::basic_ostream< char16_t >& strm)
+{
+ if (size >= 16)
+ {
+ dump_data_ssse3(data, size, strm);
+ }
+ else
+ {
+ dump_data_generic(data, size, strm);
+ }
+}
+#endif
+
+#if !defined(BOOST_NO_CXX11_CHAR32_T)
+void dump_data_char32_ssse3(const void* data, std::size_t size, std::basic_ostream< char32_t >& strm)
+{
+ if (size >= 16)
+ {
+ dump_data_ssse3(data, size, strm);
+ }
+ else
+ {
+ dump_data_generic(data, size, strm);
+ }
+}
+#endif
+
+} // namespace aux
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
diff --git a/contrib/restricted/boost/libs/log/src/windows/auto_handle.hpp b/contrib/restricted/boost/libs/log/src/windows/auto_handle.hpp
new file mode 100644
index 0000000000..ebd01babd7
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/auto_handle.hpp
@@ -0,0 +1,79 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file windows/auto_handle.hpp
+ * \author Andrey Semashev
+ * \date 07.03.2016
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#ifndef BOOST_LOG_WINDOWS_AUTO_HANDLE_HPP_INCLUDED_
+#define BOOST_LOG_WINDOWS_AUTO_HANDLE_HPP_INCLUDED_
+
+#include <boost/log/detail/config.hpp>
+#include <boost/assert.hpp>
+#include <boost/winapi/handles.hpp>
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace ipc {
+
+namespace aux {
+
+//! A wrapper around a kernel object handle. Automatically closes the handle on destruction.
+class auto_handle
+{
+private:
+ boost::winapi::HANDLE_ m_handle;
+
+public:
+ explicit auto_handle(boost::winapi::HANDLE_ h = NULL) BOOST_NOEXCEPT : m_handle(h)
+ {
+ }
+
+ ~auto_handle() BOOST_NOEXCEPT
+ {
+ if (m_handle)
+ BOOST_VERIFY(boost::winapi::CloseHandle(m_handle) != 0);
+ }
+
+ void init(boost::winapi::HANDLE_ h) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(m_handle == NULL);
+ m_handle = h;
+ }
+
+ boost::winapi::HANDLE_ get() const BOOST_NOEXCEPT { return m_handle; }
+ boost::winapi::HANDLE_* get_ptr() BOOST_NOEXCEPT { return &m_handle; }
+
+ void swap(auto_handle& that) BOOST_NOEXCEPT
+ {
+ boost::winapi::HANDLE_ h = m_handle;
+ m_handle = that.m_handle;
+ that.m_handle = h;
+ }
+
+ BOOST_DELETED_FUNCTION(auto_handle(auto_handle const&))
+ BOOST_DELETED_FUNCTION(auto_handle& operator=(auto_handle const&))
+};
+
+} // namespace aux
+
+} // namespace ipc
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // BOOST_LOG_WINDOWS_AUTO_HANDLE_HPP_INCLUDED_
diff --git a/contrib/restricted/boost/libs/log/src/windows/debug_output_backend.cpp b/contrib/restricted/boost/libs/log/src/windows/debug_output_backend.cpp
new file mode 100644
index 0000000000..105dd68f4c
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/debug_output_backend.cpp
@@ -0,0 +1,78 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file debug_output_backend.cpp
+ * \author Andrey Semashev
+ * \date 08.11.2008
+ *
+ * \brief A logging sink backend that uses debugger output
+ */
+
+#ifndef BOOST_LOG_WITHOUT_DEBUG_OUTPUT
+
+#include <boost/log/detail/config.hpp>
+#include <string>
+#include <boost/log/sinks/debug_output_backend.hpp>
+#include <windows.h>
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace sinks {
+
+BOOST_LOG_ANONYMOUS_NAMESPACE {
+
+#if defined(BOOST_LOG_USE_CHAR)
+ inline void output_debug_string(const char* str)
+ {
+ OutputDebugStringA(str);
+ }
+#endif // defined(BOOST_LOG_USE_CHAR)
+#if defined(BOOST_LOG_USE_WCHAR_T)
+ inline void output_debug_string(const wchar_t* str)
+ {
+ OutputDebugStringW(str);
+ }
+#endif // defined(BOOST_LOG_USE_WCHAR_T)
+
+} // namespace
+
+template< typename CharT >
+BOOST_LOG_API basic_debug_output_backend< CharT >::basic_debug_output_backend()
+{
+}
+
+template< typename CharT >
+BOOST_LOG_API basic_debug_output_backend< CharT >::~basic_debug_output_backend()
+{
+}
+
+//! The method puts the formatted message to the event log
+template< typename CharT >
+BOOST_LOG_API void basic_debug_output_backend< CharT >::consume(record_view const&, string_type const& formatted_message)
+{
+ output_debug_string(formatted_message.c_str());
+}
+
+#ifdef BOOST_LOG_USE_CHAR
+template class basic_debug_output_backend< char >;
+#endif
+#ifdef BOOST_LOG_USE_WCHAR_T
+template class basic_debug_output_backend< wchar_t >;
+#endif
+
+} // namespace sinks
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // !defined(BOOST_LOG_WITHOUT_DEBUG_OUTPUT)
diff --git a/contrib/restricted/boost/libs/log/src/windows/event_log_backend.cpp b/contrib/restricted/boost/libs/log/src/windows/event_log_backend.cpp
new file mode 100644
index 0000000000..a3382c8c51
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/event_log_backend.cpp
@@ -0,0 +1,635 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file event_log_backend.cpp
+ * \author Andrey Semashev
+ * \date 07.11.2008
+ *
+ * \brief A logging sink backend that uses Windows NT event log API
+ * for signalling application events.
+ */
+
+#ifndef BOOST_LOG_WITHOUT_EVENT_LOG
+
+#include <boost/log/detail/config.hpp>
+#include <string>
+#include <vector>
+#include <ostream>
+#include <stdexcept>
+#include <boost/scoped_array.hpp>
+#include <boost/system/windows_error.hpp>
+#include <boost/log/exceptions.hpp>
+#include <boost/log/sinks/event_log_backend.hpp>
+#include <boost/log/sinks/event_log_constants.hpp>
+#include <boost/log/utility/once_block.hpp>
+#include <boost/log/detail/cleanup_scope_guard.hpp>
+#include <boost/log/detail/attachable_sstream_buf.hpp>
+#include <boost/log/detail/code_conversion.hpp>
+#include <boost/log/utility/formatting_ostream.hpp>
+#include <windows.h>
+#include <psapi.h>
+#include "unique_ptr.hpp"
+#include "windows/event_log_registry.hpp"
+#include "windows/simple_event_log.h"
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace sinks {
+
+namespace event_log {
+
+ //! The function constructs log record level from an integer
+ BOOST_LOG_API event_type make_event_type(unsigned short lev)
+ {
+ switch (lev)
+ {
+ case success: return success;
+ case warning: return warning;
+ case error: return error;
+ default:
+ BOOST_THROW_EXCEPTION(std::out_of_range("Windows NT event type is out of range"));
+ BOOST_LOG_UNREACHABLE_RETURN(info);
+ case info: return info;
+ }
+ }
+
+} // namespace event_log
+
+BOOST_LOG_ANONYMOUS_NAMESPACE {
+
+#ifdef BOOST_LOG_USE_CHAR
+ //! A simple forwarder to the ReportEvent API
+ inline BOOL report_event(
+ HANDLE hEventLog,
+ WORD wType,
+ WORD wCategory,
+ DWORD dwEventID,
+ PSID lpUserSid,
+ WORD wNumStrings,
+ DWORD dwDataSize,
+ const char** lpStrings,
+ LPVOID lpRawData)
+ {
+ return ReportEventA(hEventLog, wType, wCategory, dwEventID, lpUserSid, wNumStrings, dwDataSize, lpStrings, lpRawData);
+ }
+ //! A simple forwarder to the GetModuleFileName API
+ inline DWORD get_module_file_name(HMODULE hModule, char* lpFilename, DWORD nSize)
+ {
+ return GetModuleFileNameA(hModule, lpFilename, nSize);
+ }
+ //! A simple forwarder to the RegisterEventSource API
+ inline HANDLE register_event_source(const char* lpUNCServerName, const char* lpSourceName)
+ {
+ return RegisterEventSourceA(lpUNCServerName, lpSourceName);
+ }
+ //! The function completes default source name for the sink backend
+ inline void complete_default_simple_event_log_source_name(std::string& name)
+ {
+ name += " simple event source";
+ }
+ //! The function completes default source name for the sink backend
+ inline void complete_default_event_log_source_name(std::string& name)
+ {
+ name += " event source";
+ }
+#endif // BOOST_LOG_USE_CHAR
+
+#ifdef BOOST_LOG_USE_WCHAR_T
+ //! A simple forwarder to the ReportEvent API
+ inline BOOL report_event(
+ HANDLE hEventLog,
+ WORD wType,
+ WORD wCategory,
+ DWORD dwEventID,
+ PSID lpUserSid,
+ WORD wNumStrings,
+ DWORD dwDataSize,
+ const wchar_t** lpStrings,
+ LPVOID lpRawData)
+ {
+ return ReportEventW(hEventLog, wType, wCategory, dwEventID, lpUserSid, wNumStrings, dwDataSize, lpStrings, lpRawData);
+ }
+ //! A simple forwarder to the GetModuleFileName API
+ inline DWORD get_module_file_name(HMODULE hModule, wchar_t* lpFilename, DWORD nSize)
+ {
+ return GetModuleFileNameW(hModule, lpFilename, nSize);
+ }
+ //! A simple forwarder to the RegisterEventSource API
+ inline HANDLE register_event_source(const wchar_t* lpUNCServerName, const wchar_t* lpSourceName)
+ {
+ return RegisterEventSourceW(lpUNCServerName, lpSourceName);
+ }
+ //! The function completes default source name for the sink backend
+ inline void complete_default_simple_event_log_source_name(std::wstring& name)
+ {
+ name += L" simple event source";
+ }
+ //! The function completes default source name for the sink backend
+ inline void complete_default_event_log_source_name(std::wstring& name)
+ {
+ name += L" event source";
+ }
+#endif // BOOST_LOG_USE_WCHAR_T
+
+ //! The function finds the handle for the current module
+ void init_self_module_handle(HMODULE& handle)
+ {
+ // Acquire all modules of the current process
+ HANDLE hProcess = GetCurrentProcess();
+ std::vector< HMODULE > modules;
+ DWORD module_count = 1024;
+ do
+ {
+ modules.resize(module_count, HMODULE(0));
+ BOOL res = EnumProcessModules(
+ hProcess,
+ &modules[0],
+ static_cast< DWORD >(modules.size() * sizeof(HMODULE)),
+ &module_count);
+ module_count /= sizeof(HMODULE);
+
+ if (!res)
+ {
+ DWORD err = GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not enumerate process modules", (err));
+ }
+ }
+ while (module_count > modules.size());
+ modules.resize(module_count, HMODULE(0));
+
+ // Now find the current module among them
+ void* p = (void*)&init_self_module_handle;
+ for (std::size_t i = 0, n = modules.size(); i < n; ++i)
+ {
+ MODULEINFO info;
+ if (!GetModuleInformation(hProcess, modules[i], &info, sizeof(info)))
+ {
+ DWORD err = GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not acquire module information", (err));
+ }
+
+ if (info.lpBaseOfDll <= p && (static_cast< unsigned char* >(info.lpBaseOfDll) + info.SizeOfImage) > p)
+ {
+ // Found it
+ handle = modules[i];
+ break;
+ }
+ }
+
+ if (!handle)
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not find self module information", (boost::system::windows_error::invalid_handle));
+ }
+
+ //! Retrieves the full name of the current module (be that dll or exe)
+ template< typename CharT >
+ std::basic_string< CharT > get_current_module_name()
+ {
+ static HMODULE hSelfModule = 0;
+
+ BOOST_LOG_ONCE_BLOCK()
+ {
+ init_self_module_handle(hSelfModule);
+ }
+
+ // Get the module file name
+ CharT buf[MAX_PATH];
+ DWORD size = get_module_file_name(hSelfModule, buf, sizeof(buf) / sizeof(*buf));
+ if (size == 0)
+ {
+ DWORD err = GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not get module file name", (err));
+ }
+
+ return std::basic_string< CharT >(buf, buf + size);
+ }
+
+} // namespace
+
+//////////////////////////////////////////////////////////////////////////
+// Simple event log backend implementation
+//////////////////////////////////////////////////////////////////////////
+//! Sink backend implementation
+template< typename CharT >
+struct basic_simple_event_log_backend< CharT >::implementation
+{
+ //! A handle for the registered event provider
+ HANDLE m_SourceHandle;
+ //! A level mapping functor
+ event_type_mapper_type m_LevelMapper;
+
+ implementation() : m_SourceHandle(0)
+ {
+ }
+};
+
+//! Default constructor. Registers event source Boost.Log <Boost version> in the Application log.
+template< typename CharT >
+BOOST_LOG_API basic_simple_event_log_backend< CharT >::basic_simple_event_log_backend()
+{
+ construct(log::aux::empty_arg_list());
+}
+
+//! Destructor
+template< typename CharT >
+BOOST_LOG_API basic_simple_event_log_backend< CharT >::~basic_simple_event_log_backend()
+{
+ DeregisterEventSource(m_pImpl->m_SourceHandle);
+ delete m_pImpl;
+}
+
+//! Constructs backend implementation
+template< typename CharT >
+BOOST_LOG_API void basic_simple_event_log_backend< CharT >::construct(
+ string_type const& target, string_type const& log_name, string_type const& source_name, event_log::registration_mode reg_mode)
+{
+ if (reg_mode != event_log::never)
+ {
+ aux::registry_params< char_type > reg_params;
+ reg_params.event_message_file = get_current_module_name< char_type >();
+ reg_params.types_supported = DWORD(
+ EVENTLOG_SUCCESS |
+ EVENTLOG_INFORMATION_TYPE |
+ EVENTLOG_WARNING_TYPE |
+ EVENTLOG_ERROR_TYPE);
+ aux::init_event_log_registry(log_name, source_name, reg_mode == event_log::forced, reg_params);
+ }
+
+ log::aux::unique_ptr< implementation > p(new implementation());
+
+ const char_type* target_unc = NULL;
+ if (!target.empty())
+ target_unc = target.c_str();
+
+ HANDLE hSource = register_event_source(target_unc, source_name.c_str());
+ if (!hSource)
+ {
+ const DWORD err = GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not register event source", (err));
+ }
+
+ p->m_SourceHandle = hSource;
+
+ m_pImpl = p.release();
+}
+
+//! Returns default log name
+template< typename CharT >
+BOOST_LOG_API typename basic_simple_event_log_backend< CharT >::string_type
+basic_simple_event_log_backend< CharT >::get_default_log_name()
+{
+ return aux::registry_traits< char_type >::make_default_log_name();
+}
+
+//! Returns default source name
+template< typename CharT >
+BOOST_LOG_API typename basic_simple_event_log_backend< CharT >::string_type
+basic_simple_event_log_backend< CharT >::get_default_source_name()
+{
+ string_type source_name = aux::registry_traits< char_type >::make_default_source_name();
+ complete_default_simple_event_log_source_name(source_name);
+ return source_name;
+}
+
+//! The method installs the function object that maps application severity levels to WinAPI event types
+template< typename CharT >
+BOOST_LOG_API void basic_simple_event_log_backend< CharT >::set_event_type_mapper(event_type_mapper_type const& mapper)
+{
+ m_pImpl->m_LevelMapper = mapper;
+}
+
+//! The method puts the formatted message to the event log
+template< typename CharT >
+BOOST_LOG_API void basic_simple_event_log_backend< CharT >::consume(record_view const& rec, string_type const& formatted_message)
+{
+ const char_type* message = formatted_message.c_str();
+ event_log::event_type evt_type = event_log::info;
+ if (!m_pImpl->m_LevelMapper.empty())
+ evt_type = m_pImpl->m_LevelMapper(rec);
+
+ DWORD event_id;
+ switch (evt_type)
+ {
+ case event_log::success:
+ event_id = BOOST_LOG_MSG_DEBUG; break;
+ case event_log::warning:
+ event_id = BOOST_LOG_MSG_WARNING; break;
+ case event_log::error:
+ event_id = BOOST_LOG_MSG_ERROR; break;
+ default:
+ event_id = BOOST_LOG_MSG_INFO; break;
+ }
+
+ report_event(
+ m_pImpl->m_SourceHandle, // Event log handle.
+ static_cast< WORD >(evt_type), // Event type.
+ 0, // Event category.
+ event_id, // Event identifier.
+ NULL, // No user security identifier.
+ 1, // Number of substitution strings.
+ 0, // No data.
+ &message, // Pointer to strings.
+ NULL); // No data.
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Customizable event log backend implementation
+//////////////////////////////////////////////////////////////////////////
+namespace event_log {
+
+ template< typename CharT >
+ class basic_event_composer< CharT >::insertion_composer
+ {
+ public:
+ //! Function object result type
+ typedef void result_type;
+
+ private:
+ //! The list of insertion composers (in backward order)
+ typedef std::vector< formatter_type > formatters;
+
+ private:
+ //! The insertion string composers
+ formatters m_Formatters;
+
+ public:
+ //! Default constructor
+ insertion_composer() {}
+ //! Composition operator
+ void operator() (record_view const& rec, insertion_list& insertions) const
+ {
+ std::size_t size = m_Formatters.size();
+ insertions.resize(size);
+ for (std::size_t i = 0; i < size; ++i)
+ {
+ typename formatter_type::stream_type strm(insertions[i]);
+ m_Formatters[i](rec, strm);
+ strm.flush();
+ }
+ }
+ //! Adds a new formatter to the list
+ void add_formatter(formatter_type const& fmt)
+ {
+ m_Formatters.push_back(formatter_type(fmt));
+ }
+ };
+
+ //! Default constructor
+ template< typename CharT >
+ basic_event_composer< CharT >::basic_event_composer(event_id_mapper_type const& id_mapper) :
+ m_EventIDMapper(id_mapper)
+ {
+ }
+ //! Copy constructor
+ template< typename CharT >
+ basic_event_composer< CharT >::basic_event_composer(basic_event_composer const& that) :
+ m_EventIDMapper(that.m_EventIDMapper),
+ m_EventMap(that.m_EventMap)
+ {
+ }
+ //! Destructor
+ template< typename CharT >
+ basic_event_composer< CharT >::~basic_event_composer()
+ {
+ }
+
+ //! Assignment
+ template< typename CharT >
+ basic_event_composer< CharT >& basic_event_composer< CharT >::operator= (basic_event_composer that)
+ {
+ swap(that);
+ return *this;
+ }
+ //! Swapping
+ template< typename CharT >
+ void basic_event_composer< CharT >::swap(basic_event_composer& that)
+ {
+ m_EventIDMapper.swap(that.m_EventIDMapper);
+ m_EventMap.swap(that.m_EventMap);
+ }
+ //! Creates a new entry for a message
+ template< typename CharT >
+ typename basic_event_composer< CharT >::event_map_reference
+ basic_event_composer< CharT >::operator[] (event_id id)
+ {
+ return event_map_reference(id, *this);
+ }
+ //! Creates a new entry for a message
+ template< typename CharT >
+ typename basic_event_composer< CharT >::event_map_reference
+ basic_event_composer< CharT >::operator[] (int id)
+ {
+ return event_map_reference(make_event_id(id), *this);
+ }
+
+ //! Event composition operator
+ template< typename CharT >
+ event_id basic_event_composer< CharT >::operator() (record_view const& rec, insertion_list& insertions) const
+ {
+ event_id id = m_EventIDMapper(rec);
+ typename event_map::const_iterator it = m_EventMap.find(id);
+ if (it != m_EventMap.end())
+ it->second(rec, insertions);
+ return id;
+ }
+
+ //! Adds a formatter to the insertion composers list
+ template< typename CharT >
+ typename basic_event_composer< CharT >::insertion_composer*
+ basic_event_composer< CharT >::add_formatter(event_id id, insertion_composer* composer, formatter_type const& fmt)
+ {
+ if (!composer)
+ composer = &m_EventMap[id];
+ composer->add_formatter(fmt);
+ return composer;
+ }
+
+#ifdef BOOST_LOG_USE_CHAR
+ template class BOOST_LOG_API basic_event_composer< char >;
+#endif
+#ifdef BOOST_LOG_USE_WCHAR_T
+ template class BOOST_LOG_API basic_event_composer< wchar_t >;
+#endif
+
+} // namespace event_log
+
+
+//! Backend implementation
+template< typename CharT >
+struct basic_event_log_backend< CharT >::implementation
+{
+ // NOTE: This order of data members is critical for MSVC 9.0 in debug mode,
+ // as it ICEs if boost::functions are not the first members. Doh!
+
+ //! An event category mapper
+ event_category_mapper_type m_CategoryMapper;
+ //! A level mapping functor
+ event_type_mapper_type m_LevelMapper;
+
+ //! A handle for the registered event provider
+ HANDLE m_SourceHandle;
+ //! A functor that composes an event
+ event_composer_type m_EventComposer;
+ //! An array of formatted insertions
+ insertion_list m_Insertions;
+
+ implementation() : m_SourceHandle(0)
+ {
+ }
+};
+
+//! Destructor
+template< typename CharT >
+BOOST_LOG_API basic_event_log_backend< CharT >::~basic_event_log_backend()
+{
+ DeregisterEventSource(m_pImpl->m_SourceHandle);
+ delete m_pImpl;
+}
+
+//! Constructs backend implementation
+template< typename CharT >
+BOOST_LOG_API void basic_event_log_backend< CharT >::construct(
+ filesystem::path const& message_file_name,
+ string_type const& target,
+ string_type const& log_name,
+ string_type const& source_name,
+ event_log::registration_mode reg_mode)
+{
+ if (reg_mode != event_log::never)
+ {
+ if (message_file_name.empty())
+ BOOST_THROW_EXCEPTION(std::invalid_argument("Message file name not specified."));
+ aux::registry_params< char_type > reg_params;
+ string_type file_name;
+ log::aux::code_convert(message_file_name.string(), file_name);
+ reg_params.event_message_file = file_name;
+ reg_params.types_supported = DWORD(
+ EVENTLOG_SUCCESS |
+ EVENTLOG_INFORMATION_TYPE |
+ EVENTLOG_WARNING_TYPE |
+ EVENTLOG_ERROR_TYPE);
+ aux::init_event_log_registry(log_name, source_name, reg_mode == event_log::forced, reg_params);
+ }
+
+ log::aux::unique_ptr< implementation > p(new implementation());
+
+ const char_type* target_unc = NULL;
+ if (!target.empty())
+ target_unc = target.c_str();
+
+ HANDLE hSource = register_event_source(target_unc, source_name.c_str());
+ if (!hSource)
+ {
+ const DWORD err = GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not register event source", (err));
+ }
+
+ p->m_SourceHandle = hSource;
+
+ m_pImpl = p.release();
+}
+
+//! The method puts the formatted message to the event log
+template< typename CharT >
+BOOST_LOG_API void basic_event_log_backend< CharT >::consume(record_view const& rec)
+{
+ if (!m_pImpl->m_EventComposer.empty())
+ {
+ log::aux::cleanup_guard< insertion_list > cleaner(m_pImpl->m_Insertions);
+
+ // Get event ID and construct insertions
+ DWORD id = m_pImpl->m_EventComposer(rec, m_pImpl->m_Insertions);
+ WORD string_count = static_cast< WORD >(m_pImpl->m_Insertions.size());
+ scoped_array< const char_type* > strings(new const char_type*[string_count]);
+ for (WORD i = 0; i < string_count; ++i)
+ strings[i] = m_pImpl->m_Insertions[i].c_str();
+
+ // Get event type
+ WORD event_type = EVENTLOG_INFORMATION_TYPE;
+ if (!m_pImpl->m_LevelMapper.empty())
+ event_type = static_cast< WORD >(m_pImpl->m_LevelMapper(rec));
+
+ WORD event_category = 0;
+ if (!m_pImpl->m_CategoryMapper.empty())
+ event_category = static_cast< WORD >(m_pImpl->m_CategoryMapper(rec));
+
+ report_event(
+ m_pImpl->m_SourceHandle, // Event log handle.
+ event_type, // Event type.
+ event_category, // Event category.
+ id, // Event identifier.
+ NULL, // No user security identifier.
+ string_count, // Number of substitution strings.
+ 0, // No data.
+ strings.get(), // Pointer to strings.
+ NULL); // No data.
+ }
+}
+
+//! Returns default log name
+template< typename CharT >
+BOOST_LOG_API typename basic_event_log_backend< CharT >::string_type
+basic_event_log_backend< CharT >::get_default_log_name()
+{
+ return aux::registry_traits< char_type >::make_default_log_name();
+}
+
+//! Returns default source name
+template< typename CharT >
+BOOST_LOG_API typename basic_event_log_backend< CharT >::string_type
+basic_event_log_backend< CharT >::get_default_source_name()
+{
+ string_type source_name = aux::registry_traits< char_type >::make_default_source_name();
+ complete_default_event_log_source_name(source_name);
+ return source_name;
+}
+
+//! The method installs the function object that maps application severity levels to WinAPI event types
+template< typename CharT >
+BOOST_LOG_API void basic_event_log_backend< CharT >::set_event_type_mapper(event_type_mapper_type const& mapper)
+{
+ m_pImpl->m_LevelMapper = mapper;
+}
+
+//! The method installs the function object that extracts event category from attribute values
+template< typename CharT >
+BOOST_LOG_API void basic_event_log_backend< CharT >::set_event_category_mapper(event_category_mapper_type const& mapper)
+{
+ m_pImpl->m_CategoryMapper = mapper;
+}
+
+/*!
+ * The method installs the function object that extracts event identifier from the attributes and creates
+ * insertion strings that will replace placeholders in the event message.
+ */
+template< typename CharT >
+BOOST_LOG_API void basic_event_log_backend< CharT >::set_event_composer(event_composer_type const& composer)
+{
+ m_pImpl->m_EventComposer = composer;
+}
+
+
+#ifdef BOOST_LOG_USE_CHAR
+template class basic_simple_event_log_backend< char >;
+template class basic_event_log_backend< char >;
+#endif
+#ifdef BOOST_LOG_USE_WCHAR_T
+template class basic_simple_event_log_backend< wchar_t >;
+template class basic_event_log_backend< wchar_t >;
+#endif
+
+} // namespace sinks
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // !defined(BOOST_LOG_WITHOUT_EVENT_LOG)
diff --git a/contrib/restricted/boost/libs/log/src/windows/event_log_registry.hpp b/contrib/restricted/boost/libs/log/src/windows/event_log_registry.hpp
new file mode 100644
index 0000000000..9d1579accb
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/event_log_registry.hpp
@@ -0,0 +1,491 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file event_log_registry.hpp
+ * \author Andrey Semashev
+ * \date 16.11.2008
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#ifndef BOOST_LOG_WINDOWS_EVENT_LOG_REGISTRY_HPP_INCLUDED_
+#define BOOST_LOG_WINDOWS_EVENT_LOG_REGISTRY_HPP_INCLUDED_
+
+#include <boost/log/detail/config.hpp>
+#include <cwchar>
+#include <cstring>
+#include <string>
+#include <sstream>
+#include <stdexcept>
+#include <boost/version.hpp>
+#include <boost/optional/optional.hpp>
+#include <boost/log/detail/code_conversion.hpp>
+#include <boost/log/exceptions.hpp>
+#include <windows.h>
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace sinks {
+
+namespace aux {
+
+// MSVC versions up to 2008 (or their Platform SDKs, to be more precise) don't define LSTATUS.
+// Perhaps, that is also the case for MinGW and Cygwin (untested).
+typedef DWORD LSTATUS;
+
+// Max registry string size, in characters (for security reasons)
+const DWORD max_string_size = 64u * 1024u;
+
+//! Helper traits to integrate with WinAPI
+template< typename CharT >
+struct registry_traits;
+
+#ifdef BOOST_LOG_USE_CHAR
+template< >
+struct registry_traits< char >
+{
+ static std::string make_event_log_key(std::string const& log_name, std::string const& source_name)
+ {
+ return "SYSTEM\\CurrentControlSet\\Services\\EventLog\\" + log_name + "\\" + source_name;
+ }
+
+ static std::string make_default_log_name()
+ {
+ return "Application";
+ }
+
+ static std::string make_default_source_name()
+ {
+ char buf[MAX_PATH];
+ DWORD size = GetModuleFileNameA(NULL, buf, sizeof(buf) / sizeof(*buf));
+
+ std::string source_name(buf, buf + size);
+ if (source_name.empty())
+ {
+ // In case of error we provide artificial application name
+ std::ostringstream strm;
+ strm << "Boost.Log "
+ << static_cast< unsigned int >(BOOST_VERSION / 100000)
+ << "."
+ << static_cast< unsigned int >(BOOST_VERSION / 100 % 1000)
+ << "."
+ << static_cast< unsigned int >(BOOST_VERSION % 100);
+ source_name = strm.str();
+ }
+ else
+ {
+ // Cut off the path and extension
+ std::size_t backslash_pos = source_name.rfind('\\');
+ if (backslash_pos == std::string::npos || backslash_pos >= source_name.size() - 1)
+ backslash_pos = 0;
+ else
+ ++backslash_pos;
+ std::size_t dot_pos = source_name.rfind('.');
+ if (dot_pos == std::string::npos || dot_pos < backslash_pos)
+ dot_pos = source_name.size();
+ source_name = source_name.substr(backslash_pos, dot_pos - backslash_pos);
+ }
+
+ return source_name;
+ }
+
+ static LSTATUS create_key(
+ HKEY hKey,
+ const char* lpSubKey,
+ DWORD Reserved,
+ char* lpClass,
+ DWORD dwOptions,
+ REGSAM samDesired,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ PHKEY phkResult,
+ LPDWORD lpdwDisposition)
+ {
+ return RegCreateKeyExA(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition);
+ }
+
+ static LSTATUS open_key(
+ HKEY hKey,
+ const char* lpSubKey,
+ DWORD dwOptions,
+ REGSAM samDesired,
+ PHKEY phkResult)
+ {
+ return RegOpenKeyExA(hKey, lpSubKey, dwOptions, samDesired, phkResult);
+ }
+
+ static LSTATUS set_value(
+ HKEY hKey,
+ const char* lpValueName,
+ DWORD Reserved,
+ DWORD dwType,
+ const BYTE* lpData,
+ DWORD cbData)
+ {
+ return RegSetValueExA(hKey, lpValueName, Reserved, dwType, lpData, cbData);
+ }
+
+ static LSTATUS get_value(HKEY hKey, const char* lpValueName, DWORD& value)
+ {
+ DWORD type = REG_NONE, size = sizeof(value);
+ LSTATUS res = RegQueryValueExA(hKey, lpValueName, NULL, &type, reinterpret_cast< LPBYTE >(&value), &size);
+ if (res == ERROR_SUCCESS && type != REG_DWORD && type != REG_BINARY)
+ res = ERROR_INVALID_DATA;
+ return res;
+ }
+
+ static LSTATUS get_value(HKEY hKey, const char* lpValueName, std::string& value)
+ {
+ DWORD type = REG_NONE, size = 0;
+ LSTATUS res = RegQueryValueExA(hKey, lpValueName, NULL, &type, NULL, &size);
+ if (res == ERROR_SUCCESS && ((type != REG_EXPAND_SZ && type != REG_SZ) || size > max_string_size))
+ return ERROR_INVALID_DATA;
+ if (size == 0)
+ return res;
+
+ value.resize(size);
+ res = RegQueryValueExA(hKey, lpValueName, NULL, &type, reinterpret_cast< LPBYTE >(&value[0]), &size);
+ value.resize(std::strlen(value.c_str())); // remove extra terminating zero
+
+ return res;
+ }
+
+ static const char* get_event_message_file_param_name() { return "EventMessageFile"; }
+ static const char* get_category_message_file_param_name() { return "CategoryMessageFile"; }
+ static const char* get_category_count_param_name() { return "CategoryCount"; }
+ static const char* get_types_supported_param_name() { return "TypesSupported"; }
+};
+#endif // BOOST_LOG_USE_CHAR
+
+#ifdef BOOST_LOG_USE_WCHAR_T
+template< >
+struct registry_traits< wchar_t >
+{
+ static std::wstring make_event_log_key(std::wstring const& log_name, std::wstring const& source_name)
+ {
+ return L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\" + log_name + L"\\" + source_name;
+ }
+
+ static std::wstring make_default_log_name()
+ {
+ return L"Application";
+ }
+
+ static std::wstring make_default_source_name()
+ {
+ wchar_t buf[MAX_PATH];
+ DWORD size = GetModuleFileNameW(NULL, buf, sizeof(buf) / sizeof(*buf));
+
+ std::wstring source_name(buf, buf + size);
+ if (source_name.empty())
+ {
+ // In case of error we provide artificial application name
+ std::wostringstream strm;
+ strm << L"Boost.Log "
+ << static_cast< unsigned int >(BOOST_VERSION / 100000)
+ << L"."
+ << static_cast< unsigned int >(BOOST_VERSION / 100 % 1000)
+ << L"."
+ << static_cast< unsigned int >(BOOST_VERSION % 100);
+ source_name = strm.str();
+ }
+ else
+ {
+ // Cut off the path and extension
+ std::size_t backslash_pos = source_name.rfind(L'\\');
+ if (backslash_pos == std::wstring::npos || backslash_pos >= source_name.size() - 1)
+ backslash_pos = 0;
+ else
+ ++backslash_pos;
+ std::size_t dot_pos = source_name.rfind(L'.');
+ if (dot_pos == std::wstring::npos || dot_pos < backslash_pos)
+ dot_pos = source_name.size();
+ source_name = source_name.substr(backslash_pos, dot_pos - backslash_pos);
+ }
+
+ return source_name;
+ }
+
+ static LSTATUS create_key(
+ HKEY hKey,
+ const wchar_t* lpSubKey,
+ DWORD Reserved,
+ wchar_t* lpClass,
+ DWORD dwOptions,
+ REGSAM samDesired,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ PHKEY phkResult,
+ LPDWORD lpdwDisposition)
+ {
+ return RegCreateKeyExW(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition);
+ }
+
+ static LSTATUS open_key(
+ HKEY hKey,
+ const wchar_t* lpSubKey,
+ DWORD dwOptions,
+ REGSAM samDesired,
+ PHKEY phkResult)
+ {
+ return RegOpenKeyExW(hKey, lpSubKey, dwOptions, samDesired, phkResult);
+ }
+
+ static LSTATUS set_value(
+ HKEY hKey,
+ const wchar_t* lpValueName,
+ DWORD Reserved,
+ DWORD dwType,
+ const BYTE* lpData,
+ DWORD cbData)
+ {
+ return RegSetValueExW(hKey, lpValueName, Reserved, dwType, lpData, cbData);
+ }
+
+ static LSTATUS get_value(HKEY hKey, const wchar_t* lpValueName, DWORD& value)
+ {
+ DWORD type = REG_NONE, size = sizeof(value);
+ LSTATUS res = RegQueryValueExW(hKey, lpValueName, NULL, &type, reinterpret_cast< LPBYTE >(&value), &size);
+ if (res == ERROR_SUCCESS && type != REG_DWORD && type != REG_BINARY)
+ res = ERROR_INVALID_DATA;
+ return res;
+ }
+
+ static LSTATUS get_value(HKEY hKey, const wchar_t* lpValueName, std::wstring& value)
+ {
+ DWORD type = REG_NONE, size = 0;
+ LSTATUS res = RegQueryValueExW(hKey, lpValueName, NULL, &type, NULL, &size);
+ size /= sizeof(wchar_t);
+ if (res == ERROR_SUCCESS && ((type != REG_EXPAND_SZ && type != REG_SZ) || size > max_string_size))
+ return ERROR_INVALID_DATA;
+ if (size == 0)
+ return res;
+
+ value.resize(size);
+ res = RegQueryValueExW(hKey, lpValueName, NULL, &type, reinterpret_cast< LPBYTE >(&value[0]), &size);
+ value.resize(std::wcslen(value.c_str())); // remove extra terminating zero
+
+ return res;
+ }
+
+ static const wchar_t* get_event_message_file_param_name() { return L"EventMessageFile"; }
+ static const wchar_t* get_category_message_file_param_name() { return L"CategoryMessageFile"; }
+ static const wchar_t* get_category_count_param_name() { return L"CategoryCount"; }
+ static const wchar_t* get_types_supported_param_name() { return L"TypesSupported"; }
+
+};
+#endif // BOOST_LOG_USE_WCHAR_T
+
+//! The structure with parameters that have to be registered in the event log registry key
+template< typename CharT >
+struct registry_params
+{
+ typedef std::basic_string< CharT > string_type;
+
+ optional< string_type > event_message_file;
+ optional< string_type > category_message_file;
+ optional< DWORD > category_count;
+ optional< DWORD > types_supported;
+};
+
+//! A simple guard that closes the registry key on destruction
+struct auto_hkey_close
+{
+ explicit auto_hkey_close(HKEY hk) : hk_(hk) {}
+ ~auto_hkey_close() { RegCloseKey(hk_); }
+
+private:
+ HKEY hk_;
+};
+
+//! The function checks if the event log is already registered
+template< typename CharT >
+bool verify_event_log_registry(std::basic_string< CharT > const& reg_key, bool force, registry_params< CharT > const& params)
+{
+ typedef std::basic_string< CharT > string_type;
+ typedef registry_traits< CharT > registry;
+
+ // Open the key
+ HKEY hkey = 0;
+ LSTATUS res = registry::open_key(
+ HKEY_LOCAL_MACHINE,
+ reg_key.c_str(),
+ REG_OPTION_NON_VOLATILE,
+ KEY_READ,
+ &hkey);
+ if (res != ERROR_SUCCESS)
+ return false;
+
+ auto_hkey_close hkey_guard(hkey);
+
+ if (force)
+ {
+ // Verify key values
+ if (!!params.event_message_file)
+ {
+ string_type module_name;
+ res = registry::get_value(hkey, registry::get_event_message_file_param_name(), module_name);
+ if (res != ERROR_SUCCESS || module_name != params.event_message_file.get())
+ return false;
+ }
+
+ if (!!params.category_message_file)
+ {
+ string_type module_name;
+ res = registry::get_value(hkey, registry::get_category_message_file_param_name(), module_name);
+ if (res != ERROR_SUCCESS || module_name != params.category_message_file.get())
+ return false;
+ }
+
+ if (!!params.category_count)
+ {
+ // Set number of categories
+ DWORD category_count = 0;
+ res = registry::get_value(hkey, registry::get_category_count_param_name(), category_count);
+ if (res != ERROR_SUCCESS || category_count != params.category_count.get())
+ return false;
+ }
+
+ if (!!params.types_supported)
+ {
+ // Set the supported event types
+ DWORD event_types = 0;
+ res = registry::get_value(hkey, registry::get_types_supported_param_name(), event_types);
+ if (res != ERROR_SUCCESS || event_types != params.types_supported.get())
+ return false;
+ }
+ }
+
+ return true;
+}
+
+//! The function initializes the event log registry key
+template< typename CharT >
+void init_event_log_registry(
+ std::basic_string< CharT > const& log_name,
+ std::basic_string< CharT > const& source_name,
+ bool force,
+ registry_params< CharT > const& params)
+{
+ typedef std::basic_string< CharT > string_type;
+ typedef registry_traits< CharT > registry;
+ // Registry key name that contains log description
+ string_type reg_key = registry::make_event_log_key(log_name, source_name);
+
+ // First check the registry keys and values in read-only mode.
+ // This allows to avoid UAC asking for elevated permissions to modify HKLM registry when no modification is actually needed.
+ if (verify_event_log_registry(reg_key, force, params))
+ return;
+
+ // Create or open the key
+ HKEY hkey = 0;
+ DWORD disposition = 0;
+ LSTATUS res = registry::create_key(
+ HKEY_LOCAL_MACHINE,
+ reg_key.c_str(),
+ 0,
+ NULL,
+ REG_OPTION_NON_VOLATILE,
+ KEY_WRITE,
+ NULL,
+ &hkey,
+ &disposition);
+ if (res != ERROR_SUCCESS)
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not create registry key for the event log", (res));
+
+ auto_hkey_close hkey_guard(hkey);
+
+ if (disposition != REG_OPENED_EXISTING_KEY || force)
+ {
+ // Fill registry values
+ if (!!params.event_message_file)
+ {
+ // Set the module file name that contains event resources
+ string_type const& module_name = params.event_message_file.get();
+ res = registry::set_value(
+ hkey,
+ registry::get_event_message_file_param_name(),
+ 0,
+ REG_EXPAND_SZ,
+ reinterpret_cast< LPBYTE >(const_cast< CharT* >(module_name.c_str())),
+ static_cast< DWORD >((module_name.size() + 1) * sizeof(CharT)));
+ if (res != ERROR_SUCCESS)
+ {
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not create registry value "
+ + log::aux::to_narrow(string_type(registry::get_event_message_file_param_name())), (res));
+ }
+ }
+
+ if (!!params.category_message_file)
+ {
+ // Set the module file name that contains event category resources
+ string_type const& module_name = params.category_message_file.get();
+ res = registry::set_value(
+ hkey,
+ registry::get_category_message_file_param_name(),
+ 0,
+ REG_SZ,
+ reinterpret_cast< LPBYTE >(const_cast< CharT* >(module_name.c_str())),
+ static_cast< DWORD >((module_name.size() + 1) * sizeof(CharT)));
+ if (res != ERROR_SUCCESS)
+ {
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not create registry value "
+ + log::aux::to_narrow(string_type(registry::get_category_message_file_param_name())), (res));
+ }
+ }
+
+ if (!!params.category_count)
+ {
+ // Set number of categories
+ DWORD category_count = params.category_count.get();
+ res = registry::set_value(
+ hkey,
+ registry::get_category_count_param_name(),
+ 0,
+ REG_DWORD,
+ reinterpret_cast< LPBYTE >(&category_count),
+ static_cast< DWORD >(sizeof(category_count)));
+ if (res != ERROR_SUCCESS)
+ {
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not create registry value "
+ + log::aux::to_narrow(string_type(registry::get_category_count_param_name())), (res));
+ }
+ }
+
+ if (!!params.types_supported)
+ {
+ // Set the supported event types
+ DWORD event_types = params.types_supported.get();
+ res = registry::set_value(
+ hkey,
+ registry::get_types_supported_param_name(),
+ 0,
+ REG_DWORD,
+ reinterpret_cast< LPBYTE >(&event_types),
+ static_cast< DWORD >(sizeof(event_types)));
+ if (res != ERROR_SUCCESS)
+ {
+ BOOST_LOG_THROW_DESCR_PARAMS(system_error, "Could not create registry value "
+ + log::aux::to_narrow(string_type(registry::get_types_supported_param_name())), (res));
+ }
+ }
+ }
+}
+
+} // namespace aux
+
+} // namespace sinks
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // BOOST_LOG_WINDOWS_EVENT_LOG_REGISTRY_HPP_INCLUDED_
diff --git a/contrib/restricted/boost/libs/log/src/windows/ipc_reliable_message_queue.cpp b/contrib/restricted/boost/libs/log/src/windows/ipc_reliable_message_queue.cpp
new file mode 100644
index 0000000000..d99d091d1f
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/ipc_reliable_message_queue.cpp
@@ -0,0 +1,818 @@
+/*
+ * Copyright Lingxi Li 2015.
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file ipc_reliable_message_queue_win.hpp
+ * \author Lingxi Li
+ * \author Andrey Semashev
+ * \date 28.10.2015
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ *
+ * This file provides an interprocess message queue implementation on POSIX platforms.
+ */
+
+#include <boost/log/detail/config.hpp>
+#include <cstddef>
+#include <cstring>
+#include <new>
+#include <limits>
+#include <string>
+#include <algorithm>
+#include <stdexcept>
+#include <boost/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/atomic/atomic.hpp>
+#include <boost/atomic/capabilities.hpp>
+#include <boost/log/exceptions.hpp>
+#include <boost/log/utility/ipc/reliable_message_queue.hpp>
+#include <boost/log/support/exception.hpp>
+#include <boost/log/detail/pause.hpp>
+#include <boost/exception/info.hpp>
+#include <boost/exception/enable_error_info.hpp>
+#include <boost/align/align_up.hpp>
+#include <boost/winapi/thread.hpp> // SwitchToThread
+#include "windows/ipc_sync_wrappers.hpp"
+#include "windows/mapped_shared_memory.hpp"
+#include "windows/utf_code_conversion.hpp"
+#include "murmur3.hpp"
+#include "bit_tools.hpp"
+#include <windows.h>
+#include <boost/log/detail/header.hpp>
+
+#if BOOST_ATOMIC_INT32_LOCK_FREE != 2
+// 32-bit atomic ops are required to be able to place atomic<uint32_t> in the process-shared memory
+#error Boost.Log: Native 32-bit atomic operations are required but not supported by Boost.Atomic on the target platform
+#endif
+
+//! A suffix used in names of interprocess objects created by the queue.
+//! Used as a protection against clashing with user-supplied names of interprocess queues and also to resolve conflicts between queues of different types.
+#define BOOST_LOG_IPC_NAMES_AUX_SUFFIX L".3010b9950926463398eee00b35b44651"
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace ipc {
+
+//! Message queue implementation data
+struct reliable_message_queue::implementation
+{
+private:
+ //! Header of an allocation block within the message queue. Placed at the beginning of the block within the shared memory segment.
+ struct block_header
+ {
+ // Element data alignment, in bytes
+ enum { data_alignment = 32u };
+
+ //! Size of the element data, in bytes
+ size_type m_size;
+
+ //! Returns the block header overhead, in bytes
+ static BOOST_CONSTEXPR size_type get_header_overhead() BOOST_NOEXCEPT
+ {
+ return static_cast< size_type >(boost::alignment::align_up(sizeof(block_header), data_alignment));
+ }
+
+ //! Returns a pointer to the element data
+ void* get_data() const BOOST_NOEXCEPT
+ {
+ return const_cast< unsigned char* >(reinterpret_cast< const unsigned char* >(this)) + get_header_overhead();
+ }
+ };
+
+ //! Header of the message queue. Placed at the beginning of the shared memory segment.
+ struct header
+ {
+ // Increment this constant whenever you change the binary layout of the queue (apart from this header structure)
+ enum { abi_version = 0 };
+
+ // !!! Whenever you add/remove members in this structure, also modify get_abi_tag() function accordingly !!!
+
+ //! A tag value to ensure the correct binary layout of the message queue data structures. Must be placed first and always have a fixed size and alignment.
+ uint32_t m_abi_tag;
+ //! Padding to protect against alignment changes in Boost.Atomic. Don't use BOOST_ALIGNMENT to ensure portability.
+ unsigned char m_padding[BOOST_LOG_CPU_CACHE_LINE_SIZE - sizeof(uint32_t)];
+ //! A flag indicating that the queue is constructed (i.e. the queue is constructed when the value is not 0).
+ boost::atomic< uint32_t > m_initialized;
+ //! Number of allocation blocks in the queue.
+ const uint32_t m_capacity;
+ //! Size of an allocation block, in bytes.
+ const size_type m_block_size;
+ //! Shared state of the mutex for protecting queue data structures.
+ boost::log::ipc::aux::interprocess_mutex::shared_state m_mutex_state;
+ //! Shared state of the condition variable used to block writers when the queue is full.
+ boost::log::ipc::aux::interprocess_condition_variable::shared_state m_nonfull_queue_state;
+ //! The current number of allocated blocks in the queue.
+ uint32_t m_size;
+ //! The current writing position (allocation block index).
+ uint32_t m_put_pos;
+ //! The current reading position (allocation block index).
+ uint32_t m_get_pos;
+
+ header(uint32_t capacity, size_type block_size) :
+ m_abi_tag(get_abi_tag()),
+ m_capacity(capacity),
+ m_block_size(block_size),
+ m_size(0u),
+ m_put_pos(0u),
+ m_get_pos(0u)
+ {
+ // Must be initialized last. m_initialized is zero-initialized initially.
+ m_initialized.fetch_add(1u, boost::memory_order_release);
+ }
+
+ //! Returns the header structure ABI tag
+ static uint32_t get_abi_tag() BOOST_NOEXCEPT
+ {
+ // This FOURCC identifies the queue type
+ boost::log::aux::murmur3_32 hash(boost::log::aux::make_fourcc('r', 'e', 'l', 'q'));
+
+ // This FOURCC identifies the queue implementation
+ hash.mix(boost::log::aux::make_fourcc('w', 'n', 't', '5'));
+ hash.mix(abi_version);
+
+ // We will use these constants to align pointers
+ hash.mix(BOOST_LOG_CPU_CACHE_LINE_SIZE);
+ hash.mix(block_header::data_alignment);
+
+ // The members in the sequence below must be enumerated in the same order as they are declared in the header structure.
+ // The ABI tag is supposed change whenever a member changes size or offset from the beginning of the header.
+
+#define BOOST_LOG_MIX_HEADER_MEMBER(name)\
+ hash.mix(static_cast< uint32_t >(sizeof(((header*)NULL)->name)));\
+ hash.mix(static_cast< uint32_t >(offsetof(header, name)))
+
+ BOOST_LOG_MIX_HEADER_MEMBER(m_abi_tag);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_padding);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_initialized);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_capacity);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_block_size);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_mutex_state);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_nonfull_queue_state);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_size);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_put_pos);
+ BOOST_LOG_MIX_HEADER_MEMBER(m_get_pos);
+
+#undef BOOST_LOG_MIX_HEADER_MEMBER
+
+ return hash.finalize();
+ }
+
+ //! Returns an element header at the specified index
+ block_header* get_block(uint32_t index) const BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(index < m_capacity);
+ unsigned char* p = const_cast< unsigned char* >(reinterpret_cast< const unsigned char* >(this)) + boost::alignment::align_up(sizeof(header), BOOST_LOG_CPU_CACHE_LINE_SIZE);
+ p += static_cast< std::size_t >(m_block_size) * static_cast< std::size_t >(index);
+ return reinterpret_cast< block_header* >(p);
+ }
+
+ BOOST_DELETED_FUNCTION(header(header const&))
+ BOOST_DELETED_FUNCTION(header& operator=(header const&))
+ };
+
+private:
+ //! Shared memory object and mapping
+ boost::log::ipc::aux::mapped_shared_memory m_shared_memory;
+ //! Queue overflow handling policy
+ const overflow_policy m_overflow_policy;
+ //! The mask for selecting bits that constitute size values from 0 to (block_size - 1)
+ size_type m_block_size_mask;
+ //! The number of the bit set in block_size (i.e. log base 2 of block_size)
+ uint32_t m_block_size_log2;
+
+ //! Mutex for protecting queue data structures.
+ boost::log::ipc::aux::interprocess_mutex m_mutex;
+ //! Event used to block readers when the queue is empty.
+ boost::log::ipc::aux::interprocess_event m_nonempty_queue;
+ //! Condition variable used to block writers when the queue is full.
+ boost::log::ipc::aux::interprocess_condition_variable m_nonfull_queue;
+ //! The event indicates that stop has been requested
+ boost::log::ipc::aux::auto_handle m_stop;
+
+ //! The queue name, as specified by the user
+ const object_name m_name;
+
+public:
+ //! The constructor creates a new shared memory segment
+ implementation
+ (
+ open_mode::create_only_tag,
+ object_name const& name,
+ uint32_t capacity,
+ size_type block_size,
+ overflow_policy oflow_policy,
+ permissions const& perms
+ ) :
+ m_overflow_policy(oflow_policy),
+ m_block_size_mask(0u),
+ m_block_size_log2(0u),
+ m_name(name)
+ {
+ const std::wstring wname = boost::log::aux::utf8_to_utf16(name.c_str());
+ const std::size_t shmem_size = estimate_region_size(capacity, block_size);
+ m_shared_memory.create(wname.c_str(), shmem_size, perms);
+ m_shared_memory.map();
+
+ create_queue(wname, capacity, block_size, perms);
+ }
+
+ //! The constructor creates a new shared memory segment or opens the existing one
+ implementation
+ (
+ open_mode::open_or_create_tag,
+ object_name const& name,
+ uint32_t capacity,
+ size_type block_size,
+ overflow_policy oflow_policy,
+ permissions const& perms
+ ) :
+ m_overflow_policy(oflow_policy),
+ m_block_size_mask(0u),
+ m_block_size_log2(0u),
+ m_name(name)
+ {
+ const std::wstring wname = boost::log::aux::utf8_to_utf16(name.c_str());
+ const std::size_t shmem_size = estimate_region_size(capacity, block_size);
+ const bool created = m_shared_memory.create_or_open(wname.c_str(), shmem_size, perms);
+ m_shared_memory.map();
+
+ if (created)
+ create_queue(wname, capacity, block_size, perms);
+ else
+ adopt_queue(wname, m_shared_memory.size(), perms);
+ }
+
+ //! The constructor opens the existing shared memory segment
+ implementation
+ (
+ open_mode::open_only_tag,
+ object_name const& name,
+ overflow_policy oflow_policy,
+ permissions const& perms
+ ) :
+ m_overflow_policy(oflow_policy),
+ m_block_size_mask(0u),
+ m_block_size_log2(0u),
+ m_name(name)
+ {
+ const std::wstring wname = boost::log::aux::utf8_to_utf16(name.c_str());
+ m_shared_memory.open(wname.c_str());
+ m_shared_memory.map();
+
+ adopt_queue(wname, m_shared_memory.size(), perms);
+ }
+
+ object_name const& name() const BOOST_NOEXCEPT
+ {
+ return m_name;
+ }
+
+ uint32_t capacity() const BOOST_NOEXCEPT
+ {
+ return get_header()->m_capacity;
+ }
+
+ size_type block_size() const BOOST_NOEXCEPT
+ {
+ return get_header()->m_block_size;
+ }
+
+ operation_result send(void const* message_data, size_type message_size)
+ {
+ const uint32_t block_count = estimate_block_count(message_size);
+
+ header* const hdr = get_header();
+
+ if (BOOST_UNLIKELY(block_count > hdr->m_capacity))
+ BOOST_LOG_THROW_DESCR(logic_error, "Message size exceeds the interprocess queue capacity");
+
+ if (!lock_queue())
+ return aborted;
+
+ boost::log::ipc::aux::interprocess_mutex::optional_unlock unlock(m_mutex);
+
+ while (true)
+ {
+ if ((hdr->m_capacity - hdr->m_size) >= block_count)
+ break;
+
+ const overflow_policy oflow_policy = m_overflow_policy;
+ if (oflow_policy == fail_on_overflow)
+ return no_space;
+ else if (BOOST_UNLIKELY(oflow_policy == throw_on_overflow))
+ BOOST_LOG_THROW_DESCR(capacity_limit_reached, "Interprocess queue is full");
+
+ if (!m_nonfull_queue.wait(unlock, m_stop.get()))
+ return aborted;
+ }
+
+ enqueue_message(message_data, message_size, block_count);
+
+ return succeeded;
+ }
+
+ bool try_send(void const* message_data, size_type message_size)
+ {
+ const uint32_t block_count = estimate_block_count(message_size);
+
+ header* const hdr = get_header();
+
+ if (BOOST_UNLIKELY(block_count > hdr->m_capacity))
+ BOOST_LOG_THROW_DESCR(logic_error, "Message size exceeds the interprocess queue capacity");
+
+ if (!lock_queue())
+ return false;
+
+ boost::log::ipc::aux::interprocess_mutex::auto_unlock unlock(m_mutex);
+
+ if ((hdr->m_capacity - hdr->m_size) < block_count)
+ return false;
+
+ enqueue_message(message_data, message_size, block_count);
+
+ return true;
+ }
+
+ operation_result receive(receive_handler handler, void* state)
+ {
+ if (!lock_queue())
+ return aborted;
+
+ boost::log::ipc::aux::interprocess_mutex::optional_unlock unlock(m_mutex);
+
+ header* const hdr = get_header();
+
+ while (true)
+ {
+ if (hdr->m_size > 0u)
+ break;
+
+ m_mutex.unlock();
+ unlock.disengage();
+
+ if (!m_nonempty_queue.wait(m_stop.get()) || !lock_queue())
+ return aborted;
+
+ unlock.engage(m_mutex);
+ }
+
+ dequeue_message(handler, state);
+
+ return succeeded;
+ }
+
+ bool try_receive(receive_handler handler, void* state)
+ {
+ if (!lock_queue())
+ return false;
+
+ boost::log::ipc::aux::interprocess_mutex::auto_unlock unlock(m_mutex);
+
+ header* const hdr = get_header();
+ if (hdr->m_size == 0u)
+ return false;
+
+ dequeue_message(handler, state);
+
+ return true;
+ }
+
+ void stop_local()
+ {
+ BOOST_VERIFY(boost::winapi::SetEvent(m_stop.get()) != 0);
+ }
+
+ void reset_local()
+ {
+ BOOST_VERIFY(boost::winapi::ResetEvent(m_stop.get()) != 0);
+ }
+
+ void clear()
+ {
+ m_mutex.lock();
+ boost::log::ipc::aux::interprocess_mutex::auto_unlock unlock(m_mutex);
+ clear_queue();
+ }
+
+private:
+ header* get_header() const BOOST_NOEXCEPT
+ {
+ return static_cast< header* >(m_shared_memory.address());
+ }
+
+ static std::size_t estimate_region_size(uint32_t capacity, size_type block_size) BOOST_NOEXCEPT
+ {
+ return boost::alignment::align_up(sizeof(header), BOOST_LOG_CPU_CACHE_LINE_SIZE) + static_cast< std::size_t >(capacity) * static_cast< std::size_t >(block_size);
+ }
+
+ void create_stop_event()
+ {
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ boost::winapi::HANDLE_ h = boost::winapi::CreateEventExW
+ (
+ NULL, // permissions
+ NULL, // name
+ boost::winapi::CREATE_EVENT_MANUAL_RESET_,
+ boost::winapi::SYNCHRONIZE_ | boost::winapi::EVENT_MODIFY_STATE_
+ );
+#else
+ boost::winapi::HANDLE_ h = boost::winapi::CreateEventW
+ (
+ NULL, // permissions
+ true, // manual reset
+ false, // initial state
+ NULL // name
+ );
+#endif
+ if (BOOST_UNLIKELY(h == NULL))
+ {
+ boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to create an stop event object", (err));
+ }
+
+ m_stop.init(h);
+ }
+
+ void create_queue(std::wstring const& name, uint32_t capacity, size_type block_size, permissions const& perms)
+ {
+ // Initialize synchronization primitives before initializing the header as the openers will wait for it to be initialized
+ header* const hdr = get_header();
+ m_mutex.create((name + BOOST_LOG_IPC_NAMES_AUX_SUFFIX L".mutex").c_str(), &hdr->m_mutex_state, perms);
+ m_nonempty_queue.create((name + BOOST_LOG_IPC_NAMES_AUX_SUFFIX L".nonempty_queue_event").c_str(), false, perms);
+ m_nonfull_queue.init((name + BOOST_LOG_IPC_NAMES_AUX_SUFFIX L".nonfull_queue_cond_var").c_str(), &hdr->m_nonfull_queue_state, perms);
+ create_stop_event();
+
+ new (hdr) header(capacity, block_size);
+
+ init_block_size(block_size);
+ }
+
+ void adopt_queue(std::wstring const& name, std::size_t shmem_size, permissions const& perms)
+ {
+ if (shmem_size < sizeof(header))
+ BOOST_LOG_THROW_DESCR(setup_error, "Boost.Log interprocess message queue cannot be opened: shared memory segment size too small");
+
+ // Wait until the mapped region becomes initialized
+ header* const hdr = get_header();
+ BOOST_CONSTEXPR_OR_CONST unsigned int wait_loops = 1000u, spin_loops = 16u, spins = 16u;
+ for (unsigned int i = 0; i < wait_loops; ++i)
+ {
+ uint32_t initialized = hdr->m_initialized.load(boost::memory_order_acquire);
+ if (initialized)
+ {
+ goto done;
+ }
+
+ if (i < spin_loops)
+ {
+ for (unsigned int j = 0; j < spins; ++j)
+ {
+ boost::log::aux::pause();
+ }
+ }
+ else
+ {
+ boost::winapi::SwitchToThread();
+ }
+ }
+
+ BOOST_LOG_THROW_DESCR(setup_error, "Boost.Log interprocess message queue cannot be opened: shared memory segment is not initialized by creator for too long");
+
+ done:
+ // Check that the queue layout matches the current process ABI
+ if (hdr->m_abi_tag != header::get_abi_tag())
+ BOOST_LOG_THROW_DESCR(setup_error, "Boost.Log interprocess message queue cannot be opened: the queue ABI is incompatible");
+
+ if (!boost::log::aux::is_power_of_2(hdr->m_block_size))
+ BOOST_LOG_THROW_DESCR(setup_error, "Boost.Log interprocess message queue cannot be opened: the queue block size is not a power of 2");
+
+ m_mutex.open((name + BOOST_LOG_IPC_NAMES_AUX_SUFFIX L".mutex").c_str(), &hdr->m_mutex_state);
+ m_nonempty_queue.open((name + BOOST_LOG_IPC_NAMES_AUX_SUFFIX L".nonempty_queue_event").c_str());
+ m_nonfull_queue.init((name + BOOST_LOG_IPC_NAMES_AUX_SUFFIX L".nonfull_queue_cond_var").c_str(), &hdr->m_nonfull_queue_state, perms);
+ create_stop_event();
+
+ init_block_size(hdr->m_block_size);
+ }
+
+ void init_block_size(size_type block_size)
+ {
+ m_block_size_mask = block_size - 1u;
+
+ uint32_t block_size_log2 = 0u;
+ if ((block_size & 0x0000ffff) == 0u)
+ {
+ block_size >>= 16u;
+ block_size_log2 += 16u;
+ }
+ if ((block_size & 0x000000ff) == 0u)
+ {
+ block_size >>= 8u;
+ block_size_log2 += 8u;
+ }
+ if ((block_size & 0x0000000f) == 0u)
+ {
+ block_size >>= 4u;
+ block_size_log2 += 4u;
+ }
+ if ((block_size & 0x00000003) == 0u)
+ {
+ block_size >>= 2u;
+ block_size_log2 += 2u;
+ }
+ if ((block_size & 0x00000001) == 0u)
+ {
+ ++block_size_log2;
+ }
+ m_block_size_log2 = block_size_log2;
+ }
+
+ bool lock_queue()
+ {
+ return m_mutex.lock(m_stop.get());
+ }
+
+ void clear_queue()
+ {
+ header* const hdr = get_header();
+ hdr->m_size = 0u;
+ hdr->m_put_pos = 0u;
+ hdr->m_get_pos = 0u;
+ m_nonfull_queue.notify_all();
+ }
+
+ //! Returns the number of allocation blocks that are required to store user's payload of the specified size
+ uint32_t estimate_block_count(size_type size) const BOOST_NOEXCEPT
+ {
+ // ceil((size + get_header_overhead()) / block_size)
+ return static_cast< uint32_t >((size + block_header::get_header_overhead() + m_block_size_mask) >> m_block_size_log2);
+ }
+
+ //! Puts the message to the back of the queue
+ void enqueue_message(void const* message_data, size_type message_size, uint32_t block_count)
+ {
+ header* const hdr = get_header();
+
+ const uint32_t capacity = hdr->m_capacity;
+ const size_type block_size = hdr->m_block_size;
+ uint32_t pos = hdr->m_put_pos;
+
+ block_header* block = hdr->get_block(pos);
+ block->m_size = message_size;
+
+ size_type write_size = (std::min)(static_cast< size_type >((capacity - pos) * block_size - block_header::get_header_overhead()), message_size);
+ std::memcpy(block->get_data(), message_data, write_size);
+
+ pos += block_count;
+ if (BOOST_UNLIKELY(pos >= capacity))
+ {
+ // Write the rest of the message at the beginning of the queue
+ pos -= capacity;
+ message_data = static_cast< const unsigned char* >(message_data) + write_size;
+ write_size = message_size - write_size;
+ if (write_size > 0u)
+ std::memcpy(hdr->get_block(0u), message_data, write_size);
+ }
+
+ hdr->m_put_pos = pos;
+
+ const uint32_t old_queue_size = hdr->m_size;
+ hdr->m_size = old_queue_size + block_count;
+ if (old_queue_size == 0u)
+ m_nonempty_queue.set();
+ }
+
+ //! Retrieves the next message and invokes the handler to store the message contents
+ void dequeue_message(receive_handler handler, void* state)
+ {
+ header* const hdr = get_header();
+
+ const uint32_t capacity = hdr->m_capacity;
+ const size_type block_size = hdr->m_block_size;
+ uint32_t pos = hdr->m_get_pos;
+
+ block_header* block = hdr->get_block(pos);
+ size_type message_size = block->m_size;
+ uint32_t block_count = estimate_block_count(message_size);
+
+ BOOST_ASSERT(block_count <= hdr->m_size);
+
+ size_type read_size = (std::min)(static_cast< size_type >((capacity - pos) * block_size - block_header::get_header_overhead()), message_size);
+ handler(state, block->get_data(), read_size);
+
+ pos += block_count;
+ if (BOOST_UNLIKELY(pos >= capacity))
+ {
+ // Read the tail of the message
+ pos -= capacity;
+ read_size = message_size - read_size;
+ if (read_size > 0u)
+ handler(state, hdr->get_block(0u), read_size);
+ }
+
+ hdr->m_get_pos = pos;
+ hdr->m_size -= block_count;
+
+ m_nonfull_queue.notify_all();
+ }
+};
+
+BOOST_LOG_API void reliable_message_queue::create(object_name const& name, uint32_t capacity, size_type block_size, overflow_policy oflow_policy, permissions const& perms)
+{
+ BOOST_ASSERT(m_impl == NULL);
+ if (!boost::log::aux::is_power_of_2(block_size))
+ BOOST_THROW_EXCEPTION(std::invalid_argument("Interprocess message queue block size is not a power of 2"));
+ try
+ {
+ m_impl = new implementation(open_mode::create_only, name, capacity, static_cast< size_type >(boost::alignment::align_up(block_size, BOOST_LOG_CPU_CACHE_LINE_SIZE)), oflow_policy, perms);
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(name);
+ throw;
+ }
+}
+
+BOOST_LOG_API void reliable_message_queue::open_or_create(object_name const& name, uint32_t capacity, size_type block_size, overflow_policy oflow_policy, permissions const& perms)
+{
+ BOOST_ASSERT(m_impl == NULL);
+ if (!boost::log::aux::is_power_of_2(block_size))
+ BOOST_THROW_EXCEPTION(std::invalid_argument("Interprocess message queue block size is not a power of 2"));
+ try
+ {
+ m_impl = new implementation(open_mode::open_or_create, name, capacity, static_cast< size_type >(boost::alignment::align_up(block_size, BOOST_LOG_CPU_CACHE_LINE_SIZE)), oflow_policy, perms);
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(name);
+ throw;
+ }
+}
+
+BOOST_LOG_API void reliable_message_queue::open(object_name const& name, overflow_policy oflow_policy, permissions const& perms)
+{
+ BOOST_ASSERT(m_impl == NULL);
+ try
+ {
+ m_impl = new implementation(open_mode::open_only, name, oflow_policy, perms);
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(name);
+ throw;
+ }
+}
+
+BOOST_LOG_API void reliable_message_queue::clear()
+{
+ BOOST_ASSERT(m_impl != NULL);
+ try
+ {
+ m_impl->clear();
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(m_impl->name());
+ throw;
+ }
+}
+
+BOOST_LOG_API object_name const& reliable_message_queue::name() const
+{
+ BOOST_ASSERT(m_impl != NULL);
+ return m_impl->name();
+}
+
+BOOST_LOG_API uint32_t reliable_message_queue::capacity() const
+{
+ BOOST_ASSERT(m_impl != NULL);
+ return m_impl->capacity();
+}
+
+BOOST_LOG_API reliable_message_queue::size_type reliable_message_queue::block_size() const
+{
+ BOOST_ASSERT(m_impl != NULL);
+ return m_impl->block_size();
+}
+
+BOOST_LOG_API void reliable_message_queue::stop_local()
+{
+ BOOST_ASSERT(m_impl != NULL);
+ try
+ {
+ m_impl->stop_local();
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(m_impl->name());
+ throw;
+ }
+}
+
+BOOST_LOG_API void reliable_message_queue::reset_local()
+{
+ BOOST_ASSERT(m_impl != NULL);
+ try
+ {
+ m_impl->reset_local();
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(m_impl->name());
+ throw;
+ }
+}
+
+BOOST_LOG_API void reliable_message_queue::do_close() BOOST_NOEXCEPT
+{
+ delete m_impl;
+ m_impl = NULL;
+}
+
+BOOST_LOG_API reliable_message_queue::operation_result reliable_message_queue::send(void const* message_data, size_type message_size)
+{
+ BOOST_ASSERT(m_impl != NULL);
+ try
+ {
+ return m_impl->send(message_data, message_size);
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(m_impl->name());
+ throw;
+ }
+}
+
+BOOST_LOG_API bool reliable_message_queue::try_send(void const* message_data, size_type message_size)
+{
+ BOOST_ASSERT(m_impl != NULL);
+ try
+ {
+ return m_impl->try_send(message_data, message_size);
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(m_impl->name());
+ throw;
+ }
+}
+
+BOOST_LOG_API reliable_message_queue::operation_result reliable_message_queue::do_receive(receive_handler handler, void* state)
+{
+ BOOST_ASSERT(m_impl != NULL);
+ try
+ {
+ return m_impl->receive(handler, state);
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(m_impl->name());
+ throw;
+ }
+}
+
+BOOST_LOG_API bool reliable_message_queue::do_try_receive(receive_handler handler, void* state)
+{
+ BOOST_ASSERT(m_impl != NULL);
+ try
+ {
+ return m_impl->try_receive(handler, state);
+ }
+ catch (boost::exception& e)
+ {
+ e << boost::log::ipc::object_name_info(m_impl->name());
+ throw;
+ }
+}
+
+//! Fixed buffer receive handler
+BOOST_LOG_API void reliable_message_queue::fixed_buffer_receive_handler(void* state, const void* data, size_type size)
+{
+ fixed_buffer_state* p = static_cast< fixed_buffer_state* >(state);
+ if (BOOST_UNLIKELY(size > p->size))
+ BOOST_THROW_EXCEPTION(bad_alloc("Buffer too small to receive the message"));
+
+ std::memcpy(p->data, data, size);
+ p->data += size;
+ p->size -= size;
+}
+
+BOOST_LOG_API void reliable_message_queue::remove(object_name const&)
+{
+ // System objects are reference counted on Windows, nothing to do here
+}
+
+} // namespace ipc
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
diff --git a/contrib/restricted/boost/libs/log/src/windows/ipc_sync_wrappers.cpp b/contrib/restricted/boost/libs/log/src/windows/ipc_sync_wrappers.cpp
new file mode 100644
index 0000000000..bd8bfb215c
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/ipc_sync_wrappers.cpp
@@ -0,0 +1,544 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file windows/ipc_sync_wrappers.cpp
+ * \author Andrey Semashev
+ * \date 23.01.2016
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#include <boost/log/detail/config.hpp>
+#include <boost/winapi/access_rights.hpp>
+#include <boost/winapi/handles.hpp>
+#include <boost/winapi/event.hpp>
+#include <boost/winapi/semaphore.hpp>
+#include <boost/winapi/wait.hpp>
+#include <boost/winapi/dll.hpp>
+#include <boost/winapi/time.hpp>
+#include <boost/winapi/get_last_error.hpp>
+#include <boost/winapi/character_code_conversion.hpp>
+#include <windows.h> // for error codes
+#include <cstddef>
+#include <limits>
+#include <string>
+#include <utility>
+#include <boost/assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/atomic.hpp>
+#include <boost/log/detail/snprintf.hpp>
+#include "unique_ptr.hpp"
+#include "windows/ipc_sync_wrappers.hpp"
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace aux {
+
+//! Hex character table, defined in dump.cpp
+extern const char g_hex_char_table[2][16];
+
+} // namespace aux
+
+namespace ipc {
+
+namespace aux {
+
+void interprocess_event::create(const wchar_t* name, bool manual_reset, permissions const& perms)
+{
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ boost::winapi::HANDLE_ h = boost::winapi::CreateEventExW
+ (
+ reinterpret_cast< boost::winapi::SECURITY_ATTRIBUTES_* >(perms.get_native()),
+ name,
+ boost::winapi::CREATE_EVENT_MANUAL_RESET_ * manual_reset,
+ boost::winapi::SYNCHRONIZE_ | boost::winapi::EVENT_MODIFY_STATE_
+ );
+#else
+ boost::winapi::HANDLE_ h = boost::winapi::CreateEventW
+ (
+ reinterpret_cast< boost::winapi::SECURITY_ATTRIBUTES_* >(perms.get_native()),
+ manual_reset,
+ false,
+ name
+ );
+#endif
+ if (BOOST_UNLIKELY(h == NULL))
+ {
+ boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to create an interprocess event object", (err));
+ }
+
+ m_event.init(h);
+}
+
+void interprocess_event::create_or_open(const wchar_t* name, bool manual_reset, permissions const& perms)
+{
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ boost::winapi::HANDLE_ h = boost::winapi::CreateEventExW
+ (
+ reinterpret_cast< boost::winapi::SECURITY_ATTRIBUTES_* >(perms.get_native()),
+ name,
+ boost::winapi::CREATE_EVENT_MANUAL_RESET_ * manual_reset,
+ boost::winapi::SYNCHRONIZE_ | boost::winapi::EVENT_MODIFY_STATE_
+ );
+#else
+ boost::winapi::HANDLE_ h = boost::winapi::CreateEventW
+ (
+ reinterpret_cast< boost::winapi::SECURITY_ATTRIBUTES_* >(perms.get_native()),
+ manual_reset,
+ false,
+ name
+ );
+#endif
+ if (h == NULL)
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ if (BOOST_LIKELY(err == ERROR_ALREADY_EXISTS))
+ {
+ open(name);
+ return;
+ }
+ else
+ {
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to create an interprocess event object", (err));
+ }
+ }
+
+ m_event.init(h);
+}
+
+void interprocess_event::open(const wchar_t* name)
+{
+ boost::winapi::HANDLE_ h = boost::winapi::OpenEventW(boost::winapi::SYNCHRONIZE_ | boost::winapi::EVENT_MODIFY_STATE_, false, name);
+ if (BOOST_UNLIKELY(h == NULL))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to open an interprocess event object", (err));
+ }
+
+ m_event.init(h);
+}
+
+boost::atomic< interprocess_semaphore::is_semaphore_zero_count_t > interprocess_semaphore::is_semaphore_zero_count(&interprocess_semaphore::is_semaphore_zero_count_init);
+interprocess_semaphore::nt_query_semaphore_t interprocess_semaphore::nt_query_semaphore = NULL;
+
+void interprocess_semaphore::create_or_open(const wchar_t* name, permissions const& perms)
+{
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ boost::winapi::HANDLE_ h = boost::winapi::CreateSemaphoreExW
+ (
+ reinterpret_cast< boost::winapi::SECURITY_ATTRIBUTES_* >(perms.get_native()),
+ 0, // initial count
+ (std::numeric_limits< boost::winapi::LONG_ >::max)(), // max count
+ name,
+ 0u, // flags
+ boost::winapi::SYNCHRONIZE_ | boost::winapi::SEMAPHORE_MODIFY_STATE_ | boost::winapi::SEMAPHORE_QUERY_STATE_
+ );
+#else
+ boost::winapi::HANDLE_ h = boost::winapi::CreateSemaphoreW
+ (
+ reinterpret_cast< boost::winapi::SECURITY_ATTRIBUTES_* >(perms.get_native()),
+ 0, // initial count
+ (std::numeric_limits< boost::winapi::LONG_ >::max)(), // max count
+ name
+ );
+#endif
+ if (h == NULL)
+ {
+ boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ if (BOOST_LIKELY(err == ERROR_ALREADY_EXISTS))
+ {
+ open(name);
+ return;
+ }
+ else
+ {
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to create an interprocess semaphore object", (err));
+ }
+ }
+
+ m_sem.init(h);
+}
+
+void interprocess_semaphore::open(const wchar_t* name)
+{
+ boost::winapi::HANDLE_ h = boost::winapi::OpenSemaphoreW(boost::winapi::SYNCHRONIZE_ | boost::winapi::SEMAPHORE_MODIFY_STATE_ | boost::winapi::SEMAPHORE_QUERY_STATE_, false, name);
+ if (BOOST_UNLIKELY(h == NULL))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to open an interprocess semaphore object", (err));
+ }
+
+ m_sem.init(h);
+}
+
+bool interprocess_semaphore::is_semaphore_zero_count_init(boost::winapi::HANDLE_ h)
+{
+ is_semaphore_zero_count_t impl = &interprocess_semaphore::is_semaphore_zero_count_emulated;
+
+ // Check if ntdll.dll provides NtQuerySemaphore, see: http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FSemaphore%2FNtQuerySemaphore.html
+ boost::winapi::HMODULE_ ntdll = boost::winapi::GetModuleHandleW(L"ntdll.dll");
+ if (ntdll)
+ {
+ nt_query_semaphore_t ntqs = (nt_query_semaphore_t)boost::winapi::get_proc_address(ntdll, "NtQuerySemaphore");
+ if (ntqs)
+ {
+ nt_query_semaphore = ntqs;
+ impl = &interprocess_semaphore::is_semaphore_zero_count_nt_query_semaphore;
+ }
+ }
+
+ is_semaphore_zero_count.store(impl, boost::memory_order_release);
+
+ return impl(h);
+}
+
+bool interprocess_semaphore::is_semaphore_zero_count_nt_query_semaphore(boost::winapi::HANDLE_ h)
+{
+ semaphore_basic_information info = {};
+ NTSTATUS_ err = nt_query_semaphore
+ (
+ h,
+ 0u, // SemaphoreBasicInformation
+ &info,
+ sizeof(info),
+ NULL
+ );
+ if (BOOST_UNLIKELY(err != 0u))
+ {
+ char buf[sizeof(unsigned int) * 2u + 4u];
+ boost::log::aux::snprintf(buf, sizeof(buf), "0x%08x", static_cast< unsigned int >(err));
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, std::string("Failed to test an interprocess semaphore object for zero count, NT status: ") + buf, (ERROR_INVALID_HANDLE));
+ }
+
+ return info.current_count == 0u;
+}
+
+bool interprocess_semaphore::is_semaphore_zero_count_emulated(boost::winapi::HANDLE_ h)
+{
+ const boost::winapi::DWORD_ retval = boost::winapi::WaitForSingleObject(h, 0u);
+ if (retval == boost::winapi::wait_timeout)
+ {
+ return true;
+ }
+ else if (BOOST_UNLIKELY(retval != boost::winapi::wait_object_0))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to test an interprocess semaphore object for zero count", (err));
+ }
+
+ // Restore the decremented counter
+ BOOST_VERIFY(!!boost::winapi::ReleaseSemaphore(h, 1, NULL));
+
+ return false;
+}
+
+#if !defined(BOOST_MSVC) || _MSC_VER >= 1800
+BOOST_CONSTEXPR_OR_CONST uint32_t interprocess_mutex::lock_flag_bit;
+BOOST_CONSTEXPR_OR_CONST uint32_t interprocess_mutex::event_set_flag_bit;
+BOOST_CONSTEXPR_OR_CONST uint32_t interprocess_mutex::lock_flag_value;
+BOOST_CONSTEXPR_OR_CONST uint32_t interprocess_mutex::event_set_flag_value;
+BOOST_CONSTEXPR_OR_CONST uint32_t interprocess_mutex::waiter_count_mask;
+#endif
+
+void interprocess_mutex::lock_slow()
+{
+ uint32_t old_state = m_shared_state->m_lock_state.load(boost::memory_order_relaxed);
+ mark_waiting_and_try_lock(old_state);
+
+ if ((old_state & lock_flag_value) != 0u) try
+ {
+ do
+ {
+ m_event.wait();
+ clear_waiting_and_try_lock(old_state);
+ }
+ while ((old_state & lock_flag_value) != 0u);
+ }
+ catch (...)
+ {
+ m_shared_state->m_lock_state.fetch_sub(1u, boost::memory_order_acq_rel);
+ throw;
+ }
+}
+
+bool interprocess_mutex::lock_slow(boost::winapi::HANDLE_ abort_handle)
+{
+ uint32_t old_state = m_shared_state->m_lock_state.load(boost::memory_order_relaxed);
+ mark_waiting_and_try_lock(old_state);
+
+ if ((old_state & lock_flag_value) != 0u) try
+ {
+ do
+ {
+ if (!m_event.wait(abort_handle))
+ {
+ // Wait was interrupted
+ m_shared_state->m_lock_state.fetch_sub(1u, boost::memory_order_acq_rel);
+ return false;
+ }
+
+ clear_waiting_and_try_lock(old_state);
+ }
+ while ((old_state & lock_flag_value) != 0u);
+ }
+ catch (...)
+ {
+ m_shared_state->m_lock_state.fetch_sub(1u, boost::memory_order_acq_rel);
+ throw;
+ }
+
+ return true;
+}
+
+inline void interprocess_mutex::mark_waiting_and_try_lock(uint32_t& old_state)
+{
+ uint32_t new_state;
+ do
+ {
+ uint32_t was_locked = (old_state & lock_flag_value);
+ if (was_locked)
+ {
+ // Avoid integer overflows
+ if (BOOST_UNLIKELY((old_state & waiter_count_mask) == waiter_count_mask))
+ BOOST_LOG_THROW_DESCR(limitation_error, "Too many waiters on an interprocess mutex");
+
+ new_state = old_state + 1u;
+ }
+ else
+ {
+ new_state = old_state | lock_flag_value;
+ }
+ }
+ while (!m_shared_state->m_lock_state.compare_exchange_weak(old_state, new_state, boost::memory_order_acq_rel, boost::memory_order_relaxed));
+}
+
+inline void interprocess_mutex::clear_waiting_and_try_lock(uint32_t& old_state)
+{
+ old_state &= ~lock_flag_value;
+ old_state |= event_set_flag_value;
+ uint32_t new_state;
+ do
+ {
+ new_state = ((old_state & lock_flag_value) ? old_state : ((old_state - 1u) | lock_flag_value)) & ~event_set_flag_value;
+ }
+ while (!m_shared_state->m_lock_state.compare_exchange_strong(old_state, new_state, boost::memory_order_acq_rel, boost::memory_order_relaxed));
+}
+
+
+bool interprocess_condition_variable::wait(interprocess_mutex::optional_unlock& lock, boost::winapi::HANDLE_ abort_handle)
+{
+ int32_t waiters = m_shared_state->m_waiters;
+ if (waiters < 0)
+ {
+ // We need to select a new semaphore to block on
+ m_current_semaphore = get_unused_semaphore();
+ ++m_shared_state->m_generation;
+ m_shared_state->m_semaphore_id = m_current_semaphore->m_id;
+ waiters = 0;
+ }
+ else
+ {
+ // Avoid integer overflow
+ if (BOOST_UNLIKELY(waiters >= ((std::numeric_limits< int32_t >::max)() - 1)))
+ BOOST_LOG_THROW_DESCR(limitation_error, "Too many waiters on an interprocess condition variable");
+
+ // Make sure we use the right semaphore to block on
+ const uint32_t id = m_shared_state->m_semaphore_id;
+ if (m_current_semaphore->m_id != id)
+ m_current_semaphore = get_semaphore(id);
+ }
+
+ m_shared_state->m_waiters = waiters + 1;
+ const uint32_t generation = m_shared_state->m_generation;
+
+ boost::winapi::HANDLE_ handles[2u] = { m_current_semaphore->m_semaphore.get_handle(), abort_handle };
+
+ interprocess_mutex* const mutex = lock.disengage();
+ mutex->unlock();
+
+ boost::winapi::DWORD_ retval = boost::winapi::WaitForMultipleObjects(2u, handles, false, boost::winapi::INFINITE_);
+
+ if (BOOST_UNLIKELY(retval == boost::winapi::WAIT_FAILED_))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+
+ // Although highly unrealistic, it is possible that it took so long for the current thread to enter WaitForMultipleObjects that
+ // another thread has managed to destroy the semaphore. This can happen if the semaphore remains in a non-zero state
+ // for too long, which means that another process died while being blocked on the semaphore, and the semaphore was signalled,
+ // and the non-zero state timeout has passed. In this case the most logical behavior for the wait function is to return as
+ // if because of a wakeup.
+ if (err == ERROR_INVALID_HANDLE)
+ retval = boost::winapi::WAIT_OBJECT_0_;
+ else
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to block on an interprocess semaphore object", (err));
+ }
+
+ // Have to unconditionally lock the mutex here
+ mutex->lock();
+ lock.engage(*mutex);
+
+ if (generation == m_shared_state->m_generation && m_shared_state->m_waiters > 0)
+ --m_shared_state->m_waiters;
+
+ return retval == boost::winapi::WAIT_OBJECT_0_;
+}
+
+//! Finds or opens a semaphore with the specified id
+interprocess_condition_variable::semaphore_info* interprocess_condition_variable::get_semaphore(uint32_t id)
+{
+ semaphore_info_set::insert_commit_data insert_state;
+ std::pair< semaphore_info_set::iterator, bool > res = m_semaphore_info_set.insert_check(id, semaphore_info::order_by_id(), insert_state);
+ if (res.second)
+ {
+ // We need to open the semaphore. It is possible that the semaphore does not exist because all processes that had it opened terminated.
+ // Because of this we also attempt to create it.
+ boost::log::aux::unique_ptr< semaphore_info > p(new semaphore_info(id));
+ generate_semaphore_name(id);
+ p->m_semaphore.create_or_open(m_semaphore_name.c_str(), m_perms);
+
+ res.first = m_semaphore_info_set.insert_commit(*p, insert_state);
+ m_semaphore_info_list.push_back(*p);
+
+ return p.release();
+ }
+ else
+ {
+ // Move the semaphore to the end of the list so that the next time we are less likely to use it
+ semaphore_info& info = *res.first;
+ m_semaphore_info_list.erase(m_semaphore_info_list.iterator_to(info));
+ m_semaphore_info_list.push_back(info);
+
+ return &info;
+ }
+}
+
+//! Finds or creates a semaphore with zero counter
+interprocess_condition_variable::semaphore_info* interprocess_condition_variable::get_unused_semaphore()
+{
+ // Be optimistic, check the current semaphore first
+ if (m_current_semaphore && m_current_semaphore->m_semaphore.is_zero_count())
+ {
+ mark_unused(*m_current_semaphore);
+ return m_current_semaphore;
+ }
+
+ const tick_count_clock::time_point now = tick_count_clock::now();
+
+ semaphore_info_list::iterator it = m_semaphore_info_list.begin(), end = m_semaphore_info_list.end();
+ while (it != end)
+ {
+ if (is_overflow_less(m_next_semaphore_id, it->m_id) || m_next_semaphore_id == it->m_id)
+ m_next_semaphore_id = it->m_id + 1u;
+
+ if (it->m_semaphore.is_zero_count())
+ {
+ semaphore_info& info = *it;
+ mark_unused(info);
+ return &info;
+ }
+ else if (it->check_non_zero_timeout(now))
+ {
+ // The semaphore is non-zero for too long. A blocked process must have crashed. Close it.
+ m_semaphore_info_set.erase(m_semaphore_info_set.iterator_to(*it));
+ m_semaphore_info_list.erase_and_dispose(it++, boost::checked_deleter< semaphore_info >());
+ }
+ else
+ {
+ ++it;
+ }
+ }
+
+ // No semaphore found, create a new one
+ for (uint32_t semaphore_id = m_next_semaphore_id, semaphore_id_end = semaphore_id - 1u; semaphore_id != semaphore_id_end; ++semaphore_id)
+ {
+ interprocess_semaphore sem;
+ try
+ {
+ generate_semaphore_name(semaphore_id);
+ sem.create_or_open(m_semaphore_name.c_str(), m_perms);
+ if (!sem.is_zero_count())
+ continue;
+ }
+ catch (...)
+ {
+ // Ignore errors, try the next one
+ continue;
+ }
+
+ semaphore_info* p = NULL;
+ semaphore_info_set::insert_commit_data insert_state;
+ std::pair< semaphore_info_set::iterator, bool > res = m_semaphore_info_set.insert_check(semaphore_id, semaphore_info::order_by_id(), insert_state);
+ if (res.second)
+ {
+ p = new semaphore_info(semaphore_id);
+ p->m_semaphore.swap(sem);
+
+ res.first = m_semaphore_info_set.insert_commit(*p, insert_state);
+ m_semaphore_info_list.push_back(*p);
+ }
+ else
+ {
+ // Some of our currently open semaphores must have been released by another thread
+ p = &*res.first;
+ mark_unused(*p);
+ }
+
+ m_next_semaphore_id = semaphore_id + 1u;
+
+ return p;
+ }
+
+ BOOST_LOG_THROW_DESCR(limitation_error, "Too many semaphores are actively used for an interprocess condition variable");
+ BOOST_LOG_UNREACHABLE_RETURN(NULL);
+}
+
+//! Marks the semaphore info as unused and moves to the end of list
+inline void interprocess_condition_variable::mark_unused(semaphore_info& info) BOOST_NOEXCEPT
+{
+ // Restart the timeout for non-zero state next time we search for an unused semaphore
+ info.m_checked_for_zero = false;
+ // Move to the end of the list so that we consider this semaphore last
+ m_semaphore_info_list.erase(m_semaphore_info_list.iterator_to(info));
+ m_semaphore_info_list.push_back(info);
+}
+
+//! Generates semaphore name according to id
+inline void interprocess_condition_variable::generate_semaphore_name(uint32_t id) BOOST_NOEXCEPT
+{
+ // Note: avoid anything that involves locale to make semaphore names as stable as possible
+ BOOST_ASSERT(m_semaphore_name.size() >= 8u);
+
+ wchar_t* p = &m_semaphore_name[m_semaphore_name.size() - 8u];
+ *p++ = boost::log::aux::g_hex_char_table[0][id >> 28];
+ *p++ = boost::log::aux::g_hex_char_table[0][(id >> 24) & 0x0000000Fu];
+
+ *p++ = boost::log::aux::g_hex_char_table[0][(id >> 20) & 0x0000000Fu];
+ *p++ = boost::log::aux::g_hex_char_table[0][(id >> 16) & 0x0000000Fu];
+
+ *p++ = boost::log::aux::g_hex_char_table[0][(id >> 12) & 0x0000000Fu];
+ *p++ = boost::log::aux::g_hex_char_table[0][(id >> 8) & 0x0000000Fu];
+
+ *p++ = boost::log::aux::g_hex_char_table[0][(id >> 4) & 0x0000000Fu];
+ *p = boost::log::aux::g_hex_char_table[0][id & 0x0000000Fu];
+}
+
+} // namespace aux
+
+} // namespace ipc
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
diff --git a/contrib/restricted/boost/libs/log/src/windows/ipc_sync_wrappers.hpp b/contrib/restricted/boost/libs/log/src/windows/ipc_sync_wrappers.hpp
new file mode 100644
index 0000000000..7d1272aa1f
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/ipc_sync_wrappers.hpp
@@ -0,0 +1,652 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file windows/ipc_sync_wrappers.hpp
+ * \author Andrey Semashev
+ * \date 23.01.2016
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#ifndef BOOST_LOG_WINDOWS_IPC_SYNC_WRAPPERS_HPP_INCLUDED_
+#define BOOST_LOG_WINDOWS_IPC_SYNC_WRAPPERS_HPP_INCLUDED_
+
+#include <boost/log/detail/config.hpp>
+#include <boost/winapi/access_rights.hpp>
+#include <boost/winapi/handles.hpp>
+#include <boost/winapi/event.hpp>
+#include <boost/winapi/semaphore.hpp>
+#include <boost/winapi/wait.hpp>
+#include <boost/winapi/dll.hpp>
+#include <boost/winapi/time.hpp>
+#include <boost/winapi/get_last_error.hpp>
+#include <cstddef>
+#include <limits>
+#include <string>
+#include <utility>
+#include <boost/assert.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/atomic.hpp>
+#include <boost/intrusive/options.hpp>
+#include <boost/intrusive/set.hpp>
+#include <boost/intrusive/set_hook.hpp>
+#include <boost/intrusive/list.hpp>
+#include <boost/intrusive/list_hook.hpp>
+#include <boost/log/exceptions.hpp>
+#include <boost/log/utility/permissions.hpp>
+#include "windows/auto_handle.hpp"
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace ipc {
+
+namespace aux {
+
+// TODO: Port to Boost.Atomic when it supports extended atomic ops
+#if defined(BOOST_MSVC) && (_MSC_VER >= 1400) && !defined(UNDER_CE)
+
+#if _MSC_VER == 1400
+extern "C" unsigned char _interlockedbittestandset(long *a, long b);
+extern "C" unsigned char _interlockedbittestandreset(long *a, long b);
+#else
+extern "C" unsigned char _interlockedbittestandset(volatile long *a, long b);
+extern "C" unsigned char _interlockedbittestandreset(volatile long *a, long b);
+#endif
+
+#pragma intrinsic(_interlockedbittestandset)
+#pragma intrinsic(_interlockedbittestandreset)
+
+BOOST_FORCEINLINE bool bit_test_and_set(boost::atomic< uint32_t >& x, uint32_t bit) BOOST_NOEXCEPT
+{
+ return _interlockedbittestandset(reinterpret_cast< long* >(&x.storage()), static_cast< long >(bit)) != 0;
+}
+
+BOOST_FORCEINLINE bool bit_test_and_reset(boost::atomic< uint32_t >& x, uint32_t bit) BOOST_NOEXCEPT
+{
+ return _interlockedbittestandreset(reinterpret_cast< long* >(&x.storage()), static_cast< long >(bit)) != 0;
+}
+
+#elif (defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN)) && defined(_M_IX86)
+
+BOOST_FORCEINLINE bool bit_test_and_set(boost::atomic< uint32_t >& x, uint32_t bit) BOOST_NOEXCEPT
+{
+ boost::atomic< uint32_t >::storage_type* p = &x.storage();
+ bool ret;
+ __asm
+ {
+ mov eax, bit
+ mov edx, p
+ lock bts [edx], eax
+ setc ret
+ };
+ return ret;
+}
+
+BOOST_FORCEINLINE bool bit_test_and_reset(boost::atomic< uint32_t >& x, uint32_t bit) BOOST_NOEXCEPT
+{
+ boost::atomic< uint32_t >::storage_type* p = &x.storage();
+ bool ret;
+ __asm
+ {
+ mov eax, bit
+ mov edx, p
+ lock btr [edx], eax
+ setc ret
+ };
+ return ret;
+}
+
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+#if !defined(__CUDACC__)
+#define BOOST_LOG_DETAIL_ASM_CLOBBER_CC_COMMA "cc",
+#else
+#define BOOST_LOG_DETAIL_ASM_CLOBBER_CC_COMMA
+#endif
+
+BOOST_FORCEINLINE bool bit_test_and_set(boost::atomic< uint32_t >& x, uint32_t bit) BOOST_NOEXCEPT
+{
+ bool res;
+ __asm__ __volatile__
+ (
+ "lock; bts %[bit_number], %[storage]\n\t"
+ "setc %[result]\n\t"
+ : [storage] "+m" (x.storage()), [result] "=q" (res)
+ : [bit_number] "Kq" (bit)
+ : BOOST_LOG_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
+ );
+ return res;
+}
+
+BOOST_FORCEINLINE bool bit_test_and_reset(boost::atomic< uint32_t >& x, uint32_t bit) BOOST_NOEXCEPT
+{
+ bool res;
+ __asm__ __volatile__
+ (
+ "lock; btr %[bit_number], %[storage]\n\t"
+ "setc %[result]\n\t"
+ : [storage] "+m" (x.storage()), [result] "=q" (res)
+ : [bit_number] "Kq" (bit)
+ : BOOST_LOG_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
+ );
+ return res;
+}
+
+#else
+
+BOOST_FORCEINLINE bool bit_test_and_set(boost::atomic< uint32_t >& x, uint32_t bit) BOOST_NOEXCEPT
+{
+ const uint32_t mask = uint32_t(1u) << bit;
+ uint32_t old_val = x.fetch_or(mask, boost::memory_order_acq_rel);
+ return (old_val & mask) != 0u;
+}
+
+BOOST_FORCEINLINE bool bit_test_and_reset(boost::atomic< uint32_t >& x, uint32_t bit) BOOST_NOEXCEPT
+{
+ const uint32_t mask = uint32_t(1u) << bit;
+ uint32_t old_val = x.fetch_and(~mask, boost::memory_order_acq_rel);
+ return (old_val & mask) != 0u;
+}
+
+#endif
+
+//! Interprocess event object
+class interprocess_event
+{
+private:
+ auto_handle m_event;
+
+public:
+ void create(const wchar_t* name, bool manual_reset, permissions const& perms = permissions());
+ void create_or_open(const wchar_t* name, bool manual_reset, permissions const& perms = permissions());
+ void open(const wchar_t* name);
+
+ boost::winapi::HANDLE_ get_handle() const BOOST_NOEXCEPT { return m_event.get(); }
+
+ void set()
+ {
+ if (BOOST_UNLIKELY(!boost::winapi::SetEvent(m_event.get())))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to set an interprocess event object", (err));
+ }
+ }
+
+ void set_noexcept() BOOST_NOEXCEPT
+ {
+ BOOST_VERIFY(!!boost::winapi::SetEvent(m_event.get()));
+ }
+
+ void reset()
+ {
+ if (BOOST_UNLIKELY(!boost::winapi::ResetEvent(m_event.get())))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to reset an interprocess event object", (err));
+ }
+ }
+
+ void wait()
+ {
+ const boost::winapi::DWORD_ retval = boost::winapi::WaitForSingleObject(m_event.get(), boost::winapi::infinite);
+ if (BOOST_UNLIKELY(retval != boost::winapi::wait_object_0))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to block on an interprocess event object", (err));
+ }
+ }
+
+ bool wait(boost::winapi::HANDLE_ abort_handle)
+ {
+ boost::winapi::HANDLE_ handles[2u] = { m_event.get(), abort_handle };
+ const boost::winapi::DWORD_ retval = boost::winapi::WaitForMultipleObjects(2u, handles, false, boost::winapi::infinite);
+ if (retval == (boost::winapi::wait_object_0 + 1u))
+ {
+ // Wait was interrupted
+ return false;
+ }
+ else if (BOOST_UNLIKELY(retval != boost::winapi::wait_object_0))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to block on an interprocess event object", (err));
+ }
+
+ return true;
+ }
+
+ void swap(interprocess_event& that) BOOST_NOEXCEPT
+ {
+ m_event.swap(that.m_event);
+ }
+};
+
+//! Interprocess semaphore object
+class interprocess_semaphore
+{
+private:
+ typedef boost::winapi::DWORD_ NTSTATUS_;
+ struct semaphore_basic_information
+ {
+ boost::winapi::ULONG_ current_count; // current semaphore count
+ boost::winapi::ULONG_ maximum_count; // max semaphore count
+ };
+ typedef NTSTATUS_ (__stdcall *nt_query_semaphore_t)(boost::winapi::HANDLE_ h, unsigned int info_class, semaphore_basic_information* pinfo, boost::winapi::ULONG_ info_size, boost::winapi::ULONG_* ret_len);
+ typedef bool (*is_semaphore_zero_count_t)(boost::winapi::HANDLE_ h);
+
+private:
+ auto_handle m_sem;
+
+ static boost::atomic< is_semaphore_zero_count_t > is_semaphore_zero_count;
+ static nt_query_semaphore_t nt_query_semaphore;
+
+public:
+ void create_or_open(const wchar_t* name, permissions const& perms = permissions());
+ void open(const wchar_t* name);
+
+ boost::winapi::HANDLE_ get_handle() const BOOST_NOEXCEPT { return m_sem.get(); }
+
+ void post(uint32_t count)
+ {
+ BOOST_ASSERT(count <= static_cast< uint32_t >((std::numeric_limits< boost::winapi::LONG_ >::max)()));
+
+ if (BOOST_UNLIKELY(!boost::winapi::ReleaseSemaphore(m_sem.get(), static_cast< boost::winapi::LONG_ >(count), NULL)))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to post on an interprocess semaphore object", (err));
+ }
+ }
+
+ bool is_zero_count() const
+ {
+ return is_semaphore_zero_count.load(boost::memory_order_acquire)(m_sem.get());
+ }
+
+ void wait()
+ {
+ const boost::winapi::DWORD_ retval = boost::winapi::WaitForSingleObject(m_sem.get(), boost::winapi::infinite);
+ if (BOOST_UNLIKELY(retval != boost::winapi::wait_object_0))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to block on an interprocess semaphore object", (err));
+ }
+ }
+
+ bool wait(boost::winapi::HANDLE_ abort_handle)
+ {
+ boost::winapi::HANDLE_ handles[2u] = { m_sem.get(), abort_handle };
+ const boost::winapi::DWORD_ retval = boost::winapi::WaitForMultipleObjects(2u, handles, false, boost::winapi::infinite);
+ if (retval == (boost::winapi::wait_object_0 + 1u))
+ {
+ // Wait was interrupted
+ return false;
+ }
+ else if (BOOST_UNLIKELY(retval != boost::winapi::wait_object_0))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to block on an interprocess semaphore object", (err));
+ }
+
+ return true;
+ }
+
+ void swap(interprocess_semaphore& that) BOOST_NOEXCEPT
+ {
+ m_sem.swap(that.m_sem);
+ }
+
+private:
+ static bool is_semaphore_zero_count_init(boost::winapi::HANDLE_ h);
+ static bool is_semaphore_zero_count_nt_query_semaphore(boost::winapi::HANDLE_ h);
+ static bool is_semaphore_zero_count_emulated(boost::winapi::HANDLE_ h);
+};
+
+//! Interprocess mutex. Implementation adopted from Boost.Sync.
+class interprocess_mutex
+{
+public:
+ //! Shared state that should be visible to all processes using the mutex
+ struct shared_state
+ {
+ boost::atomic< uint32_t > m_lock_state;
+
+ shared_state() BOOST_NOEXCEPT : m_lock_state(0u)
+ {
+ }
+ };
+
+ struct auto_unlock
+ {
+ explicit auto_unlock(interprocess_mutex& mutex) BOOST_NOEXCEPT : m_mutex(mutex) {}
+ ~auto_unlock() { m_mutex.unlock(); }
+
+ BOOST_DELETED_FUNCTION(auto_unlock(auto_unlock const&))
+ BOOST_DELETED_FUNCTION(auto_unlock& operator=(auto_unlock const&))
+
+ private:
+ interprocess_mutex& m_mutex;
+ };
+
+ struct optional_unlock
+ {
+ optional_unlock() BOOST_NOEXCEPT : m_mutex(NULL) {}
+ explicit optional_unlock(interprocess_mutex& mutex) BOOST_NOEXCEPT : m_mutex(&mutex) {}
+ ~optional_unlock() { if (m_mutex) m_mutex->unlock(); }
+
+ interprocess_mutex* disengage() BOOST_NOEXCEPT
+ {
+ interprocess_mutex* p = m_mutex;
+ m_mutex = NULL;
+ return p;
+ }
+
+ void engage(interprocess_mutex& mutex) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(!m_mutex);
+ m_mutex = &mutex;
+ }
+
+ BOOST_DELETED_FUNCTION(optional_unlock(optional_unlock const&))
+ BOOST_DELETED_FUNCTION(optional_unlock& operator=(optional_unlock const&))
+
+ private:
+ interprocess_mutex* m_mutex;
+ };
+
+private:
+ interprocess_event m_event;
+ shared_state* m_shared_state;
+
+#if !defined(BOOST_MSVC) || _MSC_VER >= 1800
+ static BOOST_CONSTEXPR_OR_CONST uint32_t lock_flag_bit = 31u;
+ static BOOST_CONSTEXPR_OR_CONST uint32_t event_set_flag_bit = 30u;
+ static BOOST_CONSTEXPR_OR_CONST uint32_t lock_flag_value = 1u << lock_flag_bit;
+ static BOOST_CONSTEXPR_OR_CONST uint32_t event_set_flag_value = 1u << event_set_flag_bit;
+ static BOOST_CONSTEXPR_OR_CONST uint32_t waiter_count_mask = event_set_flag_value - 1u;
+#else
+ // MSVC 8-11, inclusively, fail to link if these constants are declared as static constants instead of an enum
+ enum
+ {
+ lock_flag_bit = 31u,
+ event_set_flag_bit = 30u,
+ lock_flag_value = 1u << lock_flag_bit,
+ event_set_flag_value = 1u << event_set_flag_bit,
+ waiter_count_mask = event_set_flag_value - 1u
+ };
+#endif
+
+public:
+ interprocess_mutex() BOOST_NOEXCEPT : m_shared_state(NULL)
+ {
+ }
+
+ void create(const wchar_t* name, shared_state* shared, permissions const& perms = permissions())
+ {
+ m_event.create(name, false, perms);
+ m_shared_state = shared;
+ }
+
+ void open(const wchar_t* name, shared_state* shared)
+ {
+ m_event.open(name);
+ m_shared_state = shared;
+ }
+
+ bool try_lock()
+ {
+ return !bit_test_and_set(m_shared_state->m_lock_state, lock_flag_bit);
+ }
+
+ void lock()
+ {
+ if (BOOST_UNLIKELY(!try_lock()))
+ lock_slow();
+ }
+
+ bool lock(boost::winapi::HANDLE_ abort_handle)
+ {
+ if (BOOST_LIKELY(try_lock()))
+ return true;
+ return lock_slow(abort_handle);
+ }
+
+ void unlock() BOOST_NOEXCEPT
+ {
+ const uint32_t old_count = m_shared_state->m_lock_state.fetch_add(lock_flag_value, boost::memory_order_release);
+ if ((old_count & event_set_flag_value) == 0u && (old_count > lock_flag_value))
+ {
+ if (!bit_test_and_set(m_shared_state->m_lock_state, event_set_flag_bit))
+ {
+ m_event.set_noexcept();
+ }
+ }
+ }
+
+ BOOST_DELETED_FUNCTION(interprocess_mutex(interprocess_mutex const&))
+ BOOST_DELETED_FUNCTION(interprocess_mutex& operator=(interprocess_mutex const&))
+
+private:
+ void lock_slow();
+ bool lock_slow(boost::winapi::HANDLE_ abort_handle);
+ void mark_waiting_and_try_lock(uint32_t& old_state);
+ void clear_waiting_and_try_lock(uint32_t& old_state);
+};
+
+//! A simple clock that corresponds to GetTickCount/GetTickCount64 timeline
+struct tick_count_clock
+{
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ typedef boost::winapi::ULONGLONG_ time_point;
+#else
+ typedef boost::winapi::DWORD_ time_point;
+#endif
+
+ static time_point now() BOOST_NOEXCEPT
+ {
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ return boost::winapi::GetTickCount64();
+#else
+ return boost::winapi::GetTickCount();
+#endif
+ }
+};
+
+//! Interprocess condition variable
+class interprocess_condition_variable
+{
+private:
+ typedef boost::intrusive::list_base_hook<
+ boost::intrusive::tag< struct for_sem_order_by_usage >,
+ boost::intrusive::link_mode< boost::intrusive::safe_link >
+ > semaphore_info_list_hook_t;
+
+ typedef boost::intrusive::set_base_hook<
+ boost::intrusive::tag< struct for_sem_lookup_by_id >,
+ boost::intrusive::link_mode< boost::intrusive::safe_link >,
+ boost::intrusive::optimize_size< true >
+ > semaphore_info_set_hook_t;
+
+ //! Information about a semaphore object
+ struct semaphore_info :
+ public semaphore_info_list_hook_t,
+ public semaphore_info_set_hook_t
+ {
+ struct order_by_id
+ {
+ typedef bool result_type;
+
+ result_type operator() (semaphore_info const& left, semaphore_info const& right) const BOOST_NOEXCEPT
+ {
+ return left.m_id < right.m_id;
+ }
+ result_type operator() (semaphore_info const& left, uint32_t right) const BOOST_NOEXCEPT
+ {
+ return left.m_id < right;
+ }
+ result_type operator() (uint32_t left, semaphore_info const& right) const BOOST_NOEXCEPT
+ {
+ return left < right.m_id;
+ }
+ };
+
+ //! The semaphore
+ interprocess_semaphore m_semaphore;
+ //! Timestamp of the moment when the semaphore was checked for zero count and it was not zero. In milliseconds since epoch.
+ tick_count_clock::time_point m_last_check_for_zero;
+ //! The flag indicates that the semaphore has been checked for zero count and it was not zero
+ bool m_checked_for_zero;
+ //! The semaphore id
+ const uint32_t m_id;
+
+ explicit semaphore_info(uint32_t id) BOOST_NOEXCEPT : m_last_check_for_zero(0u), m_id(id)
+ {
+ }
+
+ //! Checks if the semaphore is in 'non-zero' state for too long
+ bool check_non_zero_timeout(tick_count_clock::time_point now) BOOST_NOEXCEPT
+ {
+ if (!m_checked_for_zero)
+ {
+ m_last_check_for_zero = now;
+ m_checked_for_zero = true;
+ return false;
+ }
+
+ return (now - m_last_check_for_zero) >= 2000u;
+ }
+
+ BOOST_DELETED_FUNCTION(semaphore_info(semaphore_info const&))
+ BOOST_DELETED_FUNCTION(semaphore_info& operator=(semaphore_info const&))
+ };
+
+ typedef boost::intrusive::list<
+ semaphore_info,
+ boost::intrusive::base_hook< semaphore_info_list_hook_t >,
+ boost::intrusive::constant_time_size< false >
+ > semaphore_info_list;
+
+ typedef boost::intrusive::set<
+ semaphore_info,
+ boost::intrusive::base_hook< semaphore_info_set_hook_t >,
+ boost::intrusive::compare< semaphore_info::order_by_id >,
+ boost::intrusive::constant_time_size< false >
+ > semaphore_info_set;
+
+public:
+ struct shared_state
+ {
+ //! Number of waiters blocked on the semaphore if >0, 0 if no threads are blocked, <0 when the blocked threads were signalled
+ int32_t m_waiters;
+ //! The semaphore generation
+ uint32_t m_generation;
+ //! Id of the semaphore which is used to block threads on
+ uint32_t m_semaphore_id;
+
+ shared_state() BOOST_NOEXCEPT :
+ m_waiters(0),
+ m_generation(0u),
+ m_semaphore_id(0u)
+ {
+ }
+ };
+
+private:
+ //! The list of semaphores used for blocking. The list is in the order at which the semaphores are considered to be picked for being used.
+ semaphore_info_list m_semaphore_info_list;
+ //! The list of semaphores used for blocking. Used for searching for a particular semaphore by id.
+ semaphore_info_set m_semaphore_info_set;
+ //! The semaphore that is currently being used for blocking
+ semaphore_info* m_current_semaphore;
+ //! A string storage for formatting a semaphore name
+ std::wstring m_semaphore_name;
+ //! Permissions used to create new semaphores
+ permissions m_perms;
+ //! Process-shared state
+ shared_state* m_shared_state;
+ //! The next id for creating a new semaphore
+ uint32_t m_next_semaphore_id;
+
+public:
+ interprocess_condition_variable() BOOST_NOEXCEPT :
+ m_current_semaphore(NULL),
+ m_shared_state(NULL),
+ m_next_semaphore_id(0u)
+ {
+ }
+
+ ~interprocess_condition_variable()
+ {
+ m_semaphore_info_set.clear();
+ m_semaphore_info_list.clear_and_dispose(boost::checked_deleter< semaphore_info >());
+ }
+
+ void init(const wchar_t* name, shared_state* shared, permissions const& perms = permissions())
+ {
+ m_perms = perms;
+ m_shared_state = shared;
+
+ m_semaphore_name = name;
+ // Reserve space for generate_semaphore_name()
+ m_semaphore_name.append(L".sem00000000");
+
+ m_current_semaphore = get_semaphore(m_shared_state->m_semaphore_id);
+ }
+
+ void notify_all()
+ {
+ const int32_t waiters = m_shared_state->m_waiters;
+ if (waiters > 0)
+ {
+ const uint32_t id = m_shared_state->m_semaphore_id;
+ if (m_current_semaphore->m_id != id)
+ m_current_semaphore = get_semaphore(id);
+
+ m_current_semaphore->m_semaphore.post(waiters);
+ m_shared_state->m_waiters = -waiters;
+ }
+ }
+
+ bool wait(interprocess_mutex::optional_unlock& lock, boost::winapi::HANDLE_ abort_handle);
+
+ BOOST_DELETED_FUNCTION(interprocess_condition_variable(interprocess_condition_variable const&))
+ BOOST_DELETED_FUNCTION(interprocess_condition_variable& operator=(interprocess_condition_variable const&))
+
+private:
+ //! Finds or opens a semaphore with the specified id
+ semaphore_info* get_semaphore(uint32_t id);
+ //! Finds or creates a semaphore with zero counter
+ semaphore_info* get_unused_semaphore();
+
+ //! Marks the semaphore info as unused and moves to the end of list
+ void mark_unused(semaphore_info& info) BOOST_NOEXCEPT;
+
+ //! Generates semaphore name according to id
+ void generate_semaphore_name(uint32_t id) BOOST_NOEXCEPT;
+
+ //! Returns \c true if \a left is less than \a right considering possible integer overflow
+ static bool is_overflow_less(uint32_t left, uint32_t right) BOOST_NOEXCEPT
+ {
+ return ((left - right) & 0x80000000u) != 0u;
+ }
+};
+
+} // namespace aux
+
+} // namespace ipc
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // BOOST_LOG_WINDOWS_IPC_SYNC_WRAPPERS_HPP_INCLUDED_
diff --git a/contrib/restricted/boost/libs/log/src/windows/light_rw_mutex.cpp b/contrib/restricted/boost/libs/log/src/windows/light_rw_mutex.cpp
new file mode 100644
index 0000000000..010cb55d2a
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/light_rw_mutex.cpp
@@ -0,0 +1,201 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file light_rw_mutex.cpp
+ * \author Andrey Semashev
+ * \date 19.06.2010
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#include <boost/log/detail/config.hpp>
+#include <boost/log/detail/light_rw_mutex.hpp>
+
+#if !defined(BOOST_LOG_NO_THREADS)
+
+#if !defined(BOOST_LOG_LWRWMUTEX_USE_PTHREAD) && !defined(BOOST_LOG_LWRWMUTEX_USE_SRWLOCK)
+
+#include <cstddef>
+#include <new>
+#include <boost/assert.hpp>
+#include <boost/align/aligned_alloc.hpp>
+#include <boost/thread/shared_mutex.hpp>
+#include <boost/log/utility/once_block.hpp>
+
+#include <boost/winapi/basic_types.hpp>
+#include <boost/winapi/dll.hpp>
+
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace aux {
+
+BOOST_LOG_ANONYMOUS_NAMESPACE {
+
+struct BOOST_LOG_MAY_ALIAS mutex_impl { void* p; }; // has the same layout as SRWLOCK and light_rw_mutex::m_Mutex
+
+typedef void (WINAPI *init_fun_t)(mutex_impl*);
+typedef void (WINAPI *destroy_fun_t)(mutex_impl*);
+typedef void (WINAPI *lock_exclusive_fun_t)(mutex_impl*);
+typedef void (WINAPI *lock_shared_fun_t)(mutex_impl*);
+typedef void (WINAPI *unlock_exclusive_fun_t)(mutex_impl*);
+typedef void (WINAPI *unlock_shared_fun_t)(mutex_impl*);
+
+//! A complement stub function for InitializeSRWLock
+void WINAPI DeinitializeSRWLock(mutex_impl*)
+{
+}
+
+// The Boost.Thread-based implementation
+void WINAPI InitializeSharedMutex(mutex_impl* mtx)
+{
+ // To avoid cache line aliasing we do aligned memory allocation here
+ enum
+ {
+ // Allocation size is the minimum number of cache lines to accommodate shared_mutex
+ size =
+ (
+ sizeof(shared_mutex) / BOOST_LOG_CPU_CACHE_LINE_SIZE
+ + ((sizeof(shared_mutex) % BOOST_LOG_CPU_CACHE_LINE_SIZE) != 0)
+ )
+ * BOOST_LOG_CPU_CACHE_LINE_SIZE
+ };
+ mtx->p = alignment::aligned_alloc(BOOST_LOG_CPU_CACHE_LINE_SIZE, size);
+ BOOST_ASSERT(mtx->p != NULL);
+ new (mtx->p) shared_mutex();
+}
+
+void WINAPI DeinitializeSharedMutex(mutex_impl* mtx)
+{
+ static_cast< shared_mutex* >(mtx->p)->~shared_mutex();
+ alignment::aligned_free(mtx->p);
+ mtx->p = NULL;
+}
+
+void WINAPI ExclusiveLockSharedMutex(mutex_impl* mtx)
+{
+ static_cast< shared_mutex* >(mtx->p)->lock();
+}
+
+void WINAPI SharedLockSharedMutex(mutex_impl* mtx)
+{
+ static_cast< shared_mutex* >(mtx->p)->lock_shared();
+}
+
+void WINAPI ExclusiveUnlockSharedMutex(mutex_impl* mtx)
+{
+ static_cast< shared_mutex* >(mtx->p)->unlock();
+}
+
+void WINAPI SharedUnlockSharedMutex(mutex_impl* mtx)
+{
+ static_cast< shared_mutex* >(mtx->p)->unlock_shared();
+}
+
+// Pointers to the actual implementation functions
+init_fun_t g_pInitializeLWRWMutex = NULL;
+destroy_fun_t g_pDestroyLWRWMutex = NULL;
+lock_exclusive_fun_t g_pLockExclusiveLWRWMutex = NULL;
+lock_shared_fun_t g_pLockSharedLWRWMutex = NULL;
+unlock_exclusive_fun_t g_pUnlockExclusiveLWRWMutex = NULL;
+unlock_shared_fun_t g_pUnlockSharedLWRWMutex = NULL;
+
+//! The function dynamically initializes the implementation pointers
+void init_light_rw_mutex_impl()
+{
+ boost::winapi::HMODULE_ hKernel32 = boost::winapi::GetModuleHandleW(L"kernel32.dll");
+ if (hKernel32)
+ {
+ g_pInitializeLWRWMutex =
+ (init_fun_t)boost::winapi::get_proc_address(hKernel32, "InitializeSRWLock");
+ if (g_pInitializeLWRWMutex)
+ {
+ g_pLockExclusiveLWRWMutex =
+ (lock_exclusive_fun_t)boost::winapi::get_proc_address(hKernel32, "AcquireSRWLockExclusive");
+ if (g_pLockExclusiveLWRWMutex)
+ {
+ g_pUnlockExclusiveLWRWMutex =
+ (unlock_exclusive_fun_t)boost::winapi::get_proc_address(hKernel32, "ReleaseSRWLockExclusive");
+ if (g_pUnlockExclusiveLWRWMutex)
+ {
+ g_pLockSharedLWRWMutex =
+ (lock_shared_fun_t)boost::winapi::get_proc_address(hKernel32, "AcquireSRWLockShared");
+ if (g_pLockSharedLWRWMutex)
+ {
+ g_pUnlockSharedLWRWMutex =
+ (unlock_shared_fun_t)boost::winapi::get_proc_address(hKernel32, "ReleaseSRWLockShared");
+ if (g_pUnlockSharedLWRWMutex)
+ {
+ g_pDestroyLWRWMutex = &DeinitializeSRWLock;
+ return;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Current OS doesn't have support for SRWLOCK, use Boost.Thread instead
+ g_pInitializeLWRWMutex = &InitializeSharedMutex;
+ g_pDestroyLWRWMutex = &DeinitializeSharedMutex;
+ g_pLockExclusiveLWRWMutex = &ExclusiveLockSharedMutex;
+ g_pUnlockExclusiveLWRWMutex = &ExclusiveUnlockSharedMutex;
+ g_pLockSharedLWRWMutex = &SharedLockSharedMutex;
+ g_pUnlockSharedLWRWMutex = &SharedUnlockSharedMutex;
+}
+
+} // namespace
+
+BOOST_LOG_API light_rw_mutex::light_rw_mutex()
+{
+ BOOST_LOG_ONCE_BLOCK()
+ {
+ init_light_rw_mutex_impl();
+ }
+ g_pInitializeLWRWMutex((mutex_impl*)&m_Mutex);
+}
+
+BOOST_LOG_API light_rw_mutex::~light_rw_mutex()
+{
+ g_pDestroyLWRWMutex((mutex_impl*)&m_Mutex);
+}
+
+BOOST_LOG_API void light_rw_mutex::lock_shared()
+{
+ g_pLockSharedLWRWMutex((mutex_impl*)&m_Mutex);
+}
+
+BOOST_LOG_API void light_rw_mutex::unlock_shared()
+{
+ g_pUnlockSharedLWRWMutex((mutex_impl*)&m_Mutex);
+}
+
+BOOST_LOG_API void light_rw_mutex::lock()
+{
+ g_pLockExclusiveLWRWMutex((mutex_impl*)&m_Mutex);
+}
+
+BOOST_LOG_API void light_rw_mutex::unlock()
+{
+ g_pUnlockExclusiveLWRWMutex((mutex_impl*)&m_Mutex);
+}
+
+} // namespace aux
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // !defined(BOOST_LOG_LWRWMUTEX_USE_PTHREAD) && !defined(BOOST_LOG_LWRWMUTEX_USE_SRWLOCK)
+
+#endif // !defined(BOOST_LOG_NO_THREADS)
diff --git a/contrib/restricted/boost/libs/log/src/windows/mapped_shared_memory.cpp b/contrib/restricted/boost/libs/log/src/windows/mapped_shared_memory.cpp
new file mode 100644
index 0000000000..4586c1d81b
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/mapped_shared_memory.cpp
@@ -0,0 +1,251 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file windows/mapped_shared_memory.cpp
+ * \author Andrey Semashev
+ * \date 13.02.2016
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#include <boost/log/detail/config.hpp>
+#include <boost/winapi/basic_types.hpp>
+#include <boost/winapi/handles.hpp>
+#include <boost/winapi/dll.hpp>
+#include <boost/winapi/file_mapping.hpp>
+#include <boost/winapi/page_protection_flags.hpp>
+#include <boost/winapi/get_last_error.hpp>
+#include <windows.h> // for error codes
+#include <cstddef>
+#include <limits>
+#include <string>
+#include <sstream>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/atomic.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/log/exceptions.hpp>
+#include <boost/log/utility/permissions.hpp>
+#include "windows/mapped_shared_memory.hpp"
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace ipc {
+
+namespace aux {
+
+boost::atomic< mapped_shared_memory::nt_query_section_t > mapped_shared_memory::nt_query_section(static_cast< mapped_shared_memory::nt_query_section_t >(NULL));
+
+mapped_shared_memory::~mapped_shared_memory()
+{
+ if (m_mapped_address)
+ unmap();
+
+ if (m_handle)
+ {
+ BOOST_VERIFY(boost::winapi::CloseHandle(m_handle) != 0);
+ m_handle = NULL;
+ }
+}
+
+//! Creates a new file mapping for the shared memory segment or opens the existing one
+void mapped_shared_memory::create(const wchar_t* name, std::size_t size, permissions const& perms)
+{
+ BOOST_ASSERT(m_handle == NULL);
+
+ const uint64_t size64 = static_cast< uint64_t >(size);
+
+ // Unlike other create functions, this function opens the existing mapping, if one already exists
+ boost::winapi::HANDLE_ h = boost::winapi::CreateFileMappingW
+ (
+ boost::winapi::INVALID_HANDLE_VALUE_,
+ reinterpret_cast< boost::winapi::SECURITY_ATTRIBUTES_* >(perms.get_native()),
+ boost::winapi::PAGE_READWRITE_ | boost::winapi::SEC_COMMIT_,
+ static_cast< boost::winapi::DWORD_ >(size64 >> 32u),
+ static_cast< boost::winapi::DWORD_ >(size64),
+ name
+ );
+
+ boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ if (BOOST_UNLIKELY(h == NULL || err != ERROR_SUCCESS))
+ {
+ if (h != NULL)
+ boost::winapi::CloseHandle(h);
+ std::ostringstream strm;
+ strm << "Failed to create a shared memory segment of " << size << " bytes";
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, strm.str(), (err));
+ }
+
+ m_handle = h;
+ m_size = size;
+}
+
+//! Creates a new file mapping for the shared memory segment or opens the existing one. Returns \c true if the region was created and \c false if an existing one was opened.
+bool mapped_shared_memory::create_or_open(const wchar_t* name, std::size_t size, permissions const& perms)
+{
+ BOOST_ASSERT(m_handle == NULL);
+
+ const uint64_t size64 = static_cast< uint64_t >(size);
+
+ // Unlike other create functions, this function opens the existing mapping, if one already exists
+ boost::winapi::HANDLE_ h = boost::winapi::CreateFileMappingW
+ (
+ boost::winapi::INVALID_HANDLE_VALUE_,
+ reinterpret_cast< boost::winapi::SECURITY_ATTRIBUTES_* >(perms.get_native()),
+ boost::winapi::PAGE_READWRITE_ | boost::winapi::SEC_COMMIT_,
+ static_cast< boost::winapi::DWORD_ >(size64 >> 32u),
+ static_cast< boost::winapi::DWORD_ >(size64),
+ name
+ );
+
+ boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ if (BOOST_UNLIKELY(h == NULL))
+ {
+ std::ostringstream strm;
+ strm << "Failed to create or open a shared memory segment of " << size << " bytes";
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, strm.str(), (err));
+ }
+
+ const bool created = (err != ERROR_ALREADY_EXISTS);
+ try
+ {
+ if (created)
+ {
+ m_size = size;
+ }
+ else
+ {
+ // If an existing segment was opened, determine its size
+ m_size = obtain_size(h);
+ }
+ }
+ catch (...)
+ {
+ boost::winapi::CloseHandle(h);
+ throw;
+ }
+
+ m_handle = h;
+
+ return created;
+}
+
+//! Opens the existing file mapping for the shared memory segment
+void mapped_shared_memory::open(const wchar_t* name)
+{
+ BOOST_ASSERT(m_handle == NULL);
+
+ // Note: FILE_MAP_WRITE implies reading permission as well
+ boost::winapi::HANDLE_ h = boost::winapi::OpenFileMappingW(boost::winapi::FILE_MAP_WRITE_ | boost::winapi::SECTION_QUERY_, false, name);
+
+ if (BOOST_UNLIKELY(h == NULL))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to create a shared memory segment", (err));
+ }
+
+ try
+ {
+ m_size = obtain_size(h);
+ }
+ catch (...)
+ {
+ boost::winapi::CloseHandle(h);
+ throw;
+ }
+
+ m_handle = h;
+}
+
+//! Maps the file mapping into the current process memory
+void mapped_shared_memory::map()
+{
+ BOOST_ASSERT(m_handle != NULL);
+ BOOST_ASSERT(m_mapped_address == NULL);
+
+ // Note: FILE_MAP_WRITE implies reading permission as well
+ m_mapped_address = boost::winapi::MapViewOfFile
+ (
+ m_handle,
+ boost::winapi::FILE_MAP_WRITE_ | boost::winapi::SECTION_QUERY_,
+ 0u,
+ 0u,
+ m_size
+ );
+
+ if (BOOST_UNLIKELY(m_mapped_address == NULL))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to map the shared memory segment into the process address space", (err));
+ }
+}
+
+//! Unmaps the file mapping
+void mapped_shared_memory::unmap()
+{
+ BOOST_ASSERT(m_mapped_address != NULL);
+
+ BOOST_VERIFY(boost::winapi::UnmapViewOfFile(m_mapped_address) != 0);
+ m_mapped_address = NULL;
+}
+
+//! Returns the size of the file mapping identified by the handle
+std::size_t mapped_shared_memory::obtain_size(boost::winapi::HANDLE_ h)
+{
+ nt_query_section_t query_section = nt_query_section.load(boost::memory_order_acquire);
+
+ if (BOOST_UNLIKELY(query_section == NULL))
+ {
+ // Check if ntdll.dll provides NtQuerySection, see: http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FSection%2FNtQuerySection.html
+ boost::winapi::HMODULE_ ntdll = boost::winapi::GetModuleHandleW(L"ntdll.dll");
+ if (BOOST_UNLIKELY(ntdll == NULL))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to obtain a handle to ntdll.dll", (err));
+ }
+
+ query_section = (nt_query_section_t)boost::winapi::get_proc_address(ntdll, "NtQuerySection");
+ if (BOOST_UNLIKELY(query_section == NULL))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to obtain the NtQuerySection function", (err));
+ }
+
+ nt_query_section.store(query_section, boost::memory_order_release);
+ }
+
+ section_basic_information info = {};
+ boost::winapi::NTSTATUS_ err = query_section
+ (
+ h,
+ 0u, // SectionBasicInformation
+ &info,
+ sizeof(info),
+ NULL
+ );
+ if (BOOST_UNLIKELY(err != 0u))
+ {
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to test obtain size of the shared memory segment", (ERROR_INVALID_HANDLE));
+ }
+
+ return static_cast< std::size_t >(info.section_size.QuadPart);
+}
+
+} // namespace aux
+
+} // namespace ipc
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
diff --git a/contrib/restricted/boost/libs/log/src/windows/mapped_shared_memory.hpp b/contrib/restricted/boost/libs/log/src/windows/mapped_shared_memory.hpp
new file mode 100644
index 0000000000..1b5b85e5b2
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/mapped_shared_memory.hpp
@@ -0,0 +1,102 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file windows/mapped_shared_memory.hpp
+ * \author Andrey Semashev
+ * \date 13.02.2016
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#ifndef BOOST_LOG_WINDOWS_MAPPED_SHARED_MEMORY_HPP_INCLUDED_
+#define BOOST_LOG_WINDOWS_MAPPED_SHARED_MEMORY_HPP_INCLUDED_
+
+#include <boost/log/detail/config.hpp>
+#include <boost/winapi/basic_types.hpp>
+#include <cstddef>
+#include <boost/assert.hpp>
+#include <boost/atomic/atomic.hpp>
+#include <boost/log/utility/permissions.hpp>
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace ipc {
+
+namespace aux {
+
+/*!
+ * A replacement for to \c mapped_shared_memory and \c mapped_region from Boost.Interprocess.
+ * The significant difference is that the shared memory name is passed as a UTF-16 string and
+ * errors are reported as Boost.Log exceptions.
+ */
+class mapped_shared_memory
+{
+private:
+ struct section_basic_information
+ {
+ void* base_address;
+ boost::winapi::ULONG_ section_attributes;
+ boost::winapi::LARGE_INTEGER_ section_size;
+ };
+ typedef boost::winapi::NTSTATUS_ (__stdcall *nt_query_section_t)(boost::winapi::HANDLE_ h, unsigned int info_class, section_basic_information* pinfo, boost::winapi::ULONG_ info_size, boost::winapi::ULONG_* ret_len);
+
+private:
+ boost::winapi::HANDLE_ m_handle;
+ void* m_mapped_address;
+ std::size_t m_size;
+ static boost::atomic< nt_query_section_t > nt_query_section;
+
+public:
+ BOOST_CONSTEXPR mapped_shared_memory() BOOST_NOEXCEPT :
+ m_handle(NULL),
+ m_mapped_address(NULL),
+ m_size(0u)
+ {
+ }
+
+ ~mapped_shared_memory();
+
+ //! Creates a new file mapping for the shared memory segment
+ void create(const wchar_t* name, std::size_t size, permissions const& perms = permissions());
+ //! Creates a new file mapping for the shared memory segment or opens the existing one. Returns \c true if the region was created and \c false if an existing one was opened.
+ bool create_or_open(const wchar_t* name, std::size_t size, permissions const& perms = permissions());
+ //! Opens the existing file mapping for the shared memory segment
+ void open(const wchar_t* name);
+
+ //! Maps the file mapping into the current process memory
+ void map();
+ //! Unmaps the file mapping
+ void unmap();
+
+ //! Returns the size of the opened shared memory segment
+ std::size_t size() const BOOST_NOEXCEPT { return m_size; }
+ //! Returns the address of the mapped shared memory
+ void* address() const BOOST_NOEXCEPT { return m_mapped_address; }
+
+ BOOST_DELETED_FUNCTION(mapped_shared_memory(mapped_shared_memory const&))
+ BOOST_DELETED_FUNCTION(mapped_shared_memory& operator=(mapped_shared_memory const&))
+
+private:
+ //! Returns the size of the file mapping identified by the handle
+ static std::size_t obtain_size(boost::winapi::HANDLE_ h);
+};
+
+} // namespace aux
+
+} // namespace ipc
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // BOOST_LOG_WINDOWS_MAPPED_SHARED_MEMORY_HPP_INCLUDED_
diff --git a/contrib/restricted/boost/libs/log/src/windows/object_name.cpp b/contrib/restricted/boost/libs/log/src/windows/object_name.cpp
new file mode 100644
index 0000000000..5b56a0352a
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/object_name.cpp
@@ -0,0 +1,227 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file windows/object_name.cpp
+ * \author Andrey Semashev
+ * \date 06.03.2016
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#include <boost/log/detail/config.hpp>
+#include <cstddef>
+#include <cstdlib>
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/atomic.hpp>
+#include <boost/move/utility_core.hpp>
+#include <boost/log/exceptions.hpp>
+#include <boost/log/utility/ipc/object_name.hpp>
+#include <boost/winapi/get_last_error.hpp>
+#include <windows.h>
+#include <lmcons.h>
+#include <security.h>
+#include "windows/auto_handle.hpp"
+#include "windows/utf_code_conversion.hpp"
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace ipc {
+
+BOOST_LOG_ANONYMOUS_NAMESPACE {
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+
+class auto_boundary_descriptor
+{
+private:
+ HANDLE m_handle;
+
+public:
+ explicit auto_boundary_descriptor(HANDLE h = NULL) BOOST_NOEXCEPT : m_handle(h)
+ {
+ }
+
+ ~auto_boundary_descriptor() BOOST_NOEXCEPT
+ {
+ if (m_handle)
+ DeleteBoundaryDescriptor(m_handle);
+ }
+
+ void init(HANDLE h) BOOST_NOEXCEPT
+ {
+ BOOST_ASSERT(m_handle == NULL);
+ m_handle = h;
+ }
+
+ HANDLE get() const BOOST_NOEXCEPT { return m_handle; }
+ HANDLE* get_ptr() BOOST_NOEXCEPT { return &m_handle; }
+
+ void swap(auto_boundary_descriptor& that) BOOST_NOEXCEPT
+ {
+ HANDLE h = m_handle;
+ m_handle = that.m_handle;
+ that.m_handle = h;
+ }
+
+ BOOST_DELETED_FUNCTION(auto_boundary_descriptor(auto_boundary_descriptor const&))
+ BOOST_DELETED_FUNCTION(auto_boundary_descriptor& operator=(auto_boundary_descriptor const&))
+};
+
+//! Handle for the private namespace for \c user scope
+static boost::atomic< HANDLE > g_user_private_namespace;
+
+//! Closes the private namespace on process exit
+void close_user_namespace()
+{
+ HANDLE h = g_user_private_namespace.load(boost::memory_order_acquire);
+ if (h)
+ {
+ ClosePrivateNamespace(h, 0);
+ g_user_private_namespace.store((HANDLE)NULL, boost::memory_order_release);
+ }
+}
+
+//! Attempts to create or open the private namespace
+bool init_user_namespace()
+{
+ HANDLE h = g_user_private_namespace.load(boost::memory_order_acquire);
+ if (BOOST_UNLIKELY(!h))
+ {
+ // Obtain the current user SID
+ boost::log::ipc::aux::auto_handle h_process_token;
+ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, h_process_token.get_ptr()))
+ return false;
+
+ DWORD token_user_size = 0;
+ GetTokenInformation(h_process_token.get(), TokenUser, NULL, 0u, &token_user_size);
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER || token_user_size < sizeof(TOKEN_USER))
+ return false;
+ std::vector< unsigned char > token_user_storage(static_cast< std::size_t >(token_user_size), static_cast< unsigned char >(0u));
+ if (!GetTokenInformation(h_process_token.get(), TokenUser, &token_user_storage[0], token_user_size, &token_user_size))
+ return false;
+
+ TOKEN_USER const& token_user = *reinterpret_cast< const TOKEN_USER* >(&token_user_storage[0]);
+ if (!token_user.User.Sid)
+ return false;
+
+ // Create a boundary descriptor with the user's SID
+ auto_boundary_descriptor h_boundary(CreateBoundaryDescriptorW(L"User", 0));
+ if (!h_boundary.get())
+ return false;
+
+ if (!AddSIDToBoundaryDescriptor(h_boundary.get_ptr(), token_user.User.Sid))
+ return false;
+
+ // Create or open a namespace for kernel objects
+ h = CreatePrivateNamespaceW(NULL, h_boundary.get(), L"User");
+ if (!h)
+ h = OpenPrivateNamespaceW(h_boundary.get(), L"User");
+
+ if (h)
+ {
+ HANDLE expected = NULL;
+ if (g_user_private_namespace.compare_exchange_strong(expected, h, boost::memory_order_acq_rel, boost::memory_order_acquire))
+ {
+ std::atexit(&close_user_namespace);
+ }
+ else
+ {
+ // Another thread must have opened the namespace
+ ClosePrivateNamespace(h, 0);
+ h = expected;
+ }
+ }
+ }
+
+ return !!h;
+}
+
+#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+
+//! Returns a prefix string for a shared resource according to the scope
+std::string get_scope_prefix(object_name::scope ns)
+{
+ std::string prefix;
+ switch (ns)
+ {
+ case object_name::process_group:
+ {
+ // For now consider all processes as members of the common process group. It may change if there is found
+ // a way to get a process group id (i.e. id of the closest parent process that was created with the CREATE_NEW_PROCESS_GROUP flag).
+ prefix = "Local\\boost.log.process_group";
+ }
+ break;
+
+ case object_name::session:
+ {
+ prefix = "Local\\boost.log.session";
+ }
+ break;
+
+ case object_name::user:
+ {
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ if (init_user_namespace())
+ {
+ prefix = "User\\boost.log.user";
+ }
+ else
+#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+ {
+ wchar_t buf[UNLEN + 1u];
+ ULONG len = sizeof(buf) / sizeof(*buf);
+ if (BOOST_UNLIKELY(!GetUserNameExW(NameSamCompatible, buf, &len)))
+ {
+ const boost::winapi::DWORD_ err = boost::winapi::GetLastError();
+ BOOST_LOG_THROW_DESCR_PARAMS(boost::log::system_error, "Failed to obtain the current user name", (err));
+ }
+
+ std::replace(buf, buf + len, L'\\', L'.');
+
+ prefix = "Local\\boost.log.user." + boost::log::aux::utf16_to_utf8(buf);
+ }
+ }
+ break;
+
+ default:
+ prefix = "Global\\boost.log.global";
+ break;
+ }
+
+ prefix.push_back('.');
+
+ return BOOST_LOG_NRVO_RESULT(prefix);
+}
+
+} // namespace
+
+//! Constructor from the object name
+BOOST_LOG_API object_name::object_name(scope ns, const char* str) :
+ m_name(get_scope_prefix(ns) + str)
+{
+}
+
+//! Constructor from the object name
+BOOST_LOG_API object_name::object_name(scope ns, std::string const& str) :
+ m_name(get_scope_prefix(ns) + str)
+{
+}
+
+} // namespace ipc
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
diff --git a/contrib/restricted/boost/libs/log/src/windows/simple_event_log.h b/contrib/restricted/boost/libs/log/src/windows/simple_event_log.h
new file mode 100644
index 0000000000..10c133c7c0
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/simple_event_log.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2015.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ *
+ * This file is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/libs/log/doc/log.html.
+ */
+
+/* --------------------------------------------------------
+ * HEADER SECTION
+ */
+
+
+
+/* ------------------------------------------------------------------
+ * MESSAGE DEFINITION SECTION
+ */
+//
+// Values are 32 bit values laid out as follows:
+//
+// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
+// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+// +---+-+-+-----------------------+-------------------------------+
+// |Sev|C|R| Facility | Code |
+// +---+-+-+-----------------------+-------------------------------+
+//
+// where
+//
+// Sev - is the severity code
+//
+// 00 - Success
+// 01 - Informational
+// 10 - Warning
+// 11 - Error
+//
+// C - is the Customer code flag
+//
+// R - is a reserved bit
+//
+// Facility - is the facility code
+//
+// Code - is the facility's status code
+//
+//
+// Define the facility codes
+//
+
+
+//
+// Define the severity codes
+//
+#define BOOST_LOG_SEVERITY_WARNING 0x2
+#define BOOST_LOG_SEVERITY_ERROR 0x3
+#define BOOST_LOG_SEVERITY_DEBUG 0x0
+#define BOOST_LOG_SEVERITY_INFO 0x1
+
+
+//
+// MessageId: BOOST_LOG_MSG_DEBUG
+//
+// MessageText:
+//
+// %1
+//
+#define BOOST_LOG_MSG_DEBUG ((DWORD)0x00000100L)
+
+//
+// MessageId: BOOST_LOG_MSG_INFO
+//
+// MessageText:
+//
+// %1
+//
+#define BOOST_LOG_MSG_INFO ((DWORD)0x40000101L)
+
+//
+// MessageId: BOOST_LOG_MSG_WARNING
+//
+// MessageText:
+//
+// %1
+//
+#define BOOST_LOG_MSG_WARNING ((DWORD)0x80000102L)
+
+//
+// MessageId: BOOST_LOG_MSG_ERROR
+//
+// MessageText:
+//
+// %1
+//
+#define BOOST_LOG_MSG_ERROR ((DWORD)0xC0000103L)
+
diff --git a/contrib/restricted/boost/libs/log/src/windows/utf_code_conversion.hpp b/contrib/restricted/boost/libs/log/src/windows/utf_code_conversion.hpp
new file mode 100644
index 0000000000..7b00f13d76
--- /dev/null
+++ b/contrib/restricted/boost/libs/log/src/windows/utf_code_conversion.hpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright Andrey Semashev 2016.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file windows/utf_code_conversion.hpp
+ * \author Andrey Semashev
+ * \date 22.02.2016
+ *
+ * \brief This header is the Boost.Log library implementation, see the library documentation
+ * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
+ */
+
+#ifndef BOOST_LOG_WINDOWS_UTF_CODE_CONVERSION_HPP_INCLUDED_
+#define BOOST_LOG_WINDOWS_UTF_CODE_CONVERSION_HPP_INCLUDED_
+
+#include <boost/log/detail/config.hpp>
+#include <string>
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace aux {
+
+//! Converts UTF-8 to UTF-16
+std::wstring utf8_to_utf16(const char* str);
+//! Converts UTF-16 to UTF-8
+std::string utf16_to_utf8(const wchar_t* str);
+
+} // namespace aux
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // BOOST_LOG_WINDOWS_UTF_CODE_CONVERSION_HPP_INCLUDED_
diff --git a/contrib/restricted/boost/libs/program_options/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/program_options/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..484ea5452b
--- /dev/null
+++ b/contrib/restricted/boost/libs/program_options/.yandex_meta/licenses.list.txt
@@ -0,0 +1,55 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Sascha Ochsenknecht 2009.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2002-2004.
+// Copyright Bertolt Mildner 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2002-2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/program_options/CMakeLists.txt b/contrib/restricted/boost/libs/program_options/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/restricted/boost/libs/program_options/CMakeLists.txt
+++ b/contrib/restricted/boost/libs/program_options/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/boost/libs/python/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/python/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..0d88af215d
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/.yandex_meta/licenses.list.txt
@@ -0,0 +1,120 @@
+====================BSL-1.0====================
+ // Contributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Copyright David Abrahams 2004. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// (C) Copyright David Abrahams 2000.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright R.W. Grosse-Kunstleve 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2004 Jonathan Brandmeyer
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2002.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright David Abrahams 2004. Use, modification and distribution is
+// subject to the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Eric Niebler 2005.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Nikolay Mladenov 2007.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright Peter Dimov and Multi Media Ltd 2001, 2002
+// Copyright David Abrahams 2001
+
+
+====================COPYRIGHT====================
+// Copyright Stefan Seefeld 2005.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/python/arcadia_test/mod/module.cpp b/contrib/restricted/boost/libs/python/arcadia_test/mod/module.cpp
new file mode 100644
index 0000000000..6053f30c81
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/arcadia_test/mod/module.cpp
@@ -0,0 +1,11 @@
+#include <boost/python.hpp>
+
+using namespace boost::python;
+
+static const char* hello() {
+ return "hello world!";
+}
+
+BOOST_PYTHON_MODULE(arcadia_boost_python_test) {
+ def("hello", &hello);
+}
diff --git a/contrib/restricted/boost/libs/python/arcadia_test/py2/test_hello.py b/contrib/restricted/boost/libs/python/arcadia_test/py2/test_hello.py
new file mode 100644
index 0000000000..67d1d8f06a
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/arcadia_test/py2/test_hello.py
@@ -0,0 +1,5 @@
+import arcadia_boost_python_test as M
+
+
+def test_hello():
+ assert M.hello() == "hello world!"
diff --git a/contrib/restricted/boost/libs/python/arcadia_test/py3/test_hello.py b/contrib/restricted/boost/libs/python/arcadia_test/py3/test_hello.py
new file mode 100644
index 0000000000..67d1d8f06a
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/arcadia_test/py3/test_hello.py
@@ -0,0 +1,5 @@
+import arcadia_boost_python_test as M
+
+
+def test_hello():
+ assert M.hello() == "hello world!"
diff --git a/contrib/restricted/boost/libs/python/src/numpy/dtype.cpp b/contrib/restricted/boost/libs/python/src/numpy/dtype.cpp
new file mode 100644
index 0000000000..88a20a27b5
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/src/numpy/dtype.cpp
@@ -0,0 +1,220 @@
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef _MSC_VER
+#include <boost/cstdint.hpp>
+#endif
+#define BOOST_PYTHON_NUMPY_INTERNAL
+#include <boost/python/numpy/internal.hpp>
+
+#define DTYPE_FROM_CODE(code) \
+ dtype(python::detail::new_reference(reinterpret_cast<PyObject*>(PyArray_DescrFromType(code))))
+
+#define BUILTIN_INT_DTYPE(bits) \
+ template <> struct builtin_int_dtype<bits, false> \
+ { \
+ static dtype get() { return DTYPE_FROM_CODE(NPY_INT ## bits);} \
+ }; \
+ template <> struct builtin_int_dtype<bits, true> \
+ { \
+ static dtype get() { return DTYPE_FROM_CODE(NPY_UINT ## bits);} \
+ }; \
+ template BOOST_NUMPY_DECL dtype get_int_dtype<bits, false>(); \
+ template BOOST_NUMPY_DECL dtype get_int_dtype<bits, true>()
+
+#define BUILTIN_FLOAT_DTYPE(bits) \
+ template <> struct builtin_float_dtype<bits> \
+ { \
+ static dtype get() { return DTYPE_FROM_CODE(NPY_FLOAT ## bits);} \
+ }; \
+ template BOOST_NUMPY_DECL dtype get_float_dtype<bits>()
+
+#define BUILTIN_COMPLEX_DTYPE(bits) \
+ template <> struct builtin_complex_dtype<bits> \
+ { \
+ static dtype get() { return DTYPE_FROM_CODE(NPY_COMPLEX ## bits);} \
+ }; \
+ template BOOST_NUMPY_DECL dtype get_complex_dtype<bits>()
+
+namespace boost { namespace python { namespace converter {
+NUMPY_OBJECT_MANAGER_TRAITS_IMPL(PyArrayDescr_Type, numpy::dtype)
+} // namespace boost::python::converter
+
+namespace numpy {
+namespace detail {
+
+dtype builtin_dtype<bool,true>::get() { return DTYPE_FROM_CODE(NPY_BOOL); }
+
+template <int bits, bool isUnsigned> struct builtin_int_dtype;
+template <int bits> struct builtin_float_dtype;
+template <int bits> struct builtin_complex_dtype;
+
+template <int bits, bool isUnsigned> dtype get_int_dtype() {
+ return builtin_int_dtype<bits,isUnsigned>::get();
+}
+template <int bits> dtype get_float_dtype() { return builtin_float_dtype<bits>::get(); }
+template <int bits> dtype get_complex_dtype() { return builtin_complex_dtype<bits>::get(); }
+
+BUILTIN_INT_DTYPE(8);
+BUILTIN_INT_DTYPE(16);
+BUILTIN_INT_DTYPE(32);
+BUILTIN_INT_DTYPE(64);
+#ifdef NPY_FLOAT16
+BUILTIN_FLOAT_DTYPE(16);
+#endif
+BUILTIN_FLOAT_DTYPE(32);
+BUILTIN_FLOAT_DTYPE(64);
+BUILTIN_COMPLEX_DTYPE(64);
+BUILTIN_COMPLEX_DTYPE(128);
+#if NPY_BITSOF_LONGDOUBLE > NPY_BITSOF_DOUBLE
+template <> struct builtin_float_dtype< NPY_BITSOF_LONGDOUBLE > {
+ static dtype get() { return DTYPE_FROM_CODE(NPY_LONGDOUBLE); }
+};
+template dtype get_float_dtype< NPY_BITSOF_LONGDOUBLE >();
+template <> struct builtin_complex_dtype< 2 * NPY_BITSOF_LONGDOUBLE > {
+ static dtype get() { return DTYPE_FROM_CODE(NPY_CLONGDOUBLE); }
+};
+template dtype get_complex_dtype< 2 * NPY_BITSOF_LONGDOUBLE >();
+#endif
+
+} // namespace detail
+
+python::detail::new_reference dtype::convert(object const & arg, bool align)
+{
+ PyArray_Descr* obj=NULL;
+ if (align)
+ {
+ if (PyArray_DescrAlignConverter(arg.ptr(), &obj) < 0)
+ throw_error_already_set();
+ }
+ else
+ {
+ if (PyArray_DescrConverter(arg.ptr(), &obj) < 0)
+ throw_error_already_set();
+ }
+ return python::detail::new_reference(reinterpret_cast<PyObject*>(obj));
+}
+
+int dtype::get_itemsize() const { return reinterpret_cast<PyArray_Descr*>(ptr())->elsize;}
+
+bool equivalent(dtype const & a, dtype const & b) {
+ // On Windows x64, the behaviour described on
+ // http://docs.scipy.org/doc/numpy/reference/c-api.array.html for
+ // PyArray_EquivTypes unfortunately does not extend as expected:
+ // "For example, on 32-bit platforms, NPY_LONG and NPY_INT are equivalent".
+ // This should also hold for 64-bit platforms (and does on Linux), but not
+ // on Windows. Implement an alternative:
+#ifdef _MSC_VER
+ if (sizeof(long) == sizeof(int) &&
+ // Manually take care of the type equivalence.
+ ((a == dtype::get_builtin<long>() || a == dtype::get_builtin<int>()) &&
+ (b == dtype::get_builtin<long>() || b == dtype::get_builtin<int>()) ||
+ (a == dtype::get_builtin<unsigned int>() || a == dtype::get_builtin<unsigned long>()) &&
+ (b == dtype::get_builtin<unsigned int>() || b == dtype::get_builtin<unsigned long>()))) {
+ return true;
+ } else {
+ return PyArray_EquivTypes(
+ reinterpret_cast<PyArray_Descr*>(a.ptr()),
+ reinterpret_cast<PyArray_Descr*>(b.ptr())
+ );
+ }
+#else
+ return PyArray_EquivTypes(
+ reinterpret_cast<PyArray_Descr*>(a.ptr()),
+ reinterpret_cast<PyArray_Descr*>(b.ptr())
+ );
+#endif
+}
+
+namespace
+{
+
+namespace pyconv = boost::python::converter;
+
+template <typename T>
+class array_scalar_converter
+{
+public:
+
+ static PyTypeObject const * get_pytype()
+ {
+ // This implementation depends on the fact that get_builtin returns pointers to objects
+ // NumPy has declared statically, and that the typeobj member also refers to a static
+ // object. That means we don't need to do any reference counting.
+ // In fact, I'm somewhat concerned that increasing the reference count of any of these
+ // might cause leaks, because I don't think Boost.Python ever decrements it, but it's
+ // probably a moot point if everything is actually static.
+ return reinterpret_cast<PyArray_Descr*>(dtype::get_builtin<T>().ptr())->typeobj;
+ }
+
+ static void * convertible(PyObject * obj)
+ {
+ if (obj->ob_type == get_pytype())
+ {
+ return obj;
+ }
+ else
+ {
+ dtype dt(python::detail::borrowed_reference(obj->ob_type));
+ if (equivalent(dt, dtype::get_builtin<T>()))
+ {
+ return obj;
+ }
+ }
+ return 0;
+ }
+
+ static void convert(PyObject * obj, pyconv::rvalue_from_python_stage1_data* data)
+ {
+ void * storage = reinterpret_cast<pyconv::rvalue_from_python_storage<T>*>(data)->storage.bytes;
+ // We assume std::complex is a "standard layout" here and elsewhere; not guaranteed by
+ // C++03 standard, but true in every known implementation (and guaranteed by C++11).
+ PyArray_ScalarAsCtype(obj, reinterpret_cast<T*>(storage));
+ data->convertible = storage;
+ }
+
+ static void declare()
+ {
+ pyconv::registry::push_back(&convertible, &convert, python::type_id<T>()
+#ifndef BOOST_PYTHON_NO_PY_SIGNATURES
+ , &get_pytype
+#endif
+ );
+ }
+
+};
+
+} // anonymous
+
+void dtype::register_scalar_converters()
+{
+ array_scalar_converter<bool>::declare();
+ array_scalar_converter<npy_uint8>::declare();
+ array_scalar_converter<npy_int8>::declare();
+ array_scalar_converter<npy_uint16>::declare();
+ array_scalar_converter<npy_int16>::declare();
+ array_scalar_converter<npy_uint32>::declare();
+ array_scalar_converter<npy_int32>::declare();
+#ifdef _MSC_VER
+ // Since the npy_(u)int32 types are defined as long types and treated
+ // as being different from the int32 types, these converters must be declared
+ // explicitely.
+ array_scalar_converter<boost::uint32_t>::declare();
+ array_scalar_converter<boost::int32_t>::declare();
+#endif
+ array_scalar_converter<npy_uint64>::declare();
+ array_scalar_converter<npy_int64>::declare();
+ array_scalar_converter<float>::declare();
+ array_scalar_converter<double>::declare();
+ array_scalar_converter< std::complex<float> >::declare();
+ array_scalar_converter< std::complex<double> >::declare();
+#if NPY_BITSOF_LONGDOUBLE > NPY_BITSOF_DOUBLE
+ array_scalar_converter<long double>::declare();
+ array_scalar_converter< std::complex<long double> >::declare();
+#endif
+}
+
+}}} // namespace boost::python::numpy
diff --git a/contrib/restricted/boost/libs/python/src/numpy/matrix.cpp b/contrib/restricted/boost/libs/python/src/numpy/matrix.cpp
new file mode 100644
index 0000000000..47d2261637
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/src/numpy/matrix.cpp
@@ -0,0 +1,63 @@
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PYTHON_NUMPY_INTERNAL
+#include <boost/python/numpy/internal.hpp>
+#include <boost/python/numpy/matrix.hpp>
+
+namespace boost { namespace python { namespace numpy
+{
+namespace detail
+{
+inline object get_matrix_type()
+{
+ object module = import("numpy");
+ return module.attr("matrix");
+}
+} // namespace boost::python::numpy::detail
+} // namespace boost::python::numpy
+
+namespace converter
+{
+
+PyTypeObject const * object_manager_traits<numpy::matrix>::get_pytype()
+{
+ return reinterpret_cast<PyTypeObject*>(numpy::detail::get_matrix_type().ptr());
+}
+
+} // namespace boost::python::converter
+
+namespace numpy
+{
+
+object matrix::construct(object const & obj, dtype const & dt, bool copy)
+{
+ return numpy::detail::get_matrix_type()(obj, dt, copy);
+}
+
+object matrix::construct(object const & obj, bool copy)
+{
+ return numpy::detail::get_matrix_type()(obj, object(), copy);
+}
+
+matrix matrix::view(dtype const & dt) const
+{
+ return matrix(python::detail::new_reference
+ (PyObject_CallMethod(this->ptr(), const_cast<char*>("view"), const_cast<char*>("O"), dt.ptr())));
+}
+
+matrix matrix::copy() const
+{
+ return matrix(python::detail::new_reference
+ (PyObject_CallMethod(this->ptr(), const_cast<char*>("copy"), const_cast<char*>(""))));
+}
+
+matrix matrix::transpose() const
+{
+ return matrix(extract<matrix>(ndarray::transpose()));
+}
+
+}}} // namespace boost::python::numpy
diff --git a/contrib/restricted/boost/libs/python/src/numpy/ndarray.cpp b/contrib/restricted/boost/libs/python/src/numpy/ndarray.cpp
new file mode 100644
index 0000000000..af09ecc338
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/src/numpy/ndarray.cpp
@@ -0,0 +1,301 @@
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PYTHON_NUMPY_INTERNAL
+#include <boost/python/numpy/internal.hpp>
+#include <boost/scoped_array.hpp>
+
+namespace boost { namespace python {
+namespace converter
+{
+NUMPY_OBJECT_MANAGER_TRAITS_IMPL(PyArray_Type, numpy::ndarray)
+} // namespace boost::python::converter
+
+namespace numpy
+{
+namespace detail
+{
+
+ndarray::bitflag numpy_to_bitflag(int const f)
+{
+ ndarray::bitflag r = ndarray::NONE;
+ if (f & NPY_ARRAY_C_CONTIGUOUS) r = (r | ndarray::C_CONTIGUOUS);
+ if (f & NPY_ARRAY_F_CONTIGUOUS) r = (r | ndarray::F_CONTIGUOUS);
+ if (f & NPY_ARRAY_ALIGNED) r = (r | ndarray::ALIGNED);
+ if (f & NPY_ARRAY_WRITEABLE) r = (r | ndarray::WRITEABLE);
+ return r;
+}
+
+int bitflag_to_numpy(ndarray::bitflag f)
+{
+ int r = 0;
+ if (f & ndarray::C_CONTIGUOUS) r |= NPY_ARRAY_C_CONTIGUOUS;
+ if (f & ndarray::F_CONTIGUOUS) r |= NPY_ARRAY_F_CONTIGUOUS;
+ if (f & ndarray::ALIGNED) r |= NPY_ARRAY_ALIGNED;
+ if (f & ndarray::WRITEABLE) r |= NPY_ARRAY_WRITEABLE;
+ return r;
+}
+
+bool is_c_contiguous(std::vector<Py_intptr_t> const & shape,
+ std::vector<Py_intptr_t> const & strides,
+ int itemsize)
+{
+ std::vector<Py_intptr_t>::const_reverse_iterator j = strides.rbegin();
+ int total = itemsize;
+ for (std::vector<Py_intptr_t>::const_reverse_iterator i = shape.rbegin(); i != shape.rend(); ++i, ++j)
+ {
+ if (total != *j) return false;
+ total *= (*i);
+ }
+ return true;
+}
+
+bool is_f_contiguous(std::vector<Py_intptr_t> const & shape,
+ std::vector<Py_intptr_t> const & strides,
+ int itemsize)
+{
+ std::vector<Py_intptr_t>::const_iterator j = strides.begin();
+ int total = itemsize;
+ for (std::vector<Py_intptr_t>::const_iterator i = shape.begin(); i != shape.end(); ++i, ++j)
+ {
+ if (total != *j) return false;
+ total *= (*i);
+ }
+ return true;
+}
+
+bool is_aligned(std::vector<Py_intptr_t> const & strides,
+ int itemsize)
+{
+ for (std::vector<Py_intptr_t>::const_iterator i = strides.begin(); i != strides.end(); ++i)
+ {
+ if (*i % itemsize) return false;
+ }
+ return true;
+}
+
+inline PyArray_Descr * incref_dtype(dtype const & dt)
+{
+ Py_INCREF(dt.ptr());
+ return reinterpret_cast<PyArray_Descr*>(dt.ptr());
+}
+
+ndarray from_data_impl(void * data,
+ dtype const & dt,
+ python::object const & shape,
+ python::object const & strides,
+ python::object const & owner,
+ bool writeable)
+{
+ std::vector<Py_intptr_t> shape_(len(shape));
+ std::vector<Py_intptr_t> strides_(len(strides));
+ if (shape_.size() != strides_.size())
+ {
+ PyErr_SetString(PyExc_ValueError, "Length of shape and strides arrays do not match.");
+ python::throw_error_already_set();
+ }
+ for (std::size_t i = 0; i < shape_.size(); ++i)
+ {
+ shape_[i] = python::extract<Py_intptr_t>(shape[i]);
+ strides_[i] = python::extract<Py_intptr_t>(strides[i]);
+ }
+ return from_data_impl(data, dt, shape_, strides_, owner, writeable);
+}
+
+ndarray from_data_impl(void * data,
+ dtype const & dt,
+ std::vector<Py_intptr_t> const & shape,
+ std::vector<Py_intptr_t> const & strides,
+ python::object const & owner,
+ bool writeable)
+{
+ if (shape.size() != strides.size())
+ {
+ PyErr_SetString(PyExc_ValueError, "Length of shape and strides arrays do not match.");
+ python::throw_error_already_set();
+ }
+ int itemsize = dt.get_itemsize();
+ int flags = 0;
+ if (writeable) flags |= NPY_ARRAY_WRITEABLE;
+ if (is_c_contiguous(shape, strides, itemsize)) flags |= NPY_ARRAY_C_CONTIGUOUS;
+ if (is_f_contiguous(shape, strides, itemsize)) flags |= NPY_ARRAY_F_CONTIGUOUS;
+ if (is_aligned(strides, itemsize)) flags |= NPY_ARRAY_ALIGNED;
+ ndarray r(python::detail::new_reference
+ (PyArray_NewFromDescr(&PyArray_Type,
+ incref_dtype(dt),
+ shape.size(),
+ const_cast<Py_intptr_t*>(&shape.front()),
+ const_cast<Py_intptr_t*>(&strides.front()),
+ data,
+ flags,
+ NULL)));
+ r.set_base(owner);
+ return r;
+}
+
+} // namespace detail
+
+namespace {
+ int normalize_index(int n,int nlim) // wraps [-nlim:nlim) into [0:nlim), throw IndexError otherwise
+ {
+ if (n<0)
+ n += nlim; // negative indices work backwards from end
+ if (n < 0 || n >= nlim)
+ {
+ PyErr_SetObject(PyExc_IndexError, Py_None);
+ throw_error_already_set();
+ }
+ return n;
+ }
+}
+
+Py_intptr_t ndarray::shape(int n) const
+{
+ return get_shape()[normalize_index(n,get_nd())];
+}
+
+Py_intptr_t ndarray::strides(int n) const
+{
+ return get_strides()[normalize_index(n,get_nd())];
+}
+
+ndarray ndarray::view(dtype const & dt) const
+{
+ return ndarray(python::detail::new_reference
+ (PyObject_CallMethod(this->ptr(), const_cast<char*>("view"), const_cast<char*>("O"), dt.ptr())));
+}
+
+ndarray ndarray::astype(dtype const & dt) const
+{
+ return ndarray(python::detail::new_reference
+ (PyObject_CallMethod(this->ptr(), const_cast<char*>("astype"), const_cast<char*>("O"), dt.ptr())));
+}
+
+ndarray ndarray::copy() const
+{
+ return ndarray(python::detail::new_reference
+ (PyObject_CallMethod(this->ptr(), const_cast<char*>("copy"), const_cast<char*>(""))));
+}
+
+dtype ndarray::get_dtype() const
+{
+ return dtype(python::detail::borrowed_reference(get_struct()->descr));
+}
+
+python::object ndarray::get_base() const
+{
+ if (get_struct()->base == NULL) return object();
+ return python::object(python::detail::borrowed_reference(get_struct()->base));
+}
+
+void ndarray::set_base(object const & base)
+{
+ Py_XDECREF(get_struct()->base);
+ if (base.ptr())
+ {
+ Py_INCREF(base.ptr());
+ get_struct()->base = base.ptr();
+ }
+ else
+ {
+ get_struct()->base = NULL;
+ }
+}
+
+ndarray::bitflag ndarray::get_flags() const
+{
+ return numpy::detail::numpy_to_bitflag(get_struct()->flags);
+}
+
+ndarray ndarray::transpose() const
+{
+ return ndarray(python::detail::new_reference
+ (PyArray_Transpose(reinterpret_cast<PyArrayObject*>(this->ptr()), NULL)));
+}
+
+ndarray ndarray::squeeze() const
+{
+ return ndarray(python::detail::new_reference
+ (PyArray_Squeeze(reinterpret_cast<PyArrayObject*>(this->ptr()))));
+}
+
+ndarray ndarray::reshape(python::tuple const & shape) const
+{
+ return ndarray(python::detail::new_reference
+ (PyArray_Reshape(reinterpret_cast<PyArrayObject*>(this->ptr()), shape.ptr())));
+}
+
+python::object ndarray::scalarize() const
+{
+ Py_INCREF(ptr());
+ return python::object(python::detail::new_reference(PyArray_Return(reinterpret_cast<PyArrayObject*>(ptr()))));
+}
+
+ndarray zeros(python::tuple const & shape, dtype const & dt)
+{
+ int nd = len(shape);
+ boost::scoped_array<Py_intptr_t> dims(new Py_intptr_t[nd]);
+ for (int n=0; n<nd; ++n) dims[n] = python::extract<Py_intptr_t>(shape[n]);
+ return ndarray(python::detail::new_reference
+ (PyArray_Zeros(nd, dims.get(), detail::incref_dtype(dt), 0)));
+}
+
+ndarray zeros(int nd, Py_intptr_t const * shape, dtype const & dt)
+{
+ return ndarray(python::detail::new_reference
+ (PyArray_Zeros(nd, const_cast<Py_intptr_t*>(shape), detail::incref_dtype(dt), 0)));
+}
+
+ndarray empty(python::tuple const & shape, dtype const & dt)
+{
+ int nd = len(shape);
+ boost::scoped_array<Py_intptr_t> dims(new Py_intptr_t[nd]);
+ for (int n=0; n<nd; ++n) dims[n] = python::extract<Py_intptr_t>(shape[n]);
+ return ndarray(python::detail::new_reference
+ (PyArray_Empty(nd, dims.get(), detail::incref_dtype(dt), 0)));
+}
+
+ndarray empty(int nd, Py_intptr_t const * shape, dtype const & dt)
+{
+ return ndarray(python::detail::new_reference
+ (PyArray_Empty(nd, const_cast<Py_intptr_t*>(shape), detail::incref_dtype(dt), 0)));
+}
+
+ndarray array(python::object const & obj)
+{
+ return ndarray(python::detail::new_reference
+ (PyArray_FromAny(obj.ptr(), NULL, 0, 0, NPY_ARRAY_ENSUREARRAY, NULL)));
+}
+
+ndarray array(python::object const & obj, dtype const & dt)
+{
+ return ndarray(python::detail::new_reference
+ (PyArray_FromAny(obj.ptr(), detail::incref_dtype(dt), 0, 0, NPY_ARRAY_ENSUREARRAY, NULL)));
+}
+
+ndarray from_object(python::object const & obj, dtype const & dt, int nd_min, int nd_max, ndarray::bitflag flags)
+{
+ int requirements = detail::bitflag_to_numpy(flags);
+ return ndarray(python::detail::new_reference
+ (PyArray_FromAny(obj.ptr(),
+ detail::incref_dtype(dt),
+ nd_min, nd_max,
+ requirements,
+ NULL)));
+}
+
+ndarray from_object(python::object const & obj, int nd_min, int nd_max, ndarray::bitflag flags)
+{
+ int requirements = detail::bitflag_to_numpy(flags);
+ return ndarray(python::detail::new_reference
+ (PyArray_FromAny(obj.ptr(),
+ NULL,
+ nd_min, nd_max,
+ requirements,
+ NULL)));
+}
+
+}}} // namespace boost::python::numpy
diff --git a/contrib/restricted/boost/libs/python/src/numpy/numpy.cpp b/contrib/restricted/boost/libs/python/src/numpy/numpy.cpp
new file mode 100644
index 0000000000..8e259bc755
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/src/numpy/numpy.cpp
@@ -0,0 +1,33 @@
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PYTHON_NUMPY_INTERNAL_MAIN
+#include <boost/python/numpy/internal.hpp>
+#include <boost/python/numpy/dtype.hpp>
+
+namespace boost { namespace python { namespace numpy {
+
+#if PY_MAJOR_VERSION == 2
+static void wrap_import_array()
+{
+ import_array();
+}
+#else
+static void * wrap_import_array()
+{
+ import_array();
+}
+#endif
+
+void initialize(bool register_scalar_converters)
+{
+ wrap_import_array();
+ import_ufunc();
+ if (register_scalar_converters)
+ dtype::register_scalar_converters();
+}
+
+}}} // namespace boost::python::numpy
diff --git a/contrib/restricted/boost/libs/python/src/numpy/scalars.cpp b/contrib/restricted/boost/libs/python/src/numpy/scalars.cpp
new file mode 100644
index 0000000000..3947c06f2c
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/src/numpy/scalars.cpp
@@ -0,0 +1,36 @@
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PYTHON_NUMPY_INTERNAL
+#include <boost/python/numpy/internal.hpp>
+
+namespace boost { namespace python {
+namespace converter
+{
+NUMPY_OBJECT_MANAGER_TRAITS_IMPL(PyVoidArrType_Type, numpy::void_)
+} // namespace boost::python::converter
+
+namespace numpy
+{
+
+void_::void_(Py_ssize_t size)
+ : object(python::detail::new_reference
+ (PyObject_CallFunction((PyObject*)&PyVoidArrType_Type, const_cast<char*>("i"), size)))
+{}
+
+void_ void_::view(dtype const & dt) const
+{
+ return void_(python::detail::new_reference
+ (PyObject_CallMethod(this->ptr(), const_cast<char*>("view"), const_cast<char*>("O"), dt.ptr())));
+}
+
+void_ void_::copy() const
+{
+ return void_(python::detail::new_reference
+ (PyObject_CallMethod(this->ptr(), const_cast<char*>("copy"), const_cast<char*>(""))));
+}
+
+}}} // namespace boost::python::numpy
diff --git a/contrib/restricted/boost/libs/python/src/numpy/ufunc.cpp b/contrib/restricted/boost/libs/python/src/numpy/ufunc.cpp
new file mode 100644
index 0000000000..173d7213ec
--- /dev/null
+++ b/contrib/restricted/boost/libs/python/src/numpy/ufunc.cpp
@@ -0,0 +1,65 @@
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_PYTHON_NUMPY_INTERNAL
+#include <boost/python/numpy/internal.hpp>
+#include <boost/python/numpy/ufunc.hpp>
+
+namespace boost { namespace python {
+namespace converter
+{
+NUMPY_OBJECT_MANAGER_TRAITS_IMPL(PyArrayMultiIter_Type, numpy::multi_iter)
+} // namespace boost::python::converter
+
+namespace numpy
+{
+
+multi_iter make_multi_iter(object const & a1)
+{
+ return multi_iter(python::detail::new_reference(PyArray_MultiIterNew(1, a1.ptr())));
+}
+
+ multi_iter make_multi_iter(object const & a1, object const & a2)
+{
+ return multi_iter(python::detail::new_reference(PyArray_MultiIterNew(2, a1.ptr(), a2.ptr())));
+}
+
+multi_iter make_multi_iter(object const & a1, object const & a2, object const & a3)
+{
+ return multi_iter(python::detail::new_reference(PyArray_MultiIterNew(3, a1.ptr(), a2.ptr(), a3.ptr())));
+}
+
+void multi_iter::next()
+{
+ PyArray_MultiIter_NEXT(ptr());
+}
+
+bool multi_iter::not_done() const
+{
+ return PyArray_MultiIter_NOTDONE(ptr());
+}
+
+char * multi_iter::get_data(int i) const
+{
+ return reinterpret_cast<char*>(PyArray_MultiIter_DATA(ptr(), i));
+}
+
+int multi_iter::get_nd() const
+{
+ return reinterpret_cast<PyArrayMultiIterObject*>(ptr())->nd;
+}
+
+Py_intptr_t const * multi_iter::get_shape() const
+{
+ return reinterpret_cast<PyArrayMultiIterObject*>(ptr())->dimensions;
+}
+
+Py_intptr_t multi_iter::shape(int n) const
+{
+ return reinterpret_cast<PyArrayMultiIterObject*>(ptr())->dimensions[n];
+}
+
+}}} // namespace boost::python::numpy
diff --git a/contrib/restricted/boost/libs/random/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/random/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..230178a3f1
--- /dev/null
+++ b/contrib/restricted/boost/libs/random/.yandex_meta/licenses.list.txt
@@ -0,0 +1,43 @@
+====================BSL-1.0====================
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ * Copyright Jens Maurer 2000
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+ * Copyright Jens Maurer 2000-2001
+ * Copyright Steven Watanabe 2010-2011
+ * Distributed under the Boost Software License, Version 1.0. (See
+ * accompanying file LICENSE_1_0.txt or copy at
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/regex/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/regex/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..24d839b2a7
--- /dev/null
+++ b/contrib/restricted/boost/libs/regex/.yandex_meta/licenses.list.txt
@@ -0,0 +1,51 @@
+====================BSL-1.0====================
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1998-2002
+ * John Maddock
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 1998-2004 John Maddock
+ * Copyright 2011 Garmin Ltd. or its subsidiaries
+
+
+====================COPYRIGHT====================
+ * Copyright (c) 2004
+ * John Maddock
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2011 John Maddock
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/serialization/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/serialization/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..17e2899be4
--- /dev/null
+++ b/contrib/restricted/boost/libs/serialization/.yandex_meta/licenses.list.txt
@@ -0,0 +1,87 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================BSL-1.0====================
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// <gennadiy.rozental@tfn.com>
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2004 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005 Robert Ramey - http://www.rrsd.com
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2009 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// Copyright (c) 2004 Robert Ramey, Indiana University (garcia@osl.iu.edu)
+// Andrew Lumsdaine, Indiana University (lums@osl.iu.edu).
+// Use, modification and distribution is subject to the Boost Software
+
+
+====================COPYRIGHT====================
+// Copyright Vladimir Prus 2004.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/serialization/src/binary_wiarchive.cpp b/contrib/restricted/boost/libs/serialization/src/binary_wiarchive.cpp
new file mode 100644
index 0000000000..720d469d70
--- /dev/null
+++ b/contrib/restricted/boost/libs/serialization/src/binary_wiarchive.cpp
@@ -0,0 +1,47 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_wiarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/binary_wiarchive.hpp>
+#include <boost/archive/detail/archive_serializer_map.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_iprimitive.ipp>
+#include <boost/archive/impl/basic_binary_iarchive.ipp>
+
+namespace boost {
+namespace archive {
+
+// explicitly instantiate for this type of text stream
+template class detail::archive_serializer_map<binary_wiarchive>;
+template class basic_binary_iprimitive<
+ binary_wiarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+template class basic_binary_iarchive<binary_wiarchive> ;
+template class binary_iarchive_impl<
+ binary_wiarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
+
diff --git a/contrib/restricted/boost/libs/serialization/src/binary_woarchive.cpp b/contrib/restricted/boost/libs/serialization/src/binary_woarchive.cpp
new file mode 100644
index 0000000000..905a319d66
--- /dev/null
+++ b/contrib/restricted/boost/libs/serialization/src/binary_woarchive.cpp
@@ -0,0 +1,44 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// binary_woarchive.cpp:
+
+// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// See http://www.boost.org for updates, documentation, and revision history.
+
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_STD_WSTREAMBUF
+#error "wide char i/o not supported on this platform"
+#else
+
+#define BOOST_WARCHIVE_SOURCE
+#include <boost/archive/binary_woarchive.hpp>
+
+// explicitly instantiate for this type of text stream
+#include <boost/archive/impl/archive_serializer_map.ipp>
+#include <boost/archive/impl/basic_binary_oprimitive.ipp>
+#include <boost/archive/impl/basic_binary_oarchive.ipp>
+
+namespace boost {
+namespace archive {
+
+template class detail::archive_serializer_map<binary_woarchive>;
+template class basic_binary_oprimitive<
+ binary_woarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+template class basic_binary_oarchive<binary_woarchive> ;
+template class binary_oarchive_impl<
+ binary_woarchive,
+ wchar_t,
+ std::char_traits<wchar_t>
+>;
+
+} // namespace archive
+} // namespace boost
+
+#endif // BOOST_NO_STD_WSTREAMBUF
diff --git a/contrib/restricted/boost/libs/system/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/system/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..9a6126914d
--- /dev/null
+++ b/contrib/restricted/boost/libs/system/.yandex_meta/licenses.list.txt
@@ -0,0 +1,36 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2002, 2006
+// Copyright (c) Microsoft Corporation 2014
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/system/CMakeLists.txt b/contrib/restricted/boost/libs/system/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/restricted/boost/libs/system/CMakeLists.txt
+++ b/contrib/restricted/boost/libs/system/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/boost/libs/thread/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/thread/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..74a48e4c31
--- /dev/null
+++ b/contrib/restricted/boost/libs/thread/.yandex_meta/licenses.list.txt
@@ -0,0 +1,116 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+ * (C) Copyright 2013 Tim Blechmann
+ * (C) Copyright 2013 Andrey Semashev
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2005-7 Anthony Williams
+// (C) Copyright 2007 David Deakins
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007 Anthony Williams
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2018 Andrey Semashev
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007 David Deakins
+// (C) Copyright 2011-2018 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// (C) Copyright 2012 Vicente J. Botet Escriba
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+
+
+====================COPYRIGHT====================
+// (C) Copyright Aaron W. LaFramboise, Roland Schwarz, Michael Glassford 2004.
+// (C) Copyright 2007 Roland Schwarz
+// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007 David Deakins
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// (C) Copyright Michael Glassford 2004.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001-2003
+// William E. Kempf
+// (C) Copyright 2008-9 Anthony Williams
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2001-2003
+// William E. Kempf
+// Copyright (C) 2007-9 Anthony Williams
+// (C) Copyright 2011-2012 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2002-2003
+// David Moore, William E. Kempf
+// Copyright (C) 2007-8 Anthony Williams
+// (C) Copyright 2013 Vicente J. Botet Escriba
+
+
+====================COPYRIGHT====================
+// Copyright (C) 2007 Anthony Williams
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/libs/thread/CMakeLists.txt b/contrib/restricted/boost/libs/thread/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/restricted/boost/libs/thread/CMakeLists.txt
+++ b/contrib/restricted/boost/libs/thread/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/boost/libs/thread/src/tss_null.cpp b/contrib/restricted/boost/libs/thread/src/tss_null.cpp
new file mode 100644
index 0000000000..b5029f1996
--- /dev/null
+++ b/contrib/restricted/boost/libs/thread/src/tss_null.cpp
@@ -0,0 +1,38 @@
+// (C) Copyright Michael Glassford 2004.
+// (C) Copyright 2007 Anthony Williams
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/thread/detail/config.hpp>
+
+#if defined(BOOST_HAS_WINTHREADS) && (defined(BOOST_THREAD_BUILD_LIB) || defined(BOOST_THREAD_TEST) || defined(UNDER_CE)) && (!defined(_MSC_VER) || defined(UNDER_CE))
+
+namespace boost
+{
+ /*
+ This file is a "null" implementation of tss cleanup; it's
+ purpose is to to eliminate link errors in cases
+ where it is known that tss cleanup is not needed.
+ */
+
+ void tss_cleanup_implemented(void)
+ {
+ /*
+ This function's sole purpose is to cause a link error in cases where
+ automatic tss cleanup is not implemented by Boost.Threads as a
+ reminder that user code is responsible for calling the necessary
+ functions at the appropriate times (and for implementing an a
+ tss_cleanup_implemented() function to eliminate the linker's
+ missing symbol error).
+
+ If Boost.Threads later implements automatic tss cleanup in cases
+ where it currently doesn't (which is the plan), the duplicate
+ symbol error will warn the user that their custom solution is no
+ longer needed and can be removed.
+ */
+ }
+
+}
+
+#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB) && !defined(_MSC_VER)
diff --git a/contrib/restricted/boost/libs/thread/src/win32/thread.cpp b/contrib/restricted/boost/libs/thread/src/win32/thread.cpp
new file mode 100644
index 0000000000..53a4ce6a5b
--- /dev/null
+++ b/contrib/restricted/boost/libs/thread/src/win32/thread.cpp
@@ -0,0 +1,973 @@
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007 David Deakins
+// (C) Copyright 2011-2018 Vicente J. Botet Escriba
+
+//#define BOOST_THREAD_VERSION 3
+
+#include <boost/winapi/config.hpp>
+#include <boost/thread/thread_only.hpp>
+#include <boost/thread/once.hpp>
+#include <boost/thread/tss.hpp>
+#include <boost/thread/condition_variable.hpp>
+#include <boost/thread/detail/tss_hooks.hpp>
+#include <boost/thread/future.hpp>
+#include <boost/assert.hpp>
+#include <boost/cstdint.hpp>
+#if defined BOOST_THREAD_USES_DATETIME
+#include <boost/date_time/posix_time/conversion.hpp>
+#include <boost/thread/thread_time.hpp>
+#endif
+#include <boost/thread/csbl/memory/unique_ptr.hpp>
+#include <memory>
+#include <algorithm>
+#ifndef UNDER_CE
+#include <process.h>
+#endif
+#include <stdio.h>
+#include <windows.h>
+#include <boost/predef/platform.h>
+
+#if BOOST_PLAT_WINDOWS_RUNTIME
+#include <mutex>
+#include <atomic>
+#include <Activation.h>
+#include <wrl\client.h>
+#include <wrl\event.h>
+#include <wrl\wrappers\corewrappers.h>
+#include <wrl\ftm.h>
+#include <windows.system.threading.h>
+#pragma comment(lib, "runtimeobject.lib")
+#endif
+
+namespace boost
+{
+ namespace detail
+ {
+ thread_data_base::~thread_data_base()
+ {
+ for (notify_list_t::iterator i = notify.begin(), e = notify.end();
+ i != e; ++i)
+ {
+ i->second->unlock();
+ i->first->notify_all();
+ }
+ for (async_states_t::iterator i = async_states_.begin(), e = async_states_.end();
+ i != e; ++i)
+ {
+ (*i)->notify_deferred();
+ }
+ }
+ }
+
+ namespace
+ {
+#ifdef BOOST_THREAD_PROVIDES_ONCE_CXX11
+ boost::once_flag current_thread_tls_init_flag;
+#else
+ boost::once_flag current_thread_tls_init_flag=BOOST_ONCE_INIT;
+#endif
+#if defined(UNDER_CE)
+ // Windows CE does not define the TLS_OUT_OF_INDEXES constant.
+#define TLS_OUT_OF_INDEXES 0xFFFFFFFF
+#endif
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+ DWORD current_thread_tls_key=TLS_OUT_OF_INDEXES;
+#else
+ __declspec(thread) boost::detail::thread_data_base* current_thread_data_base;
+#endif
+
+ void create_current_thread_tls_key()
+ {
+ tss_cleanup_implemented(); // if anyone uses TSS, we need the cleanup linked in
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+ current_thread_tls_key=TlsAlloc();
+ BOOST_ASSERT(current_thread_tls_key!=TLS_OUT_OF_INDEXES);
+#endif
+ }
+
+ void cleanup_tls_key()
+ {
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+ if(current_thread_tls_key!=TLS_OUT_OF_INDEXES)
+ {
+ TlsFree(current_thread_tls_key);
+ current_thread_tls_key=TLS_OUT_OF_INDEXES;
+ }
+#endif
+ }
+
+ void set_current_thread_data(detail::thread_data_base* new_data)
+ {
+ boost::call_once(current_thread_tls_init_flag,create_current_thread_tls_key);
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ current_thread_data_base = new_data;
+#else
+ if (current_thread_tls_key != TLS_OUT_OF_INDEXES)
+ {
+ BOOST_VERIFY(TlsSetValue(current_thread_tls_key, new_data));
+ }
+ else
+ {
+ BOOST_VERIFY(false);
+ //boost::throw_exception(thread_resource_error());
+ }
+#endif
+ }
+ }
+
+ namespace detail
+ {
+ thread_data_base* get_current_thread_data()
+ {
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ return current_thread_data_base;
+#else
+ if (current_thread_tls_key == TLS_OUT_OF_INDEXES)
+ {
+ return 0;
+ }
+ return (detail::thread_data_base*)TlsGetValue(current_thread_tls_key);
+#endif
+ }
+ }
+
+ namespace
+ {
+#ifndef BOOST_HAS_THREADEX
+// Windows CE doesn't define _beginthreadex
+
+ struct ThreadProxyData
+ {
+ typedef unsigned (__stdcall* func)(void*);
+ func start_address_;
+ void* arglist_;
+ ThreadProxyData(func start_address,void* arglist) : start_address_(start_address), arglist_(arglist) {}
+ };
+
+ DWORD WINAPI ThreadProxy(LPVOID args)
+ {
+ boost::csbl::unique_ptr<ThreadProxyData> data(reinterpret_cast<ThreadProxyData*>(args));
+ DWORD ret=data->start_address_(data->arglist_);
+ return ret;
+ }
+
+ inline uintptr_t _beginthreadex(void* security, unsigned stack_size, unsigned (__stdcall* start_address)(void*),
+ void* arglist, unsigned initflag, unsigned* thrdaddr)
+ {
+ DWORD threadID;
+ ThreadProxyData* data = new ThreadProxyData(start_address,arglist);
+ HANDLE hthread=CreateThread(static_cast<LPSECURITY_ATTRIBUTES>(security),stack_size,ThreadProxy,
+ data,initflag,&threadID);
+ if (hthread==0) {
+ delete data;
+ return 0;
+ }
+ *thrdaddr=threadID;
+ return reinterpret_cast<uintptr_t const>(hthread);
+ }
+
+#endif
+
+ }
+
+ namespace detail
+ {
+ struct thread_exit_callback_node
+ {
+ boost::detail::thread_exit_function_base* func;
+ thread_exit_callback_node* next;
+
+ thread_exit_callback_node(boost::detail::thread_exit_function_base* func_,
+ thread_exit_callback_node* next_):
+ func(func_),next(next_)
+ {}
+ };
+
+ }
+
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ namespace detail
+ {
+ std::atomic_uint threadCount;
+
+ bool win32::scoped_winrt_thread::start(thread_func address, void *parameter, unsigned int *thrdId)
+ {
+ Microsoft::WRL::ComPtr<ABI::Windows::System::Threading::IThreadPoolStatics> threadPoolFactory;
+ HRESULT hr = ::Windows::Foundation::GetActivationFactory(
+ Microsoft::WRL::Wrappers::HStringReference(RuntimeClass_Windows_System_Threading_ThreadPool).Get(),
+ &threadPoolFactory);
+ if (hr != S_OK)
+ {
+ return false;
+ }
+
+ // Create event for tracking work item completion.
+ *thrdId = ++threadCount;
+ handle completionHandle = CreateEventExW(NULL, NULL, 0, EVENT_ALL_ACCESS);
+ if (!completionHandle)
+ {
+ return false;
+ }
+ m_completionHandle = completionHandle;
+
+ // Create new work item.
+ Microsoft::WRL::ComPtr<ABI::Windows::System::Threading::IWorkItemHandler> workItem =
+ Microsoft::WRL::Callback<Microsoft::WRL::Implements<Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, ABI::Windows::System::Threading::IWorkItemHandler, Microsoft::WRL::FtmBase>>
+ ([address, parameter, completionHandle](ABI::Windows::Foundation::IAsyncAction *)
+ {
+ // Add a reference since we need to access the completionHandle after the thread_start_function.
+ // This is to handle cases where detach() was called and run_thread_exit_callbacks() would end
+ // up closing the handle.
+ ::boost::detail::thread_data_base* const thread_info(reinterpret_cast<::boost::detail::thread_data_base*>(parameter));
+ intrusive_ptr_add_ref(thread_info);
+
+ __try
+ {
+ address(parameter);
+ }
+ __finally
+ {
+ SetEvent(completionHandle);
+ intrusive_ptr_release(thread_info);
+ }
+ return S_OK;
+ });
+
+ // Schedule work item on the threadpool.
+ Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncAction> asyncAction;
+ hr = threadPoolFactory->RunWithPriorityAndOptionsAsync(
+ workItem.Get(),
+ ABI::Windows::System::Threading::WorkItemPriority_Normal,
+ ABI::Windows::System::Threading::WorkItemOptions_TimeSliced,
+ &asyncAction);
+ return hr == S_OK;
+ }
+ }
+#endif
+
+ namespace
+ {
+ void run_thread_exit_callbacks()
+ {
+ detail::thread_data_ptr current_thread_data(detail::get_current_thread_data(),false);
+ if(current_thread_data)
+ {
+ while(! current_thread_data->tss_data.empty() || current_thread_data->thread_exit_callbacks)
+ {
+ while(current_thread_data->thread_exit_callbacks)
+ {
+ detail::thread_exit_callback_node* const current_node=current_thread_data->thread_exit_callbacks;
+ current_thread_data->thread_exit_callbacks=current_node->next;
+ if(current_node->func)
+ {
+ (*current_node->func)();
+ boost::detail::heap_delete(current_node->func);
+ }
+ boost::detail::heap_delete(current_node);
+ }
+ while (!current_thread_data->tss_data.empty())
+ {
+ std::map<void const*,detail::tss_data_node>::iterator current
+ = current_thread_data->tss_data.begin();
+ if(current->second.func && (current->second.value!=0))
+ {
+ (*current->second.func)(current->second.value);
+ }
+ current_thread_data->tss_data.erase(current);
+ }
+ }
+ set_current_thread_data(0);
+ }
+ }
+
+ unsigned __stdcall thread_start_function(void* param)
+ {
+ detail::thread_data_base* const thread_info(reinterpret_cast<detail::thread_data_base*>(param));
+ set_current_thread_data(thread_info);
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ BOOST_TRY
+ {
+#endif
+ thread_info->run();
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ }
+ BOOST_CATCH(thread_interrupted const&)
+ {
+ }
+ // Unhandled exceptions still cause the application to terminate
+ BOOST_CATCH_END
+#endif
+ run_thread_exit_callbacks();
+ return 0;
+ }
+ }
+
+ thread::thread() BOOST_NOEXCEPT
+ {}
+
+ bool thread::start_thread_noexcept()
+ {
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ intrusive_ptr_add_ref(thread_info.get());
+ if (!thread_info->thread_handle.start(&thread_start_function, thread_info.get(), &thread_info->id))
+ {
+ intrusive_ptr_release(thread_info.get());
+ return false;
+ }
+ return true;
+#else
+ uintptr_t const new_thread=_beginthreadex(0,0,&thread_start_function,thread_info.get(),CREATE_SUSPENDED,&thread_info->id);
+ if(!new_thread)
+ {
+ return false;
+ }
+ intrusive_ptr_add_ref(thread_info.get());
+ thread_info->thread_handle=(detail::win32::handle)(new_thread);
+ ResumeThread(thread_info->thread_handle);
+ return true;
+#endif
+ }
+
+ bool thread::start_thread_noexcept(const attributes& attr)
+ {
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ // Stack size isn't supported with Windows Runtime.
+ attr;
+ return start_thread_noexcept();
+#else
+ uintptr_t const new_thread=_beginthreadex(0,static_cast<unsigned int>(attr.get_stack_size()),&thread_start_function,thread_info.get(),
+ CREATE_SUSPENDED | STACK_SIZE_PARAM_IS_A_RESERVATION, &thread_info->id);
+ if(!new_thread)
+ {
+ return false;
+ }
+ intrusive_ptr_add_ref(thread_info.get());
+ thread_info->thread_handle=(detail::win32::handle)(new_thread);
+ ResumeThread(thread_info->thread_handle);
+ return true;
+#endif
+ }
+
+ thread::thread(detail::thread_data_ptr data):
+ thread_info(data)
+ {}
+
+ namespace
+ {
+ struct externally_launched_thread:
+ detail::thread_data_base
+ {
+ externally_launched_thread()
+ {
+ ++count;
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ interruption_enabled=false;
+#endif
+ }
+ ~externally_launched_thread() {
+ BOOST_ASSERT(notify.empty());
+ notify.clear();
+ BOOST_ASSERT(async_states_.empty());
+ async_states_.clear();
+ }
+
+ void run()
+ {}
+ void notify_all_at_thread_exit(condition_variable*, mutex*)
+ {}
+
+ private:
+ externally_launched_thread(externally_launched_thread&);
+ void operator=(externally_launched_thread&);
+ };
+
+ void make_external_thread_data()
+ {
+ externally_launched_thread* me=detail::heap_new<externally_launched_thread>();
+ BOOST_TRY
+ {
+ set_current_thread_data(me);
+ }
+ BOOST_CATCH(...)
+ {
+ detail::heap_delete(me);
+ BOOST_RETHROW
+ }
+ BOOST_CATCH_END
+ }
+
+ detail::thread_data_base* get_or_make_current_thread_data()
+ {
+ detail::thread_data_base* current_thread_data(detail::get_current_thread_data());
+ if(!current_thread_data)
+ {
+ make_external_thread_data();
+ current_thread_data=detail::get_current_thread_data();
+ }
+ return current_thread_data;
+ }
+ }
+
+ thread::id thread::get_id() const BOOST_NOEXCEPT
+ {
+#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
+ detail::thread_data_ptr local_thread_info=(get_thread_info)();
+ if(!local_thread_info)
+ {
+ return 0;
+ }
+ return local_thread_info->id;
+#else
+ return thread::id((get_thread_info)());
+#endif
+ }
+
+ bool thread::joinable() const BOOST_NOEXCEPT
+ {
+ detail::thread_data_ptr local_thread_info = (get_thread_info)();
+ if(!local_thread_info)
+ {
+ return false;
+ }
+ return true;
+ }
+ bool thread::join_noexcept()
+ {
+ detail::thread_data_ptr local_thread_info=(get_thread_info)();
+ if(local_thread_info)
+ {
+ this_thread::interruptible_wait(this->native_handle(), detail::internal_platform_timepoint::getMax());
+ release_handle();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ bool thread::do_try_join_until_noexcept(detail::internal_platform_timepoint const &timeout, bool& res)
+ {
+ detail::thread_data_ptr local_thread_info=(get_thread_info)();
+ if(local_thread_info)
+ {
+ if(!this_thread::interruptible_wait(this->native_handle(), timeout))
+ {
+ res=false;
+ return true;
+ }
+ release_handle();
+ res=true;
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ void thread::detach()
+ {
+ release_handle();
+ }
+
+ void thread::release_handle()
+ {
+ thread_info=0;
+ }
+
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ void thread::interrupt()
+ {
+ detail::thread_data_ptr local_thread_info=(get_thread_info)();
+ if(local_thread_info)
+ {
+ local_thread_info->interrupt();
+ }
+ }
+
+ bool thread::interruption_requested() const BOOST_NOEXCEPT
+ {
+ detail::thread_data_ptr local_thread_info=(get_thread_info)();
+ return local_thread_info.get() && (winapi::WaitForSingleObjectEx(local_thread_info->interruption_handle,0,0)==0);
+ }
+
+#endif
+
+ unsigned thread::hardware_concurrency() BOOST_NOEXCEPT
+ {
+ detail::win32::system_info info;
+ detail::win32::get_system_info(&info);
+ return info.dwNumberOfProcessors;
+ }
+
+ unsigned thread::physical_concurrency() BOOST_NOEXCEPT
+ {
+ // a bit too strict: Windows XP with SP3 would be sufficient
+#if BOOST_PLAT_WINDOWS_RUNTIME \
+ || ( BOOST_USE_WINAPI_VERSION <= BOOST_WINAPI_VERSION_WINXP ) \
+ || ( ( defined(__MINGW32__) && !defined(__MINGW64__) ) && _WIN32_WINNT < 0x0600)
+ return 0;
+#else
+ unsigned cores = 0;
+ DWORD size = 0;
+
+ GetLogicalProcessorInformation(NULL, &size);
+ if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
+ return 0;
+
+ std::vector<SYSTEM_LOGICAL_PROCESSOR_INFORMATION> buffer(size);
+ if (GetLogicalProcessorInformation(&buffer.front(), &size) == FALSE)
+ return 0;
+
+ const size_t Elements = size / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
+
+ for (size_t i = 0; i < Elements; ++i) {
+ if (buffer[i].Relationship == RelationProcessorCore)
+ ++cores;
+ }
+ return cores;
+#endif
+ }
+
+ thread::native_handle_type thread::native_handle()
+ {
+ detail::thread_data_ptr local_thread_info=(get_thread_info)();
+ if(!local_thread_info)
+ {
+ return detail::win32::invalid_handle_value;
+ }
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ // There is no 'real' Win32 handle so we return a handle that at least can be waited on.
+ return local_thread_info->thread_handle.waitable_handle();
+#else
+ return (detail::win32::handle)local_thread_info->thread_handle;
+#endif
+ }
+
+ detail::thread_data_ptr thread::get_thread_info BOOST_PREVENT_MACRO_SUBSTITUTION () const
+ {
+ return thread_info;
+ }
+
+ namespace this_thread
+ {
+#ifndef UNDER_CE
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+ namespace detail_
+ {
+ typedef struct _REASON_CONTEXT {
+ ULONG Version;
+ DWORD Flags;
+ union {
+ LPWSTR SimpleReasonString;
+ struct {
+ HMODULE LocalizedReasonModule;
+ ULONG LocalizedReasonId;
+ ULONG ReasonStringCount;
+ LPWSTR *ReasonStrings;
+ } Detailed;
+ } Reason;
+ } REASON_CONTEXT, *PREASON_CONTEXT;
+ typedef BOOL (WINAPI *setwaitabletimerex_t)(HANDLE, const LARGE_INTEGER *, LONG, PTIMERAPCROUTINE, LPVOID, PREASON_CONTEXT, ULONG);
+ static inline BOOL WINAPI SetWaitableTimerEx_emulation(HANDLE hTimer, const LARGE_INTEGER *lpDueTime, LONG lPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, PREASON_CONTEXT WakeContext, ULONG TolerableDelay)
+ {
+ return SetWaitableTimer(hTimer, lpDueTime, lPeriod, pfnCompletionRoutine, lpArgToCompletionRoutine, FALSE);
+ }
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 6387) // MSVC sanitiser warns that GetModuleHandleA() might fail
+#endif
+ static inline setwaitabletimerex_t SetWaitableTimerEx()
+ {
+ static setwaitabletimerex_t setwaitabletimerex_impl;
+ if(setwaitabletimerex_impl)
+ return setwaitabletimerex_impl;
+ void (*addr)()=(void (*)()) GetProcAddress(
+#if !defined(BOOST_NO_ANSI_APIS)
+ GetModuleHandleA("KERNEL32.DLL"),
+#else
+ GetModuleHandleW(L"KERNEL32.DLL"),
+#endif
+ "SetWaitableTimerEx");
+ if(addr)
+ setwaitabletimerex_impl=(setwaitabletimerex_t) addr;
+ else
+ setwaitabletimerex_impl=&SetWaitableTimerEx_emulation;
+ return setwaitabletimerex_impl;
+ }
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+ }
+#endif
+#endif
+ bool interruptible_wait(detail::win32::handle handle_to_wait_for, detail::internal_platform_timepoint const &timeout)
+ {
+ detail::win32::handle handles[4]={0};
+ unsigned handle_count=0;
+ unsigned wait_handle_index=~0U;
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ unsigned interruption_index=~0U;
+#endif
+ unsigned timeout_index=~0U;
+ if(handle_to_wait_for!=detail::win32::invalid_handle_value)
+ {
+ wait_handle_index=handle_count;
+ handles[handle_count++]=handle_to_wait_for;
+ }
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ if(detail::get_current_thread_data() && detail::get_current_thread_data()->interruption_enabled)
+ {
+ interruption_index=handle_count;
+ handles[handle_count++]=detail::get_current_thread_data()->interruption_handle;
+ }
+#endif
+ detail::win32::handle_manager timer_handle;
+
+#ifndef UNDER_CE
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+ // Preferentially use coalescing timers for better power consumption and timer accuracy
+ if(timeout != detail::internal_platform_timepoint::getMax())
+ {
+ boost::intmax_t const time_left_msec = (timeout - detail::internal_platform_clock::now()).getMs();
+ timer_handle=CreateWaitableTimer(NULL,false,NULL);
+ if(timer_handle!=0)
+ {
+ ULONG tolerable=32; // Empirical testing shows Windows ignores this when <= 26
+ if(time_left_msec/20>tolerable) // 5%
+ tolerable=static_cast<ULONG>(time_left_msec/20);
+ LARGE_INTEGER due_time={{0,0}};
+ if(time_left_msec>0)
+ {
+ due_time.QuadPart=-(time_left_msec*10000); // negative indicates relative time
+ }
+ bool const set_time_succeeded=detail_::SetWaitableTimerEx()(timer_handle,&due_time,0,0,0,NULL,tolerable)!=0;
+ if(set_time_succeeded)
+ {
+ timeout_index=handle_count;
+ handles[handle_count++]=timer_handle;
+ }
+ }
+ }
+#endif
+#endif
+
+ bool const using_timer=timeout_index!=~0u;
+ boost::intmax_t time_left_msec(INFINITE);
+ if(!using_timer && timeout != detail::internal_platform_timepoint::getMax())
+ {
+ time_left_msec = (timeout - detail::internal_platform_clock::now()).getMs();
+ if(time_left_msec < 0)
+ {
+ time_left_msec = 0;
+ }
+ }
+
+ do
+ {
+ if(handle_count)
+ {
+ unsigned long const notified_index=winapi::WaitForMultipleObjectsEx(handle_count,handles,false,static_cast<DWORD>(time_left_msec), 0);
+ if(notified_index<handle_count)
+ {
+ if(notified_index==wait_handle_index)
+ {
+ return true;
+ }
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ else if(notified_index==interruption_index)
+ {
+ winapi::ResetEvent(detail::get_current_thread_data()->interruption_handle);
+ throw thread_interrupted();
+ }
+#endif
+ else if(notified_index==timeout_index)
+ {
+ return false;
+ }
+ }
+ }
+ else
+ {
+ detail::win32::sleep(static_cast<unsigned long>(time_left_msec));
+ }
+
+ if(!using_timer && timeout != detail::internal_platform_timepoint::getMax())
+ {
+ time_left_msec = (timeout - detail::internal_platform_clock::now()).getMs();
+ }
+ }
+ while(time_left_msec == INFINITE || time_left_msec > 0);
+ return false;
+ }
+
+ namespace no_interruption_point
+ {
+ bool non_interruptible_wait(detail::win32::handle handle_to_wait_for, detail::internal_platform_timepoint const &timeout)
+ {
+ detail::win32::handle handles[3]={0};
+ unsigned handle_count=0;
+ unsigned wait_handle_index=~0U;
+ unsigned timeout_index=~0U;
+ if(handle_to_wait_for!=detail::win32::invalid_handle_value)
+ {
+ wait_handle_index=handle_count;
+ handles[handle_count++]=handle_to_wait_for;
+ }
+ detail::win32::handle_manager timer_handle;
+
+#ifndef UNDER_CE
+#if !BOOST_PLAT_WINDOWS_RUNTIME
+ // Preferentially use coalescing timers for better power consumption and timer accuracy
+ if(timeout != detail::internal_platform_timepoint::getMax())
+ {
+ boost::intmax_t const time_left_msec = (timeout - detail::internal_platform_clock::now()).getMs();
+ timer_handle=CreateWaitableTimer(NULL,false,NULL);
+ if(timer_handle!=0)
+ {
+ ULONG tolerable=32; // Empirical testing shows Windows ignores this when <= 26
+ if(time_left_msec/20>tolerable) // 5%
+ tolerable=static_cast<ULONG>(time_left_msec/20);
+ LARGE_INTEGER due_time={{0,0}};
+ if(time_left_msec>0)
+ {
+ due_time.QuadPart=-(time_left_msec*10000); // negative indicates relative time
+ }
+ bool const set_time_succeeded=detail_::SetWaitableTimerEx()(timer_handle,&due_time,0,0,0,NULL,tolerable)!=0;
+ if(set_time_succeeded)
+ {
+ timeout_index=handle_count;
+ handles[handle_count++]=timer_handle;
+ }
+ }
+ }
+#endif
+#endif
+
+ bool const using_timer=timeout_index!=~0u;
+ boost::intmax_t time_left_msec(INFINITE);
+ if(!using_timer && timeout != detail::internal_platform_timepoint::getMax())
+ {
+ time_left_msec = (timeout - detail::internal_platform_clock::now()).getMs();
+ if(time_left_msec < 0)
+ {
+ time_left_msec = 0;
+ }
+ }
+
+ do
+ {
+ if(handle_count)
+ {
+ unsigned long const notified_index=winapi::WaitForMultipleObjectsEx(handle_count,handles,false,static_cast<DWORD>(time_left_msec), 0);
+ if(notified_index<handle_count)
+ {
+ if(notified_index==wait_handle_index)
+ {
+ return true;
+ }
+ else if(notified_index==timeout_index)
+ {
+ return false;
+ }
+ }
+ }
+ else
+ {
+ detail::win32::sleep(static_cast<unsigned long>(time_left_msec));
+ }
+
+ if(!using_timer && timeout != detail::internal_platform_timepoint::getMax())
+ {
+ time_left_msec = (timeout - detail::internal_platform_clock::now()).getMs();
+ }
+ }
+ while(time_left_msec == INFINITE || time_left_msec > 0);
+ return false;
+ }
+ }
+
+ thread::id get_id() BOOST_NOEXCEPT
+ {
+#if defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
+#if BOOST_PLAT_WINDOWS_RUNTIME
+ detail::thread_data_base* current_thread_data(detail::get_current_thread_data());
+ if (current_thread_data)
+ {
+ return current_thread_data->id;
+ }
+#endif
+ return winapi::GetCurrentThreadId();
+#else
+ return thread::id(get_or_make_current_thread_data());
+#endif
+ }
+
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ void interruption_point()
+ {
+ if(interruption_enabled() && interruption_requested())
+ {
+ winapi::ResetEvent(detail::get_current_thread_data()->interruption_handle);
+ throw thread_interrupted();
+ }
+ }
+
+ bool interruption_enabled() BOOST_NOEXCEPT
+ {
+ return detail::get_current_thread_data() && detail::get_current_thread_data()->interruption_enabled;
+ }
+
+ bool interruption_requested() BOOST_NOEXCEPT
+ {
+ return detail::get_current_thread_data() && (winapi::WaitForSingleObjectEx(detail::get_current_thread_data()->interruption_handle,0,0)==0);
+ }
+#endif
+
+ void yield() BOOST_NOEXCEPT
+ {
+ detail::win32::sleep(0);
+ }
+
+#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
+ disable_interruption::disable_interruption() BOOST_NOEXCEPT:
+ interruption_was_enabled(interruption_enabled())
+ {
+ if(interruption_was_enabled)
+ {
+ detail::get_current_thread_data()->interruption_enabled=false;
+ }
+ }
+
+ disable_interruption::~disable_interruption() BOOST_NOEXCEPT
+ {
+ if(detail::get_current_thread_data())
+ {
+ detail::get_current_thread_data()->interruption_enabled=interruption_was_enabled;
+ }
+ }
+
+ restore_interruption::restore_interruption(disable_interruption& d) BOOST_NOEXCEPT
+ {
+ if(d.interruption_was_enabled)
+ {
+ detail::get_current_thread_data()->interruption_enabled=true;
+ }
+ }
+
+ restore_interruption::~restore_interruption() BOOST_NOEXCEPT
+ {
+ if(detail::get_current_thread_data())
+ {
+ detail::get_current_thread_data()->interruption_enabled=false;
+ }
+ }
+#endif
+ }
+
+ namespace detail
+ {
+ void add_thread_exit_function(thread_exit_function_base* func)
+ {
+ detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data());
+ thread_exit_callback_node* const new_node=
+ heap_new<thread_exit_callback_node>(
+ func,current_thread_data->thread_exit_callbacks);
+ current_thread_data->thread_exit_callbacks=new_node;
+ }
+
+ tss_data_node* find_tss_data(void const* key)
+ {
+ detail::thread_data_base* const current_thread_data(get_current_thread_data());
+ if(current_thread_data)
+ {
+ std::map<void const*,tss_data_node>::iterator current_node=
+ current_thread_data->tss_data.find(key);
+ if(current_node!=current_thread_data->tss_data.end())
+ {
+ return &current_node->second;
+ }
+ }
+ return NULL;
+ }
+
+ void* get_tss_data(void const* key)
+ {
+ if(tss_data_node* const current_node=find_tss_data(key))
+ {
+ return current_node->value;
+ }
+ return NULL;
+ }
+
+ void add_new_tss_node(void const* key,
+ boost::shared_ptr<tss_cleanup_function> func,
+ void* tss_data)
+ {
+ detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data());
+ current_thread_data->tss_data.insert(std::make_pair(key,tss_data_node(func,tss_data)));
+ }
+
+ void erase_tss_node(void const* key)
+ {
+ detail::thread_data_base* const current_thread_data(get_or_make_current_thread_data());
+ current_thread_data->tss_data.erase(key);
+ }
+
+ void set_tss_data(void const* key,
+ boost::shared_ptr<tss_cleanup_function> func,
+ void* tss_data,bool cleanup_existing)
+ {
+ if(tss_data_node* const current_node=find_tss_data(key))
+ {
+ if(cleanup_existing && current_node->func && (current_node->value!=0))
+ {
+ (*current_node->func)(current_node->value);
+ }
+ if(func || (tss_data!=0))
+ {
+ current_node->func=func;
+ current_node->value=tss_data;
+ }
+ else
+ {
+ erase_tss_node(key);
+ }
+ }
+ else if(func || (tss_data!=0))
+ {
+ add_new_tss_node(key,func,tss_data);
+ }
+ }
+ }
+
+ BOOST_THREAD_DECL void __cdecl on_process_enter()
+ {}
+
+ BOOST_THREAD_DECL void __cdecl on_thread_enter()
+ {}
+
+ BOOST_THREAD_DECL void __cdecl on_process_exit()
+ {
+ boost::cleanup_tls_key();
+ }
+
+ BOOST_THREAD_DECL void __cdecl on_thread_exit()
+ {
+ boost::run_thread_exit_callbacks();
+ }
+
+ BOOST_THREAD_DECL void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk)
+ {
+ detail::thread_data_base* const current_thread_data(detail::get_current_thread_data());
+ if(current_thread_data)
+ {
+ current_thread_data->notify_all_at_thread_exit(&cond, lk.release());
+ }
+ }
+}
+
diff --git a/contrib/restricted/boost/libs/thread/src/win32/thread_primitives.cpp b/contrib/restricted/boost/libs/thread/src/win32/thread_primitives.cpp
new file mode 100644
index 0000000000..f51f621508
--- /dev/null
+++ b/contrib/restricted/boost/libs/thread/src/win32/thread_primitives.cpp
@@ -0,0 +1,140 @@
+// thread_primitives.cpp
+//
+// (C) Copyright 2018 Andrey Semashev
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/winapi/config.hpp>
+#include <boost/winapi/dll.hpp>
+#include <boost/winapi/time.hpp>
+#include <boost/winapi/event.hpp>
+#include <boost/winapi/handles.hpp>
+#include <boost/winapi/thread_pool.hpp>
+#include <cstdlib>
+#include <boost/config.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/memory_order.hpp>
+#include <boost/atomic/atomic.hpp>
+#include <boost/thread/win32/interlocked_read.hpp>
+#include <boost/thread/win32/thread_primitives.hpp>
+
+namespace boost {
+namespace detail {
+namespace win32 {
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+
+// Directly use API from Vista and later
+BOOST_THREAD_DECL boost::detail::win32::detail::gettickcount64_t gettickcount64 = &::boost::winapi::GetTickCount64;
+
+#else // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+
+namespace {
+
+enum init_state
+{
+ uninitialized = 0,
+ in_progress,
+ initialized
+};
+
+struct get_tick_count64_state
+{
+ boost::atomic< uint64_t > ticks;
+ boost::atomic< init_state > init;
+ boost::winapi::HANDLE_ wait_event;
+ boost::winapi::HANDLE_ wait_handle;
+};
+
+// Zero-initialized initially
+BOOST_ALIGNMENT(64) static get_tick_count64_state g_state;
+
+//! Artifical implementation of GetTickCount64
+ticks_type WINAPI get_tick_count64()
+{
+ uint64_t old_state = g_state.ticks.load(boost::memory_order_acquire);
+
+ uint32_t new_ticks = boost::winapi::GetTickCount();
+
+ uint32_t old_ticks = static_cast< uint32_t >(old_state & UINT64_C(0x00000000ffffffff));
+ uint64_t new_state = ((old_state & UINT64_C(0xffffffff00000000)) + (static_cast< uint64_t >(new_ticks < old_ticks) << 32)) | static_cast< uint64_t >(new_ticks);
+
+ g_state.ticks.store(new_state, boost::memory_order_release);
+
+ return new_state;
+}
+
+//! The function is called periodically in the system thread pool to make sure g_state.ticks is timely updated
+void NTAPI refresh_get_tick_count64(boost::winapi::PVOID_, boost::winapi::BOOLEAN_)
+{
+ get_tick_count64();
+}
+
+//! Cleanup function to stop get_tick_count64 refreshes
+void cleanup_get_tick_count64()
+{
+ if (g_state.wait_handle)
+ {
+ boost::winapi::UnregisterWait(g_state.wait_handle);
+ g_state.wait_handle = NULL;
+ }
+
+ if (g_state.wait_event)
+ {
+ boost::winapi::CloseHandle(g_state.wait_event);
+ g_state.wait_event = NULL;
+ }
+}
+
+ticks_type WINAPI get_tick_count_init()
+{
+ boost::winapi::HMODULE_ hKernel32 = boost::winapi::GetModuleHandleW(L"kernel32.dll");
+ if (hKernel32)
+ {
+ boost::detail::win32::detail::gettickcount64_t p =
+ (boost::detail::win32::detail::gettickcount64_t)boost::winapi::get_proc_address(hKernel32, "GetTickCount64");
+ if (p)
+ {
+ // Use native API
+ boost::detail::interlocked_write_release((void**)&gettickcount64, (void*)p);
+ return p();
+ }
+ }
+
+ // No native API available. Use emulation with periodic refreshes to make sure the GetTickCount wrap arounds are properly counted.
+ init_state old_init = uninitialized;
+ if (g_state.init.compare_exchange_strong(old_init, in_progress, boost::memory_order_acq_rel, boost::memory_order_relaxed))
+ {
+ if (!g_state.wait_event)
+ g_state.wait_event = boost::winapi::create_anonymous_event(NULL, false, false);
+ if (g_state.wait_event)
+ {
+ boost::winapi::BOOL_ res = boost::winapi::RegisterWaitForSingleObject(&g_state.wait_handle, g_state.wait_event, &refresh_get_tick_count64, NULL, 0x7fffffff, boost::winapi::WT_EXECUTEINWAITTHREAD_);
+ if (res)
+ {
+ std::atexit(&cleanup_get_tick_count64);
+
+ boost::detail::interlocked_write_release((void**)&gettickcount64, (void*)&get_tick_count64);
+ g_state.init.store(initialized, boost::memory_order_release);
+ goto finish;
+ }
+ }
+
+ g_state.init.store(uninitialized, boost::memory_order_release);
+ }
+
+finish:
+ return get_tick_count64();
+}
+
+} // namespace
+
+BOOST_THREAD_DECL boost::detail::win32::detail::gettickcount64_t gettickcount64 = &get_tick_count_init;
+
+#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+
+} // namespace win32
+} // namespace detail
+} // namespace boost
diff --git a/contrib/restricted/boost/libs/thread/src/win32/tss_dll.cpp b/contrib/restricted/boost/libs/thread/src/win32/tss_dll.cpp
new file mode 100644
index 0000000000..75ea93a5aa
--- /dev/null
+++ b/contrib/restricted/boost/libs/thread/src/win32/tss_dll.cpp
@@ -0,0 +1,85 @@
+// (C) Copyright Michael Glassford 2004.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/winapi/config.hpp>
+#include <boost/thread/detail/config.hpp>
+
+
+#if defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_DLL)
+
+ #include <boost/thread/detail/tss_hooks.hpp>
+
+ #include <windows.h>
+
+ #if defined(__BORLANDC__)
+ extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
+ #elif defined(_WIN32_WCE)
+ extern "C" BOOL WINAPI DllMain(HANDLE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
+ #else
+ extern "C" BOOL WINAPI DllMain(HINSTANCE /*hInstance*/, DWORD dwReason, LPVOID /*lpReserved*/)
+ #endif
+ {
+ switch(dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ {
+ boost::on_process_enter();
+ boost::on_thread_enter();
+ break;
+ }
+
+ case DLL_THREAD_ATTACH:
+ {
+ boost::on_thread_enter();
+ break;
+ }
+
+ case DLL_THREAD_DETACH:
+ {
+ boost::on_thread_exit();
+ break;
+ }
+
+ case DLL_PROCESS_DETACH:
+ {
+ boost::on_thread_exit();
+ boost::on_process_exit();
+ break;
+ }
+ }
+
+ return TRUE;
+ }
+
+namespace boost
+{
+ void tss_cleanup_implemented()
+ {
+ /*
+ This function's sole purpose is to cause a link error in cases where
+ automatic tss cleanup is not implemented by Boost.Threads as a
+ reminder that user code is responsible for calling the necessary
+ functions at the appropriate times (and for implementing an a
+ tss_cleanup_implemented() function to eliminate the linker's
+ missing symbol error).
+
+ If Boost.Threads later implements automatic tss cleanup in cases
+ where it currently doesn't (which is the plan), the duplicate
+ symbol error will warn the user that their custom solution is no
+ longer needed and can be removed.
+ */
+ }
+}
+
+#else //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_DLL)
+
+#ifdef _MSC_VER
+// Prevent LNK4221 warning with link=static
+namespace boost { namespace link_static_warning_inhibit {
+ extern __declspec(dllexport) void foo() { }
+} }
+#endif
+
+#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_DLL)
diff --git a/contrib/restricted/boost/libs/thread/src/win32/tss_pe.cpp b/contrib/restricted/boost/libs/thread/src/win32/tss_pe.cpp
new file mode 100644
index 0000000000..e4a0a3aaa3
--- /dev/null
+++ b/contrib/restricted/boost/libs/thread/src/win32/tss_pe.cpp
@@ -0,0 +1,337 @@
+// $Id$
+// (C) Copyright Aaron W. LaFramboise, Roland Schwarz, Michael Glassford 2004.
+// (C) Copyright 2007 Roland Schwarz
+// (C) Copyright 2007 Anthony Williams
+// (C) Copyright 2007 David Deakins
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/winapi/config.hpp>
+#include <boost/thread/detail/config.hpp>
+
+#if defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB)
+
+#if (defined(__MINGW32__) && !defined(_WIN64)) || defined(__MINGW64__) || (__MINGW64_VERSION_MAJOR)
+
+#include <boost/thread/detail/tss_hooks.hpp>
+
+#include <windows.h>
+
+#include <cstdlib>
+
+namespace boost
+{
+ void tss_cleanup_implemented() {}
+}
+
+namespace {
+ void NTAPI on_tls_callback(void* , DWORD dwReason, PVOID )
+ {
+ switch (dwReason)
+ {
+ case DLL_THREAD_DETACH:
+ {
+ boost::on_thread_exit();
+ break;
+ }
+ }
+ }
+}
+
+#if defined(__MINGW64__) || (__MINGW64_VERSION_MAJOR) || (__MINGW32__) || (__MINGW32_MAJOR_VERSION >3) || \
+ ((__MINGW32_MAJOR_VERSION==3) && (__MINGW32_MINOR_VERSION>=18))
+extern "C"
+{
+ PIMAGE_TLS_CALLBACK __crt_xl_tls_callback__ __attribute__ ((section(".CRT$XLB"))) = on_tls_callback;
+}
+#else
+extern "C" {
+
+ void (* after_ctors )() __attribute__((section(".ctors"))) = boost::on_process_enter;
+ void (* before_dtors)() __attribute__((section(".dtors"))) = boost::on_thread_exit;
+ void (* after_dtors )() __attribute__((section(".dtors.zzz"))) = boost::on_process_exit;
+
+ ULONG __tls_index__ = 0;
+ char __tls_end__ __attribute__((section(".tls$zzz"))) = 0;
+ char __tls_start__ __attribute__((section(".tls"))) = 0;
+
+
+ PIMAGE_TLS_CALLBACK __crt_xl_start__ __attribute__ ((section(".CRT$XLA"))) = 0;
+ PIMAGE_TLS_CALLBACK __crt_xl_end__ __attribute__ ((section(".CRT$XLZ"))) = 0;
+}
+extern "C" const IMAGE_TLS_DIRECTORY32 _tls_used __attribute__ ((section(".rdata$T"))) =
+{
+ (DWORD) &__tls_start__,
+ (DWORD) &__tls_end__,
+ (DWORD) &__tls_index__,
+ (DWORD) (&__crt_xl_start__+1),
+ (DWORD) 0,
+ (DWORD) 0
+};
+#endif
+
+
+#elif defined(_MSC_VER) && !defined(UNDER_CE)
+
+ #include <boost/thread/detail/tss_hooks.hpp>
+
+ #include <stdlib.h>
+
+ #include <windows.h>
+
+
+// _pRawDllMainOrig can be defined by including boost/thread/win32/mfc_thread_init.hpp
+// into your dll; it ensures that MFC-Dll-initialization will be done properly
+// The following code is adapted from the MFC-Dll-init code
+/*
+ * _pRawDllMainOrig MUST be an extern const variable, which will be aliased to
+ * _pDefaultRawDllMainOrig if no real user definition is present, thanks to the
+ * alternatename directive.
+ */
+
+// work at least with _MSC_VER 1500 (MSVC++ 9.0, VS 2008)
+#if (_MSC_VER >= 1500)
+
+extern "C" {
+extern BOOL (WINAPI * const _pRawDllMainOrig)(HINSTANCE, DWORD, LPVOID);
+extern BOOL (WINAPI * const _pDefaultRawDllMainOrig)(HINSTANCE, DWORD, LPVOID) = NULL;
+#if defined (_M_IX86)
+#pragma comment(linker, "/alternatename:__pRawDllMainOrig=__pDefaultRawDllMainOrig")
+#elif defined (_M_X64) || defined (_M_ARM)
+#pragma comment(linker, "/alternatename:_pRawDllMainOrig=_pDefaultRawDllMainOrig")
+#else /* defined (_M_X64) || defined (_M_ARM) */
+#error Unsupported platform
+#endif /* defined (_M_X64) || defined (_M_ARM) */
+}
+
+#endif
+
+
+
+
+ //Definitions required by implementation
+ #if (_MSC_VER < 1300) || ((_MSC_VER > 1900) && (_MSC_VER < 1910)) // 1300 == VC++ 7.0, 1900 == VC++ 14.0, 1910 == VC++ 2017
+ typedef void ( __cdecl *_PVFV_ )();
+ typedef void ( __cdecl *_PIFV_ )();
+ #define INIRETSUCCESS_V
+ #define INIRETSUCCESS_I
+ #define PVAPI_V void __cdecl
+ #define PVAPI_I void __cdecl
+ #elif (_MSC_VER >= 1910)
+ typedef void ( __cdecl *_PVFV_ )();
+ typedef int ( __cdecl *_PIFV_ )();
+ #define INIRETSUCCESS_V
+ #define INIRETSUCCESS_I 0
+ #define PVAPI_V void __cdecl
+ #define PVAPI_I int __cdecl
+ #else
+ typedef int ( __cdecl *_PVFV_ )();
+ typedef int ( __cdecl *_PIFV_ )();
+ #define INIRETSUCCESS_V 0
+ #define INIRETSUCCESS_I 0
+ #define PVAPI_V int __cdecl
+ #define PVAPI_I int __cdecl
+ #endif
+
+ typedef void (NTAPI* _TLSCB)(HINSTANCE, DWORD, PVOID);
+
+ //Symbols for connection to the runtime environment
+
+ extern "C"
+ {
+ extern DWORD _tls_used; //the tls directory (located in .rdata segment)
+ extern _TLSCB __xl_a[], __xl_z[]; //tls initializers */
+ }
+
+ namespace
+ {
+ //Forward declarations
+
+ static PVAPI_I on_tls_prepare();
+ static PVAPI_V on_process_init();
+ static PVAPI_V on_process_term();
+ static void NTAPI on_tls_callback(HINSTANCE, DWORD, PVOID);
+
+ //The .CRT$Xxx information is taken from Codeguru:
+ //http://www.codeguru.com/Cpp/misc/misc/threadsprocesses/article.php/c6945__2/
+
+#if (_MSC_VER >= 1400)
+#pragma section(".CRT$XIU",long,read)
+#pragma section(".CRT$XCU",long,read)
+#pragma section(".CRT$XTU",long,read)
+#pragma section(".CRT$XLC",long,read)
+ __declspec(allocate(".CRT$XLC")) _TLSCB __xl_ca=on_tls_callback;
+ __declspec(allocate(".CRT$XIU"))_PIFV_ p_tls_prepare = on_tls_prepare;
+ __declspec(allocate(".CRT$XCU"))_PVFV_ p_process_init = on_process_init;
+ __declspec(allocate(".CRT$XTU"))_PVFV_ p_process_term = on_process_term;
+#else
+ #if (_MSC_VER >= 1300) // 1300 == VC++ 7.0
+ # pragma data_seg(push, old_seg)
+ #endif
+ //Callback to run tls glue code first.
+ //I don't think it is necessary to run it
+ //at .CRT$XIB level, since we are only
+ //interested in thread detachement. But
+ //this could be changed easily if required.
+
+ #pragma data_seg(".CRT$XIU")
+ static _PIFV_ p_tls_prepare = on_tls_prepare;
+ #pragma data_seg()
+
+ //Callback after all global ctors.
+
+ #pragma data_seg(".CRT$XCU")
+ static _PVFV_ p_process_init = on_process_init;
+ #pragma data_seg()
+
+ //Callback for tls notifications.
+
+ #pragma data_seg(".CRT$XLB")
+ _TLSCB p_thread_callback = on_tls_callback;
+ #pragma data_seg()
+ //Callback for termination.
+
+ #pragma data_seg(".CRT$XTU")
+ static _PVFV_ p_process_term = on_process_term;
+ #pragma data_seg()
+ #if (_MSC_VER >= 1300) // 1300 == VC++ 7.0
+ # pragma data_seg(pop, old_seg)
+ #endif
+#endif
+
+#ifdef BOOST_MSVC
+#pragma warning(push)
+#pragma warning(disable:4189)
+#endif
+
+ PVAPI_I on_tls_prepare()
+ {
+ //The following line has an important side effect:
+ //if the TLS directory is not already there, it will
+ //be created by the linker. In other words, it forces a tls
+ //directory to be generated by the linker even when static tls
+ //(i.e. __declspec(thread)) is not used.
+ //The volatile should prevent the optimizer
+ //from removing the reference.
+
+ DWORD volatile dw = _tls_used;
+
+ #if (_MSC_VER < 1300) // 1300 == VC++ 7.0
+ _TLSCB* pfbegin = __xl_a;
+ _TLSCB* pfend = __xl_z;
+ _TLSCB* pfdst = pfbegin;
+ //pfdst = (_TLSCB*)_tls_used.AddressOfCallBacks;
+
+ //The following loop will merge the address pointers
+ //into a contiguous area, since the tlssup code seems
+ //to require this (at least on MSVC 6)
+
+ while (pfbegin < pfend)
+ {
+ if (*pfbegin != 0)
+ {
+ *pfdst = *pfbegin;
+ ++pfdst;
+ }
+ ++pfbegin;
+ }
+
+ *pfdst = 0;
+ #endif
+
+ return INIRETSUCCESS_I;
+ }
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+ PVAPI_V on_process_init()
+ {
+ //Schedule on_thread_exit() to be called for the main
+ //thread before destructors of global objects have been
+ //called.
+
+ //It will not be run when 'quick' exiting the
+ //library; however, this is the standard behaviour
+ //for destructors of global objects, so that
+ //shouldn't be a problem.
+
+ atexit(boost::on_thread_exit);
+
+ //Call Boost process entry callback here
+
+ boost::on_process_enter();
+
+ return INIRETSUCCESS_V;
+ }
+
+ PVAPI_V on_process_term()
+ {
+ boost::on_process_exit();
+ return INIRETSUCCESS_V;
+ }
+
+ void NTAPI on_tls_callback(HINSTANCE /*h*/, DWORD dwReason, PVOID /*pv*/)
+ {
+ switch (dwReason)
+ {
+ case DLL_THREAD_DETACH:
+ boost::on_thread_exit();
+ break;
+ }
+ }
+
+#if (_MSC_VER >= 1500)
+ BOOL WINAPI dll_callback(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
+#else
+ BOOL WINAPI dll_callback(HINSTANCE, DWORD dwReason, LPVOID)
+#endif
+ {
+ switch (dwReason)
+ {
+ case DLL_THREAD_DETACH:
+ boost::on_thread_exit();
+ break;
+ case DLL_PROCESS_DETACH:
+ boost::on_process_exit();
+ break;
+ }
+
+#if (_MSC_VER >= 1500)
+ if( _pRawDllMainOrig )
+ {
+ return _pRawDllMainOrig(hInstance, dwReason, lpReserved);
+ }
+#endif
+ return true;
+ }
+ } //namespace
+
+extern "C"
+{
+ extern BOOL (WINAPI * const _pRawDllMain)(HINSTANCE, DWORD, LPVOID)=&dll_callback;
+}
+namespace boost
+{
+ void tss_cleanup_implemented()
+ {
+ /*
+ This function's sole purpose is to cause a link error in cases where
+ automatic tss cleanup is not implemented by Boost.Threads as a
+ reminder that user code is responsible for calling the necessary
+ functions at the appropriate times (and for implementing an a
+ tss_cleanup_implemented() function to eliminate the linker's
+ missing symbol error).
+
+ If Boost.Threads later implements automatic tss cleanup in cases
+ where it currently doesn't (which is the plan), the duplicate
+ symbol error will warn the user that their custom solution is no
+ longer needed and can be removed.
+ */
+ }
+}
+
+#endif //defined(_MSC_VER) && !defined(UNDER_CE)
+
+#endif //defined(BOOST_HAS_WINTHREADS) && defined(BOOST_THREAD_BUILD_LIB)
diff --git a/contrib/restricted/boost/libs/timer/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/libs/timer/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..5dee7360cb
--- /dev/null
+++ b/contrib/restricted/boost/libs/timer/.yandex_meta/licenses.list.txt
@@ -0,0 +1,42 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// See http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 1994-2006, 2011
+
+
+====================COPYRIGHT====================
+// Copyright Beman Dawes 2007, 2011
+
+
+====================File: LICENSE_1_0.txt====================
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/stacktrace/.yandex_meta/devtools.copyrights.report b/contrib/restricted/boost/stacktrace/.yandex_meta/devtools.copyrights.report
new file mode 100644
index 0000000000..39c71a4739
--- /dev/null
+++ b/contrib/restricted/boost/stacktrace/.yandex_meta/devtools.copyrights.report
@@ -0,0 +1,100 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# $ IGNORE_FILES {file1.ext1} {file2.ext2} - (optional) ignore listed files when generating license macro and credits
+# $ RENAME {original license id} TO {new license id} # user comments - (optional) use {new license id} instead {original license id} in ya.make files
+# $ # user comments
+# $
+# ${action} {license id} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
+
+KEEP COPYRIGHT_SERVICE_LABEL 314d68db4f1890b5b32a7518f13b4176
+BELONGS ya.make
+ License text:
+ // Copyright Antony Polukhin, 2016-2022.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ include/boost/stacktrace.hpp [1:1]
+ include/boost/stacktrace/detail/collect_msvc.ipp [1:1]
+ include/boost/stacktrace/detail/collect_unwind.ipp [1:1]
+ include/boost/stacktrace/detail/frame_decl.hpp [1:1]
+ include/boost/stacktrace/detail/frame_msvc.ipp [1:1]
+ include/boost/stacktrace/detail/frame_unwind.ipp [1:1]
+ include/boost/stacktrace/detail/libbacktrace_impls.hpp [1:1]
+ include/boost/stacktrace/detail/location_from_symbol.hpp [1:1]
+ include/boost/stacktrace/detail/pop_options.h [1:1]
+ include/boost/stacktrace/detail/push_options.h [1:1]
+ include/boost/stacktrace/detail/safe_dump_posix.ipp [1:1]
+ include/boost/stacktrace/detail/safe_dump_win.ipp [1:1]
+ include/boost/stacktrace/detail/to_dec_array.hpp [1:1]
+ include/boost/stacktrace/detail/to_hex_array.hpp [1:1]
+ include/boost/stacktrace/detail/unwind_base_impls.hpp [1:1]
+ include/boost/stacktrace/frame.hpp [1:1]
+ include/boost/stacktrace/safe_dump_to.hpp [1:1]
+ include/boost/stacktrace/stacktrace.hpp [1:1]
+ include/boost/stacktrace/stacktrace_fwd.hpp [1:1]
+
+KEEP COPYRIGHT_SERVICE_LABEL 43184d74bb6f0a9ca9f5562808734277
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+ // Copyright Antony Polukhin, 2015-2022.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ include/boost/stacktrace/detail/void_ptr_cast.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL bd728379e171c82a4b01405b65b3340b
+BELONGS ya.make
+ License text:
+ // Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+ // Copyright Antony Polukhin, 2015-2022.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ include/boost/stacktrace/detail/void_ptr_cast.hpp [1:2]
+
+KEEP COPYRIGHT_SERVICE_LABEL e8010e4e32ce75b509416875de06cd1c
+BELONGS ya.make
+ License text:
+ // Copyright Antony Polukhin, 2016-2020.
+ Scancode info:
+ Original SPDX id: COPYRIGHT_SERVICE_LABEL
+ Score : 100.00
+ Match type : COPYRIGHT
+ Files with this license:
+ src/backtrace.cpp [1:1]
+ src/basic.cpp [1:1]
+ src/windbg.cpp [1:1]
diff --git a/contrib/restricted/boost/stacktrace/.yandex_meta/devtools.licenses.report b/contrib/restricted/boost/stacktrace/.yandex_meta/devtools.licenses.report
new file mode 100644
index 0000000000..f713c2a78c
--- /dev/null
+++ b/contrib/restricted/boost/stacktrace/.yandex_meta/devtools.licenses.report
@@ -0,0 +1,96 @@
+# File format ($ symbol means the beginning of a line):
+#
+# $ # this message
+# $ # =======================
+# $ # comments (all commentaries should starts with some number of spaces and # symbol)
+# $ IGNORE_FILES {file1.ext1} {file2.ext2} - (optional) ignore listed files when generating license macro and credits
+# $ RENAME {original license id} TO {new license id} # user comments - (optional) use {new license id} instead {original license id} in ya.make files
+# $ # user comments
+# $
+# ${action} {license id} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/1/ya.make ./ya/make/2/ya.make
+# ${all_file_action} filename
+# $ # user commentaries (many lines)
+# $ generated description - files with this license, license text... (some number of lines that starts with some number of spaces, do not modify)
+# ${action} {license spdx} {license text hash}
+# $BELONGS ./ya/make/file/relative/path/3/ya.make
+# ${all_file_action} filename
+# $ # user commentaries
+# $ generated description
+# $ ...
+#
+# You can modify action, all_file_action and add commentaries
+# Available actions:
+# keep - keep license in contrib and use in credits
+# skip - skip license
+# remove - remove all files with this license
+# rename - save license text/links into licenses texts file, but not store SPDX into LINCENSE macro. You should store correct license id into devtools.license.spdx.txt file
+#
+# {all file action} records will be generated when license text contains filename that exists on filesystem (in contrib directory)
+# We suppose that that files can contain some license info
+# Available all file actions:
+# FILE_IGNORE - ignore file (do nothing)
+# FILE_INCLUDE - include all file data into licenses text file
+# =======================
+
+KEEP BSL-1.0 1e1b35c3ae13c65f63b2c7467cce8a87
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0.
+ // (See accompanying file LICENSE_1_0.txt
+ // or copy at http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ include/boost/stacktrace/detail/void_ptr_cast.hpp [4:6]
+
+KEEP BSL-1.0 47a0454637d4fa45d78eb2557ccd70c4
+BELONGS ya.make
+ License text:
+ // Distributed under the Boost Software License, Version 1.0. (See
+ // accompanying file LICENSE_1_0.txt or copy at
+ // http://www.boost.org/LICENSE_1_0.txt)
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 100.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ include/boost/stacktrace.hpp [3:5]
+ include/boost/stacktrace/detail/collect_msvc.ipp [3:5]
+ include/boost/stacktrace/detail/collect_unwind.ipp [3:5]
+ include/boost/stacktrace/detail/frame_decl.hpp [3:5]
+ include/boost/stacktrace/detail/frame_msvc.ipp [3:5]
+ include/boost/stacktrace/detail/frame_unwind.ipp [3:5]
+ include/boost/stacktrace/detail/libbacktrace_impls.hpp [3:5]
+ include/boost/stacktrace/detail/location_from_symbol.hpp [3:5]
+ include/boost/stacktrace/detail/pop_options.h [3:5]
+ include/boost/stacktrace/detail/push_options.h [3:5]
+ include/boost/stacktrace/detail/safe_dump_posix.ipp [3:5]
+ include/boost/stacktrace/detail/safe_dump_win.ipp [3:5]
+ include/boost/stacktrace/detail/to_dec_array.hpp [3:5]
+ include/boost/stacktrace/detail/to_hex_array.hpp [3:5]
+ include/boost/stacktrace/detail/unwind_base_impls.hpp [3:5]
+ include/boost/stacktrace/frame.hpp [3:5]
+ include/boost/stacktrace/safe_dump_to.hpp [3:5]
+ include/boost/stacktrace/stacktrace.hpp [3:5]
+ include/boost/stacktrace/stacktrace_fwd.hpp [3:5]
+ src/backtrace.cpp [3:5]
+ src/basic.cpp [3:5]
+ src/windbg.cpp [3:5]
+
+KEEP BSL-1.0 49405d2ecd7026743895d965f0f645ef
+BELONGS ya.make
+ License text:
+ License
+ Distributed under the [Boost Software License, Version 1.0](https://boost.org/LICENSE_1_0.txt).
+ Scancode info:
+ Original SPDX id: BSL-1.0
+ Score : 50.00
+ Match type : NOTICE
+ Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0
+ Files with this license:
+ README.md [16:17]
diff --git a/contrib/restricted/boost/stacktrace/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/stacktrace/.yandex_meta/licenses.list.txt
new file mode 100644
index 0000000000..87fd85b4f8
--- /dev/null
+++ b/contrib/restricted/boost/stacktrace/.yandex_meta/licenses.list.txt
@@ -0,0 +1,27 @@
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt
+// or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+
+====================BSL-1.0====================
+License
+Distributed under the [Boost Software License, Version 1.0](https://boost.org/LICENSE_1_0.txt).
+
+====================COPYRIGHT====================
+// Copyright 2014 Renato Tegon Forti, Antony Polukhin.
+// Copyright Antony Polukhin, 2015-2022.
+
+
+====================COPYRIGHT====================
+// Copyright Antony Polukhin, 2016-2020.
+
+
+====================COPYRIGHT====================
+// Copyright Antony Polukhin, 2016-2022.
diff --git a/contrib/restricted/boost/stacktrace/include/boost/stacktrace.hpp b/contrib/restricted/boost/stacktrace/include/boost/stacktrace.hpp
new file mode 100644
index 0000000000..3001bb7078
--- /dev/null
+++ b/contrib/restricted/boost/stacktrace/include/boost/stacktrace.hpp
@@ -0,0 +1,19 @@
+// Copyright Antony Polukhin, 2016-2022.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_STACKTRACE_HPP
+#define BOOST_STACKTRACE_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <boost/stacktrace/frame.hpp>
+#include <boost/stacktrace/stacktrace.hpp>
+#include <boost/stacktrace/safe_dump_to.hpp>
+
+#endif // BOOST_STACKTRACE_HPP
diff --git a/contrib/restricted/boost/stacktrace/include/boost/stacktrace/stacktrace.hpp b/contrib/restricted/boost/stacktrace/include/boost/stacktrace/stacktrace.hpp
new file mode 100644
index 0000000000..e6053c8ca4
--- /dev/null
+++ b/contrib/restricted/boost/stacktrace/include/boost/stacktrace/stacktrace.hpp
@@ -0,0 +1,422 @@
+// Copyright Antony Polukhin, 2016-2022.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_STACKTRACE_STACKTRACE_HPP
+#define BOOST_STACKTRACE_STACKTRACE_HPP
+
+#include <boost/config.hpp>
+#ifdef BOOST_HAS_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <boost/core/explicit_operator_bool.hpp>
+#include <boost/core/no_exceptions_support.hpp>
+#include <boost/container_hash/hash_fwd.hpp>
+
+#include <iosfwd>
+#include <string>
+#include <vector>
+
+#ifndef BOOST_NO_CXX11_HDR_TYPE_TRAITS
+# include <type_traits>
+#endif
+
+#include <boost/stacktrace/stacktrace_fwd.hpp>
+#include <boost/stacktrace/safe_dump_to.hpp>
+#include <boost/stacktrace/detail/frame_decl.hpp>
+
+#ifdef BOOST_INTEL
+# pragma warning(push)
+# pragma warning(disable:2196) // warning #2196: routine is both "inline" and "noinline"
+#endif
+
+namespace boost { namespace stacktrace {
+
+/// Class that on construction copies minimal information about call stack into its internals and provides access to that information.
+/// @tparam Allocator Allocator to use during stack capture.
+template <class Allocator>
+class basic_stacktrace {
+ std::vector<boost::stacktrace::frame, Allocator> impl_;
+ typedef boost::stacktrace::detail::native_frame_ptr_t native_frame_ptr_t;
+
+ /// @cond
+ void fill(native_frame_ptr_t* begin, std::size_t size) {
+ if (!size) {
+ return;
+ }
+
+ impl_.reserve(static_cast<std::size_t>(size));
+ for (std::size_t i = 0; i < size; ++i) {
+ if (!begin[i]) {
+ return;
+ }
+ impl_.push_back(
+ frame(begin[i])
+ );
+ }
+ }
+
+ static std::size_t frames_count_from_buffer_size(std::size_t buffer_size) BOOST_NOEXCEPT {
+ const std::size_t ret = (buffer_size > sizeof(native_frame_ptr_t) ? buffer_size / sizeof(native_frame_ptr_t) : 0);
+ return (ret > 1024 ? 1024 : ret); // Dealing with suspiciously big sizes
+ }
+
+ BOOST_NOINLINE void init(std::size_t frames_to_skip, std::size_t max_depth) {
+ BOOST_CONSTEXPR_OR_CONST std::size_t buffer_size = 128;
+ if (!max_depth) {
+ return;
+ }
+
+ BOOST_TRY {
+ { // Fast path without additional allocations
+ native_frame_ptr_t buffer[buffer_size];
+ const std::size_t frames_count = boost::stacktrace::detail::this_thread_frames::collect(buffer, buffer_size < max_depth ? buffer_size : max_depth, frames_to_skip + 1);
+ if (buffer_size > frames_count || frames_count == max_depth) {
+ fill(buffer, frames_count);
+ return;
+ }
+ }
+
+ // Failed to fit in `buffer_size`. Allocating memory:
+#ifdef BOOST_NO_CXX11_ALLOCATOR
+ typedef typename Allocator::template rebind<native_frame_ptr_t>::other allocator_void_t;
+#else
+ typedef typename std::allocator_traits<Allocator>::template rebind_alloc<native_frame_ptr_t> allocator_void_t;
+#endif
+ std::vector<native_frame_ptr_t, allocator_void_t> buf(buffer_size * 2, 0, impl_.get_allocator());
+ do {
+ const std::size_t frames_count = boost::stacktrace::detail::this_thread_frames::collect(&buf[0], buf.size() < max_depth ? buf.size() : max_depth, frames_to_skip + 1);
+ if (buf.size() > frames_count || frames_count == max_depth) {
+ fill(&buf[0], frames_count);
+ return;
+ }
+
+ buf.resize(buf.size() * 2);
+ } while (buf.size() < buf.max_size()); // close to `true`, but suppresses `C4127: conditional expression is constant`.
+ } BOOST_CATCH (...) {
+ // ignore exception
+ }
+ BOOST_CATCH_END
+ }
+ /// @endcond
+
+public:
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::value_type value_type;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::allocator_type allocator_type;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::const_pointer pointer;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::const_pointer const_pointer;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::const_reference reference;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::const_reference const_reference;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::size_type size_type;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::difference_type difference_type;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::const_iterator iterator;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::const_iterator const_iterator;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::const_reverse_iterator reverse_iterator;
+ typedef typename std::vector<boost::stacktrace::frame, Allocator>::const_reverse_iterator const_reverse_iterator;
+
+ /// @brief Stores the current function call sequence inside *this without any decoding or any other heavy platform specific operations.
+ ///
+ /// @b Complexity: O(N) where N is call sequence length, O(1) if BOOST_STACKTRACE_USE_NOOP is defined.
+ ///
+ /// @b Async-Handler-Safety: Safe if Allocator construction, copying, Allocator::allocate and Allocator::deallocate are async signal safe.
+ BOOST_FORCEINLINE basic_stacktrace() BOOST_NOEXCEPT
+ : impl_()
+ {
+ init(0 , static_cast<std::size_t>(-1));
+ }
+
+ /// @brief Stores the current function call sequence inside *this without any decoding or any other heavy platform specific operations.
+ ///
+ /// @b Complexity: O(N) where N is call sequence length, O(1) if BOOST_STACKTRACE_USE_NOOP is defined.
+ ///
+ /// @b Async-Handler-Safety: Safe if Allocator construction, copying, Allocator::allocate and Allocator::deallocate are async signal safe.
+ ///
+ /// @param a Allocator that would be passed to underlying storeage.
+ BOOST_FORCEINLINE explicit basic_stacktrace(const allocator_type& a) BOOST_NOEXCEPT
+ : impl_(a)
+ {
+ init(0 , static_cast<std::size_t>(-1));
+ }
+
+ /// @brief Stores [skip, skip + max_depth) of the current function call sequence inside *this without any decoding or any other heavy platform specific operations.
+ ///
+ /// @b Complexity: O(N) where N is call sequence length, O(1) if BOOST_STACKTRACE_USE_NOOP is defined.
+ ///
+ /// @b Async-Handler-Safety: Safe if Allocator construction, copying, Allocator::allocate and Allocator::deallocate are async signal safe.
+ ///
+ /// @param skip How many top calls to skip and do not store in *this.
+ ///
+ /// @param max_depth Max call sequence depth to collect.
+ ///
+ /// @param a Allocator that would be passed to underlying storeage.
+ ///
+ /// @throws Nothing. Note that default construction of allocator may throw, however it is
+ /// performed outside the constructor and exception in `allocator_type()` would not result in calling `std::terminate`.
+ BOOST_FORCEINLINE basic_stacktrace(std::size_t skip, std::size_t max_depth, const allocator_type& a = allocator_type()) BOOST_NOEXCEPT
+ : impl_(a)
+ {
+ init(skip , max_depth);
+ }
+
+ /// @b Complexity: O(st.size())
+ ///
+ /// @b Async-Handler-Safety: Safe if Allocator construction, copying, Allocator::allocate and Allocator::deallocate are async signal safe.
+ basic_stacktrace(const basic_stacktrace& st)
+ : impl_(st.impl_)
+ {}
+
+ /// @b Complexity: O(st.size())
+ ///
+ /// @b Async-Handler-Safety: Safe if Allocator construction, copying, Allocator::allocate and Allocator::deallocate are async signal safe.
+ basic_stacktrace& operator=(const basic_stacktrace& st) {
+ impl_ = st.impl_;
+ return *this;
+ }
+
+#ifdef BOOST_STACKTRACE_DOXYGEN_INVOKED
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe if Allocator::deallocate is async signal safe.
+ ~basic_stacktrace() BOOST_NOEXCEPT = default;
+#endif
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe if Allocator construction and copying are async signal safe.
+ basic_stacktrace(basic_stacktrace&& st) BOOST_NOEXCEPT
+ : impl_(std::move(st.impl_))
+ {}
+
+ /// @b Complexity: O(st.size())
+ ///
+ /// @b Async-Handler-Safety: Safe if Allocator construction and copying are async signal safe.
+ basic_stacktrace& operator=(basic_stacktrace&& st)
+#ifndef BOOST_NO_CXX11_HDR_TYPE_TRAITS
+ BOOST_NOEXCEPT_IF(( std::is_nothrow_move_assignable< std::vector<boost::stacktrace::frame, Allocator> >::value ))
+#else
+ BOOST_NOEXCEPT
+#endif
+ {
+ impl_ = std::move(st.impl_);
+ return *this;
+ }
+#endif
+
+ /// @returns Number of function names stored inside the class.
+ ///
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ size_type size() const BOOST_NOEXCEPT {
+ return impl_.size();
+ }
+
+ /// @param frame_no Zero based index of frame to return. 0
+ /// is the function index where stacktrace was constructed and
+ /// index close to this->size() contains function `main()`.
+ /// @returns frame that references the actual frame info, stored inside *this.
+ ///
+ /// @b Complexity: O(1).
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_reference operator[](std::size_t frame_no) const BOOST_NOEXCEPT {
+ return impl_[frame_no];
+ }
+
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_iterator begin() const BOOST_NOEXCEPT { return impl_.begin(); }
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_iterator cbegin() const BOOST_NOEXCEPT { return impl_.begin(); }
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_iterator end() const BOOST_NOEXCEPT { return impl_.end(); }
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_iterator cend() const BOOST_NOEXCEPT { return impl_.end(); }
+
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_reverse_iterator rbegin() const BOOST_NOEXCEPT { return impl_.rbegin(); }
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_reverse_iterator crbegin() const BOOST_NOEXCEPT { return impl_.rbegin(); }
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_reverse_iterator rend() const BOOST_NOEXCEPT { return impl_.rend(); }
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ const_reverse_iterator crend() const BOOST_NOEXCEPT { return impl_.rend(); }
+
+
+ /// @brief Allows to check that stack trace capturing was successful.
+ /// @returns `true` if `this->size() != 0`
+ ///
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
+
+ /// @brief Allows to check that stack trace failed.
+ /// @returns `true` if `this->size() == 0`
+ ///
+ /// @b Complexity: O(1)
+ ///
+ /// @b Async-Handler-Safety: Safe.
+ bool empty() const BOOST_NOEXCEPT { return !size(); }
+
+ /// @cond
+ bool operator!() const BOOST_NOEXCEPT { return !size(); }
+ /// @endcond
+
+ const std::vector<boost::stacktrace::frame, Allocator>& as_vector() const BOOST_NOEXCEPT {
+ return impl_;
+ }
+
+ /// Constructs stacktrace from basic_istreamable that references the dumped stacktrace. Terminating zero frame is discarded.
+ ///
+ /// @b Complexity: O(N)
+ template <class Char, class Trait>
+ static basic_stacktrace from_dump(std::basic_istream<Char, Trait>& in, const allocator_type& a = allocator_type()) {
+ typedef typename std::basic_istream<Char, Trait>::pos_type pos_type;
+ basic_stacktrace ret(0, 0, a);
+
+ // reserving space
+ const pos_type pos = in.tellg();
+ in.seekg(0, in.end);
+ const std::size_t frames_count = frames_count_from_buffer_size(static_cast<std::size_t>(in.tellg()));
+ in.seekg(pos);
+
+ if (!frames_count) {
+ return ret;
+ }
+
+ native_frame_ptr_t ptr = 0;
+ ret.impl_.reserve(frames_count);
+ while (in.read(reinterpret_cast<Char*>(&ptr), sizeof(ptr))) {
+ if (!ptr) {
+ break;
+ }
+
+ ret.impl_.push_back(frame(ptr));
+ }
+
+ return ret;
+ }
+
+ /// Constructs stacktrace from raw memory dump. Terminating zero frame is discarded.
+ ///
+ /// @param begin Begining of the memory where the stacktrace was saved using the boost::stacktrace::safe_dump_to
+ ///
+ /// @param buffer_size_in_bytes Size of the memory. Usually the same value that was passed to the boost::stacktrace::safe_dump_to
+ ///
+ /// @b Complexity: O(size) in worst case
+ static basic_stacktrace from_dump(const void* begin, std::size_t buffer_size_in_bytes, const allocator_type& a = allocator_type()) {
+ basic_stacktrace ret(0, 0, a);
+ const native_frame_ptr_t* first = static_cast<const native_frame_ptr_t*>(begin);
+ const std::size_t frames_count = frames_count_from_buffer_size(buffer_size_in_bytes);
+ if (!frames_count) {
+ return ret;
+ }
+
+ const native_frame_ptr_t* const last = first + frames_count;
+ ret.impl_.reserve(frames_count);
+ for (; first != last; ++first) {
+ if (!*first) {
+ break;
+ }
+
+ ret.impl_.push_back(frame(*first));
+ }
+
+ return ret;
+ }
+};
+
+/// @brief Compares stacktraces for less, order is platform dependent.
+///
+/// @b Complexity: Amortized O(1); worst case O(size())
+///
+/// @b Async-Handler-Safety: Safe.
+template <class Allocator1, class Allocator2>
+bool operator< (const basic_stacktrace<Allocator1>& lhs, const basic_stacktrace<Allocator2>& rhs) BOOST_NOEXCEPT {
+ return lhs.size() < rhs.size() || (lhs.size() == rhs.size() && lhs.as_vector() < rhs.as_vector());
+}
+
+/// @brief Compares stacktraces for equality.
+///
+/// @b Complexity: Amortized O(1); worst case O(size())
+///
+/// @b Async-Handler-Safety: Safe.
+template <class Allocator1, class Allocator2>
+bool operator==(const basic_stacktrace<Allocator1>& lhs, const basic_stacktrace<Allocator2>& rhs) BOOST_NOEXCEPT {
+ return lhs.as_vector() == rhs.as_vector();
+}
+
+
+/// Comparison operators that provide platform dependant ordering and have amortized O(1) complexity; O(size()) worst case complexity; are Async-Handler-Safe.
+template <class Allocator1, class Allocator2>
+bool operator> (const basic_stacktrace<Allocator1>& lhs, const basic_stacktrace<Allocator2>& rhs) BOOST_NOEXCEPT {
+ return rhs < lhs;
+}
+
+template <class Allocator1, class Allocator2>
+bool operator<=(const basic_stacktrace<Allocator1>& lhs, const basic_stacktrace<Allocator2>& rhs) BOOST_NOEXCEPT {
+ return !(lhs > rhs);
+}
+
+template <class Allocator1, class Allocator2>
+bool operator>=(const basic_stacktrace<Allocator1>& lhs, const basic_stacktrace<Allocator2>& rhs) BOOST_NOEXCEPT {
+ return !(lhs < rhs);
+}
+
+template <class Allocator1, class Allocator2>
+bool operator!=(const basic_stacktrace<Allocator1>& lhs, const basic_stacktrace<Allocator2>& rhs) BOOST_NOEXCEPT {
+ return !(lhs == rhs);
+}
+
+/// Fast hashing support, O(st.size()) complexity; Async-Handler-Safe.
+template <class Allocator>
+std::size_t hash_value(const basic_stacktrace<Allocator>& st) BOOST_NOEXCEPT {
+ return boost::hash_range(st.as_vector().begin(), st.as_vector().end());
+}
+
+/// Returns std::string with the stacktrace in a human readable format; unsafe to use in async handlers.
+template <class Allocator>
+std::string to_string(const basic_stacktrace<Allocator>& bt) {
+ if (!bt) {
+ return std::string();
+ }
+
+ return boost::stacktrace::detail::to_string(&bt.as_vector()[0], bt.size());
+}
+
+/// Outputs stacktrace in a human readable format to the output stream `os`; unsafe to use in async handlers.
+template <class CharT, class TraitsT, class Allocator>
+std::basic_ostream<CharT, TraitsT>& operator<<(std::basic_ostream<CharT, TraitsT>& os, const basic_stacktrace<Allocator>& bt) {
+ return os << boost::stacktrace::to_string(bt);
+}
+
+/// This is the typedef to use unless you'd like to provide a specific allocator to boost::stacktrace::basic_stacktrace.
+typedef basic_stacktrace<> stacktrace;
+
+}} // namespace boost::stacktrace
+
+#ifdef BOOST_INTEL
+# pragma warning(pop)
+#endif
+
+#endif // BOOST_STACKTRACE_STACKTRACE_HPP
diff --git a/contrib/restricted/boost/stacktrace/include/boost/stacktrace/stacktrace_fwd.hpp b/contrib/restricted/boost/stacktrace/include/boost/stacktrace/stacktrace_fwd.hpp
new file mode 100644
index 0000000000..43ebfcc372
--- /dev/null
+++ b/contrib/restricted/boost/stacktrace/include/boost/stacktrace/stacktrace_fwd.hpp
@@ -0,0 +1,28 @@
+// Copyright Antony Polukhin, 2016-2022.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_STACKTRACE_STACKTRACE_FWD_HPP
+#define BOOST_STACKTRACE_STACKTRACE_FWD_HPP
+
+#include <cstddef>
+#include <memory>
+
+/// @file stacktrace_fwd.hpp This header contains only forward declarations of
+/// boost::stacktrace::frame, boost::stacktrace::basic_stacktrace, boost::stacktrace::stacktrace
+/// and does not include any other Boost headers.
+
+/// @cond
+namespace boost { namespace stacktrace {
+
+class frame;
+template <class Allocator = std::allocator<frame> > class basic_stacktrace;
+typedef basic_stacktrace<> stacktrace;
+
+}} // namespace boost::stacktrace
+/// @endcond
+
+
+#endif // BOOST_STACKTRACE_STACKTRACE_FWD_HPP
diff --git a/contrib/restricted/boost/stacktrace/src/windbg.cpp b/contrib/restricted/boost/stacktrace/src/windbg.cpp
new file mode 100644
index 0000000000..b58b3ea0f3
--- /dev/null
+++ b/contrib/restricted/boost/stacktrace/src/windbg.cpp
@@ -0,0 +1,10 @@
+// Copyright Antony Polukhin, 2016-2020.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#define BOOST_STACKTRACE_INTERNAL_BUILD_LIBS
+#define BOOST_STACKTRACE_LINK
+#include <boost/stacktrace/detail/frame_msvc.ipp>
+#include <boost/stacktrace/safe_dump_to.hpp>
diff --git a/contrib/restricted/cityhash-1.0.2/CMakeLists.txt b/contrib/restricted/cityhash-1.0.2/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/restricted/cityhash-1.0.2/CMakeLists.txt
+++ b/contrib/restricted/cityhash-1.0.2/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/dragonbox/CMakeLists.txt b/contrib/restricted/dragonbox/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/contrib/restricted/dragonbox/CMakeLists.txt
+++ b/contrib/restricted/dragonbox/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/restricted/googletest/CMakeLists.txt b/contrib/restricted/googletest/CMakeLists.txt
new file mode 100644
index 0000000000..a0dd95bcc3
--- /dev/null
+++ b/contrib/restricted/googletest/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(googlemock)
+add_subdirectory(googletest)
diff --git a/contrib/tools/CMakeLists.txt b/contrib/tools/CMakeLists.txt
new file mode 100644
index 0000000000..07c36cc20d
--- /dev/null
+++ b/contrib/tools/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(protoc)
diff --git a/contrib/tools/protoc/CMakeLists.txt b/contrib/tools/protoc/CMakeLists.txt
new file mode 100644
index 0000000000..5b078f6e25
--- /dev/null
+++ b/contrib/tools/protoc/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(bin)
+add_subdirectory(plugins)
diff --git a/contrib/tools/protoc/bin/CMakeLists.txt b/contrib/tools/protoc/bin/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/tools/protoc/bin/CMakeLists.txt
+++ b/contrib/tools/protoc/bin/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/tools/protoc/bin/ya.make b/contrib/tools/protoc/bin/ya.make
deleted file mode 100644
index f9e74f5e4c..0000000000
--- a/contrib/tools/protoc/bin/ya.make
+++ /dev/null
@@ -1,26 +0,0 @@
-PROGRAM(protoc)
-
-OWNER(
- velavokr
- g:contrib
- g:cpp-contrib
-)
-
-LICENSE(BSD-3-Clause)
-
-NO_COMPILER_WARNINGS()
-
-PEERDIR(
- contrib/libs/protoc
-)
-SRCDIR(
- contrib/libs/protoc
-)
-
-SRCS(
- src/google/protobuf/compiler/main.cc
-)
-
-INCLUDE(${ARCADIA_ROOT}/build/prebuilt/contrib/tools/protoc/ya.make.induced_deps)
-
-END()
diff --git a/contrib/tools/protoc/plugins/CMakeLists.txt b/contrib/tools/protoc/plugins/CMakeLists.txt
new file mode 100644
index 0000000000..27af5d725b
--- /dev/null
+++ b/contrib/tools/protoc/plugins/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(cpp_styleguide)
+add_subdirectory(grpc_cpp)
diff --git a/contrib/tools/protoc/plugins/cpp_styleguide/CMakeLists.txt b/contrib/tools/protoc/plugins/cpp_styleguide/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/tools/protoc/plugins/cpp_styleguide/CMakeLists.txt
+++ b/contrib/tools/protoc/plugins/cpp_styleguide/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/tools/protoc/plugins/cpp_styleguide/bin/ya.make b/contrib/tools/protoc/plugins/cpp_styleguide/bin/ya.make
deleted file mode 100644
index e8f7558208..0000000000
--- a/contrib/tools/protoc/plugins/cpp_styleguide/bin/ya.make
+++ /dev/null
@@ -1,21 +0,0 @@
-OWNER(g:contrib)
-
-PROGRAM(cpp_styleguide)
-
-NO_COMPILER_WARNINGS()
-
-PEERDIR(
- contrib/libs/protoc
-)
-
-SRCS(
- cpp_styleguide.cpp
-)
-
-SRCDIR(
- contrib/tools/protoc/plugins/cpp_styleguide
-)
-
-INCLUDE(${ARCADIA_ROOT}/build/prebuilt/contrib/tools/protoc/plugins/cpp_styleguide/ya.make.induced_deps)
-
-END()
diff --git a/contrib/tools/protoc/plugins/grpc_cpp/CMakeLists.txt b/contrib/tools/protoc/plugins/grpc_cpp/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/contrib/tools/protoc/plugins/grpc_cpp/CMakeLists.txt
+++ b/contrib/tools/protoc/plugins/grpc_cpp/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/contrib/tools/protoc/plugins/grpc_cpp/bin/ya.make b/contrib/tools/protoc/plugins/grpc_cpp/bin/ya.make
deleted file mode 100644
index f2181ce63a..0000000000
--- a/contrib/tools/protoc/plugins/grpc_cpp/bin/ya.make
+++ /dev/null
@@ -1,30 +0,0 @@
-OWNER(akastornov g:contrib g:cpp-contrib)
-
-PROGRAM(grpc_cpp)
-
-LICENSE(Apache-2.0)
-
-PEERDIR(
- contrib/libs/grpc/src/compiler/grpc_plugin_support
-)
-
-ADDINCL(
- contrib/libs/grpc
- contrib/libs/grpc/include
-)
-
-NO_COMPILER_WARNINGS()
-
-CFLAGS(
- -DGRPC_USE_ABSL=0
-)
-
-SRCDIR(contrib/libs/grpc/src/compiler)
-
-SRCS(
- cpp_plugin.cc
-)
-
-INCLUDE(${ARCADIA_ROOT}/build/prebuilt/contrib/tools/protoc/plugins/grpc_cpp/ya.make.induced_deps)
-
-END()
diff --git a/contrib/tools/protoc/plugins/grpc_java/bin/ya.make b/contrib/tools/protoc/plugins/grpc_java/bin/ya.make
deleted file mode 100644
index b5da57408c..0000000000
--- a/contrib/tools/protoc/plugins/grpc_java/bin/ya.make
+++ /dev/null
@@ -1,21 +0,0 @@
-OWNER(
- akastornov
- g:contrib
-)
-
-PROGRAM(grpc_java)
-
-NO_COMPILER_WARNINGS()
-
-PEERDIR(
- contrib/libs/protoc
-)
-
-SRCDIR(contrib/libs/grpc-java/compiler/src/java_plugin/cpp)
-
-SRCS(
- java_plugin.cpp
- java_generator.cpp
-)
-
-END()
diff --git a/contrib/tools/protoc/plugins/grpc_python/bin/ya.make b/contrib/tools/protoc/plugins/grpc_python/bin/ya.make
deleted file mode 100644
index bd0f6a3b48..0000000000
--- a/contrib/tools/protoc/plugins/grpc_python/bin/ya.make
+++ /dev/null
@@ -1,28 +0,0 @@
-OWNER(akastornov g:contrib g:cpp-contrib)
-
-PROGRAM(grpc_python)
-
-LICENSE(Apache-2.0)
-
-PEERDIR(
- contrib/libs/grpc/src/compiler/grpc_plugin_support
-)
-
-ADDINCL(
- contrib/libs/grpc
- contrib/libs/grpc/include
-)
-
-NO_COMPILER_WARNINGS()
-
-CFLAGS(
- -DGRPC_USE_ABSL=0
-)
-
-SRCDIR(contrib/libs/grpc/src/compiler)
-
-SRCS(
- python_plugin.cc
-)
-
-END()
diff --git a/contrib/tools/ragel6/bin/ya.make b/contrib/tools/ragel6/bin/ya.make
deleted file mode 100644
index 3adf88c56b..0000000000
--- a/contrib/tools/ragel6/bin/ya.make
+++ /dev/null
@@ -1,116 +0,0 @@
-OWNER(pg g:cpp-contrib)
-
-PROGRAM(ragel6)
-
-VERSION(6.10)
-
-LICENSE(GPL-2.0)
-
-PEERDIR(
- contrib/tools/ragel5/aapl
-)
-
-ADDINCL(
- contrib/tools/ragel6
-)
-
-NO_COMPILER_WARNINGS()
-
-NO_UTIL()
-
-CFLAGS(
- -DHAVE_CONFIG_H
-)
-
-SRCDIR(contrib/tools/ragel6)
-
-SRCS(
- rlparse.cpp
- rlscan.cpp
-)
-
-JOIN_SRCS(
- all_cd.cpp
- cdcodegen.cpp
- cdfflat.cpp
- cdfgoto.cpp
- cdflat.cpp
- cdftable.cpp
- cdgoto.cpp
- cdipgoto.cpp
- cdsplit.cpp
- cdtable.cpp
-)
-
-JOIN_SRCS(
- all_cs.cpp
- cscodegen.cpp
- csfflat.cpp
- csfgoto.cpp
- csflat.cpp
- csftable.cpp
- csgoto.cpp
- csipgoto.cpp
- cssplit.cpp
- cstable.cpp
-)
-
-JOIN_SRCS(
- all_fs.cpp
- fsmap.cpp
- fsmattach.cpp
- fsmbase.cpp
- fsmgraph.cpp
- fsmmin.cpp
- fsmstate.cpp
-)
-
-JOIN_SRCS(
- all_go.cpp
- gocodegen.cpp
- gofflat.cpp
- gofgoto.cpp
- goflat.cpp
- goftable.cpp
- gogoto.cpp
- goipgoto.cpp
- gotable.cpp
- gotablish.cpp
-)
-
-JOIN_SRCS(
- all_ml.cpp
- mlcodegen.cpp
- mlfflat.cpp
- mlfgoto.cpp
- mlflat.cpp
- mlftable.cpp
- mlgoto.cpp
- mltable.cpp
-)
-
-JOIN_SRCS(
- all_r.cpp
- rbxgoto.cpp
- redfsm.cpp
- rubycodegen.cpp
- rubyfflat.cpp
- rubyflat.cpp
- rubyftable.cpp
- rubytable.cpp
-)
-
-JOIN_SRCS(
- all_other.cpp
- common.cpp
- dotcodegen.cpp
- gendata.cpp
- inputdata.cpp
- javacodegen.cpp
- main.cpp
- parsedata.cpp
- parsetree.cpp
- xmlcodegen.cpp
-)
-
-END()
diff --git a/contrib/tools/yasm/bin/ya.make b/contrib/tools/yasm/bin/ya.make
deleted file mode 100644
index 96ca75c53e..0000000000
--- a/contrib/tools/yasm/bin/ya.make
+++ /dev/null
@@ -1,120 +0,0 @@
-OWNER(
- somov
- g:contrib
- g:ymake
-)
-
-PROGRAM(yasm)
-
-IF (MUSL)
- PEERDIR(contrib/libs/musl_extra)
- PEERDIR(contrib/libs/jemalloc)
- DISABLE(USE_ASMLIB)
- NO_RUNTIME()
- ENABLE(MUSL_LITE)
-ELSE()
- NO_PLATFORM()
-ENDIF()
-
-NO_CLANG_COVERAGE()
-NO_COMPILER_WARNINGS()
-NO_UTIL()
-
-ALLOCATOR(FAKE)
-
-ADDINCL(
- contrib/tools/yasm
- contrib/tools/yasm/frontends/yasm
- contrib/tools/yasm/modules
-)
-
-CFLAGS(
- -DHAVE_CONFIG_H
- -DYASM_LIB_SOURCE
-)
-
-SRCDIR(contrib/tools/yasm)
-
-SRCS(
- frontends/yasm/yasm-options.c
- frontends/yasm/yasm.c
- libyasm/assocdat.c
- libyasm/bc-align.c
- libyasm/bc-data.c
- libyasm/bc-incbin.c
- libyasm/bc-org.c
- libyasm/bc-reserve.c
- libyasm/bitvect.c
- libyasm/bytecode.c
- libyasm/cmake-module.c
- libyasm/errwarn.c
- libyasm/expr.c
- libyasm/file.c
- libyasm/floatnum.c
- libyasm/hamt.c
- libyasm/insn.c
- libyasm/intnum.c
- libyasm/inttree.c
- libyasm/linemap.c
- libyasm/md5.c
- libyasm/mergesort.c
- libyasm/phash.c
- libyasm/replace_path.c
- libyasm/section.c
- libyasm/strcasecmp.c
- libyasm/strsep.c
- libyasm/symrec.c
- libyasm/valparam.c
- libyasm/value.c
- libyasm/xmalloc.c
- libyasm/xstrdup.c
- modules/arch/lc3b/lc3barch.c
- modules/arch/lc3b/lc3bbc.c
- modules/arch/x86/x86arch.c
- modules/arch/x86/x86bc.c
- modules/arch/x86/x86expr.c
- modules/arch/x86/x86id.c
- modules/dbgfmts/codeview/cv-dbgfmt.c
- modules/dbgfmts/codeview/cv-symline.c
- modules/dbgfmts/codeview/cv-type.c
- modules/dbgfmts/dwarf2/dwarf2-aranges.c
- modules/dbgfmts/dwarf2/dwarf2-dbgfmt.c
- modules/dbgfmts/dwarf2/dwarf2-info.c
- modules/dbgfmts/dwarf2/dwarf2-line.c
- modules/dbgfmts/null/null-dbgfmt.c
- modules/dbgfmts/stabs/stabs-dbgfmt.c
- modules/gas-token.c
- modules/init_plugin.c
- modules/lc3bid.c
- modules/listfmts/nasm/nasm-listfmt.c
- modules/nasm-token.c
- modules/objfmts/bin/bin-objfmt.c
- modules/objfmts/coff/coff-objfmt.c
- modules/objfmts/coff/win64-except.c
- modules/objfmts/dbg/dbg-objfmt.c
- modules/objfmts/elf/elf-objfmt.c
- modules/objfmts/elf/elf-x86-amd64.c
- modules/objfmts/elf/elf-x86-x32.c
- modules/objfmts/elf/elf-x86-x86.c
- modules/objfmts/elf/elf.c
- modules/objfmts/macho/macho-objfmt.c
- modules/objfmts/rdf/rdf-objfmt.c
- modules/objfmts/xdf/xdf-objfmt.c
- modules/parsers/gas/gas-parse-intel.c
- modules/parsers/gas/gas-parse.c
- modules/parsers/gas/gas-parser.c
- modules/parsers/nasm/nasm-parse.c
- modules/parsers/nasm/nasm-parser.c
- modules/preprocs/cpp/cpp-preproc.c
- modules/preprocs/gas/gas-eval.c
- modules/preprocs/gas/gas-preproc.c
- modules/preprocs/nasm/nasm-eval.c
- modules/preprocs/nasm/nasm-pp.c
- modules/preprocs/nasm/nasm-preproc.c
- modules/preprocs/nasm/nasmlib.c
- modules/preprocs/raw/raw-preproc.c
- modules/x86cpu.c
- modules/x86regtmod.c
-)
-
-END()
diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt
new file mode 100644
index 0000000000..48e888c46d
--- /dev/null
+++ b/library/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(cpp)
diff --git a/library/cpp/CMakeLists.txt b/library/cpp/CMakeLists.txt
new file mode 100644
index 0000000000..2be083d69c
--- /dev/null
+++ b/library/cpp/CMakeLists.txt
@@ -0,0 +1,88 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(accurate_accumulate)
+add_subdirectory(actors)
+add_subdirectory(archive)
+add_subdirectory(balloc)
+add_subdirectory(binsaver)
+add_subdirectory(bit_io)
+add_subdirectory(blockcodecs)
+add_subdirectory(bucket_quoter)
+add_subdirectory(build_info)
+add_subdirectory(cache)
+add_subdirectory(case_insensitive_string)
+add_subdirectory(cgiparam)
+add_subdirectory(charset)
+add_subdirectory(codecs)
+add_subdirectory(colorizer)
+add_subdirectory(compproto)
+add_subdirectory(comptable)
+add_subdirectory(containers)
+add_subdirectory(coroutine)
+add_subdirectory(cppparser)
+add_subdirectory(cpuid_check)
+add_subdirectory(dbg_output)
+add_subdirectory(deprecated)
+add_subdirectory(diff)
+add_subdirectory(digest)
+add_subdirectory(dns)
+add_subdirectory(enumbitset)
+add_subdirectory(execprofile)
+add_subdirectory(getopt)
+add_subdirectory(grpc)
+add_subdirectory(histogram)
+add_subdirectory(html)
+add_subdirectory(http)
+add_subdirectory(hyperloglog)
+add_subdirectory(int128)
+add_subdirectory(ipmath)
+add_subdirectory(ipv6_address)
+add_subdirectory(iterator)
+add_subdirectory(json)
+add_subdirectory(lcs)
+add_subdirectory(lfalloc)
+add_subdirectory(linear_regression)
+add_subdirectory(logger)
+add_subdirectory(lwtrace)
+add_subdirectory(malloc)
+add_subdirectory(messagebus)
+add_subdirectory(mime)
+add_subdirectory(monlib)
+add_subdirectory(on_disk)
+add_subdirectory(openssl)
+add_subdirectory(packedtypes)
+add_subdirectory(packers)
+add_subdirectory(pop_count)
+add_subdirectory(presort)
+add_subdirectory(protobuf)
+add_subdirectory(random_provider)
+add_subdirectory(regex)
+add_subdirectory(resource)
+add_subdirectory(retry)
+add_subdirectory(scheme)
+add_subdirectory(sighandler)
+add_subdirectory(sliding_window)
+add_subdirectory(sse)
+add_subdirectory(streams)
+add_subdirectory(string_utils)
+add_subdirectory(svnversion)
+add_subdirectory(terminate_handler)
+add_subdirectory(testing)
+add_subdirectory(threading)
+add_subdirectory(time_provider)
+add_subdirectory(timezone_conversion)
+add_subdirectory(tld)
+add_subdirectory(unicode)
+add_subdirectory(uri)
+add_subdirectory(xml)
+add_subdirectory(yaml)
+add_subdirectory(yson)
+add_subdirectory(yson_pull)
+add_subdirectory(yt)
+add_subdirectory(ytalloc)
diff --git a/library/cpp/actors/CMakeLists.txt b/library/cpp/actors/CMakeLists.txt
new file mode 100644
index 0000000000..b19b18f7a9
--- /dev/null
+++ b/library/cpp/actors/CMakeLists.txt
@@ -0,0 +1,20 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(core)
+add_subdirectory(dnscachelib)
+add_subdirectory(dnsresolver)
+add_subdirectory(helpers)
+add_subdirectory(http)
+add_subdirectory(interconnect)
+add_subdirectory(memory_log)
+add_subdirectory(prof)
+add_subdirectory(protos)
+add_subdirectory(testlib)
+add_subdirectory(util)
+add_subdirectory(wilson)
diff --git a/library/cpp/actors/core/event_pb.h b/library/cpp/actors/core/event_pb.h
index 061e51fa68..2d388fceeb 100644
--- a/library/cpp/actors/core/event_pb.h
+++ b/library/cpp/actors/core/event_pb.h
@@ -121,11 +121,7 @@ namespace NActors {
bool Finished = false;
};
-#ifdef ACTORLIB_HUGE_PB_SIZE
static const size_t EventMaxByteSize = 140 << 20; // (140MB)
-#else
- static const size_t EventMaxByteSize = 67108000;
-#endif
template <typename TEv, typename TRecord /*protobuf record*/, ui32 TEventType, typename TRecHolder>
class TEventPBBase: public TEventBase<TEv, TEventType> , public TRecHolder {
diff --git a/library/cpp/actors/core/log.cpp b/library/cpp/actors/core/log.cpp
index 5f63b5af58..4bafd45842 100644
--- a/library/cpp/actors/core/log.cpp
+++ b/library/cpp/actors/core/log.cpp
@@ -77,7 +77,7 @@ namespace NActors {
HTML(str) {
DIV_CLASS("row") {
DIV_CLASS("col-md-12") {
- H4() {
+ TAG(TH4) {
str << "Counters" << Endl;
}
DynamicCounters->OutputHtml(str);
@@ -142,7 +142,7 @@ namespace NActors {
HTML(str) {
DIV_CLASS("row") {
DIV_CLASS("col-md-12") {
- H4() {
+ TAG(TH4) {
str << "Metrics" << Endl;
}
// TODO: Now, TMetricRegistry does not have the GetOutputHtml function
@@ -164,8 +164,6 @@ namespace NActors {
std::shared_ptr<NMonitoring::TMetricRegistry> Metrics;
};
- TAtomic TLoggerActor::IsOverflow = 0;
-
TLoggerActor::TLoggerActor(TIntrusivePtr<NLog::TSettings> settings,
TAutoPtr<TLogBackend> logBackend,
TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
@@ -224,8 +222,9 @@ namespace NActors {
}
void TLoggerActor::Throttle(const NLog::TSettings& settings) {
- if (AtomicGet(IsOverflow))
- Sleep(settings.ThrottleDelay);
+ // throttling via Sleep was removed since it causes unexpected
+ // incidents when users try to set AllowDrop=false.
+ Y_UNUSED(settings);
}
void TLoggerActor::LogIgnoredCount(TInstant now) {
@@ -268,10 +267,6 @@ namespace NActors {
i64 delayMillisec = (ctx.Now() - ev->Get()->Stamp).MilliSeconds();
WriteMessageStat(*ev->Get());
if (Settings->AllowDrop) {
- // Disable throttling if it was enabled previously
- if (AtomicGet(IsOverflow))
- AtomicSet(IsOverflow, 0);
-
// Check if some records have to be dropped
if ((PassedCount > 10 && delayMillisec > (i64)Settings->TimeThresholdMs) || IgnoredCount > 0) {
Metrics->IncIgnoredMsgs();
@@ -283,12 +278,6 @@ namespace NActors {
return;
}
PassedCount++;
- } else {
- // Enable of disable throttling depending on the load
- if (delayMillisec > (i64)Settings->TimeThresholdMs && !AtomicGet(IsOverflow))
- AtomicSet(IsOverflow, 1);
- else if (delayMillisec <= (i64)Settings->TimeThresholdMs && AtomicGet(IsOverflow))
- AtomicSet(IsOverflow, 0);
}
const auto prio = ev->Get()->Level.ToPrio();
@@ -312,7 +301,7 @@ namespace NActors {
void TLoggerActor::RenderComponentPriorities(IOutputStream& str) {
using namespace NLog;
HTML(str) {
- H4() {
+ TAG(TH4) {
str << "Priority Settings for the Components";
}
TABLE_SORTABLE_CLASS("table") {
@@ -415,7 +404,7 @@ namespace NActors {
HTML(str) {
DIV_CLASS("row") {
DIV_CLASS("col-md-12") {
- H4() {
+ TAG(TH4) {
str << "Current log settings for " << Settings->ComponentName(component) << Endl;
}
UL() {
@@ -437,7 +426,7 @@ namespace NActors {
DIV_CLASS("row") {
DIV_CLASS("col-md-12") {
- H4() {
+ TAG(TH4) {
str << "Change priority" << Endl;
}
UL() {
@@ -448,7 +437,7 @@ namespace NActors {
}
}
}
- H4() {
+ TAG(TH4) {
str << "Change sampling priority" << Endl;
}
UL() {
@@ -459,7 +448,7 @@ namespace NActors {
}
}
}
- H4() {
+ TAG(TH4) {
str << "Change sampling rate" << Endl;
}
str << "<form method=\"GET\">" << Endl;
@@ -467,7 +456,7 @@ namespace NActors {
str << "<input type=\"hidden\" name=\"c\" value=\"" << component << "\">" << Endl;
str << "<input class=\"btn btn-primary\" type=\"submit\" value=\"Change\"/>" << Endl;
str << "</form>" << Endl;
- H4() {
+ TAG(TH4) {
str << "<a href='logger'>Cancel</a>" << Endl;
}
}
@@ -503,7 +492,7 @@ namespace NActors {
RenderComponentPriorities(str);
}
DIV_CLASS("col-md-6") {
- H4() {
+ TAG(TH4) {
str << "Change priority for all components";
}
TABLE_CLASS("table table-condensed") {
@@ -525,7 +514,7 @@ namespace NActors {
}
}
}
- H4() {
+ TAG(TH4) {
str << "Change sampling priority for all components";
}
TABLE_CLASS("table table-condensed") {
@@ -547,7 +536,7 @@ namespace NActors {
}
}
}
- H4() {
+ TAG(TH4) {
str << "Change sampling rate for all components";
}
str << "<form method=\"GET\">" << Endl;
@@ -555,7 +544,7 @@ namespace NActors {
str << "<input type=\"hidden\" name=\"c\" value=\"-1\">" << Endl;
str << "<input class=\"btn btn-primary\" type=\"submit\" value=\"Change\"/>" << Endl;
str << "</form>" << Endl;
- H4() {
+ TAG(TH4) {
str << "Drop log entries in case of overflow: "
<< (Settings->AllowDrop ? "Enabled" : "Disabled");
}
diff --git a/library/cpp/actors/core/log.h b/library/cpp/actors/core/log.h
index c11a7cf3c1..96cbb81958 100644
--- a/library/cpp/actors/core/log.h
+++ b/library/cpp/actors/core/log.h
@@ -239,7 +239,6 @@ namespace NActors {
std::shared_ptr<TLogBackend> LogBackend;
ui64 IgnoredCount = 0;
ui64 PassedCount = 0;
- static TAtomic IsOverflow;
TDuration WakeupInterval{TDuration::Seconds(5)};
std::unique_ptr<ILoggerMetrics> Metrics;
diff --git a/library/cpp/actors/http/http_ut.cpp b/library/cpp/actors/http/http_ut.cpp
index 7a569a08c3..d7d4f5567f 100644
--- a/library/cpp/actors/http/http_ut.cpp
+++ b/library/cpp/actors/http/http_ut.cpp
@@ -379,6 +379,7 @@ CRA/5XcX13GJwHHj6LCoc3sL7mt8qV9HKY2AOZ88mpObzISZxgPpdKCfjsrdm63V
Y_UNIT_TEST(TooLongHeader) {
NActors::TTestActorRuntimeBase actorSystem;
+ actorSystem.SetUseRealInterconnect();
TPortManager portManager;
TIpPort port = portManager.GetTcpPort();
TAutoPtr<NActors::IEventHandle> handle;
diff --git a/library/cpp/actors/interconnect/CMakeLists.darwin.txt b/library/cpp/actors/interconnect/CMakeLists.darwin.txt
index 9bd0c83fce..f73af2defe 100644
--- a/library/cpp/actors/interconnect/CMakeLists.darwin.txt
+++ b/library/cpp/actors/interconnect/CMakeLists.darwin.txt
@@ -7,6 +7,7 @@
find_package(OpenSSL REQUIRED)
+add_subdirectory(mock)
add_library(cpp-actors-interconnect)
target_link_libraries(cpp-actors-interconnect PUBLIC
diff --git a/library/cpp/actors/interconnect/CMakeLists.linux.txt b/library/cpp/actors/interconnect/CMakeLists.linux.txt
index c0e1b39c45..94a7bda34d 100644
--- a/library/cpp/actors/interconnect/CMakeLists.linux.txt
+++ b/library/cpp/actors/interconnect/CMakeLists.linux.txt
@@ -7,6 +7,7 @@
find_package(OpenSSL REQUIRED)
+add_subdirectory(mock)
add_library(cpp-actors-interconnect)
target_link_libraries(cpp-actors-interconnect PUBLIC
diff --git a/library/cpp/actors/interconnect/CMakeLists.txt b/library/cpp/actors/interconnect/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/library/cpp/actors/interconnect/CMakeLists.txt
+++ b/library/cpp/actors/interconnect/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/library/cpp/actors/interconnect/interconnect_handshake.cpp b/library/cpp/actors/interconnect/interconnect_handshake.cpp
index aaa8440d72..d7f657299e 100644
--- a/library/cpp/actors/interconnect/interconnect_handshake.cpp
+++ b/library/cpp/actors/interconnect/interconnect_handshake.cpp
@@ -551,6 +551,7 @@ namespace NActors {
// set up incoming socket
SetupSocket();
+ RegisterInPoller();
// wait for initial request packet
TInitialPacket request;
@@ -878,8 +879,11 @@ namespace NActors {
// start connecting
err = -Socket->Connect(address);
if (err == EINPROGRESS) {
+ RegisterInPoller();
WaitPoller(false, true, "WaitConnect");
err = Socket->GetConnectStatus();
+ } else if (!err) {
+ RegisterInPoller();
}
// check if connection succeeded
@@ -915,9 +919,6 @@ namespace NActors {
// setup send buffer size
Socket->SetSendBufferSize(Common->Settings.GetSendBufferSize());
-
- // register in poller
- RegisterInPoller();
}
void RegisterInPoller() {
diff --git a/library/cpp/actors/interconnect/ut/large.cpp b/library/cpp/actors/interconnect/ut/large.cpp
index ba2a50c6f6..192d733325 100644
--- a/library/cpp/actors/interconnect/ut/large.cpp
+++ b/library/cpp/actors/interconnect/ut/large.cpp
@@ -24,7 +24,7 @@ Y_UNIT_TEST_SUITE(LargeMessage) {
void Bootstrap(const TActorContext& ctx) {
Become(&TThis::StateFunc);
ctx.Send(RecipientActorId, new TEvTest(1, "hello"), IEventHandle::FlagTrackDelivery, 1);
- ctx.Send(RecipientActorId, new TEvTest(2, TString(128 * 1024 * 1024, 'X')), IEventHandle::FlagTrackDelivery, 2);
+ ctx.Send(RecipientActorId, new TEvTest(2, TString(150 * 1024 * 1024, 'X')), IEventHandle::FlagTrackDelivery, 2);
}
void Handle(TEvents::TEvUndelivered::TPtr ev, const TActorContext& ctx) {
diff --git a/library/cpp/actors/wilson/CMakeLists.txt b/library/cpp/actors/wilson/CMakeLists.txt
index 75c7b16dff..31566c2628 100644
--- a/library/cpp/actors/wilson/CMakeLists.txt
+++ b/library/cpp/actors/wilson/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
add_library(cpp-actors-wilson)
target_link_libraries(cpp-actors-wilson PUBLIC
diff --git a/library/cpp/balloc/CMakeLists.txt b/library/cpp/balloc/CMakeLists.txt
index d4ed3b53d2..9f044845ba 100644
--- a/library/cpp/balloc/CMakeLists.txt
+++ b/library/cpp/balloc/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
+add_subdirectory(setup)
add_library(library-cpp-balloc)
target_compile_options(library-cpp-balloc PRIVATE
diff --git a/library/cpp/balloc/lib/CMakeLists.txt b/library/cpp/balloc/lib/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/library/cpp/balloc/lib/CMakeLists.txt
+++ b/library/cpp/balloc/lib/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/library/cpp/blockcodecs/CMakeLists.txt b/library/cpp/blockcodecs/CMakeLists.txt
index 7610f291a0..999004c65a 100644
--- a/library/cpp/blockcodecs/CMakeLists.txt
+++ b/library/cpp/blockcodecs/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(codecs)
+add_subdirectory(core)
add_library(library-cpp-blockcodecs)
target_link_libraries(library-cpp-blockcodecs PUBLIC
diff --git a/library/cpp/blockcodecs/codecs/CMakeLists.txt b/library/cpp/blockcodecs/codecs/CMakeLists.txt
new file mode 100644
index 0000000000..1dc34f79b8
--- /dev/null
+++ b/library/cpp/blockcodecs/codecs/CMakeLists.txt
@@ -0,0 +1,17 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(brotli)
+add_subdirectory(bzip)
+add_subdirectory(fastlz)
+add_subdirectory(legacy_zstd06)
+add_subdirectory(lz4)
+add_subdirectory(lzma)
+add_subdirectory(snappy)
+add_subdirectory(zlib)
+add_subdirectory(zstd)
diff --git a/library/cpp/codecs/CMakeLists.txt b/library/cpp/codecs/CMakeLists.txt
index 54b76fbea9..776e37d335 100644
--- a/library/cpp/codecs/CMakeLists.txt
+++ b/library/cpp/codecs/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(greedy_dict)
add_library(library-cpp-codecs)
target_link_libraries(library-cpp-codecs PUBLIC
diff --git a/library/cpp/containers/CMakeLists.txt b/library/cpp/containers/CMakeLists.txt
new file mode 100644
index 0000000000..cf1ec79fb8
--- /dev/null
+++ b/library/cpp/containers/CMakeLists.txt
@@ -0,0 +1,24 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(2d_array)
+add_subdirectory(atomizer)
+add_subdirectory(bitseq)
+add_subdirectory(compact_vector)
+add_subdirectory(comptrie)
+add_subdirectory(disjoint_interval_tree)
+add_subdirectory(flat_hash)
+add_subdirectory(intrusive_avl_tree)
+add_subdirectory(intrusive_rb_tree)
+add_subdirectory(paged_vector)
+add_subdirectory(ring_buffer)
+add_subdirectory(sorted_vector)
+add_subdirectory(stack_array)
+add_subdirectory(stack_vector)
+add_subdirectory(str_map)
+add_subdirectory(top_keeper)
diff --git a/library/cpp/coroutine/CMakeLists.txt b/library/cpp/coroutine/CMakeLists.txt
new file mode 100644
index 0000000000..e684f539b2
--- /dev/null
+++ b/library/cpp/coroutine/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(engine)
+add_subdirectory(listener)
diff --git a/library/cpp/deprecated/CMakeLists.txt b/library/cpp/deprecated/CMakeLists.txt
new file mode 100644
index 0000000000..3afb649cd0
--- /dev/null
+++ b/library/cpp/deprecated/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(accessors)
+add_subdirectory(atomic)
+add_subdirectory(enum_codegen)
+add_subdirectory(kmp)
+add_subdirectory(split)
diff --git a/library/cpp/digest/CMakeLists.txt b/library/cpp/digest/CMakeLists.txt
new file mode 100644
index 0000000000..7c361872e4
--- /dev/null
+++ b/library/cpp/digest/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(argonish)
+add_subdirectory(crc32c)
+add_subdirectory(lower_case)
+add_subdirectory(md5)
+add_subdirectory(murmur)
+add_subdirectory(old_crc)
+add_subdirectory(sfh)
diff --git a/library/cpp/digest/argonish/CMakeLists.txt b/library/cpp/digest/argonish/CMakeLists.txt
index a110539238..617cc9aa13 100644
--- a/library/cpp/digest/argonish/CMakeLists.txt
+++ b/library/cpp/digest/argonish/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(internal)
add_library(cpp-digest-argonish)
target_link_libraries(cpp-digest-argonish PUBLIC
diff --git a/library/cpp/digest/argonish/internal/CMakeLists.txt b/library/cpp/digest/argonish/internal/CMakeLists.txt
new file mode 100644
index 0000000000..8311b4e2a7
--- /dev/null
+++ b/library/cpp/digest/argonish/internal/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(argon2)
+add_subdirectory(blake2b)
+add_subdirectory(blamka)
+add_subdirectory(proxies)
+add_subdirectory(rotations)
diff --git a/library/cpp/digest/argonish/internal/proxies/CMakeLists.txt b/library/cpp/digest/argonish/internal/proxies/CMakeLists.txt
new file mode 100644
index 0000000000..4ea0d5c2d9
--- /dev/null
+++ b/library/cpp/digest/argonish/internal/proxies/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(avx2)
+add_subdirectory(macro)
+add_subdirectory(ref)
+add_subdirectory(sse2)
+add_subdirectory(sse41)
+add_subdirectory(ssse3)
diff --git a/library/cpp/digest/old_crc/CMakeLists.txt b/library/cpp/digest/old_crc/CMakeLists.txt
index 77debee38f..dedf7adedd 100644
--- a/library/cpp/digest/old_crc/CMakeLists.txt
+++ b/library/cpp/digest/old_crc/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(gencrc)
add_library(cpp-digest-old_crc)
target_link_libraries(cpp-digest-old_crc PUBLIC
diff --git a/library/cpp/digest/old_crc/gencrc/CMakeLists.txt b/library/cpp/digest/old_crc/gencrc/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/library/cpp/digest/old_crc/gencrc/CMakeLists.txt
+++ b/library/cpp/digest/old_crc/gencrc/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/library/cpp/getopt/CMakeLists.txt b/library/cpp/getopt/CMakeLists.txt
index 29ac8b8e2c..7c366f9a33 100644
--- a/library/cpp/getopt/CMakeLists.txt
+++ b/library/cpp/getopt/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(small)
add_library(library-cpp-getopt INTERFACE)
target_link_libraries(library-cpp-getopt INTERFACE
diff --git a/library/cpp/grpc/CMakeLists.txt b/library/cpp/grpc/CMakeLists.txt
new file mode 100644
index 0000000000..28f45865a3
--- /dev/null
+++ b/library/cpp/grpc/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(client)
+add_subdirectory(server)
diff --git a/library/cpp/grpc/server/CMakeLists.txt b/library/cpp/grpc/server/CMakeLists.txt
index eea6892826..0f7e4f6a93 100644
--- a/library/cpp/grpc/server/CMakeLists.txt
+++ b/library/cpp/grpc/server/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(actors)
add_library(cpp-grpc-server)
target_link_libraries(cpp-grpc-server PUBLIC
diff --git a/library/cpp/grpc/server/grpc_request.h b/library/cpp/grpc/server/grpc_request.h
index 5bd8d3902b..bb389af276 100644
--- a/library/cpp/grpc/server/grpc_request.h
+++ b/library/cpp/grpc/server/grpc_request.h
@@ -126,6 +126,7 @@ public:
if (auto guard = Server_->ProtectShutdown()) {
Ref(); //For grpc c runtime
this->Context.AsyncNotifyWhenDone(OnFinishTag.Prepare());
+ OnBeforeCall();
if (RequestCallback_) {
(this->Service->*RequestCallback_)
(&this->Context, Request_,
@@ -148,6 +149,8 @@ public:
}
void DestroyRequest() override {
+ Y_VERIFY(!CallInProgress_, "Unexpected DestroyRequest while another grpc call is still in progress");
+ RequestDestroyed_ = true;
if (RequestRegistered_) {
Server_->DeregisterRequestCtx(this);
RequestRegistered_ = false;
@@ -215,6 +218,8 @@ public:
GRPC_LOG_DEBUG(Logger_, "[%p] finished streaming Name# %s peer# %s (pushed to grpc)", this, Name_,
this->Context.peer().c_str());
+ OnBeforeCall();
+ Finished_ = true;
StreamWriter_->Finish(grpc::Status::OK, GetGRpcTag());
};
StreamAdaptor_->Enqueue(std::move(cb), false);
@@ -241,6 +246,19 @@ private:
}
}
+ void OnBeforeCall() {
+ Y_VERIFY(!RequestDestroyed_, "Cannot start grpc calls after request is already destroyed");
+ Y_VERIFY(!Finished_, "Cannot start grpc calls after request is finished");
+ bool wasInProgress = std::exchange(CallInProgress_, true);
+ Y_VERIFY(!wasInProgress, "Another grpc call is already in progress");
+ }
+
+ void OnAfterCall() {
+ Y_VERIFY(!RequestDestroyed_, "Finished grpc call after request is already destroyed");
+ bool wasInProgress = std::exchange(CallInProgress_, false);
+ Y_VERIFY(wasInProgress, "Finished grpc call that was not in progress");
+ }
+
void WriteDataOk(NProtoBuf::Message* resp) {
auto makeResponseString = [&] {
TString x;
@@ -257,6 +275,8 @@ private:
StateFunc_ = &TThis::SetFinishDone;
ResponseSize = sz;
Y_VERIFY(this->Context.c_call());
+ OnBeforeCall();
+ Finished_ = true;
Writer_->Finish(TUniversalResponseRef<TOut>(resp), grpc::Status::OK, GetGRpcTag());
} else {
GRPC_LOG_DEBUG(Logger_, "[%p] issuing response Name# %s data# %s peer# %s (enqueued)",
@@ -270,6 +290,7 @@ private:
this, Name_, makeResponseString().data(), this->Context.peer().c_str());
StateFunc_ = &TThis::NextReply;
ResponseSize += sz;
+ OnBeforeCall();
StreamWriter_->Write(*uResp, GetGRpcTag());
};
StreamAdaptor_->Enqueue(std::move(cb), false);
@@ -283,6 +304,8 @@ private:
this->Context.peer().c_str());
StateFunc_ = &TThis::SetFinishDone;
ResponseSize = sz;
+ OnBeforeCall();
+ Finished_ = true;
Writer_->Finish(TUniversalResponseRef<TOut>(resp), grpc::Status::OK, GetGRpcTag());
} else {
GRPC_LOG_DEBUG(Logger_, "[%p] issuing response Name# %s data# byteString peer# %s (enqueued)", this, Name_,
@@ -296,6 +319,7 @@ private:
this, Name_, this->Context.peer().c_str());
StateFunc_ = &TThis::NextReply;
ResponseSize += sz;
+ OnBeforeCall();
StreamWriter_->Write(*uResp, GetGRpcTag());
};
StreamAdaptor_->Enqueue(std::move(cb), false);
@@ -315,6 +339,8 @@ private:
Name_, msg.c_str(), this->Context.peer().c_str(), (int)code);
StateFunc_ = &TThis::SetFinishError;
TOut resp;
+ OnBeforeCall();
+ Finished_ = true;
Writer_->Finish(TUniversalResponseRef<TOut>(&resp), grpc::Status(code, msg), GetGRpcTag());
} else {
GRPC_LOG_DEBUG(Logger_, "[%p] issuing response Name# %s nodata (%s) peer# %s, grpc status# (%d)"
@@ -324,6 +350,8 @@ private:
" (pushed to grpc)", this, Name_, msg.c_str(),
this->Context.peer().c_str(), (int)code);
StateFunc_ = &TThis::SetFinishError;
+ OnBeforeCall();
+ Finished_ = true;
StreamWriter_->Finish(grpc::Status(code, msg), GetGRpcTag());
};
StreamAdaptor_->Enqueue(std::move(cb), urgent);
@@ -331,6 +359,8 @@ private:
}
bool SetRequestDone(bool ok) {
+ OnAfterCall();
+
auto makeRequestString = [&] {
TString resp;
if (ok) {
@@ -398,6 +428,8 @@ private:
}
bool NextReply(bool ok) {
+ OnAfterCall();
+
auto logCb = [this, ok](int left) {
GRPC_LOG_DEBUG(Logger_, "[%p] ready for next reply Name# %s ok# %s peer# %s left# %d", this, Name_,
ok ? "true" : "false", this->Context.peer().c_str(), left);
@@ -423,6 +455,8 @@ private:
}
bool SetFinishDone(bool ok) {
+ OnAfterCall();
+
GRPC_LOG_DEBUG(Logger_, "[%p] finished request Name# %s ok# %s peer# %s", this, Name_,
ok ? "true" : "false", this->Context.peer().c_str());
//PrintBackTrace();
@@ -433,6 +467,8 @@ private:
}
bool SetFinishError(bool ok) {
+ OnAfterCall();
+
GRPC_LOG_DEBUG(Logger_, "[%p] finished request with error Name# %s ok# %s peer# %s", this, Name_,
ok ? "true" : "false", this->Context.peer().c_str());
if (!SkipUpdateCountersOnError) {
@@ -502,6 +538,9 @@ private:
THPTimer RequestTimer;
TAuthState AuthState_ = 0;
bool RequestRegistered_ = false;
+ bool RequestDestroyed_ = false;
+ bool CallInProgress_ = false;
+ bool Finished_ = false;
using TFixedEvent = TQueueFixedEvent<TGRpcRequestImpl>;
TFixedEvent OnFinishTag = { this, &TGRpcRequestImpl::OnFinish };
diff --git a/library/cpp/histogram/CMakeLists.txt b/library/cpp/histogram/CMakeLists.txt
new file mode 100644
index 0000000000..0a062c1029
--- /dev/null
+++ b/library/cpp/histogram/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(adaptive)
+add_subdirectory(hdr)
diff --git a/library/cpp/histogram/adaptive/CMakeLists.txt b/library/cpp/histogram/adaptive/CMakeLists.txt
index 8aeaa59dc2..4b8b25ac3f 100644
--- a/library/cpp/histogram/adaptive/CMakeLists.txt
+++ b/library/cpp/histogram/adaptive/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
add_library(cpp-histogram-adaptive)
target_link_libraries(cpp-histogram-adaptive PUBLIC
diff --git a/library/cpp/html/CMakeLists.txt b/library/cpp/html/CMakeLists.txt
new file mode 100644
index 0000000000..6489ac4594
--- /dev/null
+++ b/library/cpp/html/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(escape)
+add_subdirectory(pcdata)
diff --git a/library/cpp/http/CMakeLists.txt b/library/cpp/http/CMakeLists.txt
new file mode 100644
index 0000000000..44fdf1d060
--- /dev/null
+++ b/library/cpp/http/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(fetch)
+add_subdirectory(io)
+add_subdirectory(misc)
+add_subdirectory(server)
diff --git a/library/cpp/json/CMakeLists.txt b/library/cpp/json/CMakeLists.txt
index ca36c8f305..7b11a2bf41 100644
--- a/library/cpp/json/CMakeLists.txt
+++ b/library/cpp/json/CMakeLists.txt
@@ -6,6 +6,11 @@
# original buildsystem will not be accepted.
+add_subdirectory(common)
+add_subdirectory(easy_parse)
+add_subdirectory(fast_sax)
+add_subdirectory(writer)
+add_subdirectory(yson)
add_library(library-cpp-json)
target_link_libraries(library-cpp-json PUBLIC
diff --git a/library/cpp/lfalloc/CMakeLists.darwin.txt b/library/cpp/lfalloc/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..3c17261bd6
--- /dev/null
+++ b/library/cpp/lfalloc/CMakeLists.darwin.txt
@@ -0,0 +1,23 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(alloc_profiler)
+add_subdirectory(dbg_info)
+add_subdirectory(yt)
+
+add_library(library-cpp-lfalloc)
+target_compile_options(library-cpp-lfalloc PRIVATE
+ -Wno-everything
+)
+target_link_libraries(library-cpp-lfalloc PUBLIC
+ contrib-libs-cxxsupp
+ cpp-malloc-api
+)
+target_sources(library-cpp-lfalloc PRIVATE
+ ${CMAKE_SOURCE_DIR}/library/cpp/lfalloc/lf_allocX64.cpp
+)
diff --git a/library/cpp/lfalloc/CMakeLists.linux.txt b/library/cpp/lfalloc/CMakeLists.linux.txt
new file mode 100644
index 0000000000..d3171b42df
--- /dev/null
+++ b/library/cpp/lfalloc/CMakeLists.linux.txt
@@ -0,0 +1,22 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(alloc_profiler)
+add_subdirectory(dbg_info)
+
+add_library(library-cpp-lfalloc)
+target_compile_options(library-cpp-lfalloc PRIVATE
+ -Wno-everything
+)
+target_link_libraries(library-cpp-lfalloc PUBLIC
+ contrib-libs-cxxsupp
+ cpp-malloc-api
+)
+target_sources(library-cpp-lfalloc PRIVATE
+ ${CMAKE_SOURCE_DIR}/library/cpp/lfalloc/lf_allocX64.cpp
+)
diff --git a/library/cpp/lfalloc/CMakeLists.txt b/library/cpp/lfalloc/CMakeLists.txt
index 9564ed7af0..dbfe6fa2c4 100644
--- a/library/cpp/lfalloc/CMakeLists.txt
+++ b/library/cpp/lfalloc/CMakeLists.txt
@@ -6,15 +6,8 @@
# original buildsystem will not be accepted.
-
-add_library(library-cpp-lfalloc)
-target_compile_options(library-cpp-lfalloc PRIVATE
- -Wno-everything
-)
-target_link_libraries(library-cpp-lfalloc PUBLIC
- contrib-libs-cxxsupp
- cpp-malloc-api
-)
-target_sources(library-cpp-lfalloc PRIVATE
- ${CMAKE_SOURCE_DIR}/library/cpp/lfalloc/lf_allocX64.cpp
-)
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/library/cpp/logger/CMakeLists.txt b/library/cpp/logger/CMakeLists.txt
index be8b8e4ad1..07d54ae816 100644
--- a/library/cpp/logger/CMakeLists.txt
+++ b/library/cpp/logger/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(global)
add_library(library-cpp-logger)
target_link_libraries(library-cpp-logger PUBLIC
diff --git a/library/cpp/lwtrace/CMakeLists.txt b/library/cpp/lwtrace/CMakeLists.txt
index ea12841d58..4e5a2aab55 100644
--- a/library/cpp/lwtrace/CMakeLists.txt
+++ b/library/cpp/lwtrace/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(mon)
+add_subdirectory(protos)
add_library(library-cpp-lwtrace)
target_link_libraries(library-cpp-lwtrace PUBLIC
diff --git a/library/cpp/lwtrace/mon/CMakeLists.txt b/library/cpp/lwtrace/mon/CMakeLists.txt
index ac651febeb..50bdef36cb 100644
--- a/library/cpp/lwtrace/mon/CMakeLists.txt
+++ b/library/cpp/lwtrace/mon/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(analytics)
add_library(cpp-lwtrace-mon)
target_link_libraries(cpp-lwtrace-mon PUBLIC
diff --git a/library/cpp/malloc/CMakeLists.darwin.txt b/library/cpp/malloc/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..773e71fc8f
--- /dev/null
+++ b/library/cpp/malloc/CMakeLists.darwin.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(api)
+add_subdirectory(jemalloc)
diff --git a/library/cpp/malloc/CMakeLists.linux.txt b/library/cpp/malloc/CMakeLists.linux.txt
new file mode 100644
index 0000000000..b68a3a50a1
--- /dev/null
+++ b/library/cpp/malloc/CMakeLists.linux.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(api)
+add_subdirectory(jemalloc)
+add_subdirectory(tcmalloc)
diff --git a/library/cpp/malloc/CMakeLists.txt b/library/cpp/malloc/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/library/cpp/malloc/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/library/cpp/malloc/tcmalloc/CMakeLists.txt b/library/cpp/malloc/tcmalloc/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/library/cpp/malloc/tcmalloc/CMakeLists.txt
+++ b/library/cpp/malloc/tcmalloc/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/library/cpp/messagebus/CMakeLists.txt b/library/cpp/messagebus/CMakeLists.txt
index a237adaef8..9f0f8baf67 100644
--- a/library/cpp/messagebus/CMakeLists.txt
+++ b/library/cpp/messagebus/CMakeLists.txt
@@ -6,6 +6,13 @@
# original buildsystem will not be accepted.
+add_subdirectory(actor)
+add_subdirectory(config)
+add_subdirectory(monitoring)
+add_subdirectory(oldmodule)
+add_subdirectory(protobuf)
+add_subdirectory(scheduler)
+add_subdirectory(www)
add_library(library-cpp-messagebus)
target_link_libraries(library-cpp-messagebus PUBLIC
diff --git a/library/cpp/mime/CMakeLists.txt b/library/cpp/mime/CMakeLists.txt
new file mode 100644
index 0000000000..e9367ea4a9
--- /dev/null
+++ b/library/cpp/mime/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(types)
diff --git a/library/cpp/monlib/CMakeLists.txt b/library/cpp/monlib/CMakeLists.txt
new file mode 100644
index 0000000000..f618762aa8
--- /dev/null
+++ b/library/cpp/monlib/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(deprecated)
+add_subdirectory(dynamic_counters)
+add_subdirectory(encode)
+add_subdirectory(exception)
+add_subdirectory(messagebus)
+add_subdirectory(metrics)
+add_subdirectory(service)
diff --git a/library/cpp/monlib/deprecated/CMakeLists.txt b/library/cpp/monlib/deprecated/CMakeLists.txt
new file mode 100644
index 0000000000..b413e0df87
--- /dev/null
+++ b/library/cpp/monlib/deprecated/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(json)
diff --git a/library/cpp/monlib/dynamic_counters/CMakeLists.txt b/library/cpp/monlib/dynamic_counters/CMakeLists.txt
index e7bd3b4597..e8dacd3a61 100644
--- a/library/cpp/monlib/dynamic_counters/CMakeLists.txt
+++ b/library/cpp/monlib/dynamic_counters/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(percentile)
add_library(cpp-monlib-dynamic_counters)
target_link_libraries(cpp-monlib-dynamic_counters PUBLIC
diff --git a/library/cpp/monlib/dynamic_counters/page.cpp b/library/cpp/monlib/dynamic_counters/page.cpp
index b116adfdef..223a4448a8 100644
--- a/library/cpp/monlib/dynamic_counters/page.cpp
+++ b/library/cpp/monlib/dynamic_counters/page.cpp
@@ -123,7 +123,7 @@ void TDynamicCountersPage::BeforePre(IMonHttpRequest& request) {
out << " for <a href='https://wiki.yandex-team.ru/solomon/'>Solomon</a>";
}
- H5() {
+ TAG(TH5) {
out << "Counters subgroups";
}
UL() {
@@ -136,7 +136,7 @@ void TDynamicCountersPage::BeforePre(IMonHttpRequest& request) {
});
}
- H4() {
+ TAG(TH4) {
out << "Counters as text";
}
}
diff --git a/library/cpp/monlib/encode/CMakeLists.txt b/library/cpp/monlib/encode/CMakeLists.txt
index c00a5530e3..539c9b07f3 100644
--- a/library/cpp/monlib/encode/CMakeLists.txt
+++ b/library/cpp/monlib/encode/CMakeLists.txt
@@ -6,6 +6,12 @@
# original buildsystem will not be accepted.
+add_subdirectory(buffered)
+add_subdirectory(json)
+add_subdirectory(legacy_protobuf)
+add_subdirectory(prometheus)
+add_subdirectory(spack)
+add_subdirectory(text)
add_library(cpp-monlib-encode)
target_link_libraries(cpp-monlib-encode PUBLIC
diff --git a/library/cpp/monlib/encode/legacy_protobuf/CMakeLists.txt b/library/cpp/monlib/encode/legacy_protobuf/CMakeLists.txt
new file mode 100644
index 0000000000..dde515d0db
--- /dev/null
+++ b/library/cpp/monlib/encode/legacy_protobuf/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(protos)
diff --git a/library/cpp/monlib/service/CMakeLists.txt b/library/cpp/monlib/service/CMakeLists.txt
index db4bf963ff..24bc76ad29 100644
--- a/library/cpp/monlib/service/CMakeLists.txt
+++ b/library/cpp/monlib/service/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(pages)
add_library(cpp-monlib-service)
target_link_libraries(cpp-monlib-service PUBLIC
diff --git a/library/cpp/monlib/service/pages/CMakeLists.txt b/library/cpp/monlib/service/pages/CMakeLists.txt
index 36b85fd379..cc2387ede1 100644
--- a/library/cpp/monlib/service/pages/CMakeLists.txt
+++ b/library/cpp/monlib/service/pages/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(tablesorter)
add_library(monlib-service-pages)
target_link_libraries(monlib-service-pages PUBLIC
diff --git a/library/cpp/monlib/service/pages/templates.h b/library/cpp/monlib/service/pages/templates.h
index b4656f059f..ab1d91c54e 100644
--- a/library/cpp/monlib/service/pages/templates.h
+++ b/library/cpp/monlib/service/pages/templates.h
@@ -13,14 +13,14 @@
label \
:
-#define TAG(name) WITH_SCOPED(tmp, NMonitoring::name(__stream))
-#define TAG_CLASS(name, cls) WITH_SCOPED(tmp, NMonitoring::name(__stream, cls))
-#define TAG_CLASS_STYLE(name, cls, style) WITH_SCOPED(tmp, NMonitoring::name(__stream, {{"class", cls}, {"style", style}}))
-#define TAG_CLASS_ID(name, cls, id) WITH_SCOPED(tmp, NMonitoring::name(__stream, cls, "", id))
-#define TAG_CLASS_FOR(name, cls, for0) WITH_SCOPED(tmp, NMonitoring::name(__stream, cls, for0))
-#define TAG_ATTRS(name, ...) WITH_SCOPED(tmp, NMonitoring::name(__stream, ##__VA_ARGS__))
+#define TAG(name) WITH_SCOPED(tmp, ::NMonitoring::name(__stream))
+#define TAG_CLASS(name, cls) WITH_SCOPED(tmp, ::NMonitoring::name(__stream, cls))
+#define TAG_CLASS_STYLE(name, cls, style) WITH_SCOPED(tmp, ::NMonitoring::name(__stream, {{"class", cls}, {"style", style}}))
+#define TAG_CLASS_ID(name, cls, id) WITH_SCOPED(tmp, ::NMonitoring::name(__stream, cls, "", id))
+#define TAG_CLASS_FOR(name, cls, for0) WITH_SCOPED(tmp, ::NMonitoring::name(__stream, cls, for0))
+#define TAG_ATTRS(name, ...) WITH_SCOPED(tmp, ::NMonitoring::name(__stream, ##__VA_ARGS__))
-#define HTML(str) WITH_SCOPED(__stream, NMonitoring::TOutputStreamRef(str))
+#define HTML(str) WITH_SCOPED(__stream, ::NMonitoring::TOutputStreamRef(str))
#define HEAD() TAG(THead)
#define BODY() TAG(TBody)
@@ -55,17 +55,11 @@
#define PARA() TAG(TPara)
#define PARA_CLASS(cls) TAG_CLASS(TPara, cls)
-#define H1() TAG(TH1)
#define H1_CLASS(cls) TAG_CLASS(TH1, cls)
-#define H2() TAG(TH2)
#define H2_CLASS(cls) TAG_CLASS(TH2, cls)
-#define H3() TAG(TH3)
#define H3_CLASS(cls) TAG_CLASS(TH3, cls)
-#define H4() TAG(TH4)
#define H4_CLASS(cls) TAG_CLASS(TH4, cls)
-#define H5() TAG(TH5)
#define H5_CLASS(cls) TAG_CLASS(TH5, cls)
-#define H6() TAG(TH6)
#define H6_CLASS(cls) TAG_CLASS(TH6, cls)
#define SMALL() TAG(TSMALL)
@@ -92,10 +86,10 @@
#define HTML_OUTPUT_TIME_PARAM(str, param) str << #param << ": " << ToStringLocalTimeUpToSeconds(param) << "<br/>"
#define COLLAPSED_BUTTON_CONTENT(targetId, buttonText) \
- WITH_SCOPED(tmp, NMonitoring::TCollapsedButton(__stream, targetId, buttonText))
+ WITH_SCOPED(tmp, ::NMonitoring::TCollapsedButton(__stream, targetId, buttonText))
#define HREF(path) \
- WITH_SCOPED(tmp, NMonitoring::THref(__stream, path))
+ WITH_SCOPED(tmp, ::NMonitoring::THref(__stream, path))
namespace NMonitoring {
struct THref {
diff --git a/library/cpp/on_disk/CMakeLists.txt b/library/cpp/on_disk/CMakeLists.txt
new file mode 100644
index 0000000000..461a4b7a97
--- /dev/null
+++ b/library/cpp/on_disk/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(chunks)
diff --git a/library/cpp/openssl/CMakeLists.txt b/library/cpp/openssl/CMakeLists.txt
new file mode 100644
index 0000000000..392ccc8eb4
--- /dev/null
+++ b/library/cpp/openssl/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(holders)
+add_subdirectory(init)
+add_subdirectory(io)
+add_subdirectory(method)
diff --git a/library/cpp/protobuf/CMakeLists.txt b/library/cpp/protobuf/CMakeLists.txt
new file mode 100644
index 0000000000..41b18218f1
--- /dev/null
+++ b/library/cpp/protobuf/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(interop)
+add_subdirectory(json)
+add_subdirectory(util)
diff --git a/library/cpp/protobuf/json/json2proto.cpp b/library/cpp/protobuf/json/json2proto.cpp
index 640c10f5a5..92bfe9755b 100644
--- a/library/cpp/protobuf/json/json2proto.cpp
+++ b/library/cpp/protobuf/json/json2proto.cpp
@@ -377,10 +377,9 @@ namespace NProtobufJson {
return;
}
- Y_ENSURE(json.IsMap(), "expected json map");
-
const google::protobuf::Descriptor* descriptor = proto.GetDescriptor();
Y_ASSERT(!!descriptor);
+ Y_ENSURE(json.IsMap(), "Failed to merge json to proto for message: " << descriptor->full_name() << ", expected json map.");
for (int f = 0, endF = descriptor->field_count(); f < endF; ++f) {
const google::protobuf::FieldDescriptor* field = descriptor->field(f);
diff --git a/library/cpp/protobuf/util/CMakeLists.txt b/library/cpp/protobuf/util/CMakeLists.txt
index d25187fbdb..d04f95d395 100644
--- a/library/cpp/protobuf/util/CMakeLists.txt
+++ b/library/cpp/protobuf/util/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(proto)
add_library(cpp-protobuf-util)
target_link_libraries(cpp-protobuf-util PUBLIC
diff --git a/library/cpp/regex/CMakeLists.txt b/library/cpp/regex/CMakeLists.txt
new file mode 100644
index 0000000000..0eebca8708
--- /dev/null
+++ b/library/cpp/regex/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(hyperscan)
+add_subdirectory(pcre)
+add_subdirectory(pire)
diff --git a/library/cpp/retry/CMakeLists.txt b/library/cpp/retry/CMakeLists.txt
index cda3814e3f..3868f3975e 100644
--- a/library/cpp/retry/CMakeLists.txt
+++ b/library/cpp/retry/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
add_library(library-cpp-retry)
target_link_libraries(library-cpp-retry PUBLIC
diff --git a/library/cpp/streams/CMakeLists.txt b/library/cpp/streams/CMakeLists.txt
new file mode 100644
index 0000000000..bdb896c6ed
--- /dev/null
+++ b/library/cpp/streams/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(brotli)
+add_subdirectory(bzip2)
+add_subdirectory(lzma)
+add_subdirectory(zc_memory_input)
+add_subdirectory(zstd)
diff --git a/library/cpp/string_utils/CMakeLists.txt b/library/cpp/string_utils/CMakeLists.txt
new file mode 100644
index 0000000000..d256782733
--- /dev/null
+++ b/library/cpp/string_utils/CMakeLists.txt
@@ -0,0 +1,17 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(base64)
+add_subdirectory(indent_text)
+add_subdirectory(levenshtein_diff)
+add_subdirectory(parse_size)
+add_subdirectory(quote)
+add_subdirectory(relaxed_escaper)
+add_subdirectory(scan)
+add_subdirectory(url)
+add_subdirectory(ztstrbuf)
diff --git a/library/cpp/testing/CMakeLists.txt b/library/cpp/testing/CMakeLists.txt
new file mode 100644
index 0000000000..8a69d51279
--- /dev/null
+++ b/library/cpp/testing/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(benchmark)
+add_subdirectory(common)
+add_subdirectory(gmock_in_unittest)
+add_subdirectory(gtest_extensions)
+add_subdirectory(hook)
+add_subdirectory(unittest)
+add_subdirectory(unittest_main)
diff --git a/library/cpp/testing/benchmark/CMakeLists.txt b/library/cpp/testing/benchmark/CMakeLists.txt
index 2df1ac1d91..359c73c5f4 100644
--- a/library/cpp/testing/benchmark/CMakeLists.txt
+++ b/library/cpp/testing/benchmark/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(main)
add_library(cpp-testing-benchmark)
target_link_libraries(cpp-testing-benchmark PUBLIC
diff --git a/library/cpp/threading/CMakeLists.txt b/library/cpp/threading/CMakeLists.txt
new file mode 100644
index 0000000000..1246829e67
--- /dev/null
+++ b/library/cpp/threading/CMakeLists.txt
@@ -0,0 +1,18 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(atomic)
+add_subdirectory(chunk_queue)
+add_subdirectory(equeue)
+add_subdirectory(future)
+add_subdirectory(light_rw_lock)
+add_subdirectory(local_executor)
+add_subdirectory(poor_man_openmp)
+add_subdirectory(queue)
+add_subdirectory(skip_list)
+add_subdirectory(task_scheduler)
diff --git a/library/cpp/unicode/CMakeLists.txt b/library/cpp/unicode/CMakeLists.txt
new file mode 100644
index 0000000000..915ed345c1
--- /dev/null
+++ b/library/cpp/unicode/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(normalization)
+add_subdirectory(punycode)
diff --git a/library/cpp/xml/CMakeLists.txt b/library/cpp/xml/CMakeLists.txt
new file mode 100644
index 0000000000..504e1326a6
--- /dev/null
+++ b/library/cpp/xml/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(document)
+add_subdirectory(init)
diff --git a/library/cpp/yaml/CMakeLists.txt b/library/cpp/yaml/CMakeLists.txt
new file mode 100644
index 0000000000..df58c83133
--- /dev/null
+++ b/library/cpp/yaml/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(as)
diff --git a/library/cpp/yson/CMakeLists.txt b/library/cpp/yson/CMakeLists.txt
index 7933584935..43fd932e00 100644
--- a/library/cpp/yson/CMakeLists.txt
+++ b/library/cpp/yson/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(json)
+add_subdirectory(node)
add_library(library-cpp-yson)
target_link_libraries(library-cpp-yson PUBLIC
diff --git a/library/cpp/yt/CMakeLists.txt b/library/cpp/yt/CMakeLists.txt
new file mode 100644
index 0000000000..c90bdf25de
--- /dev/null
+++ b/library/cpp/yt/CMakeLists.txt
@@ -0,0 +1,18 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(assert)
+add_subdirectory(coding)
+add_subdirectory(exception)
+add_subdirectory(malloc)
+add_subdirectory(memory)
+add_subdirectory(misc)
+add_subdirectory(small_containers)
+add_subdirectory(string)
+add_subdirectory(yson)
+add_subdirectory(yson_string)
diff --git a/library/cpp/ytalloc/CMakeLists.txt b/library/cpp/ytalloc/CMakeLists.txt
new file mode 100644
index 0000000000..0a386de02f
--- /dev/null
+++ b/library/cpp/ytalloc/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(api)
diff --git a/library/python/cores/__init__.py b/library/python/cores/__init__.py
index e3eea6ab5d..e99b8f65df 100644
--- a/library/python/cores/__init__.py
+++ b/library/python/cores/__init__.py
@@ -4,6 +4,7 @@ import os
import re
import glob
import socket
+import sys
import logging
import platform
import subprocess
@@ -93,7 +94,10 @@ def recover_core_dump_file(binary_path, cwd, pid, core_pattern=None):
oct(stat.S_ISVTX),
)
logger.debug("Search for core dump files match pattern '%s' in '%s'", pattern.mask, pattern.path)
- cores = glob.glob(os.path.join(pattern.path, pattern.mask))
+ escaped_pattern_path = pattern.path
+ if sys.version_info[0] == 3:
+ escaped_pattern_path = glob.escape(pattern.path)
+ cores = glob.glob(os.path.join(escaped_pattern_path, pattern.mask))
files = os.listdir(pattern.path)
logger.debug(
"Matched core dump files (%d/%d): [%s] (mismatched samples: %s)",
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
new file mode 100644
index 0000000000..b0e6ac4979
--- /dev/null
+++ b/tools/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(enum_parser)
+add_subdirectory(rescompiler)
diff --git a/tools/enum_parser/CMakeLists.txt b/tools/enum_parser/CMakeLists.txt
new file mode 100644
index 0000000000..d0b909e560
--- /dev/null
+++ b/tools/enum_parser/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(enum_parser)
+add_subdirectory(enum_serialization_runtime)
+add_subdirectory(parse_enum)
diff --git a/tools/enum_parser/enum_parser/CMakeLists.txt b/tools/enum_parser/enum_parser/CMakeLists.txt
new file mode 100644
index 0000000000..3478d41cce
--- /dev/null
+++ b/tools/enum_parser/enum_parser/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(bin)
diff --git a/tools/enum_parser/enum_parser/bin/CMakeLists.txt b/tools/enum_parser/enum_parser/bin/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/tools/enum_parser/enum_parser/bin/CMakeLists.txt
+++ b/tools/enum_parser/enum_parser/bin/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/tools/enum_parser/enum_parser/bin/ya.make b/tools/enum_parser/enum_parser/bin/ya.make
deleted file mode 100644
index 09e47ee1c0..0000000000
--- a/tools/enum_parser/enum_parser/bin/ya.make
+++ /dev/null
@@ -1,23 +0,0 @@
-OWNER(
- g:util
- mvel
-)
-
-PROGRAM(enum_parser)
-
-SRCDIR(
- tools/enum_parser/enum_parser
-)
-
-SRCS(
- main.cpp
-)
-
-INCLUDE(${ARCADIA_ROOT}/build/prebuilt/tools/enum_parser/enum_parser/ya.make.induced_deps)
-
-PEERDIR(
- library/cpp/getopt/small
- tools/enum_parser/parse_enum
-)
-
-END()
diff --git a/tools/fix_elf/bin/ya.make b/tools/fix_elf/bin/ya.make
deleted file mode 100644
index 8348c8b742..0000000000
--- a/tools/fix_elf/bin/ya.make
+++ /dev/null
@@ -1,17 +0,0 @@
-OWNER(somov)
-
-PROGRAM(fix_elf)
-
-SRCDIR(
- tools/fix_elf
-)
-
-SRCS(
- patch.cpp
-)
-
-PEERDIR(
- library/cpp/getopt/small
-)
-
-END()
diff --git a/tools/rescompiler/CMakeLists.txt b/tools/rescompiler/CMakeLists.txt
new file mode 100644
index 0000000000..3478d41cce
--- /dev/null
+++ b/tools/rescompiler/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(bin)
diff --git a/tools/rescompiler/bin/CMakeLists.txt b/tools/rescompiler/bin/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/tools/rescompiler/bin/CMakeLists.txt
+++ b/tools/rescompiler/bin/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/tools/rescompressor/bin/ya.make b/tools/rescompressor/bin/ya.make
deleted file mode 100644
index 0cf12b4918..0000000000
--- a/tools/rescompressor/bin/ya.make
+++ /dev/null
@@ -1,17 +0,0 @@
-OWNER(heretic g:ymake)
-
-PROGRAM(rescompressor)
-
-PEERDIR(
- library/cpp/resource
-)
-
-SRCDIR(
- tools/rescompressor
-)
-
-SRCS(
- main.cpp
-)
-
-END()
diff --git a/tools/rorescompiler/bin/ya.make b/tools/rorescompiler/bin/ya.make
deleted file mode 100644
index f9d20f4696..0000000000
--- a/tools/rorescompiler/bin/ya.make
+++ /dev/null
@@ -1,19 +0,0 @@
-OWNER(heretic g:ymake)
-
-PROGRAM(rorescompiler)
-
-PEERDIR(
- library/cpp/resource
-)
-
-SRCDIR(
- tools/rorescompiler
-)
-
-SRCS(
- main.cpp
-)
-
-INCLUDE(${ARCADIA_ROOT}/build/prebuilt/tools/rorescompiler/ya.make.induced_deps)
-
-END()
diff --git a/util/CMakeLists.darwin.txt b/util/CMakeLists.darwin.txt
index 99dd3df2e9..2d6f8d3256 100644
--- a/util/CMakeLists.darwin.txt
+++ b/util/CMakeLists.darwin.txt
@@ -7,6 +7,8 @@
find_package(ZLIB REQUIRED)
+add_subdirectory(charset)
+add_subdirectory(draft)
add_library(yutil)
target_compile_options(yutil PRIVATE
diff --git a/util/CMakeLists.linux.txt b/util/CMakeLists.linux.txt
index f3035c0bb1..406d454b11 100644
--- a/util/CMakeLists.linux.txt
+++ b/util/CMakeLists.linux.txt
@@ -7,6 +7,8 @@
find_package(ZLIB REQUIRED)
+add_subdirectory(charset)
+add_subdirectory(draft)
add_library(yutil)
target_compile_options(yutil PRIVATE
diff --git a/util/CMakeLists.txt b/util/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/util/CMakeLists.txt
+++ b/util/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/util/datetime/cputimer.cpp b/util/datetime/cputimer.cpp
index a032dbd3df..32ccfd4740 100644
--- a/util/datetime/cputimer.cpp
+++ b/util/datetime/cputimer.cpp
@@ -49,10 +49,27 @@ TDuration CyclesToDuration(ui64 cycles) {
return TDuration::MicroSeconds(cycles * 1000000 / GetCyclesPerSecond());
}
+TDuration CyclesToDurationSafe(ui64 cycles)
+{
+ constexpr ui64 cyclesLimit = std::numeric_limits<ui64>::max() / 1000000;
+ if (cycles <= cyclesLimit) {
+ return CyclesToDuration(cycles);
+ }
+ return TDuration::MicroSeconds(cycles / GetCyclesPerSecond() * 1000000);
+}
+
ui64 DurationToCycles(TDuration duration) {
return duration.MicroSeconds() * GetCyclesPerSecond() / 1000000;
}
+ui64 DurationToCyclesSafe(TDuration duration)
+{
+ if (duration.MicroSeconds() <= std::numeric_limits<ui64>::max() / GetCyclesPerSecond()) {
+ return DurationToCycles(duration);
+ }
+ return duration.MicroSeconds() / 1000000 * GetCyclesPerSecond();
+}
+
TPrecisionTimer::TPrecisionTimer()
: Start(::GetCycleCount())
{
diff --git a/util/datetime/cputimer.h b/util/datetime/cputimer.h
index 7d38d5bdb3..b24d6fae8e 100644
--- a/util/datetime/cputimer.h
+++ b/util/datetime/cputimer.h
@@ -62,6 +62,10 @@ void SetCyclesPerSecond(ui64 cycles);
TDuration CyclesToDuration(ui64 cycles);
ui64 DurationToCycles(TDuration duration);
+// NBS-3400 - CyclesToDuration and DurationToCycles may overflow for long running events
+TDuration CyclesToDurationSafe(ui64 cycles);
+ui64 DurationToCyclesSafe(TDuration duration);
+
class TPrecisionTimer {
private:
ui64 Start = 0;
diff --git a/util/datetime/cputimer_ut.cpp b/util/datetime/cputimer_ut.cpp
new file mode 100644
index 0000000000..21a657d5c7
--- /dev/null
+++ b/util/datetime/cputimer_ut.cpp
@@ -0,0 +1,10 @@
+#include <library/cpp/testing/unittest/registar.h>
+
+#include "cputimer.h"
+
+Y_UNIT_TEST_SUITE(TestCpuTimerSuite) {
+ Y_UNIT_TEST(TestCyclesToDurationSafe) {
+ ui64 cycles = DurationToCyclesSafe(TDuration::Hours(24));
+ UNIT_ASSERT_VALUES_EQUAL(24, CyclesToDurationSafe(cycles).Hours());
+ }
+}
diff --git a/util/system/hostname.cpp b/util/system/hostname.cpp
index 386f646d6b..e377910d5c 100644
--- a/util/system/hostname.cpp
+++ b/util/system/hostname.cpp
@@ -34,8 +34,6 @@ namespace {
struct TFQDNHostNameHolder {
inline TFQDNHostNameHolder() {
- struct addrinfo hints;
- struct addrinfo* ais{nullptr};
char buf[1024];
memset(buf, 0, sizeof(buf));
@@ -44,20 +42,41 @@ namespace {
ythrow TSystemError() << "can not get hostname";
}
+#ifdef _darwin_
+ // On Darwin gethostname returns fqdn, see hostname.c in shell_cmds:
+ // https://github.com/apple-oss-distributions/shell_cmds/blob/main/hostname/hostname.c
+ // There are macs in the wild that don't have fqdn hostnames, but
+ // which have search domains in their resolv.conf, so any attempt to
+ // resolve AI_CANONNAME for the short hostname will result in the
+ // EAI_NONAME error.
+ // It seems using gethostname is enough to emulate the result of
+ // `hostname -f`, which still works on those macs.
+ FQDNHostName = buf;
+#else
+ // On Linux `hostname -f` calls getaddrinfo with AI_CANONNAME flag
+ // to find the fqdn and will fail on any error.
+ // Hosts often have a short hostname and fqdn is resolved over dns.
+ // It is also very common to have a short hostname alias in
+ // /etc/hosts, which works as a fallback (e.g. no fqdn in search
+ // domains, otherwise `hostname -f` fails with an error and it is
+ // obvious the host is not configured correctly).
+ // Note that getaddrinfo may sometimes return EAI_NONAME even when
+ // host actually has fqdn, but dns is temporary unavailable, so we
+ // cannot ignore any errors on Linux.
+ struct addrinfo hints;
+ struct addrinfo* ais{nullptr};
+
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_flags = AI_CANONNAME;
res = getaddrinfo(buf, nullptr, &hints, &ais);
if (res) {
- if (res != EAI_NONAME) {
- ythrow TSystemError() << "can not get FQDN (return code is " << res << ", hostname is \"" << buf << "\")";
- }
- FQDNHostName = buf;
- } else {
- FQDNHostName = ais->ai_canonname;
- freeaddrinfo(ais);
+ ythrow TSystemError() << "can not get FQDN (return code is " << res << ", hostname is \"" << buf << "\")";
}
+ FQDNHostName = ais->ai_canonname;
FQDNHostName.to_lower();
+ freeaddrinfo(ais);
+#endif
}
TString FQDNHostName;
diff --git a/ydb/CMakeLists.txt b/ydb/CMakeLists.txt
new file mode 100644
index 0000000000..5a096d0301
--- /dev/null
+++ b/ydb/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(apps)
+add_subdirectory(core)
+add_subdirectory(library)
+add_subdirectory(public)
+add_subdirectory(services)
diff --git a/ydb/apps/CMakeLists.txt b/ydb/apps/CMakeLists.txt
new file mode 100644
index 0000000000..1f9de1165a
--- /dev/null
+++ b/ydb/apps/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(ydb)
+add_subdirectory(ydbd)
diff --git a/ydb/apps/ydb/CMakeLists.darwin.txt b/ydb/apps/ydb/CMakeLists.darwin.txt
index 9b11728efe..35ead10fc2 100644
--- a/ydb/apps/ydb/CMakeLists.darwin.txt
+++ b/ydb/apps/ydb/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(commands)
add_executable(ydb)
target_link_libraries(ydb PUBLIC
diff --git a/ydb/apps/ydb/CMakeLists.linux.txt b/ydb/apps/ydb/CMakeLists.linux.txt
index 0cc7893deb..ac370f6d25 100644
--- a/ydb/apps/ydb/CMakeLists.linux.txt
+++ b/ydb/apps/ydb/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(commands)
add_executable(ydb)
target_link_libraries(ydb PUBLIC
diff --git a/ydb/apps/ydb/CMakeLists.txt b/ydb/apps/ydb/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/apps/ydb/CMakeLists.txt
+++ b/ydb/apps/ydb/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/apps/ydbd/CMakeLists.txt b/ydb/apps/ydbd/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/apps/ydbd/CMakeLists.txt
+++ b/ydb/apps/ydbd/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/apps/ydbd/sqs.cpp b/ydb/apps/ydbd/sqs.cpp
index 6a06ca7177..ce6980dde0 100644
--- a/ydb/apps/ydbd/sqs.cpp
+++ b/ydb/apps/ydbd/sqs.cpp
@@ -47,7 +47,7 @@ public:
-IEventsWriterWrapper::TPtr TSqsEventsWriterFactory::CreateEventsWriter(const NKikimrConfig::TSqsConfig& config, const NMonitoring::TDynamicCounterPtr&) const {
+IEventsWriterWrapper::TPtr TSqsEventsWriterFactory::CreateEventsWriter(const NKikimrConfig::TSqsConfig& config, const ::NMonitoring::TDynamicCounterPtr&) const {
const auto& ycSearchCfg = config.GetYcSearchEventsConfig();
switch (ycSearchCfg.OutputMethod_case()) {
case NKikimrConfig::TSqsConfig::TYcSearchEventsConfig::kOutputFileName:
diff --git a/ydb/apps/ydbd/sqs.h b/ydb/apps/ydbd/sqs.h
index acd3e973e5..d772f0cbf0 100644
--- a/ydb/apps/ydbd/sqs.h
+++ b/ydb/apps/ydbd/sqs.h
@@ -5,5 +5,5 @@
class TSqsEventsWriterFactory : public NKikimr::NSQS::IEventsWriterFactory {
public:
- NKikimr::NSQS::IEventsWriterWrapper::TPtr CreateEventsWriter(const NKikimrConfig::TSqsConfig& config, const NMonitoring::TDynamicCounterPtr& counters) const override;
+ NKikimr::NSQS::IEventsWriterWrapper::TPtr CreateEventsWriter(const NKikimrConfig::TSqsConfig& config, const ::NMonitoring::TDynamicCounterPtr& counters) const override;
};
diff --git a/ydb/core/CMakeLists.txt b/ydb/core/CMakeLists.txt
new file mode 100644
index 0000000000..cebd646974
--- /dev/null
+++ b/ydb/core/CMakeLists.txt
@@ -0,0 +1,56 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actorlib_impl)
+add_subdirectory(base)
+add_subdirectory(blob_depot)
+add_subdirectory(blobstorage)
+add_subdirectory(blockstore)
+add_subdirectory(client)
+add_subdirectory(cms)
+add_subdirectory(control)
+add_subdirectory(debug)
+add_subdirectory(driver_lib)
+add_subdirectory(engine)
+add_subdirectory(erasure)
+add_subdirectory(filestore)
+add_subdirectory(formats)
+add_subdirectory(grpc_caching)
+add_subdirectory(grpc_services)
+add_subdirectory(grpc_streaming)
+add_subdirectory(health_check)
+add_subdirectory(http_proxy)
+add_subdirectory(io_formats)
+add_subdirectory(kesus)
+add_subdirectory(keyvalue)
+add_subdirectory(kqp)
+add_subdirectory(metering)
+add_subdirectory(mind)
+add_subdirectory(mon)
+add_subdirectory(mon_alloc)
+add_subdirectory(node_whiteboard)
+add_subdirectory(persqueue)
+add_subdirectory(protos)
+add_subdirectory(quoter)
+add_subdirectory(scheme)
+add_subdirectory(scheme_types)
+add_subdirectory(security)
+add_subdirectory(sys_view)
+add_subdirectory(tablet)
+add_subdirectory(tablet_flat)
+add_subdirectory(test_tablet)
+add_subdirectory(testlib)
+add_subdirectory(tracing)
+add_subdirectory(tx)
+add_subdirectory(util)
+add_subdirectory(viewer)
+add_subdirectory(wrappers)
+add_subdirectory(ydb_convert)
+add_subdirectory(ymq)
+add_subdirectory(yq)
+add_subdirectory(yql_testlib)
diff --git a/ydb/core/actorlib_impl/CMakeLists.txt b/ydb/core/actorlib_impl/CMakeLists.txt
index bfbae8a883..dd2b881684 100644
--- a/ydb/core/actorlib_impl/CMakeLists.txt
+++ b/ydb/core/actorlib_impl/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-actorlib_impl)
target_compile_options(ydb-core-actorlib_impl PRIVATE
diff --git a/ydb/core/actorlib_impl/ut/CMakeLists.txt b/ydb/core/actorlib_impl/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/actorlib_impl/ut/CMakeLists.txt
+++ b/ydb/core/actorlib_impl/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/base/CMakeLists.txt b/ydb/core/base/CMakeLists.txt
index 201bbf0b9b..3adecb4b24 100644
--- a/ydb/core/base/CMakeLists.txt
+++ b/ydb/core/base/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(services)
+add_subdirectory(ut)
add_library(ydb-core-base)
target_link_libraries(ydb-core-base PUBLIC
diff --git a/ydb/core/base/appdata.h b/ydb/core/base/appdata.h
index 334eaea131..3c8fc84652 100644
--- a/ydb/core/base/appdata.h
+++ b/ydb/core/base/appdata.h
@@ -113,7 +113,7 @@ struct TAppData {
ui64 CompilerSchemeCacheTables;
NActors::TMon* Mon;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
NMonitoring::TBusNgMonPage* BusMonPage;
TIntrusivePtr<NKikimr::TControlBoard> Icb;
TIntrusivePtr<NGRpcService::TInFlightLimiterRegistry> InFlightLimiterRegistry;
@@ -162,6 +162,9 @@ struct TAppData {
// Used to disable object deletion in schemeshard for cleanup tests
bool DisableSchemeShardCleanupOnDropForTest = false;
+
+ // Used to disable checking nodes with sys tablets only in cms
+ bool DisableCheckingSysNodesCms = false;
TKikimrScopeId LocalScopeId;
diff --git a/ydb/core/base/counters.cpp b/ydb/core/base/counters.cpp
index 298ec7e192..538266429c 100644
--- a/ydb/core/base/counters.cpp
+++ b/ydb/core/base/counters.cpp
@@ -52,7 +52,7 @@ static const THashSet<TString> DATABASE_ATTRIBUTE_LABELS
TString("database_id")
}};
-using NMonitoring::TDynamicCounters;
+using ::NMonitoring::TDynamicCounters;
const THashSet<TString> &GetDatabaseSensorServices()
{
diff --git a/ydb/core/base/counters.h b/ydb/core/base/counters.h
index 01dc8c4c0f..6abfe3cae9 100644
--- a/ydb/core/base/counters.h
+++ b/ydb/core/base/counters.h
@@ -11,10 +11,10 @@ namespace NKikimr {
constexpr char HOST_LABEL[] = "host";
// Get counters group for specified service. Skip tenant and slot labels.
- TIntrusivePtr<NMonitoring::TDynamicCounters> GetServiceCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> root,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> GetServiceCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> root,
const TString &service, bool skipAddedLabels = true);
// Get parent node for subsvc/svc if any. root->svc->subvc => svc, root->svc => root.
- TIntrusivePtr<NMonitoring::TDynamicCounters> GetServiceCountersRoot(TIntrusivePtr<NMonitoring::TDynamicCounters> root,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> GetServiceCountersRoot(TIntrusivePtr<::NMonitoring::TDynamicCounters> root,
const TString &service);
// Extract subservice name if any. aba|caba => aba, caba.
std::pair<TString, TString> ExtractSubServiceName(const TString &service);
@@ -24,5 +24,5 @@ namespace NKikimr {
const THashSet<TString> &GetDatabaseAttributeSensorServices();
const THashSet<TString> &GetDatabaseAttributeLabels();
// Drop all extra labels.
- void ReplaceSubgroup(TIntrusivePtr<NMonitoring::TDynamicCounters> root, const TString &service);
+ void ReplaceSubgroup(TIntrusivePtr<::NMonitoring::TDynamicCounters> root, const TString &service);
} // namespace NKikimr
diff --git a/ydb/core/base/grpc_service_factory.h b/ydb/core/base/grpc_service_factory.h
index 0ae4fd9dd8..7eacc05f0d 100644
--- a/ydb/core/base/grpc_service_factory.h
+++ b/ydb/core/base/grpc_service_factory.h
@@ -11,7 +11,7 @@ private:
using TFactoryMethod = std::function<
TServicePtr(
NActors::TActorSystem*,
- TIntrusivePtr<NMonitoring::TDynamicCounters>,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters>,
NActors::TActorId
)
>;
@@ -40,7 +40,7 @@ public:
) {
auto method = [](
NActors::TActorSystem* actorSystem,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
NActors::TActorId grpcRequestProxyId
) {
return TServicePtr(new TService(actorSystem, counters, grpcRequestProxyId));
@@ -56,7 +56,7 @@ public:
const std::unordered_set<TString>& enabled,
const std::unordered_set<TString>& disabled,
NActors::TActorSystem* actorSystem,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
NActors::TActorId grpcRequestProxyId
) {
std::vector<TServicePtr> services;
diff --git a/ydb/core/base/pool_stats_collector.cpp b/ydb/core/base/pool_stats_collector.cpp
index 7dcbf28954..15849778e3 100644
--- a/ydb/core/base/pool_stats_collector.cpp
+++ b/ydb/core/base/pool_stats_collector.cpp
@@ -17,7 +17,7 @@ public:
TStatsCollectingActor(
ui32 intervalSec,
const TActorSystemSetup& setup,
- NMonitoring::TDynamicCounterPtr counters)
+ ::NMonitoring::TDynamicCounterPtr counters)
: NActors::TStatsCollectingActor(intervalSec, setup, GetServiceCounters(counters, "utils"))
{
MiniKQLPoolStats.Init(Counters.Get());
@@ -26,7 +26,7 @@ public:
private:
class TMiniKQLPoolStats {
public:
- void Init(NMonitoring::TDynamicCounters* group) {
+ void Init(::NMonitoring::TDynamicCounters* group) {
CounterGroup = group->GetSubgroup("subsystem", "mkqlalloc");
TotalBytes = CounterGroup->GetCounter("GlobalPoolTotalBytes", false);
}
@@ -36,8 +36,8 @@ private:
}
private:
- TIntrusivePtr<NMonitoring::TDynamicCounters> CounterGroup;
- NMonitoring::TDynamicCounters::TCounterPtr TotalBytes;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> CounterGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TotalBytes;
};
void OnWakeup(const TActorContext &ctx) override {
@@ -58,7 +58,7 @@ private:
IActor *CreateStatsCollector(ui32 intervalSec,
const TActorSystemSetup& setup,
- NMonitoring::TDynamicCounterPtr counters)
+ ::NMonitoring::TDynamicCounterPtr counters)
{
return new TStatsCollectingActor(intervalSec, setup, counters);
}
diff --git a/ydb/core/base/pool_stats_collector.h b/ydb/core/base/pool_stats_collector.h
index cbf06f9f51..12f1ae736a 100644
--- a/ydb/core/base/pool_stats_collector.h
+++ b/ydb/core/base/pool_stats_collector.h
@@ -12,6 +12,6 @@ namespace NKikimr {
IActor* CreateStatsCollector(ui32 intervalSec,
const TActorSystemSetup& setup,
- NMonitoring::TDynamicCounterPtr counters);
+ ::NMonitoring::TDynamicCounterPtr counters);
}
diff --git a/ydb/core/base/shared_quota.h b/ydb/core/base/shared_quota.h
index a565954bb5..75f62b1f70 100644
--- a/ydb/core/base/shared_quota.h
+++ b/ydb/core/base/shared_quota.h
@@ -9,8 +9,8 @@ namespace NKikimr {
class TSharedQuota : public TThrRefBase {
public:
- TSharedQuota(NMonitoring::TDynamicCounters::TCounterPtr usedCounter,
- NMonitoring::TDynamicCounters::TCounterPtr sizeCounter,
+ TSharedQuota(::NMonitoring::TDynamicCounters::TCounterPtr usedCounter,
+ ::NMonitoring::TDynamicCounters::TCounterPtr sizeCounter,
ui64 quota = 0)
: Quota(quota)
, FreeQuota(Quota)
@@ -68,8 +68,8 @@ public:
private:
volatile ui64 Quota;
volatile i64 FreeQuota;
- NMonitoring::TDynamicCounters::TCounterPtr UsedCounter;
- NMonitoring::TDynamicCounters::TCounterPtr SizeCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr UsedCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SizeCounter;
};
using TSharedQuotaPtr = TIntrusivePtr<TSharedQuota>;
diff --git a/ydb/core/base/statestorage_monitoring.cpp b/ydb/core/base/statestorage_monitoring.cpp
index 5bcc3ec67f..bce0345fa9 100644
--- a/ydb/core/base/statestorage_monitoring.cpp
+++ b/ydb/core/base/statestorage_monitoring.cpp
@@ -50,7 +50,7 @@ class TStateStorageMonitoringActor : public TActorBootstrapped<TStateStorageMoni
TStringStream str;
HTML(str) {
- H3() { str << "State Storage";}
+ TAG(TH3) { str << "State Storage";}
DIV_CLASS("container") {
DIV_CLASS("row") {str << "TabletID: " << TabletID;}
DIV_CLASS("row") {str << "Response: " << response;}
diff --git a/ydb/core/base/tablet_pipecache.h b/ydb/core/base/tablet_pipecache.h
index d3a519c9bd..b9e246a69a 100644
--- a/ydb/core/base/tablet_pipecache.h
+++ b/ydb/core/base/tablet_pipecache.h
@@ -83,7 +83,7 @@ struct TPipePeNodeCacheConfig : public TAtomicRefCount<TPipePeNodeCacheConfig>{
ui64 TabletCacheLimit;
TDuration PipeRefreshTime;
NTabletPipe::TClientConfig PipeConfig;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
TPipePeNodeCacheConfig()
: TabletCacheLimit(500000)
diff --git a/ydb/core/base/tracing.h b/ydb/core/base/tracing.h
index 40420e4541..2ec8950a99 100644
--- a/ydb/core/base/tracing.h
+++ b/ydb/core/base/tracing.h
@@ -204,7 +204,7 @@ public:
virtual ITrace* GetTrace(ui64 tabletID, TTraceID& traceID) = 0;
};
-ITraceCollection* CreateTraceCollection(TIntrusivePtr<NMonitoring::TDynamicCounters> counters = nullptr);
+ITraceCollection* CreateTraceCollection(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = nullptr);
}
}
diff --git a/ydb/core/base/ut/CMakeLists.txt b/ydb/core/base/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/base/ut/CMakeLists.txt
+++ b/ydb/core/base/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blob_depot/CMakeLists.txt b/ydb/core/blob_depot/CMakeLists.txt
index 236ee49e55..ea14e35aa0 100644
--- a/ydb/core/blob_depot/CMakeLists.txt
+++ b/ydb/core/blob_depot/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(agent)
add_library(ydb-core-blob_depot)
target_link_libraries(ydb-core-blob_depot PUBLIC
diff --git a/ydb/core/blobstorage/CMakeLists.txt b/ydb/core/blobstorage/CMakeLists.txt
index 5c5c848af3..2e81351e34 100644
--- a/ydb/core/blobstorage/CMakeLists.txt
+++ b/ydb/core/blobstorage/CMakeLists.txt
@@ -6,6 +6,25 @@
# original buildsystem will not be accepted.
+add_subdirectory(backpressure)
+add_subdirectory(base)
+add_subdirectory(crypto)
+add_subdirectory(dsproxy)
+add_subdirectory(groupinfo)
+add_subdirectory(incrhuge)
+add_subdirectory(lwtrace_probes)
+add_subdirectory(nodewarden)
+add_subdirectory(other)
+add_subdirectory(pdisk)
+add_subdirectory(storagepoolmon)
+add_subdirectory(testload)
+add_subdirectory(ut_blobstorage)
+add_subdirectory(ut_group)
+add_subdirectory(ut_mirror3of4)
+add_subdirectory(ut_pdiskfit)
+add_subdirectory(ut_vdisk)
+add_subdirectory(ut_vdisk2)
+add_subdirectory(vdisk)
add_library(ydb-core-blobstorage INTERFACE)
target_link_libraries(ydb-core-blobstorage INTERFACE
diff --git a/ydb/core/blobstorage/backpressure/CMakeLists.txt b/ydb/core/blobstorage/backpressure/CMakeLists.txt
index 87e46ce17c..c98ca35c93 100644
--- a/ydb/core/blobstorage/backpressure/CMakeLists.txt
+++ b/ydb/core/blobstorage/backpressure/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
+add_subdirectory(ut_client)
add_library(core-blobstorage-backpressure)
target_link_libraries(core-blobstorage-backpressure PUBLIC
diff --git a/ydb/core/blobstorage/backpressure/event.cpp b/ydb/core/blobstorage/backpressure/event.cpp
index cc04981615..d807d5fe95 100644
--- a/ydb/core/blobstorage/backpressure/event.cpp
+++ b/ydb/core/blobstorage/backpressure/event.cpp
@@ -3,8 +3,8 @@
namespace NKikimr::NBsQueue {
IEventBase *TEventHolder::MakeErrorReply(NKikimrProto::EReplyStatus status, const TString& errorReason,
- const NMonitoring::TDynamicCounters::TCounterPtr& deserItems,
- const NMonitoring::TDynamicCounters::TCounterPtr& deserBytes) {
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& deserItems,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& deserBytes) {
auto callback = [&](auto *event) -> IEventBase* {
using T = std::remove_pointer_t<decltype(event)>;
std::unique_ptr<T> temp;
diff --git a/ydb/core/blobstorage/backpressure/event.h b/ydb/core/blobstorage/backpressure/event.h
index e5f5ff1531..1f5ca8c710 100644
--- a/ydb/core/blobstorage/backpressure/event.h
+++ b/ydb/core/blobstorage/backpressure/event.h
@@ -51,8 +51,8 @@ public:
{}
template<typename TPtr>
- TEventHolder(TPtr& ev, const NMonitoring::TDynamicCounters::TCounterPtr& serItems,
- const NMonitoring::TDynamicCounters::TCounterPtr& serBytes, const TBSProxyContextPtr& bspctx,
+ TEventHolder(TPtr& ev, const ::NMonitoring::TDynamicCounters::TCounterPtr& serItems,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& serBytes, const TBSProxyContextPtr& bspctx,
ui32 interconnectChannel, bool local)
: Type(ev->GetTypeRewrite())
, Sender(ev->Sender)
@@ -121,8 +121,8 @@ public:
}
IEventBase *MakeErrorReply(NKikimrProto::EReplyStatus status, const TString& errorReason,
- const NMonitoring::TDynamicCounters::TCounterPtr& deserItems,
- const NMonitoring::TDynamicCounters::TCounterPtr& deserBytes);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& deserItems,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& deserBytes);
ui32 GetType() const {
return Type;
diff --git a/ydb/core/blobstorage/backpressure/queue.cpp b/ydb/core/blobstorage/backpressure/queue.cpp
index 6e29552d81..cead08e1b8 100644
--- a/ydb/core/blobstorage/backpressure/queue.cpp
+++ b/ydb/core/blobstorage/backpressure/queue.cpp
@@ -2,7 +2,7 @@
namespace NKikimr::NBsQueue {
-TBlobStorageQueue::TBlobStorageQueue(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, TString& logPrefix,
+TBlobStorageQueue::TBlobStorageQueue(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, TString& logPrefix,
const TBSProxyContextPtr& bspctx, const NBackpressure::TQueueClientId& clientId, ui32 interconnectChannel,
const TBlobStorageGroupType& gType, NMonitoring::TCountableBase::EVisibility visibility)
: Queues(bspctx)
diff --git a/ydb/core/blobstorage/backpressure/queue.h b/ydb/core/blobstorage/backpressure/queue.h
index d59c035a58..ef0903d497 100644
--- a/ydb/core/blobstorage/backpressure/queue.h
+++ b/ydb/core/blobstorage/backpressure/queue.h
@@ -56,8 +56,8 @@ class TBlobStorageQueue {
template<typename TEvent>
TItem(TAutoPtr<TEventHandle<TEvent>>& event, TInstant deadline,
- const NMonitoring::TDynamicCounters::TCounterPtr& serItems,
- const NMonitoring::TDynamicCounters::TCounterPtr& serBytes,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& serItems,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& serBytes,
const TBSProxyContextPtr& bspctx, ui32 interconnectChannel,
bool local, TInstant now)
: Queue(EItemQueue::NotSet)
@@ -125,30 +125,30 @@ class TBlobStorageQueue {
const ui32 InterconnectChannel;
public:
- NMonitoring::TDynamicCounters::TCounterPtr QueueWaitingItems;
- NMonitoring::TDynamicCounters::TCounterPtr QueueWaitingBytes;
- NMonitoring::TDynamicCounters::TCounterPtr QueueInFlightItems;
- NMonitoring::TDynamicCounters::TCounterPtr QueueInFlightBytes;
- NMonitoring::TDynamicCounters::TCounterPtr QueueInFlightCost;
- NMonitoring::TDynamicCounters::TCounterPtr QueueWindowSize;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsPut;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsPutBytes;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsProcessed;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsRejected;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsPruned;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsSent;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsUndelivered;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsIncorrectMsgId;
- NMonitoring::TDynamicCounters::TCounterPtr QueueItemsWatermarkOverflow;
- NMonitoring::TDynamicCounters::TCounterPtr QueueOverflow;
- NMonitoring::TDynamicCounters::TCounterPtr QueueSerializedItems;
- NMonitoring::TDynamicCounters::TCounterPtr QueueSerializedBytes;
- NMonitoring::TDynamicCounters::TCounterPtr QueueDeserializedItems;
- NMonitoring::TDynamicCounters::TCounterPtr QueueDeserializedBytes;
- NMonitoring::TDynamicCounters::TCounterPtr QueueSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueWaitingItems;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueWaitingBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueInFlightItems;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueInFlightBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueInFlightCost;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueWindowSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsPut;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsPutBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsProcessed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsRejected;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsPruned;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsSent;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsUndelivered;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsIncorrectMsgId;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueItemsWatermarkOverflow;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueOverflow;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueSerializedItems;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueSerializedBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueDeserializedItems;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueDeserializedBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueSize;
public:
- TBlobStorageQueue(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, TString& logPrefix,
+ TBlobStorageQueue(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, TString& logPrefix,
const TBSProxyContextPtr& bspctx, const NBackpressure::TQueueClientId& clientId, ui32 interconnectChannel,
const TBlobStorageGroupType &gType,
NMonitoring::TCountableBase::EVisibility visibility = NMonitoring::TCountableBase::EVisibility::Public);
diff --git a/ydb/core/blobstorage/backpressure/queue_backpressure_client.cpp b/ydb/core/blobstorage/backpressure/queue_backpressure_client.cpp
index f4ae30da96..84337e1eb4 100644
--- a/ydb/core/blobstorage/backpressure/queue_backpressure_client.cpp
+++ b/ydb/core/blobstorage/backpressure/queue_backpressure_client.cpp
@@ -30,7 +30,7 @@ class TVDiskBackpressureClientActor : public TActorBootstrapped<TVDiskBackpressu
TBSProxyContextPtr BSProxyCtx;
TString LogPrefix;
const TString QueueName;
- const NMonitoring::TDynamicCounterPtr Counters;
+ const ::NMonitoring::TDynamicCounterPtr Counters;
TBlobStorageQueue Queue;
TActorId BlobStorageProxy;
const TVDiskIdShort VDiskIdShort;
@@ -74,7 +74,7 @@ public:
}
TVDiskBackpressureClientActor(const TIntrusivePtr<TBlobStorageGroupInfo>& info, TVDiskIdShort vdiskId,
- NKikimrBlobStorage::EVDiskQueueId queueId,const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ NKikimrBlobStorage::EVDiskQueueId queueId,const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TBSProxyContextPtr& bspctx, const NBackpressure::TQueueClientId& clientId, const TString& queueName,
ui32 interconnectChannel, bool /*local*/, TDuration watchdogTimeout,
TIntrusivePtr<NBackpressure::TFlowRecord> &flowRecord, NMonitoring::TCountableBase::EVisibility visibility)
@@ -836,7 +836,7 @@ private:
XX(TEvents::TSystem::Poison, Poison) \
// END
-#define XX(EVENT, NAME) NMonitoring::TDynamicCounters::TCounterPtr EventCounter##NAME;
+#define XX(EVENT, NAME) ::NMonitoring::TDynamicCounters::TCounterPtr EventCounter##NAME;
DEFINE_EVENTS(XX)
#undef XX
@@ -926,7 +926,7 @@ namespace NKikimr {
// QUEUE CREATOR
////////////////////////////////////////////////////////////////////////////
IActor* CreateVDiskBackpressureClient(const TIntrusivePtr<TBlobStorageGroupInfo>& info, TVDiskIdShort vdiskId,
- NKikimrBlobStorage::EVDiskQueueId queueId,const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ NKikimrBlobStorage::EVDiskQueueId queueId,const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TBSProxyContextPtr& bspctx, const NBackpressure::TQueueClientId& clientId, const TString& queueName,
ui32 interconnectChannel, bool local, TDuration watchdogTimeout,
TIntrusivePtr<NBackpressure::TFlowRecord> &flowRecord, NMonitoring::TCountableBase::EVisibility visibility) {
diff --git a/ydb/core/blobstorage/backpressure/queue_backpressure_client.h b/ydb/core/blobstorage/backpressure/queue_backpressure_client.h
index 74c0f13edc..3f51db5f85 100644
--- a/ydb/core/blobstorage/backpressure/queue_backpressure_client.h
+++ b/ydb/core/blobstorage/backpressure/queue_backpressure_client.h
@@ -42,7 +42,7 @@ namespace NKikimr {
{};
IActor* CreateVDiskBackpressureClient(const TIntrusivePtr<TBlobStorageGroupInfo>& info, TVDiskIdShort vdiskId,
- NKikimrBlobStorage::EVDiskQueueId queueId,const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ NKikimrBlobStorage::EVDiskQueueId queueId,const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TBSProxyContextPtr& bspctx, const NBackpressure::TQueueClientId& clientId, const TString& queueName,
ui32 interconnectChannel, bool local, TDuration watchdogTimeout,
TIntrusivePtr<NBackpressure::TFlowRecord> &flowRecord, NMonitoring::TCountableBase::EVisibility visibility);
diff --git a/ydb/core/blobstorage/backpressure/queue_backpressure_client_ut.cpp b/ydb/core/blobstorage/backpressure/queue_backpressure_client_ut.cpp
index c42a483e39..69a436bdea 100644
--- a/ydb/core/blobstorage/backpressure/queue_backpressure_client_ut.cpp
+++ b/ydb/core/blobstorage/backpressure/queue_backpressure_client_ut.cpp
@@ -70,12 +70,12 @@ public:
class TProxyActor : public TActorBootstrapped<TProxyActor> {
const TIntrusivePtr<TBlobStorageGroupInfo> Info;
const TVDiskID VDiskId;
- const TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
const TActorId QueueActorId;
public:
TProxyActor(TIntrusivePtr<TBlobStorageGroupInfo> info, const TVDiskID& vdiskId,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
const TActorId& queueActorId)
: Info(std::move(info))
, VDiskId(vdiskId)
@@ -121,7 +121,7 @@ public:
class TQueueTestRuntime {
TTempDir TempDir;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TIntrusivePtr<TBlobStorageGroupInfo> Info;
std::unique_ptr<TActorSystem> ActorSystem;
TString Path;
@@ -141,7 +141,7 @@ class TQueueTestRuntime {
public:
TQueueTestRuntime(TFilterActor::TFilterFunc&& func) {
- Counters.Reset(new NMonitoring::TDynamicCounters);
+ Counters.Reset(new ::NMonitoring::TDynamicCounters);
auto setup = MakeHolder<TActorSystemSetup>();
setup->NodeId = 1;
diff --git a/ydb/core/blobstorage/backpressure/ut/CMakeLists.txt b/ydb/core/blobstorage/backpressure/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/backpressure/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/backpressure/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/backpressure/ut_client/CMakeLists.txt b/ydb/core/blobstorage/backpressure/ut_client/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/backpressure/ut_client/CMakeLists.txt
+++ b/ydb/core/blobstorage/backpressure/ut_client/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/backpressure/ut_client/loader.h b/ydb/core/blobstorage/backpressure/ut_client/loader.h
index 2372d31d6c..1ee901fc61 100644
--- a/ydb/core/blobstorage/backpressure/ut_client/loader.h
+++ b/ydb/core/blobstorage/backpressure/ut_client/loader.h
@@ -13,7 +13,7 @@ class TLoaderActor : public TActorBootstrapped<TLoaderActor> {
const NBackpressure::TQueueClientId ClientId;
const TVDiskID VDiskId;
const TActorId VDiskActorId;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TBSProxyContextPtr BSProxyCtx;
TIntrusivePtr<NBackpressure::TFlowRecord> FlowRecord;
TActorId QueueId;
@@ -28,7 +28,7 @@ public:
: ClientId(std::move(clientId))
, VDiskId(std::move(vdiskId))
, VDiskActorId(std::move(vdiskActorId))
- , Counters(MakeIntrusive<NMonitoring::TDynamicCounters>())
+ , Counters(MakeIntrusive<::NMonitoring::TDynamicCounters>())
, BSProxyCtx(MakeIntrusive<TBSProxyContext>(Counters))
, FlowRecord(MakeIntrusive<NBackpressure::TFlowRecord>())
{
diff --git a/ydb/core/blobstorage/base/CMakeLists.txt b/ydb/core/blobstorage/base/CMakeLists.txt
index 552572420e..affac7ffe9 100644
--- a/ydb/core/blobstorage/base/CMakeLists.txt
+++ b/ydb/core/blobstorage/base/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-blobstorage-base)
target_link_libraries(core-blobstorage-base PUBLIC
diff --git a/ydb/core/blobstorage/base/ut/CMakeLists.txt b/ydb/core/blobstorage/base/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/base/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/base/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/crypto/CMakeLists.txt b/ydb/core/blobstorage/crypto/CMakeLists.txt
index 27691e9cb9..eed2c9cfcb 100644
--- a/ydb/core/blobstorage/crypto/CMakeLists.txt
+++ b/ydb/core/blobstorage/crypto/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-blobstorage-crypto)
target_link_libraries(core-blobstorage-crypto PUBLIC
diff --git a/ydb/core/blobstorage/crypto/ut/CMakeLists.txt b/ydb/core/blobstorage/crypto/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/crypto/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/crypto/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/docs/pdisk_chunk_state.graphml b/ydb/core/blobstorage/docs/pdisk_chunk_state.graphml
index 55c4c70703..16e22c88f0 100644
--- a/ydb/core/blobstorage/docs/pdisk_chunk_state.graphml
+++ b/ydb/core/blobstorage/docs/pdisk_chunk_state.graphml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
- <!--Created by yEd 3.18.2-->
+ <!--Created by yEd 3.20-->
<key attr.name="Description" attr.type="string" for="graph" id="d0"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
@@ -17,10 +17,10 @@
<node id="n0">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="301.8278580555715" y="32.23329615497357"/>
+ <y:Geometry height="66.60642868435133" width="149.0" x="270.8278580555715" y="32.23329615497357"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="28.71484375" x="29.642578125" xml:space="preserve" y="5.93359375">Free<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="31.029296875" x="58.9853515625" xml:space="preserve" y="24.236808092175664">FREE<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -28,10 +28,10 @@
<node id="n1">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="184.66887391365057" y="175.51611786633129"/>
+ <y:Geometry height="60.0" width="130.0" x="142.66887391365057" y="178.81933220850695"/>
<y:Fill color="#FFFF99" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.435546875" x="15.7822265625" xml:space="preserve" y="5.93359375">Reserved<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="101.119140625" x="14.4404296875" xml:space="preserve" y="20.93359375">DATA_RESERVED<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -39,10 +39,10 @@
<node id="n2">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="184.66887391365057" y="252.17678572882204"/>
+ <y:Geometry height="60.0" width="130.0" x="142.66887391365057" y="290.17678572882204"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="64.275390625" x="11.8623046875" xml:space="preserve" y="5.93359375">Commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="115.556640625" x="7.2216796875" xml:space="preserve" y="20.93359375">DATA_COMMITTED<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -50,10 +50,10 @@
<node id="n3">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="701.2401942572766" y="-34.173748916774315"/>
+ <y:Geometry height="60.0" width="123.95764017173929" x="477.2401942572767" y="-110.27140772213613"/>
<y:Fill color="#FFFF99" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="78.806640625" x="4.5966796875" xml:space="preserve" y="5.93359375">Log reserved<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="92.376953125" x="15.790343523369643" xml:space="preserve" y="20.93359375">LOG_RESERVED<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -61,11 +61,10 @@
<node id="n4">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="47.24943843986151" y="77.64370557140234"/>
+ <y:Geometry height="60.0" width="242.87834856212055" x="-57.750561560138465" y="66.51207170404717"/>
<y:Fill color="#FFFF99" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="53.7578125" x="17.12109375" xml:space="preserve" y="-1.1328125">Delete
-reserved<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="233.16015625" x="4.859096156060275" xml:space="preserve" y="20.93359375">DATA_RESERVED_DELETE_IN_PROGRESS<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -73,11 +72,10 @@ reserved<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:M
<node id="n5">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="47.24943843986151" y="156.96546634935225"/>
+ <y:Geometry height="60.0" width="250.87834856212055" x="-65.75056156013846" y="402.0091427412095"/>
<y:Fill color="#FFFF99" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="62.119140625" x="12.9404296875" xml:space="preserve" y="-1.1328125">Delete
-commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="247.59765625" x="1.640346156060275" xml:space="preserve" y="20.93359375">DATA_COMMITTED_DELETE_IN_PROGRESS<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -85,10 +83,10 @@ commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:M
<node id="n6">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="701.2401942572766" y="37.46766193890454"/>
+ <y:Geometry height="60.0" width="123.9576401717394" x="270.8278580555715" y="-107.27140772213613"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="87.16796875" x="0.416015625" xml:space="preserve" y="5.93359375">Log commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="106.814453125" x="8.5715935233697" xml:space="preserve" y="20.93359375">LOG_COMMITTED<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -96,10 +94,11 @@ commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:M
<node id="n7">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="657.197834429016" y="201.00808526073567"/>
- <y:Fill color="#CCFFCC" transparent="false"/>
+ <y:Geometry height="60.0" width="156.9527880903828" x="887.2450463386331" y="178.3444287164346"/>
+ <y:Fill color="#CCFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.470703125" x="9.7646484375" xml:space="preserve" y="5.93359375">Quarantine<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="144.384765625" x="6.284011232691455" xml:space="preserve" y="13.8671875">DATA_ON_QUARANTINE
+with req. in flight<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -107,10 +106,11 @@ commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:M
<node id="n8">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="387.47596608655624" y="252.17678572882204"/>
- <y:Fill color="#00FF00" transparent="false"/>
+ <y:Geometry height="60.0" width="140.0" x="387.47596608655624" y="290.17678572882204"/>
+ <y:Fill color="#00CCFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="64.275390625" x="11.8623046875" xml:space="preserve" y="5.93359375">Commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="115.556640625" x="12.2216796875" xml:space="preserve" y="13.8671875">DATA_COMMITTED
+with req. in flight<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -118,10 +118,11 @@ commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:M
<node id="n9">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="387.47596608655624" y="174.5663108821866"/>
- <y:Fill color="#CCFFCC" transparent="false"/>
+ <y:Geometry height="60.0" width="140.0" x="387.47596608655624" y="178.3444287164346"/>
+ <y:Fill color="#CCFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="56.435546875" x="15.7822265625" xml:space="preserve" y="5.93359375">Reserved<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="104.669921875" x="17.6650390625" xml:space="preserve" y="13.8671875">DATA_RESERVED
+with req. in flight<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -129,85 +130,88 @@ commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:M
<node id="n10">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="657.197834429016" y="122.63481365314385"/>
- <y:Fill color="#FFFF99" transparent="false"/>
- <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.470703125" x="9.7646484375" xml:space="preserve" y="5.93359375">Quarantine
-<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
- <y:Shape type="ellipse"/>
- </y:ShapeNode>
- </data>
- </node>
- <node id="n11">
- <data key="d5"/>
- <data key="d6">
- <y:ShapeNode>
- <y:Geometry height="114.97089218898864" width="239.87834856212052" x="416.66386647552287" y="-242.45491334722402"/>
+ <y:Geometry height="114.97089218898864" width="297.87834856212055" x="-45.750561560138465" y="-162.24229991112477"/>
<y:Fill hasColor="false" transparent="false"/>
- <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="74.6640625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="187.6328125" x="26.122768031060275" xml:space="preserve" y="20.153414844494307">r โ€” read
+ <y:BorderStyle hasColor="false" raised="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="left" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="102.9296875" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="264.478515625" x="16.699916468560275" xml:space="preserve" y="6.0206023444943355">r โ€” read
w โ€” write
c โ€” commit
+ โ€” new request in flight
-done โ€” request written on disk<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+done โ€” request written on disk
+kill saved โ€” sys log record is written on disk
+kill checked โ€” โ„– kills in flight == 0<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="rectangle"/>
</y:ShapeNode>
</data>
</node>
- <node id="n12">
+ <node id="n11">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="58.31484757457025" y="-242.45491334722402"/>
+ <y:Geometry height="17.0" width="45.0" x="-45.750561560138465" y="-202.78920940360683"/>
<y:Fill color="#FFCC00" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="e" textColor="#000000" verticalTextPosition="bottom" visible="true" width="93.244140625" x="92.0" xml:space="preserve" y="5.93359375">Persistent state</y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="e" textColor="#000000" verticalTextPosition="bottom" visible="true" width="93.244140625" x="49.0" xml:space="preserve" y="-0.56640625">Persistent state</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
- <node id="n13">
+ <node id="n12">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="58.31484757457025" y="-193.90800385474196"/>
- <y:Fill color="#00FF00" transparent="false"/>
+ <y:Geometry height="17.0" width="45.0" x="118.24943843986154" y="-202.78920940360683"/>
+ <y:Fill color="#00CCFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="e" textColor="#000000" verticalTextPosition="bottom" visible="true" width="224.76953125" x="92.0" xml:space="preserve" y="5.93359375">Persistent state with requests in flight
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="e" textColor="#000000" verticalTextPosition="bottom" visible="true" width="224.76953125" x="49.0" xml:space="preserve" y="-0.56640625">Persistent state with requests in flight
</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
- <node id="n14">
+ <node id="n13">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="58.31484757457025" y="-145.3610943622599"/>
+ <y:Geometry height="17.0" width="45.0" x="-45.750561560138465" y="-179.24229991112477"/>
<y:Fill color="#FFFF99" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="e" textColor="#000000" verticalTextPosition="bottom" visible="true" width="91.609375" x="92.0" xml:space="preserve" y="5.93359375">Temporal state</y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="e" textColor="#000000" verticalTextPosition="bottom" visible="true" width="91.609375" x="49.0" xml:space="preserve" y="-0.56640625">Temporal state</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
- <node id="n15">
+ <node id="n14">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="58.314847574570265" y="-96.81418486977785"/>
- <y:Fill color="#CCFFCC" transparent="false"/>
+ <y:Geometry height="17.0" width="45.0" x="118.24943843986154" y="-179.24229991112477"/>
+ <y:Fill color="#CCFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="e" textColor="#000000" verticalTextPosition="bottom" visible="true" width="223.134765625" x="91.99999999999999" xml:space="preserve" y="5.93359375">Temporal state with requests in flight
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="sides" modelPosition="e" textColor="#000000" verticalTextPosition="bottom" visible="true" width="223.134765625" x="49.0" xml:space="preserve" y="-0.56640625">Temporal state with requests in flight
</y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
</node>
+ <node id="n15">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="297.87834856212055" x="541.4139096861297" y="402.0091427412095"/>
+ <y:Fill color="#CCFFFF" transparent="false"/>
+ <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="271.29296875" x="13.292689906060332" xml:space="preserve" y="13.8671875">DATA_COMMITTED_DELETE_ON_QUARANTINE
+with req. in flight<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
<node id="n16">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="657.1978344290161" y="329.1761235083221"/>
- <y:Fill color="#CCFFCC" transparent="false"/>
+ <y:Geometry height="60.0" width="191.9055761807657" x="594.2922582482502" y="290.17678572882204"/>
+ <y:Fill color="#CCFFFF" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.470703125" x="9.7646484375" xml:space="preserve" y="-1.1328125">Quarantine
-commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="60.53125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="144.384765625" x="23.76040527788291" xml:space="preserve" y="-0.265625">unsaved
+DATA_ON_QUARANTINE
+on kill
+with req. in flight<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
</data>
@@ -215,10 +219,83 @@ commited<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:M
<node id="n17">
<data key="d6">
<y:ShapeNode>
- <y:Geometry height="30.0" width="88.0" x="547.85308396719" y="239.67475861812653"/>
- <y:Fill color="#CCFFCC" transparent="false"/>
+ <y:Geometry height="60.0" width="297.87834856212055" x="541.4139096861297" y="66.51207170404717"/>
+ <y:Fill color="#CCFFFF" transparent="false"/>
+ <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="256.85546875" x="20.511439906060332" xml:space="preserve" y="13.8671875">DATA_RESERVED_DELETE_ON_QUARANTINE
+with req. in flight<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n18">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="191.9055761807657" x="594.2922582482502" y="178.3444287164346"/>
+ <y:Fill color="#CCFFFF" transparent="false"/>
+ <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="60.53125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="144.384765625" x="23.76040527788291" xml:space="preserve" y="-0.265625">unsaved
+DATA_ON_QUARANTINE
+on kill
+with req. in flight<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n19">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="168.0" x="907.197834429016" y="-107.27140772213613"/>
+ <y:Fill color="#FFFF99" transparent="false"/>
+ <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="144.384765625" x="11.8076171875" xml:space="preserve" y="20.93359375">DATA_ON_QUARANTINE<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n20">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="156.9527880903828" x="640.197834429016" y="-110.27140772213613"/>
+ <y:Fill color="#FFFF99" transparent="false"/>
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
- <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="68.470703125" x="9.7646484375" xml:space="preserve" y="-1.1328125">Quarantine
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="46.3984375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="144.384765625" x="6.284011232691455" xml:space="preserve" y="6.80078125">unsaved
+DATA_ON_QUARANTINE
+on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n21">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="271.87834856212055" x="911.2322004137686" y="276.0091427412095"/>
+ <y:Fill color="#FFFF99" transparent="false"/>
+ <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="271.29296875" x="0.29268990606033185" xml:space="preserve" y="20.93359375">DATA_COMMITTED_DELETE_ON_QUARANTINE<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n22">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="271.87834856212055" x="869.2922582482502" y="66.51207170404717"/>
+ <y:Fill color="#FFFF99" transparent="false"/>
+ <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="256.85546875" x="7.511439906060332" xml:space="preserve" y="20.93359375">DATA_RESERVED_DELETE_ON_QUARANTINE<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
+ <y:Shape type="ellipse"/>
+ </y:ShapeNode>
+ </data>
+ </node>
+ <node id="n23">
+ <data key="d6">
+ <y:ShapeNode>
+ <y:Geometry height="60.0" width="148.9999999999999" x="1020.756451708176" y="402.0091427412095"/>
+ <y:Fill color="#FFFF99" transparent="false"/>
+ <y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="46.3984375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="144.384765625" x="2.3076171875" xml:space="preserve" y="6.80078125">unsaved
+DATA_ON_QUARANTINE
on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
<y:Shape type="ellipse"/>
</y:ShapeNode>
@@ -227,10 +304,10 @@ on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:Mo
<edge id="e0" source="n0" target="n1">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-1.9292672025543425" sy="13.746218964476157" tx="25.25652443572227" ty="-12.28936249214587"/>
+ <y:Path sx="-3.266600149779511" sy="30.51955177122861" tx="33.04606813765801" ty="-25.862235383418323"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="-31.05969337432157" anchorY="43.27401718327805" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.7933330110261343" upY="0.6087879217069007" verticalTextPosition="bottom" visible="true" width="46.205078125" x="-59.188786858345296" xml:space="preserve" y="43.27401718327805">reserve<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.770418224707337" distanceToCenter="true" position="left" ratio="0.6881208058219688" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-24.342703019428484" anchorY="23.117720616015703" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.6509328382247169" upY="0.7591353239842779" verticalTextPosition="bottom" visible="true" width="46.205078125" x="-59.418609971569225" xml:space="preserve" y="23.117720616015703">reserve<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.770418224707337" distanceToCenter="true" position="left" ratio="0.6881208058219688" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
@@ -238,10 +315,10 @@ on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:Mo
<edge id="e1" source="n9" target="n2">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-30.481898196182556" sy="10.815580672127737" tx="0.0" ty="-15.0"/>
+ <y:Path sx="-34.14647185885332" sy="26.202668395491827" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="-80.66373828846764" anchorY="4.209450516205635" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.2878441161956364" upY="0.9576772758980726" verticalTextPosition="bottom" visible="true" width="80.734375" x="-157.9812146098011" xml:space="preserve" y="4.209450516205635">commit done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.120886543350457" distanceToCenter="true" position="right" ratio="0.8968891559191847" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-68.24498782444465" anchorY="6.45273694014702" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.369031966727766" upY="0.929416702848102" verticalTextPosition="bottom" visible="true" width="80.734375" x="-143.2808644434469" xml:space="preserve" y="6.45273694014702">commit done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.120886543350457" distanceToCenter="true" position="right" ratio="0.8968891559191847" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
@@ -249,10 +326,10 @@ on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:Mo
<edge id="e2" source="n0" target="n3">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="34.75814998265491" sy="-9.198313983646038" tx="-34.767571381909875" ty="-9.198313983646038"/>
+ <y:Path sx="32.70706277112947" sy="-29.95737068295808" tx="-42.122804543122015" ty="21.999721690874836"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="71.001953125" x="209.5893985046822" xml:space="preserve" y="-69.52196539883">log allocate<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.899576593121719" distanceToCenter="true" position="left" ratio="0.8518598473263168" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="34.18409800185162" anchorY="-28.177011227718623" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.6190551959484245" upY="-0.7853474800171308" verticalTextPosition="bottom" visible="true" width="71.001953125" x="22.95888620656808" xml:space="preserve" y="-86.37169783473448">log allocate<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="10.033313003993115" distanceToCenter="true" position="left" ratio="0.8551926321358523" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
@@ -260,10 +337,11 @@ on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:Mo
<edge id="e3" source="n3" target="n6">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="5.5" tx="0.0" ty="-15.0"/>
+ <y:Path sx="-61.97882008586964" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="70.0" x="2.6588137329752044" xml:space="preserve" y="7.735972317920741">ัommit log<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="2.6587928155423675" distanceToCenter="false" position="left" ratio="0.20542799692019012" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-5.670047995672348" anchorY="-16.01852057881439" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.02076632315435224" upY="0.9997843566602995" verticalTextPosition="bottom" visible="true" width="70.0" x="-75.65495296189331" xml:space="preserve" y="-16.01852057881439">ัommit log
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="2.6587928155423675" distanceToCenter="false" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
@@ -271,10 +349,13 @@ on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:Mo
<edge id="e4" source="n5" target="n0">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="30.393865214780817" sy="-10.843275255829838" tx="-18.959151160012425" ty="6.799672617704289"/>
+ <y:Path sx="-112.65426207463007" sy="-6.6171167533117625" tx="-58.74680984228439" ty="-20.460974229421915">
+ <y:Point x="-67.0" y="80.0"/>
+ <y:Point x="-22.0" y="44.0"/>
+ </y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="65.44716863590605" anchorY="-32.89023053710895" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.46261727573465816" upY="-0.8865580952153351" verticalTextPosition="bottom" visible="true" width="72.419921875" x="57.058616315748694" xml:space="preserve" y="-82.46872921473505">delete done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.948517208199235" distanceToCenter="true" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="17.622409321393157" anchorY="-22.73609935708828" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.9990164739690199" upY="0.04434055410689631" verticalTextPosition="bottom" visible="true" width="72.419921875" x="-3.7037085498138556" xml:space="preserve" y="-95.08479435376267">delete done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="-0.0037443312727285516" distance="0.12710863667590852" distanceToCenter="false" position="right" ratio="-0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
@@ -282,10 +363,11 @@ on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:Mo
<edge id="e5" source="n1" target="n4">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-35.68139698198826" sy="-8.745020762370075" tx="0.0" ty="0.0"/>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="7.422413248786569" anchorY="-18.79208740967067" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.6589509006517482" upY="0.7521859547547068" verticalTextPosition="bottom" visible="true" width="39.56640625" x="-34.28751494080656" xml:space="preserve" y="-44.86440644366113">delete<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.959734230476897" distanceToCenter="true" position="right" ratio="-9.227372589907704" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-13.762807501197187" anchorY="-31.19549007284195" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#0000FF" upX="-0.6150408446557046" upY="0.7884952500841063" verticalTextPosition="bottom" visible="true" width="39.56640625" x="-64.8054081455645" xml:space="preserve" y="-55.530445992832696">delete
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.959734230476897" distanceToCenter="true" position="center" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
@@ -293,10 +375,10 @@ on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:Mo
<edge id="e6" source="n4" target="n0">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="44.0" sy="0.0" tx="-38.297753912215285" ty="7.3794888613264416"/>
+ <y:Path sx="94.75529115096823" sy="-18.75744075972699" tx="-74.5" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="41.320990156025914" anchorY="-6.828971852424033" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.21556008869735932" upY="-0.9764905776098337" verticalTextPosition="bottom" visible="true" width="72.419921875" x="37.41227948519333" xml:space="preserve" y="-40.14633718707068">delete done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="6.8276756015565185" distanceToCenter="true" position="left" ratio="0.3955015490500028" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="34.389930138957396" anchorY="-2.8939179108398605" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="0.3874289095401764" textColor="#000000" upX="-0.10808080353406267" upY="-0.9941421125309154" verticalTextPosition="bottom" visible="true" width="72.419921875" x="32.37723955609026" xml:space="preserve" y="-29.247199375435827">delete done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="8.471119764567563" distanceToCenter="true" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
@@ -304,351 +386,696 @@ on kill<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:Mo
<edge id="e7" source="n6" target="n0">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="36.37407210989903" ty="5.2343657839309685"/>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="-33.30321434217566"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="-33.1913128071767" anchorY="1.8444028557555825" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-1.2246467991473532E-16" upY="1.0" verticalTextPosition="bottom" visible="true" width="44.201171875" x="-77.3924846821767" xml:space="preserve" y="1.8444028557555772">ัut log<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.91080997813034" distanceToCenter="true" position="left" ratio="0.10960384942234233" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-15.241849091136089" anchorY="8.711330163320127" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.9935261648072331" upY="-0.1136035203830875" verticalTextPosition="bottom" visible="true" width="44.201171875" x="-15.241849091136089" xml:space="preserve" y="5.045841575959569">ัut log
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.91080997813034" distanceToCenter="true" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e8" source="n9" target="n1">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-49.39002858655624" sy="-21.260675033364578" tx="44.83893858634943" ty="-21.73557852543692"/>
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Arrows source="standard" target="none"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.919921875" x="-104.47347843739658" xml:space="preserve" y="-21.557686603789023">+r+w+c<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.491278543694992" distanceToCenter="true" position="right" ratio="0.5" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e8" source="n10" target="n0">
+ <edge id="e9" source="n9" target="n8">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="27.862218929353844" ty="11.192663010312629"/>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="-17.788315177226764" anchorY="-16.22954736584451" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.2350759151535802" upY="0.9719770131616832" verticalTextPosition="bottom" visible="true" width="4.0" x="-22.61652689048782" y="-17.169851026458833">
- <y:LabelModel>
- <y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/>
- </y:LabelModel>
- <y:ModelParameter>
- <y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.59314957410855" distanceToCenter="true" position="right" ratio="0.01851055095852848" segment="-1"/>
- </y:ModelParameter>
- <y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
- </y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="47.880859375" x="-53.94041574938126" xml:space="preserve" y="5.0000073297158565">commit
+done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e9" source="n9" target="n1">
+ <edge id="e10" source="n8" target="n2">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-34.172146410915275" sy="-9.441323139003387" tx="31.72534507187663" ty="-10.391130123148073"/>
+ <y:Path sx="-55.40155595235349" sy="9.157115617061322" tx="51.49543773890368" ty="9.157115617061322"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
- <y:Arrows source="standard" target="none"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.919921875" x="-93.65792667958408" xml:space="preserve" y="-21.5576817917227">+r+w+c<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.491278543694992" distanceToCenter="true" position="right" ratio="0.5" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="81.654296875" x="-100.51670698149309" xml:space="preserve" y="-17.041515509655596">last rwc done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.975117783273342" distanceToCenter="true" position="right" ratio="0.4549547877251474" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e10" source="n9" target="n8">
+ <edge id="e11" source="n9" target="n18">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="47.880859375" x="-53.94041574938126" xml:space="preserve" y="4.999996184920974">commit
-done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" verticalTextPosition="bottom" visible="true" width="65.640625" x="0.8893713787367687" xml:space="preserve" y="-19.414150663905247">kill owner<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.347751743621105" distanceToCenter="true" position="left" ratio="0.3015238597711589" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e11" source="n8" target="n2">
+ <edge id="e12" source="n8" target="n16">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-34.82383517005076" sy="9.157115617061322" tx="34.85845016171942" ty="9.157115617061322"/>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="81.654296875" x="-106.33143476469621" xml:space="preserve" y="-17.041515509655596">last rwc done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.975117783273342" distanceToCenter="true" position="right" ratio="0.4549547877251474" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" verticalTextPosition="bottom" visible="true" width="65.640625" x="1.0878475189656456" xml:space="preserve" y="-19.825436397571934">kill owner<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.759027546315863" distanceToCenter="true" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e12" source="n9" target="n7">
+ <edge id="e13" source="n2" target="n5">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="39.69019001427455" anchorY="2.6034749748054367" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.09756577368082023" upY="-0.9952290790597222" verticalTextPosition="bottom" visible="true" width="60.876953125" x="39.69019001427455" xml:space="preserve" y="-15.442827310332184">kill owner<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.347751743621105" distanceToCenter="true" position="left" ratio="0.3015238597711589" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-34.454150111635585" anchorY="5.8162945929123" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#0000FF" upX="0.6029190534398505" upY="0.7978023658771605" verticalTextPosition="bottom" visible="true" width="39.56640625" x="-66.02032262714245" xml:space="preserve" y="5.8162945929123">delete
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.85282047344601" distanceToCenter="true" position="center" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e13" source="n8" target="n17">
+ <edge id="e14" source="n19" target="n0">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="34.333916567865344" sy="-5.855893959205844" tx="-33.66545563118473" ty="-9.663789067285506"/>
+ <y:Path sx="-84.0" sy="0.0" tx="39.67214194442852" ty="-15.536510497149237"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="11.332674393531136" anchorY="-3.7196742493306942" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.17386769945429842" upY="-0.984769020169943" verticalTextPosition="bottom" visible="true" width="60.876953125" x="8.179963999519991" xml:space="preserve" y="-32.1608420375119">kill owner<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.759027546315863" distanceToCenter="true" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-12.688845673205378" anchorY="-13.570694958210325" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.23829896866447176" upY="0.9711918458952634" verticalTextPosition="bottom" visible="true" width="72.89453125" x="-83.48342003356284" xml:space="preserve" y="-13.570694958210325">kill checked
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="-0.0015521447859940807" distance="45.32133572498151" distanceToCenter="true" position="center" ratio="1.5241256481795973E-15" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e15" source="n0" target="n0">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-14.327858055571483" sy="-21.536510497149237" tx="-49.32785805557148" ty="-11.536510497149237">
+ <y:Point x="308.8278580555715" y="20.042778699409723"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-58.28154998501168" xml:space="preserve" y="-29.072558409519985">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="0.851185318054408" distanceToCenter="true" position="left" ratio="11.065409134708744" segment="-2"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e16" source="n3" target="n0">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-60.03932684314634" sy="7.456239096264476" tx="12.98890593117062" ty="-32.81242430255824"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="-56.50374877298367" anchorY="23.59199226484818" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="0.6577425399155834" upY="0.753242823520674" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-90.78218195273308" xml:space="preserve" y="23.59199226484818">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.328015368693165" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e17" source="n6" target="n6">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-7.806678141441182" sy="12.271407722136132" tx="-30.978820085869586" ty="26.013595222136132">
+ <y:Point x="281.8278580555716" y="-45.45621522913751"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-21.506675635834654" xml:space="preserve" y="6.6254574393195185">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.0" distanceToCenter="false" position="center" ratio="1.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e18" source="n1" target="n0">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="20.765200607281315" sy="-28.449174732740687" tx="-23.584504627711578" ty="31.618739264026544"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="14.921208160972867" anchorY="-15.51563064408441" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="-0.6655841906681687" upY="-0.7463227754347304" verticalTextPosition="bottom" visible="true" width="45.5078125" x="2.852294828622716" xml:space="preserve" y="-59.337842147413255">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.714745422657094" distanceToCenter="true" position="left" ratio="0.342725244313297" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e19" source="n5" target="n2">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="81.34791830061948" sy="-22.850519115892553" tx="-16.040648771105737" ty="29.06376609572237"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="12.328981519294302" anchorY="-12.14948762988422" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="1.6060030460357666" textColor="#FF0000" upX="-0.7694839460105519" upY="-0.6386661544437986" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-2.599859978137088" xml:space="preserve" y="-59.935144033077734">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="-0.008439937137889153" distance="8.312247402925784" distanceToCenter="true" position="left" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e20" source="n4" target="n0">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="121.43917428106026" sy="0.0" tx="-61.28642551023529" ty="18.92692580335762"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="21.339804436673944" anchorY="-3.747454867707347" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="0.1801728457212448" textColor="#FF0000" upX="-0.12091589143554073" upY="-0.992662756024597" verticalTextPosition="bottom" visible="true" width="45.5078125" x="19.1299665347919" xml:space="preserve" y="-27.398672767417132">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="1.139638740070015" distanceToCenter="false" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e21" source="n2" target="n2">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+ <y:Point x="203.0886591696214" y="348.5033242120122"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-64.99999510490412" xml:space="preserve" y="-30.000002601256085">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="13.074784808336569" distanceToCenter="true" position="left" ratio="6.042022354967836" segment="-2"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e22" source="n8" target="n2">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="39.31736123144541" ty="11.950771246842464">
+ <y:Point x="379.1254391971893" y="348.0875296808884"/>
+ <y:Point x="285.49418907424945" y="348.0875296808884"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-94.08816560060876" xml:space="preserve" y="-9.05058967893234">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.718441625445736" distanceToCenter="true" position="right" ratio="0.5" segment="1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e23" source="n9" target="n0">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-38.077296542883346" sy="-25.210897068395468" tx="9.704303390119492" ty="24.850110352812152"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="-0.13836735026870883" anchorY="-32.00833866542118" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="-0.8215403633406544" upY="0.5701503585915785" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-40.98150033549999" xml:space="preserve" y="-69.39484348150955">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.069496224652644" distanceToCenter="true" position="right" ratio="0.5454974242562394" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e14" source="n2" target="n5">
+ <edge id="e24" source="n9" target="n1">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-28.230843196605434" sy="-11.505833931186658" tx="33.83333434299962" ty="9.60320621427303"/>
+ <y:Path sx="-51.85877858655624" sy="20.136683672151094" tx="49.05768858634943" ty="19.66178018007875"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="1.8064046893578052" anchorY="-27.562947890016602" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.701154105430335" upY="0.713009761811286" verticalTextPosition="bottom" visible="true" width="39.56640625" x="-39.11872513405677" xml:space="preserve" y="-55.30509606932857">delete<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.85282047344601" distanceToCenter="true" position="right" ratio="0.22859433300968157" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="75.5078125" x="-113.2623273143497" xml:space="preserve" y="-17.786770529191926">last rw done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.720367048636998" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e15" source="n7" target="n10">
+ <edge id="e25" source="n2" target="n8">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:Path sx="47.203595874598996" sy="-10.307390918648395" tx="-50.86669517741355" ty="-10.307390918648395"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="81.654296875" x="4.494206775091357" xml:space="preserve" y="-43.103712156877265">last rwc done
-kill done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="45.32133572498151" distanceToCenter="true" position="right" ratio="0.955864940213314" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.919921875" x="37.00107069265658" xml:space="preserve" y="-19.072106154013795">+r+w+c<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.005709948562414" distanceToCenter="true" position="left" ratio="0.5400661519081636" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e16" source="n0" target="n0">
- <data key="d9"/>
+ <edge id="e26" source="n7" target="n0">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
- <y:Point x="345.8278580555715" y="14.042778699409723"/>
+ <y:Path sx="-23.11331187254541" sy="-28.667399723622253" tx="69.36407250951441" ty="12.145183315960296">
+ <y:Point x="754.0" y="9.0"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="-9.078212221055765" anchorY="-30.900370358016062" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="0.06348316371440887" textColor="#FF0000" upX="-0.6488929347077806" upY="0.7608797272147051" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-64.70100622553531" xml:space="preserve" y="-60.45324815313966">restart
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="-0.029403276026943814" distance="2.2643914905390643" distanceToCenter="false" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e27" source="n15" target="n2">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="31.940794257139714" ty="26.092285431562686">
+ <y:Point x="301.0536897517252" y="432.0091427412095"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-50.50778220840152" xml:space="preserve" y="-19.060801369884473">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.994382587656453" distanceToCenter="true" position="right" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e28" source="n9" target="n9">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="23.0" sy="-28.305366216434606" tx="-23.47596608655624" ty="-6.3444287164346065">
+ <y:Point x="442.47596608655624" y="171.0038208221403"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="42.2265625" x="-38.28843346365477" xml:space="preserve" y="-39.41837475902949">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="0.851185318054408" distanceToCenter="true" position="left" ratio="11.065409134708744" segment="-2"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.919921875" x="-40.732974362389086" xml:space="preserve" y="-39.93920653141785">ยฑrยฑw+c<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.823325666930085" distanceToCenter="false" position="right" ratio="0.4318664621721696" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e17" source="n3" target="n0">
- <data key="d9"/>
+ <edge id="e29" source="n8" target="n8">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-44.0" sy="0.0" tx="44.0" ty="0.0"/>
+ <y:Path sx="38.26356930993384" sy="-10.67678572882204" tx="-51.23465570176652" ty="10.222598694162002">
+ <y:Point x="469.1556747089578" y="283.32117084459526"/>
+ </y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="42.2265625" x="-119.92863738246035" xml:space="preserve" y="22.565682416565053">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.328015368693165" distanceToCenter="true" position="left" ratio="0.2805018761699686" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.919921875" x="-38.10411469078616" xml:space="preserve" y="-40.344160475450224">ยฑrยฑwยฑc<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="1.9573788154470968" distanceToCenter="false" position="right" ratio="0.8086000895714727" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e18" source="n6" target="n6">
- <data key="d9"/>
+ <edge id="e30" source="n8" target="n15">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="19.017944130896808" sy="13.512544433732373" tx="44.0" ty="0.0">
- <y:Point x="789.2401942572766" y="74.28285443190316"/>
+ <y:Path sx="24.79744550444724" sy="28.08079657722942" tx="-111.63061149110604" ty="-19.881866335687505"/>
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="24.76822904379071" anchorY="18.07728263342267" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#0000FF" upX="0.5521260412507701" upY="-0.8337606578465746" verticalTextPosition="bottom" visible="true" width="39.56640625" x="24.76822904379071" xml:space="preserve" y="2.9588569548140775">delete<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.669472523891792" distanceToCenter="true" position="left" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e31" source="n16" target="n2">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="42.516462669323516" ty="22.668084425223412">
+ <y:Point x="591.0" y="385.0875296808884"/>
+ <y:Point x="314.1254391971893" y="385.0875296808884"/>
</y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="-20.957766005504823" anchorY="-6.125587408234992" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="357.9569091796875" textColor="#FF0000" upX="0.547366037082979" upY="0.8368933154519008" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-59.55975294025685" xml:space="preserve" y="-6.125587408234992">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="6.726206841216137" distanceToCenter="true" position="right" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e32" source="n16" target="n7">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="42.2265625" x="5.441708500135633" xml:space="preserve" y="15.798604455128782">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="0.0" distanceToCenter="false" position="right" ratio="6.720318614416623" segment="-2"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="79.33166823062834" anchorY="-14.793956669998579" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.37614628187255794" upY="-0.9265602919580842" verticalTextPosition="bottom" visible="true" width="58.41015625" x="67.19507335458408" xml:space="preserve" y="-66.66076668724129">kill saved
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.000475017470663" distanceToCenter="true" position="center" ratio="1.0" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e19" source="n1" target="n0">
- <data key="d9"/>
+ <edge id="e33" source="n15" target="n7">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="11.100571159856088" sy="-14.501222602423539" tx="-13.929103404286025" ty="14.241300677086956"/>
+ <y:Path sx="130.8151494008564" sy="-14.37636775316929" tx="-33.23532081466578" ty="27.17209661502153"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="18.553360681792412" anchorY="-25.696531015585236" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.7792165417141262" upY="-0.626754801432807" verticalTextPosition="bottom" visible="true" width="42.2265625" x="4.423973233991733" xml:space="preserve" y="-69.96499431316647">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.714745422657094" distanceToCenter="true" position="left" ratio="0.342725244313297" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="31.595423163733358" anchorY="-20.62363924121223" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.8542292680805365" upY="-0.5198964873458859" verticalTextPosition="bottom" visible="true" width="72.419921875" x="4.033181935822299" xml:space="preserve" y="-99.26164119846271">delete done
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="-0.0019180663395985675" distance="30.0" distanceToCenter="true" position="center" ratio="-2.2737367544323206E-13" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e20" source="n5" target="n2">
- <data key="d9"/>
+ <edge id="e34" source="n9" target="n17">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="-116.86928090195774" ty="18.61209057989339"/>
+ <y:LineStyle color="#0000FF" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="31.7175242288165" anchorY="-4.7911150915300595" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#0000FF" upX="-0.626389814608993" upY="-0.7795099743775645" verticalTextPosition="bottom" visible="true" width="39.56640625" x="11.50666536682321" xml:space="preserve" y="-54.72648548423777">delete
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e35" source="n17" target="n7">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="14.454784649358558" sy="14.171691206036428" tx="-44.0" ty="0.0"/>
+ <y:Path sx="127.63684097356065" sy="15.436461616125996" tx="-51.023741528662114" ty="-22.80611330492505"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="16.803286936629164" anchorY="44.754330765062605" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.7162165042990318" upY="-0.6978781548162079" verticalTextPosition="bottom" visible="true" width="42.2265625" x="16.803286936629164" xml:space="preserve" y="32.099837035934335">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.13187428633631" distanceToCenter="true" position="right" ratio="0.6351411488884056" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="14.587430972271477" anchorY="31.37281812145281" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.6055623798726133" upY="-0.7957978412153534" verticalTextPosition="bottom" visible="true" width="72.419921875" x="14.587430972271477" xml:space="preserve" y="5.695903400988673">delete done
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="10.0" distanceToCenter="false" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e21" source="n4" target="n0">
- <data key="d9"/>
+ <edge id="e36" source="n17" target="n0">
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="27.72843780550508" sy="-11.640146089764052" tx="-37.203018275484965" ty="-7.999525101672361"/>
+ <y:Path sx="0.0" sy="0.0" tx="14.672141944428517" ty="25.463489502850763"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="-38.28153394842229" anchorY="-16.773801256745173" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="-0.016683072883772274" upY="0.9998608278551344" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-84.321302802064" xml:space="preserve" y="-17.533011409463715">restart
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e37" source="n18" target="n7">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="72.71794189796697" anchorY="-17.741924379478654" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.2150948732018046" upY="-0.9765931576261937" verticalTextPosition="bottom" visible="true" width="42.2265625" x="68.81766689248737" xml:space="preserve" y="-44.53302210218295">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.75179091058278" distanceToCenter="true" position="left" ratio="0.42706763912791285" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="58.41015625" x="30.354223311775286" xml:space="preserve" y="-16.132805170284144">kill saved
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.7768532826181705" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e22" source="n2" target="n2">
- <data key="d9"/>
+ <edge id="e38" source="n2" target="n23">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-10.583536701642942" sy="29.6168926436971" tx="-22.923118374842716" ty="28.545544758790527">
+ <y:Point x="235.6688739136506" y="507.0"/>
+ <y:Point x="1004.3333333333333" y="507.0"/>
+ </y:Path>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="-5.567062901698819" anchorY="46.22877831478695" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="0.5122941136360168" textColor="#800000" upX="0.9711772522900732" upY="-0.23835843730462614" verticalTextPosition="bottom" visible="true" width="65.640625" x="-5.567062901698819" xml:space="preserve" y="38.39840936026147">kill owner
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="false" position="center" ratio="0.2848727708100603" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e39" source="n1" target="n20">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="-65.46734025726944" ty="-16.546552357831843">
+ <y:Point x="183.0" y="5.0"/>
+ <y:Point x="298.0" y="-129.0"/>
+ <y:Point x="551.0" y="-129.0"/>
+ </y:Path>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="15.170497110918774" anchorY="-8.923609179765151" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" upX="-0.9927550037849064" upY="0.12015615864378441" verticalTextPosition="bottom" visible="true" width="65.640625" x="-24.748488909055762" xml:space="preserve" y="-74.08866810008378">kill owner
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="false" position="center" ratio="-0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e40" source="n4" target="n4">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-85.68861272092181" sy="1.4879282959528268" tx="-39.68861272092181" ty="16.487928295952827">
+ <y:Point x="24.0" y="135.51207170404717"/>
+ </y:Path>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" verticalTextPosition="bottom" visible="true" width="65.640625" x="-4.750859663105921" xml:space="preserve" y="29.13051338130009">kill owner<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e41" source="n5" target="n4">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="17.382711458130984" anchorY="-104.7383585258217" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" upX="-0.9999289332879167" upY="-0.011921760511312019" verticalTextPosition="bottom" visible="true" width="65.640625" x="-14.880620529986949" xml:space="preserve" y="-170.75898171642166">kill owner
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e42" source="n17" target="n17">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
- <y:Point x="203.0886591696214" y="295.5033242120122"/>
+ <y:Point x="690.3530839671901" y="48.51207170404717"/>
</y:Path>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="42.2265625" x="-9.590665738951628" xml:space="preserve" y="22.011191593549654">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="13.074784808336569" distanceToCenter="true" position="left" ratio="6.042022354967836" segment="-2"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" verticalTextPosition="bottom" visible="true" width="65.640625" x="-56.08142531015369" xml:space="preserve" y="-27.42007246099189">kill owner<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.0" distanceToCenter="false" position="center" ratio="1.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e23" source="n8" target="n2">
+ <edge id="e43" source="n15" target="n17">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="117.64691603280994" sy="-3.009142741209473" tx="106.62896604338096" ty="20.980433140275707"/>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="15.521161283180732" anchorY="-17.578820702215523" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" upX="-0.9993750757949462" upY="0.03534767149113958" verticalTextPosition="bottom" visible="true" width="65.640625" x="-19.044543395738664" xml:space="preserve" y="-83.17842528681817">kill owner
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e44" source="n18" target="n0">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-68.7123163546596" sy="-20.921820629983927" tx="32.88429240564517" ty="29.90209341103973"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="-32.21079350956222" anchorY="-29.423948093795076" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="-0.3536121530440552" upY="0.9353921344652988" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-86.18796050434591" xml:space="preserve" y="-45.51606365224524">restart
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e45" source="n7" target="n19">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="26.614829141286123" ty="11.950771246842464">
- <y:Point x="379.1254391971893" y="295.0875296808884"/>
- <y:Point x="285.49418907424945" y="295.0875296808884"/>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+ <y:Point x="1155.0" y="135.0"/>
+ <y:Point x="1155.0" y="14.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="42.2265625" x="-96.78989693579211" xml:space="preserve" y="14.925386589537254">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.718441625445736" distanceToCenter="true" position="left" ratio="0.502281970046856" segment="1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="40.37687755725892" anchorY="2.1745562633510644" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.3723638820617711" upY="-0.9280868167019115" verticalTextPosition="bottom" visible="true" width="81.654296875" x="28.36232417510959" xml:space="preserve" y="-58.175855903195895">last rwc done
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="-0.011875136782729001" distance="30.0" distanceToCenter="true" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e24" source="n9" target="n0">
+ <edge id="e46" source="n19" target="n0">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="5.731400659936355" ty="11.192663010312629"/>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Path sx="0.0" sy="0.0" tx="70.06277181750886" ty="-11.308632626847142">
+ <y:Point x="738.5" y="-16.5"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="-6.644791176402634" anchorY="-45.7548071943084" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.8539319547737003" upY="0.520384681381348" verticalTextPosition="bottom" visible="true" width="42.2265625" x="-44.1030354724647" xml:space="preserve" y="-81.81341825330722">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.069496224652644" distanceToCenter="true" position="right" ratio="0.5454974242562394" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-95.76989677728284" anchorY="6.438961217517047" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="0.2338237809321775" upY="0.9722789926099303" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-140.01618687066443" xml:space="preserve" y="6.438961217517047">restart
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e25" source="n9" target="n1">
+ <edge id="e47" source="n20" target="n19">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-35.34252622324016" sy="8.942187263495612" tx="37.25981182851308" ty="7.992380279350925"/>
+ <y:Path sx="68.22341079099817" sy="-14.840091304253292" tx="-67.51814692901598" ty="-17.840091304253292"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="75.5078125" x="-104.6739728663735" xml:space="preserve" y="-17.786774298462603">last rw done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="8.720367048636998" distanceToCenter="true" position="right" ratio="0.5293192616653534" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="15.434405941162481" anchorY="16.296772617714296" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.005622933531657318" upY="-0.9999841911842899" verticalTextPosition="bottom" visible="true" width="58.41015625" x="15.252978476430101" xml:space="preserve" y="-16.296778727133773">kill saved
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="-0.005622963162484673" distance="30.0" distanceToCenter="false" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e26" source="n2" target="n8">
+ <edge id="e48" source="n15" target="n21">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="31.953203361267015" sy="-10.307390918648395" tx="-31.973351254374222" ty="-10.307390918648395"/>
+ <y:Path sx="148.93917428106033" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.919921875" x="45.03540296804721" xml:space="preserve" y="-19.072106154013795">+r+w+c<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.005709948562414" distanceToCenter="true" position="left" ratio="0.5400661519081636" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="43.81568703648486" anchorY="-7.692698018824444" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.5183397956412229" upY="-0.855174751880933" verticalTextPosition="bottom" visible="true" width="81.654296875" x="27.091129567748528" xml:space="preserve" y="-77.6101174278979">last rwc done
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e27" source="n7" target="n0">
+ <edge id="e49" source="n21" target="n19">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="17.64799511269962" ty="12.043848328367119"/>
+ <y:Path sx="94.35164449958506" sy="-21.562300964265944" tx="63.540205984084196" ty="19.606197365102012">
+ <y:Point x="1172.0" y="192.0"/>
+ <y:Point x="1172.0" y="1.7285922778638678"/>
+ </y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="-121.55194649261693" anchorY="-76.73061303132732" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.4209598329465266" upY="0.9070792793607582" verticalTextPosition="bottom" visible="true" width="42.2265625" x="-167.48797209584964" xml:space="preserve" y="-94.50629972723338">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.365856975346183" distanceToCenter="true" position="right" ratio="0.5000366300695136" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="21.028466641470914" anchorY="-10.570257809675184" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="0.8395476937294006" textColor="#000000" upX="-0.949721781788548" upY="-0.3130950928973264" verticalTextPosition="bottom" visible="true" width="72.419921875" x="-10.619381135955685" xml:space="preserve" y="-90.22400521083408">delete done
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="false" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e50" source="n22" target="n22">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="91.97308848779338" sy="-16.512071704047173" tx="29.0334394150712" ty="-29.29777168849232">
+ <y:Point x="1089.2314325293105" y="43.51207170404717"/>
+ </y:Path>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" verticalTextPosition="bottom" visible="true" width="65.640625" x="-48.584485439439504" xml:space="preserve" y="-48.76903333745673">kill owner
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="10.0" distanceToCenter="false" position="center" ratio="1.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e28" source="n16" target="n2">
+ <edge id="e51" source="n17" target="n22">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="18.064097820689597" ty="13.664632674132577">
- <y:Point x="275.457333963666" y="344.1761235083221"/>
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
+ <y:Point x="800.0" y="48.0"/>
+ <y:Point x="905.0" y="48.0"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="42.2265625" x="-192.14370846750944" xml:space="preserve" y="0.9279829026191919">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="9.994382587656453" distanceToCenter="true" position="left" ratio="0.40749739509495936" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="81.654296875" x="59.60809326171875" xml:space="preserve" y="-37.34123992919923">last rwc done
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e29" source="n16" target="n7">
+ <edge id="e52" source="n21" target="n22">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Path sx="57.013018778578044" sy="-27.20830256035157" tx="91.93418296074992" ty="22.1308088577278"/>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="72.419921875" x="5.706653002872827" xml:space="preserve" y="-93.1680316826237">delete done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="41.91659445276315" distanceToCenter="true" position="right" ratio="1.0" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="15.746578753738277" anchorY="-9.165262522717853" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" upX="-0.9990411052382707" upY="0.04378207446312363" verticalTextPosition="bottom" visible="true" width="65.640625" x="-19.361989639021274" xml:space="preserve" y="-74.74294507124871">kill owner
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e30" source="n9" target="n9">
+ <edge id="e53" source="n21" target="n2">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
- <y:Point x="431.47596608655624" y="156.0038208221403"/>
+ <y:Path sx="20.72578420112997" sy="29.65314525408712" tx="25.80840170413086" ty="27.544306782716205">
+ <y:Point x="880.0" y="479.0"/>
+ <y:Point x="301.0" y="479.0"/>
</y:Path>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" anchorX="-197.36748150986398" anchorY="127.20489501953125" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="-1.2246467991473532E-16" upY="1.0" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-242.87529400986398" xml:space="preserve" y="127.20489501953125">restart
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.05565487212951472" segment="1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e54" source="n20" target="n0">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-65.67422847420744" sy="16.435470222136132" tx="44.05397482574898" ty="-26.849895640639183"/>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.919921875" x="-37.89623429599874" xml:space="preserve" y="-36.15734837155037">ยฑrยฑw+c<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="5.054648982679395" distanceToCenter="true" position="right" ratio="7.42970862240162" segment="-2"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-30.395815728128923" anchorY="-6.226655310221076" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="0.06348316371440887" textColor="#FF0000" upX="0.3897029174683606" upY="0.9209406257281998" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-72.33870694016943" xml:space="preserve" y="-6.226655310221076">restart
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.253782031152642" distance="81.32920258771165" distanceToCenter="false" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e31" source="n8" target="n8">
+ <edge id="e55" source="n22" target="n19">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="44.0" sy="0.0" tx="-32.204640726824664" ty="10.222598694162002">
- <y:Point x="445.1556747089578" y="246.3211708445953"/>
- </y:Path>
+ <y:Path sx="36.13203517379452" sy="-28.941759204047173" tx="30.744556978383116" ty="27.924597339556847"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="52.919921875" x="-41.32400424821128" xml:space="preserve" y="-48.89784390234962">ยฑrยฑwยฑc<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="1.9573788154470968" distanceToCenter="false" position="right" ratio="0.8086000895714727" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="12.222152551615181" anchorY="-24.873068770461245" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.9864828660033" upY="0.16386444117597654" verticalTextPosition="bottom" visible="true" width="72.419921875" x="-31.4743836998273" xml:space="preserve" y="-96.31408085744633">delete done
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="36.99999999999995" distanceToCenter="true" position="center" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e32" source="n8" target="n16">
+ <edge id="e56" source="n7" target="n7">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-22.390438087222755" sy="16.655571283565394" tx="0.0" ty="30.0">
+ <y:Point x="992.2314325293105" y="251.51207170404717"/>
+ </y:Path>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" verticalTextPosition="bottom" visible="true" width="65.640625" x="-0.23032697799067137" xml:space="preserve" y="15.21083409552773">kill owner
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="23.84382024909209" distanceToCenter="true" position="right" ratio="0.32607294049440866" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e57" source="n19" target="n19">
+ <data key="d10">
+ <y:PolyLineEdge>
+ <y:Path sx="-35.197834429015984" sy="12.271407722136132" tx="10.729221917440896" ty="29.768861447088725">
+ <y:Point x="1001.9270563464569" y="-31.487928295952827"/>
+ </y:Path>
+ <y:LineStyle color="#800000" type="line" width="1.0"/>
+ <y:Arrows source="none" target="standard"/>
+ <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#800000" verticalTextPosition="bottom" visible="true" width="65.640625" x="-3.0120308161378944" xml:space="preserve" y="17.28048924530048">kill owner
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="23.84382024909209" distanceToCenter="true" position="right" ratio="0.32607294049440866" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:BendStyle smoothed="false"/>
+ </y:PolyLineEdge>
+ </data>
+ </edge>
+ <edge id="e58" source="n23" target="n2">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="31.49835082164276" sy="8.011063035855614" tx="-38.920119619969455" ty="-6.972592983787763"/>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Path sx="-51.09322234633055" sy="21.862249731766667" tx="4.24623156558755" ty="29.92153361798944">
+ <y:Point x="980.3021213448196" y="495.99999999999994"/>
+ <y:Point x="278.90107184744454" y="495.99999999999994"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="43.22912268674946" anchorY="30.978643960824343" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.2971110205213774" upY="-0.9548429407419555" verticalTextPosition="bottom" visible="true" width="39.56640625" x="43.22912268674946" xml:space="preserve" y="13.664655949401851">delete<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="7.669472523891792" distanceToCenter="true" position="right" ratio="0.22719141601432052" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-27.988797319947935" anchorY="-0.863061912261287" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="0.5506626127378396" upY="0.8347279119166533" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-65.9754386239675" xml:space="preserve" y="-0.863061912261287">restart
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.0" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e33" source="n17" target="n8">
+ <edge id="e59" source="n23" target="n19">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="-43.33748350355211" sy="5.684438758359249" tx="36.257305354126174" ty="6.6461331514895505"/>
+ <y:Path sx="32.854097267713314" sy="-26.941783853259437" tx="42.998798444398744" ty="1.4210854715202004E-14">
+ <y:Point x="1203.1105489758893" y="347.0"/>
+ <y:Point x="1203.1105489758893" y="-21.666411341970118"/>
+ </y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="-17.515595641966684" anchorY="-0.5434478957805595" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="0.1643989873053555" upY="0.9863939238321441" verticalTextPosition="bottom" visible="true" width="42.2265625" x="-59.16762031628495" xml:space="preserve" y="-0.5434478957805595">restart<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="5.6508049884797265" distanceToCenter="true" position="left" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="26.316392620058423" anchorY="0.4374319217348557" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="0.6371670365333557" textColor="#000000" upX="-0.6121919317620387" upY="-0.7907091998234644" verticalTextPosition="bottom" visible="true" width="58.41015625" x="6.167211735104939" xml:space="preserve" y="-61.562993770369246">kill saved
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="2.888136438847995E-16" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
- <edge id="e34" source="n17" target="n7">
+ <edge id="e60" source="n22" target="n0">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
- <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
- <y:LineStyle color="#000000" type="line" width="1.0"/>
+ <y:Path sx="10.539312957498396" sy="-29.90016379454329" tx="74.5" ty="0.0">
+ <y:Point x="822.212015155839" y="-21.332808843623777"/>
+ </y:Path>
+ <y:LineStyle color="#FF0000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
- <y:EdgeLabel alignment="center" anchorX="18.66323554616406" anchorY="17.866926869038252" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" upX="-0.33339055393309996" upY="-0.9427888090915063" verticalTextPosition="bottom" visible="true" width="54.2734375" x="12.617927142424021" xml:space="preserve" y="-17.32273722529481">kill done<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="14.000475017470663" distanceToCenter="true" position="right" ratio="12.17672099452552" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
+ <y:EdgeLabel alignment="center" anchorX="-101.49976666134069" anchorY="-63.83706856831847" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#FF0000" upX="-0.4136605592849645" upY="0.9104311844901022" verticalTextPosition="bottom" visible="true" width="45.5078125" x="-156.2785147824481" xml:space="preserve" y="-82.66185573890377">restart
+ <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="true" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="0"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
diff --git a/ydb/core/blobstorage/dsproxy/CMakeLists.txt b/ydb/core/blobstorage/dsproxy/CMakeLists.txt
index ec25b93606..41a34e79d4 100644
--- a/ydb/core/blobstorage/dsproxy/CMakeLists.txt
+++ b/ydb/core/blobstorage/dsproxy/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(mock)
+add_subdirectory(ut)
+add_subdirectory(ut_fat)
add_library(core-blobstorage-dsproxy)
target_link_libraries(core-blobstorage-dsproxy PUBLIC
diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_get_impl.h b/ydb/core/blobstorage/dsproxy/dsproxy_get_impl.h
index 815ec33c28..e558506f2c 100644
--- a/ydb/core/blobstorage/dsproxy/dsproxy_get_impl.h
+++ b/ydb/core/blobstorage/dsproxy/dsproxy_get_impl.h
@@ -76,6 +76,7 @@ public:
false /*isIndexOnly*/, ForceBlockedGeneration, IsInternal, IsVerboseNoDataEnabled, CollectDebugInfo,
ReportDetailedPartMap);
ev->RestartCounter = counter;
+ ev->PhantomCheck = PhantomCheck;
return ev;
}
diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_mon.cpp b/ydb/core/blobstorage/dsproxy/dsproxy_mon.cpp
index 73afac8121..30440593be 100644
--- a/ydb/core/blobstorage/dsproxy/dsproxy_mon.cpp
+++ b/ydb/core/blobstorage/dsproxy/dsproxy_mon.cpp
@@ -5,9 +5,9 @@ static const TVector<float> Percentiles4 = {0.5f, 0.9f, 0.95f, 1.0f};
namespace NKikimr {
-TBlobStorageGroupProxyMon::TBlobStorageGroupProxyMon(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& percentileCounters,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& overviewCounters,
+TBlobStorageGroupProxyMon::TBlobStorageGroupProxyMon(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& percentileCounters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& overviewCounters,
const TIntrusivePtr<TBlobStorageGroupInfo>& info,
const TIntrusivePtr<TDsProxyNodeMon> &nodeMon,
bool constructLimited)
@@ -113,7 +113,7 @@ void TBlobStorageGroupProxyMon::BecomeFull() {
PutResponseTime.Initialize(ResponseGroup, "event", "put", "Response in millisec", Percentiles4);
- TIntrusivePtr<NMonitoring::TDynamicCounters> putTabletLogGroup =
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> putTabletLogGroup =
ResponseGroup->GetSubgroup("event", "putTabletLog");
PutTabletLogResponseTime.Initialize(ResponseGroup, "event", "putTabletLogAll", "ms", Percentiles1);
diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_mon.h b/ydb/core/blobstorage/dsproxy/dsproxy_mon.h
index def0fc399b..59e3007572 100644
--- a/ydb/core/blobstorage/dsproxy/dsproxy_mon.h
+++ b/ydb/core/blobstorage/dsproxy/dsproxy_mon.h
@@ -29,15 +29,15 @@ enum class ERequestType {
};
struct TRequestMonGroup {
- NMonitoring::TDynamicCounters::TCounterPtr VGetBlobsIssued;
- NMonitoring::TDynamicCounters::TCounterPtr VGetRangesIssued;
- NMonitoring::TDynamicCounters::TCounterPtr VGetBlobsReturnedWithData;
- NMonitoring::TDynamicCounters::TCounterPtr VGetBlobsReturnedWithNoData;
- NMonitoring::TDynamicCounters::TCounterPtr VGetBlobsReturnedWithErrors;
- NMonitoring::TDynamicCounters::TCounterPtr VPutBlobsIssued;
- NMonitoring::TDynamicCounters::TCounterPtr VMovedPatchBlobsIssued;
-
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters> &group) {
+ ::NMonitoring::TDynamicCounters::TCounterPtr VGetBlobsIssued;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VGetRangesIssued;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VGetBlobsReturnedWithData;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VGetBlobsReturnedWithNoData;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VGetBlobsReturnedWithErrors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VPutBlobsIssued;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VMovedPatchBlobsIssued;
+
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters> &group) {
VGetBlobsIssued = group->GetCounter("VGetBlobsIssued", true);
VGetRangesIssued = group->GetCounter("VGetRangesIssued", true);
VGetBlobsReturnedWithData = group->GetCounter("VGetBlobsReturnedWithData", true);
@@ -107,11 +107,11 @@ struct TResponseStatusGroup : TThrRefBase {
XX(NODATA) \
// END
-#define XX(NAME) NMonitoring::TDynamicCounters::TCounterPtr Num##NAME;
+#define XX(NAME) ::NMonitoring::TDynamicCounters::TCounterPtr Num##NAME;
ENUM_STATUS(XX)
#undef XX
- TResponseStatusGroup(const NMonitoring::TDynamicCounterPtr& group)
+ TResponseStatusGroup(const ::NMonitoring::TDynamicCounterPtr& group)
: TThrRefBase()
#define XX(NAME) , Num##NAME(group->GetCounter(#NAME, true))
ENUM_STATUS(XX)
@@ -138,19 +138,19 @@ public:
TIntrusivePtr<TDsProxyNodeMon> NodeMon;
protected:
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
- TIntrusivePtr<NMonitoring::TDynamicCounters> PercentileCounters;
- TIntrusivePtr<NMonitoring::TDynamicCounters> ResponseGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> PercentileCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ResponseGroup;
ui64 GroupIdGen = Max<ui64>(); // group id:group gen
std::atomic<bool> IsLimitedMon = ATOMIC_VAR_INIT(true);
- TIntrusivePtr<NMonitoring::TDynamicCounters> ThroughputGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ThroughputGroup;
std::unique_ptr<TThroughputMeter> PutTabletLogThroughput;
std::unique_ptr<TThroughputMeter> PutAsyncBlobThroughput;
std::unique_ptr<TThroughputMeter> PutUserDataThroughput;
std::unique_ptr<TThroughputMeter> PutThroughput;
- TIntrusivePtr<NMonitoring::TDynamicCounters> LatencyOverviewGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> LatencyOverviewGroup;
// log response time
@@ -172,15 +172,15 @@ protected:
NMonitoring::TPercentileTrackerLg<3, 4, 3> PatchResponseTime;
// event counters
- TIntrusivePtr<NMonitoring::TDynamicCounters> EventGroup;
- NMonitoring::TDynamicCounters::TCounterPtr EventPut;
- NMonitoring::TDynamicCounters::TCounterPtr EventPutBytes;
- NMonitoring::TDynamicCounters::TCounterPtr EventGetResBytes;
- TMap<ui32, NMonitoring::TDynamicCounters::TCounterPtr> EventPutBytesBuckets;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> EventGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventPut;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventPutBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventGetResBytes;
+ TMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr> EventPutBytesBuckets;
// handoff use reason
- TIntrusivePtr<NMonitoring::TDynamicCounters> HandoffGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> HandoffGroup;
// subevent counters
TRequestMonGroup GetGroup;
@@ -193,44 +193,44 @@ public:
TBlobStorageGroupProxyTimeStats TimeStats;
// handoff use reason
- std::array<NMonitoring::TDynamicCounters::TCounterPtr, 8> HandoffPartsSent;
+ std::array<::NMonitoring::TDynamicCounters::TCounterPtr, 8> HandoffPartsSent;
TAtomic PutSamplePPM = 0;
TAtomic GetSamplePPM = 0;
TAtomic DiscoverSamplePPM = 0;
// event counters
- NMonitoring::TDynamicCounters::TCounterPtr EventGet;
- NMonitoring::TDynamicCounters::TCounterPtr EventBlock;
- NMonitoring::TDynamicCounters::TCounterPtr EventDiscover;
- NMonitoring::TDynamicCounters::TCounterPtr EventRange;
- NMonitoring::TDynamicCounters::TCounterPtr EventCollectGarbage;
- NMonitoring::TDynamicCounters::TCounterPtr EventMultiGet;
- NMonitoring::TDynamicCounters::TCounterPtr EventIndexRestoreGet;
- NMonitoring::TDynamicCounters::TCounterPtr EventMultiCollect;
- NMonitoring::TDynamicCounters::TCounterPtr EventStatus;
- NMonitoring::TDynamicCounters::TCounterPtr EventStopPutBatching;
- NMonitoring::TDynamicCounters::TCounterPtr EventStopGetBatching;
- NMonitoring::TDynamicCounters::TCounterPtr EventPatch;
-
- NMonitoring::TDynamicCounters::TCounterPtr PutsSentViaPutBatching;
- NMonitoring::TDynamicCounters::TCounterPtr PutBatchesSent;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventBlock;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventDiscover;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventRange;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventCollectGarbage;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventMultiGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventIndexRestoreGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventMultiCollect;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventStatus;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventStopPutBatching;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventStopGetBatching;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventPatch;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr PutsSentViaPutBatching;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PutBatchesSent;
// active event counters
- TIntrusivePtr<NMonitoring::TDynamicCounters> ActiveRequestsGroup;
- NMonitoring::TDynamicCounters::TCounterPtr ActivePut;
- NMonitoring::TDynamicCounters::TCounterPtr ActivePutCapacity;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveGet;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveGetCapacity;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveBlock;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveDiscover;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveRange;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveCollectGarbage;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveMultiGet;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveIndexRestoreGet;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveMultiCollect;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveStatus;
- NMonitoring::TDynamicCounters::TCounterPtr ActivePatch;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ActiveRequestsGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActivePut;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActivePutCapacity;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveGetCapacity;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveBlock;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveDiscover;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveRange;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveCollectGarbage;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveMultiGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveIndexRestoreGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveMultiCollect;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveStatus;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActivePatch;
std::optional<TResponseStatusGroup> RespStatPut;
std::optional<TResponseStatusGroup> RespStatGet;
@@ -242,9 +242,9 @@ public:
std::optional<TResponseStatusGroup> RespStatPatch;
// special patch counters
- NMonitoring::TDynamicCounters::TCounterPtr VPatchContinueFailed;
- NMonitoring::TDynamicCounters::TCounterPtr VPatchPartPlacementVerifyFailed;
- NMonitoring::TDynamicCounters::TCounterPtr PatchesWithFallback;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VPatchContinueFailed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VPatchPartPlacementVerifyFailed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PatchesWithFallback;
TRequestMonGroup& GetRequestMonGroup(ERequestType request) {
switch (request) {
@@ -263,9 +263,9 @@ public:
}
- TBlobStorageGroupProxyMon(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& percentileCounters,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& overviewCounters,
+ TBlobStorageGroupProxyMon(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& percentileCounters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& overviewCounters,
const TIntrusivePtr<TBlobStorageGroupInfo>& info,
const TIntrusivePtr<TDsProxyNodeMon> &nodeMon,
bool isLimitedMon);
diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_nodemon.cpp b/ydb/core/blobstorage/dsproxy/dsproxy_nodemon.cpp
index 06e30bed2c..527a10ae86 100644
--- a/ydb/core/blobstorage/dsproxy/dsproxy_nodemon.cpp
+++ b/ydb/core/blobstorage/dsproxy/dsproxy_nodemon.cpp
@@ -5,7 +5,7 @@
#include <ydb/core/blobstorage/base/common_latency_hist_bounds.h>
namespace NKikimr {
-TDsProxyNodeMon::TDsProxyNodeMon(TIntrusivePtr<NMonitoring::TDynamicCounters> &counters, bool initForAllDeviceTypes)
+TDsProxyNodeMon::TDsProxyNodeMon(TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters, bool initForAllDeviceTypes)
: Group(GetServiceCounters(counters, "dsproxynode"))
{
TVector<float> percentiles4;
@@ -188,7 +188,7 @@ void TDsProxyNodeMon::CheckNodeMonCountersForDeviceType(NPDisk::EDeviceType type
if (!IsCountersPresentedForIdx[idx]) {
IsCountersPresentedForIdx[idx] = true;
- TIntrusivePtr<NMonitoring::TDynamicCounters> subGroup =
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> subGroup =
Group->GetSubgroup("media", to_lower(NPDisk::DeviceTypeStr(type, true)));
auto getNamedHisto = [&subGroup, &type] (const TString& name) {
diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_nodemon.h b/ydb/core/blobstorage/dsproxy/dsproxy_nodemon.h
index 7eb0338bad..c5fab00d3d 100644
--- a/ydb/core/blobstorage/dsproxy/dsproxy_nodemon.h
+++ b/ydb/core/blobstorage/dsproxy/dsproxy_nodemon.h
@@ -24,8 +24,8 @@ namespace NKikimr {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct TDsProxyNodeMon : public TThrRefBase {
- TIntrusivePtr<NMonitoring::TDynamicCounters> Group;
- TIntrusivePtr<NMonitoring::TDynamicCounters> LatencyOverview;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Group;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> LatencyOverview;
NMonitoring::TPercentileTracker<4, 512, 15> PutResponseTime;
@@ -66,35 +66,35 @@ struct TDsProxyNodeMon : public TThrRefBase {
std::array<bool, KnownDeviceTypesCount> IsCountersPresentedForIdx;
// restart counters
- NMonitoring::TDynamicCounters::TCounterPtr RestartPut;
- NMonitoring::TDynamicCounters::TCounterPtr RestartGet;
- NMonitoring::TDynamicCounters::TCounterPtr RestartBlock;
- NMonitoring::TDynamicCounters::TCounterPtr RestartDiscover;
- NMonitoring::TDynamicCounters::TCounterPtr RestartRange;
- NMonitoring::TDynamicCounters::TCounterPtr RestartCollectGarbage;
- NMonitoring::TDynamicCounters::TCounterPtr RestartIndexRestoreGet;
- NMonitoring::TDynamicCounters::TCounterPtr RestartStatus;
- NMonitoring::TDynamicCounters::TCounterPtr RestartPatch;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartPut;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartBlock;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartDiscover;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartRange;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartCollectGarbage;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartIndexRestoreGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartStatus;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestartPatch;
- std::array<NMonitoring::TDynamicCounters::TCounterPtr, 4> RestartHisto;
+ std::array<::NMonitoring::TDynamicCounters::TCounterPtr, 4> RestartHisto;
// accelerate counters
- NMonitoring::TDynamicCounters::TCounterPtr AccelerateEvVPutCount;
- NMonitoring::TDynamicCounters::TCounterPtr AccelerateEvVMultiPutCount;
- NMonitoring::TDynamicCounters::TCounterPtr AccelerateEvVGetCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AccelerateEvVPutCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AccelerateEvVMultiPutCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AccelerateEvVGetCount;
// malfunction counters
- NMonitoring::TDynamicCounters::TCounterPtr EstablishingSessionsTimeout;
- NMonitoring::TDynamicCounters::TCounterPtr EstablishingSessionsTimeout5min;
- NMonitoring::TDynamicCounters::TCounterPtr UnconfiguredTimeout;
- NMonitoring::TDynamicCounters::TCounterPtr UnconfiguredTimeout5min;
- NMonitoring::TDynamicCounters::TCounterPtr ConnectedAll;
- NMonitoring::TDynamicCounters::TCounterPtr ConnectedMinus1;
- NMonitoring::TDynamicCounters::TCounterPtr ConnectedMinus2;
- NMonitoring::TDynamicCounters::TCounterPtr ConnectedMinus3more;
-
- TDsProxyNodeMon(TIntrusivePtr<NMonitoring::TDynamicCounters> &counters, bool initForAllDeviceTypes);
+ ::NMonitoring::TDynamicCounters::TCounterPtr EstablishingSessionsTimeout;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EstablishingSessionsTimeout5min;
+ ::NMonitoring::TDynamicCounters::TCounterPtr UnconfiguredTimeout;
+ ::NMonitoring::TDynamicCounters::TCounterPtr UnconfiguredTimeout5min;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ConnectedAll;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ConnectedMinus1;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ConnectedMinus2;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ConnectedMinus3more;
+
+ TDsProxyNodeMon(TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters, bool initForAllDeviceTypes);
void CountPutPesponseTime(NPDisk::EDeviceType type, NKikimrBlobStorage::EPutHandleClass cls, ui32 size,
TDuration duration);
void CountGetResponseTime(NPDisk::EDeviceType type, NKikimrBlobStorage::EGetHandleClass cls, ui32 size,
diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_state.cpp b/ydb/core/blobstorage/dsproxy/dsproxy_state.cpp
index f2dcdce588..01f7b966f0 100644
--- a/ydb/core/blobstorage/dsproxy/dsproxy_state.cpp
+++ b/ydb/core/blobstorage/dsproxy/dsproxy_state.cpp
@@ -294,11 +294,11 @@ namespace NKikimr {
IsFullMonitoring = IsLimitedKeyless || fullIfPossible;
TString name = Sprintf("%09" PRIu32, GroupId);
- TIntrusivePtr<NMonitoring::TDynamicCounters> group = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> group = GetServiceCounters(
AppData()->Counters, "dsproxy")->GetSubgroup("blobstorageproxy", name);
- TIntrusivePtr<NMonitoring::TDynamicCounters> percentileGroup = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> percentileGroup = GetServiceCounters(
AppData()->Counters, "dsproxy_percentile")->GetSubgroup("blobstorageproxy", name);
- TIntrusivePtr<NMonitoring::TDynamicCounters> overviewGroup = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> overviewGroup = GetServiceCounters(
AppData()->Counters, "dsproxy_overview");
Mon.Reset(new TBlobStorageGroupProxyMon(group, percentileGroup, overviewGroup, Info, NodeMon, limited));
diff --git a/ydb/core/blobstorage/dsproxy/group_sessions.cpp b/ydb/core/blobstorage/dsproxy/group_sessions.cpp
index 9971c4a4e7..36858c9cc1 100644
--- a/ydb/core/blobstorage/dsproxy/group_sessions.cpp
+++ b/ydb/core/blobstorage/dsproxy/group_sessions.cpp
@@ -41,7 +41,7 @@ TGroupSessions::TGroupSessions(const TIntrusivePtr<TBlobStorageGroupInfo>& info,
auto& stateVDisk = GroupQueues->FailDomains[vdisk.FailDomainOrderNumber].VDisks[vd.VDisk];
const ui32 targetNodeId = info->GetActorId(vdisk.OrderNumber).NodeId();
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = GetServiceCounters(AppData()->Counters, "dsproxy_queue");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = GetServiceCounters(AppData()->Counters, "dsproxy_queue");
for (NKikimrBlobStorage::EVDiskQueueId queueId : VDiskQueues) {
ui32 interconnectChannel = 0;
diff --git a/ydb/core/blobstorage/dsproxy/ut/CMakeLists.txt b/ydb/core/blobstorage/dsproxy/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/dsproxy/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/dsproxy/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/dsproxy/ut/dsproxy_env_mock_ut.h b/ydb/core/blobstorage/dsproxy/ut/dsproxy_env_mock_ut.h
index 0f2350daf8..2167005b96 100644
--- a/ydb/core/blobstorage/dsproxy/ut/dsproxy_env_mock_ut.h
+++ b/ydb/core/blobstorage/dsproxy/ut/dsproxy_env_mock_ut.h
@@ -33,7 +33,7 @@ struct TDSProxyEnv {
TIntrusivePtr<TBlobStorageGroupInfo> Info;
TIntrusivePtr<TBlobStorageGroupProxyMon> Mon;
TBSProxyContextPtr BSProxyCtxPtr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> DynCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> DynCounters;
TIntrusivePtr<NKikimr::TStoragePoolCounters> StoragePoolCounters;
TDiskResponsivenessTracker::TPerDiskStatsPtr PerDiskStatsPtr;
TNodeLayoutInfoPtr NodeLayoutInfo;
@@ -67,11 +67,11 @@ struct TDSProxyEnv {
RealProxyActorId = MakeBlobStorageProxyID(groupId);
TIntrusivePtr<TDsProxyNodeMon> nodeMon = new TDsProxyNodeMon(runtime.GetAppData(nodeIndex).Counters, true);
TString name = Sprintf("%09" PRIu64, groupId);
- TIntrusivePtr<NMonitoring::TDynamicCounters> group = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> group = GetServiceCounters(
runtime.GetAppData(0).Counters, "dsproxy")->GetSubgroup("blobstorageproxy", name);
- TIntrusivePtr<NMonitoring::TDynamicCounters> percentileGroup = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> percentileGroup = GetServiceCounters(
runtime.GetAppData(0).Counters, "dsproxy_percentile")->GetSubgroup("blobstorageproxy", name);
- TIntrusivePtr<NMonitoring::TDynamicCounters> overviewGroup = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> overviewGroup = GetServiceCounters(
runtime.GetAppData(0).Counters, "dsproxy_overview");
BSProxyCtxPtr.Reset(new TBSProxyContext(group->GetSubgroup("subsystem", "memproxy")));
Mon = new TBlobStorageGroupProxyMon(group, percentileGroup, overviewGroup, Info, nodeMon, false);
@@ -90,7 +90,7 @@ struct TDSProxyEnv {
auto queues = runtime.GrabEdgeEventRethrow<TEvProxySessionsState>(handle);
GroupQueues = queues->GroupQueues;
NodeLayoutInfo = nullptr;
- DynCounters = new NMonitoring::TDynamicCounters();
+ DynCounters = new ::NMonitoring::TDynamicCounters();
StoragePoolCounters = new NKikimr::TStoragePoolCounters(DynCounters, "", {});
PerDiskStatsPtr = new TDiskResponsivenessTracker::TPerDiskStats;
}
diff --git a/ydb/core/blobstorage/dsproxy/ut/dsproxy_fault_tolerance_ut_runtime.h b/ydb/core/blobstorage/dsproxy/ut/dsproxy_fault_tolerance_ut_runtime.h
index bc33af4b86..51011107bb 100644
--- a/ydb/core/blobstorage/dsproxy/ut/dsproxy_fault_tolerance_ut_runtime.h
+++ b/ydb/core/blobstorage/dsproxy/ut/dsproxy_fault_tolerance_ut_runtime.h
@@ -22,7 +22,7 @@ namespace NKikimr {
class TFaultToleranceTestRuntime {
public:
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TIntrusivePtr<TBlobStorageGroupInfo> GroupInfo;
TVector<std::pair<TVDiskID, TActorId>> VDisks;
std::unique_ptr<TAppData> AppData;
@@ -30,7 +30,7 @@ public:
TProgramShouldContinue KikimrShouldContinue;
void Setup(TBlobStorageGroupType groupType, ui32 numFailDomains, ui32 numVDisksPerFailDomain, ui32 numRealms) {
- Counters = new NMonitoring::TDynamicCounters;
+ Counters = new ::NMonitoring::TDynamicCounters;
TIntrusivePtr<NScheme::TTypeRegistry> typeRegistry(new NScheme::TKikimrTypeRegistry());
auto functionRegistry = NKikimr::NMiniKQL::CreateFunctionRegistry(NKikimr::NMiniKQL::CreateBuiltinRegistry());
diff --git a/ydb/core/blobstorage/dsproxy/ut/dsproxy_put_ut.cpp b/ydb/core/blobstorage/dsproxy/ut/dsproxy_put_ut.cpp
index d2d39a3550..48c88d5350 100644
--- a/ydb/core/blobstorage/dsproxy/ut/dsproxy_put_ut.cpp
+++ b/ydb/core/blobstorage/dsproxy/ut/dsproxy_put_ut.cpp
@@ -38,7 +38,7 @@ void TestPutMaxPartCountOnHandoff(TErasureType::EErasureSpecies erasureSpecies)
TGroupMock group(groupId, erasureSpecies, domainCount, 1);
TIntrusivePtr<TGroupQueues> groupQueues = group.MakeGroupQueues();
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters(new NMonitoring::TDynamicCounters());
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters(new ::NMonitoring::TDynamicCounters());
TIntrusivePtr<TDsProxyNodeMon> nodeMon(new TDsProxyNodeMon(counters, true));
TIntrusivePtr<TBlobStorageGroupProxyMon> mon(new TBlobStorageGroupProxyMon(counters, counters, counters,
group.GetInfo(), nodeMon, false));
@@ -159,7 +159,7 @@ struct TTestPutAllOk {
TBatchedVec<TLogoBlobID> BlobIds;
TString Data;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TIntrusivePtr<TDsProxyNodeMon> NodeMon;
TIntrusivePtr<TBlobStorageGroupProxyMon> Mon;
@@ -175,7 +175,7 @@ struct TTestPutAllOk {
, GroupQueues(Group.MakeGroupQueues())
, BlobIds({TLogoBlobID(743284823, 10, 12345, 0, DataSize, 0), TLogoBlobID(743284823, 9, 12346, 0, DataSize, 0)})
, Data(AlphaData(DataSize))
- , Counters(new NMonitoring::TDynamicCounters())
+ , Counters(new ::NMonitoring::TDynamicCounters())
, NodeMon(new TDsProxyNodeMon(Counters, true))
, Mon(new TBlobStorageGroupProxyMon(Counters, Counters, Counters, Group.GetInfo(), NodeMon, false))
, LogCtx(NKikimrServices::BS_PROXY_PUT, false)
diff --git a/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.txt b/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.txt
+++ b/ydb/core/blobstorage/dsproxy/ut_fat/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/dsproxy/ut_fat/dsproxy_ut.cpp b/ydb/core/blobstorage/dsproxy/ut_fat/dsproxy_ut.cpp
index 11fcaeacfd..43183478c3 100644
--- a/ydb/core/blobstorage/dsproxy/ut_fat/dsproxy_ut.cpp
+++ b/ydb/core/blobstorage/dsproxy/ut_fat/dsproxy_ut.cpp
@@ -3362,15 +3362,15 @@ protected:
if (!TestStep) {
TIntrusivePtr<TDsProxyNodeMon> nodeMon = new TDsProxyNodeMon(NKikimr::AppData(ctx)->Counters, true);
TString name = Sprintf("%09" PRIu32, 0);
- TIntrusivePtr<NMonitoring::TDynamicCounters> group = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> group = GetServiceCounters(
NKikimr::AppData(ctx)->Counters, "dsproxy")->GetSubgroup("blobstorageproxy", name);
- TIntrusivePtr<NMonitoring::TDynamicCounters> percentileGroup = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> percentileGroup = GetServiceCounters(
NKikimr::AppData(ctx)->Counters, "dsproxy_percentile")->GetSubgroup("blobstorageproxy", name);
- TIntrusivePtr<NMonitoring::TDynamicCounters> overviewGroup = GetServiceCounters(
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> overviewGroup = GetServiceCounters(
NKikimr::AppData(ctx)->Counters, "dsproxy_overview");
Mon = new TBlobStorageGroupProxyMon(group, percentileGroup, overviewGroup, BsInfo, nodeMon, false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> DynCounters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> DynCounters = new ::NMonitoring::TDynamicCounters();
StoragePoolCounters = new NKikimr::TStoragePoolCounters(DynCounters, "", {});
PerDiskStatsPtr = new TDiskResponsivenessTracker::TPerDiskStats;
}
@@ -4051,7 +4051,7 @@ public:
SectorMapByPath.clear();
}
- THolder<TActorSystemSetup> BuildActorSystemSetup(ui32 nodeId, NMonitoring::TDynamicCounters &counters,
+ THolder<TActorSystemSetup> BuildActorSystemSetup(ui32 nodeId, ::NMonitoring::TDynamicCounters &counters,
TIntrusivePtr<TTableNameserverSetup> &nameserverTable, TInterconnectMock &interconnectMock) {
auto setup = MakeHolder<TActorSystemSetup>();
setup->NodeId = nodeId;
@@ -4102,7 +4102,7 @@ public:
}
TIntrusivePtr<NActors::NLog::TSettings> AddLoggerActor(THolder<TActorSystemSetup> &setup,
- NMonitoring::TDynamicCounters &counters) {
+ ::NMonitoring::TDynamicCounters &counters) {
NActors::TActorId loggerActorId = NActors::TActorId(setup->NodeId, "logger");
TIntrusivePtr<NActors::NLog::TSettings> logSettings(
@@ -4173,7 +4173,7 @@ public:
env->DrivesPerFailDomain, env->FailDomainCount, 1, &env->VDisks));
// first node
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters(new NMonitoring::TDynamicCounters());
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters(new ::NMonitoring::TDynamicCounters());
TInterconnectMock interconnect;
diff --git a/ydb/core/blobstorage/groupinfo/CMakeLists.txt b/ydb/core/blobstorage/groupinfo/CMakeLists.txt
index 22b295171d..e3534e5f6a 100644
--- a/ydb/core/blobstorage/groupinfo/CMakeLists.txt
+++ b/ydb/core/blobstorage/groupinfo/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-blobstorage-groupinfo)
target_link_libraries(core-blobstorage-groupinfo PUBLIC
diff --git a/ydb/core/blobstorage/groupinfo/ut/CMakeLists.txt b/ydb/core/blobstorage/groupinfo/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/groupinfo/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/groupinfo/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/incrhuge/CMakeLists.txt b/ydb/core/blobstorage/incrhuge/CMakeLists.txt
index ffc025f0b8..72ce583acc 100644
--- a/ydb/core/blobstorage/incrhuge/CMakeLists.txt
+++ b/ydb/core/blobstorage/incrhuge/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-blobstorage-incrhuge)
target_link_libraries(core-blobstorage-incrhuge PUBLIC
diff --git a/ydb/core/blobstorage/incrhuge/ut/CMakeLists.txt b/ydb/core/blobstorage/incrhuge/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/incrhuge/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/incrhuge/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/incrhuge/ut/incrhuge_basic_ut.cpp b/ydb/core/blobstorage/incrhuge/ut/incrhuge_basic_ut.cpp
index 59d3cb999c..ae065199ff 100644
--- a/ydb/core/blobstorage/incrhuge/ut/incrhuge_basic_ut.cpp
+++ b/ydb/core/blobstorage/incrhuge/ut/incrhuge_basic_ut.cpp
@@ -23,7 +23,7 @@ using namespace NKikimr::NIncrHuge;
class TTestEnv {
public:
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters = new ::NMonitoring::TDynamicCounters;
TString Path;
ui32 ChunkSize;
ui64 DiskSize;
diff --git a/ydb/core/blobstorage/nodewarden/CMakeLists.txt b/ydb/core/blobstorage/nodewarden/CMakeLists.txt
index 33c640008d..b6f8d2eb4d 100644
--- a/ydb/core/blobstorage/nodewarden/CMakeLists.txt
+++ b/ydb/core/blobstorage/nodewarden/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
+add_subdirectory(ut_sequence)
add_library(core-blobstorage-nodewarden)
target_link_libraries(core-blobstorage-nodewarden PUBLIC
@@ -14,6 +16,7 @@ target_link_libraries(core-blobstorage-nodewarden PUBLIC
library-cpp-json
ydb-core-base
core-blob_depot-agent
+ core-blobstorage-crypto
core-blobstorage-groupinfo
core-blobstorage-pdisk
ydb-core-control
diff --git a/ydb/core/blobstorage/nodewarden/node_warden_impl.cpp b/ydb/core/blobstorage/nodewarden/node_warden_impl.cpp
index f681fb7bed..02586ae450 100644
--- a/ydb/core/blobstorage/nodewarden/node_warden_impl.cpp
+++ b/ydb/core/blobstorage/nodewarden/node_warden_impl.cpp
@@ -1,5 +1,6 @@
#include "node_warden_impl.h"
+#include <ydb/core/blobstorage/crypto/secured_block.h>
#include <ydb/core/blobstorage/pdisk/drivedata_serializer.h>
#include <ydb/library/pdisk_io/file_params.h>
@@ -471,6 +472,9 @@ bool ObtainKey(TEncryptionKey *key, const NKikimrProto::TKeyRecord& record) {
key->Version = version;
key->Id = keyId;
+
+ SecureWipeBuffer((ui8*)data.Detach(), data.size());
+
return true;
}
diff --git a/ydb/core/blobstorage/nodewarden/node_warden_mon.cpp b/ydb/core/blobstorage/nodewarden/node_warden_mon.cpp
index 691a15f2ee..abf6884137 100644
--- a/ydb/core/blobstorage/nodewarden/node_warden_mon.cpp
+++ b/ydb/core/blobstorage/nodewarden/node_warden_mon.cpp
@@ -89,10 +89,10 @@ void TNodeWarden::RenderWholePage(IOutputStream& out) {
</style>
)__";
- H2() { out << "NodeWarden on node " << LocalNodeId; }
+ TAG(TH2) { out << "NodeWarden on node " << LocalNodeId; }
RenderLocalDrives(out);
- H3() { out << "PDisks"; }
+ TAG(TH3) { out << "PDisks"; }
TABLE_CLASS("table oddgray") {
TABLEHEAD() {
TABLER() {
@@ -114,7 +114,7 @@ void TNodeWarden::RenderWholePage(IOutputStream& out) {
}
}
- H3() { out << "VDisks"; }
+ TAG(TH3) { out << "VDisks"; }
TABLE_CLASS("table oddgray") {
TABLEHEAD() {
TABLER() {
@@ -223,10 +223,10 @@ void TNodeWarden::RenderDSProxies(IOutputStream& out) {
numStarted += group.ProxyRunning;
}
- H3() { out << "Started DSProxies"; }
+ TAG(TH3) { out << "Started DSProxies"; }
createTable(out, "started", numStarted);
- H3() { out << "Ejected DSProxies"; }
+ TAG(TH3) { out << "Ejected DSProxies"; }
createTable(out, "ejected", numEjected);
}
}
@@ -235,7 +235,7 @@ void TNodeWarden::RenderLocalDrives(IOutputStream& out) {
TVector<NPDisk::TDriveData> onlineLocalDrives = ListLocalDrives();
HTML(out) {
- H3() { out << "LocalDrives"; }
+ TAG(TH3) { out << "LocalDrives"; }
out << "\n";
TABLE_CLASS("table oddgray") {
TABLEHEAD() {
diff --git a/ydb/core/blobstorage/nodewarden/ut/CMakeLists.txt b/ydb/core/blobstorage/nodewarden/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/nodewarden/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/nodewarden/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.txt b/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.txt
+++ b/ydb/core/blobstorage/nodewarden/ut_sequence/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/pdisk/CMakeLists.txt b/ydb/core/blobstorage/pdisk/CMakeLists.txt
index 00c2d93ff9..83f7d5aee6 100644
--- a/ydb/core/blobstorage/pdisk/CMakeLists.txt
+++ b/ydb/core/blobstorage/pdisk/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(mock)
+add_subdirectory(ut)
add_library(core-blobstorage-pdisk)
target_link_libraries(core-blobstorage-pdisk PUBLIC
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk.h
index 8e722ce42a..32ced7d704 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk.h
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk.h
@@ -17,7 +17,7 @@
namespace NKikimr {
IActor* CreatePDisk(const TIntrusivePtr<TPDiskConfig> &cfg, const NPDisk::TKey &mainKey,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters);
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters);
namespace NPDisk {
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_actor.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_actor.cpp
index 5ff29d8685..ec4ff19681 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_actor.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_actor.cpp
@@ -69,7 +69,7 @@ class TPDiskActor : public TActorBootstrapped<TPDiskActor> {
TIntrusivePtr<TPDiskConfig> Cfg;
TKey MainKey;
TList<TInitQueueItem> InitQueue;
- const TIntrusivePtr<NMonitoring::TDynamicCounters> PDiskCounters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> PDiskCounters;
TIntrusivePtr<TPDisk> PDisk;
bool IsMagicAlreadyChecked = false;
@@ -196,7 +196,7 @@ public:
}
TPDiskActor(const TIntrusivePtr<TPDiskConfig>& cfg, const NPDisk::TKey &mainKey,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters)
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters)
: Cfg(cfg)
, MainKey(mainKey)
, PDiskCounters(GetServiceCounters(counters, "pdisks")
@@ -205,6 +205,10 @@ public:
{
}
+ ~TPDiskActor() {
+ SecureWipeBuffer((ui8*)&MainKey, sizeof(MainKey));
+ }
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Actor handlers
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1077,7 +1081,7 @@ public:
// PDisk Creation
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IActor* CreatePDisk(const TIntrusivePtr<TPDiskConfig> &cfg, const NPDisk::TKey &mainKey,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters) {
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters) {
return new NPDisk::TPDiskActor(cfg, mainKey, counters);
}
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_actorsystem_creator.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_actorsystem_creator.h
index c74201d451..349e00d0b8 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_actorsystem_creator.h
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_actorsystem_creator.h
@@ -16,7 +16,7 @@ namespace NKikimr {
class TActorSystemCreator {
std::unique_ptr<TAppData> AppData;
std::shared_ptr<NPDisk::IIoContextFactory> IoContext;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
std::unique_ptr<NActors::TActorSystem> ActorSystem;
@@ -50,7 +50,7 @@ public:
NKikimrServices::EServiceKikimr_MAX,
NKikimrServices::EServiceKikimr_Name
);
- Counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ Counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
NActors::TLoggerActor *loggerActor = new NActors::TLoggerActor(logSettings, NActors::CreateNullBackend(),
GetServiceCounters(Counters, "utils"));
NActors::TActorSetupCmd loggerActorCmd(loggerActor, NActors::TMailboxType::Simple, 2);
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_ut.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_ut.cpp
index 9f408f6e4c..2358f3f014 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_ut.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_blockdevice_ut.cpp
@@ -169,7 +169,7 @@ void WaitForValue(TAtomic *counter, TDuration maxDuration, TAtomicBase expectedV
}
void RunTestMultipleRequestsFromCompletionAction() {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
const ui32 dataSize = 4 << 10;
const ui64 generations = 8;
@@ -207,7 +207,7 @@ void RunTestMultipleRequestsFromCompletionAction() {
}
void RunTestDestructionWithMultipleFlushesFromCompletionAction() {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
const ui32 dataSize = 4 << 10;
const i32 generations = 8;
@@ -232,7 +232,7 @@ void RunTestDestructionWithMultipleFlushesFromCompletionAction() {
}
void RunWriteTestWithSectorMap(NPDisk::NSectorMap::EDiskMode diskMode, ui32 diskSize, ui32 bufferSize, bool sequential = true) {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
TActorSystemCreator creator;
@@ -268,7 +268,7 @@ Y_UNIT_TEST_SUITE(TBlockDeviceTest) {
}
Y_UNIT_TEST(TestDeviceWithSubmitGetThread) {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
const ui32 fileSize = 4 << 20;
const ui32 dataSize = 4 << 10;
@@ -342,7 +342,7 @@ Y_UNIT_TEST_SUITE(TBlockDeviceTest) {
/*
Y_UNIT_TEST(TestRabbitCompletionAction) {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
const ui32 dataSize = 4 << 10;
const i32 generations = 8;
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_completion_impl.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_completion_impl.h
index 2baba160c5..5e861add10 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_completion_impl.h
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_completion_impl.h
@@ -26,13 +26,13 @@ class TCompletionEventSender : public TCompletionAction {
TPDisk *PDisk;
const TActorId Recipient;
THolder<IEventBase> Event;
- NMonitoring::TDynamicCounters::TCounterPtr Counter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Counter;
public:
THolder<TRequestBase> Req;
TCompletionEventSender(TPDisk *pDisk, const TActorId &recipient, IEventBase *event,
- NMonitoring::TDynamicCounters::TCounterPtr &counter)
+ ::NMonitoring::TDynamicCounters::TCounterPtr &counter)
: PDisk(pDisk)
, Recipient(recipient)
, Event(event)
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.cpp
index fd431f2fd9..d4e7f0e223 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.cpp
@@ -231,7 +231,7 @@ void TDriveEstimator::EstimateGlueingDeadline(ui32 outGlueingDeadline[TDriveMode
TDriveEstimator::TDriveEstimator(const TString filename)
: Filename(filename)
- , Counters(new NMonitoring::TDynamicCounters())
+ , Counters(new ::NMonitoring::TDynamicCounters())
, PDiskMon(Counters, 0, nullptr)
, ActorSystemCreator(new TActorSystemCreator)
, ActorSystem(ActorSystemCreator->GetActorSystem())
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.h
index 3be444f233..35621fb27c 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.h
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_driveestimator.h
@@ -18,7 +18,7 @@ namespace NPDisk {
class TDriveEstimator {
TString Filename;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TPDiskMon PDiskMon;
std::unique_ptr<TActorSystemCreator> ActorSystemCreator;
TActorSystem *ActorSystem;
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_free_chunks.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_free_chunks.h
index f5dbe53bc1..17a49fd0c0 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_free_chunks.h
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_free_chunks.h
@@ -18,11 +18,11 @@ class TFreeChunks {
protected:
TDeque<TChunkIdx> FreeChunks; // TODO(cthulhu): preallocate and use a vector here to reduce allocation count.
TAtomic FreeChunkCount;
- NMonitoring::TDynamicCounters::TCounterPtr MonFreeChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MonFreeChunks;
ui64 OutOfOrderCount;
const ui64 SortFreeChunksPerItems;
public:
- TFreeChunks(NMonitoring::TDynamicCounters::TCounterPtr &monFreeChunks, ui64 sortFreeChunksPerItems)
+ TFreeChunks(::NMonitoring::TDynamicCounters::TCounterPtr &monFreeChunks, ui64 sortFreeChunksPerItems)
: FreeChunkCount(0)
, MonFreeChunks(monFreeChunks)
, OutOfOrderCount(0)
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp
index 0707ce828f..9720f7b763 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp
@@ -21,7 +21,7 @@ LWTRACE_USING(BLOBSTORAGE_PROVIDER);
// Initialization
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-TPDisk::TPDisk(const TIntrusivePtr<TPDiskConfig> cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters)
+TPDisk::TPDisk(const TIntrusivePtr<TPDiskConfig> cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters)
: PDiskId(cfg->PDiskId)
, Mon(counters, PDiskId, cfg.Get())
, DriveModel(cfg->DriveModelSeekTimeNs,
@@ -507,19 +507,14 @@ bool TPDisk::ReleaseUnusedLogChunks(TCompletionEventSender *completion) {
SysLogRecord.LogHeadChunkPreviousNonce = ChunkState[gapEnd->ChunkIdx].PreviousNonce;
PrintLogChunksInfo("cut tail log");
return true;
-
// Case 2: Chunks to be deleted located in the middle of LogChunksList
} else if (gapStart && gapEnd) {
Y_VERIFY(KIKIMR_PDISK_ENABLE_CUT_LOG_FROM_THE_MIDDLE);
IsLogChunksReleaseInflight = true;
Mon.SplicedLogChunks->Add(chunksToRelease.size());
- auto *releaseReq = ReqCreator.CreateFromArgs<TReleaseChunks>(*gapStart, *gapEnd, std::move(chunksToRelease));
-
- auto flushAction = MakeHolder<TCompletionEventSender>(this, THolder<TReleaseChunks>(releaseReq));
- TReqId reqId(AtomicIncrement(ReqCreator.LastReqId));
- WriteSysLogRestorePoint(flushAction.Release(), reqId, {});
+ completion->Req = THolder<TRequestBase>(ReqCreator.CreateFromArgs<TReleaseChunks>(*gapStart, *gapEnd, std::move(chunksToRelease)));
PrintLogChunksInfo("log splice");
- return false;
+ return true;
} else {
TStringStream ss;
ss << "Impossible situation - we have non empty chunksToRelease vector and cannot release them";
@@ -897,7 +892,7 @@ void TPDisk::SendChunkWriteError(TChunkWrite &chunkWrite, const TString &errorRe
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TPDisk::SendChunkReadError(const TIntrusivePtr<TChunkRead>& read, TStringStream& error, NKikimrProto::EReplyStatus status) {
- error << " for owner# " << read->Owner << " can't read chunkIdx# " << read->ChunkIdx;
+ error << " for ownerId# " << read->Owner << " can't read chunkIdx# " << read->ChunkIdx;
Y_VERIFY(status != NKikimrProto::OK);
LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, error.Str());
@@ -1126,8 +1121,11 @@ TVector<TChunkIdx> TPDisk::AllocateChunkForOwner(const TRequestBase *req, const
OnNonceChange(NonceData, req->ReqId, &req->TraceId);
// Remember who owns the sector, save chunk Nonce in order to be able to continue writing the chunk
TChunkState &state = ChunkState[chunkIdx];
- Y_VERIFY_S(state.OwnerId == OwnerUnallocated || state.OwnerId == OwnerUnallocatedTrimmed,
- "PDiskId# " << PDiskId << " chunkIdx# " << chunkIdx << " state# " << state.ToString());
+ Y_VERIFY_S(state.OwnerId == OwnerUnallocated
+ || state.OwnerId == OwnerUnallocatedTrimmed
+ || state.CommitState == TChunkState::FREE,
+ "PDiskId# " << PDiskId << " chunkIdx# " << chunkIdx << " desired ownerId# " << req->Owner
+ << " state# " << state.ToString());
state.Nonce = chunkNonce;
state.CurrentNonce = chunkNonce;
LOG_INFO_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << PDiskId << " chunkIdx# " << chunkIdx <<
@@ -1661,7 +1659,7 @@ void TPDisk::ForceDeleteChunk(TChunkIdx chunkIdx) {
switch (state.CommitState) {
case TChunkState::DATA_ON_QUARANTINE:
LOG_NOTICE_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << PDiskId
- << " chunkIdx# " << chunkIdx << " owned by owner# " << state.OwnerId
+ << " chunkIdx# " << chunkIdx << " owned by ownerId# " << state.OwnerId
<< " is released from quarantine and marked as free at ForceDeleteChunk");
[[fallthrough]];
case TChunkState::DATA_RESERVED:
@@ -1685,6 +1683,7 @@ void TPDisk::ForceDeleteChunk(TChunkIdx chunkIdx) {
}
}
+// Called before logging anything about the kill
void TPDisk::KillOwner(TOwner owner, TOwnerRound killOwnerRound, TCompletionEventSender *completionAction) {
Y_UNUSED(killOwnerRound);
{
@@ -1701,18 +1700,38 @@ void TPDisk::KillOwner(TOwner owner, TOwnerRound killOwnerRound, TCompletionEven
" Line# %" PRIu32 " --CommitedDataChunks# %" PRIi64 " chunkIdx# %" PRIu32 " Marker# BPD84",
(ui32)PDiskId, (ui32)__LINE__, (i64)Mon.CommitedDataChunks->Val(), (ui32)i);
}
- if (state.HasAnyOperationsInProgress()) {
+ if (state.CommitState == TChunkState::DATA_ON_QUARANTINE) {
+ if (!pushedOwnerIntoQuarantine) {
+ pushedOwnerIntoQuarantine = true;
+ QuarantineOwners.push_back(owner);
+ LOG_NOTICE_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << PDiskId
+ << " push ownerId# " << owner
+ << " into quarantine as there is a chunk in DATA_ON_QUARANTINE");
+ }
+ } else if (state.HasAnyOperationsInProgress()
+ || state.CommitState == TChunkState::DATA_RESERVED_DELETE_IN_PROGRESS
+ || state.CommitState == TChunkState::DATA_COMMITTED_DELETE_IN_PROGRESS
+ || state.CommitState == TChunkState::DATA_RESERVED_DELETE_ON_QUARANTINE
+ || state.CommitState == TChunkState::DATA_COMMITTED_DELETE_ON_QUARANTINE) {
if (state.CommitState == TChunkState::DATA_RESERVED
|| state.CommitState == TChunkState::DATA_COMMITTED) {
state.CommitState = TChunkState::DATA_ON_QUARANTINE;
+ } else if (state.CommitState == TChunkState::DATA_COMMITTED_DELETE_IN_PROGRESS) {
+ state.CommitState = TChunkState::DATA_RESERVED_DELETE_IN_PROGRESS;
+ } else if (state.CommitState == TChunkState::DATA_COMMITTED_DELETE_ON_QUARANTINE) {
+ state.CommitState = TChunkState::DATA_RESERVED_DELETE_ON_QUARANTINE;
+ }
+
+ if (state.CommitState != TChunkState::DATA_RESERVED_DELETE_ON_QUARANTINE
+ && state.CommitState != TChunkState::DATA_RESERVED_DELETE_IN_PROGRESS) {
+ QuarantineChunks.push_back(i);
}
- QuarantineChunks.push_back(i);
if (!pushedOwnerIntoQuarantine) {
pushedOwnerIntoQuarantine = true;
QuarantineOwners.push_back(owner);
LOG_NOTICE_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << PDiskId
- << " push owner# " << owner << " into quarantine");
+ << " push ownerId# " << owner << " into quarantine");
}
} else {
ForceDeleteChunk(i);
@@ -1722,7 +1741,7 @@ void TPDisk::KillOwner(TOwner owner, TOwnerRound killOwnerRound, TCompletionEven
if (!pushedOwnerIntoQuarantine) {
Keeper.RemoveOwner(owner);
LOG_NOTICE_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << PDiskId
- << " removed owner# " << owner << " from chunks Keeper");
+ << " removed ownerId# " << owner << " from chunks Keeper");
}
TryTrimChunk(false, 0);
@@ -1945,11 +1964,20 @@ void TPDisk::ClearQuarantineChunks() {
return;
}
+ bool isKillInFlight = (
+ (Mon.YardSlay.Results->Val() != Mon.YardSlay.Requests->Val())
+ && (Mon.Harakiri.Results->Val() != Mon.Harakiri.Requests->Val()));
+
+ if (isKillInFlight) {
+ return;
+ }
+
TGuard<TMutex> guard(StateMutex);
{
const auto it = std::partition(QuarantineChunks.begin(), QuarantineChunks.end(), [&] (TChunkIdx i) {
return ChunkState[i].HasAnyOperationsInProgress()
- || ChunkState[i].CommitState == TChunkState::DATA_COMMITTED_ON_QUARANTINE;
+ || ChunkState[i].CommitState == TChunkState::DATA_COMMITTED_DELETE_ON_QUARANTINE
+ || ChunkState[i].CommitState == TChunkState::DATA_RESERVED_DELETE_ON_QUARANTINE;
});
for (auto delIt = it; delIt != QuarantineChunks.end(); ++delIt) {
ForceDeleteChunk(*delIt);
@@ -1965,7 +1993,7 @@ void TPDisk::ClearQuarantineChunks() {
for (auto delIt = it; delIt != QuarantineOwners.end(); ++delIt) {
Keeper.RemoveOwner(*delIt);
LOG_NOTICE_S(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << PDiskId
- << " removed owner# " << *delIt << " from chunks Keeper through QuarantineOwners");
+ << " removed ownerId# " << *delIt << " from chunks Keeper through QuarantineOwners");
}
QuarantineOwners.erase(it, QuarantineOwners.end());
*Mon.QuarantineOwners = QuarantineOwners.size();
@@ -2289,7 +2317,7 @@ void TPDisk::PrepareLogError(TLogWrite *logWrite, TStringStream& err, NKikimrPro
return;
}
- err << " error in TLogWrite for owner# " << logWrite->Owner << " ownerRound# " << logWrite->OwnerRound
+ err << " error in TLogWrite for ownerId# " << logWrite->Owner << " ownerRound# " << logWrite->OwnerRound
<< " lsn# " << logWrite->Lsn;
LOG_ERROR_S(*ActorSystem, NKikimrServices::BS_PDISK, err.Str());
@@ -2330,7 +2358,7 @@ bool TPDisk::PreprocessRequest(TRequestBase *request) {
NKikimrProto::EReplyStatus errStatus = CheckOwnerAndRound(request, err);
LOG_TRACE_S(*ActorSystem, NKikimrServices::BS_PDISK, "PreprocessRequest " << TypeName(*request)
- << " from owner# " << request->Owner << " round# " << request->OwnerRound
+ << " from ownerId# " << request->Owner << " round# " << request->OwnerRound
<< " errStatus# " << errStatus);
switch (request->GetType()) {
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h
index c8487df8a6..37a86da126 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h
@@ -175,7 +175,7 @@ public:
const bool UseHugePages;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Initialization
- TPDisk(const TIntrusivePtr<TPDiskConfig> cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters);
+ TPDisk(const TIntrusivePtr<TPDiskConfig> cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters);
TString DynamicStateToString(bool isMultiline);
bool ReadChunk0Format(ui8* formatSectors, const TKey& mainKey); // Called by actor
bool IsFormatMagicValid(ui8 *magicData, ui32 magicDataSize); // Called by actor
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_http.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_http.cpp
index 5565a0c829..958716228c 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_http.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_http.cpp
@@ -11,7 +11,7 @@ void TPDisk::RenderState(IOutputStream &str, THttpInfo &httpInfo) {
#define RED_TEXT(str, text) THtmlLightSignalRenderer(NKikimrWhiteboard::EFlag::Red, text).Output(str)
#define YELLOW_TEXT(str, text) THtmlLightSignalRenderer(NKikimrWhiteboard::EFlag::Yellow, text).Output(str)
HTML(str) {
- H4() {str << "Current state";}
+ TAG(TH4) {str << "Current state";}
TABLE_CLASS ("table") {
TABLEHEAD() {
TABLER() {
@@ -78,7 +78,7 @@ void TPDisk::RenderState(IOutputStream &str, THttpInfo &httpInfo) {
}
}
}
- H4() {str << "State description"; }
+ TAG(TH4) {str << "State description"; }
if (Cfg->SectorMap) {
PARA() {str << "Note - this is SectorMap device<br>"; }
}
@@ -86,7 +86,7 @@ void TPDisk::RenderState(IOutputStream &str, THttpInfo &httpInfo) {
PARA() {str << "Note - PDisk sector enctyption is disabled<br>"; }
}
PARA() {str << httpInfo.ErrorStr; }
- H4() {str << "Uptime"; }
+ TAG(TH4) {str << "Uptime"; }
PARA() {
TDuration uptime = TInstant::Now() - CreationTime;
if (uptime.Days() > 0) {
@@ -95,7 +95,7 @@ void TPDisk::RenderState(IOutputStream &str, THttpInfo &httpInfo) {
str << Sprintf("%02lu:%02lu:%02lu", uptime.Hours() % 24, uptime.Minutes() % 60, uptime.Seconds() % 60);
}
// Restart button
- H4() {str << "Restart"; }
+ TAG(TH4) {str << "Restart"; }
DIV() {
str << R"___(
<script>
@@ -141,29 +141,29 @@ void TPDisk::RenderState(IOutputStream &str, THttpInfo &httpInfo) {
}
}
if (Cfg->SectorMap) {
- H4() {str << "SectorMap"; }
+ TAG(TH4) {str << "SectorMap"; }
PRE() {str << Cfg->SectorMap->ToString();}
}
- H4() {str << "Config"; }
+ TAG(TH4) {str << "Config"; }
PRE() {str << Cfg->ToString(true);}
if (Mon.PDiskBriefState->Val() != TPDiskMon::TPDisk::Booting) {
- H4() {str << "Drive Data"; }
+ TAG(TH4) {str << "Drive Data"; }
PRE() {str << DriveData.ToString(true);}
- H4() {str << "Fair Scheduler"; }
+ TAG(TH4) {str << "Fair Scheduler"; }
PRE() {str << httpInfo.FairSchedulerStr;}
- H4() {str << "Format info"; }
+ TAG(TH4) {str << "Format info"; }
PRE() {str << Format.ToString(true);}
- H4() {str << "Drive model"; }
+ TAG(TH4) {str << "Drive model"; }
PRE() {str << DriveModel.ToString(true);}
- H4() {str << "Sys log record"; }
+ TAG(TH4) {str << "Sys log record"; }
PRE() {str << SysLogRecord.ToString(true);}
- H4() {str << "Logged NONCEs"; }
+ TAG(TH4) {str << "Logged NONCEs"; }
PRE() {str << LoggedNonces.ToString(true);}
- H4() {str << "Dynamic state"; }
+ TAG(TH4) {str << "Dynamic state"; }
PRE() {str << DynamicStateToString(true);}
- H4() {str << "Last Nonce Jump Log Page Header"; }
+ TAG(TH4) {str << "Last Nonce Jump Log Page Header"; }
PRE() {str << LastNonceJumpLogPageHeader2.ToString(true);}
- H4() {str << "VDisk statuses"; }
+ TAG(TH4) {str << "VDisk statuses"; }
PRE() {
for (const TOwnerData& data : OwnerData) {
if (data.VDiskId != TVDiskID::InvalidId) {
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp
index c9e09cc3a4..5db5cae52b 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp
@@ -511,7 +511,7 @@ void TPDisk::WriteSysLogRestorePoint(TCompletionAction *action, TReqId reqId, NW
if (ChunkState.size() > i
&& (ChunkState[i].CommitState == TChunkState::DATA_COMMITTED
|| ChunkState[i].CommitState == TChunkState::DATA_COMMITTED_DELETE_IN_PROGRESS
- || ChunkState[i].CommitState == TChunkState::DATA_COMMITTED_ON_QUARANTINE)
+ || ChunkState[i].CommitState == TChunkState::DATA_COMMITTED_DELETE_ON_QUARANTINE)
&& IsOwnerUser(ChunkState[i].OwnerId)) {
chunkOwners[i].OwnerId = ChunkState[i].OwnerId;
chunkOwners[i].Nonce = ChunkState[i].Nonce;
@@ -872,17 +872,19 @@ NKikimrProto::EReplyStatus TPDisk::BeforeLoggingCommitRecord(const TLogWrite &lo
switch (state.CommitState) {
case TChunkState::DATA_RESERVED:
Mon.UncommitedDataChunks->Dec();
- state.CommitState = TChunkState::DATA_ON_QUARANTINE;
+ state.CommitState = TChunkState::DATA_RESERVED_DELETE_ON_QUARANTINE;
break;
case TChunkState::DATA_COMMITTED:
Mon.CommitedDataChunks->Dec();
LOG_DEBUG(*ActorSystem, NKikimrServices::BS_PDISK, "PDiskId# %" PRIu32
" Line# %" PRIu32 " --CommitedDataChunks# %" PRIi64 " chunkIdx# %" PRIu32 " Marker# BPD10",
(ui32)PDiskId, (ui32)__LINE__, (i64)Mon.CommitedDataChunks->Val(), (ui32)chunkIdx);
- state.CommitState = TChunkState::DATA_COMMITTED_ON_QUARANTINE;
+ state.CommitState = TChunkState::DATA_COMMITTED_DELETE_ON_QUARANTINE;
break;
default:
- state.CommitState = TChunkState::DATA_ON_QUARANTINE;
+ Y_FAIL_S("PDiskID# " << PDiskId << " can't delete chunkIdx# " << chunkIdx
+ << " request ownerId# " << logWrite.Owner
+ << " with operations in progress as it is in unexpected CommitState# " << state.ToString());
break;
}
QuarantineChunks.push_back(chunkIdx);
@@ -900,7 +902,8 @@ NKikimrProto::EReplyStatus TPDisk::BeforeLoggingCommitRecord(const TLogWrite &lo
state.CommitState = TChunkState::DATA_COMMITTED_DELETE_IN_PROGRESS;
} else {
Y_FAIL_S("PDiskID# " << PDiskId << " can't delete chunkIdx# " << chunkIdx
- << " as it is in unexpected CommitState# " << state.ToString());
+ << " request ownerId# " << logWrite.Owner
+ << " as it is in unexpected CommitState# " << state.ToString());
}
}
@@ -952,7 +955,10 @@ void TPDisk::CommitChunk(ui32 chunkIdx) {
state.CommitState = TChunkState::DATA_COMMITTED;
break;
case TChunkState::DATA_ON_QUARANTINE:
- case TChunkState::DATA_COMMITTED_ON_QUARANTINE:
+ [[fallthrough]];
+ case TChunkState::DATA_COMMITTED_DELETE_ON_QUARANTINE:
+ [[fallthrough]];
+ case TChunkState::DATA_RESERVED_DELETE_ON_QUARANTINE:
// Do nothing
break;
default:
@@ -1003,7 +1009,6 @@ void TPDisk::DeleteChunk(ui32 chunkIdx, TOwner owner) {
TChunkState &state = ChunkState[chunkIdx];
switch (state.CommitState) {
// Chunk will be freed in TPDisk::ForceDeleteChunk() and may be released already
- case TChunkState::FREE:
case TChunkState::DATA_ON_QUARANTINE:
break;
case TChunkState::DATA_RESERVED_DELETE_IN_PROGRESS:
@@ -1019,12 +1024,19 @@ void TPDisk::DeleteChunk(ui32 chunkIdx, TOwner owner) {
state.CommitState = TChunkState::FREE;
Keeper.PushFreeOwnerChunk(owner, chunkIdx);
break;
- case TChunkState::DATA_COMMITTED_ON_QUARANTINE:
+ case TChunkState::DATA_COMMITTED_DELETE_ON_QUARANTINE:
// Mark chunk as quarantine, so it will be released through default quarantine way
+ Y_VERIFY(state.OwnerId == owner); // TODO DELETE
+ state.CommitState = TChunkState::DATA_ON_QUARANTINE;
+ break;
+ case TChunkState::DATA_RESERVED_DELETE_ON_QUARANTINE:
+ // Mark chunk as quarantine, so it will be released through default quarantine way
+ Y_VERIFY(state.OwnerId == owner); // TODO DELETE
state.CommitState = TChunkState::DATA_ON_QUARANTINE;
break;
default:
Y_FAIL_S("PDiskID# " << PDiskId << " can't delete chunkIdx# " << chunkIdx
+ << " requesting ownerId# " << owner
<< " as it is in unexpected CommitState# " << state.ToString());
}
}
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.cpp
index b67aca8332..7417cd837f 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.cpp
@@ -4,7 +4,7 @@
namespace NKikimr {
-TPDiskMon::TPDiskMon(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui32 pDiskId,
+TPDiskMon::TPDiskMon(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui32 pDiskId,
TPDiskConfig *cfg)
: Counters(counters)
, PDiskId(pDiskId)
@@ -218,7 +218,7 @@ TPDiskMon::TPDiskMon(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counter
CompletionThreadCPU = PDiskGroup->GetCounter("CompletionThreadCPU", true);
}
-NMonitoring::TDynamicCounters::TCounterPtr TPDiskMon::GetBusyPeriod(const TString& owner, const TString& queue) {
+::NMonitoring::TDynamicCounters::TCounterPtr TPDiskMon::GetBusyPeriod(const TString& owner, const TString& queue) {
return SchedulerGroup->GetCounter("SchedulerBusyPeriod_" + owner + "_" + queue, true);
}
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.h
index 7a1fc6fcd3..b4ffd62c21 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.h
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_mon.h
@@ -75,10 +75,10 @@ inline ui64 HPCyclesMs(ui64 ms) {
class TLightBase {
protected:
TString Name;
- NMonitoring::TDynamicCounters::TCounterPtr State; // Current state (0=OFF=green, 1=ON=red)
- NMonitoring::TDynamicCounters::TCounterPtr Count; // Number of switches to ON state
- NMonitoring::TDynamicCounters::TCounterPtr RedMs; // Time elapsed in ON state
- NMonitoring::TDynamicCounters::TCounterPtr GreenMs; // Time elapsed in OFF state
+ ::NMonitoring::TDynamicCounters::TCounterPtr State; // Current state (0=OFF=green, 1=ON=red)
+ ::NMonitoring::TDynamicCounters::TCounterPtr Count; // Number of switches to ON state
+ ::NMonitoring::TDynamicCounters::TCounterPtr RedMs; // Time elapsed in ON state
+ ::NMonitoring::TDynamicCounters::TCounterPtr GreenMs; // Time elapsed in OFF state
private:
ui64 RedCycles = 0;
ui64 GreenCycles = 0;
@@ -86,7 +86,7 @@ private:
NHPTimer::STime LastNow = 0;
ui64 UpdateThreshold = 0;
public:
- void Initialize(TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, const TString& name) {
+ void Initialize(TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, const TString& name) {
Name = name;
State = counters->GetCounter(name + "_state");
Count = counters->GetCounter(name + "_count", true);
@@ -96,7 +96,7 @@ public:
AdvancedTill = Now();
}
- void Initialize(TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, const TString& countName,
+ void Initialize(TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, const TString& countName,
const TString& redMsName,const TString& greenMsName) {
Count = counters->GetCounter(countName, true);
RedMs = counters->GetCounter(redMsName, true);
@@ -287,7 +287,7 @@ public:
: Bucket(1000ull * 1000ull * 1000ull, 0)
{}
- void Initialize(const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters,
+ void Initialize(const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters,
const TString& group, const TString& subgroup, const TString& name,
const TVector<float> &thresholds) {
Tracker.Initialize(counters, group, subgroup, name, thresholds);
@@ -309,7 +309,7 @@ private:
NMonitoring::THistogramPtr Histo;
public:
- void Initialize(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ void Initialize(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TString &name, NPDisk::EDeviceType deviceType) {
TString histName = name + "Ms";
// Histogram backets in milliseconds
@@ -414,7 +414,7 @@ struct TPDiskMon {
NHPTimer::STime ProcessingStartAt = 0;
NHPTimer::STime WaitingStartAt = 0;
- NMonitoring::TDynamicCounters::TCounterPtr PDiskThreadBusyTimeNs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PDiskThreadBusyTimeNs;
public:
NMonitoring::TPercentileTrackerLg<5, 4, 15> UpdateCycleTime;
@@ -424,7 +424,7 @@ struct TPDiskMon {
: BeginUpdateAt(HPNow())
{}
- void SetCounter(const NMonitoring::TDynamicCounters::TCounterPtr& pDiskThreadBusyTimeNs) {
+ void SetCounter(const ::NMonitoring::TDynamicCounters::TCounterPtr& pDiskThreadBusyTimeNs) {
PDiskThreadBusyTimeNs = pDiskThreadBusyTimeNs;
}
@@ -474,84 +474,84 @@ struct TPDiskMon {
}
};
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
ui32 PDiskId;
// chunk states subgroup
- TIntrusivePtr<NMonitoring::TDynamicCounters> ChunksGroup;
- NMonitoring::TDynamicCounters::TCounterPtr UntrimmedFreeChunks;
- NMonitoring::TDynamicCounters::TCounterPtr FreeChunks;
- NMonitoring::TDynamicCounters::TCounterPtr LogChunks;
- NMonitoring::TDynamicCounters::TCounterPtr UncommitedDataChunks;
- NMonitoring::TDynamicCounters::TCounterPtr CommitedDataChunks;
- NMonitoring::TDynamicCounters::TCounterPtr LockedChunks;
- NMonitoring::TDynamicCounters::TCounterPtr QuarantineChunks;
- NMonitoring::TDynamicCounters::TCounterPtr QuarantineOwners;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ChunksGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr UntrimmedFreeChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr FreeChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LogChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr UncommitedDataChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CommitedDataChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LockedChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QuarantineChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QuarantineOwners;
// statistics subgroup
- TIntrusivePtr<NMonitoring::TDynamicCounters> StatsGroup;
- NMonitoring::TDynamicCounters::TCounterPtr FreeSpacePerMile;
- NMonitoring::TDynamicCounters::TCounterPtr UsedSpacePerMile;
- NMonitoring::TDynamicCounters::TCounterPtr SplicedLogChunks;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> StatsGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr FreeSpacePerMile;
+ ::NMonitoring::TDynamicCounters::TCounterPtr UsedSpacePerMile;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SplicedLogChunks;
- NMonitoring::TDynamicCounters::TCounterPtr TotalSpaceBytes;
- NMonitoring::TDynamicCounters::TCounterPtr FreeSpaceBytes;
- NMonitoring::TDynamicCounters::TCounterPtr UsedSpaceBytes;
- NMonitoring::TDynamicCounters::TCounterPtr SectorMapAllocatedBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TotalSpaceBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr FreeSpaceBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr UsedSpaceBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SectorMapAllocatedBytes;
// states subgroup
- TIntrusivePtr<NMonitoring::TDynamicCounters> StateGroup;
- NMonitoring::TDynamicCounters::TCounterPtr PDiskState;
- NMonitoring::TDynamicCounters::TCounterPtr PDiskBriefState;
- NMonitoring::TDynamicCounters::TCounterPtr PDiskDetailedState;
- NMonitoring::TDynamicCounters::TCounterPtr AtLeastOneVDiskNotLogged;
- NMonitoring::TDynamicCounters::TCounterPtr TooMuchLogChunks;
- NMonitoring::TDynamicCounters::TCounterPtr SerialNumberMismatched;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> StateGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PDiskState;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PDiskBriefState;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PDiskDetailedState;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AtLeastOneVDiskNotLogged;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TooMuchLogChunks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SerialNumberMismatched;
TLight L6;
TLight L7;
TLight IdleLight;
- NMonitoring::TDynamicCounters::TCounterPtr OwnerIdsIssued;
- NMonitoring::TDynamicCounters::TCounterPtr LastOwnerId;
- NMonitoring::TDynamicCounters::TCounterPtr PendingYardInits;
+ ::NMonitoring::TDynamicCounters::TCounterPtr OwnerIdsIssued;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LastOwnerId;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PendingYardInits;
TAtomic SeqnoL6;
TAtomic LastDoneOperationTimestamp;
// device subgroup
- TIntrusivePtr<NMonitoring::TDynamicCounters> DeviceGroup;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceBytesRead;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceBytesWritten;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceReads;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceWrites;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceInFlightBytesRead;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceInFlightBytesWrite;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceInFlightReads;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceInFlightWrites;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceTakeoffs;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceLandings;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceHaltDetected;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceExpectedSeeks;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceReadCacheHits;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceReadCacheMisses;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceWriteCacheIsValid;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceWriteCacheIsEnabled;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceOperationPoolTotalAllocations;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceOperationPoolFreeObjectsMin;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceBufferPoolFailedAllocations;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceErasureSectorRestorations;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceEstimatedCostNs;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceActualCostNs;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceOverestimationRatio;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceNonperformanceMs;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceInterruptedSystemCalls;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceSubmitThreadBusyTimeNs;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceCompletionThreadBusyTimeNs;
- NMonitoring::TDynamicCounters::TCounterPtr DeviceIoErrors;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> DeviceGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceBytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceBytesWritten;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceReads;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceWrites;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceInFlightBytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceInFlightBytesWrite;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceInFlightReads;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceInFlightWrites;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceTakeoffs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceLandings;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceHaltDetected;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceExpectedSeeks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceReadCacheHits;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceReadCacheMisses;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceWriteCacheIsValid;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceWriteCacheIsEnabled;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceOperationPoolTotalAllocations;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceOperationPoolFreeObjectsMin;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceBufferPoolFailedAllocations;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceErasureSectorRestorations;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceEstimatedCostNs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceActualCostNs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceOverestimationRatio;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceNonperformanceMs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceInterruptedSystemCalls;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceSubmitThreadBusyTimeNs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceCompletionThreadBusyTimeNs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeviceIoErrors;
// queue subgroup
- TIntrusivePtr<NMonitoring::TDynamicCounters> QueueGroup;
- NMonitoring::TDynamicCounters::TCounterPtr QueueRequests;
- NMonitoring::TDynamicCounters::TCounterPtr QueueBytes;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> QueueGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueBytes;
// Update cycle time
TUpdateDurationTracker UpdateDurationTracker;
@@ -623,40 +623,40 @@ struct TPDiskMon {
THistogram WriteResponseHullComp;
// scheduler subgroup
- TIntrusivePtr<NMonitoring::TDynamicCounters> SchedulerGroup;
- NMonitoring::TDynamicCounters::TCounterPtr ForsetiCbsNotFound;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SchedulerGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ForsetiCbsNotFound;
// bandwidth subgroup
- TIntrusivePtr<NMonitoring::TDynamicCounters> BandwidthGroup;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogPayload;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogCommit;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogSectorFooter;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogRecordHeader;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogPadding;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogErasure;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogChunkPadding;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogChunkFooter;
-
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogPayload;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogSectorFooter;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogRecordHeader;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogPadding;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogErasure;
-
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkPayload;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkSectorFooter;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkPadding;
-
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkReadPayload;
- NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkReadSectorFooter;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> BandwidthGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogPayload;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogCommit;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogSectorFooter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogRecordHeader;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogPadding;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogErasure;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogChunkPadding;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPLogChunkFooter;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogPayload;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogSectorFooter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogRecordHeader;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogPadding;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPSysLogErasure;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkPayload;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkSectorFooter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkPadding;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkReadPayload;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BandwidthPChunkReadSectorFooter;
struct TIoCounters {
- NMonitoring::TDynamicCounters::TCounterPtr Requests;
- NMonitoring::TDynamicCounters::TCounterPtr Bytes;
- NMonitoring::TDynamicCounters::TCounterPtr Results;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Requests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Bytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Results;
- void Setup(const TIntrusivePtr<NMonitoring::TDynamicCounters>& group, TString name) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> subgroup = group->GetSubgroup("req", name);
+ void Setup(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& group, TString name) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> subgroup = group->GetSubgroup("req", name);
Requests = subgroup->GetCounter("Requests", true);
Bytes = subgroup->GetCounter("Bytes", true);
Results = subgroup->GetCounter("Results", true);
@@ -682,11 +682,11 @@ struct TPDiskMon {
};
struct TReqCounters {
- NMonitoring::TDynamicCounters::TCounterPtr Requests;
- NMonitoring::TDynamicCounters::TCounterPtr Results;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Requests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Results;
- void Setup(const TIntrusivePtr<NMonitoring::TDynamicCounters>& group, TString name) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> subgroup = group->GetSubgroup("req", name);
+ void Setup(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& group, TString name) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> subgroup = group->GetSubgroup("req", name);
Requests = subgroup->GetCounter("Requests", true);
Results = subgroup->GetCounter("Results", true);
}
@@ -701,7 +701,7 @@ struct TPDiskMon {
};
// yard subgroup
- TIntrusivePtr<NMonitoring::TDynamicCounters> PDiskGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> PDiskGroup;
TReqCounters YardInit;
TReqCounters CheckSpace;
TReqCounters YardConfigureScheduler;
@@ -736,16 +736,16 @@ struct TPDiskMon {
NHPTimer::STime LastHaltTimestamp = 0;
// System counters - for tracking usage of CPU, memory etc.
- TIntrusivePtr<NMonitoring::TDynamicCounters> SystemGroup;
- NMonitoring::TDynamicCounters::TCounterPtr PDiskThreadCPU;
- NMonitoring::TDynamicCounters::TCounterPtr SubmitThreadCPU;
- NMonitoring::TDynamicCounters::TCounterPtr GetThreadCPU;
- NMonitoring::TDynamicCounters::TCounterPtr TrimThreadCPU;
- NMonitoring::TDynamicCounters::TCounterPtr CompletionThreadCPU;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SystemGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PDiskThreadCPU;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SubmitThreadCPU;
+ ::NMonitoring::TDynamicCounters::TCounterPtr GetThreadCPU;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TrimThreadCPU;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompletionThreadCPU;
- TPDiskMon(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui32 pdiskId, TPDiskConfig *cfg);
+ TPDiskMon(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui32 pdiskId, TPDiskConfig *cfg);
- NMonitoring::TDynamicCounters::TCounterPtr GetBusyPeriod(const TString& owner, const TString& queue);
+ ::NMonitoring::TDynamicCounters::TCounterPtr GetBusyPeriod(const TString& owner, const TString& queue);
void IncrementQueueTime(ui8 priorityClass, size_t timeMs);
void IncrementResponseTime(ui8 priorityClass, double timeMs, size_t sizeBytes);
void UpdatePercentileTrackers();
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_state.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_state.h
index ec3ef4e2b7..bafa957dc0 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_state.h
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_state.h
@@ -149,9 +149,10 @@ struct TChunkState {
DATA_RESERVED,
DATA_COMMITTED,
DATA_ON_QUARANTINE,
- DATA_COMMITTED_ON_QUARANTINE,
+ DATA_COMMITTED_DELETE_ON_QUARANTINE,
LOG_RESERVED,
LOG_COMMITTED,
+ DATA_RESERVED_DELETE_ON_QUARANTINE,
};
ui64 Nonce;
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.cpp
index d7731c4e8b..84f51fce94 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.cpp
@@ -99,7 +99,7 @@ void FormatPDisk(TString path, ui64 diskSizeBytes, ui32 sectorSizeBytes, ui32 us
file.Close();
}
- const TIntrusivePtr<NMonitoring::TDynamicCounters> counters(new NMonitoring::TDynamicCounters);
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> counters(new ::NMonitoring::TDynamicCounters);
THolder<NPDisk::TPDisk> pDisk(new NPDisk::TPDisk(cfg, counters));
@@ -114,7 +114,7 @@ void FormatPDisk(TString path, ui64 diskSizeBytes, ui32 sectorSizeBytes, ui32 us
bool ReadPDiskFormatInfo(const TString &path, const NPDisk::TKey &mainKey, TPDiskInfo &outInfo,
const bool doLock, TIntrusivePtr<NPDisk::TSectorMap> sectorMap) {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> counters(new NMonitoring::TDynamicCounters);
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> counters(new ::NMonitoring::TDynamicCounters);
auto mon = std::make_unique<TPDiskMon>(counters, 0, nullptr);
bool useSdpkNvmeDriver = path.StartsWith("PCIe:");
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp
index 05e059ffcf..d1219e1aa3 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut.cpp
@@ -6,6 +6,8 @@
#include <ydb/core/blobstorage/crypto/default.h>
#include <ydb/core/testlib/actors/test_runtime.h>
+#include <util/system/hp_timer.h>
+
namespace NKikimr {
Y_UNIT_TEST_SUITE(TPDiskTest) {
@@ -13,7 +15,7 @@ Y_UNIT_TEST_SUITE(TPDiskTest) {
TString path = "/tmp/asdqwe";
TIntrusivePtr<TPDiskConfig> cfg = new TPDiskConfig(path, 12345, 0xffffffffull,
TPDiskCategory(NPDisk::DEVICE_TYPE_ROT, 0).GetRaw());
- const TIntrusivePtr<NMonitoring::TDynamicCounters> counters(new NMonitoring::TDynamicCounters);
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> counters(new ::NMonitoring::TDynamicCounters);
THolder<NPDisk::IPDisk> pDisk = MakeHolder<NPDisk::TPDisk>(cfg, counters);
pDisk->Wakeup();
@@ -99,7 +101,7 @@ public:
Runtime->Send(new IEventHandle(*PDiskActor, Sender, new TKikimrEvents::TEvPoisonPill));
}
- auto mainCounters = TIntrusivePtr<NMonitoring::TDynamicCounters>(new NMonitoring::TDynamicCounters());
+ auto mainCounters = TIntrusivePtr<::NMonitoring::TDynamicCounters>(new ::NMonitoring::TDynamicCounters());
IActor* pDiskActor = CreatePDisk(cfg.Get(), MainKey, mainCounters);
PDiskActor = Runtime->Register(pDiskActor);
}
@@ -1021,5 +1023,135 @@ std::atomic<ui64> TVDiskMock::OwnerRound = 2;
new NPDisk::TEvCheckSpace(evInitRes->PDiskParams->Owner, evInitRes->PDiskParams->OwnerRound),
NKikimrProto::CORRUPTED);
}
+
+ Y_UNIT_TEST(KillOwnerWhileDeletingChunk) {
+ THPTimer timer;
+ ui32 timeLimit = 20;
+ while (timer.Passed() < timeLimit) {
+ TActorTestContext testCtx(false);
+
+ auto logNoTest = [&](TVDiskMock& mock, NPDisk::TCommitRecord rec) {
+ auto evLog = MakeHolder<NPDisk::TEvLog>(mock.PDiskParams->Owner, mock.PDiskParams->OwnerRound, 0, PrepareData(1),
+ mock.GetLsnSeg(), nullptr);
+ evLog->Signature.SetCommitRecord();
+ evLog->CommitRecord = std::move(rec);
+ testCtx.Send(evLog.Release());
+ };
+
+ TVDiskMock mock(&testCtx);
+ mock.Init();
+
+
+ ui32 vdisksNum = 100;
+ std::vector<TVDiskMock> mocks;
+ for (ui32 i = 0; i < vdisksNum; ++i) {
+ mocks.push_back(TVDiskMock(&testCtx));
+ mocks[i].Init();
+ }
+
+ ui32 reservedChunks = 10;
+
+ for (ui32 i = 0; i < reservedChunks; ++i) {
+ mock.ReserveChunk();
+ }
+ mock.CommitReservedChunks();
+
+ while (mock.Chunks[EChunkState::COMMITTED].size() > 0) {
+ auto it = mock.Chunks[EChunkState::COMMITTED].begin();
+ NPDisk::TCommitRecord rec;
+ rec.DeleteChunks.push_back(*it);
+ logNoTest(mock, rec);
+ mock.Chunks[EChunkState::COMMITTED].erase(it);
+ }
+
+ testCtx.Send(new NPDisk::TEvHarakiri(mock.PDiskParams->Owner, mock.PDiskParams->OwnerRound));
+
+ for (ui32 c = 0; ; c = (c + 1) % mocks.size()) {
+ testCtx.Send(new NPDisk::TEvChunkReserve(mocks[c].PDiskParams->Owner, mocks[c].PDiskParams->OwnerRound, 1));
+ THolder<NPDisk::TEvChunkReserveResult> evRes = testCtx.Recv<NPDisk::TEvChunkReserveResult>();
+ if (!evRes || evRes->Status != NKikimrProto::OK) {
+ break;
+ }
+ const ui32 reservedChunk = evRes->ChunkIds.front();
+ auto& reservedChunks = mocks[c].Chunks[EChunkState::RESERVED];
+ reservedChunks.emplace(reservedChunk);
+
+ NPDisk::TCommitRecord rec;
+ rec.CommitChunks.push_back(*reservedChunks.begin());
+ logNoTest(mocks[c], rec);
+ reservedChunks.clear();
+ }
+ testCtx.Recv<NPDisk::TEvHarakiriResult>();
+ }
+ }
+
+ Y_UNIT_TEST(KillOwnerWhileDeletingChunkWithInflight) {
+ THPTimer timer;
+ ui32 timeLimit = 20;
+ while (timer.Passed() < timeLimit) {
+ TActorTestContext testCtx(false);
+
+ auto logNoTest = [&](TVDiskMock& mock, NPDisk::TCommitRecord rec) {
+ auto evLog = MakeHolder<NPDisk::TEvLog>(mock.PDiskParams->Owner, mock.PDiskParams->OwnerRound, 0, PrepareData(1),
+ mock.GetLsnSeg(), nullptr);
+ evLog->Signature.SetCommitRecord();
+ evLog->CommitRecord = std::move(rec);
+ testCtx.Send(evLog.Release());
+ };
+
+ TVDiskMock mock(&testCtx);
+ mock.Init();
+
+
+ ui32 vdisksNum = 100;
+ std::vector<TVDiskMock> mocks;
+ for (ui32 i = 0; i < vdisksNum; ++i) {
+ mocks.push_back(TVDiskMock(&testCtx));
+ mocks[i].Init();
+ }
+
+ ui32 reservedChunks = 10;
+ for (ui32 i = 0; i < reservedChunks; ++i) {
+ mock.ReserveChunk();
+ }
+ mock.CommitReservedChunks();
+ TVector<TChunkIdx> chunkIds(mock.Chunks[EChunkState::COMMITTED].begin(), mock.Chunks[EChunkState::COMMITTED].end());
+
+ ui32 inflight = 300;
+
+ while (mock.Chunks[EChunkState::COMMITTED].size() > 0) {
+ auto it = mock.Chunks[EChunkState::COMMITTED].begin();
+ for (ui32 i = 0; i < inflight; ++i) {
+ TString data = "HATE. LET ME TELL YOU HOW MUCH I'VE COME TO HATE YOU SINCE I BEGAN TO LIVE...";
+ testCtx.Send(new NPDisk::TEvChunkWrite(mock.PDiskParams->Owner, mock.PDiskParams->OwnerRound,
+ *it, 0, new NPDisk::TEvChunkWrite::TStrokaBackedUpParts(data), nullptr, false, 0));
+ }
+ NPDisk::TCommitRecord rec;
+ rec.DeleteChunks.push_back(*it);
+ logNoTest(mock, rec);
+ mock.Chunks[EChunkState::COMMITTED].erase(it);
+ }
+ mock.Chunks[EChunkState::COMMITTED].clear();
+
+ testCtx.Send(new NPDisk::TEvHarakiri(mock.PDiskParams->Owner, mock.PDiskParams->OwnerRound));
+
+ for (ui32 c = 0; ; c = (c + 1) % mocks.size()) {
+ testCtx.Send(new NPDisk::TEvChunkReserve(mocks[c].PDiskParams->Owner, mocks[c].PDiskParams->OwnerRound, 1));
+ THolder<NPDisk::TEvChunkReserveResult> evRes = testCtx.Recv<NPDisk::TEvChunkReserveResult>();
+ if (!evRes || evRes->Status != NKikimrProto::OK) {
+ break;
+ }
+ const ui32 reservedChunk = evRes->ChunkIds.front();
+ auto& reservedChunks = mocks[c].Chunks[EChunkState::RESERVED];
+ reservedChunks.emplace(reservedChunk);
+
+ NPDisk::TCommitRecord rec;
+ rec.CommitChunks.push_back(*reservedChunks.begin());
+ logNoTest(mocks[c], rec);
+ reservedChunks.clear();
+ }
+ testCtx.Recv<NPDisk::TEvHarakiriResult>();
+ }
+ }
}
} // namespace NKikimr
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_helpers.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_helpers.cpp
index 9fe03f5808..8897b26d38 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_helpers.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_helpers.cpp
@@ -60,7 +60,7 @@ void ReadPdiskFile(TTestContext *tc, ui32 dataSize, NPDisk::TAlignedData &outDat
VERBOSE_COUT("ReadPdiskFile");
TString path = EnsurePDiskExists(tc);
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
TActorSystemCreator creator;
THolder<NPDisk::IBlockDevice> device(NPDisk::CreateRealBlockDeviceWithDefaults(path, *mon,
@@ -95,7 +95,7 @@ ui64 DestroyLastSectors(TTestContext *tc, NPDisk::TAlignedData &dataBefore, NPDi
ASSERT_YTHROW(lastDifference > i64(sectorSize * count) + 8, "No remotely sutable data changes detected.");
ui64 offset = ((lastDifference - 8) / sectorSize + 1 - count) * sectorSize;
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
NPDisk::TAlignedData buffer(sectorSize * count);
memset(buffer.Get(), 0xf, sectorSize * count);
@@ -134,7 +134,7 @@ ui64 RestoreLastSectors(TTestContext *tc, NPDisk::TAlignedData &dataBefore, NPDi
ASSERT_YTHROW(lastDifference > i64(sectorSize * count) + 8, "No remotely sutable data changes detected.");
ui64 offset = ((lastDifference - 8) / sectorSize + 1 - count) * sectorSize;
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
TActorSystemCreator creator;
THolder<NPDisk::IBlockDevice> device(NPDisk::CreateRealBlockDeviceWithDefaults(path, *mon,
@@ -172,7 +172,7 @@ void FillDeviceWithPattern(TTestContext *tc, ui64 chunkSize, ui64 pattern) {
Fill((ui64*)data.Get(), (ui64*)(data.Get() + data.Size()), pattern);
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
TActorSystemCreator creator;
THolder<NPDisk::IBlockDevice> device(NPDisk::CreateRealBlockDeviceWithDefaults(path, *mon,
@@ -195,7 +195,7 @@ void WriteSectors(TTestContext *tc, NPDisk::TAlignedData &dataAfter, ui64 firstS
ui32 sectorSize = 4096;
ui64 offset = firstSector * sectorSize;
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
TActorSystemCreator creator;
THolder<NPDisk::IBlockDevice> device(NPDisk::CreateRealBlockDeviceWithDefaults(path, *mon,
@@ -214,7 +214,7 @@ void DestroySectors(TTestContext *tc, const NPDisk::TAlignedData &dataAfter,
ui32 sectorSize = 4096;
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
NPDisk::TAlignedData buffer((dataSize + sectorSize - 1)/ sectorSize * sectorSize);
memcpy(buffer.Get(), dataAfter.Get(), dataSize);
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_run.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_run.cpp
index 81f223a73c..a63d37d5c5 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_run.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_run.cpp
@@ -25,7 +25,7 @@ void Run(TVector<IActor*> tests, TTestRunConfig runCfg) {
appData.IoContextFactory = ioContext.get();
THolder<TActorSystem> actorSystem1;
- TIntrusivePtr<NMonitoring::TDynamicCounters> mainCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> mainCounters;
THolder<NActors::TMon> monitoring;
TAtomic doneCounter = 0;
@@ -38,7 +38,7 @@ void Run(TVector<IActor*> tests, TTestRunConfig runCfg) {
}
try {
- mainCounters = TIntrusivePtr<NMonitoring::TDynamicCounters>(new NMonitoring::TDynamicCounters());
+ mainCounters = TIntrusivePtr<::NMonitoring::TDynamicCounters>(new ::NMonitoring::TDynamicCounters());
testIds.resize(runCfg.Instances);
@@ -100,7 +100,7 @@ void Run(TVector<IActor*> tests, TTestRunConfig runCfg) {
AtomicSet(doneCounter, 0);
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters(new NMonitoring::TDynamicCounters());
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters(new ::NMonitoring::TDynamicCounters());
/////////////////////// LOGGER ///////////////////////////////////////////////
GetServiceCounters(counters, "utils");
@@ -167,10 +167,10 @@ void Run(TVector<IActor*> tests, TTestRunConfig runCfg) {
doneCount = AtomicGet(doneCounter);
}
- TIntrusivePtr<NMonitoring::TDynamicCounters> pDiskCounters =
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> pDiskCounters =
GetServiceCounters(mainCounters, "pdisks")->GetSubgroup(
"pdisk", Sprintf("%09" PRIu32, (ui32)pDiskConfig->PDiskId));
- TIntrusivePtr<NMonitoring::TDynamicCounters> deviceGroup = pDiskCounters->GetSubgroup("subsystem", "device");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> deviceGroup = pDiskCounters->GetSubgroup("subsystem", "device");
TStringStream errorStr;
errorStr << "test timeout"
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_yard.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_yard.cpp
index 1bc21e3f4e..b8ea34e9d9 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_yard.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_yard.cpp
@@ -978,7 +978,7 @@ YARD_UNIT_TEST(TestInitOnOldDisk) {
TString path = "/place/home/cthulhu/tmp_hdd2";
ASSERT_YTHROW(NFs::Exists(path), "File " << path << " does not exist.");
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
TPDiskMon mon(counters);
THolder<NPDisk::IBlockDevice> device(NPDisk::CreateSyncBlockDevice(path, 999, mon));
VERBOSE_COUT(" Performing Pread of " << dataSize);
diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_util_ut.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_util_ut.cpp
index ab26072e16..dd039338d7 100644
--- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_util_ut.cpp
+++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_util_ut.cpp
@@ -91,7 +91,7 @@ Y_UNIT_TEST_SUITE(TPDiskUtil) {
Y_UNIT_TEST(Light) {
TLight l;
- TIntrusivePtr<NMonitoring::TDynamicCounters> c(new NMonitoring::TDynamicCounters());
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> c(new ::NMonitoring::TDynamicCounters());
l.Initialize(c, "l");
auto state = c->GetCounter("l_state");
auto count = c->GetCounter("l_count");
@@ -220,7 +220,7 @@ Y_UNIT_TEST_SUITE(TPDiskUtil) {
Y_UNIT_TEST(LightOverflow) {
TLight l;
- TIntrusivePtr<NMonitoring::TDynamicCounters> c(new NMonitoring::TDynamicCounters());
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> c(new ::NMonitoring::TDynamicCounters());
l.Initialize(c, "l");
auto state = c->GetCounter("l_state");
auto count = c->GetCounter("l_count");
@@ -473,7 +473,7 @@ void TestPayloadOffset(ui64 firstSector, ui64 lastSector, ui64 currentSector, ui
Y_UNIT_TEST(SectorMap) {
TIntrusivePtr<TSectorMap> sectorMap(new TSectorMap(1024*1024));
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
THolder<TPDiskMon> mon(new TPDiskMon(counters, 0, nullptr));
TActorSystemCreator creator;
THolder<NPDisk::IBlockDevice> device(NPDisk::CreateRealBlockDeviceWithDefaults("SectorMap:123", *mon,
@@ -489,7 +489,7 @@ void TestPayloadOffset(ui64 firstSector, ui64 lastSector, ui64 currentSector, ui
Y_UNIT_TEST(FormatSectorMap) {
TIntrusivePtr<TSectorMap> sectorMap(new TSectorMap(1024*1024*1024));
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
NPDisk::TKey chunkKey{};
NPDisk::TKey logKey{};
diff --git a/ydb/core/blobstorage/pdisk/ut/CMakeLists.txt b/ydb/core/blobstorage/pdisk/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/pdisk/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/pdisk/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/storagepoolmon/CMakeLists.txt b/ydb/core/blobstorage/storagepoolmon/CMakeLists.txt
index fc4df2e199..1e5893c285 100644
--- a/ydb/core/blobstorage/storagepoolmon/CMakeLists.txt
+++ b/ydb/core/blobstorage/storagepoolmon/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-blobstorage-storagepoolmon INTERFACE)
target_link_libraries(core-blobstorage-storagepoolmon INTERFACE
diff --git a/ydb/core/blobstorage/storagepoolmon/storagepool_counters.h b/ydb/core/blobstorage/storagepoolmon/storagepool_counters.h
index 9cf9dcc69a..0eb004ec16 100644
--- a/ydb/core/blobstorage/storagepoolmon/storagepool_counters.h
+++ b/ydb/core/blobstorage/storagepoolmon/storagepool_counters.h
@@ -17,12 +17,12 @@ namespace NKikimr {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct TRequestMonItem {
- NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr GeneratedSubrequests;
- NMonitoring::TDynamicCounters::TCounterPtr GeneratedSubrequestBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr GeneratedSubrequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr GeneratedSubrequestBytes;
NMonitoring::THistogramPtr ResponseTime;
- void Init(TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NPDisk::EDeviceType type) {
+ void Init(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NPDisk::EDeviceType type) {
RequestBytes = counters->GetCounter("requestBytes", true);
GeneratedSubrequests = counters->GetCounter("generatedSubrequests", true);
GeneratedSubrequestBytes = counters->GetCounter("generatedSubrequestBytes", true);
@@ -163,13 +163,13 @@ public:
return RequestMon[(ui32)handleClass][sizeClassIdx];
}
- TStoragePoolCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> &counters, const TString &storagePoolName,
+ TStoragePoolCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters, const TString &storagePoolName,
NPDisk::EDeviceType type) {
StoragePoolName = storagePoolName;
- TIntrusivePtr<NMonitoring::TDynamicCounters> poolGroup = counters->GetSubgroup("storagePool", storagePoolName);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> poolGroup = counters->GetSubgroup("storagePool", storagePoolName);
for (ui32 handleClass = 0; handleClass < (ui32)HcCount; ++handleClass) {
TString handleClassName = GetHandleClassName((EHandleClass)handleClass);
- TIntrusivePtr<NMonitoring::TDynamicCounters> hcGroup = poolGroup->GetSubgroup("handleClass", handleClassName);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> hcGroup = poolGroup->GetSubgroup("handleClass", handleClassName);
if (IsReducedHandleClass((EHandleClass)handleClass)) {
for (ui32 sizeClassIdx = 0; sizeClassIdx <= MaxReducedSizeClassBucketIdx; ++sizeClassIdx) {
TString sizeClassName = ReducedSizeClassName(sizeClassIdx);
@@ -188,12 +188,12 @@ public:
class TDsProxyPerPoolCounters : public TThrRefBase {
protected:
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TMap<TString, TIntrusivePtr<TStoragePoolCounters>> StoragePoolCounters;
public:
- TDsProxyPerPoolCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> group = GetServiceCounters(counters, "dsproxynode");
+ TDsProxyPerPoolCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> group = GetServiceCounters(counters, "dsproxynode");
Counters = group->GetSubgroup("subsystem", "request");
};
diff --git a/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.txt b/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/storagepoolmon/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/testload/test_load_actor.cpp b/ydb/core/blobstorage/testload/test_load_actor.cpp
index c8788b1310..819a31b113 100644
--- a/ydb/core/blobstorage/testload/test_load_actor.cpp
+++ b/ydb/core/blobstorage/testload/test_load_actor.cpp
@@ -46,14 +46,14 @@ class TLoadActor : public TActorBootstrapped<TLoadActor> {
// HTTP info requests being currently executed
THashMap<ui32, THttpInfoRequest> InfoRequests;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
public:
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
return NKikimrServices::TActivity::BS_LOAD_ACTOR;
}
- TLoadActor(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters)
+ TLoadActor(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters)
: NextRequestId(1)
, Counters(counters)
{}
@@ -388,7 +388,7 @@ public:
)
};
-IActor *CreateTestLoadActor(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters) {
+IActor *CreateTestLoadActor(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters) {
return new TLoadActor(counters);
}
diff --git a/ydb/core/blobstorage/testload/test_load_actor.h b/ydb/core/blobstorage/testload/test_load_actor.h
index 38b7fb3d30..75f8d22758 100644
--- a/ydb/core/blobstorage/testload/test_load_actor.h
+++ b/ydb/core/blobstorage/testload/test_load_actor.h
@@ -28,36 +28,36 @@ namespace NKikimr {
class TLoadActorException : public yexception {
};
- NActors::IActor *CreateTestLoadActor(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters);
+ NActors::IActor *CreateTestLoadActor(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters);
NActors::IActor *CreateWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TLoadStart& cmd,
- const NActors::TActorId& parent, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, ui64 tag);
+ const NActors::TActorId& parent, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, ui64 tag);
NActors::IActor *CreatePDiskWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskLoadStart& cmd,
- const NActors::TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const NActors::TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
ui64 index, ui64 tag);
NActors::IActor *CreatePDiskLogWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskLogLoadStart& cmd,
- const NActors::TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const NActors::TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
ui64 index, ui64 tag);
NActors::IActor *CreatePDiskReaderTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskReadLoadStart& cmd,
- const NActors::TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const NActors::TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
ui64 index, ui64 tag);
NActors::IActor *CreateVDiskWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TVDiskLoadStart& cmd,
const NActors::TActorId& parent, ui64 tag);
NActors::IActor *CreateKeyValueWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TKeyValueLoadStart& cmd,
- const NActors::TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const NActors::TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
ui64 index, ui64 tag);
NActors::IActor *CreateKqpWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TKqpLoadStart& cmd,
- const NActors::TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const NActors::TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
ui64 index, ui64 tag);
NActors::IActor *CreateMemoryTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TMemoryLoadStart& cmd,
- const NActors::TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const NActors::TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
ui64 index, ui64 tag);
struct TLoadReport : public TThrRefBase {
diff --git a/ydb/core/blobstorage/testload/test_load_keyvalue_write.cpp b/ydb/core/blobstorage/testload/test_load_keyvalue_write.cpp
index 00e31ff18d..21a6dc0778 100644
--- a/ydb/core/blobstorage/testload/test_load_keyvalue_write.cpp
+++ b/ydb/core/blobstorage/testload/test_load_keyvalue_write.cpp
@@ -122,13 +122,13 @@ class TKeyValueWriterTestLoadActor : public TActorBootstrapped<TKeyValueWriterTe
TReallyFastRng32 Rng;
// Monitoring
- TIntrusivePtr<NMonitoring::TDynamicCounters> LoadCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> LoadCounters;
TInstant TestStartTime;
ui64 TabletId;
TActorId Pipe;
- NMonitoring::TDynamicCounters::TCounterPtr KeyValueBytesWritten;
+ ::NMonitoring::TDynamicCounters::TCounterPtr KeyValueBytesWritten;
TMap<ui64, TLogWriteCookie> InFlightWrites;
NMonitoring::TPercentileTrackerLg<6, 5, 15> ResponseTimes;
@@ -138,7 +138,7 @@ public:
}
TKeyValueWriterTestLoadActor(const NKikimrBlobStorage::TEvTestLoadRequest::TKeyValueLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
: Parent(parent)
, Tag(tag)
, Rng(Now().GetValue())
@@ -360,7 +360,7 @@ public:
};
IActor * CreateKeyValueWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TKeyValueLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag) {
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag) {
return new TKeyValueWriterTestLoadActor(cmd, parent, counters, index, tag);
}
diff --git a/ydb/core/blobstorage/testload/test_load_kqp.cpp b/ydb/core/blobstorage/testload/test_load_kqp.cpp
index e999908b98..f460159607 100644
--- a/ydb/core/blobstorage/testload/test_load_kqp.cpp
+++ b/ydb/core/blobstorage/testload/test_load_kqp.cpp
@@ -76,9 +76,9 @@ class TKqpWriterTestLoadActor : public TActorBootstrapped<TKqpWriterTestLoadActo
std::unordered_map<TString, std::queue<TInstant>> SentTime;
// Monitoring
- TIntrusivePtr<NMonitoring::TDynamicCounters> LoadCounters;
- NMonitoring::TDynamicCounters::TCounterPtr Transactions;
- NMonitoring::TDynamicCounters::TCounterPtr TransactionsBytesWritten;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> LoadCounters;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Transactions;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TransactionsBytesWritten;
TInstant TestStartTime;
TMap<ui64, TLogWriteCookie> InFlightWrites;
@@ -92,7 +92,7 @@ public:
}
TKqpWriterTestLoadActor(const NKikimrBlobStorage::TEvTestLoadRequest::TKqpLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
: Parent(parent)
, Tag(tag)
, Rng(Now().GetValue())
@@ -259,7 +259,7 @@ private:
};
IActor * CreateKqpWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TKqpLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag) {
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag) {
return new TKqpWriterTestLoadActor(cmd, parent, counters, index, tag);
}
diff --git a/ydb/core/blobstorage/testload/test_load_memory.cpp b/ydb/core/blobstorage/testload/test_load_memory.cpp
index 9da565186a..8cddbf85b5 100644
--- a/ydb/core/blobstorage/testload/test_load_memory.cpp
+++ b/ydb/core/blobstorage/testload/test_load_memory.cpp
@@ -31,7 +31,7 @@ public:
}
TMemoryTestLoadActor(const NKikimrBlobStorage::TEvTestLoadRequest::TMemoryLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
: Parent(parent)
, Tag(tag)
{
@@ -131,7 +131,7 @@ public:
IActor* CreateMemoryTestLoad(
const NKikimrBlobStorage::TEvTestLoadRequest::TMemoryLoadStart& cmd,
const TActorId& parent,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
ui64 index,
ui64 tag)
{
diff --git a/ydb/core/blobstorage/testload/test_load_pdisk_log.cpp b/ydb/core/blobstorage/testload/test_load_pdisk_log.cpp
index 33fc363c93..d1e38e01c5 100644
--- a/ydb/core/blobstorage/testload/test_load_pdisk_log.cpp
+++ b/ydb/core/blobstorage/testload/test_load_pdisk_log.cpp
@@ -62,7 +62,7 @@ class TWorker {
TIntrusivePtr<TPDiskParams> PDiskParams;
- NMonitoring::TDynamicCounters::TCounterPtr LogEntriesWritten;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LogEntriesWritten;
NPDisk::TLogPosition LogReadPosition{0, 0};
@@ -286,7 +286,7 @@ class TPDiskLogWriterTestLoadActor : public TActorBootstrapped<TPDiskLogWriterTe
TReallyFastRng32 Rng;
// Monitoring
- TIntrusivePtr<NMonitoring::TDynamicCounters> LoadCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> LoadCounters;
TInstant TestStartTime;
ui32 PDiskId;
@@ -295,7 +295,7 @@ class TPDiskLogWriterTestLoadActor : public TActorBootstrapped<TPDiskLogWriterTe
bool IsWardenlessTest = false;
bool IsDying = false;
- NMonitoring::TDynamicCounters::TCounterPtr LogBytesWritten;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LogBytesWritten;
ui64 ReqIdx = 0;
TMap<ui64, TLogWriteCookie> InFlightLogWrites;
NMonitoring::TPercentileTrackerLg<6, 5, 15> LogResponseTimes;
@@ -306,7 +306,7 @@ public:
}
TPDiskLogWriterTestLoadActor(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskLogLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
: Parent(parent)
, Tag(tag)
, Rng(Now().GetValue())
@@ -694,7 +694,7 @@ public:
};
IActor *CreatePDiskLogWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskLogLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag) {
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag) {
return new TPDiskLogWriterTestLoadActor(cmd, parent, counters, index, tag);
}
diff --git a/ydb/core/blobstorage/testload/test_load_pdisk_read.cpp b/ydb/core/blobstorage/testload/test_load_pdisk_read.cpp
index 3b446a74c2..b3197686c6 100644
--- a/ydb/core/blobstorage/testload/test_load_pdisk_read.cpp
+++ b/ydb/core/blobstorage/testload/test_load_pdisk_read.cpp
@@ -107,10 +107,10 @@ class TPDiskReaderTestLoadActor : public TActorBootstrapped<TPDiskReaderTestLoad
ui64 DeletedChunksCount = 0;
// Monitoring
- NMonitoring::TDynamicCounters::TCounterPtr BytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesRead;
NMonitoring::TPercentileTrackerLg<6, 5, 15> ResponseTimes;
- TIntrusivePtr<NMonitoring::TDynamicCounters> LoadCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> LoadCounters;
TIntrusivePtr<TLoadReport> Report;
TIntrusivePtr<NMonitoring::TCounterForPtr> PDiskBytesRead;
TMap<double, TIntrusivePtr<NMonitoring::TCounterForPtr>> DevicePercentiles;
@@ -122,7 +122,7 @@ public:
}
TPDiskReaderTestLoadActor(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskReadLoadStart& cmd, const TActorId& parent,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
: Parent(parent)
, Tag(tag)
, MaxInFlight(4, 0, 65536)
@@ -176,10 +176,10 @@ public:
TVector<float> percentiles {0.1f, 0.5f, 0.9f, 0.99f, 0.999f, 1.0f};
ResponseTimes.Initialize(LoadCounters, "subsystem", "LoadActorReadDuration", "Time in microseconds", percentiles);
- TIntrusivePtr<NMonitoring::TDynamicCounters> pDiskCounters = GetServiceCounters(counters, "pdisks")->
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> pDiskCounters = GetServiceCounters(counters, "pdisks")->
GetSubgroup("pdisk", Sprintf("%09" PRIu32, PDiskId));
PDiskBytesRead = pDiskCounters->GetSubgroup("subsystem", "device")->GetCounter("DeviceBytesRead", true);
- TIntrusivePtr<NMonitoring::TDynamicCounters> percentilesGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> percentilesGroup;
percentilesGroup = pDiskCounters->GetSubgroup("subsystem", "deviceReadDuration")->GetSubgroup("sensor", "Time in microsec");
for (double percentile : {0.1, 0.5, 0.9, 0.99, 0.999, 1.0}) {
DevicePercentiles.emplace(percentile, percentilesGroup->GetNamedCounter("percentile",
@@ -585,7 +585,7 @@ public:
};
IActor *CreatePDiskReaderTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskReadLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
ui64 index, ui64 tag) {
return new TPDiskReaderTestLoadActor(cmd, parent, counters, index, tag);
}
diff --git a/ydb/core/blobstorage/testload/test_load_pdisk_write.cpp b/ydb/core/blobstorage/testload/test_load_pdisk_write.cpp
index 8ea16e014c..60b1280f19 100644
--- a/ydb/core/blobstorage/testload/test_load_pdisk_write.cpp
+++ b/ydb/core/blobstorage/testload/test_load_pdisk_write.cpp
@@ -116,9 +116,9 @@ class TPDiskWriterTestLoadActor : public TActorBootstrapped<TPDiskWriterTestLoad
ui64 DeletedChunksCount = 0;
// Monitoring
- TIntrusivePtr<NMonitoring::TDynamicCounters> LoadCounters;
- NMonitoring::TDynamicCounters::TCounterPtr BytesWritten;
- NMonitoring::TDynamicCounters::TCounterPtr LogEntriesWritten;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> LoadCounters;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesWritten;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LogEntriesWritten;
NMonitoring::TPercentileTrackerLg<6, 5, 15> ResponseTimes;
NMonitoring::TPercentileTrackerLg<6, 5, 15> LogResponseTimes;
@@ -132,7 +132,7 @@ public:
}
TPDiskWriterTestLoadActor(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskLoadStart& cmd, const TActorId& parent,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag)
: Parent(parent)
, Tag(tag)
, MaxInFlight(4, 0, 65536)
@@ -191,10 +191,10 @@ public:
ResponseTimes.Initialize(LoadCounters, "subsystem", "LoadActorWriteDuration", "Time in microseconds", percentiles);
LogResponseTimes.Initialize(LoadCounters, "subsystem", "LoadActorLogWriteDuration", "Time in microseconds", percentiles);
- TIntrusivePtr<NMonitoring::TDynamicCounters> pDiskCounters = GetServiceCounters(counters, "pdisks")->
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> pDiskCounters = GetServiceCounters(counters, "pdisks")->
GetSubgroup("pdisk", Sprintf("%09" PRIu32, PDiskId));
PDiskBytesWritten = pDiskCounters->GetSubgroup("subsystem", "device")->GetCounter("DeviceBytesWritten", true);
- TIntrusivePtr<NMonitoring::TDynamicCounters> percentilesGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> percentilesGroup;
percentilesGroup = pDiskCounters-> GetSubgroup("subsystem", "deviceWriteDuration")->GetSubgroup("sensor", "Time in microsec");
for (double percentile : {0.1, 0.5, 0.9, 0.99, 0.999, 1.0}) {
DevicePercentiles.emplace(percentile, percentilesGroup->GetNamedCounter("percentile",
@@ -639,7 +639,7 @@ public:
};
IActor *CreatePDiskWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TPDiskLoadStart& cmd,
- const TActorId& parent, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag) {
+ const TActorId& parent, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, ui64 index, ui64 tag) {
return new TPDiskWriterTestLoadActor(cmd, parent, counters, index, tag);
}
diff --git a/ydb/core/blobstorage/testload/test_load_quantile.h b/ydb/core/blobstorage/testload/test_load_quantile.h
index 0d0f0207c6..11b14aed5d 100644
--- a/ydb/core/blobstorage/testload/test_load_quantile.h
+++ b/ydb/core/blobstorage/testload/test_load_quantile.h
@@ -13,12 +13,12 @@ namespace NKikimr {
using TItem = typename TTimeSeries<T>::TItem;
using TTimeSeries<T>::Items;
- using TPercentile = std::pair<float, NMonitoring::TDynamicCounters::TCounterPtr>;
+ using TPercentile = std::pair<float, ::NMonitoring::TDynamicCounters::TCounterPtr>;
using TPercentiles = TVector<TPercentile>;
TPercentiles Percentiles;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
- NMonitoring::TDynamicCounters::TCounterPtr Samples;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Samples;
struct TCompareTimestamp {
bool operator ()(const TItem& x, TInstant y) {
@@ -29,7 +29,7 @@ namespace NKikimr {
public:
using TTimeSeries<T>::TTimeSeries;
- TQuantileTracker(TDuration lifetime, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TQuantileTracker(TDuration lifetime, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
const TString& metric, const TVector<float>& percentiles)
: TTimeSeries<T>(lifetime)
, Counters(counters)
diff --git a/ydb/core/blobstorage/testload/test_load_vdisk_write.cpp b/ydb/core/blobstorage/testload/test_load_vdisk_write.cpp
index 39ecca9dbd..6cf73e7276 100644
--- a/ydb/core/blobstorage/testload/test_load_vdisk_write.cpp
+++ b/ydb/core/blobstorage/testload/test_load_vdisk_write.cpp
@@ -108,7 +108,7 @@ namespace NKikimr {
void CreateQueueBackpressure(const TActorContext& ctx) {
using namespace NBackpressure;
- auto counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ auto counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
NKikimrBlobStorage::EVDiskQueueId queueId = NKikimrBlobStorage::Unknown;
switch (PutHandleClass) {
diff --git a/ydb/core/blobstorage/testload/test_load_write.cpp b/ydb/core/blobstorage/testload/test_load_write.cpp
index a7ac7823e8..01e6839b10 100644
--- a/ydb/core/blobstorage/testload/test_load_write.cpp
+++ b/ydb/core/blobstorage/testload/test_load_write.cpp
@@ -95,8 +95,8 @@ class TLogWriterTestLoadActor : public TActorBootstrapped<TLogWriterTestLoadActo
const TDuration ExposePeriod = TDuration::Seconds(10);
- TIntrusivePtr<NMonitoring::TDynamicCounters> TagCounters;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> TagCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TWakeupQueue& WakeupQueue;
TQueryDispatcher& QueryDispatcher;
const ui64 TabletId;
@@ -162,7 +162,7 @@ class TLogWriterTestLoadActor : public TActorBootstrapped<TLogWriterTestLoadActo
TVector<TReqInfo> ScriptedRequests;
public:
- TTabletWriter(ui64 tag, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TTabletWriter(ui64 tag, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
TWakeupQueue& wakeupQueue, TQueryDispatcher& queryDispatcher, ui64 tabletId, ui32 channel,
TMaybe<ui32> generation, ui32 groupId, NKikimrBlobStorage::EPutHandleClass putHandleClass,
const TSizeGenerator& writeSizeGen, const TIntervalGenerator& writeIntervalGen,
@@ -761,7 +761,7 @@ class TLogWriterTestLoadActor : public TActorBootstrapped<TLogWriterTestLoadActo
TQueryDispatcher QueryDispatcher;
- NMonitoring::TDynamicCounters::TCounterPtr ScheduleCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ScheduleCounter;
ui32 TestStoppedRecieved = 0;
@@ -771,7 +771,7 @@ public:
}
TLogWriterTestLoadActor(const NKikimrBlobStorage::TEvTestLoadRequest::TLoadStart& cmd, const TActorId& parent,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, ui64 tag)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, ui64 tag)
: Tag(tag)
, Parent(parent)
, ScheduleCounter(counters->GetSubgroup("subsystem", "scheduler")->GetCounter("ScheduleCounter", true))
@@ -971,7 +971,7 @@ public:
};
IActor *CreateWriterTestLoad(const NKikimrBlobStorage::TEvTestLoadRequest::TLoadStart& cmd, const TActorId& parent,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, ui64 tag) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, ui64 tag) {
return new TLogWriterTestLoadActor(cmd, parent, std::move(counters), tag);
}
diff --git a/ydb/core/blobstorage/ut_blobstorage/CMakeLists.darwin.txt b/ydb/core/blobstorage/ut_blobstorage/CMakeLists.darwin.txt
index 9bcfefe2f8..d309eac026 100644
--- a/ydb/core/blobstorage/ut_blobstorage/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/CMakeLists.darwin.txt
@@ -6,6 +6,13 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
+add_subdirectory(ut_blob_depot)
+add_subdirectory(ut_donor)
+add_subdirectory(ut_group_reconfiguration)
+add_subdirectory(ut_osiris)
+add_subdirectory(ut_replication)
+add_subdirectory(ut_scrub)
add_executable(ydb-core-blobstorage-ut_blobstorage)
target_link_libraries(ydb-core-blobstorage-ut_blobstorage PUBLIC
diff --git a/ydb/core/blobstorage/ut_blobstorage/CMakeLists.linux.txt b/ydb/core/blobstorage/ut_blobstorage/CMakeLists.linux.txt
index 3ac6ede19a..22797353cd 100644
--- a/ydb/core/blobstorage/ut_blobstorage/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/CMakeLists.linux.txt
@@ -6,6 +6,13 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
+add_subdirectory(ut_blob_depot)
+add_subdirectory(ut_donor)
+add_subdirectory(ut_group_reconfiguration)
+add_subdirectory(ut_osiris)
+add_subdirectory(ut_replication)
+add_subdirectory(ut_scrub)
add_executable(ydb-core-blobstorage-ut_blobstorage)
target_link_libraries(ydb-core-blobstorage-ut_blobstorage PUBLIC
diff --git a/ydb/core/blobstorage/ut_blobstorage/CMakeLists.txt b/ydb/core/blobstorage/ut_blobstorage/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_blobstorage/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_blobstorage/lib/env.h b/ydb/core/blobstorage/ut_blobstorage/lib/env.h
index 096d0c29e7..951ba78a65 100644
--- a/ydb/core/blobstorage/ut_blobstorage/lib/env.h
+++ b/ydb/core/blobstorage/ut_blobstorage/lib/env.h
@@ -369,7 +369,7 @@ struct TEnvironmentSetup {
auto config = MakeIntrusive<NSchemeCache::TSchemeCacheConfig>();
config->Roots.emplace_back(DomainId, domain.SchemeRoot, domain.Name);
- config->Counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ config->Counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
Runtime->RegisterService(MakeSchemeCacheID(), Runtime->Register(CreateSchemeBoardSchemeCache(config.Get()), nodeId));
}
}
@@ -503,11 +503,11 @@ struct TEnvironmentSetup {
}
TActorId CreateQueueActor(const TVDiskID& vdiskId, NKikimrBlobStorage::EVDiskQueueId queueId, ui32 index) {
- TBSProxyContextPtr bspctx = MakeIntrusive<TBSProxyContext>(MakeIntrusive<NMonitoring::TDynamicCounters>());
+ TBSProxyContextPtr bspctx = MakeIntrusive<TBSProxyContext>(MakeIntrusive<::NMonitoring::TDynamicCounters>());
auto flowRecord = MakeIntrusive<NBackpressure::TFlowRecord>();
auto groupInfo = GetGroupInfo(vdiskId.GroupID);
std::unique_ptr<IActor> actor(CreateVDiskBackpressureClient(groupInfo, vdiskId, queueId,
- MakeIntrusive<NMonitoring::TDynamicCounters>(), bspctx,
+ MakeIntrusive<::NMonitoring::TDynamicCounters>(), bspctx,
NBackpressure::TQueueClientId(NBackpressure::EQueueClientType::DSProxy, index), TStringBuilder()
<< "test# " << index, 0, false, TDuration::Seconds(60), flowRecord, NMonitoring::TCountableBase::EVisibility::Private));
const ui32 nodeId = Settings.ControllerNodeId;
diff --git a/ydb/core/blobstorage/ut_blobstorage/ut_blob_depot/CMakeLists.txt b/ydb/core/blobstorage/ut_blobstorage/ut_blob_depot/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_blobstorage/ut_blob_depot/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/ut_blob_depot/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_blobstorage/ut_donor/CMakeLists.txt b/ydb/core/blobstorage/ut_blobstorage/ut_donor/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_blobstorage/ut_donor/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/ut_donor/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_blobstorage/ut_group_reconfiguration/CMakeLists.txt b/ydb/core/blobstorage/ut_blobstorage/ut_group_reconfiguration/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_blobstorage/ut_group_reconfiguration/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/ut_group_reconfiguration/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_blobstorage/ut_osiris/CMakeLists.txt b/ydb/core/blobstorage/ut_blobstorage/ut_osiris/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_blobstorage/ut_osiris/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/ut_osiris/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_blobstorage/ut_replication/CMakeLists.txt b/ydb/core/blobstorage/ut_blobstorage/ut_replication/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_blobstorage/ut_replication/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/ut_replication/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_blobstorage/ut_scrub/CMakeLists.txt b/ydb/core/blobstorage/ut_blobstorage/ut_scrub/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_blobstorage/ut_scrub/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_blobstorage/ut_scrub/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_group/CMakeLists.txt b/ydb/core/blobstorage/ut_group/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_group/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_group/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_group/main.cpp b/ydb/core/blobstorage/ut_group/main.cpp
index 066e2735d9..0ef59b5479 100644
--- a/ydb/core/blobstorage/ut_group/main.cpp
+++ b/ydb/core/blobstorage/ut_group/main.cpp
@@ -160,7 +160,7 @@ public:
NKikimrBlobStorage::EVDiskStatus Status;
};
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
const NPDisk::TKey MainKey = NPDisk::YdbDefaultPDiskSequence;
const ui32 NodeCount;
const ui32 GroupId = 0;
@@ -174,7 +174,7 @@ public:
TIntrusivePtr<TStoragePoolCounters> StoragePoolCounters;
TTestEnv(ui32 nodeCount)
- : Counters(MakeIntrusive<NMonitoring::TDynamicCounters>())
+ : Counters(MakeIntrusive<::NMonitoring::TDynamicCounters>())
, NodeCount(nodeCount)
{}
diff --git a/ydb/core/blobstorage/ut_mirror3of4/CMakeLists.txt b/ydb/core/blobstorage/ut_mirror3of4/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_mirror3of4/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_mirror3of4/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_mirror3of4/main.cpp b/ydb/core/blobstorage/ut_mirror3of4/main.cpp
index 9429913f38..f051b062f1 100644
--- a/ydb/core/blobstorage/ut_mirror3of4/main.cpp
+++ b/ydb/core/blobstorage/ut_mirror3of4/main.cpp
@@ -43,7 +43,7 @@ public:
: GType(gtype)
, NodeCount(gtype.BlobSubgroupSize())
, PDisks(NodeCount)
- , Counters(MakeIntrusive<NMonitoring::TDynamicCounters>())
+ , Counters(MakeIntrusive<::NMonitoring::TDynamicCounters>())
{
for (ui32 i = 0; i < PDisks.size(); ++i) {
PDisks[i] = {i + 1, 1, RandomNumber<ui64>(), nullptr};
@@ -278,7 +278,7 @@ private:
}
private:
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
};
void ReplicationTest(const TString datum) {
diff --git a/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.darwin.txt b/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..0396db380f
--- /dev/null
+++ b/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.darwin.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(lib)
diff --git a/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.linux.txt b/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.linux.txt
new file mode 100644
index 0000000000..efbbcd8ee8
--- /dev/null
+++ b/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.linux.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(lib)
+add_subdirectory(pdiskfit)
+add_subdirectory(ut)
diff --git a/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.txt b/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/ydb/core/blobstorage/ut_pdiskfit/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/ydb/core/blobstorage/ut_pdiskfit/lib/basic_test.h b/ydb/core/blobstorage/ut_pdiskfit/lib/basic_test.h
index 2672d3a515..06b5d5a0ba 100644
--- a/ydb/core/blobstorage/ut_pdiskfit/lib/basic_test.h
+++ b/ydb/core/blobstorage/ut_pdiskfit/lib/basic_test.h
@@ -32,7 +32,7 @@ IActor *CreateFakeVDisk(const TVDiskID& vdiskId, const TActorId& pdiskServiceId,
class TBasicTest : public TActorBootstrapped<TBasicTest> {
TAutoEvent *StopEvent = nullptr;
TStateManager *StateManager = nullptr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TIntrusivePtr<TPDiskConfig> PDiskConfig;
TActorId PDiskServiceId;
const ui32 NumVDisks;
diff --git a/ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h b/ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h
index 07a6d23e49..f82dcc478e 100644
--- a/ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h
+++ b/ydb/core/blobstorage/ut_pdiskfit/lib/fail_injection_test.h
@@ -109,7 +109,7 @@ struct TPDiskFailureInjectionTest {
ui64 PDiskGuid;
bool ErasureEncode = false;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TProgramShouldContinue KikimrShouldContinue;
std::unique_ptr<NKikimr::TAppData> AppData;
@@ -166,7 +166,7 @@ struct TPDiskFailureInjectionTest {
using namespace NActors;
// create counters
- Counters = new NMonitoring::TDynamicCounters;
+ Counters = new ::NMonitoring::TDynamicCounters;
// initialize app data with pool ids and registries
AppData.reset(new NKikimr::TAppData(0u, 1u, 2u, 3u, {}, nullptr, nullptr, nullptr, &KikimrShouldContinue));
diff --git a/ydb/core/blobstorage/ut_pdiskfit/pdiskfit/CMakeLists.txt b/ydb/core/blobstorage/ut_pdiskfit/pdiskfit/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/ydb/core/blobstorage/ut_pdiskfit/pdiskfit/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_pdiskfit/pdiskfit/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_pdiskfit/ut/CMakeLists.txt b/ydb/core/blobstorage/ut_pdiskfit/ut/CMakeLists.txt
index e8c98bfd99..97368e369c 100644
--- a/ydb/core/blobstorage/ut_pdiskfit/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_pdiskfit/ut/CMakeLists.txt
@@ -6,6 +6,6 @@
# original buildsystem will not be accepted.
-if (UNIX AND NOT APPLE)
+if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt b/ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt
index 08e0716c00..3c6079fa05 100644
--- a/ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt
+++ b/ydb/core/blobstorage/ut_vdisk/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
add_executable(ydb-core-blobstorage-ut_vdisk)
target_compile_options(ydb-core-blobstorage-ut_vdisk PRIVATE
diff --git a/ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt b/ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt
index 309fd0ccba..0086d88738 100644
--- a/ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt
+++ b/ydb/core/blobstorage/ut_vdisk/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
add_executable(ydb-core-blobstorage-ut_vdisk)
target_compile_options(ydb-core-blobstorage-ut_vdisk PRIVATE
diff --git a/ydb/core/blobstorage/ut_vdisk/CMakeLists.txt b/ydb/core/blobstorage/ut_vdisk/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_vdisk/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_vdisk/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_vdisk/lib/astest.h b/ydb/core/blobstorage/ut_vdisk/lib/astest.h
index a61c2ac8cd..99794a40d9 100644
--- a/ydb/core/blobstorage/ut_vdisk/lib/astest.h
+++ b/ydb/core/blobstorage/ut_vdisk/lib/astest.h
@@ -32,7 +32,7 @@ public:
private:
TProgramShouldContinue KikimrShouldContinue;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
std::unique_ptr<NActors::TMon> Monitoring;
std::unique_ptr<NKikimr::TAppData> AppData;
std::shared_ptr<NKikimr::NPDisk::IIoContextFactory> IoContext;
@@ -45,7 +45,7 @@ public:
inline void TTestWithActorSystem::Run(NActors::IActor *testActor) {
using namespace NActors;
- Counters = TIntrusivePtr<NMonitoring::TDynamicCounters>(new NMonitoring::TDynamicCounters());
+ Counters = TIntrusivePtr<::NMonitoring::TDynamicCounters>(new ::NMonitoring::TDynamicCounters());
TIntrusivePtr<TTableNameserverSetup> nameserverTable(new TTableNameserverSetup());
TPortManager pm;
nameserverTable->StaticNodeTable[1] = std::pair<TString, ui32>("127.0.0.1", pm.GetPort(12001));
diff --git a/ydb/core/blobstorage/ut_vdisk/lib/helpers.cpp b/ydb/core/blobstorage/ut_vdisk/lib/helpers.cpp
index f7bd796a00..931cd7958d 100644
--- a/ydb/core/blobstorage/ut_vdisk/lib/helpers.cpp
+++ b/ydb/core/blobstorage/ut_vdisk/lib/helpers.cpp
@@ -215,7 +215,7 @@ class TManyPuts : public TActorBootstrapped<TManyPuts> {
void Bootstrap(const TActorContext &ctx) {
Become(&TThis::StateWriteFunc);
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
TIntrusivePtr<NBackpressure::TFlowRecord> flowRecord(new NBackpressure::TFlowRecord);
QueueActorId = ctx.Register(CreateVDiskBackpressureClient(Conf->GroupInfo, VDiskInfo.VDiskID,
NKikimrBlobStorage::PutTabletLog, counters, new TBSProxyContext{counters}, {}, "PutTabletLog", 0, false,
@@ -402,7 +402,7 @@ class TManyMultiPuts : public TActorBootstrapped<TManyMultiPuts> {
void Bootstrap(const TActorContext &ctx) {
Become(&TThis::StateWriteFunc);
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
TIntrusivePtr<NBackpressure::TFlowRecord> flowRecord(new NBackpressure::TFlowRecord);
QueueActorId = ctx.Register(CreateVDiskBackpressureClient(Conf->GroupInfo, VDiskInfo.VDiskID,
NKikimrBlobStorage::PutTabletLog, counters, new TBSProxyContext{counters}, {}, "PutTabletLog", 0, false,
diff --git a/ydb/core/blobstorage/ut_vdisk/lib/prepare.cpp b/ydb/core/blobstorage/ut_vdisk/lib/prepare.cpp
index 1950abff89..ccee189f60 100644
--- a/ydb/core/blobstorage/ut_vdisk/lib/prepare.cpp
+++ b/ydb/core/blobstorage/ut_vdisk/lib/prepare.cpp
@@ -148,7 +148,7 @@ TAllPDisks::TAllPDisks(const TAllPDisksConfiguration &cfg)
}
void TAllPDisks::ActorSetupCmd(NActors::TActorSystemSetup *setup, ui32 node,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters) {
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters) {
for (ui32 i = 0; i < PDisks.size(); i++) {
TOnePDisk &inst = PDisks[i];
inst.PDiskActorID = MakeBlobStoragePDiskID(node, i);
@@ -206,7 +206,7 @@ TAllVDisks::~TAllVDisks() {
}
void TAllVDisks::ActorSetupCmd(NActors::TActorSystemSetup *setup, NKikimr::TBlobStorageGroupInfo *groupInfo,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters) {
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters) {
for (ui32 i = 0; i < VDisks.size(); i++) {
TVDiskInstance &vdisk = VDisks[i];
if (vdisk.Initialized) {
@@ -279,7 +279,7 @@ TConfiguration::~TConfiguration() {
static TProgramShouldContinue KikimrShouldContinue;
void TConfiguration::Prepare(IVDiskSetup *vdiskSetup, bool newPDisks, bool runRepl) { // FIXME: put newPDisks into configuration (see up)
- Counters = TIntrusivePtr<NMonitoring::TDynamicCounters>(new NMonitoring::TDynamicCounters());
+ Counters = TIntrusivePtr<::NMonitoring::TDynamicCounters>(new ::NMonitoring::TDynamicCounters());
TIntrusivePtr<TTableNameserverSetup> nameserverTable(new TTableNameserverSetup());
TPortManager pm;
diff --git a/ydb/core/blobstorage/ut_vdisk/lib/prepare.h b/ydb/core/blobstorage/ut_vdisk/lib/prepare.h
index fc5da8d342..56353d2de6 100644
--- a/ydb/core/blobstorage/ut_vdisk/lib/prepare.h
+++ b/ydb/core/blobstorage/ut_vdisk/lib/prepare.h
@@ -65,7 +65,7 @@ class TAllPDisks {
public:
TAllPDisks(const TAllPDisksConfiguration &cfg);
void ActorSetupCmd(NActors::TActorSystemSetup *setup, ui32 node,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters);
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters);
// get instance by pDiskID (sequential number starting from 1)
TOnePDisk &Get(ui32 pDiskID);
void EraseDisk(ui32 pDiskId, ui64 newGuid);
@@ -100,7 +100,7 @@ public:
return VDisks.at(vdisk);
}
void ActorSetupCmd(NActors::TActorSystemSetup *setup, NKikimr::TBlobStorageGroupInfo *groupInfo,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters);
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters);
ui32 GetSize() const {
return VDisks.size();
}
@@ -153,7 +153,7 @@ struct TConfiguration {
const NKikimr::TErasureType::EErasureSpecies Erasure;
TAllPDisksConfiguration PCfg;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
std::unique_ptr<NActors::TMon> Monitoring;
std::unique_ptr<NKikimr::TAppData> AppData;
std::shared_ptr<NKikimr::NPDisk::IIoContextFactory> IoContext;
diff --git a/ydb/core/blobstorage/ut_vdisk/lib/test_huge.cpp b/ydb/core/blobstorage/ut_vdisk/lib/test_huge.cpp
index 0e41b8b27f..18d99b9545 100644
--- a/ydb/core/blobstorage/ut_vdisk/lib/test_huge.cpp
+++ b/ydb/core/blobstorage/ut_vdisk/lib/test_huge.cpp
@@ -92,7 +92,7 @@ public:
/////////////////////////////////////////////////////////////////////////////////////////////////////////
struct THugeModuleContext {
TConfiguration *Conf;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TIntrusivePtr<TLsnMngr> LsnMngr;
TIntrusivePtr<NKikimr::TVDiskConfig> Config;
TVDiskContextPtr VCtx;
@@ -104,7 +104,7 @@ struct THugeModuleContext {
THugeModuleContext(TConfiguration *conf)
: Conf(conf)
- , Counters(new NMonitoring::TDynamicCounters)
+ , Counters(new ::NMonitoring::TDynamicCounters)
{}
};
diff --git a/ydb/core/blobstorage/ut_vdisk/lib/test_repl.cpp b/ydb/core/blobstorage/ut_vdisk/lib/test_repl.cpp
index 2baeac688c..425fba5518 100644
--- a/ydb/core/blobstorage/ut_vdisk/lib/test_repl.cpp
+++ b/ydb/core/blobstorage/ut_vdisk/lib/test_repl.cpp
@@ -196,7 +196,7 @@ private:
friend class TActorBootstrapped<TVDiskReplProxyReaderActor>;
void Bootstrap(const TActorContext &ctx) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters;
auto groupInfo = TBlobStorageGroupInfo(TBlobStorageGroupType::ErasureMirror3, 2, 4);
VCtx.Reset(new TVDiskContext(ctx.SelfID, groupInfo.PickTopology(), counters, VDiskInfo.VDiskID,
ctx.ExecutorThread.ActorSystem, NPDisk::DEVICE_TYPE_UNKNOWN));
diff --git a/ydb/core/blobstorage/ut_vdisk/lib/test_synclog.cpp b/ydb/core/blobstorage/ut_vdisk/lib/test_synclog.cpp
index 53810322f6..abd18a5be5 100644
--- a/ydb/core/blobstorage/ut_vdisk/lib/test_synclog.cpp
+++ b/ydb/core/blobstorage/ut_vdisk/lib/test_synclog.cpp
@@ -162,7 +162,7 @@ class TSyncLogTestWriteActor : public TActorBootstrapped<TSyncLogTestWriteActor>
void Bootstrap(const TActorContext &ctx) {
STR << "RUN TEST\n";
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters(new NMonitoring::TDynamicCounters);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters(new ::NMonitoring::TDynamicCounters);
auto &vDiskInstance = Conf->VDisks->Get(0);
auto &groupInfo = Conf->GroupInfo;
VCtx = MakeIntrusive<TVDiskContext>(ctx.SelfID, groupInfo->PickTopology(), counters, vDiskInstance.VDiskID,
diff --git a/ydb/core/blobstorage/ut_vdisk/lib/vdisk_mock.cpp b/ydb/core/blobstorage/ut_vdisk/lib/vdisk_mock.cpp
index 048f40d773..d00daeecd3 100644
--- a/ydb/core/blobstorage/ut_vdisk/lib/vdisk_mock.cpp
+++ b/ydb/core/blobstorage/ut_vdisk/lib/vdisk_mock.cpp
@@ -36,7 +36,7 @@ public:
}
void Bootstrap(const TActorContext& ctx) {
- VCtx.Reset(new TVDiskContext(ctx.SelfID, Top, new NMonitoring::TDynamicCounters, VDiskId,
+ VCtx.Reset(new TVDiskContext(ctx.SelfID, Top, new ::NMonitoring::TDynamicCounters, VDiskId,
ctx.ExecutorThread.ActorSystem, NPDisk::DEVICE_TYPE_UNKNOWN));
Become(&TVDiskMockActor::StateFunc);
}
diff --git a/ydb/core/blobstorage/ut_vdisk2/CMakeLists.txt b/ydb/core/blobstorage/ut_vdisk2/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/ut_vdisk2/CMakeLists.txt
+++ b/ydb/core/blobstorage/ut_vdisk2/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/ut_vdisk2/env.h b/ydb/core/blobstorage/ut_vdisk2/env.h
index d2c4397a39..9a8ad89cc9 100644
--- a/ydb/core/blobstorage/ut_vdisk2/env.h
+++ b/ydb/core/blobstorage/ut_vdisk2/env.h
@@ -6,7 +6,7 @@ namespace NKikimr {
class TTestEnv : TNonCopyable {
std::unique_ptr<TTestActorSystem> Runtime;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
TIntrusivePtr<TVDiskConfig> VDiskConfig;
TIntrusivePtr<TBlobStorageGroupInfo> Info;
const ui32 GroupId = 0;
@@ -24,7 +24,7 @@ namespace NKikimr {
public:
TTestEnv(TIntrusivePtr<TPDiskMockState> state = nullptr)
: Runtime(std::make_unique<TTestActorSystem>(1))
- , Counters(new NMonitoring::TDynamicCounters)
+ , Counters(new ::NMonitoring::TDynamicCounters)
, AllVDiskKinds(new TAllVDiskKinds)
, PDiskMockState(state ? state : new TPDiskMockState(NodeId, PDiskId, PDiskGuid, (ui64)10 << 40))
{
diff --git a/ydb/core/blobstorage/vdisk/CMakeLists.txt b/ydb/core/blobstorage/vdisk/CMakeLists.txt
index 824dafba62..36a193fa7c 100644
--- a/ydb/core/blobstorage/vdisk/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/CMakeLists.txt
@@ -6,6 +6,21 @@
# original buildsystem will not be accepted.
+add_subdirectory(anubis_osiris)
+add_subdirectory(common)
+add_subdirectory(defrag)
+add_subdirectory(handoff)
+add_subdirectory(huge)
+add_subdirectory(hulldb)
+add_subdirectory(hullop)
+add_subdirectory(ingress)
+add_subdirectory(localrecovery)
+add_subdirectory(query)
+add_subdirectory(repl)
+add_subdirectory(scrub)
+add_subdirectory(skeleton)
+add_subdirectory(syncer)
+add_subdirectory(synclog)
add_library(core-blobstorage-vdisk)
target_link_libraries(core-blobstorage-vdisk PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/anubis_osiris/CMakeLists.txt b/ydb/core/blobstorage/vdisk/anubis_osiris/CMakeLists.txt
index d67fd4380d..c4feac9d3f 100644
--- a/ydb/core/blobstorage/vdisk/anubis_osiris/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/anubis_osiris/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-anubis_osiris)
target_link_libraries(blobstorage-vdisk-anubis_osiris PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/anubis_osiris/blobstorage_anubis_osiris.h b/ydb/core/blobstorage/vdisk/anubis_osiris/blobstorage_anubis_osiris.h
index 96eec4e406..e44bcae7e7 100644
--- a/ydb/core/blobstorage/vdisk/anubis_osiris/blobstorage_anubis_osiris.h
+++ b/ydb/core/blobstorage/vdisk/anubis_osiris/blobstorage_anubis_osiris.h
@@ -82,7 +82,7 @@ namespace NKikimr {
TEvAnubisOsirisPutResult(NKikimrProto::EReplyStatus status,
const TInstant &now,
- NMonitoring::TDynamicCounters::TCounterPtr counterPtr,
+ ::NMonitoring::TDynamicCounters::TCounterPtr counterPtr,
NVDiskMon::TLtcHistoPtr histoPtr,
NWilson::TTraceId traceId)
: TEvVResultBase(now, TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, counterPtr, histoPtr,
diff --git a/ydb/core/blobstorage/vdisk/anubis_osiris/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/anubis_osiris/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/anubis_osiris/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/anubis_osiris/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/common/CMakeLists.txt b/ydb/core/blobstorage/vdisk/common/CMakeLists.txt
index 7290edf7e8..5de70e9e11 100644
--- a/ydb/core/blobstorage/vdisk/common/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/common/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-common)
target_link_libraries(blobstorage-vdisk-common PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/common/memusage.h b/ydb/core/blobstorage/vdisk/common/memusage.h
index b045c1e3d5..fbfdeb52d4 100644
--- a/ydb/core/blobstorage/vdisk/common/memusage.h
+++ b/ydb/core/blobstorage/vdisk/common/memusage.h
@@ -12,10 +12,10 @@
namespace NKikimr {
class TMemoryConsumer {
- NMonitoring::TDynamicCounters::TCounterPtr Counter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Counter;
public:
- TMemoryConsumer(NMonitoring::TDynamicCounters::TCounterPtr counter)
+ TMemoryConsumer(::NMonitoring::TDynamicCounters::TCounterPtr counter)
: Counter(std::move(counter))
{}
@@ -34,14 +34,14 @@ namespace NKikimr {
*Counter += static_cast<i64>(bytes);
}
- NMonitoring::TDynamicCounters::TCounterPtr GetCounter() const {
+ ::NMonitoring::TDynamicCounters::TCounterPtr GetCounter() const {
return Counter;
}
};
class TMemoryConsumerWithDropOnDestroy : protected TMemoryConsumer {
public:
- TMemoryConsumerWithDropOnDestroy(NMonitoring::TDynamicCounters::TCounterPtr counter)
+ TMemoryConsumerWithDropOnDestroy(::NMonitoring::TDynamicCounters::TCounterPtr counter)
: TMemoryConsumer(counter)
{}
TMemoryConsumerWithDropOnDestroy(const TMemoryConsumer &other)
diff --git a/ydb/core/blobstorage/vdisk/common/memusage_ut.cpp b/ydb/core/blobstorage/vdisk/common/memusage_ut.cpp
index 79022e4ab3..0634a36b56 100644
--- a/ydb/core/blobstorage/vdisk/common/memusage_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/common/memusage_ut.cpp
@@ -5,9 +5,9 @@ using namespace NKikimr;
Y_UNIT_TEST_SUITE(TTrackable) {
Y_UNIT_TEST(TVector) {
- NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
+ ::NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
TMemoryConsumer cons(cntr);
- NMonitoring::TDynamicCounters::TCounterPtr cntr2(new NMonitoring::TCounterForPtr);
+ ::NMonitoring::TDynamicCounters::TCounterPtr cntr2(new NMonitoring::TCounterForPtr);
TMemoryConsumer cons2(cntr2);
{
TTrackableVector<ui32> v{TMemoryConsumer(cons)};
@@ -37,7 +37,7 @@ Y_UNIT_TEST_SUITE(TTrackable) {
}
Y_UNIT_TEST(TList) {
- NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
+ ::NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
TMemoryConsumer cons(cntr);
TTrackableList<ui32> list{TMemoryConsumer(cons)};
list.push_back(1);
@@ -45,12 +45,12 @@ Y_UNIT_TEST_SUITE(TTrackable) {
}
Y_UNIT_TEST(TString) {
- NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
+ ::NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
TMemoryConsumer cons(cntr);
}
Y_UNIT_TEST(TBuffer) {
- NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
+ ::NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
TMemoryConsumer cons(cntr);
}
}
diff --git a/ydb/core/blobstorage/vdisk/common/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/common/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/common/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/common/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_context.cpp b/ydb/core/blobstorage/vdisk/common/vdisk_context.cpp
index 00f0b778c4..a5064cd967 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_context.cpp
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_context.cpp
@@ -22,7 +22,7 @@ namespace NKikimr {
TVDiskContext::TVDiskContext(
const TActorId &vdiskActorId,
std::shared_ptr<TBlobStorageGroupInfo::TTopology> top,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& vdiskCounters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& vdiskCounters,
const TVDiskID &selfVDisk,
TActorSystem *as, // as can be nullptr for tests
NPDisk::EDeviceType type,
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_context.h b/ydb/core/blobstorage/vdisk/common/vdisk_context.h
index 9d383fc15d..4f6c749e97 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_context.h
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_context.h
@@ -16,7 +16,7 @@ namespace NKikimr {
// TBSProxyContext
/////////////////////////////////////////////////////////////////////////////////////////
struct TBSProxyContext : public TThrRefBase, TNonCopyable {
- TBSProxyContext(const TIntrusivePtr<NMonitoring::TDynamicCounters>& mon)
+ TBSProxyContext(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& mon)
: Queue(mon->GetCounter("MemTotal:Queue"))
{}
@@ -33,8 +33,8 @@ namespace NKikimr {
// ActorId of the main VDisk actor (currently ActorId of SkeletonFront)
const TActorId VDiskActorId;
const std::shared_ptr<TBlobStorageGroupInfo::TTopology> Top;
- const TIntrusivePtr<NMonitoring::TDynamicCounters> VDiskCounters;
- const TIntrusivePtr<NMonitoring::TDynamicCounters> VDiskMemCounters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> VDiskCounters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> VDiskMemCounters;
// latency histograms
NVDiskMon::THistograms Histograms;
std::shared_ptr<NMonGroup::TVDiskIFaceGroup> IFaceMonGroup;
@@ -80,7 +80,7 @@ namespace NKikimr {
TVDiskContext(
const TActorId &vdiskActorId,
std::shared_ptr<TBlobStorageGroupInfo::TTopology> top,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& vdiskCounters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& vdiskCounters,
const TVDiskID &selfVDisk,
TActorSystem *as, // can be nullptr for tests
NPDisk::EDeviceType type,
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_events.cpp b/ydb/core/blobstorage/vdisk/common/vdisk_events.cpp
index 25a0e24320..f02de6350c 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_events.cpp
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_events.cpp
@@ -8,7 +8,7 @@ namespace NKikimr {
TEvBlobStorage::TEvVPutResult::TEvVPutResult(const NKikimrProto::EReplyStatus status,
const TLogoBlobID &logoBlobId, const TVDiskID &vdisk, const ui64 *cookie, TOutOfSpaceStatus oosStatus,
const TInstant &now, ui32 recByteSize, NKikimrBlobStorage::TEvVPut *record,
- const TActorIDPtr &skeletonFrontIDPtr, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TActorIDPtr &skeletonFrontIDPtr, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, const ui64 bufferSizeBytes, NWilson::TTraceId traceId,
ui64 incarnationGuid, const TString& errorReason)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_events.h b/ydb/core/blobstorage/vdisk/common/vdisk_events.h
index dc52a49d02..dcfcea9eaf 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_events.h
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_events.h
@@ -353,7 +353,7 @@ namespace NKikimr {
public:
TEvVResultBase() = default;
- TEvVResultBase(const TInstant &now, ui32 channel, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ TEvVResultBase(const TInstant &now, ui32 channel, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId)
: TVDiskNonlocalResultBase(channel)
, Start(now)
@@ -390,7 +390,7 @@ namespace NKikimr {
private:
const TInstant Start;
ui64 Size;
- NMonitoring::TDynamicCounters::TCounterPtr CounterPtr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterPtr;
NVDiskMon::TLtcHistoPtr HistoPtr;
bool Finalized = false;
@@ -408,7 +408,7 @@ namespace NKikimr {
public:
TEvVResultBasePB() = default;
- TEvVResultBasePB(const TInstant &now, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ TEvVResultBasePB(const TInstant &now, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui32 channel)
: TEvVResultBase(now, channel, counterPtr, histoPtr, std::move(traceId))
{}
@@ -431,7 +431,7 @@ namespace NKikimr {
}
template<typename TQueryRecord>
- TEvVResultBaseWithQoSPB(TInstant now, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ TEvVResultBaseWithQoSPB(TInstant now, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui32 channel,
ui32 recByteSize, TQueryRecord *queryRecord, const TActorIDPtr &skeletonFrontIDPtr)
: TBase(queryRecord ? GetReceivedTimestamp(queryRecord) : now,
@@ -715,7 +715,7 @@ namespace NKikimr {
TEvVPutResult(const NKikimrProto::EReplyStatus status, const TLogoBlobID &logoBlobId, const TVDiskID &vdisk,
const ui64 *cookie, TOutOfSpaceStatus oosStatus, const TInstant &now, ui32 recByteSize,
NKikimrBlobStorage::TEvVPut *queryRecord, const TActorIDPtr &skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
const ui64 bufferSizeBytes, NWilson::TTraceId traceId, ui64 incarnationGuid,
const TString& errorReason);
@@ -927,7 +927,7 @@ namespace NKikimr {
TEvVMultiPutResult(const NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, const ui64 *cookie,
const TInstant &now, ui32 recByteSize, NKikimrBlobStorage::TEvVMultiPut *record,
- const TActorIDPtr &skeletonFrontIDPtr, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TActorIDPtr &skeletonFrontIDPtr, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, const ui64 bufferSizeBytes, NWilson::TTraceId traceId,
ui64 incarnationGuid, const TString& errorReason)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
@@ -1263,7 +1263,7 @@ namespace NKikimr {
TEvVGetResult(NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, const TInstant &now,
ui32 recByteSize, NKikimrBlobStorage::TEvVGet *queryRecord, const TActorIDPtr &skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
NWilson::TTraceId traceId, TMaybe<ui64> cookie, ui32 channel, ui64 incarnationGuid)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId), channel,
recByteSize, queryRecord, skeletonFrontIDPtr)
@@ -1515,7 +1515,7 @@ namespace NKikimr {
const TLogoBlobID &patchedBlobId, const TVDiskID &vdisk, TMaybe<ui64> cookie,
TOutOfSpaceStatus oosStatus, const TInstant &now, ui32 recByteSize,
TReqRecord *record, const TActorIDPtr &skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
NWilson::TTraceId traceId, ui64 incarnationGuid, const TString& errorReason)
: TBase(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, recByteSize, record, skeletonFrontIDPtr)
@@ -1638,7 +1638,7 @@ namespace NKikimr {
const TLogoBlobID &patchedBlobId, const TVDiskID &vdisk, TMaybe<ui64> cookie,
TOutOfSpaceStatus oosStatus, const TInstant &now, ui32 recByteSize,
NKikimrBlobStorage::TEvVMovedPatch *record, const TActorIDPtr &skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
NWilson::TTraceId traceId, ui64 incarnationGuid, const TString& errorReason)
: TBase(status, originalBlobId, patchedBlobId, vdisk, cookie, oosStatus, now, recByteSize,
record, skeletonFrontIDPtr, counterPtr, histoPtr, std::move(traceId), incarnationGuid, errorReason)
@@ -1686,7 +1686,7 @@ namespace NKikimr {
const TLogoBlobID &patchedBlobId, const TVDiskID &vdisk, TMaybe<ui64> cookie,
TOutOfSpaceStatus oosStatus, const TInstant &now, ui32 recByteSize,
NKikimrBlobStorage::TEvVInplacePatch *record, const TActorIDPtr &skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
NWilson::TTraceId traceId, ui64 incarnationGuid, const TString& errorReason)
: TBase(status, originalBlobId, patchedBlobId, vdisk, cookie, oosStatus, now, recByteSize,
record, skeletonFrontIDPtr, counterPtr, histoPtr, std::move(traceId), incarnationGuid, errorReason)
@@ -1736,7 +1736,7 @@ namespace NKikimr {
TEvVBlockResult(NKikimrProto::EReplyStatus status, const TTabletActGen *actual, const TVDiskID &vdisk,
const TInstant &now, ui32 recByteSize, NKikimrBlobStorage::TEvVBlock *queryRecord,
- const TActorIDPtr &skeletonFrontIDPtr, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TActorIDPtr &skeletonFrontIDPtr, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui64 incarnationGuid)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, recByteSize, queryRecord, skeletonFrontIDPtr)
@@ -1830,7 +1830,7 @@ namespace NKikimr {
TEvVPatchFoundParts(NKikimrProto::EReplyStatus status, const TLogoBlobID &originalBlobId,
const TLogoBlobID &patchedBlobId, const TVDiskID &vDiskId, TMaybe<ui64> cookie, const TInstant &now,
const TString &errorReason, NKikimrBlobStorage::TEvVPatchStart *record,
- const TActorIDPtr &skeletonFrontIDPtr, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TActorIDPtr &skeletonFrontIDPtr, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui64 incarnationGuid)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, record->GetCachedSize(),
@@ -1994,7 +1994,7 @@ namespace NKikimr {
TEvVPatchXorDiffResult(NKikimrProto::EReplyStatus status, TInstant now,
NKikimrBlobStorage::TEvVPatchXorDiff *record, const TActorIDPtr &skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, record->GetCachedSize(),
@@ -2028,7 +2028,7 @@ namespace NKikimr {
TEvVPatchResult(NKikimrProto::EReplyStatus status, const TLogoBlobID &originalPartBlobId,
const TLogoBlobID &patchedPartBlobId, const TVDiskID &vDiskId, TMaybe<ui64> cookie, TInstant now,
NKikimrBlobStorage::TEvVPatchDiff *record, const TActorIDPtr &skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
NWilson::TTraceId traceId, ui64 incarnationGuid)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, record->GetCachedSize(),
@@ -2107,7 +2107,7 @@ namespace NKikimr {
TEvVGetBlockResult(NKikimrProto::EReplyStatus status, ui64 tabletId, const TVDiskID &vdisk,
const TInstant &now, ui32 recByteSize, NKikimrBlobStorage::TEvVGetBlock *queryRecord,
- const TActorIDPtr &skeletonFrontIDPtr, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TActorIDPtr &skeletonFrontIDPtr, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, recByteSize, queryRecord, skeletonFrontIDPtr)
@@ -2119,7 +2119,7 @@ namespace NKikimr {
TEvVGetBlockResult(NKikimrProto::EReplyStatus status, ui64 tabletId, ui32 generation, const TVDiskID &vdisk,
const TInstant &now, ui32 recByteSize, NKikimrBlobStorage::TEvVGetBlock *queryRecord,
- const TActorIDPtr &skeletonFrontIDPtr, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TActorIDPtr &skeletonFrontIDPtr, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, recByteSize, queryRecord, skeletonFrontIDPtr)
@@ -2232,7 +2232,7 @@ namespace NKikimr {
TEvVCollectGarbageResult(NKikimrProto::EReplyStatus status, ui64 tabletId, ui32 recordGeneration, ui32 channel,
const TVDiskID &vdisk, const TInstant &now, ui32 recByteSize,
NKikimrBlobStorage::TEvVCollectGarbage *queryRecord, const TActorIDPtr &skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
NWilson::TTraceId traceId, ui64 incarnationGuid)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, recByteSize, queryRecord, skeletonFrontIDPtr)
@@ -2327,7 +2327,7 @@ namespace NKikimr {
TEvVGetBarrierResult(NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, const TInstant &now,
ui32 recByteSize, NKikimrBlobStorage::TEvVGetBarrier *queryRecord,
- const TActorIDPtr &skeletonFrontIDPtr, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TActorIDPtr &skeletonFrontIDPtr, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId)
: TEvVResultBaseWithQoSPB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, recByteSize, queryRecord, skeletonFrontIDPtr)
@@ -2497,7 +2497,7 @@ namespace NKikimr {
TEvVDbStatResult() = default;
TEvVDbStatResult(NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, const TInstant &now,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr, const NVDiskMon::TLtcHistoPtr &histoPtr,
NWilson::TTraceId traceId)
: TEvVResultBasePB(now, counterPtr, histoPtr, std::move(traceId),
TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG)
@@ -2564,7 +2564,7 @@ namespace NKikimr {
// read response
TEvVSyncGuidResult(const NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, const TInstant &now,
- ui64 guid, EState state, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ ui64 guid, EState state, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui32 channel)
: TEvVResultBasePB(now, counterPtr, histoPtr, std::move(traceId), channel)
{
@@ -2577,7 +2577,7 @@ namespace NKikimr {
// write or error response
TEvVSyncGuidResult(const NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, const TInstant &now,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui32 channel)
: TEvVResultBasePB(now, counterPtr, histoPtr, std::move(traceId), channel)
{
@@ -2623,7 +2623,7 @@ namespace NKikimr {
TEvVSyncResult(const NKikimrProto::EReplyStatus status, const TVDiskID &vdisk,
const TSyncState &newSyncState, bool finished, NPDisk::TStatusFlags flags, const TInstant &now,
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui32 channel)
: TEvVResultBasePB(now, counterPtr, histoPtr, std::move(traceId), channel)
{
@@ -2635,7 +2635,7 @@ namespace NKikimr {
}
TEvVSyncResult(const NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, NPDisk::TStatusFlags flags,
- const TInstant &now, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TInstant &now, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui32 channel)
: TEvVResultBasePB(now, counterPtr, histoPtr, std::move(traceId), channel)
{
@@ -2689,7 +2689,7 @@ namespace NKikimr {
TEvVSyncFullResult() = default;
TEvVSyncFullResult(const NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, const TSyncState &syncState,
- ui64 cookie, const TInstant &now, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ ui64 cookie, const TInstant &now, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui32 channel)
: TEvVResultBasePB(now, counterPtr, histoPtr, std::move(traceId), channel)
{
@@ -2700,7 +2700,7 @@ namespace NKikimr {
}
TEvVSyncFullResult(const NKikimrProto::EReplyStatus status, const TVDiskID &vdisk, ui64 cookie,
- const TInstant &now, const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
+ const TInstant &now, const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr,
const NVDiskMon::TLtcHistoPtr &histoPtr, NWilson::TTraceId traceId, ui32 channel)
: TEvVResultBasePB(now, counterPtr, histoPtr, std::move(traceId), channel)
{
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.cpp b/ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.cpp
index abe249a929..8d80758520 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.cpp
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.cpp
@@ -6,7 +6,7 @@ namespace NKikimr {
namespace NVDiskMon {
TLtcHisto::TLtcHisto(
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TString &name,
const TString &value,
NPDisk::EDeviceType type)
@@ -15,7 +15,7 @@ namespace NKikimr {
ThroughputBytes = group->GetCounter("requestBytes", true);
// Set up Histo
- TIntrusivePtr<NMonitoring::TDynamicCounters> histoGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> histoGroup;
histoGroup = group->GetSubgroup("subsystem", "latency_histo");
auto h = NMonitoring::ExplicitHistogram(GetCommonLatencyHistBounds(type));
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.h b/ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.h
index 9ed0594e3b..4d83c296a3 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.h
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_histogram_latency.h
@@ -20,7 +20,7 @@ namespace NKikimr {
/////////////////////////////////////////////////////////////////////////////////////////
class TLtcHisto {
public:
- TLtcHisto(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ TLtcHisto(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TString &name,
const TString &value,
NPDisk::EDeviceType type);
@@ -30,7 +30,7 @@ namespace NKikimr {
private:
NMonitoring::THistogramPtr Histo;
- NMonitoring::TDynamicCounters::TCounterPtr ThroughputBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ThroughputBytes;
};
using TLtcHistoPtr = std::shared_ptr<TLtcHisto>;
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_histograms.cpp b/ydb/core/blobstorage/vdisk/common/vdisk_histograms.cpp
index 8ef4f0c700..04a4062379 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_histograms.cpp
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_histograms.cpp
@@ -4,7 +4,7 @@ namespace NKikimr {
namespace NVDiskMon {
THistograms::THistograms(
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
NPDisk::EDeviceType type)
{
for (const auto& item : {
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_histograms.h b/ydb/core/blobstorage/vdisk/common/vdisk_histograms.h
index 5dc749481d..32b397bfb4 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_histograms.h
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_histograms.h
@@ -13,7 +13,7 @@ namespace NKikimr {
class THistograms {
public:
THistograms(
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
NPDisk::EDeviceType type);
const NVDiskMon::TLtcHistoPtr &GetHistogram(NKikimrBlobStorage::EGetHandleClass handleClass) const;
const NVDiskMon::TLtcHistoPtr &GetHistogram(NKikimrBlobStorage::EPutHandleClass handleClass) const;
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_mongroups.h b/ydb/core/blobstorage/vdisk/common/vdisk_mongroups.h
index aa1bff8f84..213e057dcc 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_mongroups.h
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_mongroups.h
@@ -9,28 +9,28 @@ namespace NKikimr {
class TBase {
public:
- TBase(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ TBase(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TString& name,
const TString& value)
: DerivedCounters(counters)
, GroupCounters(DerivedCounters->GetSubgroup(name, value))
{}
- TIntrusivePtr<NMonitoring::TDynamicCounters> GetGroup() const { return GroupCounters; }
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> GetGroup() const { return GroupCounters; }
protected:
- TIntrusivePtr<NMonitoring::TDynamicCounters> DerivedCounters;
- TIntrusivePtr<NMonitoring::TDynamicCounters> GroupCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> DerivedCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> GroupCounters;
};
#define COUNTER_DEF(name) \
protected: \
- NMonitoring::TDynamicCounters::TCounterPtr name##_; \
+ ::NMonitoring::TDynamicCounters::TCounterPtr name##_; \
public: \
NMonitoring::TDeprecatedCounter &name() { return *name##_; } \
const NMonitoring::TDeprecatedCounter &name() const { return *name##_; } \
- const NMonitoring::TDynamicCounters::TCounterPtr &name##Ptr() const { return name##_; }
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &name##Ptr() const { return name##_; }
#define COUNTER_INIT(name, derivative) \
name##_ = GroupCounters->GetCounter(#name, derivative)
@@ -40,7 +40,7 @@ public:
NMonitoring::TCountableBase::EVisibility::Private)
#define GROUP_CONSTRUCTOR(name) \
- name(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, \
+ name(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, \
const TString& name, \
const TString& value) \
: TBase(counters, name, value)
@@ -339,8 +339,8 @@ public:
// TVDiskStateGroup
///////////////////////////////////////////////////////////////////////////////////
class TVDiskStateGroup: public TBase {
- std::array<NMonitoring::TDynamicCounters::TCounterPtr, NKikimrWhiteboard::EVDiskState_MAX + 1> VDiskStates;
- NMonitoring::TDynamicCounters::TCounterPtr CurrentState;
+ std::array<::NMonitoring::TDynamicCounters::TCounterPtr, NKikimrWhiteboard::EVDiskState_MAX + 1> VDiskStates;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CurrentState;
public:
GROUP_CONSTRUCTOR(TVDiskStateGroup)
@@ -397,7 +397,7 @@ public:
///////////////////////////////////////////////////////////////////////////////////
class TLsmAllLevelsStat {
public:
- TIntrusivePtr<NMonitoring::TDynamicCounters> Group;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Group;
// per-level information
TLsmLevelGroup Level0;
TLsmLevelGroup Level1to8;
@@ -405,7 +405,7 @@ public:
TLsmLevelGroup Level17;
TLsmLevelGroup Level18;
- TLsmAllLevelsStat(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters)
+ TLsmAllLevelsStat(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters)
: Group(counters->GetSubgroup("subsystem", "levels"))
, Level0(Group, "level", "0")
, Level1to8(Group, "level", "1..8")
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_private_events.h b/ydb/core/blobstorage/vdisk/common/vdisk_private_events.h
index 7a1f864783..840f5f7da1 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_private_events.h
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_private_events.h
@@ -61,7 +61,7 @@ namespace NKikimr {
const ui64 OrderId;
TEvDelLogoBlobDataSyncLogResult(ui64 orderId, const TInstant &now,
- NMonitoring::TDynamicCounters::TCounterPtr counterPtr, NVDiskMon::TLtcHistoPtr histoPtr,
+ ::NMonitoring::TDynamicCounters::TCounterPtr counterPtr, NVDiskMon::TLtcHistoPtr histoPtr,
NWilson::TTraceId traceId)
: TEvVResultBase(now, TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, counterPtr,
histoPtr, std::move(traceId))
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_queues.h b/ydb/core/blobstorage/vdisk/common/vdisk_queues.h
index 9deed7fb43..27701db797 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_queues.h
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_queues.h
@@ -48,7 +48,7 @@ namespace NKikimr {
void CreateQueuesForVDisks(TContainer &cont, const TActorId &parent,
const TIntrusivePtr<NKikimr::TBlobStorageGroupInfo> &gInfo,
const TIntrusivePtr<TVDiskContext> &vCtx, const TVDiskContainer &disks,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &groupCounters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &groupCounters,
const NBackpressure::TQueueClientId &queueClientId, NKikimrBlobStorage::EVDiskQueueId vDiskQueueId,
const TString &queueName, TInterconnectChannels::EInterconnectChannels interconnectChannel,
TWrapper wrapper = {})
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.cpp b/ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.cpp
index f0ec9c15e4..4c45562f66 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.cpp
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.cpp
@@ -18,15 +18,15 @@ LWTRACE_USING(BLOBSTORAGE_PROVIDER);
////////////////////////////////////////////////////////////////////////////
struct TCounters {
struct TItem {
- NMonitoring::TDynamicCounters::TCounterPtr Msgs;
- NMonitoring::TDynamicCounters::TCounterPtr Bytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Msgs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Bytes;
TItem()
: Msgs()
, Bytes()
{}
- TItem(const TString &prefix, const TString& name, TIntrusivePtr<NMonitoring::TDynamicCounters> mon) {
+ TItem(const TString &prefix, const TString& name, TIntrusivePtr<::NMonitoring::TDynamicCounters> mon) {
Msgs = mon->GetCounter(prefix + name + "Msgs", true);
Bytes = mon->GetCounter(prefix + name + "Bytes", true);
}
@@ -39,7 +39,7 @@ LWTRACE_USING(BLOBSTORAGE_PROVIDER);
TVector<TItem> Counters;
- TCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> mon) {
+ TCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> mon) {
auto group = mon->GetSubgroup("subsystem", "logrecs");
Counters.reserve(static_cast<size_t>(TLogSignature::Max));
TString prefix("Log");
@@ -91,7 +91,7 @@ LWTRACE_USING(BLOBSTORAGE_PROVIDER);
const NPDisk::TOwnerRound OwnerRound;
ui64 CurSentLsn = 0;
TQueueType Queue;
- NMonitoring::TDynamicCounters::TCounterPtr LsmLogBytesWritten;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LsmLogBytesWritten;
TCounters Counters;
friend class TActorBootstrapped<TRecoveryLogWriter>;
@@ -208,7 +208,7 @@ LWTRACE_USING(BLOBSTORAGE_PROVIDER);
TRecoveryLogWriter(const TActorId &yardID, const TActorId &skeletonID,
NPDisk::TOwner owner, NPDisk::TOwnerRound ownerRound, ui64 startLsn,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters)
: TActorBootstrapped<TRecoveryLogWriter>()
, YardID(yardID)
, SkeletonID(skeletonID)
@@ -223,7 +223,7 @@ LWTRACE_USING(BLOBSTORAGE_PROVIDER);
IActor* CreateRecoveryLogWriter(const TActorId &yardID, const TActorId &skeletonID, NPDisk::TOwner owner,
NPDisk::TOwnerRound ownerRound,
- ui64 startLsn, TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+ ui64 startLsn, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
return new TRecoveryLogWriter(yardID, skeletonID, owner, ownerRound, startLsn, counters);
}
diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.h b/ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.h
index c38ff753d4..37aad013be 100644
--- a/ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.h
+++ b/ydb/core/blobstorage/vdisk/common/vdisk_recoverylogwriter.h
@@ -8,6 +8,6 @@ namespace NKikimr {
// Writing via LogWriter makes proper ordering of Lsns
IActor* CreateRecoveryLogWriter(const TActorId &yardID, const TActorId &skeletonID, NPDisk::TOwner owner,
NPDisk::TOwnerRound ownerRound,
- ui64 startLsn, TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+ ui64 startLsn, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
} // NKikimr
diff --git a/ydb/core/blobstorage/vdisk/defrag/CMakeLists.txt b/ydb/core/blobstorage/vdisk/defrag/CMakeLists.txt
index ad1220bf25..b1533acd92 100644
--- a/ydb/core/blobstorage/vdisk/defrag/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/defrag/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-defrag)
target_link_libraries(blobstorage-vdisk-defrag PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/defrag/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/defrag/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/defrag/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/defrag/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/huge/CMakeLists.txt b/ydb/core/blobstorage/vdisk/huge/CMakeLists.txt
index 14e856722f..946745bd7a 100644
--- a/ydb/core/blobstorage/vdisk/huge/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/huge/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-huge)
target_link_libraries(blobstorage-vdisk-huge PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/huge/blobstorage_hullhuge_ut.cpp b/ydb/core/blobstorage/vdisk/huge/blobstorage_hullhuge_ut.cpp
index 451792bb26..6e223e2451 100644
--- a/ydb/core/blobstorage/vdisk/huge/blobstorage_hullhuge_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/huge/blobstorage_hullhuge_ut.cpp
@@ -25,7 +25,7 @@ namespace NKikimr {
bool oldMapCompatible = false;
auto logf = [] (const TString &state) { STR << state; };
- auto counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ auto counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto info = MakeIntrusive<TBlobStorageGroupInfo>(TBlobStorageGroupType::Erasure4Plus2Block);
auto vctx = MakeIntrusive<TVDiskContext>(TActorId(), info->PickTopology(), counters, TVDiskID(0, 1, 0, 0, 0),
nullptr, NPDisk::DEVICE_TYPE_UNKNOWN);
diff --git a/ydb/core/blobstorage/vdisk/huge/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/huge/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/huge/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/huge/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/hulldb/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/CMakeLists.txt
index af4bb25210..dc79806422 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/CMakeLists.txt
@@ -6,6 +6,13 @@
# original buildsystem will not be accepted.
+add_subdirectory(barriers)
+add_subdirectory(base)
+add_subdirectory(compstrat)
+add_subdirectory(fresh)
+add_subdirectory(generic)
+add_subdirectory(test)
+add_subdirectory(ut)
add_library(blobstorage-vdisk-hulldb)
target_link_libraries(blobstorage-vdisk-hulldb PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/hulldb/barriers/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/barriers/CMakeLists.txt
index 42c0544089..1da98d2a72 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/barriers/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/barriers/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(vdisk-hulldb-barriers)
target_link_libraries(vdisk-hulldb-barriers PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/hulldb/barriers/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/barriers/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/barriers/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/barriers/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/base/CMakeLists.txt
index e8525599c2..760e6f5156 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/base/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/base/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(vdisk-hulldb-base)
target_link_libraries(vdisk-hulldb-base PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.cpp b/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.cpp
index b88dc277c2..b82ebe437c 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.cpp
+++ b/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.cpp
@@ -2,44 +2,43 @@
namespace NKikimr {
- static const char *SkipSpaces(const char *str) {
- while (str && *str && *str == ' ')
- ++str;
- return str;
- }
-
-
#define PARSE_NUM(field_def, field_name_str, base) \
-field_def = strtoll(str, &endptr, base); \
-endptr = const_cast<char*>(SkipSpaces(endptr)); \
-if (!(endptr && *endptr == ':')) { \
-errorExplanation = "Can't find trailing ':' after " field_name_str; \
-return false; \
-} \
-str = endptr + 1;
-
+ field_def = strtoll(str, &endptr, base); \
+ endptr = const_cast<char*>(skipSpaces(endptr)); \
+ if (!(endptr && *endptr == ':')) { \
+ errorExplanation = "Can't find trailing ':' after " field_name_str; \
+ return false; \
+ } \
+ str = endptr + 1;
bool TKeyBarrier::Parse(TKeyBarrier &out, const TString &buf, TString &errorExplanation) {
const char *str = buf.data();
char *endptr = nullptr;
- str = SkipSpaces(str);
+ auto skipSpaces = [] (const char* str) {
+ while (str && *str && *str == ' ')
+ ++str;
+ return str;
+ };
+
+ str = skipSpaces(str);
if (*str != '[') {
errorExplanation = "Value doesn't start with '['";
return false;
}
++str;
- PARSE_NUM(ui64 tabletID, "tablet id", 16);
- PARSE_NUM(ui64 channel, "channel", 10);
- PARSE_NUM(ui64 gen, "generation", 10);
- ui64 genCounter = strtoll(str, &endptr, 10);
- str = SkipSpaces(endptr);
+ PARSE_NUM(const ui64 tabletID, "tablet id", 10);
+ PARSE_NUM(const ui64 channel, "channel", 10);
+ PARSE_NUM(const ui64 gen, "generation", 10);
+
+ const ui64 genCounter = strtoll(str, &endptr, 10);
+ str = skipSpaces(endptr);
if (!(str && *str && *str == ']')) {
errorExplanation = "Can't find trailing ']' after generation counter";
return false;
}
- str = SkipSpaces(str + 1);
+ str = skipSpaces(str + 1);
if (!(str && *str == '\0')) {
errorExplanation = "Garbage after ']'";
return false;
diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.h b/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.h
index 4afce21c05..078a4e14ac 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.h
+++ b/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier.h
@@ -67,8 +67,8 @@ namespace NKikimr {
{}
TString ToString() const {
- return Sprintf("[%16" PRIu64 " %" PRIu32 " %" PRIu32 " %" PRIu32 " %s]",
- TabletId, Channel, Gen, GenCounter, Hard ? "hard" : "soft");
+ return Sprintf("[%" PRIu64 " %" PRIu32 " %" PRIu32 " %" PRIu32 " %s]",
+ TabletId, Channel, Gen, GenCounter, Hard ? "hard" : "soft");
}
TLogoBlobID LogoBlobID() const {
diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier_ut.cpp b/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier_ut.cpp
index 644c9290a8..06157ecdaf 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/hulldb/base/hullbase_barrier_ut.cpp
@@ -15,15 +15,15 @@ namespace NKikimr {
expected = TKeyBarrier(0, 0, 34, 15, false);
UNIT_ASSERT(res && id == expected);
- res = TKeyBarrier::Parse(id, "[ABC:0:34:15 ]", explanation);
- expected = TKeyBarrier(0xABC, 0, 34, 15, false);
+ res = TKeyBarrier::Parse(id, "[1000:0:34:15 ]", explanation);
+ expected = TKeyBarrier(1000, 0, 34, 15, false);
UNIT_ASSERT(res && id == expected);
- res = TKeyBarrier::Parse(id, "[ABC:0:34:15 ", explanation);
+ res = TKeyBarrier::Parse(id, "[1000:0:34:15 ", explanation);
UNIT_ASSERT(!res && explanation == "Can't find trailing ']' after generation counter");
- res = TKeyBarrier::Parse(id, "[ABC:0: x34:15 ", explanation);
+ res = TKeyBarrier::Parse(id, "[1000:0: x34:15 ", explanation);
UNIT_ASSERT(!res && explanation == "Can't find trailing ':' after generation");
}
}
diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h b/ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h
index 5a1367202d..d242dc312b 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h
+++ b/ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h
@@ -12,7 +12,7 @@ namespace NKikimr {
: ChunkSize(chunkSize)
, CompWorthReadSize(compWorthReadSize)
, GroupInfo(TBlobStorageGroupType::ErasureMirror3, 2, 4)
- , VCtx(new TVDiskContext(TActorId(), GroupInfo.PickTopology(), new NMonitoring::TDynamicCounters(),
+ , VCtx(new TVDiskContext(TActorId(), GroupInfo.PickTopology(), new ::NMonitoring::TDynamicCounters(),
TVDiskID(), nullptr, NPDisk::DEVICE_TYPE_UNKNOWN))
, HullCtx(
new THullCtx(
diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/base/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/base/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/base/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/hulldb/compstrat/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/compstrat/CMakeLists.txt
index dc2e060205..ca71ae11da 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/compstrat/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/compstrat/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(vdisk-hulldb-compstrat)
target_link_libraries(vdisk-hulldb-compstrat PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/hulldb/compstrat/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/compstrat/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/compstrat/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/compstrat/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/hulldb/fresh/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/fresh/CMakeLists.txt
index e9bd4c18f4..808f265f91 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/fresh/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/fresh/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(vdisk-hulldb-fresh)
target_link_libraries(vdisk-hulldb-fresh PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix.h b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix.h
index a4da075ad4..b4e57cf46f 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix.h
+++ b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix.h
@@ -83,7 +83,7 @@ namespace NKikimr {
return sizeof(TRecord) * SortedRecs.size();
}
- NMonitoring::TDynamicCounters::TCounterPtr GetCounter() const {
+ ::NMonitoring::TDynamicCounters::TCounterPtr GetCounter() const {
return MemConsumed.GetCounter();
}
diff --git a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix_ut.cpp b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix_ut.cpp
index 144cc818c6..9ab7c164dc 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_appendix_ut.cpp
@@ -11,7 +11,7 @@ namespace NKikimr {
Y_UNIT_TEST_SUITE(TFreshAppendixTest) {
- static NMonitoring::TDynamicCounters DynCounters;
+ static ::NMonitoring::TDynamicCounters DynCounters;
std::shared_ptr<TFreshAppendix<int, int>> CreateAppendix(const TVector<int> &v) {
auto group = DynCounters.GetSubgroup("subsystem", "memhull");
diff --git a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_data_ut.cpp b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_data_ut.cpp
index 061f2b71ed..b449c40812 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_data_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_data_ut.cpp
@@ -305,7 +305,7 @@ namespace NKikimr {
struct TCreateAppendixCtx {
- NMonitoring::TDynamicCounters DynCounters;
+ ::NMonitoring::TDynamicCounters DynCounters;
TMemoryConsumer MemConsumer;
TMemRecLogoBlob MemRec;
diff --git a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_ut.cpp b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_ut.cpp
index d634bfd707..8b10a88c52 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/hulldb/fresh/fresh_segment_ut.cpp
@@ -128,7 +128,7 @@ namespace NKikimr {
const ui32 From = 2;
const ui32 To = 6;
const ui32 InsertsThreshold = 1000;
- NMonitoring::TDynamicCounters DynCounters;
+ ::NMonitoring::TDynamicCounters DynCounters;
TMemoryConsumer MemConsumer;
ui64 *LsnCounter = nullptr;
ui32 Part = 0;
diff --git a/ydb/core/blobstorage/vdisk/hulldb/fresh/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/fresh/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/fresh/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/fresh/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/hulldb/generic/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/generic/CMakeLists.txt
index 50a8e7e758..3c2dae6b00 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/generic/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/generic/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(vdisk-hulldb-generic)
target_link_libraries(vdisk-hulldb-generic PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/hulldb/generic/hullds_idx.cpp b/ydb/core/blobstorage/vdisk/hulldb/generic/hullds_idx.cpp
index d35b282732..32bd8c2482 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/generic/hullds_idx.cpp
+++ b/ydb/core/blobstorage/vdisk/hulldb/generic/hullds_idx.cpp
@@ -198,7 +198,7 @@ namespace NKikimr {
DIV_CLASS("panel-body") {
DIV_CLASS("row") {
DIV_CLASS("col-md-1") {
- H5() { str << "Fresh"; }
+ TAG(TH5) { str << "Fresh"; }
const char *comp = Fresh.CompactionInProgress() ? "Compaction In Progress" : "No Compaction";
H6_CLASS ("text-info") {str << comp << " W:" << FreshCompWritesInFlight;}
}
@@ -206,7 +206,7 @@ namespace NKikimr {
}
DIV_CLASS("row") {
DIV_CLASS("col-md-1") {
- H5() { str << "Levels"; }
+ TAG(TH5) { str << "Levels"; }
H6_CLASS ("text-info") {str << GetCompStateStr(HullCompReadsInFlight, HullCompWritesInFlight);}
}
DIV_CLASS("col-md-11") {CurSlice->OutputHtml(str);}
diff --git a/ydb/core/blobstorage/vdisk/hulldb/generic/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/generic/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/generic/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/generic/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/hulldb/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hulldb/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/hulldb/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hulldb/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/hullop/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hullop/CMakeLists.txt
index a3d531b843..80f38904dd 100644
--- a/ydb/core/blobstorage/vdisk/hullop/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hullop/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-hullop)
target_link_libraries(blobstorage-vdisk-hullop PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/hullop/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/hullop/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/hullop/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/hullop/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/ingress/CMakeLists.txt b/ydb/core/blobstorage/vdisk/ingress/CMakeLists.txt
index 394643dea2..68a212273c 100644
--- a/ydb/core/blobstorage/vdisk/ingress/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/ingress/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-ingress)
target_link_libraries(blobstorage-vdisk-ingress PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/ingress/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/ingress/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/ingress/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/ingress/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp b/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp
index b9bdafdbb1..76d6284675 100644
--- a/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp
+++ b/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp
@@ -563,28 +563,29 @@ namespace NKikimr {
}
}
- void Bootstrap(const TActorContext &ctx) {
- LOG_NOTICE(ctx, BS_LOCALRECOVERY,
- VDISKP(LocRecCtx->VCtx->VDiskLogPrefix, "LocalRecovery START"));
-
-
+ void SendYardInit(const TActorContext &ctx, TDuration yardInitDelay) {
auto ev = std::make_unique<NPDisk::TEvYardInit>(Config->BaseInfo.InitOwnerRound, SelfVDiskId,
Config->BaseInfo.PDiskGuid, SkeletonId, SkeletonFrontId, Config->BaseInfo.VDiskSlotId);
- const TActorId nodeWardenId = MakeBlobStorageNodeWardenID(SelfId().NodeId());
auto handle = std::make_unique<IEventHandle>(Config->BaseInfo.PDiskActorID, SelfId(), ev.release(),
- IEventHandle::FlagForwardOnNondelivery, 0, &nodeWardenId);
- if (const TDuration delay = Config->BaseInfo.YardInitDelay; delay != TDuration::Zero()) {
- TActivationContext::Schedule(delay, handle.release());
+ IEventHandle::FlagTrackDelivery);
+ if (yardInitDelay != TDuration::Zero()) {
+ TActivationContext::Schedule(yardInitDelay, handle.release());
} else {
ctx.Send(handle.release());
}
- LOG_DEBUG(ctx, BS_LOGCUTTER,
+ LOG_DEBUG(ctx, BS_LOCALRECOVERY,
VDISKP(LocRecCtx->VCtx->VDiskLogPrefix,
- "Sending TEvYardInit: pdiskGuid# %" PRIu64 " skeletonid# %s selfid# %s",
+ "Sending TEvYardInit: pdiskGuid# %" PRIu64 " skeletonid# %s selfid# %s delay %lf sec",
ui64(Config->BaseInfo.PDiskGuid), SkeletonId.ToString().data(),
- ctx.SelfID.ToString().data()));
+ ctx.SelfID.ToString().data(), yardInitDelay.SecondsFloat()));
+ }
+ void Bootstrap(const TActorContext &ctx) {
+ LOG_NOTICE(ctx, BS_LOCALRECOVERY,
+ VDISKP(LocRecCtx->VCtx->VDiskLogPrefix, "LocalRecovery START"));
+
+ SendYardInit(ctx, Config->BaseInfo.YardInitDelay);
Become(&TThis::StateInitialize, ctx, VDiskCooldownTimeout, new TEvents::TEvWakeup);
VDiskMonGroup.VDiskLocalRecoveryState() = TDbMon::TDbLocalRecovery::YardInit;
}
@@ -609,6 +610,16 @@ namespace NKikimr {
AfterDatabaseLoaded(ctx);
}
+ void HandleUndelivered(TEvents::TEvUndelivered::TPtr&, const TActorContext& ctx) {
+ LOG_DEBUG(ctx, BS_LOCALRECOVERY,
+ VDISKP(LocRecCtx->VCtx->VDiskLogPrefix,
+ "Undelivered TEvYardInit: pdiskGuid# %" PRIu64 " skeletonid# %s selfid# %s",
+ ui64(Config->BaseInfo.PDiskGuid), SkeletonId.ToString().data(),
+ ctx.SelfID.ToString().data()));
+
+ SendYardInit(ctx, TDuration::Seconds(1));
+ }
+
void HandlePoison(const TActorContext &ctx) {
ActiveActors.KillAndClear(ctx);
Die(ctx);
@@ -624,6 +635,7 @@ namespace NKikimr {
STRICT_STFUNC(StateInitialize,
HFunc(NPDisk::TEvYardInitResult, Handle)
+ HFunc(TEvents::TEvUndelivered, HandleUndelivered)
CFunc(NActors::TEvents::TSystem::PoisonPill, HandlePoison)
HFunc(NMon::TEvHttpInfo, Handle)
CFunc(TEvents::TSystem::Wakeup, HandleWakeup);
diff --git a/ydb/core/blobstorage/vdisk/query/CMakeLists.txt b/ydb/core/blobstorage/vdisk/query/CMakeLists.txt
index 553e85e87a..a7ed9c8017 100644
--- a/ydb/core/blobstorage/vdisk/query/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/query/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-query)
target_link_libraries(blobstorage-vdisk-query PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/query/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/query/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/query/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/query/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/repl/CMakeLists.txt b/ydb/core/blobstorage/vdisk/repl/CMakeLists.txt
index 8bdb85efc7..9e7ee21dd8 100644
--- a/ydb/core/blobstorage/vdisk/repl/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/repl/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-repl)
target_link_libraries(blobstorage-vdisk-repl PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp b/ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp
index 30db44ff22..3cac7e6ff2 100644
--- a/ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp
@@ -11,7 +11,7 @@ std::shared_ptr<TReplCtx> CreateReplCtx(TVector<TVDiskID>& vdisks, const TIntrus
auto baseInfo = TVDiskConfig::TBaseInfo::SampleForTests();
baseInfo.VDiskIdShort = TVDiskIdShort(vdisks[0]);
auto vdiskCfg = MakeIntrusive<TVDiskConfig>(baseInfo);
- auto counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ auto counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto vctx = MakeIntrusive<TVDiskContext>(TActorId(), info->PickTopology(), counters, TVDiskID(0, 1, 0, 0, 0),
nullptr, NPDisk::DEVICE_TYPE_UNKNOWN);
auto hugeBlobCtx = std::make_shared<THugeBlobCtx>(512u << 10u, nullptr);
@@ -30,7 +30,7 @@ std::shared_ptr<TReplCtx> CreateReplCtx(TVector<TVDiskID>& vdisks, const TIntrus
}
TVDiskContextPtr CreateVDiskContext(const TBlobStorageGroupInfo& info) {
- return MakeIntrusive<TVDiskContext>(TActorId(), info.PickTopology(), new NMonitoring::TDynamicCounters(), TVDiskID(),
+ return MakeIntrusive<TVDiskContext>(TActorId(), info.PickTopology(), new ::NMonitoring::TDynamicCounters(), TVDiskID(),
nullptr, NPDisk::DEVICE_TYPE_UNKNOWN);
}
diff --git a/ydb/core/blobstorage/vdisk/repl/blobstorage_replrecoverymachine_ut.cpp b/ydb/core/blobstorage/vdisk/repl/blobstorage_replrecoverymachine_ut.cpp
index df26bf2c32..02e8a07789 100644
--- a/ydb/core/blobstorage/vdisk/repl/blobstorage_replrecoverymachine_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/repl/blobstorage_replrecoverymachine_ut.cpp
@@ -63,7 +63,7 @@ namespace NKikimr {
auto baseInfo = TVDiskConfig::TBaseInfo::SampleForTests();
baseInfo.VDiskIdShort = TVDiskIdShort(vdisks[0]);
auto vdiskCfg = MakeIntrusive<TVDiskConfig>(baseInfo);
- auto counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ auto counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto vctx = MakeIntrusive<TVDiskContext>(TActorId(), info->PickTopology(), counters, TVDiskID(0, 1, 0, 0, 0),
nullptr, NPDisk::DEVICE_TYPE_UNKNOWN);
auto hugeBlobCtx = std::make_shared<THugeBlobCtx>(512u << 10u, nullptr);
diff --git a/ydb/core/blobstorage/vdisk/repl/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/repl/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/repl/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/repl/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/scrub/blob_recovery.cpp b/ydb/core/blobstorage/vdisk/scrub/blob_recovery.cpp
index b611d3c9cb..c4650cffc9 100644
--- a/ydb/core/blobstorage/vdisk/scrub/blob_recovery.cpp
+++ b/ydb/core/blobstorage/vdisk/scrub/blob_recovery.cpp
@@ -14,7 +14,7 @@ namespace NKikimr {
}
IActor *CreateBlobRecoveryActor(TIntrusivePtr<TVDiskContext> vctx, TIntrusivePtr<TBlobStorageGroupInfo> info,
- NMonitoring::TDynamicCounterPtr counters) {
+ ::NMonitoring::TDynamicCounterPtr counters) {
return new TBlobRecoveryActor(std::move(vctx), std::move(info), std::move(counters));
}
diff --git a/ydb/core/blobstorage/vdisk/scrub/blob_recovery.h b/ydb/core/blobstorage/vdisk/scrub/blob_recovery.h
index 98c7fbab19..2a06f7df1a 100644
--- a/ydb/core/blobstorage/vdisk/scrub/blob_recovery.h
+++ b/ydb/core/blobstorage/vdisk/scrub/blob_recovery.h
@@ -94,6 +94,6 @@ namespace NKikimr {
};
IActor *CreateBlobRecoveryActor(TIntrusivePtr<TVDiskContext> vctx, TIntrusivePtr<TBlobStorageGroupInfo> info,
- NMonitoring::TDynamicCounterPtr counters);
+ ::NMonitoring::TDynamicCounterPtr counters);
} // NKikimr
diff --git a/ydb/core/blobstorage/vdisk/scrub/blob_recovery_impl.h b/ydb/core/blobstorage/vdisk/scrub/blob_recovery_impl.h
index cca66554af..0e9022168f 100644
--- a/ydb/core/blobstorage/vdisk/scrub/blob_recovery_impl.h
+++ b/ydb/core/blobstorage/vdisk/scrub/blob_recovery_impl.h
@@ -8,12 +8,12 @@ namespace NKikimr {
class TBlobRecoveryActor : public TActorBootstrapped<TBlobRecoveryActor> {
const TIntrusivePtr<TVDiskContext> VCtx;
TIntrusivePtr<TBlobStorageGroupInfo> Info;
- const NMonitoring::TDynamicCounterPtr Counters;
+ const ::NMonitoring::TDynamicCounterPtr Counters;
const TString LogPrefix;
public:
TBlobRecoveryActor(TIntrusivePtr<TVDiskContext> vctx, TIntrusivePtr<TBlobStorageGroupInfo> info,
- NMonitoring::TDynamicCounterPtr counters)
+ ::NMonitoring::TDynamicCounterPtr counters)
: VCtx(std::move(vctx))
, Info(std::move(info))
, Counters(counters)
diff --git a/ydb/core/blobstorage/vdisk/scrub/scrub_actor_impl.h b/ydb/core/blobstorage/vdisk/scrub/scrub_actor_impl.h
index 7af6d264f6..7f5e3ed298 100644
--- a/ydb/core/blobstorage/vdisk/scrub/scrub_actor_impl.h
+++ b/ydb/core/blobstorage/vdisk/scrub/scrub_actor_impl.h
@@ -23,16 +23,16 @@ namespace NKikimr {
std::optional<NKikimrVDiskData::TScrubState> State;
- NMonitoring::TDynamicCounterPtr Counters;
- NMonitoring::TDynamicCounters::TCounterPtr SstProcessed;
- NMonitoring::TDynamicCounters::TCounterPtr HugeBlobsRead;
- NMonitoring::TDynamicCounters::TCounterPtr HugeBlobBytesRead;
- NMonitoring::TDynamicCounters::TCounterPtr SmallBlobIntervalsRead;
- NMonitoring::TDynamicCounters::TCounterPtr SmallBlobIntervalBytesRead;
- NMonitoring::TDynamicCounters::TCounterPtr SmallBlobsRead;
- NMonitoring::TDynamicCounters::TCounterPtr SmallBlobBytesRead;
- NMonitoring::TDynamicCounters::TCounterPtr UnreadableBlobsFound;
- NMonitoring::TDynamicCounters::TCounterPtr BlobsFixed;
+ ::NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SstProcessed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr HugeBlobsRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr HugeBlobBytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SmallBlobIntervalsRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SmallBlobIntervalBytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SmallBlobsRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SmallBlobBytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr UnreadableBlobsFound;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BlobsFixed;
TRopeArena Arena;
diff --git a/ydb/core/blobstorage/vdisk/skeleton/CMakeLists.txt b/ydb/core/blobstorage/vdisk/skeleton/CMakeLists.txt
index 36a6887bb1..0bbe8d05b8 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/skeleton/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-skeleton)
target_link_libraries(blobstorage-vdisk-skeleton PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_monactors.cpp b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_monactors.cpp
index 44b3c58c9c..7ff6843d4a 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_monactors.cpp
+++ b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_monactors.cpp
@@ -256,10 +256,12 @@ namespace NKikimr {
str << "<input type=\"hidden\" name=\"type\" value=\"query\">";
str << "<input type=\"hidden\" name=\"dbname\" value=\"" << dbnameParam << "\">";
+ str << "<p>Input key format: " << placeholder << " in decimal</p>";
+
DIV_CLASS("control-group") {
LABEL_CLASS_FOR("control-label", "inputFrom") {str << "From (" << itemName << ")";}
DIV_CLASS("controls") {
- str << "<input type=\"text\" id=\"inputFrom\" "
+ str << "<input size=64 type=\"text\" id=\"inputFrom\" "
"placeholder=\"" << placeholder << "\" name=\"from\">";
}
}
@@ -267,7 +269,7 @@ namespace NKikimr {
DIV_CLASS("control-group") {
LABEL_CLASS_FOR("control-label", "inputTo") {str << "To (" << itemName << ")";}
DIV_CLASS("controls") {
- str << "<input type=\"text\" id=\"inputTo\" "
+ str << "<input size=64 type=\"text\" id=\"inputTo\" "
"placeholder=\"" << placeholder << "\" name=\"to\">";
}
}
@@ -283,7 +285,7 @@ namespace NKikimr {
str << "<input type=\"checkbox\" name=\"Internals\" checked>Show Internals</input>";
}
str << "<button type=\"submit\" name=\"submit\" class=\"btn btn-default\">Submit</button>";
- str << "<strong>or</strong>";
+ str << "<strong> or </strong>";
str << "<button type=\"submit\" name=\"all\" class=\"btn btn-default\">Browse DB</button>";
}
}
@@ -313,8 +315,7 @@ namespace NKikimr {
friend class TActorBootstrapped<TSkeletonFrontMonLogoBlobsQueryActor>;
void OutputForm(const TActorContext &ctx, const TString &dbnameParam) {
- TString html = BuildForm(dbnameParam, "LogoBlob",
- "[tablet:gen:step:channel:cookie:hashtype:part:hash]", true);
+ TString html = BuildForm(dbnameParam, "LogoBlob", "[tablet:gen:step:channel:cookie:blobsize:partid]", true);
Finish(ctx, new NMon::TEvHttpInfoRes(html));
}
@@ -377,15 +378,15 @@ namespace NKikimr {
}
req = TEvBlobStorage::TEvVGet::CreateRangeIndexQuery(SelfVDiskId, TInstant::Max(),
- NKikimrBlobStorage::EGetHandleClass::AsyncRead, flags, {}, From, To, 15);
+ NKikimrBlobStorage::EGetHandleClass::AsyncRead, flags, {}, From, To, 1000);
}
} else if (allButton) {
// browse database
IsRangeQuery = true;
- From = TLogoBlobID(0, 4294967295, 4294967295, 0, 0, 0, TLogoBlobID::MaxPartId);
- To = TLogoBlobID(0, 0, 0, 0, 0, 0, 1);
+ From = Min<TLogoBlobID>();
+ To = Max<TLogoBlobID>();
req = TEvBlobStorage::TEvVGet::CreateRangeIndexQuery(SelfVDiskId, TInstant::Max(),
- NKikimrBlobStorage::EGetHandleClass::AsyncRead, flags, {}, From, To, 15);
+ NKikimrBlobStorage::EGetHandleClass::AsyncRead, flags, {}, From, To, 1000);
} else
Y_FAIL("Unknown button");
@@ -529,7 +530,7 @@ namespace NKikimr {
TString formParam = cgi.Get("form");
TString fromParam = cgi.Get("from");
TString toParam = cgi.Get("to");
- bool showInternals = cgi.Has("Internals");
+ ShowInternals = cgi.Has("Internals");
bool submitButton = cgi.Has("submit");
bool allButton = cgi.Has("all");
@@ -538,7 +539,7 @@ namespace NKikimr {
return;
}
- ui32 maxResults = 15;
+ ui32 maxResults = 1000;
std::unique_ptr<TEvBlobStorage::TEvVGetBarrier> req;
if (submitButton) {
// check that 'from' field is not empty
@@ -558,7 +559,7 @@ namespace NKikimr {
if (toParam.empty()) {
// exact query
IsRangeQuery = false;
- req = std::make_unique<TEvBlobStorage::TEvVGetBarrier>(SelfVDiskId, From, From, &maxResults, showInternals);
+ req = std::make_unique<TEvBlobStorage::TEvVGetBarrier>(SelfVDiskId, From, From, &maxResults, ShowInternals);
ctx.Send(SkeletonFrontID, req.release());
} else {
// range query
@@ -571,7 +572,7 @@ namespace NKikimr {
return;
}
- req = std::make_unique<TEvBlobStorage::TEvVGetBarrier>(SelfVDiskId, From, To, &maxResults, showInternals);
+ req = std::make_unique<TEvBlobStorage::TEvVGetBarrier>(SelfVDiskId, From, To, &maxResults, ShowInternals);
ctx.Send(SkeletonFrontID, req.release());
}
} else if (allButton) {
@@ -579,7 +580,7 @@ namespace NKikimr {
IsRangeQuery = true;
From = TKeyBarrier::First();
To = TKeyBarrier::Inf();
- req = std::make_unique<TEvBlobStorage::TEvVGetBarrier>(SelfVDiskId, From, To, &maxResults, showInternals);
+ req = std::make_unique<TEvBlobStorage::TEvVGetBarrier>(SelfVDiskId, From, To, &maxResults, ShowInternals);
ctx.Send(SkeletonFrontID, req.release());
}
@@ -595,10 +596,8 @@ namespace NKikimr {
TIngressCachePtr ingressCache = TIngressCache::Create(Top, SelfVDiskId);
HTML(str) {
DIV_CLASS("well well-small") {
- str << "TabletId: " << k.GetTabletId() << "<br>";
- str << "Channel: " << k.GetChannel() << "<br>";
- str << "RecordGeneration: " << k.GetRecordGeneration() << "<br>";
- str << "PerGenerationCounter" << k.GetPerGenerationCounter() << "<br>";
+ TKeyBarrier key(k);
+ str << "Key: " << key.ToString() << "<br>";
str << "CollectGen: " << v.GetCollectGen() << "<br>";
str << "CollectStep: " << v.GetCollectStep() << "<br>";
if (v.HasIngress()) {
@@ -624,6 +623,10 @@ namespace NKikimr {
HTML(str) {
DIV_CLASS("row") {
STRONG() {
+ str << "From: " << From.ToString() << "<br>";
+ if (IsRangeQuery)
+ str << "To: " << To.ToString() << "<br>";
+ str << "ShowInternals: " << (ShowInternals ? "true" : "false") << "<br>";
str << "Status: " << NKikimrProto::EReplyStatus_Name(rec.GetStatus()) << "<br>";
str << "VDisk: " << vdisk.ToString() << "<br>";
str << "Result size: " << size << "<br>";
diff --git a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeleton.cpp b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeleton.cpp
index e89088f086..d01cdc03c2 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeleton.cpp
+++ b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeleton.cpp
@@ -175,7 +175,7 @@ namespace NKikimr {
void UpdateVPatchCtx() {
if (!VPatchCtx) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> patchGroup = VCtx->VDiskCounters->GetSubgroup("subsystem", "patch");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> patchGroup = VCtx->VDiskCounters->GetSubgroup("subsystem", "patch");
VPatchCtx = MakeIntrusive<TVPatchCtx>();
NBackpressure::TQueueClientId patchQueueClientId(NBackpressure::EQueueClientType::VPatch,
VCtx->Top->GetOrderNumber(VCtx->ShortSelfVDisk));
diff --git a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonerr.h b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonerr.h
index 7e899b3236..bd98ea87bd 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonerr.h
+++ b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonerr.h
@@ -17,61 +17,61 @@ namespace NKikimr {
// ResultingCounterForEvent -- returns dynamic counter *ResMsgs for an event
////////////////////////////////////////////////////////////////////////////////////////////
template <class TEvent>
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &,
TEvent &) {
- static NMonitoring::TDynamicCounters::TCounterPtr dummy;
+ static ::NMonitoring::TDynamicCounters::TCounterPtr dummy;
return dummy;
}
template <>
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVPut::TPtr &) {
return vctx->IFaceMonGroup->PutResMsgsPtr();
}
template <>
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVMultiPut::TPtr &) {
return vctx->IFaceMonGroup->MultiPutResMsgsPtr();
}
template <>
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVGet::TPtr &) {
return vctx->IFaceMonGroup->GetResMsgsPtr();
}
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVBlock::TPtr &) {
return vctx->IFaceMonGroup->BlockResMsgsPtr();
}
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVCollectGarbage::TPtr &) {
return vctx->IFaceMonGroup->GCResMsgsPtr();
}
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVGetBarrier::TPtr &) {
return vctx->IFaceMonGroup->GetBarrierResMsgsPtr();
}
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVMovedPatch::TPtr &) {
return vctx->IFaceMonGroup->MovedPatchMsgsPtr();
}
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVPatchFoundParts::TPtr &) {
return vctx->IFaceMonGroup->PatchFoundPartsMsgsPtr();
}
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVPatchXorDiffResult::TPtr &) {
return vctx->IFaceMonGroup->PatchXorDiffResMsgsPtr();
}
- inline const NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
+ inline const ::NMonitoring::TDynamicCounters::TCounterPtr &ResultingCounterForEvent(const TVDiskContextPtr &vctx,
TEvBlobStorage::TEvVPatchResult::TPtr &) {
return vctx->IFaceMonGroup->PatchResMsgsPtr();
}
@@ -107,7 +107,7 @@ namespace NKikimr {
cookie = record.GetCookie();
}
const auto oosStatus = vctx->GetOutOfSpaceState().GetGlobalStatusFlags();
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
return std::make_unique<TEvBlobStorage::TEvVMovedPatchResult>(status, originalId, patchedId, vdiskID, cookie,
oosStatus, now, ev->Get()->GetCachedByteSize(), &record, skeletonFrontIDPtr, counterPtr, nullptr,
@@ -125,7 +125,7 @@ namespace NKikimr {
if (record.HasCookie()) {
cookie = record.GetCookie();
}
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
return std::make_unique<TEvBlobStorage::TEvVPatchFoundParts>(status, originalId, patchedId, vdiskID, cookie, now,
errorReason, &record, skeletonFrontIDPtr, counterPtr, nullptr, std::move(ev->TraceId), vdiskIncarnationGuid);
@@ -143,7 +143,7 @@ namespace NKikimr {
if (record.HasCookie()) {
cookie = record.GetCookie();
}
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
auto res = std::make_unique<TEvBlobStorage::TEvVPatchResult>(status, originalId, patchedId, vdiskID, cookie,
now, &record, skeletonFrontIDPtr, counterPtr, nullptr, std::move(ev->TraceId), vdiskIncarnationGuid);
@@ -158,7 +158,7 @@ namespace NKikimr {
Y_UNUSED(errorReason, vdiskID, vdiskIncarnationGuid);
auto &record = ev->Get()->Record;
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
return std::make_unique<TEvBlobStorage::TEvVPatchXorDiffResult>(status, now, &record, skeletonFrontIDPtr,
counterPtr, nullptr, std::move(ev->TraceId));
}
@@ -176,7 +176,7 @@ namespace NKikimr {
const auto oosStatus = vctx->GetOutOfSpaceState().GetGlobalStatusFlags();
const auto handleClass = record.GetHandleClass();
const NVDiskMon::TLtcHistoPtr &histoPtr = vctx->Histograms.GetHistogram(handleClass);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
return std::make_unique<TEvBlobStorage::TEvVPutResult>(status, id, vdiskID, cookie, oosStatus, now,
ev->Get()->GetCachedByteSize(), &record, skeletonFrontIDPtr, counterPtr, histoPtr,
@@ -189,7 +189,7 @@ namespace NKikimr {
TEvBlobStorage::TEvVBlock::TPtr &ev, const TInstant &now, const TActorIDPtr &skeletonFrontIDPtr,
const TVDiskID &vdiskID, ui64 vdiskIncarnationGuid)
{
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
return std::make_unique<TEvBlobStorage::TEvVBlockResult>(status, actual, vdiskID, now,
ev->Get()->GetCachedByteSize(), &ev->Get()->Record, skeletonFrontIDPtr, counterPtr,
nullptr, std::move(ev->TraceId), vdiskIncarnationGuid);
@@ -204,7 +204,7 @@ namespace NKikimr {
const auto tabletId = record.GetTabletId();
const auto gen = record.GetRecordGeneration();
const auto channel = record.GetChannel();
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
return std::make_unique<TEvBlobStorage::TEvVCollectGarbageResult>(status, tabletId, gen, channel, vdiskID, now,
ev->Get()->GetCachedByteSize(), &record, skeletonFrontIDPtr, counterPtr, nullptr,
std::move(ev->TraceId), vdiskIncarnationGuid);
@@ -269,7 +269,7 @@ namespace NKikimr {
const ui64 bufferSizeBytes = ev->Get()->GetBufferBytes();
const auto handleClass = record.GetHandleClass();
const NVDiskMon::TLtcHistoPtr &histoPtr = vctx->Histograms.GetHistogram(handleClass);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
auto result = std::make_unique<TEvBlobStorage::TEvVMultiPutResult>(status, vdiskID, cookie, now,
ev->Get()->GetCachedByteSize(), &record, skeletonFrontIDPtr, counterPtr, histoPtr, bufferSizeBytes,
std::move(ev->TraceId), vdiskIncarnationGuid, errorReason);
@@ -314,7 +314,7 @@ namespace NKikimr {
cookie = record.GetCookie();
const auto handleClass = record.GetHandleClass();
const NVDiskMon::TLtcHistoPtr &histoPtr = vctx->Histograms.GetHistogram(handleClass);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
auto result = std::make_unique<TEvBlobStorage::TEvVGetResult>(status, vdiskID, now,
ev->Get()->GetCachedByteSize(), &record, skeletonFrontIDPtr, counterPtr, histoPtr,
std::move(ev->TraceId), cookie, ev->GetChannel(), vdiskIncarnationGuid);
@@ -357,7 +357,7 @@ namespace NKikimr {
const TIntrusivePtr<TBlobStorageGroupInfo>& groupInfo)
{
Y_UNUSED(vdiskIncarnationGuid);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
auto result = std::make_unique<TEvBlobStorage::TEvVGetBlockResult>(status, ev->Get()->Record.GetTabletId(),
vdiskID, now, ev->Get()->GetCachedByteSize(), &ev->Get()->Record, skeletonFrontIDPtr, counterPtr,
nullptr, std::move(ev->TraceId));
@@ -384,7 +384,7 @@ namespace NKikimr {
const TIntrusivePtr<TBlobStorageGroupInfo>& groupInfo)
{
Y_UNUSED(vdiskIncarnationGuid);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
auto result = std::make_unique<TEvBlobStorage::TEvVGetBarrierResult>(status,vdiskID, now,
ev->Get()->GetCachedByteSize(), &ev->Get()->Record, skeletonFrontIDPtr, counterPtr, nullptr,
std::move(ev->TraceId));
@@ -399,7 +399,7 @@ namespace NKikimr {
const TIntrusivePtr<TBlobStorageGroupInfo>& /*groupInfo*/)
{
Y_UNUSED(vdiskIncarnationGuid);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
return std::make_unique<TEvBlobStorage::TEvVDbStatResult>(status, vdiskID, now, counterPtr, nullptr,
std::move(ev->TraceId));
}
@@ -411,7 +411,7 @@ namespace NKikimr {
const TIntrusivePtr<TBlobStorageGroupInfo>& /*groupInfo*/)
{
Y_UNUSED(vdiskIncarnationGuid);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
auto flags = vctx->GetOutOfSpaceState().GetLocalStatusFlags();
return std::make_unique<TEvBlobStorage::TEvVSyncResult>(status, vdiskID, flags, now, counterPtr, nullptr,
std::move(ev->TraceId), ev->GetChannel());
@@ -424,7 +424,7 @@ namespace NKikimr {
const TIntrusivePtr<TBlobStorageGroupInfo>& /*groupInfo*/)
{
Y_UNUSED(vdiskIncarnationGuid);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
ui64 cookie = ev->Get()->Record.GetCookie();
return std::make_unique<TEvBlobStorage::TEvVSyncFullResult>(status, vdiskID, cookie, now, counterPtr, nullptr,
std::move(ev->TraceId), ev->GetChannel());
@@ -437,7 +437,7 @@ namespace NKikimr {
const TIntrusivePtr<TBlobStorageGroupInfo>& /*groupInfo*/)
{
Y_UNUSED(vdiskIncarnationGuid);
- const NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &counterPtr = ResultingCounterForEvent(vctx, ev);
return std::make_unique<TEvBlobStorage::TEvVSyncGuidResult>(status, vdiskID, now, counterPtr, nullptr,
std::move(ev->TraceId), ev->GetChannel());
}
diff --git a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp
index dfaff28696..d555b6f917 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp
+++ b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp
@@ -150,12 +150,12 @@ namespace NKikimr {
const TString Name;
private:
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontInFlightCount;
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontInFlightCost;
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontInFlightBytes;
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontDelayedCount;
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontDelayedBytes;
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontCostProcessed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontInFlightCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontInFlightCost;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontInFlightBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontDelayedCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontDelayedBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontCostProcessed;
bool CanSendToSkeleton(ui64 cost) const {
bool inFlightCond = InFlightCount < MaxInFlightCount;
@@ -170,7 +170,7 @@ namespace NKikimr {
const TString &name,
ui64 maxInFlightCount,
ui64 maxInFlightCost,
- TIntrusivePtr<NMonitoring::TDynamicCounters> skeletonFrontGroup)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> skeletonFrontGroup)
: Queue(new TQueueType())
, InFlightCount(0)
, InFlightCost(0)
@@ -399,9 +399,9 @@ namespace NKikimr {
std::unique_ptr<TMyQueueBackpressure> QueueBackpressure;
NKikimrBlobStorage::EVDiskQueueId ExtQueueId;
TString Name;
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontDeadline;
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontOverflow;
- NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontIncorrectMsgId;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontDeadline;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontOverflow;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkeletonFrontIncorrectMsgId;
void NotifyOtherClients(const TActorContext &ctx, const TFeedback &feedback) {
@@ -422,7 +422,7 @@ namespace NKikimr {
public:
TExtQueueClass(NKikimrBlobStorage::EVDiskQueueId extQueueId, const TString &name, ui64 totalCost,
- bool checkMsgId, TIntrusivePtr<NMonitoring::TDynamicCounters> skeletonFrontGroup,
+ bool checkMsgId, TIntrusivePtr<::NMonitoring::TDynamicCounters> skeletonFrontGroup,
const TIntrusivePtr<TVDiskConfig>& config)
: QueueBackpressure()
, ExtQueueId(extQueueId)
@@ -588,9 +588,9 @@ namespace NKikimr {
std::shared_ptr<TBlobStorageGroupInfo::TTopology> Top;
TVDiskID SelfVDiskId;
TActorId SkeletonId;
- TIntrusivePtr<NMonitoring::TDynamicCounters> VDiskCounters;
- TIntrusivePtr<NMonitoring::TDynamicCounters> SkeletonFrontGroup;
- NMonitoring::TDynamicCounters::TCounterPtr AccessDeniedMessages;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> VDiskCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SkeletonFrontGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AccessDeniedMessages;
std::unique_ptr<TIntQueueClass> IntQueueAsyncGets;
std::unique_ptr<TIntQueueClass> IntQueueFastGets;
std::unique_ptr<TIntQueueClass> IntQueueDiscover;
@@ -1801,10 +1801,10 @@ namespace NKikimr {
return NKikimrServices::TActivity::BS_SKELETON_FRONT;
}
- static TIntrusivePtr<NMonitoring::TDynamicCounters> CreateVDiskCounters(
+ static TIntrusivePtr<::NMonitoring::TDynamicCounters> CreateVDiskCounters(
TIntrusivePtr<TVDiskConfig> cfg,
TIntrusivePtr<TBlobStorageGroupInfo> info,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
// create 'vdisks' service counters
auto vdiskCounters = GetServiceCounters(counters, "vdisks");
@@ -1832,7 +1832,7 @@ namespace NKikimr {
}
TSkeletonFront(TIntrusivePtr<TVDiskConfig> cfg, TIntrusivePtr<TBlobStorageGroupInfo> info,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters)
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters)
: TActorBootstrapped<TSkeletonFront>()
, VCtx()
, Config(cfg)
@@ -1901,7 +1901,7 @@ namespace NKikimr {
////////////////////////////////////////////////////////////////////////////
IActor* CreateVDiskSkeletonFront(const TIntrusivePtr<TVDiskConfig> &cfg,
const TIntrusivePtr<TBlobStorageGroupInfo> &info,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters) {
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters) {
return new TSkeletonFront(cfg, info, counters);
}
diff --git a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.h b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.h
index 9044230ab1..b5ef914ef0 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.h
+++ b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.h
@@ -39,6 +39,6 @@ namespace NKikimr {
struct TVDiskConfig;
IActor* CreateVDiskSkeletonFront(const TIntrusivePtr<TVDiskConfig> &cfg,
const TIntrusivePtr<TBlobStorageGroupInfo> &info,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters);
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters);
} // NKikimr
diff --git a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.cpp b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.cpp
index 78870536aa..34bc4abbc8 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.cpp
+++ b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.cpp
@@ -23,7 +23,7 @@ namespace NKikimr {
std::unique_ptr<TEvBlobStorage::TEvPatch::TDiff[]> Diffs;
TActorIDPtr SkeletonFrontIDPtr;
- NMonitoring::TDynamicCounters::TCounterPtr MovedPatchResMsgsPtr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MovedPatchResMsgsPtr;
TEvBlobStorage::TEvVMovedPatch::TPtr Event;
TActorId LeaderId;
@@ -39,7 +39,7 @@ namespace NKikimr {
public:
TVMovedPatchActor(TActorId leaderId, TOutOfSpaceStatus oosStatus, TEvBlobStorage::TEvVMovedPatch::TPtr &ev,
- TActorIDPtr skeletonFrontIDPtr, NMonitoring::TDynamicCounters::TCounterPtr movedPatchResMsgsPtr,
+ TActorIDPtr skeletonFrontIDPtr, ::NMonitoring::TDynamicCounters::TCounterPtr movedPatchResMsgsPtr,
ui64 incarnationGuid, const TVDiskContextPtr &vCtx)
: TActorBootstrapped()
, SkeletonFrontIDPtr(skeletonFrontIDPtr)
@@ -198,7 +198,7 @@ namespace NKikimr {
IActor* CreateSkeletonVMovedPatchActor(TActorId leaderId, TOutOfSpaceStatus oosStatus,
TEvBlobStorage::TEvVMovedPatch::TPtr &ev, TActorIDPtr skeletonFrontIDPtr,
- NMonitoring::TDynamicCounters::TCounterPtr counterPtr, ui64 incarnationGuid,
+ ::NMonitoring::TDynamicCounters::TCounterPtr counterPtr, ui64 incarnationGuid,
const TVDiskContextPtr &vCtx)
{
return new NPrivate::TVMovedPatchActor(leaderId, oosStatus, ev, skeletonFrontIDPtr,
diff --git a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.h b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.h
index 91f8109385..01e185f8dd 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.h
+++ b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmovedpatch_actor.h
@@ -8,7 +8,7 @@ namespace NKikimr {
IActor* CreateSkeletonVMovedPatchActor(TActorId leaderId, TOutOfSpaceStatus oosStatus,
TEvBlobStorage::TEvVMovedPatch::TPtr &ev, TActorIDPtr skeletonFrontIDPtr,
- NMonitoring::TDynamicCounters::TCounterPtr multiPutResMsgsPtr,
+ ::NMonitoring::TDynamicCounters::TCounterPtr multiPutResMsgsPtr,
ui64 incarnationGuid, const TVDiskContextPtr &vCtx);
} // NKikimr
diff --git a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.cpp b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.cpp
index bbea6637af..581103f602 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.cpp
+++ b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.cpp
@@ -35,7 +35,7 @@ namespace NKikimr {
TBatchedVec<TItem> Items;
ui64 ReceivedResults;
TActorIDPtr SkeletonFrontIDPtr;
- NMonitoring::TDynamicCounters::TCounterPtr MultiPutResMsgsPtr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MultiPutResMsgsPtr;
TEvBlobStorage::TEvVMultiPut::TPtr Event;
TActorId LeaderId;
@@ -46,7 +46,7 @@ namespace NKikimr {
public:
TBufferVMultiPutActor(TActorId leaderId, const TBatchedVec<NKikimrProto::EReplyStatus> &statuses,
TOutOfSpaceStatus oosStatus, TEvBlobStorage::TEvVMultiPut::TPtr &ev,
- TActorIDPtr skeletonFrontIDPtr, NMonitoring::TDynamicCounters::TCounterPtr multiPutResMsgsPtr,
+ TActorIDPtr skeletonFrontIDPtr, ::NMonitoring::TDynamicCounters::TCounterPtr multiPutResMsgsPtr,
ui64 incarnationGuid)
: TActorBootstrapped()
, Items(ev->Get()->Record.ItemsSize())
@@ -174,7 +174,7 @@ namespace NKikimr {
IActor* CreateSkeletonVMultiPutActor(TActorId leaderId, const TBatchedVec<NKikimrProto::EReplyStatus> &statuses,
TOutOfSpaceStatus oosStatus, TEvBlobStorage::TEvVMultiPut::TPtr &ev,
- TActorIDPtr skeletonFrontIDPtr, NMonitoring::TDynamicCounters::TCounterPtr counterPtr,
+ TActorIDPtr skeletonFrontIDPtr, ::NMonitoring::TDynamicCounters::TCounterPtr counterPtr,
ui64 incarnationGuid) {
return new NPrivate::TBufferVMultiPutActor(leaderId, statuses, oosStatus, ev,
skeletonFrontIDPtr, counterPtr, incarnationGuid);
diff --git a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.h b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.h
index 1eebe00456..18d01db17e 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.h
+++ b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vmultiput_actor.h
@@ -25,7 +25,7 @@ struct TEvVMultiPutItemResult : TEventLocal<TEvVMultiPutItemResult, TEvBlobStora
IActor* CreateSkeletonVMultiPutActor(TActorId leaderId, const TBatchedVec<NKikimrProto::EReplyStatus> &statuses,
TOutOfSpaceStatus oosStatus, TEvBlobStorage::TEvVMultiPut::TPtr &ev,
- TActorIDPtr skeletonFrontIDPtr, NMonitoring::TDynamicCounters::TCounterPtr multiPutResMsgsPtr,
+ TActorIDPtr skeletonFrontIDPtr, ::NMonitoring::TDynamicCounters::TCounterPtr multiPutResMsgsPtr,
ui64 incarnationGuid);
} // NKikimr
diff --git a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.cpp b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.cpp
index 0e1f8eb796..4fd96a584e 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.cpp
+++ b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.cpp
@@ -90,8 +90,8 @@ namespace NKikimr::NPrivate {
TActorId Sender;
ui64 Cookie;
TActorIDPtr SkeletonFrontIDPtr;
- NMonitoring::TDynamicCounters::TCounterPtr VPatchFoundPartsMsgsPtr;
- NMonitoring::TDynamicCounters::TCounterPtr VPatchResMsgsPtr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VPatchFoundPartsMsgsPtr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr VPatchResMsgsPtr;
const TIntrusivePtr<TVPatchCtx> VPatchCtx;
TString VDiskLogPrefix;
@@ -119,8 +119,8 @@ namespace NKikimr::NPrivate {
public:
TSkeletonVPatchActor(TActorId leaderId, const TBlobStorageGroupType &gType,
TEvBlobStorage::TEvVPatchStart::TPtr &ev, TInstant now, TActorIDPtr skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &vPatchFoundPartsMsgsPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &vPatchResMsgsPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &vPatchFoundPartsMsgsPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &vPatchResMsgsPtr,
const TIntrusivePtr<TVPatchCtx> &vPatchCtx, const TString &vDiskLogPrefix, ui64 incarnationGuid)
: TActorBootstrapped()
, Sender(ev->Sender)
@@ -672,8 +672,8 @@ namespace NKikimr {
IActor* CreateSkeletonVPatchActor(TActorId leaderId, const TBlobStorageGroupType &gType,
TEvBlobStorage::TEvVPatchStart::TPtr &ev, TInstant now, TActorIDPtr skeletonFrontIDPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &vPatchFoundPartsMsgsPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &vPatchResMsgsPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &vPatchFoundPartsMsgsPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &vPatchResMsgsPtr,
const TIntrusivePtr<TVPatchCtx> &vPatchCtx, const TString &vDiskLogPrefix, ui64 incarnationGuid)
{
return new NPrivate::TSkeletonVPatchActor(leaderId, gType, ev, now, skeletonFrontIDPtr,
diff --git a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.h b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.h
index 8c2c0d658c..c56e846a47 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.h
+++ b/ydb/core/blobstorage/vdisk/skeleton/skeleton_vpatch_actor.h
@@ -32,8 +32,8 @@ struct TVPatchCtx : public TThrRefBase, TNonCopyable {
};
IActor* CreateSkeletonVPatchActor(TActorId leaderId, const TBlobStorageGroupType &gType, TEvBlobStorage::TEvVPatchStart::TPtr &ev,
- TInstant now, TActorIDPtr skeletonFrontIDPtr, const NMonitoring::TDynamicCounters::TCounterPtr &vPatchFoundPartsMsgsPtr,
- const NMonitoring::TDynamicCounters::TCounterPtr &vPatchResMsgsPtr, const TIntrusivePtr<TVPatchCtx> &vPatchCtx,
+ TInstant now, TActorIDPtr skeletonFrontIDPtr, const ::NMonitoring::TDynamicCounters::TCounterPtr &vPatchFoundPartsMsgsPtr,
+ const ::NMonitoring::TDynamicCounters::TCounterPtr &vPatchResMsgsPtr, const TIntrusivePtr<TVPatchCtx> &vPatchCtx,
const TString &vDiskLogPrefix, ui64 incarnationGuid);
} // NKikimr
diff --git a/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/skeleton/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/syncer/CMakeLists.txt b/ydb/core/blobstorage/vdisk/syncer/CMakeLists.txt
index 0f89ef5de9..df93f40cc0 100644
--- a/ydb/core/blobstorage/vdisk/syncer/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/syncer/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-syncer)
target_link_libraries(blobstorage-vdisk-syncer PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_localwriter.h b/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_localwriter.h
index 701dec57bd..bf26350068 100644
--- a/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_localwriter.h
+++ b/ydb/core/blobstorage/vdisk/syncer/blobstorage_syncer_localwriter.h
@@ -56,7 +56,7 @@ namespace NKikimr {
NKikimrProto::EReplyStatus Status;
TEvLocalSyncDataResult(NKikimrProto::EReplyStatus status, const TInstant &now,
- NMonitoring::TDynamicCounters::TCounterPtr counterPtr,
+ ::NMonitoring::TDynamicCounters::TCounterPtr counterPtr,
NVDiskMon::TLtcHistoPtr histoPtr, NWilson::TTraceId traceId)
: TEvVResultBase(now, TInterconnectChannels::IC_BLOBSTORAGE_SMALL_MSG, counterPtr, histoPtr,
std::move(traceId))
diff --git a/ydb/core/blobstorage/vdisk/syncer/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/syncer/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/syncer/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/syncer/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/synclog/CMakeLists.txt b/ydb/core/blobstorage/vdisk/synclog/CMakeLists.txt
index b93288c222..df6409539f 100644
--- a/ydb/core/blobstorage/vdisk/synclog/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/synclog/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(blobstorage-vdisk-synclog)
target_link_libraries(blobstorage-vdisk-synclog PUBLIC
diff --git a/ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogdata_ut.cpp b/ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogdata_ut.cpp
index 5a5024382a..ef6b36cafa 100644
--- a/ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogdata_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogdata_ut.cpp
@@ -18,7 +18,7 @@ namespace NKikimr {
ui32 appendBlockSize = 4 << 10;
ui32 syncLogAdvisedIndexedBlockSize = 4 << 10;
- NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
+ ::NMonitoring::TDynamicCounters::TCounterPtr cntr(new NMonitoring::TCounterForPtr);
TMemoryConsumer memConsumer(cntr);
TSyncLogParams params(pDiskGuid, chunkSize, appendBlockSize, syncLogAdvisedIndexedBlockSize, memConsumer);
TEntryPointParser parser(std::move(params));
diff --git a/ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogkeeper_ut.cpp b/ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogkeeper_ut.cpp
index 266ca6bef3..089ca25d4d 100644
--- a/ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogkeeper_ut.cpp
+++ b/ydb/core/blobstorage/vdisk/synclog/blobstorage_synclogkeeper_ut.cpp
@@ -73,7 +73,7 @@ namespace NKikimr {
TIntrusivePtr<TVDiskContext> vctx = new TVDiskContext(
TActorId(),
groupInfo.PickTopology(),
- new NMonitoring::TDynamicCounters(),
+ new ::NMonitoring::TDynamicCounters(),
TVDiskID(),
nullptr,
NPDisk::DEVICE_TYPE_UNKNOWN);
diff --git a/ydb/core/blobstorage/vdisk/synclog/ut/CMakeLists.txt b/ydb/core/blobstorage/vdisk/synclog/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/blobstorage/vdisk/synclog/ut/CMakeLists.txt
+++ b/ydb/core/blobstorage/vdisk/synclog/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/blobstorage/vdisk/vdisk_actor.cpp b/ydb/core/blobstorage/vdisk/vdisk_actor.cpp
index f1cca2ed72..53ede8b5f6 100644
--- a/ydb/core/blobstorage/vdisk/vdisk_actor.cpp
+++ b/ydb/core/blobstorage/vdisk/vdisk_actor.cpp
@@ -6,7 +6,7 @@ namespace NKikimr {
IActor* CreateVDisk(const TIntrusivePtr<TVDiskConfig> &cfg,
const TIntrusivePtr<TBlobStorageGroupInfo> &info,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters) {
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters) {
// some global checks, it's better to VERIFY now than later
IngressGlobalCheck(info.Get());
diff --git a/ydb/core/blobstorage/vdisk/vdisk_actor.h b/ydb/core/blobstorage/vdisk/vdisk_actor.h
index de1212b9d5..19fe008b26 100644
--- a/ydb/core/blobstorage/vdisk/vdisk_actor.h
+++ b/ydb/core/blobstorage/vdisk/vdisk_actor.h
@@ -8,6 +8,6 @@ namespace NKikimr {
IActor* CreateVDisk(const TIntrusivePtr<TVDiskConfig> &cfg,
const TIntrusivePtr<TBlobStorageGroupInfo> &info,
- const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters);
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters);
} // NKikimr
diff --git a/ydb/core/blockstore/CMakeLists.txt b/ydb/core/blockstore/CMakeLists.txt
index d3afd2a0c5..1fc5b12385 100644
--- a/ydb/core/blockstore/CMakeLists.txt
+++ b/ydb/core/blockstore/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(core)
add_library(ydb-core-blockstore INTERFACE)
target_link_libraries(ydb-core-blockstore INTERFACE
diff --git a/ydb/core/client/CMakeLists.txt b/ydb/core/client/CMakeLists.txt
index 8770edd3d3..7f4ba7d11e 100644
--- a/ydb/core/client/CMakeLists.txt
+++ b/ydb/core/client/CMakeLists.txt
@@ -6,6 +6,12 @@
# original buildsystem will not be accepted.
+add_subdirectory(metadata)
+add_subdirectory(minikql_compile)
+add_subdirectory(minikql_result_lib)
+add_subdirectory(scheme_cache_lib)
+add_subdirectory(server)
+add_subdirectory(ut)
add_library(ydb-core-client INTERFACE)
target_link_libraries(ydb-core-client INTERFACE
diff --git a/ydb/core/client/flat_ut.cpp b/ydb/core/client/flat_ut.cpp
index e2e48c3ab0..4a4baba554 100644
--- a/ydb/core/client/flat_ut.cpp
+++ b/ydb/core/client/flat_ut.cpp
@@ -315,7 +315,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
((return (AsList
(SetResult 'x
(SelectRange '"/dc-1/test/perf/FlatDaoPerfTestClient"
- '('ExcFrom 'ExcTo '('ls (Utf8 '"") (Void)))
+ '('ExcFrom 'IncTo '('ls (Utf8 '"") (Void)))
'('ls 'kg 'localId 'createdSeconds 'mode1)
'('('BytesLimit (Uint64 '3000000)))
)
@@ -1528,7 +1528,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
NKikimrClient::TResponse response;
status = annoyingClient.FlatQueryRaw(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (Member (SelectRange '/dc-1/Dir/Table range '('Key 'Value) '()) 'List))
(let result (Filter data (lambda '(row)
(Coalesce (NotEqual (Member row 'Key) (Uint32 '1)) (Bool 'false))
@@ -1855,6 +1855,33 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
return strResult;
}
+ TString ReadFromTwoKeysTable(TFlatMsgBusClient& annoyingClient, TString table, ui32 fromKey = 0, ui32 fromKey2 = 0, bool follower = false) {
+ const char* readQuery =
+ "("
+ "(let range1 '('IncFrom '('Key (Uint32 '%d) (Void)) '('Key2 (Uint32 '%d) (Void)) ))"
+ "(let select '('Key 'Key2 'Value 'Large))"
+ "(let options '())"
+ "(let pgmReturn (AsList"
+ " (SetResult 'range1 (SelectRange '%s range1 select options (Uint32 '%d)))"
+ "))"
+ "(return pgmReturn)"
+ ")";
+
+ TFlatMsgBusClient::TFlatQueryOptions opts;
+ NKikimrClient::TResponse response;
+ annoyingClient.FlatQueryRaw(Sprintf(readQuery, fromKey, fromKey2, table.data(), follower ? TReadTarget::Follower().GetMode()
+ : TReadTarget::Head().GetMode()), opts, response);
+
+ UNIT_ASSERT_VALUES_EQUAL(response.GetStatus(), NMsgBusProxy::MSTATUS_OK);
+ UNIT_ASSERT(response.GetExecutionEngineResponseStatus() == ui32(NMiniKQL::IEngineFlat::EStatus::Complete));
+ NKikimrMiniKQL::TResult result;
+ result.Swap(response.MutableExecutionEngineEvaluatedResponse());
+
+ TString strResult;
+ ::google::protobuf::TextFormat::PrintToString(result.GetValue(), &strResult);
+ return strResult;
+ }
+
template <class TSetType>
void WaitForTabletsToBeDeletedInHive(TFlatMsgBusClient& annoyingClient, TTestActorRuntime* runtime,
const TSetType& tabletIds, const TDuration& timeout = TDuration::Seconds(20)) {
@@ -2332,12 +2359,12 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
WaitForTabletsToBeDeletedInHive(annoyingClient, cleverServer.GetRuntime(), datashards);
}
- void DoSplitMergeTable(TFlatMsgBusClient& annoyingClient, TString table, const TVector<ui64>& srcPartitions, const TVector<ui32>& splitPoints) {
+ void DoSplitMergeTable(TFlatMsgBusClient& annoyingClient, TString table, const TVector<ui64>& srcPartitions, const TVector<ui32>& splitPoints, bool twoKeys = false) {
TVector<ui64> partitionsBefore;
partitionsBefore = annoyingClient.GetTablePartitions(table);
UNIT_ASSERT(partitionsBefore.size() > 0);
- TString strResultBefore = ReadFromTable(annoyingClient, table);
+ TString strResultBefore = twoKeys ? ReadFromTwoKeysTable(annoyingClient, table) : ReadFromTable(annoyingClient, table);
TStringStream splitDescr;
for (ui32 src : srcPartitions) {
@@ -2355,10 +2382,14 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
// TODO: check paritions that were not supposed to change
//UNIT_ASSERT_VALUES_EQUAL(partitionsAfter.back(), partitionsBefore.back());
- TString strResultAfter = ReadFromTable(annoyingClient, table);
+ TString strResultAfter = twoKeys ? ReadFromTwoKeysTable(annoyingClient, table) : ReadFromTable(annoyingClient, table);
UNIT_ASSERT_NO_DIFF(strResultBefore, strResultAfter);
}
+ void SplitTwoKeysTable(TFlatMsgBusClient& annoyingClient, TString table, ui64 partitionIdx, const TVector<ui32>& splitPoints) {
+ DoSplitMergeTable(annoyingClient, table, {partitionIdx}, splitPoints, /* twoKeys */ true);
+ }
+
void SplitTable(TFlatMsgBusClient& annoyingClient, TString table, ui64 partitionIdx, const TVector<ui32>& splitPoints) {
DoSplitMergeTable(annoyingClient, table, {partitionIdx}, splitPoints);
}
@@ -2614,7 +2645,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
cleverServer.GetRuntime()->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_DEBUG);
cleverServer.GetRuntime()->SetLogPriority(NKikimrServices::TX_DATASHARD, NActors::NLog::PRI_DEBUG);
- SplitTable(annoyingClient, "/dc-1/Dir/TableOld", 0, {splitKey});
+ SplitTwoKeysTable(annoyingClient, "/dc-1/Dir/TableOld", 0, {splitKey});
}
Y_UNIT_TEST(SplitThenMerge) {
@@ -3267,7 +3298,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
client.FlatQuery(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (Member (SelectRange '"/dc-1/test/BlobTable" range '('Key 'Value) '()) 'List))
(let result (Filter data (lambda '(row)
(Coalesce (NotEqual (Member row 'Key) (Uint64 '1)) (Bool 'false))
@@ -3361,7 +3392,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
annoyingClient.FlatQuery(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (Member (SelectRange '"/dc-1/test/BlobTable" range '('Key 'Value) '()) 'List))
(let result (Take (Skip (Filter data (lambda '(row)
(Coalesce (NotEqual (Member row 'Key) (Uint64 '1)) (Bool 'false))
@@ -3408,7 +3439,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
annoyingClient.FlatQuery(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (Member (SelectRange '"/dc-1/test/BlobTable" range '('Key 'Value) '()) 'List))
(let result (OrderedMap data (lambda '(row)
(AddMember row 'Value2 (Member row 'Value))
@@ -3463,7 +3494,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
annoyingClient.FlatQuery(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (Member (SelectRange '"/dc-1/test/BlobTable" range '('Key 'Value) '()) 'List))
(let result (OrderedMap data (lambda '(row)
(AddMember row 'Value2 (Member row 'Value))
@@ -3616,7 +3647,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
auto res = annoyingClient.FlatQuery(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (SelectRange
'"/dc-1/test/TestTable"
range
@@ -3677,7 +3708,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
auto res = annoyingClient.FlatQuery(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (SelectRange
'"/dc-1/test/TestTable"
range
@@ -3738,7 +3769,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
auto res = annoyingClient.FlatQuery(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (SelectRange
'"/dc-1/test/TestTable"
range
@@ -3812,7 +3843,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
Y_UNIT_TEST(SelectRangeSkipNullKeys) {
auto res = CreateTableAndExecuteMkql(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key1 (Null) (Void)) '('Key2 (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key1 (Null) (Void)) '('Key2 (Null) (Void))))
(let data (SelectRange
'"/dc-1/test/TestTable"
range
@@ -4012,7 +4043,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
auto res = annoyingClient.FlatQuery(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (SelectRange
'"/dc-1/test/TestTable"
range
@@ -4080,7 +4111,7 @@ Y_UNIT_TEST_SUITE(TFlatTest) {
auto res = annoyingClient.FlatQuery(Sprintf(R"(
(
- (let range '('ExcFrom 'ExcTo '('Key (Null) (Void))))
+ (let range '('ExcFrom 'IncTo '('Key (Null) (Void))))
(let data (SelectRange
'"/dc-1/test/TestTable"
range
diff --git a/ydb/core/client/locks_ut.cpp b/ydb/core/client/locks_ut.cpp
index 47b7c3dfdd..93ff015e0f 100644
--- a/ydb/core/client/locks_ut.cpp
+++ b/ydb/core/client/locks_ut.cpp
@@ -245,7 +245,7 @@ struct TLocksTestOptions {
Range0Begin = "(Uint32 '0)";
Range0End = BreakPoint;
Range0OptKey = "";
- Range1Inc = "'ExcFrom 'ExcTo";
+ Range1Inc = "'ExcFrom 'IncTo";
Range1Begin = BreakPoint;
Range1End = "(Void)";
Range1OptKey = "";
@@ -264,7 +264,7 @@ struct TLocksTestOptions {
Range0Begin = "(Uint32 '0)";
Range0End = BreakPoint;
Range0OptKey = "'('keyX (Uint64 '0) (Void))";
- Range1Inc = "'ExcFrom 'ExcTo";
+ Range1Inc = "'ExcFrom 'IncTo";
Range1Begin = BreakPoint;
Range1End = "(Uint32 '4294967295)";
Range1OptKey = "'('keyX (Uint64 '0) (Void))";
@@ -283,7 +283,7 @@ struct TLocksTestOptions {
Range0Begin = "(String '\"0\")";
Range0End = BreakPoint;
Range0OptKey = "";
- Range1Inc = "'ExcFrom 'ExcTo";
+ Range1Inc = "'ExcFrom 'IncTo";
Range1Begin = BreakPoint;
Range1End = "(Void)";
Range1OptKey = "";
@@ -852,7 +852,7 @@ Y_UNIT_TEST(Range_BrokenLockMax) {
TLocksTestOptions opts;
opts.TestRange = true;
opts.BreakKey = "'('key (Uint32 '4294967295))";
- opts.Range1Inc = "'ExcFrom 'ExcTo";
+ opts.Range1Inc = "'ExcFrom 'IncTo";
opts.Break = true;
TestLock<TLocksV1>(opts);
TestLock<TLocksV2>(opts);
@@ -1021,7 +1021,7 @@ Y_UNIT_TEST(Range_EmptyKey) {
opts.SetOnly = true;
//opts.TestErase = true;
opts.TestRange = true;
- opts.Range0Inc = "'IncFrom 'ExcTo";
+ opts.Range0Inc = "'IncFrom 'IncTo";
opts.Range0Begin = "(String '\"\")";
opts.Range0End = "(Void)";
TestLock<TLocksV1>(opts);
diff --git a/ydb/core/client/metadata/CMakeLists.txt b/ydb/core/client/metadata/CMakeLists.txt
index 210215bda2..8a00ee2c48 100644
--- a/ydb/core/client/metadata/CMakeLists.txt
+++ b/ydb/core/client/metadata/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-client-metadata)
target_compile_options(core-client-metadata PRIVATE
diff --git a/ydb/core/client/metadata/ut/CMakeLists.txt b/ydb/core/client/metadata/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/client/metadata/ut/CMakeLists.txt
+++ b/ydb/core/client/metadata/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/client/minikql_compile/CMakeLists.txt b/ydb/core/client/minikql_compile/CMakeLists.txt
index 44663f939d..98b74cae89 100644
--- a/ydb/core/client/minikql_compile/CMakeLists.txt
+++ b/ydb/core/client/minikql_compile/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-client-minikql_compile)
target_compile_options(core-client-minikql_compile PRIVATE
diff --git a/ydb/core/client/minikql_compile/db_key_resolver.h b/ydb/core/client/minikql_compile/db_key_resolver.h
index e748525fa8..4d93c1a4c2 100644
--- a/ydb/core/client/minikql_compile/db_key_resolver.h
+++ b/ydb/core/client/minikql_compile/db_key_resolver.h
@@ -44,6 +44,7 @@ public:
i32 KeyPosition;
ui32 Type;
ui32 AllowInplaceMode;
+ NKikimr::EColumnTypeConstraint TypeConstraint;
};
EStatus Status;
diff --git a/ydb/core/client/minikql_compile/mkql_compile_service.cpp b/ydb/core/client/minikql_compile/mkql_compile_service.cpp
index e01d61a22c..b88d4904f5 100644
--- a/ydb/core/client/minikql_compile/mkql_compile_service.cpp
+++ b/ydb/core/client/minikql_compile/mkql_compile_service.cpp
@@ -164,7 +164,7 @@ private:
using TCompilingMap = THashMap<TActorId, TCompileContext::TPtr>;
TCompilingMap Compiling;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TAlignedPagePoolCounters AllocPoolCounters;
TActorId SchemeCache;
THolder<NYql::IDbSchemeResolver> DbSchemeResolver;
diff --git a/ydb/core/client/minikql_compile/ut/CMakeLists.txt b/ydb/core/client/minikql_compile/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/client/minikql_compile/ut/CMakeLists.txt
+++ b/ydb/core/client/minikql_compile/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/client/minikql_compile/yql_expr_minikql.cpp b/ydb/core/client/minikql_compile/yql_expr_minikql.cpp
index 76f38bf35c..28a7a4dbff 100644
--- a/ydb/core/client/minikql_compile/yql_expr_minikql.cpp
+++ b/ydb/core/client/minikql_compile/yql_expr_minikql.cpp
@@ -382,6 +382,7 @@ private:
for (auto& tupleItem : selectTuple.Children()) {
auto columnName = tupleItem->Content();
const TTypeAnnotationNode *columnDataType;
+ auto typeConstraint = EColumnTypeConstraint::Nullable;
auto systemColumnType = KikimrSystemColumns().find(columnName);
if (systemColumnType != KikimrSystemColumns().end()) {
@@ -389,6 +390,7 @@ private:
} else {
auto column = lookup->Columns.FindPtr(columnName);
YQL_ENSURE(column);
+ typeConstraint = column->TypeConstraint;
// Decimal type is transformed into parametrized Decimal(22, 9).
if (column->Type == NYql::NProto::TypeIds::Decimal) {
@@ -402,9 +404,12 @@ private:
ctx);
}
}
- auto columnOptType = ctx.MakeType<TOptionalExprType>(columnDataType);
- resultItems.push_back(ctx.MakeType<TItemExprType>(columnName, columnOptType));
+ if (typeConstraint == EColumnTypeConstraint::Nullable) {
+ columnDataType = ctx.MakeType<TOptionalExprType>(columnDataType);
+ }
+
+ resultItems.push_back(ctx.MakeType<TItemExprType>(columnName, columnDataType));
}
auto selectType = ctx.MakeType<TStructExprType>(resultItems);
@@ -834,11 +839,11 @@ void FillColumnsToRead(IDbSchemeResolver::TTableResult* lookup, TExprNode* selec
auto columnName = selectTuple->Child(i)->Content();
const auto& systemColumn = GetSystemColumns().find(columnName);
if (systemColumn != GetSystemColumns().end()) {
- columnsToRead.emplace_back(columnName, systemColumn->second.ColumnId, systemColumn->second.TypeId);
+ columnsToRead.emplace_back(columnName, systemColumn->second.ColumnId, systemColumn->second.TypeId, EColumnTypeConstraint::Nullable);
} else {
auto column = lookup->Columns.FindPtr(columnName);
YQL_ENSURE(column);
- columnsToRead.emplace_back(columnName, column->Column, column->Type);
+ columnsToRead.emplace_back(columnName, column->Column, column->Type, column->TypeConstraint);
}
}
}
diff --git a/ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp b/ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp
index 4fcdf735ba..df56ab1c27 100644
--- a/ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp
+++ b/ydb/core/client/minikql_compile/yql_expr_minikql_compile_ut.cpp
@@ -72,8 +72,8 @@ namespace {
table.Table.ColumnNames = { "key", "value" };
table.TableId.Reset(new TTableId(1, 2));
table.KeyColumnCount = 1;
- table.Columns.insert(std::make_pair("key", TColumn{ 34, 0, NUdf::TDataType<ui32>::Id, 0 }));
- table.Columns.insert(std::make_pair("value", TColumn{ 56, -1, NUdf::TDataType<char*>::Id, (ui32)EInplaceUpdateMode::Min }));
+ table.Columns.insert(std::make_pair("key", TColumn{ 34, 0, NUdf::TDataType<ui32>::Id, 0, EColumnTypeConstraint::Nullable }));
+ table.Columns.insert(std::make_pair("value", TColumn{ 56, -1, NUdf::TDataType<char*>::Id, (ui32)EInplaceUpdateMode::Min, EColumnTypeConstraint::Nullable }));
services.DbSchemeResolver.AddTable(table);
IDbSchemeResolver::TTableResult table2(IDbSchemeResolver::TTableResult::Ok);
@@ -81,8 +81,8 @@ namespace {
table2.Table.ColumnNames = { "key", "value" };
table2.TableId.Reset(new TTableId(10, 20));
table2.KeyColumnCount = 1;
- table2.Columns.insert(std::make_pair("key", TColumn{ 340, 0, NUdf::TDataType<ui32>::Id, 0 }));
- table2.Columns.insert(std::make_pair("value", TColumn{ 560, -1, NUdf::TDataType<char*>::Id, (ui32)EInplaceUpdateMode::Min }));
+ table2.Columns.insert(std::make_pair("key", TColumn{ 340, 0, NUdf::TDataType<ui32>::Id, 0, EColumnTypeConstraint::Nullable }));
+ table2.Columns.insert(std::make_pair("value", TColumn{ 560, -1, NUdf::TDataType<char*>::Id, (ui32)EInplaceUpdateMode::Min, EColumnTypeConstraint::Nullable }));
services.DbSchemeResolver.AddTable(table2);
}
}
@@ -203,7 +203,7 @@ Y_UNIT_TEST_SUITE(TTestYqlToMiniKQLCompile) {
Y_UNIT_TEST(SelectRange) {
auto programText = R"___(
(
-(let range '('IncFrom 'ExcTo '('key (Uint32 '23) (Void))))
+(let range '('IncFrom 'IncTo '('key (Uint32 '23) (Void))))
(let select '('value))
(let options '('('ItemsLimit (Uint64 '2)) '('BytesLimit (Uint64 '1000))))
(let pgmReturn (AsList
@@ -323,7 +323,7 @@ Y_UNIT_TEST_SUITE(TTestYqlToMiniKQLCompile) {
Y_UNIT_TEST(Extract) {
auto programText = R"___(
(
-(let range '('IncFrom 'ExcTo '('key (Uint32 '23) (Void))))
+(let range '('IncFrom 'IncTo '('key (Uint32 '23) (Void))))
(let select '('key 'value))
(let options '('('ItemsLimit (Uint64 '2))))
(let tupleList (AsList '((Uint32 '1) (Uint32 '2)) '((Uint32 '3) (Uint32 '4))))
diff --git a/ydb/core/client/minikql_result_lib/CMakeLists.txt b/ydb/core/client/minikql_result_lib/CMakeLists.txt
index b316b0b744..8f49720411 100644
--- a/ydb/core/client/minikql_result_lib/CMakeLists.txt
+++ b/ydb/core/client/minikql_result_lib/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-client-minikql_result_lib)
target_link_libraries(core-client-minikql_result_lib PUBLIC
diff --git a/ydb/core/client/minikql_result_lib/ut/CMakeLists.txt b/ydb/core/client/minikql_result_lib/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/client/minikql_result_lib/ut/CMakeLists.txt
+++ b/ydb/core/client/minikql_result_lib/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp b/ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp
index eb74fa36e9..d019533c69 100644
--- a/ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp
+++ b/ydb/core/client/scheme_cache_lib/yql_db_scheme_resolver.cpp
@@ -67,7 +67,7 @@ class TTableProxyActor : public TActorBootstrapped<TTableProxyActor> {
if (systemColumn != GetSystemColumns().end()) {
reply.Columns.insert({
column,
- {systemColumn->second.ColumnId, -1, systemColumn->second.TypeId, 0}
+ {systemColumn->second.ColumnId, -1, systemColumn->second.TypeId, 0, EColumnTypeConstraint::Nullable}
});
continue;
}
@@ -77,8 +77,9 @@ class TTableProxyActor : public TActorBootstrapped<TTableProxyActor> {
reply.Reason = "column '" + column + "' not exist";
} else {
const auto &col = (*x)->second;
+ auto nullConstraint = res.NotNullColumns.contains(col.Name) ? EColumnTypeConstraint::NotNull : EColumnTypeConstraint::Nullable;
reply.Columns.insert(std::make_pair(column,
- IDbSchemeResolver::TTableResult::TColumn{col.Id, col.KeyOrder, col.PType, 0}));
+ IDbSchemeResolver::TTableResult::TColumn{col.Id, col.KeyOrder, col.PType, 0, nullConstraint}));
}
}
}
diff --git a/ydb/core/client/server/CMakeLists.txt b/ydb/core/client/server/CMakeLists.txt
index ac315ea5f8..8f64604317 100644
--- a/ydb/core/client/server/CMakeLists.txt
+++ b/ydb/core/client/server/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-client-server)
target_compile_options(core-client-server PRIVATE
diff --git a/ydb/core/client/server/grpc_server.cpp b/ydb/core/client/server/grpc_server.cpp
index aa122da36a..fc8f53c626 100644
--- a/ydb/core/client/server/grpc_server.cpp
+++ b/ydb/core/client/server/grpc_server.cpp
@@ -94,6 +94,7 @@ public:
void Start() {
if (auto guard = Server->ProtectShutdown()) {
+ OnBeforeCall();
(Service->*RequestCallback)(&Context, &Request, Writer.Get(), CQ, CQ, GetGRpcTag());
} else {
// Server is shutting down, new requests cannot be started
@@ -115,6 +116,8 @@ public:
}
void DestroyRequest() override {
+ Y_VERIFY(!CallInProgress_, "Unexpected DestroyRequest while another grpc call is still in progress");
+ RequestDestroyed_ = true;
if (RequestRegistered_) {
Server->DeregisterRequestCtx(this);
RequestRegistered_ = false;
@@ -122,6 +125,20 @@ public:
delete this;
}
+private:
+ void OnBeforeCall() {
+ Y_VERIFY(!RequestDestroyed_, "Cannot start grpc calls after request is already destroyed");
+ Y_VERIFY(!Finished_, "Cannot start grpc calls after request is finished");
+ bool wasInProgress = std::exchange(CallInProgress_, true);
+ Y_VERIFY(!wasInProgress, "Another grpc call is already in progress");
+ }
+
+ void OnAfterCall() {
+ Y_VERIFY(!RequestDestroyed_, "Finished grpc call after request is already destroyed");
+ bool wasInProgress = std::exchange(CallInProgress_, false);
+ Y_VERIFY(wasInProgress, "Finished grpc call that was not in progress");
+ }
+
public:
//! Get pointer to the request's message.
const NProtoBuf::Message* GetRequest() const override {
@@ -262,6 +279,8 @@ private:
ResponseSize = resp.ByteSize();
ResponseStatus = status;
StateFunc = &TSimpleRequest::FinishDone;
+ OnBeforeCall();
+ Finished_ = true;
Writer->Finish(resp, Status::OK, GetGRpcTag());
}
@@ -272,12 +291,16 @@ private:
Name, Context.peer().c_str());
StateFunc = &TSimpleRequest::FinishDoneWithoutProcessing;
+ OnBeforeCall();
+ Finished_ = true;
Writer->Finish(resp,
grpc::Status(grpc::StatusCode::RESOURCE_EXHAUSTED, msg),
GetGRpcTag());
}
bool RequestDone(bool ok) {
+ OnAfterCall();
+
auto makeRequestString = [&] {
TString resp;
if (ok) {
@@ -326,6 +349,7 @@ private:
}
bool FinishDone(bool ok) {
+ OnAfterCall();
LOG_DEBUG(ActorSystem, NKikimrServices::GRPC_SERVER, "[%p] finished request Name# %s ok# %s peer# %s", this,
Name, ok ? "true" : "false", Context.peer().c_str());
Counters->FinishProcessing(RequestSize, ResponseSize, ok, ResponseStatus,
@@ -337,6 +361,7 @@ private:
}
bool FinishDoneWithoutProcessing(bool ok) {
+ OnAfterCall();
LOG_DEBUG(ActorSystem, NKikimrServices::GRPC_SERVER, "[%p] finished request without processing Name# %s ok# %s peer# %s", this,
Name, ok ? "true" : "false", Context.peer().c_str());
@@ -365,6 +390,9 @@ private:
TMaybe<NMsgBusProxy::TBusMessageContext> BusContext;
bool InProgress_;
bool RequestRegistered_ = false;
+ bool RequestDestroyed_ = false;
+ bool CallInProgress_ = false;
+ bool Finished_ = false;
};
} // namespace
@@ -380,7 +408,7 @@ void TGRpcService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPt
}
TFuture<void> TGRpcService::Prepare(TActorSystem* system, const TActorId& pqMeta, const TActorId& msgBusProxy,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
auto promise = NewPromise<void>();
InitCb_ = [=]() mutable {
try {
diff --git a/ydb/core/client/server/grpc_server.h b/ydb/core/client/server/grpc_server.h
index 2f2ae1da6b..f44d8cdadc 100644
--- a/ydb/core/client/server/grpc_server.h
+++ b/ydb/core/client/server/grpc_server.h
@@ -60,7 +60,7 @@ public:
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
- NThreading::TFuture<void> Prepare(NActors::TActorSystem* system, const NActors::TActorId& pqMeta, const NActors::TActorId& msgBusProxy, TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+ NThreading::TFuture<void> Prepare(NActors::TActorSystem* system, const NActors::TActorId& pqMeta, const NActors::TActorId& msgBusProxy, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
void Start();
bool IncRequest();
@@ -86,7 +86,7 @@ private:
size_t PersQueueWriteSessionsMaxCount = 1000000;
size_t PersQueueReadSessionsMaxCount = 100000;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
std::function<void()> InitCb_;
// In flight request management.
diff --git a/ydb/core/client/server/msgbus_http_server.h b/ydb/core/client/server/msgbus_http_server.h
index 4070ca8bd5..f258cdb157 100644
--- a/ydb/core/client/server/msgbus_http_server.h
+++ b/ydb/core/client/server/msgbus_http_server.h
@@ -11,7 +11,7 @@ namespace NMsgBusProxy {
class IMessageBusHttpServer : public NMonitoring::IMonPage {
public:
- IMessageBusHttpServer(const TString& path, TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
+ IMessageBusHttpServer(const TString& path, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters)
: NMonitoring::IMonPage(path)
, Counters(counters)
{}
@@ -19,17 +19,17 @@ public:
virtual void Shutdown() = 0;
// counters
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
- TIntrusivePtr<NMonitoring::TDynamicCounters> HttpGroup;
- NMonitoring::TDynamicCounters::TCounterPtr RequestsActive;
- NMonitoring::TDynamicCounters::TCounterPtr RequestsCount;
- NMonitoring::TDynamicCounters::TCounterPtr InboundSize;
- NMonitoring::TDynamicCounters::TCounterPtr OutboundSize;
- NMonitoring::TDynamicCounters::TCounterPtr Status200;
- NMonitoring::TDynamicCounters::TCounterPtr Status400;
- NMonitoring::TDynamicCounters::TCounterPtr Status500;
- NMonitoring::TDynamicCounters::TCounterPtr Status503;
- NMonitoring::TDynamicCounters::TCounterPtr Status504;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> HttpGroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestsActive;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestsCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InboundSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr OutboundSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Status200;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Status400;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Status500;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Status503;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Status504;
NMonitoring::THistogramPtr RequestTotalTimeHistogram;
NMonitoring::THistogramPtr RequestPrepareTimeHistogram;
};
diff --git a/ydb/core/client/server/msgbus_server_db.cpp b/ydb/core/client/server/msgbus_server_db.cpp
index b5a41e390b..ff851a5897 100644
--- a/ydb/core/client/server/msgbus_server_db.cpp
+++ b/ydb/core/client/server/msgbus_server_db.cpp
@@ -381,7 +381,8 @@ public:
}
void BuildProgram(const NJson::TJsonValue& json, NMiniKQL::TRuntimeNode& pgmReturn, NMiniKQL::TKikimrProgramBuilder& pgmBuilder, const NSchemeCache::TSchemeCacheNavigate::TEntry& tableInfo,
- const TVector<const NTxProxy::TTableColumnInfo*>& keys, const THashMap<TString, const NTxProxy::TTableColumnInfo*>& columnByName, TVector<NMiniKQL::TRuntimeNode>& result) {
+ const TVector<const NTxProxy::TTableColumnInfo*>& keys, const THashMap<TString, const NTxProxy::TTableColumnInfo*>& columnByName, THashSet<TString> notNullColumns,
+ TVector<NMiniKQL::TRuntimeNode>& result) {
TVector<NMiniKQL::TRuntimeNode> keyColumns;
TVector<ui32> keyTypes;
keyTypes.reserve(keys.size());
@@ -427,10 +428,12 @@ public:
const TString& column = value.GetString();
auto itCol = columnByName.find(column);
if (itCol != columnByName.end()) {
- columnsToRead.emplace_back(itCol->second->Name, itCol->second->Id, itCol->second->PType);
+ auto nullConstraint = notNullColumns.contains(column) ? EColumnTypeConstraint::NotNull : EColumnTypeConstraint::Nullable;
+ columnsToRead.emplace_back(itCol->second->Name, itCol->second->Id, itCol->second->PType, nullConstraint);
} else if (column == "*") {
for (const auto& pr : columnByName) {
- columnsToRead.emplace_back(pr.second->Name, pr.second->Id, pr.second->PType);
+ auto nullConstraint = notNullColumns.contains(pr.first) ? EColumnTypeConstraint::NotNull : EColumnTypeConstraint::Nullable;
+ columnsToRead.emplace_back(pr.second->Name, pr.second->Id, pr.second->PType, nullConstraint);
}
} else {
throw yexception() << "Column \"" << value.GetString() << "\" not found";
@@ -438,7 +441,8 @@ public:
}
} else if (jsonSelect.IsString() && jsonSelect.GetString() == "*") {
for (const auto& pr : columnByName) {
- columnsToRead.emplace_back(pr.second->Name, pr.second->Id, pr.second->PType);
+ auto nullConstraint = notNullColumns.contains(pr.first) ? EColumnTypeConstraint::NotNull : EColumnTypeConstraint::Nullable;
+ columnsToRead.emplace_back(pr.second->Name, pr.second->Id, pr.second->PType, nullConstraint);
}
}
if (keyColumns.size() == keyTypes.size()) {
@@ -482,7 +486,7 @@ public:
if (json.GetValue("Batch", &jsonBatch)) {
const NJson::TJsonValue::TArray& array = jsonBatch.GetArray();
for (const NJson::TJsonValue& value : array) {
- BuildProgram(value, pgmReturn, pgmBuilder, tableInfo, keys, columnByName, result);
+ BuildProgram(value, pgmReturn, pgmBuilder, tableInfo, keys, columnByName, notNullColumns, result);
}
OperationHistogram = DbOperationsCounters->RequestBatchTimeHistogram;
}
@@ -511,7 +515,7 @@ public:
columnByName[itCol->second.Name] = &itCol->second;
}
- BuildProgram(JSON, pgmReturn, pgmBuilder, tableInfo, keys, columnByName, result);
+ BuildProgram(JSON, pgmReturn, pgmBuilder, tableInfo, keys, columnByName, tableInfo.NotNullColumns, result);
if (JSON.Has("Batch")) {
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("Result", pgmBuilder.NewTuple(result)));
} else {
diff --git a/ydb/core/client/server/msgbus_server_persqueue.cpp b/ydb/core/client/server/msgbus_server_persqueue.cpp
index 65ebb6715a..7089d6dabe 100644
--- a/ydb/core/client/server/msgbus_server_persqueue.cpp
+++ b/ydb/core/client/server/msgbus_server_persqueue.cpp
@@ -261,7 +261,10 @@ void TPersQueueBaseRequestProcessor::HandleTimeout(const TActorContext& ctx) {
}
-void TPersQueueBaseRequestProcessor::GetTopicsListOrThrow(const ::google::protobuf::RepeatedPtrField<::NKikimrClient::TPersQueueMetaRequest::TTopicRequest>& requests, THashMap<TString, std::shared_ptr<THashSet<ui64>>>& partitionsToRequest) {
+void TPersQueueBaseRequestProcessor::GetTopicsListOrThrow(
+ const ::google::protobuf::RepeatedPtrField<::NKikimrClient::TPersQueueMetaRequest::TTopicRequest>& requests,
+ THashMap<TString, std::shared_ptr<THashSet<ui64>>>& partitionsToRequest
+) {
for (const auto& topicRequest : requests) {
if (topicRequest.GetTopic().empty()) {
throw std::runtime_error("TopicRequest must have Topic field.");
@@ -304,6 +307,8 @@ void TPersQueueBaseRequestProcessor::Handle(
}
TopicsDescription = std::move(ev->Get()->Result);
+ TopicsConverters = std::move(ev->Get()->Topics);
+ Y_VERIFY(TopicsDescription->ResultSet.size() == TopicsConverters.size());
if (ReadyToCreateChildren()) {
if (CreateChildren(ctx)) {
return;
@@ -316,13 +321,17 @@ bool TPersQueueBaseRequestProcessor::ReadyToCreateChildren() const {
}
bool TPersQueueBaseRequestProcessor::CreateChildren(const TActorContext& ctx) {
- auto factory = NPersQueue::TTopicNamesConverterFactory(AppData(ctx)->PQConfig, {});
+ Y_VERIFY(TopicsDescription->ResultSet.size() == TopicsConverters.size());
+ ui32 i = 0;
for (const auto& entry : TopicsDescription->ResultSet) {
+ auto converter = TopicsConverters[i++];
+ if (!converter) {
+ continue;
+ }
if (entry.Kind == TSchemeCacheNavigate::EKind::KindTopic && entry.PQGroupInfo) {
- auto converter = factory.MakeTopicConverter(
- entry.PQGroupInfo->Description.GetPQTabletConfig()
- );
+
auto name = converter->GetClientsideName();
+
if (name.empty() || !TopicsToRequest.empty() && !IsIn(TopicsToRequest, name)) {
continue;
}
@@ -413,6 +422,12 @@ TPersQueueBaseRequestProcessor::TNodesInfo::TNodesInfo(THolder<TEvInterconnect::
HostNames.reserve(NodesInfoReply->Nodes.size());
for (const NActors::TEvInterconnect::TNodeInfo& info : NodesInfoReply->Nodes) {
HostNames.emplace(info.NodeId, info.Host);
+ auto insRes = MinNodeIdByHost.insert(std::make_pair(info.Host, info.NodeId));
+ if (!insRes.second) {
+ if (insRes.first->second > info.NodeId) {
+ insRes.first->second = info.NodeId;
+ }
+ }
}
}
@@ -439,8 +454,8 @@ STFUNC(TTopicInfoBasedActor::StateFunc) {
class TMessageBusServerPersQueueImpl : public TActorBootstrapped<TMessageBusServerPersQueueImpl> {
- using TEvAllTopicsDescribeRequest = NMsgBusProxy::NPqMetaCacheV2::TEvPqNewMetaCache::TEvDescribeAllTopicsRequest;
- using TEvAllTopicsDescribeResponse = NMsgBusProxy::NPqMetaCacheV2::TEvPqNewMetaCache::TEvDescribeAllTopicsResponse;
+ using TEvDescribeAllTopicsRequest = NMsgBusProxy::NPqMetaCacheV2::TEvPqNewMetaCache::TEvDescribeAllTopicsRequest;
+ using TEvDescribeAllTopicsResponse = NMsgBusProxy::NPqMetaCacheV2::TEvPqNewMetaCache::TEvDescribeAllTopicsResponse;
protected:
NKikimrClient::TPersQueueRequest RequestProto;
@@ -879,7 +894,7 @@ public:
}
- void Handle(TEvAllTopicsDescribeResponse::TPtr& ev, const TActorContext& ctx) {
+ void Handle(TEvDescribeAllTopicsResponse::TPtr& ev, const TActorContext& ctx) {
--DescribeRequests;
auto& res = ev->Get()->Result->ResultSet;
auto& topics = ev->Get()->Topics;
@@ -896,11 +911,9 @@ public:
auto factory = NPersQueue::TTopicNamesConverterFactory(AppData(ctx)->PQConfig, {});
for (auto i = 0u; i != res.size(); i++) {
auto& entry = res[i];
- if (entry.Kind == TSchemeCacheNavigate::EKind::KindTopic && entry.PQGroupInfo) {
+ auto& converter = ev->Get()->Topics[i];
+ if (entry.Kind == TSchemeCacheNavigate::EKind::KindTopic && entry.PQGroupInfo && converter) {
auto& description = entry.PQGroupInfo->Description;
- auto converter = factory.MakeTopicConverter(
- entry.PQGroupInfo->Description.GetPQTabletConfig()
- );
if (!hasTopics || TopicInfo.find(converter->GetClientsideName()) != TopicInfo.end()) {
auto& topicInfo = TopicInfo[converter->GetClientsideName()];
topicInfo.BalancerTabletId = description.GetBalancerTabletID();
@@ -1321,7 +1334,7 @@ public:
ctx.Schedule(TDuration::MilliSeconds(Min<ui32>(RequestProto.GetFetchRequest().GetWaitMs(), 30000)), new TEvPersQueue::TEvHasDataInfoResponse);
}
- auto* request = new TEvAllTopicsDescribeRequest();
+ auto* request = new TEvDescribeAllTopicsRequest();
ctx.Send(SchemeCache, request);
++DescribeRequests;
@@ -1337,7 +1350,7 @@ public:
STRICT_STFUNC(StateFunc,
HFunc(TEvInterconnect::TEvNodesInfo, Handle);
- HFunc(TEvAllTopicsDescribeResponse, Handle);
+ HFunc(TEvDescribeAllTopicsResponse, Handle);
HFunc(TEvTabletPipe::TEvClientDestroyed, Handle);
HFunc(TEvTabletPipe::TEvClientConnected, Handle);
HFunc(TEvPersQueue::TEvResponse, Handle);
diff --git a/ydb/core/client/server/msgbus_server_persqueue.h b/ydb/core/client/server/msgbus_server_persqueue.h
index 7a6504d075..3a61476e53 100644
--- a/ydb/core/client/server/msgbus_server_persqueue.h
+++ b/ydb/core/client/server/msgbus_server_persqueue.h
@@ -83,6 +83,7 @@ public:
struct TNodesInfo {
THolder<TEvInterconnect::TEvNodesInfo> NodesInfoReply;
THashMap<ui32, TString> HostNames;
+ THashMap<TString, ui32> MinNodeIdByHost;
explicit TNodesInfo(THolder<TEvInterconnect::TEvNodesInfo> nodesInfoReply);
};
@@ -147,6 +148,7 @@ protected:
THashMap<TActorId, THolder<TPerTopicInfo>> Children;
size_t ChildrenAnswered = 0;
std::shared_ptr<NSchemeCache::TSchemeCacheNavigate> TopicsDescription;
+ TVector<NPersQueue::TTopicConverterPtr> TopicsConverters;
// Nodes info
const bool ListNodes;
diff --git a/ydb/core/client/server/msgbus_server_pq_metacache.cpp b/ydb/core/client/server/msgbus_server_pq_metacache.cpp
index f695d57000..79f98697f5 100644
--- a/ydb/core/client/server/msgbus_server_pq_metacache.cpp
+++ b/ydb/core/client/server/msgbus_server_pq_metacache.cpp
@@ -24,20 +24,33 @@ namespace NPqMetaCacheV2 {
using namespace NSchemeCache;
-IActor* CreateSchemeCache(const TActorContext& ctx, TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+IActor* CreateSchemeCache(const TActorContext& ctx, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
auto appData = AppData(ctx);
auto cacheCounters = GetServiceCounters(counters, "pqproxy|schemecache");
auto cacheConfig = MakeIntrusive<TSchemeCacheConfig>(appData, cacheCounters);
return CreateSchemeBoardSchemeCache(cacheConfig.Get());
}
+void CheckEntrySetHasTopicPath(auto* scNavigate) {
+ for (auto& entry : scNavigate->ResultSet) {
+ if (entry.PQGroupInfo && entry.PQGroupInfo->Description.HasPQTabletConfig()) {
+ if (entry.PQGroupInfo->Description.GetPQTabletConfig().GetTopicPath().empty()) {
+ auto* newGroupInfo = new NSchemeCache::TSchemeCacheNavigate::TPQGroupInfo(*entry.PQGroupInfo);
+ newGroupInfo->Description.MutablePQTabletConfig()->SetTopicPath("/" + NKikimr::JoinPath(entry.Path));
+ entry.PQGroupInfo.Reset(newGroupInfo);
+ }
+ }
+ }
+}
+
+
class TPersQueueMetaCacheActor : public TActorBootstrapped<TPersQueueMetaCacheActor> {
using TBase = TActorBootstrapped<TPersQueueMetaCacheActor>;
public:
TPersQueueMetaCacheActor(TPersQueueMetaCacheActor&&) = default;
TPersQueueMetaCacheActor& operator=(TPersQueueMetaCacheActor&&) = default;
- TPersQueueMetaCacheActor(const NMonitoring::TDynamicCounterPtr& counters,
+ TPersQueueMetaCacheActor(const ::NMonitoring::TDynamicCounterPtr& counters,
const TDuration& versionCheckInterval)
: Counters(counters)
, VersionCheckInterval(versionCheckInterval)
@@ -55,6 +68,11 @@ public:
{
}
+ static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
+ return NKikimrServices::TActivity::PQ_META_CACHE;
+ }
+
+
void Bootstrap(const TActorContext& ctx) {
Become(&TPersQueueMetaCacheActor::StateFunc);
@@ -104,6 +122,7 @@ private:
Generation->Inc();
LastTopicKey = {};
Type = EQueryType::ECheckVersion;
+ //TODO: on start there will be additional delay for VersionCheckInterval
ctx.Schedule(error ? QueryRetryInterval : VersionCheckInterval, new NActors::TEvents::TEvWakeup());
}
@@ -235,6 +254,7 @@ private:
CurrentTopicsVersion = NewTopicsVersion;
FullTopicsCacheOutdated = true;
FullTopicsCache = nullptr;
+ CurrentTopicsFullConverters.clear();
while (!ListTopicsWaiters.empty()) {
auto& waiter = ListTopicsWaiters.front();
ProcessDescribeAllTopics(waiter, ctx);
@@ -318,7 +338,7 @@ private:
//return true;
return SecondTryTopics.empty(); //ToDo - second try topics
}
- const std::shared_ptr<TSchemeCacheNavigate>& GetResult() {
+ std::shared_ptr<TSchemeCacheNavigate>& GetResult() {
Y_VERIFY(Result != nullptr);
return Result;
};
@@ -381,15 +401,15 @@ private:
}
if (FullTopicsCache && !FullTopicsCacheOutdated) {
LOG_DEBUG_S(ctx, NKikimrServices::PQ_METACACHE, "Respond from cache");
- return SendDescribeAllTopicsResponse(waiter, CurrentTopics, ctx);
+ return SendDescribeAllTopicsResponse(waiter, CurrentTopicsFullConverters, ctx);
}
- LOG_DEBUG_S(ctx, NKikimrServices::PQ_METACACHE, "Describe all topics - send request");
SendSchemeCacheRequest(
std::make_shared<TWaiter>(waiter, DbRoot, false, false, CurrentTopics, EWaiterType::DescribeAllTopics),
ctx
);
FullTopicsCacheOutdated = false;
FullTopicsCache = nullptr;
+ CurrentTopicsFullConverters.clear();
}
void SendSchemeCacheRequest(std::shared_ptr<TWaiter> waiter, const TActorContext& ctx) {
@@ -405,6 +425,11 @@ private:
auto schemeCacheRequest = std::make_unique<TSchemeCacheNavigate>(reqId);
auto inserted = DescribeTopicsWaiters.insert(std::make_pair(reqId, waiter)).second;
Y_VERIFY(inserted);
+
+ LOG_DEBUG_S(ctx, NKikimrServices::PQ_METACACHE, "send request for "
+ << (waiter->Type == EWaiterType::DescribeAllTopics ? " all " : "") << waiter->GetTopics().size()
+ << " topics, got " << DescribeTopicsWaiters.size() << " requests infly");
+
for (const auto& path : waiter->GetTopics()) {
auto split = NKikimr::SplitPath(path);
Y_VERIFY(!split.empty());
@@ -426,8 +451,10 @@ private:
<< ": result# " << result->ToString(*AppData()->TypeRegistry));
auto waiterIter = DescribeTopicsWaiters.find(result->Instant);
Y_VERIFY(!waiterIter.IsEnd());
- auto& waiter = waiterIter->second;
+ auto waiter = waiterIter->second; //copy shared ptr
auto res = waiter->ApplyResult(result);
+ DescribeTopicsWaiters.erase(waiterIter);
+
if (!res) {
// First attempt topics failed
SendSchemeCacheRequest(waiter, ctx);
@@ -439,44 +466,61 @@ private:
HaveDescribeAllTopicsInflight = false;
for (const auto& entry : waiter->Result->ResultSet) {
if (!entry.PQGroupInfo) {
- continue;
+ FullTopicsCacheOutdated = true;
+ break;
}
const auto& desc = entry.PQGroupInfo->Description;
- if (desc.HasBalancerTabletID() && desc.GetBalancerTabletID() != 0) {
- continue;
+ if (!desc.HasBalancerTabletID() || desc.GetBalancerTabletID() == 0) {
+ FullTopicsCacheOutdated = true;
+ break;
}
- FullTopicsCacheOutdated = true;
}
FullTopicsCache = waiter->GetResult();
+
+ CheckEntrySetHasTopicPath(FullTopicsCache.get());
+ auto factory = NPersQueue::TTopicNamesConverterFactory(AppData(ctx)->PQConfig, {});
+
+ for (auto& entry : FullTopicsCache->ResultSet) {
+ if (!entry.PQGroupInfo) {
+ CurrentTopicsFullConverters.push_back(nullptr);
+ } else {
+
+ auto converter = factory.MakeTopicConverter(
+ entry.PQGroupInfo->Description.GetPQTabletConfig()
+ );
+ CurrentTopicsFullConverters.push_back(converter);
+ }
+ }
+
+ Y_VERIFY(CurrentTopicsFullConverters.size() == FullTopicsCache->ResultSet.size());
+
LOG_DEBUG_S(ctx, NKikimrServices::PQ_METACACHE, "Updated topics cache with " << FullTopicsCache->ResultSet.size());
- while (DescribeAllTopicsWaiters) {
- SendDescribeAllTopicsResponse(DescribeAllTopicsWaiters.front()->WaiterId, waiter->Topics, ctx);
+ while (!DescribeAllTopicsWaiters.empty()) {
+ SendDescribeAllTopicsResponse(DescribeAllTopicsWaiters.front()->WaiterId, CurrentTopicsFullConverters, ctx);
DescribeAllTopicsWaiters.pop();
}
} else {
auto& navigate = waiter->GetResult();
- Y_VERIFY(!waiterIter.IsEnd());
- Y_VERIFY(waiterIter->second->Topics.size() == navigate->ResultSet.size());
+ Y_VERIFY(waiter->Topics.size() == navigate->ResultSet.size());
+ CheckEntrySetHasTopicPath(navigate.get());
auto *response = new TEvPqNewMetaCache::TEvDescribeTopicsResponse{
std::move(waiter->Topics), navigate
};
LOG_DEBUG_S(ctx, NKikimrServices::PQ_METACACHE, "Got describe topics SC response");
-
ctx.Send(waiter->WaiterId, response);
- DescribeTopicsWaiters.erase(waiterIter);
}
}
- void SendDescribeAllTopicsResponse(const TActorId& recipient, TVector<NPersQueue::TDiscoveryConverterPtr> topics,
+ void SendDescribeAllTopicsResponse(const TActorId& recipient, TVector<NPersQueue::TTopicConverterPtr> topics,
const TActorContext& ctx, bool empty = false
) {
- TSchemeCacheNavigate* scResponse;
+ std::shared_ptr<TSchemeCacheNavigate> scResponse;
if (empty) {
- scResponse = new TSchemeCacheNavigate();
+ scResponse.reset(new TSchemeCacheNavigate());
} else {
- scResponse = new TSchemeCacheNavigate(*FullTopicsCache);
+ scResponse = FullTopicsCache;
}
LOG_DEBUG_S(ctx, NKikimrServices::PQ_METACACHE, "Send describe all topics response with " << scResponse->ResultSet.size() << " topics");
auto* response = new TEvPqNewMetaCache::TEvDescribeAllTopicsResponse(
@@ -518,7 +562,7 @@ private:
TString Cluster;
};
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
TString VersionQuery;
TString TopicsQuery;
@@ -528,6 +572,7 @@ private:
EQueryType Type = EQueryType::ECheckVersion;
TVector<TTopicKey> NewTopics;
TVector<NPersQueue::TDiscoveryConverterPtr> CurrentTopics;
+ TVector<NPersQueue::TTopicConverterPtr> CurrentTopicsFullConverters;
bool EverGotTopics = false;
TDuration QueryRetryInterval = TDuration::Seconds(2);
TDuration VersionCheckInterval = TDuration::Seconds(1);
@@ -551,7 +596,7 @@ private:
};
-IActor* CreatePQMetaCache(const NMonitoring::TDynamicCounterPtr& counters, const TDuration& versionCheckInterval) {
+IActor* CreatePQMetaCache(const ::NMonitoring::TDynamicCounterPtr& counters, const TDuration& versionCheckInterval) {
return new TPersQueueMetaCacheActor(counters, versionCheckInterval);
}
diff --git a/ydb/core/client/server/msgbus_server_pq_metacache.h b/ydb/core/client/server/msgbus_server_pq_metacache.h
index d8f7479af9..d03bb59c62 100644
--- a/ydb/core/client/server/msgbus_server_pq_metacache.h
+++ b/ydb/core/client/server/msgbus_server_pq_metacache.h
@@ -97,20 +97,20 @@ struct TEvPqNewMetaCache {
struct TEvDescribeAllTopicsResponse : public TEventLocal<TEvDescribeAllTopicsResponse, EvDescribeAllTopicsResponse> {
bool Success = true;
TString Path;
- TVector<NPersQueue::TDiscoveryConverterPtr> Topics;
+ TVector<NPersQueue::TTopicConverterPtr> Topics;
std::shared_ptr<NSchemeCache::TSchemeCacheNavigate> Result;
explicit TEvDescribeAllTopicsResponse() {}
- TEvDescribeAllTopicsResponse(const TString& path, TVector<NPersQueue::TDiscoveryConverterPtr>&& topics,
- NSchemeCache::TSchemeCacheNavigate* result)
+ TEvDescribeAllTopicsResponse(const TString& path, TVector<NPersQueue::TTopicConverterPtr>&& topics,
+ const std::shared_ptr<NSchemeCache::TSchemeCacheNavigate>& result)
: Path(path)
, Topics(std::move(topics))
, Result(result)
{}
};
};
-IActor* CreatePQMetaCache(const NMonitoring::TDynamicCounterPtr& counters,
+IActor* CreatePQMetaCache(const ::NMonitoring::TDynamicCounterPtr& counters,
const TDuration& versionCheckInterval = TDuration::Seconds(1));
IActor* CreatePQMetaCache(const NActors::TActorId& schemeBoardCacheId,
diff --git a/ydb/core/client/server/msgbus_server_pq_metarequest.cpp b/ydb/core/client/server/msgbus_server_pq_metarequest.cpp
index 11d9153e77..3e68d399db 100644
--- a/ydb/core/client/server/msgbus_server_pq_metarequest.cpp
+++ b/ydb/core/client/server/msgbus_server_pq_metarequest.cpp
@@ -69,7 +69,7 @@ void TPersQueueGetTopicMetadataTopicWorker::Answer(const TActorContext& ctx, ERe
SetErrorCode(topicInfo, SchemeEntry);
if (SchemeEntry.PQGroupInfo != nullptr) {
const auto& desc = SchemeEntry.PQGroupInfo->Description;
- topicInfo->SetTopic(desc.GetName());
+ topicInfo->SetTopic(Name);
topicInfo->MutableConfig()->CopyFrom(desc.GetPQTabletConfig());
topicInfo->MutableConfig()->SetVersion(desc.GetAlterVersion());
topicInfo->SetNumPartitions(desc.PartitionsSize());
@@ -95,7 +95,7 @@ THolder<IActor> TPersQueueGetPartitionOffsetsProcessor::CreateTopicSubactor(
const TSchemeEntry& topicEntry, const TString& name
) {
return MakeHolder<TPersQueueGetPartitionOffsetsTopicWorker>(
- SelfId(), topicEntry, name, PartitionsToRequest[topicEntry.PQGroupInfo->Description.GetName()], RequestProto
+ SelfId(), topicEntry, name, PartitionsToRequest[name], RequestProto
);
}
@@ -208,7 +208,7 @@ THolder<IActor> TPersQueueGetPartitionStatusProcessor::CreateTopicSubactor(
const TSchemeEntry& topicEntry, const TString& name
) {
return MakeHolder<TPersQueueGetPartitionStatusTopicWorker>(
- SelfId(), topicEntry, name, PartitionsToRequest[topicEntry.PQGroupInfo->Description.GetName()], RequestProto
+ SelfId(), topicEntry, name, PartitionsToRequest[name], RequestProto
);
}
@@ -329,7 +329,7 @@ THolder<IActor> TPersQueueGetPartitionLocationsProcessor::CreateTopicSubactor(
Y_VERIFY(NodesInfo.get() != nullptr);
return MakeHolder<TPersQueueGetPartitionLocationsTopicWorker>(
SelfId(), topicEntry, name,
- PartitionsToRequest[topicEntry.PQGroupInfo->Description.GetName()], RequestProto, NodesInfo
+ PartitionsToRequest[name], RequestProto, NodesInfo
);
}
@@ -416,8 +416,17 @@ void TPersQueueGetPartitionLocationsTopicWorker::Answer(
const auto hostName = NodesInfo->HostNames.find(nodeId);
if (hostName != NodesInfo->HostNames.end()) {
location.SetHost(hostName->second);
- location.SetHostId(nodeId);
location.SetErrorCode(NPersQueue::NErrorCode::OK);
+ if (nodeId < 1000) {
+ location.SetHostId(nodeId);
+ } else {
+ auto minIter = NodesInfo->MinNodeIdByHost.find(hostName->second);
+ if (minIter.IsEnd()) {
+ location.SetHostId(nodeId);
+ } else {
+ location.SetHostId(minIter->second);
+ }
+ }
} else {
statusInitializing = true;
}
diff --git a/ydb/core/client/server/msgbus_server_proxy.h b/ydb/core/client/server/msgbus_server_proxy.h
index f9fdfdf593..ad868c1476 100644
--- a/ydb/core/client/server/msgbus_server_proxy.h
+++ b/ydb/core/client/server/msgbus_server_proxy.h
@@ -9,7 +9,7 @@ namespace NKikimr {
namespace NMsgBusProxy {
struct TMessageBusDbOpsCounters : TAtomicRefCount<TMessageBusDbOpsCounters> {
- TIntrusivePtr<NMonitoring::TDynamicCounters> DbOperationsCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> DbOperationsCounters;
NMonitoring::THistogramPtr RequestTotalTimeHistogram;
NMonitoring::THistogramPtr RequestPrepareTimeHistogram;
NMonitoring::THistogramPtr RequestUpdateTimeHistogram;
@@ -18,7 +18,7 @@ struct TMessageBusDbOpsCounters : TAtomicRefCount<TMessageBusDbOpsCounters> {
NMonitoring::THistogramPtr RequestBatchTimeHistogram;
NMonitoring::THistogramPtr RequestQueryTimeHistogram;
- TMessageBusDbOpsCounters(const NMonitoring::TDynamicCounterPtr& counters) {
+ TMessageBusDbOpsCounters(const ::NMonitoring::TDynamicCounterPtr& counters) {
DbOperationsCounters = GetServiceCounters(counters, "proxy")->GetSubgroup("subsystem", "db");
RequestTotalTimeHistogram = DbOperationsCounters->GetHistogram("RequestTotalTimeMs",
@@ -41,7 +41,7 @@ struct TMessageBusDbOpsCounters : TAtomicRefCount<TMessageBusDbOpsCounters> {
class TMessageBusServerProxy : public TActorBootstrapped<TMessageBusServerProxy> {
TMessageBusServer* const Server;
- TIntrusivePtr<NMonitoring::TDynamicCounters> SchemeCacheCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SchemeCacheCounters;
TIntrusivePtr<TMessageBusDbOpsCounters> DbOperationsCounters;
diff --git a/ydb/core/client/server/ut/CMakeLists.txt b/ydb/core/client/server/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/client/server/ut/CMakeLists.txt
+++ b/ydb/core/client/server/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/client/ut/CMakeLists.txt b/ydb/core/client/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/client/ut/CMakeLists.txt
+++ b/ydb/core/client/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/cms/CMakeLists.txt b/ydb/core/cms/CMakeLists.txt
index 324931e13d..e30db238f6 100644
--- a/ydb/core/cms/CMakeLists.txt
+++ b/ydb/core/cms/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(console)
+add_subdirectory(ut)
+add_subdirectory(ut_sentinel)
add_library(ydb-core-cms)
target_link_libraries(ydb-core-cms PUBLIC
@@ -49,6 +52,7 @@ target_sources(ydb-core-cms PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/cms/cms_tx_update_config.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/cms_tx_update_downtimes.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/downtime.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/cms/erasure_checkers.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/http.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/info_collector.cpp
${CMAKE_SOURCE_DIR}/ydb/core/cms/logger.cpp
diff --git a/ydb/core/cms/cluster_info.h b/ydb/core/cms/cluster_info.h
index d4568473f0..0ef5de32e6 100644
--- a/ydb/core/cms/cluster_info.h
+++ b/ydb/core/cms/cluster_info.h
@@ -528,6 +528,19 @@ public:
return nodes;
}
+ void ChooseSysNodes() {
+ for (auto &[nodeId, node] : Nodes) {
+ if (!node->PDisks.size()) {
+ SysNodes.push_back(node.Get());
+ }
+ }
+ }
+
+ TVector<const TNodeInfo *> GetSysTabletNodes() const
+ {
+ return SysNodes;
+ }
+
size_t NodesCount() const
{
return Nodes.size();
@@ -820,6 +833,8 @@ private:
ui64 RollbackPoint = 0;
bool HasTenantsInfo = false;
bool Outdated = false;
+
+ TVector<const TNodeInfo *> SysNodes; // nodes with sys tablets
// Fast access structures.
TMultiMap<TString, ui32> HostNameToNodeId;
diff --git a/ydb/core/cms/cms.cpp b/ydb/core/cms/cms.cpp
index 45452c9a21..907edd8046 100644
--- a/ydb/core/cms/cms.cpp
+++ b/ydb/core/cms/cms.cpp
@@ -1,7 +1,9 @@
#include "cms_impl.h"
#include "info_collector.h"
+#include "library/cpp/actors/core/actor.h"
#include "scheme.h"
#include "sentinel.h"
+#include "erasure_checkers.h"
#include <ydb/core/actorlib_impl/long_timer.h>
#include <ydb/core/base/appdata.h>
@@ -68,59 +70,6 @@ bool TCms::TNodeCounter::CheckRatio(ui32 ratio,
&& !Locked);
}
-void TCms::TGroupCounter::CountVDisk(const TVDiskInfo &vdisk,
- TClusterInfoPtr info,
- TDuration retryTime,
- TDuration duration)
-{
- Y_VERIFY_DEBUG(vdisk.VDiskId != VDisk.VDiskId);
-
- // Check we received info for VDisk.
- if (!vdisk.NodeId || !vdisk.PDiskId) {
- ++Down;
- Errors.push_back(Sprintf("Missing info for %s in affected group %u",
- vdisk.ItemName().data(), GroupId));
- return;
- }
-
- const auto &node = info->Node(vdisk.NodeId);
- const auto &pdisk = info->PDisk(vdisk.PDiskId);
-
- // Check locks.
- TErrorInfo error;
- if (node.IsLocked(error, retryTime, TActivationContext::Now(), duration)
- || pdisk.IsLocked(error, retryTime, TActivationContext::Now(), duration)
- || vdisk.IsLocked(error, retryTime, TActivationContext::Now(), duration)) {
- if (error.Code == TStatus::DISALLOW)
- Code = error.Code;
- ++Locked;
- Errors.push_back(Sprintf("Issue in affected group %u: %s",
- GroupId, error.Reason.data()));
- Deadline = Max(Deadline, error.Deadline);
- return;
- }
-
- // Check we received info for PDisk.
- if (!pdisk.NodeId) {
- ++Down;
- Errors.push_back(Sprintf("Missing info for %s in affected group %u",
- pdisk.ItemName().data(), GroupId));
- return;
- }
-
- // Check if disk is down.
- auto defaultDeadline = TActivationContext::Now() + retryTime;
- if ((node.NodeId != VDisk.NodeId && node.IsDown(error, defaultDeadline))
- || (pdisk.PDiskId != VDisk.PDiskId && pdisk.IsDown(error, defaultDeadline))
- || vdisk.IsDown(error, defaultDeadline)) {
- ++Down;
- Errors.push_back(Sprintf("Issue in affected group %u: %s",
- GroupId, error.Reason.data()));
- Deadline = Max(Deadline, error.Deadline);
- return;
- }
-}
-
void TCms::OnActivateExecutor(const TActorContext &ctx)
{
if (AppData(ctx)->DomainsInfo->Domains.size() > 1) {
@@ -270,7 +219,7 @@ bool TCms::CheckPermissionRequest(const TPermissionRequest &request,
LOG_DEBUG(ctx, NKikimrServices::CMS, "Checking action: %s", action.ShortDebugString().data());
- if (CheckAction(action, opts, error)) {
+ if (CheckAction(action, opts, error, ctx)) {
LOG_DEBUG(ctx, NKikimrServices::CMS, "Result: ALLOW");
auto *permission = response.AddPermissions();
@@ -422,16 +371,17 @@ bool TCms::CheckAccess(const TString &token,
bool TCms::CheckAction(const TAction &action,
const TActionOptions &opts,
- TErrorInfo &error) const
+ TErrorInfo &error,
+ const TActorContext &ctx) const
{
if (!IsActionHostValid(action, error))
return false;
switch (action.GetType()) {
case TAction::RESTART_SERVICES:
- return CheckActionRestartServices(action, opts, error);
+ return CheckActionRestartServices(action, opts, error, ctx);
case TAction::SHUTDOWN_HOST:
- return CheckActionShutdownHost(action, opts, error);
+ return CheckActionShutdownHost(action, opts, error, ctx);
case TAction::REPLACE_DEVICES:
return CheckActionReplaceDevices(action, opts.PermissionDuration, error);
case TAction::START_SERVICES:
@@ -454,7 +404,8 @@ bool TCms::CheckAction(const TAction &action,
bool TCms::CheckActionShutdownNode(const NKikimrCms::TAction &action,
const TActionOptions &opts,
const TNodeInfo &node,
- TErrorInfo &error) const
+ TErrorInfo &error,
+ const TActorContext &ctx) const
{
if (!TryToLockNode(action, opts, node, error)) {
return false;
@@ -469,12 +420,18 @@ bool TCms::CheckActionShutdownNode(const NKikimrCms::TAction &action,
return false;
}
+ if (!AppData(ctx)->DisableCheckingSysNodesCms &&
+ !CheckSysTabletsNode(action, opts, node, error)) {
+ return false;
+ }
+
return true;
}
bool TCms::CheckActionRestartServices(const TAction &action,
const TActionOptions &opts,
- TErrorInfo &error) const
+ TErrorInfo &error,
+ const TActorContext &ctx) const
{
TServices services;
if (!ParseServices(action, services, error))
@@ -490,7 +447,7 @@ bool TCms::CheckActionRestartServices(const TAction &action,
for (const auto node : ClusterInfo->HostNodes(action.GetHost())) {
if (node->Services & services) {
found = true;
- if (!CheckActionShutdownNode(action, opts, *node, error)) {
+ if (!CheckActionShutdownNode(action, opts, *node, error, ctx)) {
return false;
}
}
@@ -509,10 +466,11 @@ bool TCms::CheckActionRestartServices(const TAction &action,
bool TCms::CheckActionShutdownHost(const TAction &action,
const TActionOptions &opts,
- TErrorInfo &error) const
+ TErrorInfo &error,
+ const TActorContext &ctx) const
{
for (const auto node : ClusterInfo->HostNodes(action.GetHost())) {
- if (!CheckActionShutdownNode(action, opts, *node, error)) {
+ if (!CheckActionShutdownNode(action, opts, *node, error, ctx)) {
return false;
}
}
@@ -590,6 +548,61 @@ bool TCms::CheckActionShutdownStateStorage(
return true;
}
+bool TCms::CheckSysTabletsNode(const TAction &action,
+ const TActionOptions &opts,
+ const TNodeInfo &node,
+ TErrorInfo &error) const
+{
+ if (node.Services & EService::DynamicNode || node.PDisks.size()) {
+ return true;
+ }
+
+ auto nodes = ClusterInfo->GetSysTabletNodes();
+
+ ui32 disabledNodesCnt = 0;
+ TErrorInfo err;
+ TDuration duration = TDuration::MicroSeconds(action.GetDuration()) + opts.PermissionDuration;
+ TInstant defaultDeadline = TActivationContext::Now() + State->Config.DefaultRetryTime;
+ for (auto node : nodes) {
+ if (node->IsLocked(err, State->Config.DefaultRetryTime,
+ TActivationContext::Now(), duration) ||
+ node->IsDown(err, defaultDeadline))
+ {
+ ++disabledNodesCnt;
+ }
+ }
+
+ switch (opts.AvailabilityMode) {
+ case MODE_MAX_AVAILABILITY:
+ if (disabledNodesCnt > 0) {
+ error.Code = TStatus::DISALLOW_TEMP;
+ error.Reason = TStringBuilder() << "Too many locked sys nodes: " << disabledNodesCnt;
+ error.Deadline = defaultDeadline;
+ return false;
+ }
+ break;
+ case MODE_KEEP_AVAILABLE:
+ if (disabledNodesCnt * 8 >= nodes.size()) {
+ error.Code = TStatus::DISALLOW_TEMP;
+ error.Reason = TStringBuilder() << "Too many locked sys nodes: " << disabledNodesCnt;
+ error.Deadline = defaultDeadline;
+ return false;
+ }
+ break;
+ case MODE_FORCE_RESTART:
+ break;
+ default:
+ error.Code = TStatus::WRONG_REQUEST;
+ error.Reason = Sprintf("Unknown availability mode: %s (%" PRIu32 ")",
+ EAvailabilityMode_Name(opts.AvailabilityMode).data(),
+ static_cast<ui32>(opts.AvailabilityMode));
+ error.Deadline = defaultDeadline;
+ return false;
+ }
+
+ return true;
+}
+
bool TCms::TryToLockNode(const TAction& action,
const TActionOptions& opts,
const TNodeInfo& node,
@@ -745,37 +758,23 @@ bool TCms::TryToLockVDisk(const TActionOptions& opts,
return false;
}
- TGroupCounter counters(vdisk, groupId, defaultDeadline);
- for (const auto &vdId : group.VDisks) {
- if (vdId != vdisk.VDiskId)
- counters.CountVDisk(ClusterInfo->VDisk(vdId), ClusterInfo,
- State->Config.DefaultRetryTime, duration);
- }
+ auto counters = CreateErasureCounter(ClusterInfo->BSGroup(groupId).Erasure.GetErasure(), vdisk, groupId);
+ counters->CountGroupState(ClusterInfo, State->Config.DefaultRetryTime, duration, error);
- // Check if group already has locked disks.
- if (counters.Locked && counters.Code == TStatus::DISALLOW) {
- error.Code = counters.Code;
- error.Reason = JoinSeq("\n", counters.Errors);
- error.Deadline = counters.Deadline;
+ if (counters->GroupAlreadyHasLockedDisks(error)) {
return false;
}
switch (opts.AvailabilityMode) {
case MODE_MAX_AVAILABILITY:
- if ((counters.Down + counters.Locked) > 0) {
- Y_VERIFY(counters.Code == TStatus::DISALLOW_TEMP);
- error.Code = TStatus::DISALLOW_TEMP;
- error.Reason = JoinSeq("\n", counters.Errors);
- error.Deadline = counters.Deadline;
+ if (!counters->CheckForMaxAvailability(error, defaultDeadline)) {
+ Y_VERIFY(error.Code == TStatus::DISALLOW_TEMP);
return false;
}
break;
case MODE_KEEP_AVAILABLE:
- if ((counters.Down + counters.Locked) >= group.Erasure.ParityParts()) {
- Y_VERIFY(counters.Code == TStatus::DISALLOW_TEMP);
- error.Code = TStatus::DISALLOW_TEMP;
- error.Reason = JoinSeq("\n", counters.Errors);
- error.Deadline = counters.Deadline;
+ if (!counters->CheckForKeepAvailability(ClusterInfo, error, defaultDeadline)) {
+ Y_VERIFY(error.Code == TStatus::DISALLOW_TEMP);
return false;
}
break;
@@ -1908,8 +1907,6 @@ void TCms::Handle(TEvCms::TEvWalleRemoveTaskRequest::TPtr &ev, const TActorConte
void TCms::Handle(TEvCms::TEvStoreWalleTask::TPtr &ev, const TActorContext &ctx)
{
auto event = ev->Get();
- State->WalleTasks.emplace(event->Task.TaskId, event->Task);
- State->WalleRequests.emplace(event->Task.RequestId, event->Task.TaskId);
auto handle = new IEventHandle(ev->Sender, SelfId(), new TEvCms::TEvWalleTaskStored(event->Task.TaskId), 0, ev->Cookie);
Execute(CreateTxStoreWalleTask(event->Task, std::move(ev->Release()), handle), ctx);
diff --git a/ydb/core/cms/cms.h b/ydb/core/cms/cms.h
index 25cb8ef024..dd02706dbb 100644
--- a/ydb/core/cms/cms.h
+++ b/ydb/core/cms/cms.h
@@ -71,6 +71,7 @@ struct TEvCms {
EvSetConfigResponse,
EvSetMarkerResponse,
EvResetMarkerResponse,
+ EvStoreWalleTaskFailed,
EvEnd
};
@@ -199,6 +200,23 @@ struct TEvCms {
}
};
+ struct TEvStoreWalleTaskFailed : public TEventLocal<TEvStoreWalleTaskFailed, EvStoreWalleTaskFailed> {
+ TString TaskId;
+ TString Reason;
+
+ TEvStoreWalleTaskFailed(TString id, TString reason)
+ : TaskId(id)
+ , Reason(reason)
+ {
+ }
+
+ TString ToString() const override
+ {
+ return Sprintf("%s { Task: %s Reason %s}", ToStringHeader().data(), TaskId.data(), Reason.data());
+ }
+ };
+
+
struct TEvWalleTaskStored : public TEventLocal<TEvWalleTaskStored, EvWalleTaskStored> {
TString TaskId;
diff --git a/ydb/core/cms/cms_impl.h b/ydb/core/cms/cms_impl.h
index 1cf5748780..af4136c204 100644
--- a/ydb/core/cms/cms_impl.h
+++ b/ydb/core/cms/cms_impl.h
@@ -114,36 +114,6 @@ private:
bool CheckRatio(ui32 ratio, NKikimrCms::EAvailabilityMode mode) const;
};
- // Used to count down and locked disks in a group
- // excluding one them. It allows to check if excluded
- // disk may be locked.
- struct TGroupCounter {
- ui32 Down;
- ui32 Locked;
- const TVDiskInfo &VDisk;
- ui32 GroupId;
- NKikimrCms::TStatus::ECode Code;
- TVector<TString> Errors;
- TInstant Deadline;
-
- TGroupCounter(const TVDiskInfo &vdisk,
- ui32 groupId,
- TInstant defaultDeadline)
- : Down(0)
- , Locked(0)
- , VDisk(vdisk)
- , GroupId(groupId)
- , Code(NKikimrCms::TStatus::DISALLOW_TEMP)
- , Deadline(defaultDeadline)
- {
- }
-
- void CountVDisk(const TVDiskInfo &vdisk,
- TClusterInfoPtr info,
- TDuration retryTime,
- TDuration duration);
- };
-
ITransaction *CreateTxGetLogTail(TEvCms::TEvGetLogTailRequest::TPtr &ev);
ITransaction *CreateTxInitScheme();
ITransaction *CreateTxLoadState();
@@ -303,20 +273,27 @@ private:
TString &error,
const TActorContext &ctx);
bool CheckAction(const NKikimrCms::TAction &action, const TActionOptions &options,
- TErrorInfo &error) const;
+ TErrorInfo &error, const TActorContext &ctx) const;
bool CheckActionShutdownNode(const NKikimrCms::TAction &action,
const TActionOptions &options,
const TNodeInfo &node,
- TErrorInfo &error) const;
+ TErrorInfo &error,
+ const TActorContext &ctx) const;
bool CheckActionRestartServices(const NKikimrCms::TAction &action,
const TActionOptions &options,
- TErrorInfo &error) const;
+ TErrorInfo &error,
+ const TActorContext &ctx) const;
bool CheckActionShutdownHost(const NKikimrCms::TAction &action,
const TActionOptions &options,
- TErrorInfo &error) const;
+ TErrorInfo &error,
+ const TActorContext &ctx) const;
bool CheckActionReplaceDevices(const NKikimrCms::TAction &action,
const TActionOptions &options,
TErrorInfo &error) const;
+ bool CheckSysTabletsNode(const NKikimrCms::TAction &action,
+ const TActionOptions &opts,
+ const TNodeInfo &node,
+ TErrorInfo &error) const;
bool TryToLockNode(const NKikimrCms::TAction &action,
const TActionOptions &options,
const TNodeInfo &node,
diff --git a/ydb/core/cms/cms_tx_store_walle_task.cpp b/ydb/core/cms/cms_tx_store_walle_task.cpp
index f05828477a..d6ca017f56 100644
--- a/ydb/core/cms/cms_tx_store_walle_task.cpp
+++ b/ydb/core/cms/cms_tx_store_walle_task.cpp
@@ -10,8 +10,7 @@ class TCms::TTxStoreWalleTask : public TTransactionBase<TCms> {
public:
TTxStoreWalleTask(TCms *self, const TWalleTaskInfo &task, THolder<IEventBase> req, TAutoPtr<IEventHandle> resp)
: TBase(self)
- , TaskId(task.TaskId)
- , RequestId(task.RequestId)
+ , Task(task)
, Request(std::move(req))
, Response(std::move(resp))
{
@@ -22,14 +21,30 @@ public:
bool Execute(TTransactionContext &txc, const TActorContext &ctx) override
{
LOG_DEBUG(ctx, NKikimrServices::CMS, "TTxStoreWalleTask Execute");
+
+ for (auto &perm : Task.Permissions) {
+ if (Self->State->Permissions.find(perm) == Self->State->Permissions.end()) {
+
+ Response.Reset(new IEventHandle(Response->Recipient, Response->Sender,
+ new TEvCms::TEvStoreWalleTaskFailed(Task.TaskId,
+ TStringBuilder() << "There are no stored permissions for this task. "
+ << "Maybe cleanup ran before task been stored. "
+ << "Try request again"),
+ 0, Response->Cookie));
+ return true;
+ }
+ }
+
+ Self->State->WalleTasks.emplace(Task.TaskId, Task);
+ Self->State->WalleRequests.emplace(Task.RequestId, Task.TaskId);
NIceDb::TNiceDb db(txc.DB);
- auto row = db.Table<Schema::WalleTask>().Key(TaskId);
- row.Update(NIceDb::TUpdate<Schema::WalleTask::RequestID>(RequestId));
+ auto row = db.Table<Schema::WalleTask>().Key(Task.TaskId);
+ row.Update(NIceDb::TUpdate<Schema::WalleTask::RequestID>(Task.RequestId));
Self->AuditLog(ctx, TStringBuilder() << "Store wall-e task"
- << ": id# " << TaskId
- << ", requestId# " << RequestId);
+ << ": id# " << Task.TaskId
+ << ", requestId# " << Task.RequestId);
return true;
}
@@ -41,8 +56,7 @@ public:
}
private:
- TString TaskId;
- TString RequestId;
+ TWalleTaskInfo Task;
THolder<IEventBase> Request;
TAutoPtr<IEventHandle> Response;
};
diff --git a/ydb/core/cms/cms_ut.cpp b/ydb/core/cms/cms_ut.cpp
index 67e2b46cfb..01b303f4fe 100644
--- a/ydb/core/cms/cms_ut.cpp
+++ b/ydb/core/cms/cms_ut.cpp
@@ -1075,10 +1075,12 @@ Y_UNIT_TEST_SUITE(TCmsTest) {
{
TTestEnvOpts options;
options.NodeCount = 5;
+ options.DataCenterCount = 5;
options.VDisks = 0;
options.NRings = 2;
options.RingSize = 2;
options.NToSelect = 2;
+ options.UseMirror3dcErasure = false;
TCmsTestEnv env(options);
@@ -1097,6 +1099,8 @@ Y_UNIT_TEST_SUITE(TCmsTest) {
options.NRings = 2;
options.RingSize = 2;
options.NToSelect = 2;
+ options.DataCenterCount = 5;
+ options.UseMirror3dcErasure = false;
TCmsTestEnv env(options);
@@ -1115,6 +1119,8 @@ Y_UNIT_TEST_SUITE(TCmsTest) {
options.NRings = 2;
options.RingSize = 2;
options.NToSelect = 2;
+ options.DataCenterCount = 5;
+ options.UseMirror3dcErasure = false;
TCmsTestEnv env(options);
@@ -1132,10 +1138,12 @@ Y_UNIT_TEST_SUITE(TCmsTest) {
{
TTestEnvOpts options;
options.NodeCount = 7;
+ options.DataCenterCount = 7;
options.VDisks = 0;
options.NRings = 3;
options.RingSize = 2;
options.NToSelect = 2;
+ options.UseMirror3dcErasure = false;
TCmsTestEnv env(options);
@@ -1155,10 +1163,12 @@ Y_UNIT_TEST_SUITE(TCmsTest) {
{
TTestEnvOpts options;
options.NodeCount = 20;
+ options.DataCenterCount = 20;
options.VDisks = 0;
options.NRings = 6;
options.RingSize = 3;
options.NToSelect = 5;
+ options.UseMirror3dcErasure = false;
TCmsTestEnv env(options);
@@ -1224,7 +1234,107 @@ Y_UNIT_TEST_SUITE(TCmsTest) {
}
}
}
-}
+ Y_UNIT_TEST(WalleCleanupTest)
+ {
+ TCmsTestEnv env(8);
+
+ TAutoPtr<NCms::TEvCms::TEvPermissionRequest> event = new NCms::TEvCms::TEvPermissionRequest;
+ event->Record.SetUser(WALLE_CMS_USER);
+ event->Record.SetPartialPermissionAllowed(true);
+ event->Record.SetDryRun(false);
+ event->Record.SetSchedule(false);
+
+ AddActions(event, MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(3), 600000000, "storage"));
+
+ NKikimrCms::TPermissionResponse res;
+ res = env.CheckPermissionRequest(event, TStatus::ALLOW);
+
+ // Check that permission is stored
+ env.CheckListPermissions(WALLE_CMS_USER, 1);
+
+ // Adbance time to run cleanup
+ env.AdvanceCurrentTime(TDuration::Minutes(3));
+ env.RestartCms();
+
+ // TODO:: ะฟะตั€ะตะฝะตัั‚ะธ ะฒะฝัƒั‚ั€ัŒ TCmsTestEnv
+ TAutoPtr<TEvCms::TEvStoreWalleTask> event_store = new TEvCms::TEvStoreWalleTask;
+ event_store->Task.TaskId = "walle-test-task-1";
+ event_store->Task.RequestId = res.GetRequestId();
+
+ for (auto &permission : res.GetPermissions())
+ event_store->Task.Permissions.insert(permission.GetId());
+
+ env.CheckWalleStoreTaskIsFailed(event_store.Release());
+ }
+
+ Y_UNIT_TEST(SysTabletsNode)
+ {
+ TTestEnvOpts opt(16);
+ opt.VDisks = 0;
+
+ TCmsTestEnv env(opt);
+
+ env.EnableSysNodeChecking();
+
+ env.CheckPermissionRequest("user", false, true, false, true, MODE_MAX_AVAILABILITY, TStatus::ALLOW,
+ MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(2), 60000000, "storage"));
+
+ TFakeNodeWhiteboardService::Info[env.GetNodeId(2)].Connected = false;
+ env.RestartCms();
+
+ env.CheckPermissionRequest("user", false, true, false, true, MODE_MAX_AVAILABILITY, TStatus::DISALLOW_TEMP,
+ MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(4), 60000000, "storage"));
+ env.CheckPermissionRequest("user", false, true, false, true, MODE_KEEP_AVAILABLE, TStatus::ALLOW,
+ MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(4), 60000000, "storage"));
+
+ TFakeNodeWhiteboardService::Info[env.GetNodeId(3)].Connected = false;
+ env.RestartCms();
+
+ env.CheckPermissionRequest("user", false, true, false, true, MODE_KEEP_AVAILABLE, TStatus::DISALLOW_TEMP,
+ MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(4), 60000000, "storage"));
+ }
+
+
+ Y_UNIT_TEST(Mirror3dcPermissions)
+ {
+ TTestEnvOpts options;
+ options.UseMirror3dcErasure = true;
+ options.NodeCount = 18;
+ options.VDisks = 9;
+ options.NRings = 3;
+ options.DataCenterCount = 3;
+ options.RingSize = 2;
+ options.NToSelect = 2;
+
+ TCmsTestEnv env(options);
+
+ // 3dc disabled
+ TFakeNodeWhiteboardService::Info[env.GetNodeId(7)].Connected = false;
+ TFakeNodeWhiteboardService::Info[env.GetNodeId(4)].Connected = false;
+ TFakeNodeWhiteboardService::Info[env.GetNodeId(1)].Connected = false;
+ env.RestartCms();
+
+ env.CheckPermissionRequest("user", false, true, false, true, MODE_KEEP_AVAILABLE, TStatus::DISALLOW_TEMP,
+ MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(5), 60000000, "storage"));
+
+ // 2dc disabled
+ TFakeNodeWhiteboardService::Info[env.GetNodeId(7)].Connected = true;
+ env.RestartCms();
+
+ env.CheckPermissionRequest("user", false, true, false, true, MODE_KEEP_AVAILABLE, TStatus::DISALLOW_TEMP,
+ MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(7), 60000000, "storage"));
+
+
+ env.CheckPermissionRequest("user", false, true, false, true, MODE_KEEP_AVAILABLE, TStatus::ALLOW,
+ MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(5), 60000000, "storage"));
+
+ TFakeNodeWhiteboardService::Info[env.GetNodeId(5)].Connected = false;
+ env.RestartCms();
+
+ env.CheckPermissionRequest("user", false, true, false, true, MODE_KEEP_AVAILABLE, TStatus::DISALLOW_TEMP,
+ MakeAction(TAction::RESTART_SERVICES, env.GetNodeId(2), 60000000, "storage"));
+ }
+}
} // NCmsTest
} // NKikimr
diff --git a/ydb/core/cms/cms_ut_common.cpp b/ydb/core/cms/cms_ut_common.cpp
index 7141476370..5183d29ac5 100644
--- a/ydb/core/cms/cms_ut_common.cpp
+++ b/ydb/core/cms/cms_ut_common.cpp
@@ -212,14 +212,19 @@ public:
};
void GenerateExtendedInfo(TTestActorRuntime &runtime, NKikimrBlobStorage::TBaseConfig *config,
- ui32 pdisks, ui32 vdiskPerPdisk = 4, const TNodeTenantsMap &tenants = {})
+ ui32 pdisks, ui32 vdiskPerPdisk = 4, const TNodeTenantsMap &tenants = {}, bool useMirror3dcErasure = false)
{
TGuard<TMutex> guard(TFakeNodeWhiteboardService::Mutex);
ui32 numNodes = runtime.GetNodeCount();
ui32 numNodeGroups = pdisks * vdiskPerPdisk;
ui32 numGroups;
- if (numNodes >= 8)
+ if (numNodes < 9)
+ useMirror3dcErasure = false;
+
+ if (useMirror3dcErasure)
+ numGroups = numNodes * numNodeGroups / 9;
+ else if (numNodes >= 8)
numGroups = numNodes * numNodeGroups / 8;
else
numGroups = numNodes * numNodeGroups;
@@ -229,7 +234,9 @@ void GenerateExtendedInfo(TTestActorRuntime &runtime, NKikimrBlobStorage::TBaseC
auto &group = *config->AddGroup();
group.SetGroupId(groupId);
group.SetGroupGeneration(1);
- if (numNodes >= 8)
+ if (useMirror3dcErasure)
+ group.SetErasureSpecies("mirror-3-dc");
+ else if (numNodes >= 8)
group.SetErasureSpecies("block-4-2");
else
group.SetErasureSpecies("none");
@@ -254,6 +261,8 @@ void GenerateExtendedInfo(TTestActorRuntime &runtime, NKikimrBlobStorage::TBaseC
ui32 groupShift = (nodeIndex / 8) * pdisks * vdiskPerPdisk;
if (numNodes < 8)
groupShift = nodeIndex * numNodeGroups;
+ if (useMirror3dcErasure)
+ groupShift = (nodeIndex / 9) * pdisks * vdiskPerPdisk;
for (ui32 pdiskIndex = 0; pdiskIndex < pdisks; ++pdiskIndex) {
auto pdiskId = nodeId * pdisks + pdiskIndex;
@@ -277,7 +286,11 @@ void GenerateExtendedInfo(TTestActorRuntime &runtime, NKikimrBlobStorage::TBaseC
for (ui8 vdiskIndex = 0; vdiskIndex < vdiskPerPdisk; ++vdiskIndex) {
ui32 vdiskId = pdiskIndex * vdiskPerPdisk + vdiskIndex;
ui32 groupId = groupShift + vdiskId;
- TVDiskID id = {(ui8)groupId, 1, 0, (ui8)(nodeIndex % 8), (ui8)0};
+ ui32 failRealm = 0;
+ if (useMirror3dcErasure)
+ failRealm = nodeIndex % 8;
+
+ TVDiskID id = {(ui8)groupId, 1, (ui8)failRealm, (ui8)(nodeIndex % 8), (ui8)0};
auto &vdisk = node.VDiskStateInfo[id];
VDiskIDFromVDiskID(id, vdisk.MutableVDiskId());
@@ -294,6 +307,7 @@ void GenerateExtendedInfo(TTestActorRuntime &runtime, NKikimrBlobStorage::TBaseC
vdiskConfig.MutableVSlotId()->SetVSlotId(1000 + vdiskIndex);
vdiskConfig.SetGroupId(groupId);
vdiskConfig.SetGroupGeneration(1);
+ vdiskConfig.SetFailRealmIdx(failRealm);
vdiskConfig.SetFailDomainIdx(nodeIndex % 8);
config->MutableGroup(groupId)->AddVSlotId()
@@ -418,6 +432,7 @@ static void SetupServices(TTestActorRuntime &runtime,
dnsConfig->MaxStaticNodeId = 1000;
dnsConfig->MaxDynamicNodeId = 2000;
runtime.GetAppData().DynamicNameserviceConfig = dnsConfig;
+ runtime.GetAppData().DisableCheckingSysNodesCms = true;
if (!runtime.IsRealThreads()) {
TDispatchOptions options;
@@ -436,7 +451,7 @@ static void SetupServices(TTestActorRuntime &runtime,
} // anonymous namespace
TCmsTestEnv::TCmsTestEnv(const TTestEnvOpts &options)
- : TTestBasicRuntime(options.NodeCount, false)
+ : TTestBasicRuntime(options.NodeCount, options.DataCenterCount, false)
, CmsId(MakeCmsID(0))
{
TFakeNodeWhiteboardService::Config.MutableResponse()->SetSuccess(true);
@@ -445,7 +460,7 @@ TCmsTestEnv::TCmsTestEnv(const TTestEnvOpts &options)
status.SetSuccess(true);
auto *config = status.MutableBaseConfig();
- GenerateExtendedInfo(*this, config, options.VDisks, 4, options.Tenants);
+ GenerateExtendedInfo(*this, config, options.VDisks, 4, options.Tenants, options.UseMirror3dcErasure);
// Set observer to pass fake base blobstorage config.
auto redirectConfigRequest = [](TTestActorRuntimeBase&,
@@ -586,6 +601,10 @@ void TCmsTestEnv::SetLimits(ui32 tenantLimit,
SetCmsConfig(config);
}
+void TCmsTestEnv::EnableSysNodeChecking() {
+ GetAppData().DisableCheckingSysNodesCms = false;
+}
+
NKikimrCms::TClusterState
TCmsTestEnv::RequestState(const NKikimrCms::TClusterStateRequest &request,
NKikimrCms::TStatus::ECode code)
@@ -746,6 +765,18 @@ TCmsTestEnv::CheckRequest(const TString &user,
return rec;
}
+
+void TCmsTestEnv::CheckWalleStoreTaskIsFailed(NCms::TEvCms::TEvStoreWalleTask* req)
+{
+ TString TaskId = req->Task.TaskId;
+ SendToPipe(CmsId, Sender, req, 0, GetPipeConfigWithRetries());
+
+ TAutoPtr<IEventHandle> handle;
+ auto reply = GrabEdgeEventRethrow<TEvCms::TEvStoreWalleTaskFailed>(handle, TDuration::Seconds(30));
+ UNIT_ASSERT(reply);
+ UNIT_ASSERT_VALUES_EQUAL(reply->TaskId, TaskId);
+}
+
void TCmsTestEnv::CheckWalleCreateTask(TAutoPtr<NCms::TEvCms::TEvWalleCreateTaskRequest> req,
NKikimrCms::TStatus::ECode code)
{
diff --git a/ydb/core/cms/cms_ut_common.h b/ydb/core/cms/cms_ut_common.h
index 588617d9b8..9556e78a55 100644
--- a/ydb/core/cms/cms_ut_common.h
+++ b/ydb/core/cms/cms_ut_common.h
@@ -69,11 +69,13 @@ public:
struct TTestEnvOpts {
ui32 NodeCount;
ui32 VDisks;
-
ui32 NToSelect;
ui32 NRings;
ui32 RingSize;
+ ui32 DataCenterCount;
TNodeTenantsMap Tenants;
+ bool UseMirror3dcErasure;
+
TTestEnvOpts() = default;
@@ -84,8 +86,10 @@ struct TTestEnvOpts {
, VDisks(vdisks)
, NToSelect(1)
, NRings(1)
- , RingSize(3)
- , Tenants(tenants)
+ , RingSize(nodeCount)
+ , DataCenterCount(1)
+ , Tenants(tenants)
+ , UseMirror3dcErasure(false)
{
}
};
@@ -115,7 +119,8 @@ public:
ui32 tenantRatioLimit,
ui32 clusterLimit,
ui32 clusterRatioLimit);
-
+
+ void EnableSysNodeChecking();
TIntrusiveConstPtr<NKikimr::TStateStorageInfo> GetStateStorageInfo();
NKikimrCms::TClusterState
@@ -270,6 +275,8 @@ public:
return CheckRequest(user, id, dry, NKikimrCms::MODE_MAX_AVAILABILITY, res, count);
}
+ void CheckWalleStoreTaskIsFailed(NCms::TEvCms::TEvStoreWalleTask* req);
+
template<typename... Ts>
void CheckWalleCreateTask(const TString &id,
const TString &action,
diff --git a/ydb/core/cms/console/CMakeLists.txt b/ydb/core/cms/console/CMakeLists.txt
index b2315740d8..cf2fb75d54 100644
--- a/ydb/core/cms/console/CMakeLists.txt
+++ b/ydb/core/cms/console/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
+add_subdirectory(validators)
add_library(core-cms-console)
target_link_libraries(core-cms-console PUBLIC
diff --git a/ydb/core/cms/console/configs_cache.h b/ydb/core/cms/console/configs_cache.h
index 08ba529799..fb4e926c7f 100644
--- a/ydb/core/cms/console/configs_cache.h
+++ b/ydb/core/cms/console/configs_cache.h
@@ -52,7 +52,7 @@ private:
NKikimrConfig::TAppConfig CurrentConfig;
- NMonitoring::TDynamicCounters::TCounterPtr OutdatedConfiguration;
+ ::NMonitoring::TDynamicCounters::TCounterPtr OutdatedConfiguration;
};
IActor *CreateConfigsCacheActor(const TString &pathToConfigCacheFile);
diff --git a/ydb/core/cms/console/console_impl.h b/ydb/core/cms/console/console_impl.h
index 0894337c3e..e9683c2249 100644
--- a/ydb/core/cms/console/console_impl.h
+++ b/ydb/core/cms/console/console_impl.h
@@ -25,7 +25,7 @@ namespace NConsole {
using NTabletFlatExecutor::ITransaction;
using NTabletFlatExecutor::TTransactionBase;
using NTabletFlatExecutor::TTabletExecutedFlat;
-using NMonitoring::TDynamicCounterPtr;
+using ::NMonitoring::TDynamicCounterPtr;
class TConfigsManager;
class TTenantsManager;
diff --git a/ydb/core/cms/console/console_tenants_manager.h b/ydb/core/cms/console/console_tenants_manager.h
index 3a769a9d56..0d35f760d6 100644
--- a/ydb/core/cms/console/console_tenants_manager.h
+++ b/ydb/core/cms/console/console_tenants_manager.h
@@ -35,7 +35,7 @@ using NTabletFlatExecutor::TTransactionContext;
using NSchemeShard::TEvSchemeShard;
using NTenantSlotBroker::TEvTenantSlotBroker;
using NTenantSlotBroker::TSlotDescription;
-using NMonitoring::TDynamicCounterPtr;
+using ::NMonitoring::TDynamicCounterPtr;
class TConsole;
@@ -95,7 +95,7 @@ public:
static const THashSet<ECounter> DerivSensors;
public:
- using TCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
TCounters(TDynamicCounterPtr counters)
: Counters(counters)
diff --git a/ydb/core/cms/console/console_ut_tenants.cpp b/ydb/core/cms/console/console_ut_tenants.cpp
index f2709dbf6e..1bad572d8b 100644
--- a/ydb/core/cms/console/console_ut_tenants.cpp
+++ b/ydb/core/cms/console/console_ut_tenants.cpp
@@ -351,7 +351,7 @@ void CheckCounter(TTenantTestRuntime &runtime,
TTenantsManager::ECounter counter,
ui64 value)
{
- NMonitoring::TDynamicCounterPtr counters;
+ ::NMonitoring::TDynamicCounterPtr counters;
for (ui32 i = 0; i < runtime.GetNodeCount() && !counters; ++i) {
auto tablets = GetServiceCounters(runtime.GetDynamicCounters(i), "tablets");
counters = tablets->FindSubgroup("type", "CONSOLE");
diff --git a/ydb/core/cms/console/net_classifier_updater.cpp b/ydb/core/cms/console/net_classifier_updater.cpp
index d863c748a0..daee724800 100644
--- a/ydb/core/cms/console/net_classifier_updater.cpp
+++ b/ydb/core/cms/console/net_classifier_updater.cpp
@@ -176,7 +176,7 @@ private:
auto FormNetDataFromJson(TStringBuf jsonData) const {
NKikimrNetClassifier::TNetData netData;
- TVector<TString> tagsToFilter(UpdaterConfig().GetNetBoxTags().begin(), UpdaterConfig().GetNetBoxTags().end());
+ THashSet<TString> tagsToFilter(UpdaterConfig().GetNetBoxTags().begin(), UpdaterConfig().GetNetBoxTags().end());
NJson::TJsonValue value;
bool res = NJson::ReadJsonTree(jsonData, &value);
if (!res)
@@ -188,20 +188,31 @@ private:
return NKikimrNetClassifier::TNetData{};
TString mask = v["prefix"].GetString();
- if (!v["tags"].IsArray() || v["tags"].GetArray().size() == 0)
- return NKikimrNetClassifier::TNetData{};
- const auto& tags = v["tags"].GetArray();
TString label;
- for (auto& tag : tags) {
- if (!tag.IsString())
+ auto customFields = v.GetValueByPath("custom_fields");
+ if (customFields) {
+ if (!customFields->IsMap() || !(*customFields)["owner"].IsString()) {
return NKikimrNetClassifier::TNetData{};
- if (std::count(tagsToFilter.begin(), tagsToFilter.end(), tag.GetString())) {
- label = tag.GetString();
- break;
}
- }
- if (tagsToFilter.empty()) {
- label = tags.front().GetString();
+ auto owner = (*customFields)["owner"].GetString();
+ if (tagsToFilter.empty() || tagsToFilter.contains(owner)) {
+ label = owner;
+ }
+ } else {
+ if (!v["tags"].IsArray() || v["tags"].GetArray().size() == 0)
+ return NKikimrNetClassifier::TNetData{};
+ const auto& tags = v["tags"].GetArray();
+ for (auto& tag : tags) {
+ if (!tag.IsString())
+ return NKikimrNetClassifier::TNetData{};
+ if (tagsToFilter.contains(tag.GetString())) {
+ label = tag.GetString();
+ break;
+ }
+ }
+ if (tagsToFilter.empty()) {
+ label = tags.front().GetString();
+ }
}
if (!label) {
continue;
diff --git a/ydb/core/cms/console/net_classifier_updater_ut.cpp b/ydb/core/cms/console/net_classifier_updater_ut.cpp
index b340b1c317..7ebee659f8 100644
--- a/ydb/core/cms/console/net_classifier_updater_ut.cpp
+++ b/ydb/core/cms/console/net_classifier_updater_ut.cpp
@@ -189,68 +189,157 @@ Y_UNIT_TEST_SUITE(TNetClassifierUpdaterTest) {
TestGetUpdatesFromHttpServer(ConvertToJson(netData), netData, TNetClassifierUpdaterConfig::NETBOX);
}
- Y_UNIT_TEST(TestFiltrationByNetboxTags) {
- const TString netboxResponce = "{ \
- \"count\": 5, \
- \"results\": [ \
- {\"prefix\": \"5.45.192.0/18\", \"tags\": [\"asd\", \"zxcv\"]}, \
- {\"prefix\": \"5.255.192.0/18\", \"tags\": [\"zxcv\", \"asd\"]}, \
- {\"prefix\": \"37.9.64.0/18\", \"tags\": [\"zxcv\"]}, \
- {\"prefix\": \"95.108.128.0/17\", \"tags\": [\"asd\"]}, \
- {\"prefix\": \"172.24.0.0/13\", \"tags\": [\"qwerty\"]} \
- ]}";
-
+ void RunNetBoxTest(const TString& netboxResponce, const TVector<TString>& tags, const TVector<std::pair<TString, TString>>& expected) {
auto addMask = [](NKikimrNetClassifier::TNetData& data, const TString& mask, const TString& label) {
auto& subnet = *data.AddSubnets();
subnet.SetMask(mask);
subnet.SetLabel(label);
};
-
- {
- NKikimrNetClassifier::TNetData data;
- addMask(data, "5.45.192.0/18", "asd");
- addMask(data, "5.255.192.0/18", "zxcv");
- addMask(data, "37.9.64.0/18", "zxcv");
- addMask(data, "95.108.128.0/17", "asd");
- addMask(data, "172.24.0.0/13", "qwerty");
- TestGetUpdatesFromHttpServer(netboxResponce, data, TNetClassifierUpdaterConfig::NETBOX);
- }
- {
- NKikimrNetClassifier::TNetData data;
- addMask(data, "5.45.192.0/18", "asd");
- addMask(data, "5.255.192.0/18", "zxcv");
- addMask(data, "37.9.64.0/18", "zxcv");
- addMask(data, "95.108.128.0/17", "asd");
- addMask(data, "172.24.0.0/13", "qwerty");
- TestGetUpdatesFromHttpServer(netboxResponce, data, TNetClassifierUpdaterConfig::NETBOX, {"asd", "zxcv", "qwerty", "faketag"});
- }
- {
- NKikimrNetClassifier::TNetData data;
- addMask(data, "5.45.192.0/18", "asd");
- addMask(data, "5.255.192.0/18", "zxcv");
- addMask(data, "37.9.64.0/18", "zxcv");
- addMask(data, "95.108.128.0/17", "asd");
- TestGetUpdatesFromHttpServer(netboxResponce, data, TNetClassifierUpdaterConfig::NETBOX, {"zxcv", "asd"});
- }
- {
- NKikimrNetClassifier::TNetData data;
- addMask(data, "5.45.192.0/18", "zxcv");
- addMask(data, "5.255.192.0/18", "zxcv");
- addMask(data, "37.9.64.0/18", "zxcv");
- TestGetUpdatesFromHttpServer(netboxResponce, data, TNetClassifierUpdaterConfig::NETBOX, {"zxcv"});
- }
- {
- NKikimrNetClassifier::TNetData data;
- addMask(data, "5.45.192.0/18", "asd");
- addMask(data, "5.255.192.0/18", "asd");
- addMask(data, "95.108.128.0/17", "asd");
- TestGetUpdatesFromHttpServer(netboxResponce, data, TNetClassifierUpdaterConfig::NETBOX, {"asd"});
- }
- {
- NKikimrNetClassifier::TNetData data;
- addMask(data, "172.24.0.0/13", "qwerty");
- TestGetUpdatesFromHttpServer(netboxResponce, data, TNetClassifierUpdaterConfig::NETBOX, {"qwerty"});
+ NKikimrNetClassifier::TNetData data;
+ for (auto& net : expected) {
+ addMask(data, net.first, net.second);
}
+ TestGetUpdatesFromHttpServer(netboxResponce, data, TNetClassifierUpdaterConfig::NETBOX, tags);
+ }
+
+ void RunNetBoxCommonTests(const TString& netboxResponce) {
+ RunNetBoxTest(
+ netboxResponce,
+ {},
+ {
+ {"5.45.192.0/18", "asd"},
+ {"5.255.192.0/18", "zxcv"},
+ {"37.9.64.0/18", "zxcv"},
+ {"95.108.128.0/17", "asd"},
+ {"172.24.0.0/13", "qwerty"}
+ }
+ );
+ RunNetBoxTest(
+ netboxResponce,
+ {"asd2", "asd", "zxcv", "qwerty", "faketag"},
+ {
+ {"5.45.192.0/18", "asd"},
+ {"5.255.192.0/18", "zxcv"},
+ {"37.9.64.0/18", "zxcv"},
+ {"95.108.128.0/17", "asd"},
+ {"172.24.0.0/13", "qwerty"}
+ }
+ );
+ RunNetBoxTest(
+ netboxResponce,
+ {"asd", "zxcv"},
+ {
+ {"5.45.192.0/18", "asd"},
+ {"5.255.192.0/18", "zxcv"},
+ {"37.9.64.0/18", "zxcv"},
+ {"95.108.128.0/17", "asd"}
+ }
+ );
+ RunNetBoxTest(
+ netboxResponce,
+ {"zxcv", "asd"},
+ {
+ {"5.45.192.0/18", "asd"},
+ {"5.255.192.0/18", "zxcv"},
+ {"37.9.64.0/18", "zxcv"},
+ {"95.108.128.0/17", "asd"}
+ }
+ );
+ RunNetBoxTest(
+ netboxResponce,
+ {"qwerty"},
+ {
+ {"172.24.0.0/13", "qwerty"}
+ }
+ );
+ }
+
+ void RunTestWithCastomFields(const TString& netboxResponce) {
+ RunNetBoxCommonTests(netboxResponce);
+ RunNetBoxTest(
+ netboxResponce,
+ {"asd"},
+ {
+ {"5.45.192.0/18", "asd"},
+ {"95.108.128.0/17", "asd"}
+ }
+ );
+ RunNetBoxTest(
+ netboxResponce,
+ {"zxcv"},
+ {
+ {"5.255.192.0/18", "zxcv"},
+ {"37.9.64.0/18", "zxcv"}
+ }
+ );
+ }
+
+ Y_UNIT_TEST(TestFiltrationByNetboxCustomFieldsAndTags) {
+ const TString netboxResponce = R"__(
+ {
+ "count": 5,
+ "results": [
+ {"prefix": "5.45.192.0/18", "custom_fields": {"owner": "asd"}, "tags": ["asd", "zxcv"]},
+ {"prefix": "5.255.192.0/18", "custom_fields": {"owner": "zxcv"}, "tags": ["zxcv", "asd"]},
+ {"prefix": "37.9.64.0/18", "custom_fields": {"owner": "zxcv"}, "tags": ["zxcv"]},
+ {"prefix": "95.108.128.0/17", "custom_fields": {"owner": "asd"}, "tags": ["asd"]},
+ {"prefix": "172.24.0.0/13", "custom_fields": {"owner": "qwerty"}, "tags": ["qwerty"]}
+ ]
+ }
+ )__";
+ RunTestWithCastomFields(netboxResponce);
+ }
+
+ Y_UNIT_TEST(TestFiltrationByNetboxCustomFieldsOnly) {
+ const TString netboxResponce = R"__(
+ {
+ "count": 5,
+ "results": [
+ {"prefix": "5.45.192.0/18", "custom_fields": {"owner": "asd"}},
+ {"prefix": "5.255.192.0/18", "custom_fields": {"owner": "zxcv"}},
+ {"prefix": "37.9.64.0/18", "custom_fields": {"owner": "zxcv"}},
+ {"prefix": "95.108.128.0/17", "custom_fields": {"owner": "asd"}},
+ {"prefix": "172.24.0.0/13", "custom_fields": {"owner": "qwerty"}}
+ ]
+ }
+ )__";
+
+ RunTestWithCastomFields(netboxResponce);
+ }
+
+ Y_UNIT_TEST(TestFiltrationByNetboxTags) {
+ const TString netboxResponce = R"__(
+ {
+ "count": 5,
+ "results": [
+ {"prefix": "5.45.192.0/18", "tags": ["asd", "zxcv"]},
+ {"prefix": "5.255.192.0/18", "tags": ["zxcv", "asd"]},
+ {"prefix": "37.9.64.0/18", "tags": ["zxcv"]},
+ {"prefix": "95.108.128.0/17", "tags": ["asd"]},
+ {"prefix": "172.24.0.0/13", "tags": ["qwerty"]}
+ ]
+ }
+ )__";
+ RunNetBoxCommonTests(netboxResponce);
+
+ RunNetBoxTest(
+ netboxResponce,
+ {"asd"},
+ {
+ {"5.45.192.0/18", "asd"},
+ {"5.255.192.0/18", "asd"},
+ {"95.108.128.0/17", "asd"}
+ }
+ );
+ RunNetBoxTest(
+ netboxResponce,
+ {"zxcv"},
+ {
+ {"5.45.192.0/18", "zxcv"},
+ {"5.255.192.0/18", "zxcv"},
+ {"37.9.64.0/18", "zxcv"}
+ }
+ );
}
}
diff --git a/ydb/core/cms/console/ut/CMakeLists.txt b/ydb/core/cms/console/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/cms/console/ut/CMakeLists.txt
+++ b/ydb/core/cms/console/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/cms/console/validators/CMakeLists.txt b/ydb/core/cms/console/validators/CMakeLists.txt
index 4fbc198cd0..622a61a384 100644
--- a/ydb/core/cms/console/validators/CMakeLists.txt
+++ b/ydb/core/cms/console/validators/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(cms-console-validators)
target_link_libraries(cms-console-validators PUBLIC
diff --git a/ydb/core/cms/console/validators/ut/CMakeLists.txt b/ydb/core/cms/console/validators/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/cms/console/validators/ut/CMakeLists.txt
+++ b/ydb/core/cms/console/validators/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/cms/erasure_checkers.cpp b/ydb/core/cms/erasure_checkers.cpp
new file mode 100644
index 0000000000..41d59689fa
--- /dev/null
+++ b/ydb/core/cms/erasure_checkers.cpp
@@ -0,0 +1,222 @@
+#include "erasure_checkers.h"
+
+namespace NKikimr {
+namespace NCms {
+
+bool TErasureCounterBase::IsDown(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration& retryTime,
+ TErrorInfo& error)
+{
+ const auto& node = info->Node(vdisk.NodeId);
+ const auto& pdisk = info->PDisk(vdisk.PDiskId);
+ const auto defaultDeadline = TActivationContext::Now() + retryTime;
+
+ // Check we received info for PDisk.
+ if (!pdisk.NodeId) {
+ ++Down;
+ error.Reason = TStringBuilder() << "Missing info for " << pdisk.ItemName();
+ return false;
+ }
+
+ return (node.NodeId != VDisk.NodeId && node.IsDown(error, defaultDeadline))
+ || (pdisk.PDiskId != VDisk.PDiskId && pdisk.IsDown(error, defaultDeadline))
+ || vdisk.IsDown(error, defaultDeadline);
+}
+
+bool TErasureCounterBase::IsLocked(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration& retryTime,
+ TDuration& duration,
+ TErrorInfo& error)
+{
+ const auto& node = info->Node(vdisk.NodeId);
+ const auto& pdisk = info->PDisk(vdisk.PDiskId);
+
+ // Check we received info for VDisk.
+ if (!vdisk.NodeId || !vdisk.PDiskId) {
+ ++Down;
+ error.Code = TStatus::DISALLOW_TEMP;
+ error.Reason = TStringBuilder() << "Missing info for " << vdisk.ItemName();
+ return false;
+ }
+
+ return node.IsLocked(error, retryTime, TActivationContext::Now(), duration)
+ || pdisk.IsLocked(error, retryTime, TActivationContext::Now(), duration)
+ || vdisk.IsLocked(error, retryTime, TActivationContext::Now(), duration);
+}
+
+bool TErasureCounterBase::GroupAlreadyHasLockedDisks(TErrorInfo& error) const
+{
+ if (Locked && error.Code == TStatus::DISALLOW) {
+ error.Reason = "Group already has locked disks";
+ return true;
+ }
+ return false;
+}
+
+bool TErasureCounterBase::CheckForMaxAvailability(TErrorInfo& error,
+ TInstant& defaultDeadline) const
+{
+ if (Locked + Down > 1) {
+ error.Code = TStatus::DISALLOW_TEMP;
+ error.Reason = TStringBuilder() << "Issue in affected group " << GroupId
+ << ". " << "Too many locked and down vdisks: " << Locked + Down;
+
+ error.Deadline = defaultDeadline;
+ return false;
+ }
+ return true;
+}
+
+void TDefaultErasureCounter::CountVDisk(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration retryTime,
+ TDuration duration,
+ TErrorInfo& error)
+{
+ Y_VERIFY_DEBUG(vdisk.VDiskId != VDisk.VDiskId);
+
+ // Check locks.
+ TErrorInfo err;
+ if (IsLocked(vdisk, info, retryTime, duration, err)) {
+ ++Locked;
+ error.Code = err.Code;
+ error.Reason = TStringBuilder() << "Issue in affected group " << GroupId
+ << ". " << err.Reason;
+ error.Deadline = Max(error.Deadline, err.Deadline);
+ return;
+ }
+
+ // Check if disk is down.
+ if (IsDown(vdisk, info, retryTime, err)) {
+ ++Down;
+ error.Code = err.Code;
+ error.Reason = TStringBuilder() << "Issue in affected group " << GroupId
+ << ". " << err.Reason;
+ error.Deadline = Max(error.Deadline, err.Deadline);
+ }
+}
+
+bool TDefaultErasureCounter::CheckForKeepAvailability(TClusterInfoPtr info,
+ TErrorInfo& error,
+ TInstant& defaultDeadline) const
+{
+ if (Down + Locked > info->BSGroup(GroupId).Erasure.ParityParts()) {
+ error.Code = TStatus::DISALLOW_TEMP;
+ error.Deadline = defaultDeadline;
+ return false;
+ }
+ return true;
+}
+
+bool TMirror3dcCounter::CheckForKeepAvailability(TClusterInfoPtr info,
+ TErrorInfo& error,
+ TInstant& defaultDeadline) const
+{
+ Y_UNUSED(info);
+
+ if (DataCenterDisabledNodes.size() <= 1)
+ return true;
+
+ if (DataCenterDisabledNodes.size() == 2
+ && (DataCenterDisabledNodes.begin()->second <= 1
+ || (++DataCenterDisabledNodes.begin())->second <= 1))
+ {
+ return true;
+ }
+
+ if (DataCenterDisabledNodes.size() > 2) {
+ error.Code = TStatus::DISALLOW_TEMP;
+ error.Reason = TStringBuilder() << "Issue in affected group " << GroupId
+ << ". Too many data centers have unavailable vdisks: "
+ << DataCenterDisabledNodes.size();
+ error.Deadline = defaultDeadline;
+ return false;
+ }
+
+ error.Code = TStatus::DISALLOW_TEMP;
+ error.Reason = TStringBuilder() << "Issue in affected group " << GroupId
+ << ". Data centers have too many unavailable vdisks";
+ error.Deadline = defaultDeadline;
+
+ return false;
+}
+
+void TMirror3dcCounter::CountVDisk(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration retryTime,
+ TDuration duration,
+ TErrorInfo& error)
+{
+ Y_VERIFY_DEBUG(vdisk.VDiskId != VDisk.VDiskId);
+
+ // Check locks.
+ TErrorInfo err;
+ if (IsLocked(vdisk, info, retryTime, duration, err)
+ || IsDown(vdisk, info, retryTime, err)) {
+ error.Code = err.Code;
+ error.Reason = TStringBuilder() << "Issue in affected group " << GroupId
+ << ". " << err.Reason;
+ error.Deadline = Max(error.Deadline, err.Deadline);
+ ++DataCenterDisabledNodes[vdisk.VDiskId.FailRealm / 3];
+ }
+}
+
+void TMirror3dcCounter::CountGroupState(TClusterInfoPtr info,
+ TDuration retryTime,
+ TDuration duration,
+ TErrorInfo &error)
+{
+ for (const auto &vdId : info->BSGroup(GroupId).VDisks) {
+ if (vdId != VDisk.VDiskId)
+ CountVDisk(info->VDisk(vdId), info, retryTime, duration, error);
+ }
+ ++Locked;
+ ++DataCenterDisabledNodes[VDisk.VDiskId.FailRealm / 3];
+}
+
+void TDefaultErasureCounter::CountGroupState(TClusterInfoPtr info,
+ TDuration retryTime,
+ TDuration duration,
+ TErrorInfo &error)
+{
+ for (const auto &vdId : info->BSGroup(GroupId).VDisks) {
+ if (vdId != VDisk.VDiskId)
+ CountVDisk(info->VDisk(vdId), info, retryTime, duration, error);
+ }
+ ++Locked;
+}
+
+TSimpleSharedPtr<IErasureCounter> CreateErasureCounter(TErasureType::EErasureSpecies es,
+ const TVDiskInfo& vdisk, ui32 groupId)
+{
+ switch (es) {
+ case TErasureType::ErasureNone:
+ case TErasureType::ErasureMirror3:
+ case TErasureType::Erasure3Plus1Block:
+ case TErasureType::Erasure3Plus1Stripe:
+ case TErasureType::Erasure4Plus2Block:
+ case TErasureType::Erasure3Plus2Block:
+ case TErasureType::Erasure4Plus2Stripe:
+ case TErasureType::Erasure3Plus2Stripe:
+ case TErasureType::ErasureMirror3Plus2:
+ case TErasureType::Erasure4Plus3Block:
+ case TErasureType::Erasure4Plus3Stripe:
+ case TErasureType::Erasure3Plus3Block:
+ case TErasureType::Erasure3Plus3Stripe:
+ case TErasureType::Erasure2Plus3Block:
+ case TErasureType::Erasure2Plus3Stripe:
+ case TErasureType::Erasure2Plus2Block:
+ case TErasureType::Erasure2Plus2Stripe:
+ case TErasureType::ErasureMirror3of4:
+ return TSimpleSharedPtr<IErasureCounter>(new TDefaultErasureCounter(vdisk, groupId));
+ case TErasureType::ErasureMirror3dc:
+ return TSimpleSharedPtr<IErasureCounter>(new TMirror3dcCounter(vdisk, groupId));
+ default:
+ Y_FAIL("Unknown erasure type: %d", es);
+ }
+}
+
+} // namespace NCms
+} // namespace NKikimr
diff --git a/ydb/core/cms/erasure_checkers.h b/ydb/core/cms/erasure_checkers.h
new file mode 100644
index 0000000000..656409ee33
--- /dev/null
+++ b/ydb/core/cms/erasure_checkers.h
@@ -0,0 +1,109 @@
+#pragma once
+
+#include "defs.h"
+
+#include "cluster_info.h"
+
+#include <ydb/core/erasure/erasure.h>
+#include <ydb/core/protos/cms.pb.h>
+
+namespace NKikimr {
+namespace NCms {
+
+using namespace NKikimrCms;
+
+class IErasureCounter {
+public:
+ virtual ~IErasureCounter() = default;
+
+ virtual bool GroupAlreadyHasLockedDisks(TErrorInfo& error) const = 0;
+ virtual bool CheckForMaxAvailability(TErrorInfo& error, TInstant& defaultDeadline) const = 0;
+ virtual bool CheckForKeepAvailability(TClusterInfoPtr info, TErrorInfo& error, TInstant& defaultDeadline) const = 0;
+ virtual void CountGroupState(TClusterInfoPtr info,
+ TDuration retryTime,
+ TDuration duration,
+ TErrorInfo& error) = 0;
+ virtual void CountVDisk(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration retryTime,
+ TDuration duration,
+ TErrorInfo& error) = 0;
+};
+
+class TErasureCounterBase: public IErasureCounter {
+protected:
+ ui32 Down;
+ ui32 Locked;
+ const TVDiskInfo& VDisk;
+ const ui32 GroupId;
+
+protected:
+ bool IsDown(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration& retryTime,
+ TErrorInfo& error);
+ bool IsLocked(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration& retryTime,
+ TDuration& duration,
+ TErrorInfo& error);
+
+public:
+ TErasureCounterBase(const TVDiskInfo& vdisk, ui32 groupId)
+ : Down(0)
+ , Locked(0)
+ , VDisk(vdisk)
+ , GroupId(groupId)
+ {
+ }
+
+ bool GroupAlreadyHasLockedDisks(TErrorInfo& error) const final;
+ bool CheckForMaxAvailability(TErrorInfo& error, TInstant& defaultDeadline) const final;
+};
+
+class TDefaultErasureCounter: public TErasureCounterBase {
+public:
+ TDefaultErasureCounter(const TVDiskInfo& vdisk, ui32 groupId)
+ : TErasureCounterBase(vdisk, groupId)
+ {
+ }
+
+ void CountGroupState(TClusterInfoPtr info, TDuration retryTime,
+ TDuration duration, TErrorInfo &error) override;
+ bool CheckForKeepAvailability(TClusterInfoPtr info,
+ TErrorInfo& error,
+ TInstant& defaultDeadline) const override;
+ void CountVDisk(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration retryTime,
+ TDuration duration,
+ TErrorInfo& error) override;
+};
+
+class TMirror3dcCounter: public TErasureCounterBase {
+private:
+ THashMap<ui8, ui32> DataCenterDisabledNodes;
+
+public:
+ TMirror3dcCounter(const TVDiskInfo& vdisk, ui32 groupId)
+ : TErasureCounterBase(vdisk, groupId)
+ {
+ }
+
+ void CountGroupState(TClusterInfoPtr info, TDuration retryTime,
+ TDuration duration, TErrorInfo &error) override;
+ bool CheckForKeepAvailability(TClusterInfoPtr info,
+ TErrorInfo& error,
+ TInstant& defaultDeadline) const override;
+ void CountVDisk(const TVDiskInfo& vdisk,
+ TClusterInfoPtr info,
+ TDuration retryTime,
+ TDuration duration,
+ TErrorInfo& error) override;
+};
+
+TSimpleSharedPtr<IErasureCounter>
+CreateErasureCounter(TErasureType::EErasureSpecies es,
+ const TVDiskInfo& vdisk, ui32 groupId);
+}
+}
diff --git a/ydb/core/cms/info_collector.cpp b/ydb/core/cms/info_collector.cpp
index 02766b3e49..afa2b64e7f 100644
--- a/ydb/core/cms/info_collector.cpp
+++ b/ydb/core/cms/info_collector.cpp
@@ -211,6 +211,7 @@ void TInfoCollector::Handle(TEvBlobStorage::TEvControllerConfigResponse::TPtr& e
Info->AddBSGroup(group);
}
+ Info->ChooseSysNodes();
MaybeReplyAndDie();
}
}
diff --git a/ydb/core/cms/sentinel.cpp b/ydb/core/cms/sentinel.cpp
index 1823586d28..aedc452479 100644
--- a/ydb/core/cms/sentinel.cpp
+++ b/ydb/core/cms/sentinel.cpp
@@ -724,8 +724,8 @@ private:
class TSentinel: public TActorBootstrapped<TSentinel> {
struct TCounters {
- using TDynamicCounters = NMonitoring::TDynamicCounters;
- using TDynamicCounterPtr = NMonitoring::TDynamicCounterPtr;
+ using TDynamicCounters = ::NMonitoring::TDynamicCounters;
+ using TDynamicCounterPtr = ::NMonitoring::TDynamicCounterPtr;
TDynamicCounterPtr Group;
TDynamicCounters::TCounterPtr PDisksTotal;
diff --git a/ydb/core/cms/ut/CMakeLists.txt b/ydb/core/cms/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/cms/ut/CMakeLists.txt
+++ b/ydb/core/cms/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/cms/ut_sentinel/CMakeLists.txt b/ydb/core/cms/ut_sentinel/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/cms/ut_sentinel/CMakeLists.txt
+++ b/ydb/core/cms/ut_sentinel/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/cms/walle_create_task_adapter.cpp b/ydb/core/cms/walle_create_task_adapter.cpp
index 687a1d6eb0..46a9fa5206 100644
--- a/ydb/core/cms/walle_create_task_adapter.cpp
+++ b/ydb/core/cms/walle_create_task_adapter.cpp
@@ -205,6 +205,10 @@ private:
ctx.Send(Cms, request.Release());
}
+ void Handle(TEvCms::TEvStoreWalleTaskFailed::TPtr &ev, const TActorContext &ctx) {
+ ReplyWithErrorAndDie(TStatus::ERROR_TEMP, ev.Get()->Get()->Reason, ctx);
+ }
+
void Finish(const TActorContext& ctx)
{
ReplyAndDie(Response, ctx);
diff --git a/ydb/core/control/CMakeLists.txt b/ydb/core/control/CMakeLists.txt
index 17967c116a..0bab1b2d01 100644
--- a/ydb/core/control/CMakeLists.txt
+++ b/ydb/core/control/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-control)
target_link_libraries(ydb-core-control PUBLIC
diff --git a/ydb/core/control/immediate_control_board_actor.cpp b/ydb/core/control/immediate_control_board_actor.cpp
index bcb4a3344c..5a8ca7d9b5 100644
--- a/ydb/core/control/immediate_control_board_actor.cpp
+++ b/ydb/core/control/immediate_control_board_actor.cpp
@@ -36,8 +36,8 @@ class TImmediateControlActor : public TActorBootstrapped<TImmediateControlActor>
TIntrusivePtr<TControlBoard> Board;
TVector<TLogRecord> HistoryLog;
- NMonitoring::TDynamicCounters::TCounterPtr HasChanged;
- NMonitoring::TDynamicCounters::TCounterPtr ChangedCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr HasChanged;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ChangedCount;
public:
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
@@ -45,10 +45,10 @@ public:
}
TImmediateControlActor(TIntrusivePtr<TControlBoard> board,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters)
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters)
: Board(board)
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> IcbGroup = GetServiceCounters(counters, "utils");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> IcbGroup = GetServiceCounters(counters, "utils");
HasChanged = IcbGroup->GetCounter("Icb/HasChangedContol");
ChangedCount = IcbGroup->GetCounter("Icb/ChangedControlsCount");
}
@@ -129,7 +129,7 @@ private:
};
NActors::IActor* CreateImmediateControlActor(TIntrusivePtr<TControlBoard> board,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters) {
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters) {
return new NKikimr::TImmediateControlActor(board, counters);
}
};
diff --git a/ydb/core/control/immediate_control_board_actor.h b/ydb/core/control/immediate_control_board_actor.h
index 0b2cff4cf6..bd453c6a7f 100644
--- a/ydb/core/control/immediate_control_board_actor.h
+++ b/ydb/core/control/immediate_control_board_actor.h
@@ -15,6 +15,6 @@ inline NActors::TActorId MakeIcbId(ui32 node) {
class TImmediateControlActor;
-NActors::IActor* CreateImmediateControlActor(TIntrusivePtr<TControlBoard> board, const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters);
+NActors::IActor* CreateImmediateControlActor(TIntrusivePtr<TControlBoard> board, const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters);
}
diff --git a/ydb/core/control/immediate_control_board_actor_ut.cpp b/ydb/core/control/immediate_control_board_actor_ut.cpp
index 2753077d93..0cb9da2783 100644
--- a/ydb/core/control/immediate_control_board_actor_ut.cpp
+++ b/ydb/core/control/immediate_control_board_actor_ut.cpp
@@ -46,7 +46,7 @@ static bool IsVerbose = false;
static THolder<TActorSystem> ActorSystem;
-static TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+static TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
static THolder<NActors::TMon> Monitoring;
static TAtomic DoneCounter = 0;
@@ -77,7 +77,7 @@ static void Run(i64 instances = 1) {
nullptr, nullptr, nullptr, nullptr);
try {
- Counters = TIntrusivePtr<NMonitoring::TDynamicCounters>(new NMonitoring::TDynamicCounters());
+ Counters = TIntrusivePtr<::NMonitoring::TDynamicCounters>(new ::NMonitoring::TDynamicCounters());
testIds.resize(instances);
diff --git a/ydb/core/control/ut/CMakeLists.txt b/ydb/core/control/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/control/ut/CMakeLists.txt
+++ b/ydb/core/control/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/driver_lib/CMakeLists.txt b/ydb/core/driver_lib/CMakeLists.txt
new file mode 100644
index 0000000000..f6b2ca948d
--- /dev/null
+++ b/ydb/core/driver_lib/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(base_utils)
+add_subdirectory(cli_base)
+add_subdirectory(cli_config_base)
+add_subdirectory(cli_utils)
+add_subdirectory(run)
diff --git a/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp b/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp
index 41b39def48..63d4863b3a 100644
--- a/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp
+++ b/ydb/core/driver_lib/cli_utils/cli_cmds_server.cpp
@@ -52,7 +52,6 @@ protected:
size_t CompileInflightLimit; // MiniKQLCompileService
TString UDFsDir;
TVector<TString> UDFsPaths;
- TString HostLabelOverride;
TString TenantName;
TString TenantDomain;
TString TenantSlotType;
@@ -149,8 +148,8 @@ protected:
config.Opts->AddLongOption("syslog-service-tag", "unique tag for syslog").RequiredArgument("NAME").StoreResult(&SysLogServiceTag);
config.Opts->AddLongOption("log-file-name", "file name for log backend").RequiredArgument("NAME").StoreResult(&LogFileName);
config.Opts->AddLongOption("tcp", "start tcp interconnect").NoArgument();
- config.Opts->AddLongOption('n', "node", "Node ID or 'static' to auto-detect using naming file and ic-port, or 'dynamic' for dynamic nodes, or 'dynamic-fixed' for dynamic nodes with infinite node ID lease (for dynamic storage nodes)")
- .RequiredArgument("[NUM|static|dynamic]").StoreResult(&NodeIdValue);
+ config.Opts->AddLongOption('n', "node", "Node ID or 'static' to auto-detect using naming file and ic-port.")
+ .RequiredArgument("[NUM|static]").StoreResult(&NodeIdValue);
config.Opts->AddLongOption("node-broker", "node broker address host:port")
.RequiredArgument("ADDR").AppendTo(&NodeBrokerAddresses);
config.Opts->AddLongOption("node-broker-port", "node broker port (hosts from naming file are used)")
@@ -170,7 +169,6 @@ protected:
config.Opts->AddLongOption("sqs-port", "sqs port")
.RequiredArgument("NUM").StoreResult(&SqsHttpPort);
config.Opts->AddLongOption("proxy", "Bind to proxy(-ies)").RequiredArgument("ADDR").AppendTo(&ProxyBindToProxy);
- config.Opts->AddLongOption("host-label-override", "overrides host label for slot").RequiredArgument("NAME").StoreResult(&HostLabelOverride);
config.Opts->AddLongOption("tenant", "add binding for Local service to specified tenant, might be one of {'no', 'dynamic', '/<root>', '/<root>/<path_to_user>'}")
.RequiredArgument("NAME").StoreResult(&TenantName);
config.Opts->AddLongOption("tenant-slot-type", "set tenant slot type for dynamic tenant")
@@ -191,7 +189,6 @@ protected:
config.Opts->AddLongOption("mon-threads", "Monitoring http server threads").RequiredArgument("NUM").StoreResult(&MonitoringThreads);
config.Opts->AddLongOption("suppress-version-check", "Suppress version compatibility checking via IC").NoArgument();
-// config.Opts->AddLongOption('u', "url-base", "url base to request configs from").OptionalArgument("URL");
config.Opts->AddLongOption("sys-file", "actor system config file (use dummy config by default)").OptionalArgument("PATH");
config.Opts->AddLongOption("naming-file", "static nameservice config file").OptionalArgument("PATH");
config.Opts->AddLongOption("domains-file", "domain config file").OptionalArgument("PATH");
@@ -310,6 +307,22 @@ protected:
return res;
}
+ ui32 FindStaticNodeId() const {
+ std::vector<TString> candidates = {HostName(), FQDNHostName()};
+ for(auto& candidate: candidates) {
+ candidate.to_lower();
+
+ const NKikimrConfig::TStaticNameserviceConfig& nameserviceConfig = AppConfig.GetNameserviceConfig();
+ for (const auto& node : nameserviceConfig.GetNode()) {
+ if (node.GetHost() == candidate && InterconnectPort == node.GetPort()) {
+ return node.GetNodeId();
+ }
+ }
+ }
+
+ return 0;
+ }
+
virtual void Parse(TConfig& config) override {
TClientCommand::Parse(config);
@@ -340,29 +353,18 @@ protected:
if (NodeIdValue == "static") {
if (!AppConfig.HasNameserviceConfig() || !InterconnectPort)
ythrow yexception() << "'--node static' requires naming file and IC port to be specified";
- TString hostname;
try {
- hostname = HostName();
- hostname.to_lower();
- const NKikimrConfig::TStaticNameserviceConfig& nameserviceConfig = AppConfig.GetNameserviceConfig();
- for (const auto& node : nameserviceConfig.GetNode()) {
- if (node.GetHost() == hostname && InterconnectPort == node.GetPort()) {
- NodeId = node.GetNodeId();
- break;
- }
- }
+ NodeId = FindStaticNodeId();
} catch(TSystemError& e) {
ythrow yexception() << "cannot detect host name: " << e.what();
}
if (!NodeId)
- ythrow yexception() << "cannot detect node ID for " << hostname << ":" << InterconnectPort;
+ ythrow yexception() << "cannot detect node ID for " << HostName() << ":" << InterconnectPort
+ << " and for " << FQDNHostName() << ":" << InterconnectPort << Endl;
Cout << "Determined node ID: " << NodeId << Endl;
- } else if (NodeIdValue == "dynamic") {
- } else if (NodeIdValue == "dynamic-fixed") {
- FixedNodeID = true;
} else {
if (!TryFromString(NodeIdValue, NodeId))
- ythrow yexception() << "wrong '--node' value (should be NUM, 'static', or 'dynamic')";
+ ythrow yexception() << "wrong '--node' value (should be NUM, 'static')";
}
}
@@ -493,31 +495,6 @@ protected:
if (NodeId)
RunConfig.NodeId = NodeId;
- bool nodeIdFoundInConfig = false;
- if (AppConfig.HasNameserviceConfig() && NodeId) {
- TString localhost("localhost");
- TString hostname;
- try {
- hostname = HostName();
- hostname.to_lower();
- const NKikimrConfig::TStaticNameserviceConfig& nameserviceConfig = AppConfig.GetNameserviceConfig();
- for (const auto& node : nameserviceConfig.GetNode()) {
- Y_VERIFY(node.HasPort());
- Y_VERIFY(node.HasHost());
- Y_VERIFY(node.HasNodeId());
- if (node.GetNodeId() == NodeId) {
- nodeIdFoundInConfig = true;
- if ((node.GetHost() != hostname && node.GetHost() != localhost) ||
- (InterconnectPort && InterconnectPort != node.GetPort())) {
- Y_FAIL("Cannot find passed NodeId = %" PRIu32 " for hostname %s", NodeId, hostname.data());
- break;
- }
- }
- }
- } catch(TSystemError& e) {
- }
- }
-
if (NodeKind == NODE_KIND_YQ && InterconnectPort) {
auto& yqConfig = *AppConfig.MutableYandexQueryConfig();
auto& nmConfig = *yqConfig.MutableNodesManager();
@@ -596,13 +573,9 @@ protected:
if (config.ParseResult->Has("node-type"))
AppConfig.MutableTenantPoolConfig()->SetNodeType(NodeType);
- if (config.ParseResult->Has("host-label-override")) {
- AppConfig.MutableMonitoringConfig()->SetHostLabelOverride(HostLabelOverride);
- } else {
- if (config.ParseResult->Has("tenant")) {
- if (TenantName != "no" && TenantName != "dynamic" && InterconnectPort != DefaultInterconnectPort) {
- AppConfig.MutableMonitoringConfig()->SetHostLabelOverride(HostAndICPort());
- }
+ if (config.ParseResult->Has("tenant")) {
+ if (TenantName != "no" && TenantName != "dynamic" && InterconnectPort != DefaultInterconnectPort) {
+ AppConfig.MutableMonitoringConfig()->SetHostLabelOverride(HostAndICPort());
}
}
diff --git a/ydb/core/driver_lib/run/CMakeLists.txt b/ydb/core/driver_lib/run/CMakeLists.txt
index d2a0b6d61d..b00f7d3bcf 100644
--- a/ydb/core/driver_lib/run/CMakeLists.txt
+++ b/ydb/core/driver_lib/run/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(run)
target_compile_options(run PRIVATE
diff --git a/ydb/core/driver_lib/run/factories.h b/ydb/core/driver_lib/run/factories.h
index 1be49a906e..eeca39d03f 100644
--- a/ydb/core/driver_lib/run/factories.h
+++ b/ydb/core/driver_lib/run/factories.h
@@ -47,7 +47,7 @@ struct TModuleFactories {
IActor*(*CreateTicketParser)(const NKikimrProto::TAuthConfig&);
IActor*(*FolderServiceFactory)(const NKikimrProto::NFolderService::TFolderServiceConfig&);
- std::function<IActor*(const NYq::NConfig::TAuditConfig& auditConfig, const NMonitoring::TDynamicCounterPtr& counters)> YqAuditServiceFactory;
+ std::function<IActor*(const NYq::NConfig::TAuditConfig& auditConfig, const ::NMonitoring::TDynamicCounterPtr& counters)> YqAuditServiceFactory;
NKikimr::TYdbCredentialsProviderFactory YdbCredentialProviderFactory;
// Factory for grpc services
TGrpcServiceFactory GrpcServiceFactory;
diff --git a/ydb/core/driver_lib/run/kikimr_services_initializers.cpp b/ydb/core/driver_lib/run/kikimr_services_initializers.cpp
index 994a288e03..a26dcec3fb 100644
--- a/ydb/core/driver_lib/run/kikimr_services_initializers.cpp
+++ b/ydb/core/driver_lib/run/kikimr_services_initializers.cpp
@@ -525,7 +525,7 @@ void TBasicServicesInitializer::InitializeServices(NActors::TActorSystemSetup* s
Y_VERIFY(systemConfig.ExecutorSize());
const ui32 systemPoolId = appData->SystemPoolId;
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters = appData->Counters;
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters = appData->Counters;
setup->NodeId = NodeId;
setup->MaxActivityType = GetActivityTypeCount();
@@ -1034,8 +1034,8 @@ void TSharedCacheInitializer::InitializeServices(
config->TotalAsyncQueueInFlyLimit = cfg.GetAsyncQueueInFlyLimit();
config->TotalScanQueueInFlyLimit = cfg.GetScanQueueInFlyLimit();
- TIntrusivePtr<NMonitoring::TDynamicCounters> tabletGroup = GetServiceCounters(appData->Counters, "tablets");
- TIntrusivePtr<NMonitoring::TDynamicCounters> sausageGroup = tabletGroup->GetSubgroup("type", "S_CACHE");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> tabletGroup = GetServiceCounters(appData->Counters, "tablets");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> sausageGroup = tabletGroup->GetSubgroup("type", "S_CACHE");
config->CacheConfig = new TCacheCacheConfig(cfg.GetMemoryLimit(),
sausageGroup->GetCounter("fresh"),
@@ -1061,8 +1061,8 @@ void TBlobCacheInitializer::InitializeServices(
NActors::TActorSystemSetup* setup,
const NKikimr::TAppData* appData) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> tabletGroup = GetServiceCounters(appData->Counters, "tablets");
- TIntrusivePtr<NMonitoring::TDynamicCounters> blobCacheGroup = tabletGroup->GetSubgroup("type", "BLOB_CACHE");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> tabletGroup = GetServiceCounters(appData->Counters, "tablets");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> blobCacheGroup = tabletGroup->GetSubgroup("type", "BLOB_CACHE");
static const constexpr ui64 DEFAULT_CACHE_SIZE_BYTES = 1000ull << 20;
setup->LocalServices.push_back(std::pair<TActorId, TActorSetupCmd>(NBlobCache::MakeBlobCacheServiceId(),
@@ -1084,7 +1084,7 @@ TLoggerInitializer::TLoggerInitializer(const TKikimrRunConfig& runConfig,
void TLoggerInitializer::InitializeServices(
NActors::TActorSystemSetup* setup,
const NKikimr::TAppData* appData) {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> utilsCounters = GetServiceCounters(appData->Counters, "utils");
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> utilsCounters = GetServiceCounters(appData->Counters, "utils");
// log settings must be initialized before calling this method
NActors::TLoggerActor *loggerActor = new NActors::TLoggerActor(LogSettings, LogBackend, utilsCounters);
@@ -1129,7 +1129,7 @@ TProfilerInitializer::TProfilerInitializer(const TKikimrRunConfig& runConfig)
void TProfilerInitializer::InitializeServices(
NActors::TActorSystemSetup* setup,
const NKikimr::TAppData* appData) {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> utilsCounters = GetServiceCounters(appData->Counters, "utils");
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> utilsCounters = GetServiceCounters(appData->Counters, "utils");
TActorSetupCmd profilerSetup(CreateProfilerActor(utilsCounters, "/var/tmp"), TMailboxType::HTSwap, 0);
setup->LocalServices.push_back(std::pair<TActorId, TActorSetupCmd>(MakeProfilerID(NodeId), profilerSetup));
@@ -1166,7 +1166,7 @@ void TResourceBrokerInitializer::InitializeServices(
// TRestartsCountPublisher
-void TRestartsCountPublisher::PublishRestartsCount(const NMonitoring::TDynamicCounters::TCounterPtr& counter,
+void TRestartsCountPublisher::PublishRestartsCount(const ::NMonitoring::TDynamicCounters::TCounterPtr& counter,
const TString& restartsCountFile) {
if (restartsCountFile.size()) {
try {
@@ -1189,7 +1189,7 @@ void TRestartsCountPublisher::InitializeServices(
NActors::TActorSystemSetup* setup,
const NKikimr::TAppData* appData) {
Y_UNUSED(setup);
- const TIntrusivePtr<NMonitoring::TDynamicCounters> utilsCounters = GetServiceCounters(appData->Counters, "utils");
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> utilsCounters = GetServiceCounters(appData->Counters, "utils");
if (Config.HasRestartsCountConfig()) {
const auto& restartsCountConfig = Config.GetRestartsCountConfig();
@@ -1877,8 +1877,8 @@ void TPersQueueL2CacheInitializer::InitializeServices(NActors::TActorSystemSetup
params.KeepTime = TDuration::Seconds(cfg.GetCacheKeepTimeSec());
}
- TIntrusivePtr<NMonitoring::TDynamicCounters> tabletGroup = GetServiceCounters(appData->Counters, "tablets");
- TIntrusivePtr<NMonitoring::TDynamicCounters> pqCacheGroup = tabletGroup->GetSubgroup("type", "PQ_CACHE");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> tabletGroup = GetServiceCounters(appData->Counters, "tablets");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> pqCacheGroup = tabletGroup->GetSubgroup("type", "PQ_CACHE");
IActor* actor = NPQ::CreateNodePersQueueL2Cache(params, pqCacheGroup);
setup->LocalServices.push_back(std::pair<TActorId, TActorSetupCmd>(
diff --git a/ydb/core/driver_lib/run/kikimr_services_initializers.h b/ydb/core/driver_lib/run/kikimr_services_initializers.h
index a4e29b62bb..e98898c39b 100644
--- a/ydb/core/driver_lib/run/kikimr_services_initializers.h
+++ b/ydb/core/driver_lib/run/kikimr_services_initializers.h
@@ -168,7 +168,7 @@ public:
};
class TRestartsCountPublisher : public IKikimrServicesInitializer {
- static void PublishRestartsCount(const NMonitoring::TDynamicCounters::TCounterPtr& counter,
+ static void PublishRestartsCount(const ::NMonitoring::TDynamicCounters::TCounterPtr& counter,
const TString& restartsCountFile);
public:
diff --git a/ydb/core/driver_lib/run/log_backend.cpp b/ydb/core/driver_lib/run/log_backend.cpp
index d817f5b459..3a33ab6cac 100644
--- a/ydb/core/driver_lib/run/log_backend.cpp
+++ b/ydb/core/driver_lib/run/log_backend.cpp
@@ -18,7 +18,7 @@ TAutoPtr<TLogBackend> TLogBackendFactory::CreateLogBackendFromLogConfig(const TK
TAutoPtr<TLogBackend> TLogBackendFactory::CreateLogBackend(
const TKikimrRunConfig& runConfig,
- NMonitoring::TDynamicCounterPtr counters) {
+ ::NMonitoring::TDynamicCounterPtr counters) {
Y_UNUSED(counters);
TAutoPtr<TLogBackend> logBackend = CreateLogBackendFromLogConfig(runConfig);
if (logBackend) {
diff --git a/ydb/core/driver_lib/run/log_backend.h b/ydb/core/driver_lib/run/log_backend.h
index df877d69be..d641a0fd9d 100644
--- a/ydb/core/driver_lib/run/log_backend.h
+++ b/ydb/core/driver_lib/run/log_backend.h
@@ -10,7 +10,7 @@ class ILogBackendFactory {
public:
virtual TAutoPtr<TLogBackend> CreateLogBackend(
const TKikimrRunConfig& runConfig,
- NMonitoring::TDynamicCounterPtr counters) = 0;
+ ::NMonitoring::TDynamicCounterPtr counters) = 0;
virtual ~ILogBackendFactory() {}
};
@@ -23,7 +23,7 @@ protected:
public:
virtual TAutoPtr<TLogBackend> CreateLogBackend(
const TKikimrRunConfig& runConfig,
- NMonitoring::TDynamicCounterPtr counters) override;
+ ::NMonitoring::TDynamicCounterPtr counters) override;
};
} // NKikimr
diff --git a/ydb/core/driver_lib/run/run.cpp b/ydb/core/driver_lib/run/run.cpp
index 33ebb33854..972ca6e387 100644
--- a/ydb/core/driver_lib/run/run.cpp
+++ b/ydb/core/driver_lib/run/run.cpp
@@ -322,7 +322,7 @@ public:
TKikimrRunner::TKikimrRunner(std::shared_ptr<TModuleFactories> factories)
: ModuleFactories(std::move(factories))
- , Counters(MakeIntrusive<NMonitoring::TDynamicCounters>())
+ , Counters(MakeIntrusive<::NMonitoring::TDynamicCounters>())
, PollerThreads(new NInterconnect::TPollerThreads)
{
}
@@ -494,64 +494,85 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) {
auto fillFn = [&](const NKikimrConfig::TGRpcConfig& grpcConfig, NGrpc::TGRpcServer& server, NGrpc::TServerOptions& opts) {
const auto& services = grpcConfig.GetServices();
+ const auto& rlServicesEnabled = grpcConfig.GetRatelimiterServicesEnabled();
+ const auto& rlServicesDisabled = grpcConfig.GetRatelimiterServicesDisabled();
+
+ class TServiceCfg {
+ public:
+ TServiceCfg(bool enabled)
+ : ServiceEnabled(enabled)
+ { }
+ operator bool() const {
+ return ServiceEnabled;
+ }
+ bool IsRlAllowed() const {
+ return RlAllowed;
+ }
+ void SetRlAllowed(bool allowed) {
+ RlAllowed = allowed;
+ }
+ private:
+ bool ServiceEnabled = false;
+ bool RlAllowed = false;
+ };
- std::unordered_map<TString, bool*> names;
+ std::unordered_map<TString, TServiceCfg*> names;
- bool hasLegacy = opts.SslData.Empty() && services.empty();
+ TServiceCfg hasLegacy = opts.SslData.Empty() && services.empty();
names["legacy"] = &hasLegacy;
- bool hasScripting = services.empty();
+ TServiceCfg hasScripting = services.empty();
names["scripting"] = &hasScripting;
- bool hasCms = services.empty();
+ TServiceCfg hasCms = services.empty();
names["cms"] = &hasCms;
- bool hasKesus = services.empty();
+ TServiceCfg hasKesus = services.empty();
names["locking"] = names["kesus"] = &hasKesus;
- bool hasMonitoring = services.empty();
+ TServiceCfg hasMonitoring = services.empty();
names["monitoring"] = &hasMonitoring;
- bool hasDiscovery = services.empty();
+ TServiceCfg hasDiscovery = services.empty();
names["discovery"] = &hasDiscovery;
- bool hasLocalDiscovery = false;
+ TServiceCfg hasLocalDiscovery = false;
names["local_discovery"] = &hasLocalDiscovery;
- bool hasTableService = services.empty();
+ TServiceCfg hasTableService = services.empty();
names["table_service"] = &hasTableService;
- bool hasSchemeService = false;
- bool hasOperationService = false;
- bool hasYql = false;
+ TServiceCfg hasSchemeService = false;
+ TServiceCfg hasOperationService = false;
+ TServiceCfg hasYql = false;
names["yql"] = &hasYql;
- bool hasYqlInternal = services.empty();
+ TServiceCfg hasYqlInternal = services.empty();
names["yql_internal"] = &hasYqlInternal;
- bool hasPQ = services.empty();
+ TServiceCfg hasPQ = services.empty();
names["pq"] = &hasPQ;
- bool hasPQv1 = services.empty();
+ TServiceCfg hasPQv1 = services.empty();
names["pqv1"] = &hasPQv1;
- bool hasTopic = false;
+ TServiceCfg hasTopic = services.empty();
names["topic"] = &hasTopic;
- bool hasPQCD = services.empty();
+ TServiceCfg hasPQCD = services.empty();
names["pqcd"] = &hasPQCD;
- bool hasS3Internal = false;
+ TServiceCfg hasS3Internal = false;
names["s3_internal"] = &hasS3Internal;
- bool hasExperimental = false;
+ TServiceCfg hasExperimental = false;
names["experimental"] = &hasExperimental;
- bool hasClickhouseInternal = services.empty();
+ TServiceCfg hasClickhouseInternal = services.empty();
names["clickhouse_internal"] = &hasClickhouseInternal;
- bool hasRateLimiter = false;
+ TServiceCfg hasRateLimiter = false;
names["rate_limiter"] = &hasRateLimiter;
- bool hasLongTx = false;
+ TServiceCfg hasLongTx = false;
names["long_tx"] = &hasLongTx;
- bool hasExport = services.empty();
+ TServiceCfg hasExport = services.empty();
names["export"] = &hasExport;
- bool hasImport = services.empty();
+ TServiceCfg hasImport = services.empty();
names["import"] = &hasImport;
- bool hasAnalytics = false;
+ TServiceCfg hasAnalytics = false;
names["analytics"] = &hasAnalytics;
- bool hasDataStreams = false;
+ TServiceCfg hasDataStreams = false;
names["datastreams"] = &hasDataStreams;
- bool hasYandexQuery = false;
+ TServiceCfg hasYandexQuery = false;
names["yq"] = &hasYandexQuery;
- bool hasYandexQueryPrivate = false;
+ TServiceCfg hasYandexQueryPrivate = false;
names["yq_private"] = &hasYandexQueryPrivate;
- bool hasLogStore = false;
+ TServiceCfg hasLogStore = false;
names["logstore"] = &hasLogStore;
- bool hasAuth = services.empty();
+ TServiceCfg hasAuth = services.empty();
names["auth"] = &hasAuth;
std::unordered_set<TString> enabled;
@@ -595,7 +616,7 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) {
hasYqlInternal = true;
}
- if (hasTableService || hasYqlInternal || hasPQ || hasKesus || hasPQv1 || hasExport || hasImport) {
+ if (hasTableService || hasYqlInternal || hasPQ || hasKesus || hasPQv1 || hasExport || hasImport || hasTopic) {
hasSchemeService = true;
hasOperationService = true;
// backward compatability
@@ -607,6 +628,34 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) {
hasImport = true;
}
+ // Enable RL for all services if enabled list is empty
+ if (rlServicesEnabled.empty()) {
+ for (auto& [name, cfg] : names) {
+ Y_VERIFY(cfg);
+ cfg->SetRlAllowed(true);
+ }
+ } else {
+ for (const auto& name : rlServicesEnabled) {
+ auto itName = names.find(name);
+ if (itName != names.end()) {
+ Y_VERIFY(itName->second);
+ itName->second->SetRlAllowed(true);
+ } else if (!ModuleFactories || !ModuleFactories->GrpcServiceFactory.Has(name)) {
+ Cerr << "Unknown grpc service \"" << name << "\" rl was not enabled" << Endl;
+ }
+ }
+ }
+
+ for (const auto& name : rlServicesDisabled) {
+ auto itName = names.find(name);
+ if (itName != names.end()) {
+ Y_VERIFY(itName->second);
+ itName->second->SetRlAllowed(false);
+ } else if (!ModuleFactories || !ModuleFactories->GrpcServiceFactory.Has(name)) {
+ Cerr << "Unknown grpc service \"" << name << "\" rl was not disabled" << Endl;
+ }
+ }
+
for (const auto& [name, isEnabled] : names) {
if (*isEnabled) {
enabled.insert(name);
@@ -640,59 +689,70 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) {
}
if (hasTableService) {
- server.AddService(new NGRpcService::TGRpcYdbTableService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcYdbTableService(ActorSystem.Get(), Counters, grpcRequestProxyId,
+ hasTableService.IsRlAllowed()));
}
if (hasExperimental) {
server.AddService(new NGRpcService::TGRpcYdbExperimentalService(ActorSystem.Get(), Counters,
- grpcRequestProxyId));
+ grpcRequestProxyId, hasExperimental.IsRlAllowed()));
}
if (hasClickhouseInternal) {
server.AddService(new NGRpcService::TGRpcYdbClickhouseInternalService(ActorSystem.Get(), Counters,
- AppData->InFlightLimiterRegistry, grpcRequestProxyId));
+ AppData->InFlightLimiterRegistry, grpcRequestProxyId, hasClickhouseInternal.IsRlAllowed()));
}
if (hasS3Internal) {
server.AddService(new NGRpcService::TGRpcYdbS3InternalService(ActorSystem.Get(), Counters,
- grpcRequestProxyId));
+ grpcRequestProxyId, hasS3Internal.IsRlAllowed()));
}
if (hasScripting) {
server.AddService(new NGRpcService::TGRpcYdbScriptingService(ActorSystem.Get(), Counters,
- grpcRequestProxyId));
+ grpcRequestProxyId, hasScripting.IsRlAllowed()));
}
if (hasLongTx) {
- server.AddService(new NGRpcService::TGRpcYdbLongTxService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcYdbLongTxService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasLongTx.IsRlAllowed()));
}
if (hasSchemeService) {
- server.AddService(new NGRpcService::TGRpcYdbSchemeService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ // RPC RL enabled
+ // We have no way to disable or enable this service explicitly
+ server.AddService(new NGRpcService::TGRpcYdbSchemeService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, true /*hasSchemeService.IsRlAllowed()*/));
}
if (hasOperationService) {
- server.AddService(new NGRpcService::TGRpcOperationService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcOperationService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasOperationService.IsRlAllowed()));
}
if (hasExport) {
- server.AddService(new NGRpcService::TGRpcYdbExportService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcYdbExportService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasExport.IsRlAllowed()));
}
if (hasImport) {
- server.AddService(new NGRpcService::TGRpcYdbImportService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcYdbImportService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasImport.IsRlAllowed()));
}
if (hasKesus) {
- server.AddService(new NKesus::TKesusGRpcService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NKesus::TKesusGRpcService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasKesus.IsRlAllowed()));
}
if (hasPQv1) {
- server.AddService(new NGRpcService::V1::TGRpcPersQueueService(ActorSystem.Get(), Counters, NMsgBusProxy::CreatePersQueueMetaCacheV2Id(), grpcRequestProxyId));
+ server.AddService(new NGRpcService::V1::TGRpcPersQueueService(ActorSystem.Get(), Counters, NMsgBusProxy::CreatePersQueueMetaCacheV2Id(),
+ grpcRequestProxyId, hasPQv1.IsRlAllowed()));
}
if (hasPQv1 || hasTopic) {
- server.AddService(new NGRpcService::V1::TGRpcTopicService(ActorSystem.Get(), Counters, NMsgBusProxy::CreatePersQueueMetaCacheV2Id(), grpcRequestProxyId));
+ server.AddService(new NGRpcService::V1::TGRpcTopicService(ActorSystem.Get(), Counters, NMsgBusProxy::CreatePersQueueMetaCacheV2Id(),
+ grpcRequestProxyId, hasTopic.IsRlAllowed() || hasPQv1.IsRlAllowed()));
}
if (hasPQCD) {
@@ -708,15 +768,18 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) {
}
if (hasCms) {
- server.AddService(new NGRpcService::TGRpcCmsService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcCmsService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasCms.IsRlAllowed()));
}
if (hasDiscovery) {
- server.AddService(new NGRpcService::TGRpcDiscoveryService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcDiscoveryService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasDiscovery.IsRlAllowed()));
}
if (hasLocalDiscovery) {
- server.AddService(new NGRpcService::TGRpcLocalDiscoveryService(grpcConfig, ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcLocalDiscoveryService(grpcConfig, ActorSystem.Get(), Counters,
+ grpcRequestProxyId));
}
if (hasRateLimiter) {
@@ -724,15 +787,18 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) {
}
if (hasMonitoring) {
- server.AddService(new NGRpcService::TGRpcMonitoringService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcMonitoringService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasMonitoring.IsRlAllowed()));
}
if (hasAuth) {
- server.AddService(new NGRpcService::TGRpcAuthService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcAuthService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasAuth.IsRlAllowed()));
}
if (hasDataStreams) {
- server.AddService(new NGRpcService::TGRpcDataStreamsService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcDataStreamsService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasDataStreams.IsRlAllowed()));
}
if (hasYandexQuery) {
@@ -744,7 +810,8 @@ void TKikimrRunner::InitializeGRpc(const TKikimrRunConfig& runConfig) {
}
if (hasLogStore) {
- server.AddService(new NGRpcService::TGRpcYdbLogStoreService(ActorSystem.Get(), Counters, grpcRequestProxyId));
+ server.AddService(new NGRpcService::TGRpcYdbLogStoreService(ActorSystem.Get(), Counters,
+ grpcRequestProxyId, hasLogStore.IsRlAllowed()));
}
if (ModuleFactories) {
diff --git a/ydb/core/driver_lib/run/run.h b/ydb/core/driver_lib/run/run.h
index 21c7e47d03..53f5a19ffd 100644
--- a/ydb/core/driver_lib/run/run.h
+++ b/ydb/core/driver_lib/run/run.h
@@ -36,7 +36,7 @@ protected:
NYq::IYqSharedResources::TPtr YqSharedResources;
TAutoPtr<TMon> Monitoring;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
NMonitoring::TIndexMonPage *ActorsMonPage = nullptr;
bool EnabledGrpcService = false;
diff --git a/ydb/core/driver_lib/run/ut/CMakeLists.txt b/ydb/core/driver_lib/run/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/driver_lib/run/ut/CMakeLists.txt
+++ b/ydb/core/driver_lib/run/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/driver_lib/run/version.cpp b/ydb/core/driver_lib/run/version.cpp
index b8f2ef8caf..c8258d4efe 100644
--- a/ydb/core/driver_lib/run/version.cpp
+++ b/ydb/core/driver_lib/run/version.cpp
@@ -3,12 +3,13 @@
TMaybe<NActors::TInterconnectProxyCommon::TVersionInfo> VERSION = NActors::TInterconnectProxyCommon::TVersionInfo{
// version of this binary
- "trunk",
+ "stable-22-4",
// compatible versions; must include all compatible old ones, including this one; version verification occurs on both
// peers and connection is accepted if at least one of peers accepts the version of the other peer
{
- "trunk"
+ "stable-22-4",
+ "22-2-border-2"
}
};
diff --git a/ydb/core/engine/CMakeLists.txt b/ydb/core/engine/CMakeLists.txt
index e4cc08d8d5..27acad1202 100644
--- a/ydb/core/engine/CMakeLists.txt
+++ b/ydb/core/engine/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(minikql)
+add_subdirectory(ut)
add_library(ydb-core-engine)
target_compile_options(ydb-core-engine PRIVATE
diff --git a/ydb/core/engine/kikimr_program_builder.cpp b/ydb/core/engine/kikimr_program_builder.cpp
index fd32a772ee..e4077e2e10 100644
--- a/ydb/core/engine/kikimr_program_builder.cpp
+++ b/ydb/core/engine/kikimr_program_builder.cpp
@@ -24,7 +24,7 @@ TType* ValidateColumns(
tagsBuilder.Reserve(columns.size());
for (auto& col : columns) {
MKQL_ENSURE(col.SchemeType != 0, "Null type is not allowed");
- TDataType *dataType;
+ TType* dataType;
if (col.SchemeType == NYql::NProto::TypeIds::Decimal)
dataType = TDataDecimalType::Create(
NScheme::DECIMAL_PRECISION,
@@ -32,8 +32,12 @@ TType* ValidateColumns(
builder->GetTypeEnvironment());
else
dataType = TDataType::Create(col.SchemeType, builder->GetTypeEnvironment());
- auto optType = TOptionalType::Create(dataType, builder->GetTypeEnvironment());
- rowTypeBuilder.Add(col.Label, optType);
+
+ if (col.TypeConstraint == EColumnTypeConstraint::Nullable) {
+ dataType = TOptionalType::Create(dataType, builder->GetTypeEnvironment());
+ }
+
+ rowTypeBuilder.Add(col.Label, dataType);
tagsBuilder.Add(col.Label, builder->NewDataLiteral<ui32>(col.ColumnId));
}
diff --git a/ydb/core/engine/kikimr_program_builder.h b/ydb/core/engine/kikimr_program_builder.h
index 717132c0b9..446d976dd3 100644
--- a/ydb/core/engine/kikimr_program_builder.h
+++ b/ydb/core/engine/kikimr_program_builder.h
@@ -14,14 +14,15 @@ struct TSelectColumn {
TStringBuf Label;
ui32 ColumnId = 0;
NUdf::TDataTypeId SchemeType = 0;
-
+ EColumnTypeConstraint TypeConstraint = EColumnTypeConstraint::Nullable;
TSelectColumn()
{}
- TSelectColumn(TStringBuf label, ui32 columnId, NUdf::TDataTypeId schemeType)
+ TSelectColumn(TStringBuf label, ui32 columnId, NUdf::TDataTypeId schemeType, EColumnTypeConstraint typeConstraint)
: Label(label)
, ColumnId(columnId)
, SchemeType(schemeType)
+ , TypeConstraint(typeConstraint)
{}
};
diff --git a/ydb/core/engine/kikimr_program_builder_ut.cpp b/ydb/core/engine/kikimr_program_builder_ut.cpp
index efa073ae2f..00c58c32b7 100644
--- a/ydb/core/engine/kikimr_program_builder_ut.cpp
+++ b/ydb/core/engine/kikimr_program_builder_ut.cpp
@@ -150,7 +150,7 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->TableId.HasSamePath(TTableId(1, 2)));
UNIT_ASSERT(tableKeys[0]->RowOperation == TKeyDesc::ERowOperation::Erase);
UNIT_ASSERT(tableKeys[0]->Range.InclusiveFrom);
- UNIT_ASSERT(!tableKeys[0]->Range.InclusiveTo);
+ UNIT_ASSERT(tableKeys[0]->Range.InclusiveTo);
UNIT_ASSERT(!tableKeys[0]->Range.Point);
UNIT_ASSERT(tableKeys[0]->Range.From.size() == 3);
UNIT_ASSERT(tableKeys[0]->Range.From[0].IsNull());
@@ -192,7 +192,7 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->TableId.HasSamePath(TTableId(1, 2)));
UNIT_ASSERT(tableKeys[0]->RowOperation == TKeyDesc::ERowOperation::Erase);
UNIT_ASSERT(tableKeys[0]->Range.InclusiveFrom);
- UNIT_ASSERT(!tableKeys[0]->Range.InclusiveTo);
+ UNIT_ASSERT(tableKeys[0]->Range.InclusiveTo);
UNIT_ASSERT(!tableKeys[0]->Range.Point);
UNIT_ASSERT(tableKeys[0]->Range.From.size() == 2);
UNIT_ASSERT(tableKeys[0]->Range.From[0].IsNull());
@@ -216,8 +216,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
keyColumns.push_back(pgmBuilder.NewOptional(
pgmBuilder.NewDataLiteral<NUdf::EDataSlot::String>("qwe")));
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id);
+ columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id, NUdf::TDataType<char*>::Id });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRow(TTableId(1, 2),
@@ -349,7 +349,7 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
UNIT_ASSERT(tableKeys[0]->TableId.HasSamePath(TTableId(1, 2)));
UNIT_ASSERT(tableKeys[0]->RowOperation == TKeyDesc::ERowOperation::Update);
UNIT_ASSERT(tableKeys[0]->Range.InclusiveFrom);
- UNIT_ASSERT(!tableKeys[0]->Range.InclusiveTo);
+ UNIT_ASSERT(tableKeys[0]->Range.InclusiveTo);
UNIT_ASSERT(!tableKeys[0]->Range.Point);
UNIT_ASSERT(tableKeys[0]->Range.From.size() == 3);
UNIT_ASSERT(tableKeys[0]->Range.From[0].IsNull());
@@ -386,8 +386,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.FromColumns = from;
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id);
+ columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
@@ -436,8 +436,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeInitValue);
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id);
+ columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
@@ -488,8 +488,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.ToColumns = to;
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id);
+ columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
@@ -543,8 +543,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id);
+ columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes({ NUdf::TDataType<ui32>::Id, NUdf::TDataType<ui64>::Id });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
@@ -596,8 +596,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
options.ToColumns = to;
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id);
+ columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes({ NUdf::TDataType<char*>::Id });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
@@ -648,8 +648,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLProgramBuilderTest) {
TReadRangeOptions::TFlags::ExcludeInitValue | TReadRangeOptions::TFlags::ExcludeTermValue);
TVector<TSelectColumn> columnsToRead;
- columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id);
- columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id);
+ columnsToRead.emplace_back("column1", 34, (ui32)NUdf::TDataType<ui32>::Id, EColumnTypeConstraint::Nullable);
+ columnsToRead.emplace_back("column2", 56, (ui32)NUdf::TDataType<ui64>::Id, EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes({ NUdf::TDataType<char*>::Id });
pgmReturn = pgmBuilder.Append(pgmReturn, pgmBuilder.SetResult("myRes",
pgmBuilder.SelectRange(TTableId(1, 2),
diff --git a/ydb/core/engine/minikql/flat_local_tx_minikql.h b/ydb/core/engine/minikql/flat_local_tx_minikql.h
index d7387ed8f4..70805832d0 100644
--- a/ydb/core/engine/minikql/flat_local_tx_minikql.h
+++ b/ydb/core/engine/minikql/flat_local_tx_minikql.h
@@ -48,8 +48,9 @@ public:
const auto *columnInfo = tableInfo->Columns.FindPtr(*columnId);
Y_VERIFY(columnInfo);
+ auto nullConstraint = columnInfo->NotNull ? EColumnTypeConstraint::NotNull : EColumnTypeConstraint::Nullable;
auto insertResult = result.Columns.insert(std::make_pair(column, IDbSchemeResolver::TTableResult::TColumn
- {*columnId, (i32)columnInfo->KeyOrder, columnInfo->PType, 0}));
+ {*columnId, (i32)columnInfo->KeyOrder, columnInfo->PType, 0, nullConstraint}));
Y_VERIFY(insertResult.second);
}
}
diff --git a/ydb/core/engine/minikql/minikql_engine_host.cpp b/ydb/core/engine/minikql/minikql_engine_host.cpp
index 6966fb700f..d362d93806 100644
--- a/ydb/core/engine/minikql/minikql_engine_host.cpp
+++ b/ydb/core/engine/minikql/minikql_engine_host.cpp
@@ -231,6 +231,10 @@ void TEngineHost::PinPages(const TVector<THolder<TKeyDesc>>& keys, ui64 pageFaul
ui64 localTid = LocalTableId(key.TableId);
Y_VERIFY(localTid, "table not exist");
const TScheme::TTableInfo* tableInfo = Scheme.GetTableInfo(localTid);
+
+ Y_VERIFY_DEBUG(!key.Range.IsAmbiguous(tableInfo->KeyColumns.size()),
+ "%s", key.Range.IsAmbiguousReason(tableInfo->KeyColumns.size()));
+
TSmallVec<TRawTypeValue> keyFrom;
TSmallVec<TRawTypeValue> keyTo;
ConvertKeys(tableInfo, key.Range.From, keyFrom);
@@ -654,6 +658,9 @@ public:
const TScheme::TTableInfo* tableInfo = Scheme.GetTableInfo(LocalTid);
auto tableRange = RangeHolder.ToTableRange();
+ Y_VERIFY_DEBUG(!tableRange.IsAmbiguous(tableInfo->KeyColumns.size()),
+ "%s", tableRange.IsAmbiguousReason(tableInfo->KeyColumns.size()));
+
TSmallVec<TRawTypeValue> keyFrom;
TSmallVec<TRawTypeValue> keyTo;
ConvertTableKeys(Scheme, tableInfo, tableRange.From, keyFrom, nullptr);
diff --git a/ydb/core/engine/mkql_engine_flat_ut.cpp b/ydb/core/engine/mkql_engine_flat_ut.cpp
index 7c547889c1..84fcf280cb 100644
--- a/ydb/core/engine/mkql_engine_flat_ut.cpp
+++ b/ydb/core/engine/mkql_engine_flat_ut.cpp
@@ -336,7 +336,8 @@ Y_UNIT_TEST_SUITE(TMiniKQLEngineFlatTest) {
row[0] = pgmBuilder.NewNull();
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto value = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes, columns, row);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -540,7 +541,8 @@ Value {
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto value = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes, columns, row);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1057,7 +1059,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1128,7 +1130,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewNull();
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1208,7 +1210,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -1217,7 +1220,7 @@ Value {
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1326,14 +1329,15 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.ItemsLimit = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(1);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1436,14 +1440,15 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewNull();
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.ItemsLimit = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(1);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1549,7 +1554,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -1557,7 +1563,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.BytesLimit = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(32);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1670,7 +1676,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -1678,7 +1685,7 @@ Value {
rowFrom[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(43);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.FromColumns = rowFrom;
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1791,7 +1798,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -1801,7 +1809,7 @@ Value {
auto options = pgmBuilder.GetDefaultTableRangeOptions();
options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(
TReadRangeOptions::TFlags::ExcludeInitValue |
- TReadRangeOptions::TFlags::ExcludeTermValue);
+ TReadRangeOptions::TFlags::IncludeTermValue);
options.FromColumns = rowFrom;
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -1907,7 +1915,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -2031,7 +2040,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -2141,7 +2151,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -2261,7 +2272,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -2390,7 +2402,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -2512,7 +2525,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -2634,7 +2648,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
@@ -2755,7 +2770,8 @@ Value {
keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
TRuntimeNode::TList row1(1);
TVector<TSelectColumn> columns1;
- columns1.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns1.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
row1[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
auto value1 = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes1, columns1, row1);
@@ -2765,7 +2781,8 @@ Value {
TRuntimeNode::TList row2(1);
row2[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(11);
TVector<TSelectColumn> columns2;
- columns2.emplace_back("4", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType);
+ columns2.emplace_back("4", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto value2 = pgmBuilder.SelectRow(TTableId(OwnerId, Table2Id), keyTypes2, columns2, row2);
TRuntimeNode::TList resList;
@@ -3059,7 +3076,8 @@ Value {
pgmBuilder.TProgramBuilder::NewDataLiteral<NUdf::EDataSlot::Utf8>("asd"));
TVector<TSelectColumn> columns1;
- columns1.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns1.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto oldRow1 = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes1, columns1, row1);
auto value1 = pgmBuilder.UpdateRow(TTableId(OwnerId, Table1Id), keyTypes1, row1, update1);
@@ -3076,7 +3094,8 @@ Value {
pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(32));
TVector<TSelectColumn> columns2;
- columns2.emplace_back("4", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType);
+ columns2.emplace_back("4", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto oldRow2 = pgmBuilder.SelectRow(TTableId(OwnerId, Table2Id), keyTypes2, columns2, row2);
auto value2 = pgmBuilder.UpdateRow(TTableId(OwnerId, Table2Id), keyTypes2, row2, update2);
@@ -3175,7 +3194,8 @@ Value {
TRuntimeNode::TList row(1);
row[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(42);
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto value = pgmBuilder.SelectRow(TTableId(OwnerId, Table1Id), keyTypes, columns, row);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -3248,7 +3268,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -3256,7 +3277,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -3445,7 +3466,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -3453,7 +3475,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -3570,7 +3592,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -3578,7 +3601,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.ItemsLimit = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(1);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -3699,7 +3722,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -3707,7 +3731,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
const ui64 RowOverheadBytes = 8;
options.BytesLimit = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(4 + RowOverheadBytes);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
@@ -3832,7 +3856,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -3840,7 +3865,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.Reverse = pgmBuilder.TProgramBuilder::NewDataLiteral<bool>(true);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto pgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("myRes", value)));
@@ -3978,7 +4003,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -3986,7 +4012,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.ItemsLimit = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(1);
options.Reverse = pgmBuilder.TProgramBuilder::NewDataLiteral<bool>(true);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
@@ -4104,7 +4130,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -4112,7 +4139,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.ItemsLimit = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(2);
options.Reverse = pgmBuilder.TProgramBuilder::NewDataLiteral<bool>(true);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
@@ -4237,7 +4264,8 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("2", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -4245,7 +4273,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
options.ItemsLimit = pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(3);
options.Reverse = pgmBuilder.TProgramBuilder::NewDataLiteral<bool>(true);
auto value = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
@@ -4739,8 +4767,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -4748,7 +4778,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
TVector<TStringBuf> filterNullColumns {"Value"};
@@ -4815,8 +4845,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -4824,7 +4856,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
auto mapped = pgmBuilder.Map(list, [&pgmBuilder](TRuntimeNode item) {
@@ -4883,8 +4915,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -4892,7 +4926,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
auto mapped = pgmBuilder.Map(list, [&pgmBuilder, keyTypes, columns](TRuntimeNode item) {
@@ -4945,8 +4979,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -4954,7 +4990,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
auto filtered = pgmBuilder.OrderedFilter(list, [&pgmBuilder, &okValue](TRuntimeNode item) {
@@ -5031,8 +5067,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5040,7 +5078,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
auto mapped = pgmBuilder.Map(list, [&pgmBuilder](TRuntimeNode item) {
@@ -5074,8 +5112,10 @@ Value {
{
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5083,7 +5123,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table2Id), keyTypes, columns, options);
auto checkpgm = pgmBuilder.Build(pgmBuilder.AsList(pgmBuilder.SetResult("Result", range)));
@@ -5136,28 +5176,32 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns1;
- columns1.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns1.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns1.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns1.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options1 = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes1(1);
keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
TRuntimeNode::TList rowFrom1(1);
rowFrom1[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options1.FromColumns = rowFrom1;
- options1.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options1.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range1 = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes1, columns1, options1);
auto list1 = pgmBuilder.Member(range1, "List");
TVector<TSelectColumn> columns2;
- columns2.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType);
- columns2.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType);
+ columns2.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns2.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options2 = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes2(1);
keyTypes2[0] = (ui32)NUdf::TDataType<ui64>::Id;
TRuntimeNode::TList rowFrom2(1);
rowFrom2[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id);
options2.FromColumns = rowFrom2;
- options2.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options2.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range2 = pgmBuilder.SelectRange(TTableId(OwnerId, Table2Id), keyTypes2, columns2, options2);
auto list2 = pgmBuilder.Member(range2, "List");
@@ -5226,28 +5270,32 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns1;
- columns1.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns1.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns1.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns1.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options1 = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes1(1);
keyTypes1[0] = (ui32)NUdf::TDataType<ui32>::Id;
TRuntimeNode::TList rowFrom1(1);
rowFrom1[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options1.FromColumns = rowFrom1;
- options1.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options1.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range1 = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes1, columns1, options1);
auto list1 = pgmBuilder.Member(range1, "List");
TVector<TSelectColumn> columns2;
- columns2.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType);
- columns2.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType);
+ columns2.emplace_back("ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns2.emplace_back("Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options2 = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes2(1);
keyTypes2[0] = (ui32)NUdf::TDataType<ui64>::Id;
TRuntimeNode::TList rowFrom2(1);
rowFrom2[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id);
options2.FromColumns = rowFrom2;
- options2.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options2.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range2 = pgmBuilder.SelectRange(TTableId(OwnerId, Table2Id), keyTypes2, columns2, options2);
auto list2 = pgmBuilder.Member(range2, "List");
@@ -5329,8 +5377,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5338,7 +5388,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -5443,8 +5493,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5452,7 +5504,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -5552,8 +5604,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5561,7 +5615,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -5634,8 +5688,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5643,7 +5699,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -5710,8 +5766,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5719,7 +5777,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -5789,8 +5847,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5798,7 +5858,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -5876,8 +5936,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5885,7 +5947,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -5961,8 +6023,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -5970,7 +6034,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -6050,8 +6114,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -6059,7 +6125,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -6143,8 +6209,10 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
- columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
+ columns.emplace_back("Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType,
+ EColumnTypeConstraint::Nullable);
auto options = pgmBuilder.GetDefaultTableRangeOptions();
TVector<ui32> keyTypes(1);
@@ -6152,7 +6220,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, columns, options);
auto list = pgmBuilder.Member(range, "List");
@@ -6221,7 +6289,7 @@ Value {
TRuntimeNode::TList rowFrom(1);
rowFrom[0] = pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id);
options.FromColumns = rowFrom;
- options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), keyTypes, {}, options);
auto list = pgmBuilder.Member(range, "List");
auto length = pgmBuilder.Length(list);
@@ -6292,14 +6360,14 @@ Value {
auto& pgmBuilder = driver.PgmBuilder;
TVector<TSelectColumn> columns1 {
- {"ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType},
- {"Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType}
+ {"ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType, EColumnTypeConstraint::Nullable},
+ {"Value", (ui32)Schema1::Table1::Value::ColumnId, (ui32)Schema1::Table1::Value::ColumnType, EColumnTypeConstraint::Nullable}
};
TRuntimeNode::TList fromColumns1{pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui32>::Id)};
auto options1 = pgmBuilder.GetDefaultTableRangeOptions();
options1.FromColumns = fromColumns1;
- options1.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options1.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range1 = pgmBuilder.SelectRange(TTableId(OwnerId, Table1Id), {(ui32)NUdf::TDataType<ui32>::Id},
columns1, options1);
auto list1 = pgmBuilder.Member(range1, "List");
@@ -6315,14 +6383,14 @@ Value {
auto take1 = pgmBuilder.Take(filtered1, pgmBuilder.TProgramBuilder::NewDataLiteral<ui64>(2));
TVector<TSelectColumn> columns2 {
- {"ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType},
- {"Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType}
+ {"ID", (ui32)Schema2::Table2::ID::ColumnId, (ui32)Schema2::Table2::ID::ColumnType, EColumnTypeConstraint::Nullable},
+ {"Value", (ui32)Schema2::Table2::Value::ColumnId, (ui32)Schema2::Table2::Value::ColumnType, EColumnTypeConstraint::Nullable}
};
TRuntimeNode::TList fromColumns2{pgmBuilder.NewEmptyOptionalDataLiteral(NUdf::TDataType<ui64>::Id)};
auto options2 = pgmBuilder.GetDefaultTableRangeOptions();
options2.FromColumns = fromColumns2;
- options2.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::ExcludeTermValue);
+ options2.Flags = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(TReadRangeOptions::TFlags::IncludeTermValue);
auto range2 = pgmBuilder.SelectRange(TTableId(OwnerId, Table2Id), {(ui32)NUdf::TDataType<ui64>::Id},
columns2, options2);
auto list2 = pgmBuilder.Member(range2, "List");
@@ -6370,7 +6438,8 @@ Value {
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
TRuntimeNode::TList row1(1);
row1[0] = pgmBuilder.TProgramBuilder::NewDataLiteral<ui32>(1);
@@ -6418,7 +6487,8 @@ Value {
TVector<ui32> keyTypes(1);
keyTypes[0] = (ui32)NUdf::TDataType<ui32>::Id;
TVector<TSelectColumn> columns;
- columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType);
+ columns.emplace_back("ID", (ui32)Schema1::Table1::ID::ColumnId, (ui32)Schema1::Table1::ID::ColumnType,
+ EColumnTypeConstraint::Nullable);
TVector<ui32> key2Types(1);
key2Types[0] = (ui32)NUdf::TDataType<ui64>::Id;
diff --git a/ydb/core/engine/mkql_keys.cpp b/ydb/core/engine/mkql_keys.cpp
index 17bc05a3b8..720e00325e 100644
--- a/ydb/core/engine/mkql_keys.cpp
+++ b/ydb/core/engine/mkql_keys.cpp
@@ -70,7 +70,6 @@ THolder<TKeyDesc> ExtractKeyTuple(const TTableId& tableId, TTupleLiteral* tuple,
if (!hasImmediateData) {
MKQL_ENSURE(!requireStaticKey, "Expected static key components");
point = false;
- inclusiveTo = false;
continue;
}
@@ -93,7 +92,7 @@ void ExtractReadColumns(TStructType* columnsType, TStructLiteral* tags, TVector<
op.Column = columnId;
op.Operation = TKeyDesc::EColumnOperation::Read;
bool isOptional;
- op.ExpectedType = UnpackOptionalData(AS_TYPE(TOptionalType, columnsType->GetMemberType(i)), isOptional)->GetSchemeType();
+ op.ExpectedType = UnpackOptionalData(columnsType->GetMemberType(i), isOptional)->GetSchemeType();
MKQL_ENSURE(op.ExpectedType != 0, "Null type is not allowed");
}
}
diff --git a/ydb/core/engine/ut/CMakeLists.txt b/ydb/core/engine/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/engine/ut/CMakeLists.txt
+++ b/ydb/core/engine/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/erasure/CMakeLists.txt b/ydb/core/erasure/CMakeLists.txt
index 63007d30b4..bd33c60c8a 100644
--- a/ydb/core/erasure/CMakeLists.txt
+++ b/ydb/core/erasure/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
+add_subdirectory(ut_perf)
+add_subdirectory(ut_rope)
add_library(ydb-core-erasure)
target_link_libraries(ydb-core-erasure PUBLIC
diff --git a/ydb/core/erasure/ut/CMakeLists.txt b/ydb/core/erasure/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/erasure/ut/CMakeLists.txt
+++ b/ydb/core/erasure/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/erasure/ut_perf/CMakeLists.txt b/ydb/core/erasure/ut_perf/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/erasure/ut_perf/CMakeLists.txt
+++ b/ydb/core/erasure/ut_perf/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/erasure/ut_rope/CMakeLists.txt b/ydb/core/erasure/ut_rope/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/erasure/ut_rope/CMakeLists.txt
+++ b/ydb/core/erasure/ut_rope/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/filestore/CMakeLists.txt b/ydb/core/filestore/CMakeLists.txt
index 9e3407aa03..450c550ff2 100644
--- a/ydb/core/filestore/CMakeLists.txt
+++ b/ydb/core/filestore/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(core)
add_library(ydb-core-filestore INTERFACE)
target_link_libraries(ydb-core-filestore INTERFACE
diff --git a/ydb/core/formats/CMakeLists.txt b/ydb/core/formats/CMakeLists.txt
index 993180c9e4..4d75a9e95f 100644
--- a/ydb/core/formats/CMakeLists.txt
+++ b/ydb/core/formats/CMakeLists.txt
@@ -6,11 +6,15 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-formats)
target_compile_options(ydb-core-formats PRIVATE
-DUSE_CURRENT_UDF_ABI_VERSION
)
+target_include_directories(ydb-core-formats PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
+)
target_link_libraries(ydb-core-formats PUBLIC
contrib-libs-cxxsupp
yutil
@@ -18,6 +22,7 @@ target_link_libraries(ydb-core-formats PUBLIC
ydb-core-scheme
ydb-library-binary_json
ydb-library-dynumber
+ ydb-library-arrow_clickhouse
)
target_sources(ydb-core-formats PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/formats/arrow_batch_builder.cpp
@@ -27,4 +32,5 @@ target_sources(ydb-core-formats PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/formats/func_cast.cpp
${CMAKE_SOURCE_DIR}/ydb/core/formats/merging_sorted_input_stream.cpp
${CMAKE_SOURCE_DIR}/ydb/core/formats/program.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/formats/ssa_program_optimizer.cpp
)
diff --git a/ydb/core/formats/arrow_helpers.cpp b/ydb/core/formats/arrow_helpers.cpp
index 72ff6fd234..dfe036dadd 100644
--- a/ydb/core/formats/arrow_helpers.cpp
+++ b/ydb/core/formats/arrow_helpers.cpp
@@ -390,7 +390,25 @@ std::shared_ptr<arrow::RecordBatch> ExtractColumns(const std::shared_ptr<arrow::
return arrow::RecordBatch::Make(dstSchema, srcBatch->num_rows(), columns);
}
+std::shared_ptr<arrow::RecordBatch> ExtractExistedColumns(const std::shared_ptr<arrow::RecordBatch>& srcBatch,
+ const arrow::FieldVector& fieldsToExtract) {
+ std::vector<std::shared_ptr<arrow::Field>> fields;
+ fields.reserve(fieldsToExtract.size());
+ std::vector<std::shared_ptr<arrow::Array>> columns;
+ columns.reserve(fieldsToExtract.size());
+
+ auto srcSchema = srcBatch->schema();
+ for (auto& fldToExtract : fieldsToExtract) {
+ auto& name = fldToExtract->name();
+ auto field = srcSchema->GetFieldByName(name);
+ if (field && field->type()->Equals(fldToExtract->type())) {
+ fields.push_back(field);
+ columns.push_back(srcBatch->GetColumnByName(name));
+ }
+ }
+ return arrow::RecordBatch::Make(std::make_shared<arrow::Schema>(fields), srcBatch->num_rows(), columns);
+}
std::shared_ptr<arrow::Table> CombineInTable(const std::vector<std::shared_ptr<arrow::RecordBatch>>& batches) {
auto res = arrow::Table::FromRecordBatches(batches);
@@ -568,6 +586,15 @@ bool IsSortedAndUnique(const std::shared_ptr<arrow::RecordBatch>& batch,
}
}
+bool HasAllColumns(const std::shared_ptr<arrow::RecordBatch>& batch, const std::shared_ptr<arrow::Schema>& schema) {
+ for (auto& field : schema->fields()) {
+ if (batch->schema()->GetFieldIndex(field->name()) < 0) {
+ return false;
+ }
+ }
+ return true;
+}
+
std::vector<std::unique_ptr<arrow::ArrayBuilder>> MakeBuilders(const std::shared_ptr<arrow::Schema>& schema,
size_t reserve) {
std::vector<std::unique_ptr<arrow::ArrayBuilder>> builders;
diff --git a/ydb/core/formats/arrow_helpers.h b/ydb/core/formats/arrow_helpers.h
index 19d1505270..64411f45bf 100644
--- a/ydb/core/formats/arrow_helpers.h
+++ b/ydb/core/formats/arrow_helpers.h
@@ -69,6 +69,14 @@ std::shared_ptr<arrow::RecordBatch> ExtractColumns(const std::shared_ptr<arrow::
std::shared_ptr<arrow::RecordBatch> ExtractColumns(const std::shared_ptr<arrow::RecordBatch>& srcBatch,
const std::shared_ptr<arrow::Schema>& dstSchema,
bool addNotExisted = false);
+std::shared_ptr<arrow::RecordBatch> ExtractExistedColumns(const std::shared_ptr<arrow::RecordBatch>& srcBatch,
+ const arrow::FieldVector& fields);
+inline std::shared_ptr<arrow::RecordBatch> ExtractExistedColumns(const std::shared_ptr<arrow::RecordBatch>& srcBatch,
+ const std::shared_ptr<arrow::Schema>& dstSchema)
+{
+ return ExtractExistedColumns(srcBatch, dstSchema->fields());
+}
+
std::shared_ptr<arrow::Table> CombineInTable(const std::vector<std::shared_ptr<arrow::RecordBatch>>& batches);
std::shared_ptr<arrow::RecordBatch> ToBatch(const std::shared_ptr<arrow::Table>& combinedTable);
std::shared_ptr<arrow::RecordBatch> CombineBatches(const std::vector<std::shared_ptr<arrow::RecordBatch>>& batches);
@@ -114,6 +122,7 @@ bool IsSorted(const std::shared_ptr<arrow::RecordBatch>& batch,
bool IsSortedAndUnique(const std::shared_ptr<arrow::RecordBatch>& batch,
const std::shared_ptr<arrow::Schema>& sortingKey,
bool desc = false);
+bool HasAllColumns(const std::shared_ptr<arrow::RecordBatch>& batch, const std::shared_ptr<arrow::Schema>& schema);
template <typename TArr>
std::shared_ptr<TArr> GetTypedColumn(const std::shared_ptr<arrow::RecordBatch>& batch, int pos) {
diff --git a/ydb/core/formats/custom_registry.cpp b/ydb/core/formats/custom_registry.cpp
index 347e833f9f..40be5634f2 100644
--- a/ydb/core/formats/custom_registry.cpp
+++ b/ydb/core/formats/custom_registry.cpp
@@ -2,10 +2,19 @@
#include "functions.h"
#include "func_common.h"
+#include "program.h"
+
#include <util/system/yassert.h>
#include <contrib/libs/apache/arrow/cpp/src/arrow/compute/registry_internal.h>
#include <contrib/libs/apache/arrow/cpp/src/arrow/compute/api.h>
+#ifndef WIN32
+#include <AggregateFunctions/AggregateFunctionCount.h>
+#include <AggregateFunctions/AggregateFunctionMinMaxAny.h>
+#include <AggregateFunctions/AggregateFunctionSum.h>
+#include <AggregateFunctions/AggregateFunctionAvg.h>
+#endif
+
namespace cp = ::arrow::compute;
namespace NKikimr::NArrow {
@@ -50,6 +59,25 @@ static void RegisterYdbCast(cp::FunctionRegistry* registry) {
Y_VERIFY(registry->AddFunction(std::make_shared<YdbCastMetaFunction>()).ok());
}
+static void RegisterHouseAggregates(cp::FunctionRegistry* registry) {
+#ifndef WIN32
+ try {
+ Y_VERIFY(registry->AddFunction(std::make_shared<CH::WrappedAny>(GetHouseFunctionName(EAggregate::Some))).ok());
+ Y_VERIFY(registry->AddFunction(std::make_shared<CH::WrappedCount>(GetHouseFunctionName(EAggregate::Count))).ok());
+ Y_VERIFY(registry->AddFunction(std::make_shared<CH::WrappedMin>(GetHouseFunctionName(EAggregate::Min))).ok());
+ Y_VERIFY(registry->AddFunction(std::make_shared<CH::WrappedMax>(GetHouseFunctionName(EAggregate::Max))).ok());
+ Y_VERIFY(registry->AddFunction(std::make_shared<CH::WrappedSum>(GetHouseFunctionName(EAggregate::Sum))).ok());
+ //Y_VERIFY(registry->AddFunction(std::make_shared<CH::WrappedAvg>(GetHouseFunctionName(EAggregate::Avg))).ok());
+
+ Y_VERIFY(registry->AddFunction(std::make_shared<CH::ArrowGroupBy>(GetHouseGroupByName())).ok());
+ } catch (const std::exception& /*ex*/) {
+ Y_VERIFY(false);
+ }
+#else
+ Y_UNUSED(registry);
+#endif
+}
+
static std::unique_ptr<cp::FunctionRegistry> CreateCustomRegistry() {
auto registry = cp::FunctionRegistry::Make();
@@ -57,6 +85,7 @@ static std::unique_ptr<cp::FunctionRegistry> CreateCustomRegistry() {
RegisterRound(registry.get());
RegisterArithmetic(registry.get());
RegisterYdbCast(registry.get());
+ RegisterHouseAggregates(registry.get());
return registry;
}
diff --git a/ydb/core/formats/program.cpp b/ydb/core/formats/program.cpp
index 10534a6435..fb2d8f0d59 100644
--- a/ydb/core/formats/program.cpp
+++ b/ydb/core/formats/program.cpp
@@ -6,6 +6,32 @@
#include "program.h"
#include "arrow_helpers.h"
+
+#ifndef WIN32
+#include <AggregateFunctions/IAggregateFunction.h>
+#else
+namespace CH {
+enum class AggFunctionId {
+ AGG_UNSPECIFIED = 0,
+ AGG_ANY = 1,
+ AGG_COUNT = 2,
+ AGG_MIN = 3,
+ AGG_MAX = 4,
+ AGG_SUM = 5,
+};
+struct GroupByOptions : public arrow::compute::ScalarAggregateOptions {
+ struct Assign {
+ AggFunctionId function = AggFunctionId::AGG_UNSPECIFIED;
+ std::string result_column;
+ std::vector<std::string> arguments;
+ };
+
+ std::shared_ptr<arrow::Schema> schema;
+ std::vector<Assign> assigns;
+};
+}
+#endif
+
#include <util/system/yassert.h>
#include <contrib/libs/apache/arrow/cpp/src/arrow/api.h>
#include <contrib/libs/apache/arrow/cpp/src/arrow/compute/api.h>
@@ -238,8 +264,6 @@ EOperation ValidateOperation(EOperation op, ui32 argsSize) {
const char * GetFunctionName(EAggregate op) {
switch (op) {
- case EAggregate::Any:
- return "any";
case EAggregate::Count:
return "count";
case EAggregate::Min:
@@ -248,33 +272,90 @@ const char * GetFunctionName(EAggregate op) {
return "min_max";
case EAggregate::Sum:
return "sum";
+#if 0 // TODO
case EAggregate::Avg:
return "mean";
+#endif
+ default:
+ break;
+ }
+ return "";
+}
+const char * GetHouseFunctionName(EAggregate op) {
+ switch (op) {
+ case EAggregate::Some:
+ return "ch.any";
+ case EAggregate::Count:
+ return "ch.count";
+ case EAggregate::Min:
+ return "ch.min";
+ case EAggregate::Max:
+ return "ch.max";
+ case EAggregate::Sum:
+ return "ch.sum";
+#if 0 // TODO
+ case EAggregate::Avg:
+ return "ch.avg";
+#endif
default:
break;
}
return "";
}
+namespace {
-void AddColumn(std::shared_ptr<TProgramStep::TDatumBatch>& batch, std::string field_name, const arrow::Datum& column) {
- auto field = ::arrow::field(std::move(field_name), column.type());
- Y_VERIFY(field != nullptr);
- Y_VERIFY(field->type()->Equals(column.type()));
- Y_VERIFY(column.is_scalar() || column.length() == batch->rows);
- auto new_schema = *batch->fields->AddField(batch->fields->num_fields(), field);
- batch->datums.push_back(column);
- batch->fields = new_schema;
+CH::AggFunctionId GetHouseFunction(EAggregate op) {
+ switch (op) {
+ case EAggregate::Some:
+ return CH::AggFunctionId::AGG_ANY;
+ case EAggregate::Count:
+ return CH::AggFunctionId::AGG_COUNT;
+ case EAggregate::Min:
+ return CH::AggFunctionId::AGG_MIN;
+ case EAggregate::Max:
+ return CH::AggFunctionId::AGG_MAX;
+ case EAggregate::Sum:
+ return CH::AggFunctionId::AGG_SUM;
+#if 0 // TODO
+ case EAggregate::Avg:
+ return CH::AggFunctionId::AGG_AVG;
+#endif
+ default:
+ break;
+ }
+ return CH::AggFunctionId::AGG_UNSPECIFIED;
}
-arrow::Result<arrow::Datum> GetColumnByName(const std::shared_ptr<TProgramStep::TDatumBatch>& batch, const std::string& name) {
- int i = batch->fields->GetFieldIndex(name);
- if (i == -1) {
- return arrow::Status::Invalid("Not found or duplicate");
+arrow::Status AddColumn(
+ TProgramStep::TDatumBatch& batch,
+ const std::string& name,
+ arrow::Datum&& column)
+{
+ if (batch.schema->GetFieldIndex(name) != -1) {
+ return arrow::Status::Invalid("Trying to add duplicate column '" + name + "'");
+ }
+
+ auto field = arrow::field(name, column.type());
+ if (!field || !field->type()->Equals(column.type())) {
+ return arrow::Status::Invalid("Cannot create field.");
}
- else {
- return batch->datums[i];
+ if (!column.is_scalar() && column.length() != batch.rows) {
+ return arrow::Status::Invalid("Wrong column length.");
+ }
+
+ batch.schema = *batch.schema->AddField(batch.schema->num_fields(), field);
+ batch.datums.emplace_back(column);
+ return arrow::Status::OK();
+}
+
+arrow::Result<arrow::Datum> GetColumnByName(const TProgramStep::TDatumBatch& batch, const std::string& name) {
+ int i = batch.schema->GetFieldIndex(name);
+ if (i == -1) {
+ return arrow::Status::Invalid("Not found column '" + name + "' or duplicate");
+ } else {
+ return batch.datums[i];
}
}
@@ -287,134 +368,236 @@ std::shared_ptr<TProgramStep::TDatumBatch> ToTDatumBatch(std::shared_ptr<arrow::
return std::make_shared<TProgramStep::TDatumBatch>(TProgramStep::TDatumBatch{std::make_shared<arrow::Schema>(*batch->schema()), batch->num_rows(), std::move(datums)});
}
-std::shared_ptr<arrow::RecordBatch> ToRecordBatch(std::shared_ptr<TProgramStep::TDatumBatch>& batch) {
+std::shared_ptr<arrow::RecordBatch> ToRecordBatch(TProgramStep::TDatumBatch& batch) {
std::vector<std::shared_ptr<arrow::Array>> columns;
- columns.reserve(batch->datums.size());
- for (auto col : batch->datums) {
+ columns.reserve(batch.datums.size());
+ for (auto col : batch.datums) {
if (col.is_scalar()) {
- columns.push_back(*arrow::MakeArrayFromScalar(*col.scalar(), batch->rows));
+ columns.push_back(*arrow::MakeArrayFromScalar(*col.scalar(), batch.rows));
}
else if (col.is_array()){
- Y_VERIFY(col.length() != -1);
+ if (col.length() == -1) {
+ return {};
+ }
columns.push_back(col.make_array());
}
}
- return arrow::RecordBatch::Make(batch->fields, batch->rows, columns);
-}
-
-
-std::shared_ptr<arrow::Array> MakeConstantColumn(const arrow::Scalar& value, int64_t size) {
- auto res = arrow::MakeArrayFromScalar(value, size);
- Y_VERIFY(res.ok());
- return *res;
+ return arrow::RecordBatch::Make(batch.schema, batch.rows, columns);
}
-template <typename TOpId, typename TOptions>
-arrow::Datum CallFunctionById(TOpId funcId, const std::vector<std::string>& args,
- const TOptions* funcOpts,
- std::shared_ptr<TProgramStep::TDatumBatch> batch,
- arrow::compute::ExecContext* ctx)
+template <bool houseFunction, typename TOpId, typename TOptions>
+arrow::Result<arrow::Datum> CallFunctionById(
+ TOpId funcId, const std::vector<std::string>& args,
+ const TOptions* funcOpts,
+ const TProgramStep::TDatumBatch& batch,
+ arrow::compute::ExecContext* ctx)
{
std::vector<arrow::Datum> arguments;
arguments.reserve(args.size());
for (auto& colName : args) {
auto column = GetColumnByName(batch, colName);
- Y_VERIFY(column.ok());
+ if (!column.ok()) {
+ return column.status();
+ }
arguments.push_back(*column);
}
- std::string funcName = GetFunctionName(funcId);
-
- arrow::Result<arrow::Datum> result;
- if (ctx != nullptr && ctx->func_registry()->GetFunction(funcName).ok()) {
- result = arrow::compute::CallFunction(GetFunctionName(funcId), arguments, funcOpts, ctx);
+ std::string funcName;
+ if constexpr (houseFunction) {
+ funcName = GetHouseFunctionName(funcId);
} else {
- result = arrow::compute::CallFunction(GetFunctionName(funcId), arguments, funcOpts);
+ funcName = GetFunctionName(funcId);
}
- Y_VERIFY_S(result.ok(), result.status().message());
- return result.ValueOrDie();
+
+ if (ctx && ctx->func_registry()->GetFunction(funcName).ok()) {
+ return arrow::compute::CallFunction(funcName, arguments, funcOpts, ctx);
+ }
+ return arrow::compute::CallFunction(funcName, arguments, funcOpts);
}
-arrow::Datum CallFunctionByAssign(const TAssign& assign,
- std::shared_ptr<TProgramStep::TDatumBatch> batch,
- arrow::compute::ExecContext* ctx)
+arrow::Result<arrow::Datum> CallFunctionByAssign(
+ const TAssign& assign,
+ const TProgramStep::TDatumBatch& batch,
+ arrow::compute::ExecContext* ctx)
{
- return CallFunctionById(assign.GetOperation(), assign.GetArguments(), assign.GetFunctionOptions(), batch, ctx);
+ return CallFunctionById<false>(assign.GetOperation(), assign.GetArguments(), assign.GetFunctionOptions(),
+ batch, ctx);
}
-arrow::Datum CallFunctionByAssign(const TAggregateAssign& assign,
- std::shared_ptr<TProgramStep::TDatumBatch> batch,
- arrow::compute::ExecContext* ctx)
+arrow::Result<arrow::Datum> CallFunctionByAssign(
+ const TAggregateAssign& assign,
+ const TProgramStep::TDatumBatch& batch,
+ arrow::compute::ExecContext* ctx)
{
- return CallFunctionById(assign.GetOperation(), assign.GetArguments(), &assign.GetAggregateOptions(), batch, ctx);
+ return CallFunctionById<false>(assign.GetOperation(), assign.GetArguments(), &assign.GetAggregateOptions(),
+ batch, ctx);
}
-void TProgramStep::ApplyAssignes(std::shared_ptr<TProgramStep::TDatumBatch>& batch,
- arrow::compute::ExecContext* ctx) const
+arrow::Result<arrow::Datum> CallHouseFunctionByAssign(
+ const TAggregateAssign& assign,
+ TProgramStep::TDatumBatch& batch,
+ arrow::compute::ExecContext* ctx)
+{
+ try {
+ return CallFunctionById<true>(assign.GetOperation(), assign.GetArguments(), &assign.GetAggregateOptions(),
+ batch, ctx);
+ } catch (const std::exception& ex) {
+ Y_VERIFY_S(false, ex.what());
+ }
+}
+
+CH::GroupByOptions::Assign GetGroupByAssign(const TAggregateAssign& assign) {
+ CH::GroupByOptions::Assign descr;
+ descr.function = GetHouseFunction(assign.GetOperation());
+ descr.result_column = assign.GetName();
+ descr.arguments.reserve(assign.GetArguments().size());
+
+ for (auto& colName : assign.GetArguments()) {
+ descr.arguments.push_back(colName);
+ }
+ return descr;
+}
+
+}
+
+
+arrow::Status TProgramStep::ApplyAssignes(
+ TProgramStep::TDatumBatch& batch,
+ arrow::compute::ExecContext* ctx) const
{
if (Assignes.empty()) {
- return;
+ return arrow::Status::OK();
}
- batch->datums.reserve(batch->datums.size() + Assignes.size());
+ batch.datums.reserve(batch.datums.size() + Assignes.size());
for (auto& assign : Assignes) {
- Y_VERIFY(!GetColumnByName(batch, assign.GetName()).ok());
+ if (GetColumnByName(batch, assign.GetName()).ok()) {
+ return arrow::Status::Invalid("Assign to existing column '" + assign.GetName() + "'.");
+ }
arrow::Datum column;
if (assign.IsConstant()) {
column = assign.GetConstant();
} else {
- column = CallFunctionByAssign(assign, batch, ctx);
+ auto funcResult = CallFunctionByAssign(assign, batch, ctx);
+ if (!funcResult.ok()) {
+ return funcResult.status();
+ }
+ column = *funcResult;
+ }
+ auto status = AddColumn(batch, assign.GetName(), std::move(column));
+ if (!status.ok()) {
+ return status;
}
- AddColumn(batch, assign.GetName(), column);
}
- //Y_VERIFY(batch->Validate().ok());
+ //return batch->Validate();
+ return arrow::Status::OK();
}
-void TProgramStep::ApplyAggregates(std::shared_ptr<TDatumBatch>& batch, arrow::compute::ExecContext* ctx) const {
+arrow::Status TProgramStep::ApplyAggregates(
+ TDatumBatch& batch,
+ arrow::compute::ExecContext* ctx) const
+{
if (GroupBy.empty()) {
- return;
+ return arrow::Status::OK();
}
- auto res = std::make_shared<TDatumBatch>();
- res->rows = 1; // TODO
- res->datums.reserve(GroupBy.size());
+ ui32 numResultColumns = GroupBy.size() + GroupByKeys.size();
+ TDatumBatch res;
+ res.datums.reserve(numResultColumns);
arrow::FieldVector fields;
- fields.reserve(GroupBy.size());
-
- for (auto& assign : GroupBy) {
- res->datums.push_back(CallFunctionByAssign(assign, batch, ctx));
- auto& column = res->datums.back();
- Y_VERIFY_S(column.is_scalar(), TStringBuilder() << "Aggregate result is not a scalar.");
-
- auto op = assign.GetOperation();
- if (op == EAggregate::Min) {
- const auto& minMax = column.scalar_as<arrow::StructScalar>();
- column = minMax.value[0];
- } else if (op == EAggregate::Max) {
- const auto& minMax = column.scalar_as<arrow::StructScalar>();
- column = minMax.value[1];
+ fields.reserve(numResultColumns);
+
+ if (GroupByKeys.empty()) {
+ for (auto& assign : GroupBy) {
+ auto funcResult = CallFunctionByAssign(assign, batch, ctx);
+ if (!funcResult.ok()) {
+ auto houseResult = CallHouseFunctionByAssign(assign, batch, ctx);
+ if (!houseResult.ok()) {
+ return funcResult.status();
+ }
+ funcResult = houseResult;
+ }
+
+ res.datums.push_back(*funcResult);
+ auto& column = res.datums.back();
+ if (!column.is_scalar()) {
+ return arrow::Status::Invalid("Aggregate result is not a scalar.");
+ }
+
+ if (column.scalar()->type->id() == arrow::Type::STRUCT) {
+ auto op = assign.GetOperation();
+ if (op == EAggregate::Min) {
+ const auto& minMax = column.scalar_as<arrow::StructScalar>();
+ column = minMax.value[0];
+ } else if (op == EAggregate::Max) {
+ const auto& minMax = column.scalar_as<arrow::StructScalar>();
+ column = minMax.value[1];
+ } else {
+ return arrow::Status::Invalid("Unexpected struct result for aggregate function.");
+ }
+ }
+
+ if (!column.type()) {
+ return arrow::Status::Invalid("Aggregate result has no type.");
+ }
+ fields.emplace_back(std::make_shared<arrow::Field>(assign.GetName(), column.type()));
+ }
+
+ res.rows = 1;
+ } else {
+ CH::GroupByOptions funcOpts;
+ funcOpts.schema = batch.schema;
+ funcOpts.assigns.reserve(numResultColumns);
+
+ for (auto& assign : GroupBy) {
+ funcOpts.assigns.emplace_back(GetGroupByAssign(assign));
+ }
+
+ for (auto& key : GroupByKeys) {
+ funcOpts.assigns.emplace_back(CH::GroupByOptions::Assign{
+ .result_column = key
+ });
}
- Y_VERIFY_S(column.type(), TStringBuilder() << "Aggregate result has no type.");
- fields.emplace_back(std::make_shared<arrow::Field>(assign.GetName(), column.type()));
+ auto gbRes = arrow::compute::CallFunction(GetHouseGroupByName(), batch.datums, &funcOpts, ctx);
+ if (!gbRes.ok()) {
+ return gbRes.status();
+ }
+ auto gbBatch = (*gbRes).record_batch();
+
+ for (auto& assign : funcOpts.assigns) {
+ auto column = gbBatch->GetColumnByName(assign.result_column);
+ if (!column) {
+ return arrow::Status::Invalid("No expected column in GROUP BY result.");
+ }
+ fields.emplace_back(std::make_shared<arrow::Field>(assign.result_column, column->type()));
+ res.datums.push_back(column);
+ }
+
+ res.rows = gbBatch->num_rows();
}
- res->fields = std::make_shared<arrow::Schema>(fields);
- batch = res;
+ res.schema = std::make_shared<arrow::Schema>(fields);
+ batch = std::move(res);
+ return arrow::Status::OK();
}
-void TProgramStep::ApplyFilters(std::shared_ptr<TDatumBatch>& batch) const {
+arrow::Status TProgramStep::ApplyFilters(TDatumBatch& batch) const {
if (Filters.empty()) {
- return;
+ return arrow::Status::OK();
}
std::vector<std::vector<bool>> filters;
filters.reserve(Filters.size());
for (auto& colName : Filters) {
auto column = GetColumnByName(batch, colName);
- Y_VERIFY_S(column.ok(), TStringBuilder() << "Column " << colName << " is not ok.");
- Y_VERIFY_S(column->is_array(), TStringBuilder() << "Column " << colName << " is not an array.");
- Y_VERIFY_S(column->type() == arrow::boolean(), TStringBuilder() << "Column " << colName << " type is not bool.");
+ if (!column.ok()) {
+ return column.status();
+ }
+ if (!column->is_array() || column->type() != arrow::boolean()) {
+ return arrow::Status::Invalid("Column '" + colName + "' is not a boolean array.");
+ }
+
auto boolColumn = std::static_pointer_cast<arrow::BooleanArray>(column->make_array());
filters.push_back(std::vector<bool>(boolColumn->length()));
auto& bits = filters.back();
@@ -430,32 +613,50 @@ void TProgramStep::ApplyFilters(std::shared_ptr<TDatumBatch>& batch) const {
if (bits.size()) {
auto filter = NArrow::MakeFilter(bits);
- std::unordered_set<std::string_view> projSet;
- for (auto& str: Projection) {
- projSet.insert(str);
+
+ std::unordered_set<std::string_view> neededColumns;
+ bool allColumns = Projection.empty() && GroupBy.empty();
+ if (!allColumns) {
+ for (auto& aggregate : GroupBy) {
+ for (auto& arg : aggregate.GetArguments()) {
+ neededColumns.insert(arg);
+ }
+ }
+ for (auto& key : GroupByKeys) {
+ neededColumns.insert(key);
+ }
+ for (auto& str : Projection) {
+ neededColumns.insert(str);
+ }
}
- for (int64_t i = 0; i < batch->fields->num_fields(); ++i) {
- //only array filtering, scalar cannot be filtered
- auto& cur_field_name = batch->fields->field(i)->name();
- bool is_proj = (Projection.empty() || projSet.contains(cur_field_name));
- if (batch->datums[i].is_array() && is_proj) {
- auto res = arrow::compute::Filter(batch->datums[i].make_array(), filter);
- Y_VERIFY_S(res.ok(), res.status().message());
- Y_VERIFY((*res).kind() == batch->datums[i].kind());
- batch->datums[i] = *res;
+
+ for (int64_t i = 0; i < batch.schema->num_fields(); ++i) {
+ bool needed = (allColumns || neededColumns.contains(batch.schema->field(i)->name()));
+ if (batch.datums[i].is_array() && needed) {
+ auto res = arrow::compute::Filter(batch.datums[i].make_array(), filter);
+ if (!res.ok()) {
+ return res.status();
+ }
+ if ((*res).kind() != batch.datums[i].kind()) {
+ return arrow::Status::Invalid("Unexpected filter result.");
+ }
+
+ batch.datums[i] = *res;
}
}
+
int newRows = 0;
for (int64_t i = 0; i < filter->length(); ++i) {
newRows += filter->Value(i);
}
- batch->rows = newRows;
+ batch.rows = newRows;
}
+ return arrow::Status::OK();
}
-void TProgramStep::ApplyProjection(std::shared_ptr<TDatumBatch>& batch) const {
+arrow::Status TProgramStep::ApplyProjection(TDatumBatch& batch) const {
if (Projection.empty()) {
- return;
+ return arrow::Status::OK();
}
std::unordered_set<std::string_view> projSet;
for (auto& str: Projection) {
@@ -463,38 +664,69 @@ void TProgramStep::ApplyProjection(std::shared_ptr<TDatumBatch>& batch) const {
}
std::vector<std::shared_ptr<arrow::Field>> newFields;
std::vector<arrow::Datum> newDatums;
- for (int64_t i = 0; i < batch->fields->num_fields(); ++i) {
- auto& cur_field_name = batch->fields->field(i)->name();
+ for (int64_t i = 0; i < batch.schema->num_fields(); ++i) {
+ auto& cur_field_name = batch.schema->field(i)->name();
if (projSet.contains(cur_field_name)) {
- newFields.push_back(batch->fields->field(i));
- Y_VERIFY(newFields.back());
- newDatums.push_back(batch->datums[i]);
+ newFields.push_back(batch.schema->field(i));
+ if (!newFields.back()) {
+ return arrow::Status::Invalid("Wrong projection.");
+ }
+ newDatums.push_back(batch.datums[i]);
}
}
- batch->fields = std::make_shared<arrow::Schema>(newFields);
- batch->datums = std::move(newDatums);
+ batch.schema = std::make_shared<arrow::Schema>(newFields);
+ batch.datums = std::move(newDatums);
+ return arrow::Status::OK();
}
-void TProgramStep::ApplyProjection(std::shared_ptr<arrow::RecordBatch>& batch) const {
+arrow::Status TProgramStep::ApplyProjection(std::shared_ptr<arrow::RecordBatch>& batch) const {
if (Projection.empty()) {
- return;
+ return arrow::Status::OK();
}
std::vector<std::shared_ptr<arrow::Field>> fields;
for (auto& column : Projection) {
fields.push_back(batch->schema()->GetFieldByName(column));
- Y_VERIFY(fields.back());
+ if (!fields.back()) {
+ return arrow::Status::Invalid("Wrong projection column '" + column + "'.");
+ }
}
batch = NArrow::ExtractColumns(batch, std::make_shared<arrow::Schema>(fields));
+ return arrow::Status::OK();
}
-void TProgramStep::Apply(std::shared_ptr<arrow::RecordBatch>& batch, arrow::compute::ExecContext* ctx) const {
+arrow::Status TProgramStep::Apply(std::shared_ptr<arrow::RecordBatch>& batch, arrow::compute::ExecContext* ctx) const {
auto rb = ToTDatumBatch(batch);
- ApplyAssignes(rb, ctx);
- ApplyFilters(rb);
- ApplyAggregates(rb, ctx);
- ApplyProjection(rb);
- batch = ToRecordBatch(rb);
+
+ auto status = ApplyAssignes(*rb, ctx);
+ //Y_VERIFY_S(status.ok(), status.message());
+ if (!status.ok()) {
+ return status;
+ }
+
+ status = ApplyFilters(*rb);
+ //Y_VERIFY_S(status.ok(), status.message());
+ if (!status.ok()) {
+ return status;
+ }
+
+ status = ApplyAggregates(*rb, ctx);
+ //Y_VERIFY_S(status.ok(), status.message());
+ if (!status.ok()) {
+ return status;
+ }
+
+ status = ApplyProjection(*rb);
+ //Y_VERIFY_S(status.ok(), status.message());
+ if (!status.ok()) {
+ return status;
+ }
+
+ batch = ToRecordBatch(*rb);
+ if (!batch) {
+ return arrow::Status::Invalid("Failed to create program result.");
+ }
+ return arrow::Status::OK();
}
}
diff --git a/ydb/core/formats/program.h b/ydb/core/formats/program.h
index 163f82a5c4..166e4e121d 100644
--- a/ydb/core/formats/program.h
+++ b/ydb/core/formats/program.h
@@ -4,6 +4,8 @@
#include <contrib/libs/apache/arrow/cpp/src/arrow/api.h>
#include <util/system/types.h>
+#include <ydb/core/scheme_types/scheme_types_defs.h>
+
namespace NKikimr::NArrow {
enum class EOperation {
@@ -86,16 +88,18 @@ enum class EOperation {
enum class EAggregate {
Unspecified = 0,
- Any = 1,
+ Some = 1,
Count = 2,
Min = 3,
Max = 4,
Sum = 5,
- Avg = 6,
+ //Avg = 6,
};
const char * GetFunctionName(EOperation op);
const char * GetFunctionName(EAggregate op);
+const char * GetHouseFunctionName(EAggregate op);
+inline const char * GetHouseGroupByName() { return "ch.group_by"; }
EOperation ValidateOperation(EOperation op, ui32 argsSize);
class TAssign {
@@ -200,7 +204,8 @@ public:
, Operation(op)
, Arguments({std::move(arg)})
{
- if (arg.empty()) {
+ if (arg.empty() && op != EAggregate::Count) {
+ // COUNT(*) doesn't have arguments
op = EAggregate::Unspecified;
}
}
@@ -231,10 +236,11 @@ struct TProgramStep {
std::vector<TAssign> Assignes;
std::vector<std::string> Filters; // List of filter columns. Implicit "Filter by (f1 AND f2 AND .. AND fn)"
std::vector<TAggregateAssign> GroupBy;
+ std::vector<std::string> GroupByKeys; // TODO: it's possible to use them without GROUP BY for DISTINCT
std::vector<std::string> Projection; // Step's result columns (remove others)
struct TDatumBatch {
- std::shared_ptr<arrow::Schema> fields;
+ std::shared_ptr<arrow::Schema> schema;
int64_t rows;
std::vector<arrow::Datum> datums;
};
@@ -243,21 +249,32 @@ struct TProgramStep {
return Assignes.empty() && Filters.empty() && Projection.empty();
}
- void Apply(std::shared_ptr<arrow::RecordBatch>& batch, arrow::compute::ExecContext* ctx) const;
+ arrow::Status Apply(std::shared_ptr<arrow::RecordBatch>& batch, arrow::compute::ExecContext* ctx) const;
- void ApplyAssignes(std::shared_ptr<TDatumBatch>& batch, arrow::compute::ExecContext* ctx) const;
- void ApplyAggregates(std::shared_ptr<TDatumBatch>& batch, arrow::compute::ExecContext* ctx) const;
- void ApplyFilters(std::shared_ptr<TDatumBatch>& batch) const;
- void ApplyProjection(std::shared_ptr<arrow::RecordBatch>& batch) const;
- void ApplyProjection(std::shared_ptr<TDatumBatch>& batch) const;
+ arrow::Status ApplyAssignes(TDatumBatch& batch, arrow::compute::ExecContext* ctx) const;
+ arrow::Status ApplyAggregates(TDatumBatch& batch, arrow::compute::ExecContext* ctx) const;
+ arrow::Status ApplyFilters(TDatumBatch& batch) const;
+ arrow::Status ApplyProjection(std::shared_ptr<arrow::RecordBatch>& batch) const;
+ arrow::Status ApplyProjection(TDatumBatch& batch) const;
};
-inline void ApplyProgram(std::shared_ptr<arrow::RecordBatch>& batch,
- const std::vector<std::shared_ptr<TProgramStep>>& program,
- arrow::compute::ExecContext* ctx = nullptr) {
+inline arrow::Status ApplyProgram(
+ std::shared_ptr<arrow::RecordBatch>& batch,
+ const std::vector<std::shared_ptr<TProgramStep>>& program,
+ arrow::compute::ExecContext* ctx = nullptr)
+{
for (auto& step : program) {
- step->Apply(batch, ctx);
+ auto status = step->Apply(batch, ctx);
+ if (!status.ok()) {
+ return status;
+ }
}
+ return arrow::Status::OK();
}
+struct TSsaProgramSteps {
+ std::vector<std::shared_ptr<TProgramStep>> Program;
+ THashMap<ui32, TString> ProgramSourceColumns;
+};
+
}
diff --git a/ydb/core/formats/ssa_program_optimizer.cpp b/ydb/core/formats/ssa_program_optimizer.cpp
new file mode 100644
index 0000000000..400fe09f18
--- /dev/null
+++ b/ydb/core/formats/ssa_program_optimizer.cpp
@@ -0,0 +1,36 @@
+#include "ssa_program_optimizer.h"
+
+namespace NKikimr::NSsaOptimizer {
+
+namespace {
+
+std::vector<std::shared_ptr<NArrow::TProgramStep>> ReplaceCountAll(const std::vector<std::shared_ptr<NArrow::TProgramStep>>& program, const NTable::TScheme::TTableSchema& tableSchema) {
+ std::vector<std::shared_ptr<NArrow::TProgramStep>> newProgram;
+ newProgram.reserve(program.size());
+
+ for (auto& step : program) {
+ newProgram.push_back(std::make_shared<NArrow::TProgramStep>(*step));
+ for (size_t i = 0; i < step->GroupBy.size(); ++i) {
+ auto groupBy = step->GroupBy[i];
+ auto& newGroupBy = newProgram.back()->GroupBy;
+ if (groupBy.GetOperation() == NArrow::EAggregate::Count
+ && groupBy.GetArguments().size() == 1
+ && groupBy.GetArguments()[0] == "") {
+ // COUNT(*)
+ auto replaceIt = std::next(newGroupBy.begin(), i);
+ replaceIt = newGroupBy.erase(replaceIt);
+ auto pkColName = tableSchema.Columns.find(tableSchema.KeyColumns[0])->second.Name;
+ newGroupBy.emplace(replaceIt, groupBy.GetName(), groupBy.GetOperation(), std::string(pkColName));
+ }
+ }
+ }
+ return newProgram;
+}
+
+} // anonymous namespace
+
+std::vector<std::shared_ptr<NArrow::TProgramStep>> OptimizeProgram(const std::vector<std::shared_ptr<NArrow::TProgramStep>>& program, const NTable::TScheme::TTableSchema& tableSchema) {
+ return ReplaceCountAll(program, tableSchema);
+}
+
+} // namespace NKikimr::NSsaOptimizer
diff --git a/ydb/core/formats/ssa_program_optimizer.h b/ydb/core/formats/ssa_program_optimizer.h
new file mode 100644
index 0000000000..12c48dd1db
--- /dev/null
+++ b/ydb/core/formats/ssa_program_optimizer.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include "program.h"
+
+#include <ydb/core/protos/ssa.pb.h>
+#include <ydb/core/tablet_flat/flat_dbase_scheme.h>
+
+namespace NKikimr::NSsaOptimizer {
+
+std::vector<std::shared_ptr<NArrow::TProgramStep>> OptimizeProgram(const std::vector<std::shared_ptr<NArrow::TProgramStep>>& program, const NTable::TScheme::TTableSchema& tableSchema);
+
+}
diff --git a/ydb/core/formats/ut/CMakeLists.darwin.txt b/ydb/core/formats/ut/CMakeLists.darwin.txt
index 2f19d1653b..d5029e328f 100644
--- a/ydb/core/formats/ut/CMakeLists.darwin.txt
+++ b/ydb/core/formats/ut/CMakeLists.darwin.txt
@@ -14,6 +14,7 @@ target_compile_options(ydb-core-formats-ut PRIVATE
)
target_include_directories(ydb-core-formats-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/formats
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
)
target_link_libraries(ydb-core-formats-ut PUBLIC
contrib-libs-cxxsupp
diff --git a/ydb/core/formats/ut/CMakeLists.linux.txt b/ydb/core/formats/ut/CMakeLists.linux.txt
index 28f7e2e587..41b2721bf2 100644
--- a/ydb/core/formats/ut/CMakeLists.linux.txt
+++ b/ydb/core/formats/ut/CMakeLists.linux.txt
@@ -14,6 +14,7 @@ target_compile_options(ydb-core-formats-ut PRIVATE
)
target_include_directories(ydb-core-formats-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/formats
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
)
target_link_libraries(ydb-core-formats-ut PUBLIC
contrib-libs-cxxsupp
diff --git a/ydb/core/formats/ut/CMakeLists.txt b/ydb/core/formats/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/formats/ut/CMakeLists.txt
+++ b/ydb/core/formats/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/formats/ut_program_step.cpp b/ydb/core/formats/ut_program_step.cpp
index fa368af562..a3a62ab957 100644
--- a/ydb/core/formats/ut_program_step.cpp
+++ b/ydb/core/formats/ut_program_step.cpp
@@ -23,7 +23,7 @@ size_t FilterTest(std::vector<std::shared_ptr<arrow::Array>> args, EOperation fr
ps->Assignes = {TAssign("res1", frst, {"x", "y"}), TAssign("res2", scnd, {"res1", "z"})};
ps->Filters = {"res2"};
ps->Projection = {"res1", "res2"};
- ApplyProgram(rBatch, {ps}, GetCustomExecContext());
+ UNIT_ASSERT(ApplyProgram(rBatch, {ps}, GetCustomExecContext()).ok());
UNIT_ASSERT(rBatch->ValidateFull().ok());
UNIT_ASSERT(rBatch->num_columns() == 2);
return rBatch->num_rows();
@@ -39,7 +39,7 @@ size_t FilterTestUnary(std::vector<std::shared_ptr<arrow::Array>> args, EOperati
ps->Assignes = {TAssign("res1", frst, {"x"}), TAssign("res2", scnd, {"res1", "z"})};
ps->Filters = {"res2"};
ps->Projection = {"res1", "res2"};
- ApplyProgram(rBatch, {ps}, GetCustomExecContext());
+ UNIT_ASSERT(ApplyProgram(rBatch, {ps}, GetCustomExecContext()).ok());
UNIT_ASSERT(rBatch->ValidateFull().ok());
UNIT_ASSERT(rBatch->num_columns() == 2);
return rBatch->num_rows();
@@ -173,7 +173,7 @@ Y_UNIT_TEST_SUITE(ProgramStepTest) {
ps->Assignes = {TAssign("y", 56), TAssign("res", EOperation::Add, {"x", "y"})};
ps->Filters = {"filter"};
ps->Projection = {"res", "filter"};
- ApplyProgram(rBatch, {ps}, GetCustomExecContext());
+ UNIT_ASSERT(ApplyProgram(rBatch, {ps}, GetCustomExecContext()).ok());
UNIT_ASSERT(rBatch->ValidateFull().ok());
UNIT_ASSERT(rBatch->num_columns() == 2);
UNIT_ASSERT(rBatch->num_rows() == 2);
@@ -189,7 +189,7 @@ Y_UNIT_TEST_SUITE(ProgramStepTest) {
ps->Assignes = {TAssign("y", 56), TAssign("res", EOperation::Add, {"x", "y"})};
ps->Filters = {};
ps->Projection = {"res", "filter"};
- ApplyProgram(rBatch, {ps}, GetCustomExecContext());
+ UNIT_ASSERT(ApplyProgram(rBatch, {ps}, GetCustomExecContext()).ok());
UNIT_ASSERT(rBatch->ValidateFull().ok());
UNIT_ASSERT(rBatch->num_columns() == 2);
UNIT_ASSERT(rBatch->num_rows() == 4);
diff --git a/ydb/core/grpc_services/CMakeLists.txt b/ydb/core/grpc_services/CMakeLists.txt
index 658e23468b..9299bc2887 100644
--- a/ydb/core/grpc_services/CMakeLists.txt
+++ b/ydb/core/grpc_services/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(base)
+add_subdirectory(counters)
+add_subdirectory(local_rpc)
+add_subdirectory(ut)
add_library(ydb-core-grpc_services)
target_compile_options(ydb-core-grpc_services PRIVATE
@@ -114,7 +118,6 @@ target_sources(ydb-core-grpc_services PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/rpc_stream_execute_yql_script.cpp
${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/rpc_whoami.cpp
${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/rpc_yq.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/table_profiles.cpp
${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/table_settings.cpp
${CMAKE_SOURCE_DIR}/ydb/core/grpc_services/rpc_analytics_internal.cpp
)
diff --git a/ydb/core/grpc_services/base/base.h b/ydb/core/grpc_services/base/base.h
index e45beccd1a..785bd032bb 100644
--- a/ydb/core/grpc_services/base/base.h
+++ b/ydb/core/grpc_services/base/base.h
@@ -313,8 +313,12 @@ enum class TRateLimiterMode : ui8 {
Rps = 1,
Ru = 2,
RuOnProgress = 3,
+ RuManual = 4,
};
+#define RLSWITCH(mode) \
+ IsRlAllowed() ? mode : TRateLimiterMode::Off
+
class ICheckerIface;
// The way to pass some common data to request processing
@@ -565,20 +569,22 @@ inline TMaybe<TString> ToMaybe(const TVector<TStringBuf>& vec) {
return TString{vec[0]};
}
-template<ui32 TRpcId, typename TReq, typename TResp>
+template<ui32 TRpcId, typename TReq, typename TResp, TRateLimiterMode RlMode = TRateLimiterMode::Off>
class TGRpcRequestBiStreamWrapper :
public IRequestProxyCtx,
- public TEventLocal<TGRpcRequestBiStreamWrapper<TRpcId, TReq, TResp>, TRpcId> {
+ public TEventLocal<TGRpcRequestBiStreamWrapper<TRpcId, TReq, TResp, RlMode>, TRpcId> {
public:
using TRequest = TReq;
using TResponse = TResp;
using IStreamCtx = NGRpcServer::IGRpcStreamingContext<TRequest, TResponse>;
- TGRpcRequestBiStreamWrapper(TIntrusivePtr<IStreamCtx> ctx)
+ static constexpr TRateLimiterMode RateLimitMode = RlMode;
+ TGRpcRequestBiStreamWrapper(TIntrusivePtr<IStreamCtx> ctx, bool rlAllowed = true)
: Ctx_(ctx)
+ , RlAllowed_(rlAllowed)
{ }
TRateLimiterMode GetRlMode() const override {
- return TRateLimiterMode::Off;
+ return RlAllowed_ ? RateLimitMode : TRateLimiterMode::Off;
}
bool TryCustomAttributeProcess(const TSchemeBoardEvents::TDescribeSchemeResult&, ICheckerIface*) override {
@@ -740,6 +746,7 @@ private:
TString InternalToken_;
NYql::TIssueManager IssueManager_;
TMaybe<NRpcService::TRlPath> RlPath_;
+ bool RlAllowed_;
};
template <typename TDerived>
@@ -1247,12 +1254,13 @@ public:
static IActor* CreateRpcActor(typename std::conditional<IsOperation, IRequestOpCtx, IRequestNoOpCtx>::type* msg);
static constexpr bool IsOp = IsOperation;
static constexpr TRateLimiterMode RateLimitMode = RlMode;
- TGRpcRequestValidationWrapper(NGrpc::IRequestContextBase* ctx)
+ TGRpcRequestValidationWrapper(NGrpc::IRequestContextBase* ctx, bool rlAllowed = true)
: TGRpcRequestWrapperImpl<TRpcId, TReq, TResp, IsOperation, TGRpcRequestValidationWrapper<TRpcId, TReq, TResp, IsOperation, RlMode>>(ctx)
+ , RlAllowed(rlAllowed)
{ }
TRateLimiterMode GetRlMode() const override {
- return RateLimitMode;
+ return RlAllowed ? RateLimitMode : TRateLimiterMode::Off;
}
bool TryCustomAttributeProcess(const TSchemeBoardEvents::TDescribeSchemeResult&, ICheckerIface*) override {
@@ -1262,6 +1270,8 @@ public:
bool Validate(TString& error) override {
return this->GetProtoRequest()->validate(error);
}
+private:
+ bool RlAllowed;
};
} // namespace NGRpcService
diff --git a/ydb/core/grpc_services/base/base_service.h b/ydb/core/grpc_services/base/base_service.h
new file mode 100644
index 0000000000..52db0b46df
--- /dev/null
+++ b/ydb/core/grpc_services/base/base_service.h
@@ -0,0 +1,66 @@
+#pragma once
+
+#include <library/cpp/grpc/server/grpc_request_base.h>
+#include <library/cpp/grpc/server/logger.h>
+
+namespace NKikimr {
+namespace NGRpcService {
+
+class TGrpcServiceCfg {
+public:
+ TGrpcServiceCfg(bool rlAllowed)
+ : RlAllowed_(rlAllowed)
+ { }
+
+ bool IsRlAllowed() const {
+ return RlAllowed_;
+ }
+private:
+ const bool RlAllowed_;
+};
+
+template <typename T>
+class TGrpcServiceBase
+ : public NGrpc::TGrpcServiceBase<T>
+ , public TGrpcServiceCfg
+{
+public:
+ TGrpcServiceBase(NActors::TActorSystem *system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NActors::TActorId id, bool rlAllowed)
+ : TGrpcServiceCfg(rlAllowed)
+ , ActorSystem_(system)
+ , Counters_(counters)
+ , GRpcRequestProxyId_(id)
+{ }
+
+ void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override {
+ CQ_ = cq;
+ SetupIncomingRequests(std::move(logger));
+ }
+
+ void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override {
+ Limiter_ = limiter;
+ }
+
+ bool IncRequest() {
+ return Limiter_->Inc();
+ }
+
+ void DecRequest() {
+ Limiter_->Dec();
+ Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
+ }
+
+protected:
+ virtual void SetupIncomingRequests(NGrpc::TLoggerPtr logger) = 0;
+
+ NActors::TActorSystem* ActorSystem_;
+ grpc::ServerCompletionQueue* CQ_ = nullptr;
+
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters_;
+ const NActors::TActorId GRpcRequestProxyId_;
+
+ NGrpc::TGlobalLimiter* Limiter_ = nullptr;
+};
+
+}
+}
diff --git a/ydb/core/grpc_services/counters/counters.cpp b/ydb/core/grpc_services/counters/counters.cpp
index b47428c319..1d9d8733ae 100644
--- a/ydb/core/grpc_services/counters/counters.cpp
+++ b/ydb/core/grpc_services/counters/counters.cpp
@@ -15,20 +15,20 @@ namespace NGRpcService {
using namespace NActors;
struct TYdbRpcCounters {
- TYdbRpcCounters(const NMonitoring::TDynamicCounterPtr& counters, const char* serviceName,
+ TYdbRpcCounters(const ::NMonitoring::TDynamicCounterPtr& counters, const char* serviceName,
const char* requestName, bool forDatabase);
- NMonitoring::TDynamicCounters::TCounterPtr RequestCount;
- NMonitoring::TDynamicCounters::TCounterPtr RequestInflight;
- NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr RequestInflightBytes;
- NMonitoring::TDynamicCounters::TCounterPtr RequestRpcError;
-
- NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
- NMonitoring::TDynamicCounters::TCounterPtr ResponseRpcError;
- NMonitoring::TDynamicCounters::TCounterPtr ResponseRpcNotAuthenticated;
- NMonitoring::TDynamicCounters::TCounterPtr ResponseRpcResourceExhausted;
- THashMap<ui32, NMonitoring::TDynamicCounters::TCounterPtr> ResponseByStatus;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestInflight;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestInflightBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestRpcError;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResponseRpcError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResponseRpcNotAuthenticated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResponseRpcResourceExhausted;
+ THashMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr> ResponseByStatus;
};
class TYdbCounterBlock : public NGrpc::ICounterBlock {
@@ -38,27 +38,27 @@ protected:
// "Internal" counters
// TODO: Switch to public YDB counters
- NMonitoring::TDynamicCounters::TCounterPtr TotalCounter;
- NMonitoring::TDynamicCounters::TCounterPtr InflyCounter;
- NMonitoring::TDynamicCounters::TCounterPtr NotOkRequestCounter;
- NMonitoring::TDynamicCounters::TCounterPtr NotOkResponseCounter;
- NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr InflyRequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
- NMonitoring::TDynamicCounters::TCounterPtr NotAuthenticated;
- NMonitoring::TDynamicCounters::TCounterPtr ResourceExhausted;
- NMonitoring::TDynamicCounters::TCounterPtr RequestsWithoutDatabase;
- NMonitoring::TDynamicCounters::TCounterPtr RequestsWithoutToken;
- NMonitoring::TDynamicCounters::TCounterPtr RequestsWithoutTls;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TotalCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InflyCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NotOkRequestCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NotOkResponseCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InflyRequestBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NotAuthenticated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResourceExhausted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestsWithoutDatabase;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestsWithoutToken;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestsWithoutTls;
NMonitoring::TPercentileTracker<4, 512, 15> RequestHistMs;
- std::array<NMonitoring::TDynamicCounters::TCounterPtr, 2> GRpcStatusCounters;
+ std::array<::NMonitoring::TDynamicCounters::TCounterPtr, 2> GRpcStatusCounters;
TYdbRpcCounters YdbCounters;
public:
- TYdbCounterBlock(const NMonitoring::TDynamicCounterPtr& counters, const char* serviceName,
+ TYdbCounterBlock(const ::NMonitoring::TDynamicCounterPtr& counters, const char* serviceName,
const char* requestName, bool percentile, bool streaming,
- bool forDatabase = false, NMonitoring::TDynamicCounterPtr internalGroup = {});
+ bool forDatabase = false, ::NMonitoring::TDynamicCounterPtr internalGroup = {});
void CountNotOkRequest() override {
NotOkRequestCounter->Inc();
@@ -153,10 +153,10 @@ public:
}
};
-TYdbRpcCounters::TYdbRpcCounters(const NMonitoring::TDynamicCounterPtr& counters,
+TYdbRpcCounters::TYdbRpcCounters(const ::NMonitoring::TDynamicCounterPtr& counters,
const char* serviceName, const char* requestName, bool forDatabase)
{
- NMonitoring::TDynamicCounterPtr ydbGroup;
+ ::NMonitoring::TDynamicCounterPtr ydbGroup;
if (forDatabase) {
ydbGroup = counters;
} else {
@@ -220,15 +220,15 @@ TYdbRpcCounters::TYdbRpcCounters(const NMonitoring::TDynamicCounterPtr& counters
typeGroup->GetSubgroup("status", "SESSION_BUSY")->GetNamedCounter("name", countName, true);
}
-TYdbCounterBlock::TYdbCounterBlock(const NMonitoring::TDynamicCounterPtr& counters, const char* serviceName,
+TYdbCounterBlock::TYdbCounterBlock(const ::NMonitoring::TDynamicCounterPtr& counters, const char* serviceName,
const char* requestName, bool percentile, bool streaming,
- bool forDatabase, NMonitoring::TDynamicCounterPtr internalGroup)
+ bool forDatabase, ::NMonitoring::TDynamicCounterPtr internalGroup)
: Streaming(streaming)
, Percentile(percentile)
, YdbCounters(counters, serviceName, requestName, forDatabase)
{
// group for all counters
- NMonitoring::TDynamicCounterPtr group;
+ ::NMonitoring::TDynamicCounterPtr group;
if (forDatabase) {
group = internalGroup;
} else {
@@ -293,9 +293,9 @@ using TYdbCounterBlockPtr = TIntrusivePtr<TYdbCounterBlock>;
class TYdbDbCounterBlock : public TYdbCounterBlock {
public:
- TYdbDbCounterBlock(const NMonitoring::TDynamicCounterPtr& counters, const char* serviceName,
+ TYdbDbCounterBlock(const ::NMonitoring::TDynamicCounterPtr& counters, const char* serviceName,
const char* requestName, bool percentile, bool streaming,
- NMonitoring::TDynamicCounterPtr internalGroup = {})
+ ::NMonitoring::TDynamicCounterPtr internalGroup = {})
: TYdbCounterBlock(counters, serviceName, requestName, percentile, streaming, true, internalGroup)
{}
@@ -354,11 +354,11 @@ using TYdbDbCounterBlockPtr = TIntrusivePtr<TYdbDbCounterBlock>;
class TGRpcDbCounters : public NSysView::IDbCounters {
public:
TGRpcDbCounters()
- : Counters(new NMonitoring::TDynamicCounters)
- , InternalGroup(new NMonitoring::TDynamicCounters)
+ : Counters(new ::NMonitoring::TDynamicCounters)
+ , InternalGroup(new ::NMonitoring::TDynamicCounters)
{}
- TGRpcDbCounters(NMonitoring::TDynamicCounterPtr counters, NMonitoring::TDynamicCounterPtr internalGroup)
+ TGRpcDbCounters(::NMonitoring::TDynamicCounterPtr counters, ::NMonitoring::TDynamicCounterPtr internalGroup)
: Counters(counters)
, InternalGroup(internalGroup)
{}
@@ -394,8 +394,8 @@ public:
}
private:
- NMonitoring::TDynamicCounterPtr Counters;
- NMonitoring::TDynamicCounterPtr InternalGroup;
+ ::NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr InternalGroup;
using TKey = std::pair<TString, TString>;
TConcurrentRWHashMap<TKey, TYdbDbCounterBlockPtr, 16> CounterBlocks;
@@ -470,7 +470,7 @@ class TYdbCounterBlockWrapper : public NGrpc::ICounterBlock {
bool Percentile = false;
bool Streaming = false;
- NMonitoring::TDynamicCounterPtr Root;
+ ::NMonitoring::TDynamicCounterPtr Root;
TYdbDbCounterBlockPtr Db;
public:
@@ -481,7 +481,7 @@ public:
, RequestName(requestName)
, Percentile(percentile)
, Streaming(streaming)
- , Root(new NMonitoring::TDynamicCounters)
+ , Root(new ::NMonitoring::TDynamicCounters)
, Db(new TYdbDbCounterBlock(Root, serviceName.c_str(), requestName.c_str(), percentile, streaming, Root))
{}
@@ -607,7 +607,7 @@ public:
})
};
-TServiceCounterCB::TServiceCounterCB(NMonitoring::TDynamicCounterPtr counters, TActorSystem *actorSystem)
+TServiceCounterCB::TServiceCounterCB(::NMonitoring::TDynamicCounterPtr counters, TActorSystem *actorSystem)
: Counters(std::move(counters))
, ActorSystem(actorSystem)
{
@@ -635,8 +635,8 @@ NGrpc::ICounterBlockPtr TServiceCounterCB::operator()(const char* serviceName,
}
TIntrusivePtr<NSysView::IDbCounters> CreateGRpcDbCounters(
- NMonitoring::TDynamicCounterPtr externalGroup,
- NMonitoring::TDynamicCounterPtr internalGroup)
+ ::NMonitoring::TDynamicCounterPtr externalGroup,
+ ::NMonitoring::TDynamicCounterPtr internalGroup)
{
return new TGRpcDbCounters(externalGroup, internalGroup);
}
diff --git a/ydb/core/grpc_services/counters/counters.h b/ydb/core/grpc_services/counters/counters.h
index da499dac9e..198a415a57 100644
--- a/ydb/core/grpc_services/counters/counters.h
+++ b/ydb/core/grpc_services/counters/counters.h
@@ -9,26 +9,26 @@ namespace NGRpcService {
class TServiceCounterCB {
public:
- TServiceCounterCB(NMonitoring::TDynamicCounterPtr counters, TActorSystem *actorSystem);
+ TServiceCounterCB(::NMonitoring::TDynamicCounterPtr counters, TActorSystem *actorSystem);
NGrpc::ICounterBlockPtr operator()(const char* serviceName, const char* requestName,
bool percentile = true, bool streaming = false) const;
private:
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TActorSystem* ActorSystem;
TActorId ActorId;
};
-inline TServiceCounterCB CreateCounterCb(NMonitoring::TDynamicCounterPtr counters,
+inline TServiceCounterCB CreateCounterCb(::NMonitoring::TDynamicCounterPtr counters,
TActorSystem *actorSystem)
{
return TServiceCounterCB(std::move(counters), actorSystem);
}
TIntrusivePtr<NSysView::IDbCounters> CreateGRpcDbCounters(
- NMonitoring::TDynamicCounterPtr externalGroup,
- NMonitoring::TDynamicCounterPtr internalGroup);
+ ::NMonitoring::TDynamicCounterPtr externalGroup,
+ ::NMonitoring::TDynamicCounterPtr internalGroup);
} // namespace NGRpcService
} // namespace NKikimr
diff --git a/ydb/core/grpc_services/counters/proxy_counters.cpp b/ydb/core/grpc_services/counters/proxy_counters.cpp
index 618d2bcd8b..893a4c5f2b 100644
--- a/ydb/core/grpc_services/counters/proxy_counters.cpp
+++ b/ydb/core/grpc_services/counters/proxy_counters.cpp
@@ -12,18 +12,18 @@ namespace NGRpcService {
class TGRpcProxyCounters : public IGRpcProxyCounters {
protected:
- NMonitoring::TDynamicCounters::TCounterPtr DatabaseAccessDenyCounter_;
- NMonitoring::TDynamicCounters::TCounterPtr DatabaseSchemeErrorCounter_;
- NMonitoring::TDynamicCounters::TCounterPtr DatabaseUnavailableCounter_;
- NMonitoring::TDynamicCounters::TCounterPtr DatabaseRateLimitedCounter_;
- NMonitoring::TDynamicCounters::TCounterPtr ConsumedRUCounter_;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DatabaseAccessDenyCounter_;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DatabaseSchemeErrorCounter_;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DatabaseUnavailableCounter_;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DatabaseRateLimitedCounter_;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ConsumedRUCounter_;
NMonitoring::THistogramPtr ThrottleDelayHistogram_;
public:
using TPtr = TIntrusivePtr<TGRpcProxyCounters>;
- TGRpcProxyCounters(NMonitoring::TDynamicCounterPtr counters, bool forDatabase) {
- NMonitoring::TDynamicCounterPtr group;
+ TGRpcProxyCounters(::NMonitoring::TDynamicCounterPtr counters, bool forDatabase) {
+ ::NMonitoring::TDynamicCounterPtr group;
if (forDatabase) {
group = counters;
} else {
@@ -126,7 +126,7 @@ class TGRpcProxyDbCounters : public TGRpcProxyCounters, public NSysView::IDbCoun
public:
using TPtr = TIntrusivePtr<TGRpcProxyDbCounters>;
- explicit TGRpcProxyDbCounters(NMonitoring::TDynamicCounterPtr counters)
+ explicit TGRpcProxyDbCounters(::NMonitoring::TDynamicCounterPtr counters)
: TGRpcProxyCounters(counters, true)
{}
@@ -183,7 +183,7 @@ public:
class TGRpcProxyDbCountersRegistry {
- NMonitoring::TDynamicCounterPtr Root;
+ ::NMonitoring::TDynamicCounterPtr Root;
TConcurrentRWHashMap<TString, TGRpcProxyDbCounters::TPtr, 256> DbCounters;
TActorSystem* ActorSystem = {};
TActorId DbWatcherActorId;
@@ -197,7 +197,7 @@ class TGRpcProxyDbCountersRegistry {
public:
TGRpcProxyDbCountersRegistry()
- : Root(new NMonitoring::TDynamicCounters)
+ : Root(new ::NMonitoring::TDynamicCounters)
{}
void Initialize(TActorSystem* actorSystem) {
@@ -245,13 +245,13 @@ public:
class TGRpcProxyCountersWrapper : public IGRpcProxyCounters {
IGRpcProxyCounters::TPtr Common;
- NMonitoring::TDynamicCounterPtr Root;
+ ::NMonitoring::TDynamicCounterPtr Root;
TGRpcProxyDbCounters::TPtr Db;
public:
explicit TGRpcProxyCountersWrapper(IGRpcProxyCounters::TPtr common)
: Common(common)
- , Root(new NMonitoring::TDynamicCounters)
+ , Root(new ::NMonitoring::TDynamicCounters)
, Db(new TGRpcProxyDbCounters(Root))
{}
@@ -301,13 +301,13 @@ IGRpcProxyCounters::TPtr WrapGRpcProxyDbCounters(IGRpcProxyCounters::TPtr common
return MakeIntrusive<TGRpcProxyCountersWrapper>(common);
}
-IGRpcProxyCounters::TPtr CreateGRpcProxyCounters(NMonitoring::TDynamicCounterPtr appCounters) {
+IGRpcProxyCounters::TPtr CreateGRpcProxyCounters(::NMonitoring::TDynamicCounterPtr appCounters) {
return MakeIntrusive<TGRpcProxyCounters>(appCounters, false);
}
TIntrusivePtr<NSysView::IDbCounters> CreateGRpcProxyDbCounters(
- NMonitoring::TDynamicCounterPtr externalGroup,
- NMonitoring::TDynamicCounterPtr internalGroup)
+ ::NMonitoring::TDynamicCounterPtr externalGroup,
+ ::NMonitoring::TDynamicCounterPtr internalGroup)
{
Y_UNUSED(externalGroup);
return MakeIntrusive<TGRpcProxyDbCounters>(internalGroup);
diff --git a/ydb/core/grpc_services/counters/proxy_counters.h b/ydb/core/grpc_services/counters/proxy_counters.h
index 27e6217465..e0cab10822 100644
--- a/ydb/core/grpc_services/counters/proxy_counters.h
+++ b/ydb/core/grpc_services/counters/proxy_counters.h
@@ -24,11 +24,11 @@ public:
IGRpcProxyCounters::TPtr WrapGRpcProxyDbCounters(IGRpcProxyCounters::TPtr common);
-IGRpcProxyCounters::TPtr CreateGRpcProxyCounters(NMonitoring::TDynamicCounterPtr appCounters);
+IGRpcProxyCounters::TPtr CreateGRpcProxyCounters(::NMonitoring::TDynamicCounterPtr appCounters);
TIntrusivePtr<NSysView::IDbCounters> CreateGRpcProxyDbCounters(
- NMonitoring::TDynamicCounterPtr externalGroup,
- NMonitoring::TDynamicCounterPtr internalGroup);
+ ::NMonitoring::TDynamicCounterPtr externalGroup,
+ ::NMonitoring::TDynamicCounterPtr internalGroup);
void InitializeGRpcProxyDbCountersRegistry(TActorSystem* actorSystem);
diff --git a/ydb/core/grpc_services/grpc_request_check_actor.h b/ydb/core/grpc_services/grpc_request_check_actor.h
index 869e3ea23e..e073ea2677 100644
--- a/ydb/core/grpc_services/grpc_request_check_actor.h
+++ b/ydb/core/grpc_services/grpc_request_check_actor.h
@@ -145,6 +145,14 @@ public:
}
);
+ // Just set RlPath
+ static NRpcService::TRlConfig ruRlManualConfig(
+ "serverless_rt_coordination_node_path",
+ "serverless_rt_base_resource_ru",
+ {
+ // no actions
+ }
+ );
auto rlMode = Request_->Get()->GetRlMode();
switch (rlMode) {
@@ -157,6 +165,9 @@ public:
case TRateLimiterMode::RuOnProgress:
RlConfig = &ruRlProgressConfig;
break;
+ case TRateLimiterMode::RuManual:
+ RlConfig = &ruRlManualConfig;
+ break;
case TRateLimiterMode::Off:
break;
}
diff --git a/ydb/core/grpc_services/grpc_request_proxy.cpp b/ydb/core/grpc_services/grpc_request_proxy.cpp
index d16e1c5284..3439825d5d 100644
--- a/ydb/core/grpc_services/grpc_request_proxy.cpp
+++ b/ydb/core/grpc_services/grpc_request_proxy.cpp
@@ -583,7 +583,7 @@ void TGRpcRequestProxyImpl::StateFunc(TAutoPtr<IEventHandle>& ev, const TActorCo
HFunc(TEvExperimentalStreamQueryRequest, PreHandle);
HFunc(TEvStreamPQWriteRequest, PreHandle);
HFunc(TEvStreamPQMigrationReadRequest, PreHandle);
-// HFunc(TEvStreamTopicWriteRequest, PreHandle);
+ HFunc(TEvStreamTopicWriteRequest, PreHandle);
HFunc(TEvStreamTopicReadRequest, PreHandle);
HFunc(TEvPQReadInfoRequest, PreHandle);
HFunc(TEvPQDropTopicRequest, PreHandle);
diff --git a/ydb/core/grpc_services/grpc_request_proxy.h b/ydb/core/grpc_services/grpc_request_proxy.h
index 3d632b1c45..8c7ee34e39 100644
--- a/ydb/core/grpc_services/grpc_request_proxy.h
+++ b/ydb/core/grpc_services/grpc_request_proxy.h
@@ -55,7 +55,7 @@ protected:
void Handle(TEvExperimentalStreamQueryRequest::TPtr& ev, const TActorContext& ctx);
void Handle(TEvStreamPQWriteRequest::TPtr& ev, const TActorContext& ctx);
void Handle(TEvStreamPQMigrationReadRequest::TPtr& ev, const TActorContext& ctx);
- // void Handle(TEvStreamTopicWriteRequest::TPtr& ev, const TActorContext& ctx);
+ void Handle(TEvStreamTopicWriteRequest::TPtr& ev, const TActorContext& ctx);
void Handle(TEvStreamTopicReadRequest::TPtr& ev, const TActorContext& ctx);
void Handle(TEvPQReadInfoRequest::TPtr& ev, const TActorContext& ctx);
void Handle(TEvPQDropTopicRequest::TPtr& ev, const TActorContext& ctx);
diff --git a/ydb/core/grpc_services/rpc_alter_table.cpp b/ydb/core/grpc_services/rpc_alter_table.cpp
index 93a6f0c792..20206719c9 100644
--- a/ydb/core/grpc_services/rpc_alter_table.cpp
+++ b/ydb/core/grpc_services/rpc_alter_table.cpp
@@ -9,6 +9,7 @@
#include <ydb/core/base/tablet_pipe.h>
#include <ydb/core/cms/console/configs_dispatcher.h>
+#include <ydb/core/protos/console_config.pb.h>
#include <ydb/core/tx/schemeshard/schemeshard_build_index.h>
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/core/ydb_convert/column_families.h>
@@ -412,6 +413,7 @@ private:
if (status == Ydb::StatusIds::SUCCESS) {
if (GetOperationMode() == Ydb::Operations::OperationParams::SYNC) {
CreateSSOpSubscriber(SchemeshardId, TxId, DatabaseName, TOpType::BuildIndex, std::move(Request_), ctx);
+ Die(ctx);
} else {
auto op = response.GetIndexBuild();
Ydb::Operations::Operation operation;
diff --git a/ydb/core/grpc_services/rpc_calls.h b/ydb/core/grpc_services/rpc_calls.h
index 0d0ac494d7..5216aacb43 100644
--- a/ydb/core/grpc_services/rpc_calls.h
+++ b/ydb/core/grpc_services/rpc_calls.h
@@ -55,8 +55,8 @@ using TEvBiStreamPingRequest = TGRpcRequestBiStreamWrapper<TRpcServices::EvBiStr
using TEvExperimentalStreamQueryRequest = TGRpcRequestWrapper<TRpcServices::EvExperimentalStreamQuery, Ydb::Experimental::ExecuteStreamQueryRequest, Ydb::Experimental::ExecuteStreamQueryResponse, false>;
using TEvStreamPQWriteRequest = TGRpcRequestBiStreamWrapper<TRpcServices::EvStreamPQWrite, Ydb::PersQueue::V1::StreamingWriteClientMessage, Ydb::PersQueue::V1::StreamingWriteServerMessage>;
using TEvStreamPQMigrationReadRequest = TGRpcRequestBiStreamWrapper<TRpcServices::EvStreamPQMigrationRead, Ydb::PersQueue::V1::MigrationStreamingReadClientMessage, Ydb::PersQueue::V1::MigrationStreamingReadServerMessage>;
-using TEvStreamTopicWriteRequest = TGRpcRequestBiStreamWrapper<TRpcServices::EvStreamTopicWrite, Ydb::Topic::StreamWriteMessage::FromClient, Ydb::Topic::StreamWriteMessage::FromServer>;
-using TEvStreamTopicReadRequest = TGRpcRequestBiStreamWrapper<TRpcServices::EvStreamTopicRead, Ydb::Topic::StreamReadMessage::FromClient, Ydb::Topic::StreamReadMessage::FromServer>;
+using TEvStreamTopicWriteRequest = TGRpcRequestBiStreamWrapper<TRpcServices::EvStreamTopicWrite, Ydb::Topic::StreamWriteMessage::FromClient, Ydb::Topic::StreamWriteMessage::FromServer, TRateLimiterMode::RuManual>;
+using TEvStreamTopicReadRequest = TGRpcRequestBiStreamWrapper<TRpcServices::EvStreamTopicRead, Ydb::Topic::StreamReadMessage::FromClient, Ydb::Topic::StreamReadMessage::FromServer, TRateLimiterMode::RuManual>;
using TEvPQReadInfoRequest = TGRpcRequestWrapper<TRpcServices::EvPQReadInfo, Ydb::PersQueue::V1::ReadInfoRequest, Ydb::PersQueue::V1::ReadInfoResponse, true>;
using TEvPQDropTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvPQDropTopic, Ydb::PersQueue::V1::DropTopicRequest, Ydb::PersQueue::V1::DropTopicResponse, true>;
using TEvPQCreateTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvPQCreateTopic, Ydb::PersQueue::V1::CreateTopicRequest, Ydb::PersQueue::V1::CreateTopicResponse, true>;
@@ -64,10 +64,12 @@ using TEvPQAlterTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvPQA
using TEvPQDescribeTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvPQDescribeTopic, Ydb::PersQueue::V1::DescribeTopicRequest, Ydb::PersQueue::V1::DescribeTopicResponse, true>;
using TEvPQAddReadRuleRequest = TGRpcRequestValidationWrapper<TRpcServices::EvPQAddReadRule, Ydb::PersQueue::V1::AddReadRuleRequest, Ydb::PersQueue::V1::AddReadRuleResponse, true>;
using TEvPQRemoveReadRuleRequest = TGRpcRequestValidationWrapper<TRpcServices::EvPQRemoveReadRule, Ydb::PersQueue::V1::RemoveReadRuleRequest, Ydb::PersQueue::V1::RemoveReadRuleResponse, true>;
-using TEvDropTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvDropTopic, Ydb::Topic::DropTopicRequest, Ydb::Topic::DropTopicResponse, true>;
-using TEvCreateTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvCreateTopic, Ydb::Topic::CreateTopicRequest, Ydb::Topic::CreateTopicResponse, true>;
-using TEvAlterTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvAlterTopic, Ydb::Topic::AlterTopicRequest, Ydb::Topic::AlterTopicResponse, true>;
-using TEvDescribeTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvDescribeTopic, Ydb::Topic::DescribeTopicRequest, Ydb::Topic::DescribeTopicResponse, true>;
+
+//TODO: Change this to runtime dispatching!
+using TEvDropTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvDropTopic, Ydb::Topic::DropTopicRequest, Ydb::Topic::DropTopicResponse, true, TRateLimiterMode::Rps>;
+using TEvCreateTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvCreateTopic, Ydb::Topic::CreateTopicRequest, Ydb::Topic::CreateTopicResponse, true, TRateLimiterMode::Rps>;
+using TEvAlterTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvAlterTopic, Ydb::Topic::AlterTopicRequest, Ydb::Topic::AlterTopicResponse, true, TRateLimiterMode::Rps>;
+using TEvDescribeTopicRequest = TGRpcRequestValidationWrapper<TRpcServices::EvDescribeTopic, Ydb::Topic::DescribeTopicRequest, Ydb::Topic::DescribeTopicResponse, true, TRateLimiterMode::Rps>;
using TEvDiscoverPQClustersRequest = TGRpcRequestWrapper<TRpcServices::EvDiscoverPQClusters, Ydb::PersQueue::ClusterDiscovery::DiscoverClustersRequest, Ydb::PersQueue::ClusterDiscovery::DiscoverClustersResponse, true>;
diff --git a/ydb/core/grpc_services/rpc_create_table.cpp b/ydb/core/grpc_services/rpc_create_table.cpp
index 209b748368..3cd152fc70 100644
--- a/ydb/core/grpc_services/rpc_create_table.cpp
+++ b/ydb/core/grpc_services/rpc_create_table.cpp
@@ -3,7 +3,6 @@
#include "rpc_calls.h"
#include "rpc_scheme_base.h"
#include "rpc_common.h"
-#include "table_profiles.h"
#include "table_settings.h"
#include <ydb/core/cms/console/configs_dispatcher.h>
@@ -11,6 +10,7 @@
#include <ydb/core/protos/console_config.pb.h>
#include <ydb/core/ydb_convert/column_families.h>
#include <ydb/core/ydb_convert/table_description.h>
+#include <ydb/core/ydb_convert/table_profiles.h>
namespace NKikimr {
namespace NGRpcService {
diff --git a/ydb/core/grpc_services/rpc_describe_path.cpp b/ydb/core/grpc_services/rpc_describe_path.cpp
index 7960f50779..9a3702e81a 100644
--- a/ydb/core/grpc_services/rpc_describe_path.cpp
+++ b/ydb/core/grpc_services/rpc_describe_path.cpp
@@ -5,12 +5,14 @@
#include "rpc_common.h"
#include <ydb/core/protos/flat_tx_scheme.pb.h>
#include <ydb/core/tx/schemeshard/schemeshard.h>
+#include <ydb/core/tx/scheme_cache/scheme_cache.h>
#include <ydb/core/ydb_convert/ydb_convert.h>
namespace NKikimr {
namespace NGRpcService {
using namespace NActors;
+using namespace NSchemeCache;
using namespace Ydb;
using TEvListDirectoryRequest = TGrpcRequestOperationCall<Ydb::Scheme::ListDirectoryRequest,
@@ -29,22 +31,70 @@ public:
void Bootstrap(const TActorContext &ctx) {
TBase::Bootstrap(ctx);
-
- SendProposeRequest(ctx);
- this->Become(&TDerived::StateWork);
+ ResolvePath(ctx);
}
private:
- void SendProposeRequest(const TActorContext &ctx) {
- const auto req = this->GetProtoRequest();
+ void ResolvePath(const TActorContext& ctx) {
+ auto request = MakeHolder<TSchemeCacheNavigate>();
+ request->DatabaseName = NKikimr::CanonizePath(this->Request_->GetDatabaseName().GetOrElse(""));
+
+ auto& entry = request->ResultSet.emplace_back();
+ entry.Operation = TSchemeCacheNavigate::OpList; // we need ListNodeEntry
+ entry.Path = NKikimr::SplitPath(this->GetProtoRequest()->path());
+
+ ctx.Send(MakeSchemeCacheID(), new TEvTxProxySchemeCache::TEvNavigateKeySet(request.Release()));
+ this->Become(&TDerived::StateResolvePath);
+ }
+
+ void StateResolvePath(TAutoPtr<IEventHandle>& ev, const TActorContext& ctx) {
+ switch (ev->GetTypeRewrite()) {
+ HFunc(TEvTxProxySchemeCache::TEvNavigateKeySetResult, Handle);
+ default: TBase::StateWork(ev, ctx);
+ }
+ }
+
+ void Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev, const TActorContext& ctx) {
+ const auto& request = ev->Get()->Request;
+ if (request->ResultSet.size() != 1) {
+ return this->Reply(Ydb::StatusIds::INTERNAL_ERROR, ctx);
+ }
+
+ const auto& entry = request->ResultSet.front();
+ if (entry.Status != TSchemeCacheNavigate::EStatus::Ok) {
+ return SendProposeRequest(ctx, this->GetProtoRequest()->path());
+ }
+ if (entry.Kind != TSchemeCacheNavigate::EKind::KindCdcStream) {
+ return SendProposeRequest(ctx, this->GetProtoRequest()->path());
+ }
+
+ if (!entry.Self || !entry.ListNodeEntry) {
+ return SendProposeRequest(ctx, this->GetProtoRequest()->path());
+ }
+
+ if (entry.ListNodeEntry->Children.size() != 1) {
+ // not created yet
+ return this->Reply(Ydb::StatusIds::SCHEME_ERROR, ctx);
+ }
+
+ OverrideName = entry.Self->Info.GetName();
+ const auto& topicName = entry.ListNodeEntry->Children.at(0).Name;
+
+ return SendProposeRequest(ctx,
+ NKikimr::JoinPath(NKikimr::ChildPath(NKikimr::SplitPath(this->GetProtoRequest()->path()), topicName)));
+ }
+
+ void SendProposeRequest(const TActorContext& ctx, const TString& path) {
std::unique_ptr<TEvTxUserProxy::TEvNavigate> navigateRequest(new TEvTxUserProxy::TEvNavigate());
SetAuthToken(navigateRequest, *this->Request_);
SetDatabase(navigateRequest.get(), *this->Request_);
NKikimrSchemeOp::TDescribePath* record = navigateRequest->Record.MutableDescribePath();
- record->SetPath(req->path());
+ record->SetPath(path);
+ record->MutableOptions()->SetShowPrivateTable(OverrideName.Defined());
ctx.Send(MakeTxProxyID(), navigateRequest.release());
+ this->Become(&TDerived::StateWork);
}
void StateWork(TAutoPtr<IEventHandle>& ev, const TActorContext& ctx) {
@@ -68,6 +118,9 @@ private:
case NKikimrScheme::StatusSuccess: {
const auto& pathDescription = record.GetPathDescription();
ConvertDirectoryEntry(pathDescription, result.mutable_self(), true);
+ if (OverrideName) {
+ result.mutable_self()->set_name(*OverrideName);
+ }
if constexpr (ListChildren) {
for (const auto& child : pathDescription.GetChildren()) {
ConvertDirectoryEntry(child, result.add_children(), false);
@@ -90,6 +143,9 @@ private:
}
}
}
+
+private:
+ TMaybe<TString> OverrideName;
};
class TListDirectoryRPC : public TBaseDescribe<TListDirectoryRPC, TEvListDirectoryRequest, Ydb::Scheme::ListDirectoryResult, true> {
diff --git a/ydb/core/grpc_services/rpc_describe_table_options.cpp b/ydb/core/grpc_services/rpc_describe_table_options.cpp
index 057ffc8ccd..a0739a52e7 100644
--- a/ydb/core/grpc_services/rpc_describe_table_options.cpp
+++ b/ydb/core/grpc_services/rpc_describe_table_options.cpp
@@ -4,11 +4,11 @@
#include "rpc_calls.h"
#include "rpc_scheme_base.h"
#include "rpc_common.h"
-#include "table_profiles.h"
#include "service_table.h"
#include <ydb/core/cms/console/configs_dispatcher.h>
#include <ydb/core/protos/console_config.pb.h>
+#include <ydb/core/ydb_convert/table_profiles.h>
namespace NKikimr {
namespace NGRpcService {
diff --git a/ydb/core/grpc_services/rpc_kqp_base.h b/ydb/core/grpc_services/rpc_kqp_base.h
index 2811a49e78..8f5787aa9f 100644
--- a/ydb/core/grpc_services/rpc_kqp_base.h
+++ b/ydb/core/grpc_services/rpc_kqp_base.h
@@ -36,6 +36,8 @@ inline TString GetTransactionModeName(const Ydb::Table::TransactionSettings& set
return "OnlineReadOnly";
case Ydb::Table::TransactionSettings::kStaleReadOnly:
return "StaleReadOnly";
+ case Ydb::Table::TransactionSettings::kSnapshotReadOnly:
+ return "SnapshotReadOnly";
default:
return "Unknown";
}
diff --git a/ydb/core/grpc_services/service_datastreams.h b/ydb/core/grpc_services/service_datastreams.h
index 7d8488c30e..4f4c723345 100644
--- a/ydb/core/grpc_services/service_datastreams.h
+++ b/ydb/core/grpc_services/service_datastreams.h
@@ -29,6 +29,7 @@ void DoDataStreamsDescribeStreamSummaryRequest(std::unique_ptr<IRequestOpCtx> p,
void DoDataStreamsDecreaseStreamRetentionPeriodRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&);
void DoDataStreamsIncreaseStreamRetentionPeriodRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&);
void DoDataStreamsUpdateShardCountRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&);
+void DoDataStreamsUpdateStreamModeRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&);
void DoDataStreamsListStreamConsumersRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&);
void DoDataStreamsAddTagsToStreamRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&);
void DoDataStreamsDisableEnhancedMonitoringRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider&);
diff --git a/ydb/core/grpc_services/table_settings.cpp b/ydb/core/grpc_services/table_settings.cpp
index 97dc63a53c..c84ac1fa49 100644
--- a/ydb/core/grpc_services/table_settings.cpp
+++ b/ydb/core/grpc_services/table_settings.cpp
@@ -4,7 +4,7 @@ namespace NKikimr {
namespace NGRpcService {
bool FillCreateTableSettingsDesc(NKikimrSchemeOp::TTableDescription& out,
- const Ydb::Table::CreateTableRequest& in, const NGRpcService::TTableProfiles& profiles,
+ const Ydb::Table::CreateTableRequest& in, const TTableProfiles& profiles,
Ydb::StatusIds::StatusCode& code, TString& error, TList<TString>& warnings) {
bool tableProfileSet = false;
@@ -29,7 +29,7 @@ bool FillCreateTableSettingsDesc(NKikimrSchemeOp::TTableDescription& out,
}
bool FillAlterTableSettingsDesc(NKikimrSchemeOp::TTableDescription& out,
- const Ydb::Table::AlterTableRequest& in, const NGRpcService::TTableProfiles& profiles,
+ const Ydb::Table::AlterTableRequest& in, const TTableProfiles& profiles,
Ydb::StatusIds::StatusCode& code, TString& error, const TAppData* appData) {
bool changed = false;
diff --git a/ydb/core/grpc_services/table_settings.h b/ydb/core/grpc_services/table_settings.h
index c8c6d26281..55654ea181 100644
--- a/ydb/core/grpc_services/table_settings.h
+++ b/ydb/core/grpc_services/table_settings.h
@@ -1,18 +1,17 @@
#pragma once
-#include "table_profiles.h"
-
+#include <ydb/core/ydb_convert/table_profiles.h>
#include <ydb/core/ydb_convert/table_settings.h>
namespace NKikimr {
namespace NGRpcService {
bool FillCreateTableSettingsDesc(NKikimrSchemeOp::TTableDescription& out,
- const Ydb::Table::CreateTableRequest& in, const NGRpcService::TTableProfiles& profiles,
+ const Ydb::Table::CreateTableRequest& in, const TTableProfiles& profiles,
Ydb::StatusIds::StatusCode& code, TString& error, TList<TString>& warnings);
bool FillAlterTableSettingsDesc(NKikimrSchemeOp::TTableDescription& out,
- const Ydb::Table::AlterTableRequest& in, const NGRpcService::TTableProfiles& profiles,
+ const Ydb::Table::AlterTableRequest& in, const TTableProfiles& profiles,
Ydb::StatusIds::StatusCode& code, TString& error, const TAppData* appData);
} // namespace NGRpcService
diff --git a/ydb/core/grpc_services/ut/CMakeLists.txt b/ydb/core/grpc_services/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/grpc_services/ut/CMakeLists.txt
+++ b/ydb/core/grpc_services/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/grpc_streaming/CMakeLists.txt b/ydb/core/grpc_streaming/CMakeLists.txt
index f7f33174f6..45593dfe35 100644
--- a/ydb/core/grpc_streaming/CMakeLists.txt
+++ b/ydb/core/grpc_streaming/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-grpc_streaming)
target_link_libraries(ydb-core-grpc_streaming PUBLIC
diff --git a/ydb/core/grpc_streaming/grpc_streaming_ut.cpp b/ydb/core/grpc_streaming/grpc_streaming_ut.cpp
index fe0b6aec6a..8d1a452513 100644
--- a/ydb/core/grpc_streaming/grpc_streaming_ut.cpp
+++ b/ydb/core/grpc_streaming/grpc_streaming_ut.cpp
@@ -41,7 +41,7 @@ public:
TSelf,
413>; //GRPC_SERVER = 413, services.proto
- TStreamingService(TActorSystem* as, TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
+ TStreamingService(TActorSystem* as, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters)
: ActorSystem(*as)
, Counters(std::move(counters))
{ }
@@ -78,7 +78,7 @@ public:
private:
TActorSystem& ActorSystem;
- TIntrusivePtr<NMonitoring::TDynamicCounters> const Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> const Counters;
grpc::ServerCompletionQueue* CQ = nullptr;
NGrpc::TGlobalLimiter* Limiter = nullptr;
@@ -101,7 +101,7 @@ public:
GRpcServer.Reset(new NGrpc::TGRpcServer(options));
auto* as = Server->GetRuntime()->GetAnyNodeActorSystem();
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters(MakeIntrusive<NMonitoring::TDynamicCounters>());
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters(MakeIntrusive<::NMonitoring::TDynamicCounters>());
GRpcServer->AddService(new TStreamingService<TImplActor>(as, counters));
GRpcServer->Start();
diff --git a/ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt b/ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt
index 5c42176121..9f9cf5dae4 100644
--- a/ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt
+++ b/ydb/core/grpc_streaming/ut/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(grpc)
add_executable(ydb-core-grpc_streaming-ut)
target_compile_options(ydb-core-grpc_streaming-ut PRIVATE
diff --git a/ydb/core/grpc_streaming/ut/CMakeLists.linux.txt b/ydb/core/grpc_streaming/ut/CMakeLists.linux.txt
index 9970af59c0..6121352167 100644
--- a/ydb/core/grpc_streaming/ut/CMakeLists.linux.txt
+++ b/ydb/core/grpc_streaming/ut/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(grpc)
add_executable(ydb-core-grpc_streaming-ut)
target_compile_options(ydb-core-grpc_streaming-ut PRIVATE
diff --git a/ydb/core/grpc_streaming/ut/CMakeLists.txt b/ydb/core/grpc_streaming/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/grpc_streaming/ut/CMakeLists.txt
+++ b/ydb/core/grpc_streaming/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/health_check/CMakeLists.txt b/ydb/core/health_check/CMakeLists.txt
index 70b680e345..66cd39d09e 100644
--- a/ydb/core/health_check/CMakeLists.txt
+++ b/ydb/core/health_check/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-health_check)
target_link_libraries(ydb-core-health_check PUBLIC
diff --git a/ydb/core/health_check/health_check.cpp b/ydb/core/health_check/health_check.cpp
index 7914e9681f..1a55044d5e 100644
--- a/ydb/core/health_check/health_check.cpp
+++ b/ydb/core/health_check/health_check.cpp
@@ -116,11 +116,13 @@ public:
struct TNodeTabletStateCount {
NKikimrTabletBase::TTabletTypes::EType Type;
ETabletState State;
+ bool Leader;
int Count = 1;
TStackVec<TString> Identifiers;
TNodeTabletStateCount(const NKikimrHive::TTabletInfo& info, const TTabletStateSettings& settings) {
Type = info.tablettype();
+ Leader = info.followerid() == 0;
if (info.volatilestate() == NKikimrHive::TABLET_VOLATILE_STATE_STOPPED) {
State = ETabletState::Stopped;
} else if (info.volatilestate() != NKikimrHive::TABLET_VOLATILE_STATE_RUNNING
@@ -135,7 +137,7 @@ public:
}
bool operator ==(const TNodeTabletStateCount& o) const {
- return State == o.State && Type == o.Type;
+ return State == o.State && Type == o.Type && Leader == o.Leader;
}
};
@@ -438,7 +440,7 @@ public:
TTabletRequestsState TabletRequests;
TDuration Timeout = TDuration::MilliSeconds(10000);
-
+ bool IgnoreServerlessDatabases = true;
static constexpr TStringBuf STATIC_STORAGE_POOL_NAME = "static";
void Bootstrap() {
@@ -460,6 +462,7 @@ public:
TabletRequests.TabletStates[ConsoleId].Type = TTabletTypes::Console;
if (FilterDatabase) {
if (FilterDatabase != DomainPath) {
+ IgnoreServerlessDatabases = false; // we don't ignore sl database if it was exactly specified
RequestTenantStatus(FilterDatabase);
} else {
TTenantInfo& tenant = TenantByPath[DomainPath];
@@ -951,9 +954,13 @@ public:
Ydb::Cms::GetDatabaseStatusResult getTenantStatusResult;
operation.result().UnpackTo(&getTenantStatusResult);
TString path = getTenantStatusResult.path();
- DatabaseStatusByPath[path] = std::move(getTenantStatusResult);
- DatabaseState[path];
- RequestSchemeCacheNavigate(path);
+ if (!getTenantStatusResult.has_serverless_resources() || !IgnoreServerlessDatabases) {
+ DatabaseStatusByPath[path] = std::move(getTenantStatusResult);
+ DatabaseState[path];
+ RequestSchemeCacheNavigate(path);
+ } else {
+ DatabaseState.erase(path);
+ }
}
RequestDone("TEvGetTenantStatusResponse");
}
@@ -1339,7 +1346,11 @@ public:
break;
case TNodeTabletState::ETabletState::Dead:
computeTabletStatus.set_state("DEAD");
- tabletContext.ReportStatus(Ydb::Monitoring::StatusFlag::RED, "Tablets are dead", "tablet-state");
+ if (count.Leader) {
+ tabletContext.ReportStatus(Ydb::Monitoring::StatusFlag::RED, "Tablets are dead", "tablet-state");
+ } else {
+ tabletContext.ReportStatus(Ydb::Monitoring::StatusFlag::YELLOW, "Followers are dead", "tablet-state");
+ }
break;
}
computeTabletStatus.set_overall(tabletContext.GetOverallStatus());
@@ -2135,6 +2146,7 @@ public:
.RelPath = "status",
.ActorSystem = TlsActivationContext->ExecutorThread.ActorSystem,
.ActorId = SelfId(),
+ .UseAuth = false,
});
}
Become(&THealthCheckService::StateWork);
diff --git a/ydb/core/health_check/ut/CMakeLists.txt b/ydb/core/health_check/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/health_check/ut/CMakeLists.txt
+++ b/ydb/core/health_check/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/http_proxy/CMakeLists.txt b/ydb/core/http_proxy/CMakeLists.txt
index bfa39ff495..d9162f7194 100644
--- a/ydb/core/http_proxy/CMakeLists.txt
+++ b/ydb/core/http_proxy/CMakeLists.txt
@@ -29,10 +29,10 @@ target_link_libraries(ydb-core-http_proxy PUBLIC
ydb-services-datastreams
)
target_sources(ydb-core-http_proxy PRIVATE
- ${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/http_req.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/metrics_actor.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/grpc_service.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/auth_factory.cpp
${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/discovery_actor.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/grpc_service.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/http_req.cpp
${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/http_service.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/auth_factory.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/http_proxy/metrics_actor.cpp
)
diff --git a/ydb/core/http_proxy/grpc_service.cpp b/ydb/core/http_proxy/grpc_service.cpp
index 309e7574e0..5e5c3ce098 100644
--- a/ydb/core/http_proxy/grpc_service.cpp
+++ b/ydb/core/http_proxy/grpc_service.cpp
@@ -135,7 +135,7 @@ static TString GetSdkBuildInfo(NGrpc::IRequestContextBase* reqCtx) {
}
TGRpcDiscoveryService::TGRpcDiscoveryService(NActors::TActorSystem *system, std::shared_ptr<NYdb::ICredentialsProvider> credentialsProvider,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters)
: ActorSystem_(system)
, CredentialsProvider_(credentialsProvider)
, Counters_(counters)
diff --git a/ydb/core/http_proxy/grpc_service.h b/ydb/core/http_proxy/grpc_service.h
index 8ff4423778..8d13c3a92c 100644
--- a/ydb/core/http_proxy/grpc_service.h
+++ b/ydb/core/http_proxy/grpc_service.h
@@ -17,7 +17,7 @@ class TGRpcDiscoveryService
{
public:
TGRpcDiscoveryService(NActors::TActorSystem* system, std::shared_ptr<NYdb::ICredentialsProvider> credentialsProvider,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
@@ -32,7 +32,7 @@ private:
grpc::ServerCompletionQueue* CQ_;
std::shared_ptr<NYdb::ICredentialsProvider> CredentialsProvider_;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters_;
NGrpc::TGlobalLimiter* Limiter_;
};
diff --git a/ydb/core/http_proxy/http_req.cpp b/ydb/core/http_proxy/http_req.cpp
index 5c5569980f..2f3d7d6c8d 100644
--- a/ydb/core/http_proxy/http_req.cpp
+++ b/ydb/core/http_proxy/http_req.cpp
@@ -1,33 +1,30 @@
#include "events.h"
#include "http_req.h"
#include "auth_factory.h"
+#include "json_proto_conversion.h"
-#include <ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h>
-#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h>
+#include <library/cpp/actors/http/http_proxy.h>
+#include <library/cpp/cgiparam/cgiparam.h>
+#include <library/cpp/http/misc/parsed_request.h>
+#include <library/cpp/http/server/response.h>
+
+#include <ydb/core/base/appdata.h>
#include <ydb/core/grpc_caching/cached_grpc_request_actor.h>
#include <ydb/core/grpc_services/local_rpc/local_rpc.h>
#include <ydb/core/protos/serverless_proxy_config.pb.h>
-#include <ydb/services/datastreams/shard_iterator.h>
-#include <ydb/services/datastreams/next_token.h>
-#include <ydb/services/datastreams/datastreams_proxy.h>
-
#include <ydb/core/viewer/json/json.h>
-#include <ydb/core/base/appdata.h>
-
-#include <ydb/library/naming_conventions/naming_conventions.h>
-#include <ydb/library/yql/public/issue/yql_issue_message.h>
#include <ydb/library/http_proxy/authorization/auth_helpers.h>
#include <ydb/library/http_proxy/error/error.h>
+#include <ydb/library/yql/public/issue/yql_issue_message.h>
+
+#include <ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h>
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h>
+
+#include <ydb/services/datastreams/datastreams_proxy.h>
+#include <ydb/services/datastreams/next_token.h>
+#include <ydb/services/datastreams/shard_iterator.h>
#include <ydb/services/lib/sharding/sharding.h>
-#include <library/cpp/cgiparam/cgiparam.h>
-#include <library/cpp/http/misc/parsed_request.h>
-#include <library/cpp/http/server/response.h>
-#include <library/cpp/json/json_reader.h>
-#include <library/cpp/json/json_writer.h>
-#include <library/cpp/protobuf/json/json_output_create.h>
-#include <library/cpp/protobuf/json/proto2json.h>
-#include <library/cpp/protobuf/json/proto2json_printer.h>
#include <library/cpp/uri/uri.h>
@@ -38,6 +35,7 @@
#include <util/string/join.h>
#include <util/string/vector.h>
+
namespace NKikimr::NHttpProxy {
using namespace google::protobuf;
@@ -176,269 +174,9 @@ namespace NKikimr::NHttpProxy {
constexpr TStringBuf REQUEST_DATE_HEADER = "x-amz-date";
constexpr TStringBuf REQUEST_FORWARDED_FOR = "x-forwarded-for";
constexpr TStringBuf REQUEST_TARGET_HEADER = "x-amz-target";
+ constexpr TStringBuf REQUEST_CONTENT_TYPE_HEADER = "content-type";
static const TString CREDENTIAL_PARAM = "credential";
- namespace {
- class TYdsProtoToJsonPrinter : public NProtobufJson::TProto2JsonPrinter {
- public:
- TYdsProtoToJsonPrinter(const google::protobuf::Reflection* reflection, const NProtobufJson::TProto2JsonConfig& config)
- : NProtobufJson::TProto2JsonPrinter(config)
- , ProtoReflection(reflection)
- {}
-
- protected:
- template <bool InMapContext>
- void PrintDoubleValue(const TStringBuf& key, double value,
- NProtobufJson::IJsonOutput& json) {
- if constexpr(InMapContext) {
- json.WriteKey(key).Write(value);
- } else {
- json.Write(value);
- }
- }
-
- void PrintField(const NProtoBuf::Message& proto, const NProtoBuf::FieldDescriptor& field,
- NProtobufJson::IJsonOutput& json, TStringBuf key = {}) override
- {
- if (field.options().HasExtension(FieldTransformer)) {
- if (field.options().GetExtension(FieldTransformer) == TRANSFORM_BASE64) {
- Y_ENSURE(field.cpp_type() == google::protobuf::FieldDescriptor::CPPTYPE_STRING,
- "Base64 is only supported for strings");
-
- if (!key) {
- key = MakeKey(field);
- }
-
- if (field.is_repeated()) {
- for (int i = 0, endI = ProtoReflection->FieldSize(proto, &field); i < endI; ++i) {
- PrintStringValue<false>(field, TStringBuf(), Base64Encode(proto.GetReflection()->GetRepeatedString(proto, &field, i)), json);
- }
- } else {
- PrintStringValue<true>(field, key, Base64Encode(proto.GetReflection()->GetString(proto, &field)), json);
- }
- return;
- }
-
- if (field.options().GetExtension(FieldTransformer) == TRANSFORM_DOUBLE_S_TO_INT_MS) {
- Y_ENSURE(field.cpp_type() == google::protobuf::FieldDescriptor::CPPTYPE_INT64,
- "Double S to Int MS is only supported for int64 timestamps");
-
- if (!key) {
- key = MakeKey(field);
- }
-
- if (field.is_repeated()) {
- for (int i = 0, endI = ProtoReflection->FieldSize(proto, &field); i < endI; ++i) {
- double value = proto.GetReflection()->GetRepeatedInt64(proto, &field, i) / 1000.0;
- PrintDoubleValue<false>(TStringBuf(), value, json);
- }
- } else {
- double value = proto.GetReflection()->GetInt64(proto, &field) / 1000.0;
- PrintDoubleValue<true>(key, value, json);
- }
- return;
- }
-
- if (field.options().GetExtension(FieldTransformer) == TRANSFORM_EMPTY_TO_NOTHING) {
- Y_ENSURE(field.cpp_type() == google::protobuf::FieldDescriptor::CPPTYPE_STRING,
- "Empty to nothing is only supported for strings");
-
- if (!key) {
- key = MakeKey(field);
- }
-
- if (field.is_repeated()) {
- for (int i = 0, endI = ProtoReflection->FieldSize(proto, &field); i < endI; ++i) {
- auto value = proto.GetReflection()->GetRepeatedString(proto, &field, i);
- if (!value.empty()) {
- PrintStringValue<false>(field, TStringBuf(), proto.GetReflection()->GetRepeatedString(proto, &field, i), json);
- }
- }
- } else {
- auto value = proto.GetReflection()->GetString(proto, &field);
- if (!value.empty()) {
- PrintStringValue<true>(field, key, proto.GetReflection()->GetString(proto, &field), json);
- }
- }
- return;
- }
- } else {
- return NProtobufJson::TProto2JsonPrinter::PrintField(proto, field, json, key);
- }
- }
-
- private:
- const google::protobuf::Reflection* ProtoReflection = nullptr;
- };
-
- TString ProxyFieldNameConverter(const google::protobuf::FieldDescriptor& descriptor) {
- return NNaming::SnakeToCamelCase(descriptor.name());
- }
-
- void ProtoToJson(const Message& resp, NJson::TJsonValue& value) {
- auto config = NProtobufJson::TProto2JsonConfig()
- .SetFormatOutput(false)
- .SetMissingSingleKeyMode(NProtobufJson::TProto2JsonConfig::MissingKeyDefault)
- .SetNameGenerator(ProxyFieldNameConverter)
- .SetEnumMode(NProtobufJson::TProto2JsonConfig::EnumName);
- TYdsProtoToJsonPrinter printer(resp.GetReflection(), config);
- printer.Print(resp, *NProtobufJson::CreateJsonMapOutput(value));
- }
-
- void JsonToProto(Message* message, const NJson::TJsonValue& jsonValue, ui32 depth = 0) {
- Y_ENSURE(depth < 100, "Too deep map");
- Y_ENSURE(jsonValue.IsMap(), "Top level of json value is not a map");
- auto* desc = message->GetDescriptor();
- auto* reflection = message->GetReflection();
- for (const auto& [key, value] : jsonValue.GetMap()) {
- auto* fieldDescriptor = desc->FindFieldByName(NNaming::CamelToSnakeCase(key));
- Y_ENSURE(fieldDescriptor, "Unexpected json key: " + key);
- auto transformer = Ydb::DataStreams::V1::TRANSFORM_NONE;
- if (fieldDescriptor->options().HasExtension(FieldTransformer)) {
- transformer = fieldDescriptor->options().GetExtension(FieldTransformer);
- }
-
- if (value.IsArray()) {
- Y_ENSURE(fieldDescriptor->is_repeated());
- for (auto& elem : value.GetArray()) {
- switch (transformer) {
- case Ydb::DataStreams::V1::TRANSFORM_BASE64: {
- Y_ENSURE(fieldDescriptor->cpp_type() ==
- google::protobuf::FieldDescriptor::CPPTYPE_STRING,
- "Base64 transformer is only applicable to strings");
- reflection->AddString(message, fieldDescriptor, Base64Decode(value.GetString()));
- break;
- }
- case Ydb::DataStreams::V1::TRANSFORM_DOUBLE_S_TO_INT_MS: {
- reflection->SetInt64(message, fieldDescriptor, value.GetDouble() * 1000);
- break;
- }
- case Ydb::DataStreams::V1::TRANSFORM_EMPTY_TO_NOTHING:
- case Ydb::DataStreams::V1::TRANSFORM_NONE: {
- switch (fieldDescriptor->cpp_type()) {
- case google::protobuf::FieldDescriptor::CPPTYPE_INT32:
- reflection->AddInt32(message, fieldDescriptor, value.GetInteger());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_INT64:
- reflection->AddInt64(message, fieldDescriptor, value.GetInteger());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_UINT32:
- reflection->AddUInt32(message, fieldDescriptor, value.GetUInteger());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_UINT64:
- reflection->AddUInt64(message, fieldDescriptor, value.GetUInteger());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE:
- reflection->AddDouble(message, fieldDescriptor, value.GetDouble());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT:
- reflection->AddFloat(message, fieldDescriptor, value.GetDouble());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_BOOL:
- reflection->AddFloat(message, fieldDescriptor, value.GetBoolean());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_ENUM:
- {
- const EnumValueDescriptor* enumValueDescriptor = fieldDescriptor->enum_type()->FindValueByName(value.GetString());
- i32 number{0};
- if (enumValueDescriptor == nullptr && TryFromString(value.GetString(), number)) {
- enumValueDescriptor = fieldDescriptor->enum_type()->FindValueByNumber(number);
- }
- if (enumValueDescriptor != nullptr) {
- reflection->AddEnum(message, fieldDescriptor, enumValueDescriptor);
- }
- }
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_STRING:
- reflection->AddString(message, fieldDescriptor, value.GetString());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: {
- Message *msg = reflection->AddMessage(message, fieldDescriptor);
- JsonToProto(msg, elem, depth + 1);
- break;
- }
- default:
- Y_ENSURE(false, "Unexpected type");
- }
- break;
- }
- default:
- Y_ENSURE(false, "Unknown transformer type");
- }
- }
- } else {
- switch (transformer) {
- case Ydb::DataStreams::V1::TRANSFORM_BASE64: {
- Y_ENSURE(fieldDescriptor->cpp_type() ==
- google::protobuf::FieldDescriptor::CPPTYPE_STRING,
- "Base64 transformer is applicable only to strings");
- reflection->SetString(message, fieldDescriptor, Base64Decode(value.GetString()));
- break;
- }
- case Ydb::DataStreams::V1::TRANSFORM_DOUBLE_S_TO_INT_MS: {
- reflection->SetInt64(message, fieldDescriptor, value.GetDouble() * 1000);
- break;
- }
- case Ydb::DataStreams::V1::TRANSFORM_EMPTY_TO_NOTHING:
- case Ydb::DataStreams::V1::TRANSFORM_NONE: {
- switch (fieldDescriptor->cpp_type()) {
- case google::protobuf::FieldDescriptor::CPPTYPE_INT32:
- reflection->SetInt32(message, fieldDescriptor, value.GetInteger());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_INT64:
- reflection->SetInt64(message, fieldDescriptor, value.GetInteger());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_UINT32:
- reflection->SetUInt32(message, fieldDescriptor, value.GetUInteger());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_UINT64:
- reflection->SetUInt64(message, fieldDescriptor, value.GetUInteger());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE:
- reflection->SetDouble(message, fieldDescriptor, value.GetDouble());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT:
- reflection->SetFloat(message, fieldDescriptor, value.GetDouble());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_BOOL:
- reflection->SetBool(message, fieldDescriptor, value.GetBoolean());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_ENUM:
- {
- const EnumValueDescriptor* enumValueDescriptor = fieldDescriptor->enum_type()->FindValueByName(value.GetString());
- i32 number{0};
- if (enumValueDescriptor == nullptr && TryFromString(value.GetString(), number)) {
- enumValueDescriptor = fieldDescriptor->enum_type()->FindValueByNumber(number);
- }
- if (enumValueDescriptor != nullptr) {
- reflection->SetEnum(message, fieldDescriptor, enumValueDescriptor);
- }
- }
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_STRING:
- reflection->SetString(message, fieldDescriptor, value.GetString());
- break;
- case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: {
- auto *msg = reflection->MutableMessage(message, fieldDescriptor);
- JsonToProto(msg, value, depth + 1);
- break;
- }
- default:
- Y_ENSURE(false, "Unexpected type");
- }
- break;
- }
- default:
- Y_ENSURE(false, "Unexpected transformer");
- }
- }
- }
- }
-
- }
-
-
-
template<class TProtoRequest>
void FillInputCustomMetrics(const TProtoRequest& request, const THttpRequestContext& httpContext, const TActorContext& ctx) {
Y_UNUSED(request, httpContext, ctx);
@@ -810,10 +548,8 @@ BuildLabels("", httpContext, "stream.put_records.failed_records_per_second")
void HandleGrpcResponse(TEvServerlessProxy::TEvGrpcRequestResult::TPtr ev,
const TActorContext& ctx) {
- // convert grpc result to protobuf
- // return http response;
if (ev->Get()->Status->IsSuccess()) {
- ProtoToJson(*ev->Get()->Message, HttpContext.ResponseData.ResponseBody);
+ ProtoToJson(*ev->Get()->Message, HttpContext.ResponseData.Body);
FillOutputCustomMetrics<TProtoResult>(
*(dynamic_cast<TProtoResult*>(ev->Get()->Message.Get())), HttpContext, ctx);
ReportLatencyCounters(ctx);
@@ -856,7 +592,7 @@ BuildLabels("", httpContext, "stream.put_records.failed_records_per_second")
void Bootstrap(const TActorContext& ctx) {
StartTime = ctx.Now();
try {
- JsonToProto(&Request, HttpContext.RequestBody);
+ JsonToProto(HttpContext.RequestData.Body, &Request);
} catch (std::exception& e) {
LOG_SP_WARN_S(ctx, NKikimrServices::HTTP_PROXY,
"got new request with incorrect json from [" << SourceAddress << "] " <<
@@ -912,10 +648,6 @@ BuildLabels("", httpContext, "stream.put_records.failed_records_per_second")
TActorId AuthActor;
};
-
-
-
-
private:
TString Method;
@@ -949,6 +681,7 @@ BuildLabels("", httpContext, "stream.put_records.failed_records_per_second")
DECLARE_PROCESSOR(DecreaseStreamRetentionPeriod);
DECLARE_PROCESSOR(IncreaseStreamRetentionPeriod);
DECLARE_PROCESSOR(UpdateShardCount);
+ DECLARE_PROCESSOR(UpdateStreamMode);
DECLARE_PROCESSOR(RegisterStreamConsumer);
DECLARE_PROCESSOR(DeregisterStreamConsumer);
DECLARE_PROCESSOR(DescribeStreamConsumer);
@@ -965,12 +698,15 @@ BuildLabels("", httpContext, "stream.put_records.failed_records_per_second")
#undef DECLARE_PROCESSOR
}
- bool THttpRequestProcessors::Execute(const TString& name, THttpRequestContext&& context, THolder<NKikimr::NSQS::TAwsRequestSignV4> signature, const TActorContext& ctx) {
+ bool THttpRequestProcessors::Execute(const TString& name, THttpRequestContext&& context,
+ THolder<NKikimr::NSQS::TAwsRequestSignV4> signature,
+ const TActorContext& ctx) {
// TODO: To be removed by CLOUD-79086
if (name == "RegisterStreamConsumer" ||
name == "DeregisterStreamConsumer" ||
name == "ListStreamConsumers") {
- context.SendBadRequest(NYdb::EStatus::BAD_REQUEST, TStringBuilder() << "Unsupported method name " << name, ctx);
+ context.SendBadRequest(NYdb::EStatus::BAD_REQUEST,
+ TStringBuilder() << "Unsupported method name " << name, ctx);
return false;
}
@@ -978,7 +714,8 @@ BuildLabels("", httpContext, "stream.put_records.failed_records_per_second")
proc->second->Execute(std::move(context), std::move(signature), ctx);
return true;
}
- context.SendBadRequest(NYdb::EStatus::BAD_REQUEST, TStringBuilder() << "Unknown method name " << name, ctx);
+ context.SendBadRequest(NYdb::EStatus::BAD_REQUEST,
+ TStringBuilder() << "Unknown method name " << name, ctx);
return false;
}
@@ -991,8 +728,61 @@ BuildLabels("", httpContext, "stream.put_records.failed_records_per_second")
}
}
- void THttpRequestContext::ParseHeaders(TStringBuf str)
- {
+ THttpRequestContext::THttpRequestContext(
+ const NKikimrConfig::TServerlessProxyConfig& config,
+ NHttp::THttpIncomingRequestPtr request,
+ NActors::TActorId sender,
+ NYdb::TDriver* driver,
+ std::shared_ptr<NYdb::ICredentialsProvider> serviceAccountCredentialsProvider)
+ : ServiceConfig(config)
+ , Request(request)
+ , Sender(sender)
+ , Driver(driver)
+ , ServiceAccountCredentialsProvider(serviceAccountCredentialsProvider) {
+ char address[INET6_ADDRSTRLEN];
+ if (inet_ntop(AF_INET6, &(Request->Address), address, INET6_ADDRSTRLEN) == nullptr) {
+ SourceAddress = "unknown";
+ } else {
+ SourceAddress = address;
+ }
+
+ DatabaseName = Request->URL;
+ if (DatabaseName == "/") {
+ DatabaseName = "";
+ }
+ }
+
+ void THttpRequestContext::SendBadRequest(NYdb::EStatus status, const TString& errorText,
+ const TActorContext& ctx) {
+ ResponseData.Body.SetType(NJson::JSON_MAP);
+ ResponseData.Body["message"] = errorText;
+ ResponseData.Body["__type"] = StatusToErrorType(status);
+
+ LOG_SP_INFO_S(ctx, NKikimrServices::HTTP_PROXY,
+ "reply with status: " << status << " message: " << errorText);
+ auto res = Request->CreateResponse(
+ TStringBuilder() << (int)StatusToHttpCode(status),
+ StatusToErrorType(status),
+ strByMime(ContentType),
+ ResponseData.DumpBody(ContentType)
+ );
+ ctx.Send(Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse(res));
+ }
+
+ void THttpRequestContext::DoReply(const TActorContext& ctx) {
+ if (ResponseData.Status == NYdb::EStatus::SUCCESS) {
+ LOG_SP_INFO_S(ctx, NKikimrServices::HTTP_PROXY, "reply ok");
+ auto res = Request->CreateResponseOK(
+ ResponseData.DumpBody(ContentType),
+ strByMime(ContentType)
+ );
+ ctx.Send(Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse(res));
+ } else {
+ SendBadRequest(ResponseData.Status, ResponseData.ErrorText, ctx);
+ }
+ }
+
+ void THttpRequestContext::ParseHeaders(TStringBuf str) {
TString sourceReqId;
NHttp::THeaders headers(str);
for (const auto& header : headers.Headers) {
@@ -1011,11 +801,34 @@ BuildLabels("", httpContext, "stream.put_records.failed_records_per_second")
TVector<TString> parts = SplitString(requestTarget, ".");
ApiVersion = parts[0];
MethodName = parts[1];
+ } else if (AsciiEqualsIgnoreCase(header.first, REQUEST_CONTENT_TYPE_HEADER)) {
+ ContentType = mimeByStr(header.second);
} else if (AsciiEqualsIgnoreCase(header.first, REQUEST_DATE_HEADER)) {
}
}
RequestId = GenerateRequestId(sourceReqId);
}
+ std::optional<NJson::TJsonValue> THttpRequestData::Parse(MimeTypes contentType, const TStringBuf& body) {
+ auto requestJsonStr = body;
+
+ switch (contentType) {
+ case MIME_JSON: {
+ NJson::TJsonValue requestBody;
+ auto fromJson = NJson::ReadJsonTree(requestJsonStr, &requestBody);
+ return fromJson ? std::optional(requestBody) : std::nullopt;
+ }
+ default:
+ return std::nullopt;
+ }
+ }
+ TString THttpResponseData::DumpBody(MimeTypes contentType) {
+ switch (contentType) {
+ case MIME_JSON:
+ default: {
+ return NJson::WriteJson(Body, false);
+ }
+ }
+ }
} // namespace NKikimr::NHttpProxy
diff --git a/ydb/core/http_proxy/http_req.h b/ydb/core/http_proxy/http_req.h
index 9b1f01af3e..0fc93910c4 100644
--- a/ydb/core/http_proxy/http_req.h
+++ b/ydb/core/http_proxy/http_req.h
@@ -48,19 +48,31 @@ private:
struct THttpResponseData {
NYdb::EStatus Status = NYdb::EStatus::SUCCESS;
- NJson::TJsonValue ResponseBody;
+ NJson::TJsonValue Body;
TString ErrorText;
+
+ TString DumpBody(MimeTypes contentType);
+};
+
+struct THttpRequestData {
+ NJson::TJsonValue Body;
+ std::optional<NJson::TJsonValue> Parse(MimeTypes contentType, const TStringBuf& body);
};
struct THttpRequestContext {
- THttpRequestContext( const NKikimrConfig::TServerlessProxyConfig& config,
- std::shared_ptr<NYdb::ICredentialsProvider> serviceAccountCredentialsProvider)
- : ServiceConfig(config)
- , ServiceAccountCredentialsProvider(serviceAccountCredentialsProvider)
- {}
+ THttpRequestContext(const NKikimrConfig::TServerlessProxyConfig& config,
+ NHttp::THttpIncomingRequestPtr request,
+ NActors::TActorId sender,
+ NYdb::TDriver* driver,
+ std::shared_ptr<NYdb::ICredentialsProvider> serviceAccountCredentialsProvider);
+ const NKikimrConfig::TServerlessProxyConfig& ServiceConfig;
+ NHttp::THttpIncomingRequestPtr Request;
+ NActors::TActorId Sender;
+ NYdb::TDriver* Driver;
+ std::shared_ptr<NYdb::ICredentialsProvider> ServiceAccountCredentialsProvider;
THttpResponseData ResponseData;
- NJson::TJsonValue RequestBody;
+ THttpRequestData RequestData;
TString ServiceAccountId;
TString RequestId;
TString DiscoveryEndpoint;
@@ -72,18 +84,11 @@ struct THttpRequestContext {
TString SourceAddress;
TString MethodName;
TString ApiVersion;
-
- NHttp::THttpIncomingRequestPtr Request;
- NActors::TActorId Sender;
-
+ MimeTypes ContentType;
TString IamToken;
TString SerializedUserToken;
- const NKikimrConfig::TServerlessProxyConfig& ServiceConfig;
- NYdb::TDriver* Driver;
- std::shared_ptr<NYdb::ICredentialsProvider> ServiceAccountCredentialsProvider;
- TStringBuilder LogPrefix() const
- {
+ TStringBuilder LogPrefix() const {
return TStringBuilder() << "http request [" << MethodName << "] requestId [" << RequestId << "]";
}
@@ -97,7 +102,9 @@ public:
virtual ~IHttpRequestProcessor() = default;
virtual const TString& Name() const = 0;
- virtual void Execute(THttpRequestContext&& context, THolder<NKikimr::NSQS::TAwsRequestSignV4> signature, const TActorContext& ctx) = 0;
+ virtual void Execute(THttpRequestContext&& context,
+ THolder<NKikimr::NSQS::TAwsRequestSignV4> signature,
+ const TActorContext& ctx) = 0;
};
class THttpRequestProcessors {
@@ -107,7 +114,9 @@ public:
public:
void Initialize();
- bool Execute(const TString& name, THttpRequestContext&& params, THolder<NKikimr::NSQS::TAwsRequestSignV4> signature, const TActorContext& ctx);
+ bool Execute(const TString& name, THttpRequestContext&& params,
+ THolder<NKikimr::NSQS::TAwsRequestSignV4> signature,
+ const TActorContext& ctx);
private:
THashMap<TString, THolder<IHttpRequestProcessor>> Name2Processor;
diff --git a/ydb/core/http_proxy/http_service.cpp b/ydb/core/http_proxy/http_service.cpp
index b1b880d015..6ac0abe6a3 100644
--- a/ydb/core/http_proxy/http_service.cpp
+++ b/ydb/core/http_proxy/http_service.cpp
@@ -14,6 +14,7 @@
#include <util/stream/file.h>
+
namespace NKikimr::NHttpProxy {
using namespace NActors;
@@ -21,43 +22,10 @@ namespace NKikimr::NHttpProxy {
class THttpProxyActor : public NActors::TActorBootstrapped<THttpProxyActor> {
using TBase = NActors::TActorBootstrapped<THttpProxyActor>;
public:
- explicit THttpProxyActor(const THttpProxyConfig& cfg)
- : Config(cfg.Config)
- {
- ServiceAccountCredentialsProvider = cfg.CredentialsProvider;
- Processors = MakeHolder<THttpRequestProcessors>();
- Processors->Initialize();
- if (cfg.UseSDK) {
- auto config = NYdb::TDriverConfig().SetNetworkThreadsNum(1)
- .SetGRpcKeepAlivePermitWithoutCalls(true)
- .SetGRpcKeepAliveTimeout(TDuration::Seconds(90))
- .SetDiscoveryMode(NYdb::EDiscoveryMode::Async);
- if (Config.GetCaCert()) {
- config.UseSecureConnection(TFileInput(Config.GetCaCert()).ReadAll());
- }
- Driver = MakeHolder<NYdb::TDriver>(std::move(config));
- }
- }
-
- void Bootstrap(const TActorContext& ctx) {
- TBase::Become(&THttpProxyActor::StateWork);
- const auto& config = Config.GetHttpConfig();
- THolder<NHttp::TEvHttpProxy::TEvAddListeningPort> ev = MakeHolder<NHttp::TEvHttpProxy::TEvAddListeningPort>(config.GetPort());
- ev->Secure = config.GetSecure();
- ev->CertificateFile = config.GetCert();
- ev->PrivateKeyFile = config.GetKey();
-
- ctx.Send(new NActors::IEventHandle(MakeHttpServerServiceID(), TActorId(),
- ev.Release(), 0, true));
- ctx.Send(MakeHttpServerServiceID(), new NHttp::TEvHttpProxy::TEvRegisterHandler("/", MakeHttpProxyID()));
- }
-
- TStringBuilder LogPrefix() const {
- return TStringBuilder() << "proxy service:";
- }
-
- void Initialize();
+ explicit THttpProxyActor(const THttpProxyConfig& cfg);
+ void Bootstrap(const TActorContext& ctx);
+ TStringBuilder LogPrefix() const;
private:
STFUNC(StateWork) {
@@ -74,32 +42,41 @@ namespace NKikimr::NHttpProxy {
std::shared_ptr<NYdb::ICredentialsProvider> ServiceAccountCredentialsProvider;
};
- void THttpRequestContext::SendBadRequest(NYdb::EStatus status, const TString& errorText,
- const TActorContext& ctx) {
- NJson::TJsonValue value;
- value.SetType(NJson::JSON_MAP);
- value["message"] = errorText;
- value["__type"] = StatusToErrorType(status);
-
- LOG_SP_INFO_S(ctx, NKikimrServices::HTTP_PROXY, "reply with status: " << status << " message: " << errorText);
- auto res = Request->CreateResponse(
- TStringBuilder() << (int)StatusToHttpCode(status),
- StatusToErrorType(status),
- strByMime(MIME_JSON),
- NJson::WriteJson(value, false)
- );
- ctx.Send(Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse(res));
+ THttpProxyActor::THttpProxyActor(const THttpProxyConfig& cfg)
+ : Config(cfg.Config)
+ {
+ ServiceAccountCredentialsProvider = cfg.CredentialsProvider;
+ Processors = MakeHolder<THttpRequestProcessors>();
+ Processors->Initialize();
+ if (cfg.UseSDK) {
+ auto config = NYdb::TDriverConfig().SetNetworkThreadsNum(1)
+ .SetGRpcKeepAlivePermitWithoutCalls(true)
+ .SetGRpcKeepAliveTimeout(TDuration::Seconds(90))
+ .SetDiscoveryMode(NYdb::EDiscoveryMode::Async);
+ if (Config.GetCaCert()) {
+ config.UseSecureConnection(TFileInput(Config.GetCaCert()).ReadAll());
+ }
+ Driver = MakeHolder<NYdb::TDriver>(std::move(config));
+ }
}
- void THttpRequestContext::DoReply(const TActorContext& ctx) {
- if (ResponseData.Status == NYdb::EStatus::SUCCESS) {
- LOG_SP_INFO_S(ctx, NKikimrServices::HTTP_PROXY, "reply ok");
- auto res = Request->CreateResponseOK(NJson::WriteJson(ResponseData.ResponseBody, false),
- strByMime(MIME_JSON));
- ctx.Send(Sender, new NHttp::TEvHttpProxy::TEvHttpOutgoingResponse(res));
- } else {
- SendBadRequest(ResponseData.Status, ResponseData.ErrorText, ctx);
- }
+ TStringBuilder THttpProxyActor::LogPrefix() const {
+ return TStringBuilder() << "proxy service:";
+ }
+
+ void THttpProxyActor::Bootstrap(const TActorContext& ctx) {
+ TBase::Become(&THttpProxyActor::StateWork);
+ const auto& config = Config.GetHttpConfig();
+ THolder<NHttp::TEvHttpProxy::TEvAddListeningPort> ev =
+ MakeHolder<NHttp::TEvHttpProxy::TEvAddListeningPort>(config.GetPort());
+ ev->Secure = config.GetSecure();
+ ev->CertificateFile = config.GetCert();
+ ev->PrivateKeyFile = config.GetKey();
+
+ ctx.Send(new NActors::IEventHandle(MakeHttpServerServiceID(), TActorId(),
+ ev.Release(), 0, true));
+ ctx.Send(MakeHttpServerServiceID(),
+ new NHttp::TEvHttpProxy::TEvRegisterHandler("/", MakeHttpProxyID()));
}
void THttpProxyActor::Handle(NHttp::TEvHttpProxy::TEvHttpIncomingRequest::TPtr& ev,
@@ -110,44 +87,42 @@ namespace NKikimr::NHttpProxy {
return;
}
- THttpRequestContext context(Config, ServiceAccountCredentialsProvider);
- context.Request = ev->Get()->Request;
- context.Sender = ev->Sender;
- context.ParseHeaders(context.Request->Headers);
-
- char address[INET6_ADDRSTRLEN];
- if (inet_ntop(AF_INET6, &(context.Request->Address), address, INET6_ADDRSTRLEN) != nullptr) {
- context.SourceAddress = address;
- } else {
- context.SourceAddress = "unknown";
- }
-
- context.Driver = Driver.Get();
- context.DatabaseName = context.Request->URL;
+ THttpRequestContext context(Config,
+ ev->Get()->Request,
+ ev->Sender,
+ Driver.Get(),
+ ServiceAccountCredentialsProvider);
- if (context.DatabaseName == "/") {
- context.DatabaseName = "";
- }
+ context.ParseHeaders(context.Request->Headers);
- LOG_SP_INFO_S(ctx, NKikimrServices::HTTP_PROXY, " incoming request from [" << context.SourceAddress << "] request [" << context.MethodName << "] url [" << context.Request->URL
- << "] database [" << context.DatabaseName << "] requestId: " << context.RequestId);
+ LOG_SP_INFO_S(ctx, NKikimrServices::HTTP_PROXY,
+ " incoming request from [" << context.SourceAddress << "]" <<
+ " request [" << context.MethodName << "]" <<
+ " url [" << context.Request->URL << "]" <<
+ " database [" << context.DatabaseName << "]" <<
+ " requestId: " << context.RequestId);
- if (!NJson::ReadJsonTree(context.Request->Body, &context.RequestBody)) {
- context.SendBadRequest(NYdb::EStatus::BAD_REQUEST, "Couldn't parse json from http request body", ctx);
+ const auto requestBody = context.RequestData.Parse(context.ContentType, context.Request->Body);
+ if (requestBody) {
+ context.RequestData.Body = requestBody.value();
+ } else {
+ context.SendBadRequest(NYdb::EStatus::BAD_REQUEST, "Can not parse request body", ctx);
return;
}
+
THolder<NKikimr::NSQS::TAwsRequestSignV4> signature;
if (context.IamToken.empty()) {
try {
- TString fullRequest = TString(context.Request->Method) + " "
- + context.Request->URL + " " + context.Request->Protocol
- + "/" + context.Request->Version + "\r\n"
- + context.Request->Headers
- + context.Request->Content;
+ const TString fullRequest = TString(context.Request->Method) + " "
+ + context.Request->URL + " " + context.Request->Protocol
+ + "/" + context.Request->Version + "\r\n"
+ + context.Request->Headers
+ + context.Request->Content;
signature = MakeHolder<NKikimr::NSQS::TAwsRequestSignV4>(fullRequest);
} catch(NKikimr::NSQS::TSQSException& e) {
- context.SendBadRequest(NYdb::EStatus::BAD_REQUEST, TStringBuilder() << "Malformed signature: " << e.what(), ctx);
+ context.SendBadRequest(NYdb::EStatus::BAD_REQUEST,
+ TStringBuilder() << "Malformed signature: " << e.what(), ctx);
return;
}
}
@@ -155,9 +130,8 @@ namespace NKikimr::NHttpProxy {
Processors->Execute(context.MethodName, std::move(context), std::move(signature), ctx);
}
-
NActors::IActor* CreateHttpProxy(const THttpProxyConfig& config) {
return new THttpProxyActor(config);
}
-}
+} // namespace NKikimr::NHttpProxy
diff --git a/ydb/core/http_proxy/json_proto_conversion.h b/ydb/core/http_proxy/json_proto_conversion.h
new file mode 100644
index 0000000000..5f9be4972e
--- /dev/null
+++ b/ydb/core/http_proxy/json_proto_conversion.h
@@ -0,0 +1,279 @@
+#pragma once
+
+#include <library/cpp/json/json_reader.h>
+#include <library/cpp/json/json_writer.h>
+#include <library/cpp/protobuf/json/json_output_create.h>
+#include <library/cpp/protobuf/json/proto2json.h>
+#include <library/cpp/protobuf/json/proto2json_printer.h>
+#include <ydb/library/naming_conventions/naming_conventions.h>
+
+
+namespace NKikimr::NHttpProxy {
+
+TString ProxyFieldNameConverter(const google::protobuf::FieldDescriptor& descriptor) {
+ return NNaming::SnakeToCamelCase(descriptor.name());
+}
+
+class TYdsProtoToJsonPrinter : public NProtobufJson::TProto2JsonPrinter {
+public:
+ TYdsProtoToJsonPrinter(const google::protobuf::Reflection* reflection,
+ const NProtobufJson::TProto2JsonConfig& config)
+ : NProtobufJson::TProto2JsonPrinter(config)
+ , ProtoReflection(reflection)
+ {}
+
+protected:
+ template <bool InMapContext>
+ void PrintDoubleValue(const TStringBuf& key, double value,
+ NProtobufJson::IJsonOutput& json) {
+ if constexpr(InMapContext) {
+ json.WriteKey(key).Write(value);
+ } else {
+ json.Write(value);
+ }
+ }
+
+ void PrintField(const NProtoBuf::Message& proto, const NProtoBuf::FieldDescriptor& field,
+ NProtobufJson::IJsonOutput& json, TStringBuf key = {}) override {
+ if (field.options().HasExtension(Ydb::DataStreams::V1::FieldTransformer)) {
+ if (field.options().GetExtension(Ydb::DataStreams::V1::FieldTransformer) ==
+ Ydb::DataStreams::V1::TRANSFORM_BASE64) {
+ Y_ENSURE(field.cpp_type() == google::protobuf::FieldDescriptor::CPPTYPE_STRING,
+ "Base64 is only supported for strings");
+ if (!key) {
+ key = MakeKey(field);
+ }
+
+ if (field.is_repeated()) {
+ for (int i = 0, endI = ProtoReflection->FieldSize(proto, &field); i < endI; ++i) {
+ PrintStringValue<false>(field, TStringBuf(),
+ Base64Encode(proto.GetReflection()->GetRepeatedString(proto, &field, i)), json);
+ }
+ } else {
+ PrintStringValue<true>(field, key,
+ Base64Encode(proto.GetReflection()->GetString(proto, &field)), json);
+ }
+ return;
+ }
+
+ if (field.options().GetExtension(Ydb::DataStreams::V1::FieldTransformer) ==
+ Ydb::DataStreams::V1::TRANSFORM_DOUBLE_S_TO_INT_MS) {
+ Y_ENSURE(field.cpp_type() == google::protobuf::FieldDescriptor::CPPTYPE_INT64,
+ "Double S to Int MS is only supported for int64 timestamps");
+
+ if (!key) {
+ key = MakeKey(field);
+ }
+
+ if (field.is_repeated()) {
+ for (int i = 0, endI = ProtoReflection->FieldSize(proto, &field); i < endI; ++i) {
+ double value = proto.GetReflection()->GetRepeatedInt64(proto, &field, i) / 1000.0;
+ PrintDoubleValue<false>(TStringBuf(), value, json);
+ }
+ } else {
+ double value = proto.GetReflection()->GetInt64(proto, &field) / 1000.0;
+ PrintDoubleValue<true>(key, value, json);
+ }
+ return;
+ }
+
+ if (field.options().GetExtension(Ydb::DataStreams::V1::FieldTransformer) ==
+ Ydb::DataStreams::V1::TRANSFORM_EMPTY_TO_NOTHING) {
+ Y_ENSURE(field.cpp_type() == google::protobuf::FieldDescriptor::CPPTYPE_STRING,
+ "Empty to nothing is only supported for strings");
+
+ if (!key) {
+ key = MakeKey(field);
+ }
+
+ if (field.is_repeated()) {
+ for (int i = 0, endI = ProtoReflection->FieldSize(proto, &field); i < endI; ++i) {
+ auto value = proto.GetReflection()->GetRepeatedString(proto, &field, i);
+ if (!value.empty()) {
+ PrintStringValue<false>(field, TStringBuf(),
+ proto.GetReflection()->GetRepeatedString(proto, &field, i), json);
+ }
+ }
+ } else {
+ auto value = proto.GetReflection()->GetString(proto, &field);
+ if (!value.empty()) {
+ PrintStringValue<true>(field, key,
+ proto.GetReflection()->GetString(proto, &field), json);
+ }
+ }
+ return;
+ }
+ } else {
+ return NProtobufJson::TProto2JsonPrinter::PrintField(proto, field, json, key);
+ }
+ }
+
+private:
+ const google::protobuf::Reflection* ProtoReflection = nullptr;
+};
+
+void ProtoToJson(const NProtoBuf::Message& resp, NJson::TJsonValue& value) {
+ auto config = NProtobufJson::TProto2JsonConfig()
+ .SetFormatOutput(false)
+ .SetMissingSingleKeyMode(NProtobufJson::TProto2JsonConfig::MissingKeyDefault)
+ .SetNameGenerator(ProxyFieldNameConverter)
+ .SetEnumMode(NProtobufJson::TProto2JsonConfig::EnumName);
+ TYdsProtoToJsonPrinter printer(resp.GetReflection(), config);
+ printer.Print(resp, *NProtobufJson::CreateJsonMapOutput(value));
+}
+
+void JsonToProto(const NJson::TJsonValue& jsonValue, NProtoBuf::Message* message, ui32 depth = 0) {
+ Y_ENSURE(depth < 101, "Json depth is > 100");
+ Y_ENSURE(jsonValue.IsMap(), "Top level of json value is not a map");
+ auto* desc = message->GetDescriptor();
+ auto* reflection = message->GetReflection();
+ for (const auto& [key, value] : jsonValue.GetMap()) {
+ auto* fieldDescriptor = desc->FindFieldByName(NNaming::CamelToSnakeCase(key));
+ Y_ENSURE(fieldDescriptor, "Unexpected json key: " + key);
+ auto transformer = Ydb::DataStreams::V1::TRANSFORM_NONE;
+ if (fieldDescriptor->options().HasExtension(Ydb::DataStreams::V1::FieldTransformer)) {
+ transformer = fieldDescriptor->options().GetExtension(Ydb::DataStreams::V1::FieldTransformer);
+ }
+
+ if (value.IsArray()) {
+ Y_ENSURE(fieldDescriptor->is_repeated());
+ for (auto& elem : value.GetArray()) {
+ switch (transformer) {
+ case Ydb::DataStreams::V1::TRANSFORM_BASE64: {
+ Y_ENSURE(fieldDescriptor->cpp_type() ==
+ google::protobuf::FieldDescriptor::CPPTYPE_STRING,
+ "Base64 transformer is only applicable to strings");
+ reflection->AddString(message, fieldDescriptor, Base64Decode(value.GetString()));
+ break;
+ }
+ case Ydb::DataStreams::V1::TRANSFORM_DOUBLE_S_TO_INT_MS: {
+ reflection->SetInt64(message, fieldDescriptor, value.GetDouble() * 1000);
+ break;
+ }
+ case Ydb::DataStreams::V1::TRANSFORM_EMPTY_TO_NOTHING:
+ case Ydb::DataStreams::V1::TRANSFORM_NONE: {
+ switch (fieldDescriptor->cpp_type()) {
+ case google::protobuf::FieldDescriptor::CPPTYPE_INT32:
+ reflection->AddInt32(message, fieldDescriptor, value.GetInteger());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_INT64:
+ reflection->AddInt64(message, fieldDescriptor, value.GetInteger());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_UINT32:
+ reflection->AddUInt32(message, fieldDescriptor, value.GetUInteger());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_UINT64:
+ reflection->AddUInt64(message, fieldDescriptor, value.GetUInteger());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE:
+ reflection->AddDouble(message, fieldDescriptor, value.GetDouble());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT:
+ reflection->AddFloat(message, fieldDescriptor, value.GetDouble());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_BOOL:
+ reflection->AddFloat(message, fieldDescriptor, value.GetBoolean());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_ENUM:
+ {
+ const NProtoBuf::EnumValueDescriptor* enumValueDescriptor =
+ fieldDescriptor->enum_type()->FindValueByName(value.GetString());
+ i32 number{0};
+ if (enumValueDescriptor == nullptr &&
+ TryFromString(value.GetString(), number)) {
+ enumValueDescriptor =
+ fieldDescriptor->enum_type()->FindValueByNumber(number);
+ }
+ if (enumValueDescriptor != nullptr) {
+ reflection->AddEnum(message, fieldDescriptor, enumValueDescriptor);
+ }
+ }
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_STRING:
+ reflection->AddString(message, fieldDescriptor, value.GetString());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: {
+ NProtoBuf::Message *msg = reflection->AddMessage(message, fieldDescriptor);
+ JsonToProto(elem, msg, depth + 1);
+ break;
+ }
+ default:
+ Y_ENSURE(false, "Unexpected type");
+ }
+ break;
+ }
+ default:
+ Y_ENSURE(false, "Unknown transformer type");
+ }
+ }
+ } else {
+ switch (transformer) {
+ case Ydb::DataStreams::V1::TRANSFORM_BASE64: {
+ Y_ENSURE(fieldDescriptor->cpp_type() ==
+ google::protobuf::FieldDescriptor::CPPTYPE_STRING,
+ "Base64 transformer is applicable only to strings");
+ reflection->SetString(message, fieldDescriptor, Base64Decode(value.GetString()));
+ break;
+ }
+ case Ydb::DataStreams::V1::TRANSFORM_DOUBLE_S_TO_INT_MS: {
+ reflection->SetInt64(message, fieldDescriptor, value.GetDouble() * 1000);
+ break;
+ }
+ case Ydb::DataStreams::V1::TRANSFORM_EMPTY_TO_NOTHING:
+ case Ydb::DataStreams::V1::TRANSFORM_NONE: {
+ switch (fieldDescriptor->cpp_type()) {
+ case google::protobuf::FieldDescriptor::CPPTYPE_INT32:
+ reflection->SetInt32(message, fieldDescriptor, value.GetInteger());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_INT64:
+ reflection->SetInt64(message, fieldDescriptor, value.GetInteger());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_UINT32:
+ reflection->SetUInt32(message, fieldDescriptor, value.GetUInteger());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_UINT64:
+ reflection->SetUInt64(message, fieldDescriptor, value.GetUInteger());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE:
+ reflection->SetDouble(message, fieldDescriptor, value.GetDouble());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT:
+ reflection->SetFloat(message, fieldDescriptor, value.GetDouble());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_BOOL:
+ reflection->SetBool(message, fieldDescriptor, value.GetBoolean());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: {
+ const NProtoBuf::EnumValueDescriptor* enumValueDescriptor =
+ fieldDescriptor->enum_type()->FindValueByName(value.GetString());
+ i32 number{0};
+ if (enumValueDescriptor == nullptr &&
+ TryFromString(value.GetString(), number)) {
+ enumValueDescriptor =
+ fieldDescriptor->enum_type()->FindValueByNumber(number);
+ }
+ if (enumValueDescriptor != nullptr) {
+ reflection->SetEnum(message, fieldDescriptor, enumValueDescriptor);
+ }
+ break;
+ }
+ case google::protobuf::FieldDescriptor::CPPTYPE_STRING:
+ reflection->SetString(message, fieldDescriptor, value.GetString());
+ break;
+ case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: {
+ auto *msg = reflection->MutableMessage(message, fieldDescriptor);
+ JsonToProto(value, msg, depth + 1);
+ break;
+ }
+ default:
+ Y_ENSURE(false, "Unexpected type");
+ }
+ break;
+ }
+ default: Y_ENSURE(false, "Unexpected transformer");
+ }
+ }
+ }
+}
+
+} // namespace NKikimr::NHttpProxy
diff --git a/ydb/core/http_proxy/metrics_actor.h b/ydb/core/http_proxy/metrics_actor.h
index 95a80706c3..457ca51494 100644
--- a/ydb/core/http_proxy/metrics_actor.h
+++ b/ydb/core/http_proxy/metrics_actor.h
@@ -9,7 +9,7 @@
namespace NKikimr::NHttpProxy {
struct TMetricsSettings {
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
//TODO: TTL
};
diff --git a/ydb/core/kesus/CMakeLists.txt b/ydb/core/kesus/CMakeLists.txt
new file mode 100644
index 0000000000..db0ba79582
--- /dev/null
+++ b/ydb/core/kesus/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(proxy)
+add_subdirectory(tablet)
diff --git a/ydb/core/kesus/proxy/CMakeLists.txt b/ydb/core/kesus/proxy/CMakeLists.txt
index e758e5a4fb..8fe48c712b 100644
--- a/ydb/core/kesus/proxy/CMakeLists.txt
+++ b/ydb/core/kesus/proxy/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-kesus-proxy)
target_link_libraries(core-kesus-proxy PUBLIC
diff --git a/ydb/core/kesus/proxy/ut/CMakeLists.txt b/ydb/core/kesus/proxy/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kesus/proxy/ut/CMakeLists.txt
+++ b/ydb/core/kesus/proxy/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kesus/tablet/CMakeLists.txt b/ydb/core/kesus/tablet/CMakeLists.txt
index 5e3a3e6202..ddcffa3cf9 100644
--- a/ydb/core/kesus/tablet/CMakeLists.txt
+++ b/ydb/core/kesus/tablet/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(quoter_performance_test)
+add_subdirectory(ut)
add_library(core-kesus-tablet)
target_link_libraries(core-kesus-tablet PUBLIC
diff --git a/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.txt b/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.txt
+++ b/ydb/core/kesus/tablet/quoter_performance_test/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kesus/tablet/quoter_resource_tree.cpp b/ydb/core/kesus/tablet/quoter_resource_tree.cpp
index 3f9d6e5653..69a1f6c191 100644
--- a/ydb/core/kesus/tablet/quoter_resource_tree.cpp
+++ b/ydb/core/kesus/tablet/quoter_resource_tree.cpp
@@ -206,7 +206,7 @@ public:
void DeactivateIfFull(TInstant now);
- void SetResourceCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> resourceCounters) override;
+ void SetResourceCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> resourceCounters) override;
void SetLimitCounter();
@@ -287,7 +287,7 @@ public:
ClientId);
Active = true;
GetResource()->AddActiveChild(this, queue, now);
- const NMonitoring::TDynamicCounters::TCounterPtr& activeSessions = GetResource()->GetCounters().ActiveSessions;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& activeSessions = GetResource()->GetCounters().ActiveSessions;
if (activeSessions) {
activeSessions->Inc();
}
@@ -302,7 +302,7 @@ public:
Active = false;
AmountRequested = 0.0;
GetResource()->RemoveActiveChild(this);
- const NMonitoring::TDynamicCounters::TCounterPtr& activeSessions = GetResource()->GetCounters().ActiveSessions;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& activeSessions = GetResource()->GetCounters().ActiveSessions;
if (activeSessions) {
activeSessions->Dec();
}
@@ -517,7 +517,7 @@ void TQuoterResourceTree::CalcParameters() {
}
}
-void TQuoterResourceTree::SetResourceCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> resourceCounters) {
+void TQuoterResourceTree::SetResourceCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> resourceCounters) {
Counters.SetResourceCounters(std::move(resourceCounters));
}
@@ -534,7 +534,7 @@ void TQuoterResourceTree::StopActiveTime(TInstant now) {
StartActiveTime = TInstant::Zero();
}
-void TQuoterResourceTree::TCounters::SetResourceCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> resourceCounters) {
+void TQuoterResourceTree::TCounters::SetResourceCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> resourceCounters) {
ResourceCounters = std::move(resourceCounters);
if (ResourceCounters) {
Allocated = ResourceCounters->GetCounter(ALLOCATED_COUNTER_NAME, true);
@@ -929,7 +929,7 @@ THolder<TQuoterSession> THierarhicalDRRQuoterResourceTree::DoCreateSession(const
return MakeHolder<THierarhicalDRRQuoterSession>(clientId, this);
}
-void THierarhicalDRRQuoterResourceTree::SetResourceCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> resourceCounters) {
+void THierarhicalDRRQuoterResourceTree::SetResourceCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> resourceCounters) {
TQuoterResourceTree::SetResourceCounters(std::move(resourceCounters));
if (RateAccounting) {
RateAccounting->SetResourceCounters(Counters.ResourceCounters);
@@ -1163,7 +1163,7 @@ void TQuoterResources::SetResourceCounters(TQuoterResourceTree* res) {
);
}
-void TQuoterResources::SetQuoterCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> quoterCounters) {
+void TQuoterResources::SetQuoterCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> quoterCounters) {
Counters.QuoterCounters = std::move(quoterCounters);
ReinitResourceCounters();
diff --git a/ydb/core/kesus/tablet/quoter_resource_tree.h b/ydb/core/kesus/tablet/quoter_resource_tree.h
index bc28e518c3..da22972205 100644
--- a/ydb/core/kesus/tablet/quoter_resource_tree.h
+++ b/ydb/core/kesus/tablet/quoter_resource_tree.h
@@ -200,7 +200,7 @@ public:
virtual ~TQuoterResourceTree() = default;
- virtual void SetResourceCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> resourceCounters);
+ virtual void SetResourceCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> resourceCounters);
ui64 GetResourceId() const {
return ResourceId;
@@ -277,21 +277,21 @@ public:
class TCounters {
public:
- TIntrusivePtr<NMonitoring::TDynamicCounters> ResourceCounters;
- NMonitoring::TDynamicCounters::TCounterPtr Sessions;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveSessions;
- NMonitoring::TDynamicCounters::TCounterPtr Limit; // Current limit according to settings. If resource has no explicit limit, the counter is nullptr.
- NMonitoring::TDynamicCounters::TCounterPtr ElapsedMicrosecWhenResourceActive;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ResourceCounters;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Sessions;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveSessions;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Limit; // Current limit according to settings. If resource has no explicit limit, the counter is nullptr.
+ ::NMonitoring::TDynamicCounters::TCounterPtr ElapsedMicrosecWhenResourceActive;
void AddAllocated(double allocated);
ui64 GetAllocated() const {
return Allocated ? Allocated->Val() : 0;
}
- void SetResourceCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> resourceCounters);
+ void SetResourceCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> resourceCounters);
void SetLimit(TMaybe<double> limit);
private:
- NMonitoring::TDynamicCounters::TCounterPtr Allocated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Allocated;
double AllocatedRemainder = 0.0;
};
@@ -330,15 +330,15 @@ protected:
class TQuoterResources {
public:
struct TCounters {
- TIntrusivePtr<NMonitoring::TDynamicCounters> QuoterCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> QuoterCounters;
bool DetailedCountersMode = false;
- NMonitoring::TDynamicCounters::TCounterPtr ResourceSubscriptions = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- NMonitoring::TDynamicCounters::TCounterPtr UnknownResourceSubscriptions = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- NMonitoring::TDynamicCounters::TCounterPtr ResourceConsumptionStarts = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- NMonitoring::TDynamicCounters::TCounterPtr ResourceConsumptionStops = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- NMonitoring::TDynamicCounters::TCounterPtr ElapsedMicrosecOnResourceAllocation = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- NMonitoring::TDynamicCounters::TCounterPtr TickProcessorTasksProcessed = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResourceSubscriptions = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
+ ::NMonitoring::TDynamicCounters::TCounterPtr UnknownResourceSubscriptions = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResourceConsumptionStarts = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResourceConsumptionStops = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
+ ::NMonitoring::TDynamicCounters::TCounterPtr ElapsedMicrosecOnResourceAllocation = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
+ ::NMonitoring::TDynamicCounters::TCounterPtr TickProcessorTasksProcessed = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
};
public:
@@ -354,7 +354,7 @@ public:
TQuoterResourceTree* AddResource(ui64 resourceId, const NKikimrKesus::TStreamingQuoterResource& props, TString& errorMessage);
bool DeleteResource(TQuoterResourceTree* resource, TString& errorMessage);
- void SetQuoterCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> quoterCounters);
+ void SetQuoterCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> quoterCounters);
void EnableDetailedCountersMode(bool enable = true);
void FillCounters(NKikimrKesus::TEvGetQuoterResourceCountersResult& counters);
diff --git a/ydb/core/kesus/tablet/rate_accounting.cpp b/ydb/core/kesus/tablet/rate_accounting.cpp
index 1459eafbc0..7b451232af 100644
--- a/ydb/core/kesus/tablet/rate_accounting.cpp
+++ b/ydb/core/kesus/tablet/rate_accounting.cpp
@@ -78,7 +78,7 @@ class TBillingMetric {
TInstant Accumulated; // start of accumulation `Quantity`
// Monitoring
- NMonitoring::TDynamicCounters::TCounterPtr Billed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Billed;
// Configuration
NKikimrKesus::TAccountingConfig::TMetric Cfg;
@@ -100,7 +100,7 @@ public:
return TTimeGrid(TDuration::Seconds(seconds));
}
- void SetResourceCounters(const NMonitoring::TDynamicCounters::TCounterPtr& billed) {
+ void SetResourceCounters(const ::NMonitoring::TDynamicCounters::TCounterPtr& billed) {
Billed = billed;
}
@@ -450,7 +450,7 @@ bool TRateAccounting::RunAccounting() {
return accountingRequired || cleaningRequried;
}
-void TRateAccounting::SetResourceCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& resourceCounters) {
+void TRateAccounting::SetResourceCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& resourceCounters) {
Counters.SetResourceCounters(resourceCounters);
TActivationContext::Send(new NActors::IEventHandle(AccountingActor, Kesus,
new TEvPrivate::TEvCounters(Counters)));
diff --git a/ydb/core/kesus/tablet/rate_accounting.h b/ydb/core/kesus/tablet/rate_accounting.h
index 4faa1ea114..d1a8f16d4c 100644
--- a/ydb/core/kesus/tablet/rate_accounting.h
+++ b/ydb/core/kesus/tablet/rate_accounting.h
@@ -30,12 +30,12 @@ public:
IBillSink::TPtr MakeMeteringSink();
struct TRateAccountingCounters {
- TIntrusivePtr<NMonitoring::TDynamicCounters> ResourceCounters;
- NMonitoring::TDynamicCounters::TCounterPtr Provisioned;
- NMonitoring::TDynamicCounters::TCounterPtr OnDemand;
- NMonitoring::TDynamicCounters::TCounterPtr Overshoot;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ResourceCounters;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Provisioned;
+ ::NMonitoring::TDynamicCounters::TCounterPtr OnDemand;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Overshoot;
- void SetResourceCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& resourceCounters) {
+ void SetResourceCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& resourceCounters) {
ResourceCounters = resourceCounters;
if (ResourceCounters) {
Provisioned = ResourceCounters->GetCounter("Provisioned", true);
@@ -82,7 +82,7 @@ public:
// Returns true iff there are unsent reports (retry on next tick is required)
bool RunAccounting();
- void SetResourceCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& resourceCounters);
+ void SetResourceCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& resourceCounters);
private:
void ConfigureImpl();
diff --git a/ydb/core/kesus/tablet/tablet_html.cpp b/ydb/core/kesus/tablet/tablet_html.cpp
index 20d269bf65..2e15d15a72 100644
--- a/ydb/core/kesus/tablet/tablet_html.cpp
+++ b/ydb/core/kesus/tablet/tablet_html.cpp
@@ -27,7 +27,7 @@ struct TKesusTablet::THtmlRenderer {
void RenderError(IOutputStream& out, const TString& message) {
HTML(out) {
- H3() { out << "ERROR: " << message; }
+ TAG(TH3) { out << "ERROR: " << message; }
}
}
@@ -39,7 +39,7 @@ struct TKesusTablet::THtmlRenderer {
void RenderProxyList(IOutputStream& out) {
HTML(out) {
- H3() { out << "Proxies"; }
+ TAG(TH3) { out << "Proxies"; }
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
@@ -71,13 +71,13 @@ struct TKesusTablet::THtmlRenderer {
}
HTML(out) {
- H2() { out << "Kesus proxy " << actorId; }
+ TAG(TH2) { out << "Kesus proxy " << actorId; }
PRE() {
out << "Generation: " << proxy->Generation << "\n";
}
- H3() { out << "Attached sessions"; }
+ TAG(TH3) { out << "Attached sessions"; }
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
@@ -113,7 +113,7 @@ struct TKesusTablet::THtmlRenderer {
void RenderSessionList(IOutputStream& out) {
HTML(out) {
- H3() { out << "Sessions"; }
+ TAG(TH3) { out << "Sessions"; }
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
@@ -154,7 +154,7 @@ struct TKesusTablet::THtmlRenderer {
}
HTML(out) {
- H2() { out << "Kesus session " << sessionId; }
+ TAG(TH2) { out << "Kesus session " << sessionId; }
PRE() {
out << "Description: " << session->Description.Quote() << "\n";
@@ -170,7 +170,7 @@ struct TKesusTablet::THtmlRenderer {
out << "Last attach seqno: " << session->LastOwnerSeqNo << "\n";
}
- H3() { out << "Owned semaphores"; }
+ TAG(TH3) { out << "Owned semaphores"; }
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
@@ -194,7 +194,7 @@ struct TKesusTablet::THtmlRenderer {
}
}
- H3() { out << "Waiting semaphores"; }
+ TAG(TH3) { out << "Waiting semaphores"; }
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
@@ -242,7 +242,7 @@ struct TKesusTablet::THtmlRenderer {
void RenderSemaphoreList(IOutputStream& out) {
HTML(out) {
- H3() { out << "Semaphores"; }
+ TAG(TH3) { out << "Semaphores"; }
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
@@ -280,7 +280,7 @@ struct TKesusTablet::THtmlRenderer {
}
HTML(out) {
- H2() { out << "Kesus semaphore " << EscapeC(name); }
+ TAG(TH2) { out << "Kesus semaphore " << EscapeC(name); }
PRE() {
out << "Data: " << semaphore->Data.Quote() << "\n";
@@ -289,7 +289,7 @@ struct TKesusTablet::THtmlRenderer {
out << "Ephemeral: " << (semaphore->Ephemeral ? "true" : "false") << "\n";
}
- H3() { out << "Owner sessions"; }
+ TAG(TH3) { out << "Owner sessions"; }
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
@@ -310,7 +310,7 @@ struct TKesusTablet::THtmlRenderer {
}
}
- H3() { out << "Waiting sessions"; }
+ TAG(TH3) { out << "Waiting sessions"; }
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
@@ -376,7 +376,7 @@ struct TKesusTablet::THtmlRenderer {
void RenderQuoterResources(IOutputStream& out) {
HTML(out) {
- H3() { out << "Quoter resources"; }
+ TAG(TH3) { out << "Quoter resources"; }
std::vector<const TQuoterResourceTree*> resources;
resources.reserve(Self->QuoterResources.GetAllResources().size());
@@ -391,7 +391,7 @@ struct TKesusTablet::THtmlRenderer {
void RenderQuoterResourceDetails(IOutputStream& out, const TString& path) {
if (const TQuoterResourceTree* resource = Self->QuoterResources.FindPath(path)) {
HTML(out) {
- H2() { out << "Kesus quoter resource " << EscapeC(path); }
+ TAG(TH2) { out << "Kesus quoter resource " << EscapeC(path); }
PRE() {
if (resource->GetParent()) {
@@ -403,12 +403,12 @@ struct TKesusTablet::THtmlRenderer {
out << "Props:" << props << "\n";
}
- H3() { out << "Children resources"; }
+ TAG(TH3) { out << "Children resources"; }
std::vector<const TQuoterResourceTree*> resources(resource->GetChildren().begin(), resource->GetChildren().end());
RenderQuoterResourceTable(out, resources);
- H3() { out << "Sessions"; }
+ TAG(TH3) { out << "Sessions"; }
RenderQuoterResourceSessions(out, resource);
}
} else {
@@ -465,7 +465,7 @@ bool TKesusTablet::OnRenderAppHtmlPage(NMon::TEvRemoteHttpInfo::TPtr ev, const T
} else if (params.Has("quoter_resource")) {
renderer.RenderQuoterResourceDetails(out, params.Get("quoter_resource"));
} else {
- H2() { out << "Kesus " << EscapeC(KesusPath); }
+ TAG(TH2) { out << "Kesus " << EscapeC(KesusPath); }
renderer.RenderProxyList(out);
renderer.RenderSessionList(out);
renderer.RenderSemaphoreList(out);
diff --git a/ydb/core/kesus/tablet/tablet_ut.cpp b/ydb/core/kesus/tablet/tablet_ut.cpp
index 1cf1a80ca8..d73b3c3805 100644
--- a/ydb/core/kesus/tablet/tablet_ut.cpp
+++ b/ydb/core/kesus/tablet/tablet_ut.cpp
@@ -1279,6 +1279,41 @@ Y_UNIT_TEST_SUITE(TKesusTest) {
}
}
+ Y_UNIT_TEST(TestSemaphoreReleaseReacquire) {
+ TTestContext ctx;
+ ctx.Setup();
+ auto proxy = ctx.Runtime->AllocateEdgeActor();
+ ctx.MustRegisterProxy(proxy, 1);
+ ctx.MustAttachSession(proxy, 1, 0, 30000);
+ ctx.MustAttachSession(proxy, 1, 0, 30000);
+
+ for (int i = 0; i < 10; ++i) {
+ // Create and destroy semaphore several times to increment next ids
+ ctx.CreateSemaphore("Sem1", 1);
+ ctx.DeleteSemaphore("Sem1");
+ }
+
+ ctx.CreateSemaphore("Sem1", 1);
+
+ // The first session owns semaphore immediately
+ ctx.SendAcquireSemaphore(111, proxy, 1, 1, "Sem1", 1);
+ ctx.ExpectAcquireSemaphoreResult(111, proxy, 1);
+
+ // The second session tries to acquire semaphore, but releases immediately
+ ctx.SendAcquireSemaphore(222, proxy, 1, 2, "Sem1", 1, 10000);
+ ctx.ExpectAcquireSemaphorePending(222, proxy, 1);
+ ctx.MustReleaseSemaphore(333, proxy, 1, 2, "Sem1");
+ ctx.ExpectAcquireSemaphoreResult(222, proxy, 1, Ydb::StatusIds::ABORTED);
+
+ // The second session now tries to reacquire semaphore
+ ctx.SendAcquireSemaphore(444, proxy, 1, 2, "Sem1", 1, 10000);
+ ctx.ExpectAcquireSemaphorePending(444, proxy, 1);
+
+ // When the first session releases semaphore it must be acquired by the second session
+ ctx.MustReleaseSemaphore(555, proxy, 1, 1, "Sem1");
+ ctx.ExpectAcquireSemaphoreResult(444, proxy, 1);
+ }
+
Y_UNIT_TEST(TestSemaphoreSessionFailures) {
TTestContext ctx;
ctx.Setup();
diff --git a/ydb/core/kesus/tablet/tx_semaphore_release.cpp b/ydb/core/kesus/tablet/tx_semaphore_release.cpp
index 326a331861..ac166a3344 100644
--- a/ydb/core/kesus/tablet/tx_semaphore_release.cpp
+++ b/ydb/core/kesus/tablet/tx_semaphore_release.cpp
@@ -78,7 +78,7 @@ struct TKesusTablet::TTxSemaphoreRelease : public TTxBase {
});
ReplyOk();
Self->DoDeleteSessionSemaphore(db, semaphore, waiter, Events);
- session->WaitingSemaphores.erase(sessionId);
+ session->WaitingSemaphores.erase(semaphoreId);
return true;
}
}
diff --git a/ydb/core/kesus/tablet/ut/CMakeLists.txt b/ydb/core/kesus/tablet/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kesus/tablet/ut/CMakeLists.txt
+++ b/ydb/core/kesus/tablet/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/keyvalue/CMakeLists.txt b/ydb/core/keyvalue/CMakeLists.txt
index 88daeafbec..5a7fc1a54a 100644
--- a/ydb/core/keyvalue/CMakeLists.txt
+++ b/ydb/core/keyvalue/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
+add_subdirectory(ut)
add_library(ydb-core-keyvalue)
target_link_libraries(ydb-core-keyvalue PUBLIC
diff --git a/ydb/core/keyvalue/keyvalue_collector.cpp b/ydb/core/keyvalue/keyvalue_collector.cpp
index 69b1e6fa1c..25dc777d24 100644
--- a/ydb/core/keyvalue/keyvalue_collector.cpp
+++ b/ydb/core/keyvalue/keyvalue_collector.cpp
@@ -3,6 +3,7 @@
#include <ydb/core/base/counters.h>
#include <ydb/core/blobstorage/dsproxy/blobstorage_backoff.h>
+#include <ydb/core/util/stlog.h>
#include <library/cpp/actors/core/actor_bootstrapped.h>
namespace NKikimr {
@@ -30,12 +31,6 @@ class TKeyValueCollector : public TActorBootstrapped<TKeyValueCollector> {
// [channel][groupId]
TVector<TMap<ui32, TGroupCollector>> CollectorForGroupForChannel;
ui32 EndChannel = 0;
- bool IsMultiStepMode = false;
- TMap<ui32, TGroupCollector>::iterator CurrentChannelGroup;
-
- // For Keep
- ui32 ChannelIdxInVector = 0;
- TMaybe<THelpers::TGenerationStep> MinGenStepInCircle;
// For DoNotKeep
TVector<TLogoBlobID> CollectedDoNotKeep;
@@ -56,7 +51,6 @@ public:
, BackoffTimer(CollectorErrorInitialBackoffMs, CollectorErrorMaxBackoffMs)
, CollectorErrors(0)
, IsSpringCleanup(isSpringCleanup)
- , IsMultiStepMode(CollectOperation->Keep.size() + CollectOperation->DoNotKeep.size() > MaxCollectGarbageFlagsPerMessage)
{
Y_VERIFY(CollectOperation.Get());
}
@@ -65,11 +59,11 @@ public:
return EndChannel - 1 - channelIdx;
}
- ui32 GetChannelIdxFromVecIdx(ui32 deqIdx) {
+ ui32 GetChannelIdFromVecIdx(ui32 deqIdx) {
return EndChannel - 1 - deqIdx;
}
- void Bootstrap(const TActorContext &ctx) {
+ void Bootstrap() {
EndChannel = TabletInfo->Channels.size();
CollectorForGroupForChannel.resize(EndChannel - BLOB_CHANNEL);
for (ui32 channelIdx = BLOB_CHANNEL; channelIdx < EndChannel; ++channelIdx) {
@@ -87,9 +81,9 @@ public:
}
}
- if (IsMultiStepMode) {
- CollectedDoNotKeep.reserve(MaxCollectGarbageFlagsPerMessage);
- }
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC04, "Start KeyValueCollector",
+ (TabletId, TabletInfo->TabletID),
+ (Keep, CollectOperation->Keep.size()), (DoNotKeep, CollectOperation->DoNotKeep.size()));
Sort(CollectOperation->Keep);
for (const auto &blob: CollectOperation->Keep) {
@@ -104,143 +98,138 @@ public:
blob.ToString().c_str());
CollectorForGroupForChannel[GetVecIdxFromChannelIdx(blob.Channel())][groupId].DoNotKeep.push_back(blob);
}
+ ui64 maxDoNotKeepSizeInGroupChannel = 0;
+ for (auto &groups : CollectorForGroupForChannel) {
+ for (auto &[groupId, collector] : groups) {
+ maxDoNotKeepSizeInGroupChannel = Max(maxDoNotKeepSizeInGroupChannel, collector.DoNotKeep.size());
+ }
+ }
+ CollectedDoNotKeep.reserve(Min(maxDoNotKeepSizeInGroupChannel, MaxCollectGarbageFlagsPerMessage));
- MinGenStepInCircle = THelpers::TGenerationStep(Max<ui32>(), Max<ui32>());
- ChannelIdxInVector = CollectorForGroupForChannel.size() - 1;
- CurrentChannelGroup = CollectorForGroupForChannel.back().begin();
- SendTheRequest(ctx);
+ SendTheRequest();
Become(&TThis::StateWait);
}
- bool ChangeGroup(const TActorContext &ctx) {
- if (CollectorForGroupForChannel.back().empty()) {
- while (CollectorForGroupForChannel.size() && CollectorForGroupForChannel.back().empty()) {
- CollectorForGroupForChannel.pop_back();
- }
- if (CollectorForGroupForChannel.empty()) {
- ctx.Send(KeyValueActorId, new TEvKeyValue::TEvCompleteGC());
- Die(ctx);
- return true;
- }
- ChannelIdxInVector = CollectorForGroupForChannel.size() - 1;
- CurrentChannelGroup = CollectorForGroupForChannel[ChannelIdxInVector].begin();
- } else {
- do {
- if (ChannelIdxInVector) {
- ChannelIdxInVector--;
- } else {
- ChannelIdxInVector = CollectorForGroupForChannel.size() - 1;
- CurrentChannelGroup = CollectorForGroupForChannel[ChannelIdxInVector].begin();
- SendPartitialCompleteGC(true);
- return true;
- }
- } while (CollectorForGroupForChannel[ChannelIdxInVector].empty());
- CurrentChannelGroup = CollectorForGroupForChannel[ChannelIdxInVector].begin();
- }
- return false;
+ ui32 GetCurretChannelId() {
+ return GetChannelIdFromVecIdx(CollectorForGroupForChannel.size() - 1);
}
- void Handle(TEvBlobStorage::TEvCollectGarbageResult::TPtr &ev, const TActorContext &ctx) {
-
+ void Handle(TEvBlobStorage::TEvCollectGarbageResult::TPtr &ev) {
NKikimrProto::EReplyStatus status = ev->Get()->Status;
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC11, "Receive TEvCollectGarbageResult",
+ (TabletId, TabletInfo->TabletID),
+ (Status, status));
+
+ auto collectorsOfCurrentChannel = CollectorForGroupForChannel.rbegin();
+ if (collectorsOfCurrentChannel == CollectorForGroupForChannel.rend()) {
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC17,
+ "Collectors must be exist when we recieve TEvCollectGarbageResult",
+ (TabletId, TabletInfo->TabletID), (CollectorErrors, CollectorErrors));
+ HandleErrorAndDie();
+ return;
+ }
+
+ auto currentCollectorIterator = collectorsOfCurrentChannel->begin();
+ if (currentCollectorIterator == collectorsOfCurrentChannel->end()) {
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC17,
+ "Collectors must be exist in the current channel when we recieve TEvCollectGarbageResult",
+ (TabletId, TabletInfo->TabletID), (Channel, GetCurretChannelId()), (CollectorErrors, CollectorErrors));
+ HandleErrorAndDie();
+ return;
+ }
if (status == NKikimrProto::OK) {
// Success
-
bool isLastRequestInCollector = false;
{
- TGroupCollector &collector = CurrentChannelGroup->second;
+ TGroupCollector &collector = currentCollectorIterator->second;
isLastRequestInCollector = (collector.Step == collector.Keep.size() + collector.DoNotKeep.size());
}
if (isLastRequestInCollector) {
- CurrentChannelGroup = CollectorForGroupForChannel[ChannelIdxInVector].erase(CurrentChannelGroup);
- } else {
- CurrentChannelGroup++;
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC08, "Last group was empty, it's erased",
+ (TabletId, TabletInfo->TabletID), (GroupId, currentCollectorIterator->first), (Channel, GetCurretChannelId()));
+ currentCollectorIterator = collectorsOfCurrentChannel->erase(currentCollectorIterator);
}
- if (CurrentChannelGroup == CollectorForGroupForChannel[ChannelIdxInVector].end()) {
- if (ChangeGroup(ctx)) {
- return;
- }
+ if (currentCollectorIterator == collectorsOfCurrentChannel->end()) {
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC08, "Last channel was empty, it's erased",
+ (TabletId, TabletInfo->TabletID), (Channel, GetCurretChannelId()));
+ CollectorForGroupForChannel.pop_back();
}
- SendTheRequest(ctx);
+ if (CollectedDoNotKeep.size()) {
+ SendPartialCompleteGC();
+ return;
+ }
+ if (CollectorForGroupForChannel.empty()) {
+ SendCompleteGCAndDie();
+ return;
+ }
+ SendTheRequest();
return;
}
- ui32 channelIdx = GetChannelIdxFromVecIdx(ChannelIdxInVector);
- ui32 groupId = CurrentChannelGroup->first;
+ ui32 channelId = GetCurretChannelId();
+ ui32 groupId = currentCollectorIterator->first;
CollectorErrors++;
if (status == NKikimrProto::RACE || status == NKikimrProto::BLOCKED || status == NKikimrProto::NO_GROUP || CollectorErrors > CollectorMaxErrors) {
- LOG_ERROR_S(ctx, NKikimrServices::KEYVALUE, "Tablet# " << TabletInfo->TabletID
- << " Collector got Status# " << NKikimrProto::EReplyStatus_Name(status)
- << " from Group# " << groupId << " Channel# " << channelIdx
- << " CollectorErrors# " << CollectorErrors
- << " Marker# KVC01");
- // Die
- ctx.Send(KeyValueActorId, new TEvents::TEvPoisonPill());
- Die(ctx);
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC01, "Collector got not OK status",
+ (TabletId, TabletInfo->TabletID), (GroupId, groupId), (Channel, channelId), (Status, status),
+ (CollectorErrors, CollectorErrors), (CollectorMaxErrors, CollectorMaxErrors));
+ HandleErrorAndDie();
return;
}
// Rertry
ui64 backoffMs = BackoffTimer.NextBackoffMs();
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC02, "Collector got not OK status, retry",
+ (TabletId, TabletInfo->TabletID), (GroupId, groupId), (Channel, channelId),
+ (Status, status), (BackoffMs, backoffMs), (RetryingImmediately, (backoffMs ? "no" : "yes")));
if (backoffMs) {
const TDuration &timeout = TDuration::MilliSeconds(backoffMs);
- ctx.Schedule(timeout, new TEvents::TEvWakeup());
+ TActivationContext::Schedule(timeout, new IEventHandle(TEvents::TEvWakeup::EventType, 0, SelfId(), SelfId(), nullptr, 0));
} else {
- LOG_DEBUG_S(ctx, NKikimrServices::KEYVALUE, "Tablet# " << TabletInfo->TabletID
- << " Collector got Status# " << NKikimrProto::EReplyStatus_Name(status)
- << " from Group# " << groupId << " Channel# " << channelIdx
- << " Retrying immediately. Marker# KVC02");
- SendTheRequest(ctx);
+ SendTheRequest();
}
}
- void Handle(TEvents::TEvWakeup::TPtr &ev, const TActorContext &ctx) {
- Y_UNUSED(ev);
- ui32 channelIdx = GetChannelIdxFromVecIdx(ChannelIdxInVector);
- ui32 groupId = CurrentChannelGroup->first;
- LOG_DEBUG_S(ctx, NKikimrServices::KEYVALUE, "Tablet# " << TabletInfo->TabletID
- << " Collector retrying with"
- << " Group# " << groupId << " Channel# " << channelIdx
- << " Marker# KVC03");
- SendTheRequest(ctx);
- return;
+ void SendPartialCompleteGC() {
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC14, "Collector send PartialCompleteGC",
+ (TabletId, TabletInfo->TabletID),
+ (FirstDoNotKeep, (CollectedDoNotKeep.size() ? CollectedDoNotKeep[0].ToString() : "none")),
+ (CollectedDoNotKeepSize, CollectedDoNotKeep.size()));
+ Send(KeyValueActorId, new TEvKeyValue::TEvPartialCompleteGC(std::move(CollectedDoNotKeep)));
}
- void Handle(TEvents::TEvPoisonPill::TPtr &ev, const TActorContext &ctx) {
- Y_UNUSED(ev);
- Die(ctx);
- return;
- }
-
- void Handle(TEvKeyValue::TEvContinueGC::TPtr &ev) {
- LOG_DEBUG_S(TActivationContext::AsActorContext(), NKikimrServices::KEYVALUE, "Tablet# " << TabletInfo->TabletID
- << " Collector continue GC Marker# KVC04");
- MinGenStepInCircle = {};
- CollectedDoNotKeep = std::move(ev->Get()->Buffer);
- CollectedDoNotKeep.clear();
- SendTheRequest(TActivationContext::AsActorContext());
+ void SendCompleteGCAndDie() {
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC19, "Collector send CompleteGC",
+ (TabletId, TabletInfo->TabletID));
+ Send(KeyValueActorId, new TEvKeyValue::TEvCompleteGC());
+ PassAway();
}
- void SendPartitialCompleteGC(bool endCircle) {
- LOG_DEBUG_S(TActivationContext::AsActorContext(), NKikimrServices::KEYVALUE, "Tablet# " << TabletInfo->TabletID
- << "end of round# " << (endCircle ? "yes" : "no")
- << " Collector send PartitialCompleteGC Marker# KVC05");
- auto ev = std::make_unique<TEvKeyValue::TEvPartitialCompleteGC>();
- if (endCircle && MinGenStepInCircle) {
- ev->CollectedGenerationStep = std::move(MinGenStepInCircle);
+ void SendTheRequest() {
+ auto collectorsOfCurrentChannel = CollectorForGroupForChannel.rbegin();
+ if (collectorsOfCurrentChannel == CollectorForGroupForChannel.rend()) {
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC30,
+ "Collectors must be exist when we try to send the request",
+ (TabletId, TabletInfo->TabletID), (CollectorErrors, CollectorErrors));
+ HandleErrorAndDie();
+ return;
}
- ev->CollectedDoNotKeep = std::move(CollectedDoNotKeep);
- TActivationContext::Send(new IEventHandle(KeyValueActorId, SelfId(), ev.release()));
- }
+ auto currentCollectorIterator = collectorsOfCurrentChannel->begin();
+ if (currentCollectorIterator == collectorsOfCurrentChannel->end()) {
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC31,
+ "Collectors must be exist in the current channel we try to send the request",
+ (TabletId, TabletInfo->TabletID), (Channel, GetCurretChannelId()), (CollectorErrors, CollectorErrors));
+ HandleErrorAndDie();
+ return;
+ }
- void SendTheRequest(const TActorContext &ctx) {
THolder<TVector<TLogoBlobID>> keep;
THolder<TVector<TLogoBlobID>> doNotKeep;
- TGroupCollector &collector = CurrentChannelGroup->second;
+ TGroupCollector &collector = currentCollectorIterator->second;
ui32 doNotKeepSize = collector.DoNotKeep.size();
if (collector.Step < doNotKeepSize) {
@@ -249,11 +238,6 @@ public:
doNotKeepSize = 0;
}
- if (doNotKeepSize && CollectedDoNotKeep.size() + doNotKeepSize > MaxCollectGarbageFlagsPerMessage) {
- SendPartitialCompleteGC(false);
- return;
- }
-
if (doNotKeepSize) {
doNotKeepSize = Min(doNotKeepSize, (ui32)MaxCollectGarbageFlagsPerMessage);
doNotKeep.Reset(new TVector<TLogoBlobID>(doNotKeepSize));
@@ -286,31 +270,83 @@ public:
(*keep)[idx] = *it;
}
collector.Step += idx;
- if (collectedGenStep && MinGenStepInCircle) {
- MinGenStepInCircle = Min(*MinGenStepInCircle, *collectedGenStep);
- } else if (collectedGenStep) {
- MinGenStepInCircle = collectedGenStep;
- }
}
bool isLast = (collector.Keep.size() + collector.DoNotKeep.size() == collector.Step);
ui32 collectGeneration = CollectOperation->Header.CollectGeneration;
ui32 collectStep = CollectOperation->Header.CollectStep;
- ui32 channelIdx = GetChannelIdxFromVecIdx(CollectorForGroupForChannel.size() - 1);
- ui32 groupId = CurrentChannelGroup->first;
- SendToBSProxy(ctx, groupId,
+ ui32 channelIdx = GetChannelIdFromVecIdx(CollectorForGroupForChannel.size() - 1);
+ ui32 groupId = currentCollectorIterator->first;
+
+
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC16, "Send GC request",
+ (TabletId, TabletInfo->TabletID), (CollectGeneration, collectGeneration),
+ (CollectStep, collectStep), (ChannelIdx, channelIdx), (GroupId, groupId),
+ (KeepSize, keepSize), (DoNotKeepSize, doNotKeepSize), (IsLast, isLast));
+ SendToBSProxy(TActivationContext::AsActorContext(), groupId,
new TEvBlobStorage::TEvCollectGarbage(TabletInfo->TabletID, RecordGeneration, PerGenerationCounter,
channelIdx, isLast, collectGeneration, collectStep,
keep.Release(), doNotKeep.Release(), TInstant::Max(), true), (ui64)TKeyValueState::ECollectCookie::Soft);
}
- STFUNC(StateWait) {
+ void HandleContinueGC(TEvKeyValue::TEvContinueGC::TPtr &ev) {
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC13, "Collector continue GC",
+ (TabletId, TabletInfo->TabletID));
+ if (CollectorForGroupForChannel.empty()) {
+ SendCompleteGCAndDie();
+ return;
+ }
+ CollectedDoNotKeep = std::move(ev->Get()->Buffer);
+ CollectedDoNotKeep.clear();
+ SendTheRequest();
+ }
+
+ void HandleWakeUp() {
+ auto collectorsOfCurrentChannel = CollectorForGroupForChannel.rbegin();
+ if (collectorsOfCurrentChannel == CollectorForGroupForChannel.rend()) {
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC17,
+ "Collectors must be exist when we try to resend the request",
+ (TabletId, TabletInfo->TabletID), (CollectorErrors, CollectorErrors));
+ HandleErrorAndDie();
+ return;
+ }
+
+ auto currentCollectorIterator = collectorsOfCurrentChannel->begin();
+ if (currentCollectorIterator == collectorsOfCurrentChannel->end()) {
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC17,
+ "Collectors must be exist in the current channel we try to resend the request",
+ (TabletId, TabletInfo->TabletID), (Channel, GetCurretChannelId()), (CollectorErrors, CollectorErrors));
+ HandleErrorAndDie();
+ return;
+ }
+
+ ui32 channelId = GetCurretChannelId();
+ ui32 groupId = currentCollectorIterator->first;
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC03, "Collector retrying",
+ (TabletId, TabletInfo->TabletID), (GroupId, groupId), (Channel, channelId));
+ SendTheRequest();
+ }
+
+ void HandlePoisonPill() {
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC12, "Poisoned",
+ (TabletId, TabletInfo->TabletID));
+ PassAway();
+ }
+
+ void HandleErrorAndDie() {
+ STLOG(NLog::PRI_ERROR, NKikimrServices::KEYVALUE_GC, KVC18, "Garbage Collector catch the error, send PoisonPill to the tablet",
+ (TabletId, TabletInfo->TabletID));
+ Send(KeyValueActorId, new TEvents::TEvPoisonPill());
+ PassAway();
+ }
+
+ STATEFN(StateWait) {
switch (ev->GetTypeRewrite()) {
- HFunc(TEvBlobStorage::TEvCollectGarbageResult, Handle);
- hFunc(TEvKeyValue::TEvContinueGC, Handle);
- HFunc(TEvents::TEvWakeup, Handle);
- HFunc(TEvents::TEvPoisonPill, Handle);
+ hFunc(TEvBlobStorage::TEvCollectGarbageResult, Handle);
+ hFunc(TEvKeyValue::TEvContinueGC, HandleContinueGC);
+ cFunc(TEvents::TEvWakeup::EventType, HandleWakeUp);
+ cFunc(TEvents::TEvPoisonPill::EventType, HandlePoisonPill);
default:
break;
}
@@ -318,8 +354,8 @@ public:
};
IActor* CreateKeyValueCollector(const TActorId &keyValueActorId, TIntrusivePtr<TCollectOperation> &collectOperation,
- const TTabletStorageInfo *tabletInfo, ui32 recordGeneration, ui32 perGenerationCounter, bool isSpringCleanup) {
- return new TKeyValueCollector(keyValueActorId, collectOperation, tabletInfo, recordGeneration,
+ const TTabletStorageInfo *TabletInfo, ui32 recordGeneration, ui32 perGenerationCounter, bool isSpringCleanup) {
+ return new TKeyValueCollector(keyValueActorId, collectOperation, TabletInfo, recordGeneration,
perGenerationCounter, isSpringCleanup);
}
diff --git a/ydb/core/keyvalue/keyvalue_collector_ut.cpp b/ydb/core/keyvalue/keyvalue_collector_ut.cpp
index f414deca5c..835f1be056 100644
--- a/ydb/core/keyvalue/keyvalue_collector_ut.cpp
+++ b/ydb/core/keyvalue/keyvalue_collector_ut.cpp
@@ -217,6 +217,13 @@ Y_UNIT_TEST(TestKeyValueCollectorMultiple) {
context.Send(new TEvBlobStorage::TEvCollectGarbageResult(NKikimrProto::OK, collect->TabletId,
collect->RecordGeneration, collect->PerGenerationCounter, collect->Channel));
+
+ if (collect && collect->DoNotKeep && collect->DoNotKeep->size()) {
+ auto complete = context.GrabEvent<TEvKeyValue::TEvPartialCompleteGC>(handle);
+ complete->CollectedDoNotKeep.clear();
+ auto cont = std::make_unique<TEvKeyValue::TEvContinueGC>(std::move(complete->CollectedDoNotKeep));
+ context.Send(cont.release());
+ }
}
UNIT_ASSERT(erased == 8);
@@ -232,32 +239,43 @@ Y_UNIT_TEST(TestKeyValueCollectorMany) {
TVector<TLogoBlobID> keep;
TVector<TLogoBlobID> doNotKeep;
- doNotKeep.reserve(MaxCollectGarbageFlagsPerMessage + 1);
- for (ui32 idx = 1; idx <= MaxCollectGarbageFlagsPerMessage + 1; ++idx) {
+ doNotKeep.reserve(MaxCollectGarbageFlagsPerMessage * 2);
+ doNotKeep.reserve(MaxCollectGarbageFlagsPerMessage * 2);
+ for (ui32 idx = 0; idx < MaxCollectGarbageFlagsPerMessage * 2; ++idx) {
doNotKeep.emplace_back(0x10010000001000Bull, idx, 58949, NKeyValue::BLOB_CHANNEL, 1209816, 10);
keep.emplace_back(0x10010000001000Bull, idx, 58949, NKeyValue::BLOB_CHANNEL, 1209816, 10);
-
}
TIntrusivePtr<NKeyValue::TCollectOperation> operation(new NKeyValue::TCollectOperation(100, 100, std::move(keep), std::move(doNotKeep)));
context.SetActor(CreateKeyValueCollector(
context.GetTabletActorId(), operation, context.GetTabletInfo().Get(), 200, 200, true));
- for (ui32 idx = 0; idx < 7; ++idx) {
+ auto handleGC = [&](bool withContinueGC, ui32 keepSize, ui32 doNotKeepSize) {
TAutoPtr<IEventHandle> handle;
auto collect = context.GrabEvent<TEvBlobStorage::TEvCollectGarbage>(handle);
UNIT_ASSERT(collect);
-
+ UNIT_ASSERT_VALUES_EQUAL((collect->Keep ? collect->Keep->size() : 0), keepSize);
+ UNIT_ASSERT_VALUES_EQUAL((collect->DoNotKeep ? collect->DoNotKeep->size() : 0), doNotKeepSize);
context.Send(new TEvBlobStorage::TEvCollectGarbageResult(NKikimrProto::OK, collect->TabletId,
collect->RecordGeneration, collect->PerGenerationCounter, collect->Channel));
- if (idx == 1 || idx == 5) {
- auto complete = context.GrabEvent<TEvKeyValue::TEvPartitialCompleteGC>(handle);
+ if (withContinueGC) {
+ auto complete = context.GrabEvent<TEvKeyValue::TEvPartialCompleteGC>(handle);
complete->CollectedDoNotKeep.clear();
auto cont = std::make_unique<TEvKeyValue::TEvContinueGC>(std::move(complete->CollectedDoNotKeep));
context.Send(cont.release());
}
- }
+ };
+
+ handleGC(true, 20, 20); // group 0
+ handleGC(true, 10, 10); // group 1
+ handleGC(true, 0, 10'000); // group 2 DoNotKeep 30..10029
+ handleGC(true, 30, 9'970); // group 2 DoNotKeep 10030..19999 Keep 30.59
+ handleGC(false, 10'000, 0); // group 2 Keep 60..10059
+ handleGC(false, 9'940, 0); // group 2 Keep 10060..20000
+ handleGC(false, 0, 0); // group 3
+ handleGC(false, 0, 0); // group 4
+ handleGC(false, 0, 0); // group 5
TAutoPtr<IEventHandle> handle;
auto eraseCollect = context.GrabEvent<TEvKeyValue::TEvCompleteGC>(handle);
diff --git a/ydb/core/keyvalue/keyvalue_events.h b/ydb/core/keyvalue/keyvalue_events.h
index 2b9a4f11a0..e504291f51 100644
--- a/ydb/core/keyvalue/keyvalue_events.h
+++ b/ydb/core/keyvalue/keyvalue_events.h
@@ -25,7 +25,7 @@ struct TEvKeyValue {
EvReportWriteLatency,
EvUpdateWeights,
EvCompleteGC,
- EvPartitialCompleteGC,
+ EvPartialCompleteGC,
EvContinueGC,
EvRead = EvRequest + 16,
@@ -202,11 +202,14 @@ struct TEvKeyValue {
TEvCompleteGC() { }
};
- struct TEvPartitialCompleteGC : public TEventLocal<TEvPartitialCompleteGC, EvPartitialCompleteGC> {
- TMaybe<NKeyValue::THelpers::TGenerationStep> CollectedGenerationStep;
+ struct TEvPartialCompleteGC : public TEventLocal<TEvPartialCompleteGC, EvPartialCompleteGC> {
TVector<TLogoBlobID> CollectedDoNotKeep;
- TEvPartitialCompleteGC() { }
+ TEvPartialCompleteGC() { }
+
+ TEvPartialCompleteGC(TVector<TLogoBlobID> &&doNotKeeps)
+ : CollectedDoNotKeep(std::move(doNotKeeps))
+ { }
};
struct TEvContinueGC : public TEventLocal<TEvContinueGC, EvContinueGC> {
diff --git a/ydb/core/keyvalue/keyvalue_flat_impl.h b/ydb/core/keyvalue/keyvalue_flat_impl.h
index 788c78fac9..ae2ce8331c 100644
--- a/ydb/core/keyvalue/keyvalue_flat_impl.h
+++ b/ydb/core/keyvalue/keyvalue_flat_impl.h
@@ -246,7 +246,7 @@ protected:
KV_SIMPLE_TX(EraseCollect);
KV_SIMPLE_TX(RegisterInitialGCCompletion);
KV_SIMPLE_TX(CompleteGC);
- KV_SIMPLE_TX(PartitialCompleteGC);
+ KV_SIMPLE_TX(PartialCompleteGC);
TKeyValueState State;
TDeque<TAutoPtr<IEventHandle>> InitialEventsQueue;
@@ -319,10 +319,11 @@ protected:
Execute(new TTxCompleteGC(this), ctx);
}
- void Handle(TEvKeyValue::TEvPartitialCompleteGC::TPtr &ev, const TActorContext &ctx) {
+ void Handle(TEvKeyValue::TEvPartialCompleteGC::TPtr &ev, const TActorContext &ctx) {
LOG_DEBUG_S(ctx, NKikimrServices::KEYVALUE, "KeyValue# " << TabletID()
<< " Handle TEvPartitialCompleteGC " << ev->Get()->ToString());
- Execute(new TTxPartitialCompleteGC(this), ctx);
+ State.OnEvPartialCompleteGC(ev->Get());
+ Execute(new TTxPartialCompleteGC(this), ctx);
}
void Handle(TEvKeyValue::TEvCollect::TPtr &ev, const TActorContext &ctx) {
@@ -516,7 +517,7 @@ public:
HFunc(TEvKeyValue::TEvEraseCollect, Handle);
HFunc(TEvKeyValue::TEvCompleteGC, Handle);
- HFunc(TEvKeyValue::TEvPartitialCompleteGC, Handle);
+ HFunc(TEvKeyValue::TEvPartialCompleteGC, Handle);
HFunc(TEvKeyValue::TEvCollect, Handle);
HFunc(TEvKeyValue::TEvStoreCollect, Handle);
HFunc(TEvKeyValue::TEvRequest, Handle);
diff --git a/ydb/core/keyvalue/keyvalue_state.cpp b/ydb/core/keyvalue/keyvalue_state.cpp
index 997fd31d1b..a203995750 100644
--- a/ydb/core/keyvalue/keyvalue_state.cpp
+++ b/ydb/core/keyvalue/keyvalue_state.cpp
@@ -1495,7 +1495,7 @@ bool TKeyValueState::CheckCmdRenames(THolder<TIntermediate>& intermediate, const
for (const auto& cmd : intermediate->Renames) {
const auto &[ok, msg] = CheckCmd(cmd, keys, index++);
if (!ok) {
- ReplyError(ctx, msg, NMsgBusProxy::MSTATUS_ERROR, intermediate, info);
+ ReplyError(ctx, msg, NMsgBusProxy::MSTATUS_ERROR, NKikimrKeyValue::Statuses::RSTATUS_NOT_FOUND, intermediate, info);
return false;
}
}
@@ -1509,7 +1509,7 @@ bool TKeyValueState::CheckCmdConcats(THolder<TIntermediate>& intermediate, const
for (const auto& cmd : intermediate->Concats) {
const auto &[ok, msg] = CheckCmd(cmd, keys, index++);
if (!ok) {
- ReplyError(ctx, msg, NMsgBusProxy::MSTATUS_ERROR, intermediate, info);
+ ReplyError(ctx, msg, NMsgBusProxy::MSTATUS_ERROR, NKikimrKeyValue::Statuses::RSTATUS_NOT_FOUND, intermediate, info);
return false;
}
}
@@ -1563,8 +1563,8 @@ bool TKeyValueState::CheckCmds(THolder<TIntermediate>& intermediate, const TActo
for (const auto& cmd : intermediate->Commands) {
const auto &[ok, msg] = std::visit(visitor, cmd);
- if (!ok) {
- ReplyError(ctx, msg, NMsgBusProxy::MSTATUS_ERROR, intermediate, info);
+ if (!ok) {
+ ReplyError(ctx, msg, NMsgBusProxy::MSTATUS_ERROR, NKikimrKeyValue::Statuses::RSTATUS_NOT_FOUND, intermediate, info);
return false;
}
}
@@ -1584,7 +1584,7 @@ void TKeyValueState::ProcessCmds(THolder<TIntermediate> &intermediate, ISimpleDb
str << "KeyValue# " << TabletId
<< " Generation changed during command execution, aborted"
<< " Marker# KV04";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_REJECTED, intermediate, info);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_REJECTED, NKikimrKeyValue::Statuses::RSTATUS_WRONG_LOCK_GENERATION, intermediate, info);
success = false;
}
@@ -1751,7 +1751,7 @@ bool TKeyValueState::CheckDeadline(const TActorContext &ctx, NKikimrClient::TKey
str << " Deadline reached before processing the request!";
str << " DeadlineInstantMs# " << (ui64)kvRequest.GetDeadlineInstantMs();
str << " < Now# " << (ui64)now.MilliSeconds();
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_TIMEOUT, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_TIMEOUT, NKikimrKeyValue::Statuses::RSTATUS_TIMEOUT, intermediate);
return true;
}
}
@@ -1769,7 +1769,7 @@ bool TKeyValueState::CheckGeneration(const TActorContext &ctx, NKikimrClient::TK
str << " Generation mismatch! Requested# " << kvRequest.GetGeneration();
str << " Actual# " << StoredState.GetUserGeneration();
str << " Marker# KV01";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_REJECTED, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_REJECTED, NKikimrKeyValue::Statuses::RSTATUS_WRONG_LOCK_GENERATION, intermediate);
return true;
}
} else {
@@ -1993,7 +1993,7 @@ bool TKeyValueState::PrepareCmdRead(const TActorContext &ctx, NKikimrClient::TKe
TStringStream str;
str << "KeyValue# " << TabletId;
str << " Missing Key in CmdRead(" << (ui32)i << ") Marker# KV02";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
@@ -2083,7 +2083,7 @@ bool TKeyValueState::PrepareCmdReadRange(const TActorContext &ctx, NKikimrClient
TStringStream str;
str << "KeyValue# " << TabletId;
str << " Missing Range in CmdReadRange(" << i << ") Marker# KV03";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
@@ -2115,14 +2115,14 @@ bool TKeyValueState::PrepareCmdRename(const TActorContext &ctx, NKikimrClient::T
TStringStream str;
str << "KeyValue# " << TabletId;
str << " Missing OldKey in CmdRename(" << i << ") Marker# KV06";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
if (!request.HasNewKey()) {
TStringStream str;
str << "KeyValue# " << TabletId;
str << " Missing NewKey in CmdRename(" << i << ") Marker# KV07";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
@@ -2144,7 +2144,7 @@ bool TKeyValueState::PrepareCmdDelete(const TActorContext &ctx, NKikimrClient::T
TStringStream str;
str << "KeyValue# " << TabletId;
str << " Missing Range in CmdDelete(" << i << ") Marker# KV08";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
if (!ConvertRange(request.GetRange(), &interm.Range, ctx, intermediate, "CmdDelete", i)) {
@@ -2160,7 +2160,7 @@ bool TKeyValueState::PrepareCmdDelete(const TActorContext &ctx, NKikimrClient::T
str << "KeyValue# " << TabletId;
str << " Can't delete Range, in CmdDelete(" << i << "), total limit of deletions per request ("
<< DeletesPerRequestLimit << ") reached, Marker# KV32";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
}
@@ -2207,14 +2207,14 @@ bool TKeyValueState::PrepareCmdWrite(const TActorContext &ctx, NKikimrClient::TK
TStringStream str;
str << "KeyValue# " << TabletId;
str << " Missing Key in CmdWrite(" << i << ") Marker# KV09";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
if (!request.HasValue()) {
TStringStream str;
str << "KeyValue# " << TabletId;
str << " Missing Value in CmdWrite(" << i << ") Marker# KV10";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
@@ -2350,7 +2350,7 @@ bool TKeyValueState::PrepareCmdCopyRange(const TActorContext& ctx, NKikimrClient
TStringStream str;
str << "KeyValue# " << TabletId
<< " Missing or empty both PrefixToAdd and PrefixToRemove in CmdCopyRange(" << i << ") Marker# KV11";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
if (!request.HasRange()) {
@@ -2374,7 +2374,7 @@ bool TKeyValueState::PrepareCmdConcat(const TActorContext& ctx, NKikimrClient::T
if (!request.HasOutputKey()) {
TStringStream str;
str << "KeyValue# " << TabletId << " Missing OutputKey in CmdConcat(" << i << ") Marker# KV12";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_INTERNALERROR, NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR, intermediate);
return true;
}
@@ -2561,26 +2561,63 @@ TPrepareResult TKeyValueState::PrepareCommands(NKikimrKeyValue::ExecuteTransacti
return {};
}
+NKikimrKeyValue::Statuses::ReplyStatus ConvertStatus(NMsgBusProxy::EResponseStatus status) {
+ switch (status) {
+ case NMsgBusProxy::MSTATUS_ERROR:
+ return NKikimrKeyValue::Statuses::RSTATUS_ERROR;
+ case NMsgBusProxy::MSTATUS_TIMEOUT:
+ return NKikimrKeyValue::Statuses::RSTATUS_TIMEOUT;
+ case NMsgBusProxy::MSTATUS_REJECTED:
+ return NKikimrKeyValue::Statuses::RSTATUS_WRONG_LOCK_GENERATION;
+ case NMsgBusProxy::MSTATUS_INTERNALERROR:
+ return NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR;
+ default:
+ return NKikimrKeyValue::Statuses::RSTATUS_INTERNAL_ERROR;
+ };
+}
+
void TKeyValueState::ReplyError(const TActorContext &ctx, TString errorDescription,
- NMsgBusProxy::EResponseStatus status, THolder<TIntermediate> &intermediate,
- const TTabletStorageInfo *info) {
+ NMsgBusProxy::EResponseStatus oldStatus, NKikimrKeyValue::Statuses::ReplyStatus newStatus,
+ THolder<TIntermediate> &intermediate, const TTabletStorageInfo *info) {
LOG_INFO_S(ctx, NKikimrServices::KEYVALUE, errorDescription);
Y_VERIFY(!intermediate->IsReplied);
- THolder<TEvKeyValue::TEvResponse> response(new TEvKeyValue::TEvResponse);
- if (intermediate->HasCookie) {
- response->Record.SetCookie(intermediate->Cookie);
- }
- response->Record.SetErrorReason(errorDescription);
- response->Record.SetStatus(status);
- ResourceMetrics->Network.Increment(response->Record.ByteSize());
+ if (intermediate->EvType == TEvKeyValue::TEvRequest::EventType) {
+ THolder<TEvKeyValue::TEvResponse> response(new TEvKeyValue::TEvResponse);
+ if (intermediate->HasCookie) {
+ response->Record.SetCookie(intermediate->Cookie);
+ }
+ response->Record.SetErrorReason(errorDescription);
+ response->Record.SetStatus(oldStatus);
+ ResourceMetrics->Network.Increment(response->Record.ByteSize());
+ intermediate->IsReplied = true;
+ ctx.Send(intermediate->RespondTo, response.Release());
+ }
+ if (intermediate->EvType == TEvKeyValue::TEvExecuteTransaction::EventType) {
+ ReplyError<TEvKeyValue::TEvExecuteTransactionResponse>(ctx, errorDescription,
+ newStatus, intermediate, info);
+ return;
+ }
+ if (intermediate->EvType == TEvKeyValue::TEvGetStorageChannelStatus::EventType) {
+ ReplyError<TEvKeyValue::TEvGetStorageChannelStatusResponse>(ctx, errorDescription,
+ newStatus, intermediate, info);
+ return;
+ }
+ if (intermediate->EvType == TEvKeyValue::TEvRead::EventType) {
+ ReplyError<TEvKeyValue::TEvReadResponse>(ctx, errorDescription,
+ newStatus, intermediate, info);
+ return;
+ }
+ if (intermediate->EvType == TEvKeyValue::TEvReadRange::EventType) {
+ ReplyError<TEvKeyValue::TEvReadRangeResponse>(ctx, errorDescription,
+ newStatus, intermediate, info);
+ return;
+ }
- intermediate->IsReplied = true;
- ctx.Send(intermediate->RespondTo, response.Release());
if (info) {
intermediate->UpdateStat();
OnRequestComplete(intermediate->RequestUid, intermediate->CreatedAtGeneration, intermediate->CreatedAtStep,
- ctx, info, status, intermediate->Stat);
+ ctx, info, oldStatus, intermediate->Stat);
} else { //metrics change report in OnRequestComplete is not done
ResourceMetrics->TryUpdate(ctx);
RequestInputTime.erase(intermediate->RequestUid);
@@ -2722,12 +2759,12 @@ bool TKeyValueState::PrepareExecuteTransactionRequest(const TActorContext &ctx,
intermediate->HasCookie = true;
intermediate->Cookie = request.cookie();
+ intermediate->EvType = TEvKeyValue::TEvExecuteTransaction::EventType;
intermediate->ExecuteTransactionResponse.set_cookie(request.cookie());
intermediate->RequestUid = NextRequestUid;
++NextRequestUid;
RequestInputTime[intermediate->RequestUid] = TAppData::TimeProvider->Now();
- intermediate->EvType = TEvKeyValue::TEvExecuteTransaction::EventType;
if (CheckDeadline(ctx, ev->Get(), intermediate)) {
return false;
@@ -2814,7 +2851,7 @@ bool TKeyValueState::PrepareAcquireLockRequest(const TActorContext &ctx, TEvKeyV
StoredState.SetChannelGeneration(ExecutorGeneration);
StoredState.SetChannelStep(NextLogoBlobStep - 1);
- TRequestType::EType requestType = TRequestType::ReadOnly;
+ TRequestType::EType requestType = TRequestType::ReadOnlyInline;
intermediate.Reset(new TIntermediate(ev->Sender, ctx.SelfID,
StoredState.GetChannelGeneration(), StoredState.GetChannelStep(), requestType));
@@ -3154,7 +3191,7 @@ bool TKeyValueState::ConvertRange(const NKikimrClient::TKeyValueRequest::TKeyRan
str << "KeyValue# " << TabletId
<< " Range.IncludeFrom unexpectedly set without Range.From in " << cmd << "(" << index << ")"
<< " Marker# KV13";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_ERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_ERROR, NKikimrKeyValue::Statuses::RSTATUS_ERROR, intermediate);
return false;
}
@@ -3167,7 +3204,7 @@ bool TKeyValueState::ConvertRange(const NKikimrClient::TKeyValueRequest::TKeyRan
str << "KeyValue# " << TabletId
<< " Range.IncludeTo unexpectedly set without Range.To in " << cmd << "(" << index << ")"
<< " Marker# KV14";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_ERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_ERROR, NKikimrKeyValue::Statuses::RSTATUS_ERROR, intermediate);
return false;
}
@@ -3177,14 +3214,14 @@ bool TKeyValueState::ConvertRange(const NKikimrClient::TKeyValueRequest::TKeyRan
str << "KeyValue# " << TabletId
<< " Range.KeyFrom >= Range.KeyTo in " << cmd << "(" << index << ")"
<< " Marker# KV15";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_ERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_ERROR, NKikimrKeyValue::Statuses::RSTATUS_ERROR, intermediate);
return false;
} else if (to->KeyFrom > to->KeyTo) {
TStringStream str;
str << "KeyValue# " << TabletId
<< " Range.KeyFrom > Range.KeyTo in " << cmd << "(" << index << ")"
<< " Marker# KV16";
- ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_ERROR, intermediate);
+ ReplyError(ctx, str.Str(), NMsgBusProxy::MSTATUS_ERROR, NKikimrKeyValue::Statuses::RSTATUS_ERROR, intermediate);
return false;
}
}
@@ -3225,7 +3262,7 @@ void TKeyValueState::VerifyEqualIndex(const TKeyValueState& state) const {
void TKeyValueState::RenderHTMLPage(IOutputStream &out) const {
HTML(out) {
- H2() {out << "KeyValue Tablet";}
+ TAG(TH2) {out << "KeyValue Tablet";}
UL_CLASS("nav nav-tabs") {
LI_CLASS("active") {
out << "<a href=\"#database\" data-toggle=\"tab\">Database</a>";
diff --git a/ydb/core/keyvalue/keyvalue_state.h b/ydb/core/keyvalue/keyvalue_state.h
index 2c3b0e431f..882bfe5680 100644
--- a/ydb/core/keyvalue/keyvalue_state.h
+++ b/ydb/core/keyvalue/keyvalue_state.h
@@ -290,8 +290,9 @@ protected:
NMetrics::TResourceMetrics* ResourceMetrics;
- TMaybe<NKeyValue::THelpers::TGenerationStep> PartitialCollectedGenerationStep;
- TVector<TLogoBlobID> PartitialCollectedDoNotKeep;
+ TMaybe<NKeyValue::THelpers::TGenerationStep> PartialCollectedGenerationStep;
+ TVector<TLogoBlobID> PartialCollectedDoNotKeep;
+ bool RepeatGCTX = false;
public:
TKeyValueState();
@@ -338,15 +339,15 @@ public:
void RemoveFromTrashBySoftBarrier(ISimpleDb &db, const TActorContext &ctx, const NKeyValue::THelpers::TGenerationStep &genStep);
void UpdateStoredState(ISimpleDb &db, const TActorContext &ctx, const NKeyValue::THelpers::TGenerationStep &genStep);
void UpdateGC(ISimpleDb &db, const TActorContext &ctx, bool updateTrash, bool updateState);
- void UpdateAfterPartitialGC(ISimpleDb &db, const TActorContext &ctx);
+ void UpdateAfterPartialGC(ISimpleDb &db, const TActorContext &ctx);
void StoreCollectExecute(ISimpleDb &db, const TActorContext &ctx);
void StoreCollectComplete(const TActorContext &ctx);
void EraseCollectExecute(ISimpleDb &db, const TActorContext &ctx);
void EraseCollectComplete(const TActorContext &ctx);
void CompleteGCExecute(ISimpleDb &db, const TActorContext &ctx);
void CompleteGCComplete(const TActorContext &ctx);
- void PartitialCompleteGCExecute(ISimpleDb &db, const TActorContext &ctx);
- void PartitialCompleteGCComplete(const TActorContext &ctx);
+ void PartialCompleteGCExecute(ISimpleDb &db, const TActorContext &ctx);
+ void PartialCompleteGCComplete(const TActorContext &ctx);
void SendStoreCollect(const TActorContext &ctx, const THelpers::TGenerationStep &genStep,
TVector<TLogoBlobID> &keep, TVector<TLogoBlobID> &doNotKeep);
void StartGC(const TActorContext &ctx, const THelpers::TGenerationStep &genStep,
@@ -356,7 +357,7 @@ public:
void OnEvCollectDone(ui64 perGenerationCounterStepSize, TActorId collector, const TActorContext &ctx);
void OnEvEraseCollect(const TActorContext &ctx);
void OnEvCompleteGC();
- void OnEvPartitialCompleteGC(TEvKeyValue::TEvPartitialCompleteGC *ev);
+ void OnEvPartialCompleteGC(TEvKeyValue::TEvPartialCompleteGC *ev);
void Reply(THolder<TIntermediate> &intermediate, const TActorContext &ctx, const TTabletStorageInfo *info);
@@ -503,9 +504,9 @@ public:
THolder<TIntermediate> &intermediate)
{
auto &record = kvRequest->Record;
- intermediate->HasGeneration = true;
- intermediate->Generation = record.lock_generation();
if (record.has_lock_generation() && record.lock_generation() != StoredState.GetUserGeneration()) {
+ intermediate->HasGeneration = true;
+ intermediate->Generation = record.lock_generation();
TStringStream str;
str << "KeyValue# " << TabletId;
str << " Generation mismatch! Requested# " << record.lock_generation();
@@ -514,6 +515,8 @@ public:
ReplyError<typename TGrpcRequestWithLockGeneration::TResponse>(ctx, str.Str(),
NKikimrKeyValue::Statuses::RSTATUS_WRONG_LOCK_GENERATION, intermediate);
return true;
+ } else {
+ intermediate->HasGeneration = false;
}
return false;
}
@@ -560,8 +563,8 @@ public:
TPrepareResult InitGetStatusCommand(TIntermediate::TGetStatus &cmd,
NKikimrClient::TKeyValueRequest::EStorageChannel storageChannel, const TTabletStorageInfo *info);
void ReplyError(const TActorContext &ctx, TString errorDescription,
- NMsgBusProxy::EResponseStatus status, THolder<TIntermediate> &intermediate,
- const TTabletStorageInfo *info = nullptr);
+ NMsgBusProxy::EResponseStatus oldStatus, NKikimrKeyValue::Statuses::ReplyStatus newStatus,
+ THolder<TIntermediate> &intermediate, const TTabletStorageInfo *info = nullptr);
template <typename TResponse>
void ReplyError(const TActorContext &ctx, TString errorDescription,
diff --git a/ydb/core/keyvalue/keyvalue_state_collect.cpp b/ydb/core/keyvalue/keyvalue_state_collect.cpp
index 4651509c4c..9ca39f19fd 100644
--- a/ydb/core/keyvalue/keyvalue_state_collect.cpp
+++ b/ydb/core/keyvalue/keyvalue_state_collect.cpp
@@ -1,4 +1,5 @@
#include "keyvalue_state.h"
+#include <ydb/core/util/stlog.h>
namespace NKikimr {
namespace NKeyValue {
@@ -59,6 +60,10 @@ void TKeyValueState::RemoveFromTrashDoNotKeep(ISimpleDb &db, const TActorContext
Y_VERIFY(num == 1);
CountTrashCollected(id.BlobSize());
}
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC24, "Remove from Trash",
+ (TabletId, TabletId),
+ (RemovedCount, collectedDoNotKeep.size()),
+ (TrashCount, Trash.size()));
}
void TKeyValueState::RemoveFromTrashBySoftBarrier(ISimpleDb &db, const TActorContext &ctx,
@@ -69,6 +74,7 @@ void TKeyValueState::RemoveFromTrashBySoftBarrier(ISimpleDb &db, const TActorCon
// remove trash entries that were not marked as 'Keep' before, but which are automatically deleted by this barrier
// to prevent them from being added to 'DoNotKeep' list after
+ ui32 counter = 0;
for (auto it = Trash.begin(); it != Trash.end(); ) {
THelpers::TGenerationStep trashGenStep = THelpers::GenerationStep(*it);
bool afterStoredSoftBarrier = trashGenStep > THelpers::TGenerationStep(storedCollectGeneration, storedCollectStep);
@@ -77,6 +83,10 @@ void TKeyValueState::RemoveFromTrashBySoftBarrier(ISimpleDb &db, const TActorCon
CountTrashCollected(it->BlobSize());
THelpers::DbEraseTrash(*it, db, ctx);
it = Trash.erase(it);
+ if (++counter >= MaxCollectGarbageFlagsPerMessage) {
+ RepeatGCTX = true;
+ break;
+ }
} else {
++it;
}
@@ -91,12 +101,8 @@ void TKeyValueState::UpdateStoredState(ISimpleDb &db, const TActorContext &ctx,
THelpers::DbUpdateState(StoredState, db, ctx);
}
-void TKeyValueState::UpdateAfterPartitialGC(ISimpleDb &db, const TActorContext &ctx) {
- RemoveFromTrashDoNotKeep(db, ctx, PartitialCollectedDoNotKeep);
- if (PartitialCollectedGenerationStep) {
- RemoveFromTrashBySoftBarrier(db, ctx, *PartitialCollectedGenerationStep);
- UpdateStoredState(db, ctx, *PartitialCollectedGenerationStep);
- }
+void TKeyValueState::UpdateAfterPartialGC(ISimpleDb &db, const TActorContext &ctx) {
+ RemoveFromTrashDoNotKeep(db, ctx, PartialCollectedDoNotKeep);
}
void TKeyValueState::UpdateGC(ISimpleDb &db, const TActorContext &ctx, bool updateTrash, bool updateState) {
@@ -174,24 +180,42 @@ void TKeyValueState::EraseCollectComplete(const TActorContext &ctx) {
}
void TKeyValueState::CompleteGCExecute(ISimpleDb &db, const TActorContext &ctx) {
- UpdateGC(db, ctx, true, true);
+ ui64 collectGeneration = CollectOperation->Header.GetCollectGeneration();
+ ui64 collectStep = CollectOperation->Header.GetCollectStep();
+ auto collectGenStep = THelpers::TGenerationStep(collectGeneration, collectStep);
+ RemoveFromTrashBySoftBarrier(db, ctx, collectGenStep);
+ UpdateStoredState(db, ctx, collectGenStep);
}
void TKeyValueState::CompleteGCComplete(const TActorContext &ctx) {
+ if (RepeatGCTX) {
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC20, "Repeat CompleteGC",
+ (TabletId, TabletId),
+ (TrashCount, Trash.size()));
+ ctx.Send(ctx.SelfID, new TEvKeyValue::TEvCompleteGC());
+ RepeatGCTX = false;
+ return;
+ }
Y_VERIFY(CollectOperation);
CollectOperation.Reset(nullptr);
IsCollectEventSent = false;
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC22, "CompleteGC Complete",
+ (TabletId, TabletId),
+ (TrashCount, Trash.size()));
PrepareCollectIfNeeded(ctx);
}
-void TKeyValueState::PartitialCompleteGCExecute(ISimpleDb &db, const TActorContext &ctx) {
- UpdateAfterPartitialGC(db, ctx);
+void TKeyValueState::PartialCompleteGCExecute(ISimpleDb &db, const TActorContext &ctx) {
+ UpdateAfterPartialGC(db, ctx);
}
-void TKeyValueState::PartitialCompleteGCComplete(const TActorContext &ctx) {
- PartitialCollectedDoNotKeep.clear();
- ctx.Send(CollectorActorId, new TEvKeyValue::TEvContinueGC(std::move(PartitialCollectedDoNotKeep)));
+void TKeyValueState::PartialCompleteGCComplete(const TActorContext &ctx) {
+ PartialCollectedDoNotKeep.clear();
+ STLOG(NLog::PRI_DEBUG, NKikimrServices::KEYVALUE_GC, KVC23, "Send ContinueGC",
+ (TabletId, TabletId),
+ (TrashCount, Trash.size()));
+ ctx.Send(CollectorActorId, new TEvKeyValue::TEvContinueGC(std::move(PartialCollectedDoNotKeep)));
}
// Prepare the completely new full collect operation with the same gen/step, but with correct keep & doNotKeep lists
@@ -302,11 +326,9 @@ void TKeyValueState::OnEvCompleteGC() {
CountLatencyBsCollect();
}
-void TKeyValueState::OnEvPartitialCompleteGC(TEvKeyValue::TEvPartitialCompleteGC *ev) {
- PartitialCollectedGenerationStep = std::move(ev->CollectedGenerationStep);
- PartitialCollectedDoNotKeep = std::move(ev->CollectedDoNotKeep);
+void TKeyValueState::OnEvPartialCompleteGC(TEvKeyValue::TEvPartialCompleteGC *ev) {
+ PartialCollectedDoNotKeep = std::move(ev->CollectedDoNotKeep);
}
} // NKeyValue
} // NKikimr
-
diff --git a/ydb/core/keyvalue/keyvalue_ut.cpp b/ydb/core/keyvalue/keyvalue_ut.cpp
index ca3089ac35..96b9347b7f 100644
--- a/ydb/core/keyvalue/keyvalue_ut.cpp
+++ b/ydb/core/keyvalue/keyvalue_ut.cpp
@@ -25,6 +25,7 @@ void SetupLogging(TTestActorRuntime& runtime) {
NActors::NLog::EPriority otherPriority = NLog::PRI_ERROR;
runtime.SetLogPriority(NKikimrServices::KEYVALUE, priority);
+ runtime.SetLogPriority(NKikimrServices::KEYVALUE_GC, priority);
runtime.SetLogPriority(NKikimrServices::BOOTSTRAPPER, priority);
runtime.SetLogPriority(NKikimrServices::TABLET_MAIN, priority);
runtime.SetLogPriority(NKikimrServices::TABLET_EXECUTOR, priority);
@@ -88,6 +89,7 @@ struct TTestContext {
Runtime.Reset(new TTestBasicRuntime);
Runtime->SetScheduledLimit(200);
Runtime->SetLogPriority(NKikimrServices::KEYVALUE, NLog::PRI_DEBUG);
+ Runtime->SetDispatchedEventsLimit(25'000'000);
SetupLogging(*Runtime);
SetupTabletServices(*Runtime);
setup(*Runtime);
@@ -2366,5 +2368,25 @@ Y_UNIT_TEST(TestObtainLockNewApi) {
});
}
+
+Y_UNIT_TEST(TestLargeWriteAndDelete) {
+ TTestContext tc;
+ RunTestWithReboots(tc.TabletIds, [&]() {
+ return tc.InitialEventsFilter.Prepare();
+ }, [&](const TString &dispatchName, std::function<void(TTestActorRuntime&)> setup, bool &activeZone) {
+ TFinalizer finalizer(tc);
+ tc.Prepare(dispatchName, setup, activeZone);
+ ExecuteObtainLock(tc, 1);
+ ui32 iteration = 0;
+ TDeque<TKeyValuePair> keys;
+ for (ui32 idx = 0; idx < 15'000; ++idx) {
+ TString key = TStringBuilder() << iteration << ':' << idx;
+ keys.push_back({key, ""});
+ }
+ ExecuteWrite(tc, keys, 1, 2, NKikimrKeyValue::Priorities::PRIORITY_REALTIME);
+ ExecuteDeleteRange(tc, "", EBorderKind::Without, "", EBorderKind::Without, 1);
+ });
+}
+
} // TKeyValueTest
} // NKikimr
diff --git a/ydb/core/keyvalue/ut/CMakeLists.txt b/ydb/core/keyvalue/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/keyvalue/ut/CMakeLists.txt
+++ b/ydb/core/keyvalue/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/CMakeLists.txt b/ydb/core/kqp/CMakeLists.txt
index 041ed5ad1a..9b48b7c10a 100644
--- a/ydb/core/kqp/CMakeLists.txt
+++ b/ydb/core/kqp/CMakeLists.txt
@@ -6,6 +6,21 @@
# original buildsystem will not be accepted.
+add_subdirectory(common)
+add_subdirectory(compile)
+add_subdirectory(compute_actor)
+add_subdirectory(counters)
+add_subdirectory(executer)
+add_subdirectory(expr_nodes)
+add_subdirectory(host)
+add_subdirectory(node)
+add_subdirectory(opt)
+add_subdirectory(prepare)
+add_subdirectory(provider)
+add_subdirectory(proxy)
+add_subdirectory(rm)
+add_subdirectory(runtime)
+add_subdirectory(ut)
add_library(ydb-core-kqp)
target_compile_options(ydb-core-kqp PRIVATE
diff --git a/ydb/core/kqp/compile/kqp_compile.cpp b/ydb/core/kqp/compile/kqp_compile.cpp
index 6504ab6810..753873491d 100644
--- a/ydb/core/kqp/compile/kqp_compile.cpp
+++ b/ydb/core/kqp/compile/kqp_compile.cpp
@@ -5,6 +5,7 @@
#include <ydb/core/kqp/compile/kqp_olap_compiler.h>
#include <ydb/core/kqp/opt/kqp_opt.h>
#include <ydb/core/kqp/provider/yql_kikimr_provider_impl.h>
+#include <ydb/core/ydb_convert/ydb_convert.h>
#include <ydb/core/tx/schemeshard/schemeshard_utils.h>
#include <ydb/library/mkql_proto/mkql_proto.h>
@@ -480,6 +481,7 @@ private:
FillColumns(readTableRanges.Columns(), *tableMeta, tableOp, true);
FillReadRanges(readTableRanges, *tableMeta, *tableOp.MutableReadOlapRange());
FillOlapProgram(readTableRanges.Process(), *tableMeta, *tableOp.MutableReadOlapRange());
+ FillResultType(readTableRanges.Process().Ref().GetTypeAnn(), *tableOp.MutableReadOlapRange());
} else if (node.Maybe<TCoSort>()) {
hasSort = true;
} else if (node.Maybe<TCoMapJoinCore>()) {
@@ -729,6 +731,14 @@ private:
YQL_ENSURE(false, "Unexpected connection type: " << connection.CallableName());
}
+ void FillResultType(const TTypeAnnotationNode* resultType, NKqpProto::TKqpPhyOpReadOlapRanges& opProto)
+ {
+ YQL_ENSURE(resultType->GetKind() == NYql::ETypeAnnotationKind::Flow, "Unexpected type: " << NYql::FormatType(resultType));
+ TProgramBuilder pgmBuilder(TypeEnv, FuncRegistry);
+ const auto resultItemType = resultType->Cast<TFlowExprType>()->GetItemType();
+ ExportTypeToProto(CompileType(pgmBuilder, *resultItemType), *opProto.MutableResultType());
+ }
+
private:
TString Cluster;
const TIntrusivePtr<TKikimrTablesData> TablesData;
diff --git a/ydb/core/kqp/compile/kqp_olap_compiler.cpp b/ydb/core/kqp/compile/kqp_olap_compiler.cpp
index f880273706..351110d476 100644
--- a/ydb/core/kqp/compile/kqp_olap_compiler.cpp
+++ b/ydb/core/kqp/compile/kqp_olap_compiler.cpp
@@ -9,6 +9,8 @@ using namespace NYql;
using namespace NYql::NNodes;
using namespace NKikimrSSA;
+using EAggFunctionType = TProgram::TAggregateAssignment::EAggregateFunction;
+
constexpr ui32 OLAP_PROGRAM_VERSION = 1;
namespace {
@@ -56,6 +58,14 @@ public:
return Program.AddCommand()->MutableFilter();
}
+ TProgram::TGroupBy* CreateGroupBy() {
+ return Program.AddCommand()->MutableGroupBy();
+ }
+
+ TProgram::TProjection* CreateProjection() {
+ return Program.AddCommand()->MutableProjection();
+ }
+
void AddParameterName(const TString& name) {
ReadProto.AddOlapProgramParameterNames(name);
}
@@ -67,7 +77,14 @@ public:
ReadProto.SetOlapProgram(programBytes);
}
+ EAggFunctionType GetAggFuncType(const std::string& funcName) const {
+ YQL_ENSURE(AggFuncTypesMap.find(funcName) != AggFuncTypesMap.end());
+ return AggFuncTypesMap.at(funcName);
+ }
+
private:
+ static std::unordered_map<std::string, EAggFunctionType> AggFuncTypesMap;
+
TCoArgument Row;
TMap<TString, ui32> ReadColumns;
ui32 MaxColumnId;
@@ -75,6 +92,10 @@ private:
NKqpProto::TKqpPhyOpReadOlapRanges& ReadProto;
};
+std::unordered_map<std::string, EAggFunctionType> TKqpOlapCompileContext::AggFuncTypesMap = {
+ { "count", TProgram::TAggregateAssignment::AGG_COUNT },
+ { "some", TProgram::TAggregateAssignment::AGG_SOME },
+};
TProgram::TAssignment* CompileCondition(const TExprBase& condition, TKqpOlapCompileContext& ctx);
ui64 GetOrCreateColumnId(const TExprBase& node, TKqpOlapCompileContext& ctx);
@@ -149,7 +170,7 @@ ui32 ConvertParameterToColumn(const TCoParameter& parameter, TKqpOlapCompileCont
ui32 ConvertSafeCastToColumn(const TCoSafeCast& cast, TKqpOlapCompileContext& ctx)
{
auto columnId = GetOrCreateColumnId(cast.Value(), ctx);
-
+
TProgram::TAssignment* ssaValue = ctx.CreateAssignCmd();
auto newCast = ssaValue->MutableFunction();
@@ -348,15 +369,58 @@ void CompileFilter(const TKqpOlapFilter& filterNode, TKqpOlapCompileContext& ctx
filter->MutablePredicate()->SetId(condition->GetColumn().GetId());
}
+void CompileAggregates(const TKqpOlapAgg& aggNode, TKqpOlapCompileContext& ctx) {
+ auto* groupBy = ctx.CreateGroupBy();
+ auto* projection = ctx.CreateProjection();
+
+ for (auto keyCol : aggNode.KeyColumns()) {
+ auto aggKeyCol = groupBy->AddKeyColumns();
+ auto keyColName = keyCol.StringValue();
+ auto aggKeyColId = GetOrCreateColumnId(keyCol, ctx);
+ aggKeyCol->SetId(aggKeyColId);
+ aggKeyCol->SetName(keyColName);
+
+ auto* projCol = projection->AddColumns();
+ projCol->SetId(aggKeyColId);
+ projCol->SetName(keyColName);
+ }
+
+ for (auto aggIt : aggNode.Aggregates()) {
+ auto aggKqp = aggIt.Cast<TKqpOlapAggOperation>();
+ std::string aggColName = aggKqp.Name().StringValue().c_str();
+
+ auto* agg = groupBy->AddAggregates();
+ auto aggColId = ctx.NewColumnId();
+ auto* aggCol = agg->MutableColumn();
+ aggCol->SetId(aggColId);
+ aggCol->SetName(aggColName.c_str());
+ auto* projCol = projection->AddColumns();
+ projCol->SetId(aggColId);
+ projCol->SetName(aggColName.c_str());
+
+ auto* aggFunc = agg->MutableFunction();
+ aggFunc->SetId(ctx.GetAggFuncType(aggKqp.Type().StringValue().c_str()));
+
+ if (aggKqp.Column() != "*") {
+ aggFunc->AddArguments()->SetId(GetOrCreateColumnId(aggKqp.Column(), ctx));
+ }
+ }
+}
+
void CompileOlapProgramImpl(TExprBase operation, TKqpOlapCompileContext& ctx) {
if (operation.Raw() == ctx.GetRowExpr()) {
return;
}
- if (auto maybeFilter = operation.Maybe<TKqpOlapFilter>()) {
- CompileOlapProgramImpl(maybeFilter.Cast().Input(), ctx);
- CompileFilter(maybeFilter.Cast(), ctx);
- return;
+ if (auto maybeOlapOperation = operation.Maybe<TKqpOlapOperationBase>()) {
+ CompileOlapProgramImpl(maybeOlapOperation.Cast().Input(), ctx);
+ if (auto maybeFilter = operation.Maybe<TKqpOlapFilter>()) {
+ CompileFilter(maybeFilter.Cast(), ctx);
+ return;
+ } else if (auto maybeAgg = operation.Maybe<TKqpOlapAgg>()) {
+ CompileAggregates(maybeAgg.Cast(), ctx);
+ return;
+ }
}
YQL_ENSURE(operation.Maybe<TCallable>(), "Unexpected OLAP operation node type: " << operation.Ref().Type());
diff --git a/ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp b/ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp
index 034f202f40..ff54ce2214 100644
--- a/ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp
+++ b/ydb/core/kqp/compute_actor/kqp_scan_compute_actor.cpp
@@ -193,11 +193,11 @@ public:
BaseStateFuncBody(ev, ctx);
}
} catch (const TMemoryLimitExceededException& e) {
- InternalError(TIssuesIds::KIKIMR_PRECONDITION_FAILED, TStringBuilder()
- << "Mkql memory limit exceeded, limit: " << GetMkqlMemoryLimit()
- << ", host: " << HostName() << ", canAllocateExtraMemory: " << CanAllocateExtraMemory);
+ InternalError(NYql::NDqProto::StatusIds::PRECONDITION_FAILED, TIssuesIds::KIKIMR_PRECONDITION_FAILED,
+ TStringBuilder() << "Mkql memory limit exceeded, limit: " << GetMkqlMemoryLimit()
+ << ", host: " << HostName() << ", canAllocateExtraMemory: " << CanAllocateExtraMemory);
} catch (const yexception& e) {
- InternalError(TIssuesIds::DEFAULT_ERROR, e.what());
+ InternalError(NYql::NDqProto::StatusIds::INTERNAL_ERROR, TIssuesIds::DEFAULT_ERROR, e.what());
}
ReportEventElapsedTime();
@@ -434,13 +434,14 @@ private:
return;
CA_LOG_W("Got EvScanError scan state: " << EShardStateToString(state->State)
- << " status: " << Ydb::StatusIds_StatusCode_Name(status)
+ << ", status: " << Ydb::StatusIds_StatusCode_Name(status)
<< ", reason: " << issues.ToString()
<< ", tablet id: " << state->TabletId);
YQL_ENSURE(state->Generation == msg.GetGeneration());
if (state->State == EShardState::Starting) {
+ // TODO: Do not parse issues here, use status code.
if (FindSchemeErrorInIssues(status, issues)) {
return EnqueueResolveShard(state);
}
@@ -502,8 +503,9 @@ private:
if (request->ErrorCount > 0) {
CA_LOG_E("Resolve request failed for table '" << ScanData->TablePath << "', ErrorCount# " << request->ErrorCount);
+ auto statusCode = NDqProto::StatusIds::UNAVAILABLE;
+ auto issueCode = TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE;
TString error;
- TIssuesIds::EIssueCode issueCode = TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE;
for (const auto& x : request->ResultSet) {
if ((ui32)x.Status < (ui32) NSchemeCache::TSchemeCacheRequest::EStatus::OkScheme) {
@@ -512,22 +514,30 @@ private:
switch (x.Status) {
case NSchemeCache::TSchemeCacheRequest::EStatus::PathErrorNotExist:
- issueCode = TIssuesIds::KIKIMR_SCHEME_ERROR;
+ statusCode = NDqProto::StatusIds::SCHEME_ERROR;
+ issueCode = TIssuesIds::KIKIMR_SCHEME_MISMATCH;
error = TStringBuilder() << "Table '" << ScanData->TablePath << "' not exists.";
break;
case NSchemeCache::TSchemeCacheRequest::EStatus::TypeCheckError:
+ statusCode = NDqProto::StatusIds::SCHEME_ERROR;
issueCode = TIssuesIds::KIKIMR_SCHEME_MISMATCH;
error = TStringBuilder() << "Table '" << ScanData->TablePath << "' scheme changed.";
break;
+ case NSchemeCache::TSchemeCacheRequest::EStatus::LookupError:
+ statusCode = NDqProto::StatusIds::UNAVAILABLE;
+ issueCode = TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE;
+ error = TStringBuilder() << "Failed to resolve table '" << ScanData->TablePath << "'.";
+ break;
default:
- issueCode = TIssuesIds::KIKIMR_SCHEME_ERROR;
+ statusCode = NDqProto::StatusIds::SCHEME_ERROR;
+ issueCode = TIssuesIds::KIKIMR_SCHEME_MISMATCH;
error = TStringBuilder() << "Unresolved table '" << ScanData->TablePath << "'. Status: " << x.Status;
break;
}
}
}
- return InternalError(issueCode, error);
+ return InternalError(statusCode, issueCode, error);
}
auto keyDesc = std::move(request->ResultSet[0].KeyDescription);
@@ -535,7 +545,7 @@ private:
if (keyDesc->GetPartitions().empty()) {
TString error = TStringBuilder() << "No partitions to read from '" << ScanData->TablePath << "'";
CA_LOG_E(error);
- InternalError(TIssuesIds::KIKIMR_SCHEME_ERROR, error);
+ InternalError(NDqProto::StatusIds::SCHEME_ERROR, TIssuesIds::KIKIMR_SCHEME_MISMATCH, error);
return;
}
@@ -635,7 +645,8 @@ private:
if (shard.State == EShardState::Running && ev->Sender == shard.ActorId) {
CA_LOG_E("TEvScanDataAck lost while running scan, terminate execution. DataShard actor: "
<< shard.ActorId);
- InternalError(TIssuesIds::DEFAULT_ERROR, "Delivery problem: EvScanDataAck lost.");
+ InternalError(NDqProto::StatusIds::UNAVAILABLE, TIssuesIds::DEFAULT_ERROR,
+ "Delivery problem: EvScanDataAck lost.");
} else {
CA_LOG_D("Skip lost TEvScanDataAck to " << ev->Sender << ", active scan actor: " << shard.ActorId);
}
@@ -651,7 +662,8 @@ private:
TrackingNodes.erase(nodeId);
for(auto& [tabletId, state] : InFlightShards) {
if (state.ActorId && state.ActorId.NodeId() == nodeId) {
- InternalError(TIssuesIds::DEFAULT_ERROR, TStringBuilder() << "Connection with node " << nodeId << " lost.");
+ InternalError(NDqProto::StatusIds::UNAVAILABLE, TIssuesIds::DEFAULT_ERROR,
+ TStringBuilder() << "Connection with node " << nodeId << " lost.");
}
}
}
@@ -764,8 +776,8 @@ private:
if (state->TotalRetries >= MAX_TOTAL_SHARD_RETRIES) {
CA_LOG_E("TKqpScanComputeActor: broken pipe with tablet " << state->TabletId
<< ", retries limit exceeded (" << state->TotalRetries << ")");
- return InternalError(TIssuesIds::DEFAULT_ERROR, TStringBuilder()
- << "Retries limit with shard " << state->TabletId << " exceeded.");
+ return InternalError(NDqProto::StatusIds::UNAVAILABLE, TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE,
+ TStringBuilder() << "Retries limit with shard " << state->TabletId << " exceeded.");
}
// note: it might be possible that shard is already removed after successful split/merge operation and cannot be found
@@ -856,8 +868,8 @@ private:
void ResolveShard(TShardState* state) {
if (state->ResolveAttempt >= MAX_SHARD_RESOLVES) {
- InternalError(TIssuesIds::KIKIMR_SCHEME_ERROR, TStringBuilder()
- << "Table '" << ScanData->TablePath << "' resolve limit exceeded");
+ InternalError(NDqProto::StatusIds::UNAVAILABLE, TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE,
+ TStringBuilder() << "Table '" << ScanData->TablePath << "' resolve limit exceeded");
return;
}
diff --git a/ydb/core/kqp/counters/kqp_counters.cpp b/ydb/core/kqp/counters/kqp_counters.cpp
index 7385f21495..12e329f918 100644
--- a/ydb/core/kqp/counters/kqp_counters.cpp
+++ b/ydb/core/kqp/counters/kqp_counters.cpp
@@ -18,7 +18,7 @@ namespace NKqp {
using namespace NYql;
-NMonitoring::TDynamicCounterPtr TKqpCountersBase::GetQueryReplayCounters() const {
+::NMonitoring::TDynamicCounterPtr TKqpCountersBase::GetQueryReplayCounters() const {
return QueryReplayGroup;
}
@@ -579,15 +579,15 @@ void TKqpCountersBase::ReportRecompileRequestGet() {
TKqpDbCounters::TKqpDbCounters() {
- Counters = new NMonitoring::TDynamicCounters();
+ Counters = new ::NMonitoring::TDynamicCounters();
KqpGroup = Counters->GetSubgroup("group", "kqp");
YdbGroup = Counters->GetSubgroup("group", "ydb");
Init();
}
-TKqpDbCounters::TKqpDbCounters(const NMonitoring::TDynamicCounterPtr& externalGroup,
- const NMonitoring::TDynamicCounterPtr& internalGroup)
+TKqpDbCounters::TKqpDbCounters(const ::NMonitoring::TDynamicCounterPtr& externalGroup,
+ const ::NMonitoring::TDynamicCounterPtr& internalGroup)
{
Counters = internalGroup;
KqpGroup = Counters;
@@ -713,7 +713,7 @@ void TKqpCounters::UpdateTxCounters(const TKqpTransactionInfo& txInfo,
byKind->Queries->Collect(txInfo.QueriesCount);
}
-TKqpCounters::TKqpCounters(const NMonitoring::TDynamicCounterPtr& counters, const TActorContext* ctx)
+TKqpCounters::TKqpCounters(const ::NMonitoring::TDynamicCounterPtr& counters, const TActorContext* ctx)
: AllocCounters(counters, "kqp")
{
Counters = counters;
@@ -792,7 +792,7 @@ TKqpCounters::TKqpCounters(const NMonitoring::TDynamicCounterPtr& counters, cons
"NE/ScanTxTotalTimeMs", NMonitoring::ExponentialHistogram(20, 2, 1));
}
-NMonitoring::TDynamicCounterPtr TKqpCounters::GetQueryReplayCounters() const {
+::NMonitoring::TDynamicCounterPtr TKqpCounters::GetQueryReplayCounters() const {
return QueryReplayGroup;
}
@@ -1172,11 +1172,11 @@ void TKqpCounters::ReportNewEngineCompatibleQueryStats(NKikimrKqp::EQueryAction
}
}
-const NMonitoring::TDynamicCounters::TCounterPtr TKqpCounters::RecompileRequestGet() const {
+const ::NMonitoring::TDynamicCounters::TCounterPtr TKqpCounters::RecompileRequestGet() const {
return TKqpCountersBase::CompileRequestsRecompile;
}
-NMonitoring::TDynamicCounters::TCounterPtr TKqpCounters::GetQueryTypeCounter(
+::NMonitoring::TDynamicCounters::TCounterPtr TKqpCounters::GetQueryTypeCounter(
NKikimrKqp::EQueryType queryType)
{
return QueryTypes[queryType];
diff --git a/ydb/core/kqp/counters/kqp_counters.h b/ydb/core/kqp/counters/kqp_counters.h
index cbbadf7380..0a8b1bbeb1 100644
--- a/ydb/core/kqp/counters/kqp_counters.h
+++ b/ydb/core/kqp/counters/kqp_counters.h
@@ -98,36 +98,36 @@ protected:
void ReportCompileRequestTimeout();
void ReportCompileDurations(TDuration duration, TDuration cpuTime);
void ReportRecompileRequestGet();
- NMonitoring::TDynamicCounterPtr GetQueryReplayCounters() const;
+ ::NMonitoring::TDynamicCounterPtr GetQueryReplayCounters() const;
protected:
- NMonitoring::TDynamicCounterPtr Counters;
- NMonitoring::TDynamicCounterPtr KqpGroup;
- NMonitoring::TDynamicCounterPtr YdbGroup;
- NMonitoring::TDynamicCounterPtr QueryReplayGroup;
+ ::NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr KqpGroup;
+ ::NMonitoring::TDynamicCounterPtr YdbGroup;
+ ::NMonitoring::TDynamicCounterPtr QueryReplayGroup;
// Requests
- THashMap<NKikimrKqp::EQueryAction, NMonitoring::TDynamicCounters::TCounterPtr> QueryActionRequests;
- NMonitoring::TDynamicCounters::TCounterPtr OtherQueryRequests;
- NMonitoring::TDynamicCounters::TCounterPtr CloseSessionRequests;
- NMonitoring::TDynamicCounters::TCounterPtr CreateSessionRequests;
- NMonitoring::TDynamicCounters::TCounterPtr PingSessionRequests;
-
- NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr YdbRequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr QueryBytes;
- NMonitoring::TDynamicCounters::TCounterPtr ParametersBytes;
- NMonitoring::TDynamicCounters::TCounterPtr YdbParametersBytes;
-
- NMonitoring::TDynamicCounters::TCounterPtr SqlV0Translations;
- NMonitoring::TDynamicCounters::TCounterPtr SqlV1Translations;
- NMonitoring::TDynamicCounters::TCounterPtr SqlUnknownTranslations;
-
- THashMap<NKikimrKqp::EQueryType, NMonitoring::TDynamicCounters::TCounterPtr> QueryTypes;
- NMonitoring::TDynamicCounters::TCounterPtr OtherQueryTypes;
-
- NMonitoring::TDynamicCounters::TCounterPtr QueriesWithRangeScan;
- NMonitoring::TDynamicCounters::TCounterPtr QueriesWithFullScan;
+ THashMap<NKikimrKqp::EQueryAction, ::NMonitoring::TDynamicCounters::TCounterPtr> QueryActionRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr OtherQueryRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CloseSessionRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CreateSessionRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PingSessionRequests;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr YdbRequestBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueryBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ParametersBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr YdbParametersBytes;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr SqlV0Translations;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SqlV1Translations;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SqlUnknownTranslations;
+
+ THashMap<NKikimrKqp::EQueryType, ::NMonitoring::TDynamicCounters::TCounterPtr> QueryTypes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr OtherQueryTypes;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueriesWithRangeScan;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueriesWithFullScan;
NMonitoring::THistogramPtr QueryAffectedShardsCount;
NMonitoring::THistogramPtr QueryReadSetsCount;
NMonitoring::THistogramPtr QueryReadBytes;
@@ -140,69 +140,69 @@ protected:
NMonitoring::THistogramPtr YdbQueryExecuteLatency;
// Responses
- NMonitoring::TDynamicCounters::TCounterPtr OtherResponses;
- NMonitoring::TDynamicCounters::TCounterPtr YdbResponsesLocksInvalidated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr OtherResponses;
+ ::NMonitoring::TDynamicCounters::TCounterPtr YdbResponsesLocksInvalidated;
- THashMap<Ydb::StatusIds::StatusCode, NMonitoring::TDynamicCounters::TCounterPtr> YdbResponses;
- NMonitoring::TDynamicCounters::TCounterPtr OtherYdbResponses;
+ THashMap<Ydb::StatusIds::StatusCode, ::NMonitoring::TDynamicCounters::TCounterPtr> YdbResponses;
+ ::NMonitoring::TDynamicCounters::TCounterPtr OtherYdbResponses;
- NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
- NMonitoring::TDynamicCounters::TCounterPtr YdbResponseBytes;
- NMonitoring::TDynamicCounters::TCounterPtr QueryResultsBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr YdbResponseBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueryResultsBytes;
- THashMap<ui32, NMonitoring::TDynamicCounters::TCounterPtr> IssueCounters;
+ THashMap<ui32, ::NMonitoring::TDynamicCounters::TCounterPtr> IssueCounters;
// Workers
NMonitoring::THistogramPtr WorkerLifeSpan;
NMonitoring::THistogramPtr QueriesPerWorker;
- NMonitoring::TDynamicCounters::TCounterPtr WorkersCreated;
- NMonitoring::TDynamicCounters::TCounterPtr WorkersClosedIdle;
- NMonitoring::TDynamicCounters::TCounterPtr WorkersClosedError;
- NMonitoring::TDynamicCounters::TCounterPtr WorkersClosedRequest;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveWorkers;
- NMonitoring::TDynamicCounters::TCounterPtr SessionGracefulShutdownHit;
- NMonitoring::TDynamicCounters::TCounterPtr SessionBalancerShutdowns;
- NMonitoring::TDynamicCounters::TCounterPtr ProxyForwardedRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr WorkersCreated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr WorkersClosedIdle;
+ ::NMonitoring::TDynamicCounters::TCounterPtr WorkersClosedError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr WorkersClosedRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveWorkers;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SessionGracefulShutdownHit;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SessionBalancerShutdowns;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ProxyForwardedRequests;
NMonitoring::THistogramPtr WorkerCleanupLatency;
// Workers and SessionActors
- NMonitoring::TDynamicCounters::TCounterPtr YdbSessionsClosedIdle;
- NMonitoring::TDynamicCounters::TCounterPtr YdbSessionsActiveCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr YdbSessionsClosedIdle;
+ ::NMonitoring::TDynamicCounters::TCounterPtr YdbSessionsActiveCount;
// SessionActors
NMonitoring::THistogramPtr SessionActorLifeSpan;
NMonitoring::THistogramPtr QueriesPerSessionActor;
- NMonitoring::TDynamicCounters::TCounterPtr SessionActorsCreated;
- NMonitoring::TDynamicCounters::TCounterPtr SessionActorsClosedIdle;
- //NMonitoring::TDynamicCounters::TCounterPtr YdbSessionActorsClosedIdle;
- NMonitoring::TDynamicCounters::TCounterPtr SessionActorsClosedError;
- NMonitoring::TDynamicCounters::TCounterPtr SessionActorsClosedRequest;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveSessionActors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SessionActorsCreated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SessionActorsClosedIdle;
+ //::NMonitoring::TDynamicCounters::TCounterPtr YdbSessionActorsClosedIdle;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SessionActorsClosedError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SessionActorsClosedRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveSessionActors;
NMonitoring::THistogramPtr SessionActorCleanupLatency;
// Transactions
- NMonitoring::TDynamicCounters::TCounterPtr TxCreated;
- NMonitoring::TDynamicCounters::TCounterPtr TxAborted;
- NMonitoring::TDynamicCounters::TCounterPtr TxCommited;
- NMonitoring::TDynamicCounters::TCounterPtr TxEvicted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxCreated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxAborted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxCommited;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxEvicted;
NMonitoring::THistogramPtr TxActivePerSession;
NMonitoring::THistogramPtr TxAbortedPerSession;
THashMap<TKqpTransactionInfo::EKind, TYdbTxByKindCounters> YdbTxByKind;
// Compile service
- NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheHits;
- NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheMisses;
- NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsCompile;
- NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsGet;
- NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsInvalidate;
- NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsRejected;
- NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsTimeout;
- NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsRecompile;
- NMonitoring::TDynamicCounters::TCounterPtr CompileTotal;
- NMonitoring::TDynamicCounters::TCounterPtr CompileErrors;
- NMonitoring::TDynamicCounters::TCounterPtr CompileActive;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheHits;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheMisses;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsCompile;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsGet;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsInvalidate;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsRejected;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsTimeout;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileRequestsRecompile;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileTotal;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileErrors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileActive;
NMonitoring::THistogramPtr CompileCpuTime;
NMonitoring::THistogramPtr YdbCompileDuration;
};
@@ -216,8 +216,8 @@ public:
TKqpDbCounters();
// created in SVP, exposed
- explicit TKqpDbCounters(const NMonitoring::TDynamicCounterPtr& externalGroup,
- const NMonitoring::TDynamicCounterPtr& internalGroup);
+ explicit TKqpDbCounters(const ::NMonitoring::TDynamicCounterPtr& externalGroup,
+ const ::NMonitoring::TDynamicCounterPtr& internalGroup);
void ToProto(NKikimr::NSysView::TDbServiceCounters& counters) override;
void FromProto(NKikimr::NSysView::TDbServiceCounters& counters) override;
@@ -261,7 +261,7 @@ private:
THashMap<TKqpTransactionInfo::EKind, TTxByKindCounters>& txCounters);
public:
- explicit TKqpCounters(const NMonitoring::TDynamicCounterPtr& counters, const TActorContext* ctx = nullptr);
+ explicit TKqpCounters(const ::NMonitoring::TDynamicCounterPtr& counters, const TActorContext* ctx = nullptr);
void ReportProxyForwardedRequest(TKqpDbCountersPtr dbCounters);
void ReportSessionGracefulShutdownHit(TKqpDbCountersPtr dbCounters);
@@ -329,10 +329,10 @@ public:
void ReportCompileDurations(TKqpDbCountersPtr dbCounters, TDuration duration, TDuration cpuTime);
void ReportRecompileRequestGet(TKqpDbCountersPtr dbCounters);
- const NMonitoring::TDynamicCounters::TCounterPtr RecompileRequestGet() const;
- NMonitoring::TDynamicCounterPtr GetQueryReplayCounters() const;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr RecompileRequestGet() const;
+ ::NMonitoring::TDynamicCounterPtr GetQueryReplayCounters() const;
- NMonitoring::TDynamicCounters::TCounterPtr GetQueryTypeCounter(NKikimrKqp::EQueryType queryType);
+ ::NMonitoring::TDynamicCounters::TCounterPtr GetQueryTypeCounter(NKikimrKqp::EQueryType queryType);
TKqpDbCountersPtr GetDbCounters(const TString& database);
void RemoveDbCounters(const TString& database);
@@ -342,42 +342,42 @@ public:
THashMap<TKqpTransactionInfo::EKind, TTxByKindCounters> TxByKind;
// Compile service
- NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheSize;
- NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheBytes;
- NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheEvicted;
- NMonitoring::TDynamicCounters::TCounterPtr CompileQueueSize;
- NMonitoring::TDynamicCounters::TCounterPtr ForceNewEngineCompileErrors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileQueryCacheEvicted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CompileQueueSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ForceNewEngineCompileErrors;
// Resource Manager
- NMonitoring::TDynamicCounters::TCounterPtr RmComputeActors;
- NMonitoring::TDynamicCounters::TCounterPtr RmMemory;
- NMonitoring::TDynamicCounters::TCounterPtr RmExternalMemory;
- NMonitoring::TDynamicCounters::TCounterPtr RmNotEnoughMemory;
- NMonitoring::TDynamicCounters::TCounterPtr RmNotEnoughComputeActors;
- NMonitoring::TDynamicCounters::TCounterPtr RmExtraMemAllocs;
- NMonitoring::TDynamicCounters::TCounterPtr RmInternalError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RmComputeActors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RmMemory;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RmExternalMemory;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RmNotEnoughMemory;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RmNotEnoughComputeActors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RmExtraMemAllocs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RmInternalError;
// Spilling counters
- NMonitoring::TDynamicCounters::TCounterPtr SpillingWriteBlobs;
- NMonitoring::TDynamicCounters::TCounterPtr SpillingReadBlobs;
- NMonitoring::TDynamicCounters::TCounterPtr SpillingStoredBlobs;
- NMonitoring::TDynamicCounters::TCounterPtr SpillingTotalSpaceUsed;
- NMonitoring::TDynamicCounters::TCounterPtr SpillingTooBigFileErrors;
- NMonitoring::TDynamicCounters::TCounterPtr SpillingNoSpaceErrors;
- NMonitoring::TDynamicCounters::TCounterPtr SpillingIoErrors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SpillingWriteBlobs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SpillingReadBlobs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SpillingStoredBlobs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SpillingTotalSpaceUsed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SpillingTooBigFileErrors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SpillingNoSpaceErrors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SpillingIoErrors;
// Scan queries counters
- NMonitoring::TDynamicCounters::TCounterPtr ScanQueryShardDisconnect;
- NMonitoring::TDynamicCounters::TCounterPtr ScanQueryShardResolve;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ScanQueryShardDisconnect;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ScanQueryShardResolve;
NMonitoring::THistogramPtr ScanQueryRateLimitLatency;
// NewEngine vs OldEngine
THashMap<NKikimrKqp::EQueryAction, NMonitoring::THistogramPtr> NewEngineForcedQueryLatencies;
THashMap<NKikimrKqp::EQueryAction, NMonitoring::THistogramPtr> NewEngineCompatibleQueryLatencies;
- NMonitoring::TDynamicCounters::TCounterPtr NewEngineForcedComputeCpuTime;
- NMonitoring::TDynamicCounters::TCounterPtr NewEngineForcedQueryCount;
- NMonitoring::TDynamicCounters::TCounterPtr NewEngineCompatibleComputeCpuTime;
- NMonitoring::TDynamicCounters::TCounterPtr NewEngineCompatibleQueryCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NewEngineForcedComputeCpuTime;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NewEngineForcedQueryCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NewEngineCompatibleComputeCpuTime;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NewEngineCompatibleQueryCount;
// NewEngine tx duration
NMonitoring::THistogramPtr LiteralTxTotalTimeHistogram;
diff --git a/ydb/core/kqp/executer/CMakeLists.txt b/ydb/core/kqp/executer/CMakeLists.txt
index 1147ca042e..c9616e508e 100644
--- a/ydb/core/kqp/executer/CMakeLists.txt
+++ b/ydb/core/kqp/executer/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-kqp-executer)
target_compile_options(core-kqp-executer PRIVATE
diff --git a/ydb/core/kqp/executer/kqp_data_executer.cpp b/ydb/core/kqp/executer/kqp_data_executer.cpp
index da92e4df2e..48473e0fd4 100644
--- a/ydb/core/kqp/executer/kqp_data_executer.cpp
+++ b/ydb/core/kqp/executer/kqp_data_executer.cpp
@@ -461,7 +461,7 @@ private:
if (er.GetKind() == NKikimrTxDataShard::TError::PROGRAM_ERROR) {
auto issue = YqlIssue({}, TIssuesIds::KIKIMR_PRECONDITION_FAILED);
issue.AddSubIssue(new TIssue(TStringBuilder() << "Data shard error: [PROGRAM_ERROR] " << er.GetReason()));
- return ReplyErrorAndDie(Ydb::StatusIds::ABORTED, issue);
+ return ReplyErrorAndDie(Ydb::StatusIds::PRECONDITION_FAILED, issue);
}
}
auto issue = YqlIssue({}, TIssuesIds::DEFAULT_ERROR, "Error executing transaction (ExecError): Execution failed");
@@ -471,11 +471,14 @@ private:
case NKikimrTxDataShard::TEvProposeTransactionResult::ERROR: {
Counters->TxProxyMon->TxResultError->Inc();
for (auto& er : result.GetError()) {
- if (er.GetKind() == NKikimrTxDataShard::TError::SCHEME_CHANGED) {
- return ReplyErrorAndDie(Ydb::StatusIds::ABORTED, YqlIssue({}, TIssuesIds::KIKIMR_SCHEME_MISMATCH, er.GetReason()));
- }
- if (er.GetKind() == NKikimrTxDataShard::TError::SCHEME_ERROR) {
- return ReplyErrorAndDie(Ydb::StatusIds::BAD_REQUEST, YqlIssue({}, TIssuesIds::KIKIMR_SCHEME_ERROR, er.GetReason()));
+ switch (er.GetKind()) {
+ case NKikimrTxDataShard::TError::SCHEME_CHANGED:
+ case NKikimrTxDataShard::TError::SCHEME_ERROR:
+ return ReplyErrorAndDie(Ydb::StatusIds::SCHEME_ERROR, YqlIssue({},
+ TIssuesIds::KIKIMR_SCHEME_MISMATCH, er.GetReason()));
+
+ default:
+ break;
}
}
auto issue = YqlIssue({}, TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE);
@@ -1053,6 +1056,13 @@ private:
} else {
task.Meta.Writes->Ranges.MergeWritePoints(TShardKeyRanges(read.Ranges), keyTypes);
}
+
+ if (op.GetTypeCase() == NKqpProto::TKqpPhyTableOperation::kDeleteRows) {
+ task.Meta.Writes->AddEraseOp();
+ } else {
+ task.Meta.Writes->AddUpdateOp();
+ }
+
}
ShardsWithEffects.insert(task.Meta.ShardId);
@@ -1076,6 +1086,23 @@ private:
task.Meta.Writes->Ranges.MergeWritePoints(std::move(*shardInfo.KeyWriteRanges), keyTypes);
}
+ if (op.GetTypeCase() == NKqpProto::TKqpPhyTableOperation::kDeleteRows) {
+ task.Meta.Writes->AddEraseOp();
+ } else {
+ task.Meta.Writes->AddUpdateOp();
+ }
+
+ for (const auto& [name, info] : shardInfo.ColumnWrites) {
+ auto& column = table.Columns.at(name);
+
+ auto& taskColumnWrite = task.Meta.Writes->ColumnWrites[column.Id];
+ taskColumnWrite.Column.Id = column.Id;
+ taskColumnWrite.Column.Type = column.Type;
+ taskColumnWrite.Column.Name = name;
+ taskColumnWrite.MaxValueSizeBytes = std::max(taskColumnWrite.MaxValueSizeBytes,
+ info.MaxValueSizeBytes);
+ }
+
ShardsWithEffects.insert(shardId);
}
}
@@ -1369,6 +1396,20 @@ private:
if (task.Meta.Writes) {
auto* protoWrites = protoTaskMeta.MutableWrites();
task.Meta.Writes->Ranges.SerializeTo(protoWrites->MutableRange());
+ if (task.Meta.Writes->IsPureEraseOp()) {
+ protoWrites->SetIsPureEraseOp(true);
+ }
+
+ for (const auto& [_, columnWrite] : task.Meta.Writes->ColumnWrites) {
+ auto& protoColumnWrite = *protoWrites->AddColumns();
+
+ auto& protoColumn = *protoColumnWrite.MutableColumn();
+ protoColumn.SetId(columnWrite.Column.Id);
+ protoColumn.SetType(columnWrite.Column.Type);
+ protoColumn.SetName(columnWrite.Column.Name);
+
+ protoColumnWrite.SetMaxValueSizeBytes(columnWrite.MaxValueSizeBytes);
+ }
}
taskDesc.MutableMeta()->PackFrom(protoTaskMeta);
diff --git a/ydb/core/kqp/executer/kqp_executer_impl.h b/ydb/core/kqp/executer/kqp_executer_impl.h
index 5f84f70ce4..1f4bb0ca31 100644
--- a/ydb/core/kqp/executer/kqp_executer_impl.h
+++ b/ydb/core/kqp/executer/kqp_executer_impl.h
@@ -476,7 +476,7 @@ protected:
}
case NKqpProto::TKqpPhyValue::kParamValue: {
- itemsLimitParamName = protoItemsLimit.GetParamElementValue().GetParamName();
+ itemsLimitParamName = protoItemsLimit.GetParamValue().GetParamName();
if (!itemsLimitParamName) {
return;
}
diff --git a/ydb/core/kqp/executer/kqp_literal_executer.cpp b/ydb/core/kqp/executer/kqp_literal_executer.cpp
index b5c1a34fea..b805584e89 100644
--- a/ydb/core/kqp/executer/kqp_literal_executer.cpp
+++ b/ydb/core/kqp/executer/kqp_literal_executer.cpp
@@ -153,20 +153,22 @@ private:
NMiniKQL::TMemoryUsageInfo memInfo("KqpLocalExecuter");
NMiniKQL::THolderFactory holderFactory(alloc.Ref(), memInfo, funcRegistry);
+ ui64 mkqlMemoryLimit = Request.MkqlMemoryLimit > 0
+ ? Request.MkqlMemoryLimit
+ : 1_GB;
+
auto rmConfig = GetKqpResourceManager()->GetConfig();
- ui64 limit = Request.MkqlMemoryLimit > 0
- ? std::min(Request.MkqlMemoryLimit, rmConfig.GetMkqlLightProgramMemoryLimit())
- : rmConfig.GetMkqlLightProgramMemoryLimit();
- alloc.SetLimit(limit);
-
- alloc.Ref().SetIncreaseMemoryLimitCallback([this, &alloc](ui64 limit, ui64 required) {
- if (required < 100_MB) {
- LOG_D("Increase memory limit from " << limit << " to " << required);
+ ui64 mkqlInitialLimit = std::min(mkqlMemoryLimit, rmConfig.GetMkqlLightProgramMemoryLimit());
+ alloc.SetLimit(mkqlInitialLimit);
+
+ // TODO: KIKIMR-15350
+ alloc.Ref().SetIncreaseMemoryLimitCallback([this, &alloc, mkqlMemoryLimit](ui64 currentLimit, ui64 required) {
+ if (required < mkqlMemoryLimit) {
+ LOG_D("Increase memory limit from " << currentLimit << " to " << required);
alloc.SetLimit(required);
}
});
-
// task runner settings
NMiniKQL::TKqpComputeContextBase computeCtx;
TDqTaskRunnerContext context = CreateTaskRunnerContext(&computeCtx, &alloc, &typeEnv);
diff --git a/ydb/core/kqp/executer/kqp_partition_helper.cpp b/ydb/core/kqp/executer/kqp_partition_helper.cpp
index 9a58274eb3..aa01c3da06 100644
--- a/ydb/core/kqp/executer/kqp_partition_helper.cpp
+++ b/ydb/core/kqp/executer/kqp_partition_helper.cpp
@@ -15,12 +15,17 @@ namespace {
using namespace NYql;
+struct TColumnStats {
+ ui32 MaxValueSizeBytes = 0;
+};
+
struct TShardParamValuesAndRanges {
NDqProto::TData ParamValues;
NKikimr::NMiniKQL::TType* ParamType;
// either FullRange or Ranges are set
TVector<TSerializedPointOrRange> Ranges;
std::optional<TSerializedTableRange> FullRange;
+ THashMap<TString, TShardInfo::TColumnWriteInfo> ColumnWrites;
};
THashMap<ui64, TShardParamValuesAndRanges> PartitionParamByKey(const NDq::TMkqlValueRef& param, const TTableId& tableId,
@@ -51,19 +56,34 @@ THashMap<ui64, TShardParamValuesAndRanges> PartitionParamByKey(const NDq::TMkqlV
NUdf::TUnboxedValue paramValue;
auto it = value.GetListIterator();
while (it.Next(paramValue)) {
- auto keyValue = MakeKeyCells(paramValue, table.KeyColumnTypes, keyColumnIndices, typeEnv, /* copyValues */ true);
+ auto keyValue = MakeKeyCells(paramValue, table.KeyColumnTypes, keyColumnIndices,
+ typeEnv, /* copyValues */ true);
Y_VERIFY_DEBUG(keyValue.size() == keyLen);
ui32 partitionIndex = FindKeyPartitionIndex(keyValue, key.GetPartitions(), table.KeyColumnTypes,
[] (const auto& partition) { return *partition.Range; });
+ auto point = TSerializedCellVec(TSerializedCellVec::Serialize(keyValue));
+
ui64 shardId = key.GetPartitions()[partitionIndex].ShardId;
+ auto& shardData = ret[shardId];
- shardParamValues[shardId].emplace_back(std::move(paramValue));
+ for (ui32 i = 0; i < structType->GetMembersCount(); ++i) {
+ TString columnName(structType->GetMemberName(i));
+ auto columnType = structType->GetMemberType(i);
+ auto columnValue = paramValue.GetElement(i);
- auto point = TSerializedCellVec(TSerializedCellVec::Serialize(keyValue));
+ ui32 sizeBytes = NDq::TDqDataSerializer::EstimateSize(columnValue, columnType);
+
+ // Sanity check, we only expect table columns in param values
+ Y_VERIFY_DEBUG(table.Columns.contains(columnName));
+
+ auto& columnWrite = shardData.ColumnWrites[columnName];
+ columnWrite.MaxValueSizeBytes = std::max(columnWrite.MaxValueSizeBytes, sizeBytes);
+ }
+
+ shardParamValues[shardId].emplace_back(std::move(paramValue));
- auto& shardData = ret[shardId];
if (key.GetPartitions()[partitionIndex].Range->IsPoint) {
// singular case when partition is just a point
shardData.FullRange.emplace(TSerializedTableRange(point.GetBuffer(), "", true, true));
@@ -838,6 +858,8 @@ THashMap<ui64, TShardInfo> PruneEffectPartitionsImpl(const TKqpTableKeys& tableK
shardInfo.KeyWriteRanges->Add(std::move(range));
}
}
+
+ shardInfo.ColumnWrites = shardData.ColumnWrites;
}
} else {
FillFullRange(stageInfo, shardInfoMap, /* read */ false);
diff --git a/ydb/core/kqp/executer/kqp_partition_helper.h b/ydb/core/kqp/executer/kqp_partition_helper.h
index c0afb56cf9..0691393983 100644
--- a/ydb/core/kqp/executer/kqp_partition_helper.h
+++ b/ydb/core/kqp/executer/kqp_partition_helper.h
@@ -13,11 +13,16 @@
namespace NKikimr::NKqp {
struct TShardInfo {
+ struct TColumnWriteInfo {
+ ui32 MaxValueSizeBytes = 0;
+ };
+
TMap<TString, NYql::NDqProto::TData> Params;
TMap<TString, NKikimr::NMiniKQL::TType*> ParamTypes;
TMaybe<TShardKeyRanges> KeyReadRanges; // empty -> no reads
TMaybe<TShardKeyRanges> KeyWriteRanges; // empty -> no writes
+ THashMap<TString, TColumnWriteInfo> ColumnWrites;
TString ToString(const TVector<NScheme::TTypeId>& keyTypes, const NScheme::TTypeRegistry& typeRegistry) const;
};
diff --git a/ydb/core/kqp/executer/kqp_scan_executer.cpp b/ydb/core/kqp/executer/kqp_scan_executer.cpp
index 189ca20da0..96349b6f56 100644
--- a/ydb/core/kqp/executer/kqp_scan_executer.cpp
+++ b/ydb/core/kqp/executer/kqp_scan_executer.cpp
@@ -16,9 +16,11 @@
#include <ydb/core/kqp/node/kqp_node.h>
#include <ydb/core/kqp/runtime/kqp_transport.h>
#include <ydb/core/kqp/prepare/kqp_query_plan.h>
+#include <ydb/core/ydb_convert/ydb_convert.h>
#include <ydb/library/yql/dq/runtime/dq_columns_resolve.h>
#include <ydb/library/yql/dq/tasks/dq_connection_builder.h>
+#include <ydb/library/yql/minikql/mkql_node_serialization.h>
#include <ydb/library/yql/public/issue/yql_issue_message.h>
#include <library/cpp/actors/core/actor_bootstrapped.h>
@@ -103,7 +105,7 @@ public:
if (shardIds.size() > 0) {
LOG_D("Start resolving tablets nodes... (" << shardIds.size() << ")");
- auto kqpShardsResolver = CreateKqpShardsResolver(SelfId(), TxId, std::move(shardIds), 0);
+ auto kqpShardsResolver = CreateKqpShardsResolver(SelfId(), TxId, std::move(shardIds));
KqpShardsResolverId = RegisterWithSameMailbox(kqpShardsResolver);
} else {
Execute();
@@ -371,7 +373,7 @@ private:
private:
void FillReadInfo(TTaskMeta& taskMeta, ui64 itemsLimit, bool reverse, bool sorted,
- const TMaybe<::NKqpProto::TKqpPhyOpReadOlapRanges>& readOlapRange)
+ NKikimr::NMiniKQL::TType* resultType, const TMaybe<::NKqpProto::TKqpPhyOpReadOlapRanges>& readOlapRange)
{
if (taskMeta.Reads && !taskMeta.Reads.GetRef().empty()) {
// Validate parameters
@@ -391,6 +393,26 @@ private:
taskMeta.ReadInfo.Reverse = reverse;
taskMeta.ReadInfo.Sorted = sorted;
+ if (resultType) {
+ YQL_ENSURE(resultType->GetKind() == NKikimr::NMiniKQL::TType::EKind::Struct
+ || resultType->GetKind() == NKikimr::NMiniKQL::TType::EKind::Tuple);
+
+ auto* resultStructType = static_cast<NKikimr::NMiniKQL::TStructType*>(resultType);
+ ui32 resultColsCount = resultStructType->GetMembersCount();
+
+ taskMeta.ReadInfo.ResultColumnsTypes.reserve(resultColsCount);
+ for (ui32 i = 0; i < resultColsCount; ++i) {
+ auto memberType = resultStructType->GetMemberType(i);
+ if (memberType->GetKind() == NKikimr::NMiniKQL::TType::EKind::Optional) {
+ memberType = static_cast<NKikimr::NMiniKQL::TOptionalType*>(memberType)->GetItemType();
+ }
+ YQL_ENSURE(memberType->GetKind() == NKikimr::NMiniKQL::TType::EKind::Data,
+ "Expected simple data types to be read from column shard");
+ auto memberDataType = static_cast<NKikimr::NMiniKQL::TDataType*>(memberType);
+ taskMeta.ReadInfo.ResultColumnsTypes.push_back(memberDataType->GetSchemeType());
+ }
+ }
+
if (!readOlapRange || readOlapRange->GetOlapProgram().empty()) {
return;
}
@@ -473,6 +495,7 @@ private:
TString itemsLimitParamName;
NDqProto::TData itemsLimitBytes;
NKikimr::NMiniKQL::TType* itemsLimitType = nullptr;
+ NKikimr::NMiniKQL::TType* resultType = nullptr;
// TODO: Support reverse, skipnull and limit for kReadRanges
if (op.GetTypeCase() == NKqpProto::TKqpPhyTableOperation::kReadRange) {
@@ -489,6 +512,9 @@ private:
reverse = op.GetReadOlapRange().GetReverse();
ExtractItemsLimit(stageInfo, op.GetReadOlapRange().GetItemsLimit(), holderFactory, typeEnv,
itemsLimit, itemsLimitParamName, itemsLimitBytes, itemsLimitType);
+ NKikimrMiniKQL::TType minikqlProtoResultType;
+ ConvertYdbTypeToMiniKQLType(op.GetReadOlapRange().GetResultType(), minikqlProtoResultType);
+ resultType = ImportTypeFromProto(minikqlProtoResultType, typeEnv);
}
for (auto& [shardId, shardInfo] : partitions) {
@@ -518,9 +544,9 @@ private:
if (op.GetTypeCase() == NKqpProto::TKqpPhyTableOperation::kReadOlapRange) {
const auto& readRange = op.GetReadOlapRange();
- FillReadInfo(task.Meta, itemsLimit, reverse, sorted, readRange);
+ FillReadInfo(task.Meta, itemsLimit, reverse, sorted, resultType, readRange);
} else {
- FillReadInfo(task.Meta, itemsLimit, reverse, sorted, TMaybe<::NKqpProto::TKqpPhyOpReadOlapRanges>());
+ FillReadInfo(task.Meta, itemsLimit, reverse, sorted, nullptr, TMaybe<::NKqpProto::TKqpPhyOpReadOlapRanges>());
}
if (!task.Meta.Reads) {
@@ -732,18 +758,17 @@ private:
YQL_ENSURE(task.Meta.Reads);
YQL_ENSURE(!task.Meta.Writes);
- for (auto& column : task.Meta.Reads->front().Columns) {
- auto* protoColumn = protoTaskMeta.AddColumns();
- protoColumn->SetId(column.Id);
- protoColumn->SetType(column.Type);
- protoColumn->SetName(column.Name);
- }
-
if (!task.Meta.Reads->empty()) {
protoTaskMeta.SetReverse(task.Meta.ReadInfo.Reverse);
protoTaskMeta.SetItemsLimit(task.Meta.ReadInfo.ItemsLimit);
protoTaskMeta.SetSorted(task.Meta.ReadInfo.Sorted);
+ for (auto columnType : task.Meta.ReadInfo.ResultColumnsTypes) {
+ auto* protoResultColumn = protoTaskMeta.AddResultColumns();
+ protoResultColumn->SetId(0);
+ protoResultColumn->SetType(columnType);
+ }
+
if (tableInfo.TableKind == ETableKind::Olap) {
auto* olapProgram = protoTaskMeta.MutableOlapProgram();
olapProgram->SetProgram(task.Meta.ReadInfo.OlapProgram.Program);
@@ -756,6 +781,13 @@ private:
} else {
YQL_ENSURE(task.Meta.ReadInfo.OlapProgram.Program.empty());
}
+
+ for (auto& column : task.Meta.Reads->front().Columns) {
+ auto* protoColumn = protoTaskMeta.AddColumns();
+ protoColumn->SetId(column.Id);
+ protoColumn->SetType(column.Type);
+ protoColumn->SetName(column.Name);
+ }
}
for (auto& read : *task.Meta.Reads) {
diff --git a/ydb/core/kqp/executer/kqp_shards_resolver.cpp b/ydb/core/kqp/executer/kqp_shards_resolver.cpp
index 506dfcf573..cebc64a7bb 100644
--- a/ydb/core/kqp/executer/kqp_shards_resolver.cpp
+++ b/ydb/core/kqp/executer/kqp_shards_resolver.cpp
@@ -1,6 +1,6 @@
#include "kqp_shards_resolver.h"
-#include <ydb/core/base/tablet_resolver.h>
+#include <ydb/core/base/tablet_pipecache.h>
#include <ydb/core/kqp/executer/kqp_executer.h>
#include <ydb/core/tx/scheme_cache/scheme_cache.h>
@@ -36,21 +36,19 @@ public:
}
public:
- TKqpShardsResolver(const TActorId& owner, ui64 txId, TSet<ui64>&& shardIds, float failRatio)
+ TKqpShardsResolver(const TActorId& owner, ui64 txId, TSet<ui64>&& shardIds)
: Owner(owner)
, TxId(txId)
, ShardIds(std::move(shardIds))
- , MaxFailedShards(ShardIds.size() * failRatio) {}
+ , TabletResolver(MakePipePeNodeCacheID(false))
+ {}
void Bootstrap() {
- auto tabletResolver = MakeTabletResolverID();
- auto resolveFlags = GetResolveFlags();
-
Y_ASSERT(ShardIds.size() > 0);
for (ui64 tabletId : ShardIds) {
LOG_T("Send request about tabletId: " << tabletId);
- bool sent = Send(tabletResolver, new TEvTabletResolver::TEvForward(tabletId, nullptr, resolveFlags));
+ bool sent = Send(TabletResolver, new TEvPipeCache::TEvGetTabletNode(tabletId));
Y_VERIFY_DEBUG(sent);
}
@@ -60,7 +58,7 @@ public:
private:
STATEFN(ResolveState) {
switch (ev->GetTypeRewrite()) {
- hFunc(TEvTabletResolver::TEvForwardResult, HandleResolve);
+ hFunc(TEvPipeCache::TEvGetTabletNodeResult, HandleResolve);
cFunc(TEvents::TSystem::Poison, PassAway);
default: {
LOG_C("Unexpected event: " << ev->GetTypeRewrite());
@@ -69,71 +67,44 @@ private:
}
}
- void HandleResolve(TEvTabletResolver::TEvForwardResult::TPtr& ev) {
+ void HandleResolve(TEvPipeCache::TEvGetTabletNodeResult::TPtr& ev) {
auto* msg = ev->Get();
- LOG_T("Got resolve event for tabletId: " << msg->TabletID << ": " << NKikimrProto::EReplyStatus_Name(msg->Status)
- << ", nodeId: " << msg->TabletActor.NodeId());
-
- if (msg->Status == NKikimrProto::EReplyStatus::OK) {
- Result[msg->TabletID] = msg->TabletActor.NodeId();
-
- if (Result.size() + FailedTablets == ShardIds.size()) {
- LOG_D("Done, success: " << Result.size() << ", failed: " << FailedTablets);
- ReplyAndDie();
- return;
+ LOG_T("Got resolve event for tabletId: " << msg->TabletId << ", nodeId: " << msg->NodeId);
+ if (msg->NodeId != 0) {
+ Result[msg->TabletId] = msg->NodeId;
+ if (Result.size() == ShardIds.size()) {
+ LOG_D("Shard resolve complete, resolved shards: " << Result.size());
+ return ReplyAndDie();
}
return;
}
- auto& state = States[msg->TabletID];
- if (state.Retries > MAX_RETRIES_COUNT) {
- ++FailedTablets;
- if (FailedTablets > MaxFailedShards) {
- LOG_W("Too many failed requests: " << FailedTablets << " (" << ShardIds.size() << ")");
- ReplyErrorAndDie(Ydb::StatusIds::GENERIC_ERROR, TStringBuilder()
- << "Too many unresolved shards: " << FailedTablets);
- return;
- }
-
- if (FailedTablets + Result.size() == ShardIds.size()) {
- LOG_D("Done, success: " << Result.size() << ", failed: " << FailedTablets);
- ReplyAndDie();
- return;
- }
+ ui32& retryCount = RetryCount[msg->TabletId];
+ if (retryCount > MAX_RETRIES_COUNT) {
+ TString reply = TStringBuilder() << "Failed to resolve tablet: " << msg->TabletId << " after several retries.";
+ LOG_W(reply);
+ ReplyErrorAndDie(Ydb::StatusIds::GENERIC_ERROR, std::move(reply));
+ return;
- return; // no more retries for this tabletId
}
- state.Retries++;
-
- // todo: backoff
- Send(MakeTabletResolverID(), new TEvTabletResolver::TEvForward(msg->TabletID, nullptr, GetResolveFlags()));
- }
-
- TEvTabletResolver::TEvForward::TResolveFlags GetResolveFlags() {
- TEvTabletResolver::TEvForward::TResolveFlags resolveFlags;
- resolveFlags.SetAllowFollower(false);
- resolveFlags.SetForceFollower(false);
- resolveFlags.SetPreferLocal(true);
- resolveFlags.SetForceLocal(false);
-
- return resolveFlags;
+ ++retryCount;
+ Send(TabletResolver, new TEvPipeCache::TEvGetTabletNode(msg->TabletId));
}
void ReplyErrorAndDie(Ydb::StatusIds::StatusCode status, TString&& message) {
- auto replyEv = MakeHolder<TEvKqpExecuter::TEvShardsResolveStatus>();
+ auto replyEv = std::make_unique<TEvKqpExecuter::TEvShardsResolveStatus>();
replyEv->Status = status;
replyEv->Issues.AddIssue(TIssue(message));
- Send(Owner, replyEv.Release());
+ Send(Owner, replyEv.release());
PassAway();
}
void ReplyAndDie() {
- auto replyEv = MakeHolder<TEvKqpExecuter::TEvShardsResolveStatus>();
+ auto replyEv = std::make_unique<TEvKqpExecuter::TEvShardsResolveStatus>();
replyEv->ShardNodes = std::move(Result);
- replyEv->Unresolved = FailedTablets;
- Send(Owner, replyEv.Release());
+ Send(Owner, replyEv.release());
PassAway();
}
@@ -141,21 +112,15 @@ private:
const TActorId Owner;
const ui64 TxId;
const TSet<ui64> ShardIds;
- const ui32 MaxFailedShards;
-
- struct TState {
- ui32 Retries = 0;
- };
- TMap<ui64, TState> States;
- ui32 FailedTablets = 0;
-
+ const TActorId TabletResolver;
+ TMap<ui64, ui32> RetryCount;
TMap<ui64, ui64> Result;
};
} // anonymous namespace
-IActor* CreateKqpShardsResolver(const TActorId& owner, ui64 txId, TSet<ui64>&& shardIds, float failRatio) {
- return new TKqpShardsResolver(owner, txId, std::move(shardIds), failRatio);
+IActor* CreateKqpShardsResolver(const TActorId& owner, ui64 txId, TSet<ui64>&& shardIds) {
+ return new TKqpShardsResolver(owner, txId, std::move(shardIds));
}
} // namespace NKikimr::NKqp
diff --git a/ydb/core/kqp/executer/kqp_shards_resolver.h b/ydb/core/kqp/executer/kqp_shards_resolver.h
index 8408d79c7b..720a6086ab 100644
--- a/ydb/core/kqp/executer/kqp_shards_resolver.h
+++ b/ydb/core/kqp/executer/kqp_shards_resolver.h
@@ -5,7 +5,6 @@
namespace NKikimr::NKqp {
-NActors::IActor* CreateKqpShardsResolver(const NActors::TActorId& owner, ui64 txId, TSet<ui64>&& shardIds,
- float failRatio);
+NActors::IActor* CreateKqpShardsResolver(const NActors::TActorId& owner, ui64 txId, TSet<ui64>&& shardIds);
} // namespace NKikimr::NKqp
diff --git a/ydb/core/kqp/executer/kqp_table_resolver.cpp b/ydb/core/kqp/executer/kqp_table_resolver.cpp
index 65345d3dc6..c0f3f327b2 100644
--- a/ydb/core/kqp/executer/kqp_table_resolver.cpp
+++ b/ydb/core/kqp/executer/kqp_table_resolver.cpp
@@ -58,18 +58,24 @@ private:
YQL_ENSURE(entries.size() == TableKeys.Size());
for (auto& entry : entries) {
- if (entry.Status != NSchemeCache::TSchemeCacheNavigate::EStatus::Ok) {
- timer.reset();
- if (entry.Status == NSchemeCache::TSchemeCacheNavigate::EStatus::PathErrorUnknown) {
+ switch (entry.Status) {
+ case NSchemeCache::TSchemeCacheNavigate::EStatus::Ok:
+ break;
+
+ case NSchemeCache::TSchemeCacheNavigate::EStatus::PathErrorUnknown:
+ case NSchemeCache::TSchemeCacheNavigate::EStatus::PathNotTable:
+ case NSchemeCache::TSchemeCacheNavigate::EStatus::TableCreationNotComplete:
+ ReplyErrorAndDie(Ydb::StatusIds::SCHEME_ERROR,
+ YqlIssue({}, NYql::TIssuesIds::KIKIMR_SCHEME_MISMATCH, TStringBuilder()
+ << "Table scheme error `" << JoinPath(entry.Path) << "`: " << entry.Status << '.'));
+ return;
+
+ default:
ReplyErrorAndDie(Ydb::StatusIds::UNAVAILABLE,
YqlIssue({}, NYql::TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE, TStringBuilder()
<< "Failed to resolve table `" << JoinPath(entry.Path) << "`: " << entry.Status << '.'));
- } else {
- ReplyErrorAndDie(Ydb::StatusIds::SCHEME_ERROR,
- YqlIssue({}, NYql::TIssuesIds::KIKIMR_SCHEME_ERROR, TStringBuilder()
- << "Failed to resolve table `" << JoinPath(entry.Path) << "`: " << entry.Status << '.'));
- }
- return;
+ return;
+
}
auto* table = TableKeys.FindTablePtr(entry.TableId);
@@ -125,7 +131,7 @@ private:
if (!columnId) {
timer.reset();
ReplyErrorAndDie(Ydb::StatusIds::SCHEME_ERROR,
- YqlIssue({}, NYql::TIssuesIds::KIKIMR_SCHEME_ERROR, TStringBuilder()
+ YqlIssue({}, NYql::TIssuesIds::KIKIMR_SCHEME_MISMATCH, TStringBuilder()
<< "Unknown column `" << columnName << "` at table `" << JoinPath(entry.Path) << "`."));
return;
}
@@ -191,7 +197,7 @@ private:
timer.reset();
ReplyErrorAndDie(Ydb::StatusIds::SCHEME_ERROR,
- YqlIssue({}, NYql::TIssuesIds::KIKIMR_SCHEME_ERROR, TStringBuilder()
+ YqlIssue({}, NYql::TIssuesIds::KIKIMR_SCHEME_MISMATCH, TStringBuilder()
<< "Failed to resolve table " << path << " keys: " << entry.Status << '.'));
return;
}
diff --git a/ydb/core/kqp/executer/kqp_tasks_graph.h b/ydb/core/kqp/executer/kqp_tasks_graph.h
index 1523ed12b3..bbf0c4d13e 100644
--- a/ydb/core/kqp/executer/kqp_tasks_graph.h
+++ b/ydb/core/kqp/executer/kqp_tasks_graph.h
@@ -109,6 +109,11 @@ struct TTaskMeta {
TString Name;
};
+ struct TColumnWrite {
+ TColumn Column;
+ ui32 MaxValueSizeBytes = 0;
+ };
+
struct TShardReadInfo {
TShardKeyRanges Ranges;
TVector<TColumn> Columns;
@@ -125,10 +130,27 @@ struct TTaskMeta {
bool Reverse = false;
bool Sorted = false;
TKqpOlapProgram OlapProgram;
+ TVector<NUdf::TDataTypeId> ResultColumnsTypes;
};
struct TWriteInfo {
+ ui64 UpdateOps = 0;
+ ui64 EraseOps = 0;
+
TShardKeyRanges Ranges;
+ THashMap<ui32, TColumnWrite> ColumnWrites;
+
+ void AddUpdateOp() {
+ ++UpdateOps;
+ }
+
+ void AddEraseOp() {
+ ++EraseOps;
+ }
+
+ bool IsPureEraseOp() const {
+ return (EraseOps > 0) && (UpdateOps == 0);
+ }
};
TReadInfo ReadInfo;
diff --git a/ydb/core/kqp/executer/ut/CMakeLists.txt b/ydb/core/kqp/executer/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kqp/executer/ut/CMakeLists.txt
+++ b/ydb/core/kqp/executer/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/expr_nodes/kqp_expr_nodes.json b/ydb/core/kqp/expr_nodes/kqp_expr_nodes.json
index 66d86ab9f1..6c3ebee989 100644
--- a/ydb/core/kqp/expr_nodes/kqp_expr_nodes.json
+++ b/ydb/core/kqp/expr_nodes/kqp_expr_nodes.json
@@ -442,6 +442,29 @@
]
},
{
+ "Name": "TKqpOlapAggOperation",
+ "Base": "TExprBase",
+ "Match": {"Type": "Tuple"},
+ "Children": [
+ {"Index": 0, "Name": "Name", "Type": "TCoAtom"},
+ {"Index": 1, "Name": "Type", "Type": "TCoAtom"},
+ {"Index": 2, "Name": "Column", "Type": "TCoAtom"}
+ ]
+ },
+ {
+ "Name": "TKqpOlapAggOperationList",
+ "ListBase": "TKqpOlapAggOperation"
+ },
+ {
+ "Name": "TKqpOlapAgg",
+ "Base": "TKqpOlapOperationBase",
+ "Match": {"Type": "Callable", "Name": "TKqpOlapAgg"},
+ "Children": [
+ {"Index": 1, "Name": "Aggregates", "Type": "TKqpOlapAggOperationList"},
+ {"Index": 2, "Name": "KeyColumns", "Type": "TCoAtomList"}
+ ]
+ },
+ {
"Name": "TKqpEnsure",
"Base": "TCallable",
"Match": {"Type": "Callable", "Name": "KqpEnsure"},
diff --git a/ydb/core/kqp/host/kqp_host.cpp b/ydb/core/kqp/host/kqp_host.cpp
index c3077bd597..552b536c0d 100644
--- a/ydb/core/kqp/host/kqp_host.cpp
+++ b/ydb/core/kqp/host/kqp_host.cpp
@@ -1823,7 +1823,7 @@ private:
TExprContext& ctx)
{
// TODO: Use empty tx context
- TIntrusivePtr<IKikimrTransactionContext> tempTxCtx = MakeIntrusive<TKqpTransactionContext>(true);
+ TIntrusivePtr<TKikimrTransactionContextBase> tempTxCtx = MakeIntrusive<TKqpTransactionContext>(true);
IKikimrQueryExecutor::TExecuteSettings execSettings;
execSettings.UseNewEngine = settings.UseNewEngine;
SetupDataQueryAstTransformer(execSettings, tempTxCtx);
@@ -2167,7 +2167,7 @@ private:
SessionCtx, FillSettings, ExecuteCtx, nullptr, sqlVersion);
}
- void SetupSession(TIntrusivePtr<IKikimrTransactionContext> txCtx) {
+ void SetupSession(TIntrusivePtr<TKikimrTransactionContextBase> txCtx) {
ExprCtx->Reset();
ExprCtx->Step.Done(TExprStep::ExprEval); // KIKIMR-8067
@@ -2183,7 +2183,7 @@ private:
}
}
- void SetupYqlTransformer(TIntrusivePtr<IKikimrTransactionContext> txCtx) {
+ void SetupYqlTransformer(TIntrusivePtr<TKikimrTransactionContextBase> txCtx) {
SetupSession(txCtx);
YqlTransformer->Rewind();
@@ -2193,7 +2193,7 @@ private:
}
void SetupDataQueryAstTransformer(const IKikimrQueryExecutor::TExecuteSettings& settings,
- TIntrusivePtr<IKikimrTransactionContext> txCtx = {})
+ TIntrusivePtr<TKikimrTransactionContextBase> txCtx = {})
{
SetupSession(txCtx);
@@ -2203,7 +2203,7 @@ private:
}
void SetupExecutePreparedTransformer(const IKikimrQueryExecutor::TExecuteSettings& settings,
- TIntrusivePtr<IKikimrTransactionContext> txCtx)
+ TIntrusivePtr<TKikimrTransactionContextBase> txCtx)
{
SetupSession(txCtx);
diff --git a/ydb/core/kqp/host/kqp_host_impl.h b/ydb/core/kqp/host/kqp_host_impl.h
index 51226338b3..d000655c9d 100644
--- a/ydb/core/kqp/host/kqp_host_impl.h
+++ b/ydb/core/kqp/host/kqp_host_impl.h
@@ -229,7 +229,7 @@ template<typename TResult, bool copyIssues = true>
class TKqpAsyncExecuteResultBase : public TKqpAsyncResultBase<TResult, copyIssues> {
public:
TKqpAsyncExecuteResultBase(const NYql::TExprNode::TPtr& exprRoot, NYql::TExprContext& exprCtx,
- NYql::IGraphTransformer& transformer, TIntrusivePtr<NYql::IKikimrTransactionContext> txCtx)
+ NYql::IGraphTransformer& transformer, TIntrusivePtr<NYql::TKikimrTransactionContextBase> txCtx)
: TKqpAsyncResultBase<TResult, copyIssues>(exprRoot, exprCtx, transformer,
[txCtx](const auto& status) {
if (txCtx) {
diff --git a/ydb/core/kqp/kqp_ic_gateway.cpp b/ydb/core/kqp/kqp_ic_gateway.cpp
index bef32238ea..b7c01d98f9 100644
--- a/ydb/core/kqp/kqp_ic_gateway.cpp
+++ b/ydb/core/kqp/kqp_ic_gateway.cpp
@@ -14,12 +14,13 @@
#include <ydb/core/kqp/executer/kqp_executer.h>
#include <ydb/core/kqp/rm/kqp_snapshot_manager.h>
#include <ydb/core/kqp/provider/yql_kikimr_gateway.h>
+#include <ydb/core/protos/console_config.pb.h>
#include <ydb/core/tx/schemeshard/schemeshard.h>
#include <ydb/core/tx/tx_proxy/proxy.h>
-#include <ydb/core/grpc_services/table_profiles.h>
#include <ydb/core/grpc_services/table_settings.h>
#include <ydb/core/grpc_services/local_rpc/local_rpc.h>
#include <ydb/core/ydb_convert/column_families.h>
+#include <ydb/core/ydb_convert/table_profiles.h>
#include <ydb/core/ydb_convert/ydb_convert.h>
#include <ydb/library/aclib/aclib.h>
#include <ydb/public/lib/base/msgbus_status.h>
@@ -1146,7 +1147,7 @@ public:
return;
}
- NGRpcService::TTableProfiles profiles;
+ TTableProfiles profiles;
profiles.Load(configResult.Config->GetTableProfilesConfig());
auto ev = MakeHolder<TRequest>();
@@ -2630,7 +2631,7 @@ private:
}
static bool FillCreateTableDesc(NYql::TKikimrTableMetadataPtr metadata,
- NKikimrSchemeOp::TTableDescription& tableDesc, const NGRpcService::TTableProfiles& profiles,
+ NKikimrSchemeOp::TTableDescription& tableDesc, const TTableProfiles& profiles,
Ydb::StatusIds::StatusCode& code, TString& error, TList<TString>& warnings)
{
Ydb::Table::CreateTableRequest createTableProto;
diff --git a/ydb/core/kqp/kqp_session_actor.cpp b/ydb/core/kqp/kqp_session_actor.cpp
index 884da540e4..87222eadfc 100644
--- a/ydb/core/kqp/kqp_session_actor.cpp
+++ b/ydb/core/kqp/kqp_session_actor.cpp
@@ -13,6 +13,8 @@
#include <ydb/core/kqp/provider/yql_kikimr_results.h>
#include <ydb/core/kqp/rm/kqp_snapshot_manager.h>
+#include <ydb/core/util/ulid.h>
+
#include <ydb/core/actorlib_impl/long_timer.h>
#include <ydb/core/base/appdata.h>
#include <ydb/core/base/cputime.h>
@@ -84,7 +86,8 @@ struct TKqpQueryState {
NLWTrace::TOrbit Orbit;
- TString TxId; // User tx
+ TULID TxId; // User tx
+ TString TxId_Human = "";
bool Commit = false;
};
@@ -148,6 +151,11 @@ public:
RequestCounters->Counters = Counters;
RequestCounters->DbCounters = Settings.DbCounters;
RequestCounters->TxProxyMon = MakeIntrusive<NTxProxy::TTxProxyMon>(AppData()->Counters);
+
+ FillSettings.AllResultsBytesLimit = Nothing();
+ FillSettings.RowsLimitPerWrite = Config->_ResultRowsLimit.Get().GetRef();
+ FillSettings.Format = IDataProvider::EResultFormat::Custom;
+ FillSettings.FormatDetails = TString(KikimrMkqlProtoFormat);
}
void Bootstrap() {
@@ -197,7 +205,7 @@ public:
Cleanup();
}
- TIntrusivePtr<TKqpTransactionContext> FindTransaction(const TString& id) {
+ TIntrusivePtr<TKqpTransactionContext> FindTransaction(const TULID& id) {
auto it = ExplicitTransactions.Find(id);
if (it != ExplicitTransactions.End()) {
auto& value = it.Value();
@@ -208,7 +216,7 @@ public:
return {};
}
- void RemoveTransaction(const TString& txId) {
+ void RemoveTransaction(const TULID& txId) {
auto it = ExplicitTransactions.FindWithoutPromote(txId);
if (it != ExplicitTransactions.End()) {
ExplicitTransactions.Erase(it);
@@ -221,17 +229,16 @@ public:
"Can't perform ROLLBACK_TX: TxControl isn't set in TQueryRequest");
const auto& txControl = queryRequest.GetTxControl();
QueryState->Commit = txControl.commit_tx();
- const auto& txId = txControl.tx_id();
+ TULID txId;
+ txId.ParseString(txControl.tx_id());
auto txCtx = FindTransaction(txId);
if (!txCtx) {
std::vector<TIssue> issues{YqlIssue(TPosition(), TIssuesIds::KIKIMR_TRANSACTION_NOT_FOUND,
- TStringBuilder() << "Transaction not found: " << QueryState->TxId)};
+ TStringBuilder() << "Transaction not found: " << txControl.tx_id())};
ReplyQueryError(requestInfo, Ydb::StatusIds::NOT_FOUND, "", MessageFromIssues(issues));
} else {
- QueryState->TxCtx = txCtx;
txCtx->Invalidate();
- TransactionsToBeAborted.emplace_back(txCtx);
- RemoveTransaction(txId);
+ InvalidateExplicitTransaction(txCtx, txId);
ReplySuccess();
}
@@ -248,18 +255,24 @@ public:
QueryState->Commit = txControl.commit_tx();
- const auto& txId = txControl.tx_id();
+ TULID txId;
+ txId.ParseString(txControl.tx_id());
auto txCtx = FindTransaction(txId);
LOG_D("queryRequest TxControl: " << txControl.DebugString() << " txCtx: " << (void*)txCtx.Get());
if (!txCtx) {
std::vector<TIssue> issues{YqlIssue(TPosition(), TIssuesIds::KIKIMR_TRANSACTION_NOT_FOUND,
- TStringBuilder() << "Transaction not found: " << QueryState->TxId)};
+ TStringBuilder() << "Transaction not found: " << txControl.tx_id())};
auto requestInfo = TKqpRequestInfo(QueryState->TraceId, SessionId);
ReplyQueryError(requestInfo, Ydb::StatusIds::NOT_FOUND, "", MessageFromIssues(issues));
return;
}
QueryState->TxCtx = std::move(txCtx);
QueryState->TxId = txId;
+ QueryState->TxId_Human = txControl.tx_id();
+ if (!CheckTransacionLocks()) {
+ return;
+ }
+
bool replied = ExecutePhyTx(/*query*/ nullptr, /*tx*/ nullptr, /*commit*/ true);
if (!replied) {
@@ -558,6 +571,13 @@ public:
txCtx->EffectiveIsolationLevel = NKikimrKqp::ISOLATION_LEVEL_READ_STALE;
txCtx->Readonly = true;
break;
+
+ case Ydb::Table::TransactionSettings::kSnapshotReadOnly:
+ // TODO: (KIKIMR-3374) Use separate isolation mode to avoid optimistic locks.
+ txCtx->EffectiveIsolationLevel = NKikimrKqp::ISOLATION_LEVEL_SERIALIZABLE;
+ txCtx->Readonly = true;
+ break;
+
case Ydb::Table::TransactionSettings::TX_MODE_NOT_SET:
YQL_ENSURE(false, "tx_mode not set, settings: " << settings);
break;
@@ -592,7 +612,8 @@ public:
}
void BeginTx(const Ydb::Table::TransactionSettings& settings) {
- QueryState->TxId = CreateGuidAsString();
+ QueryState->TxId = UlidGen.Next();
+ QueryState->TxId_Human = QueryState->TxId.ToString();
QueryState->TxCtx = MakeIntrusive<TKqpTransactionContext>(false);
SetIsolationLevel(settings);
CreateNewTx();
@@ -603,14 +624,11 @@ public:
}
std::pair<bool, TIssues> ApplyTableOperations(TKqpTransactionContext* txCtx, const NKqpProto::TKqpPhyQuery& query) {
- TVector<NKqpProto::TKqpTableOp> operations(query.GetTableOps().begin(), query.GetTableOps().end());
- TVector<NKqpProto::TKqpTableInfo> tableInfos(query.GetTableInfos().begin(), query.GetTableInfos().end());
-
auto isolationLevel = *txCtx->EffectiveIsolationLevel;
bool strictDml = Config->StrictDml.Get(Settings.Cluster).GetOrElse(false);
TExprContext ctx;
- bool success = txCtx->ApplyTableOperations(operations, tableInfos, isolationLevel, strictDml, EKikimrQueryType::Dml, ctx);
+ bool success = txCtx->ApplyTableOperations(query.GetTableOps(), query.GetTableInfos(), isolationLevel, strictDml, EKikimrQueryType::Dml, ctx);
return {success, ctx.IssueManager.GetIssues()};
}
@@ -626,16 +644,18 @@ public:
QueryState->Commit = txControl.commit_tx();
switch (txControl.tx_selector_case()) {
case Ydb::Table::TransactionControl::kTxId: {
- TString txId = txControl.tx_id();
+ TULID txId;
+ txId.ParseString(txControl.tx_id());
auto it = ExplicitTransactions.Find(txId);
if (it == ExplicitTransactions.End()) {
std::vector<TIssue> issues{YqlIssue(TPosition(), TIssuesIds::KIKIMR_TRANSACTION_NOT_FOUND,
- TStringBuilder() << "Transaction not found: " << QueryState->TxId)};
+ TStringBuilder() << "Transaction not found: " << txControl.tx_id())};
ReplyQueryError(requestInfo, Ydb::StatusIds::NOT_FOUND, "", MessageFromIssues(issues));
return false;
}
QueryState->TxCtx = *it;
QueryState->TxId = txId;
+ QueryState->TxId_Human = txControl.tx_id();
break;
}
case Ydb::Table::TransactionControl::kBeginTx: {
@@ -879,15 +899,15 @@ public:
}
void ExecuteOrDefer() {
- auto& txCtx = *QueryState->TxCtx;
-
- auto requestInfo = TKqpRequestInfo(QueryState->TraceId, SessionId);
- if (!CheckTransacionLocks()) {
+ if (!(QueryState->PreparedQuery
+ && QueryState->CurrentTx < QueryState->PreparedQuery->GetPhysicalQuery().TransactionsSize()))
+ {
+ ReplySuccess();
return;
}
-
- const NKqpProto::TKqpPhyQuery& phyQuery = QueryState->PreparedQuery->GetPhysicalQuery();
- YQL_ENSURE(QueryState->CurrentTx < phyQuery.TransactionsSize());
+ auto& txCtx = *QueryState->TxCtx;
+ auto requestInfo = TKqpRequestInfo(QueryState->TraceId, SessionId);
+ const auto& phyQuery = QueryState->PreparedQuery->GetPhysicalQuery();
auto tx = std::shared_ptr<const NKqpProto::TKqpPhyTx>(QueryState->PreparedQuery,
&phyQuery.GetTransactions(QueryState->CurrentTx));
@@ -907,6 +927,9 @@ public:
break;
}
}
+ if (!CheckTransacionLocks()) {
+ return;
+ }
bool commit = QueryState->Commit && QueryState->CurrentTx == phyQuery.TransactionsSize() - 1;
if (tx || commit) {
@@ -927,10 +950,6 @@ public:
LOG_D("ExecutePhyTx, tx: " << (void*)tx.get() << " commit: " << commit
<< " txCtx.DeferredEffects.size(): " << txCtx.DeferredEffects.Size());
- if (!CheckTransacionLocks()) {
- return true;
- }
-
// TODO Handle timeouts -- request.Timeout, request.CancelAfter
if (tx) {
@@ -1037,11 +1056,18 @@ public:
return true;
}
+ void InvalidateQuery() {
+ auto invalidateEv = MakeHolder<TEvKqp::TEvCompileInvalidateRequest>(
+ QueryState->CompileResult->Uid, Settings.DbCounters);
+
+ Send(MakeKqpCompileServiceID(SelfId().NodeId()), invalidateEv.Release());
+ }
+
void HandleExecute(TEvKqpExecuter::TEvTxResponse::TPtr& ev) {
auto* response = ev->Get()->Record.MutableResponse();
auto requestInfo = TKqpRequestInfo(QueryState->TraceId, SessionId);
LOG_D(SelfId() << " " << requestInfo << " TEvTxResponse, CurrentTx: " << QueryState->CurrentTx
- << " response: " << response->DebugString());
+ << " response.status: " << response->GetStatus() << " results.size: " << response->GetResult().ResultsSize());
ExecuterId = TActorId{};
if (response->GetStatus() != Ydb::StatusIds::SUCCESS) {
@@ -1049,20 +1075,33 @@ public:
LOG_I(SelfId() << " " << requestInfo << " TEvTxResponse has non-success status, CurrentTx: "
<< QueryState->CurrentTx << " response->DebugString(): " << response->DebugString());
- auto& txCtx = QueryState->TxCtx;
- txCtx->Invalidate();
- TransactionsToBeAborted.emplace_back(txCtx);
- RemoveTransaction(QueryState->TxId);
+ QueryState->TxCtx->Invalidate();
+ auto status = response->GetStatus();
TIssues issues;
- issues.AddIssue(YqlIssue({}, TIssuesIds::CORE_EXEC, "Execution"));
- TIssues subIssues;
- IssuesFromMessage(response->GetIssues(), subIssues);
- for (auto& i : subIssues) {
- issues.back().AddSubIssue(MakeIntrusive<TIssue>(i));
+ IssuesFromMessage(response->GetIssues(), issues);
+
+ // Invalidate query cache on scheme/internal errors
+ switch (status) {
+ case Ydb::StatusIds::SCHEME_ERROR:
+ case Ydb::StatusIds::INTERNAL_ERROR:
+ InvalidateQuery();
+ issues.AddIssue(YqlIssue(TPosition(), TIssuesIds::KIKIMR_QUERY_INVALIDATED,
+ TStringBuilder() << "Query invalidated on scheme/internal error."));
+
+ // SCHEME_ERROR during execution is a soft (retriable) error, we abort query execution,
+ // invalidate query cache, and return ABORTED as retriable status.
+ if (status == Ydb::StatusIds::SCHEME_ERROR) {
+ status = Ydb::StatusIds::ABORTED;
+ }
+
+ break;
+
+ default:
+ break;
}
- ReplyQueryError(requestInfo, GetYdbStatus(issues), "", MessageFromIssues(issues));
+ ReplyQueryError(requestInfo, status, "", MessageFromIssues(issues));
return;
}
@@ -1085,13 +1124,7 @@ public:
exec->Swap(txResult.MutableStats());
}
- if (QueryState->PreparedQuery &&
- QueryState->CurrentTx < QueryState->PreparedQuery->GetPhysicalQuery().TransactionsSize())
- {
ExecuteOrDefer();
- } else {
- ReplySuccess();
- }
}
void HandleExecute(TEvKqpExecuter::TEvStreamData::TPtr& ev) {
@@ -1243,13 +1276,22 @@ public:
}
}
+ template<class TEvRecord>
+ void AddTrailingInfo(TEvRecord& record) {
+ if (ShutdownState) {
+ LOG_D("Session [" << SessionId << "] is closing, set trailing metadata to request session shutdown");
+ record.SetWorkerIsClosing(true);
+ }
+ }
+
void FillTxInfo(NKikimrKqp::TQueryResponse* response) {
YQL_ENSURE(QueryState);
if (QueryState->Commit) {
RemoveTransaction(QueryState->TxId);
- QueryState->TxId = "";
+ QueryState->TxId = CreateEmptyULID();
+ QueryState->TxId_Human = "";
}
- response->MutableTxMeta()->set_id(QueryState->TxId);
+ response->MutableTxMeta()->set_id(QueryState->TxId_Human);
if (QueryState->TxCtx) {
auto txInfo = QueryState->TxCtx->GetInfo();
@@ -1366,7 +1408,8 @@ public:
if (QueryState->PreparedQuery) {
auto& phyQuery = QueryState->PreparedQuery->GetPhysicalQuery();
- for (auto& rb : phyQuery.GetResultBindings()) {
+ for (size_t i = 0; i < phyQuery.ResultBindingsSize(); ++i) {
+ auto& rb = phyQuery.GetResultBindings(i);
auto txIndex = rb.GetTxResultBinding().GetTxIndex();
auto resultIndex = rb.GetTxResultBinding().GetResultIndex();
@@ -1374,10 +1417,19 @@ public:
YQL_ENSURE(txIndex < txResults.size());
YQL_ENSURE(resultIndex < txResults[txIndex].size());
- IDataProvider::TFillSettings fillSettings;
- //TODO: shoud it be taken from PreparedQuery->GetResults().GetRowsLimit() ?
- fillSettings.RowsLimitPerWrite = Config->_ResultRowsLimit.Get().GetRef();
- auto* protoRes = KikimrResultToProto(txResults[txIndex][resultIndex], {}, fillSettings, arena.get());
+ std::optional<IDataProvider::TFillSettings> fillSettings;
+ if (QueryState->PreparedQuery->ResultsSize()) {
+ YQL_ENSURE(phyQuery.ResultBindingsSize() == QueryState->PreparedQuery->ResultsSize(), ""
+ << phyQuery.ResultBindingsSize() << " != " << QueryState->PreparedQuery->ResultsSize());
+ const auto& result = QueryState->PreparedQuery->GetResults(i);
+ if (result.GetRowsLimit()) {
+ fillSettings = FillSettings;
+ fillSettings->RowsLimitPerWrite = result.GetRowsLimit();
+ }
+ }
+
+ auto* protoRes = KikimrResultToProto(txResults[txIndex][resultIndex], {},
+ fillSettings.value_or(FillSettings), arena.get());
response->AddResults()->Swap(protoRes);
}
}
@@ -1396,23 +1448,25 @@ public:
FillCompileStatus(compileResult, QueryResponse->Record);
auto& queryRequest = QueryState->Request;
- TString txId = "";
+ TULID txId = CreateEmptyULID();
+ TString txId_Human = "";
if (queryRequest.HasTxControl()) {
auto& txControl = queryRequest.GetTxControl();
if (txControl.tx_selector_case() == Ydb::Table::TransactionControl::kTxId) {
- txId = txControl.tx_id();
+ txId.ParseString(txControl.tx_id());
+ txId_Human = txControl.tx_id();
}
}
- LOG_W("ReplyQueryCompileError, status" << compileResult->Status << " remove tx with tx_id: " << txId);
+ LOG_W("ReplyQueryCompileError, status" << compileResult->Status << " remove tx with tx_id: " << txId_Human);
auto txCtx = FindTransaction(txId);
if (txCtx) {
txCtx->Invalidate();
- TransactionsToBeAborted.emplace_back(txCtx);
- RemoveTransaction(txId);
+ InvalidateExplicitTransaction(txCtx, txId);
}
- txId = "";
+ txId = CreateEmptyULID();
+ txId_Human = "";
auto* record = &QueryResponse->Record.GetRef();
FillTxInfo(record->MutableResponse());
@@ -1428,7 +1482,7 @@ public:
auto response = TEvKqp::TEvProcessResponse::Error(ydbStatus, message);
- //AddTrailingInfo(response->Record);
+ AddTrailingInfo(response->Record);
Send(sender, response.Release(), 0, proxyRequestId);
}
@@ -1466,6 +1520,8 @@ public:
auto& response = *record.MutableResponse();
const auto& status = record.GetYdbStatus();
+ AddTrailingInfo(record);
+
if (QueryState->KeepSession) {
response.SetSessionId(SessionId);
}
@@ -1636,9 +1692,18 @@ public:
Cleanup(true);
}
+ void InvalidateExplicitTransaction(TIntrusivePtr<TKqpTransactionContext> txCtx, const TULID& txId) {
+ TransactionsToBeAborted.emplace_back(std::move(txCtx));
+ RemoveTransaction(txId);
+ }
+
void Cleanup(bool isFinal = false) {
isFinal = isFinal || !QueryState->KeepSession;
+ if (QueryState && QueryState->TxCtx && QueryState->TxCtx->IsInvalidated()) {
+ InvalidateExplicitTransaction(QueryState->TxCtx, QueryState->TxId);
+ }
+
if (isFinal)
Counters->ReportSessionActorClosedRequest(Settings.DbCounters);
@@ -1898,6 +1963,14 @@ private:
}
private:
+
+ TULID CreateEmptyULID() {
+ TULID next;
+ memset(next.Data, 0, sizeof(next.Data));
+ return next;
+ }
+
+private:
TActorId Owner;
TString SessionId;
@@ -1914,7 +1987,8 @@ private:
std::unique_ptr<TKqpCleanupCtx> CleanupCtx;
ui32 QueryId = 0;
TKikimrConfiguration::TPtr Config;
- TLRUCache<TString, TIntrusivePtr<TKqpTransactionContext>> ExplicitTransactions;
+ IDataProvider::TFillSettings FillSettings;
+ TLRUCache<TULID, TIntrusivePtr<TKqpTransactionContext>> ExplicitTransactions;
std::vector<TIntrusivePtr<TKqpTransactionContext>> TransactionsToBeAborted;
ui64 EvictedTx = 0;
std::unique_ptr<TEvKqp::TEvQueryResponse> QueryResponse;
@@ -1922,6 +1996,8 @@ private:
TActorId IdleTimerActorId;
ui32 IdleTimerId = 0;
std::optional<TSessionShutdownState> ShutdownState;
+
+ TULIDGenerator UlidGen;
};
} // namespace
diff --git a/ydb/core/kqp/kqp_worker_actor.cpp b/ydb/core/kqp/kqp_worker_actor.cpp
index a053787651..9f2dfb521e 100644
--- a/ydb/core/kqp/kqp_worker_actor.cpp
+++ b/ydb/core/kqp/kqp_worker_actor.cpp
@@ -683,61 +683,77 @@ public:
}
STFUNC(ReadyState) {
- switch (ev->GetTypeRewrite()) {
- HFunc(TEvKqp::TEvQueryRequest, HandleReady);
- HFunc(TEvKqp::TEvCompileResponse, HandleReady);
- HFunc(TEvKqp::TEvCloseSessionRequest, HandleReady);
- HFunc(TEvKqp::TEvPingSessionRequest, HandleReady);
- HFunc(TEvKqp::TEvContinueProcess, HandleReady);
- HFunc(TEvKqp::TEvIdleTimeout, HandleReady);
- HFunc(TEvKqp::TEvInitiateSessionShutdown, HandleInitiateShutdown);
- HFunc(TEvKqp::TEvContinueShutdown, HandleContinueShutdown);
- default:
- Y_FAIL("TKqpWorkerActor, ReadyState: unexpected event 0x%08" PRIx32, ev->GetTypeRewrite());
+ try {
+ switch (ev->GetTypeRewrite()) {
+ HFunc(TEvKqp::TEvQueryRequest, HandleReady);
+ HFunc(TEvKqp::TEvCompileResponse, HandleReady);
+ HFunc(TEvKqp::TEvCloseSessionRequest, HandleReady);
+ HFunc(TEvKqp::TEvPingSessionRequest, HandleReady);
+ HFunc(TEvKqp::TEvContinueProcess, HandleReady);
+ HFunc(TEvKqp::TEvIdleTimeout, HandleReady);
+ HFunc(TEvKqp::TEvInitiateSessionShutdown, HandleInitiateShutdown);
+ HFunc(TEvKqp::TEvContinueShutdown, HandleContinueShutdown);
+ default:
+ UnexpectedEvent("ReadyState", ev, ctx);
+ }
+ } catch (const yexception& ex) {
+ InternalError(ex.what(), ctx);
}
}
STFUNC(CompileQueryState) {
- switch (ev->GetTypeRewrite()) {
- HFunc(TEvKqp::TEvQueryRequest, HandleCompileQuery);
- HFunc(TEvKqp::TEvCompileResponse, HandleCompileQuery);
- HFunc(TEvKqp::TEvCloseSessionRequest, HandleCompileQuery);
- HFunc(TEvKqp::TEvPingSessionRequest, HandleCompileQuery);
- HFunc(TEvKqp::TEvIdleTimeout, HandleCompileQuery);
- HFunc(TEvKqp::TEvInitiateSessionShutdown, HandleInitiateShutdown);
- HFunc(TEvKqp::TEvContinueShutdown, HandleContinueShutdown);
- default:
- Y_FAIL("TKqpWorkerActor, CompileQueryState: unexpected event 0x%08" PRIx32, ev->GetTypeRewrite());
+ try {
+ switch (ev->GetTypeRewrite()) {
+ HFunc(TEvKqp::TEvQueryRequest, HandleCompileQuery);
+ HFunc(TEvKqp::TEvCompileResponse, HandleCompileQuery);
+ HFunc(TEvKqp::TEvCloseSessionRequest, HandleCompileQuery);
+ HFunc(TEvKqp::TEvPingSessionRequest, HandleCompileQuery);
+ HFunc(TEvKqp::TEvIdleTimeout, HandleCompileQuery);
+ HFunc(TEvKqp::TEvInitiateSessionShutdown, HandleInitiateShutdown);
+ HFunc(TEvKqp::TEvContinueShutdown, HandleContinueShutdown);
+ default:
+ UnexpectedEvent("CompileQueryState", ev, ctx);
+ }
+ } catch (const yexception& ex) {
+ InternalError(ex.what(), ctx);
}
}
STFUNC(PerformQueryState) {
- switch (ev->GetTypeRewrite()) {
- HFunc(TEvKqp::TEvQueryRequest, HandlePerformQuery);
- HFunc(TEvKqp::TEvCompileResponse, HandlePerformQuery);
- HFunc(TEvKqp::TEvCloseSessionRequest, HandlePerformQuery);
- HFunc(TEvKqp::TEvPingSessionRequest, HandlePerformQuery);
- HFunc(TEvKqp::TEvContinueProcess, HandlePerformQuery);
- HFunc(TEvKqp::TEvIdleTimeout, HandlePerformQuery);
- HFunc(TEvKqp::TEvInitiateSessionShutdown, HandleInitiateShutdown);
- HFunc(TEvKqp::TEvContinueShutdown, HandleContinueShutdown);
- default:
- Y_FAIL("TKqpWorkerActor, PerformQueryState: unexpected event 0x%08" PRIx32, ev->GetTypeRewrite());
+ try {
+ switch (ev->GetTypeRewrite()) {
+ HFunc(TEvKqp::TEvQueryRequest, HandlePerformQuery);
+ HFunc(TEvKqp::TEvCompileResponse, HandlePerformQuery);
+ HFunc(TEvKqp::TEvCloseSessionRequest, HandlePerformQuery);
+ HFunc(TEvKqp::TEvPingSessionRequest, HandlePerformQuery);
+ HFunc(TEvKqp::TEvContinueProcess, HandlePerformQuery);
+ HFunc(TEvKqp::TEvIdleTimeout, HandlePerformQuery);
+ HFunc(TEvKqp::TEvInitiateSessionShutdown, HandleInitiateShutdown);
+ HFunc(TEvKqp::TEvContinueShutdown, HandleContinueShutdown);
+ default:
+ UnexpectedEvent("PerformQueryState", ev, ctx);
+ }
+ } catch (const yexception& ex) {
+ InternalError(ex.what(), ctx);
}
}
STFUNC(PerformCleanupState) {
- switch (ev->GetTypeRewrite()) {
- HFunc(TEvKqp::TEvQueryRequest, HandlePerformCleanup);
- HFunc(TEvKqp::TEvCompileResponse, HandlePerformCleanup);
- HFunc(TEvKqp::TEvCloseSessionRequest, HandlePerformCleanup);
- HFunc(TEvKqp::TEvPingSessionRequest, HandlePerformCleanup);
- HFunc(TEvKqp::TEvContinueProcess, HandlePerformCleanup);
- HFunc(TEvKqp::TEvIdleTimeout, HandlePerformCleanup);
- HFunc(TEvKqp::TEvInitiateSessionShutdown, HandleInitiateShutdown);
- HFunc(TEvKqp::TEvContinueShutdown, HandleContinueShutdown);
- default:
- Y_FAIL("TKqpWorkerActor, PerformCleanupState: unexpected event 0x%08" PRIx32, ev->GetTypeRewrite());
+ try {
+ switch (ev->GetTypeRewrite()) {
+ HFunc(TEvKqp::TEvQueryRequest, HandlePerformCleanup);
+ HFunc(TEvKqp::TEvCompileResponse, HandlePerformCleanup);
+ HFunc(TEvKqp::TEvCloseSessionRequest, HandlePerformCleanup);
+ HFunc(TEvKqp::TEvPingSessionRequest, HandlePerformCleanup);
+ HFunc(TEvKqp::TEvContinueProcess, HandlePerformCleanup);
+ HFunc(TEvKqp::TEvIdleTimeout, HandlePerformCleanup);
+ HFunc(TEvKqp::TEvInitiateSessionShutdown, HandleInitiateShutdown);
+ HFunc(TEvKqp::TEvContinueShutdown, HandleContinueShutdown);
+ default:
+ UnexpectedEvent("PerformCleanupState", ev, ctx);
+ }
+ } catch (const yexception& ex) {
+ InternalError(ex.what(), ctx);
}
}
@@ -795,6 +811,12 @@ private:
readonly = true;
break;
+ case Ydb::Table::TransactionSettings::kSnapshotReadOnly:
+ // TODO: (KIKIMR-3374) Use separate isolation mode to avoid optimistic locks.
+ isolation = NKikimrKqp::ISOLATION_LEVEL_SERIALIZABLE;
+ readonly = true;
+ break;
+
default:
break;
};
@@ -2095,6 +2117,37 @@ private:
}
private:
+ void UnexpectedEvent(const TString& state, TAutoPtr<NActors::IEventHandle>& ev, const TActorContext& ctx) {
+ TString message = TStringBuilder() << "TKqpWorkerActor in state "
+ << state << " received unexpected event "
+ << TypeName(*ev.Get()->GetBase()) << Sprintf("(0x%08" PRIx32 ")", ev->GetTypeRewrite());
+
+ InternalError(message, ctx);
+ }
+
+ void InternalError(const TString& message, const TActorContext& ctx) {
+ LOG_ERROR_S(ctx, NKikimrServices::KQP_WORKER, "Internal error, SelfId: "
+ << SelfId() << ", message: " << message);
+
+ if (QueryState) {
+ auto requestInfo = TKqpRequestInfo(QueryState->TraceId, SessionId);
+ ReplyProcessError(QueryState->Sender, QueryState->ProxyRequestId, requestInfo,
+ Ydb::StatusIds::INTERNAL_ERROR, message, ctx);
+ }
+
+ auto lifeSpan = TInstant::Now() - CreationTime;
+ Counters->ReportWorkerFinished(Settings.DbCounters, lifeSpan);
+
+ auto closeEv = MakeHolder<TEvKqp::TEvCloseSessionResponse>();
+ closeEv->Record.SetStatus(Ydb::StatusIds::SUCCESS);
+ closeEv->Record.MutableResponse()->SetSessionId(SessionId);
+ closeEv->Record.MutableResponse()->SetClosed(true);
+ ctx.Send(Owner, closeEv.Release());
+
+ Die(ctx);
+ }
+
+private:
TActorId Owner;
TString SessionId;
TKqpWorkerSettings Settings;
diff --git a/ydb/core/kqp/node/CMakeLists.txt b/ydb/core/kqp/node/CMakeLists.txt
index a8695c6b0a..d74f7d9009 100644
--- a/ydb/core/kqp/node/CMakeLists.txt
+++ b/ydb/core/kqp/node/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-kqp-node)
target_compile_options(core-kqp-node PRIVATE
diff --git a/ydb/core/kqp/node/kqp_node_ut.cpp b/ydb/core/kqp/node/kqp_node_ut.cpp
index 6023a0b817..c131bd69f3 100644
--- a/ydb/core/kqp/node/kqp_node_ut.cpp
+++ b/ydb/core/kqp/node/kqp_node_ut.cpp
@@ -152,7 +152,7 @@ public:
auto now = Now();
Runtime->UpdateCurrentTime(now);
- Counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ Counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
KqpCounters = MakeIntrusive<TKqpCounters>(Counters);
auto resourceBrokerConfig = MakeResourceBrokerTestConfig();
@@ -259,7 +259,7 @@ public:
private:
THolder<TTestBasicRuntime> Runtime;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TIntrusivePtr<TKqpCounters> KqpCounters;
THolder<TMockKqpComputeActorFactory> CompFactory;
TActorId ResourceBrokerActorId;
diff --git a/ydb/core/kqp/node/ut/CMakeLists.txt b/ydb/core/kqp/node/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kqp/node/ut/CMakeLists.txt
+++ b/ydb/core/kqp/node/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/opt/CMakeLists.txt b/ydb/core/kqp/opt/CMakeLists.txt
index 18fb177fad..52ec5e53da 100644
--- a/ydb/core/kqp/opt/CMakeLists.txt
+++ b/ydb/core/kqp/opt/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(logical)
+add_subdirectory(peephole)
+add_subdirectory(physical)
add_library(core-kqp-opt)
target_compile_options(core-kqp-opt PRIVATE
diff --git a/ydb/core/kqp/opt/kqp_opt_kql.cpp b/ydb/core/kqp/opt/kqp_opt_kql.cpp
index 709ae12b00..c9f1c84697 100644
--- a/ydb/core/kqp/opt/kqp_opt_kql.cpp
+++ b/ydb/core/kqp/opt/kqp_opt_kql.cpp
@@ -30,7 +30,7 @@ bool UseReadTableRanges(const TKikimrTableDescription& tableData, const TIntrusi
if (kqpCtx->IsScanQuery() && kqpCtx->Config->FeatureFlags.GetEnablePredicateExtractForScanQueries()) {
return true;
}
-
+
if (kqpCtx->IsDataQuery() && kqpCtx->Config->FeatureFlags.GetEnablePredicateExtractForDataQueries()) {
return true;
}
@@ -51,28 +51,25 @@ bool HasIndexesToWrite(const TKikimrTableDescription& tableData) {
return hasIndexesToWrite;
}
-TExprBase BuildReadTable(const TKiReadTable& read, const TKikimrTableDescription& tableData,
- bool withSystemColumns, TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
+TExprBase BuildReadTable(const TCoAtomList& columns, TPositionHandle pos, const TKikimrTableDescription& tableData,
+ TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
- bool unwrapValues = HasSetting(read.Settings().Ref(), "unwrap_values");
-
TExprNode::TPtr readTable;
- const auto& columns = read.GetSelectColumns(ctx, tableData, withSystemColumns);
- const auto& tableMeta = BuildTableMeta(tableData, read.Pos(), ctx);
+ const auto& tableMeta = BuildTableMeta(tableData, pos, ctx);
if (UseReadTableRanges(tableData, kqpCtx)) {
- readTable = Build<TKqlReadTableRanges>(ctx, read.Pos())
+ readTable = Build<TKqlReadTableRanges>(ctx, pos)
.Table(tableMeta)
.Ranges<TCoVoid>()
.Build()
- .Columns(read.GetSelectColumns(ctx, tableData, withSystemColumns))
+ .Columns(columns)
.Settings()
.Build()
.ExplainPrompt()
.Build()
.Done().Ptr();
} else {
- readTable = Build<TKqlReadTable>(ctx, read.Pos())
+ readTable = Build<TKqlReadTable>(ctx, pos)
.Table(tableMeta)
.Range()
.From<TKqlKeyInc>()
@@ -86,7 +83,18 @@ TExprBase BuildReadTable(const TKiReadTable& read, const TKikimrTableDescription
.Done().Ptr();
}
- auto readNode = TExprBase(readTable);
+ return TExprBase(readTable);
+
+}
+
+TExprBase BuildReadTable(const TKiReadTable& read, const TKikimrTableDescription& tableData,
+ bool withSystemColumns, TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
+{
+ bool unwrapValues = HasSetting(read.Settings().Ref(), "unwrap_values");
+
+ const auto& columns = read.GetSelectColumns(ctx, tableData, withSystemColumns);
+
+ auto readNode = BuildReadTable(columns, read.Pos(), tableData, ctx, kqpCtx);
return unwrapValues
? UnwrapKiReadTableValues(readNode, tableData, columns, ctx)
@@ -236,23 +244,12 @@ TExprBase BuildDeleteTableWithIndex(const TKiWriteTable& write, const TKikimrTab
}
TExprBase BuildRowsToDelete(const TKikimrTableDescription& tableData, bool withSystemColumns, const TCoLambda& filter,
- const TPositionHandle pos, TExprContext& ctx)
+ const TPositionHandle pos, TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
const auto tableMeta = BuildTableMeta(tableData, pos, ctx);
const auto tableColumns = BuildColumnsList(tableData, pos, ctx, withSystemColumns);
- const auto allRows = Build<TKqlReadTable>(ctx, pos)
- .Table(tableMeta)
- .Range()
- .From<TKqlKeyInc>()
- .Build()
- .To<TKqlKeyInc>()
- .Build()
- .Build()
- .Columns(tableColumns)
- .Settings()
- .Build()
- .Done();
+ const auto allRows = BuildReadTable(tableColumns, pos, tableData, ctx, kqpCtx);
return Build<TCoFilter>(ctx, pos)
.Input(allRows)
@@ -261,9 +258,9 @@ TExprBase BuildRowsToDelete(const TKikimrTableDescription& tableData, bool withS
}
TExprBase BuildDeleteTable(const TKiDeleteTable& del, const TKikimrTableDescription& tableData, bool withSystemColumns,
- TExprContext& ctx)
+ TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
- auto rowsToDelete = BuildRowsToDelete(tableData, withSystemColumns, del.Filter(), del.Pos(), ctx);
+ auto rowsToDelete = BuildRowsToDelete(tableData, withSystemColumns, del.Filter(), del.Pos(), ctx, kqpCtx);
auto keysToDelete = ProjectColumns(rowsToDelete, tableData.Metadata->KeyColumnNames, ctx);
return Build<TKqlDeleteRows>(ctx, del.Pos())
@@ -273,9 +270,9 @@ TExprBase BuildDeleteTable(const TKiDeleteTable& del, const TKikimrTableDescript
}
TVector<TExprBase> BuildDeleteTableWithIndex(const TKiDeleteTable& del, const TKikimrTableDescription& tableData,
- bool withSystemColumns, TExprContext& ctx)
+ bool withSystemColumns, TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
- auto rowsToDelete = BuildRowsToDelete(tableData, withSystemColumns, del.Filter(), del.Pos(), ctx);
+ auto rowsToDelete = BuildRowsToDelete(tableData, withSystemColumns, del.Filter(), del.Pos(), ctx, kqpCtx);
auto indexes = BuildSecondaryIndexVector(tableData, del.Pos(), ctx, nullptr,
[] (const TKikimrTableMetadata& meta, TPositionHandle pos, TExprContext& ctx) -> TExprBase {
@@ -320,20 +317,9 @@ TVector<TExprBase> BuildDeleteTableWithIndex(const TKiDeleteTable& del, const TK
}
TExprBase BuildRowsToUpdate(const TKikimrTableDescription& tableData, bool withSystemColumns, const TCoLambda& filter,
- const TPositionHandle pos, TExprContext& ctx)
+ const TPositionHandle pos, TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
- auto kqlReadTable = Build<TKqlReadTable>(ctx, pos)
- .Table(BuildTableMeta(tableData, pos, ctx))
- .Range()
- .From<TKqlKeyInc>()
- .Build()
- .To<TKqlKeyInc>()
- .Build()
- .Build()
- .Columns(BuildColumnsList(tableData, pos, ctx, withSystemColumns))
- .Settings()
- .Build()
- .Done();
+ auto kqlReadTable = BuildReadTable(BuildColumnsList(tableData, pos, ctx, withSystemColumns), pos, tableData, ctx, kqpCtx);
return Build<TCoFilter>(ctx, pos)
.Input(kqlReadTable)
@@ -398,9 +384,9 @@ THashSet<TStringBuf> GetUpdateColumns(const TKikimrTableDescription& tableData,
}
TExprBase BuildUpdateTable(const TKiUpdateTable& update, const TKikimrTableDescription& tableData,
- bool withSystemColumns, TExprContext& ctx)
+ bool withSystemColumns, TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
- auto rowsToUpdate = BuildRowsToUpdate(tableData, withSystemColumns, update.Filter(), update.Pos(), ctx);
+ auto rowsToUpdate = BuildRowsToUpdate(tableData, withSystemColumns, update.Filter(), update.Pos(), ctx, kqpCtx);
auto updateColumns = GetUpdateColumns(tableData, update.Update());
auto updatedRows = BuildUpdatedRows(rowsToUpdate, update.Update(), updateColumns, update.Pos(), ctx);
@@ -420,9 +406,9 @@ TExprBase BuildUpdateTable(const TKiUpdateTable& update, const TKikimrTableDescr
}
TVector<TExprBase> BuildUpdateTableWithIndex(const TKiUpdateTable& update, const TKikimrTableDescription& tableData,
- bool withSystemColumns, TExprContext& ctx)
+ bool withSystemColumns, TExprContext& ctx, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
- auto rowsToUpdate = BuildRowsToUpdate(tableData, withSystemColumns, update.Filter(), update.Pos(), ctx);
+ auto rowsToUpdate = BuildRowsToUpdate(tableData, withSystemColumns, update.Filter(), update.Pos(), ctx, kqpCtx);
auto indexes = BuildSecondaryIndexVector(tableData, update.Pos(), ctx, nullptr,
[] (const TKikimrTableMetadata& meta, TPositionHandle pos, TExprContext& ctx) -> TExprBase {
@@ -532,6 +518,12 @@ TExprNode::TPtr HandleReadTable(const TKiReadTable& read, TExprContext& ctx, con
return nullptr;
}
+ if (kqpCtx->IsScanQuery() && !kqpCtx->Config->FeatureFlags.GetEnableKqpScanQueryStreamLookup()) {
+ const TString err = "Secondary index is not supported for ScanQuery";
+ ctx.AddError(YqlIssue(ctx.GetPosition(read.Pos()), TIssuesIds::KIKIMR_BAD_REQUEST, err));
+ return nullptr;
+ }
+
auto [metadata, state] = tableData.Metadata->GetIndexMetadata(indexName);
YQL_ENSURE(metadata, "unable to find metadata for index: " << indexName);
YQL_ENSURE(state == TIndexDescription::EIndexState::Ready
@@ -612,25 +604,25 @@ TExprBase HandleWriteTable(const TKiWriteTable& write, TExprContext& ctx, const
}
TVector<TExprBase> HandleUpdateTable(const TKiUpdateTable& update, TExprContext& ctx,
- const TKikimrTablesData& tablesData, bool withSystemColumns)
+ const TKikimrTablesData& tablesData, bool withSystemColumns, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
const auto& tableData = GetTableData(tablesData, update.DataSink().Cluster(), update.Table().Value());
if (HasIndexesToWrite(tableData)) {
- return BuildUpdateTableWithIndex(update, tableData, withSystemColumns, ctx);
+ return BuildUpdateTableWithIndex(update, tableData, withSystemColumns, ctx, kqpCtx);
} else {
- return { BuildUpdateTable(update, tableData, withSystemColumns, ctx) };
+ return { BuildUpdateTable(update, tableData, withSystemColumns, ctx, kqpCtx) };
}
}
TVector<TExprBase> HandleDeleteTable(const TKiDeleteTable& del, TExprContext& ctx, const TKikimrTablesData& tablesData,
- bool withSystemColumns)
+ bool withSystemColumns, const TIntrusivePtr<TKqpOptimizeContext>& kqpCtx)
{
auto& tableData = GetTableData(tablesData, del.DataSink().Cluster(), del.Table().Value());
if (HasIndexesToWrite(tableData)) {
- return BuildDeleteTableWithIndex(del, tableData, withSystemColumns, ctx);
+ return BuildDeleteTableWithIndex(del, tableData, withSystemColumns, ctx, kqpCtx);
} else {
- return { BuildDeleteTable(del, tableData, withSystemColumns, ctx) };
+ return { BuildDeleteTable(del, tableData, withSystemColumns, ctx, kqpCtx) };
}
}
@@ -664,12 +656,12 @@ TMaybe<TKqlQuery> BuildKqlQuery(TKiDataQuery query, const TKikimrTablesData& tab
}
if (auto maybeUpdate = effect.Maybe<TKiUpdateTable>()) {
- auto results = HandleUpdateTable(maybeUpdate.Cast(), ctx, tablesData, withSystemColumns);
+ auto results = HandleUpdateTable(maybeUpdate.Cast(), ctx, tablesData, withSystemColumns, kqpCtx);
kqlEffects.insert(kqlEffects.end(), results.begin(), results.end());
}
if (auto maybeDelete = effect.Maybe<TKiDeleteTable>()) {
- auto results = HandleDeleteTable(maybeDelete.Cast(), ctx, tablesData, withSystemColumns);
+ auto results = HandleDeleteTable(maybeDelete.Cast(), ctx, tablesData, withSystemColumns, kqpCtx);
kqlEffects.insert(kqlEffects.end(), results.begin(), results.end());
}
}
diff --git a/ydb/core/kqp/opt/logical/CMakeLists.txt b/ydb/core/kqp/opt/logical/CMakeLists.txt
index 761c2bb517..479006bbcf 100644
--- a/ydb/core/kqp/opt/logical/CMakeLists.txt
+++ b/ydb/core/kqp/opt/logical/CMakeLists.txt
@@ -27,6 +27,7 @@ target_sources(kqp-opt-logical PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/logical/kqp_opt_log_indexes.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/logical/kqp_opt_log_sort.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/logical/kqp_opt_log_sqlin.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/logical/kqp_opt_log_sqlin_compact.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/logical/kqp_opt_log.cpp
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log.cpp
index 03a101d0e0..a86fd76cb0 100644
--- a/ydb/core/kqp/opt/logical/kqp_opt_log.cpp
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log.cpp
@@ -25,7 +25,6 @@ public:
, Config(config)
{
#define HNDL(name) "KqpLogical-"#name, Hndl(&TKqpLogicalOptTransformer::name)
- AddHandler(0, &TCoFlatMap::Match, HNDL(PushExtractedPredicateToReadTable));
AddHandler(0, &TCoFlatMap::Match, HNDL(PushPredicateToReadTable));
AddHandler(0, &TCoAggregate::Match, HNDL(RewriteAggregate));
AddHandler(0, &TCoTake::Match, HNDL(RewriteTakeSortToTopSort));
@@ -45,7 +44,9 @@ public:
AddHandler(0, &TKqlReadTableRangesBase::Match, HNDL(ApplyExtractMembersToReadTableRanges<false>));
AddHandler(0, &TKqpReadOlapTableRangesBase::Match, HNDL(ApplyExtractMembersToReadOlapTable<false>));
AddHandler(0, &TKqlLookupTableBase::Match, HNDL(ApplyExtractMembersToLookupTable<false>));
+ AddHandler(0, &TCoTopSort::Match, HNDL(TopSortOverExtend));
+ AddHandler(1, &TCoFlatMap::Match, HNDL(PushExtractedPredicateToReadTable));
AddHandler(1, &TKqlReadTableIndex::Match, HNDL(RewriteIndexRead));
AddHandler(1, &TKqlLookupIndex::Match, HNDL(RewriteLookupIndex));
AddHandler(1, &TKqlStreamLookupIndex::Match, HNDL(RewriteStreamLookupIndex));
@@ -74,7 +75,7 @@ protected:
}
TMaybeNode<TExprBase> RewriteAggregate(TExprBase node, TExprContext& ctx) {
- TExprBase output = DqRewriteAggregate(node, ctx);
+ TExprBase output = DqRewriteAggregate(node, ctx, TypesCtx);
DumpAppliedRule("RewriteAggregate", node.Ptr(), output.Ptr(), ctx);
return output;
}
@@ -169,6 +170,12 @@ protected:
return output;
}
+ TMaybeNode<TExprBase> TopSortOverExtend(TExprBase node, TExprContext& ctx, const TGetParents& getParents) {
+ auto output = KqpTopSortOverExtend(node, ctx, *getParents());
+ DumpAppliedRule("TopSortOverExtend", node.Ptr(), output.Ptr(), ctx);
+ return output;
+ }
+
template <bool IsGlobal>
TMaybeNode<TExprBase> ApplyExtractMembersToReadTable(TExprBase node, TExprContext& ctx,
const TGetParents& getParents)
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_indexes.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_indexes.cpp
index 10e142a848..ed3f4576ac 100644
--- a/ydb/core/kqp/opt/logical/kqp_opt_log_indexes.cpp
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log_indexes.cpp
@@ -27,7 +27,7 @@ bool CheckIndexCovering(const TRead& read, const TIntrusivePtr<TKikimrTableMetad
}
TExprBase DoRewriteIndexRead(const TKqlReadTableIndex& read, TExprContext& ctx,
- const TKikimrTableDescription& tableDesc, TIntrusivePtr<TKikimrTableMetadata> indexMeta,
+ const TKikimrTableDescription& tableDesc, TIntrusivePtr<TKikimrTableMetadata> indexMeta, bool useStreamLookup,
const TVector<TString>& extraColumns, const std::function<TExprBase(const TExprBase&)>& middleFilter = {})
{
const bool needDataRead = CheckIndexCovering(read, indexMeta);
@@ -99,11 +99,19 @@ TExprBase DoRewriteIndexRead(const TKqlReadTableIndex& read, TExprContext& ctx,
.Done();
}
- return Build<TKqlLookupTable>(ctx, read.Pos())
- .Table(read.Table())
- .LookupKeys(readIndexTable.Ptr())
- .Columns(read.Columns())
- .Done();
+ if (useStreamLookup) {
+ return Build<TKqlStreamLookupTable>(ctx, read.Pos())
+ .Table(read.Table())
+ .LookupKeys(readIndexTable.Ptr())
+ .Columns(read.Columns())
+ .Done();
+ } else {
+ return Build<TKqlLookupTable>(ctx, read.Pos())
+ .Table(read.Table())
+ .LookupKeys(readIndexTable.Ptr())
+ .Columns(read.Columns())
+ .Done();
+ }
}
} // namespace
@@ -115,34 +123,7 @@ TExprBase KqpRewriteIndexRead(const TExprBase& node, TExprContext& ctx, const TK
const auto& tableDesc = GetTableData(*kqpCtx.Tables, kqpCtx.Cluster, indexRead.Table().Path());
const auto& [indexMeta, _ ] = tableDesc.Metadata->GetIndexMetadata(TString(indexRead.Index().Value()));
- if (kqpCtx.IsDataQuery()) {
- return DoRewriteIndexRead(indexRead, ctx, tableDesc, indexMeta, {});
- }
-
- const bool needDataRead = CheckIndexCovering(indexRead, indexMeta);
- if (!needDataRead) {
- return Build<TKqlReadTable>(ctx, indexRead.Pos())
- .Table(BuildTableMeta(*indexMeta, indexRead.Pos(), ctx))
- .Range(indexRead.Range())
- .Columns(indexRead.Columns())
- .Settings(indexRead.Settings())
- .Done();
- }
-
- auto keyColumnsList = BuildKeyColumnsList(tableDesc, indexRead.Pos(), ctx);
-
- TExprBase readIndexTable = Build<TKqlReadTable>(ctx, indexRead.Pos())
- .Table(BuildTableMeta(*indexMeta, indexRead.Pos(), ctx))
- .Range(indexRead.Range())
- .Columns(keyColumnsList)
- .Settings(indexRead.Settings())
- .Done();
-
- return Build<TKqlStreamLookupTable>(ctx, indexRead.Pos())
- .Table(indexRead.Table())
- .LookupKeys(readIndexTable.Ptr())
- .Columns(indexRead.Columns())
- .Done();
+ return DoRewriteIndexRead(indexRead, ctx, tableDesc, indexMeta, kqpCtx.IsScanQuery(), {});
}
return node;
@@ -229,10 +210,6 @@ TExprBase KqpRewriteStreamLookupIndex(const TExprBase& node, TExprContext& ctx,
// through TKqlLookupTable.
// The simplest way is to match TopSort or Take over TKqlReadTableIndex.
TExprBase KqpRewriteTopSortOverIndexRead(const TExprBase& node, TExprContext& ctx, const TKqpOptimizeContext& kqpCtx) {
- if (!kqpCtx.IsDataQuery()) {
- return node;
- }
-
if (!node.Maybe<TCoTopSort>()) {
return node;
}
@@ -262,7 +239,8 @@ TExprBase KqpRewriteTopSortOverIndexRead(const TExprBase& node, TExprContext& ct
return TExprBase(newTopSort);
};
- auto lookup = DoRewriteIndexRead(readTableIndex, ctx, tableDesc, indexMeta, sortByColumns, filter);
+ auto lookup = DoRewriteIndexRead(readTableIndex, ctx, tableDesc, indexMeta,
+ kqpCtx.IsScanQuery(), sortByColumns, filter);
return Build<TCoTopSort>(ctx, node.Pos())
.Input(lookup)
@@ -276,10 +254,6 @@ TExprBase KqpRewriteTopSortOverIndexRead(const TExprBase& node, TExprContext& ct
}
TExprBase KqpRewriteTakeOverIndexRead(const TExprBase& node, TExprContext& ctx, const TKqpOptimizeContext& kqpCtx) {
- if (!kqpCtx.IsDataQuery()) {
- return node;
- }
-
if (!node.Maybe<TCoTake>()) {
return node;
}
@@ -297,7 +271,7 @@ TExprBase KqpRewriteTakeOverIndexRead(const TExprBase& node, TExprContext& ctx,
return TExprBase(ctx.ChangeChild(*node.Ptr(), 0, in.Ptr()));
};
- return DoRewriteIndexRead(readTableIndex, ctx, tableDesc, indexMeta, {}, filter);
+ return DoRewriteIndexRead(readTableIndex, ctx, tableDesc, indexMeta, kqpCtx.IsScanQuery(), {}, filter);
}
return node;
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_join.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_join.cpp
index 32bdb23e3c..f4f55af0cf 100644
--- a/ydb/core/kqp/opt/logical/kqp_opt_log_join.cpp
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log_join.cpp
@@ -437,14 +437,18 @@ TMaybeNode<TExprBase> KqpJoinToIndexLookupImpl(const TDqJoin& join, TExprContext
.Build()
.Done();
- rightReadMatch->ExtractMembers = {}; // We already fetching only required columns
+ auto lookupColumns = read.Columns();
+ if (rightReadMatch->ExtractMembers) {
+ lookupColumns = rightReadMatch->ExtractMembers.Cast().Members();
+ }
+
lookup = rightReadMatch->BuildProcessNodes(lookup, ctx);
if (join.JoinType().Value() == "RightSemi") {
auto arg = TCoArgument(ctx.NewArgument(join.Pos(), "row"));
auto rightLabel = join.RightLabel().Cast<TCoAtom>().Value();
- TVector<TExprBase> renames = CreateRenames(rightReadMatch->FlatMap, read.Columns(), arg, rightLabel,
+ TVector<TExprBase> renames = CreateRenames(rightReadMatch->FlatMap, lookupColumns, arg, rightLabel,
join.Pos(), ctx);
lookup = Build<TCoMap>(ctx, join.Pos())
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp
index beb2a12705..88e9a831fa 100644
--- a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges.cpp
@@ -116,6 +116,19 @@ TKqlKeyRange BuildKeyRangeExpr(const TKeyRange& keyRange, const TKikimrTableDesc
.Done();
}
+bool IsPointPrefix(const TKeyRange& range) {
+ size_t prefixLen = 0;
+ for (size_t i = 0; i < range.GetColumnRangesCount(); ++i) {
+ if (range.GetColumnRange(i).IsPoint() && i == prefixLen) {
+ prefixLen += 1;
+ }
+ if (range.GetColumnRange(i).IsDefined() && i >= prefixLen) {
+ return false;
+ }
+ }
+ return prefixLen > 0;
+}
+
TExprBase KqpPushPredicateToReadTable(TExprBase node, TExprContext& ctx, const TKqpOptimizeContext& kqpCtx) {
if (!node.Maybe<TCoFlatMap>()) {
return node;
@@ -126,7 +139,35 @@ TExprBase KqpPushPredicateToReadTable(TExprBase node, TExprContext& ctx, const T
return node;
}
+ bool onlyPointRanges = false;
auto readMatch = MatchRead<TKqlReadTableBase>(flatmap.Input());
+
+ //TODO: remove this branch KIKIMR-15255, KIKIMR-15321
+ if (!readMatch && kqpCtx.IsDataQuery()) {
+ if (auto readRangesMatch = MatchRead<TKqlReadTableRangesBase>(flatmap.Input())) {
+ auto read = readRangesMatch->Read.Cast<TKqlReadTableRangesBase>();
+ if (TCoVoid::Match(read.Ranges().Raw())) {
+ auto key = Build<TKqlKeyInc>(ctx, read.Pos()).Done();
+ readMatch = readRangesMatch;
+ readMatch->Read =
+ Build<TKqlReadTable>(ctx, read.Pos())
+ .Settings(read.Settings())
+ .Table(read.Table())
+ .Columns(read.Columns())
+ .Range<TKqlKeyRange>()
+ .From(key)
+ .To(key)
+ .Build()
+ .Done();
+ onlyPointRanges = true;
+ } else {
+ return node;
+ }
+ } else {
+ return node;
+ }
+ }
+
if (!readMatch) {
return node;
}
@@ -159,7 +200,9 @@ TExprBase KqpPushPredicateToReadTable(TExprBase node, TExprContext& ctx, const T
auto& tableDesc = indexName ? kqpCtx.Tables->ExistingTable(kqpCtx.Cluster, mainTableDesc.Metadata->GetIndexMetadata(TString(indexName.Cast())).first->Name) : mainTableDesc;
- YQL_ENSURE(tableDesc.Metadata->Kind != EKikimrTableKind::Olap);
+ if (tableDesc.Metadata->Kind == EKikimrTableKind::Olap) {
+ return node;
+ }
auto row = flatmap.Lambda().Args().Arg(0);
auto predicate = TExprBase(flatmap.Lambda().Body().Ref().ChildPtr(0));
@@ -178,6 +221,9 @@ TExprBase KqpPushPredicateToReadTable(TExprBase node, TExprContext& ctx, const T
for (auto& keyRange : lookup.GetKeyRanges()) {
bool useLookup = false;
+ if (onlyPointRanges && !IsPointPrefix(keyRange)) {
+ return node;
+ }
if (keyRange.IsEquiRange()) {
bool isFullKey = keyRange.GetNumDefined() == tableDesc.Metadata->KeyColumnNames.size();
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp
index 3713a1bfa1..987ba08d2d 100644
--- a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp
@@ -42,7 +42,7 @@ TMaybeNode<TExprBase> TryBuildTrivialReadTable(TCoFlatMap& flatmap, TKqlReadTabl
return {};
}
- if (kqpCtx.IsScanQuery() && lookup.GetKeyRanges().size() > 1) {
+ if (lookup.GetKeyRanges().size() > 1) {
return {}; // optimize trivial cases only
}
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_rules.h b/ydb/core/kqp/opt/logical/kqp_opt_log_rules.h
index db474ad71d..d96b71b3ee 100644
--- a/ydb/core/kqp/opt/logical/kqp_opt_log_rules.h
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log_rules.h
@@ -67,4 +67,7 @@ NYql::NNodes::TExprBase KqpApplyExtractMembersToReadTableRanges(NYql::NNodes::TE
NYql::NNodes::TExprBase KqpApplyExtractMembersToLookupTable(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
const NYql::TParentsMap& parentsMap, bool allowMultiUsage);
+NYql::NNodes::TExprBase KqpTopSortOverExtend(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
+ const NYql::TParentsMap& parents);
+
} // namespace NKikimr::NKqp::NOpt
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_sort.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_sort.cpp
new file mode 100644
index 0000000000..644242d1d7
--- /dev/null
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log_sort.cpp
@@ -0,0 +1,52 @@
+#include "kqp_opt_log_rules.h"
+
+#include <ydb/core/kqp/common/kqp_yql.h>
+#include <ydb/core/kqp/opt/kqp_opt_impl.h>
+
+namespace NKikimr::NKqp::NOpt {
+
+using namespace NYql;
+using namespace NYql::NCommon;
+using namespace NYql::NDq;
+using namespace NYql::NNodes;
+
+TExprBase KqpTopSortOverExtend(NNodes::TExprBase node, TExprContext& ctx, const TParentsMap& parents) {
+ if (!node.Maybe<TCoTopSort>().Input().Maybe<TCoExtend>()) {
+ return node;
+ }
+
+ auto topSort = node.Cast<TCoTopSort>();
+ auto extend = topSort.Input().Cast<TCoExtend>();
+
+ if (!IsSingleConsumer(extend, parents)) {
+ return node;
+ }
+
+ TVector<TExprBase> inputs;
+ inputs.reserve(extend.ArgCount());
+ for (const auto& arg : extend) {
+ auto input = Build<TCoTopSort>(ctx, node.Pos())
+ .Input(arg)
+ .Count(topSort.Count())
+ .SortDirections(topSort.SortDirections())
+ .KeySelectorLambda(topSort.KeySelectorLambda())
+ .Done();
+
+ inputs.push_back(input);
+ }
+
+ // Decompose TopSort to Sort + Limit to avoid optimizer loops.
+ return Build<TCoLimit>(ctx, node.Pos())
+ .Input<TCoSort>()
+ .Input<TCoExtend>()
+ .Add(inputs)
+ .Build()
+ .SortDirections(topSort.SortDirections())
+ .KeySelectorLambda(topSort.KeySelectorLambda())
+ .Build()
+ .Count(topSort.Count())
+ .Done();
+}
+
+} // namespace NKikimr::NKqp::NOpt
+
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_sqlin.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_sqlin.cpp
index ea9b7825f0..118442443d 100644
--- a/ydb/core/kqp/opt/logical/kqp_opt_log_sqlin.cpp
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log_sqlin.cpp
@@ -42,6 +42,31 @@ TExprBase KqpRewriteSqlInToEquiJoin(const TExprBase& node, TExprContext& ctx, co
}
auto readMatch = MatchRead<TKqlReadTableBase>(flatMap.Input());
+
+ //TODO: remove this branch KIKIMR-15255
+ if (!readMatch) {
+ if (auto readRangesMatch = MatchRead<TKqlReadTableRangesBase>(flatMap.Input())) {
+ auto read = readRangesMatch->Read.Cast<TKqlReadTableRangesBase>();
+ if (TCoVoid::Match(read.Ranges().Raw())) {
+ readMatch = readRangesMatch;
+ auto key = Build<TKqlKeyInc>(ctx, read.Pos()).Done();
+ readMatch->Read =
+ Build<TKqlReadTable>(ctx, read.Pos())
+ .Settings(read.Settings())
+ .Table(read.Table())
+ .Columns(read.Columns())
+ .Range<TKqlKeyRange>()
+ .From(key)
+ .To(key)
+ .Build()
+ .Done();
+ } else {
+ return node;
+ }
+ } else {
+ return node;
+ }
+ }
if (!readMatch) {
return node;
}
diff --git a/ydb/core/kqp/opt/peephole/kqp_opt_peephole.cpp b/ydb/core/kqp/opt/peephole/kqp_opt_peephole.cpp
index 55aca64df8..5c1f1cabc0 100644
--- a/ydb/core/kqp/opt/peephole/kqp_opt_peephole.cpp
+++ b/ydb/core/kqp/opt/peephole/kqp_opt_peephole.cpp
@@ -37,6 +37,7 @@ public:
AddHandler(0, &TDqPhyJoinDict::Match, HNDL(RewriteDictJoin));
AddHandler(0, &TDqJoin::Match, HNDL(RewritePureJoin));
AddHandler(0, TOptimizeTransformerBase::Any(), HNDL(BuildWideReadTable));
+ AddHandler(0, &TDqPhyLength::Match, HNDL(RewriteLength));
#undef HNDL
}
@@ -76,6 +77,12 @@ protected:
DumpAppliedRule("BuildWideReadTable", node.Ptr(), output.Ptr(), ctx);
return output;
}
+
+ TMaybeNode<TExprBase> RewriteLength(TExprBase node, TExprContext& ctx) {
+ TExprBase output = DqPeepholeRewriteLength(node, ctx);
+ DumpAppliedRule("RewriteLength", node.Ptr(), output.Ptr(), ctx);
+ return output;
+ }
};
struct TKqpPeepholePipelineConfigurator : IPipelineConfigurator {
@@ -131,6 +138,7 @@ TMaybeNode<TKqpPhysicalTx> PeepholeOptimize(const TKqpPhysicalTx& tx, TExprConte
stages.reserve(tx.Stages().Size());
TNodeOnNodeOwnedMap stagesMap;
TVector<TKqpParamBinding> bindings(tx.ParamBindings().begin(), tx.ParamBindings().end());
+ THashMap<TString, TKqpParamBinding> nonDetParamBindings;
for (const auto& stage : tx.Stages()) {
YQL_ENSURE(!optimizedStages.contains(stage.Ref().UniqueId()));
@@ -160,7 +168,7 @@ TMaybeNode<TKqpPhysicalTx> PeepholeOptimize(const TKqpPhysicalTx& tx, TExprConte
}
if (allowNonDeterministicFunctions) {
- status = ReplaceNonDetFunctionsWithParams(newProgram, ctx, &bindings);
+ status = ReplaceNonDetFunctionsWithParams(newProgram, ctx, &nonDetParamBindings);
if (status != TStatus::Ok) {
ctx.AddError(TIssue(ctx.GetPosition(stage.Pos()),
@@ -181,6 +189,10 @@ TMaybeNode<TKqpPhysicalTx> PeepholeOptimize(const TKqpPhysicalTx& tx, TExprConte
optimizedStages.emplace(stage.Ref().UniqueId());
}
+ for (const auto& [_, binding] : nonDetParamBindings) {
+ bindings.emplace_back(std::move(binding));
+ }
+
return Build<TKqpPhysicalTx>(ctx, tx.Pos())
.Stages()
.Add(stages)
@@ -325,7 +337,7 @@ TAutoPtr<IGraphTransformer> CreateKqpTxsPeepholeTransformer(TAutoPtr<NYql::IGrap
return new TKqpTxsPeepholeTransformer(std::move(typeAnnTransformer), typesCtx, config);
}
-TStatus ReplaceNonDetFunctionsWithParams(TExprNode::TPtr& input, TExprContext& ctx, TVector<TKqpParamBinding>* paramBindings) {
+TStatus ReplaceNonDetFunctionsWithParams(TExprNode::TPtr& input, TExprContext& ctx, THashMap<TString, TKqpParamBinding>* paramBindings) {
static const std::unordered_set<std::string_view> nonDeterministicFunctions = {
"RandomNumber",
"Random",
@@ -352,7 +364,7 @@ TStatus ReplaceNonDetFunctionsWithParams(TExprNode::TPtr& input, TExprContext& c
.Type(ExpandType(node->Pos(), *node->GetTypeAnn(), ctx))
.Done();
- if (paramBindings) {
+ if (paramBindings && !paramBindings->contains(paramName)) {
auto binding = Build<TKqpTxInternalBinding>(ctx, node->Pos())
.Type(ExpandType(node->Pos(), *node->GetTypeAnn(), ctx))
.Kind().Build(callable.CallableName())
@@ -363,9 +375,8 @@ TStatus ReplaceNonDetFunctionsWithParams(TExprNode::TPtr& input, TExprContext& c
.Binding(binding)
.Done();
- paramBindings->emplace_back(std::move(paramBinding));
+ paramBindings->insert({paramName, std::move(paramBinding)});
}
-
return param.Ptr();
}
}
diff --git a/ydb/core/kqp/opt/peephole/kqp_opt_peephole.h b/ydb/core/kqp/opt/peephole/kqp_opt_peephole.h
index a0602bb07d..64143adc39 100644
--- a/ydb/core/kqp/opt/peephole/kqp_opt_peephole.h
+++ b/ydb/core/kqp/opt/peephole/kqp_opt_peephole.h
@@ -12,6 +12,6 @@ TAutoPtr<NYql::IGraphTransformer> CreateKqpTxsPeepholeTransformer(TAutoPtr<NYql:
NYql::TTypeAnnotationContext& typesCtx, const NYql::TKikimrConfiguration::TPtr& config);
NYql::IGraphTransformer::TStatus ReplaceNonDetFunctionsWithParams(NYql::TExprNode::TPtr& input, NYql::TExprContext& ctx,
- TVector<NYql::NNodes::TKqpParamBinding>* paramBindings = nullptr);
+ THashMap<TString, NYql::NNodes::TKqpParamBinding>* paramBindings = nullptr);
} // namespace NKikimr::NKqp::NOpt
diff --git a/ydb/core/kqp/opt/physical/CMakeLists.txt b/ydb/core/kqp/opt/physical/CMakeLists.txt
index 6e5a345794..586055a4ea 100644
--- a/ydb/core/kqp/opt/physical/CMakeLists.txt
+++ b/ydb/core/kqp/opt/physical/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(effects)
add_library(kqp-opt-physical)
target_compile_options(kqp-opt-physical PRIVATE
@@ -22,6 +23,7 @@ target_link_libraries(kqp-opt-physical PUBLIC
target_sources(kqp-opt-physical PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/physical/kqp_opt_phy_limit.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_agg.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_filter.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/physical/kqp_opt_phy_precompute.cpp
${CMAKE_SOURCE_DIR}/ydb/core/kqp/opt/physical/kqp_opt_phy_sort.cpp
diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy.cpp b/ydb/core/kqp/opt/physical/kqp_opt_phy.cpp
index c57f9cc6f2..808815314e 100644
--- a/ydb/core/kqp/opt/physical/kqp_opt_phy.cpp
+++ b/ydb/core/kqp/opt/physical/kqp_opt_phy.cpp
@@ -34,16 +34,19 @@ public:
HNDL(RemoveRedundantSortByPk));
AddHandler(0, &TCoTake::Match, HNDL(ApplyLimitToReadTable));
AddHandler(0, &TCoFlatMap::Match, HNDL(PushOlapFilter));
+ AddHandler(0, &TCoCombineByKey::Match, HNDL(PushOlapAggregate));
+ AddHandler(0, &TDqPhyLength::Match, HNDL(PushOlapLength));
AddHandler(0, &TCoSkipNullMembers::Match, HNDL(PushSkipNullMembersToStage<false>));
AddHandler(0, &TCoExtractMembers::Match, HNDL(PushExtractMembersToStage<false>));
+ AddHandler(0, &TCoFlatMapBase::Match, HNDL(BuildPureFlatmapStage));
AddHandler(0, &TCoFlatMapBase::Match, HNDL(BuildFlatmapStage<false>));
AddHandler(0, &TCoCombineByKey::Match, HNDL(PushCombineToStage<false>));
AddHandler(0, &TCoPartitionsByKeys::Match, HNDL(BuildPartitionsStage));
AddHandler(0, &TCoPartitionByKey::Match, HNDL(BuildPartitionStage));
AddHandler(0, &TCoTopSort::Match, HNDL(BuildTopSortStage<false>));
- AddHandler(0, &TCoTake::Match, HNDL(BuildTakeSkipStage<false>));
+ AddHandler(0, &TCoTakeBase::Match, HNDL(BuildTakeSkipStage<false>));
AddHandler(0, &TCoSortBase::Match, HNDL(BuildSortStage<false>));
- AddHandler(0, &TCoTake::Match, HNDL(BuildTakeStage<false>));
+ AddHandler(0, &TCoTakeBase::Match, HNDL(BuildTakeStage<false>));
AddHandler(0, &TCoLength::Match, HNDL(RewriteLengthOfStageOutput<false>));
AddHandler(0, &TCoExtendBase::Match, HNDL(BuildExtendStage));
AddHandler(0, &TDqJoin::Match, HNDL(RewriteRightJoinToLeft));
@@ -62,6 +65,7 @@ public:
AddHandler(0, &TDqStage::Match, HNDL(PrecomputeToInput));
AddHandler(0, &TDqStage::Match, HNDL(FloatUpStage));
AddHandler(0, &TCoHasItems::Match, HNDL(BuildHasItems));
+ AddHandler(0, &TCoSqlIn::Match, HNDL(BuildSqlIn<false>));
AddHandler(0, &TCoHead::Match, HNDL(BuildScalarPrecompute<false>));
AddHandler(0, &TCoToOptional::Match, HNDL(BuildScalarPrecompute<false>));
AddHandler(0, &TCoAsList::Match, HNDL(PropagatePrecomuteScalarRowset<false>));
@@ -73,14 +77,15 @@ public:
AddHandler(1, &TCoFlatMapBase::Match, HNDL(BuildFlatmapStage<true>));
AddHandler(1, &TCoCombineByKey::Match, HNDL(PushCombineToStage<true>));
AddHandler(1, &TCoTopSort::Match, HNDL(BuildTopSortStage<true>));
- AddHandler(1, &TCoTake::Match, HNDL(BuildTakeSkipStage<true>));
+ AddHandler(1, &TCoTakeBase::Match, HNDL(BuildTakeSkipStage<true>));
AddHandler(1, &TCoSortBase::Match, HNDL(BuildSortStage<true>));
- AddHandler(1, &TCoTake::Match, HNDL(BuildTakeStage<true>));
+ AddHandler(1, &TCoTakeBase::Match, HNDL(BuildTakeStage<true>));
AddHandler(1, &TCoLength::Match, HNDL(RewriteLengthOfStageOutput<true>));
AddHandler(1, &TDqJoin::Match, HNDL(RewriteLeftPureJoin<true>));
AddHandler(1, &TDqJoin::Match, HNDL(BuildJoin<true>));
AddHandler(1, &TCoLMap::Match, HNDL(PushLMapToStage<true>));
AddHandler(1, &TCoOrderedLMap::Match, HNDL(PushOrderedLMapToStage<true>));
+ AddHandler(1, &TCoSqlIn::Match, HNDL(BuildSqlIn<true>));
AddHandler(1, &TCoHead::Match, HNDL(BuildScalarPrecompute<true>));
AddHandler(1, &TCoToOptional::Match, HNDL(BuildScalarPrecompute<true>));
AddHandler(1, &TCoAsList::Match, HNDL(PropagatePrecomuteScalarRowset<true>));
@@ -134,6 +139,18 @@ protected:
return output;
}
+ TMaybeNode<TExprBase> PushOlapAggregate(TExprBase node, TExprContext& ctx) {
+ TExprBase output = KqpPushOlapAggregate(node, ctx, KqpCtx);
+ DumpAppliedRule("PushOlapAggregate", node.Ptr(), output.Ptr(), ctx);
+ return output;
+ }
+
+ TMaybeNode<TExprBase> PushOlapLength(TExprBase node, TExprContext& ctx) {
+ TExprBase output = KqpPushOlapLength(node, ctx, KqpCtx);
+ DumpAppliedRule("PushOlapLength", node.Ptr(), output.Ptr(), ctx);
+ return output;
+ }
+
template <bool IsGlobal>
TMaybeNode<TExprBase> PushSkipNullMembersToStage(TExprBase node, TExprContext& ctx,
IOptimizationContext& optCtx, const TGetParents& getParents)
@@ -152,6 +169,12 @@ protected:
return output;
}
+ TMaybeNode<TExprBase> BuildPureFlatmapStage(TExprBase node, TExprContext& ctx) {
+ TExprBase output = DqBuildPureFlatmapStage(node, ctx);
+ DumpAppliedRule("BuildPureFlatmapStage", node.Ptr(), output.Ptr(), ctx);
+ return output;
+ }
+
template <bool IsGlobal>
TMaybeNode<TExprBase> BuildFlatmapStage(TExprBase node, TExprContext& ctx,
IOptimizationContext& optCtx, const TGetParents& getParents)
@@ -338,6 +361,15 @@ protected:
}
template <bool IsGlobal>
+ TMaybeNode<TExprBase> BuildSqlIn(TExprBase node, TExprContext& ctx,
+ IOptimizationContext& optCtx, const TGetParents& getParents)
+ {
+ TExprBase output = DqBuildSqlIn(node, ctx, optCtx, *getParents(), IsGlobal);
+ DumpAppliedRule("BuildSqlIn", node.Ptr(), output.Ptr(), ctx);
+ return output;
+ }
+
+ template <bool IsGlobal>
TMaybeNode<TExprBase> BuildScalarPrecompute(TExprBase node, TExprContext& ctx,
IOptimizationContext& optCtx, const TGetParents& getParents)
{
diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp b/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp
index db94e41950..821ecbb2da 100644
--- a/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp
+++ b/ydb/core/kqp/opt/physical/kqp_opt_phy_build_stage.cpp
@@ -190,10 +190,6 @@ TExprBase KqpBuildReadTableRangesStage(TExprBase node, TExprContext& ctx,
auto ranges = read.Ranges();
auto& tableDesc = kqpCtx.Tables->ExistingTable(kqpCtx.Cluster, read.Table().Path());
- if (!IsDqPureExpr(ranges)) {
- return read;
- }
-
bool fullScan = TCoVoid::Match(ranges.Raw());
TVector<TExprBase> input;
@@ -201,27 +197,69 @@ TExprBase KqpBuildReadTableRangesStage(TExprBase node, TExprContext& ctx,
TVector<TCoArgument> programArgs;
if (!fullScan) {
- auto computeStage = Build<TDqStage>(ctx, read.Pos())
- .Inputs()
- .Build()
- .Program()
- .Args({})
- .Body<TCoToStream>()
- .Input<TCoJust>()
- .Input<TExprList>()
- .Add(ranges)
+ TMaybe<TDqStage> rangesStage;
+ if (IsDqPureExpr(read.Ranges())) {
+ rangesStage = Build<TDqStage>(ctx, read.Pos())
+ .Inputs()
+ .Build()
+ .Program()
+ .Args({})
+ .Body<TCoToStream>()
+ .Input<TCoJust>()
+ .Input<TExprList>()
+ .Add(ranges)
+ .Build()
.Build()
.Build()
.Build()
- .Build()
- .Settings()
- .Build()
- .Done();
+ .Settings()
+ .Build()
+ .Done();
+ } else {
+ auto connections = FindDqConnections(node);
+ YQL_ENSURE(!connections.empty());
+ TVector<TDqConnection> inputs;
+ TVector<TExprBase> stageInputs;
+ TNodeOnNodeOwnedMap replaceMap;
+
+ inputs.reserve(connections.size());
+ for (auto& cn : connections) {
+ auto input = TDqConnection(cn);
+ if (!input.Maybe<TDqCnUnionAll>()) {
+ return node;
+ }
+
+ inputs.push_back(input);
+ stageInputs.push_back(
+ Build<TDqPhyPrecompute>(ctx, cn.Pos())
+ .Connection(input)
+ .Done());
+ }
+ auto args = PrepareArgumentsReplacement(read.Ranges(), inputs, ctx, replaceMap);
+ auto body = ctx.ReplaceNodes(read.Ranges().Ptr(), replaceMap);
+ rangesStage = Build<TDqStage>(ctx, read.Pos())
+ .Inputs()
+ .Add(std::move(stageInputs))
+ .Build()
+ .Program()
+ .Args(args)
+ .Body<TCoToStream>()
+ .Input<TCoJust>()
+ .Input<TExprList>()
+ .Add(body)
+ .Build()
+ .Build()
+ .Build()
+ .Build()
+ .Settings().Build()
+ .Done();
+ }
+ YQL_ENSURE(rangesStage);
auto precompute = Build<TDqPhyPrecompute>(ctx, read.Pos())
.Connection<TDqCnValue>()
.Output()
- .Stage(computeStage)
+ .Stage(*rangesStage)
.Index().Build("0")
.Build()
.Build()
diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_agg.cpp b/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_agg.cpp
new file mode 100644
index 0000000000..31858af386
--- /dev/null
+++ b/ydb/core/kqp/opt/physical/kqp_opt_phy_olap_agg.cpp
@@ -0,0 +1,294 @@
+#include "kqp_opt_phy_rules.h"
+
+#include <ydb/core/kqp/common/kqp_yql.h>
+
+#include <ydb/library/yql/core/yql_opt_utils.h>
+
+#include <vector>
+
+namespace NKikimr::NKqp::NOpt {
+
+using namespace NYql;
+using namespace NYql::NNodes;
+
+namespace {
+
+enum class EAggType {
+ Count,
+ Some
+};
+
+struct TAggInfo {
+ std::string AggName;
+ std::string ColName;
+ EAggType Type;
+};
+
+bool ContainsConstOnly(const TExprBase& node) {
+ return node.Maybe<TCoDataCtor>().IsValid();
+}
+
+bool ContainsSimpleColumnOnly(const TExprBase& node, const TExprBase& parent) {
+ if (!parent.Maybe<TCoInputBase>()) {
+ return false;
+ }
+ auto input = parent.Cast<TCoInputBase>().Input();
+ if (auto maybeExprList = node.Maybe<TExprList>()) {
+ for (auto expr : maybeExprList.Cast()) {
+ if (!expr.Maybe<TCoMember>() || expr.Cast<TCoMember>().Struct().Raw() != input.Raw()) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return node.Maybe<TCoMember>().IsValid() && node.Cast<TCoMember>().Struct().Raw() == input.Raw();
+}
+
+std::vector<std::string> GetGroupByCols(const TExprBase& keySelectorBody, const TExprBase& parent) {
+ std::vector<std::string> res;
+ if (!ContainsSimpleColumnOnly(keySelectorBody, parent)) {
+ YQL_CLOG(DEBUG, ProviderKqp) << "For aggregate push down optimization in GROUP BY column list should be Member callables only.";
+ return res;
+ }
+ if (auto maybeMember = keySelectorBody.Maybe<TCoMember>()) {
+ res.push_back(keySelectorBody.Cast<TCoMember>().Name().StringValue());
+ } else if (auto maybeExprList = keySelectorBody.Maybe<TExprList>()) {
+ for (auto expr : maybeExprList.Cast()) {
+ res.push_back(expr.Cast<TCoMember>().Name().StringValue());
+ }
+ }
+ return res;
+}
+
+std::vector<TAggInfo> GetAggregationsFromInit(const TExprBase& node) {
+ std::vector<TAggInfo> res;
+ if (!node.Maybe<TCoAsStruct>()) {
+ return res;
+ }
+ for (auto item : node.Cast<TCoAsStruct>()) {
+ auto tuple = item.Cast<TCoNameValueTuple>();
+ auto tupleValue = tuple.Value();
+ if (tupleValue.Maybe<TCoAggrCountInit>()) {
+ auto aggrCntInit = tupleValue.Cast<TCoAggrCountInit>();
+ if (aggrCntInit.Value().Maybe<TCoMember>()) {
+ TAggInfo aggInfo;
+ aggInfo.AggName = tuple.Name();
+ aggInfo.Type = EAggType::Count;
+ aggInfo.ColName = aggrCntInit.Value().Cast<TCoMember>().Name();
+ res.push_back(aggInfo);
+ }
+ } else {
+ YQL_CLOG(DEBUG, ProviderKqp) << "Unsupported aggregation type in init handler.";
+ res.clear();
+ return res;
+ }
+ }
+ return res;
+}
+
+std::vector<TAggInfo> GetAggregationsFromUpdate(const TExprBase& node) {
+ std::vector<TAggInfo> res;
+ if (!node.Maybe<TCoAsStruct>()) {
+ return res;
+ }
+ for (auto item : node.Cast<TCoAsStruct>()) {
+ auto tuple = item.Cast<TCoNameValueTuple>();
+ auto tupleValue = tuple.Value();
+ if (auto maybeAggrCntUpd = tupleValue.Maybe<TCoAggrCountUpdate>()) {
+ if (maybeAggrCntUpd.Cast().Value().Maybe<TCoMember>()) {
+ TAggInfo aggInfo;
+ aggInfo.Type = EAggType::Count;
+ aggInfo.AggName = tuple.Name();
+ res.push_back(aggInfo);
+ }
+ } else {
+ YQL_CLOG(DEBUG, ProviderKqp) << "Unsupported aggregation type in update handler.";
+ res.clear();
+ return res;
+ }
+ }
+ return res;
+}
+
+} // anonymous namespace end
+
+TExprBase KqpPushOlapAggregate(TExprBase node, TExprContext& ctx, const TKqpOptimizeContext& kqpCtx)
+{
+ if (!kqpCtx.Config->PushOlapProcess()) {
+ return node;
+ }
+
+ if (!node.Maybe<TCoCombineByKey>()) {
+ return node;
+ }
+
+ auto combineKey = node.Cast<TCoCombineByKey>();
+ auto maybeRead = combineKey.Input().Maybe<TKqpReadOlapTableRanges>();
+ if (!maybeRead) {
+ maybeRead = combineKey.Input().Maybe<TCoExtractMembers>().Input().Maybe<TKqpReadOlapTableRanges>();
+ }
+
+ if (!maybeRead) {
+ return node;
+ }
+
+ auto read = maybeRead.Cast();
+
+ auto keySelectorBody = combineKey.KeySelectorLambda().Cast<TCoLambda>().Body();
+ if (!ContainsSimpleColumnOnly(keySelectorBody, combineKey) && !ContainsConstOnly(keySelectorBody)) {
+ return node;
+ }
+ auto aggKeyCols = Build<TCoAtomList>(ctx, node.Pos());
+ auto groupByCols = GetGroupByCols(keySelectorBody, combineKey);
+ for (auto groupByCol : groupByCols) {
+ aggKeyCols.Add<TCoAtom>()
+ .Build(groupByCol)
+ .Done();
+ }
+
+ auto initHandlerBody = combineKey.InitHandlerLambda().Cast<TCoLambda>().Body();
+ auto aggInits = GetAggregationsFromInit(initHandlerBody);
+
+ auto updateHandlerBody = combineKey.UpdateHandlerLambda().Cast<TCoLambda>().Body();
+ auto aggUpdates = GetAggregationsFromUpdate(updateHandlerBody);
+
+ auto finishHandlerBody = combineKey.FinishHandlerLambda().Cast<TCoLambda>().Body();
+ if (aggInits.empty() || aggInits.size() != aggUpdates.size()) {
+ return node;
+ }
+
+ for (size_t i = 0; i != aggInits.size(); ++i) {
+ if (aggInits[i].Type != aggUpdates[i].Type) {
+ YQL_CLOG(DEBUG, ProviderKqp) << "Different aggregation type in init and update handlers in aggregate push-down optimization!";
+ return node;
+ }
+ }
+
+ auto aggs = Build<TKqpOlapAggOperationList>(ctx, node.Pos());
+ // TODO: TMaybeNode<TKqpOlapAggOperation>;
+ for (size_t i = 0; i != aggInits.size(); ++i) {
+ std::string aggType;
+ switch (aggInits[i].Type) {
+ case EAggType::Count:
+ {
+ aggType = "count";
+ break;
+ }
+ case EAggType::Some:
+ {
+ aggType = "some";
+ break;
+ }
+ default:
+ {
+ YQL_ENSURE(false, "Unsupported type of aggregation!"); // add aggInits[i].Type
+ return node;
+ }
+ }
+ aggs.Add<TKqpOlapAggOperation>()
+ .Name().Build(aggInits[i].AggName)
+ .Type().Build(aggType)
+ .Column().Build(aggInits[i].ColName)
+ .Build()
+ .Done();
+ }
+
+ auto olapAgg = Build<TKqpOlapAgg>(ctx, node.Pos())
+ .Input(read.Process().Args().Arg(0))
+ .Aggregates(std::move(aggs.Done()))
+ .KeyColumns(std::move(aggKeyCols.Done()))
+ .Done();
+
+ auto olapAggLambda = Build<TCoLambda>(ctx, node.Pos())
+ .Args({"row"})
+ .Body<TExprApplier>()
+ .Apply(olapAgg)
+ .With(read.Process().Args().Arg(0), "row")
+ .Build()
+ .Done();
+
+ auto newProcessLambda = ctx.FuseLambdas(olapAggLambda.Ref(), read.Process().Ref());
+
+ YQL_CLOG(INFO, ProviderKqp) << "Pushed OLAP lambda: " << KqpExprToPrettyString(*newProcessLambda, ctx);
+
+ auto newRead = Build<TKqpReadOlapTableRanges>(ctx, node.Pos())
+ .Table(read.Table())
+ .Ranges(read.Ranges())
+ .Columns(read.Columns())
+ .Settings(read.Settings())
+ .ExplainPrompt(read.ExplainPrompt())
+ .Process(newProcessLambda)
+ .Done();
+
+ return newRead;
+}
+
+TExprBase KqpPushOlapLength(TExprBase node, TExprContext& ctx, const TKqpOptimizeContext& kqpCtx)
+{
+ if (!kqpCtx.Config->PushOlapProcess()) {
+ return node;
+ }
+
+ if (!node.Maybe<TDqPhyLength>().Input().Maybe<TKqpReadOlapTableRanges>()) {
+ return node;
+ }
+
+ auto dqPhyLength = node.Cast<TDqPhyLength>();
+ auto read = dqPhyLength.Input().Cast<TKqpReadOlapTableRanges>();
+
+ if (read.Process().Body().Raw() != read.Process().Args().Arg(0).Raw()) {
+ return node;
+ }
+
+ auto aggs = Build<TKqpOlapAggOperationList>(ctx, node.Pos());
+ aggs.Add<TKqpOlapAggOperation>()
+ .Name(dqPhyLength.Name())
+ .Type().Build("count")
+ .Column().Build("*")
+ .Build()
+ .Done();
+
+ auto olapAgg = Build<TKqpOlapAgg>(ctx, node.Pos())
+ .Input(read.Process().Body())
+ .Aggregates(std::move(aggs.Done()))
+ .KeyColumns(std::move(
+ Build<TCoAtomList>(ctx, node.Pos())
+ .Done()
+ )
+ )
+ .Done();
+
+ auto newProcessLambda = Build<TCoLambda>(ctx, node.Pos())
+ .Args({"row"})
+ .Body<TExprApplier>()
+ .Apply(olapAgg)
+ .With(read.Process().Args().Arg(0), "row")
+ .Build()
+ .Done();
+
+ YQL_CLOG(INFO, ProviderKqp) << "Pushed OLAP lambda: " << KqpExprToPrettyString(newProcessLambda, ctx);
+
+ auto newRead = Build<TKqpReadOlapTableRanges>(ctx, node.Pos())
+ .Table(read.Table())
+ .Ranges(read.Ranges())
+ .Columns(read.Columns())
+ .Settings(read.Settings())
+ .ExplainPrompt(read.ExplainPrompt())
+ .Process(newProcessLambda)
+ .Done();
+
+ auto member = Build<TCoMap>(ctx, node.Pos())
+ .Input(newRead)
+ .Lambda()
+ .Args({"row"})
+ .Body<TCoMember>()
+ .Struct("row")
+ .Name(dqPhyLength.Name())
+ .Build()
+ .Build()
+ .Done();
+
+ return member;
+}
+
+} // namespace NKikimr::NKqp::NOpt
diff --git a/ydb/core/kqp/opt/physical/kqp_opt_phy_rules.h b/ydb/core/kqp/opt/physical/kqp_opt_phy_rules.h
index bde2856792..54eb24f227 100644
--- a/ydb/core/kqp/opt/physical/kqp_opt_phy_rules.h
+++ b/ydb/core/kqp/opt/physical/kqp_opt_phy_rules.h
@@ -30,6 +30,12 @@ NYql::NNodes::TExprBase KqpApplyLimitToReadTable(NYql::NNodes::TExprBase node, N
NYql::NNodes::TExprBase KqpPushOlapFilter(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
const TKqpOptimizeContext& kqpCtx, NYql::TTypeAnnotationContext& typesCtx);
+NYql::NNodes::TExprBase KqpPushOlapAggregate(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
+ const TKqpOptimizeContext& kqpCtx);
+
+NYql::NNodes::TExprBase KqpPushOlapLength(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
+ const TKqpOptimizeContext& kqpCtx);
+
NYql::NNodes::TExprBase KqpFloatUpStage(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx);
NYql::NNodes::TExprBase KqpPropagatePrecomuteScalarRowset(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
diff --git a/ydb/core/kqp/prepare/kqp_query_plan.cpp b/ydb/core/kqp/prepare/kqp_query_plan.cpp
index 9d4c6a515d..4ec82d87bf 100644
--- a/ydb/core/kqp/prepare/kqp_query_plan.cpp
+++ b/ydb/core/kqp/prepare/kqp_query_plan.cpp
@@ -641,6 +641,67 @@ private:
return str;
}
+ void FillConnectionPlanNode(const TDqConnection& connection, TQueryPlanNode& planNode) {
+ planNode.Type = EPlanNodeType::Connection;
+
+ if (connection.Maybe<TDqCnUnionAll>()) {
+ planNode.TypeName = "UnionAll";
+ } else if (connection.Maybe<TDqCnBroadcast>()) {
+ planNode.TypeName = "Broadcast";
+ } else if (connection.Maybe<TDqCnMap>()) {
+ planNode.TypeName = "Map";
+ } else if (auto hashShuffle = connection.Maybe<TDqCnHashShuffle>()) {
+ planNode.TypeName = "HashShuffle";
+ auto& keyColumns = planNode.NodeInfo["KeyColumns"];
+ for (const auto& column : hashShuffle.Cast().KeyColumns()) {
+ keyColumns.AppendValue(TString(column.Value()));
+ }
+ } else if (auto merge = connection.Maybe<TDqCnMerge>()) {
+ planNode.TypeName = "Merge";
+ auto& sortColumns = planNode.NodeInfo["SortColumns"];
+ for (const auto& sortColumn : merge.Cast().SortColumns()) {
+ TStringBuilder sortColumnDesc;
+ sortColumnDesc << sortColumn.Column().Value() << " ("
+ << sortColumn.SortDirection().Value() << ")";
+
+ sortColumns.AppendValue(sortColumnDesc);
+ }
+ } else if (auto maybeTableLookup = connection.Maybe<TKqpCnStreamLookup>()) {
+ auto tableLookup = maybeTableLookup.Cast();
+
+ TTableRead readInfo;
+ readInfo.Type = ETableReadType::Lookup;
+ planNode.TypeName = "TableLookup";
+ TString table(tableLookup.Table().Path().Value());
+ auto& tableData = SerializerCtx.TablesData->GetTable(SerializerCtx.Cluster, table);
+ planNode.NodeInfo["Table"] = tableData.RelativePath ? *tableData.RelativePath : table;
+
+ readInfo.Columns.reserve(tableLookup.Columns().Size());
+ auto& columns = planNode.NodeInfo["Columns"];
+ for (const auto& column : tableLookup.Columns()) {
+ columns.AppendValue(column.Value());
+ readInfo.Columns.push_back(TString(column.Value()));
+ }
+
+ const auto lookupKeysType = tableLookup.LookupKeysType().Ref().GetTypeAnn()->Cast<TTypeExprType>()->GetType();
+ YQL_ENSURE(lookupKeysType);
+ YQL_ENSURE(lookupKeysType->GetKind() == ETypeAnnotationKind::List);
+ const auto lookupKeysItemType = lookupKeysType->Cast<TListExprType>()->GetItemType();
+ YQL_ENSURE(lookupKeysItemType->GetKind() == ETypeAnnotationKind::Struct);
+ const auto& lookupKeyColumnsStruct = lookupKeysItemType->Cast<TStructExprType>()->GetItems();
+ readInfo.LookupBy.reserve(lookupKeyColumnsStruct.size());
+ auto& lookupKeyColumns = planNode.NodeInfo["LookupKeyColumns"];
+ for (const auto keyColumn : lookupKeyColumnsStruct) {
+ lookupKeyColumns.AppendValue(keyColumn->GetName());
+ readInfo.LookupBy.push_back(TString(keyColumn->GetName()));
+ }
+
+ SerializerCtx.Tables[table].Reads.push_back(std::move(readInfo));
+ } else {
+ planNode.TypeName = connection.Ref().Content();
+ }
+ }
+
void Visit(const TExprBase& expr, TQueryPlanNode& planNode) {
if (expr.Maybe<TDqPhyStage>()) {
auto stageGuid = NDq::TDqStageSettings::Parse(expr.Cast<TDqPhyStage>()).Id;
@@ -684,31 +745,7 @@ private:
auto inputCn = input.Cast<TDqConnection>();
auto& inputPlanNode = AddPlanNode(stagePlanNode);
- inputPlanNode.Type = EPlanNodeType::Connection;
-
- if (inputCn.Maybe<TDqCnUnionAll>()) {
- inputPlanNode.TypeName = "UnionAll";
- } else if (inputCn.Maybe<TDqCnBroadcast>()) {
- inputPlanNode.TypeName = "Broadcast";
- } else if (auto hashShuffle = inputCn.Maybe<TDqCnHashShuffle>()) {
- inputPlanNode.TypeName = "HashShuffle";
- auto& keyColumns = inputPlanNode.NodeInfo["KeyColumns"];
- for (const auto& column : hashShuffle.Cast().KeyColumns()) {
- keyColumns.AppendValue(TString(column.Value()));
- }
- } else if (auto merge = inputCn.Maybe<TDqCnMerge>()) {
- inputPlanNode.TypeName = "Merge";
- auto& sortColumns = inputPlanNode.NodeInfo["SortColumns"];
- for (const auto& sortColumn : merge.Cast().SortColumns()) {
- TStringBuilder sortColumnDesc;
- sortColumnDesc << sortColumn.Column().Value() << " ("
- << sortColumn.SortDirection().Value() << ")";
-
- sortColumns.AppendValue(sortColumnDesc);
- }
- } else {
- inputPlanNode.TypeName = inputCn.Ref().Content();
- }
+ FillConnectionPlanNode(inputCn, inputPlanNode);
Visit(inputCn.Output().Stage(), inputPlanNode);
}
@@ -753,7 +790,9 @@ private:
})).Cast<TCoJoinDict>();
operatorId = Visit(flatMap, join, planNode);
node = join.Ptr();
- } else if (auto maybeCondense = TMaybeNode<TCoCondense1>(node)) {
+ } else if (auto maybeCondense1 = TMaybeNode<TCoCondense1>(node)) {
+ operatorId = Visit(maybeCondense1.Cast(), planNode);
+ } else if (auto maybeCondense = TMaybeNode<TCoCondense>(node)) {
operatorId = Visit(maybeCondense.Cast(), planNode);
} else if (auto maybeCombiner = TMaybeNode<TCoCombineCore>(node)) {
operatorId = Visit(maybeCombiner.Cast(), planNode);
@@ -803,6 +842,13 @@ private:
return AddOperator(planNode, "Aggregate", std::move(op));
}
+ ui32 Visit(const TCoCondense& /*condense*/, TQueryPlanNode& planNode) {
+ TOperator op;
+ op.Properties["Name"] = "Aggregate";
+
+ return AddOperator(planNode, "Aggregate", std::move(op));
+ }
+
ui32 Visit(const TCoCombineCore& combiner, TQueryPlanNode& planNode) {
TOperator op;
op.Properties["Name"] = "Aggregate";
diff --git a/ydb/core/kqp/prepare/kqp_type_ann.cpp b/ydb/core/kqp/prepare/kqp_type_ann.cpp
index 965efb09c0..bfa6d038d4 100644
--- a/ydb/core/kqp/prepare/kqp_type_ann.cpp
+++ b/ydb/core/kqp/prepare/kqp_type_ann.cpp
@@ -841,6 +841,85 @@ TStatus AnnotateOlapFilterExists(const TExprNode::TPtr& node, TExprContext& ctx)
return TStatus::Ok;
}
+TStatus AnnotateOlapAgg(const TExprNode::TPtr& node, TExprContext& ctx) {
+ if (!EnsureArgsCount(*node, 3, ctx)) {
+ return TStatus::Error;
+ }
+
+ auto* input = node->Child(TKqpOlapAgg::idx_Input);
+
+ const TTypeAnnotationNode* itemType;
+ if (!EnsureNewSeqType<false, false, true>(*input, ctx, &itemType)) {
+ return TStatus::Error;
+ }
+
+ if (!EnsureStructType(input->Pos(), *itemType, ctx)) {
+ return TStatus::Error;
+ }
+
+ auto structType = itemType->Cast<TStructExprType>();
+
+ if (!EnsureTuple(*node->Child(TKqpOlapAgg::idx_Aggregates), ctx)) {
+ return TStatus::Error;
+ }
+
+ TVector<const TItemExprType*> aggTypes;
+ for (auto agg : node->Child(TKqpOlapAgg::idx_Aggregates)->ChildrenList()) {
+ auto aggName = agg->Child(TKqpOlapAggOperation::idx_Name);
+ auto opType = agg->Child(TKqpOlapAggOperation::idx_Type);
+ auto colName = agg->Child(TKqpOlapAggOperation::idx_Column);
+ if (!EnsureAtom(*opType, ctx)) {
+ ctx.AddError(TIssue(
+ ctx.GetPosition(node->Pos()),
+ TStringBuilder() << "Expected operation type in OLAP aggregation, got: " << opType->Content()
+ ));
+ return TStatus::Error;
+ }
+ if (!EnsureAtom(*colName, ctx)) {
+ ctx.AddError(TIssue(
+ ctx.GetPosition(node->Pos()),
+ TStringBuilder() << "Expected column name in OLAP aggregation, got: " << colName->Content()
+ ));
+ return TStatus::Error;
+ }
+ if (!EnsureAtom(*aggName, ctx)) {
+ ctx.AddError(TIssue(
+ ctx.GetPosition(node->Pos()),
+ TStringBuilder() << "Expected aggregate column generated name in OLAP aggregation, got: " << aggName->Content()
+ ));
+ return TStatus::Error;
+ }
+ if (opType->Content() == "count") {
+ aggTypes.push_back(ctx.MakeType<TItemExprType>(aggName->Content(), ctx.MakeType<TDataExprType>(EDataSlot::Uint64)));
+ } else if (opType->Content() == "some") {
+ aggTypes.push_back(ctx.MakeType<TItemExprType>(aggName->Content(), structType->FindItemType(colName->Content())));
+ } else {
+ ctx.AddError(TIssue(
+ ctx.GetPosition(node->Pos()),
+ TStringBuilder() << "Unsupported operation type in OLAP aggregation, got: " << opType->Content()
+ ));
+ return TStatus::Error;
+ }
+ }
+
+ if (!EnsureTuple(*node->Child(TKqpOlapAgg::idx_KeyColumns), ctx)) {
+ return TStatus::Error;
+ }
+ for (auto keyCol : node->Child(TKqpOlapAgg::idx_KeyColumns)->ChildrenList()) {
+ if (!EnsureAtom(*keyCol, ctx)) {
+ ctx.AddError(TIssue(
+ ctx.GetPosition(node->Pos()),
+ TStringBuilder() << "Expected column name in OLAP key columns, got: " << keyCol->Content()
+ ));
+ return TStatus::Error;
+ }
+ aggTypes.push_back(ctx.MakeType<TItemExprType>(keyCol->Content(), structType->FindItemType(keyCol->Content())));
+ }
+
+ node->SetTypeAnn(MakeSequenceType(input->GetTypeAnn()->GetKind(), *ctx.MakeType<TStructExprType>(aggTypes), ctx));
+ return TStatus::Ok;
+}
+
TStatus AnnotateKqpTxInternalBinding(const TExprNode::TPtr& node, TExprContext& ctx) {
if (!EnsureArgsCount(*node, 2, ctx)) {
return TStatus::Error;
@@ -1154,6 +1233,10 @@ TAutoPtr<IGraphTransformer> CreateKqpTypeAnnotationTransformer(const TString& cl
return AnnotateOlapFilterExists(input, ctx);
}
+ if (TKqpOlapAgg::Match(input.Get())) {
+ return AnnotateOlapAgg(input, ctx);
+ }
+
if (TKqpCnMapShard::Match(input.Get()) || TKqpCnShuffleShard::Match(input.Get())) {
return AnnotateDqConnection(input, ctx);
}
diff --git a/ydb/core/kqp/provider/CMakeLists.txt b/ydb/core/kqp/provider/CMakeLists.txt
index 3f2b185a98..c4c32c34a2 100644
--- a/ydb/core/kqp/provider/CMakeLists.txt
+++ b/ydb/core/kqp/provider/CMakeLists.txt
@@ -7,6 +7,8 @@
find_package(Python3 REQUIRED)
+add_subdirectory(mkql)
+add_subdirectory(ut)
add_library(core-kqp-provider)
target_compile_options(core-kqp-provider PRIVATE
diff --git a/ydb/core/kqp/provider/ut/CMakeLists.txt b/ydb/core/kqp/provider/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kqp/provider/ut/CMakeLists.txt
+++ b/ydb/core/kqp/provider/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/provider/yql_kikimr_datasink.cpp b/ydb/core/kqp/provider/yql_kikimr_datasink.cpp
index 0d1f6af769..37f443e1bb 100644
--- a/ydb/core/kqp/provider/yql_kikimr_datasink.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_datasink.cpp
@@ -313,7 +313,7 @@ public:
, SessionCtx(sessionCtx)
, IntentDeterminationTransformer(CreateKiSinkIntentDeterminationTransformer(sessionCtx))
, TypeAnnotationTransformer(CreateKiSinkTypeAnnotationTransformer(gateway, sessionCtx))
- , LogicalOptProposalTransformer(CreateKiLogicalOptProposalTransformer(sessionCtx))
+ , LogicalOptProposalTransformer(CreateKiLogicalOptProposalTransformer(sessionCtx, types))
, PhysicalOptProposalTransformer(CreateKiPhysicalOptProposalTransformer(sessionCtx))
, CallableExecutionTransformer(CreateKiSinkCallableExecutionTransformer(gateway, sessionCtx, queryExecutor))
, PlanInfoTransformer(CreateKiSinkPlanInfoTransformer(queryExecutor))
diff --git a/ydb/core/kqp/provider/yql_kikimr_opt.cpp b/ydb/core/kqp/provider/yql_kikimr_opt.cpp
index e04c518f2f..642f5f3a62 100644
--- a/ydb/core/kqp/provider/yql_kikimr_opt.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_opt.cpp
@@ -2,8 +2,8 @@
#include <ydb/library/yql/utils/log/log.h>
#include <ydb/library/yql/core/common_opt/yql_co.h>
+#include<ydb/library/yql/core/yql_aggregate_expander.h>
#include <ydb/library/yql/core/yql_opt_utils.h>
-#include <ydb/library/yql/core/yql_opt_aggregate.h>
namespace NYql {
namespace {
@@ -100,7 +100,7 @@ TExprNode::TPtr KiEraseOverSelectRow(TExprBase node, TExprContext& ctx) {
return node.Ptr();
}
-TExprNode::TPtr KiRewriteAggregate(TExprBase node, TExprContext& ctx) {
+TExprNode::TPtr KiRewriteAggregate(TExprBase node, TExprContext& ctx, TTypeAnnotationContext& typesCtx) {
if (!node.Maybe<TCoAggregate>()) {
return node.Ptr();
}
@@ -120,7 +120,8 @@ TExprNode::TPtr KiRewriteAggregate(TExprBase node, TExprContext& ctx) {
}
YQL_CLOG(INFO, ProviderKikimr) << "KiRewriteAggregate";
- return ExpandAggregate(true, node.Ptr(), ctx);
+ TAggregateExpander aggExpander(true, node.Ptr(), ctx, typesCtx);
+ return aggExpander.ExpandAggregate();
}
TExprNode::TPtr KiRedundantSortByPk(TExprBase node, TExprContext& ctx,
@@ -655,8 +656,8 @@ TExprNode::TPtr KiApplyExtractMembersToSelectRange(TExprBase node, TExprContext&
} // namespace
-TAutoPtr<IGraphTransformer> CreateKiLogicalOptProposalTransformer(TIntrusivePtr<TKikimrSessionContext> sessionCtx) {
- return CreateFunctorTransformer([sessionCtx](const TExprNode::TPtr& input, TExprNode::TPtr& output,
+TAutoPtr<IGraphTransformer> CreateKiLogicalOptProposalTransformer(TIntrusivePtr<TKikimrSessionContext> sessionCtx, TTypeAnnotationContext& types) {
+ return CreateFunctorTransformer([sessionCtx, &types](const TExprNode::TPtr& input, TExprNode::TPtr& output,
TExprContext& ctx)
{
typedef IGraphTransformer::TStatus TStatus;
@@ -666,7 +667,7 @@ TAutoPtr<IGraphTransformer> CreateKiLogicalOptProposalTransformer(TIntrusivePtr<
GatherParents(*input, parentsMap);
optCtx.ParentsMap = &parentsMap;
- TStatus status = OptimizeExpr(input, output, [sessionCtx, &optCtx](const TExprNode::TPtr& inputNode, TExprContext& ctx) {
+ TStatus status = OptimizeExpr(input, output, [sessionCtx, &optCtx, &types](const TExprNode::TPtr& inputNode, TExprContext& ctx) {
auto ret = inputNode;
TExprBase node(inputNode);
@@ -710,7 +711,7 @@ TAutoPtr<IGraphTransformer> CreateKiLogicalOptProposalTransformer(TIntrusivePtr<
return ret;
}
- ret = KiRewriteAggregate(node, ctx);
+ ret = KiRewriteAggregate(node, ctx, types);
if (ret != inputNode) {
return ret;
}
diff --git a/ydb/core/kqp/provider/yql_kikimr_opt_utils.cpp b/ydb/core/kqp/provider/yql_kikimr_opt_utils.cpp
index 19dc6a0ba2..912dfca53c 100644
--- a/ydb/core/kqp/provider/yql_kikimr_opt_utils.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_opt_utils.cpp
@@ -12,8 +12,10 @@ bool GetEquiJoinKeyTypes(TExprBase leftInput, const TString& leftColumnName,
{
auto rightType = rightTable.GetColumnType(rightColumnName);
YQL_ENSURE(rightType);
- YQL_ENSURE(rightType->GetKind() == ETypeAnnotationKind::Optional);
- rightType = rightType->Cast<TOptionalExprType>()->GetItemType();
+ if (rightType->GetKind() == ETypeAnnotationKind::Optional) {
+ rightType = rightType->Cast<TOptionalExprType>()->GetItemType();
+ }
+
YQL_ENSURE(rightType->GetKind() == ETypeAnnotationKind::Data);
rightData = rightType->Cast<TDataExprType>();
diff --git a/ydb/core/kqp/provider/yql_kikimr_provider.cpp b/ydb/core/kqp/provider/yql_kikimr_provider.cpp
index eb492ccef0..59d155eb9d 100644
--- a/ydb/core/kqp/provider/yql_kikimr_provider.cpp
+++ b/ydb/core/kqp/provider/yql_kikimr_provider.cpp
@@ -569,133 +569,6 @@ void TableDescriptionToTableInfo(const TKikimrTableDescription& desc, TYdbOperat
TableDescriptionToTableInfoImpl(desc, op, std::back_inserter(infos));
}
-bool TKikimrTransactionContextBase::ApplyTableOperations(const TVector<NKqpProto::TKqpTableOp>& operations,
- const TVector<NKqpProto::TKqpTableInfo>& tableInfos, NKikimrKqp::EIsolationLevel isolationLevel, bool strictDml,
- EKikimrQueryType queryType, TExprContext& ctx)
-{
- if (IsClosed()) {
- TString message = TStringBuilder() << "Cannot perform operations on closed transaction.";
- ctx.AddError(YqlIssue({}, TIssuesIds::KIKIMR_BAD_OPERATION, message));
- return false;
- }
-
- isolationLevel = EffectiveIsolationLevel
- ? *EffectiveIsolationLevel
- : isolationLevel;
-
- bool hasScheme = false;
- bool hasData = false;
- for (auto& pair : TableOperations) {
- hasScheme = hasScheme || (pair.second & KikimrSchemeOps());
- hasData = hasData || (pair.second & KikimrDataOps());
- }
-
- THashMap<TString, NKqpProto::TKqpTableInfo> tableInfoMap;
- for (const auto& info : tableInfos) {
- tableInfoMap.insert(std::make_pair(info.GetTableName(), info));
-
- TKikimrPathId pathId(info.GetTableId().GetOwnerId(), info.GetTableId().GetTableId());
- TableByIdMap.insert(std::make_pair(pathId, info.GetTableName()));
- }
-
- for (const auto& op : operations) {
- const auto& table = op.GetTable();
-
- auto newOp = TYdbOperation(op.GetOperation());
- TPosition pos(op.GetPosition().GetColumn(), op.GetPosition().GetRow());
-
- const auto info = tableInfoMap.FindPtr(table);
- if (!info) {
- TString message = TStringBuilder()
- << "Unable to find table info for table '" << table << "'";
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_SCHEME_ERROR, message));
- return false;
- }
-
- if (queryType == EKikimrQueryType::Dml && (newOp & KikimrSchemeOps())) {
- TString message = TStringBuilder() << "Operation '" << newOp
- << "' can't be performed in data query";
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
- return false;
- }
-
- if (queryType == EKikimrQueryType::Ddl && (newOp & KikimrDataOps())) {
- TString message = TStringBuilder() << "Operation '" << newOp
- << "' can't be performed in scheme query";
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
- return false;
- }
-
- if (queryType == EKikimrQueryType::Scan && (newOp & KikimrModifyOps())) {
- TString message = TStringBuilder() << "Operation '" << newOp
- << "' can't be performed in scan query";
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
- return false;
- }
-
- if (hasData && (newOp & KikimrSchemeOps()) ||
- hasScheme && (newOp & KikimrDataOps()))
- {
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_MIXED_SCHEME_DATA_TX));
- return false;
- }
-
- if (Readonly && (newOp & KikimrModifyOps())) {
- TString message = TStringBuilder() << "Operation '" << newOp
- << "' can't be performed in read only transaction";
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
- return false;
- }
-
- auto& currentOps = TableOperations[table];
-
- if (currentOps & KikimrModifyOps()) {
- if (KikimrRequireUnmodifiedOps() & newOp) {
- TString message = TStringBuilder() << "Operation '" << newOp
- << "' can't be performed on previously modified table: " << table;
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
- return false;
- }
-
- if (KikimrReadOps() & newOp) {
- TString message = TStringBuilder() << "Data modifications previously made to table '" << table
- << "' in current transaction won't be seen by operation: '" << newOp << "'";
- if (!AddDmlIssue(YqlIssue(pos, TIssuesIds::KIKIMR_READ_MODIFIED_TABLE, message), strictDml, ctx)) {
- return false;
- }
- }
-
- if (info->GetHasIndexTables()) {
- TString message = TStringBuilder() << "Multiple modification of table with secondary indexes is not supported yet";
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
- return false;
- }
- }
-
- if ((KikimrRequireUnmodifiedOps() & newOp) && isolationLevel != NKikimrKqp::ISOLATION_LEVEL_SERIALIZABLE) {
- TString message = TStringBuilder()
- << "Operation '" << newOp << "' is only supported with SERIALIZABLE isolation level";
- ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
- return false;
- }
-
- // TODO: KIKIMR-3206
- bool currentDelete = currentOps & (TYdbOperation::Delete | TYdbOperation::DeleteOn);
- bool newUpdate = newOp == TYdbOperation::Update;
- if (currentDelete && newUpdate) {
- TString message = TStringBuilder() << "Operation '" << newOp
- << "' may lead to unexpected results when applied to table with deleted rows: " << table;
- if (!AddDmlIssue(YqlIssue(pos, TIssuesIds::KIKIMR_UPDATE_TABLE_WITH_DELETES, message), strictDml, ctx)) {
- return false;
- }
- }
-
- currentOps |= newOp;
- }
-
- return true;
-}
-
const THashSet<TStringBuf>& KikimrDataSourceFunctions() {
return Singleton<TKikimrData>()->DataSourceNames;
}
diff --git a/ydb/core/kqp/provider/yql_kikimr_provider.h b/ydb/core/kqp/provider/yql_kikimr_provider.h
index 523387bbf3..36ce216011 100644
--- a/ydb/core/kqp/provider/yql_kikimr_provider.h
+++ b/ydb/core/kqp/provider/yql_kikimr_provider.h
@@ -260,22 +260,15 @@ enum class TYdbOperation : ui32 {
Y_DECLARE_FLAGS(TYdbOperations, TYdbOperation)
Y_DECLARE_OPERATORS_FOR_FLAGS(TYdbOperations)
-class IKikimrTransactionContext : public TThrRefBase {
-public:
- virtual void Invalidate() = 0;
- virtual void Finish() = 0;
-
- virtual bool IsInvalidated() const = 0;
- virtual bool IsClosed() const = 0;
-
- virtual bool ApplyTableOperations(const TVector<NKqpProto::TKqpTableOp>& operations,
- const TVector<NKqpProto::TKqpTableInfo>& tableInfo, NKikimrKqp::EIsolationLevel isolationLevel,
- bool strictDml, EKikimrQueryType queryType, TExprContext& ctx) = 0;
+const TYdbOperations& KikimrSchemeOps();
+const TYdbOperations& KikimrDataOps();
+const TYdbOperations& KikimrModifyOps();
+const TYdbOperations& KikimrReadOps();
+const TYdbOperations& KikimrRequireUnmodifiedOps();
- virtual ~IKikimrTransactionContext() = default;
-};
+bool AddDmlIssue(const TIssue& issue, bool strictDml, TExprContext& ctx);
-class TKikimrTransactionContextBase : public IKikimrTransactionContext {
+class TKikimrTransactionContextBase : public TThrRefBase {
public:
THashMap<TString, TYdbOperations> TableOperations;
THashMap<TKikimrPathId, TString> TableByIdMap;
@@ -288,19 +281,19 @@ public:
return EffectiveIsolationLevel.Defined();
}
- bool IsInvalidated() const override {
+ bool IsInvalidated() const {
return Invalidated;
}
- bool IsClosed() const override {
+ bool IsClosed() const {
return Closed;
}
- void Finish() override {
+ virtual void Finish() {
Closed = true;
}
- void Invalidate() override {
+ void Invalidate() {
if (HasStarted()) {
Invalidated = true;
}
@@ -315,13 +308,141 @@ public:
Closed = false;
}
- bool ApplyTableOperations(const TVector<NKqpProto::TKqpTableOp>& operations, const TVector<NKqpProto::TKqpTableInfo>& tableInfo,
- NKikimrKqp::EIsolationLevel isolationLevel, bool strictDml, EKikimrQueryType queryType, TExprContext& ctx) override;
+ template<class IterableKqpTableOps, class IterableKqpTableInfos>
+ bool ApplyTableOperations(const IterableKqpTableOps& operations,
+ const IterableKqpTableInfos& tableInfos, NKikimrKqp::EIsolationLevel isolationLevel, bool strictDml,
+ EKikimrQueryType queryType, TExprContext& ctx)
+ {
+ if (IsClosed()) {
+ TString message = TStringBuilder() << "Cannot perform operations on closed transaction.";
+ ctx.AddError(YqlIssue({}, TIssuesIds::KIKIMR_BAD_OPERATION, message));
+ return false;
+ }
+
+ isolationLevel = EffectiveIsolationLevel
+ ? *EffectiveIsolationLevel
+ : isolationLevel;
+
+ bool hasScheme = false;
+ bool hasData = false;
+ for (auto& pair : TableOperations) {
+ hasScheme = hasScheme || (pair.second & KikimrSchemeOps());
+ hasData = hasData || (pair.second & KikimrDataOps());
+ }
+
+ THashMap<TString, NKqpProto::TKqpTableInfo> tableInfoMap;
+ for (const auto& info : tableInfos) {
+ tableInfoMap.insert(std::make_pair(info.GetTableName(), info));
+
+ TKikimrPathId pathId(info.GetTableId().GetOwnerId(), info.GetTableId().GetTableId());
+ TableByIdMap.insert(std::make_pair(pathId, info.GetTableName()));
+ }
+
+ for (const auto& op : operations) {
+ const auto& table = op.GetTable();
+
+ auto newOp = TYdbOperation(op.GetOperation());
+ TPosition pos(op.GetPosition().GetColumn(), op.GetPosition().GetRow());
+
+ const auto info = tableInfoMap.FindPtr(table);
+ if (!info) {
+ TString message = TStringBuilder()
+ << "Unable to find table info for table '" << table << "'";
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_SCHEME_ERROR, message));
+ return false;
+ }
+
+ if (queryType == EKikimrQueryType::Dml && (newOp & KikimrSchemeOps())) {
+ TString message = TStringBuilder() << "Operation '" << newOp
+ << "' can't be performed in data query";
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
+ return false;
+ }
+
+ if (queryType == EKikimrQueryType::Ddl && (newOp & KikimrDataOps())) {
+ TString message = TStringBuilder() << "Operation '" << newOp
+ << "' can't be performed in scheme query";
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
+ return false;
+ }
+
+ if (queryType == EKikimrQueryType::Scan && (newOp & KikimrModifyOps())) {
+ TString message = TStringBuilder() << "Operation '" << newOp
+ << "' can't be performed in scan query";
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
+ return false;
+ }
+
+ if (hasData && (newOp & KikimrSchemeOps()) ||
+ hasScheme && (newOp & KikimrDataOps()))
+ {
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_MIXED_SCHEME_DATA_TX));
+ return false;
+ }
+
+ if (Readonly && (newOp & KikimrModifyOps())) {
+ TString message = TStringBuilder() << "Operation '" << newOp
+ << "' can't be performed in read only transaction";
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
+ return false;
+ }
+
+ auto& currentOps = TableOperations[table];
+
+ if (currentOps & KikimrModifyOps()) {
+ if (KikimrRequireUnmodifiedOps() & newOp) {
+ TString message = TStringBuilder() << "Operation '" << newOp
+ << "' can't be performed on previously modified table: " << table;
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
+ return false;
+ }
+
+ if (KikimrReadOps() & newOp) {
+ TString message = TStringBuilder() << "Data modifications previously made to table '" << table
+ << "' in current transaction won't be seen by operation: '" << newOp << "'";
+ if (!AddDmlIssue(YqlIssue(pos, TIssuesIds::KIKIMR_READ_MODIFIED_TABLE, message), strictDml, ctx)) {
+ return false;
+ }
+ }
+
+ if (info->GetHasIndexTables()) {
+ TString message = TStringBuilder() << "Multiple modification of table with secondary indexes is not supported yet";
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
+ return false;
+ }
+ }
+
+ if ((KikimrRequireUnmodifiedOps() & newOp) && isolationLevel != NKikimrKqp::ISOLATION_LEVEL_SERIALIZABLE) {
+ TString message = TStringBuilder()
+ << "Operation '" << newOp << "' is only supported with SERIALIZABLE isolation level";
+ ctx.AddError(YqlIssue(pos, TIssuesIds::KIKIMR_BAD_OPERATION, message));
+ return false;
+ }
+
+ // TODO: KIKIMR-3206
+ bool currentDelete = currentOps & (TYdbOperation::Delete | TYdbOperation::DeleteOn);
+ bool newUpdate = newOp == TYdbOperation::Update;
+ if (currentDelete && newUpdate) {
+ TString message = TStringBuilder() << "Operation '" << newOp
+ << "' may lead to unexpected results when applied to table with deleted rows: " << table;
+ if (!AddDmlIssue(YqlIssue(pos, TIssuesIds::KIKIMR_UPDATE_TABLE_WITH_DELETES, message), strictDml, ctx)) {
+ return false;
+ }
+ }
+
+ currentOps |= newOp;
+ }
+
+ return true;
+ }
+
+ virtual ~TKikimrTransactionContextBase() = default;
+
};
class TKikimrSessionContext : public TThrRefBase {
public:
- TKikimrSessionContext(TKikimrConfiguration::TPtr config, TIntrusivePtr<IKikimrTransactionContext> txCtx = nullptr)
+ TKikimrSessionContext(TKikimrConfiguration::TPtr config, TIntrusivePtr<TKikimrTransactionContextBase> txCtx = nullptr)
: Configuration(config)
, TablesData(MakeIntrusive<TKikimrTablesData>())
, QueryCtx(MakeIntrusive<TKikimrQueryContext>())
@@ -333,16 +454,16 @@ public:
TKikimrConfiguration& Config() { return *Configuration; }
TKikimrTablesData& Tables() { return *TablesData; }
TKikimrQueryContext& Query() { return *QueryCtx; }
- IKikimrTransactionContext& Tx() { Y_VERIFY(HasTx()); return *TxCtx; }
+ TKikimrTransactionContextBase& Tx() { Y_VERIFY(HasTx()); return *TxCtx; }
TKikimrConfiguration::TPtr ConfigPtr() { return Configuration; }
TIntrusivePtr<TKikimrTablesData> TablesPtr() { return TablesData; }
TIntrusivePtr<TKikimrQueryContext> QueryPtr() { return QueryCtx; }
- TIntrusivePtr<IKikimrTransactionContext> TxPtr() { return TxCtx; }
+ TIntrusivePtr<TKikimrTransactionContextBase> TxPtr() { return TxCtx; }
bool HasTx() const { return !!TxCtx; }
void ClearTx() { TxCtx.Reset(); }
- void SetTx(TIntrusivePtr<IKikimrTransactionContext>& txCtx) { TxCtx.Reset(txCtx); }
+ void SetTx(TIntrusivePtr<TKikimrTransactionContextBase>& txCtx) { TxCtx.Reset(txCtx); }
TString GetUserName() const {
return UserName;
@@ -376,11 +497,9 @@ private:
TKikimrConfiguration::TPtr Configuration;
TIntrusivePtr<TKikimrTablesData> TablesData;
TIntrusivePtr<TKikimrQueryContext> QueryCtx;
- TIntrusivePtr<IKikimrTransactionContext> TxCtx;
+ TIntrusivePtr<TKikimrTransactionContextBase> TxCtx;
};
-bool AddDmlIssue(const TIssue& issue, bool strictDml, TExprContext& ctx);
-
TIntrusivePtr<IDataProvider> CreateKikimrDataSource(
const NKikimr::NMiniKQL::IFunctionRegistry& functionRegistry,
TTypeAnnotationContext& types,
diff --git a/ydb/core/kqp/provider/yql_kikimr_provider_impl.h b/ydb/core/kqp/provider/yql_kikimr_provider_impl.h
index 2149d95309..db334d3061 100644
--- a/ydb/core/kqp/provider/yql_kikimr_provider_impl.h
+++ b/ydb/core/kqp/provider/yql_kikimr_provider_impl.h
@@ -181,7 +181,7 @@ TAutoPtr<IGraphTransformer> CreateKiSourceTypeAnnotationTransformer(TIntrusivePt
TTypeAnnotationContext& types);
TAutoPtr<IGraphTransformer> CreateKiSinkTypeAnnotationTransformer(TIntrusivePtr<IKikimrGateway> gateway,
TIntrusivePtr<TKikimrSessionContext> sessionCtx);
-TAutoPtr<IGraphTransformer> CreateKiLogicalOptProposalTransformer(TIntrusivePtr<TKikimrSessionContext> sessionCtx);
+TAutoPtr<IGraphTransformer> CreateKiLogicalOptProposalTransformer(TIntrusivePtr<TKikimrSessionContext> sessionCtx, TTypeAnnotationContext& types);
TAutoPtr<IGraphTransformer> CreateKiPhysicalOptProposalTransformer(TIntrusivePtr<TKikimrSessionContext> sessionCtx);
TAutoPtr<IGraphTransformer> CreateKiSourceLoadTableMetadataTransformer(TIntrusivePtr<IKikimrGateway> gateway,
TIntrusivePtr<TKikimrSessionContext> sessionCtx);
@@ -272,12 +272,6 @@ const TStringBuf& KikimrCommitModeFlush();
const TStringBuf& KikimrCommitModeRollback();
const TStringBuf& KikimrCommitModeScheme();
-const TYdbOperations& KikimrSchemeOps();
-const TYdbOperations& KikimrDataOps();
-const TYdbOperations& KikimrModifyOps();
-const TYdbOperations& KikimrReadOps();
-const TYdbOperations& KikimrRequireUnmodifiedOps();
-
const TMap<TString, NKikimr::NUdf::EDataSlot>& KikimrSystemColumns();
bool IsKikimrSystemColumn(const TStringBuf columnName);
diff --git a/ydb/core/kqp/proxy/CMakeLists.txt b/ydb/core/kqp/proxy/CMakeLists.txt
index 3a74aabea9..bdec739417 100644
--- a/ydb/core/kqp/proxy/CMakeLists.txt
+++ b/ydb/core/kqp/proxy/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-kqp-proxy)
target_compile_options(core-kqp-proxy PRIVATE
diff --git a/ydb/core/kqp/proxy/kqp_proxy_service.cpp b/ydb/core/kqp/proxy/kqp_proxy_service.cpp
index 9bbbb1320b..2e198a3d4f 100644
--- a/ydb/core/kqp/proxy/kqp_proxy_service.cpp
+++ b/ydb/core/kqp/proxy/kqp_proxy_service.cpp
@@ -117,147 +117,6 @@ TString EncodeSessionId(ui32 nodeId, const TString& id) {
}
-class TLocalSessionsRegistry {
- THashMap<TString, TKqpSessionInfo> LocalSessions;
- THashMap<TActorId, TString> TargetIdIndex;
- THashSet<TString> ShutdownInFlightSessions;
- THashMap<TString, ui32> SessionsCountPerDatabase;
- std::vector<std::vector<TString>> ReadySessions;
- TIntrusivePtr<IRandomProvider> RandomProvider;
-
-public:
- TLocalSessionsRegistry(TIntrusivePtr<IRandomProvider> randomProvider)
- : ReadySessions(2)
- , RandomProvider(randomProvider)
- {}
-
- TKqpSessionInfo* Create(const TString& sessionId, const TActorId& workerId,
- const TString& database, TKqpDbCountersPtr dbCounters, bool supportsBalancing)
- {
- std::vector<i32> pos(2, -1);
- pos[0] = ReadySessions[0].size();
- ReadySessions[0].push_back(sessionId);
-
- if (supportsBalancing) {
- pos[1] = ReadySessions[1].size();
- ReadySessions[1].push_back(sessionId);
- }
-
- auto result = LocalSessions.emplace(sessionId, TKqpSessionInfo(sessionId, workerId, database, dbCounters, std::move(pos)));
- SessionsCountPerDatabase[database]++;
- Y_VERIFY(result.second, "Duplicate session id!");
- TargetIdIndex.emplace(workerId, sessionId);
- return &result.first->second;
- }
-
- const THashSet<TString>& GetShutdownInFlight() const {
- return ShutdownInFlightSessions;
- }
-
- TKqpSessionInfo* StartShutdownSession(const TString& sessionId) {
- ShutdownInFlightSessions.emplace(sessionId);
- auto ptr = LocalSessions.FindPtr(sessionId);
- ptr->ShutdownStartedAt = TAppData::TimeProvider->Now();
- RemoveSessionFromLists(ptr);
- return ptr;
- }
-
- TKqpSessionInfo* PickSessionToShutdown(bool force, ui32 minReasonableToKick) {
- auto& sessions = force ? ReadySessions.at(0) : ReadySessions.at(1);
- if (sessions.size() >= minReasonableToKick) {
- ui64 idx = RandomProvider->GenRand() % sessions.size();
- return StartShutdownSession(sessions[idx]);
- }
-
- return nullptr;
- }
-
- THashMap<TString, TKqpSessionInfo>::const_iterator begin() const {
- return LocalSessions.begin();
- }
-
- THashMap<TString, TKqpSessionInfo>::const_iterator end() const {
- return LocalSessions.end();
- }
-
- size_t GetShutdownInFlightSize() const {
- return ShutdownInFlightSessions.size();
- }
-
- void Erase(const TString& sessionId) {
- auto it = LocalSessions.find(sessionId);
- if (it != LocalSessions.end()) {
- auto counter = SessionsCountPerDatabase.find(it->second.Database);
- if (counter != SessionsCountPerDatabase.end()) {
- counter->second--;
- if (counter->second == 0) {
- SessionsCountPerDatabase.erase(counter);
- }
- }
-
- RemoveSessionFromLists(&(it->second));
- ShutdownInFlightSessions.erase(sessionId);
- TargetIdIndex.erase(it->second.WorkerId);
- LocalSessions.erase(it);
- }
- }
-
- void RemoveSessionFromLists(TKqpSessionInfo* ptr) {
- for(ui32 i = 0; i < ptr->ReadyPos.size(); ++i) {
- i32& pos = ptr->ReadyPos.at(i);
- auto& sessions = ReadySessions.at(i);
- if (pos != -1 && pos + 1 != static_cast<i32>(sessions.size())) {
- auto& lastPos = LocalSessions.at(sessions.back()).ReadyPos.at(i);
- Y_VERIFY(lastPos + 1 == static_cast<i32>(sessions.size()));
- std::swap(sessions[pos], sessions[lastPos]);
- lastPos = pos;
- }
-
- if (pos != -1) {
- sessions.pop_back();
- pos = -1;
- }
- }
- }
-
- const TKqpSessionInfo* IsPendingShutdown(const TString& sessionId) const {
- if (ShutdownInFlightSessions.find(sessionId) != ShutdownInFlightSessions.end()) {
- return FindPtr(sessionId);
- }
-
- return nullptr;
- }
-
- bool CheckDatabaseLimits(const TString& database, ui32 databaseLimit) {
- auto it = SessionsCountPerDatabase.find(database);
- if (it == SessionsCountPerDatabase.end()){
- return true;
- }
-
- if (it->second + 1 <= databaseLimit) {
- return true;
- }
-
- return false;
- }
-
- size_t size() const {
- return LocalSessions.size();
- }
-
- const TKqpSessionInfo* FindPtr(const TString& sessionId) const {
- return LocalSessions.FindPtr(sessionId);
- }
-
- void Erase(const TActorId& targetId) {
- auto it = TargetIdIndex.find(targetId);
- if (it != TargetIdIndex.end()){
- Erase(it->second);
- }
- }
-};
-
-
class TKqpProxyService : public TActorBootstrapped<TKqpProxyService> {
struct TEvPrivate {
enum EEv {
@@ -456,8 +315,7 @@ public:
DoPublishResources();
}
- void Handle(TEvPrivate::TEvReadyToPublishResources::TPtr& ev) {
- Y_UNUSED(ev);
+ void Handle(TEvPrivate::TEvReadyToPublishResources::TPtr&) {
ResourcesPublishScheduled = false;
DoPublishResources();
}
@@ -493,8 +351,7 @@ public:
PublishResourceUsage();
}
- void Handle(NConsole::TEvConfigsDispatcher::TEvSetConfigSubscriptionResponse::TPtr& ev) {
- Y_UNUSED(ev);
+ void Handle(NConsole::TEvConfigsDispatcher::TEvSetConfigSubscriptionResponse::TPtr&) {
KQP_PROXY_LOG_D("Subscribed for config changes.");
}
@@ -561,7 +418,7 @@ public:
}
}
- bool CreateRemoteSession(TEvKqp::TEvCreateSessionRequest::TPtr& ev) {
+ bool CreateRemoteSession(TEvKqp::TEvCreateSessionRequest::TPtr& ev, ui64 requestId) {
auto& event = ev->Get()->Record;
if (!event.GetCanCreateRemoteSession() || LocalDatacenterProxies.empty()) {
return false;
@@ -584,7 +441,6 @@ public:
remoteRequest->Record.SetSupportsBalancing(event.GetSupportsBalancing());
remoteRequest->Record.MutableRequest()->SetDatabase(event.GetRequest().GetDatabase());
- ui64 requestId = PendingRequests.RegisterRequest(ev->Sender, ev->Cookie, event.GetTraceId(), TKqpEvents::EvCreateSessionRequest);
Send(MakeKqpProxyID(nodeId), remoteRequest.release(), IEventHandle::FlagTrackDelivery, requestId);
TDuration timeout = DEFAULT_CREATE_SESSION_TIMEOUT;
StartQueryTimeout(requestId, timeout);
@@ -595,7 +451,8 @@ public:
auto& event = ev->Get()->Record;
auto& request = event.GetRequest();
TKqpRequestInfo requestInfo(event.GetTraceId());
- if (CreateRemoteSession(ev)) {
+ ui64 requestId = PendingRequests.RegisterRequest(ev->Sender, ev->Cookie, event.GetTraceId(), TKqpEvents::EvCreateSessionRequest);
+ if (CreateRemoteSession(ev, requestId)) {
return;
}
@@ -622,6 +479,7 @@ public:
responseEv->Record.SetYdbStatus(result.YdbStatus);
responseEv->Record.SetError(result.Error);
+ PendingRequests.Erase(requestId);
LogResponse(event.GetTraceId(), responseEv->Record, dbCounters);
Send(ev->Sender, responseEv.Release(), 0, ev->Cookie);
}
@@ -632,8 +490,28 @@ public:
TString traceId = event.GetTraceId();
TKqpRequestInfo requestInfo(traceId);
ui64 requestId = PendingRequests.RegisterRequest(ev->Sender, ev->Cookie, traceId, TKqpEvents::EvQueryRequest);
+ if (request.GetSessionId().empty()) {
+ TProcessResult<TKqpSessionInfo*> result;
+ if (!CreateNewSessionWorker(requestInfo, TString(DefaultKikimrPublicClusterName), false,
+ request.GetDatabase(), false, result))
+ {
+ LogRequest(request, requestInfo, ev->Sender, requestId, Counters->GetDbCounters(request.GetDatabase()));
+ ReplyProcessError(result.YdbStatus, result.Error, requestId);
+ return;
+ }
- auto dbCounters = GetDbCountersForSession(request.GetSessionId());
+ request.SetSessionId(result.Value->SessionId);
+ }
+
+ TString sessionId = request.GetSessionId();
+ const TKqpSessionInfo* sessionInfo = LocalSessions->FindPtr(sessionId);
+ auto dbCounters = sessionInfo ? sessionInfo->DbCounters : nullptr;
+ if (!dbCounters) {
+ dbCounters = Counters->GetDbCounters(request.GetDatabase());
+ }
+
+ PendingRequests.SetSessionId(requestId, sessionId, dbCounters);
+ LogRequest(request, requestInfo, ev->Sender, requestId, dbCounters);
auto queryLimitBytes = TableServiceConfig.GetQueryLimitBytes();
if (queryLimitBytes && IsSqlQuery(request.GetType())) {
@@ -641,10 +519,6 @@ public:
if (querySizeBytes > queryLimitBytes) {
TString error = TStringBuilder() << "Query text size exceeds limit (" << querySizeBytes << "b > " << queryLimitBytes << "b)";
ReplyProcessError(Ydb::StatusIds::BAD_REQUEST, error, requestId);
- if (!dbCounters) {
- dbCounters = Counters->GetDbCounters(request.GetDatabase());
- }
- LogRequest(request, requestInfo, ev->Sender, requestId, dbCounters);
return;
}
}
@@ -653,54 +527,36 @@ public:
if (paramsLimitBytes) {
auto paramsBytes = request.GetParameters().ByteSizeLong();
if (paramsBytes > paramsLimitBytes) {
- if (!dbCounters) {
- dbCounters = Counters->GetDbCounters(request.GetDatabase());
- }
- LogRequest(request, requestInfo, ev->Sender, requestId, dbCounters);
-
TString error = TStringBuilder() << "Parameters size exceeds limit (" << paramsBytes << "b > " << paramsLimitBytes << "b)";
ReplyProcessError(Ydb::StatusIds::BAD_REQUEST, error, requestId);
return;
}
}
- TActorId targetId;
- if (!request.GetSessionId().empty()) {
- TProcessResult<TActorId> result;
- if (!TryGetSessionTargetActor(request.GetSessionId(), requestInfo, result)) {
- if (!dbCounters) {
- dbCounters = Counters->GetDbCounters(request.GetDatabase());
- }
- LogRequest(request, requestInfo, ev->Sender, requestId, dbCounters);
- ReplyProcessError(result.YdbStatus, result.Error, requestId);
- return;
- }
+ if (request.HasTxControl() && request.GetTxControl().has_begin_tx()) {
+ switch (request.GetTxControl().begin_tx().tx_mode_case()) {
+ case Ydb::Table::TransactionSettings::kSnapshotReadOnly:
+ if (!AppData()->FeatureFlags.GetEnableMvccSnapshotReads()) {
+ ReplyProcessError(Ydb::StatusIds::BAD_REQUEST,
+ "Snapshot reads not supported in current database", requestId);
+ return;
+ }
- targetId = result.Value;
+ default:
+ break;
+ }
+ }
- LogRequest(request, requestInfo, ev->Sender, requestId, dbCounters);
+ TActorId targetId;
+ if (sessionInfo) {
+ targetId = sessionInfo->WorkerId;
} else {
- TProcessResult<TKqpSessionInfo*> result;
- if (!CreateNewSessionWorker(requestInfo, TString(DefaultKikimrPublicClusterName), false,
- request.GetDatabase(), false, result))
- {
- if (!dbCounters) {
- dbCounters = Counters->GetDbCounters(request.GetDatabase());
- }
- LogRequest(request, requestInfo, ev->Sender, requestId, dbCounters);
- ReplyProcessError(result.YdbStatus, result.Error, requestId);
+ targetId = TryGetSessionTargetActor(request.GetSessionId(), requestInfo, requestId);
+ if (!targetId) {
return;
}
-
- targetId = result.Value->WorkerId;
- request.SetSessionId(result.Value->SessionId);
- dbCounters = result.Value->DbCounters;
-
- LogRequest(request, requestInfo, ev->Sender, requestId, dbCounters);
}
- TString sessionId = request.GetSessionId();
- PendingRequests.SetSessionId(requestId, sessionId, dbCounters);
// We add extra milliseconds to the user-specified timeout, so it means we give additional priority for worker replies,
// because it is much better to give detailed error message rather than generic timeout.
// For example, it helps to avoid race in event order when worker and proxy recieve timeout at the same moment.
@@ -718,23 +574,23 @@ public:
TKqpRequestInfo requestInfo(event.GetTraceId());
TString sessionId = request.GetSessionId();
- auto dbCounters = GetDbCountersForSession(sessionId);
+ const TKqpSessionInfo* sessionInfo = LocalSessions->FindPtr(sessionId);
+ auto dbCounters = sessionInfo ? sessionInfo->DbCounters : nullptr;
LogRequest(request, requestInfo, ev->Sender, dbCounters);
- auto sessionInfo = LocalSessions->IsPendingShutdown(sessionId);
- if (sessionInfo) {
- if (dbCounters) {
- // session is pending shutdown, and we close it
- // but direct request from user.
- Counters->ReportSessionGracefulShutdownHit(sessionInfo->DbCounters);
- }
+ if (LocalSessions->IsPendingShutdown(sessionId) && dbCounters) {
+ Counters->ReportSessionGracefulShutdownHit(dbCounters);
}
- if (!sessionId.empty()) {
- TProcessResult<TActorId> result;
- if (TryGetSessionTargetActor(sessionId, requestInfo, result)) {
- Send(result.Value, ev->Release().Release());
+ if (sessionInfo) {
+ Send(sessionInfo->WorkerId, ev->Release().Release());
+ } else {
+ if (!sessionId.empty()) {
+ TActorId targetId = TryGetSessionTargetActor(sessionId, requestInfo, 0);
+ if (targetId) {
+ Send(targetId, ev->Release().Release());
+ }
}
}
}
@@ -747,15 +603,18 @@ public:
TKqpRequestInfo requestInfo(traceId);
auto sessionId = request.GetSessionId();
ui64 requestId = PendingRequests.RegisterRequest(ev->Sender, ev->Cookie, traceId, TKqpEvents::EvPingSessionRequest);
-
- auto dbCounters = GetDbCountersForSession(sessionId);
-
+ const TKqpSessionInfo* sessionInfo = LocalSessions->FindPtr(sessionId);
+ auto dbCounters = sessionInfo ? sessionInfo->DbCounters : nullptr;
LogRequest(request, requestInfo, ev->Sender, requestId, dbCounters);
- TProcessResult<TActorId> result;
- if (!TryGetSessionTargetActor(sessionId, requestInfo, result)) {
- ReplyProcessError(result.YdbStatus, result.Error, requestId);
- return;
+ TActorId targetId;
+ if (sessionInfo) {
+ targetId = sessionInfo->WorkerId;
+ } else {
+ targetId = TryGetSessionTargetActor(sessionId, requestInfo, requestId);
+ if (!targetId) {
+ return;
+ }
}
TDuration timeout = DEFAULT_KEEP_ALIVE_TIMEOUT;
@@ -765,7 +624,7 @@ public:
PendingRequests.SetSessionId(requestId, sessionId, dbCounters);
StartQueryTimeout(requestId, timeout);
- Send(result.Value, ev->Release().Release(), IEventHandle::FlagTrackDelivery, requestId);
+ Send(targetId, ev->Release().Release(), IEventHandle::FlagTrackDelivery, requestId);
}
template<typename TEvent>
@@ -807,8 +666,7 @@ public:
}
}
- void Handle(TEvPrivate::TEvCollectPeerProxyData::TPtr& ev) {
- Y_UNUSED(ev);
+ void Handle(TEvPrivate::TEvCollectPeerProxyData::TPtr&) {
LookupPeerProxyData();
if (!ShutdownRequested) {
const auto& sbs = TableServiceConfig.GetSessionBalancerSettings();
@@ -1157,11 +1015,10 @@ private:
Counters->ReportResponseStatus(dbCounters, event.ByteSize(), status);
}
- void LogResponse(const TKqpRequestInfo& requestInfo,
+ void LogResponse(const TKqpRequestInfo&,
const TEvKqp::TProtoArenaHolder<NKikimrKqp::TEvQueryResponse>& holder,
TKqpDbCountersPtr dbCounters)
{
- Y_UNUSED(requestInfo);
const auto& event = holder.GetRef();
Counters->ReportResponseStatus(dbCounters, event.ByteSize(),
@@ -1178,20 +1035,16 @@ private:
Counters->ReportResultsBytes(dbCounters, resultsBytes);
}
- void LogResponse(const TKqpRequestInfo& requestInfo,
+ void LogResponse(const TKqpRequestInfo&,
const NKikimrKqp::TEvCreateSessionResponse& event, TKqpDbCountersPtr dbCounters)
{
- Y_UNUSED(requestInfo);
-
Counters->ReportResponseStatus(dbCounters, event.ByteSize(),
event.GetYdbStatus());
}
- void LogResponse(const TKqpRequestInfo& requestInfo,
+ void LogResponse(const TKqpRequestInfo&,
const NKikimrKqp::TEvPingSessionResponse& event, TKqpDbCountersPtr dbCounters)
{
- Y_UNUSED(requestInfo);
-
Counters->ReportResponseStatus(dbCounters, event.ByteSize(), event.GetStatus());
}
@@ -1320,34 +1173,21 @@ private:
return true;
}
- bool TryGetSessionTargetActor(const TString& sessionId, const TKqpRequestInfo& requestInfo, TProcessResult<TActorId>& result)
+ TActorId TryGetSessionTargetActor(const TString& sessionId, const TKqpRequestInfo& requestInfo, ui64 requestId)
{
- result.YdbStatus = Ydb::StatusIds::SUCCESS;
- result.Error.clear();
-
auto nodeId = TryDecodeYdbSessionId(sessionId);
if (!nodeId) {
TString error = TStringBuilder() << "Failed to parse session id: " << sessionId;
KQP_PROXY_LOG_W(requestInfo << error);
-
- result.YdbStatus = Ydb::StatusIds::BAD_REQUEST;
- result.Error = error;
- return false;
+ ReplyProcessError(Ydb::StatusIds::BAD_REQUEST, error, requestId);
+ return TActorId();
}
if (*nodeId == SelfId().NodeId()) {
- auto localSession = LocalSessions->FindPtr(sessionId);
- if (!localSession) {
- TString error = TStringBuilder() << "Session not found: " << sessionId;
- KQP_PROXY_LOG_N(requestInfo << error);
-
- result.YdbStatus = Ydb::StatusIds::BAD_SESSION;
- result.Error = error;
- return false;
- }
-
- result.Value = localSession->WorkerId;
- return true;
+ TString error = TStringBuilder() << "Session not found: " << sessionId;
+ KQP_PROXY_LOG_N(requestInfo << error);
+ ReplyProcessError(Ydb::StatusIds::BAD_SESSION, error, requestId);
+ return TActorId();
}
if (!Tenants.empty()) {
@@ -1355,8 +1195,7 @@ private:
Counters->ReportProxyForwardedRequest(counters);
}
- result.Value = MakeKqpProxyID(*nodeId);
- return true;
+ return MakeKqpProxyID(*nodeId);
}
void RemoveSession(const TString& sessionId, const TActorId& workerId) {
@@ -1396,11 +1235,6 @@ private:
NYql::NDq::SetYqlLogLevels(yqlPriority);
}
- TKqpDbCountersPtr GetDbCountersForSession(const TString& sessionId) const {
- auto localSession = LocalSessions->FindPtr(sessionId);
- return localSession ? localSession->DbCounters : nullptr;
- }
-
private:
NYql::NLog::YqlLoggerScope YqlLoggerScope;
NKikimrConfig::TLogConfig LogConfig;
diff --git a/ydb/core/kqp/proxy/kqp_proxy_service.h b/ydb/core/kqp/proxy/kqp_proxy_service.h
index fe3d58ed42..e6d44a176c 100644
--- a/ydb/core/kqp/proxy/kqp_proxy_service.h
+++ b/ydb/core/kqp/proxy/kqp_proxy_service.h
@@ -40,7 +40,7 @@ class TKqpProxyRequestTracker {
public:
TKqpProxyRequestTracker()
- : RequestId(0)
+ : RequestId(1)
{}
ui64 RegisterRequest(const TActorId& sender, ui64 senderCookie, const TString& traceId, ui32 eventType) {
@@ -129,6 +129,144 @@ struct TPeerStats {
};
+class TLocalSessionsRegistry {
+ THashMap<TString, TKqpSessionInfo> LocalSessions;
+ THashMap<TActorId, TString> TargetIdIndex;
+ THashSet<TString> ShutdownInFlightSessions;
+ THashMap<TString, ui32> SessionsCountPerDatabase;
+ std::vector<std::vector<TString>> ReadySessions;
+ TIntrusivePtr<IRandomProvider> RandomProvider;
+
+public:
+ TLocalSessionsRegistry(TIntrusivePtr<IRandomProvider> randomProvider)
+ : ReadySessions(2)
+ , RandomProvider(randomProvider)
+ {}
+
+ TKqpSessionInfo* Create(const TString& sessionId, const TActorId& workerId,
+ const TString& database, TKqpDbCountersPtr dbCounters, bool supportsBalancing)
+ {
+ std::vector<i32> pos(2, -1);
+ pos[0] = ReadySessions[0].size();
+ ReadySessions[0].push_back(sessionId);
+
+ if (supportsBalancing) {
+ pos[1] = ReadySessions[1].size();
+ ReadySessions[1].push_back(sessionId);
+ }
+
+ auto result = LocalSessions.emplace(sessionId, TKqpSessionInfo(sessionId, workerId, database, dbCounters, std::move(pos)));
+ SessionsCountPerDatabase[database]++;
+ Y_VERIFY(result.second, "Duplicate session id!");
+ TargetIdIndex.emplace(workerId, sessionId);
+ return &result.first->second;
+ }
+
+ const THashSet<TString>& GetShutdownInFlight() const {
+ return ShutdownInFlightSessions;
+ }
+
+ TKqpSessionInfo* StartShutdownSession(const TString& sessionId) {
+ ShutdownInFlightSessions.emplace(sessionId);
+ auto ptr = LocalSessions.FindPtr(sessionId);
+ ptr->ShutdownStartedAt = TAppData::TimeProvider->Now();
+ RemoveSessionFromLists(ptr);
+ return ptr;
+ }
+
+ TKqpSessionInfo* PickSessionToShutdown(bool force, ui32 minReasonableToKick) {
+ auto& sessions = force ? ReadySessions.at(0) : ReadySessions.at(1);
+ if (sessions.size() >= minReasonableToKick) {
+ ui64 idx = RandomProvider->GenRand() % sessions.size();
+ return StartShutdownSession(sessions[idx]);
+ }
+
+ return nullptr;
+ }
+
+ THashMap<TString, TKqpSessionInfo>::const_iterator begin() const {
+ return LocalSessions.begin();
+ }
+
+ THashMap<TString, TKqpSessionInfo>::const_iterator end() const {
+ return LocalSessions.end();
+ }
+
+ size_t GetShutdownInFlightSize() const {
+ return ShutdownInFlightSessions.size();
+ }
+
+ void Erase(const TString& sessionId) {
+ auto it = LocalSessions.find(sessionId);
+ if (it != LocalSessions.end()) {
+ auto counter = SessionsCountPerDatabase.find(it->second.Database);
+ if (counter != SessionsCountPerDatabase.end()) {
+ counter->second--;
+ if (counter->second == 0) {
+ SessionsCountPerDatabase.erase(counter);
+ }
+ }
+
+ RemoveSessionFromLists(&(it->second));
+ ShutdownInFlightSessions.erase(sessionId);
+ TargetIdIndex.erase(it->second.WorkerId);
+ LocalSessions.erase(it);
+ }
+ }
+
+ bool IsPendingShutdown(const TString& sessionId) const {
+ return ShutdownInFlightSessions.find(sessionId) != ShutdownInFlightSessions.end();
+ }
+
+ bool CheckDatabaseLimits(const TString& database, ui32 databaseLimit) {
+ auto it = SessionsCountPerDatabase.find(database);
+ if (it == SessionsCountPerDatabase.end()){
+ return true;
+ }
+
+ if (it->second + 1 <= databaseLimit) {
+ return true;
+ }
+
+ return false;
+ }
+
+ size_t size() const {
+ return LocalSessions.size();
+ }
+
+ const TKqpSessionInfo* FindPtr(const TString& sessionId) const {
+ return LocalSessions.FindPtr(sessionId);
+ }
+
+ void Erase(const TActorId& targetId) {
+ auto it = TargetIdIndex.find(targetId);
+ if (it != TargetIdIndex.end()){
+ Erase(it->second);
+ }
+ }
+
+private:
+ void RemoveSessionFromLists(TKqpSessionInfo* ptr) {
+ for(ui32 i = 0; i < ptr->ReadyPos.size(); ++i) {
+ i32& pos = ptr->ReadyPos.at(i);
+ auto& sessions = ReadySessions.at(i);
+ if (pos != -1 && pos + 1 != static_cast<i32>(sessions.size())) {
+ auto& lastPos = LocalSessions.at(sessions.back()).ReadyPos.at(i);
+ Y_VERIFY(lastPos + 1 == static_cast<i32>(sessions.size()));
+ std::swap(sessions[pos], sessions[lastPos]);
+ lastPos = pos;
+ }
+
+ if (pos != -1) {
+ sessions.pop_back();
+ pos = -1;
+ }
+ }
+ }
+};
+
+
TSimpleResourceStats CalcPeerStats(
const TVector<NKikimrKqp::TKqpProxyNodeResources>& data, const TString& selfDataCenterId, bool localDatacenterPolicy,
std::function<double(const NKikimrKqp::TKqpProxyNodeResources& entry)> ExtractValue);
diff --git a/ydb/core/kqp/proxy/ut/CMakeLists.txt b/ydb/core/kqp/proxy/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kqp/proxy/ut/CMakeLists.txt
+++ b/ydb/core/kqp/proxy/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/rm/CMakeLists.txt b/ydb/core/kqp/rm/CMakeLists.txt
index d256ed5ed5..c5c4bcab4f 100644
--- a/ydb/core/kqp/rm/CMakeLists.txt
+++ b/ydb/core/kqp/rm/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-kqp-rm)
target_compile_options(core-kqp-rm PRIVATE
diff --git a/ydb/core/kqp/rm/kqp_rm_ut.cpp b/ydb/core/kqp/rm/kqp_rm_ut.cpp
index 3ea0e1beb5..197da71a01 100644
--- a/ydb/core/kqp/rm/kqp_rm_ut.cpp
+++ b/ydb/core/kqp/rm/kqp_rm_ut.cpp
@@ -109,7 +109,7 @@ public:
auto now = Now();
Runtime->UpdateCurrentTime(now);
- Counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ Counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto resourceBrokerConfig = MakeResourceBrokerTestConfig();
auto broker = CreateResourceBrokerActor(resourceBrokerConfig, Counters);
@@ -176,7 +176,7 @@ public:
private:
THolder<TTestBasicRuntime> Runtime;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
// TIntrusivePtr<TKqpCounters> KqpCounters;
TActorId ResourceBrokerActorId;
TActorId ResourceManagerActorId;
diff --git a/ydb/core/kqp/rm/ut/CMakeLists.txt b/ydb/core/kqp/rm/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kqp/rm/ut/CMakeLists.txt
+++ b/ydb/core/kqp/rm/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/runtime/CMakeLists.txt b/ydb/core/kqp/runtime/CMakeLists.txt
index d12069e05c..2908169720 100644
--- a/ydb/core/kqp/runtime/CMakeLists.txt
+++ b/ydb/core/kqp/runtime/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-kqp-runtime)
target_compile_options(core-kqp-runtime PRIVATE
diff --git a/ydb/core/kqp/runtime/kqp_read_table.cpp b/ydb/core/kqp/runtime/kqp_read_table.cpp
index 70b33e12fa..8c0a2e82f7 100644
--- a/ydb/core/kqp/runtime/kqp_read_table.cpp
+++ b/ydb/core/kqp/runtime/kqp_read_table.cpp
@@ -70,69 +70,44 @@ void BuildKeyTupleCells(const TTupleType* tupleType, const TUnboxedValue& tupleV
}
void ParseReadColumns(const TType* readType, const TRuntimeNode& tagsNode,
- TSmallVec<TKqpComputeContextBase::TColumn>& columns, TSmallVec<TKqpComputeContextBase::TColumn>& systemColumns)
+ TSmallVec<NTable::TTag>& columns, TSmallVec<NTable::TTag>& systemColumns)
{
- MKQL_ENSURE_S(readType);
+ MKQL_ENSURE_S(readType);
MKQL_ENSURE_S(readType->GetKind() == TType::EKind::Flow);
auto tags = AS_VALUE(TStructLiteral, tagsNode);
MKQL_ENSURE_S(tags);
- auto itemType = AS_TYPE(TFlowType, readType)->GetItemType();
- MKQL_ENSURE_S(itemType->GetKind() == TType::EKind::Struct);
- auto structType = AS_TYPE(TStructType, itemType);
- MKQL_ENSURE_S(tags->GetValuesCount() == structType->GetMembersCount());
+ columns.reserve(tags->GetValuesCount());
- columns.reserve(structType->GetMembersCount());
-
- for (ui32 i = 0; i < structType->GetMembersCount(); ++i) {
- auto memberType = structType->GetMemberType(i);
- if (memberType->GetKind() == TType::EKind::Optional) {
- memberType = AS_TYPE(TOptionalType, memberType)->GetItemType();
- }
- MKQL_ENSURE_S(memberType->GetKind() == TType::EKind::Data);
+ for (ui32 i = 0; i < tags->GetValuesCount(); ++i) {
NTable::TTag columnId = AS_VALUE(TDataLiteral, tags->GetValue(i))->AsValue().Get<ui32>();
if (IsSystemColumn(columnId)) {
- systemColumns.push_back({columnId, AS_TYPE(TDataType, memberType)->GetSchemeType()});
+ systemColumns.push_back(columnId);
} else {
- columns.push_back({columnId, AS_TYPE(TDataType, memberType)->GetSchemeType()});
+ columns.push_back(columnId);
}
}
}
-void ParseWideReadColumns(const TCallable& callable, const TRuntimeNode& tagsNode,
- TSmallVec<TKqpComputeContextBase::TColumn>& columns, TSmallVec<TKqpComputeContextBase::TColumn>& systemColumns)
+void ParseWideReadColumns(const TRuntimeNode& tagsNode,
+ TSmallVec<NTable::TTag>& columns, TSmallVec<NTable::TTag>& systemColumns)
{
auto tags = AS_VALUE(TStructLiteral, tagsNode);
MKQL_ENSURE_S(tags);
- TType* returnType = callable.GetType()->GetReturnType();
- MKQL_ENSURE_S(returnType->GetKind() == TType::EKind::Flow);
-
- auto itemType = AS_TYPE(TFlowType, returnType)->GetItemType();
- MKQL_ENSURE_S(itemType->GetKind() == TType::EKind::Tuple);
-
- auto tupleType = AS_TYPE(TTupleType, itemType);
- MKQL_ENSURE_S(tags->GetValuesCount() == tupleType->GetElementsCount());
-
- columns.reserve(tupleType->GetElementsCount());
+ columns.reserve(tags->GetValuesCount());
- for (ui32 i = 0; i < tupleType->GetElementsCount(); ++i) {
- auto memberType = tupleType->GetElementType(i);
+ for (ui32 i = 0; i < tags->GetValuesCount(); ++i) {
- if (memberType->GetKind() == TType::EKind::Optional) {
- memberType = AS_TYPE(TOptionalType, memberType)->GetItemType();
- }
- MKQL_ENSURE_S(memberType->GetKind() == TType::EKind::Data);
-
- NTable::TTag columnId = AS_VALUE(TDataLiteral, tags->GetValue(i))->AsValue().Get<ui32>();
+ NTable::TTag columnId = AS_VALUE(TDataLiteral, tags->GetValue(i))->AsValue().Get<ui32>();;
if (IsSystemColumn(columnId)) {
- systemColumns.push_back({columnId, AS_TYPE(TDataType, memberType)->GetSchemeType()});
- } else {
- columns.push_back({columnId, AS_TYPE(TDataType, memberType)->GetSchemeType()});
+ systemColumns.push_back(columnId);
+ } else if (columnId != TKeyDesc::EColumnIdInvalid) {
+ columns.push_back(columnId);
}
}
}
@@ -161,7 +136,7 @@ TParseReadTableResult ParseWideReadTable(TCallable& callable) {
MKQL_ENSURE_S(result.ToTuple);
result.ToInclusive = AS_VALUE(TDataLiteral, range->GetValue(3))->AsValue().Get<bool>();
- ParseWideReadColumns(callable, tagsNode, result.Columns, result.SystemColumns);
+ ParseWideReadColumns(tagsNode, result.Columns, result.SystemColumns);
auto skipNullKeys = AS_VALUE(TListLiteral, callable.GetInput(3));
result.SkipNullKeys.reserve(skipNullKeys->GetItemsCount());
@@ -210,7 +185,7 @@ TParseReadTableRangesResult ParseWideReadTableRanges(TCallable& callable) {
MKQL_ENSURE_S(result.Ranges);
MKQL_ENSURE_S(result.Ranges->GetValuesCount() == 1);
- ParseWideReadColumns(callable, tagsNode, result.Columns, result.SystemColumns);
+ ParseWideReadColumns(tagsNode, result.Columns, result.SystemColumns);
auto limitNode = limit.GetNode();
diff --git a/ydb/core/kqp/runtime/kqp_read_table.h b/ydb/core/kqp/runtime/kqp_read_table.h
index 99c9cc3f05..010751df3d 100644
--- a/ydb/core/kqp/runtime/kqp_read_table.h
+++ b/ydb/core/kqp/runtime/kqp_read_table.h
@@ -17,8 +17,8 @@ struct TParseReadTableResultBase {
ui32 CallableId = 0;
TTableId TableId;
- TSmallVec<TKqpComputeContextBase::TColumn> Columns;
- TSmallVec<TKqpComputeContextBase::TColumn> SystemColumns;
+ TSmallVec<NTable::TTag> Columns;
+ TSmallVec<NTable::TTag> SystemColumns;
TSmallVec<bool> SkipNullKeys;
TNode* ItemsLimit = nullptr;
bool Reverse = false;
@@ -36,7 +36,7 @@ struct TParseReadTableRangesResult : TParseReadTableResultBase {
};
void ParseReadColumns(const TType* readType, const TRuntimeNode& tagsNode,
- TSmallVec<TKqpComputeContextBase::TColumn>& columns, TSmallVec<TKqpComputeContextBase::TColumn>& systemColumns);
+ TSmallVec<NTable::TTag>& columns, TSmallVec<NTable::TTag>& systemColumns);
TParseReadTableResult ParseWideReadTable(TCallable& callable);
TParseReadTableRangesResult ParseWideReadTableRanges(TCallable& callable);
diff --git a/ydb/core/kqp/runtime/kqp_scan_data.cpp b/ydb/core/kqp/runtime/kqp_scan_data.cpp
index c4d8e24196..d4e74b69c0 100644
--- a/ydb/core/kqp/runtime/kqp_scan_data.cpp
+++ b/ydb/core/kqp/runtime/kqp_scan_data.cpp
@@ -249,12 +249,14 @@ std::pair<ui64, ui64> GetUnboxedValueSizeForTests(const NUdf::TUnboxedValue& val
}
TKqpScanComputeContext::TScanData::TScanData(const TTableId& tableId, const TTableRange& range,
- const TSmallVec<TColumn>& columns, const TSmallVec<TColumn>& systemColumns, const TSmallVec<bool>& skipNullKeys)
+ const TSmallVec<TColumn>& columns, const TSmallVec<TColumn>& systemColumns, const TSmallVec<bool>& skipNullKeys,
+ const TSmallVec<TColumn>& resultColumns)
: TableId(tableId)
, Range(range)
, SkipNullKeys(skipNullKeys)
, Columns(columns)
, SystemColumns(systemColumns)
+ , ResultColumns(resultColumns)
{}
TKqpScanComputeContext::TScanData::TScanData(const NKikimrTxDataShard::TKqpTransaction_TScanTaskMeta& meta,
@@ -280,6 +282,23 @@ TKqpScanComputeContext::TScanData::TScanData(const NKikimrTxDataShard::TKqpTrans
}
}
+ if (meta.GetResultColumns().empty()) {
+ ResultColumns = Columns;
+ } else {
+ ResultColumns.reserve(meta.GetResultColumns().size());
+ for (const auto& resColumn : meta.GetResultColumns()) {
+ NMiniKQL::TKqpScanComputeContext::TColumn c;
+ c.Tag = resColumn.GetId();
+ c.Type = resColumn.GetType();
+
+ if (!IsSystemColumn(c.Tag)) {
+ ResultColumns.emplace_back(std::move(c));
+ } else {
+ SystemColumns.emplace_back(std::move(c));
+ }
+ }
+ }
+
if (statsMode >= NYql::NDqProto::DQ_STATS_MODE_BASIC) {
BasicStats = std::make_unique<TBasicStats>();
}
@@ -307,13 +326,13 @@ ui64 TKqpScanComputeContext::TScanData::AddRows(const TVector<TOwnedCellVec>& ba
// Convert row into an UnboxedValue
NUdf::TUnboxedValue* rowItems = nullptr;
- rows.emplace_back(holderFactory.CreateDirectArrayHolder(Columns.size() + SystemColumns.size(), rowItems));
- for (ui32 i = 0; i < Columns.size(); ++i) {
- rowItems[i] = GetCellValue(row[i], Columns[i].Type);
+ rows.emplace_back(holderFactory.CreateDirectArrayHolder(ResultColumns.size() + SystemColumns.size(), rowItems));
+ for (ui32 i = 0; i < ResultColumns.size(); ++i) {
+ rowItems[i] = GetCellValue(row[i], ResultColumns[i].Type);
}
- FillSystemColumns(&rowItems[Columns.size()], shardId, SystemColumns);
+ FillSystemColumns(&rowItems[ResultColumns.size()], shardId, SystemColumns);
- stats.AddStatistics(GetRowSize(rowItems, Columns, SystemColumns));
+ stats.AddStatistics(GetRowSize(rowItems, ResultColumns, SystemColumns));
}
RowBatches.emplace(RowBatch{std::move(rows), shardId});
@@ -337,7 +356,7 @@ ui64 TKqpScanComputeContext::TScanData::AddRows(const arrow::RecordBatch& batch,
TBytesStatistics stats;
TUnboxedValueVector rows;
- if (Columns.empty() && SystemColumns.empty()) {
+ if (ResultColumns.empty() && SystemColumns.empty()) {
rows.resize(batch.num_rows(), holderFactory.GetEmptyContainer());
} else {
TVector<NUdf::TUnboxedValue*> editAccessors(batch.num_rows());
@@ -345,27 +364,27 @@ ui64 TKqpScanComputeContext::TScanData::AddRows(const arrow::RecordBatch& batch,
for (i64 rowIndex = 0; rowIndex < batch.num_rows(); ++rowIndex) {
rows.emplace_back(holderFactory.CreateDirectArrayHolder(
- Columns.size() + SystemColumns.size(),
+ ResultColumns.size() + SystemColumns.size(),
editAccessors[rowIndex])
);
}
- for (size_t columnIndex = 0; columnIndex < Columns.size(); ++columnIndex) {
+ for (size_t columnIndex = 0; columnIndex < ResultColumns.size(); ++columnIndex) {
stats.AddStatistics(
- WriteColumnValuesFromArrow(editAccessors, batch, columnIndex, Columns[columnIndex].Type)
+ WriteColumnValuesFromArrow(editAccessors, batch, columnIndex, ResultColumns[columnIndex].Type)
);
}
if (!SystemColumns.empty()) {
for (i64 rowIndex = 0; rowIndex < batch.num_rows(); ++rowIndex) {
- FillSystemColumns(&editAccessors[rowIndex][Columns.size()], shardId, SystemColumns);
+ FillSystemColumns(&editAccessors[rowIndex][ResultColumns.size()], shardId, SystemColumns);
}
stats.AllocatedBytes += batch.num_rows() * SystemColumns.size() * sizeof(NUdf::TUnboxedValue);
}
}
- if (Columns.empty()) {
+ if (ResultColumns.empty()) {
stats.AddStatistics({sizeof(ui64) * batch.num_rows(), sizeof(ui64) * batch.num_rows()});
}
@@ -384,7 +403,7 @@ NUdf::TUnboxedValue TKqpScanComputeContext::TScanData::TakeRow() {
YQL_ENSURE(!RowBatches.empty());
auto& batch = RowBatches.front();
auto row = std::move(batch.Batch[batch.CurrentRow++]);
- auto rowStats = GetRowSize(row.GetElements(), Columns, SystemColumns);
+ auto rowStats = GetRowSize(row.GetElements(), ResultColumns, SystemColumns);
StoredBytes -= rowStats.AllocatedBytes;
if (batch.CurrentRow == batch.Batch.size()) {
@@ -394,23 +413,6 @@ NUdf::TUnboxedValue TKqpScanComputeContext::TScanData::TakeRow() {
return row;
}
-void TKqpScanComputeContext::AddTableScan(ui32, const TTableId& tableId, const TTableRange& range,
- const TSmallVec<TColumn>& columns, const TSmallVec<TColumn>& systemColumns, const TSmallVec<bool>& skipNullKeys)
-{
- auto scanData = TKqpScanComputeContext::TScanData(tableId, range, columns, systemColumns, skipNullKeys);
-
- if (Y_UNLIKELY(StatsMode >= NYql::NDqProto::DQ_STATS_MODE_BASIC)) {
- scanData.BasicStats = std::make_unique<TScanData::TBasicStats>();
- }
-
- if (Y_UNLIKELY(StatsMode >= NYql::NDqProto::DQ_STATS_MODE_PROFILE)) {
- scanData.ProfileStats = std::make_unique<TScanData::TProfileStats>();
- }
-
- auto result = Scans.emplace(0, std::move(scanData));
- Y_ENSURE(result.second);
-}
-
void TKqpScanComputeContext::AddTableScan(ui32, const NKikimrTxDataShard::TKqpTransaction_TScanTaskMeta& meta,
NYql::NDqProto::EDqStatsMode statsMode)
{
@@ -470,7 +472,7 @@ public:
}
auto row = ScanData.TakeRow();
- for (ui32 i = 0; i < ScanData.GetColumns().size() + ScanData.GetSystemColumns().size(); ++i) {
+ for (ui32 i = 0; i < ScanData.GetResultColumns().size() + ScanData.GetSystemColumns().size(); ++i) {
if (result[i]) {
*result[i] = std::move(row.GetElement(i));
}
diff --git a/ydb/core/kqp/runtime/kqp_scan_data.h b/ydb/core/kqp/runtime/kqp_scan_data.h
index c8e7d82b32..0b052f7a15 100644
--- a/ydb/core/kqp/runtime/kqp_scan_data.h
+++ b/ydb/core/kqp/runtime/kqp_scan_data.h
@@ -38,17 +38,15 @@ public:
public:
TScanData(TScanData&&) = default; // needed to create TMap<ui32, TScanData> Scans
TScanData(const TTableId& tableId, const TTableRange& range, const TSmallVec<TColumn>& columns,
- const TSmallVec<TColumn>& systemColumns, const TSmallVec<bool>& skipNullKeys);
+ const TSmallVec<TColumn>& systemColumns, const TSmallVec<bool>& skipNullKeys,
+ const TSmallVec<TColumn>& resultColumns);
TScanData(const NKikimrTxDataShard::TKqpTransaction_TScanTaskMeta& meta, NYql::NDqProto::EDqStatsMode statsMode);
~TScanData() {
- TString msg = TStringBuilder() << "Buffer in TScanData was not cleared, data is leaking: "
- << "Queue of UnboxedValues must be emptied under allocator using Clear method, but has " << RowBatches.size() << " elements!";
- if (!RowBatches.empty()) {
- LOG_CRIT_S(*NActors::TlsActivationContext, NKikimrServices::KQP_COMPUTE, msg);
- }
- Y_VERIFY_DEBUG_S(RowBatches.empty(), msg);
+ Y_VERIFY_DEBUG_S(RowBatches.empty(), "Buffer in TScanData was not cleared, data is leaking. "
+ << "Queue of UnboxedValues must be emptied under allocator using Clear() method, but has "
+ << RowBatches.size() << " elements!");
}
const TSmallVec<TColumn>& GetColumns() const {
@@ -59,6 +57,10 @@ public:
return SystemColumns;
}
+ const TSmallVec<TColumn>& GetResultColumns() const {
+ return ResultColumns;
+ }
+
ui64 AddRows(const TVector<TOwnedCellVec>& batch, TMaybe<ui64> shardId, const THolderFactory& holderFactory);
ui64 AddRows(const arrow::RecordBatch& batch, TMaybe<ui64> shardId, const THolderFactory& holderFactory);
@@ -123,6 +125,7 @@ public:
TSmallVec<TColumn> Columns;
TSmallVec<TColumn> SystemColumns;
+ TSmallVec<TColumn> ResultColumns;
TQueue<RowBatch> RowBatches;
ui64 StoredBytes = 0;
bool Finished = false;
diff --git a/ydb/core/kqp/runtime/kqp_scan_data_ut.cpp b/ydb/core/kqp/runtime/kqp_scan_data_ut.cpp
index daf32d84f3..43b7c44bf2 100644
--- a/ydb/core/kqp/runtime/kqp_scan_data_ut.cpp
+++ b/ydb/core/kqp/runtime/kqp_scan_data_ut.cpp
@@ -85,54 +85,78 @@ struct TDataRow {
}
};
-std::shared_ptr<arrow::RecordBatch> VectorToBatch(const std::vector<struct TDataRow>& rows) {
+std::shared_ptr<arrow::RecordBatch> VectorToBatch(const std::vector<struct TDataRow>& rows, std::shared_ptr<arrow::Schema>&& resultSchema) {
TString err;
std::unique_ptr<arrow::RecordBatchBuilder> batchBuilder = nullptr;
std::shared_ptr<arrow::RecordBatch> batch;
- auto result = arrow::RecordBatchBuilder::Make(rows.front().MakeArrowSchema(), arrow::default_memory_pool(), &batchBuilder);
+ auto result = arrow::RecordBatchBuilder::Make(resultSchema, arrow::default_memory_pool(), &batchBuilder);
UNIT_ASSERT(result.ok());
for (const TDataRow& row : rows) {
- auto result0 = batchBuilder->GetFieldAs<arrow::BooleanBuilder >(0 )->Append(row.Bool );
- UNIT_ASSERT(result.ok());
- auto result1 = batchBuilder->GetFieldAs<arrow::Int8Builder >(1 )->Append(row.Int8 );
- UNIT_ASSERT(result.ok());
- auto result2 = batchBuilder->GetFieldAs<arrow::Int16Builder >(2 )->Append(row.Int16 );
- UNIT_ASSERT(result.ok());
- auto result3 = batchBuilder->GetFieldAs<arrow::Int32Builder >(3 )->Append(row.Int32 );
- UNIT_ASSERT(result.ok());
- auto result4 = batchBuilder->GetFieldAs<arrow::Int64Builder >(4 )->Append(row.Int64 );
- UNIT_ASSERT(result.ok());
- auto result5 = batchBuilder->GetFieldAs<arrow::UInt8Builder >(5 )->Append(row.UInt8 );
- UNIT_ASSERT(result.ok());
- auto result6 = batchBuilder->GetFieldAs<arrow::UInt16Builder >(6 )->Append(row.UInt16 );
- UNIT_ASSERT(result.ok());
- auto result7 = batchBuilder->GetFieldAs<arrow::UInt32Builder >(7 )->Append(row.UInt32 );
- UNIT_ASSERT(result.ok());
- auto result8 = batchBuilder->GetFieldAs<arrow::UInt64Builder >(8 )->Append(row.UInt64 );
- UNIT_ASSERT(result.ok());
- auto result9 = batchBuilder->GetFieldAs<arrow::FloatBuilder >(9 )->Append(row.Float32);
- UNIT_ASSERT(result.ok());
- auto result10 = batchBuilder->GetFieldAs<arrow::DoubleBuilder >(10)->Append(row.Float64);
- UNIT_ASSERT(result.ok());
- auto result11 = batchBuilder->GetFieldAs<arrow::StringBuilder >(11)->Append(row.String.data(), row.String.size());
- UNIT_ASSERT(result.ok());
- auto result12 = batchBuilder->GetFieldAs<arrow::StringBuilder >(12)->Append(row.Utf8.data(), row.Utf8.size());
- UNIT_ASSERT(result.ok());
- auto result13 = batchBuilder->GetFieldAs<arrow::BinaryBuilder >(13)->Append(row.Json.data(), row.Json.size());
- UNIT_ASSERT(result.ok());
- auto result14 = batchBuilder->GetFieldAs<arrow::BinaryBuilder >(14)->Append(row.Yson.data(), row.Yson.size());
- UNIT_ASSERT(result.ok());
- auto result15 = batchBuilder->GetFieldAs<arrow::Date32Builder >(15)->Append(row.Date);
- UNIT_ASSERT(result.ok());
- auto result16 = batchBuilder->GetFieldAs<arrow::TimestampBuilder >(16)->Append(row.Datetime);
- UNIT_ASSERT(result.ok());
- auto result17 = batchBuilder->GetFieldAs<arrow::TimestampBuilder >(17)->Append(row.Timestamp);
- UNIT_ASSERT(result.ok());
- auto result18 = batchBuilder->GetFieldAs<arrow::DurationBuilder >(18)->Append(row.Interval);
- UNIT_ASSERT(result.ok());
- auto result19 = batchBuilder->GetFieldAs<arrow::Decimal128Builder>(19)->Append(reinterpret_cast<const char*>(&row.Decimal));
- UNIT_ASSERT(result.ok());
+ int colIndex = 0;
+ for (auto colName : resultSchema->field_names()) {
+ if (colName == "bool") {
+ auto result = batchBuilder->GetFieldAs<arrow::BooleanBuilder>(colIndex++)->Append(row.Bool);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "i8") {
+ auto result = batchBuilder->GetFieldAs<arrow::Int8Builder>(colIndex++)->Append(row.Int8);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "i16") {
+ auto result = batchBuilder->GetFieldAs<arrow::Int16Builder>(colIndex++)->Append(row.Int16);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "i32") {
+ auto result = batchBuilder->GetFieldAs<arrow::Int32Builder>(colIndex++)->Append(row.Int32);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "i64") {
+ auto result = batchBuilder->GetFieldAs<arrow::Int64Builder>(colIndex++)->Append(row.Int64);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "ui8") {
+ auto result = batchBuilder->GetFieldAs<arrow::UInt8Builder>(colIndex++)->Append(row.UInt8);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "ui16") {
+ auto result = batchBuilder->GetFieldAs<arrow::UInt16Builder>(colIndex++)->Append(row.UInt16);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "ui32") {
+ auto result = batchBuilder->GetFieldAs<arrow::UInt32Builder>(colIndex++)->Append(row.UInt32);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "ui64") {
+ auto result = batchBuilder->GetFieldAs<arrow::UInt64Builder>(colIndex++)->Append(row.UInt64);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "f32") {
+ auto result = batchBuilder->GetFieldAs<arrow::FloatBuilder>(colIndex++)->Append(row.Float32);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "f64") {
+ auto result = batchBuilder->GetFieldAs<arrow::DoubleBuilder>(colIndex++)->Append(row.Float64);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "string") {
+ auto result = batchBuilder->GetFieldAs<arrow::StringBuilder>(colIndex++)->Append(row.String.data(), row.String.size());
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "utf8") {
+ auto result = batchBuilder->GetFieldAs<arrow::StringBuilder>(colIndex++)->Append(row.Utf8.data(), row.Utf8.size());
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "json") {
+ auto result = batchBuilder->GetFieldAs<arrow::BinaryBuilder>(colIndex++)->Append(row.Json.data(), row.Json.size());
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "yson") {
+ auto result = batchBuilder->GetFieldAs<arrow::BinaryBuilder>(colIndex++)->Append(row.Yson.data(), row.Yson.size());
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "date") {
+ auto result = batchBuilder->GetFieldAs<arrow::Date32Builder>(colIndex++)->Append(row.Date);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "datetime") {
+ auto result = batchBuilder->GetFieldAs<arrow::TimestampBuilder>(colIndex++)->Append(row.Datetime);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "ts") {
+ auto result = batchBuilder->GetFieldAs<arrow::TimestampBuilder>(colIndex++)->Append(row.Timestamp);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "ival") {
+ auto result = batchBuilder->GetFieldAs<arrow::DurationBuilder>(colIndex++)->Append(row.Interval);
+ UNIT_ASSERT(result.ok());
+ } else if (colName == "dec") {
+ auto result = batchBuilder->GetFieldAs<arrow::Decimal128Builder>(colIndex++)->Append(reinterpret_cast<const char*>(&row.Decimal));
+ UNIT_ASSERT(result.ok());
+ }
+ }
}
auto resultFlush = batchBuilder->Flush(&batch);
@@ -217,12 +241,12 @@ Y_UNIT_TEST_SUITE(TKqpScanData) {
Y_UNIT_TEST(ArrowToUnboxedValueConverter) {
TVector<TDataRow> rows = TestRows();
- std::shared_ptr<arrow::RecordBatch> batch = VectorToBatch(rows);
+ std::shared_ptr<arrow::RecordBatch> batch = VectorToBatch(rows, rows.front().MakeArrowSchema());
NKikimr::NMiniKQL::TScopedAlloc alloc;
TMemoryUsageInfo memInfo("");
THolderFactory factory(alloc.Ref(), memInfo);
- TKqpScanComputeContext::TScanData scanData({}, TTableRange({}), rows.front().Columns(), {}, {});
+ TKqpScanComputeContext::TScanData scanData({}, TTableRange({}), rows.front().Columns(), {}, {}, rows.front().Columns());
scanData.AddRows(*batch, {}, factory);
@@ -259,12 +283,39 @@ Y_UNIT_TEST_SUITE(TKqpScanData) {
scanData.Clear();
}
+ Y_UNIT_TEST(DifferentNumberOfInputAndResultColumns) {
+ TVector<TDataRow> rows = TestRows();
+ std::vector<std::shared_ptr<arrow::Field>> fields = { arrow::field("i8", arrow::int8()) };
+ std::shared_ptr<arrow::RecordBatch> batch = VectorToBatch(rows, std::make_shared<arrow::Schema>(fields));
+ NKikimr::NMiniKQL::TScopedAlloc alloc;
+ TMemoryUsageInfo memInfo("");
+ THolderFactory factory(alloc.Ref(), memInfo);
+
+ TSmallVec<TKqpComputeContextBase::TColumn> resultCols;
+ auto resCol = TKqpComputeContextBase::TColumn {
+ .Type = NTypeIds::Int8
+ };
+ resultCols.push_back(resCol);
+ TKqpScanComputeContext::TScanData scanData({}, TTableRange({}), rows.front().Columns(), {}, {}, resultCols);
+
+ scanData.AddRows(*batch, {}, factory);
+
+ for (auto& row: rows) {
+ auto result_row = scanData.TakeRow();
+ UNIT_ASSERT_EQUAL(result_row.GetElement(0).Get<i8>(), row.Int8);
+ }
+
+ UNIT_ASSERT(scanData.IsEmpty());
+
+ scanData.Clear();
+ }
+
Y_UNIT_TEST(EmptyColumns) {
NKikimr::NMiniKQL::TScopedAlloc alloc;
TMemoryUsageInfo memInfo("");
THolderFactory factory(alloc.Ref(), memInfo);
- TKqpScanComputeContext::TScanData scanData({}, TTableRange({}), {}, {}, {});
+ TKqpScanComputeContext::TScanData scanData({}, TTableRange({}), {}, {}, {}, {});
TVector<TOwnedCellVec> emptyBatch(1000);
auto bytes = scanData.AddRows(emptyBatch, {}, factory);
UNIT_ASSERT(bytes > 0);
@@ -279,13 +330,13 @@ Y_UNIT_TEST_SUITE(TKqpScanData) {
}
Y_UNIT_TEST(EmptyColumnsAndNonEmptyArrowBatch) {
-NKikimr::NMiniKQL::TScopedAlloc alloc;
+ NKikimr::NMiniKQL::TScopedAlloc alloc;
TMemoryUsageInfo memInfo("");
THolderFactory factory(alloc.Ref(), memInfo);
- TKqpScanComputeContext::TScanData scanData({}, TTableRange({}), {}, {}, {});
+ TKqpScanComputeContext::TScanData scanData({}, TTableRange({}), {}, {}, {}, {});
TVector<TDataRow> rows = TestRows();
- std::shared_ptr<arrow::RecordBatch> anotherEmptyBatch = VectorToBatch(rows);
+ std::shared_ptr<arrow::RecordBatch> anotherEmptyBatch = VectorToBatch(rows, rows.front().MakeArrowSchema());
auto bytes = scanData.AddRows(*anotherEmptyBatch, {}, factory);
UNIT_ASSERT(bytes > 0);
diff --git a/ydb/core/kqp/runtime/kqp_spilling_file.cpp b/ydb/core/kqp/runtime/kqp_spilling_file.cpp
index 0dd0a4f7a3..b46d5e1d31 100644
--- a/ydb/core/kqp/runtime/kqp_spilling_file.cpp
+++ b/ydb/core/kqp/runtime/kqp_spilling_file.cpp
@@ -643,7 +643,7 @@ private:
}
HTML(s) {
- H2() { s << "Configuration"; }
+ TAG(TH2) { s << "Configuration"; }
PRE() {
s << " - Root: " << Config.GetRoot() << Endl;
s << " - MaxTotalSize: " << Config.GetMaxTotalSize() << Endl;
@@ -653,11 +653,11 @@ private:
<< ", queue: " << Config.GetIoThreadPool().GetQueueSize() << Endl;
}
- H2() { s << "Active files"; }
+ TAG(TH2) { s << "Active files"; }
PRE() { s << "Used space: " << TotalSize << Endl; }
for (const auto& tx : byTx) {
- H4() { s << "Transaction " << tx.first; }
+ TAG(TH2) { s << "Transaction " << tx.first; }
s << "Open files:" << Endl;
UL() {
for (const auto* fd : tx.second) {
@@ -690,7 +690,7 @@ private:
}
}
- H2() { s << "Last closed files"; }
+ TAG(TH2) { s << "Last closed files"; }
UL() {
for (auto it = ClosedFiles.rbegin(); it != ClosedFiles.rend(); ++it) {
auto& fd = *it;
diff --git a/ydb/core/kqp/runtime/kqp_spilling_file_ut.cpp b/ydb/core/kqp/runtime/kqp_spilling_file_ut.cpp
index 5802111ba8..c81956398f 100644
--- a/ydb/core/kqp/runtime/kqp_spilling_file_ut.cpp
+++ b/ydb/core/kqp/runtime/kqp_spilling_file_ut.cpp
@@ -31,8 +31,8 @@ void AssertEquals(const TBuffer& lhs, const TBuffer& rhs) {
UNIT_ASSERT_STRINGS_EQUAL(l, r);
}
-TIntrusivePtr<NMonitoring::TDynamicCounters> Counters() {
- static auto counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters() {
+ static auto counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
return counters;
}
diff --git a/ydb/core/kqp/runtime/ut/CMakeLists.txt b/ydb/core/kqp/runtime/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kqp/runtime/ut/CMakeLists.txt
+++ b/ydb/core/kqp/runtime/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/ut/CMakeLists.darwin.txt b/ydb/core/kqp/ut/CMakeLists.darwin.txt
index 6d88f0f809..6f8de5cd9d 100644
--- a/ydb/core/kqp/ut/CMakeLists.darwin.txt
+++ b/ydb/core/kqp/ut/CMakeLists.darwin.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(common)
+add_subdirectory(fat)
add_executable(ydb-core-kqp-ut)
target_compile_options(ydb-core-kqp-ut PRIVATE
diff --git a/ydb/core/kqp/ut/CMakeLists.linux.txt b/ydb/core/kqp/ut/CMakeLists.linux.txt
index a5ff998756..c66efa1e2a 100644
--- a/ydb/core/kqp/ut/CMakeLists.linux.txt
+++ b/ydb/core/kqp/ut/CMakeLists.linux.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(common)
+add_subdirectory(fat)
add_executable(ydb-core-kqp-ut)
target_compile_options(ydb-core-kqp-ut PRIVATE
diff --git a/ydb/core/kqp/ut/CMakeLists.txt b/ydb/core/kqp/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kqp/ut/CMakeLists.txt
+++ b/ydb/core/kqp/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/ut/common/kqp_ut_common.cpp b/ydb/core/kqp/ut/common/kqp_ut_common.cpp
index 1453ba58d3..b39fb6bba4 100644
--- a/ydb/core/kqp/ut/common/kqp_ut_common.cpp
+++ b/ydb/core/kqp/ut/common/kqp_ut_common.cpp
@@ -111,7 +111,7 @@ TKikimrRunner::TKikimrRunner(const TKikimrSettings& settings) {
ServerSettings->SetKeepSnapshotTimeout(settings.KeepSnapshotTimeout);
ServerSettings->SetFrFactory(&UdfFrFactory);
ServerSettings->SetEnableNotNullColumns(true);
- ServerSettings->SetEnableKqpScanQueryStreamLookup(false);
+ ServerSettings->SetEnableMoveIndex(true);
if (settings.LogStream)
ServerSettings->SetLogBackend(new TStreamLogBackend(settings.LogStream));
diff --git a/ydb/core/kqp/ut/common/kqp_ut_common.h b/ydb/core/kqp/ut/common/kqp_ut_common.h
index 2f13a31353..b1b8a33996 100644
--- a/ydb/core/kqp/ut/common/kqp_ut_common.h
+++ b/ydb/core/kqp/ut/common/kqp_ut_common.h
@@ -87,6 +87,7 @@ struct TKikimrSettings: public TTestFeatureFlagsHolder<TKikimrSettings> {
{
// default value for tests, can be overwritten by SetFeatureFlags()
this->SetEnableKqpSessionActor(false);
+ this->SetEnableKqpScanQueryStreamLookup(true);
}
TKikimrSettings& SetAppConfig(const NKikimrConfig::TAppConfig& value) { AppConfig = value; return *this; }
diff --git a/ydb/core/kqp/ut/fat/CMakeLists.txt b/ydb/core/kqp/ut/fat/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/kqp/ut/fat/CMakeLists.txt
+++ b/ydb/core/kqp/ut/fat/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/kqp/ut/fat/kqp_force_newengine_ut.cpp b/ydb/core/kqp/ut/fat/kqp_force_newengine_ut.cpp
index 7a5fd4c286..eb0479aa45 100644
--- a/ydb/core/kqp/ut/fat/kqp_force_newengine_ut.cpp
+++ b/ydb/core/kqp/ut/fat/kqp_force_newengine_ut.cpp
@@ -422,7 +422,7 @@ public:
private:
std::unique_ptr<TKikimrRunner> Kikimr;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
std::unique_ptr<TKqpCounters> KqpCounters;
};
UNIT_TEST_SUITE_REGISTRATION(KqpForceNewEngine);
diff --git a/ydb/core/kqp/ut/kqp_acl_ut.cpp b/ydb/core/kqp/ut/kqp_acl_ut.cpp
index 203c8ba618..6d774d54a6 100644
--- a/ydb/core/kqp/ut/kqp_acl_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_acl_ut.cpp
@@ -49,7 +49,8 @@ Y_UNIT_TEST_SUITE(KqpNewEngineAcl) {
PRAGMA kikimr.UseNewEngine = "true";
SELECT * FROM `/Root/TwoShard`;
)", TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync();
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SCHEME_ERROR);
+ // TODO: Should be UNAUTHORIZED
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::ABORTED);
}
{
auto result = session.ExecuteDataQuery(R"(
@@ -57,7 +58,8 @@ Y_UNIT_TEST_SUITE(KqpNewEngineAcl) {
UPSERT INTO `/Root/TwoShard` (Key, Value1, Value2) VALUES
(10u, "One", -10);
)", TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync();
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SCHEME_ERROR);
+ // TODO: Should be UNAUTHORIZED
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::ABORTED);
}
driver.Stop(true);
diff --git a/ydb/core/kqp/ut/kqp_explain_ut.cpp b/ydb/core/kqp/ut/kqp_explain_ut.cpp
index cd926b6aeb..949e96167e 100644
--- a/ydb/core/kqp/ut/kqp_explain_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_explain_ut.cpp
@@ -65,11 +65,13 @@ Y_UNIT_TEST_SUITE(KqpExplain) {
NJson::TJsonValue plan;
NJson::ReadJsonTree(*res.PlanJson, &plan, true);
- auto join = FindPlanNodeByKv(plan, "Node Type", "Aggregate-InnerJoin (MapJoin)-Filter-TableFullScan");
+ auto join = FindPlanNodeByKv(plan, "Node Type", "Aggregate-InnerJoin (MapJoin)-Filter");
UNIT_ASSERT(join.IsDefined());
auto left = FindPlanNodeByKv(join, "Table", "EightShard");
UNIT_ASSERT(left.IsDefined());
- auto right = FindPlanNodeByKv(join, "Table", "KeyValue");
+ auto lookup = FindPlanNodeByKv(join, "Node Type", "TableLookup");
+ UNIT_ASSERT(lookup.IsDefined());
+ auto right = FindPlanNodeByKv(lookup, "Table", "KeyValue");
UNIT_ASSERT(right.IsDefined());
}
@@ -91,11 +93,13 @@ Y_UNIT_TEST_SUITE(KqpExplain) {
NJson::TJsonValue plan;
NJson::ReadJsonTree(*res.PlanJson, &plan, true);
- auto join = FindPlanNodeByKv(plan, "Node Type", "Aggregate-InnerJoin (MapJoin)-Filter-TableFullScan");
+ auto join = FindPlanNodeByKv(plan, "Node Type", "Aggregate-InnerJoin (MapJoin)-Filter");
UNIT_ASSERT(join.IsDefined());
auto left = FindPlanNodeByKv(join, "Table", "EightShard");
UNIT_ASSERT(left.IsDefined());
- auto right = FindPlanNodeByKv(join, "Table", "KeyValue");
+ auto lookup = FindPlanNodeByKv(join, "Node Type", "TableLookup");
+ UNIT_ASSERT(lookup.IsDefined());
+ auto right = FindPlanNodeByKv(lookup, "Table", "KeyValue");
UNIT_ASSERT(right.IsDefined());
}
@@ -179,12 +183,14 @@ Y_UNIT_TEST_SUITE(KqpExplain) {
auto join = FindPlanNodeByKv(
plan,
"Node Type",
- "Aggregate-InnerJoin (MapJoin)-Filter-TableFullScan"
+ "Aggregate-InnerJoin (MapJoin)-Filter"
);
UNIT_ASSERT(join.IsDefined());
auto left = FindPlanNodeByKv(join, "Table", "EightShard");
UNIT_ASSERT(left.IsDefined());
- auto right = FindPlanNodeByKv(join, "Table", "FourShard");
+ auto lookup = FindPlanNodeByKv(join, "Node Type", "TableLookup");
+ UNIT_ASSERT(lookup.IsDefined());
+ auto right = FindPlanNodeByKv(lookup, "Table", "FourShard");
UNIT_ASSERT(right.IsDefined());
}
@@ -319,7 +325,7 @@ Y_UNIT_TEST_SUITE(KqpExplain) {
NJson::TJsonValue plan;
NJson::ReadJsonTree(*res.PlanJson, &plan, true);
- auto join1 = FindPlanNodeByKv(plan, "Node Type", "Sort-InnerJoin (MapJoin)-Filter-Aggregate");
+ auto join1 = FindPlanNodeByKv(plan, "Node Type", "Sort-InnerJoin (MapJoin)-Filter");
UNIT_ASSERT(join1.IsDefined());
auto join2 = FindPlanNodeByKv(plan, "Node Type", "Aggregate-InnerJoin (MapJoin)-Filter");
UNIT_ASSERT(join2.IsDefined());
diff --git a/ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp b/ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp
index 77fea831b7..b5f5cc85a3 100644
--- a/ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp
@@ -4,6 +4,7 @@
#include <ydb/public/sdk/cpp/client/ydb_table/table.h>
#include <library/cpp/json/json_reader.h>
+#include <library/cpp/threading/local_executor/local_executor.h>
#include <util/string/printf.h>
@@ -18,16 +19,17 @@ namespace {
NYdb::NTable::TDataQueryResult ExecuteDataQuery(TSession& session, const TString& query) {
const auto txSettings = TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx();
- return session.ExecuteDataQuery(query, txSettings).ExtractValueSync();
+ return session.ExecuteDataQuery(query, txSettings,
+ TExecDataQuerySettings().KeepInQueryCache(true)).ExtractValueSync();
}
NYdb::NTable::TDataQueryResult ExecuteDataQuery(TSession& session, const TString& query, TParams& params) {
const auto txSettings = TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx();
- return session.ExecuteDataQuery(query, txSettings, params).ExtractValueSync();
+ return session.ExecuteDataQuery(query, txSettings, params,
+ TExecDataQuerySettings().KeepInQueryCache(true)).ExtractValueSync();
}
-
-void CreateTableWithMultishardIndex(Tests::TClient& client) {
+void CreateTableWithMultishardIndex(Tests::TClient& client, bool async) {
const TString scheme = R"(Name: "MultiShardIndexed"
Columns { Name: "key" Type: "Uint64" }
Columns { Name: "fk" Type: "Uint32" }
@@ -40,8 +42,11 @@ void CreateTableWithMultishardIndex(Tests::TClient& client) {
NKikimrSchemeOp::TTableDescription desc;
bool parseOk = ::google::protobuf::TextFormat::ParseFromString(scheme, &desc);
UNIT_ASSERT(parseOk);
+ NKikimrSchemeOp::EIndexType type = async
+ ? NKikimrSchemeOp::EIndexType::EIndexTypeGlobalAsync
+ : NKikimrSchemeOp::EIndexType::EIndexTypeGlobal;
- auto status = client.TClient::CreateTableWithUniformShardedIndex("/Root", desc, "index", {"fk"});
+ auto status = client.TClient::CreateTableWithUniformShardedIndex("/Root", desc, "index", {"fk"}, type);
UNIT_ASSERT_VALUES_EQUAL(status, NMsgBusProxy::MSTATUS_OK);
}
@@ -60,7 +65,7 @@ void CreateTableWithMultishardIndexAndDataColumn(Tests::TClient& client) {
bool parseOk = ::google::protobuf::TextFormat::ParseFromString(scheme, &desc);
UNIT_ASSERT(parseOk);
- auto status = client.TClient::CreateTableWithUniformShardedIndex("/Root", desc, "index", {"fk"}, {"value"});
+ auto status = client.TClient::CreateTableWithUniformShardedIndex("/Root", desc, "index", {"fk"}, NKikimrSchemeOp::EIndexType::EIndexTypeGlobal, {"value"});
UNIT_ASSERT_VALUES_EQUAL(status, NMsgBusProxy::MSTATUS_OK);
}
@@ -126,7 +131,7 @@ void FillTable(NYdb::NTable::TSession& session) {
Y_UNIT_TEST_SUITE(KqpMultishardIndex) {
Y_UNIT_TEST_NEW_ENGINE(SortedRangeReadDesc) {
TKikimrRunner kikimr(SyntaxV1Settings());
- CreateTableWithMultishardIndex(kikimr.GetTestClient());
+ CreateTableWithMultishardIndex(kikimr.GetTestClient(), false);
auto db = kikimr.GetTableClient();
auto session = db.CreateSession().GetValueSync().GetSession();
FillTable<UseNewEngine>(session);
@@ -144,7 +149,7 @@ Y_UNIT_TEST_SUITE(KqpMultishardIndex) {
Y_UNIT_TEST_NEW_ENGINE(SecondaryIndexSelect) {
TKikimrRunner kikimr(SyntaxV1Settings());
- CreateTableWithMultishardIndex(kikimr.GetTestClient());
+ CreateTableWithMultishardIndex(kikimr.GetTestClient(), false);
auto db = kikimr.GetTableClient();
auto session = db.CreateSession().GetValueSync().GetSession();
FillTable<UseNewEngine>(session);
@@ -297,7 +302,7 @@ Y_UNIT_TEST_SUITE(KqpMultishardIndex) {
Y_UNIT_TEST(YqWorksFineAfterAlterIndexTableDirectly) {
TKikimrRunner kikimr(SyntaxV1Settings());
- CreateTableWithMultishardIndex(kikimr.GetTestClient());
+ CreateTableWithMultishardIndex(kikimr.GetTestClient(), false);
auto db = kikimr.GetTableClient();
auto session = db.CreateSession().GetValueSync().GetSession();
@@ -1045,7 +1050,7 @@ Y_UNIT_TEST_SUITE(KqpMultishardIndex) {
auto db = kikimr.GetTableClient();
auto session = db.CreateSession().GetValueSync().GetSession();
- CreateTableWithMultishardIndex(kikimr.GetTestClient());
+ CreateTableWithMultishardIndex(kikimr.GetTestClient(), false);
FillTable<UseNewEngine>(session);
AssertSuccessResult(session.ExecuteDataQuery(Q1_(R"(
@@ -1095,6 +1100,133 @@ Y_UNIT_TEST_SUITE(KqpMultishardIndex) {
[[4294967295u];[4u];["v4"]]
])", FormatResultSetYson(result.GetResultSet(0)));
}
+
+ template<bool UseNewEngine>
+ void CheckWriteIntoRenamingIndex(bool asyncIndex) {
+ TKikimrRunner kikimr;
+
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+ CreateTableWithMultishardIndex(kikimr.GetTestClient(), asyncIndex);
+
+ auto buildParam = [&db](ui64 id) {
+ return db.GetParamsBuilder()
+ .AddParam("$rows")
+ .BeginList()
+ .AddListItem()
+ .BeginStruct()
+ .AddMember("key").Uint64(id)
+ .AddMember("fk").Uint32(id)
+ .AddMember("value").Utf8("v1")
+ .EndStruct()
+ .AddListItem()
+ .BeginStruct()
+ .AddMember("key").Uint64(id << 31)
+ .AddMember("fk").Uint32(id + (1u << 31))
+ .AddMember("value").Utf8("v2")
+ .EndStruct()
+ .EndList()
+ .Build()
+ .Build();
+ };
+
+ TMutex SyncMutex;
+ TCondVar SyncCondVar;
+ const size_t rows = 1000;
+ size_t rowsInserted = 0;
+
+ NPar::LocalExecutor().RunAdditionalThreads(2);
+ NPar::LocalExecutor().ExecRange([&](int id) mutable {
+ switch (id) {
+ case 0: {
+ size_t count = rows;
+ while (--count) {
+ const TString q(R"(
+ DECLARE $rows AS List < Struct<key: Uint64, fk: Uint32, value: Utf8 > >;
+ UPSERT INTO `/Root/MultiShardIndexed` (key, fk, value)
+ SELECT key, fk, value FROM AS_TABLE($rows);
+ )");
+ auto r = db.RetryOperationSync([=](TSession s) {
+ auto p = buildParam(count);
+ auto t = ExecuteDataQuery(s, q, p);
+ return t;
+ });
+ UNIT_ASSERT_C(r.IsSuccess(), r.GetIssues().ToString());
+ rowsInserted += 2;
+ // Let write 10 rows before the index will be renamed
+ if (count == (rows - 10)) {
+ TGuard<TMutex> guard(SyncMutex);
+ SyncCondVar.Signal();
+ }
+ }
+ }
+ break;
+ case 1: {
+ TGuard<TMutex> guard(SyncMutex);
+ SyncCondVar.WaitI(SyncMutex);
+ auto s = db.CreateSession().GetValueSync().GetSession();
+ auto st = s.ExecuteSchemeQuery(R"(
+ ALTER TABLE `/Root/MultiShardIndexed` RENAME INDEX index TO index_new;
+ )").ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(st.GetStatus(), EStatus::SUCCESS, st.GetIssues().ToString());
+ }
+ break;
+ default:
+ Y_FAIL("Unknown id");
+ }
+ }, 0, 2, NPar::TLocalExecutor::WAIT_COMPLETE | NPar::TLocalExecutor::MED_PRIORITY);
+
+ {
+ TReadTableSettings settings;
+ settings.Ordered(true);
+ auto it = session.ReadTable("/Root/MultiShardIndexed/index_new/indexImplTable", settings).GetValueSync();
+ UNIT_ASSERT(it.IsSuccess());
+
+ int shard = 0;
+ size_t rowsRead = 0;
+ for (;;) {
+ auto tablePart = it.ReadNext().GetValueSync();
+ if (tablePart.EOS()) {
+ break;
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(tablePart.IsSuccess(), true);
+ auto resultSet = tablePart.ExtractPart();
+
+ auto rsParser = TResultSetParser(resultSet);
+
+ ui32 startVal = 1;
+ while (rsParser.TryNextRow()) {
+ auto val = rsParser.GetValue(0);
+ TValueParser vp(val);
+ vp.OpenOptional();
+ if (!vp.IsNull()) {
+ rowsRead++;
+ switch (shard) {
+ case 0:
+ UNIT_ASSERT_VALUES_EQUAL(vp.GetUint32(), startVal++);
+ break;
+ case 1:
+ UNIT_ASSERT_VALUES_EQUAL(vp.GetUint32(), (startVal++) + (1u << 31));
+ break;
+ default:
+ Y_FAIL("unexpected shard id");
+ }
+ }
+ }
+ shard++;
+ }
+ UNIT_ASSERT_VALUES_EQUAL(rowsInserted, rowsRead);
+ }
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(WriteIntoRenamingSyncIndex) {
+ CheckWriteIntoRenamingIndex<UseNewEngine>(false);
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(WriteIntoRenamingAsyncIndex) {
+ CheckWriteIntoRenamingIndex<UseNewEngine>(true);
+ }
}
}
diff --git a/ydb/core/kqp/ut/kqp_limits_ut.cpp b/ydb/core/kqp/ut/kqp_limits_ut.cpp
index 8f82287ed2..fc7c3845cf 100644
--- a/ydb/core/kqp/ut/kqp_limits_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_limits_ut.cpp
@@ -234,6 +234,58 @@ Y_UNIT_TEST_SUITE(KqpLimits) {
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
+ Y_UNIT_TEST_NEW_ENGINE(TooBigKey) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto params = TParamsBuilder()
+ .AddParam("$group").Uint32(1000).Build()
+ .AddParam("$name").String(TString(2_MB, 'n')).Build()
+ .AddParam("$amount").Uint64(20).Build()
+ .Build();
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ DECLARE $group AS Uint32;
+ DECLARE $name AS Bytes;
+ DECLARE $amount AS Uint64;
+
+ UPSERT INTO Test (Group, Name, Amount) VALUES ($group, $name, $amount);
+ )"), TTxControl::BeginTx().CommitTx(), params).ExtractValueSync();
+
+ result.GetIssues().PrintTo(Cerr);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
+ UNIT_ASSERT(HasIssue(result.GetIssues(), NYql::TIssuesIds::DEFAULT_ERROR,
+ [] (const NYql::TIssue& issue) {
+ return issue.Message.Contains("exceeds limit");
+ }));
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(TooBigColumn) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto params = TParamsBuilder()
+ .AddParam("$key").Uint64(1000).Build()
+ .AddParam("$value").String(TString(20_MB, 'n')).Build()
+ .Build();
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ DECLARE $key AS Uint64;
+ DECLARE $value AS Bytes;
+
+ UPSERT INTO KeyValue (Key, Value) VALUES ($key, $value);
+ )"), TTxControl::BeginTx().CommitTx(), params).ExtractValueSync();
+
+ result.GetIssues().PrintTo(Cerr);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::GENERIC_ERROR);
+ UNIT_ASSERT(HasIssue(result.GetIssues(), NYql::TIssuesIds::DEFAULT_ERROR,
+ [] (const NYql::TIssue& issue) {
+ return issue.Message.Contains("larger than the allowed threshold");
+ }));
+ }
+
Y_UNIT_TEST_NEW_ENGINE(AffectedShardsLimit) {
NKikimrConfig::TAppConfig appConfig;
auto& queryLimits = *appConfig.MutableTableServiceConfig()->MutableQueryLimits();
@@ -434,6 +486,8 @@ Y_UNIT_TEST_SUITE(KqpLimits) {
result.GetIssues().PrintTo(Cerr);
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::TIMEOUT);
}
+
+
}
} // namespace NKqp
diff --git a/ydb/core/kqp/ut/kqp_locks_ut.cpp b/ydb/core/kqp/ut/kqp_locks_ut.cpp
index bd9d9ede5b..bc6dbd9437 100644
--- a/ydb/core/kqp/ut/kqp_locks_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_locks_ut.cpp
@@ -114,6 +114,94 @@ Y_UNIT_TEST_SUITE(KqpLocks) {
)"), TTxControl::Tx(*tx1).CommitTx()).ExtractValueSync();
UNIT_ASSERT(result.IsSuccess());
}
+
+ Y_UNIT_TEST_NEW_ENGINE(EmptyRange) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+
+ auto session1 = db.CreateSession().GetValueSync().GetSession();
+ auto session2 = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session1.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM Test WHERE Group = 11;
+ )"), TTxControl::BeginTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([])", FormatResultSetYson(result.GetResultSet(0)));
+
+ auto tx1 = result.GetTransaction();
+ UNIT_ASSERT(tx1);
+
+ result = session2.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM Test WHERE Group = 11;
+
+ UPSERT INTO Test (Group, Name, Amount) VALUES
+ (11, "Session2", 2);
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([])", FormatResultSetYson(result.GetResultSet(0)));
+
+ result = session1.ExecuteDataQuery(Q1_(R"(
+ UPSERT INTO Test (Group, Name, Amount) VALUES
+ (11, "Session1", 1);
+ )"), TTxControl::Tx(*tx1).CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::ABORTED, result.GetIssues().ToString());
+ result.GetIssues().PrintTo(Cerr);
+ UNIT_ASSERT(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_LOCKS_INVALIDATED,
+ [] (const NYql::TIssue& issue) {
+ return issue.Message.Contains("/Root/Test");
+ }));
+
+ result = session1.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM Test WHERE Group = 11;
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([[[2u];#;[11u];["Session2"]]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(EmptyRangeAlreadyBroken) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+
+ auto session1 = db.CreateSession().GetValueSync().GetSession();
+ auto session2 = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session1.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM Test WHERE Group = 10;
+ )"), TTxControl::BeginTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([])", FormatResultSetYson(result.GetResultSet(0)));
+
+ auto tx1 = result.GetTransaction();
+ UNIT_ASSERT(tx1);
+
+ result = session2.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM Test WHERE Group = 11;
+
+ UPSERT INTO Test (Group, Name, Amount) VALUES
+ (11, "Session2", 2);
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([])", FormatResultSetYson(result.GetResultSet(0)));
+
+ result = session1.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM Test WHERE Group = 11;
+
+ UPSERT INTO Test (Group, Name, Amount) VALUES
+ (11, "Session1", 1);
+ )"), TTxControl::Tx(*tx1).CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::ABORTED, result.GetIssues().ToString());
+ result.GetIssues().PrintTo(Cerr);
+ UNIT_ASSERT(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_LOCKS_INVALIDATED,
+ [] (const NYql::TIssue& issue) {
+ return issue.Message.Contains("/Root/Test");
+ }));
+
+ result = session1.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM Test WHERE Group = 11;
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([[[2u];#;[11u];["Session2"]]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
}
} // namespace NKqp
diff --git a/ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp b/ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp
index e9d6133b51..cec70f8353 100644
--- a/ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_ne_flowcontrol_ut.cpp
@@ -57,7 +57,14 @@ void DoFlowControlTest(ui64 limit, bool hasBlockedByCapacity, bool useSessionAct
appCfg.MutableTableServiceConfig()->MutableResourceManager()->SetMkqlHeavyProgramMemoryLimit(200ul << 20);
appCfg.MutableTableServiceConfig()->MutableResourceManager()->SetQueryMemoryLimit(20ul << 30);
- auto kikimr = KikimrRunnerEnableSessionActor(useSessionActor, {}, appCfg);
+ // TODO: KIKIMR-14294
+ auto kikimrSettings = TKikimrSettings()
+ .SetAppConfig(appCfg)
+ .SetEnableKqpSessionActor(useSessionActor)
+ .SetKqpSettings({})
+ .SetEnableKqpScanQueryStreamLookup(false);
+ TKikimrRunner kikimr{kikimrSettings};
+
CreateSampleTables(kikimr);
auto db = kikimr.GetTableClient();
diff --git a/ydb/core/kqp/ut/kqp_ne_ut.cpp b/ydb/core/kqp/ut/kqp_ne_ut.cpp
index 3a18e1e79f..ecca8fca53 100644
--- a/ydb/core/kqp/ut/kqp_ne_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_ne_ut.cpp
@@ -3255,6 +3255,166 @@ Y_UNIT_TEST_SUITE(KqpNewEngine) {
UNIT_ASSERT_VALUES_EQUAL(FromString<i32>(read["limit"].GetString()), 10);
}
}
+
+ Y_UNIT_TEST(IdxLookupExtractMembers) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session.ExplainDataQuery(R"(
+ --!syntax_v1
+ PRAGMA kikimr.UseNewEngine = 'true';
+
+ DECLARE $input AS List<Struct<
+ Key: Uint64,
+ Text: String,
+ >>;
+
+ $to_upsert = (
+ SELECT
+ i.Key AS Key,
+ FROM AS_TABLE($input) AS i
+ JOIN EightShard AS s
+ USING (Key)
+ WHERE s.Key IS NULL OR s.Text != i.Text
+ );
+
+ $to_delete = (
+ SELECT s.Key AS Key
+ FROM EightShard AS s
+ JOIN AS_TABLE($input) AS i
+ USING (Key)
+ );
+
+ DELETE FROM EightShard ON SELECT Key FROM $to_delete;
+ UPSERT INTO EightShard SELECT * FROM $to_upsert;
+ )").ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ Y_UNIT_TEST(PushFlatmapInnerConnectionsToStageInput) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session.ExecuteDataQuery(R"(
+ --!syntax_v1
+ PRAGMA kikimr.UseNewEngine = "true";
+ $subquery = SELECT Key FROM `/Root/KeyValue`;
+ $subquery2 = SELECT Amount FROM `/Root/Test`;
+
+ SELECT * FROM `/Root/EightShard`
+ WHERE Key IN $subquery OR Key == 101 OR Key IN $subquery2;
+ )", TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([[[1];[101u];["Value1"]]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
+
+ Y_UNIT_TEST(PushPureFlatmapInnerConnectionsToStage) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto params = kikimr.GetTableClient().GetParamsBuilder()
+ .AddParam("$rows").BeginList()
+ .AddListItem()
+ .BeginStruct()
+ .AddMember("Name").String("Name1")
+ .AddMember("Value2").String("Value22")
+ .AddMember("Data").String("Data1")
+ .EndStruct()
+ .EndList()
+ .Build()
+ .Build();
+
+ auto result = session.ExecuteDataQuery(R"(
+ --!syntax_v1
+ PRAGMA kikimr.UseNewEngine = "true";
+
+ DECLARE $rows AS List<Struct<
+ Name: String,
+ Value2: String,
+ Data: String>>;
+
+ $values =
+ SELECT (Name, Value2) FROM Join2
+ WHERE Key1 = 101;
+
+ SELECT * FROM AS_TABLE($rows)
+ WHERE (Name, Value2) IN COMPACT $values;
+ )", TTxControl::BeginTx().CommitTx(), params).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([["Data1";"Name1";"Value22"]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
+
+ Y_UNIT_TEST(SqlInAsScalar) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto params = kikimr.GetTableClient().GetParamsBuilder()
+ .AddParam("$value1").Int32(3).Build()
+ .AddParam("$value2").Uint64(2).Build()
+ .AddParam("$value3").Int32(5).Build()
+ .AddParam("$value4").OptionalInt32(3).Build()
+ .AddParam("$value5").OptionalInt32({}).Build()
+ .AddParam("$value6").OptionalInt64(1).Build()
+ .AddParam("$value7").OptionalInt64(7).Build()
+ .Build();
+
+ auto result = session.ExecuteDataQuery(R"(
+ --!syntax_v1
+ PRAGMA kikimr.UseNewEngine = "true";
+
+ DECLARE $value1 AS Int32;
+ DECLARE $value2 AS Uint64;
+ DECLARE $value3 AS Int32;
+ DECLARE $value4 AS Int32?;
+ DECLARE $value5 AS Int32?;
+ DECLARE $value6 AS Int64?;
+ DECLARE $value7 AS Int64?;
+
+ $data = SELECT Data FROM EightShard WHERE Text = "Value1";
+
+ SELECT
+ $value1 IN $data,
+ $value2 IN $data,
+ $value3 IN $data,
+ $value4 IN $data,
+ $value5 IN $data,
+ $value6 IN $data,
+ $value7 IN $data;
+ )", TTxControl::BeginTx().CommitTx(), params).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([[
+ %true;
+ %true;
+ %false;
+ [%true];
+ #;
+ [%true];
+ [%false]]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
+
+ Y_UNIT_TEST(MultiUsageInnerConnection) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session.ExecuteDataQuery(R"(
+ --!syntax_v1
+ PRAGMA kikimr.UseNewEngine = "true";
+
+ $count1 = SELECT COUNT (*) FROM `/Root/KeyValue`;
+ $count2 = SELECT COUNT(*)
+ FROM `/Root/KeyValue` AS l
+ LEFT JOIN `/Root/EightShard` AS r
+ ON l.Key = r.Key;
+ SELECT * FROM `/Root/TwoShard` WHERE $count1 = $count2;
+
+ )", TTxControl::BeginTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
}
} // namespace NKikimr::NKqp
diff --git a/ydb/core/kqp/ut/kqp_not_null_columns_ut.cpp b/ydb/core/kqp/ut/kqp_not_null_columns_ut.cpp
index 104c3143cf..372d06566a 100644
--- a/ydb/core/kqp/ut/kqp_not_null_columns_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_not_null_columns_ut.cpp
@@ -7,6 +7,36 @@ using namespace NYdb;
using namespace NYdb::NTable;
Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
+ Y_UNIT_TEST_NEW_ENGINE(CreateTableWithDisabledNotNullDataColumns) {
+ TKikimrRunner kikimr;
+ auto client = kikimr.GetTableClient();
+ auto session = client.CreateSession().GetValueSync().GetSession();
+
+ {
+ const auto query = Q_(R"(
+ CREATE TABLE `/Root/TestCreateTable` (
+ Key Uint64 NOT NULL,
+ Value String NOT NULL,
+ PRIMARY KEY (Key))
+ )");
+
+ auto result = session.ExecuteSchemeQuery(query).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR, result.GetIssues().ToString());
+ }
+
+ {
+ const auto query = Q_(R"(
+ CREATE TABLE `/Root/TestCreateTable` (
+ Key Uint64 NOT NULL,
+ Value String,
+ PRIMARY KEY (Key))
+ )");
+
+ auto result = session.ExecuteSchemeQuery(query).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+ }
+
Y_UNIT_TEST_NEW_ENGINE(InsertNotNullPk) {
TKikimrRunner kikimr;
auto client = kikimr.GetTableClient();
@@ -150,6 +180,12 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
+ { /* update data column */
+ const auto query = Q_("UPDATE `/Root/TestUpdateNotNullPk` SET Value = 'NewValue'");
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
{ /* update not null pk column */
const auto query = Q_("UPDATE `/Root/TestUpdateNotNullPk` SET Key = 10 WHERE Key = 1");
auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
@@ -163,8 +199,62 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
}
+ Y_UNIT_TEST_NEW_ENGINE(SelectNotNullColumns) {
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
+ auto client = kikimr.GetTableClient();
+ auto session = client.CreateSession().GetValueSync().GetSession();
+
+ {
+ const auto query = Q_(R"(
+ CREATE TABLE `/Root/TestSelectNotNullPk` (
+ Key Uint64 NOT NULL,
+ Value String NOT NULL,
+ PRIMARY KEY (Key))
+ )");
+
+ auto result = session.ExecuteSchemeQuery(query).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ { /* init table */
+ const auto query = Q_(R"(
+ REPLACE INTO `/Root/TestSelectNotNullPk` (Key, Value) VALUES
+ (1, 'Value1'),
+ (2, 'Value2'),
+ (3, 'Value3');
+ )");
+
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ {
+ const auto query = Q_("SELECT * FROM `/Root/TestSelectNotNullPk`");
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ {
+ const auto query = Q_("SELECT * FROM `/Root/TestSelectNotNullPk` WHERE Key = 1");
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ {
+ const auto query = Q_("SELECT * FROM `/Root/TestSelectNotNullPk` WHERE Value = 'Value1'");
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+ }
+
Y_UNIT_TEST_NEW_ENGINE(InsertNotNull) {
- TKikimrRunner kikimr;
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
@@ -202,7 +292,10 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
Y_UNIT_TEST_NEW_ENGINE(UpsertNotNull) {
- TKikimrRunner kikimr;
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
@@ -240,7 +333,10 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
Y_UNIT_TEST_NEW_ENGINE(ReplaceNotNull) {
- TKikimrRunner kikimr;
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
@@ -278,7 +374,10 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
Y_UNIT_TEST_NEW_ENGINE(UpdateNotNull) {
- TKikimrRunner kikimr;
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
@@ -307,6 +406,12 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
{ /* update not null column */
+ const auto query = Q_("UPDATE `/Root/TestUpdateNotNull` SET Value = 'NewValue1'");
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ { /* update not null column */
const auto query = Q_("UPDATE `/Root/TestUpdateNotNull` SET Value = 'NewValue1' WHERE Key = 1");
auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
@@ -321,7 +426,10 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
Y_UNIT_TEST_NEW_ENGINE(UpdateOnNotNull) {
- TKikimrRunner kikimr;
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
@@ -383,19 +491,15 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
{
const auto query = Q_("ALTER TABLE `/Root/TestAddNotNullColumn` ADD COLUMN Value2 String NOT NULL");
auto result = session.ExecuteSchemeQuery(query).ExtractValueSync();
- UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
- }
-
- { /* set NULL to not null column */
- const auto query = Q_("UPSERT INTO `/Root/TestAddNotNullColumn` (Key, Value1, Value2) VALUES (1, 'Value1', NULL)");
- auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
- UNIT_ASSERT(!result.IsSuccess());
- UNIT_ASSERT_C(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_BAD_COLUMN_TYPE), result.GetIssues().ToString());
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR, result.GetIssues().ToString());
}
}
Y_UNIT_TEST_NEW_ENGINE(AlterDropNotNullColumn) {
- TKikimrRunner kikimr;
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
@@ -420,7 +524,10 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
Y_UNIT_TEST_NEW_ENGINE(FailedMultiEffects) {
- TKikimrRunner kikimr;
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
@@ -456,13 +563,52 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
}
- Y_UNIT_TEST_NEW_ENGINE(SecondaryKeyWithNotNullColumn) {
+ Y_UNIT_TEST_NEW_ENGINE(CreateIndexedTableWithDisabledNotNullDataColumns) {
TKikimrRunner kikimr;
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
{
const auto query = Q1_(R"(
+ CREATE TABLE `/Root/TestCreateIndexedTable` (
+ Key Uint64 NOT NULL,
+ SecondaryKey Uint64,
+ Value String NOT NULL,
+ PRIMARY KEY (Key),
+ INDEX Index GLOBAL ON (SecondaryKey)
+ COVER (Value))
+ )");
+
+ auto result = session.ExecuteSchemeQuery(query).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR, result.GetIssues().ToString());
+ }
+
+ {
+ const auto query = Q1_(R"(
+ CREATE TABLE `/Root/TestCreateIndexedTable` (
+ Key Uint64 NOT NULL,
+ SecondaryKey Uint64,
+ Value String,
+ PRIMARY KEY (Key),
+ INDEX Index GLOBAL ON (SecondaryKey)
+ COVER (Value))
+ )");
+
+ auto result = session.ExecuteSchemeQuery(query).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(SecondaryKeyWithNotNullColumn) {
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
+ auto client = kikimr.GetTableClient();
+ auto session = client.CreateSession().GetValueSync().GetSession();
+
+ {
+ const auto query = Q1_(R"(
CREATE TABLE `/Root/TestNotNullSecondaryKey` (
Key1 Uint64 NOT NULL,
Key2 Uint64 NOT NULL,
@@ -556,7 +702,10 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
}
Y_UNIT_TEST_NEW_ENGINE(SecondaryIndexWithNotNullDataColumn) {
- TKikimrRunner kikimr;
+ auto settings = TKikimrSettings()
+ .SetEnableNotNullDataColumns(true);
+
+ TKikimrRunner kikimr(settings);
auto client = kikimr.GetTableClient();
auto session = client.CreateSession().GetValueSync().GetSession();
@@ -655,6 +804,152 @@ Y_UNIT_TEST_SUITE(KqpNotNullColumns) {
result.GetIssues().ToString());
}
}
+
+ Y_UNIT_TEST_NEW_ENGINE(JoinBothTablesWithNotNullPk) {
+ TKikimrRunner kikimr;
+ auto client = kikimr.GetTableClient();
+ auto session = client.CreateSession().GetValueSync().GetSession();
+
+ {
+ auto createTableResult = session.ExecuteSchemeQuery(Q1_(R"(
+ CREATE TABLE `/Root/Left` (
+ Key Uint64 NOT NULL,
+ Value String,
+ PRIMARY KEY (Key)
+ );
+ )")).ExtractValueSync();
+ UNIT_ASSERT_C(createTableResult.IsSuccess(), createTableResult.GetIssues().ToString());
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ UPSERT INTO `/Root/Left` (Key, Value) VALUES (1, 'lValue1'), (2, 'lValue2');
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ }
+
+ {
+ auto createTableResult = session.ExecuteSchemeQuery(Q1_(R"(
+ CREATE TABLE `/Root/Right` (
+ Key Uint64 NOT NULL,
+ Value String,
+ PRIMARY KEY (Key)
+ );
+ )")).ExtractValueSync();
+ UNIT_ASSERT_C(createTableResult.IsSuccess(), createTableResult.GetIssues().ToString());
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ UPSERT INTO `/Root/Right` (Key, Value) VALUES (1, 'rValue1'), (3, 'rValue3');
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ }
+
+ {
+ const auto query = Q1_(R"(
+ SELECT l.Value, r.Value FROM `/Root/Left` AS l JOIN `/Root/Right` AS r ON l.Key = r.Key;
+ )");
+
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ CompareYson(R"([[["lValue1"];["rValue1"]]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(JoinLeftTableWithNotNullPk) {
+ TKikimrRunner kikimr;
+ auto client = kikimr.GetTableClient();
+ auto session = client.CreateSession().GetValueSync().GetSession();
+
+ {
+ auto createTableResult = session.ExecuteSchemeQuery(Q1_(R"(
+ CREATE TABLE `/Root/Left` (
+ Key Uint64 NOT NULL,
+ Value String,
+ PRIMARY KEY (Key)
+ );
+ )")).ExtractValueSync();
+ UNIT_ASSERT_C(createTableResult.IsSuccess(), createTableResult.GetIssues().ToString());
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ UPSERT INTO `/Root/Left` (Key, Value) VALUES (1, 'lValue1'), (2, 'lValue2');
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ }
+
+ {
+ auto createTableResult = session.ExecuteSchemeQuery(Q1_(R"(
+ CREATE TABLE `/Root/Right` (
+ Key Uint64,
+ Value String,
+ PRIMARY KEY (Key)
+ );
+ )")).ExtractValueSync();
+ UNIT_ASSERT_C(createTableResult.IsSuccess(), createTableResult.GetIssues().ToString());
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ UPSERT INTO `/Root/Right` (Key, Value) VALUES (1, 'rValue1'), (3, 'rValue3'), (NULL, 'rValue');
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ }
+
+ { // inner
+ const auto query = Q1_(R"(
+ SELECT l.Value, r.Value FROM `/Root/Left` AS l JOIN `/Root/Right` AS r ON l.Key = r.Key;
+ )");
+
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ CompareYson(R"([[["lValue1"];["rValue1"]]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
+
+ { // left
+ const auto query = Q1_(R"(
+ SELECT l.Value, r.Value FROM `/Root/Left` AS l LEFT JOIN `/Root/Right` AS r ON l.Key = r.Key ORDER BY l.Value;
+ )");
+
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ CompareYson(R"([[["lValue1"];["rValue1"]];[["lValue2"];#]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
+
+ { // right
+ const auto query = Q1_(R"(
+ SELECT r.Value, l.Value FROM `/Root/Left` AS l RIGHT JOIN `/Root/Right` AS r ON l.Key = r.Key ORDER BY r.Value;
+ )");
+
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ CompareYson(R"([[["rValue"];#];[["rValue1"];["lValue1"]];[["rValue3"];#]])", FormatResultSetYson(result.GetResultSet(0)));
+ }
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(Describe) {
+ TKikimrRunner kikimr;
+ auto client = kikimr.GetTableClient();
+ auto session = client.CreateSession().GetValueSync().GetSession();
+
+ auto createTableResult = session.ExecuteSchemeQuery(Q1_(R"(
+ CREATE TABLE `/Root/DescribeTest` (
+ Key1 Uint64 NOT NULL,
+ Key2 Uint64,
+ Value String,
+ PRIMARY KEY (Key1, Key2)
+ );
+ )")).ExtractValueSync();
+ UNIT_ASSERT_C(createTableResult.IsSuccess(), createTableResult.GetIssues().ToString());
+
+ auto describeTableResult = session.DescribeTable("/Root/DescribeTest").GetValueSync();
+ UNIT_ASSERT_C(describeTableResult.IsSuccess(), describeTableResult.GetIssues().ToString());
+
+ const THashMap<std::string_view, std::string_view> columnTypes = {
+ {"Key1", "Uint64"},
+ {"Key2", "Uint64?"},
+ {"Value", "String?"}
+ };
+
+ const auto& columns = describeTableResult.GetTableDescription().GetTableColumns();
+ for (const auto& column : columns) {
+ UNIT_ASSERT_VALUES_EQUAL(column.Type.ToString(), columnTypes.at(column.Name));
+ }
+ }
}
} // namespace NKqp
diff --git a/ydb/core/kqp/ut/kqp_olap_ut.cpp b/ydb/core/kqp/ut/kqp_olap_ut.cpp
index 663291d100..9dade7499b 100644
--- a/ydb/core/kqp/ut/kqp_olap_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_olap_ut.cpp
@@ -17,6 +17,9 @@
#include <ydb/core/tx/schemeshard/schemeshard.h>
#include <ydb/core/testlib/test_client.h>
#include <ydb/core/testlib/tablet_helpers.h>
+#include <util/system/sanitizers.h>
+
+#include <fmt/format.h>
namespace NKikimr {
namespace NKqp {
@@ -42,8 +45,8 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
runtime->SetLogPriority(NKikimrServices::KQP_GATEWAY, NActors::NLog::PRI_DEBUG);
runtime->SetLogPriority(NKikimrServices::KQP_RESOURCE_MANAGER, NActors::NLog::PRI_DEBUG);
//runtime->SetLogPriority(NKikimrServices::LONG_TX_SERVICE, NActors::NLog::PRI_DEBUG);
- runtime->SetLogPriority(NKikimrServices::TX_COLUMNSHARD, NActors::NLog::PRI_TRACE);
- runtime->SetLogPriority(NKikimrServices::TX_COLUMNSHARD_SCAN, NActors::NLog::PRI_DEBUG);
+ //runtime->SetLogPriority(NKikimrServices::TX_COLUMNSHARD, NActors::NLog::PRI_TRACE);
+ //runtime->SetLogPriority(NKikimrServices::TX_COLUMNSHARD_SCAN, NActors::NLog::PRI_DEBUG);
//runtime->SetLogPriority(NKikimrServices::TX_OLAPSHARD, NActors::NLog::PRI_DEBUG);
//runtime->SetLogPriority(NKikimrServices::TX_DATASHARD, NActors::NLog::PRI_DEBUG);
//runtime->SetLogPriority(NKikimrServices::BLOB_CACHE, NActors::NLog::PRI_DEBUG);
@@ -508,6 +511,21 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
};
}
+ void CheckPlanForAggregatePushdown(const TString& query, NYdb::NTable::TTableClient& tableClient, const std::vector<std::string>& planNodes) {
+ TStreamExecScanQuerySettings scanSettings;
+ scanSettings.Explain(true);
+ auto res = tableClient.StreamExecuteScanQuery(query, scanSettings).GetValueSync();
+ UNIT_ASSERT_C(res.IsSuccess(), res.GetIssues().ToString());
+
+ auto planRes = CollectStreamResult(res);
+ auto ast = planRes.QueryStats->Getquery_ast();
+
+ for (auto planNode : planNodes) {
+ UNIT_ASSERT_C(ast.find(planNode) != std::string::npos,
+ TStringBuilder() << planNode << " was not pushed down. Query: " << query);
+ }
+ }
+
Y_UNIT_TEST_TWIN(SimpleQueryOlap, UseSessionActor) {
auto settings = TKikimrSettings()
.SetWithSampleTables(false)
@@ -1278,6 +1296,293 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
}
}
+ Y_UNIT_TEST(AggregationCountPushdown) {
+ auto settings = TKikimrSettings()
+ .SetWithSampleTables(false)
+ .SetEnableOlapSchemaOperations(true);
+ TKikimrRunner kikimr(settings);
+
+ // EnableDebugLogging(kikimr);
+ CreateTestOlapTable(kikimr);
+ auto tableClient = kikimr.GetTableClient();
+
+ {
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 10000, 3000000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 11000, 3001000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 12000, 3002000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 13000, 3003000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 14000, 3004000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 20000, 2000000, 7000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 30000, 1000000, 11000);
+ }
+
+ {
+ TString query = R"(
+ --!syntax_v1
+ PRAGMA Kikimr.KqpPushOlapProcess = "true";
+ PRAGMA EmitAggApply;
+ SELECT
+ COUNT(level)
+ FROM `/Root/olapStore/olapTable`
+ )";
+ auto it = tableClient.StreamExecuteScanQuery(query).GetValueSync();
+
+ UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
+ TString result = StreamResultToYson(it);
+ CompareYson(result, R"([[23000u;]])");
+
+ // Check plan
+ CheckPlanForAggregatePushdown(query, tableClient, { "TKqpOlapAgg" });
+ }
+ }
+
+ Y_UNIT_TEST(AggregationSumPushdown) {
+ // Delete return once SUM pushdown will be implemented
+ return;
+
+ auto settings = TKikimrSettings()
+ .SetWithSampleTables(false)
+ .SetEnableOlapSchemaOperations(true);
+ TKikimrRunner kikimr(settings);
+
+ // EnableDebugLogging(kikimr);
+ CreateTestOlapTable(kikimr);
+ auto tableClient = kikimr.GetTableClient();
+
+ {
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 10000, 3000000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 11000, 3001000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 12000, 3002000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 13000, 3003000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 14000, 3004000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 20000, 2000000, 7000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 30000, 1000000, 11000);
+ }
+
+ {
+ TString query = R"(
+ --!syntax_v1
+ PRAGMA Kikimr.KqpPushOlapProcess = "true";
+ PRAGMA EmitAggApply;
+ SELECT
+ SUM(level)
+ FROM `/Root/olapStore/olapTable`
+ )";
+ auto it = tableClient.StreamExecuteScanQuery(query).GetValueSync();
+
+ UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
+ TString result = StreamResultToYson(it);
+ CompareYson(result, R"([[[46000;]]])");
+
+ // Check plan
+ // CheckPlanForAggregatePushdown(query, tableClient, { "TKqpOlapAgg" });
+ }
+ }
+
+ Y_UNIT_TEST(AggregationCountGroupByPushdown) {
+ // remove this return when GROUP BY will be implemented on columnshard
+ return;
+
+ auto settings = TKikimrSettings()
+ .SetWithSampleTables(false)
+ .SetEnableOlapSchemaOperations(true);
+ TKikimrRunner kikimr(settings);
+
+ // EnableDebugLogging(kikimr);
+ CreateTestOlapTable(kikimr);
+ auto tableClient = kikimr.GetTableClient();
+
+ {
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 10000, 3000000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 11000, 3001000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 12000, 3002000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 13000, 3003000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 14000, 3004000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 20000, 2000000, 7000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 30000, 1000000, 11000);
+ }
+
+ {
+ TString query = R"(
+ --!syntax_v1
+ PRAGMA Kikimr.KqpPushOlapProcess = "true";
+ SELECT
+ level, COUNT(level)
+ FROM `/Root/olapStore/olapTable`
+ GROUP BY level
+ ORDER BY level
+ )";
+ auto it = tableClient.StreamExecuteScanQuery(query).GetValueSync();
+
+ UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
+ TString result = StreamResultToYson(it);
+ Cout << result << Endl;
+ CompareYson(result, R"([[[0];4600u];[[1];4600u];[[2];4600u];[[3];4600u];[[4];4600u]])");
+
+ // Check plan
+ CheckPlanForAggregatePushdown(query, tableClient, { "TKqpOlapAgg" });
+ }
+ }
+
+ Y_UNIT_TEST_TWIN(CountAllPushdown, UseLlvm) {
+ // remove this return when COUNT(*) will be implemented on columnshard
+ return;
+
+ auto settings = TKikimrSettings()
+ .SetWithSampleTables(false)
+ .SetEnableOlapSchemaOperations(true);
+ TKikimrRunner kikimr(settings);
+
+ // EnableDebugLogging(kikimr);
+ CreateTestOlapTable(kikimr);
+ auto tableClient = kikimr.GetTableClient();
+
+ {
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 10000, 3000000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 11000, 3001000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 12000, 3002000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 13000, 3003000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 14000, 3004000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 20000, 2000000, 7000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 30000, 1000000, 11000);
+ }
+
+ {
+ TString query = fmt::format(R"(
+ --!syntax_v1
+ PRAGMA Kikimr.KqpPushOlapProcess = "true";
+ PRAGMA ydb.EnableLlvm = "{}";
+ SELECT
+ COUNT(*)
+ FROM `/Root/olapStore/olapTable`
+ )", UseLlvm ? "true" : "false");
+ auto it = tableClient.StreamExecuteScanQuery(query).GetValueSync();
+
+ UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
+ TString result = StreamResultToYson(it);
+ Cout << result << Endl;
+ CompareYson(result, R"([[23000u;]])");
+
+ // Check plan
+ CheckPlanForAggregatePushdown(query, tableClient, { "TKqpOlapAgg" });
+ }
+ }
+
+ Y_UNIT_TEST(CountAllNoPushdown) {
+ auto settings = TKikimrSettings()
+ .SetWithSampleTables(false)
+ .SetEnableOlapSchemaOperations(true);
+ TKikimrRunner kikimr(settings);
+
+ // EnableDebugLogging(kikimr);
+ CreateTestOlapTable(kikimr);
+ auto tableClient = kikimr.GetTableClient();
+
+ {
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 10000, 3000000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 11000, 3001000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 12000, 3002000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 13000, 3003000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 14000, 3004000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 20000, 2000000, 7000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 30000, 1000000, 11000);
+ }
+
+ {
+ auto it = tableClient.StreamExecuteScanQuery(R"(
+ --!syntax_v1
+ SELECT
+ COUNT(*)
+ FROM `/Root/olapStore/olapTable`
+ )").GetValueSync();
+
+ UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
+ TString result = StreamResultToYson(it);
+ Cout << result << Endl;
+ CompareYson(result, R"([[23000u;]])");
+ }
+ }
+
+ Y_UNIT_TEST(AggregationAndFilterPushdownOnSameCols) {
+ auto settings = TKikimrSettings()
+ .SetWithSampleTables(false)
+ .SetEnableOlapSchemaOperations(true);
+ TKikimrRunner kikimr(settings);
+
+ // EnableDebugLogging(kikimr);
+ CreateTestOlapTable(kikimr);
+ auto tableClient = kikimr.GetTableClient();
+
+ {
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 10000, 3000000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 11000, 3001000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 12000, 3002000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 13000, 3003000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 14000, 3004000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 20000, 2000000, 7000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 30000, 1000000, 11000);
+ }
+
+ {
+ TString query = R"(
+ --!syntax_v1
+ PRAGMA Kikimr.KqpPushOlapProcess = "true";
+ SELECT
+ COUNT(level)
+ FROM `/Root/olapStore/olapTable`
+ WHERE level = 2
+ )";
+ auto it = tableClient.StreamExecuteScanQuery(query).GetValueSync();
+
+ UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
+ TString result = StreamResultToYson(it);
+ CompareYson(result, R"([[4600u;]])");
+
+ // Check plan
+ CheckPlanForAggregatePushdown(query, tableClient, { "TKqpOlapAgg", "KqpOlapFilter" });
+ }
+ }
+
+ Y_UNIT_TEST(AggregationAndFilterPushdownOnDiffCols) {
+ auto settings = TKikimrSettings()
+ .SetWithSampleTables(false)
+ .SetEnableOlapSchemaOperations(true);
+ TKikimrRunner kikimr(settings);
+
+ // EnableDebugLogging(kikimr);
+ CreateTestOlapTable(kikimr);
+ auto tableClient = kikimr.GetTableClient();
+
+ {
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 10000, 3000000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 11000, 3001000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 12000, 3002000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 13000, 3003000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 14000, 3004000, 1000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 20000, 2000000, 7000);
+ WriteTestData(kikimr, "/Root/olapStore/olapTable", 30000, 1000000, 11000);
+ }
+
+ {
+ TString query = R"(
+ --!syntax_v1
+ PRAGMA Kikimr.KqpPushOlapProcess = "true";
+ SELECT
+ COUNT(`timestamp`)
+ FROM `/Root/olapStore/olapTable`
+ WHERE level = 2
+ )";
+ auto it = tableClient.StreamExecuteScanQuery(query).GetValueSync();
+
+ UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
+ TString result = StreamResultToYson(it);
+ CompareYson(result, R"([[4600u;]])");
+
+ // Check plan
+ CheckPlanForAggregatePushdown(query, tableClient, { "TKqpOlapAgg", "KqpOlapFilter" });
+ }
+ }
+
Y_UNIT_TEST_TWIN(StatsSysView, UseSessionActor) {
auto settings = TKikimrSettings()
.SetWithSampleTables(false)
@@ -1403,9 +1708,11 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
InitRoot(server, sender);
EnableDebugLogging(runtime);
- CreateTestOlapTable(*server, "largeOlapTable", "largeOlapStore", 1000, 1000);
+ ui32 numShards = NSan::PlainOrUnderSanitizer(1000, 10);
+ ui32 numIterations = NSan::PlainOrUnderSanitizer(50, 10);
+ CreateTestOlapTable(*server, "largeOlapTable", "largeOlapStore", numShards, numShards);
ui32 insertRows = 0;
- for(ui64 i = 0; i < 100; ++i) {
+ for(ui64 i = 0; i < numIterations; ++i) {
SendDataViaActorSystem(runtime, "/Root/largeOlapStore/largeOlapTable", 0, 1000000 + i*1000000, 2000);
insertRows += 2000;
}
@@ -1470,16 +1777,18 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
InitRoot(server, sender);
EnableDebugLogging(runtime);
- CreateTestOlapTable(*server, "largeOlapTable", "largeOlapStore", 100, 100);
+ ui32 numShards = NSan::PlainOrUnderSanitizer(100, 10);
+ ui32 numIterations = NSan::PlainOrUnderSanitizer(100, 10);
+ CreateTestOlapTable(*server, "largeOlapTable", "largeOlapStore", numShards, numShards);
ui32 insertRows = 0;
- for(ui64 i = 0; i < 100; ++i) {
+
+ for(ui64 i = 0; i < numIterations; ++i) {
SendDataViaActorSystem(runtime, "/Root/largeOlapStore/largeOlapTable", 0, 1000000 + i*1000000, 2000);
insertRows += 2000;
}
ui64 result = 0;
THashSet<TActorId> columnShardScans;
- std::set<ui64> tabletIds;
bool prevIsFinished = false;
auto captureEvents = [&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle> &ev) -> auto {
@@ -1490,7 +1799,6 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
for (auto& [shardId, nodeId]: msg->ShardNodes) {
Cerr << "-- nodeId: " << nodeId << Endl;
nodeId = runtime->GetNodeId(0);
- tabletIds.insert(shardId);
}
break;
}
@@ -1516,7 +1824,6 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
case NKqp::TKqpComputeEvents::EvScanData: {
auto [it, success] = columnShardScans.emplace(ev->Sender);
auto* msg = ev->Get<NKqp::TEvKqpCompute::TEvScanData>();
- Cerr << (TStringBuilder() << "-- EvScanData from " << ev->Sender << Endl);
if (success) {
// first scan response.
prevIsFinished = msg->Finished;
diff --git a/ydb/core/kqp/ut/kqp_query_ut.cpp b/ydb/core/kqp/ut/kqp_query_ut.cpp
index 9fd70ba668..e59822a4ad 100644
--- a/ydb/core/kqp/ut/kqp_query_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_query_ut.cpp
@@ -1200,6 +1200,54 @@ Y_UNIT_TEST_SUITE(KqpQuery) {
}
}
+ Y_UNIT_TEST_NEW_ENGINE(MultipleCurrentUtcTimestamp) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto query = Q1_(R"(
+ SELECT * FROM `/Root/Logs` WHERE Ts > Cast(CurrentUtcTimestamp() as Int64)
+ UNION ALL
+ SELECT * FROM `/Root/Logs` WHERE Ts < Cast(CurrentUtcTimestamp() as Int64);
+ )");
+
+ auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(SelectWhereInSubquery) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM `/Root/KeyValue` WHERE Key IN (SELECT Key FROM `/Root/EightShard`);
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(UpdateWhereInSubquery) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ UPDATE `/Root/KeyValue` SET Value = 'NewValue' WHERE Key IN (SELECT Key FROM `/Root/EightShard`);
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ Y_UNIT_TEST_NEW_ENGINE(DeleteWhereInSubquery) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ DELETE FROM `/Root/KeyValue` WHERE Key IN (SELECT Key FROM `/Root/EightShard`);
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
}
} // namespace NKqp
diff --git a/ydb/core/kqp/ut/kqp_scan_ut.cpp b/ydb/core/kqp/ut/kqp_scan_ut.cpp
index 9b74df98a4..18d09c8264 100644
--- a/ydb/core/kqp/ut/kqp_scan_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_scan_ut.cpp
@@ -1234,7 +1234,11 @@ Y_UNIT_TEST_SUITE(KqpScan) {
auto part = it.ReadNext().GetValueSync();
UNIT_ASSERT_EQUAL_C(part.GetStatus(), EStatus::PRECONDITION_FAILED, part.GetStatus());
- UNIT_ASSERT_STRINGS_EQUAL(part.GetIssues().back().GetSubIssues().back()->Message, "Requested too many execution units: 12");
+ part.GetIssues().PrintTo(Cerr);
+ UNIT_ASSERT(HasIssue(part.GetIssues(), NYql::TIssuesIds::KIKIMR_PRECONDITION_FAILED,
+ [](const NYql::TIssue& issue) {
+ return issue.Message.Contains("Requested too many execution units");
+ }));
part = it.ReadNext().GetValueSync();
UNIT_ASSERT(part.EOS());
@@ -1680,11 +1684,7 @@ Y_UNIT_TEST_SUITE(KqpScan) {
}
Y_UNIT_TEST_TWIN(SecondaryIndex, UseSessionActor) {
- auto settings = TKikimrSettings()
- .SetEnableKqpSessionActor(UseSessionActor)
- .SetEnableKqpScanQueryStreamLookup(true);
-
- TKikimrRunner kikimr(settings);
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
auto db = kikimr.GetTableClient();
auto session = db.CreateSession().GetValueSync().GetSession();
@@ -1967,11 +1967,7 @@ Y_UNIT_TEST_SUITE(KqpScan) {
}
Y_UNIT_TEST_TWIN(StreamLookup, UseSessionActor) {
- auto settings = TKikimrSettings()
- .SetEnableKqpSessionActor(UseSessionActor)
- .SetEnableKqpScanQueryStreamLookup(true);
-
- TKikimrRunner kikimr(settings);
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
auto db = kikimr.GetTableClient();
CreateSampleTables(kikimr);
@@ -2000,11 +1996,7 @@ Y_UNIT_TEST_SUITE(KqpScan) {
}
Y_UNIT_TEST_TWIN(StreamLookupByPkPrefix, UseSessionActor) {
- auto settings = TKikimrSettings()
- .SetEnableKqpSessionActor(UseSessionActor)
- .SetEnableKqpScanQueryStreamLookup(true);
-
- TKikimrRunner kikimr(settings);
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
auto db = kikimr.GetTableClient();
CreateSampleTables(kikimr);
@@ -2142,7 +2134,76 @@ Y_UNIT_TEST_SUITE(KqpScan) {
PRAGMA kikimr.OptEnablePredicateExtract = "false";
SELECT Value FROM `/Root/Table` WHERE Key IN AsList(1, 2, 3);
)");
+ }
+
+ Y_UNIT_TEST_TWIN(LimitOverSecondaryIndexRead, UseSessionActor) {
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ CreateSampleTablesWithIndex(session);
+
+ TStreamExecScanQuerySettings querySettings;
+ querySettings.Explain(true);
+
+ auto itIndex = db.StreamExecuteScanQuery(R"(
+ SELECT *
+ FROM `/Root/SecondaryComplexKeys` VIEW Index
+ WHERE Fk1 == 1
+ LIMIT 2;
+ )", querySettings).GetValueSync();
+
+ UNIT_ASSERT_C(itIndex.IsSuccess(), itIndex.GetIssues().ToString());
+
+ auto res = CollectStreamResult(itIndex);
+ UNIT_ASSERT(res.PlanJson);
+
+ Cerr << *res.PlanJson;
+
+ NJson::TJsonValue plan;
+ NJson::ReadJsonTree(*res.PlanJson, &plan, true);
+
+ auto indexRead = FindPlanNodeByKv(plan, "Node Type", "Limit-TablePointLookup");
+ UNIT_ASSERT(indexRead.IsDefined());
+ auto indexTable = FindPlanNodeByKv(indexRead, "Table", "SecondaryComplexKeys/Index/indexImplTable");
+ UNIT_ASSERT(indexTable.IsDefined());
+ auto limit = FindPlanNodeByKv(indexRead, "Limit", "2");
+ UNIT_ASSERT(limit.IsDefined());
+ }
+
+ Y_UNIT_TEST_TWIN(TopSortOverSecondaryIndexRead, UseSessionActor) {
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ CreateSampleTablesWithIndex(session);
+
+ TStreamExecScanQuerySettings querySettings;
+ querySettings.Explain(true);
+
+ auto itIndex = db.StreamExecuteScanQuery(R"(
+ SELECT *
+ FROM `/Root/SecondaryComplexKeys` VIEW Index
+ WHERE Fk1 == 1
+ ORDER BY Fk1 LIMIT 2;
+ )", querySettings).GetValueSync();
+
+ UNIT_ASSERT_C(itIndex.IsSuccess(), itIndex.GetIssues().ToString());
+
+ auto res = CollectStreamResult(itIndex);
+ UNIT_ASSERT(res.PlanJson);
+
+ Cerr << *res.PlanJson;
+
+ NJson::TJsonValue plan;
+ NJson::ReadJsonTree(*res.PlanJson, &plan, true);
+ auto indexRead = FindPlanNodeByKv(plan, "Node Type", "Limit-TablePointLookup");
+ UNIT_ASSERT(indexRead.IsDefined());
+ auto indexTable = FindPlanNodeByKv(indexRead, "Table", "SecondaryComplexKeys/Index/indexImplTable");
+ UNIT_ASSERT(indexTable.IsDefined());
+ auto limit = FindPlanNodeByKv(indexRead, "Limit", "2");
+ UNIT_ASSERT(limit.IsDefined());
}
}
diff --git a/ydb/core/kqp/ut/kqp_scheme_ut.cpp b/ydb/core/kqp/ut/kqp_scheme_ut.cpp
index 46bb6eeb08..424397379f 100644
--- a/ydb/core/kqp/ut/kqp_scheme_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_scheme_ut.cpp
@@ -100,6 +100,81 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
+ Y_UNIT_TEST(CreateAndDropTableCheckAuditLog) {
+ TStringStream logStream;
+ {
+ TKikimrRunner kikimr(TKikimrSettings().SetLogStream(&logStream));
+
+ auto driverConfig = TDriverConfig()
+ .SetEndpoint(kikimr.GetEndpoint())
+ .SetAuthToken("user0@builtin");
+ auto driver = TDriver(driverConfig);
+ auto db = NYdb::NTable::TTableClient(driver);
+ auto session = db.CreateSession().GetValueSync().GetSession();
+ kikimr.GetTestServer().GetRuntime()->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_INFO);
+
+ {
+ auto schemeClient = kikimr.GetSchemeClient();
+
+ NYdb::NScheme::TPermissions permissions("user0@builtin", {"ydb.deprecated.create_table"});
+ AssertSuccessResult(schemeClient.ModifyPermissions("/Root",
+ NYdb::NScheme::TModifyPermissionsSettings().AddGrantPermissions(permissions)
+ ).ExtractValueSync()
+ );
+ }
+
+ {
+ const static TString createTableQuery = R"(
+ CREATE TABLE `/Root/Test1234/KeyValue` (
+ Key Uint32,
+ Value String,
+ PRIMARY KEY(Key)
+ );
+ )";
+ auto result = session.ExecuteSchemeQuery(createTableQuery).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ {
+ const static TString dropTableQuery = R"(
+ DROP TABLE `/Root/Test1234/KeyValue`;
+ )";
+ auto result = session.ExecuteSchemeQuery(dropTableQuery).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ driver.Stop(true);
+ }
+
+ TString line;
+ int mtc = 0;
+ int ctc = 0;
+ int dtc = 0;
+ while (logStream.ReadLine(line)) {
+ if (line.find("AUDIT:") == line.npos)
+ continue;
+
+ const TString modifyAclTablePattern("operation: MODIFY ACL");
+ if (line.find(modifyAclTablePattern) != line.npos) {
+ mtc += 1;
+ }
+
+ const TString createTablePattern("operation: CREATE TABLE");
+ if (line.find(createTablePattern) != line.npos) {
+ ctc += 1;
+ }
+
+ const TString dropTablePattern("operation: DROP TABLE");
+ if (line.find(dropTablePattern) != line.npos) {
+ dtc += 1;
+ }
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL_C(mtc, 1, mtc);
+ UNIT_ASSERT_VALUES_EQUAL_C(ctc, 1, ctc);
+ UNIT_ASSERT_VALUES_EQUAL_C(dtc, 1, dtc);
+ }
+
Y_UNIT_TEST(CreateDropTableMultipleTime) {
TKikimrRunner kikimr;
auto db = kikimr.GetTableClient();
@@ -2183,7 +2258,6 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
}
}
-
Y_UNIT_TEST(AlterTableWithDecimalColumn) {
TKikimrRunner kikimr;
auto db = kikimr.GetTableClient();
diff --git a/ydb/core/kqp/ut/kqp_sort_ut.cpp b/ydb/core/kqp/ut/kqp_sort_ut.cpp
index 71fa9b3b0f..b5cf5cb7e2 100644
--- a/ydb/core/kqp/ut/kqp_sort_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_sort_ut.cpp
@@ -1229,6 +1229,34 @@ Y_UNIT_TEST_SUITE(KqpSort) {
[[3];[301u];["Value1"]]
])", FormatResultSetYson(result.GetResultSet(2)));
}
+
+ Y_UNIT_TEST_TWIN(UnionAllSortLimit, UseNewEngine) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session.ExplainDataQuery(Q1_(R"(
+ SELECT * FROM Logs WHERE App = "nginx" AND Ts >= 2
+
+ UNION ALL
+
+ SELECT * FROM Logs WHERE App >= "kikimr-db"
+
+ ORDER BY App, Ts, Host
+ LIMIT 3;
+ )")).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+ // Cerr << result.GetPlan() << Endl;
+
+ NJson::TJsonValue plan;
+ NJson::ReadJsonTree(result.GetPlan(), &plan, true);
+
+ for (auto& read : plan["tables"][0]["reads"].GetArraySafe()) {
+ UNIT_ASSERT(read.Has("limit"));
+ UNIT_ASSERT_VALUES_EQUAL(read["limit"], UseNewEngine ? "3" : "\"3\"");
+ }
+ }
}
} // namespace NKqp
diff --git a/ydb/core/kqp/ut/kqp_stats_ut.cpp b/ydb/core/kqp/ut/kqp_stats_ut.cpp
index 6202b0ba11..2228f3c660 100644
--- a/ydb/core/kqp/ut/kqp_stats_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_stats_ut.cpp
@@ -58,14 +58,18 @@ Y_UNIT_TEST_TWIN(JoinNoStats, UseSessionActor) {
}
Y_UNIT_TEST_TWIN(JoinStatsBasic, UseSessionActor) {
- auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
+ auto settings = TKikimrSettings()
+ .SetEnableKqpSessionActor(UseSessionActor)
+ .SetEnableKqpScanQueryStreamLookup(false); // TODO: enable stream lookup KIKIMR-14294
+
+ TKikimrRunner kikimr(settings);
auto db = kikimr.GetTableClient();
- TStreamExecScanQuerySettings settings;
- settings.CollectQueryStats(ECollectQueryStatsMode::Basic);
+ TStreamExecScanQuerySettings querySettings;
+ querySettings.CollectQueryStats(ECollectQueryStatsMode::Basic);
auto it = db.StreamExecuteScanQuery(R"(
SELECT count(*) FROM `/Root/EightShard` AS t JOIN `/Root/KeyValue` AS kv ON t.Data = kv.Key;
- )", settings).GetValueSync();
+ )", querySettings).GetValueSync();
auto res = CollectStreamResult(it);
UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
@@ -349,10 +353,10 @@ Y_UNIT_TEST_TWIN(StatsProfile, UseSessionActor) {
NJson::TJsonValue plan;
NJson::ReadJsonTree(result.GetQueryPlan(), &plan, true);
- auto node1 = FindPlanNodeByKv(plan, "Node Type", "TableFullScan");
+ auto node1 = FindPlanNodeByKv(plan, "Node Type", "Aggregate-TableFullScan");
UNIT_ASSERT_EQUAL(node1.GetMap().at("Stats").GetMapSafe().at("ComputeNodes").GetArraySafe().size(), 2);
- auto node2 = FindPlanNodeByKv(plan, "Node Type", "Limit");
+ auto node2 = FindPlanNodeByKv(plan, "Node Type", "Aggregate-Limit");
UNIT_ASSERT_EQUAL(node2.GetMap().at("Stats").GetMapSafe().at("ComputeNodes").GetArraySafe().size(), 1);
}
diff --git a/ydb/core/kqp/ut/kqp_sys_view_ut.cpp b/ydb/core/kqp/ut/kqp_sys_view_ut.cpp
index 3ba730c872..8b1e554567 100644
--- a/ydb/core/kqp/ut/kqp_sys_view_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_sys_view_ut.cpp
@@ -97,7 +97,7 @@ Y_UNIT_TEST_SUITE(KqpSystemView) {
auto it = client.StreamExecuteScanQuery(R"(
PRAGMA Kikimr.OptEnablePredicateExtract = "true";
SELECT OwnerId, PartIdx, Path, PathId
- FROM `/Root/.sys/partition_stats`
+ FROM `/Root/.sys/partition_stats`
WHERE
OwnerId = 72057594046644480ul
AND PathId = 5u
@@ -138,7 +138,7 @@ Y_UNIT_TEST_SUITE(KqpSystemView) {
PRAGMA Kikimr.OptEnablePredicateExtract = "true";
SELECT OwnerId, PartIdx, Path, PathId
- FROM `/Root/.sys/partition_stats`
+ FROM `/Root/.sys/partition_stats`
WHERE
OwnerId = 72057594046644480ul
AND PathId = 5u
@@ -464,7 +464,8 @@ Y_UNIT_TEST_SUITE(KqpSystemView) {
UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString());
auto streamPart = it.ReadNext().GetValueSync();
- UNIT_ASSERT_VALUES_EQUAL(streamPart.GetStatus(), EStatus::SCHEME_ERROR);
+ // TODO: Should be UNAUTHORIZED
+ UNIT_ASSERT_VALUES_EQUAL(streamPart.GetStatus(), EStatus::ABORTED);
driver.Stop(true);
}
diff --git a/ydb/core/kqp/ut/kqp_tx_ut.cpp b/ydb/core/kqp/ut/kqp_tx_ut.cpp
index 2250ea2bdf..26eb2591b7 100644
--- a/ydb/core/kqp/ut/kqp_tx_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_tx_ut.cpp
@@ -81,6 +81,43 @@ Y_UNIT_TEST_SUITE(KqpTx) {
UNIT_ASSERT(HasIssue(commitResult.GetIssues(), NYql::TIssuesIds::KIKIMR_TRANSACTION_NOT_FOUND));
}
+ Y_UNIT_TEST_QUAD(LocksAbortOnCommit, UseNewEngine, UseSessionActor) {
+ auto kikimr = KikimrRunnerEnableSessionActor(UseNewEngine && UseSessionActor);
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+ {
+ auto result = session.ExecuteDataQuery(Q_(R"(
+ UPSERT INTO `/Root/KeyValue` (Key, Value) VALUES (1, "One");
+ UPSERT INTO `/Root/KeyValue` (Key, Value) VALUES (2, "Two");
+ UPSERT INTO `/Root/KeyValue` (Key, Value) VALUES (3, "Three");
+ UPSERT INTO `/Root/KeyValue` (Key, Value) VALUES (4, "Four");
+ )"), TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+
+ auto result = session.ExecuteDataQuery(Q_(R"(
+ SELECT * FROM `/Root/KeyValue`;
+ )"), TTxControl::BeginTx(TTxSettings::SerializableRW())).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+ auto tx = result.GetTransaction();
+
+ result = session.ExecuteDataQuery(Q_(R"(
+ UPDATE `/Root/KeyValue` SET Value = "second" WHERE Key = 3;
+ )"), TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+ result = session.ExecuteDataQuery(Q_(R"(
+ UPDATE `/Root/KeyValue` SET Value = "third" WHERE Key = 4;
+ )"), TTxControl::Tx(*tx)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::ABORTED, result.GetIssues().ToString());
+
+ auto commitResult = tx->Commit().ExtractValueSync();
+
+ UNIT_ASSERT_VALUES_EQUAL_C(commitResult.GetStatus(), EStatus::NOT_FOUND, commitResult.GetIssues().ToString());
+ }
+
Y_UNIT_TEST_NEW_ENGINE(InteractiveTx) {
auto kikimr = KikimrRunnerEnableSessionActor(UseNewEngine);
auto db = kikimr.GetTableClient();
@@ -528,6 +565,144 @@ Y_UNIT_TEST_SUITE(KqpTx) {
[[2u];["Two"]]
])", FormatResultSetYson(result.GetResultSet(0)));
}
+
+ Y_UNIT_TEST_QUAD(SnapshotRO, UseNewEngine, UseSessionActor) {
+ if (UseSessionActor && !UseNewEngine) {
+ return;
+ }
+
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ // Read Immediate
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM EightShard WHERE Key = 102;
+ )"), TTxControl::BeginTx(TTxSettings::SnapshotRO()).CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([[[3];[102u];["Value2"]]])", FormatResultSetYson(result.GetResultSet(0)));
+
+ // Read Distributed
+ result = session.ExecuteDataQuery(Q1_(R"(
+ SELECT COUNT(*) FROM EightShard WHERE Text = "Value1";
+ )"), TTxControl::BeginTx(TTxSettings::SnapshotRO()).CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(R"([[8u]])", FormatResultSetYson(result.GetResultSet(0)));
+
+ // Write
+ result = session.ExecuteDataQuery(Q1_(R"(
+ UPSERT INTO `/Root/EightShard` (Key, Data) VALUES
+ (100, 100500),
+ (100500, 100);
+ )"), TTxControl::BeginTx(TTxSettings::SnapshotRO()).CommitTx()).ExtractValueSync();
+ result.GetIssues().PrintTo(Cerr);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::GENERIC_ERROR);
+ UNIT_ASSERT(HasIssue(result.GetIssues(), NYql::TIssuesIds::KIKIMR_BAD_OPERATION));
+ }
+
+ Y_UNIT_TEST_QUAD(SnapshotROInteractive1, UseNewEngine, UseSessionActor) {
+ if (UseSessionActor && !UseNewEngine) {
+ return;
+ }
+
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto readQuery = Q1_(R"(
+ SELECT * FROM EightShard WHERE Key = 102;
+ )");
+
+ auto readResult = R"([
+ [[3];[102u];["Value2"]]
+ ])";
+
+ auto result = session.ExecuteDataQuery(readQuery,
+ TTxControl::BeginTx(TTxSettings::SnapshotRO())).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(readResult, FormatResultSetYson(result.GetResultSet(0)));
+
+ auto tx = result.GetTransaction();
+ UNIT_ASSERT(tx);
+ UNIT_ASSERT(tx->IsActive());
+
+ result = session.ExecuteDataQuery(Q1_(R"(
+ UPSERT INTO `/Root/EightShard` (Key, Data) VALUES
+ (102, 100500);
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+ result = session.ExecuteDataQuery(readQuery,
+ TTxControl::Tx(*tx).CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(readResult, FormatResultSetYson(result.GetResultSet(0)));
+ }
+
+ Y_UNIT_TEST_QUAD(SnapshotROInteractive2, UseNewEngine, UseSessionActor) {
+ if (UseSessionActor && !UseNewEngine) {
+ return;
+ }
+
+ auto kikimr = KikimrRunnerEnableSessionActor(UseSessionActor);
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto readQuery = Q1_(R"(
+ SELECT COUNT(*) FROM EightShard WHERE Text = "Value1";
+ )");
+
+ auto readResult = R"([
+ [8u]
+ ])";
+
+ auto tx = session.BeginTransaction(TTxSettings::SnapshotRO())
+ .ExtractValueSync()
+ .GetTransaction();
+ UNIT_ASSERT(tx.IsActive());
+
+ auto result = session.ExecuteDataQuery(readQuery,
+ TTxControl::Tx(tx)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(readResult, FormatResultSetYson(result.GetResultSet(0)));
+
+ result = session.ExecuteDataQuery(Q1_(R"(
+ UPSERT INTO `/Root/EightShard` (Key, Data, Text) VALUES
+ (100500u, -1, "Value1");
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+ result = session.ExecuteDataQuery(readQuery,
+ TTxControl::Tx(tx)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ CompareYson(readResult, FormatResultSetYson(result.GetResultSet(0)));
+
+ auto commitResult = tx.Commit().ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(commitResult.GetStatus(), EStatus::SUCCESS, commitResult.GetIssues().ToString());
+ }
+
+ Y_UNIT_TEST_QUAD(SnapshotRONoMvccReads, UseNewEngine, UseSessionActor) {
+ if (UseSessionActor && !UseNewEngine) {
+ return;
+ }
+
+ TKikimrRunner kikimr(TKikimrSettings()
+ .SetEnableMvccSnapshotReads(false));
+
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ // Query
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ SELECT * FROM EightShard WHERE Key = 102;
+ )"), TTxControl::BeginTx(TTxSettings::SnapshotRO()).CommitTx()).ExtractValueSync();
+ result.GetIssues().PrintTo(Cerr);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
+
+ // Begin
+ auto beginResult = session.BeginTransaction(TTxSettings::SnapshotRO()).ExtractValueSync();
+ beginResult.GetIssues().PrintTo(Cerr);
+ UNIT_ASSERT_VALUES_EQUAL(beginResult.GetStatus(), EStatus::BAD_REQUEST);
+ }
}
} // namespace NKqp
diff --git a/ydb/core/kqp/ut/kqp_yql_ut.cpp b/ydb/core/kqp/ut/kqp_yql_ut.cpp
index 04926b2410..db39d21e1a 100644
--- a/ydb/core/kqp/ut/kqp_yql_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_yql_ut.cpp
@@ -357,6 +357,40 @@ Y_UNIT_TEST_SUITE(KqpYql) {
CompareYson(R"([["Some text";"Some bytes"]])", FormatResultSetYson(result.GetResultSet(0)));
}
+
+ Y_UNIT_TEST_NEW_ENGINE(JsonNumberPrecision) {
+ TKikimrRunner kikimr;
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+
+ auto result = session.ExecuteDataQuery(Q1_(R"(
+ SELECT
+ JsonDocument("-0.5"),
+ JsonDocument("0.5"),
+ JsonDocument("-16777216"),
+ JsonDocument("16777216"),
+ JsonDocument("-9007199254740992"),
+ JsonDocument("9007199254740992"),
+ JsonDocument("-9223372036854775808"),
+ JsonDocument("9223372036854775807"),
+ JsonDocument("18446744073709551615");
+ )"), TTxControl::BeginTx().CommitTx()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+
+ // Cerr << FormatResultSetYson(result.GetResultSet(0)) << Endl;
+
+ CompareYson(R"([[
+ "-0.5";
+ "0.5";
+ "-16777216";
+ "16777216";
+ "-9007199254740992";
+ "9007199254740992";
+ "-9.223372036854776e+18";
+ "9.223372036854776e+18";
+ "1.844674407370955e+19"]
+ ])", FormatResultSetYson(result.GetResultSet(0)));
+ }
}
} // namespace NKqp
diff --git a/ydb/core/metering/CMakeLists.txt b/ydb/core/metering/CMakeLists.txt
index d3ad577464..9d767ff495 100644
--- a/ydb/core/metering/CMakeLists.txt
+++ b/ydb/core/metering/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-metering)
target_link_libraries(ydb-core-metering PUBLIC
@@ -21,6 +22,7 @@ target_link_libraries(ydb-core-metering PUBLIC
target_sources(ydb-core-metering PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/metering/bill_record.cpp
${CMAKE_SOURCE_DIR}/ydb/core/metering/metering.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/metering/stream_ru_calculator.cpp
)
generate_enum_serilization(ydb-core-metering
${CMAKE_SOURCE_DIR}/ydb/core/metering/bill_record.h
diff --git a/ydb/core/metering/stream_ru_calculator.cpp b/ydb/core/metering/stream_ru_calculator.cpp
new file mode 100644
index 0000000000..ab245838f7
--- /dev/null
+++ b/ydb/core/metering/stream_ru_calculator.cpp
@@ -0,0 +1,34 @@
+#include "stream_ru_calculator.h"
+
+namespace NKikimr::NMetering {
+
+TStreamRequestUnitsCalculator::TStreamRequestUnitsCalculator(ui64 blockSize)
+ : BlockSize(blockSize)
+ , Remainder(blockSize)
+{
+}
+
+ui64 TStreamRequestUnitsCalculator::CalcConsumption(ui64 payloadSize) {
+ if (!payloadSize) {
+ return 0;
+ }
+
+ if (payloadSize > Remainder) {
+ payloadSize -= Remainder;
+
+ const ui64 nBlocks = payloadSize / BlockSize;
+ payloadSize -= BlockSize * nBlocks;
+
+ Remainder = BlockSize - payloadSize;
+ return nBlocks + ui64(bool(payloadSize));
+ } else {
+ Remainder -= payloadSize;
+ return 0;
+ }
+}
+
+ui64 TStreamRequestUnitsCalculator::GetRemainder() const {
+ return Remainder;
+}
+
+} // NKikimr::NMetering
diff --git a/ydb/core/metering/stream_ru_calculator.h b/ydb/core/metering/stream_ru_calculator.h
new file mode 100644
index 0000000000..6c6d56e905
--- /dev/null
+++ b/ydb/core/metering/stream_ru_calculator.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include <util/generic/fwd.h>
+
+namespace NKikimr::NMetering {
+
+class TStreamRequestUnitsCalculator {
+public:
+ // Remainder = blockSize on init
+ explicit TStreamRequestUnitsCalculator(ui64 blockSize);
+
+ // Returns consumption in terms of RUs (one block is one RU) and updates remainder
+ ui64 CalcConsumption(ui64 payloadSize);
+
+ ui64 GetRemainder() const;
+
+private:
+ const ui64 BlockSize;
+ ui64 Remainder; // remainder in the last block
+
+};
+
+} // NKikimr::NMetering
diff --git a/ydb/core/metering/stream_ru_calculator_ut.cpp b/ydb/core/metering/stream_ru_calculator_ut.cpp
new file mode 100644
index 0000000000..b4d222488c
--- /dev/null
+++ b/ydb/core/metering/stream_ru_calculator_ut.cpp
@@ -0,0 +1,34 @@
+#include "stream_ru_calculator.h"
+
+#include <library/cpp/testing/unittest/registar.h>
+
+#include <util/generic/size_literals.h>
+
+namespace NKikimr::NMetering {
+
+Y_UNIT_TEST_SUITE(TStreamRequestUnitsCalculatorTest) {
+ Y_UNIT_TEST(Basic) {
+ TStreamRequestUnitsCalculator calculator(4_KB);
+ UNIT_ASSERT_VALUES_EQUAL(calculator.GetRemainder(), 4_KB);
+
+ UNIT_ASSERT_VALUES_EQUAL(calculator.CalcConsumption(0), 0);
+ UNIT_ASSERT_VALUES_EQUAL(calculator.GetRemainder(), 4_KB);
+
+ UNIT_ASSERT_VALUES_EQUAL(calculator.CalcConsumption(1), 0);
+ UNIT_ASSERT_VALUES_EQUAL(calculator.GetRemainder(), 4_KB - 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(calculator.CalcConsumption(4_KB - 1), 0);
+ UNIT_ASSERT_VALUES_EQUAL(calculator.GetRemainder(), 0);
+
+ UNIT_ASSERT_VALUES_EQUAL(calculator.CalcConsumption(1), 1);
+ UNIT_ASSERT_VALUES_EQUAL(calculator.GetRemainder(), 4_KB - 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(calculator.CalcConsumption(4_KB + 1), 1);
+ UNIT_ASSERT_VALUES_EQUAL(calculator.GetRemainder(), 4_KB - 2);
+
+ UNIT_ASSERT_VALUES_EQUAL(calculator.CalcConsumption(8_KB), 2);
+ UNIT_ASSERT_VALUES_EQUAL(calculator.GetRemainder(), 4_KB - 2);
+ }
+}
+
+} // NKikimr::NMetering
diff --git a/ydb/core/metering/ut/CMakeLists.darwin.txt b/ydb/core/metering/ut/CMakeLists.darwin.txt
index 6007b0d8eb..892e242993 100644
--- a/ydb/core/metering/ut/CMakeLists.darwin.txt
+++ b/ydb/core/metering/ut/CMakeLists.darwin.txt
@@ -27,6 +27,7 @@ target_link_options(ydb-core-metering-ut PRIVATE
CoreFoundation
)
target_sources(ydb-core-metering-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/metering/stream_ru_calculator_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/core/metering/time_grid_ut.cpp
)
add_test(
diff --git a/ydb/core/metering/ut/CMakeLists.linux.txt b/ydb/core/metering/ut/CMakeLists.linux.txt
index d920d0bf03..0d59db3335 100644
--- a/ydb/core/metering/ut/CMakeLists.linux.txt
+++ b/ydb/core/metering/ut/CMakeLists.linux.txt
@@ -31,6 +31,7 @@ target_link_options(ydb-core-metering-ut PRIVATE
-ldl
)
target_sources(ydb-core-metering-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/metering/stream_ru_calculator_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/core/metering/time_grid_ut.cpp
)
add_test(
diff --git a/ydb/core/metering/ut/CMakeLists.txt b/ydb/core/metering/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/metering/ut/CMakeLists.txt
+++ b/ydb/core/metering/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/mind/CMakeLists.txt b/ydb/core/mind/CMakeLists.txt
index afa8dd85b6..3145ef92cc 100644
--- a/ydb/core/mind/CMakeLists.txt
+++ b/ydb/core/mind/CMakeLists.txt
@@ -6,6 +6,11 @@
# original buildsystem will not be accepted.
+add_subdirectory(address_classification)
+add_subdirectory(bscontroller)
+add_subdirectory(hive)
+add_subdirectory(ut)
+add_subdirectory(ut_fat)
add_library(ydb-core-mind)
target_link_libraries(ydb-core-mind PUBLIC
diff --git a/ydb/core/mind/address_classification/CMakeLists.txt b/ydb/core/mind/address_classification/CMakeLists.txt
index 2eb07e38df..818cbc56b8 100644
--- a/ydb/core/mind/address_classification/CMakeLists.txt
+++ b/ydb/core/mind/address_classification/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-mind-address_classification)
target_link_libraries(core-mind-address_classification PUBLIC
diff --git a/ydb/core/mind/address_classification/ut/CMakeLists.txt b/ydb/core/mind/address_classification/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/mind/address_classification/ut/CMakeLists.txt
+++ b/ydb/core/mind/address_classification/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/mind/bscontroller/CMakeLists.txt b/ydb/core/mind/bscontroller/CMakeLists.txt
index d55dd480e2..066de2fb2e 100644
--- a/ydb/core/mind/bscontroller/CMakeLists.txt
+++ b/ydb/core/mind/bscontroller/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
+add_subdirectory(ut_bscontroller)
+add_subdirectory(ut_selfheal)
add_library(core-mind-bscontroller)
target_link_libraries(core-mind-bscontroller PUBLIC
diff --git a/ydb/core/mind/bscontroller/monitoring.cpp b/ydb/core/mind/bscontroller/monitoring.cpp
index aae938c43e..8864a53dc4 100644
--- a/ydb/core/mind/bscontroller/monitoring.cpp
+++ b/ydb/core/mind/bscontroller/monitoring.cpp
@@ -107,7 +107,7 @@ public:
Self->RenderHeader(out);
HTML(out) {
- H3() {
+ TAG(TH3) {
out << "Operation Log";
}
TABLE_CLASS("table") {
@@ -247,7 +247,7 @@ private:
Self->RenderHeader(out);
HTML(out) {
- H3() {
+ TAG(TH3) {
out << "Operation Log ";
if (HasEntry) {
out << "(entry " << RowIndex << ")";
@@ -513,10 +513,10 @@ public:
HTML(s) {
ui64 offset = Offset;
- H3() {
+ TAG(TH3) {
s << "Health events";
}
- H3() {
+ TAG(TH3) {
s << "Health-related operations since " << Since.ToRfc822StringLocal();
}
TABLE_CLASS("table") {
@@ -1167,7 +1167,7 @@ void TBlobStorageController::RenderInternalTables(IOutputStream& out, const TStr
void TBlobStorageController::RenderGroupDetail(IOutputStream &out, TGroupId groupId) {
RenderHeader(out);
HTML(out) {
- H3() {
+ TAG(TH3) {
out << "VDisks for group " << groupId;
}
@@ -1194,7 +1194,7 @@ void TBlobStorageController::RenderGroupDetail(IOutputStream &out, TGroupId grou
void TBlobStorageController::RenderGroupsInStoragePool(IOutputStream &out, const TBoxStoragePoolId& id) {
RenderHeader(out);
HTML(out) {
- H3() {
+ TAG(TH3) {
TString name;
if (const auto it = StoragePools.find(id); it != StoragePools.end()) {
name = it->second.Name;
diff --git a/ydb/core/mind/bscontroller/scrub.cpp b/ydb/core/mind/bscontroller/scrub.cpp
index e37513bd1a..4bf46624df 100644
--- a/ydb/core/mind/bscontroller/scrub.cpp
+++ b/ydb/core/mind/bscontroller/scrub.cpp
@@ -370,7 +370,7 @@ public:
void Render(IOutputStream& str) {
HTML(str) {
- H3() {
+ TAG(TH3) {
str << "Scrub state"
<< "<br/>"
<< (Self->ScrubPeriodicity != TDuration::Zero() ? TString(TStringBuilder() << "every " <<
diff --git a/ydb/core/mind/bscontroller/self_heal.cpp b/ydb/core/mind/bscontroller/self_heal.cpp
index 24c6045625..177604d891 100644
--- a/ydb/core/mind/bscontroller/self_heal.cpp
+++ b/ydb/core/mind/bscontroller/self_heal.cpp
@@ -452,7 +452,7 @@ namespace NKikimr::NBsController {
const TInstant now = TActivationContext::Now();
HTML(out) {
- H2() {
+ TAG(TH2) {
out << "BlobStorage Controller";
}
DIV_CLASS("panel panel-info") {
diff --git a/ydb/core/mind/bscontroller/storage_pool_stat.h b/ydb/core/mind/bscontroller/storage_pool_stat.h
index 0e6527f58e..28ffd9f135 100644
--- a/ydb/core/mind/bscontroller/storage_pool_stat.h
+++ b/ydb/core/mind/bscontroller/storage_pool_stat.h
@@ -7,22 +7,22 @@ namespace NKikimr::NBsController {
class TStoragePoolStat {
struct TStoragePoolCounters {
TString Id;
- NMonitoring::TDynamicCounterPtr Root;
+ ::NMonitoring::TDynamicCounterPtr Root;
TString Name;
- NMonitoring::TDynamicCounterPtr Subgroup;
- NMonitoring::TDynamicCounterPtr FlagsSubgroup;
- NMonitoring::TDynamicCounters::TCounterPtr NumUnknown;
- NMonitoring::TDynamicCounters::TCounterPtr NumGreen;
- NMonitoring::TDynamicCounters::TCounterPtr NumCyan;
- NMonitoring::TDynamicCounters::TCounterPtr NumLightYellow;
- NMonitoring::TDynamicCounters::TCounterPtr NumYellow;
- NMonitoring::TDynamicCounters::TCounterPtr NumLightOrange;
- NMonitoring::TDynamicCounters::TCounterPtr NumOrange;
- NMonitoring::TDynamicCounters::TCounterPtr NumRed;
- NMonitoring::TDynamicCounters::TCounterPtr NumBlack;
- NMonitoring::TDynamicCounters::TCounterPtr AllocatedSize;
-
- TStoragePoolCounters(NMonitoring::TDynamicCounterPtr counters, TString id, TString name, ui64 allocatedSize)
+ ::NMonitoring::TDynamicCounterPtr Subgroup;
+ ::NMonitoring::TDynamicCounterPtr FlagsSubgroup;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumUnknown;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumGreen;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumCyan;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumLightYellow;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumYellow;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumLightOrange;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumOrange;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumRed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NumBlack;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AllocatedSize;
+
+ TStoragePoolCounters(::NMonitoring::TDynamicCounterPtr counters, TString id, TString name, ui64 allocatedSize)
: Id(std::move(id))
, Root(std::move(counters))
, Name(std::move(name))
@@ -62,7 +62,7 @@ namespace NKikimr::NBsController {
*AllocatedSize += allocatedSizeIncrement;
}
- const NMonitoring::TDynamicCounters::TCounterPtr& GetCounter(TStorageStatusFlags flags) const {
+ const ::NMonitoring::TDynamicCounters::TCounterPtr& GetCounter(TStorageStatusFlags flags) const {
if (!flags.Check(NKikimrBlobStorage::StatusIsValid)) {
return NumUnknown;
} else if (flags.Check(NKikimrBlobStorage::StatusDiskSpaceBlack)) {
@@ -85,11 +85,11 @@ namespace NKikimr::NBsController {
}
};
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
std::unordered_map<TString, TStoragePoolCounters> Map;
public:
- TStoragePoolStat(NMonitoring::TDynamicCounterPtr counters)
+ TStoragePoolStat(::NMonitoring::TDynamicCounterPtr counters)
: Counters(std::move(counters))
{}
diff --git a/ydb/core/mind/bscontroller/storage_stats_calculator.cpp b/ydb/core/mind/bscontroller/storage_stats_calculator.cpp
index 83d655945c..420471d3b4 100644
--- a/ydb/core/mind/bscontroller/storage_stats_calculator.cpp
+++ b/ydb/core/mind/bscontroller/storage_stats_calculator.cpp
@@ -5,38 +5,48 @@
#include "impl.h"
#include "sys_view.h"
+#include <ydb/core/blobstorage/base/utility.h>
+#include <ydb/core/protos/services.pb.h>
+
#include <library/cpp/actors/core/actor.h>
+#include <library/cpp/actors/core/actor_coroutine.h>
+#include <library/cpp/actors/core/events.h>
+
+#include <util/generic/ptr.h>
+#include <util/system/yassert.h>
#include <memory>
#include <vector>
namespace NKikimr::NBsController {
-class TStorageStatsCalculator : public TActor<TStorageStatsCalculator> {
-public:
- TStorageStatsCalculator()
- : TActor(&TStorageStatsCalculator::StateWork)
- {}
-
- STRICT_STFUNC(StateWork,
- hFunc(TEvCalculateStorageStatsRequest, Handle);
- cFunc(TEvents::TSystem::Poison, PassAway);
- )
-
- void Handle(TEvCalculateStorageStatsRequest::TPtr& ev) {
- auto response = std::make_unique<TEvCalculateStorageStatsResponse>();
- const auto& request = *(ev->Get());
- response->StorageStats = GenerateStorageStats(request.SystemViewsState, request.HostRecordMap, request.GroupReserveMin, request.GroupReservePart);
- Send(ev->Sender, response.release());
- }
+/* TStorageStatsCoroCalculatorImpl */
+class TStorageStatsCoroCalculatorImpl : public TActorCoroImpl {
private:
- std::vector<NKikimrSysView::TStorageStatsEntry> GenerateStorageStats(
- const TControllerSystemViewsState& systemViewsState,
- const TBlobStorageController::THostRecordMap& hostRecordMap,
- ui32 groupReserveMin,
- ui32 groupReservePart)
+ enum {
+ EvResume = EventSpaceBegin(TEvents::ES_PRIVATE)
+ };
+
+public:
+ TStorageStatsCoroCalculatorImpl(
+ const TControllerSystemViewsState& systemViewsState,
+ const TBlobStorageController::THostRecordMap& hostRecordMap,
+ ui32 groupReserveMin,
+ ui32 groupReservePart)
+ : TActorCoroImpl(/* stackSize */ 64 * 1024, /* allowUnhandledPoisonPill */ true, /* allowUnhandledDtor */ true)
+ , SystemViewsState(systemViewsState)
+ , HostRecordMap(hostRecordMap)
+ , GroupReserveMin(groupReserveMin)
+ , GroupReservePart(groupReservePart)
{
+ }
+
+ void ProcessUnexpectedEvent(TAutoPtr<IEventHandle> ev) override {
+ Y_FAIL("unexpected event Type# 0x%08" PRIx32, ev->GetTypeRewrite());
+ }
+
+ void Run() override {
std::vector<NKikimrSysView::TStorageStatsEntry> storageStats;
using TEntityKey = std::tuple<TString, TString>; // PDiskFilter, ErasureSpecies
@@ -59,7 +69,7 @@ private:
}
}
- for (const auto& [key, value] : systemViewsState.StoragePools) {
+ for (const auto& [key, value] : SystemViewsState.StoragePools) {
TEntityKey entityKey(value.GetPDiskFilter(), value.GetErasureSpeciesV2());
const size_t index = entityMap.try_emplace(entityKey, storageStats.size()).first->second;
if (index == storageStats.size()) {
@@ -77,7 +87,7 @@ private:
spToEntity[key] = index;
}
- for (const auto& [groupId, group] : systemViewsState.Groups) {
+ for (const auto& [groupId, group] : SystemViewsState.Groups) {
const TBlobStorageController::TBoxStoragePoolId key(group.GetBoxId(), group.GetStoragePoolId());
if (const auto it = spToEntity.find(key); it != spToEntity.end()) {
auto& e = storageStats[it->second];
@@ -87,9 +97,9 @@ private:
}
}
- using T = std::decay_t<decltype(systemViewsState.PDisks)>::value_type;
+ using T = std::decay_t<decltype(SystemViewsState.PDisks)>::value_type;
std::unordered_map<TBlobStorageController::TBoxId, std::vector<const T*>> boxes;
- for (const auto& kv : systemViewsState.PDisks) {
+ for (const auto& kv : SystemViewsState.PDisks) {
if (kv.second.HasBoxId()) {
boxes[kv.second.GetBoxId()].push_back(&kv);
}
@@ -110,7 +120,7 @@ private:
const auto sharedWithOs = pdisk.HasSharedWithOs() ? MakeMaybe(pdisk.GetSharedWithOs()) : Nothing();
const auto readCentric = pdisk.HasReadCentric() ? MakeMaybe(pdisk.GetReadCentric()) : Nothing();
if (filter.MatchPDisk(pdisk.GetCategory(), sharedWithOs, readCentric)) {
- const TNodeLocation& location = hostRecordMap->GetLocation(pdiskId.NodeId);
+ const TNodeLocation& location = HostRecordMap->GetLocation(pdiskId.NodeId);
const bool ok = mapper.RegisterPDisk({
.PDiskId = pdiskId,
.Location = location,
@@ -140,7 +150,7 @@ private:
for (const auto& realm : group) {
for (const auto& domain : realm) {
for (const auto& pdiskId : domain) {
- if (const auto it = systemViewsState.PDisks.find(pdiskId); it != systemViewsState.PDisks.end()) {
+ if (const auto it = SystemViewsState.PDisks.find(pdiskId); it != SystemViewsState.PDisks.end()) {
const NKikimrSysView::TPDiskInfo& pdisk = it->second;
auto& pm = *pdiskMetrics.emplace(pdiskMetrics.end());
auto& vm = *vdiskMetrics.emplace(vdiskMetrics.end());
@@ -162,14 +172,16 @@ private:
groupSizes.push_back(groupInfo.GetAvailableSize());
group.clear();
+
+ Yield();
}
std::sort(groupSizes.begin(), groupSizes.end());
// adjust it according to reserve
const ui32 total = groupSizes.size() + entry.GetCurrentGroupsCreated();
- ui32 reserve = groupReserveMin;
- while (reserve < groupSizes.size() && (reserve - groupReserveMin) * 1000000 / total < groupReservePart) {
+ ui32 reserve = GroupReserveMin;
+ while (reserve < groupSizes.size() && (reserve - GroupReserveMin) * 1000000 / total < GroupReservePart) {
++reserve;
}
reserve = Min<ui32>(reserve, groupSizes.size());
@@ -191,12 +203,35 @@ private:
}
}
- return storageStats;
+ Send(ParentActorId, new TEvCalculateStorageStatsResponse(std::move(storageStats)));
+ }
+
+private:
+ void Yield() {
+ Send(new IEventHandle(EvResume, 0, SelfActorId, {}, nullptr, 0));
+ WaitForSpecificEvent([](IEventHandle& ev) { return ev.Type == EvResume; });
}
+
+private:
+ TControllerSystemViewsState SystemViewsState;
+ TBlobStorageController::THostRecordMap HostRecordMap;
+ ui32 GroupReserveMin = 0;
+ ui32 GroupReservePart = 0;
};
-IActor *CreateStorageStatsCalculator() {
- return new TStorageStatsCalculator();
+std::unique_ptr<IActor> CreateStorageStatsCoroCalculator(
+ const TControllerSystemViewsState& systemViewsState,
+ const TBlobStorageController::THostRecordMap& hostRecordMap,
+ ui32 groupReserveMin,
+ ui32 groupReservePart)
+{
+ auto coroCalculatorImpl = MakeHolder<TStorageStatsCoroCalculatorImpl>(
+ systemViewsState,
+ hostRecordMap,
+ groupReserveMin,
+ groupReservePart);
+
+ return std::make_unique<TActorCoro>(std::move(coroCalculatorImpl), NKikimrServices::TActivity::BS_STORAGE_STATS_ACTOR);
}
} // NKikimr::NBsController
diff --git a/ydb/core/mind/bscontroller/storage_stats_calculator.h b/ydb/core/mind/bscontroller/storage_stats_calculator.h
index 3c9c57332f..deae03ab51 100644
--- a/ydb/core/mind/bscontroller/storage_stats_calculator.h
+++ b/ydb/core/mind/bscontroller/storage_stats_calculator.h
@@ -1,9 +1,22 @@
#pragma once
+#include "impl.h"
+
#include <library/cpp/actors/core/actor.h>
+#include <util/system/types.h>
+
+#include <memory>
+#include <vector>
+
namespace NKikimr::NBsController {
-NActors::IActor *CreateStorageStatsCalculator();
+struct TControllerSystemViewsState;
+
+std::unique_ptr<NActors::IActor> CreateStorageStatsCoroCalculator(
+ const TControllerSystemViewsState& state,
+ const TBlobStorageController::THostRecordMap& hostRecordMap,
+ ui32 groupReserveMin,
+ ui32 groupReservePart);
} // NKikimr::NBsController
diff --git a/ydb/core/mind/bscontroller/sys_view.cpp b/ydb/core/mind/bscontroller/sys_view.cpp
index 6e7704f6cb..159a38ec70 100644
--- a/ydb/core/mind/bscontroller/sys_view.cpp
+++ b/ydb/core/mind/bscontroller/sys_view.cpp
@@ -74,7 +74,6 @@ void CalculateGroupUsageStats(NKikimrSysView::TGroupInfo *info, const std::vecto
class TSystemViewsCollector : public TActorBootstrapped<TSystemViewsCollector> {
TControllerSystemViewsState State;
- std::optional<std::vector<NKikimrSysView::TStorageStatsEntry>> StorageStats;
std::vector<std::pair<TPDiskId, const NKikimrSysView::TPDiskInfo*>> PDiskIndex;
std::vector<std::pair<TVSlotId, const NKikimrSysView::TVSlotInfo*>> VSlotIndex;
std::vector<std::pair<TGroupId, const NKikimrSysView::TGroupInfo*>> GroupIndex;
@@ -82,18 +81,20 @@ class TSystemViewsCollector : public TActorBootstrapped<TSystemViewsCollector> {
TBlobStorageController::THostRecordMap HostRecords;
ui32 GroupReserveMin = 0;
ui32 GroupReservePart = 0;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
std::unordered_set<std::tuple<TString>> PDiskFilterCounters;
std::unordered_set<std::tuple<TString, TString>> ErasureCounters;
+
+ std::vector<NKikimrSysView::TStorageStatsEntry> StorageStats;
TActorId StorageStatsCalculatorId;
- bool IsCalculateStorageStatsRequestInProgress = false;
+ static constexpr TDuration StorageStatsUpdatePeriod = TDuration::Minutes(10);
public:
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
return NKikimrServices::TActivity::BSC_SYSTEM_VIEWS_COLLECTOR;
}
- TSystemViewsCollector(NMonitoring::TDynamicCounterPtr counters)
+ TSystemViewsCollector(::NMonitoring::TDynamicCounterPtr counters)
: Counters(std::move(counters))
{}
@@ -101,11 +102,9 @@ public:
Counters->RemoveSubgroup("subsystem", "storage_stats");
}
- void Bootstrap(const TActorContext& ctx) {
- StorageStatsCalculatorId = RunInBatchPool(ctx, CreateStorageStatsCalculator());
+ void Bootstrap(const TActorContext&) {
Become(&TThis::StateWork);
-
- Schedule(TDuration::Seconds(1), new TEvScheduleCalculateStorageStatsRequest());
+ RunStorageStatsCalculator();
}
STRICT_STFUNC(StateWork,
@@ -115,7 +114,7 @@ public:
hFunc(TEvSysView::TEvGetGroupsRequest, Handle);
hFunc(TEvSysView::TEvGetStoragePoolsRequest, Handle);
hFunc(TEvSysView::TEvGetStorageStatsRequest, Handle);
- hFunc(TEvScheduleCalculateStorageStatsRequest, Handle);
+ cFunc(NSysView::TEvSysView::EvCalculateStorageStatsRequest, RunStorageStatsCalculator);
hFunc(TEvCalculateStorageStatsResponse, Handle);
cFunc(TEvents::TSystem::Poison, PassAway);
)
@@ -133,7 +132,10 @@ public:
}
void PassAway() override {
- TActivationContext::Send(new IEventHandle(TEvents::TSystem::Poison, 0, StorageStatsCalculatorId, {}, nullptr, 0));
+ if (StorageStatsCalculatorId) {
+ TActivationContext::Send(new IEventHandle(TEvents::TSystem::Poison, 0, StorageStatsCalculatorId, {}, nullptr, 0));
+ }
+
TActorBootstrapped::PassAway();
}
@@ -212,38 +214,35 @@ public:
void Handle(TEvSysView::TEvGetStorageStatsRequest::TPtr& ev) {
auto response = std::make_unique<TEvSysView::TEvGetStorageStatsResponse>();
auto& r = response->Record;
- if (StorageStats) {
- for (const auto& item : *StorageStats) {
- auto *e = r.AddEntries();
- e->CopyFrom(item);
- }
+ for (const auto& item : StorageStats) {
+ auto *e = r.AddEntries();
+ e->CopyFrom(item);
}
Send(ev->Sender, response.release());
}
- void Handle(TEvScheduleCalculateStorageStatsRequest::TPtr&) {
- if (IsCalculateStorageStatsRequestInProgress) {
+ void RunStorageStatsCalculator() {
+ if (StorageStatsCalculatorId) {
return;
}
- IsCalculateStorageStatsRequestInProgress = true;
+ auto& ctx = TActivationContext::AsActorContext();
+ auto actor = CreateStorageStatsCoroCalculator(
+ State,
+ HostRecords,
+ GroupReserveMin,
+ GroupReservePart);
- auto request = std::make_unique<TEvCalculateStorageStatsRequest>(State, HostRecords, GroupReserveMin, GroupReservePart);
- Send(StorageStatsCalculatorId, request.release());
+ StorageStatsCalculatorId = RunInBatchPool(ctx, actor.release());
- Schedule(TDuration::Minutes(10), new TEvScheduleCalculateStorageStatsRequest());
+ Schedule(StorageStatsUpdatePeriod, new TEvCalculateStorageStatsRequest());
}
void Handle(TEvCalculateStorageStatsResponse::TPtr& ev) {
auto& response = *(ev->Get());
- if (!response.StorageStats.empty()) {
- StorageStats = response.StorageStats;
- UpdateStorageStatsCounters(*StorageStats);
- } else {
- StorageStats.reset();
- }
-
- IsCalculateStorageStatsRequestInProgress = false;
+ StorageStats = std::move(response.StorageStats);
+ UpdateStorageStatsCounters(StorageStats);
+ StorageStatsCalculatorId = TActorId();
}
void UpdateStorageStatsCounters(const std::vector<NKikimrSysView::TStorageStatsEntry>& storageStats) {
diff --git a/ydb/core/mind/bscontroller/sys_view.h b/ydb/core/mind/bscontroller/sys_view.h
index 9c9f700f9d..0fa9fac124 100644
--- a/ydb/core/mind/bscontroller/sys_view.h
+++ b/ydb/core/mind/bscontroller/sys_view.h
@@ -35,34 +35,19 @@ struct TEvControllerUpdateSystemViews :
struct TEvCalculateStorageStatsRequest :
TEventLocal<TEvCalculateStorageStatsRequest, NSysView::TEvSysView::EvCalculateStorageStatsRequest>
{
- TEvCalculateStorageStatsRequest(
- const TControllerSystemViewsState& systemViewsState,
- const TBlobStorageController::THostRecordMap& hostRecordMap,
- ui32 groupReserveMin,
- ui32 groupReservePart)
- : SystemViewsState(systemViewsState)
- , HostRecordMap(hostRecordMap)
- , GroupReserveMin(groupReserveMin)
- , GroupReservePart(groupReservePart)
- {
- }
-
- TControllerSystemViewsState SystemViewsState;
- TBlobStorageController::THostRecordMap HostRecordMap;
- ui32 GroupReserveMin;
- ui32 GroupReservePart;
};
struct TEvCalculateStorageStatsResponse :
TEventLocal<TEvCalculateStorageStatsResponse, NSysView::TEvSysView::EvCalculateStorageStatsResponse>
{
+ template <typename T>
+ TEvCalculateStorageStatsResponse(T&& t)
+ : StorageStats(std::forward<T>(t))
+ {}
+
std::vector<NKikimrSysView::TStorageStatsEntry> StorageStats;
};
-struct TEvScheduleCalculateStorageStatsRequest :
- TEventLocal<TEvScheduleCalculateStorageStatsRequest, NSysView::TEvSysView::EvScheduleCalculateStorageStatsRequest>
-{};
-
struct TGroupDiskInfo {
const NKikimrBlobStorage::TPDiskMetrics *PDiskMetrics;
const NKikimrBlobStorage::TVDiskMetrics *VDiskMetrics;
diff --git a/ydb/core/mind/bscontroller/ut/CMakeLists.txt b/ydb/core/mind/bscontroller/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/mind/bscontroller/ut/CMakeLists.txt
+++ b/ydb/core/mind/bscontroller/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.txt b/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.txt
+++ b/ydb/core/mind/bscontroller/ut_bscontroller/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/mind/bscontroller/ut_selfheal/CMakeLists.txt b/ydb/core/mind/bscontroller/ut_selfheal/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/mind/bscontroller/ut_selfheal/CMakeLists.txt
+++ b/ydb/core/mind/bscontroller/ut_selfheal/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/mind/hive/CMakeLists.txt b/ydb/core/mind/hive/CMakeLists.txt
index d47111b5c9..9db9b7fa48 100644
--- a/ydb/core/mind/hive/CMakeLists.txt
+++ b/ydb/core/mind/hive/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-mind-hive)
target_link_libraries(core-mind-hive PUBLIC
diff --git a/ydb/core/mind/hive/hive_impl.cpp b/ydb/core/mind/hive/hive_impl.cpp
index d2fc1cddd3..efd7f36bb1 100644
--- a/ydb/core/mind/hive/hive_impl.cpp
+++ b/ydb/core/mind/hive/hive_impl.cpp
@@ -415,6 +415,8 @@ void THive::Handle(TEvLocal::TEvTabletStatus::TPtr& ev) {
void THive::Handle(TEvPrivate::TEvBootTablets::TPtr&) {
BLOG_D("Handle BootTablets");
+ SignalTabletActive(DEPRECATED_CTX);
+ ReadyForConnections = true;
RequestPoolsInformation();
for (auto& [id, node] : Nodes) {
if (node.IsUnknown() && node.Local) {
@@ -439,6 +441,10 @@ void THive::Handle(TEvPrivate::TEvBootTablets::TPtr&) {
if (!tablet.InitiateBlockStorage(sideEffects, std::numeric_limits<ui32>::max())) {
DeleteTabletWithoutStorage(&tablet);
}
+ } else if (tablet.IsLockedToActor()) {
+ // we are wating for a lock
+ } else if (tablet.IsExternalBoot()) {
+ // we are wating for external boot request
} else if (tablet.IsStopped() && tablet.State == ETabletState::Stopped) {
ReportStoppedToWhiteboard(tablet);
BLOG_D("Report tablet " << tablet.ToString() << " as stopped to Whiteboard");
@@ -458,8 +464,6 @@ void THive::Handle(TEvPrivate::TEvBootTablets::TPtr&) {
}
}
sideEffects.Complete(DEPRECATED_CTX);
- SignalTabletActive(DEPRECATED_CTX);
- ReadyForConnections = true;
if (AreWeRootHive()) {
BLOG_D("Root Hive is ready");
} else {
@@ -2462,12 +2466,18 @@ void THive::RequestFreeSequence() {
size_t sequenceIndex = Sequencer.NextFreeSequenceIndex();
size_t sequenceSize = GetRequestSequenceSize();
+ if (PendingCreateTablets.size() > sequenceSize) {
+ size_t newSequenceSize = ((PendingCreateTablets.size() / sequenceSize) + 1) * sequenceSize;
+ BLOG_W("Increasing sequence size from " << sequenceSize << " to " << newSequenceSize << " due to PendingCreateTablets.size() == " << PendingCreateTablets.size());
+ sequenceSize = newSequenceSize;
+ }
+
BLOG_D("Requesting free sequence #" << sequenceIndex << " of " << sequenceSize << " from root hive");
SendToRootHivePipe(new TEvHive::TEvRequestTabletIdSequence(TabletID(), sequenceIndex, sequenceSize));
RequestingSequenceNow = true;
RequestingSequenceIndex = sequenceIndex;
} else {
- BLOG_ERROR("We run out of tablet ids");
+ BLOG_ERROR("We ran out of tablet ids");
}
}
diff --git a/ydb/core/mind/hive/hive_ut.cpp b/ydb/core/mind/hive/hive_ut.cpp
index c4686a90c7..e20b07b98a 100644
--- a/ydb/core/mind/hive/hive_ut.cpp
+++ b/ydb/core/mind/hive/hive_ut.cpp
@@ -3337,35 +3337,34 @@ Y_UNIT_TEST_SUITE(THiveTest) {
SendKillLocal(runtime, 4);
SendKillLocal(runtime, 5);
- WaitForBootQueue(runtime, hiveTablet);
-
- //TDispatchOptions options;
- //runtime.DispatchEvents(options, TDuration::MilliSeconds(1000));
-
{
int leaders = 0;
int tablets = 0;
- {
- THolder<TEvHive::TEvRequestHiveInfo> request = MakeHolder<TEvHive::TEvRequestHiveInfo>();
- request->Record.SetReturnFollowers(true);
- runtime.SendToPipe(hiveTablet, senderA, request.Release());
- TAutoPtr<IEventHandle> handle;
- TEvHive::TEvResponseHiveInfo* response = runtime.GrabEdgeEventRethrow<TEvHive::TEvResponseHiveInfo>(handle);
- for (const NKikimrHive::TTabletInfo& tablet : response->Record.GetTablets()) {
- if (tablet.GetFollowerID() == 0) {
- leaders++;
+ int iterations = 100;
+ while (--iterations > 0) {
+ leaders = 0;
+ tablets = 0;
+ {
+ THolder<TEvHive::TEvRequestHiveInfo> request = MakeHolder<TEvHive::TEvRequestHiveInfo>();
+ request->Record.SetReturnFollowers(true);
+ runtime.SendToPipe(hiveTablet, senderA, request.Release());
+ TAutoPtr<IEventHandle> handle;
+ TEvHive::TEvResponseHiveInfo* response = runtime.GrabEdgeEventRethrow<TEvHive::TEvResponseHiveInfo>(handle);
+ for (const NKikimrHive::TTabletInfo& tablet : response->Record.GetTablets()) {
+ if (tablet.GetFollowerID() == 0) {
+ leaders++;
+ }
+ tablets++;
+ Ctest << "tablet " << tablet.GetTabletID() << "." << tablet.GetFollowerID() << " on node " << tablet.GetNodeID() << Endl;
}
- tablets++;
- Ctest << "tablet " << tablet.GetTabletID() << "." << tablet.GetFollowerID() << " on node " << tablet.GetNodeID() << Endl;
}
+ if (leaders == 1 && tablets == 2) {
+ break;
+ }
+ runtime.DispatchEvents({}, TDuration::MilliSeconds(100));
}
UNIT_ASSERT_VALUES_EQUAL(leaders, 1);
UNIT_ASSERT_VALUES_EQUAL(tablets, 2);
- // if (tablets != 2) {
- // TDispatchOptions options;
- // runtime.DispatchEvents(options, TDuration::MilliSeconds(1000));
- // UNIT_ASSERT(false);
- // }
}
}
diff --git a/ydb/core/mind/hive/monitoring.cpp b/ydb/core/mind/hive/monitoring.cpp
index 362466da54..ba1fea2c46 100644
--- a/ydb/core/mind/hive/monitoring.cpp
+++ b/ydb/core/mind/hive/monitoring.cpp
@@ -255,10 +255,10 @@ public:
for (const auto& tabletIdx : tabletIdIndex) {
TTabletInfo& x = *tabletIdx.second;
if (BadOnly) {
- if (x.IsAlive() || x.GetLeader().IsExternalBoot()) {
+ if (x.IsAlive()) {
continue;
}
- if (x.IsLeader() && x.AsLeader().Type == TTabletTypes::BlockStoreVolume && x.IsStopped()) {
+ if (x.IsLeader() && (x.AsLeader().IsLockedToActor() || x.AsLeader().IsExternalBoot())) {
continue;
}
}
@@ -1120,6 +1120,10 @@ public:
++runningTablets;
++tabletsByNodeByType[pr.second.NodeId][GetTabletType(pr.second.Type)];
}
+ if (pr.second.IsLockedToActor()) {
+ ++runningTablets;
+ ++tabletsByNodeByType[pr.second.LockedToActor.NodeId()][GetTabletType(pr.second.Type)];
+ }
for (const auto& sl : pr.second.Followers) {
if (sl.IsRunning()){
++runningTablets;
@@ -1763,6 +1767,10 @@ public:
++runningTablets;
++tabletsByNodeByType[pr.second.NodeId][TTxMonEvent_Landing::GetTabletType(pr.second.Type)];
}
+ if (pr.second.IsLockedToActor()) {
+ ++runningTablets;
+ ++tabletsByNodeByType[pr.second.LockedToActor.NodeId()][TTxMonEvent_Landing::GetTabletType(pr.second.Type)];
+ }
for (const auto& sl : pr.second.Followers) {
if (sl.IsRunning()) {
++runningTablets;
diff --git a/ydb/core/mind/hive/ut/CMakeLists.txt b/ydb/core/mind/hive/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/mind/hive/ut/CMakeLists.txt
+++ b/ydb/core/mind/hive/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/mind/labels_maintainer.cpp b/ydb/core/mind/labels_maintainer.cpp
index 19138c7d23..36f1cb379a 100644
--- a/ydb/core/mind/labels_maintainer.cpp
+++ b/ydb/core/mind/labels_maintainer.cpp
@@ -244,8 +244,8 @@ private:
auto oldGroup = root->GetSubgroup("counters", svc);
if (!subSvc.empty())
oldGroup = oldGroup->GetSubgroup("subsystem", subSvc);
- TIntrusivePtr<NMonitoring::TDynamicCounters> serviceGroup = new NMonitoring::TDynamicCounters;
- TIntrusivePtr<NMonitoring::TDynamicCounters> curGroup = serviceGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> serviceGroup = new ::NMonitoring::TDynamicCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> curGroup = serviceGroup;
const auto* actualLabels = &labels;
diff --git a/ydb/core/mind/local.cpp b/ydb/core/mind/local.cpp
index 5fc863440e..2867e47adf 100644
--- a/ydb/core/mind/local.cpp
+++ b/ydb/core/mind/local.cpp
@@ -15,6 +15,7 @@
#include <library/cpp/actors/core/log.h>
#include <util/system/info.h>
+#include <util/string/vector.h>
#include <unordered_map>
#include <unordered_set>
@@ -115,25 +116,25 @@ class TLocalNodeRegistrar : public TActorBootstrapped<TLocalNodeRegistrar> {
NKikimrTabletBase::TMetrics ResourceLimit;
TResourceProfilesPtr ResourceProfiles;
TSharedQuotaPtr TxCacheQuota;
- NMonitoring::TDynamicCounterPtr Counters;
-
- NMonitoring::TDynamicCounters::TCounterPtr CounterStartAttempts;
- NMonitoring::TDynamicCounters::TCounterPtr CounterFollowerAttempts;
- NMonitoring::TDynamicCounters::TCounterPtr CounterRestored;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelLocked;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelSSTimeout;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelRace;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelError;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelBootBSError;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelOutdated;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelBootSSError;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelPoisonPill;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelDemotedBySS;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelBSError;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelInconsistentCommit;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelIsolated;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelDemotedByBS;
- NMonitoring::TDynamicCounters::TCounterPtr CounterCancelUnknownReason;
+ ::NMonitoring::TDynamicCounterPtr Counters;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterStartAttempts;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterFollowerAttempts;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterRestored;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelLocked;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelSSTimeout;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelRace;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelBootBSError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelOutdated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelBootSSError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelPoisonPill;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelDemotedBySS;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelBSError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelInconsistentCommit;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelIsolated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelDemotedByBS;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterCancelUnknownReason;
void Die(const TActorContext &ctx) override {
if (HivePipeClient) {
@@ -662,8 +663,13 @@ class TLocalNodeRegistrar : public TActorBootstrapped<TLocalNodeRegistrar> {
}
usage = static_cast<double>(MemUsage) / MemLimit;
}
+
+ TVector<TString> poolsToMonitorForUsage = SplitString(AppData()->HiveConfig.GetPoolsToMonitorForUsage(), ",");
+
for (const auto& poolInfo : info.poolstats()) {
- usage = std::max(usage, poolInfo.usage());
+ if (Find(poolsToMonitorForUsage, poolInfo.GetName()) != poolsToMonitorForUsage.end()) {
+ usage = std::max(usage, poolInfo.usage());
+ }
}
NodeUsage = usage;
@@ -875,7 +881,7 @@ public:
TLocalNodeRegistrar(const TActorId &owner, ui64 hiveId, TVector<TSubDomainKey> servicedDomains,
const NKikimrTabletBase::TMetrics &resourceLimit, TIntrusivePtr<TLocalConfig> config,
- NMonitoring::TDynamicCounterPtr counters)
+ ::NMonitoring::TDynamicCounterPtr counters)
: Owner(owner)
, HiveId(hiveId)
, ServicedDomains(std::move(servicedDomains))
diff --git a/ydb/core/mind/tenant_slot_broker_impl.h b/ydb/core/mind/tenant_slot_broker_impl.h
index b5e3b107ab..ef08bb73b3 100644
--- a/ydb/core/mind/tenant_slot_broker_impl.h
+++ b/ydb/core/mind/tenant_slot_broker_impl.h
@@ -175,8 +175,8 @@ using NTabletFlatExecutor::TTabletExecutedFlat;
using NTabletFlatExecutor::ITransaction;
using NTabletFlatExecutor::TTransactionBase;
using NTabletFlatExecutor::TTransactionContext;
-using NMonitoring::TDynamicCounterPtr;
-using NMonitoring::TDynamicCounters;
+using ::NMonitoring::TDynamicCounterPtr;
+using ::NMonitoring::TDynamicCounters;
class TTenantSlotBroker : public TActor<TTenantSlotBroker>, public TTabletExecutedFlat {
private:
diff --git a/ydb/core/mind/tenant_ut_pool.cpp b/ydb/core/mind/tenant_ut_pool.cpp
index 9ac6b6843c..a8a0a7be11 100644
--- a/ydb/core/mind/tenant_ut_pool.cpp
+++ b/ydb/core/mind/tenant_ut_pool.cpp
@@ -145,7 +145,7 @@ void CheckTenantPoolStatus(TTenantTestRuntime &runtime,
CheckTenantPoolStatus(runtime, 0, domain1);
}
-void CheckLabels(TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+void CheckLabels(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
const TString &database,
const TString &slot,
THashMap<TString, TString> attrs = {},
@@ -501,7 +501,7 @@ Y_UNIT_TEST_SUITE(TTenantPoolTests) {
auto serviceGroup = GetServiceCounters(counters, service, false);
auto tenantGroup = serviceGroup->FindSubgroup(DATABASE_LABEL, TENANT1_1_NAME);
UNIT_ASSERT(tenantGroup);
- TIntrusivePtr<NMonitoring::TDynamicCounters> slotGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> slotGroup;
if (attrServices.contains(service)) {
slotGroup = tenantGroup->FindSubgroup(HOST_LABEL, "slot-1");
} else {
@@ -591,7 +591,7 @@ Y_UNIT_TEST_SUITE(TTenantPoolTests) {
auto serviceGroup = GetServiceCounters(counters, service, false);
auto tenantGroup = serviceGroup->FindSubgroup(DATABASE_LABEL, TENANT1_1_NAME);
UNIT_ASSERT(tenantGroup);
- NMonitoring::TDynamicCounterPtr slotGroup;
+ ::NMonitoring::TDynamicCounterPtr slotGroup;
if (attrServices.contains(service)) {
slotGroup = tenantGroup->FindSubgroup(HOST_LABEL, "slot-1");
} else {
@@ -612,7 +612,7 @@ Y_UNIT_TEST_SUITE(TTenantPoolTests) {
auto serviceGroup = GetServiceCounters(counters, service, false);
auto tenantGroup = serviceGroup->FindSubgroup(DATABASE_LABEL, CanonizePath(DOMAIN1_NAME));
UNIT_ASSERT(tenantGroup);
- NMonitoring::TDynamicCounterPtr slotGroup;
+ ::NMonitoring::TDynamicCounterPtr slotGroup;
if (attrServices.contains(service)) {
slotGroup = tenantGroup;
} else {
@@ -633,7 +633,7 @@ Y_UNIT_TEST_SUITE(TTenantPoolTests) {
auto serviceGroup = GetServiceCounters(counters, service, false);
auto tenantGroup = serviceGroup->FindSubgroup(DATABASE_LABEL, "<none>");
UNIT_ASSERT(tenantGroup);
- NMonitoring::TDynamicCounterPtr slotGroup;
+ ::NMonitoring::TDynamicCounterPtr slotGroup;
if (attrServices.contains(service)) {
slotGroup = tenantGroup->FindSubgroup(HOST_LABEL, "unassigned");
} else {
diff --git a/ydb/core/mind/ut/CMakeLists.txt b/ydb/core/mind/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/mind/ut/CMakeLists.txt
+++ b/ydb/core/mind/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/mind/ut_fat/CMakeLists.txt b/ydb/core/mind/ut_fat/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/mind/ut_fat/CMakeLists.txt
+++ b/ydb/core/mind/ut_fat/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/mon/async_http_mon.cpp b/ydb/core/mon/async_http_mon.cpp
index 1337b71f1d..348fea3320 100644
--- a/ydb/core/mon/async_http_mon.cpp
+++ b/ydb/core/mon/async_http_mon.cpp
@@ -764,7 +764,7 @@ NMonitoring::IMonPage* TAsyncHttpMon::RegisterActorPage(TRegisterActorPageFields
return page.Get();
}
-NMonitoring::IMonPage* TAsyncHttpMon::RegisterCountersPage(const TString& path, const TString& title, TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+NMonitoring::IMonPage* TAsyncHttpMon::RegisterCountersPage(const TString& path, const TString& title, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
TDynamicCountersPage* page = new TDynamicCountersPage(path, title, counters);
page->SetUnknownGroupPolicy(EUnknownGroupPolicy::Ignore);
Register(page);
diff --git a/ydb/core/mon/async_http_mon.h b/ydb/core/mon/async_http_mon.h
index 77938962a4..aff58155b4 100644
--- a/ydb/core/mon/async_http_mon.h
+++ b/ydb/core/mon/async_http_mon.h
@@ -23,7 +23,7 @@ public:
void Register(NMonitoring::IMonPage* page) override;
NMonitoring::TIndexMonPage* RegisterIndexPage(const TString& path, const TString& title) override;
NMonitoring::IMonPage* RegisterActorPage(TRegisterActorPageFields fields) override;
- NMonitoring::IMonPage* RegisterCountersPage(const TString& path, const TString& title, TIntrusivePtr<NMonitoring::TDynamicCounters> counters) override;
+ NMonitoring::IMonPage* RegisterCountersPage(const TString& path, const TString& title, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) override;
NMonitoring::IMonPage* FindPage(const TString& relPath) override;
protected:
diff --git a/ydb/core/mon/mon.h b/ydb/core/mon/mon.h
index 822db0fcdc..8bf82ca724 100644
--- a/ydb/core/mon/mon.h
+++ b/ydb/core/mon/mon.h
@@ -52,7 +52,7 @@ public:
virtual NMonitoring::IMonPage* RegisterActorPage(TRegisterActorPageFields fields) = 0;
NMonitoring::IMonPage* RegisterActorPage(NMonitoring::TIndexMonPage* index, const TString& relPath,
const TString& title, bool preTag, TActorSystem* actorSystem, const TActorId& actorId, bool useAuth = true);
- virtual NMonitoring::IMonPage* RegisterCountersPage(const TString& path, const TString& title, TIntrusivePtr<NMonitoring::TDynamicCounters> counters) = 0;
+ virtual NMonitoring::IMonPage* RegisterCountersPage(const TString& path, const TString& title, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) = 0;
virtual NMonitoring::IMonPage* FindPage(const TString& relPath) = 0;
};
diff --git a/ydb/core/mon/sync_http_mon.h b/ydb/core/mon/sync_http_mon.h
index 717461e87f..9a61980c77 100644
--- a/ydb/core/mon/sync_http_mon.h
+++ b/ydb/core/mon/sync_http_mon.h
@@ -21,7 +21,7 @@ public:
void Register(NMonitoring::IMonPage *page) override;
NMonitoring::TIndexMonPage* RegisterIndexPage(const TString& path, const TString& title) override;
NMonitoring::IMonPage* RegisterActorPage(TRegisterActorPageFields fields) override;
- NMonitoring::IMonPage* RegisterCountersPage(const TString& path, const TString& title, TIntrusivePtr<NMonitoring::TDynamicCounters> counters) override;
+ NMonitoring::IMonPage* RegisterCountersPage(const TString& path, const TString& title, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) override;
void OutputIndexPage(IOutputStream& out) override;
NMonitoring::IMonPage* FindPage(const TString& relPath) override;
diff --git a/ydb/core/mon_alloc/monitor.cpp b/ydb/core/mon_alloc/monitor.cpp
index f72e136eb3..4069bc5e9e 100644
--- a/ydb/core/mon_alloc/monitor.cpp
+++ b/ydb/core/mon_alloc/monitor.cpp
@@ -20,8 +20,8 @@
#include <util/stream/str.h>
namespace NKikimr {
- using TDynamicCountersPtr = TIntrusivePtr<NMonitoring::TDynamicCounters>;
- using TDynamicCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TDynamicCountersPtr = TIntrusivePtr<::NMonitoring::TDynamicCounters>;
+ using TDynamicCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
namespace {
class TLfAllocMonitor: public IAllocMonitor {
@@ -154,7 +154,7 @@ namespace NKikimr {
auto info = NAllocDbg::GetPerTagAllocInfo(true, maxTag, numSizes);
HTML(out) {
- H3() {
+ TAG(TH3) {
out << "LFAlloc" << Endl;
}
out << "<hr>" << Endl;
@@ -247,7 +247,7 @@ namespace NKikimr {
}
#else
HTML(out) {
- H3() {
+ TAG(TH3) {
out << "LFAlloc" << Endl;
}
out << "<hr>" << Endl;
@@ -314,7 +314,7 @@ namespace NKikimr {
GetMemoryUsageForTags(tags.data(), tags.size(), usages.data());
HTML(out) {
- H3() {
+ TAG(TH3) {
out << "YTAlloc" << Endl;
}
out << "<hr>" << Endl;
@@ -358,7 +358,7 @@ namespace NKikimr {
}
#else
HTML(out) {
- H3() {
+ TAG(TH3) {
out << "YTAlloc" << Endl;
}
out << "<hr>" << Endl;
diff --git a/ydb/core/mon_alloc/monitor.h b/ydb/core/mon_alloc/monitor.h
index 36b167c5e5..3209e44305 100644
--- a/ydb/core/mon_alloc/monitor.h
+++ b/ydb/core/mon_alloc/monitor.h
@@ -46,5 +46,5 @@ namespace NKikimr {
NActors::IActor* CreateMemProfMonitor(
ui32 intervalSec,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
}
diff --git a/ydb/core/mon_alloc/profiler.cpp b/ydb/core/mon_alloc/profiler.cpp
index bfff45c180..cc7d9a201e 100644
--- a/ydb/core/mon_alloc/profiler.cpp
+++ b/ydb/core/mon_alloc/profiler.cpp
@@ -28,8 +28,8 @@
#include <stdio.h>
namespace NActors {
- using TDynamicCountersPtr = TIntrusivePtr<NMonitoring::TDynamicCounters>;
- using TDynamicCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TDynamicCountersPtr = TIntrusivePtr<::NMonitoring::TDynamicCounters>;
+ using TDynamicCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
namespace {
diff --git a/ydb/core/mon_alloc/profiler.h b/ydb/core/mon_alloc/profiler.h
index 4fba8941da..fa440b5780 100644
--- a/ydb/core/mon_alloc/profiler.h
+++ b/ydb/core/mon_alloc/profiler.h
@@ -116,7 +116,7 @@ namespace NActors {
}
IActor* CreateProfilerActor(
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
TString dir,
std::unique_ptr<IProfilerLogic> profiler = nullptr);
}
diff --git a/ydb/core/mon_alloc/stats.cpp b/ydb/core/mon_alloc/stats.cpp
index 050822241c..c8e6844c17 100644
--- a/ydb/core/mon_alloc/stats.cpp
+++ b/ydb/core/mon_alloc/stats.cpp
@@ -14,8 +14,8 @@
#include <util/datetime/base.h>
namespace NKikimr {
- using TDynamicCountersPtr = TIntrusivePtr<NMonitoring::TDynamicCounters>;
- using TDynamicCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TDynamicCountersPtr = TIntrusivePtr<::NMonitoring::TDynamicCounters>;
+ using TDynamicCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
namespace {
class TLfAllocStats: public IAllocStats {
diff --git a/ydb/core/mon_alloc/stats.h b/ydb/core/mon_alloc/stats.h
index a5528e5afd..0a54242bb0 100644
--- a/ydb/core/mon_alloc/stats.h
+++ b/ydb/core/mon_alloc/stats.h
@@ -13,7 +13,7 @@ namespace NKikimr {
NActors::IActor* CreateMemStatsCollector(
ui32 intervalSec,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
struct IAllocState {
diff --git a/ydb/core/mon_alloc/tcmalloc.cpp b/ydb/core/mon_alloc/tcmalloc.cpp
index 14a5e66833..8f52c56478 100644
--- a/ydb/core/mon_alloc/tcmalloc.cpp
+++ b/ydb/core/mon_alloc/tcmalloc.cpp
@@ -15,8 +15,8 @@ using namespace NActors;
namespace NKikimr {
-using TDynamicCountersPtr = TIntrusivePtr<NMonitoring::TDynamicCounters>;
-using TDynamicCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+using TDynamicCountersPtr = TIntrusivePtr<::NMonitoring::TDynamicCounters>;
+using TDynamicCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
using THistogramPtr = NMonitoring::THistogramPtr;
static void FormatPrettyNumber(IOutputStream& out, ssize_t val) {
@@ -708,11 +708,11 @@ public:
auto stats = tcmalloc::MallocExtension::GetStats();
HTML(out) {
- H3() {
+ TAG(TH3) {
out << "TCMalloc" << Endl;
}
out << "<hr>" << Endl;
- H4() {
+ TAG(TH4) {
out << "Allocator properties" << Endl;
}
TABLE_CLASS("table") {
@@ -734,7 +734,7 @@ public:
}
}
out << "<hr>" << Endl;
- H4() {
+ TAG(TH4) {
out << "<a href=\"https://github.com/google/tcmalloc/blob/master/docs/stats.md\">Internal stats</a>" << Endl;
}
PRE() {
diff --git a/ydb/core/mon_alloc/tcmalloc.h b/ydb/core/mon_alloc/tcmalloc.h
index db69ea16a8..566cbcbc2d 100644
--- a/ydb/core/mon_alloc/tcmalloc.h
+++ b/ydb/core/mon_alloc/tcmalloc.h
@@ -7,12 +7,12 @@
namespace NKikimr {
std::unique_ptr<IAllocStats> CreateTcMallocStats(
- TIntrusivePtr<NMonitoring::TDynamicCounters> group);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> group);
std::unique_ptr<IAllocState> CreateTcMallocState();
std::unique_ptr<IAllocMonitor> CreateTcMallocMonitor(
- TIntrusivePtr<NMonitoring::TDynamicCounters> group);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> group);
std::unique_ptr<NActors::IProfilerLogic> CreateTcMallocProfiler();
diff --git a/ydb/core/persqueue/CMakeLists.txt b/ydb/core/persqueue/CMakeLists.txt
index 2c915b92f6..b1164a78cf 100644
--- a/ydb/core/persqueue/CMakeLists.txt
+++ b/ydb/core/persqueue/CMakeLists.txt
@@ -6,6 +6,13 @@
# original buildsystem will not be accepted.
+add_subdirectory(codecs)
+add_subdirectory(config)
+add_subdirectory(events)
+add_subdirectory(partition_key_range)
+add_subdirectory(ut)
+add_subdirectory(ut_slow)
+add_subdirectory(writer)
add_library(ydb-core-persqueue)
target_link_libraries(ydb-core-persqueue PUBLIC
diff --git a/ydb/core/persqueue/actor_persqueue_client_iface.h b/ydb/core/persqueue/actor_persqueue_client_iface.h
index 2588e1ec3e..76c1a8545a 100644
--- a/ydb/core/persqueue/actor_persqueue_client_iface.h
+++ b/ydb/core/persqueue/actor_persqueue_client_iface.h
@@ -34,9 +34,15 @@ public:
Driver = std::make_shared<NYdb::TDriver>(driverConfig);
}
- virtual std::shared_ptr<NYdb::ICredentialsProviderFactory> GetCredentialsProvider(
+ NThreading::TFuture<NYdb::TCredentialsProviderFactoryPtr> GetCredentialsProvider(
const NKikimrPQ::TMirrorPartitionConfig::TCredentials& cred
- ) const = 0;
+ ) const noexcept {
+ try {
+ return GetCredentialsProviderImpl(cred);
+ } catch(...) {
+ return NThreading::MakeErrorFuture<NYdb::TCredentialsProviderFactoryPtr>(std::current_exception());
+ }
+ }
virtual std::shared_ptr<NYdb::NPersQueue::IReadSession> GetReadSession(
const NKikimrPQ::TMirrorPartitionConfig& config,
@@ -53,18 +59,24 @@ public:
}
protected:
+ virtual NThreading::TFuture<NYdb::TCredentialsProviderFactoryPtr> GetCredentialsProviderImpl(
+ const NKikimrPQ::TMirrorPartitionConfig::TCredentials& cred
+ ) const = 0;
+
+
+protected:
mutable TDeferredActorLogBackend::TSharedAtomicActorSystemPtr ActorSystemPtr;
mutable std::shared_ptr<NYdb::TDriver> Driver;
};
class TPersQueueMirrorReaderFactory : public IPersQueueMirrorReaderFactory {
-public:
- std::shared_ptr<NYdb::ICredentialsProviderFactory> GetCredentialsProvider(
+protected:
+ NThreading::TFuture<NYdb::TCredentialsProviderFactoryPtr> GetCredentialsProviderImpl(
const NKikimrPQ::TMirrorPartitionConfig::TCredentials& cred
) const override {
switch (cred.GetCredentialsCase()) {
case NKikimrPQ::TMirrorPartitionConfig::TCredentials::CREDENTIALS_NOT_SET: {
- return NYdb::CreateInsecureCredentialsProviderFactory();
+ return NThreading::MakeFuture(NYdb::CreateInsecureCredentialsProviderFactory());
}
default: {
ythrow yexception() << "unsupported credentials type " << ui64(cred.GetCredentialsCase());
@@ -72,6 +84,7 @@ public:
}
}
+public:
std::shared_ptr<NYdb::NPersQueue::IReadSession> GetReadSession(
const NKikimrPQ::TMirrorPartitionConfig& config,
ui32 partition,
@@ -81,6 +94,7 @@ public:
) const override {
NYdb::NPersQueue::TPersQueueClientSettings clientSettings = NYdb::NPersQueue::TPersQueueClientSettings()
.DiscoveryEndpoint(TStringBuilder() << config.GetEndpoint() << ":" << config.GetEndpointPort())
+ .DiscoveryMode(NYdb::EDiscoveryMode::Async)
.CredentialsProviderFactory(credentialsProviderFactory)
.EnableSsl(config.GetUseSecureConnection());
if (config.HasDatabase()) {
diff --git a/ydb/core/persqueue/events/internal.h b/ydb/core/persqueue/events/internal.h
index acdb7ba0d6..afc8bf6651 100644
--- a/ydb/core/persqueue/events/internal.h
+++ b/ydb/core/persqueue/events/internal.h
@@ -6,12 +6,16 @@
#include <ydb/core/protos/pqconfig.pb.h>
#include <ydb/core/tablet/tablet_counters.h>
#include <ydb/core/persqueue/key.h>
-
+#include <ydb/core/persqueue/metering_sink.h>
#include <library/cpp/actors/core/event_local.h>
#include <library/cpp/actors/core/actorid.h>
#include <util/generic/maybe.h>
+namespace NYdb {
+ class ICredentialsProviderFactory;
+}
+
namespace NKikimr {
namespace NPQ {
@@ -85,7 +89,6 @@ struct TEvPQ {
EvBlobResponse,
EvInitComplete,
EvChangeOwner,
- EvChangeConfig,
EvChangePartitionConfig,
EvChangeCacheConfig,
EvPartitionCounters,
@@ -110,9 +113,11 @@ struct TEvPQ {
EvReadLimiterCounters,
EvRetryWrite,
EvInitCredentials,
+ EvCredentialsCreated,
EvCreateConsumer,
EvRequestPartitionStatus,
EvReaderEventArrived,
+ EvMetering,
EvEnd
};
@@ -137,6 +142,7 @@ struct TEvPQ {
TString PartitionKey;
TString ExplicitHashKey;
bool External;
+ bool IgnoreQuotaDeadline;
};
TEvWrite(const ui64 cookie, const ui64 messageNo, const TString& ownerCookie, const TMaybe<ui64> offset, TVector<TMsg> &&msgs, bool isDirectWrite)
@@ -441,16 +447,6 @@ struct TEvPQ {
bool LastRequest;
};
-
- struct TEvChangeConfig : public TEventLocal<TEvChangeConfig, EvChangeConfig> {
- TEvChangeConfig(const TString& topicName, const NKikimrPQ::TPQTabletConfig& config)
- : TopicName(topicName)
- , Config(config)
- {}
-
- TString TopicName;
- NKikimrPQ::TPQTabletConfig Config;
- };
struct TEvChangePartitionConfig : public TEventLocal<TEvChangePartitionConfig, EvChangePartitionConfig> {
TEvChangePartitionConfig(const NPersQueue::TTopicConverterPtr& topicConverter, const NKikimrPQ::TPQTabletConfig& config)
: TopicConverter(topicConverter)
@@ -617,6 +613,19 @@ struct TEvPQ {
TEvInitCredentials()
{}
};
+
+ struct TEvCredentialsCreated : public TEventLocal<TEvCredentialsCreated, EvCredentialsCreated> {
+ TEvCredentialsCreated(const TString& error)
+ : Error(error)
+ {}
+
+ TEvCredentialsCreated(std::shared_ptr<NYdb::ICredentialsProviderFactory> credentials)
+ : Credentials(credentials)
+ {}
+
+ std::shared_ptr<NYdb::ICredentialsProviderFactory> Credentials;
+ std::optional<TString> Error;
+ };
struct TEvCreateConsumer : public TEventLocal<TEvCreateConsumer, EvCreateConsumer> {
TEvCreateConsumer()
@@ -634,6 +643,16 @@ struct TEvPQ {
ui64 Id;
};
+
+ struct TEvMetering : public TEventLocal<TEvMetering, EvMetering> {
+ TEvMetering(NPQ::EMeteringJson type, ui64 quantity)
+ : Type (type)
+ , Quantity(quantity)
+ {}
+
+ NPQ::EMeteringJson Type;
+ ui64 Quantity;
+ };
};
} //NKikimr
diff --git a/ydb/core/persqueue/metering_sink.cpp b/ydb/core/persqueue/metering_sink.cpp
index 8019405dfd..603e6f7d65 100644
--- a/ydb/core/persqueue/metering_sink.cpp
+++ b/ydb/core/persqueue/metering_sink.cpp
@@ -11,15 +11,16 @@ std::atomic<ui64> TMeteringSink::MeteringCounter_{0};
bool TMeteringSink::Create(TInstant now, const TMeteringSink::TParameters& p,
const TSet<EMeteringJson>& whichToFlush,
std::function<void(TString)> howToFlush) {
+ MayFlushForcibly(now);
if (p.PartitionsSize == 0) {
Created_ = false;
} else {
- if (!Created_) {
- for (auto which : whichToFlush) {
- LastFlush_[which] = now;
- }
+ for (auto which : whichToFlush) {
+ LastFlush_[which] = now;
}
CurrentPutUnitsQuantity_ = 0;
+ CurrentUsedStorage_ = 0;
+
Created_ = true;
Parameters_ = p;
WhichToFlush_ = whichToFlush;
@@ -49,6 +50,9 @@ ui64 TMeteringSink::IncreaseQuantity(EMeteringJson meteringJson, ui64 inc) {
case EMeteringJson::PutEventsV1:
CurrentPutUnitsQuantity_ += inc;
return CurrentPutUnitsQuantity_;
+ case EMeteringJson::UsedStorageV1:
+ CurrentUsedStorage_ += inc;
+ return CurrentUsedStorage_;
default:
return 0;
@@ -67,7 +71,7 @@ bool TMeteringSink::IsCreated() const {
TString TMeteringSink::GetMeteringJson(const TString& metricBillingId, const TString& schemeName,
const THashMap<TString, ui64>& tags,
const TString& quantityUnit, ui64 quantity,
- TInstant start, TInstant end, TInstant now) {
+ TInstant start, TInstant end, TInstant now, const TString& version) {
MeteringCounter_.fetch_add(1);
TStringStream output;
NJson::TJsonWriter writer(&output, false);
@@ -102,7 +106,7 @@ TString TMeteringSink::GetMeteringJson(const TString& metricBillingId, const TSt
writer.Write("ydb_database", Parameters_.YdbDatabaseId);
writer.CloseMap(); // "labels"
- writer.Write("version", "v1");
+ writer.Write("version", version);
writer.Write("source_id", Parameters_.TabletId);
writer.Write("source_wt", now.Seconds());
writer.CloseMap();
@@ -113,33 +117,83 @@ TString TMeteringSink::GetMeteringJson(const TString& metricBillingId, const TSt
void TMeteringSink::Flush(TInstant now, bool force) {
- bool needFlush = force;
for (auto whichOne : WhichToFlush_) {
+ bool needFlush = force;
+ TString units;
+ TString schema;
+ TString name;
+
switch (whichOne) {
+ case EMeteringJson::UsedStorageV1: {
+ units = "byte*second";
+ schema = "ydb.serverless.v1";
+ name = "used_storage";
+
+ needFlush |= IsTimeToFlush(now, LastFlush_[whichOne]);
+ if (!needFlush) {
+ break;
+ }
+ ui64 duration = (now - LastFlush_[whichOne]).MilliSeconds();
+ ui64 cus = CurrentUsedStorage_ * 1024 * 1024; // in bytes
+ ui64 avgUsage = cus * 1000 / duration;
+ CurrentUsedStorage_ = 0;
+ const THashMap<TString, ui64> tags = {
+ {"ydb_size", avgUsage}
+ };
+
+
+ auto interval = TInstant::Hours(LastFlush_[whichOne].Hours()) + Parameters_.FlushLimit;
+ while (interval < now) {
+ const auto metricsJson = GetMeteringJson(
+ name, schema, tags, "byte*second",
+ (now - LastFlush_[whichOne]).Seconds(),
+ LastFlush_[whichOne], interval, now, "1.0.0");
+ LastFlush_[whichOne] = interval;
+ FlushFunction_(metricsJson);
+ interval += Parameters_.FlushLimit;
+ }
+ if (LastFlush_[whichOne] < now) {
+ const auto metricsJson = GetMeteringJson(
+ name, schema, tags, "byte*second",
+ (now - LastFlush_[whichOne]).Seconds(),
+ LastFlush_[whichOne], now, now, "1.0.0");
+ LastFlush_[whichOne] = now;
+ FlushFunction_(metricsJson);
+ }
+ }
+ break;
+
+
+
case EMeteringJson::PutEventsV1: {
+ units = "put_units";
+ schema = "yds.events.puts.v1";
+ name = "put_events";
+
+ auto& putUnits = CurrentPutUnitsQuantity_;
+
needFlush |= IsTimeToFlush(now, LastFlush_[whichOne]);
if (!needFlush) {
break;
}
const auto isTimeToFlushUnits = now.Hours() > LastFlush_[whichOne].Hours();
if (isTimeToFlushUnits || needFlush) {
- if (CurrentPutUnitsQuantity_ > 0) {
+ if (putUnits > 0) {
// If we jump over a hour edge, report requests metrics for a previous hour
const TInstant requestsEndTime = isTimeToFlushUnits
? TInstant::Hours(LastFlush_[whichOne].Hours() + 1) : now;
const auto record = GetMeteringJson(
- "put_units", "yds.events.puts.v1", {}, "put_events", CurrentPutUnitsQuantity_,
+ units, schema, {}, name, putUnits,
LastFlush_[whichOne], requestsEndTime, now);
FlushFunction_(record);
}
- CurrentPutUnitsQuantity_ = 0;
+ putUnits = 0;
LastFlush_[whichOne] = now;
}
}
break;
-
case EMeteringJson::ResourcesReservedV1: {
needFlush |= IsTimeToFlush(now, LastFlush_[whichOne]);
if (!needFlush) {
@@ -149,7 +203,7 @@ void TMeteringSink::Flush(TInstant now, bool force) {
const TString schema = "yds.resources.reserved.v1";
const THashMap<TString, ui64> tags = {
{"reserved_throughput_bps", Parameters_.WriteQuota},
- {"shard_enhanced_consumers_throughput", Parameters_.ConsumersThroughput},
+ {"reserved_consumers_count", Parameters_.ConsumersCount},
{"reserved_storage_bytes", Parameters_.ReservedSpace}
};
auto interval = TInstant::Hours(LastFlush_[whichOne].Hours()) + Parameters_.FlushLimit;
@@ -182,6 +236,7 @@ void TMeteringSink::Flush(TInstant now, bool force) {
const TString schema = "yds.throughput.reserved.v1";
const THashMap<TString, ui64> tags = {
{"reserved_throughput_bps", Parameters_.WriteQuota},
+ {"reserved_consumers_count", Parameters_.ConsumersCount}
};
auto interval = TInstant::Hours(LastFlush_[whichOne].Hours()) + Parameters_.FlushLimit;
while (interval < now) {
diff --git a/ydb/core/persqueue/metering_sink.h b/ydb/core/persqueue/metering_sink.h
index cdb04d3c59..30021281e7 100644
--- a/ydb/core/persqueue/metering_sink.h
+++ b/ydb/core/persqueue/metering_sink.h
@@ -6,10 +6,12 @@
namespace NKikimr::NPQ {
enum class EMeteringJson {
- PutEventsV1,
- ResourcesReservedV1,
- ThroughputV1,
- StorageV1,
+ PutEventsV1 = 1,
+ ResourcesReservedV1 = 2,
+ ThroughputV1 = 3,
+ ReadThroughputV1 = 4,
+ StorageV1 = 5,
+ UsedStorageV1 = 6,
};
class TMeteringSink {
@@ -26,7 +28,7 @@ public:
ui64 PartitionsSize;
ui64 WriteQuota;
ui64 ReservedSpace;
- ui64 ConsumersThroughput;
+ ui64 ConsumersCount;
};
bool Create(TInstant now, const TParameters& p, const TSet<EMeteringJson>& whichToFlush,
std::function<void(TString)> howToFlush);
@@ -34,18 +36,21 @@ public:
void MayFlushForcibly(TInstant now);
void Close();
ui64 IncreaseQuantity(EMeteringJson meteringJson, ui64 inc);
+
TParameters GetParameters() const;
bool IsCreated() const;
TString GetMeteringJson(const TString& metricBillingId, const TString& schemeName,
const THashMap<TString, ui64>& tags, const TString& quantityUnit, ui64 quantity,
- TInstant start, TInstant end, TInstant now);
+ TInstant start, TInstant end, TInstant now, const TString& version = "v1");
+
ui64 GetMeteringCounter() const;
private:
TParameters Parameters_{};
bool Created_{false};
ui64 CurrentPutUnitsQuantity_{0};
+ ui64 CurrentUsedStorage_{0};
TSet<EMeteringJson> WhichToFlush_{};
TMap<EMeteringJson, TInstant> LastFlush_;
std::function<void(TString)> FlushFunction_;
diff --git a/ydb/core/persqueue/metering_sink_ut.cpp b/ydb/core/persqueue/metering_sink_ut.cpp
index 3e30969c22..82664aaff6 100644
--- a/ydb/core/persqueue/metering_sink_ut.cpp
+++ b/ydb/core/persqueue/metering_sink_ut.cpp
@@ -56,7 +56,7 @@ Y_UNIT_TEST(FlushResourcesReservedV1) {
TMeteringSink meteringSink;
const ui64 creationTs = 1651752943168786;
const ui64 flushTs = 1651754943168786;
- const ui32 consumersThroughput = 10;
+ const ui32 consumersCount = 10;
const ui64 writeQuota = 512_KB;
const ui64 reservedSpace = 10_MB;
const ui32 partitions = 2;
@@ -71,7 +71,7 @@ Y_UNIT_TEST(FlushResourcesReservedV1) {
.PartitionsSize = partitions,
.WriteQuota = writeQuota,
.ReservedSpace = reservedSpace,
- .ConsumersThroughput = consumersThroughput
+ .ConsumersCount = consumersCount
}, {EMeteringJson::ResourcesReservedV1}, [&](TString json) {
fullMetering = TStringBuilder() << fullMetering << '\n' << json;
});
@@ -84,7 +84,7 @@ Y_UNIT_TEST(FlushResourcesReservedV1) {
",\"id\":\"reserved_resources-databaseId-tabletId-" << creationTs / 1'000 << "-" <<
meteringSink.GetMeteringCounter() << "\"" <<
",\"schema\":\"yds.resources.reserved.v1\",\"tags\":{\"reserved_throughput_bps\":" <<
- writeQuota << ",\"shard_enhanced_consumers_throughput\":" << consumersThroughput <<
+ writeQuota << ",\"reserved_consumers_count\":" << consumersCount <<
",\"reserved_storage_bytes\":" << reservedSpace << "},\"usage\":{\"quantity\":" <<
partitions * (flushTs - creationTs) / 1'000'000 << ",\"unit\":\"second\"," <<
"\"start\":" << creationTs / 1'000'000 << ",\"finish\":" << flushTs / 1'000'000 <<
@@ -122,7 +122,7 @@ Y_UNIT_TEST(FlushThroughputV1) {
"\"id\":\"yds.reserved_resources-databaseId-tabletId-" << creationTs / 1'000 << "-" <<
meteringSink.GetMeteringCounter() << "\"" <<
",\"schema\":\"yds.throughput.reserved.v1\",\"tags\":" <<
- "{\"reserved_throughput_bps\":" << writeQuota << "}," << "\"usage\":{\"quantity\":" <<
+ "{\"reserved_throughput_bps\":" << writeQuota << ",\"reserved_consumers_count\":" << 0 << "}," << "\"usage\":{\"quantity\":" <<
partitions * (flushTs - creationTs) / 1'000'000 << ",\"unit\":\"second\"" <<
",\"start\":" << creationTs / 1'000'000 << ",\"finish\":" << flushTs / 1'000'000 <<
"},\"labels\":{\"datastreams_stream_name\":\"streamName\",\"ydb_database\":\"databaseId\"}," <<
diff --git a/ydb/core/persqueue/mirrorer.cpp b/ydb/core/persqueue/mirrorer.cpp
index bfa925fa2f..047e801640 100644
--- a/ydb/core/persqueue/mirrorer.cpp
+++ b/ydb/core/persqueue/mirrorer.cpp
@@ -242,7 +242,8 @@ void TMirrorer::Handle(TEvPQ::TEvUpdateCounters::TPtr& /*ev*/, const TActorConte
LastStateLogTimestamp = ctx.Now();
LOG_NOTICE_S(ctx, NKikimrServices::PQ_MIRRORER, MirrorerDescription()
<< "[STATE] current state=" << GetCurrentState()
- << ", read session=" << bool(ReadSession) << ", credentials provider=" << bool(CredentialsProvider));
+ << ", read session=" << bool(ReadSession) << ", credentials provider=" << bool(CredentialsProvider)
+ << ", credentials request inflight=" << CredentialsRequestInFlight);
if (ReadSession) {
LOG_NOTICE_S(ctx, NKikimrServices::PQ_MIRRORER, MirrorerDescription()
<< "[STATE] read session id " << ReadSession->GetSessionId());
@@ -307,7 +308,7 @@ void TMirrorer::Handle(TEvPQ::TEvUpdateCounters::TPtr& /*ev*/, const TActorConte
DoProcessNextReaderEvent(ctx, true); // LOGBROKER-7430
}
-void TMirrorer::HandleChangeConfig(TEvPQ::TEvChangeConfig::TPtr& ev, const TActorContext& ctx) {
+void TMirrorer::HandleChangeConfig(TEvPQ::TEvChangePartitionConfig::TPtr& ev, const TActorContext& ctx) {
bool equalConfigs = google::protobuf::util::MessageDifferencer::Equals(
Config,
ev->Get()->Config.GetPartitionConfig().GetMirrorFrom()
@@ -317,8 +318,7 @@ void TMirrorer::HandleChangeConfig(TEvPQ::TEvChangeConfig::TPtr& ev, const TActo
Config = ev->Get()->Config.GetPartitionConfig().GetMirrorFrom();
LOG_NOTICE_S(ctx, NKikimrServices::PQ_MIRRORER, MirrorerDescription() << " changing config");
- Become(&TThis::StateInitConsumer);
- ctx.Send(SelfId(), new TEvPQ::TEvInitCredentials);
+ StartInit(ctx);
}
}
@@ -361,15 +361,49 @@ void TMirrorer::TryToWrite(const TActorContext& ctx) {
void TMirrorer::HandleInitCredentials(TEvPQ::TEvInitCredentials::TPtr& /*ev*/, const TActorContext& ctx) {
+ if (CredentialsRequestInFlight) {
+ LOG_WARN_S(ctx, NKikimrServices::PQ_MIRRORER, MirrorerDescription() << " credentials request already inflight.");
+ return;
+ }
LastInitStageTimestamp = ctx.Now();
- try {
- RecreateCredentialsProvider(ctx);
- } catch(...) {
- ProcessError(ctx, "cannot initialize credentials provider: " + CurrentExceptionMessage());
+ CredentialsProvider = nullptr;
+
+ auto factory = AppData(ctx)->PersQueueMirrorReaderFactory;
+ Y_VERIFY(factory);
+ auto future = factory->GetCredentialsProvider(Config.GetCredentials());
+ future.Subscribe(
+ [
+ actorSystem = ctx.ExecutorThread.ActorSystem,
+ selfId = SelfId()
+ ](const NThreading::TFuture<NYdb::TCredentialsProviderFactoryPtr>& result) {
+ THolder<TEvPQ::TEvCredentialsCreated> ev;
+ if (result.HasException()) {
+ TString error;
+ try {
+ result.TryRethrow();
+ } catch(...) {
+ error = CurrentExceptionMessage();
+ }
+ ev = MakeHolder<TEvPQ::TEvCredentialsCreated>(error);
+ } else {
+ ev = MakeHolder<TEvPQ::TEvCredentialsCreated>(result.GetValue());
+ }
+ actorSystem->Send(new NActors::IEventHandle(selfId, selfId, ev.Release()));
+ }
+ );
+ CredentialsRequestInFlight = true;
+}
+
+void TMirrorer::HandleCredentialsCreated(TEvPQ::TEvCredentialsCreated::TPtr& ev, const TActorContext& ctx) {
+ CredentialsRequestInFlight = false;
+ if (ev->Get()->Error) {
+ ProcessError(ctx, TStringBuilder() << "cannot initialize credentials provider: " << ev->Get()->Error.value());
ScheduleWithIncreasingTimeout<TEvPQ::TEvInitCredentials>(SelfId(), ConsumerInitInterval, CONSUMER_INIT_INTERVAL_MAX, ctx);
return;
}
- LOG_NOTICE_S(ctx, NKikimrServices::PQ_MIRRORER, MirrorerDescription() << " credentials provider created");
+
+ CredentialsProvider = ev->Get()->Credentials;
+ LOG_NOTICE_S(ctx, NKikimrServices::PQ_MIRRORER, MirrorerDescription() << " credentials provider created " << bool(CredentialsProvider));
ConsumerInitInterval = CONSUMER_INIT_INTERVAL_START;
ScheduleConsumerCreation(ctx);
}
@@ -418,14 +452,20 @@ void TMirrorer::CreateConsumer(TEvPQ::TEvCreateConsumer::TPtr&, const TActorCont
factory->GetSharedActorSystem(),
NKikimrServices::PQ_MIRRORER
));
-
+
TString logPrefix = TStringBuilder() << MirrorerDescription() << "[reader " << ++ReaderGeneration << "] ";
log.SetFormatter([logPrefix](ELogPriority, TStringBuf message) -> TString {
return logPrefix + message;
});
- ReadSession = factory->GetReadSession(Config, Partition, CredentialsProvider, MAX_BYTES_IN_FLIGHT, log);
-
+ try {
+ ReadSession = factory->GetReadSession(Config, Partition, CredentialsProvider, MAX_BYTES_IN_FLIGHT, log);
+ } catch(...) {
+ ProcessError(ctx, TStringBuilder() << "got an exception during the creation read session: " << CurrentExceptionMessage());
+ ScheduleConsumerCreation(ctx);
+ return;
+ }
+
LOG_NOTICE_S(ctx, NKikimrServices::PQ_MIRRORER, MirrorerDescription()
<< " read session created: " << ReadSession->GetSessionId());
@@ -480,21 +520,13 @@ void TMirrorer::ScheduleConsumerCreation(const TActorContext& ctx) {
ReadFeatures.clear();
WaitNextReaderEventInFlight = false;
LastReadEventTime = TInstant::Zero();
-
+
Become(&TThis::StateInitConsumer);
LOG_NOTICE_S(ctx, NKikimrServices::PQ_MIRRORER, MirrorerDescription() << " schedule consumer creation");
ScheduleWithIncreasingTimeout<TEvPQ::TEvCreateConsumer>(SelfId(), ConsumerInitInterval, CONSUMER_INIT_INTERVAL_MAX, ctx);
}
-void TMirrorer::RecreateCredentialsProvider(const TActorContext& ctx) {
- CredentialsProvider = nullptr;
-
- auto factory = AppData(ctx)->PersQueueMirrorReaderFactory;
- Y_VERIFY(factory);
- CredentialsProvider = factory->GetCredentialsProvider(Config.GetCredentials());
-}
-
TString TMirrorer::MirrorerDescription() const {
return TStringBuilder() << "[mirrorer for " << TopicConverter->GetPrintableString() << ", partition " << Partition << ']';
}
@@ -601,6 +633,11 @@ void TMirrorer::DoProcessNextReaderEvent(const TActorContext& ctx, bool wakeup)
<< " got stream closed event for partition stream id: "
<< streamClosed->GetPartitionStream()->GetPartitionStreamId()
<< " reason: " << streamClosed->GetReason());
+
+ ProcessError(ctx, TStringBuilder() << " read session stream closed event");
+ ScheduleConsumerCreation(ctx);
+ return;
+
} else if (auto* streamStatus = std::get_if<TPersQueueReadEvent::TPartitionStreamStatusEvent >(&event.GetRef())) {
if (PartitionStream
&& PartitionStream->GetPartitionStreamId() == streamStatus->GetPartitionStream()->GetPartitionStreamId()
diff --git a/ydb/core/persqueue/mirrorer.h b/ydb/core/persqueue/mirrorer.h
index 8dabe460e4..8c247147fa 100644
--- a/ydb/core/persqueue/mirrorer.h
+++ b/ydb/core/persqueue/mirrorer.h
@@ -56,7 +56,8 @@ private:
TRACE_EVENT(NKikimrServices::PQ_MIRRORER);
switch (ev->GetTypeRewrite()) {
HFuncTraced(TEvPQ::TEvInitCredentials, HandleInitCredentials);
- HFuncTraced(TEvPQ::TEvChangeConfig, HandleChangeConfig);
+ HFuncTraced(TEvPQ::TEvCredentialsCreated, HandleCredentialsCreated);
+ HFuncTraced(TEvPQ::TEvChangePartitionConfig, HandleChangeConfig);
HFuncTraced(TEvPQ::TEvCreateConsumer, CreateConsumer);
HFuncTraced(TEvPQ::TEvRetryWrite, HandleRetryWrite);
HFuncTraced(TEvPersQueue::TEvResponse, Handle);
@@ -73,7 +74,7 @@ private:
TRACE_EVENT(NKikimrServices::PQ_MIRRORER);
switch (ev->GetTypeRewrite()) {
- HFuncTraced(TEvPQ::TEvChangeConfig, HandleChangeConfig);
+ HFuncTraced(TEvPQ::TEvChangePartitionConfig, HandleChangeConfig);
CFunc(TEvents::TSystem::Wakeup, HandleWakeup);
HFuncTraced(TEvPQ::TEvRequestPartitionStatus, RequestSourcePartitionStatus);
HFuncTraced(TEvPQ::TEvRetryWrite, HandleRetryWrite);
@@ -106,7 +107,6 @@ private:
const NKikimrClient::TPersQueuePartitionResponse& response
);
void ScheduleConsumerCreation(const TActorContext& ctx);
- void RecreateCredentialsProvider(const TActorContext& ctx);
void StartInit(const TActorContext& ctx);
void RetryWrite(const TActorContext& ctx);
@@ -133,10 +133,11 @@ public:
void Handle(TEvents::TEvPoisonPill::TPtr& ev, const TActorContext& ctx);
void Handle(TEvPersQueue::TEvResponse::TPtr& ev, const TActorContext& ctx);
void Handle(TEvPQ::TEvUpdateCounters::TPtr& ev, const TActorContext& ctx);
- void HandleChangeConfig(TEvPQ::TEvChangeConfig::TPtr& ev, const TActorContext& ctx);
+ void HandleChangeConfig(TEvPQ::TEvChangePartitionConfig::TPtr& ev, const TActorContext& ctx);
void TryToRead(const TActorContext& ctx);
void TryToWrite(const TActorContext& ctx);
void HandleInitCredentials(TEvPQ::TEvInitCredentials::TPtr& ev, const TActorContext& ctx);
+ void HandleCredentialsCreated(TEvPQ::TEvCredentialsCreated::TPtr& ev, const TActorContext& ctx);
void HandleRetryWrite(TEvPQ::TEvRetryWrite::TPtr& ev, const TActorContext& ctx);
void HandleWakeup(const TActorContext& ctx);
void CreateConsumer(TEvPQ::TEvCreateConsumer::TPtr& ev, const TActorContext& ctx);
@@ -164,7 +165,7 @@ private:
std::optional<NKikimrClient::TPersQueuePartitionRequest> WriteRequestInFlight;
TDuration WriteRetryTimeout = WRITE_RETRY_TIMEOUT_START;
TInstant WriteRequestTimestamp;
- std::shared_ptr<NYdb::ICredentialsProviderFactory> CredentialsProvider;
+ NYdb::TCredentialsProviderFactoryPtr CredentialsProvider;
std::shared_ptr<NYdb::NPersQueue::IReadSession> ReadSession;
ui64 ReaderGeneration = 0;
NYdb::NPersQueue::TPartitionStream::TPtr PartitionStream;
@@ -178,6 +179,7 @@ private:
TTabletCountersBase Counters;
bool WaitNextReaderEventInFlight = false;
+ bool CredentialsRequestInFlight = false;
bool WasSuccessfulRecording = false;
TInstant LastStateLogTimestamp;
diff --git a/ydb/core/persqueue/partition.cpp b/ydb/core/persqueue/partition.cpp
index 00e46d4046..b62f717d0b 100644
--- a/ydb/core/persqueue/partition.cpp
+++ b/ydb/core/persqueue/partition.cpp
@@ -511,7 +511,7 @@ TPartition::TPartition(ui64 tabletId, ui32 partition, const TActorId& tablet, co
, WriteBufferIsFullCounter(nullptr)
, WriteTimestamp(ctx.Now())
, WriteLagMs(TDuration::Minutes(1), 100)
-{
+ , LastUsedStorageMeterTimestamp(ctx.Now()) {
if (Config.GetPartitionConfig().HasMirrorFrom()) {
ManageWriteTimestampEstimate = !Config.GetPartitionConfig().GetMirrorFrom().GetSyncWriteTime();
} else {
@@ -1000,12 +1000,30 @@ void TPartition::HandleOnWrite(TEvPQ::TEvUpdateAvailableSize::TPtr&, const TActo
}
+ui64 TPartition::GetUsedStorage(const TActorContext& ctx) {
+ auto duration = ctx.Now() - LastUsedStorageMeterTimestamp;
+ LastUsedStorageMeterTimestamp = ctx.Now();
+ ui64 size = BodySize + Head.PackedSize;
+ if (DataKeysBody.size() > 0) {
+ size -= DataKeysBody.front().Size;
+ } else {
+ size = 0;
+ }
+ return size * duration.MilliSeconds() / 1000 / 1_MB; // mb*seconds
+}
+
+
void TPartition::HandleWakeup(const TActorContext& ctx) {
FilterDeadlinedWrites(ctx);
ctx.Schedule(WAKE_TIMEOUT, new TEvents::TEvWakeup());
ctx.Send(Tablet, new TEvPQ::TEvPartitionCounters(Partition, Counters));
+ ui64 usedStorage = GetUsedStorage(ctx);
+ if (usedStorage > 0) {
+ ctx.Send(Tablet, new TEvPQ::TEvMetering(EMeteringJson::UsedStorageV1, usedStorage));
+ }
+
ReportLabeledCounters(ctx);
ProcessHasDataRequests(ctx);
@@ -2275,7 +2293,7 @@ void TPartition::Handle(TEvPQ::TEvBlobResponse::TPtr& ev, const TActorContext& c
//make readinfo class
TReadAnswer answer(info.FormAnswer(
ctx, *ev->Get(), EndOffset, Partition, &UsersInfoStorage.GetOrCreate(info.User, ctx),
- info.Destination, GetSizeLag(info.Offset)
+ info.Destination, GetSizeLag(info.Offset), Tablet, Config.GetMeteringMode()
));
if (HasError(*ev->Get())) {
@@ -2348,8 +2366,11 @@ TReadAnswer TReadInfo::FormAnswer(
const ui32 partition,
TUserInfo* userInfo,
const ui64 cookie,
- const ui64 sizeLag
+ const ui64 sizeLag,
+ const TActorId& tablet,
+ const NKikimrPQ::TPQTabletConfig::EMeteringMode meteringMode
) {
+ Y_UNUSED(meteringMode);
Y_UNUSED(partition);
THolder<TEvPQ::TEvProxyResponse> answer = MakeHolder<TEvPQ::TEvProxyResponse>(cookie);
NKikimrClient::TResponse& res = answer->Response;
@@ -2415,7 +2436,8 @@ TReadAnswer TReadInfo::FormAnswer(
LOG_DEBUG(ctx, NKikimrServices::PERSQUEUE, "Not full answer here!");
ui64 answerSize = answer->Response.ByteSize();
if (userInfo && Destination != 0) {
- userInfo->ReadDone(ctx, ctx.Now(), answerSize, cnt, ClientDC);
+ userInfo->ReadDone(ctx, ctx.Now(), answerSize, cnt, ClientDC,
+ tablet);
}
readResult->SetSizeLag(sizeLag - size);
return {answerSize, std::move(answer)};
@@ -2514,7 +2536,9 @@ TReadAnswer TReadInfo::FormAnswer(
Y_VERIFY(Offset <= (ui64)Max<i64>(), "Offset is too big: %" PRIu64, Offset);
ui64 answerSize = answer->Response.ByteSize();
if (userInfo && Destination != 0) {
- userInfo->ReadDone(ctx, ctx.Now(), answerSize, cnt, ClientDC);
+ userInfo->ReadDone(ctx, ctx.Now(), answerSize, cnt, ClientDC,
+ tablet);
+
}
readResult->SetSizeLag(sizeLag - size);
return {answerSize, std::move(answer)};
@@ -2531,7 +2555,7 @@ void TPartition::Handle(TEvPQ::TEvReadTimeout::TPtr& ev, const TActorContext& ct
auto res = Subscriber.OnTimeout(ev);
if (!res)
return;
- TReadAnswer answer(res->FormAnswer(ctx, res->Offset, Partition, nullptr, res->Destination, 0));
+ TReadAnswer answer(res->FormAnswer(ctx, res->Offset, Partition, nullptr, res->Destination, 0, Tablet, Config.GetMeteringMode()));
ctx.Send(Tablet, answer.Event.Release());
LOG_DEBUG_S(ctx, NKikimrServices::PERSQUEUE, " waiting read cookie " << ev->Get()->Cookie
<< " partition " << Partition << " read timeout for " << res->User << " offset " << res->Offset);
@@ -2775,6 +2799,10 @@ void TPartition::OnReadRequestFinished(TReadInfo&& info, ui64 answerSize) {
auto userInfo = UsersInfoStorage.GetIfExists(info.User);
Y_VERIFY(userInfo);
+ if (Config.GetMeteringMode() == NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS) {
+ return;
+ }
+
if (userInfo->ReadSpeedLimiter) {
Send(
userInfo->ReadSpeedLimiter->Actor,
@@ -4698,16 +4726,23 @@ void TPartition::FilterDeadlinedWrites(const TActorContext& ctx)
if (QuotaDeadline == TInstant::Zero() || QuotaDeadline > ctx.Now())
return;
+ std::deque<TMessage> newRequests;
for (auto& w : Requests) {
- ReplyError(ctx, w.GetCookie(), NPersQueue::NErrorCode::OVERLOAD, "quota exceeded");
if (w.IsWrite()) {
const auto& msg = w.GetWrite().Msg;
+ if (msg.IgnoreQuotaDeadline) {
+ newRequests.emplace_back(std::move(w));
+ continue;
+ }
+
Counters.Cumulative()[COUNTER_PQ_WRITE_ERROR].Increment(1);
Counters.Cumulative()[COUNTER_PQ_WRITE_BYTES_ERROR].Increment(msg.Data.size() + msg.SourceId.size());
WriteInflightSize -= msg.Data.size();
}
+
+ ReplyError(ctx, w.GetCookie(), NPersQueue::NErrorCode::OVERLOAD, "quota exceeded");
}
- Requests.clear();
+ Requests = std::move(newRequests);
QuotaDeadline = TInstant::Zero();
UpdateWriteBufferIsFullState(ctx.Now());
@@ -4791,7 +4826,7 @@ void TPartition::ProcessRead(const TActorContext& ctx, TReadInfo&& info, const u
TReadAnswer answer(info.FormAnswer(
ctx, EndOffset, Partition, &UsersInfoStorage.GetOrCreate(info.User, ctx),
- info.Destination, GetSizeLag(info.Offset)
+ info.Destination, GetSizeLag(info.Offset), Tablet, Config.GetMeteringMode()
));
const auto& resp = dynamic_cast<TEvPQ::TEvProxyResponse*>(answer.Event.Get())->Response;
if (info.IsSubscription) {
@@ -4855,6 +4890,9 @@ void TPartition::Handle(TEvQuota::TEvClearance::TPtr& ev, const TActorContext& c
size_t TPartition::GetQuotaRequestSize(const TEvKeyValue::TEvRequest& request)
{
+ if (Config.GetMeteringMode() == NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS) {
+ return 0;
+ }
if (AppData()->PQConfig.GetQuotingConfig().GetTopicWriteQuotaEntityToLimit() == NKikimrPQ::TPQConfig::TQuotingConfig::USER_PAYLOAD_SIZE) {
return WriteNewSize;
} else {
@@ -4920,33 +4958,24 @@ void TPartition::CalcTopicWriteQuotaParams()
Y_VERIFY(quotingConfig.GetTopicWriteQuotaEntityToLimit() != NKikimrPQ::TPQConfig::TQuotingConfig::UNSPECIFIED);
// ToDo[migration] - double check
- TString topicPath = Config.GetTopicPath();
- if (topicPath.empty()) {
- topicPath = Config.GetTopicName();
- }
- Y_VERIFY(!topicPath.empty());
- TFsPath fsPath(topicPath);
- if (fsPath.IsSubpathOf(pqConfig.GetRoot())) {
- topicPath = fsPath.RelativePath(TFsPath(pqConfig.GetRoot())).GetPath();
- }
+ auto topicPath = TopicConverter->GetFederationPath();
+
// ToDo[migration] - separate quoter paths?
- TVector<TString> topicParts = {WRITE_QUOTA_ROOT_PATH};
- auto split = SplitPath(topicPath); // account/folder/topic // account is first element
- if (split.size() < 2) {
+ auto topicParts = SplitPath(topicPath); // account/folder/topic // account is first element
+ if (topicParts.size() < 2) {
LOG_WARN_S(TActivationContext::AsActorContext(), NKikimrServices::PERSQUEUE,
"tablet " << TabletID << " topic '" << topicPath << "' Bad topic name. Disable quoting for topic");
return;
}
- topicParts.insert(topicParts.end(), split.begin(), split.end());
- //const TString account = topicParts[0];
topicParts[0] = WRITE_QUOTA_ROOT_PATH; // write-quota/folder/topic
TopicWriteQuotaResourcePath = JoinPath(topicParts);
TopicWriteQuoterPath = TStringBuilder() << quotingConfig.GetQuotersDirectoryPath() << "/" << TopicConverter->GetAccount();
+
LOG_DEBUG_S(TActivationContext::AsActorContext(), NKikimrServices::PERSQUEUE,
- "topicWriteQuutaResourcePath " << TopicWriteQuotaResourcePath
- << " topicWriteQuoterPath '" << TopicWriteQuoterPath
- << " account " << TopicConverter->GetAccount()
+ "topicWriteQuutaResourcePath '" << TopicWriteQuotaResourcePath
+ << "' topicWriteQuoterPath '" << TopicWriteQuoterPath
+ << "' account " << TopicConverter->GetAccount()
);
}
}
diff --git a/ydb/core/persqueue/partition.h b/ydb/core/persqueue/partition.h
index 0cb644ac12..c91705759a 100644
--- a/ydb/core/persqueue/partition.h
+++ b/ydb/core/persqueue/partition.h
@@ -214,6 +214,8 @@ private:
void SetupTopicCounters(const TActorContext& ctx);
void SetupStreamCounters(const TActorContext& ctx);
+ ui64 GetUsedStorage(const TActorContext& ctx);
+
public:
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
return NKikimrServices::TActivity::PERSQUEUE_PARTITION_ACTOR;
@@ -660,6 +662,8 @@ private:
TDeque<NKikimrPQ::TStatusResponse::TErrorMessage> Errors;
THolder<TMirrorerInfo> Mirrorer;
+
+ TInstant LastUsedStorageMeterTimestamp;
};
}// NPQ
diff --git a/ydb/core/persqueue/percentile_counter.cpp b/ydb/core/persqueue/percentile_counter.cpp
index 4a9d63fc9d..54b4242ba5 100644
--- a/ydb/core/persqueue/percentile_counter.cpp
+++ b/ydb/core/persqueue/percentile_counter.cpp
@@ -7,7 +7,7 @@ namespace NKikimr {
namespace NPQ {
-TMultiCounter::TMultiCounter(NMonitoring::TDynamicCounterPtr counters,
+TMultiCounter::TMultiCounter(::NMonitoring::TDynamicCounterPtr counters,
const TVector<NPersQueue::TPQLabelsInfo>& labels,
const TVector<std::pair<TString, TString>>& subgroups,
const TVector<TString>& counter_names,
@@ -63,7 +63,7 @@ TMultiCounter::operator bool() {
TPercentileCounter::TPercentileCounter(
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const TVector<NPersQueue::TPQLabelsInfo>& labels,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const TVector<NPersQueue::TPQLabelsInfo>& labels,
const TVector<std::pair<TString, TString>>& subgroups, const TString& sensor,
const TVector<std::pair<ui64, TString>>& intervals, const bool deriv, bool expiring
) {
@@ -102,7 +102,7 @@ void TPercentileCounter::DecFor(ui64 key, ui64 value) {
}
NKikimr::NPQ::TPercentileCounter CreateSLIDurationCounter(
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, TVector<NPersQueue::TPQLabelsInfo> aggr, const TString name, ui32 border,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, TVector<NPersQueue::TPQLabelsInfo> aggr, const TString name, ui32 border,
TVector<ui32> durations
) {
bool found = false;
diff --git a/ydb/core/persqueue/percentile_counter.h b/ydb/core/persqueue/percentile_counter.h
index 06c2b1ae08..21b9e7fc1c 100644
--- a/ydb/core/persqueue/percentile_counter.h
+++ b/ydb/core/persqueue/percentile_counter.h
@@ -10,7 +10,7 @@ class TMultiCounter {
public:
TMultiCounter() = default;
- TMultiCounter(NMonitoring::TDynamicCounterPtr counters,
+ TMultiCounter(::NMonitoring::TDynamicCounterPtr counters,
const TVector<NPersQueue::TPQLabelsInfo>& labels,
const TVector<std::pair<TString, TString>>& subgroups,
const TVector<TString>& counter_names,
@@ -26,13 +26,13 @@ public:
private:
ui64 Value = 0;
- TVector<NMonitoring::TDynamicCounters::TCounterPtr> Counters;
+ TVector<::NMonitoring::TDynamicCounters::TCounterPtr> Counters;
};
class TPercentileCounter {
public:
TPercentileCounter() = default;
- TPercentileCounter(TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TPercentileCounter(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
const TVector<NPersQueue::TPQLabelsInfo>& labels,
const TVector<std::pair<TString, TString>>& subgroups,
const TString& sensor,
@@ -49,7 +49,7 @@ private:
};
NKikimr::NPQ::TPercentileCounter CreateSLIDurationCounter(
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, TVector<NPersQueue::TPQLabelsInfo> aggr,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, TVector<NPersQueue::TPQLabelsInfo> aggr,
const TString name, ui32 border, TVector<ui32> durations);
}// NPQ
diff --git a/ydb/core/persqueue/pq_impl.cpp b/ydb/core/persqueue/pq_impl.cpp
index 506a18c3e4..ecdbf13e2c 100644
--- a/ydb/core/persqueue/pq_impl.cpp
+++ b/ydb/core/persqueue/pq_impl.cpp
@@ -243,7 +243,8 @@ private:
};
-TActorId CreateReadProxy(const TActorId& sender, const TActorId& tablet, const NKikimrClient::TPersQueueRequest& request, const TActorContext&ctx)
+TActorId CreateReadProxy(const TActorId& sender, const TActorId& tablet, const NKikimrClient::TPersQueueRequest& request,
+ const TActorContext& ctx)
{
return ctx.Register(new TReadProxy(sender, tablet, request));
}
@@ -495,9 +496,9 @@ private:
for (auto& r: Results) mx = Max<ui32>(mx, r.second.size());
HTML(str) {
- H2() {str << "PersQueue Tablet";}
- H3() {str << "Topic: " << TopicName;}
- H4() {str << "inflight: " << Inflight;}
+ TAG(TH2) {str << "PersQueue Tablet";}
+ TAG(TH3) {str << "Topic: " << TopicName;}
+ TAG(TH4) {str << "inflight: " << Inflight;}
UL_CLASS("nav nav-tabs") {
LI_CLASS("active") {
str << "<a href=\"#main\" data-toggle=\"tab\">main</a>";
@@ -530,7 +531,7 @@ private:
str << s;
}
}
- H3() {str << "<a href=\"app?TabletID=" << TabletID << "&kv=1\">KV-tablet internals</a>";}
+ TAG(TH3) {str << "<a href=\"app?TabletID=" << TabletID << "&kv=1\">KV-tablet internals</a>";}
}
LOG_DEBUG_S(ctx, NKikimrServices::PERSQUEUE, "Answer TEvRemoteHttpInfoRes: to " << Sender << " self " << ctx.SelfID);
ctx.Send(Sender, new NMon::TEvRemoteHttpInfoRes(str.Str()));
@@ -606,8 +607,6 @@ void TPersQueue::ApplyNewConfigAndReply(const TActorContext& ctx)
// in order to answer only after all parts are ready to work
Y_VERIFY(ConfigInited && PartitionsInited == Partitions.size());
- MeteringSink.MayFlushForcibly(ctx.Now());
-
Config = NewConfig;
if (!Config.PartitionsSize()) {
@@ -824,33 +823,57 @@ void TPersQueue::InitializeMeteringSink(const TActorContext& ctx) {
const auto streamPath = Config.GetTopicPath();
auto& pqConfig = AppData(ctx)->PQConfig;
- if (pqConfig.HasBillingMeteringConfig() && pqConfig.GetBillingMeteringConfig().GetEnabled()) {
- TSet<EMeteringJson> whichToFlush{EMeteringJson::PutEventsV1, EMeteringJson::ResourcesReservedV1};
- ui64 storageLimitBytes{Config.GetPartitionConfig().GetWriteSpeedInBytesPerSecond() *
- Config.GetPartitionConfig().GetLifetimeSeconds()};
-
- if (Config.GetPartitionConfig().HasStorageLimitBytes()) {
- storageLimitBytes = Config.GetPartitionConfig().GetStorageLimitBytes();
- whichToFlush = TSet<EMeteringJson>{EMeteringJson::PutEventsV1,
- EMeteringJson::ThroughputV1,
- EMeteringJson::StorageV1};
- }
+ if (!pqConfig.GetBillingMeteringConfig().GetEnabled()) {
+ LOG_NOTICE_S(ctx, NKikimrServices::PERSQUEUE, "Tablet " << TabletID() << " disable metering"
+ << ": reason# " << "billing is not enabled in BillingMeteringConfig");
+ return;
+ }
+
+ TSet<EMeteringJson> whichToFlush{EMeteringJson::PutEventsV1, EMeteringJson::ResourcesReservedV1};
+ ui64 storageLimitBytes{Config.GetPartitionConfig().GetWriteSpeedInBytesPerSecond() *
+ Config.GetPartitionConfig().GetLifetimeSeconds()};
+
+ if (Config.GetPartitionConfig().HasStorageLimitBytes()) {
+ storageLimitBytes = Config.GetPartitionConfig().GetStorageLimitBytes();
+ whichToFlush = TSet<EMeteringJson>{EMeteringJson::PutEventsV1,
+ EMeteringJson::ThroughputV1,
+ EMeteringJson::StorageV1};
+ }
+
+ switch (Config.GetMeteringMode()) {
+ case NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS:
+ LOG_NOTICE_S(ctx, NKikimrServices::PERSQUEUE, "Tablet " << TabletID() << " metering mode METERING_MODE_REQUEST_UNITS");
+ whichToFlush = TSet<EMeteringJson>{EMeteringJson::UsedStorageV1};
+ break;
- MeteringSink.Create(ctx.Now(), {
- .FlushInterval = TDuration::Seconds(pqConfig.GetBillingMeteringConfig().GetFlushIntervalSec()),
- .TabletId = ToString(TabletID()),
- .YcCloudId = Config.GetYcCloudId(),
- .YcFolderId = Config.GetYcFolderId(),
- .YdbDatabaseId = Config.GetYdbDatabaseId(),
- .StreamName = streamName,
- .ResourceId = streamPath,
- .PartitionsSize = Config.PartitionsSize(),
- .WriteQuota = Config.GetPartitionConfig().GetWriteSpeedInBytesPerSecond(),
- .ReservedSpace = storageLimitBytes,
- .ConsumersThroughput = Config.GetPartitionConfig().GetWriteSpeedInBytesPerSecond() *
- Config.ReadRulesSize(),
- }, whichToFlush, std::bind(NMetering::SendMeteringJson, ctx, std::placeholders::_1));
+ default:
+ break;
}
+
+ auto countReadRulesWithPricing = [&](const TActorContext& ctx, const auto& config) {
+ ui32 result = 0;
+ for (ui32 i = 0; i < config.ReadRulesSize(); ++i) {
+ TString rrServiceType = config.ReadRuleServiceTypesSize() <= i ? "" : config.GetReadRuleServiceTypes(i);
+ if (rrServiceType.empty() || rrServiceType == AppData(ctx)->PQConfig.GetDefaultClientServiceType().GetName())
+ ++result;
+ }
+ return result;
+ };
+
+
+ MeteringSink.Create(ctx.Now(), {
+ .FlushInterval = TDuration::Seconds(pqConfig.GetBillingMeteringConfig().GetFlushIntervalSec()),
+ .TabletId = ToString(TabletID()),
+ .YcCloudId = Config.GetYcCloudId(),
+ .YcFolderId = Config.GetYcFolderId(),
+ .YdbDatabaseId = Config.GetYdbDatabaseId(),
+ .StreamName = streamName,
+ .ResourceId = streamPath,
+ .PartitionsSize = Config.PartitionsSize(),
+ .WriteQuota = Config.GetPartitionConfig().GetWriteSpeedInBytesPerSecond(),
+ .ReservedSpace = storageLimitBytes,
+ .ConsumersCount = countReadRulesWithPricing(ctx, Config),
+ }, whichToFlush, std::bind(NMetering::SendMeteringJson, ctx, std::placeholders::_1));
}
void TPersQueue::ReturnTabletState(const TActorContext& ctx, const TChangeNotification& req, NKikimrProto::EReplyStatus status)
@@ -919,6 +942,11 @@ void TPersQueue::SetCacheCounters(TEvPQ::TEvTabletCacheCounters::TCacheCounters&
Counters->Simple()[COUNTER_PQ_TABLET_OPENED_PIPES] = PipesInfo.size();
}
+void TPersQueue::Handle(TEvPQ::TEvMetering::TPtr& ev, const TActorContext&)
+{
+ MeteringSink.IncreaseQuantity(ev->Get()->Type, ev->Get()->Quantity);
+}
+
void TPersQueue::Handle(TEvPQ::TEvPartitionCounters::TPtr& ev, const TActorContext& ctx)
{
@@ -1492,8 +1520,9 @@ void TPersQueue::HandleWriteRequest(const ui64 responseCookie, const TActorId& p
{
Y_VERIFY(req.CmdWriteSize());
MeteringSink.MayFlush(ctx.Now()); // To ensure hours' border;
- MeteringSink.IncreaseQuantity(EMeteringJson::PutEventsV1,
- req.HasPutUnitsSize() ? req.GetPutUnitsSize() : 0);
+ if (Config.GetMeteringMode() != NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS) {
+ MeteringSink.IncreaseQuantity(EMeteringJson::PutEventsV1, req.HasPutUnitsSize() ? req.GetPutUnitsSize() : 0);
+ }
TVector <TEvPQ::TEvWrite::TMsg> msgs;
@@ -1611,7 +1640,8 @@ void TPersQueue::HandleWriteRequest(const ui64 responseCookie, const TActorId& p
msgs.push_back({cmd.GetSourceId(), static_cast<ui64>(cmd.GetSeqNo()), partNo,
totalParts, totalSize, createTimestampMs, receiveTimestampMs,
disableDeduplication, writeTimestampMs, data, uncompressedSize,
- cmd.GetPartitionKey(), cmd.GetExplicitHash(), cmd.GetExternalOperation()
+ cmd.GetPartitionKey(), cmd.GetExplicitHash(), cmd.GetExternalOperation(),
+ cmd.GetIgnoreQuotaDeadline()
});
partNo++;
uncompressedSize = 0;
@@ -1630,7 +1660,7 @@ void TPersQueue::HandleWriteRequest(const ui64 responseCookie, const TActorId& p
static_cast<ui32>(cmd.HasTotalSize() ? cmd.GetTotalSize() : cmd.GetData().Size()),
createTimestampMs, receiveTimestampMs, disableDeduplication, writeTimestampMs, cmd.GetData(),
cmd.HasUncompressedSize() ? cmd.GetUncompressedSize() : 0u, cmd.GetPartitionKey(), cmd.GetExplicitHash(),
- cmd.GetExternalOperation()
+ cmd.GetExternalOperation(), cmd.GetIgnoreQuotaDeadline()
});
}
LOG_DEBUG_S(ctx, NKikimrServices::PERSQUEUE, "got client message topic: " << TopicConverter->GetClientsideName() <<
@@ -2134,6 +2164,7 @@ bool TPersQueue::HandleHook(STFUNC_SIG)
HFuncTraced(TEvKeyValue::TEvResponse, Handle);
HFuncTraced(TEvPQ::TEvInitComplete, Handle);
HFuncTraced(TEvPQ::TEvPartitionCounters, Handle);
+ HFuncTraced(TEvPQ::TEvMetering, Handle);
HFuncTraced(TEvPQ::TEvPartitionLabeledCounters, Handle);
HFuncTraced(TEvPQ::TEvPartitionLabeledCountersDrop, Handle);
HFuncTraced(TEvPQ::TEvTabletCacheCounters, Handle);
diff --git a/ydb/core/persqueue/pq_impl.h b/ydb/core/persqueue/pq_impl.h
index 9b43a399a8..07ba60620c 100644
--- a/ydb/core/persqueue/pq_impl.h
+++ b/ydb/core/persqueue/pq_impl.h
@@ -52,6 +52,8 @@ class TPersQueue : public NKeyValue::TKeyValueFlat {
//partitions will send some times it's counters
void Handle(TEvPQ::TEvPartitionCounters::TPtr& ev, const TActorContext&);
+ void Handle(TEvPQ::TEvMetering::TPtr& ev, const TActorContext&);
+
void Handle(TEvPQ::TEvPartitionLabeledCounters::TPtr& ev, const TActorContext&);
void Handle(TEvPQ::TEvPartitionLabeledCountersDrop::TPtr& ev, const TActorContext&);
void AggregateAndSendLabeledCountersFor(const TString& group, const TActorContext&);
diff --git a/ydb/core/persqueue/pq_l2_cache.cpp b/ydb/core/persqueue/pq_l2_cache.cpp
index 01dfa5caaa..cd12e5bf6a 100644
--- a/ydb/core/persqueue/pq_l2_cache.cpp
+++ b/ydb/core/persqueue/pq_l2_cache.cpp
@@ -4,7 +4,7 @@
namespace NKikimr {
namespace NPQ {
-IActor* CreateNodePersQueueL2Cache(const TCacheL2Parameters& params, TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
+IActor* CreateNodePersQueueL2Cache(const TCacheL2Parameters& params, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters)
{
return new TPersQueueCacheL2(params, counters);
}
diff --git a/ydb/core/persqueue/pq_l2_cache.h b/ydb/core/persqueue/pq_l2_cache.h
index 2ec6e97ced..07fae217d3 100644
--- a/ydb/core/persqueue/pq_l2_cache.h
+++ b/ydb/core/persqueue/pq_l2_cache.h
@@ -15,17 +15,17 @@ namespace NPQ {
static const ui32 MAX_BLOB_SIZE = 8_MB;
struct TL2Counters {
- NMonitoring::TDynamicCounters::TCounterPtr TotalSize;
- NMonitoring::TDynamicCounters::TCounterPtr TotalCount;
- NMonitoring::TDynamicCounters::TCounterPtr Hits;
- NMonitoring::TDynamicCounters::TCounterPtr Misses;
- NMonitoring::TDynamicCounters::TCounterPtr Touches;
- NMonitoring::TDynamicCounters::TCounterPtr Evictions;
- NMonitoring::TDynamicCounters::TCounterPtr Used;
- NMonitoring::TDynamicCounters::TCounterPtr Unused;
- NMonitoring::TDynamicCounters::TCounterPtr Retention;
-
- TL2Counters(TIntrusivePtr<NMonitoring::TDynamicCounters> group)
+ ::NMonitoring::TDynamicCounters::TCounterPtr TotalSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TotalCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Hits;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Misses;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Touches;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Evictions;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Used;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Unused;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Retention;
+
+ TL2Counters(TIntrusivePtr<::NMonitoring::TDynamicCounters> group)
{
TotalSize = group->GetCounter("NodeCacheSizeBytes", false);
TotalCount = group->GetCounter("NodeCacheSizeBlobs", false);
@@ -77,7 +77,7 @@ public:
return NKikimrServices::TActivity::PERSQUEUE_CACHE_L2_ACTOR;
}
- TPersQueueCacheL2(const TCacheL2Parameters& params, TIntrusivePtr<NMonitoring::TDynamicCounters> countersGroup)
+ TPersQueueCacheL2(const TCacheL2Parameters& params, TIntrusivePtr<::NMonitoring::TDynamicCounters> countersGroup)
: Cache(1_TB / MAX_BLOB_SIZE) // It's some "much bigger then we need" size here.
, MaxSize(ClampMinSize(params.MaxSizeMB * 1_MB))
, CurrentSize(0)
diff --git a/ydb/core/persqueue/pq_l2_service.h b/ydb/core/persqueue/pq_l2_service.h
index a9c5eefd16..40a6cd85c5 100644
--- a/ydb/core/persqueue/pq_l2_service.h
+++ b/ydb/core/persqueue/pq_l2_service.h
@@ -19,7 +19,7 @@ struct TCacheL2Parameters {
TDuration KeepTime;
};
-IActor* CreateNodePersQueueL2Cache(const TCacheL2Parameters&, TIntrusivePtr<NMonitoring::TDynamicCounters>);
+IActor* CreateNodePersQueueL2Cache(const TCacheL2Parameters&, TIntrusivePtr<::NMonitoring::TDynamicCounters>);
//
diff --git a/ydb/core/persqueue/read_balancer.cpp b/ydb/core/persqueue/read_balancer.cpp
index 9c7f1e5c88..21528ad6d6 100644
--- a/ydb/core/persqueue/read_balancer.cpp
+++ b/ydb/core/persqueue/read_balancer.cpp
@@ -183,17 +183,17 @@ bool TPersQueueReadBalancer::OnRenderAppHtmlPage(NMon::TEvRemoteHttpInfo::TPtr e
TString TPersQueueReadBalancer::GenerateStat() {
TStringStream str;
HTML(str) {
- H2() {str << "PersQueueReadBalancer Tablet";}
- H3() {str << "Topic: " << Topic;}
- H3() {str << "Generation: " << Generation;}
- H3() {str << "Inited: " << Inited;}
- H3() {str << "ActivePipes: " << PipesInfo.size();}
+ TAG(TH2) {str << "PersQueueReadBalancer Tablet";}
+ TAG(TH3) {str << "Topic: " << Topic;}
+ TAG(TH3) {str << "Generation: " << Generation;}
+ TAG(TH3) {str << "Inited: " << Inited;}
+ TAG(TH3) {str << "ActivePipes: " << PipesInfo.size();}
if (Inited) {
- H3() {str << "Active partitions: " << NumActiveParts;}
- H3() {str << "[Total/Max/Avg]WriteSpeedSec: " << TotalAvgSpeedSec << "/" << MaxAvgSpeedSec << "/" << TotalAvgSpeedSec / NumActiveParts;}
- H3() {str << "[Total/Max/Avg]WriteSpeedMin: " << TotalAvgSpeedMin << "/" << MaxAvgSpeedMin << "/" << TotalAvgSpeedMin / NumActiveParts;}
- H3() {str << "[Total/Max/Avg]WriteSpeedHour: " << TotalAvgSpeedHour << "/" << MaxAvgSpeedHour << "/" << TotalAvgSpeedHour / NumActiveParts;}
- H3() {str << "[Total/Max/Avg]WriteSpeedDay: " << TotalAvgSpeedDay << "/" << MaxAvgSpeedDay << "/" << TotalAvgSpeedDay / NumActiveParts;}
+ TAG(TH3) {str << "Active partitions: " << NumActiveParts;}
+ TAG(TH3) {str << "[Total/Max/Avg]WriteSpeedSec: " << TotalAvgSpeedSec << "/" << MaxAvgSpeedSec << "/" << TotalAvgSpeedSec / NumActiveParts;}
+ TAG(TH3) {str << "[Total/Max/Avg]WriteSpeedMin: " << TotalAvgSpeedMin << "/" << MaxAvgSpeedMin << "/" << TotalAvgSpeedMin / NumActiveParts;}
+ TAG(TH3) {str << "[Total/Max/Avg]WriteSpeedHour: " << TotalAvgSpeedHour << "/" << MaxAvgSpeedHour << "/" << TotalAvgSpeedHour / NumActiveParts;}
+ TAG(TH3) {str << "[Total/Max/Avg]WriteSpeedDay: " << TotalAvgSpeedDay << "/" << MaxAvgSpeedDay << "/" << TotalAvgSpeedDay / NumActiveParts;}
}
UL_CLASS("nav nav-tabs") {
diff --git a/ydb/core/persqueue/sourceid.cpp b/ydb/core/persqueue/sourceid.cpp
index a63b2f6f70..01ddfa653d 100644
--- a/ydb/core/persqueue/sourceid.cpp
+++ b/ydb/core/persqueue/sourceid.cpp
@@ -320,9 +320,12 @@ void TSourceIdStorage::LoadProtoSourceIdInfo(const TString& key, const TString&
void TSourceIdStorage::RegisterSourceIdInfo(const TString& sourceId, TSourceIdInfo&& sourceIdInfo, bool load) {
auto it = InMemorySourceIds.find(sourceId);
if (it != InMemorySourceIds.end()) {
- Y_VERIFY(!load);
- const auto res = SourceIdsByOffset.erase(std::make_pair(it->second.Offset, sourceId));
- Y_VERIFY(res == 1);
+ if (!load || it->second.Offset < sourceIdInfo.Offset) {
+ const auto res = SourceIdsByOffset.erase(std::make_pair(it->second.Offset, sourceId));
+ Y_VERIFY(res == 1);
+ } else {
+ return;
+ }
}
const auto offset = sourceIdInfo.Offset;
diff --git a/ydb/core/persqueue/subscriber.h b/ydb/core/persqueue/subscriber.h
index 7bbfe41e1f..708b14ff86 100644
--- a/ydb/core/persqueue/subscriber.h
+++ b/ydb/core/persqueue/subscriber.h
@@ -68,7 +68,9 @@ struct TReadInfo {
const ui32 partition,
TUserInfo* ui,
const ui64 dst,
- const ui64 sizeLag
+ const ui64 sizeLag,
+ const TActorId& tablet,
+ const NKikimrPQ::TPQTabletConfig::EMeteringMode meteringMode
);
TReadAnswer FormAnswer(
@@ -77,10 +79,13 @@ struct TReadInfo {
const ui32 partition,
TUserInfo* ui,
const ui64 dst,
- const ui64 sizeLag
+ const ui64 sizeLag,
+ const TActorId& tablet,
+ const NKikimrPQ::TPQTabletConfig::EMeteringMode meteringMode
+
) {
TEvPQ::TEvBlobResponse response(0, TVector<TRequestedBlob>());
- return FormAnswer(ctx, response, endOffset, partition, ui, dst, sizeLag);
+ return FormAnswer(ctx, response, endOffset, partition, ui, dst, sizeLag, tablet, meteringMode);
}
};
diff --git a/ydb/core/persqueue/user_info.cpp b/ydb/core/persqueue/user_info.cpp
index aa308457ea..cb0aa26de4 100644
--- a/ydb/core/persqueue/user_info.cpp
+++ b/ydb/core/persqueue/user_info.cpp
@@ -160,13 +160,25 @@ TUserInfo& TUsersInfoStorage::Create(
burst = Config.GetPartitionConfig().GetBurstSize() * 2;
speed = Config.GetPartitionConfig().GetWriteSpeedInBytesPerSecond() * 2;
}
+
+ TString defaultServiceType = AppData(ctx)->PQConfig.GetDefaultClientServiceType().GetName();
+ TString userServiceType = "";
+ for (ui32 i = 0; i < Config.ReadRulesSize(); ++i) {
+ if (Config.GetReadRules(i) == user) {
+ userServiceType = Config.ReadRuleServiceTypesSize() > i ? Config.GetReadRuleServiceTypes(i) : "";
+ break;
+ }
+ }
+
+ bool meterRead = userServiceType.empty() || userServiceType == defaultServiceType;
+
auto result = UsersInfo.emplace(
std::piecewise_construct,
std::forward_as_tuple(user),
std::forward_as_tuple(
ctx, CreateReadSpeedLimiter(user), user, readRuleGeneration, important, TopicConverter, Partition,
session, gen, step, offset, readOffsetRewindSum, DCId, readFromTimestamp, CloudId, DbId, FolderId,
- burst, speed
+ meterRead, burst, speed
)
);
Y_VERIFY(result.second);
diff --git a/ydb/core/persqueue/user_info.h b/ydb/core/persqueue/user_info.h
index 214404ddaa..35cc66125f 100644
--- a/ydb/core/persqueue/user_info.h
+++ b/ydb/core/persqueue/user_info.h
@@ -4,6 +4,7 @@
#include "subscriber.h"
#include "percentile_counter.h"
#include "read_speed_limiter.h"
+#include "metering_sink.h"
#include <ydb/core/base/counters.h>
#include <ydb/core/protos/counters_pq.pb.h>
@@ -92,8 +93,7 @@ public:
return QuotedTime;
}
- void UpdateConfig(const ui64 maxBurst, const ui64 speedPerSecond)
- {
+ void UpdateConfig(const ui64 maxBurst, const ui64 speedPerSecond) {
SpeedPerSecond = speedPerSecond;
MaxBurst = maxBurst;
AvailableSize = maxBurst;
@@ -114,7 +114,6 @@ public:
ui64 GetAvailableAvgSec(const TInstant& timestamp) {
Update(timestamp);
return AvgSec.GetAvg();
-
}
ui64 GetAvailableAvgMin(const TInstant& timestamp) {
@@ -201,6 +200,7 @@ struct TUserInfo {
std::shared_ptr<TPercentileCounter> ReadTimeLag;
bool DoInternalRead = false;
+ bool MeterRead = true;
bool WriteInProgress = false;
@@ -229,7 +229,8 @@ struct TUserInfo {
}
void ReadDone(const TActorContext& ctx, const TInstant& now, ui64 readSize, ui32 readCount,
- const TString& clientDC) {
+ const TString& clientDC, const TActorId& tablet) {
+ Y_UNUSED(tablet);
if (BytesRead && !clientDC.empty()) {
if (BytesRead)
BytesRead.Inc(readSize);
@@ -269,7 +270,7 @@ struct TUserInfo {
const ui64 readRuleGeneration, const bool important, const NPersQueue::TTopicConverterPtr& topicConverter,
const ui32 partition, const TString &session, ui32 gen, ui32 step, i64 offset, const ui64 readOffsetRewindSum,
const TString& dcId, TInstant readFromTimestamp,
- const TString& cloudId, const TString& dbId, const TString& folderId,
+ const TString& cloudId, const TString& dbId, const TString& folderId, bool meterRead,
ui64 burst = 1'000'000'000, ui64 speed = 1'000'000'000
)
: ReadSpeedLimiter(std::move(readSpeedLimiter))
@@ -308,6 +309,7 @@ struct TUserInfo {
{TDuration::Hours(1), 2000}, {TDuration::Days(1), 2000}}
, WriteLagMs(TDuration::Minutes(1), 100)
, DoInternalRead(user != CLIENTID_WITHOUT_CONSUMER)
+ , MeterRead(meterRead)
{
if (AppData(ctx)->Counters) {
if (AppData()->PQConfig.GetTopicsAreFirstClassCitizen()) {
diff --git a/ydb/core/persqueue/ut/CMakeLists.txt b/ydb/core/persqueue/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/persqueue/ut/CMakeLists.txt
+++ b/ydb/core/persqueue/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/persqueue/ut_slow/CMakeLists.txt b/ydb/core/persqueue/ut_slow/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/persqueue/ut_slow/CMakeLists.txt
+++ b/ydb/core/persqueue/ut_slow/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/persqueue/working_time_counter.h b/ydb/core/persqueue/working_time_counter.h
index 4f4d81d263..78e75a2685 100644
--- a/ydb/core/persqueue/working_time_counter.h
+++ b/ydb/core/persqueue/working_time_counter.h
@@ -11,11 +11,11 @@ namespace NPQ {
class TWorkingTimeCounter {
private:
bool IsInWorkingState;
- NMonitoring::TDynamicCounters::TCounterPtr WorkingTimeMicroSec;
+ ::NMonitoring::TDynamicCounters::TCounterPtr WorkingTimeMicroSec;
TInstant LastUpdateTimestamp;
public:
- TWorkingTimeCounter(NMonitoring::TDynamicCounters::TCounterPtr counter)
+ TWorkingTimeCounter(::NMonitoring::TDynamicCounters::TCounterPtr counter)
: IsInWorkingState(false)
, WorkingTimeMicroSec(counter)
{}
@@ -36,7 +36,7 @@ public:
}
}
- void SetCounter(NMonitoring::TDynamicCounterPtr counter,
+ void SetCounter(::NMonitoring::TDynamicCounterPtr counter,
const TVector<std::pair<TString, TString>>& subgroups,
const std::tuple<TString, TString, bool>& expiring) {
for (const auto& subgroup : subgroups) {
diff --git a/ydb/core/protos/CMakeLists.txt b/ydb/core/protos/CMakeLists.txt
index e289139a55..a5b72ef56b 100644
--- a/ydb/core/protos/CMakeLists.txt
+++ b/ydb/core/protos/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(out)
add_library(ydb-core-protos)
set_property(TARGET ydb-core-protos PROPERTY
diff --git a/ydb/core/protos/config.proto b/ydb/core/protos/config.proto
index 28ffdfb058..e5dab0501f 100644
--- a/ydb/core/protos/config.proto
+++ b/ydb/core/protos/config.proto
@@ -608,6 +608,9 @@ message TGRpcConfig {
optional bool SkipSchemeCheck = 24 [default = false];
+ repeated string RatelimiterServicesEnabled = 25;
+ repeated string RatelimiterServicesDisabled = 26;
+
// server socket options
optional bool KeepAliveEnable = 100 [default = true]; // SO_KEEPALIVE
optional uint32 KeepAliveIdleTimeoutTriggerSec = 101 [default = 90]; // TCP_KEEPIDLE
@@ -689,8 +692,8 @@ message TFeatureFlags {
optional bool EnableNotNullColumns = 54 [default = true];
optional bool EnableTtlOnAsyncIndexedTables = 55 [default = true];
optional bool EnableBulkUpsertToAsyncIndexedTables = 56 [default = true];
- optional bool EnableNodeBrokerSingleDomainMode = 57 [default = false];
- optional bool EnableKqpSessionActor = 58 [default = true];
+ optional bool EnableNodeBrokerSingleDomainMode = 57 [default = true];
+ optional bool EnableKqpSessionActor = 58 [default = false];
// Dangerous settings we don't want in the public api unless required
optional bool EnablePublicApiExternalBlobs = 59 [default = false];
optional bool EnablePublicApiKeepInMemory = 60 [default = false];
@@ -702,6 +705,8 @@ message TFeatureFlags {
optional bool EnableKqpScanQueryStreamLookup = 66 [default = false];
optional bool EnableKqpScanQueryMultipleOlapShardsReads = 67 [default = false];
optional bool EnablePredicateExtractForDataQueries = 68 [default = false];
+ optional bool EnableMoveIndex = 70 [default = false];
+ optional bool EnableNotNullDataColumns = 73 [default = false];
}
@@ -1046,7 +1051,7 @@ message TTableServiceConfig {
}
message TSessionBalancerSettings {
- optional bool Enabled = 1 [default = true];
+ optional bool Enabled = 1 [default = false];
enum EEnableTier {
TIER_DISABLED = 1;
@@ -1093,7 +1098,7 @@ message TTableServiceConfig {
optional uint32 BoardPublishIntervalMs = 10 [default = 1000];
optional uint32 BoardLookupIntervalMs = 11 [default = 30000];
- optional EEnableTier EnableTier = 12 [ default = TIER_DISABLED ];
+ optional EEnableTier EnableTier = 12 [ default = TIER_ENABLED_FOR_SESSIONS_WITH_SUPPORT ];
optional EBalancingStrategy Strategy = 13 [ default = BALANCE_BY_COUNT ];
optional bool SupportRemoteSessionCreation = 14 [ default = false ];
}
@@ -1412,6 +1417,7 @@ message THiveConfig {
optional EHiveNodeSelectStrategy NodeSelectStrategy = 45 [default = HIVE_NODE_SELECT_STRATEGY_RANDOM_MIN_7P];
optional bool CheckMoveExpediency = 46 [default = true];
optional uint64 StoragePoolFreshPeriod = 47 [default = 60000]; // milliseconds
+ optional string PoolsToMonitorForUsage = 48 [default = "System,User,IC"];
}
message TDataShardConfig {
diff --git a/ydb/core/protos/flat_scheme_op.proto b/ydb/core/protos/flat_scheme_op.proto
index 2db6d7e036..ea6856e61f 100644
--- a/ydb/core/protos/flat_scheme_op.proto
+++ b/ydb/core/protos/flat_scheme_op.proto
@@ -867,6 +867,7 @@ message TS3Settings {
optional string ProxyHost = 9;
optional uint32 ProxyPort = 10;
optional EScheme ProxyScheme = 11;
+ optional string Region = 12;
message TLimits {
optional uint32 ReadBatchSize = 1 [default = 8388608]; // 8 MB
diff --git a/ydb/core/protos/kqp_physical.proto b/ydb/core/protos/kqp_physical.proto
index 2bf8943a35..f97d2240ff 100644
--- a/ydb/core/protos/kqp_physical.proto
+++ b/ydb/core/protos/kqp_physical.proto
@@ -6,6 +6,7 @@ option java_package = "ru.yandex.kikimr.proto";
import "ydb/library/mkql_proto/protos/minikql.proto";
import "ydb/library/yql/dq/proto/dq_tasks.proto";
+import "ydb/public/api/protos/ydb_value.proto";
message TKqpPhyExternalBinding {
}
@@ -146,6 +147,9 @@ message TKqpPhyOpReadOlapRanges {
// Sorted sign which indicates that read operation should return a sorted data out of the
// dedicated actors or we can relax constraints here and return unsorted data.
bool Sorted = 6;
+
+ // Stores type of read result from Column Shard
+ Ydb.Type ResultType = 7;
}
message TKqpPhyOpReadRanges {
diff --git a/ydb/core/protos/msgbus_pq.proto b/ydb/core/protos/msgbus_pq.proto
index 3431d4bd6f..6cec1d738b 100644
--- a/ydb/core/protos/msgbus_pq.proto
+++ b/ydb/core/protos/msgbus_pq.proto
@@ -70,6 +70,9 @@ message TPersQueuePartitionRequest {
optional bytes ExplicitHash = 14;
optional bool ExternalOperation = 15 [ default = false ];
+
+ // Do not reject request when quota exceeded
+ optional bool IgnoreQuotaDeadline = 16 [ default = false ];
}
message TCmdUpdateWriteTimestamp {
diff --git a/ydb/core/protos/node_whiteboard.proto b/ydb/core/protos/node_whiteboard.proto
index 13f5cf0bdf..5bd23adec0 100644
--- a/ydb/core/protos/node_whiteboard.proto
+++ b/ydb/core/protos/node_whiteboard.proto
@@ -68,12 +68,14 @@ message TTabletStateInfo {
message TEvTabletStateRequest {
optional uint64 ChangedSince = 1;
+ optional string GroupBy = 20; // it's either empty or "Type,State" for now
}
message TEvTabletStateResponse {
repeated TTabletStateInfo TabletStateInfo = 1;
- optional uint64 ResponseTime = 2;
- optional uint32 ResponseDuration = 3; // filled during collect
+ optional uint64 ResponseTime = 2; // ms, filled during processing and merging
+ optional uint64 ResponseDuration = 3; // us, filled during collect
+ optional uint64 ProcessDuration = 4; // us, filled during processing
}
message TNodeStateInfo {
diff --git a/ydb/core/protos/pqconfig.proto b/ydb/core/protos/pqconfig.proto
index 0e52801469..466b72ef1b 100644
--- a/ydb/core/protos/pqconfig.proto
+++ b/ydb/core/protos/pqconfig.proto
@@ -55,7 +55,6 @@ message TPQConfig {
optional uint32 ReadLatencyBigMs = 23 [default = 550];
optional uint32 ReadLatencyFromDiskBigMs = 28 [default = 1000];
-
message TQuotingConfig {
optional bool EnableQuoting = 1 [default = true];
optional string QuotersDirectoryPath = 2 [default = ""];
@@ -109,6 +108,15 @@ message TPQConfig {
repeated uint32 ValidWriteSpeedLimitsKbPerSec = 34;
+ message TValidRetentionLimit {
+ optional uint32 MinPeriodSeconds = 1;
+ optional uint32 MaxPeriodSeconds = 2;
+ optional uint64 MinStorageMegabytes = 3;
+ optional uint64 MaxStorageMegabytes = 4;
+ }
+
+ repeated TValidRetentionLimit ValidRetentionLimits = 48;
+
message TReadMeteringConfig {
message TPricing {
optional string Name = 1 [default = "unknown"];
@@ -118,6 +126,7 @@ message TPQConfig {
}
message TBillingMeteringConfig {
+ // Enables billing & allows to use MeteringMode (see below)
optional bool Enabled = 1 [default = false];
optional uint64 FlushIntervalSec = 2 [default = 30];
optional TReadMeteringConfig Read = 3;
@@ -127,16 +136,20 @@ message TPQConfig {
optional NKikimrNodeLimits.TNodeLimitsConfig.TPersQueueNodeConfig PersQueueNodeConfig = 36;
- optional bool EnableProtoSourceIdInfo = 37 [default = false];
+ optional bool EnableProtoSourceIdInfo = 37 [default = true];
optional string Database = 38;
message TClientServiceType {
- optional string Name = 1 [default = "data-transfer"];
+ optional string Name = 1 [default = "data-streams"];
optional string ReadPricingName = 2;
optional uint32 MaxReadRulesCountPerTopic = 3 [default = 0]; // 0 means no limit. If you want to allow only zero count, then do not specify ClientServiceType.
+
+ repeated string PasswordHashes = 4; //if one password matches, then user can use this type
}
+ optional bool ForceClientServiceTypePasswordCheck = 49 [default = false];
+
repeated TClientServiceType ClientServiceType = 39;
optional TClientServiceType DefaultClientServiceType = 40;
optional bool DisallowDefaultClientServiceType = 43 [default = false];
@@ -292,6 +305,12 @@ message TPQTabletConfig {
optional TPartitionKeyRange KeyRange = 2;
}
repeated TPartition Partitions = 31; // filled by schemeshard
+
+ enum EMeteringMode {
+ METERING_MODE_RESERVED_CAPACITY = 0;
+ METERING_MODE_REQUEST_UNITS = 1;
+ }
+ optional EMeteringMode MeteringMode = 34;
}
message TMessageGroupInfo {
diff --git a/ydb/core/protos/services.proto b/ydb/core/protos/services.proto
index 44c76870dc..2cb90de356 100644
--- a/ydb/core/protos/services.proto
+++ b/ydb/core/protos/services.proto
@@ -155,8 +155,10 @@ enum EServiceKikimr {
GRPC_PROXY_NO_CONNECT_ACCESS = 417;
READ_TABLE_API = 414; // deprecated, use RPC_REQUEST
RPC_REQUEST = 416;
+
// KEY VALUE section
KEYVALUE = 420;
+ KEYVALUE_GC = 421;
WILSON = 430;
@@ -896,5 +898,8 @@ message TActivity {
BLOB_DEPOT_ACTOR = 570;
BLOB_DEPOT_AGENT = 571;
KQP_STREAM_LOOKUP_ACTOR = 572;
+ BS_STORAGE_STATS_ACTOR = 573;
+ DS_LOAD_ACTOR = 574;
+ PQ_META_CACHE = 575;
};
};
diff --git a/ydb/core/protos/ssa.proto b/ydb/core/protos/ssa.proto
index 88eaeee8b4..de4eeabe0a 100644
--- a/ydb/core/protos/ssa.proto
+++ b/ydb/core/protos/ssa.proto
@@ -19,6 +19,7 @@ option java_package = "ru.yandex.kikimr.proto";
message TProgram {
message TColumn {
optional uint64 Id = 1;
+ optional string Name = 2;
}
message TConstant {
@@ -98,12 +99,12 @@ message TProgram {
message TAggregateAssignment {
enum EAggregateFunction {
AGG_UNSPECIFIED = 0;
- AGG_ANY = 1;
+ AGG_SOME = 1;
AGG_COUNT = 2;
AGG_MIN = 3;
AGG_MAX = 4;
AGG_SUM = 5;
- AGG_AVG = 6;
+ //AGG_AVG = 6;
//AGG_VAR = 7;
//AGG_COVAR = 8;
//AGG_STDDEV = 9;
diff --git a/ydb/core/protos/tx_datashard.proto b/ydb/core/protos/tx_datashard.proto
index 21f62e903e..af2b61ff3d 100644
--- a/ydb/core/protos/tx_datashard.proto
+++ b/ydb/core/protos/tx_datashard.proto
@@ -150,6 +150,11 @@ message TKqpTransaction {
optional uint32 Type = 3;
}
+ message TColumnWriteMeta {
+ optional TColumnMeta Column = 1;
+ optional uint32 MaxValueSizeBytes = 2;
+ }
+
message TTableKeyRange {
// ordered lists of non-intersecting ranges and points
repeated NKikimrTx.TKeyRange KeyRanges = 1;
@@ -185,6 +190,8 @@ message TKqpTransaction {
message TWriteOpMeta {
optional TKeyRange Range = 1;
+ repeated TColumnWriteMeta Columns = 3;
+ optional bool IsPureEraseOp = 4;
}
optional TTableMeta Table = 1;
@@ -214,6 +221,7 @@ message TKqpTransaction {
optional EScanDataFormat DataFormat = 9;
optional NKikimrSSA.TOlapProgram OlapProgram = 10; // Currently only for OLAP tables
optional bool Sorted = 11;
+ repeated TColumnMeta ResultColumns = 12;
}
optional EKqpTransactionType Type = 1;
diff --git a/ydb/core/quoter/CMakeLists.txt b/ydb/core/quoter/CMakeLists.txt
index f3fe2f9f66..44be50d286 100644
--- a/ydb/core/quoter/CMakeLists.txt
+++ b/ydb/core/quoter/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(quoter_service_bandwidth_test)
+add_subdirectory(ut)
add_library(ydb-core-quoter)
target_link_libraries(ydb-core-quoter PUBLIC
diff --git a/ydb/core/quoter/kesus_quoter_proxy.cpp b/ydb/core/quoter/kesus_quoter_proxy.cpp
index 4d2d20691e..cc4a854e99 100644
--- a/ydb/core/quoter/kesus_quoter_proxy.cpp
+++ b/ydb/core/quoter/kesus_quoter_proxy.cpp
@@ -76,12 +76,12 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
public:
TDoubleCounter() = default;
- TDoubleCounter(NMonitoring::TDynamicCounters::TCounterPtr counter)
+ TDoubleCounter(::NMonitoring::TDynamicCounters::TCounterPtr counter)
: Counter(std::move(counter))
{
}
- TDoubleCounter& operator=(NMonitoring::TDynamicCounters::TCounterPtr counter) {
+ TDoubleCounter& operator=(::NMonitoring::TDynamicCounters::TCounterPtr counter) {
Counter = std::move(counter);
return *this;
}
@@ -97,19 +97,19 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
}
private:
- NMonitoring::TDynamicCounters::TCounterPtr Counter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Counter;
double Remainder = 0.0;
};
- std::vector<NMonitoring::TDynamicCounters::TCounterPtr> ParentConsumed; // Aggregated consumed counters for parent resources.
- NMonitoring::TDynamicCounters::TCounterPtr QueueSize;
- NMonitoring::TDynamicCounters::TCounterPtr QueueWeight;
- NMonitoring::TDynamicCounters::TCounterPtr Dropped;
- NMonitoring::TDynamicCounters::TCounterPtr Accumulated;
+ std::vector<::NMonitoring::TDynamicCounters::TCounterPtr> ParentConsumed; // Aggregated consumed counters for parent resources.
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr QueueWeight;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Dropped;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Accumulated;
TDoubleCounter AllocatedOffline;
TDoubleCounter ReceivedFromKesus;
- TCounters(const TString& resource, const NMonitoring::TDynamicCounterPtr& quoterCounters) {
+ TCounters(const TString& resource, const ::NMonitoring::TDynamicCounterPtr& quoterCounters) {
if (!quoterCounters) {
return;
}
@@ -133,7 +133,7 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
}
void AddConsumed(ui64 consumed) {
- for (NMonitoring::TDynamicCounters::TCounterPtr& counter : ParentConsumed) {
+ for (::NMonitoring::TDynamicCounters::TCounterPtr& counter : ParentConsumed) {
*counter += consumed;
}
}
@@ -141,7 +141,7 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
TCounters Counters;
- explicit TResourceState(const TString& resource, const NMonitoring::TDynamicCounterPtr& quoterCounters)
+ explicit TResourceState(const TString& resource, const ::NMonitoring::TDynamicCounterPtr& quoterCounters)
: Resource(resource)
, Counters(resource, quoterCounters)
{}
@@ -265,12 +265,12 @@ class TKesusQuoterProxy : public TActorBootstrapped<TKesusQuoterProxy> {
THashMap<TDuration, THolder<TEvPrivate::TEvOfflineResourceAllocation>> OfflineAllocationEvSchedule;
struct TCounters {
- NMonitoring::TDynamicCounterPtr QuoterCounters;
+ ::NMonitoring::TDynamicCounterPtr QuoterCounters;
- NMonitoring::TDynamicCounters::TCounterPtr Disconnects;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Disconnects;
void Init(const TString& quoterPath) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> serviceCounters = GetServiceCounters(AppData()->Counters, QUOTER_SERVICE_COUNTER_SENSOR_NAME);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> serviceCounters = GetServiceCounters(AppData()->Counters, QUOTER_SERVICE_COUNTER_SENSOR_NAME);
if (serviceCounters) {
QuoterCounters = serviceCounters->GetSubgroup(QUOTER_COUNTER_SENSOR_NAME, quoterPath);
Disconnects = QuoterCounters->GetCounter(DISCONNECTS_COUNTER_SENSOR_NAME, true);
diff --git a/ydb/core/quoter/quoter_service.cpp b/ydb/core/quoter/quoter_service.cpp
index b9a1b629f5..b6cb58d2f5 100644
--- a/ydb/core/quoter/quoter_service.cpp
+++ b/ydb/core/quoter/quoter_service.cpp
@@ -364,7 +364,7 @@ TInstant TQuoterService::TimeToGranularity(TInstant rawTime) {
}
void TQuoterService::Bootstrap() {
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = GetServiceCounters(AppData()->Counters, QUOTER_SERVICE_COUNTER_SENSOR_NAME);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = GetServiceCounters(AppData()->Counters, QUOTER_SERVICE_COUNTER_SENSOR_NAME);
Counters.ActiveQuoterProxies = counters->GetCounter("ActiveQuoterProxies", false);
Counters.ActiveProxyResources = counters->GetCounter("ActiveProxyResources", false);
diff --git a/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.txt b/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.txt
+++ b/ydb/core/quoter/quoter_service_bandwidth_test/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/quoter/quoter_service_impl.h b/ydb/core/quoter/quoter_service_impl.h
index d27ea134e1..98eb1525ad 100644
--- a/ydb/core/quoter/quoter_service_impl.h
+++ b/ydb/core/quoter/quoter_service_impl.h
@@ -150,15 +150,15 @@ struct TResource {
TInstant StartStarvationTime = TInstant::Zero();
struct {
- NMonitoring::TDynamicCounters::TCounterPtr Consumed;
- NMonitoring::TDynamicCounters::TCounterPtr Requested;
- NMonitoring::TDynamicCounters::TCounterPtr RequestsCount;
- NMonitoring::TDynamicCounters::TCounterPtr ElapsedMicrosecInStarvation;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Consumed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Requested;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestsCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ElapsedMicrosecInStarvation;
NMonitoring::THistogramPtr RequestQueueTime;
NMonitoring::THistogramPtr RequestTime;
} Counters;
- TResource(ui64 quoterId, ui64 resourceId, const TString& quoter, const TString& resource, const TQuoterServiceConfig &quoterServiceConfig, const NMonitoring::TDynamicCounterPtr& quoterCounters)
+ TResource(ui64 quoterId, ui64 resourceId, const TString& quoter, const TString& resource, const TQuoterServiceConfig &quoterServiceConfig, const ::NMonitoring::TDynamicCounterPtr& quoterCounters)
: QuoterId(quoterId)
, ResourceId(resourceId)
, Quoter(quoter)
@@ -199,17 +199,17 @@ struct TQuoterState {
TMap<TString, TSet<ui32>> WaitingResource; // => requests
struct {
- NMonitoring::TDynamicCounterPtr QuoterCounters;
+ ::NMonitoring::TDynamicCounterPtr QuoterCounters;
} Counters;
TResource& GetOrCreate(ui64 quoterId, ui64 resId, const TString& quoter, const TString& resource, const TQuoterServiceConfig &quoterServiceConfig);
bool Empty();
- void InitCounters(const NMonitoring::TDynamicCounterPtr& serviceCounters) {
+ void InitCounters(const ::NMonitoring::TDynamicCounterPtr& serviceCounters) {
Counters.QuoterCounters = serviceCounters->GetSubgroup(QUOTER_COUNTER_SENSOR_NAME, QuoterName);
}
- TQuoterState(const TString& quoterName, const NMonitoring::TDynamicCounterPtr& serviceCounters)
+ TQuoterState(const TString& quoterName, const ::NMonitoring::TDynamicCounterPtr& serviceCounters)
: QuoterName(quoterName)
{
if (serviceCounters) {
@@ -241,15 +241,15 @@ class TQuoterService : public TActorBootstrapped<TQuoterService> {
TMap<ui64, TDeque<TEvQuota::TProxyStat>> StatsToPublish; // quoterId -> stats
struct {
- NMonitoring::TDynamicCounterPtr ServiceCounters;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveQuoterProxies;
- NMonitoring::TDynamicCounters::TCounterPtr ActiveProxyResources;
- NMonitoring::TDynamicCounters::TCounterPtr KnownLocalResources;
- NMonitoring::TDynamicCounters::TCounterPtr RequestsInFly;
- NMonitoring::TDynamicCounters::TCounterPtr Requests;
- NMonitoring::TDynamicCounters::TCounterPtr ResultOk;
- NMonitoring::TDynamicCounters::TCounterPtr ResultDeadline;
- NMonitoring::TDynamicCounters::TCounterPtr ResultError;
+ ::NMonitoring::TDynamicCounterPtr ServiceCounters;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveQuoterProxies;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveProxyResources;
+ ::NMonitoring::TDynamicCounters::TCounterPtr KnownLocalResources;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestsInFly;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Requests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResultOk;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResultDeadline;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResultError;
NMonitoring::THistogramPtr RequestLatency;
} Counters;
diff --git a/ydb/core/quoter/ut/CMakeLists.txt b/ydb/core/quoter/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/quoter/ut/CMakeLists.txt
+++ b/ydb/core/quoter/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/scheme/CMakeLists.txt b/ydb/core/scheme/CMakeLists.txt
index cd382a8e05..78d15109ff 100644
--- a/ydb/core/scheme/CMakeLists.txt
+++ b/ydb/core/scheme/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-scheme)
target_link_libraries(ydb-core-scheme PUBLIC
diff --git a/ydb/core/scheme/scheme_tabledefs.cpp b/ydb/core/scheme/scheme_tabledefs.cpp
index 100f23ce62..672957e1fc 100644
--- a/ydb/core/scheme/scheme_tabledefs.cpp
+++ b/ydb/core/scheme/scheme_tabledefs.cpp
@@ -19,7 +19,7 @@ bool TTableRange::IsFullRange(ui32 columnsCount) const {
return false;
}
- if (!From.size() == columnsCount) {
+ if (From.size() != columnsCount) {
return false;
}
@@ -32,6 +32,48 @@ bool TTableRange::IsFullRange(ui32 columnsCount) const {
return true;
}
+namespace {
+ // There are many places that use a non-inclusive -inf/+inf
+ // We special case empty keys anyway, so the requirement is temporarily relaxed
+ static constexpr bool RelaxEmptyKeys = true;
+}
+
+const char* TTableRange::IsAmbiguousReason(size_t keyColumnsCount) const noexcept {
+ if (Point) {
+ if (Y_UNLIKELY(From.size() != keyColumnsCount)) {
+ return "Ambiguous table point: does not match key columns count";
+ }
+
+ return nullptr;
+ }
+
+ if (!From) {
+ if (Y_UNLIKELY(!InclusiveFrom) && !RelaxEmptyKeys) {
+ return "Ambiguous table range: empty From must be inclusive";
+ }
+ } else if (From.size() < keyColumnsCount) {
+ if (Y_UNLIKELY(InclusiveFrom)) {
+ return "Ambiguous table range: incomplete From must be non-inclusive (any/+inf is ambiguous otherwise)";
+ }
+ } else if (Y_UNLIKELY(From.size() > keyColumnsCount)) {
+ return "Ambiguous table range: From is too large";
+ }
+
+ if (!To) {
+ if (Y_UNLIKELY(!InclusiveTo && !RelaxEmptyKeys)) {
+ return "Ambiguous table range: empty To must be inclusive";
+ }
+ } else if (To.size() < keyColumnsCount) {
+ if (Y_UNLIKELY(!InclusiveTo)) {
+ return "Ambiguous table range: incomplete To must be inclusive (any/+inf is ambiguous otherwise)";
+ }
+ } else if (Y_UNLIKELY(To.size() > keyColumnsCount)) {
+ return "Ambiguous table range: To is too large";
+ }
+
+ return nullptr;
+}
+
bool TSerializedTableRange::IsEmpty(TConstArrayRef<NScheme::TTypeId> type) const
{
auto cmp = CompareBorders<true, false>(To.GetCells(), From.GetCells(), ToInclusive, FromInclusive, type);
diff --git a/ydb/core/scheme/scheme_tabledefs.h b/ydb/core/scheme/scheme_tabledefs.h
index 1e09a1e723..d7206c301f 100644
--- a/ydb/core/scheme/scheme_tabledefs.h
+++ b/ydb/core/scheme/scheme_tabledefs.h
@@ -17,6 +17,11 @@ namespace NKikimr {
using TSchemaVersion = ui64;
+enum class EColumnTypeConstraint {
+ Nullable,
+ NotNull,
+};
+
// ident for table, must be unique in selected scope
// for global transactions ownerid is tabletid of owning schemeshard and tableid is counter designated by schemeshard
// SysViewInfo is not empty for system views attached to corresponding table
@@ -176,6 +181,12 @@ public:
bool IsEmptyRange(TConstArrayRef<const NScheme::TTypeId> cellTypeIds) const;
bool IsFullRange(ui32 columnsCount) const;
+
+ bool IsAmbiguous(size_t keyColumnsCount) const noexcept {
+ return IsAmbiguousReason(keyColumnsCount) != nullptr;
+ }
+
+ const char* IsAmbiguousReason(size_t keyColumnsCount) const noexcept;
};
class TSerializedTableRange {
diff --git a/ydb/core/scheme/ut/CMakeLists.txt b/ydb/core/scheme/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/scheme/ut/CMakeLists.txt
+++ b/ydb/core/scheme/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/security/CMakeLists.txt b/ydb/core/security/CMakeLists.txt
index 06764f1f99..070ef0911f 100644
--- a/ydb/core/security/CMakeLists.txt
+++ b/ydb/core/security/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-security)
target_link_libraries(ydb-core-security PUBLIC
diff --git a/ydb/core/security/ticket_parser.cpp b/ydb/core/security/ticket_parser.cpp
index 5654a8310b..58e79d644f 100644
--- a/ydb/core/security/ticket_parser.cpp
+++ b/ydb/core/security/ticket_parser.cpp
@@ -24,15 +24,15 @@ class TTicketParser : public TActorBootstrapped<TTicketParser> {
NKikimrProto::TAuthConfig Config;
TString DomainName;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsReceived;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsSuccess;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsErrors;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsErrorsRetryable;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsErrorsPermanent;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsBuiltin;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsLogin;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsCacheHit;
- NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsCacheMiss;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsReceived;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsSuccess;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsErrors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsErrorsRetryable;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsErrorsPermanent;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsBuiltin;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsLogin;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsCacheHit;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CounterTicketsCacheMiss;
NMonitoring::THistogramPtr CounterTicketsBuildTime;
TDuration RefreshPeriod = TDuration::Seconds(1); // how often do we check for ticket freshness/expiration
@@ -572,9 +572,9 @@ public:
}
void Bootstrap(const TActorContext& ctx) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> rootCounters = AppData(ctx)->Counters;
- TIntrusivePtr<NMonitoring::TDynamicCounters> authCounters = GetServiceCounters(rootCounters, "auth");
- NMonitoring::TDynamicCounterPtr counters = authCounters->GetSubgroup("subsystem", "TicketParser");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> rootCounters = AppData(ctx)->Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> authCounters = GetServiceCounters(rootCounters, "auth");
+ ::NMonitoring::TDynamicCounterPtr counters = authCounters->GetSubgroup("subsystem", "TicketParser");
CounterTicketsReceived = counters->GetCounter("TicketsReceived", true);
CounterTicketsSuccess = counters->GetCounter("TicketsSuccess", true);
CounterTicketsErrors = counters->GetCounter("TicketsErrors", true);
diff --git a/ydb/core/security/ut/CMakeLists.txt b/ydb/core/security/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/security/ut/CMakeLists.txt
+++ b/ydb/core/security/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/sys_view/CMakeLists.txt b/ydb/core/sys_view/CMakeLists.txt
index a4ebd7a803..3c1ead061f 100644
--- a/ydb/core/sys_view/CMakeLists.txt
+++ b/ydb/core/sys_view/CMakeLists.txt
@@ -6,6 +6,15 @@
# original buildsystem will not be accepted.
+add_subdirectory(common)
+add_subdirectory(nodes)
+add_subdirectory(partition_stats)
+add_subdirectory(processor)
+add_subdirectory(query_stats)
+add_subdirectory(service)
+add_subdirectory(storage)
+add_subdirectory(tablets)
+add_subdirectory(ut_kqp)
add_library(ydb-core-sys_view)
target_compile_options(ydb-core-sys_view PRIVATE
diff --git a/ydb/core/sys_view/common/events.h b/ydb/core/sys_view/common/events.h
index 3d363b953e..fb4347db61 100644
--- a/ydb/core/sys_view/common/events.h
+++ b/ydb/core/sys_view/common/events.h
@@ -74,7 +74,6 @@ struct TEvSysView {
EvCalculateStorageStatsRequest,
EvCalculateStorageStatsResponse,
- EvScheduleCalculateStorageStatsRequest,
EvEnd,
};
diff --git a/ydb/core/sys_view/partition_stats/CMakeLists.txt b/ydb/core/sys_view/partition_stats/CMakeLists.txt
index 0ae5d8e327..097216d9b4 100644
--- a/ydb/core/sys_view/partition_stats/CMakeLists.txt
+++ b/ydb/core/sys_view/partition_stats/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-sys_view-partition_stats)
target_compile_options(core-sys_view-partition_stats PRIVATE
diff --git a/ydb/core/sys_view/partition_stats/ut/CMakeLists.txt b/ydb/core/sys_view/partition_stats/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/sys_view/partition_stats/ut/CMakeLists.txt
+++ b/ydb/core/sys_view/partition_stats/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/sys_view/processor/processor_impl.cpp b/ydb/core/sys_view/processor/processor_impl.cpp
index f6566b07e3..f3c5437984 100644
--- a/ydb/core/sys_view/processor/processor_impl.cpp
+++ b/ydb/core/sys_view/processor/processor_impl.cpp
@@ -13,11 +13,11 @@ TSysViewProcessor::TSysViewProcessor(const TActorId& tablet, TTabletStorageInfo*
, TTabletExecutedFlat(info, tablet, new NMiniKQL::TMiniKQLFactory)
, TotalInterval(TDuration::Seconds(processorMode == EProcessorMode::FAST ? 1 : 60))
, CollectInterval(TotalInterval / 2)
- , ExternalGroup(new NMonitoring::TDynamicCounters)
+ , ExternalGroup(new ::NMonitoring::TDynamicCounters)
{
- InternalGroups["kqp_serverless"] = new NMonitoring::TDynamicCounters;
- InternalGroups["tablets_serverless"] = new NMonitoring::TDynamicCounters;
- InternalGroups["grpc_serverless"] = new NMonitoring::TDynamicCounters;
+ InternalGroups["kqp_serverless"] = new ::NMonitoring::TDynamicCounters;
+ InternalGroups["tablets_serverless"] = new ::NMonitoring::TDynamicCounters;
+ InternalGroups["grpc_serverless"] = new ::NMonitoring::TDynamicCounters;
}
void TSysViewProcessor::OnDetach(const TActorContext& ctx) {
diff --git a/ydb/core/sys_view/processor/processor_impl.h b/ydb/core/sys_view/processor/processor_impl.h
index 1211671c30..3867fd457a 100644
--- a/ydb/core/sys_view/processor/processor_impl.h
+++ b/ydb/core/sys_view/processor/processor_impl.h
@@ -354,8 +354,8 @@ private:
TString FolderId;
TString DatabaseId;
- NMonitoring::TDynamicCounterPtr ExternalGroup;
- std::unordered_map<TString, NMonitoring::TDynamicCounterPtr> InternalGroups;
+ ::NMonitoring::TDynamicCounterPtr ExternalGroup;
+ std::unordered_map<TString, ::NMonitoring::TDynamicCounterPtr> InternalGroups;
using TDbCountersServiceMap = std::unordered_map<NKikimrSysView::EDbCountersService,
NKikimr::NSysView::TDbServiceCounters>;
diff --git a/ydb/core/sys_view/query_stats/CMakeLists.txt b/ydb/core/sys_view/query_stats/CMakeLists.txt
index 4feaebd532..37e706258a 100644
--- a/ydb/core/sys_view/query_stats/CMakeLists.txt
+++ b/ydb/core/sys_view/query_stats/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-sys_view-query_stats)
target_compile_options(core-sys_view-query_stats PRIVATE
diff --git a/ydb/core/sys_view/query_stats/ut/CMakeLists.txt b/ydb/core/sys_view/query_stats/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/sys_view/query_stats/ut/CMakeLists.txt
+++ b/ydb/core/sys_view/query_stats/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/sys_view/service/CMakeLists.txt b/ydb/core/sys_view/service/CMakeLists.txt
index 08d734ec0e..1d740946e0 100644
--- a/ydb/core/sys_view/service/CMakeLists.txt
+++ b/ydb/core/sys_view/service/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-sys_view-service)
target_link_libraries(core-sys_view-service PUBLIC
diff --git a/ydb/core/sys_view/service/ext_counters.cpp b/ydb/core/sys_view/service/ext_counters.cpp
index bebbd04786..9b6a8eb314 100644
--- a/ydb/core/sys_view/service/ext_counters.cpp
+++ b/ydb/core/sys_view/service/ext_counters.cpp
@@ -9,7 +9,7 @@ namespace NSysView {
class TExtCountersUpdaterActor
: public TActorBootstrapped<TExtCountersUpdaterActor>
{
- using TCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
const TExtCountersConfig Config;
diff --git a/ydb/core/sys_view/service/ut/CMakeLists.txt b/ydb/core/sys_view/service/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/sys_view/service/ut/CMakeLists.txt
+++ b/ydb/core/sys_view/service/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/sys_view/ut_counters.cpp b/ydb/core/sys_view/ut_counters.cpp
index 7be8de4eed..51bc0c4965 100644
--- a/ydb/core/sys_view/ut_counters.cpp
+++ b/ydb/core/sys_view/ut_counters.cpp
@@ -81,10 +81,10 @@ Y_UNIT_TEST_SUITE(DbCounters) {
for (size_t iter = 0; iter < 30; ++iter) {
Cerr << "iteration " << iter << Endl;
- auto checkTabletCounters = [] (NMonitoring::TDynamicCounterPtr databaseGroup,
+ auto checkTabletCounters = [] (::NMonitoring::TDynamicCounterPtr databaseGroup,
const char* databaseName)
{
- auto checkCounter = [databaseName] (NMonitoring::TDynamicCounterPtr group,
+ auto checkCounter = [databaseName] (::NMonitoring::TDynamicCounterPtr group,
const char* sensorName, bool isDerivative)
{
auto value = group->GetCounter(sensorName, isDerivative)->Val();
diff --git a/ydb/core/sys_view/ut_kqp.cpp b/ydb/core/sys_view/ut_kqp.cpp
index 7a44050218..bdc326c543 100644
--- a/ydb/core/sys_view/ut_kqp.cpp
+++ b/ydb/core/sys_view/ut_kqp.cpp
@@ -846,7 +846,7 @@ Y_UNIT_TEST_SUITE(SystemView) {
UNIT_ASSERT_VALUES_EQUAL(streamPart.GetStatus(), EStatus::SUCCESS);
Cerr << "SUCCESS" << Endl;
} else {
- UNIT_ASSERT_VALUES_EQUAL(streamPart.GetStatus(), EStatus::GENERIC_ERROR);
+ UNIT_ASSERT_VALUES_EQUAL(streamPart.GetStatus(), EStatus::OVERLOADED);
Cerr << "FAIL " << streamPart.GetIssues().ToString() << Endl;
}
}
diff --git a/ydb/core/sys_view/ut_kqp/CMakeLists.txt b/ydb/core/sys_view/ut_kqp/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/sys_view/ut_kqp/CMakeLists.txt
+++ b/ydb/core/sys_view/ut_kqp/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tablet/CMakeLists.txt b/ydb/core/tablet/CMakeLists.txt
index d027132427..4474244f99 100644
--- a/ydb/core/tablet/CMakeLists.txt
+++ b/ydb/core/tablet/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-tablet)
target_link_libraries(ydb-core-tablet PUBLIC
diff --git a/ydb/core/tablet/node_tablet_monitor.cpp b/ydb/core/tablet/node_tablet_monitor.cpp
index 8bb34e7ea0..15d147575c 100644
--- a/ydb/core/tablet/node_tablet_monitor.cpp
+++ b/ydb/core/tablet/node_tablet_monitor.cpp
@@ -55,7 +55,7 @@ public:
Sort(NodesInfo->Nodes.begin(), NodesInfo->Nodes.end());
TStringStream str;
HTML(str) {
- H3() {
+ TAG(TH3) {
str << "Nodes";
}
TABLE_SORTABLE_CLASS("table") {
@@ -82,7 +82,7 @@ public:
}
}
HTML_TAG() {str << "<a href=\"nodetabmon?action=browse_tablets\">All tablets of the cluster</a>";}
- H3() {
+ TAG(TH3) {
str << "State Storages";
}
TABLE_SORTABLE_CLASS("table") {
@@ -339,7 +339,7 @@ public:
}
TStringStream str;
HTML(str) {
- H3() {
+ TAG(TH3) {
str << "Tablets of StateStorage " << StateStorageId;
}
TABLE_CLASS("table table-bordered") {
diff --git a/ydb/core/tablet/node_whiteboard.cpp b/ydb/core/tablet/node_whiteboard.cpp
index 11a2abdfae..46be0f95e0 100644
--- a/ydb/core/tablet/node_whiteboard.cpp
+++ b/ydb/core/tablet/node_whiteboard.cpp
@@ -38,8 +38,8 @@ public:
}
void Bootstrap(const TActorContext &ctx) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> tabletsGroup = GetServiceCounters(AppData(ctx)->Counters, "tablets");
- TIntrusivePtr<NMonitoring::TDynamicCounters> introspectionGroup = tabletsGroup->GetSubgroup("type", "introspection");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> tabletsGroup = GetServiceCounters(AppData(ctx)->Counters, "tablets");
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> introspectionGroup = tabletsGroup->GetSubgroup("type", "introspection");
TabletIntrospectionData.Reset(NTracing::CreateTraceCollection(introspectionGroup));
SystemStateInfo.SetNumberOfCpus(NSystemInfo::NumberOfCpus());
@@ -49,6 +49,13 @@ public:
auto versionCounter = GetServiceCounters(AppData(ctx)->Counters, "utils")->GetSubgroup("revision", version);
*versionCounter->GetCounter("version", false) = 1;
}
+
+ // TODO(t1mursadykov): Add role for static nodes with sys tablets only
+ if (AppData(ctx)->DynamicNameserviceConfig) {
+ if (SelfId().NodeId() <= AppData(ctx)->DynamicNameserviceConfig->MaxStaticNodeId)
+ ctx.Send(ctx.SelfID, new TEvWhiteboard::TEvSystemStateAddRole("Storage"));
+ }
+
SystemStateInfo.SetStartTime(ctx.Now().MilliSeconds());
ProcessStats.Fill(getpid());
if (ProcessStats.CGroupMemLim != 0) {
@@ -616,18 +623,38 @@ protected:
}
void Handle(TEvWhiteboard::TEvTabletStateRequest::TPtr &ev, const TActorContext &ctx) {
+ auto now = TMonotonic::Now();
const auto& request = ev->Get()->Record;
- ui64 changedSince = request.HasChangedSince() ? request.GetChangedSince() : 0;
- TAutoPtr<TEvWhiteboard::TEvTabletStateResponse> response = new TEvWhiteboard::TEvTabletStateResponse();
+ std::unique_ptr<TEvWhiteboard::TEvTabletStateResponse> response = std::make_unique<TEvWhiteboard::TEvTabletStateResponse>();
auto& record = response->Record;
- for (const auto& pr : TabletStateInfo) {
- if (pr.second.GetChangeTime() >= changedSince) {
- NKikimrWhiteboard::TTabletStateInfo &tabletStateInfo = *record.AddTabletStateInfo();
- tabletStateInfo.CopyFrom(pr.second);
+ if (request.groupby().empty()) {
+ ui64 changedSince = request.has_changedsince() ? request.changedsince() : 0;
+ for (const auto& pr : TabletStateInfo) {
+ if (pr.second.changetime() >= changedSince) {
+ NKikimrWhiteboard::TTabletStateInfo& tabletStateInfo = *record.add_tabletstateinfo();
+ tabletStateInfo = pr.second;
+ }
+ }
+ } else if (request.groupby() == "Type,State") { // the only supported group-by for now
+ std::unordered_map<std::pair<NKikimrTabletBase::TTabletTypes::EType,
+ NKikimrWhiteboard::TTabletStateInfo::ETabletState>, NKikimrWhiteboard::TTabletStateInfo> stateGroupBy;
+ for (const auto& [id, stateInfo] : TabletStateInfo) {
+ NKikimrWhiteboard::TTabletStateInfo& state = stateGroupBy[{stateInfo.type(), stateInfo.state()}];
+ auto count = state.count();
+ if (count == 0) {
+ state.set_type(stateInfo.type());
+ state.set_state(stateInfo.state());
+ }
+ state.set_count(count + 1);
+ }
+ for (auto& pr : stateGroupBy) {
+ NKikimrWhiteboard::TTabletStateInfo& tabletStateInfo = *record.add_tabletstateinfo();
+ tabletStateInfo = std::move(pr.second);
}
}
- response->Record.SetResponseTime(ctx.Now().MilliSeconds());
- ctx.Send(ev->Sender, response.Release(), 0, ev->Cookie);
+ response->Record.set_responsetime(ctx.Now().MilliSeconds());
+ response->Record.set_processduration((TMonotonic::Now() - now).MicroSeconds());
+ ctx.Send(ev->Sender, response.release(), 0, ev->Cookie);
}
void Handle(TEvWhiteboard::TEvNodeStateRequest::TPtr &ev, const TActorContext &ctx) {
@@ -648,12 +675,12 @@ protected:
// void Handle(TEvWhiteboard::TEvNodeStateRequest::TPtr &ev, const TActorContext &ctx) {
// TAutoPtr<TEvWhiteboard::TEvNodeStateResponse> response = new TEvWhiteboard::TEvNodeStateResponse();
// auto& record = response->Record;
-// const TIntrusivePtr<NMonitoring::TDynamicCounters> &counters = AppData(ctx)->Counters;
-// TIntrusivePtr<NMonitoring::TDynamicCounters> interconnectCounters = GetServiceCounters(counters, "interconnect");
+// const TIntrusivePtr<::NMonitoring::TDynamicCounters> &counters = AppData(ctx)->Counters;
+// TIntrusivePtr<::NMonitoring::TDynamicCounters> interconnectCounters = GetServiceCounters(counters, "interconnect");
// interconnectCounters->EnumerateSubgroups([&record, &interconnectCounters](const TString &name, const TString &value) -> void {
// NKikimrWhiteboard::TNodeStateInfo &nodeStateInfo = *record.AddNodeStateInfo();
-// TIntrusivePtr<NMonitoring::TDynamicCounters> peerCounters = interconnectCounters->GetSubgroup(name, value);
-// NMonitoring::TDynamicCounters::TCounterPtr connectedCounter = peerCounters->GetCounter("Connected");
+// TIntrusivePtr<::NMonitoring::TDynamicCounters> peerCounters = interconnectCounters->GetSubgroup(name, value);
+// ::NMonitoring::TDynamicCounters::TCounterPtr connectedCounter = peerCounters->GetCounter("Connected");
// nodeStateInfo.SetPeerName(value);
// nodeStateInfo.SetConnected(connectedCounter->Val());
// });
diff --git a/ydb/core/tablet/resource_broker.cpp b/ydb/core/tablet/resource_broker.cpp
index effe8256fe..4ff2abcd09 100644
--- a/ydb/core/tablet/resource_broker.cpp
+++ b/ydb/core/tablet/resource_broker.cpp
@@ -84,7 +84,7 @@ void TTask::OutputState(IOutputStream &os, const TString &prefix) const
<< prefix << " FinishTime: " << FinishTime.ToStringLocalUpToSeconds() << Endl;
}
-TBaseCounters::TBaseCounters(const NMonitoring::TDynamicCounterPtr &counters)
+TBaseCounters::TBaseCounters(const ::NMonitoring::TDynamicCounterPtr &counters)
{
Consumption[CPU] = counters->GetCounter("CPUConsumption");
Consumption[MEMORY] = counters->GetCounter("MemoryConsumption");
@@ -105,12 +105,12 @@ void TBaseCounters::ReleaseResources(const TResourceValues &values)
*Consumption[i] -= values[i];
}
-TQueueCounters::TQueueCounters(const NMonitoring::TDynamicCounterPtr &counters)
+TQueueCounters::TQueueCounters(const ::NMonitoring::TDynamicCounterPtr &counters)
: TBaseCounters(counters)
{
}
-TTaskCounters::TTaskCounters(const NMonitoring::TDynamicCounterPtr &counters)
+TTaskCounters::TTaskCounters(const ::NMonitoring::TDynamicCounterPtr &counters)
: TBaseCounters(counters)
{
}
@@ -156,7 +156,7 @@ bool TTaskQueue::TTaskEarlier::operator()(const TTaskPtr &l,
}
TTaskQueue::TTaskQueue(const NKikimrResourceBroker::TQueueConfig &config,
- const NMonitoring::TDynamicCounterPtr &counters,
+ const ::NMonitoring::TDynamicCounterPtr &counters,
TResourceLimitPtr totalLimit,
TQueueCountersPtr totalCounters)
: Name(config.GetName())
@@ -360,7 +360,7 @@ TScheduler::TTaskConfig::TTaskConfig(const TString &name,
{
}
-TScheduler::TScheduler(const NMonitoring::TDynamicCounterPtr &counters)
+TScheduler::TScheduler(const ::NMonitoring::TDynamicCounterPtr &counters)
: Counters(counters)
, TotalCounters(new TQueueCounters(counters->GetSubgroup("queue", "total")))
, MissingTaskTypeCounter(counters->GetCounter("MissingTaskType", true))
@@ -800,7 +800,7 @@ void TScheduler::OutputState(IOutputStream &os) const
}
TResourceBroker::TResourceBroker(const TResourceBrokerConfig &config,
- const NMonitoring::TDynamicCounterPtr &counters,
+ const ::NMonitoring::TDynamicCounterPtr &counters,
TActorSystem *actorSystem)
: Config(config)
, Scheduler(counters)
@@ -1096,7 +1096,7 @@ void TResourceBroker::OutputState(TStringStream& str)
}
TResourceBrokerActor::TResourceBrokerActor(const TResourceBrokerConfig &config,
- const NMonitoring::TDynamicCounterPtr &counters)
+ const ::NMonitoring::TDynamicCounterPtr &counters)
: Config(config)
, Counters(counters)
{
@@ -1558,7 +1558,7 @@ void MergeConfigUpdates(
IActor* CreateResourceBrokerActor(const NKikimrResourceBroker::TResourceBrokerConfig &config,
- const NMonitoring::TDynamicCounterPtr &counters)
+ const ::NMonitoring::TDynamicCounterPtr &counters)
{
return new TResourceBrokerActor(config, counters);
}
diff --git a/ydb/core/tablet/resource_broker.h b/ydb/core/tablet/resource_broker.h
index 095702cc19..855a734ddf 100644
--- a/ydb/core/tablet/resource_broker.h
+++ b/ydb/core/tablet/resource_broker.h
@@ -234,7 +234,7 @@ void MergeConfigUpdates(NKikimrResourceBroker::TResourceBrokerConfig &config,
const NKikimrResourceBroker::TResourceBrokerConfig &updates);
IActor* CreateResourceBrokerActor(const NKikimrResourceBroker::TResourceBrokerConfig &config,
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
} // NResourceBroker
} // NKikimr
diff --git a/ydb/core/tablet/resource_broker_impl.h b/ydb/core/tablet/resource_broker_impl.h
index 2c781692f6..42ef140626 100644
--- a/ydb/core/tablet/resource_broker_impl.h
+++ b/ydb/core/tablet/resource_broker_impl.h
@@ -92,7 +92,7 @@ using TTaskPtr = TIntrusivePtr<TTask>;
class TBaseCounters : public TThrRefBase {
public:
TBaseCounters() = default;
- TBaseCounters(const NMonitoring::TDynamicCounterPtr &counters);
+ TBaseCounters(const ::NMonitoring::TDynamicCounterPtr &counters);
TBaseCounters(const TBaseCounters &other) = default;
TBaseCounters(TBaseCounters &&other) = default;
@@ -103,10 +103,10 @@ public:
void ReleaseResources(const TResourceValues &values);
public:
- std::array<NMonitoring::TDynamicCounters::TCounterPtr, RESOURCE_COUNT> Consumption;
- NMonitoring::TDynamicCounters::TCounterPtr FinishedTasks;
- NMonitoring::TDynamicCounters::TCounterPtr EnqueuedTasks;
- NMonitoring::TDynamicCounters::TCounterPtr InFlyTasks;
+ std::array<::NMonitoring::TDynamicCounters::TCounterPtr, RESOURCE_COUNT> Consumption;
+ ::NMonitoring::TDynamicCounters::TCounterPtr FinishedTasks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EnqueuedTasks;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InFlyTasks;
};
/**
@@ -114,7 +114,7 @@ public:
*/
class TQueueCounters : public TBaseCounters {
public:
- TQueueCounters(const NMonitoring::TDynamicCounterPtr &counters);
+ TQueueCounters(const ::NMonitoring::TDynamicCounterPtr &counters);
};
using TQueueCountersPtr = TIntrusivePtr<TQueueCounters>;
@@ -124,7 +124,7 @@ using TQueueCountersPtr = TIntrusivePtr<TQueueCounters>;
class TTaskCounters : public TBaseCounters {
public:
TTaskCounters() = default;
- TTaskCounters(const NMonitoring::TDynamicCounterPtr &counters);
+ TTaskCounters(const ::NMonitoring::TDynamicCounterPtr &counters);
TTaskCounters(const TTaskCounters &other) = default;
TTaskCounters(TTaskCounters &&other) = default;
@@ -213,7 +213,7 @@ private:
public:
TTaskQueue(const NKikimrResourceBroker::TQueueConfig &config,
- const NMonitoring::TDynamicCounterPtr &counters,
+ const ::NMonitoring::TDynamicCounterPtr &counters,
TResourceLimitPtr totalLimit, TQueueCountersPtr totalCounters);
/**
@@ -301,7 +301,7 @@ private:
};
public:
- TScheduler(const NMonitoring::TDynamicCounterPtr &counters);
+ TScheduler(const ::NMonitoring::TDynamicCounterPtr &counters);
~TScheduler();
/**
@@ -392,9 +392,9 @@ private:
THashMap<TString, TTaskConfig> TaskConfigs;
TResourceLimitPtr ResourceLimit;
THashMap<std::pair<TActorId, ui64>, TTaskPtr> Tasks;
- const NMonitoring::TDynamicCounterPtr Counters;
+ const ::NMonitoring::TDynamicCounterPtr Counters;
TQueueCountersPtr TotalCounters;
- NMonitoring::TDynamicCounters::TCounterPtr MissingTaskTypeCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MissingTaskTypeCounter;
ui64 NextTaskId;
};
@@ -404,7 +404,7 @@ private:
class TResourceBroker : public IResourceBroker {
public:
TResourceBroker(const NKikimrResourceBroker::TResourceBrokerConfig &config,
- const NMonitoring::TDynamicCounterPtr &counters,
+ const ::NMonitoring::TDynamicCounterPtr &counters,
TActorSystem *actorSystem);
bool SubmitTaskInstant(const TEvResourceBroker::TEvSubmitTask &ev, const TActorId &sender) override;
@@ -441,7 +441,7 @@ public:
}
TResourceBrokerActor(const NKikimrResourceBroker::TResourceBrokerConfig &config,
- const NMonitoring::TDynamicCounterPtr &counters);
+ const ::NMonitoring::TDynamicCounterPtr &counters);
void Bootstrap(const TActorContext &ctx);
@@ -477,7 +477,7 @@ private:
void Handle(NMon::TEvHttpInfo::TPtr &ev, const TActorContext &ctx);
NKikimrResourceBroker::TResourceBrokerConfig Config;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
TIntrusivePtr<TResourceBroker> ResourceBroker;
};
diff --git a/ydb/core/tablet/resource_broker_ut.cpp b/ydb/core/tablet/resource_broker_ut.cpp
index 5948509025..aa2ba8131c 100644
--- a/ydb/core/tablet/resource_broker_ut.cpp
+++ b/ydb/core/tablet/resource_broker_ut.cpp
@@ -159,7 +159,7 @@ WaitForError(TTestActorRuntime &runtime, ui64 id, TEvResourceBroker::TStatus::EC
}
static void
-CheckCounters(NMonitoring::TDynamicCounterPtr counters, const TString &group, const TString &name,
+CheckCounters(::NMonitoring::TDynamicCounterPtr counters, const TString &group, const TString &name,
ui64 cpu, ui64 memory, ui64 finished, ui64 enqueued, ui64 infly)
{
auto g = counters->GetSubgroup(group, name);
@@ -203,7 +203,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
TActorId sender1 = runtime.AllocateEdgeActor();
TActorId sender2 = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -283,7 +283,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -321,7 +321,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -411,7 +411,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -460,7 +460,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -555,7 +555,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -613,7 +613,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -650,7 +650,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
TActorId sender1 = runtime.AllocateEdgeActor();
TActorId sender2 = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -688,7 +688,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -725,7 +725,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -762,7 +762,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -808,7 +808,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -851,7 +851,7 @@ Y_UNIT_TEST_SUITE(TResourceBroker) {
runtime.UpdateCurrentTime(now);
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto config = MakeTestConfig();
auto broker = CreateResourceBrokerActor(config, counters);
auto brokerId = runtime.Register(broker);
@@ -901,7 +901,7 @@ Y_UNIT_TEST_SUITE(TResourceBrokerInstant) {
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto broker = runtime.Register(CreateResourceBrokerActor(MakeTestConfig(), counters));
WaitForBootstrap(runtime);
@@ -928,7 +928,7 @@ Y_UNIT_TEST_SUITE(TResourceBrokerInstant) {
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto broker = runtime.Register(CreateResourceBrokerActor(MakeTestConfig(), counters));
WaitForBootstrap(runtime);
@@ -960,7 +960,7 @@ Y_UNIT_TEST_SUITE(TResourceBrokerInstant) {
TActorId sender = runtime.AllocateEdgeActor();
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto broker = runtime.Register(CreateResourceBrokerActor(MakeTestConfig(), counters));
WaitForBootstrap(runtime);
diff --git a/ydb/core/tablet/tablet_counters.cpp b/ydb/core/tablet/tablet_counters.cpp
index cda9bdbcd6..ebfecdacac 100644
--- a/ydb/core/tablet/tablet_counters.cpp
+++ b/ydb/core/tablet/tablet_counters.cpp
@@ -70,7 +70,7 @@ void TTabletSimpleCounterBase::OutputHtml(IOutputStream &os, const char* name) c
void TTabletPercentileCounter::OutputHtml(IOutputStream &os, const char* name) const {
HTML(os) {
DIV_CLASS("row") {
- DIV_CLASS("col-md-12") {H4() {os << name;}}
+ DIV_CLASS("col-md-12") {TAG(TH4) {os << name;}}
}
DIV_CLASS("row") {
@@ -101,7 +101,7 @@ template<typename T>
void TTabletCountersBase::OutputHtml(IOutputStream &os, const char* sectionName, const char* const* counterNames, const char* counterClass, const TCountersArray<T>& counters) const {
HTML(os) {
DIV_CLASS("row") {
- DIV_CLASS("col-md-12") {H3() {os << sectionName; }}
+ DIV_CLASS("col-md-12") {TAG(TH3) {os << sectionName; }}
}
DIV_CLASS("row") {
for (ui32 i = 0, e = counters.Size(); i < e; ++i) {
@@ -181,7 +181,7 @@ TTabletLabeledCountersBase::operator = (const TTabletLabeledCountersBase& rp) {
void TTabletLabeledCountersBase::OutputHtml(IOutputStream &os) const {
HTML(os) {
DIV_CLASS("row") {
- DIV_CLASS("col-md-12") {H3() {os << Group; }}
+ DIV_CLASS("col-md-12") {TAG(TH3) {os << Group; }}
}
DIV_CLASS("row") {
diff --git a/ydb/core/tablet/tablet_counters_aggregator.cpp b/ydb/core/tablet/tablet_counters_aggregator.cpp
index 5456ab37f1..94a0aea199 100644
--- a/ydb/core/tablet/tablet_counters_aggregator.cpp
+++ b/ydb/core/tablet/tablet_counters_aggregator.cpp
@@ -59,7 +59,7 @@ const ui32 WAKEUP_TIMEOUT_SECONDS = 4;
////////////////////////////////////////////
-using TCountersVector = TVector<NMonitoring::TDynamicCounters::TCounterPtr>;
+using TCountersVector = TVector<::NMonitoring::TDynamicCounters::TCounterPtr>;
struct THistogramCounter {
TVector<TTabletPercentileCounter::TRangeDef> Ranges;
@@ -78,7 +78,7 @@ struct THistogramCounter {
}
void Clear() {
- for (const NMonitoring::TDynamicCounters::TCounterPtr& cnt : Values) {
+ for (const ::NMonitoring::TDynamicCounters::TCounterPtr& cnt : Values) {
*cnt = 0;
}
@@ -98,7 +98,7 @@ using THistogramVector = TVector<THolder<THistogramCounter>>;
class TAggregatedSimpleCounters {
public:
//
- TAggregatedSimpleCounters(NMonitoring::TDynamicCounterPtr counterGroup)
+ TAggregatedSimpleCounters(::NMonitoring::TDynamicCounterPtr counterGroup)
: CounterGroup(counterGroup)
{}
@@ -183,7 +183,7 @@ public:
private:
//
- NMonitoring::TDynamicCounterPtr CounterGroup;
+ ::NMonitoring::TDynamicCounterPtr CounterGroup;
TCountersVector MaxSimpleCounters;
TCountersVector SumSimpleCounters;
@@ -222,7 +222,7 @@ private:
class TAggregatedCumulativeCounters {
public:
//
- TAggregatedCumulativeCounters(NMonitoring::TDynamicCounterPtr counterGroup)
+ TAggregatedCumulativeCounters(::NMonitoring::TDynamicCounterPtr counterGroup)
: CounterGroup(counterGroup)
{}
@@ -292,7 +292,7 @@ public:
private:
//
- NMonitoring::TDynamicCounterPtr CounterGroup;
+ ::NMonitoring::TDynamicCounterPtr CounterGroup;
TCountersVector MaxCumulativeCounters;
THistogramVector HistCumulativeCounters;
@@ -328,7 +328,7 @@ class TAggregatedHistogramCounters {
public:
//
- TAggregatedHistogramCounters(NMonitoring::TDynamicCounterPtr counterGroup)
+ TAggregatedHistogramCounters(::NMonitoring::TDynamicCounterPtr counterGroup)
: CounterGroup(counterGroup)
{}
@@ -522,7 +522,7 @@ private:
}
private:
- NMonitoring::TDynamicCounterPtr CounterGroup;
+ ::NMonitoring::TDynamicCounterPtr CounterGroup;
// monitoring counters holders, updated only during recalculation
TVector<TCountersVector> PercentileCounters; // old style (ranges)
@@ -645,7 +645,7 @@ public:
private:
//
- NMonitoring::TDynamicCounterPtr CounterGroup;
+ ::NMonitoring::TDynamicCounterPtr CounterGroup;
const ui8* AggrFunc;
const char* const * Names;
TString GroupNames;
@@ -699,7 +699,7 @@ private:
class TTabletMon {
public:
//
- TTabletMon(NMonitoring::TDynamicCounterPtr counters, bool isFollower, TActorId dbWatcherActorId)
+ TTabletMon(::NMonitoring::TDynamicCounterPtr counters, bool isFollower, TActorId dbWatcherActorId)
: Counters(GetServiceCounters(counters, isFollower ? "followers" : "tablets"))
, AllTypes(Counters.Get(), "type", "all")
, IsFollower(isFollower)
@@ -932,7 +932,7 @@ private:
class TTabletCountersForTabletType {
public:
//
- TTabletCountersForTabletType(NMonitoring::TDynamicCounters* owner, const char* category, const char* name)
+ TTabletCountersForTabletType(::NMonitoring::TDynamicCounters* owner, const char* category, const char* name)
: TabletCountersSection(owner->GetSubgroup(category, name))
, TabletExecutorCountersSection(TabletCountersSection->GetSubgroup("category", "executor"))
, TabletAppCountersSection(TabletCountersSection->GetSubgroup("category", "app"))
@@ -1030,7 +1030,7 @@ private:
//
bool IsInitialized;
- TSolomonCounters(NMonitoring::TDynamicCounterPtr counterGroup)
+ TSolomonCounters(::NMonitoring::TDynamicCounterPtr counterGroup)
: IsInitialized(false)
, AggregatedSimpleCounters(counterGroup)
, AggregatedCumulativeCounters(counterGroup)
@@ -1286,14 +1286,14 @@ private:
THashMap<ui64, TInstant> LastAggregateUpdateTime;
- NMonitoring::TDynamicCounterPtr CounterGroup;
+ ::NMonitoring::TDynamicCounterPtr CounterGroup;
};
//
- NMonitoring::TDynamicCounterPtr TabletCountersSection;
+ ::NMonitoring::TDynamicCounterPtr TabletCountersSection;
- NMonitoring::TDynamicCounterPtr TabletExecutorCountersSection;
- NMonitoring::TDynamicCounterPtr TabletAppCountersSection;
+ ::NMonitoring::TDynamicCounterPtr TabletExecutorCountersSection;
+ ::NMonitoring::TDynamicCounterPtr TabletAppCountersSection;
TSolomonCounters TabletExecutorCounters;
TSolomonCounters TabletAppCounters;
@@ -1315,7 +1315,7 @@ private:
static TTabletCountersForTabletType* GetOrAddCountersByTabletType(
TTabletTypes::EType tabletType,
TCountersByTabletType& countersByTabletType,
- NMonitoring::TDynamicCounterPtr counters)
+ ::NMonitoring::TDynamicCounterPtr counters)
{
auto* typeCounters = FindCountersByTabletType(tabletType, countersByTabletType);
if (!typeCounters) {
@@ -1336,7 +1336,7 @@ private:
}
class TYdbTabletCounters : public TThrRefBase {
- using TCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
using THistogramPtr = NMonitoring::THistogramPtr;
private:
@@ -1390,7 +1390,7 @@ private:
public:
- explicit TYdbTabletCounters(const NMonitoring::TDynamicCounterPtr& ydbGroup) {
+ explicit TYdbTabletCounters(const ::NMonitoring::TDynamicCounterPtr& ydbGroup) {
WriteRowCount = ydbGroup->GetNamedCounter("name",
"table.datashard.write.rows", true);
WriteBytes = ydbGroup->GetNamedCounter("name",
@@ -1444,7 +1444,7 @@ private:
};
void Initialize(
- NMonitoring::TDynamicCounterPtr counters,
+ ::NMonitoring::TDynamicCounterPtr counters,
TCountersByTabletType& countersByTabletType)
{
auto datashard = FindCountersByTabletType(
@@ -1551,12 +1551,12 @@ public:
class TTabletCountersForDb : public NSysView::IDbCounters {
public:
TTabletCountersForDb()
- : SolomonCounters(new NMonitoring::TDynamicCounters)
+ : SolomonCounters(new ::NMonitoring::TDynamicCounters)
, AllTypes(SolomonCounters.Get(), "type", "all")
{}
- TTabletCountersForDb(NMonitoring::TDynamicCounterPtr externalGroup,
- NMonitoring::TDynamicCounterPtr internalGroup,
+ TTabletCountersForDb(::NMonitoring::TDynamicCounterPtr externalGroup,
+ ::NMonitoring::TDynamicCounterPtr internalGroup,
THolder<TTabletCountersBase> executorCounters)
: SolomonCounters(internalGroup)
, ExecutorCounters(std::move(executorCounters))
@@ -1617,7 +1617,7 @@ public:
}
private:
- NMonitoring::TDynamicCounterPtr SolomonCounters;
+ ::NMonitoring::TDynamicCounterPtr SolomonCounters;
THolder<TTabletCountersBase> ExecutorCounters;
TTabletCountersForTabletType AllTypes;
@@ -1665,7 +1665,7 @@ private:
private:
//
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
TTabletCountersForTabletType AllTypes;
bool IsFollower = false;
@@ -1687,8 +1687,8 @@ private:
TIntrusivePtr<NSysView::IDbCounters> CreateTabletDbCounters(
- NMonitoring::TDynamicCounterPtr externalGroup,
- NMonitoring::TDynamicCounterPtr internalGroup,
+ ::NMonitoring::TDynamicCounterPtr externalGroup,
+ ::NMonitoring::TDynamicCounterPtr internalGroup,
THolder<TTabletCountersBase> executorCounters)
{
return MakeIntrusive<TTabletMon::TTabletCountersForDb>(
@@ -1825,7 +1825,7 @@ TTabletCountersAggregatorActor::HandleWork(TEvTabletCounters::TEvTabletLabeledCo
return;
TString html;
TStringOutput oss(html);
- NMonitoring::TDynamicCounters counters;
+ ::NMonitoring::TDynamicCounters counters;
const auto& params = it->second.second->Request.GetParams();
TString reqTabletType = params.Get("type");
diff --git a/ydb/core/tablet/tablet_counters_aggregator.h b/ydb/core/tablet/tablet_counters_aggregator.h
index db350d41cb..692741481e 100644
--- a/ydb/core/tablet/tablet_counters_aggregator.h
+++ b/ydb/core/tablet/tablet_counters_aggregator.h
@@ -122,8 +122,8 @@ bool IsHistogramAggregateSimpleName(TStringBuf name);
////////////////////////////////////////////
TIntrusivePtr<NSysView::IDbCounters> CreateTabletDbCounters(
- NMonitoring::TDynamicCounterPtr externalGroup,
- NMonitoring::TDynamicCounterPtr internalGroup,
+ ::NMonitoring::TDynamicCounterPtr externalGroup,
+ ::NMonitoring::TDynamicCounterPtr internalGroup,
THolder<TTabletCountersBase> executorCounters);
////////////////////////////////////////////
diff --git a/ydb/core/tablet/tablet_counters_aggregator_ut.cpp b/ydb/core/tablet/tablet_counters_aggregator_ut.cpp
index b1c9026742..013d292c24 100644
--- a/ydb/core/tablet/tablet_counters_aggregator_ut.cpp
+++ b/ydb/core/tablet/tablet_counters_aggregator_ut.cpp
@@ -155,8 +155,8 @@ Y_UNIT_TEST_SUITE(TTabletCountersAggregator) {
}
public:
- static NMonitoring::TDynamicCounterPtr GetAppCounters(TTestBasicRuntime& runtime) {
- NMonitoring::TDynamicCounterPtr counters = runtime.GetAppData(0).Counters;
+ static ::NMonitoring::TDynamicCounterPtr GetAppCounters(TTestBasicRuntime& runtime) {
+ ::NMonitoring::TDynamicCounterPtr counters = runtime.GetAppData(0).Counters;
UNIT_ASSERT(counters);
TString tabletTypeStr = TTabletTypes::TypeToStr(TabletType);
diff --git a/ydb/core/tablet/tablet_list_renderer.cpp b/ydb/core/tablet/tablet_list_renderer.cpp
index ad36f12a29..a70d8cd90a 100644
--- a/ydb/core/tablet/tablet_list_renderer.cpp
+++ b/ydb/core/tablet/tablet_list_renderer.cpp
@@ -62,7 +62,7 @@ void TTabletListRenderer::RenderHeader(TStringStream& str,
{
Y_UNUSED(tabletsToRender);
IOutputStream &__stream(str);
- H3() {
+ TAG(TH3) {
str << listName;
if (filterInfo.FilterNodeId != 0) {
str << " of Node " << filterInfo.FilterNodeId;
diff --git a/ydb/core/tablet/tablet_monitoring_proxy.cpp b/ydb/core/tablet/tablet_monitoring_proxy.cpp
index 7f1ba12829..9ec50c4b71 100644
--- a/ydb/core/tablet/tablet_monitoring_proxy.cpp
+++ b/ydb/core/tablet/tablet_monitoring_proxy.cpp
@@ -274,7 +274,7 @@ TTabletMonitoringProxyActor::Handle(NMon::TEvHttpInfo::TPtr &ev, const TActorCon
HTML(str) {
for (auto di: domains) {
ui32 domainId = di.first;
- H3() {
+ TAG(TH3) {
str << "Domain \"" << di.second->Name << "\" (id: " << domainId << ")";
}
TABLE_SORTABLE_CLASS("table") {
diff --git a/ydb/core/tablet/tablet_pipecache.cpp b/ydb/core/tablet/tablet_pipecache.cpp
index 292571f661..53e7a83325 100644
--- a/ydb/core/tablet/tablet_pipecache.cpp
+++ b/ydb/core/tablet/tablet_pipecache.cpp
@@ -12,19 +12,19 @@ class TPipePeNodeCache : public TActor<TPipePeNodeCache> {
NTabletPipe::TClientConfig PipeConfig;
struct TCounters {
- NMonitoring::TDynamicCounters::TCounterPtr Tablets;
- NMonitoring::TDynamicCounters::TCounterPtr Subscribers;
- NMonitoring::TDynamicCounters::TCounterPtr PipesActive;
- NMonitoring::TDynamicCounters::TCounterPtr PipesInactive;
- NMonitoring::TDynamicCounters::TCounterPtr PipesConnecting;
- NMonitoring::TDynamicCounters::TCounterPtr EventCreate;
- NMonitoring::TDynamicCounters::TCounterPtr EventConnectOk;
- NMonitoring::TDynamicCounters::TCounterPtr EventConnectFailure;
- NMonitoring::TDynamicCounters::TCounterPtr EventGracefulShutdown;
- NMonitoring::TDynamicCounters::TCounterPtr EventDisconnect;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Tablets;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Subscribers;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PipesActive;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PipesInactive;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PipesConnecting;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventCreate;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventConnectOk;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventConnectFailure;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventGracefulShutdown;
+ ::NMonitoring::TDynamicCounters::TCounterPtr EventDisconnect;
bool HaveCounters = false;
- explicit TCounters(NMonitoring::TDynamicCounterPtr counters) {
+ explicit TCounters(::NMonitoring::TDynamicCounterPtr counters) {
if (counters) {
Tablets = counters->GetCounter("PipeCache/Tablets");
Subscribers = counters->GetCounter("PipeCache/Subscribers");
diff --git a/ydb/core/tablet/tablet_req_reset.cpp b/ydb/core/tablet/tablet_req_reset.cpp
index a8cfdd5c1a..3bc6a989ae 100644
--- a/ydb/core/tablet/tablet_req_reset.cpp
+++ b/ydb/core/tablet/tablet_req_reset.cpp
@@ -48,14 +48,20 @@ class TTabletReqReset : public TActorBootstrapped<TTabletReqReset> {
}
void Handle(TEvTabletBase::TEvBlockBlobStorageResult::TPtr& ev, const TActorContext& ctx) {
- if (ev->Get()->Status == NKikimrProto::RACE) {
- ++Generation;
- ctx.Register(CreateTabletReqBlockBlobStorage(ctx.SelfID, TabletStorageInfo.Get(), Generation, false));
- return;
- }
- if (ev->Get()->Status != NKikimrProto::OK) {
- return ReplyAndDie(ev->Get()->Status, ctx);
+ switch (ev->Get()->Status) {
+ case NKikimrProto::OK:
+ break;
+
+ case NKikimrProto::RACE:
+ case NKikimrProto::ALREADY:
+ ++Generation;
+ ctx.Register(CreateTabletReqBlockBlobStorage(ctx.SelfID, TabletStorageInfo.Get(), Generation, false));
+ return;
+
+ default:
+ return ReplyAndDie(ev->Get()->Status, ctx);
}
+
TTablet::ExternalWriteZeroEntry(TabletStorageInfo.Get(), Generation + 1, SelfId());
Become(&TTabletReqReset::StateWriteZeroEntry);
}
diff --git a/ydb/core/tablet/tablet_resolver.cpp b/ydb/core/tablet/tablet_resolver.cpp
index 4b1ee1a6fc..369af9138f 100644
--- a/ydb/core/tablet/tablet_resolver.cpp
+++ b/ydb/core/tablet/tablet_resolver.cpp
@@ -173,17 +173,17 @@ class TTabletResolver : public TActorBootstrapped<TTabletResolver> {
ui64 LastCacheEpoch = 0;
- NMonitoring::TDynamicCounters::TCounterPtr SelectedLeaderLocal;
- NMonitoring::TDynamicCounters::TCounterPtr SelectedLeaderLocalDc;
- NMonitoring::TDynamicCounters::TCounterPtr SelectedLeaderOtherDc;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SelectedLeaderLocal;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SelectedLeaderLocalDc;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SelectedLeaderOtherDc;
- NMonitoring::TDynamicCounters::TCounterPtr SelectedFollowerLocal;
- NMonitoring::TDynamicCounters::TCounterPtr SelectedFollowerLocalDc;
- NMonitoring::TDynamicCounters::TCounterPtr SelectedFollowerOtherDc;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SelectedFollowerLocal;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SelectedFollowerLocalDc;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SelectedFollowerOtherDc;
- NMonitoring::TDynamicCounters::TCounterPtr SelectedNone;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SelectedNone;
- NMonitoring::TDynamicCounters::TCounterPtr InFlyResolveCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InFlyResolveCounter;
std::optional<TString> FindNodeDc(ui32 nodeId) const {
auto it = NodeToDcMapping.find(nodeId);
diff --git a/ydb/core/tablet/ut/CMakeLists.txt b/ydb/core/tablet/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tablet/ut/CMakeLists.txt
+++ b/ydb/core/tablet/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tablet_flat/CMakeLists.txt b/ydb/core/tablet_flat/CMakeLists.txt
index 55728be780..1cc92374fe 100644
--- a/ydb/core/tablet_flat/CMakeLists.txt
+++ b/ydb/core/tablet_flat/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
+add_subdirectory(test)
+add_subdirectory(ut)
+add_subdirectory(ut_large)
add_library(ydb-core-tablet_flat)
target_compile_options(ydb-core-tablet_flat PRIVATE
diff --git a/ydb/core/tablet_flat/flat_database.cpp b/ydb/core/tablet_flat/flat_database.cpp
index 965463954c..62f58bead1 100644
--- a/ydb/core/tablet_flat/flat_database.cpp
+++ b/ydb/core/tablet_flat/flat_database.cpp
@@ -88,6 +88,44 @@ TAutoPtr<TTableIt> TDatabase::IterateExact(ui32 table, TRawVals key, TTagsRef ta
return iter;
}
+namespace {
+ // There are many places that use a non-inclusive -inf/+inf
+ // We special case empty keys anyway, so the requirement is temporarily relaxed
+ static constexpr bool RelaxEmptyKeys = true;
+
+ const char* IsAmbiguousRangeReason(const TKeyRange& range, ui32 keyColumnsCount) {
+ if (!range.MinKey) {
+ if (Y_UNLIKELY(!range.MinInclusive) && !RelaxEmptyKeys) {
+ return "Ambiguous table range: empty MinKey must be inclusive";
+ }
+ } else if (range.MinKey.size() < keyColumnsCount) {
+ if (Y_UNLIKELY(range.MinInclusive)) {
+ return "Ambiguous table range: incomplete MinKey must be non-inclusive (any/+inf is ambiguous otherwise)";
+ }
+ } else if (Y_UNLIKELY(range.MinKey.size() > keyColumnsCount)) {
+ return "Ambiguous table range: MinKey is too large";
+ }
+
+ if (!range.MaxKey) {
+ if (Y_UNLIKELY(!range.MaxInclusive) && !RelaxEmptyKeys) {
+ return "Ambiguous table range: empty MaxKey must be inclusive";
+ }
+ } else if (range.MaxKey.size() < keyColumnsCount) {
+ if (Y_UNLIKELY(!range.MaxInclusive)) {
+ return "Ambiguous table range: incomplete MaxKey must be inclusive (any/+inf is ambiguous otherwise)";
+ }
+ } else if (Y_UNLIKELY(range.MaxKey.size() > keyColumnsCount)) {
+ return "Ambiguous table range: MaxKey is too large";
+ }
+
+ return nullptr;
+ }
+
+ bool IsAmbiguousRange(const TKeyRange& range, ui32 keyColumnsCount) {
+ return IsAmbiguousRangeReason(range, keyColumnsCount) != nullptr;
+ }
+}
+
TAutoPtr<TTableIt> TDatabase::IterateRange(ui32 table, const TKeyRange& range, TTagsRef tags,
TRowVersion snapshot,
const ITransactionMapPtr& visible,
@@ -95,6 +133,9 @@ TAutoPtr<TTableIt> TDatabase::IterateRange(ui32 table, const TKeyRange& range, T
{
Y_VERIFY(!NoMoreReadsFlag, "Trying to read after reads prohibited, table %u", table);
+ Y_VERIFY_DEBUG(!IsAmbiguousRange(range, Require(table)->GetScheme()->Keys->Size()),
+ "%s", IsAmbiguousRangeReason(range, Require(table)->GetScheme()->Keys->Size()));
+
IteratedTables.insert(table);
ESeek seek = !range.MinKey || range.MinInclusive ? ESeek::Lower : ESeek::Upper;
@@ -121,6 +162,9 @@ TAutoPtr<TTableReverseIt> TDatabase::IterateRangeReverse(ui32 table, const TKeyR
{
Y_VERIFY(!NoMoreReadsFlag, "Trying to read after reads prohibited, table %u", table);
+ Y_VERIFY_DEBUG(!IsAmbiguousRange(range, Require(table)->GetScheme()->Keys->Size()),
+ "%s", IsAmbiguousRangeReason(range, Require(table)->GetScheme()->Keys->Size()));
+
IteratedTables.insert(table);
ESeek seek = !range.MaxKey || range.MaxInclusive ? ESeek::Lower : ESeek::Upper;
diff --git a/ydb/core/tablet_flat/flat_executor.cpp b/ydb/core/tablet_flat/flat_executor.cpp
index 7e17797173..e58f6ce3dc 100644
--- a/ydb/core/tablet_flat/flat_executor.cpp
+++ b/ydb/core/tablet_flat/flat_executor.cpp
@@ -3869,12 +3869,12 @@ void TExecutor::RenderHtmlCounters(NMon::TEvRemoteHttpInfo::TPtr &ev) const {
str << "table.metrics td:nth-child(3) { text-align: left; }";
str << "</style>";
if (Counters) {
- H3() {str << "Executor counters";}
+ TAG(TH3) {str << "Executor counters";}
Counters->OutputHtml(str);
}
if (AppCounters) {
- H3() {str << "App counters";}
+ TAG(TH3) {str << "App counters";}
AppCounters->OutputHtml(str);
}
@@ -3930,7 +3930,7 @@ void TExecutor::RenderHtmlPage(NMon::TEvRemoteHttpInfo::TPtr &ev) const {
}
} else if (auto *scheme = Database ? &Database->GetScheme() : nullptr) {
HTML(str) {
- H3() { str << NFmt::Do(*this) << " tablet synopsis"; }
+ TAG(TH3) { str << NFmt::Do(*this) << " tablet synopsis"; }
if (auto *logic = BootLogic.Get()) {
DIV_CLASS("row") {str << NFmt::Do(*logic); }
@@ -3952,14 +3952,14 @@ void TExecutor::RenderHtmlPage(NMon::TEvRemoteHttpInfo::TPtr &ev) const {
DIV_CLASS("row") { str << "Booted tablet without dbase"; }
}
- H3() {str << "Scheme:";}
+ TAG(TH3) {str << "Scheme:";}
TVector<ui32> tables;
for (const auto &xtable : scheme->Tables)
tables.push_back(xtable.first);
Sort(tables);
for (auto itable : tables) {
const auto &tinfo = scheme->Tables.find(itable)->second;
- H4() {str << "<a href='db?TabletID=" << Owner->TabletID() << "&TableID=" << tinfo.Id << "'>Table: \"" << tinfo.Name << "\" id: " << tinfo.Id << "</a>";}
+ TAG(TH4) {str << "<a href='db?TabletID=" << Owner->TabletID() << "&TableID=" << tinfo.Id << "'>Table: \"" << tinfo.Name << "\" id: " << tinfo.Id << "</a>";}
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
TABLER() {
@@ -3988,18 +3988,18 @@ void TExecutor::RenderHtmlPage(NMon::TEvRemoteHttpInfo::TPtr &ev) const {
}
}
- H3() {str << "Storage:";}
+ TAG(TH3) {str << "Storage:";}
DIV_CLASS("row") {str << "Bytes pinned in cache: " << PrivatePageCache->GetStats().PinnedSetSize << Endl; }
DIV_CLASS("row") {str << "Bytes pinned to load: " << PrivatePageCache->GetStats().PinnedLoadSize << Endl; }
- H3() {str << "Resource usage:";}
+ TAG(TH3) {str << "Resource usage:";}
DIV_CLASS("row") {str << "used tablet memory: " << UsedTabletMemory; }
Memory->DumpStateToHTML(str);
if (CompactionLogic)
CompactionLogic->OutputHtml(str, *scheme, cgi);
- H3() {str << "Page collection cache:";}
+ TAG(TH3) {str << "Page collection cache:";}
DIV_CLASS("row") {str << "fresh bytes: " << CounterCacheFresh->Val(); }
DIV_CLASS("row") {str << "staging bytes: " << CounterCacheStaging->Val(); }
DIV_CLASS("row") {str << "warm bytes: " << CounterCacheWarm->Val(); }
@@ -4011,7 +4011,7 @@ void TExecutor::RenderHtmlPage(NMon::TEvRemoteHttpInfo::TPtr &ev) const {
DIV_CLASS("row") {str << "Total bytes marked as sticky: " << PrivatePageCache->GetStats().TotalSticky; }
if (GcLogic) {
- H3() {str << "Gc logic:";}
+ TAG(TH3) {str << "Gc logic:";}
auto gcInfo = GcLogic->IntrospectStateSize();
DIV_CLASS("row") {str << "uncommited entries: " << gcInfo.UncommitedEntries;}
DIV_CLASS("row") {str << "uncommited blob ids: " << gcInfo.UncommitedBlobIds; }
@@ -4024,7 +4024,7 @@ void TExecutor::RenderHtmlPage(NMon::TEvRemoteHttpInfo::TPtr &ev) const {
}
if (BorrowLogic) {
- H3() {str << "Borrow logic:";}
+ TAG(TH3) {str << "Borrow logic:";}
BorrowLogic->OutputHtml(str);
}
}
diff --git a/ydb/core/tablet_flat/flat_executor_borrowlogic.cpp b/ydb/core/tablet_flat/flat_executor_borrowlogic.cpp
index b0371b2701..733d862ad6 100644
--- a/ydb/core/tablet_flat/flat_executor_borrowlogic.cpp
+++ b/ydb/core/tablet_flat/flat_executor_borrowlogic.cpp
@@ -527,7 +527,7 @@ void TExecutorBorrowLogic::RestoreBorrowedInfo(const TLogoBlobID &blobId, const
void TExecutorBorrowLogic::OutputHtml(IOutputStream &out) {
HTML(out) {
- H4() {out << "Borrowed parts";}
+ TAG(TH4) {out << "Borrowed parts";}
PRE() {
for (const auto &xpair : BorrowedInfo) {
if (xpair.second.BorrowInfo.FullBorrow) {
@@ -539,7 +539,7 @@ void TExecutorBorrowLogic::OutputHtml(IOutputStream &out) {
}
}
- H4() {out << "Loaned parts";}
+ TAG(TH4) {out << "Loaned parts";}
PRE() {
for (const auto &xpair : BorrowedInfo) {
if (xpair.second.LoanInfo.Lender)
diff --git a/ydb/core/tablet_flat/flat_executor_compaction_logic.cpp b/ydb/core/tablet_flat/flat_executor_compaction_logic.cpp
index 514aea3725..7714664438 100644
--- a/ydb/core/tablet_flat/flat_executor_compaction_logic.cpp
+++ b/ydb/core/tablet_flat/flat_executor_compaction_logic.cpp
@@ -758,7 +758,7 @@ ui64 TCompactionLogic::GetBackingSize(ui64 ownerTabletId) const {
void TCompactionLogic::OutputHtml(IOutputStream &out, const NTable::TScheme &scheme, const TCgiParameters& cgi) {
HTML(out) {
for (const auto &xtable : State->Tables) {
- H4() {out << scheme.GetTableInfo(xtable.first)->Name;}
+ TAG(TH4) {out << scheme.GetTableInfo(xtable.first)->Name;}
DIV_CLASS("row") { out
<< "InMem Size: " << xtable.second.InMem.EstimatedSize
diff --git a/ydb/core/tablet_flat/flat_iterator.h b/ydb/core/tablet_flat/flat_iterator.h
index 4a4e44917c..bf42ef6755 100644
--- a/ydb/core/tablet_flat/flat_iterator.h
+++ b/ydb/core/tablet_flat/flat_iterator.h
@@ -258,7 +258,6 @@ public:
{
TEraseCachingState eraseCache(this);
- bool isHead = true;
for (Ready = EReady::Data; Ready == EReady::Data; ) {
if (Stage == EStage::Seek) {
Ready = Start();
@@ -269,32 +268,31 @@ public:
Ready = Turn();
} else if (Stage == EStage::Snap) {
if (mode != ENext::Uncommitted) {
- ui64 skipsBefore = Stats.InvisibleRowSkips;
Ready = Snap();
- isHead = skipsBefore == Stats.InvisibleRowSkips;
+ if (ErasedKeysCache && mode == ENext::Data &&
+ (Stats.InvisibleRowSkips != SnapInvisibleRowSkips || Stage != EStage::Fill))
+ {
+ // Interrupt range when key is not at a head version, or skipped entirely
+ eraseCache.Flush();
+ }
} else {
Y_VERIFY_DEBUG(Active != Inactive);
Stage = EStage::Fill;
- isHead = false;
}
} else if ((Ready = Apply()) != EReady::Data) {
- } else if (mode == ENext::All || mode == ENext::Uncommitted || State.GetRowState() != ERowOp::Erase) {
+ } else if (mode != ENext::Data || State.GetRowState() != ERowOp::Erase) {
break;
} else {
++Stats.DeletedRowSkips; /* skip internal technical row states w/o data */
- if (ErasedKeysCache) {
- if (isHead) {
- eraseCache.OnEraseKey(GetKey().Cells(), GetRowVersion());
- } else {
- eraseCache.Flush();
- isHead = true;
- }
+ if (ErasedKeysCache && Stats.InvisibleRowSkips == SnapInvisibleRowSkips) {
+ // Try to cache erases that are at a head version
+ eraseCache.OnEraseKey(GetKey().Cells(), GetRowVersion());
}
}
}
- if (ErasedKeysCache && mode != ENext::All) {
+ if (ErasedKeysCache && mode == ENext::Data) {
eraseCache.Flush();
}
@@ -348,9 +346,11 @@ private:
TOwnedCellVec StopKey;
bool StopKeyInclusive = true;
+ using TIteratorIndex = ui32;
+
struct TIteratorId {
EType Type;
- ui16 Index;
+ TIteratorIndex Index;
TEpoch Epoch;
};
@@ -382,19 +382,10 @@ private:
const TArrayRef<const NScheme::TTypeIdOrder> Types;
};
- /**
- * Adjust epoch into a modified range
- *
- * This frees epoch=-inf and epoch=+inf for special stop keys. Note that this
- * would convert +inf into +inf, which should be safe, since epoch=+inf is
- * normally used as an invalid epoch marker.
- */
- static TEpoch AdjustEpoch(TEpoch epoch) {
- if (epoch == TEpoch::Max()) {
- return TEpoch::Max(); // invalid epoch
- } else {
- return ++epoch;
- }
+ static TIteratorIndex IteratorIndexFromSize(size_t size) {
+ TIteratorIndex index = size;
+ Y_VERIFY(index == size, "Iterator index overflow");
+ return index;
}
void Clear() {
@@ -415,6 +406,7 @@ private:
TIterators Iterators;
TForwardIter Active;
TForwardIter Inactive;
+ ui64 SnapInvisibleRowSkips = 0;
ui64 DeltaTxId = 0;
TRowVersion DeltaVersion;
bool Delta = false;
@@ -496,7 +488,7 @@ template<class TIteratorOps>
inline void TTableItBase<TIteratorOps>::Push(TAutoPtr<TMemIt> it)
{
if (it && it->IsValid()) {
- TIteratorId itId = { EType::Mem, ui16(MemIters.size()), AdjustEpoch(it->MemTable->Epoch) };
+ TIteratorId itId = { EType::Mem, IteratorIndexFromSize(MemIters.size()), it->MemTable->Epoch };
MemIters.PushBack(it);
TDbTupleRef key = MemIters.back()->GetKey();
@@ -507,7 +499,7 @@ inline void TTableItBase<TIteratorOps>::Push(TAutoPtr<TMemIt> it)
template<class TIteratorOps>
inline void TTableItBase<TIteratorOps>::Push(TAutoPtr<TRunIt> it)
{
- TIteratorId itId = { EType::Run, ui16(RunIters.size()), AdjustEpoch(it->Epoch()) };
+ TIteratorId itId = { EType::Run, IteratorIndexFromSize(RunIters.size()), it->Epoch() };
bool ready = it->IsValid();
@@ -532,7 +524,7 @@ inline void TTableItBase<TIteratorOps>::StopBefore(TArrayRef<const TCell> key)
StopKey = TOwnedCellVec::Make(key);
StopKeyInclusive = false;
- TIteratorId itId = { EType::Stop, Max<ui16>(), TEpoch::Max() };
+ TIteratorId itId = { EType::Stop, Max<TIteratorIndex>(), TEpoch::Max() };
AddReadyIterator(StopKey, itId);
}
@@ -549,7 +541,7 @@ inline void TTableItBase<TIteratorOps>::StopAfter(TArrayRef<const TCell> key)
StopKey = TOwnedCellVec::Make(key);
StopKeyInclusive = true;
- TIteratorId itId = { EType::Stop, Max<ui16>(), TEpoch::Min() };
+ TIteratorId itId = { EType::Stop, Max<TIteratorIndex>(), TEpoch::Min() };
AddReadyIterator(StopKey, itId);
}
@@ -584,6 +576,7 @@ inline EReady TTableItBase<TIteratorOps>::Start() noexcept
}
Stage = EStage::Snap;
+ SnapInvisibleRowSkips = Stats.InvisibleRowSkips;
Inactive = Iterators.end();
return EReady::Data;
}
@@ -628,7 +621,7 @@ inline EReady TTableItBase<TIteratorOps>::Turn() noexcept
case EReady::Data:
Active->Key = it.GetKey().Cells();
Y_VERIFY_DEBUG(Active->Key.size() == Scheme->Keys->Types.size());
- Active->IteratorId.Epoch = AdjustEpoch(it.Epoch());
+ Active->IteratorId.Epoch = it.Epoch();
std::push_heap(Iterators.begin(), ++Active, Comparator);
break;
@@ -1012,7 +1005,7 @@ inline bool TTableItBase<TIteratorOps>::SeekInternal(TArrayRef<const TCell> key,
case EReady::Data:
Active->Key = it.GetKey().Cells();
Y_VERIFY_DEBUG(Active->Key.size() == Scheme->Keys->Types.size());
- Active->IteratorId.Epoch = AdjustEpoch(it.Epoch());
+ Active->IteratorId.Epoch = it.Epoch();
std::push_heap(Iterators.begin(), ++Active, Comparator);
break;
diff --git a/ydb/core/tablet_flat/flat_load_blob_queue.h b/ydb/core/tablet_flat/flat_load_blob_queue.h
index 8892e4f29f..5ee5afdb88 100644
--- a/ydb/core/tablet_flat/flat_load_blob_queue.h
+++ b/ydb/core/tablet_flat/flat_load_blob_queue.h
@@ -13,7 +13,7 @@ namespace NTabletFlatExecutor {
ui64 TabletID = 0;
ui32 Generation = 0;
bool Follower = false;
- NMonitoring::TDynamicCounters::TCounterPtr NoDataCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NoDataCounter;
ui64 MaxBytesInFly = 12 * 1024 * 1024;
NKikimrBlobStorage::EGetHandleClass ReadPrio = NKikimrBlobStorage::FastRead;
};
diff --git a/ydb/core/tablet_flat/shared_sausagecache.cpp b/ydb/core/tablet_flat/shared_sausagecache.cpp
index c60c30202b..1ae796a0c1 100644
--- a/ydb/core/tablet_flat/shared_sausagecache.cpp
+++ b/ydb/core/tablet_flat/shared_sausagecache.cpp
@@ -12,7 +12,7 @@
namespace NKikimr {
-TSharedPageCacheCounters::TSharedPageCacheCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters> &group)
+TSharedPageCacheCounters::TSharedPageCacheCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters> &group)
: ActivePages(group->GetCounter("ActivePages"))
, ActiveBytes(group->GetCounter("ActiveBytes"))
, PassivePages(group->GetCounter("PassivePages"))
diff --git a/ydb/core/tablet_flat/shared_sausagecache.h b/ydb/core/tablet_flat/shared_sausagecache.h
index f7afb2ee99..51d0682e38 100644
--- a/ydb/core/tablet_flat/shared_sausagecache.h
+++ b/ydb/core/tablet_flat/shared_sausagecache.h
@@ -21,7 +21,7 @@ struct TEvSharedPageCache {
};
struct TSharedPageCacheCounters final : public TAtomicRefCount<TSharedPageCacheCounters> {
- using TCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
const TCounterPtr ActivePages;
const TCounterPtr ActiveBytes;
@@ -36,7 +36,7 @@ struct TSharedPageCacheCounters final : public TAtomicRefCount<TSharedPageCacheC
const TCounterPtr LoadInFlyPages;
const TCounterPtr LoadInFlyBytes;
- explicit TSharedPageCacheCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters> &group);
+ explicit TSharedPageCacheCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters> &group);
};
struct TSharedPageCacheConfig final : public TAtomicRefCount<TSharedPageCacheConfig> {
diff --git a/ydb/core/tablet_flat/test/CMakeLists.txt b/ydb/core/tablet_flat/test/CMakeLists.txt
new file mode 100644
index 0000000000..bf5171a9ec
--- /dev/null
+++ b/ydb/core/tablet_flat/test/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(libs)
+add_subdirectory(tool)
diff --git a/ydb/core/tablet_flat/test/libs/CMakeLists.txt b/ydb/core/tablet_flat/test/libs/CMakeLists.txt
new file mode 100644
index 0000000000..bb3a7cd201
--- /dev/null
+++ b/ydb/core/tablet_flat/test/libs/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(exec)
+add_subdirectory(rows)
+add_subdirectory(table)
diff --git a/ydb/core/tablet_flat/test/libs/table/CMakeLists.txt b/ydb/core/tablet_flat/test/libs/table/CMakeLists.txt
index 01568fc47f..a61d3c93a1 100644
--- a/ydb/core/tablet_flat/test/libs/table/CMakeLists.txt
+++ b/ydb/core/tablet_flat/test/libs/table/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(model)
add_library(test-libs-table)
target_link_libraries(test-libs-table PUBLIC
diff --git a/ydb/core/tablet_flat/test/libs/table/test_dbase.h b/ydb/core/tablet_flat/test/libs/table/test_dbase.h
index b0bd726c6c..bb846d1057 100644
--- a/ydb/core/tablet_flat/test/libs/table/test_dbase.h
+++ b/ydb/core/tablet_flat/test/libs/table/test_dbase.h
@@ -145,6 +145,15 @@ namespace NTest {
return check.To(CurrentStep()), check;
}
+ TCheckIter IterData(ui32 table) noexcept
+ {
+ DoBegin(false), RowSchemeFor(table);
+
+ TCheckIter check{ *Base, { nullptr, 0, true }, table, Scheme, ReadVersion, ENext::Data };
+
+ return check.To(CurrentStep()), check;
+ }
+
TCheckSelect Select(ui32 table, bool erased = true) noexcept
{
DoBegin(false), RowSchemeFor(table);
diff --git a/ydb/core/tablet_flat/test/libs/table/wrap_dbase.h b/ydb/core/tablet_flat/test/libs/table/wrap_dbase.h
index aa162bf0f1..f800e51c25 100644
--- a/ydb/core/tablet_flat/test/libs/table/wrap_dbase.h
+++ b/ydb/core/tablet_flat/test/libs/table/wrap_dbase.h
@@ -10,11 +10,13 @@ namespace NTest {
struct TWrapDbIterImpl {
TWrapDbIterImpl(TDatabase &base, ui32 table, TIntrusiveConstPtr<TRowScheme> scheme,
- TRowVersion snapshot = TRowVersion::Max())
+ TRowVersion snapshot = TRowVersion::Max(),
+ ENext mode = ENext::All)
: Scheme(std::move(scheme))
, Base(base)
, Table(table)
, Snapshot(snapshot)
+ , Mode(mode)
{
}
@@ -68,12 +70,12 @@ namespace NTest {
Iter = Base.IterateRangeGeneric<TIter>(Table, range, Scheme->Tags(), Snapshot);
- return Iter->Next(ENext::All);
+ return Iter->Next(Mode);
}
EReady Next() noexcept
{
- return Iter->Next(ENext::All);
+ return Iter->Next(Mode);
}
const TRowState& Apply() noexcept
@@ -88,6 +90,7 @@ namespace NTest {
private:
const ui32 Table = Max<ui32>();
const TRowVersion Snapshot;
+ const ENext Mode;
TAutoPtr<TIter> Iter;
};
diff --git a/ydb/core/tablet_flat/test/tool/CMakeLists.txt b/ydb/core/tablet_flat/test/tool/CMakeLists.txt
new file mode 100644
index 0000000000..bedc0db8ab
--- /dev/null
+++ b/ydb/core/tablet_flat/test/tool/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(perf)
+add_subdirectory(surg)
diff --git a/ydb/core/tablet_flat/test/tool/perf/CMakeLists.txt b/ydb/core/tablet_flat/test/tool/perf/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tablet_flat/test/tool/perf/CMakeLists.txt
+++ b/ydb/core/tablet_flat/test/tool/perf/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tablet_flat/test/tool/surg/CMakeLists.txt b/ydb/core/tablet_flat/test/tool/surg/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tablet_flat/test/tool/surg/CMakeLists.txt
+++ b/ydb/core/tablet_flat/test/tool/surg/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tablet_flat/ut/CMakeLists.txt b/ydb/core/tablet_flat/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tablet_flat/ut/CMakeLists.txt
+++ b/ydb/core/tablet_flat/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tablet_flat/ut/ut_db_iface.cpp b/ydb/core/tablet_flat/ut/ut_db_iface.cpp
index 8d508394cf..151d2089e9 100644
--- a/ydb/core/tablet_flat/ut/ut_db_iface.cpp
+++ b/ydb/core/tablet_flat/ut/ut_db_iface.cpp
@@ -734,6 +734,115 @@ Y_UNIT_TEST_SUITE(DBase) {
RunVersionChecks(true, true);
}
+ // Regression test for KIKIMR-15506
+ Y_UNIT_TEST(KIKIMR_15506_MissingSnapshotKeys) {
+ TDbExec me;
+
+ const ui32 table = 1;
+ me.To(10)
+ .Begin()
+ .Apply(*TAlter()
+ .AddTable("me_1", table)
+ .AddColumn(table, "key", 1, ETypes::Uint64, false)
+ .AddColumn(table, "val", 2, ETypes::Uint64, false, Cimple(0_u64))
+ .AddColumnToKey(table, 1)
+ .SetEraseCache(table, true, 2, 8192))
+ .Commit();
+
+ auto dumpCache = [&]() -> TString {
+ if (auto* cache = me->DebugGetTableErasedKeysCache(table)) {
+ TStringStream stream;
+ stream << cache->DumpRanges();
+ return stream.Str();
+ } else {
+ return nullptr;
+ }
+ };
+
+ // Write a bunch of rows at v1/50
+ me.To(20).Begin();
+ for (ui64 i = 1; i <= 18; ++i) {
+ if (i != 9) {
+ me.WriteVer({1, 50}).Put(table, *me.SchemedCookRow(table).Col(i, i));
+ }
+ }
+ me.Commit();
+
+ // Erase a bunch of rows at v2/50
+ me.To(21).Begin();
+ for (ui64 i = 1; i <= 16; ++i) {
+ if (i != 9) {
+ me.WriteVer({2, 50}).Add(table, *me.SchemedCookRow(table).Col(i), ERowOp::Erase);
+ }
+ }
+ me.Commit();
+
+ // Verify we can only see 2 last rows at v3/50 (all other are deleted)
+ me.To(22).ReadVer({3, 50}).IterData(table)
+ .Seek({ }, ESeek::Lower).Is(*me.SchemedCookRow(table).Col(17_u64, 17_u64))
+ .Next().Is(*me.SchemedCookRow(table).Col(18_u64, 18_u64))
+ .Next().Is(EReady::Gone);
+
+ UNIT_ASSERT_VALUES_EQUAL(dumpCache(), "TKeyRangeCache{ [{1}, {16}] }");
+
+ // Add a new row at v4/50 (it's expected to invalidate the cached range)
+ me.To(23).Begin();
+ me.WriteVer({4, 50}).Put(table, *me.SchemedCookRow(table).Col(9_u64, 9_u64));
+ me.Commit();
+
+ UNIT_ASSERT_VALUES_EQUAL(dumpCache(), "TKeyRangeCache{ }");
+
+ // Verify we can only see 2 last rows at v3/50 (erased range shouldn't be cached incorrectly)
+ me.To(24).ReadVer({3, 50}).IterData(table)
+ .Seek({ }, ESeek::Lower).Is(*me.SchemedCookRow(table).Col(17_u64, 17_u64))
+ .Next().Is(*me.SchemedCookRow(table).Col(18_u64, 18_u64))
+ .Next().Is(EReady::Gone);
+
+ UNIT_ASSERT_VALUES_EQUAL(dumpCache(), "TKeyRangeCache{ [{1}, {8}], [{10}, {16}] }");
+
+ // Verify we can see all 3 rows at v5/50 (bug would cause as to skip over the key 9)
+ me.To(25).ReadVer({5, 50}).IterData(table)
+ .Seek({ }, ESeek::Lower).Is(*me.SchemedCookRow(table).Col(9_u64, 9_u64))
+ .Next().Is(*me.SchemedCookRow(table).Col(17_u64, 17_u64))
+ .Next().Is(*me.SchemedCookRow(table).Col(18_u64, 18_u64))
+ .Next().Is(EReady::Gone);
+ }
+
+ Y_UNIT_TEST(KIKIMR_15598_Many_MemTables) {
+ TDbExec me;
+
+ const ui32 table = 1;
+ me.To(10)
+ .Begin()
+ .Apply(*TAlter()
+ .AddTable("me_1", table)
+ .AddColumn(table, "key", 1, ETypes::Uint64, false)
+ .AddColumn(table, "val", 2, ETypes::Uint64, false, Cimple(0_u64))
+ .AddColumnToKey(table, 1))
+ .Commit();
+
+ ui64 count = 65537;
+
+ // Add 65537 rows, each in its own memtable
+ for (ui64 i = 1; i <= count; ++i) {
+ me.To(100000 + i)
+ .Begin()
+ .Put(table, *me.SchemedCookRow(table).Col(i, i))
+ .Commit();
+ // Simulate an unsuccessful compaction attempt
+ me.Snap(table);
+ }
+
+ // Check all rows exist on iteration
+ auto check = me.To(200000).IterData(table);
+ check.Seek({ }, ESeek::Lower);
+ for (ui64 i = 1; i <= count; ++i) {
+ check.To(200000 + i).Is(*me.SchemedCookRow(table).Col(i, i));
+ check.Next();
+ }
+ check.To(300000).Is(EReady::Gone);
+ }
+
}
}
diff --git a/ydb/core/tablet_flat/ut_large/CMakeLists.txt b/ydb/core/tablet_flat/ut_large/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tablet_flat/ut_large/CMakeLists.txt
+++ b/ydb/core/tablet_flat/ut_large/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/testlib/CMakeLists.txt b/ydb/core/testlib/CMakeLists.txt
index badfce0363..2b0bbf542b 100644
--- a/ydb/core/testlib/CMakeLists.txt
+++ b/ydb/core/testlib/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(actors)
+add_subdirectory(basics)
add_library(ydb-core-testlib)
target_compile_options(ydb-core-testlib PRIVATE
@@ -84,6 +86,7 @@ target_link_libraries(ydb-core-testlib PUBLIC
ydb-services-persqueue_cluster_discovery
ydb-services-persqueue_v1
ydb-services-rate_limiter
+ ydb-services-monitoring
ydb-services-ydb
ydb-services-yq
ydb-core-http_proxy
diff --git a/ydb/core/testlib/actors/CMakeLists.txt b/ydb/core/testlib/actors/CMakeLists.txt
index e0624b6569..795d6b4cf7 100644
--- a/ydb/core/testlib/actors/CMakeLists.txt
+++ b/ydb/core/testlib/actors/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-testlib-actors)
target_link_libraries(core-testlib-actors PUBLIC
diff --git a/ydb/core/testlib/actors/test_runtime.cpp b/ydb/core/testlib/actors/test_runtime.cpp
index 4ae04ce1f9..03688fa00d 100644
--- a/ydb/core/testlib/actors/test_runtime.cpp
+++ b/ydb/core/testlib/actors/test_runtime.cpp
@@ -102,7 +102,7 @@ namespace NActors {
auto* node = GetNodeById(nodeId);
const auto* app0 = App0.Get();
if (!SingleSysEnv) {
- const TIntrusivePtr<NMonitoring::TDynamicCounters> profilerCounters = NKikimr::GetServiceCounters(node->DynamicCounters, "utils");
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters> profilerCounters = NKikimr::GetServiceCounters(node->DynamicCounters, "utils");
TActorSetupCmd profilerSetup(CreateProfilerActor(profilerCounters, "."), TMailboxType::Simple, 0);
node->LocalServices.push_back(std::pair<TActorId, TActorSetupCmd>(MakeProfilerID(FirstNodeId + nodeIndex), profilerSetup));
}
@@ -262,7 +262,7 @@ namespace NActors {
fromNodeIndex, async);
}
- TIntrusivePtr<NMonitoring::TDynamicCounters> TTestActorRuntime::GetCountersForComponent(TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const char* component) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> TTestActorRuntime::GetCountersForComponent(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const char* component) {
return NKikimr::GetServiceCounters(counters, component);
}
diff --git a/ydb/core/testlib/actors/test_runtime.h b/ydb/core/testlib/actors/test_runtime.h
index 2185c8d98b..c9bb99b006 100644
--- a/ydb/core/testlib/actors/test_runtime.h
+++ b/ydb/core/testlib/actors/test_runtime.h
@@ -74,7 +74,7 @@ namespace NActors {
static bool DefaultScheduledFilterFunc(TTestActorRuntimeBase& runtime, TAutoPtr<IEventHandle>& event, TDuration delay, TInstant& deadline);
private:
void Initialize() override;
- TIntrusivePtr<NMonitoring::TDynamicCounters> GetCountersForComponent(TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const char* component) override;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> GetCountersForComponent(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const char* component) override;
void InitActorSystemSetup(TActorSystemSetup& setup) override;
TNodeData* GetNodeById(size_t idx) override {
diff --git a/ydb/core/testlib/actors/ut/CMakeLists.txt b/ydb/core/testlib/actors/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/testlib/actors/ut/CMakeLists.txt
+++ b/ydb/core/testlib/actors/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/testlib/basics/appdata.cpp b/ydb/core/testlib/basics/appdata.cpp
index 03a68b7312..069ba8e707 100644
--- a/ydb/core/testlib/basics/appdata.cpp
+++ b/ydb/core/testlib/basics/appdata.cpp
@@ -186,4 +186,11 @@ namespace NKikimr {
}
}
+ void TAppPrepare::SetEnablePqBilling(std::optional<bool> value)
+ {
+ if (value) {
+ PQConfig.MutableBillingMeteringConfig()->SetEnabled(*value);
+ }
+ }
+
}
diff --git a/ydb/core/testlib/basics/appdata.h b/ydb/core/testlib/basics/appdata.h
index 93c7e6a988..865cf3e852 100644
--- a/ydb/core/testlib/basics/appdata.h
+++ b/ydb/core/testlib/basics/appdata.h
@@ -78,6 +78,7 @@ namespace NKikimr {
void SetHiveStoragePoolFreshPeriod(ui64 value);
void AddSystemBackupSID(const TString& sid);
void SetEnableProtoSourceIdInfo(std::optional<bool> value);
+ void SetEnablePqBilling(std::optional<bool> value);
TIntrusivePtr<TChannelProfiles> Channels;
NKikimrBlobStorage::TNodeWardenServiceSet BSConf;
diff --git a/ydb/core/testlib/basics/feature_flags.h b/ydb/core/testlib/basics/feature_flags.h
index a7ed81b02e..eb725b24ff 100644
--- a/ydb/core/testlib/basics/feature_flags.h
+++ b/ydb/core/testlib/basics/feature_flags.h
@@ -36,6 +36,8 @@ public:
FEATURE_FLAG_SETTER(EnableChangefeeds)
FEATURE_FLAG_SETTER(EnableKqpSessionActor)
FEATURE_FLAG_SETTER(EnableKqpScanQueryStreamLookup)
+ FEATURE_FLAG_SETTER(EnableMoveIndex)
+ FEATURE_FLAG_SETTER(EnableNotNullDataColumns)
TDerived& SetEnableMvcc(std::optional<bool> value) {
if (value) {
diff --git a/ydb/core/testlib/basics/services.cpp b/ydb/core/testlib/basics/services.cpp
index c67024a6cb..d6589d6b66 100644
--- a/ydb/core/testlib/basics/services.cpp
+++ b/ydb/core/testlib/basics/services.cpp
@@ -49,7 +49,7 @@ namespace NPDisk {
{
auto cacheConfig = MakeIntrusive<NSchemeCache::TSchemeCacheConfig>();
cacheConfig->Roots.emplace_back(1, TTestTxConfig::SchemeShard, root);
- cacheConfig->Counters = new NMonitoring::TDynamicCounters();
+ cacheConfig->Counters = new ::NMonitoring::TDynamicCounters();
runtime.AddLocalService(MakeSchemeCacheID(),
TActorSetupCmd(CreateSchemeBoardSchemeCache(cacheConfig.Get()), TMailboxType::Revolving, 0), nodeIndex);
diff --git a/ydb/core/testlib/mock_pq_metacache.h b/ydb/core/testlib/mock_pq_metacache.h
index b44382dfab..52e5926ea5 100644
--- a/ydb/core/testlib/mock_pq_metacache.h
+++ b/ydb/core/testlib/mock_pq_metacache.h
@@ -75,6 +75,16 @@ public:
auto* result = new NSchemeCache::TSchemeCacheNavigate();
result->ResultSet = resultSet;
response->Result.reset(result);
+
+ auto factory = NPersQueue::TTopicNamesConverterFactory(AppData(ctx)->PQConfig, {});
+
+ for (const auto & entry : resultSet) {
+ auto converter = entry.PQGroupInfo ? factory.MakeTopicConverter(
+ entry.PQGroupInfo->Description.GetPQTabletConfig()
+ ) : nullptr;
+ response->Topics.push_back(converter);
+ }
+
ctx.Send(ev->Sender, std::move(response));
};
diff --git a/ydb/core/testlib/test_client.cpp b/ydb/core/testlib/test_client.cpp
index accd76b1b3..0d05bc47d6 100644
--- a/ydb/core/testlib/test_client.cpp
+++ b/ydb/core/testlib/test_client.cpp
@@ -30,6 +30,7 @@
#include <ydb/services/persqueue_v1/persqueue.h>
#include <ydb/services/persqueue_v1/topic.h>
#include <ydb/services/persqueue_v1/grpc_pq_write.h>
+#include <ydb/services/monitoring/grpc_service.h>
#include <ydb/services/yq/grpc_service.h>
#include <ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.h>
#include <ydb/core/yq/libs/control_plane_storage/control_plane_storage.h>
@@ -260,7 +261,7 @@ namespace Tests {
auto grpcMon = system->Register(NGRpcService::CreateGrpcMonService(), TMailboxType::ReadAsFilled);
system->RegisterLocalService(NGRpcService::GrpcMonServiceId(), grpcMon);
- GRpcServerRootCounters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ GRpcServerRootCounters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
auto& counters = GRpcServerRootCounters;
auto& appData = Runtime->GetAppData();
@@ -305,24 +306,25 @@ namespace Tests {
future.Subscribe(startCb);
GRpcServer->AddService(grpcService);
- GRpcServer->AddService(new NGRpcService::TGRpcYdbExportService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcYdbImportService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcYdbSchemeService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcYdbTableService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcYdbScriptingService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcOperationService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::V1::TGRpcPersQueueService(system, counters, NMsgBusProxy::CreatePersQueueMetaCacheV2Id(), grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::V1::TGRpcTopicService(system, counters, NMsgBusProxy::CreatePersQueueMetaCacheV2Id(), grpcRequestProxyId));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbExportService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbImportService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbSchemeService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbTableService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbScriptingService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcOperationService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::V1::TGRpcPersQueueService(system, counters, NMsgBusProxy::CreatePersQueueMetaCacheV2Id(), grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::V1::TGRpcTopicService(system, counters, NMsgBusProxy::CreatePersQueueMetaCacheV2Id(), grpcRequestProxyId, true));
GRpcServer->AddService(new NGRpcService::TGRpcPQClusterDiscoveryService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NKesus::TKesusGRpcService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcCmsService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcDiscoveryService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcYdbExperimentalService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcYdbClickhouseInternalService(system, counters, appData.InFlightLimiterRegistry, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcYdbS3InternalService(system, counters, grpcRequestProxyId));
+ GRpcServer->AddService(new NKesus::TKesusGRpcService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcCmsService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcDiscoveryService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbExperimentalService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbClickhouseInternalService(system, counters, appData.InFlightLimiterRegistry, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbS3InternalService(system, counters, grpcRequestProxyId, true));
GRpcServer->AddService(new NQuoter::TRateLimiterGRpcService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcYdbLongTxService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcDataStreamsService(system, counters, grpcRequestProxyId));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbLongTxService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcDataStreamsService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcMonitoringService(system, counters, grpcRequestProxyId, true));
if (Settings->EnableYq) {
GRpcServer->AddService(new NGRpcService::TGRpcYandexQueryService(system, counters, grpcRequestProxyId));
GRpcServer->AddService(new NGRpcService::TGRpcYqPrivateTaskService(system, counters, grpcRequestProxyId));
@@ -334,8 +336,8 @@ namespace Tests {
GRpcServer->AddService(service);
}
}
- GRpcServer->AddService(new NGRpcService::TGRpcYdbLogStoreService(system, counters, grpcRequestProxyId));
- GRpcServer->AddService(new NGRpcService::TGRpcAuthService(system, counters, grpcRequestProxyId));
+ GRpcServer->AddService(new NGRpcService::TGRpcYdbLogStoreService(system, counters, grpcRequestProxyId, true));
+ GRpcServer->AddService(new NGRpcService::TGRpcAuthService(system, counters, grpcRequestProxyId, true));
GRpcServer->Start();
}
@@ -669,7 +671,7 @@ namespace Tests {
{
if (Settings->PQConfig.GetEnabled() == true) {
IActor *pqMetaCache = NMsgBusProxy::NPqMetaCacheV2::CreatePQMetaCache(
- new NMonitoring::TDynamicCounters(), TDuration::Seconds(1)
+ new ::NMonitoring::TDynamicCounters(), TDuration::Seconds(1)
);
TActorId pqMetaCacheId = Runtime->Register(pqMetaCache, nodeIdx);
@@ -807,7 +809,7 @@ namespace Tests {
};
const auto ydbCredFactory = NKikimr::CreateYdbCredentialsProviderFactory;
- auto counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ auto counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
YqSharedResources = NYq::CreateYqSharedResources(protoConfig, ydbCredFactory, counters);
NYq::Init(
protoConfig,
@@ -1347,7 +1349,7 @@ namespace Tests {
NMsgBusProxy::EResponseStatus TClient::CreateTableWithUniformShardedIndex(const TString& parent,
const NKikimrSchemeOp::TTableDescription &table, const TString& indexName, const TVector<TString> indexColumns,
- const TVector<TString> dataColumns, TDuration timeout)
+ NKikimrSchemeOp::EIndexType type, const TVector<TString> dataColumns, TDuration timeout)
{
TAutoPtr<NMsgBusProxy::TBusSchemeOperation> request(new NMsgBusProxy::TBusSchemeOperation());
auto *op = request->Record.MutableTransaction()->MutableModifyScheme();
@@ -1367,7 +1369,7 @@ namespace Tests {
indexDesc->AddDataColumnNames(c);
}
- indexDesc->SetType(NKikimrSchemeOp::EIndexType::EIndexTypeGlobal);
+ indexDesc->SetType(type);
indexDesc->MutableIndexImplTableDescription()->SetUniformPartitionsCount(16);
}
diff --git a/ydb/core/testlib/test_client.h b/ydb/core/testlib/test_client.h
index 37b6c3f202..57edf86942 100644
--- a/ydb/core/testlib/test_client.h
+++ b/ydb/core/testlib/test_client.h
@@ -235,7 +235,7 @@ namespace Tests {
void SetupDefaultProfiles();
- TIntrusivePtr<NMonitoring::TDynamicCounters> GetGRpcServerRootCounters() const {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> GetGRpcServerRootCounters() const {
return GRpcServerRootCounters;
}
@@ -271,7 +271,7 @@ namespace Tests {
const NBus::TBusServerSessionConfig BusServerSessionConfig; //BusServer hold const & on config
TAutoPtr<NMsgBusProxy::IMessageBusServer> BusServer;
std::unique_ptr<NGrpc::TGRpcServer> GRpcServer;
- TIntrusivePtr<NMonitoring::TDynamicCounters> GRpcServerRootCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> GRpcServerRootCounters;
NYq::IYqSharedResources::TPtr YqSharedResources;
};
@@ -378,7 +378,8 @@ namespace Tests {
NMsgBusProxy::EResponseStatus CreateTable(const TString& parent, const NKikimrSchemeOp::TTableDescription &table, TDuration timeout = TDuration::Seconds(5000));
NMsgBusProxy::EResponseStatus CreateTableWithUniformShardedIndex(const TString& parent,
const NKikimrSchemeOp::TTableDescription &table, const TString& indexName,
- const TVector<TString> indexColumns, const TVector<TString> dataColumns = {}, TDuration timeout = TDuration::Seconds(5000));
+ const TVector<TString> indexColumns, NKikimrSchemeOp::EIndexType type,
+ const TVector<TString> dataColumns = {}, TDuration timeout = TDuration::Seconds(5000));
NMsgBusProxy::EResponseStatus SplitTable(const TString& table, ui64 datashardId, ui64 border, TDuration timeout = TDuration::Seconds(5000));
NMsgBusProxy::EResponseStatus CopyTable(const TString& parent, const TString& name, const TString& src);
NMsgBusProxy::EResponseStatus CreateKesus(const TString& parent, const TString& name);
diff --git a/ydb/core/testlib/test_pq_client.h b/ydb/core/testlib/test_pq_client.h
index c58466dc59..432fd8cca8 100644
--- a/ydb/core/testlib/test_pq_client.h
+++ b/ydb/core/testlib/test_pq_client.h
@@ -42,6 +42,7 @@ inline Tests::TServerSettings PQSettings(ui16 port, ui32 nodesCount = 2, bool ro
pqConfig.SetTopicsAreFirstClassCitizen(false);
pqConfig.SetRoot("/Root/PQ");
pqConfig.MutableQuotingConfig()->SetEnableQuoting(false);
+ pqConfig.MutableQuotingConfig()->SetQuotersDirectoryPath("/Root/PersQueue/System/Quoters");
for (int i = 0; i < 12; ++i) {
auto profile = pqConfig.AddChannelProfiles();
@@ -130,8 +131,8 @@ struct TRequestCreatePQ {
auto config = req->MutableConfig();
if (CacheSize)
config->SetCacheSize(CacheSize);
- config->SetTopicName(Topic);
- config->SetTopicPath(TString("/Root/PQ/") + Topic);
+ //config->SetTopicName(Topic);
+ //config->SetTopicPath(TString("/Root/PQ/") + Topic);
config->MutablePartitionConfig()->SetLifetimeSeconds(LifetimeS);
config->MutablePartitionConfig()->SetSourceIdLifetimeSeconds(SourceIdLifetime);
config->MutablePartitionConfig()->SetSourceIdMaxCounts(SourceIdMaxCount);
@@ -158,7 +159,7 @@ struct TRequestCreatePQ {
config->AddReadFromTimestampsMs(0);
config->AddConsumerFormatVersions(0);
config->AddReadRuleVersions(0);
- config->AddConsumerCodecs()->AddIds(0);
+ config->AddConsumerCodecs();
}
// if (!ReadRules.empty()) {
// config->SetRequireAuthRead(true);
@@ -211,12 +212,12 @@ struct TRequestAlterPQ {
if (CacheSize) {
auto* config = req->MutableConfig();
- config->SetTopicName(Topic);
+// config->SetTopicName(Topic);
config->SetCacheSize(CacheSize);
}
if (FillPartitionConfig) {
auto* config = req->MutableConfig();
- config->SetTopicName(Topic);
+// config->SetTopicName(Topic);
config->MutablePartitionConfig()->SetLifetimeSeconds(LifetimeS);
if (MirrorFrom) {
config->MutablePartitionConfig()->MutableMirrorFrom()->CopyFrom(MirrorFrom.value());
@@ -750,7 +751,7 @@ public:
UNIT_ASSERT(resp.TopicInfoSize() == 1);
const auto& topicInfo = resp.GetTopicInfo(0);
UNIT_ASSERT(topicInfo.GetTopic() == name);
- UNIT_ASSERT(topicInfo.GetConfig().GetTopicName() == name);
+ //UNIT_ASSERT(topicInfo.GetConfig().GetTopicName() == name);
if (cacheSize) {
UNIT_ASSERT(topicInfo.GetConfig().HasCacheSize());
ui64 actualSize = topicInfo.GetConfig().GetCacheSize();
diff --git a/ydb/core/tracing/tablet_info.cpp b/ydb/core/tracing/tablet_info.cpp
index 6eb99ffc60..d332eb4258 100644
--- a/ydb/core/tracing/tablet_info.cpp
+++ b/ydb/core/tracing/tablet_info.cpp
@@ -195,7 +195,7 @@ public:
AddTabletLookupForm(str);
str << "<br>";
- H3() {
+ TAG(TH3) {
str << "All tablets that have traces";
if (NodeId) {
str << " on Node " << NodeId << ":";
@@ -209,7 +209,7 @@ public:
auto& nodeTablets = nodeTabletsPair.second->Response.Get()->Record;
size_t tabletIDsSize = nodeTablets.TabletIDsSize();
if (!NodeId) {
- H4() {
+ TAG(TH4) {
str << "Node " << nodeId;
if (!tabletIDsSize) {
str << " - no tablets with traces found";
@@ -240,7 +240,7 @@ public:
<< "</font>";
}
} else {
- H4() {
+ TAG(TH4) {
str << "<font color=\"red\">Node " << nodeId << ": "
<< TReplyStatus::StatusDescription(nodeTabletsPair.second->Status)
<< "</font>";
@@ -369,7 +369,7 @@ public:
HTML(str) {
NTracing::NHttp::OutputStaticPart(str);
str << "<br>";
- H3() {
+ TAG(TH3) {
str << "Traces for Tablet " << "<a href=\"tablet?iTabletID=" << TabletId << "\">"
<< TabletId << "</a>" << ":";
}
@@ -379,7 +379,7 @@ public:
auto& nodeTabletTraces = nodeTabletTracesPair.second->Response.Get()->Record;
size_t traceIDsSize = nodeTabletTraces.TraceIDsSize();
if (traceIDsSize) {
- H4() {
+ TAG(TH4) {
str << "Node " << nodeId << ":";
}
// Sorting traces by Id
@@ -412,7 +412,7 @@ public:
size_t emptyNodes = nodesWithNoTraces.size();
if (emptyNodes) {
str << "<br>";
- H4() {
+ TAG(TH4) {
str << "No traces found on " << emptyNodes << " node" << (emptyNodes == 1 ? ":" : "s:");
}
DIV_CLASS("row") {
@@ -431,7 +431,7 @@ public:
size_t failedNodes = failNodesPair.second.size();
if (failedNodes) {
str << "<br>";
- H4() {
+ TAG(TH4) {
str << "<font color=\"red\">"
<< TReplyStatus::StatusDescription(failNodesPair.first)
<< "</font> on " << failedNodes
@@ -515,7 +515,7 @@ public:
try {
HTML(str) {
NTracing::NHttp::OutputStaticPart(str);
- H4() {
+ TAG(TH4) {
str << "Trace " << TraceInfo.TraceId << "<br>at Tablet "
<< "<a href=\"tablet?iTabletID=" << TraceInfo.TabletId << "\">" << TraceInfo.TabletId << "</a>"
<< " on Node " << TraceInfo.NodeId << ":";
@@ -633,7 +633,7 @@ void RenderTabletPage(NMon::TEvHttpInfo::TPtr ev, const TActorContext &ctx, ui64
TStringStream str;
HTML(str) {
NTracing::NHttp::OutputStaticPart(str);
- H3() {
+ TAG(TH3) {
str << "TabletID: " << tabletId;
}
DIV_CLASS("row") {
diff --git a/ydb/core/tracing/trace_collection.cpp b/ydb/core/tracing/trace_collection.cpp
index d9b1645070..dee92f0790 100644
--- a/ydb/core/tracing/trace_collection.cpp
+++ b/ydb/core/tracing/trace_collection.cpp
@@ -51,7 +51,7 @@ ui64 TTabletTraces::GetCount() const {
return Traces.size();
}
-TTraceCollection::TTraceCollection(TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+TTraceCollection::TTraceCollection(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
if (counters) {
Reporting = true;
ReportedSize = counters->GetCounter("totalsize");
@@ -151,7 +151,7 @@ ITrace* TTraceCollection::GetTrace(ui64 tabletID, TTraceID& traceID) {
return nullptr;
}
-ITraceCollection* CreateTraceCollection(TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+ITraceCollection* CreateTraceCollection(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
return new TTraceCollection(counters);
}
diff --git a/ydb/core/tracing/trace_collection.h b/ydb/core/tracing/trace_collection.h
index 6373475f8b..8843e8ec2c 100644
--- a/ydb/core/tracing/trace_collection.h
+++ b/ydb/core/tracing/trace_collection.h
@@ -32,7 +32,7 @@ public:
using MainQueueType = TList<TTabletData>;
using IndexType = THashMap<ui64, MainQueueType::iterator>;
- TTraceCollection(TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+ TTraceCollection(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
void AddTrace(ui64 tabletID, ITrace* trace) override;
// Shows all tablet IDs for which it has data
@@ -52,10 +52,10 @@ private:
IndexType Indexes;
ui64 TotalSize = 0;
- NMonitoring::TDynamicCounters::TCounterPtr ReportedSize;
- NMonitoring::TDynamicCounters::TCounterPtr ReportedCurrentCount;
- NMonitoring::TDynamicCounters::TCounterPtr ReportedTotalCount;
- NMonitoring::TDynamicCounters::TCounterPtr ReportedTabletCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReportedSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReportedCurrentCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReportedTotalCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReportedTabletCount;
bool Reporting = false;
};
diff --git a/ydb/core/tx/CMakeLists.txt b/ydb/core/tx/CMakeLists.txt
index 4524bf186f..2044b8b5d6 100644
--- a/ydb/core/tx/CMakeLists.txt
+++ b/ydb/core/tx/CMakeLists.txt
@@ -6,6 +6,22 @@
# original buildsystem will not be accepted.
+add_subdirectory(balance_coverage)
+add_subdirectory(columnshard)
+add_subdirectory(coordinator)
+add_subdirectory(datashard)
+add_subdirectory(long_tx_service)
+add_subdirectory(mediator)
+add_subdirectory(replication)
+add_subdirectory(scheme_board)
+add_subdirectory(scheme_cache)
+add_subdirectory(schemeshard)
+add_subdirectory(sequenceproxy)
+add_subdirectory(sequenceshard)
+add_subdirectory(time_cast)
+add_subdirectory(tx_allocator)
+add_subdirectory(tx_allocator_client)
+add_subdirectory(tx_proxy)
add_library(ydb-core-tx)
target_link_libraries(ydb-core-tx PUBLIC
diff --git a/ydb/core/tx/balance_coverage/CMakeLists.txt b/ydb/core/tx/balance_coverage/CMakeLists.txt
index 40e0a73c2f..6aa986c5da 100644
--- a/ydb/core/tx/balance_coverage/CMakeLists.txt
+++ b/ydb/core/tx/balance_coverage/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-tx-balance_coverage)
target_link_libraries(core-tx-balance_coverage PUBLIC
diff --git a/ydb/core/tx/balance_coverage/ut/CMakeLists.txt b/ydb/core/tx/balance_coverage/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/balance_coverage/ut/CMakeLists.txt
+++ b/ydb/core/tx/balance_coverage/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/columnshard/CMakeLists.txt b/ydb/core/tx/columnshard/CMakeLists.txt
index c178513ccc..52d50b153d 100644
--- a/ydb/core/tx/columnshard/CMakeLists.txt
+++ b/ydb/core/tx/columnshard/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(engines)
+add_subdirectory(ut)
add_library(core-tx-columnshard)
target_compile_options(core-tx-columnshard PRIVATE
diff --git a/ydb/core/tx/columnshard/blob_cache.cpp b/ydb/core/tx/columnshard/blob_cache.cpp
index 1bf137e435..9585a32443 100644
--- a/ydb/core/tx/columnshard/blob_cache.cpp
+++ b/ydb/core/tx/columnshard/blob_cache.cpp
@@ -71,7 +71,7 @@ private:
THashMap<ui64, TActorId> ShardPipes; // TabletId -> PipeClient for small blob read requests
THashMap<ui64, THashSet<ui64>> InFlightTabletRequests; // TabletId -> list to read cookies
- using TCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
const TCounterPtr SizeBytes;
const TCounterPtr SizeBlobs;
const TCounterPtr Hits;
@@ -95,7 +95,7 @@ public:
}
public:
- explicit TBlobCache(ui64 maxSize, TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
+ explicit TBlobCache(ui64 maxSize, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters)
: TActorBootstrapped<TBlobCache>()
, Cache(SIZE_MAX)
, MaxCacheDataSize(maxSize, 0, 1ull << 40)
@@ -616,7 +616,7 @@ private:
}
};
-NActors::IActor* CreateBlobCache(ui64 maxBytes, TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+NActors::IActor* CreateBlobCache(ui64 maxBytes, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
return new TBlobCache(maxBytes, counters);
}
diff --git a/ydb/core/tx/columnshard/blob_cache.h b/ydb/core/tx/columnshard/blob_cache.h
index 68ae86f5e0..afdcc14663 100644
--- a/ydb/core/tx/columnshard/blob_cache.h
+++ b/ydb/core/tx/columnshard/blob_cache.h
@@ -108,7 +108,7 @@ NActors::TActorId MakeBlobCacheServiceId() {
return TActorId(0, TStringBuf(x, 12));
}
-NActors::IActor* CreateBlobCache(ui64 maxBytes, TIntrusivePtr<NMonitoring::TDynamicCounters>);
+NActors::IActor* CreateBlobCache(ui64 maxBytes, TIntrusivePtr<::NMonitoring::TDynamicCounters>);
// Explicitly add and remove data from cache. This is usefull for newly written data that is likely to be read by
// indexing, compaction and user queries and for the data that has been compacted and will not be read again.
diff --git a/ydb/core/tx/columnshard/columnshard.cpp b/ydb/core/tx/columnshard/columnshard.cpp
index dcd41a0c3e..f0f3d56e49 100644
--- a/ydb/core/tx/columnshard/columnshard.cpp
+++ b/ydb/core/tx/columnshard/columnshard.cpp
@@ -243,6 +243,7 @@ ui64 TColumnShard::MemoryUsage() const {
if (PrimaryIndex) {
memory += PrimaryIndex->MemoryUsage();
}
+ memory += BatchCache.Bytes();
return memory;
}
diff --git a/ydb/core/tx/columnshard/columnshard.h b/ydb/core/tx/columnshard/columnshard.h
index cb6ca9a92b..cbfb482f74 100644
--- a/ydb/core/tx/columnshard/columnshard.h
+++ b/ydb/core/tx/columnshard/columnshard.h
@@ -209,6 +209,7 @@ struct TEvColumnShard {
NKikimrProto::EReplyStatus PutStatus = NKikimrProto::UNKNOWN;
NColumnShard::TUnifiedBlobId BlobId;
+ std::shared_ptr<arrow::RecordBatch> WrittenBatch;
NColumnShard::TBlobBatch BlobBatch;
NColumnShard::TUsage ResourceUsage;
TVector<ui32> YellowMoveChannels;
diff --git a/ydb/core/tx/columnshard/columnshard__index_scan.h b/ydb/core/tx/columnshard/columnshard__index_scan.h
index b2ca6c986f..819809a15b 100644
--- a/ydb/core/tx/columnshard/columnshard__index_scan.h
+++ b/ydb/core/tx/columnshard/columnshard__index_scan.h
@@ -53,6 +53,16 @@ public:
GranuleBlobs[granule].insert(blobId);
}
+ // Add cached batches without read
+ for (auto& [blobId, batch] : ReadMetadata->CommittedBatches) {
+ auto cmt = WaitCommitted.extract(NOlap::TCommittedBlob{blobId, 0, 0});
+ Y_VERIFY(!cmt.empty());
+
+ const NOlap::TCommittedBlob& cmtBlob = cmt.key();
+ ui32 batchNo = cmt.mapped();
+ IndexedData.AddNotIndexed(batchNo, batch, cmtBlob.PlanStep, cmtBlob.TxId);
+ }
+
// Read all committed blobs
for (const auto& cmtBlob : ReadMetadata->CommittedBlobs) {
auto& blobId = cmtBlob.BlobId;
diff --git a/ydb/core/tx/columnshard/columnshard__progress_tx.cpp b/ydb/core/tx/columnshard/columnshard__progress_tx.cpp
index baae719ab5..28d396b613 100644
--- a/ydb/core/tx/columnshard/columnshard__progress_tx.cpp
+++ b/ydb/core/tx/columnshard/columnshard__progress_tx.cpp
@@ -84,6 +84,12 @@ public:
TBlobGroupSelector dsGroupSelector(Self->Info());
NOlap::TDbWrapper dbTable(txc.DB, &dsGroupSelector);
+
+ // CacheInserted -> CacheCommitted
+ for (auto& writeId : meta.WriteIds) {
+ Self->BatchCache.Commit(writeId);
+ }
+
auto counters = Self->InsertTable->Commit(dbTable, step, txId, meta.MetaShard, meta.WriteIds);
Self->IncCounter(COUNTER_BLOBS_COMMITTED, counters.Rows);
Self->IncCounter(COUNTER_BYTES_COMMITTED, counters.Bytes);
diff --git a/ydb/core/tx/columnshard/columnshard__read.cpp b/ydb/core/tx/columnshard/columnshard__read.cpp
index 8b9c731373..f6d08e7f32 100644
--- a/ydb/core/tx/columnshard/columnshard__read.cpp
+++ b/ydb/core/tx/columnshard/columnshard__read.cpp
@@ -4,6 +4,7 @@
#include "columnshard__index_scan.h"
#include <ydb/core/tx/columnshard/engines/column_engine.h>
#include <ydb/core/tx/columnshard/engines/indexed_read_data.h>
+#include <ydb/core/formats/ssa_program_optimizer.h>
namespace NKikimr::NColumnShard {
@@ -40,6 +41,7 @@ std::shared_ptr<NOlap::TReadMetadata>
TTxReadBase::PrepareReadMetadata(const TActorContext& ctx, const TReadDescription& read,
const std::unique_ptr<NOlap::TInsertTable>& insertTable,
const std::unique_ptr<NOlap::IColumnEngine>& index,
+ const TBatchCache& batchCache,
TString& error) const {
Y_UNUSED(ctx);
@@ -71,13 +73,24 @@ TTxReadBase::PrepareReadMetadata(const TActorContext& ctx, const TReadDescriptio
return {};
}
- if (!out.BlobSchema || !out.ResultSchema) {
+ if (!out.BlobSchema) {
+ error = "Could not get BlobSchema.";
+ return {};
+ }
+
+ if (!out.ResultSchema) {
+ error = "Could not get ResultSchema.";
return {};
}
// insert table
out.CommittedBlobs = insertTable->Read(read.PathId, read.PlanStep, read.TxId);
+ for (auto& cmt : out.CommittedBlobs) {
+ if (auto batch = batchCache.Get(cmt.BlobId)) {
+ out.CommittedBatches.emplace(cmt.BlobId, batch);
+ }
+ }
// index
@@ -204,10 +217,18 @@ bool TTxReadBase::ParseProgram(const TActorContext& ctx, NKikimrSchemeOp::EOlapP
read.ProgramParameters = NArrow::DeserializeBatch(olapProgram.GetParameters(), schema);
}
- if (!read.AddProgram(columnResolver, program)) {
+
+ auto ssaProgramSteps = read.AddProgram(columnResolver, program);
+ if (!ssaProgramSteps) {
ErrorDescription = TStringBuilder() << "Wrong olap program";
return false;
}
+ if (!ssaProgramSteps->Program.empty() && Self->PrimaryIndex) {
+ ssaProgramSteps->Program = NKikimr::NSsaOptimizer::OptimizeProgram(ssaProgramSteps->Program, Self->PrimaryIndex->GetIndexInfo());
+ }
+
+ read.Program = ssaProgramSteps->Program;
+ read.ProgramSourceColumns = ssaProgramSteps->ProgramSourceColumns;
return true;
}
@@ -254,7 +275,8 @@ bool TTxRead::Execute(TTransactionContext& txc, const TActorContext& ctx) {
std::shared_ptr<NOlap::TReadMetadata> metadata;
if (parseResult) {
- metadata = PrepareReadMetadata(ctx, read, Self->InsertTable, Self->PrimaryIndex, ErrorDescription);
+ metadata = PrepareReadMetadata(ctx, read, Self->InsertTable, Self->PrimaryIndex, Self->BatchCache,
+ ErrorDescription);
}
ui32 status = NKikimrTxColumnShard::EResultStatus::ERROR;
diff --git a/ydb/core/tx/columnshard/columnshard__scan.cpp b/ydb/core/tx/columnshard/columnshard__scan.cpp
index fb49312146..528094e1d9 100644
--- a/ydb/core/tx/columnshard/columnshard__scan.cpp
+++ b/ydb/core/tx/columnshard/columnshard__scan.cpp
@@ -583,7 +583,8 @@ std::shared_ptr<NOlap::TReadMetadataBase> TTxScan::CreateReadMetadata(const TAct
if (indexStats) {
metadata = PrepareStatsReadMetadata(Self->TabletID(), read, Self->PrimaryIndex, ErrorDescription);
} else {
- metadata = PrepareReadMetadata(ctx, read, Self->InsertTable, Self->PrimaryIndex, ErrorDescription);
+ metadata = PrepareReadMetadata(ctx, read, Self->InsertTable, Self->PrimaryIndex, Self->BatchCache,
+ ErrorDescription);
}
if (!metadata) {
diff --git a/ydb/core/tx/columnshard/columnshard__stats_scan.h b/ydb/core/tx/columnshard/columnshard__stats_scan.h
index 28605b4a98..cc7fba4b37 100644
--- a/ydb/core/tx/columnshard/columnshard__stats_scan.h
+++ b/ydb/core/tx/columnshard/columnshard__stats_scan.h
@@ -54,7 +54,8 @@ public:
ApplyRangePredicates(batch);
if (!ReadMetadata->Program.empty()) {
- ApplyProgram(batch, ReadMetadata->Program, NArrow::GetCustomExecContext());
+ auto status = ApplyProgram(batch, ReadMetadata->Program, NArrow::GetCustomExecContext());
+ Y_VERIFY_S(status.ok(), status.message());
}
// Leave only requested columns
diff --git a/ydb/core/tx/columnshard/columnshard__write.cpp b/ydb/core/tx/columnshard/columnshard__write.cpp
index 24b624721a..7fff1e61f7 100644
--- a/ydb/core/tx/columnshard/columnshard__write.cpp
+++ b/ydb/core/tx/columnshard/columnshard__write.cpp
@@ -62,7 +62,9 @@ bool TTxWrite::Execute(TTransactionContext& txc, const TActorContext&) {
// First write wins
TBlobGroupSelector dsGroupSelector(Self->Info());
NOlap::TDbWrapper dbTable(txc.DB, &dsGroupSelector);
- ok = Self->InsertTable->Insert(dbTable, NOlap::TInsertedData(metaShard, writeId, tableId, dedupId, logoBlobId, metaStr, time));
+
+ NOlap::TInsertedData insertData(metaShard, writeId, tableId, dedupId, logoBlobId, metaStr, time);
+ ok = Self->InsertTable->Insert(dbTable, std::move(insertData));
if (ok) {
auto writesToAbort = Self->InsertTable->OldWritesToAbort(time);
std::vector<TWriteId> failedAborts;
@@ -70,6 +72,7 @@ bool TTxWrite::Execute(TTransactionContext& txc, const TActorContext&) {
if (!Self->RemoveLongTxWrite(db, writeId)) {
failedAborts.push_back(writeId);
}
+ Self->BatchCache.EraseInserted(TWriteId(writeId));
}
for (auto& writeId : failedAborts) {
writesToAbort.erase(writeId);
@@ -87,10 +90,14 @@ bool TTxWrite::Execute(TTransactionContext& txc, const TActorContext&) {
Self->BlobManager->DeleteBlob(abortedData.BlobId, blobManagerDb);
}
- // Put new data into cache
+ // Put new data into blob cache
Y_VERIFY(logoBlobId.BlobSize() == data.size());
NBlobCache::AddRangeToCache(NBlobCache::TBlobRange(logoBlobId, 0, data.size()), data);
+ // Put new data into batch cache
+ Y_VERIFY(Ev->Get()->WrittenBatch);
+ Self->BatchCache.Insert(TWriteId(writeId), logoBlobId, Ev->Get()->WrittenBatch);
+
Self->UpdateInsertTableCounters();
ui64 blobsWritten = Ev->Get()->BlobBatch.GetBlobCount();
diff --git a/ydb/core/tx/columnshard/columnshard__write_index.cpp b/ydb/core/tx/columnshard/columnshard__write_index.cpp
index 47c5d59f0d..95f0cc49bd 100644
--- a/ydb/core/tx/columnshard/columnshard__write_index.cpp
+++ b/ydb/core/tx/columnshard/columnshard__write_index.cpp
@@ -64,6 +64,7 @@ bool TTxWriteIndex::Execute(TTransactionContext& txc, const TActorContext& ctx)
for (const auto& cmtd : changes->DataToIndex) {
Self->InsertTable->EraseCommitted(dbWrap, cmtd);
Self->BlobManager->DeleteBlob(cmtd.BlobId, blobManagerDb);
+ Self->BatchCache.EraseCommitted(cmtd.BlobId);
}
if (!changes->DataToIndex.empty()) {
Self->UpdateInsertTableCounters();
@@ -232,13 +233,13 @@ bool TTxWriteIndex::Execute(TTransactionContext& txc, const TActorContext& ctx)
}
if (changes->IsInsert()) {
- Self->ActiveIndexing = false;
+ Self->ActiveIndexingOrCompaction = false;
Self->IncCounter(ok ? COUNTER_INDEXING_SUCCESS : COUNTER_INDEXING_FAIL);
Self->IncCounter(COUNTER_INDEXING_BLOBS_WRITTEN, blobsWritten);
Self->IncCounter(COUNTER_INDEXING_BYTES_WRITTEN, bytesWritten);
} else if (changes->IsCompaction()) {
- Self->ActiveCompaction = false;
+ Self->ActiveIndexingOrCompaction = false;
Y_VERIFY(changes->CompactionInfo);
bool inGranule = changes->CompactionInfo->InGranule;
diff --git a/ydb/core/tx/columnshard/columnshard_common.cpp b/ydb/core/tx/columnshard/columnshard_common.cpp
index ecacebdc80..aed13a5a27 100644
--- a/ydb/core/tx/columnshard/columnshard_common.cpp
+++ b/ydb/core/tx/columnshard/columnshard_common.cpp
@@ -45,15 +45,26 @@ struct TContext {
: ColumnResolver(columnResolver)
{}
- std::string GetName(ui32 columnId) const {
+ std::string GetName(const NKikimrSSA::TProgram::TColumn& column) const {
+ ui32 columnId = column.GetId();
TString name = ColumnResolver.GetColumnName(columnId, false);
if (name.Empty()) {
- name = ToString(columnId);
+ return GenerateName(column);
} else {
Sources[columnId] = name;
}
return std::string(name.data(), name.size());
}
+
+ std::string GenerateName(const NKikimrSSA::TProgram::TColumn& column) const {
+ TString name;
+ if (column.HasName()) {
+ name = column.GetName();
+ } else {
+ name = ToString(column.GetId());
+ }
+ return std::string(name.data(), name.size());
+ }
};
NArrow::TAssign MakeFunction(const TContext& info, const std::string& name,
@@ -64,8 +75,7 @@ NArrow::TAssign MakeFunction(const TContext& info, const std::string& name,
std::vector<std::string> arguments;
for (auto& col : func.GetArguments()) {
- ui32 columnId = col.GetId();
- arguments.push_back(info.GetName(columnId));
+ arguments.push_back(info.GetName(col));
}
switch (func.GetId()) {
@@ -177,11 +187,11 @@ NArrow::TAggregateAssign MakeAggregate(const TContext& info, const std::string&
using TAggregateAssign = NArrow::TAggregateAssign;
if (func.ArgumentsSize() == 1) {
- std::string argument = info.GetName(func.GetArguments()[0].GetId());
+ std::string argument = info.GetName(func.GetArguments()[0]);
switch (func.GetId()) {
- case TId::AGG_ANY:
- return TAggregateAssign(name, EAggregate::Any, std::move(argument));
+ case TId::AGG_SOME:
+ return TAggregateAssign(name, EAggregate::Some, std::move(argument));
case TId::AGG_COUNT:
return TAggregateAssign(name, EAggregate::Count, std::move(argument));
case TId::AGG_MIN:
@@ -190,12 +200,16 @@ NArrow::TAggregateAssign MakeAggregate(const TContext& info, const std::string&
return TAggregateAssign(name, EAggregate::Max, std::move(argument));
case TId::AGG_SUM:
return TAggregateAssign(name, EAggregate::Sum, std::move(argument));
+#if 0 // TODO
case TId::AGG_AVG:
return TAggregateAssign(name, EAggregate::Avg, std::move(argument));
-
+#endif
case TId::AGG_UNSPECIFIED:
break;
}
+ } else if (func.ArgumentsSize() == 0 && func.GetId() == TId::AGG_COUNT) {
+ // COUNT(*) case
+ return TAggregateAssign(name, EAggregate::Count, {});
}
return TAggregateAssign(name, EAggregate::Unspecified, {});
}
@@ -229,8 +243,7 @@ bool ExtractAssign(const TContext& info, NArrow::TProgramStep& step, const NKiki
{
using TId = NKikimrSSA::TProgram::TAssignment;
- ui32 columnId = assign.GetColumn().GetId();
- std::string columnName = info.GetName(columnId);
+ std::string columnName = info.GetName(assign.GetColumn());
switch (assign.GetExpressionCase()) {
case TId::kFunction:
@@ -269,11 +282,12 @@ bool ExtractAssign(const TContext& info, NArrow::TProgramStep& step, const NKiki
}
bool ExtractFilter(const TContext& info, NArrow::TProgramStep& step, const NKikimrSSA::TProgram::TFilter& filter) {
- ui32 columnId = filter.GetPredicate().GetId();
- if (!columnId) {
+ auto& column = filter.GetPredicate();
+ if (!column.HasId() && !column.HasName()) {
return false;
}
- step.Filters.push_back(info.GetName(columnId));
+ // NOTE: Name maskes Id for column. If column assigned with name it's accessible only by name.
+ step.Filters.push_back(info.GetName(column));
return true;
}
@@ -281,7 +295,8 @@ bool ExtractProjection(const TContext& info, NArrow::TProgramStep& step,
const NKikimrSSA::TProgram::TProjection& projection) {
step.Projection.reserve(projection.ColumnsSize());
for (auto& col : projection.GetColumns()) {
- step.Projection.push_back(info.GetName(col.GetId()));
+ // NOTE: Name maskes Id for column. If column assigned with name it's accessible only by name.
+ step.Projection.push_back(info.GetName(col));
}
return true;
}
@@ -290,22 +305,18 @@ bool ExtractGroupBy(const TContext& info, NArrow::TProgramStep& step, const NKik
if (!groupBy.AggregatesSize()) {
return false;
}
-#if 1 // TODO
- if (groupBy.KeyColumnsSize()) {
- return false;
- }
-#endif
// It adds implicit projection with aggregates and keys. Remove non aggregated columns.
step.Projection.reserve(groupBy.KeyColumnsSize() + groupBy.AggregatesSize());
for (auto& col : groupBy.GetKeyColumns()) {
- step.Projection.push_back(info.GetName(col.GetId()));
+ step.Projection.push_back(info.GetName(col));
}
step.GroupBy.reserve(groupBy.AggregatesSize());
+ step.GroupByKeys.reserve(groupBy.KeyColumnsSize());
for (auto& agg : groupBy.GetAggregates()) {
auto& resColumn = agg.GetColumn();
- TString columnName = ToString(resColumn.GetId());
+ TString columnName = info.GenerateName(resColumn);
auto func = MakeAggregate(info, columnName, agg.GetFunction());
if (!func.IsOk()) {
@@ -314,6 +325,9 @@ bool ExtractGroupBy(const TContext& info, NArrow::TProgramStep& step, const NKik
step.GroupBy.push_back(std::move(func));
step.Projection.push_back(columnName);
}
+ for (auto& key : groupBy.GetKeyColumns()) {
+ step.GroupByKeys.push_back(info.GetName(key));
+ }
return true;
}
@@ -373,50 +387,51 @@ std::pair<TPredicate, TPredicate> RangePredicates(const TSerializedTableRange& r
TPredicate(EOperation::Less, rightBorder, NArrow::MakeArrowSchema(rightColumns), toInclusive));
}
-bool TReadDescription::AddProgram(const IColumnResolver& columnResolver, const NKikimrSSA::TProgram& program)
+std::shared_ptr<NArrow::TSsaProgramSteps> TReadDescription::AddProgram(const IColumnResolver& columnResolver, const NKikimrSSA::TProgram& program)
{
using TId = NKikimrSSA::TProgram::TCommand;
+ auto programSteps = std::make_shared<NArrow::TSsaProgramSteps>();
TContext info(columnResolver);
auto step = std::make_shared<NArrow::TProgramStep>();
for (auto& cmd : program.GetCommand()) {
switch (cmd.GetLineCase()) {
case TId::kAssign:
if (!ExtractAssign(info, *step, cmd.GetAssign(), ProgramParameters)) {
- return false;
+ return nullptr;
}
break;
case TId::kFilter:
if (!ExtractFilter(info, *step, cmd.GetFilter())) {
- return false;
+ return nullptr;
}
break;
case TId::kProjection:
if (!ExtractProjection(info, *step, cmd.GetProjection())) {
- return false;
+ return nullptr;
}
- Program.push_back(step);
+ programSteps->Program.push_back(step);
step = std::make_shared<NArrow::TProgramStep>();
break;
case TId::kGroupBy:
if (!ExtractGroupBy(info, *step, cmd.GetGroupBy())) {
- return false;
+ return nullptr;
}
- Program.push_back(step);
+ programSteps->Program.push_back(step);
step = std::make_shared<NArrow::TProgramStep>();
break;
case TId::LINE_NOT_SET:
- return false;
+ return nullptr;
}
}
// final step without final projection
if (!step->Empty()) {
- Program.push_back(step);
+ programSteps->Program.push_back(step);
}
- ProgramSourceColumns = std::move(info.Sources);
- return true;
+ programSteps->ProgramSourceColumns = std::move(info.Sources);
+ return programSteps;
}
}
diff --git a/ydb/core/tx/columnshard/columnshard_common.h b/ydb/core/tx/columnshard/columnshard_common.h
index bbec34cbbd..fb515945dc 100644
--- a/ydb/core/tx/columnshard/columnshard_common.h
+++ b/ydb/core/tx/columnshard/columnshard_common.h
@@ -1,8 +1,10 @@
#pragma once
+#include "defs.h"
#include <ydb/core/formats/arrow_helpers.h>
#include <ydb/core/scheme/scheme_tabledefs.h>
#include <ydb/core/protos/ssa.pb.h>
#include <ydb/core/tx/columnshard/engines/predicate.h>
+#include <library/cpp/cache/cache.h>
namespace NKikimr::NOlap {
struct TIndexInfo;
@@ -48,7 +50,84 @@ struct TReadDescription {
ui64 PlanStep = 0;
ui64 TxId = 0;
- bool AddProgram(const IColumnResolver& columnResolver, const NKikimrSSA::TProgram& program);
+ std::shared_ptr<NArrow::TSsaProgramSteps> AddProgram(const IColumnResolver& columnResolver, const NKikimrSSA::TProgram& program);
+};
+
+class TBatchCache {
+public:
+ using TUnifiedBlobId = NOlap::TUnifiedBlobId;
+ using TInsertedBatch = std::pair<TUnifiedBlobId, std::shared_ptr<arrow::RecordBatch>>;
+
+ static constexpr ui32 MAX_COMMITTED_COUNT = 2 * TLimits::MIN_SMALL_BLOBS_TO_INSERT;
+ static constexpr ui32 MAX_INSERTED_COUNT = 2 * TLimits::MIN_SMALL_BLOBS_TO_INSERT;
+ static constexpr ui64 MAX_TOTAL_SIZE = 2 * TLimits::MIN_BYTES_TO_INSERT;
+
+ TBatchCache()
+ : Inserted(MAX_INSERTED_COUNT)
+ , Committed(MAX_COMMITTED_COUNT)
+ {}
+
+ void Insert(TWriteId writeId, const TUnifiedBlobId& blobId, std::shared_ptr<arrow::RecordBatch>& batch) {
+ if (Bytes() + blobId.BlobSize() > MAX_TOTAL_SIZE) {
+ return;
+ }
+ InsertedBytes += blobId.BlobSize();
+ Inserted.Insert(writeId, {blobId, batch});
+ }
+
+ void Commit(TWriteId writeId) {
+ auto it = Inserted.FindWithoutPromote(writeId);
+ if (it != Inserted.End()) {
+ auto& blobId = it->first;
+ InsertedBytes -= blobId.BlobSize();
+ CommittedBytes += blobId.BlobSize();
+
+ Committed.Insert(blobId, it->second);
+ Inserted.Erase(it);
+ }
+ }
+
+ void EraseInserted(TWriteId writeId) {
+ auto it = Inserted.FindWithoutPromote(writeId);
+ if (it != Inserted.End()) {
+ InsertedBytes -= (*it).first.BlobSize();
+ Inserted.Erase(it);
+ }
+ }
+
+ void EraseCommitted(const TUnifiedBlobId& blobId) {
+ auto it = Committed.FindWithoutPromote(blobId);
+ if (it != Committed.End()) {
+ CommittedBytes -= blobId.BlobSize();
+ Committed.Erase(it);
+ }
+ }
+
+ TInsertedBatch GetInserted(TWriteId writeId) const {
+ auto it = Inserted.Find(writeId);
+ if (it != Inserted.End()) {
+ return *it;
+ }
+ return {};
+ }
+
+ std::shared_ptr<arrow::RecordBatch> Get(const TUnifiedBlobId& blobId) const {
+ auto it = Committed.Find(blobId);
+ if (it != Committed.End()) {
+ return *it;
+ }
+ return {};
+ }
+
+ ui64 Bytes() const {
+ return InsertedBytes + CommittedBytes;
+ }
+
+private:
+ mutable TLRUCache<TWriteId, TInsertedBatch> Inserted;
+ mutable TLRUCache<TUnifiedBlobId, std::shared_ptr<arrow::RecordBatch>> Committed;
+ ui64 InsertedBytes{0};
+ ui64 CommittedBytes{0};
};
}
diff --git a/ydb/core/tx/columnshard/columnshard_impl.cpp b/ydb/core/tx/columnshard/columnshard_impl.cpp
index 0a2dee7b46..90c981bf16 100644
--- a/ydb/core/tx/columnshard/columnshard_impl.cpp
+++ b/ydb/core/tx/columnshard/columnshard_impl.cpp
@@ -511,16 +511,34 @@ void TColumnShard::EnqueueBackgroundActivities(bool periodic, bool insertOnly) {
const TActorContext& ctx = TActivationContext::ActorContextFor(SelfId());
SendPeriodicStats();
- if (auto event = SetupIndexation()) {
- ctx.Send(IndexingActor, event.release());
- }
-
if (insertOnly) {
+ if (auto event = SetupIndexation()) {
+ ctx.Send(IndexingActor, event.release());
+ }
return;
}
- if (auto event = SetupCompaction()) {
- ctx.Send(CompactionActor, event.release());
+ // Preventing conflicts between indexing and compaction leads to election between them.
+ // Indexing vs compaction probability depends on index and insert table overload status.
+ // Prefer compaction: 25% by default; 50% if IndexOverloaded(); 6.25% if InsertTableOverloaded().
+ ui32 mask = IndexOverloaded() ? 0x1 : 0x3;
+ if (InsertTableOverloaded()) {
+ mask = 0x0F;
+ }
+ bool preferIndexing = (++BackgroundActivation) & mask;
+
+ if (preferIndexing) {
+ if (auto evIdx = SetupIndexation()) {
+ ctx.Send(IndexingActor, evIdx.release());
+ } else if (auto event = SetupCompaction()) {
+ ctx.Send(CompactionActor, event.release());
+ }
+ } else {
+ if (auto event = SetupCompaction()) {
+ ctx.Send(CompactionActor, event.release());
+ } else if (auto evIdx = SetupIndexation()) {
+ ctx.Send(IndexingActor, evIdx.release());
+ }
}
if (auto event = SetupCleanup()) {
@@ -539,8 +557,8 @@ void TColumnShard::EnqueueBackgroundActivities(bool periodic, bool insertOnly) {
}
std::unique_ptr<TEvPrivate::TEvIndexing> TColumnShard::SetupIndexation() {
- if (ActiveIndexing) {
- LOG_S_DEBUG("Indexing already in progress at tablet " << TabletID());
+ if (ActiveIndexingOrCompaction) {
+ LOG_S_DEBUG("Indexing/compaction already in progress at tablet " << TabletID());
return {};
}
if (!PrimaryIndex) {
@@ -585,19 +603,30 @@ std::unique_ptr<TEvPrivate::TEvIndexing> TColumnShard::SetupIndexation() {
}
if (bytesToIndex < (ui64)Limits.MinInsertBytes && blobs < TLimits::MIN_SMALL_BLOBS_TO_INSERT) {
- LOG_S_DEBUG("Indexing not started: less data (" << bytesToIndex << " bytes in " << blobs << " blobs, ignored "
- << ignored << ") then MIN_BYTES_TO_INSERT / MIN_SMALL_BLOBS_TO_INSERT at tablet " << TabletID());
- return {};
+ LOG_S_DEBUG("Few data for indexation (" << bytesToIndex << " bytes in " << blobs << " blobs, ignored "
+ << ignored << ") at tablet " << TabletID());
+
+ // Force small indexations simetimes to keep BatchCache smaller
+ if (!bytesToIndex || SkippedIndexations < TSettings::MAX_INDEXATIONS_TO_SKIP) {
+ ++SkippedIndexations;
+ return {};
+ }
}
+ SkippedIndexations = 0;
LOG_S_DEBUG("Prepare indexing " << bytesToIndex << " bytes in " << dataToIndex.size() << " batches of committed "
<< size << " bytes in " << blobs << " blobs ignored " << ignored
<< " at tablet " << TabletID());
TVector<NOlap::TInsertedData> data;
+ THashMap<TUnifiedBlobId, std::shared_ptr<arrow::RecordBatch>> cachedBlobs;
data.reserve(dataToIndex.size());
for (auto& ptr : dataToIndex) {
data.push_back(*ptr);
+ if (auto inserted = BatchCache.GetInserted(TWriteId(ptr->WriteTxId)); inserted.second) {
+ Y_VERIFY(ptr->BlobId == inserted.first);
+ cachedBlobs.emplace(ptr->BlobId, inserted.second);
+ }
}
Y_VERIFY(data.size());
@@ -607,15 +636,15 @@ std::unique_ptr<TEvPrivate::TEvIndexing> TColumnShard::SetupIndexation() {
return {};
}
- ActiveIndexing = true;
+ ActiveIndexingOrCompaction = true;
auto ev = std::make_unique<TEvPrivate::TEvWriteIndex>(PrimaryIndex->GetIndexInfo(), indexChanges,
- Settings.CacheDataAfterIndexing);
+ Settings.CacheDataAfterIndexing, std::move(cachedBlobs));
return std::make_unique<TEvPrivate::TEvIndexing>(std::move(ev));
}
std::unique_ptr<TEvPrivate::TEvCompaction> TColumnShard::SetupCompaction() {
- if (ActiveCompaction) {
- LOG_S_DEBUG("Compaction already in progress at tablet " << TabletID());
+ if (ActiveIndexingOrCompaction) {
+ LOG_S_DEBUG("Compaction/indexing already in progress at tablet " << TabletID());
return {};
}
if (!PrimaryIndex) {
@@ -645,7 +674,7 @@ std::unique_ptr<TEvPrivate::TEvCompaction> TColumnShard::SetupCompaction() {
return {};
}
- ActiveCompaction = true;
+ ActiveIndexingOrCompaction = true;
auto ev = std::make_unique<TEvPrivate::TEvWriteIndex>(PrimaryIndex->GetIndexInfo(), indexChanges,
Settings.CacheDataAfterCompaction);
return std::make_unique<TEvPrivate::TEvCompaction>(std::move(ev), *BlobManager);
diff --git a/ydb/core/tx/columnshard/columnshard_impl.h b/ydb/core/tx/columnshard/columnshard_impl.h
index 5e9e8d63cf..655521f984 100644
--- a/ydb/core/tx/columnshard/columnshard_impl.h
+++ b/ydb/core/tx/columnshard/columnshard_impl.h
@@ -40,6 +40,8 @@ IActor* CreateS3Actor(ui64 tabletId, const TActorId& parent, const TString& tier
#endif
struct TSettings {
+ static constexpr ui32 MAX_INDEXATIONS_TO_SKIP = 16;
+
TControlWrapper BlobWriteGrouppingEnabled;
TControlWrapper CacheDataAfterIndexing;
TControlWrapper CacheDataAfterCompaction;
@@ -337,6 +339,8 @@ private:
ui64 WritesInFly = 0;
ui64 StorePathId = 0;
ui64 StatsReportRound = 0;
+ ui64 BackgroundActivation = 0;
+ ui32 SkippedIndexations = TSettings::MAX_INDEXATIONS_TO_SKIP; // Force indexation on tablet init
TIntrusivePtr<TMediatorTimecastEntry> MediatorTimeCastEntry;
bool MediatorTimeCastRegistered = false;
@@ -359,6 +363,7 @@ private:
std::unique_ptr<NTabletPipe::IClientCache> PipeClientCache;
std::unique_ptr<NOlap::TInsertTable> InsertTable;
std::unique_ptr<NOlap::IColumnEngine> PrimaryIndex;
+ TBatchCache BatchCache;
THashMap<TString, TTierConfig> TierConfigs;
THashSet<NOlap::TUnifiedBlobId> DelayedForgetBlobs;
TTtl Ttl;
@@ -378,8 +383,7 @@ private:
TMultiMap<TRowVersion, TEvColumnShard::TEvRead::TPtr> WaitingReads;
TMultiMap<TRowVersion, TEvColumnShard::TEvScan::TPtr> WaitingScans;
THashSet<ui64> PathsToDrop;
- bool ActiveIndexing = false;
- bool ActiveCompaction = false;
+ bool ActiveIndexingOrCompaction = false;
bool ActiveCleanup = false;
bool ActiveTtl = false;
std::unique_ptr<TBlobManager> BlobManager;
@@ -407,6 +411,14 @@ private:
(writesLimit && WritesInFly > writesLimit);
}
+ bool InsertTableOverloaded() const {
+ return InsertTable && InsertTable->HasOverloaded();
+ }
+
+ bool IndexOverloaded() const {
+ return PrimaryIndex && PrimaryIndex->HasOverloadedGranules();
+ }
+
TWriteId GetLongTxWrite(NIceDb::TNiceDb& db, const NLongTxService::TLongTxId& longTxId);
void AddLongTxWrite(TWriteId writeId, ui64 txId);
void LoadLongTxWrite(TWriteId writeId, const NLongTxService::TLongTxId& longTxId);
diff --git a/ydb/core/tx/columnshard/columnshard_txs.h b/ydb/core/tx/columnshard/columnshard_txs.h
index 4f6a0e5372..cf43bc25d6 100644
--- a/ydb/core/tx/columnshard/columnshard_txs.h
+++ b/ydb/core/tx/columnshard/columnshard_txs.h
@@ -34,6 +34,7 @@ struct TEvPrivate {
NKikimrProto::EReplyStatus PutStatus = NKikimrProto::UNKNOWN;
NOlap::TIndexInfo IndexInfo;
std::shared_ptr<NOlap::TColumnEngineChanges> IndexChanges;
+ THashMap<TUnifiedBlobId, std::shared_ptr<arrow::RecordBatch>> CachedBlobs;
TVector<TString> Blobs;
bool GranuleCompaction{false};
TBlobBatch BlobBatch;
@@ -44,9 +45,11 @@ struct TEvPrivate {
TEvWriteIndex(const NOlap::TIndexInfo& indexInfo,
std::shared_ptr<NOlap::TColumnEngineChanges> indexChanges,
- bool cacheData)
+ bool cacheData,
+ THashMap<TUnifiedBlobId, std::shared_ptr<arrow::RecordBatch>>&& cachedBlobs = {})
: IndexInfo(indexInfo)
, IndexChanges(indexChanges)
+ , CachedBlobs(std::move(cachedBlobs))
, CacheData(cacheData)
{}
};
@@ -253,6 +256,7 @@ protected:
const TReadDescription& readDescription,
const std::unique_ptr<NOlap::TInsertTable>& insertTable,
const std::unique_ptr<NOlap::IColumnEngine>& index,
+ const TBatchCache& batchCache,
TString& error) const;
protected:
diff --git a/ydb/core/tx/columnshard/columnshard_ut_common.cpp b/ydb/core/tx/columnshard/columnshard_ut_common.cpp
index 0b38308548..ef849697fe 100644
--- a/ydb/core/tx/columnshard/columnshard_ut_common.cpp
+++ b/ydb/core/tx/columnshard/columnshard_ut_common.cpp
@@ -160,7 +160,6 @@ TVector<TCell> MakeTestCells(const TVector<TTypeId>& types, ui32 value, TVector<
cells.reserve(types.size());
for (auto& type : types) {
- // test only: 64-bit integer or string
if (type == NTypeIds::Utf8 ||
type == NTypeIds::String ||
type == NTypeIds::String4k ||
@@ -176,12 +175,19 @@ TVector<TCell> MakeTestCells(const TVector<TTypeId>& types, ui32 value, TVector<
mem.push_back("{ \"a\" = [ { \"b\" = 1; } ]; }");
const TString& str = mem.back();
cells.push_back(TCell(str.data(), str.size()));
- } else if (type == NTypeIds::Timestamp ||
- type == NTypeIds::Uint64 ||
- type == NTypeIds::Int64) {
+ } else if (type == NTypeIds::Timestamp || type == NTypeIds::Uint64 || type == NTypeIds::Int64) {
cells.push_back(TCell::Make<ui64>(value));
- } else if (type == NTypeIds::Int32) {
- cells.push_back(TCell::Make<i32>(value));
+ } else if (type == NTypeIds::Uint32 || type == NTypeIds::Int32 || type == NTypeIds::Datetime) {
+ cells.push_back(TCell::Make<ui32>(value));
+ } else if (type == NTypeIds::Uint16 || type == NTypeIds::Int16 || type == NTypeIds::Date) {
+ cells.push_back(TCell::Make<ui16>(value));
+ } else if (type == NTypeIds::Uint8 || type == NTypeIds::Int8 || type == NTypeIds::Byte ||
+ type == NTypeIds::Bool) {
+ cells.push_back(TCell::Make<ui8>(value));
+ } else if (type == NTypeIds::Float) {
+ cells.push_back(TCell::Make<float>(value));
+ } else if (type == NTypeIds::Double) {
+ cells.push_back(TCell::Make<double>(value));
} else {
UNIT_ASSERT(false);
}
diff --git a/ydb/core/tx/columnshard/columnshard_ut_common.h b/ydb/core/tx/columnshard/columnshard_ut_common.h
index 45fd99abfc..31bbab551a 100644
--- a/ydb/core/tx/columnshard/columnshard_ut_common.h
+++ b/ydb/core/tx/columnshard/columnshard_ut_common.h
@@ -132,6 +132,39 @@ struct TTestSchema {
return schema;
}
+ static auto YdbAllTypesSchema() {
+ TVector<std::pair<TString, TTypeId>> schema = {
+ { "ts", NTypeIds::Timestamp },
+
+ { "i8", NTypeIds::Int8 },
+ { "i16", NTypeIds::Int16 },
+ { "i32", NTypeIds::Int32 },
+ { "i64", NTypeIds::Int64 },
+ { "u8", NTypeIds::Uint8 },
+ { "u16", NTypeIds::Uint16 },
+ { "u32", NTypeIds::Uint32 },
+ { "u64", NTypeIds::Uint64 },
+ { "float", NTypeIds::Float },
+ { "double", NTypeIds::Double },
+
+ { "byte", NTypeIds::Byte },
+ //{ "bool", NTypeIds::Bool },
+ //{ "decimal", NTypeIds::Decimal },
+ //{ "dynum", NTypeIds::DyNumber },
+
+ { "date", NTypeIds::Date },
+ { "datetime", NTypeIds::Datetime },
+ //{ "interval", NTypeIds::Interval },
+
+ {"text", NTypeIds::Utf8 },
+ {"bytes", NTypeIds::String },
+ {"yson", NTypeIds::Yson },
+ {"json", NTypeIds::Json },
+ {"jsondoc", NTypeIds::JsonDocument }
+ };
+ return schema;
+ };
+
static NKikimrSchemeOp::TOlapColumnDescription CreateColumn(ui32 id, const TString& name, TTypeId type) {
NKikimrSchemeOp::TOlapColumnDescription col;
col.SetId(id);
@@ -160,7 +193,10 @@ struct TTestSchema {
*schema->MutableColumns()->Add() = CreateColumn(i + 1, columns[i].first, columns[i].second);
}
- for (auto& column : ExtractNames(YdbPkSchema())) {
+ auto pk = columns;
+ Y_VERIFY(pk.size() >= 4);
+ pk.resize(4);
+ for (auto& column : ExtractNames(pk)) {
schema->AddKeyColumnNames(column);
}
diff --git a/ydb/core/tx/columnshard/engines/CMakeLists.txt b/ydb/core/tx/columnshard/engines/CMakeLists.txt
index 208167dfbb..95fe0abeb6 100644
--- a/ydb/core/tx/columnshard/engines/CMakeLists.txt
+++ b/ydb/core/tx/columnshard/engines/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(tx-columnshard-engines)
target_compile_options(tx-columnshard-engines PRIVATE
diff --git a/ydb/core/tx/columnshard/engines/column_engine.h b/ydb/core/tx/columnshard/engines/column_engine.h
index 3a77f8123f..89977b2cfc 100644
--- a/ydb/core/tx/columnshard/engines/column_engine.h
+++ b/ydb/core/tx/columnshard/engines/column_engine.h
@@ -133,6 +133,7 @@ public:
TVector<TColumnRecord> EvictedRecords;
TVector<std::pair<TPortionInfo, ui64>> PortionsToMove; // {portion, new granule}
THashMap<TBlobRange, TString> Blobs;
+ THashMap<TUnifiedBlobId, std::shared_ptr<arrow::RecordBatch>> CachedBlobs;
bool NeedRepeat{false};
bool IsInsert() const { return Type == INSERT; }
@@ -369,6 +370,7 @@ public:
virtual const std::shared_ptr<arrow::Schema>& GetSortingKey() const { return GetIndexInfo().GetSortingKey(); }
virtual const std::shared_ptr<arrow::Schema>& GetIndexKey() const { return GetIndexInfo().GetIndexKey(); }
virtual const THashSet<ui64>* GetOverloadedGranules(ui64 /*pathId*/) const { return nullptr; }
+ virtual bool HasOverloadedGranules() const { return false; }
virtual bool Load(IDbWrapper& db, const THashSet<ui64>& pathsToDrop = {}) = 0;
diff --git a/ydb/core/tx/columnshard/engines/column_engine_logs.cpp b/ydb/core/tx/columnshard/engines/column_engine_logs.cpp
index ac2af9ccce..53e46ed3b2 100644
--- a/ydb/core/tx/columnshard/engines/column_engine_logs.cpp
+++ b/ydb/core/tx/columnshard/engines/column_engine_logs.cpp
@@ -51,15 +51,10 @@ ui64 ExtractTimestamp(const std::shared_ptr<TPredicate>& pkPredicate, const std:
// Although source batches are ordered only by PK (sorting key) resulting pathBatches are ordered by extended key.
// They have const snapshot columns that do not break sorting inside batch.
-std::shared_ptr<arrow::RecordBatch> AddSpecials(const TIndexInfo& indexInfo, const TInsertedData& inserted,
- const TString& data)
+std::shared_ptr<arrow::RecordBatch> AddSpecials(const std::shared_ptr<arrow::RecordBatch>& srcBatch,
+ const TIndexInfo& indexInfo, const TInsertedData& inserted)
{
- Y_VERIFY(!data.empty(), "Blob data not present");
-
- auto batch = NArrow::DeserializeBatch(data, indexInfo.ArrowSchema());
- Y_VERIFY(batch);
-
- batch = TIndexInfo::AddSpecialColumns(batch, inserted.PlanStep(), inserted.TxId());
+ auto batch = TIndexInfo::AddSpecialColumns(srcBatch, inserted.PlanStep(), inserted.TxId());
Y_VERIFY(batch);
return NArrow::ExtractColumns(batch, indexInfo.ArrowSchemaWithSpecials());
@@ -1500,9 +1495,19 @@ TVector<TString> TColumnEngineForLogs::IndexBlobs(const TIndexInfo& indexInfo,
}
TBlobRange blobRange(inserted.BlobId, 0, inserted.BlobId.BlobSize());
- auto* blobData = changes->Blobs.FindPtr(blobRange);
- Y_VERIFY(blobData, "Data for range %s has not been read", blobRange.ToString().c_str());
- auto batch = AddSpecials(indexInfo, inserted, *blobData);
+
+ std::shared_ptr<arrow::RecordBatch> batch;
+ if (auto it = changes->CachedBlobs.find(inserted.BlobId); it != changes->CachedBlobs.end()) {
+ batch = it->second;
+ } else if (auto* blobData = changes->Blobs.FindPtr(blobRange)) {
+ Y_VERIFY(!blobData->empty(), "Blob data not present");
+ batch = NArrow::DeserializeBatch(*blobData, indexInfo.ArrowSchema());
+ } else {
+ Y_VERIFY(blobData, "Data for range %s has not been read", blobRange.ToString().c_str());
+ }
+ Y_VERIFY(batch);
+
+ batch = AddSpecials(batch, indexInfo, inserted);
pathBatches[inserted.PathId].push_back(batch);
Y_VERIFY_DEBUG(NArrow::IsSorted(pathBatches[inserted.PathId].back(), indexInfo.GetReplaceKey()));
}
diff --git a/ydb/core/tx/columnshard/engines/column_engine_logs.h b/ydb/core/tx/columnshard/engines/column_engine_logs.h
index 7521972697..133a62ddf1 100644
--- a/ydb/core/tx/columnshard/engines/column_engine_logs.h
+++ b/ydb/core/tx/columnshard/engines/column_engine_logs.h
@@ -128,6 +128,7 @@ public:
TColumnEngineForLogs(TIndexInfo&& info, ui64 tabletId, const TCompactionLimits& limits = {});
const TIndexInfo& GetIndexInfo() const override { return IndexInfo; }
+
const THashSet<ui64>* GetOverloadedGranules(ui64 pathId) const override {
if (PathsGranulesOverloaded.count(pathId)) {
return &PathsGranulesOverloaded.find(pathId)->second;
@@ -135,6 +136,8 @@ public:
return nullptr;
}
+ bool HasOverloadedGranules() const override { return !PathsGranulesOverloaded.empty(); }
+
bool Load(IDbWrapper& db, const THashSet<ui64>& pathsToDrop = {}) override;
std::shared_ptr<TColumnEngineChanges> StartInsert(TVector<TInsertedData>&& dataToIndex) override;
std::shared_ptr<TColumnEngineChanges> StartCompaction(std::unique_ptr<TCompactionInfo>&& compactionInfo,
diff --git a/ydb/core/tx/columnshard/engines/indexed_read_data.cpp b/ydb/core/tx/columnshard/engines/indexed_read_data.cpp
index 23b41f81c4..bbc8823f09 100644
--- a/ydb/core/tx/columnshard/engines/indexed_read_data.cpp
+++ b/ydb/core/tx/columnshard/engines/indexed_read_data.cpp
@@ -270,20 +270,22 @@ void TIndexedReadData::UpdateGranuleWaits(ui32 batchNo) {
}
std::shared_ptr<arrow::RecordBatch>
-TIndexedReadData::MakeNotIndexedBatch(const TString& blob, ui64 planStep, ui64 txId) const {
- auto batch = NArrow::DeserializeBatch(blob, ReadMetadata->BlobSchema);
- Y_VERIFY(batch);
+TIndexedReadData::MakeNotIndexedBatch(const std::shared_ptr<arrow::RecordBatch>& srcBatch,
+ ui64 planStep, ui64 txId) const {
+ Y_VERIFY(srcBatch);
- batch = TIndexInfo::AddSpecialColumns(batch, planStep, txId);
- Y_VERIFY(batch);
+ // Extract columns (without check), filter, attach snapshot, extract columns with check
+ // (do not filter snapshot columns)
- batch = NArrow::ExtractColumns(batch, ReadMetadata->LoadSchema);
+ auto batch = NArrow::ExtractExistedColumns(srcBatch, ReadMetadata->LoadSchema);
Y_VERIFY(batch);
{ // Apply predicate
// TODO: Extract this info function
std::vector<bool> less;
if (ReadMetadata->LessPredicate) {
+ Y_VERIFY(NArrow::HasAllColumns(batch, ReadMetadata->LessPredicate->Batch->schema()));
+
auto cmpType = ReadMetadata->LessPredicate->Inclusive ?
NArrow::ECompareType::LESS_OR_EQUAL : NArrow::ECompareType::LESS;
less = NArrow::MakePredicateFilter(batch, ReadMetadata->LessPredicate->Batch, cmpType);
@@ -291,6 +293,8 @@ TIndexedReadData::MakeNotIndexedBatch(const TString& blob, ui64 planStep, ui64 t
std::vector<bool> greater;
if (ReadMetadata->GreaterPredicate) {
+ Y_VERIFY(NArrow::HasAllColumns(batch, ReadMetadata->GreaterPredicate->Batch->schema()));
+
auto cmpType = ReadMetadata->GreaterPredicate->Inclusive ?
NArrow::ECompareType::GREATER_OR_EQUAL : NArrow::ECompareType::GREATER;
greater = NArrow::MakePredicateFilter(batch, ReadMetadata->GreaterPredicate->Batch, cmpType);
@@ -305,6 +309,10 @@ TIndexedReadData::MakeNotIndexedBatch(const TString& blob, ui64 planStep, ui64 t
}
}
+ batch = TIndexInfo::AddSpecialColumns(batch, planStep, txId);
+ Y_VERIFY(batch);
+
+ batch = NArrow::ExtractColumns(batch, ReadMetadata->LoadSchema);
Y_VERIFY(batch);
return batch;
}
@@ -515,7 +523,8 @@ TIndexedReadData::MakeResult(TVector<std::vector<std::shared_ptr<arrow::RecordBa
if (ReadMetadata->HasProgram()) {
for (auto& batch : out) {
- ApplyProgram(batch.ResultBatch, ReadMetadata->Program, NArrow::GetCustomExecContext());
+ auto status = ApplyProgram(batch.ResultBatch, ReadMetadata->Program, NArrow::GetCustomExecContext());
+ Y_VERIFY_S(status.ok(), status.message());
}
}
return out;
diff --git a/ydb/core/tx/columnshard/engines/indexed_read_data.h b/ydb/core/tx/columnshard/engines/indexed_read_data.h
index 734e152144..0c7818bbba 100644
--- a/ydb/core/tx/columnshard/engines/indexed_read_data.h
+++ b/ydb/core/tx/columnshard/engines/indexed_read_data.h
@@ -81,6 +81,7 @@ struct TReadMetadata : public TReadMetadataBase, public std::enable_shared_from_
ui64 TxId = 0;
std::shared_ptr<TSelectInfo> SelectInfo;
std::vector<TCommittedBlob> CommittedBlobs;
+ THashMap<TUnifiedBlobId, std::shared_ptr<arrow::RecordBatch>> CommittedBatches;
std::shared_ptr<TReadStats> ReadStats;
TReadMetadata(const TIndexInfo& info)
@@ -194,12 +195,17 @@ public:
/// @returns batches and corresponding last keys in correct order (i.e. sorted by by PK)
TVector<TPartialReadResult> GetReadyResults(const int64_t maxRowsInBatch);
- void AddNotIndexed(ui32 batchNo, TString serializedBach, ui64 planStep, ui64 txId) {
+ void AddNotIndexed(ui32 batchNo, TString blob, ui64 planStep, ui64 txId) {
+ auto batch = NArrow::DeserializeBatch(blob, ReadMetadata->BlobSchema);
+ AddNotIndexed(batchNo, batch, planStep, txId);
+ }
+
+ void AddNotIndexed(ui32 batchNo, const std::shared_ptr<arrow::RecordBatch>& batch, ui64 planStep, ui64 txId) {
Y_VERIFY(batchNo < NotIndexed.size());
if (!NotIndexed[batchNo]) {
++ReadyNotIndexed;
}
- NotIndexed[batchNo] = MakeNotIndexedBatch(serializedBach, planStep, txId);
+ NotIndexed[batchNo] = MakeNotIndexedBatch(batch, planStep, txId);
}
void AddIndexed(const TBlobRange& blobRange, const TString& column);
@@ -242,7 +248,8 @@ private:
return PortionGranule.find(portion)->second;
}
- std::shared_ptr<arrow::RecordBatch> MakeNotIndexedBatch(const TString& blob, ui64 planStep, ui64 txId) const;
+ std::shared_ptr<arrow::RecordBatch> MakeNotIndexedBatch(
+ const std::shared_ptr<arrow::RecordBatch>& batch, ui64 planStep, ui64 txId) const;
std::shared_ptr<arrow::RecordBatch> AssembleIndexedBatch(ui32 batchNo);
void UpdateGranuleWaits(ui32 batchNo);
THashMap<ui64, std::shared_ptr<arrow::RecordBatch>> SplitByGranules(
diff --git a/ydb/core/tx/columnshard/engines/insert_table.h b/ydb/core/tx/columnshard/engines/insert_table.h
index 11ddaa4c49..1245204fbe 100644
--- a/ydb/core/tx/columnshard/engines/insert_table.h
+++ b/ydb/core/tx/columnshard/engines/insert_table.h
@@ -129,6 +129,7 @@ public:
const THashMap<TWriteId, TInsertedData>& GetAborted() const { return Aborted; }
void SetOverloaded(ui64 pathId, bool overload);
bool IsOverloaded(ui64 pathId) const { return PathsOverloaded.count(pathId); }
+ bool HasOverloaded() const { return !PathsOverloaded.empty(); }
private:
THashMap<TWriteId, TInsertedData> Inserted;
diff --git a/ydb/core/tx/columnshard/engines/ut/CMakeLists.txt b/ydb/core/tx/columnshard/engines/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/columnshard/engines/ut/CMakeLists.txt
+++ b/ydb/core/tx/columnshard/engines/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/columnshard/indexing_actor.cpp b/ydb/core/tx/columnshard/indexing_actor.cpp
index b745bfd4df..dff01bb216 100644
--- a/ydb/core/tx/columnshard/indexing_actor.cpp
+++ b/ydb/core/tx/columnshard/indexing_actor.cpp
@@ -24,10 +24,15 @@ public:
Y_VERIFY(TxEvent);
auto& indexChanges = TxEvent->IndexChanges;
Y_VERIFY(indexChanges);
+ indexChanges->CachedBlobs = std::move(TxEvent->CachedBlobs);
auto& blobsToIndex = indexChanges->DataToIndex;
for (size_t i = 0; i < blobsToIndex.size(); ++i) {
auto& blobId = blobsToIndex[i].BlobId;
+ if (indexChanges->CachedBlobs.count(blobId)) {
+ continue;
+ }
+
auto res = BlobsToRead.emplace(blobId, i);
Y_VERIFY(res.second, "Duplicate blob in DataToIndex: %s", blobId.ToStringNew().c_str());
SendReadRequest(NBlobCache::TBlobRange(blobId, 0, blobId.BlobSize()));
diff --git a/ydb/core/tx/columnshard/read_actor.cpp b/ydb/core/tx/columnshard/read_actor.cpp
index 2fff0b1441..4fd523fd37 100644
--- a/ydb/core/tx/columnshard/read_actor.cpp
+++ b/ydb/core/tx/columnshard/read_actor.cpp
@@ -143,6 +143,7 @@ public:
ui32 notIndexed = 0;
for (size_t i = 0; i < ReadMetadata->CommittedBlobs.size(); ++i, ++notIndexed) {
const auto& cmtBlob = ReadMetadata->CommittedBlobs[i];
+
CommittedBlobs.emplace(cmtBlob.BlobId);
WaitCommitted.emplace(cmtBlob, notIndexed);
}
@@ -152,8 +153,19 @@ public:
WaitIndexed.insert(blobRange);
}
- LOG_S_DEBUG("Starting read (" << WaitIndexed.size() << " indexed, " << WaitCommitted.size()
- << " committed blobs) at tablet " << TabletId);
+ // Add cached batches without read
+ for (auto& [blobId, batch] : ReadMetadata->CommittedBatches) {
+ auto cmt = WaitCommitted.extract(NOlap::TCommittedBlob{blobId, 0, 0});
+ Y_VERIFY(!cmt.empty());
+
+ const NOlap::TCommittedBlob& cmtBlob = cmt.key();
+ ui32 batchNo = cmt.mapped();
+ IndexedData.AddNotIndexed(batchNo, batch, cmtBlob.PlanStep, cmtBlob.TxId);
+ }
+
+ LOG_S_DEBUG("Starting read (" << WaitIndexed.size() << " indexed, "
+ << ReadMetadata->CommittedBlobs.size() << " committed, "
+ << WaitCommitted.size() << " not cached committed) at tablet " << TabletId);
bool earlyExit = false;
if (Deadline != TInstant::Max()) {
diff --git a/ydb/core/tx/columnshard/ut/CMakeLists.txt b/ydb/core/tx/columnshard/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/columnshard/ut/CMakeLists.txt
+++ b/ydb/core/tx/columnshard/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/columnshard/ut_columnshard_read_write.cpp b/ydb/core/tx/columnshard/ut_columnshard_read_write.cpp
index db3e42f55f..2a28f40711 100644
--- a/ydb/core/tx/columnshard/ut_columnshard_read_write.cpp
+++ b/ydb/core/tx/columnshard/ut_columnshard_read_write.cpp
@@ -83,6 +83,86 @@ bool DataHasOnly(const TVector<TString>& blobs, const TString& srtSchema, std::p
return true;
}
+template <typename TArrowType>
+bool CheckTypedIntValues(const std::shared_ptr<arrow::Array>& array, const std::vector<int64_t>& expected) {
+ UNIT_ASSERT(array);
+ UNIT_ASSERT_VALUES_EQUAL(array->length(), (int)expected.size());
+
+ auto& column = dynamic_cast<const arrow::NumericArray<TArrowType>&>(*array);
+
+ for (int i = 0; i < column.length(); ++i) {
+ auto value = column.Value(i);
+ UNIT_ASSERT_VALUES_EQUAL(value, expected[i]);
+ }
+ return true;
+}
+
+template <typename TArrowArrayType>
+bool CheckTypedStrValues(const std::shared_ptr<arrow::Array>& array, const std::vector<std::string>& expected) {
+ UNIT_ASSERT(array);
+ UNIT_ASSERT_VALUES_EQUAL(array->length(), (int)expected.size());
+
+ auto& column = dynamic_cast<const TArrowArrayType&>(*array);
+
+ for (int i = 0; i < column.length(); ++i) {
+ auto value = column.GetString(i);
+ UNIT_ASSERT_VALUES_EQUAL(value, expected[i]);
+ }
+ return true;
+}
+
+bool CheckIntValues(const std::shared_ptr<arrow::Array>& array, const std::vector<int64_t>& expected) {
+ UNIT_ASSERT(array);
+
+ std::vector<std::string> expectedStr;
+ expectedStr.reserve(expected.size());
+ for (auto& val : expected) {
+ expectedStr.push_back(ToString(val));
+ }
+
+ switch (array->type()->id()) {
+ case arrow::Type::UINT8:
+ return CheckTypedIntValues<arrow::UInt8Type>(array, expected);
+ case arrow::Type::UINT16:
+ return CheckTypedIntValues<arrow::UInt16Type>(array, expected);
+ case arrow::Type::UINT32:
+ return CheckTypedIntValues<arrow::UInt32Type>(array, expected);
+ case arrow::Type::UINT64:
+ return CheckTypedIntValues<arrow::UInt64Type>(array, expected);
+ case arrow::Type::INT8:
+ return CheckTypedIntValues<arrow::Int8Type>(array, expected);
+ case arrow::Type::INT16:
+ return CheckTypedIntValues<arrow::Int16Type>(array, expected);
+ case arrow::Type::INT32:
+ return CheckTypedIntValues<arrow::Int32Type>(array, expected);
+ case arrow::Type::INT64:
+ return CheckTypedIntValues<arrow::Int64Type>(array, expected);
+
+ case arrow::Type::TIMESTAMP:
+ return CheckTypedIntValues<arrow::TimestampType>(array, expected);
+ case arrow::Type::DURATION:
+ return CheckTypedIntValues<arrow::DurationType>(array, expected);
+
+ case arrow::Type::FLOAT:
+ return CheckTypedIntValues<arrow::FloatType>(array, expected);
+ case arrow::Type::DOUBLE:
+ return CheckTypedIntValues<arrow::DoubleType>(array, expected);
+
+ case arrow::Type::STRING:
+ return CheckTypedStrValues<arrow::StringArray>(array, expectedStr);
+ case arrow::Type::BINARY:
+ return CheckTypedStrValues<arrow::BinaryArray>(array, expectedStr);
+ case arrow::Type::FIXED_SIZE_BINARY:
+ return CheckTypedStrValues<arrow::FixedSizeBinaryArray>(array, expectedStr);
+
+ default:
+ Cerr << "type : " << array->type()->ToString() << "\n";
+ UNIT_ASSERT(false);
+ break;
+ }
+ return true;
+}
+
bool CheckOrdered(const TString& blob, const TString& srtSchema) {
auto schema = NArrow::DeserializeSchema(srtSchema);
auto batch = NArrow::DeserializeBatch(blob, schema);
@@ -106,14 +186,11 @@ bool CheckOrdered(const TString& blob, const TString& srtSchema) {
return true;
}
-bool CheckColumns(const TString& blob, const NKikimrTxColumnShard::TMetadata& meta, const TVector<TString>& colNames,
- size_t rowsCount = 100) {
- auto schema = NArrow::DeserializeSchema(meta.GetSchema());
- auto batch = NArrow::DeserializeBatch(blob, schema);
+bool CheckColumns(const std::shared_ptr<arrow::RecordBatch>& batch, const std::vector<TString>& colNames, size_t rowsCount) {
UNIT_ASSERT(batch);
-
for (auto& col : colNames) {
if (!batch->GetColumnByName(col)) {
+ Cerr << "schema: " << batch->schema()->ToString() << "\n";
return false;
}
}
@@ -124,6 +201,14 @@ bool CheckColumns(const TString& blob, const NKikimrTxColumnShard::TMetadata& me
return true;
}
+bool CheckColumns(const TString& blob, const NKikimrTxColumnShard::TMetadata& meta, const std::vector<TString>& colNames,
+ size_t rowsCount = 100) {
+ auto schema = NArrow::DeserializeSchema(meta.GetSchema());
+ auto batch = NArrow::DeserializeBatch(blob, schema);
+
+ return CheckColumns(batch, colNames, rowsCount);
+}
+
void SetupSchema(TTestBasicRuntime& runtime, TActorId& sender, ui64 pathId,
const TVector<std::pair<TString, TTypeId>>& schema = TTestSchema::YdbSchema(),
NOlap::TSnapshot snap = {10, 10}, TString codec = "") {
@@ -613,11 +698,11 @@ void TestWriteRead(bool reboots, const TVector<std::pair<TString, TTypeId>>& ydb
if (ydbSchema == TTestSchema::YdbSchema()) {
if (codec == "" || codec == "lz4") {
- UNIT_ASSERT_VALUES_EQUAL(readStats.GetDataBytes(), 5054176);
+ UNIT_ASSERT_VALUES_EQUAL(readStats.GetDataBytes() / 100000, 50);
} else if (codec == "none") {
- UNIT_ASSERT_VALUES_EQUAL(readStats.GetDataBytes(), 7557872);
+ UNIT_ASSERT_VALUES_EQUAL(readStats.GetDataBytes() / 100000, 75);
} else if (codec == "zstd") {
- UNIT_ASSERT_VALUES_EQUAL(readStats.GetDataBytes(), 2636440);
+ UNIT_ASSERT_VALUES_EQUAL(readStats.GetDataBytes() / 100000, 26);
} else {
UNIT_ASSERT(false);
}
@@ -882,41 +967,120 @@ static NKikimrSSA::TProgram MakeSelect(TAssignment::EFunction compareId = TAssig
return ssa;
}
-// SELECT some(timestamp), some(saved_at) FROM t
-//
-// FIXME:
-// NotImplemented: Function any has no kernel matching input types (array[timestamp[us]])
-// NotImplemented: Function any has no kernel matching input types (array[string])
-// NotImplemented: Function min_max has no kernel matching input types (array[timestamp[us]])
-// NotImplemented: Function min_max has no kernel matching input types (array[string])
-//
-NKikimrSSA::TProgram MakeSelectAggregates(TAggAssignment::EAggregateFunction aggId = TAggAssignment::AGG_ANY,
- std::vector<ui32> columnIds = {1, 9})
+// SELECT min(x), max(x), some(x), count(x) FROM t [GROUP BY key[0], key[1], ...]
+NKikimrSSA::TProgram MakeSelectAggregates(ui32 columnId, const std::vector<ui32>& keys = {},
+ bool addProjection = true)
{
NKikimrSSA::TProgram ssa;
-
- ui32 tmpColumnId = 100;
-
auto* line1 = ssa.AddCommand();
auto* groupBy = line1->MutableGroupBy();
+ for (ui32 key : keys) {
+ groupBy->AddKeyColumns()->SetId(key + 1);
+ }
//
auto* l1_agg1 = groupBy->AddAggregates();
- l1_agg1->MutableColumn()->SetId(tmpColumnId);
+ l1_agg1->MutableColumn()->SetId(100);
auto* l1_agg1_f = l1_agg1->MutableFunction();
- l1_agg1_f->SetId(aggId);
- l1_agg1_f->AddArguments()->SetId(columnIds[0]);
+ l1_agg1_f->SetId(TAggAssignment::AGG_MIN);
+ l1_agg1_f->AddArguments()->SetId(columnId);
//
auto* l1_agg2 = groupBy->AddAggregates();
- l1_agg2->MutableColumn()->SetId(tmpColumnId + 1);
+ l1_agg2->MutableColumn()->SetId(101);
auto* l1_agg2_f = l1_agg2->MutableFunction();
- l1_agg2_f->SetId(aggId);
- l1_agg2_f->AddArguments()->SetId(columnIds[1]);
+ l1_agg2_f->SetId(TAggAssignment::AGG_MAX);
+ l1_agg2_f->AddArguments()->SetId(columnId);
+ //
+ auto* l1_agg3 = groupBy->AddAggregates();
+ l1_agg3->MutableColumn()->SetId(102);
+ auto* l1_agg3_f = l1_agg3->MutableFunction();
+ l1_agg3_f->SetId(TAggAssignment::AGG_SOME);
+ l1_agg3_f->AddArguments()->SetId(columnId);
+ //
+ auto* l1_agg4 = groupBy->AddAggregates();
+ l1_agg4->MutableColumn()->SetId(103);
+ auto* l1_agg4_f = l1_agg4->MutableFunction();
+ l1_agg4_f->SetId(TAggAssignment::AGG_COUNT);
+ l1_agg4_f->AddArguments()->SetId(columnId);
+
+ // Projection by ids
+ if (addProjection) {
+ auto* line2 = ssa.AddCommand();
+ auto* proj = line2->MutableProjection();
+ proj->AddColumns()->SetId(100);
+ proj->AddColumns()->SetId(101);
+ proj->AddColumns()->SetId(102);
+ proj->AddColumns()->SetId(103);
+ }
+ return ssa;
+}
+
+// SELECT min(x), max(x), some(x), count(x) FROM t WHERE y = 1 [GROUP BY key[0], key[1], ...]
+NKikimrSSA::TProgram MakeSelectAggregatesWithFilter(ui32 columnId, ui32 filterColumnId,
+ const std::vector<ui32>& keys = {},
+ bool addProjection = true)
+{
+ NKikimrSSA::TProgram ssa;
+
+ auto* line1 = ssa.AddCommand();
+ auto* l1_assign = line1->MutableAssign();
+ l1_assign->MutableColumn()->SetId(50);
+ l1_assign->MutableConstant()->SetInt32(1);
auto* line2 = ssa.AddCommand();
- auto* proj = line2->MutableProjection();
- proj->AddColumns()->SetId(tmpColumnId);
- proj->AddColumns()->SetId(tmpColumnId + 1);
+ auto* l2_assign = line2->MutableAssign();
+ l2_assign->MutableColumn()->SetId(51);
+ auto* l2_func = l2_assign->MutableFunction();
+ l2_func->SetId(TAssignment::FUNC_CMP_EQUAL);
+ l2_func->AddArguments()->SetId(filterColumnId);
+ l2_func->AddArguments()->SetId(50);
+
+ auto* line3 = ssa.AddCommand();
+ line3->MutableFilter()->MutablePredicate()->SetId(51);
+
+ auto* line4 = ssa.AddCommand();
+ auto* groupBy = line4->MutableGroupBy();
+ for (ui32 key : keys) {
+ groupBy->AddKeyColumns()->SetId(key + 1);
+ }
+ //
+ auto* l4_agg1 = groupBy->AddAggregates();
+ //l4_agg1->MutableColumn()->SetId(100);
+ l4_agg1->MutableColumn()->SetName("res_min");
+ auto* l4_agg1_f = l4_agg1->MutableFunction();
+ l4_agg1_f->SetId(TAggAssignment::AGG_MIN);
+ l4_agg1_f->AddArguments()->SetId(columnId);
+ //
+ auto* l4_agg2 = groupBy->AddAggregates();
+ //l4_agg2->MutableColumn()->SetId(101);
+ l4_agg2->MutableColumn()->SetName("res_max");
+ auto* l4_agg2_f = l4_agg2->MutableFunction();
+ l4_agg2_f->SetId(TAggAssignment::AGG_MAX);
+ l4_agg2_f->AddArguments()->SetId(columnId);
+ //
+ auto* l4_agg3 = groupBy->AddAggregates();
+ //l4_agg3->MutableColumn()->SetId(102);
+ l4_agg3->MutableColumn()->SetName("res_some");
+ auto* l4_agg3_f = l4_agg3->MutableFunction();
+ l4_agg3_f->SetId(TAggAssignment::AGG_SOME);
+ l4_agg3_f->AddArguments()->SetId(columnId);
+ //
+ auto* l4_agg4 = groupBy->AddAggregates();
+ //l4_agg4->MutableColumn()->SetId(103);
+ l4_agg4->MutableColumn()->SetName("res_count");
+ auto* l4_agg4_f = l4_agg4->MutableFunction();
+ l4_agg4_f->SetId(TAggAssignment::AGG_COUNT);
+ l4_agg4_f->AddArguments()->SetId(columnId);
+
+ // Projection by names
+ if (addProjection) {
+ auto* line5 = ssa.AddCommand();
+ auto* proj = line5->MutableProjection();
+ proj->AddColumns()->SetName("res_min");
+ proj->AddColumns()->SetName("res_max");
+ proj->AddColumns()->SetName("res_some");
+ proj->AddColumns()->SetName("res_count");
+ }
return ssa;
}
@@ -1047,7 +1211,18 @@ void TestReadWithProgram(const TVector<std::pair<TString, TTypeId>>& ydbSchema =
}
}
-void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema = TTestSchema::YdbSchema()) {
+struct TReadAggregateResult {
+ ui32 NumRows = 1;
+
+ std::vector<int64_t> MinValues = {0};
+ std::vector<int64_t> MaxValues = {99};
+ std::vector<int64_t> Counts = {100};
+};
+
+void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema, const TString& testDataBlob,
+ bool addProjection, const std::vector<ui32>& aggKeys = {},
+ const TReadAggregateResult& expectedResult = {},
+ const TReadAggregateResult& expectedFiltered = {1, {1}, {1}, {1}}) {
TTestBasicRuntime runtime;
TTester::Setup(runtime);
@@ -1064,10 +1239,10 @@ void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema = T
ui64 planStep = 100;
ui64 txId = 100;
- SetupSchema(runtime, sender, tableId);
+ SetupSchema(runtime, sender, tableId, ydbSchema);
{ // write some data
- bool ok = WriteData(runtime, sender, metaShard, writeId, tableId, MakeTestBlob({0, 100}, ydbSchema));
+ bool ok = WriteData(runtime, sender, metaShard, writeId, tableId, testDataBlob);
UNIT_ASSERT(ok);
ProposeCommit(runtime, sender, metaShard, txId, {writeId});
@@ -1077,9 +1252,26 @@ void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema = T
// TODO: write some into index
std::vector<TString> programs;
+ THashSet<ui32> isFiltered;
+ THashSet<ui32> checkResult;
+ THashSet<NScheme::TTypeId> intTypes = {
+ NTypeIds::Int8, NTypeIds::Int16, NTypeIds::Int32, NTypeIds::Int64,
+ NTypeIds::Uint8, NTypeIds::Uint16, NTypeIds::Uint32, NTypeIds::Uint64,
+ NTypeIds::Timestamp
+ };
+ THashSet<NScheme::TTypeId> strTypes = {
+ NTypeIds::Utf8, NTypeIds::String
+ //NTypeIds::Yson, NTypeIds::Json, NTypeIds::JsonDocument
+ };
- {
- NKikimrSSA::TProgram ssa = MakeSelectAggregates(TAggAssignment::AGG_COUNT);
+ ui32 prog = 0;
+ for (ui32 i = 0; i < ydbSchema.size(); ++i, ++prog) {
+ if (intTypes.count(ydbSchema[i].second) ||
+ strTypes.count(ydbSchema[i].second)) {
+ checkResult.insert(prog);
+ }
+
+ NKikimrSSA::TProgram ssa = MakeSelectAggregates(i + 1, aggKeys, addProjection);
TString serialized;
UNIT_ASSERT(ssa.SerializeToString(&serialized));
NKikimrSSA::TOlapProgram program;
@@ -1089,8 +1281,14 @@ void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema = T
UNIT_ASSERT(program.SerializeToString(&programs.back()));
}
- {
- NKikimrSSA::TProgram ssa = MakeSelectAggregates(TAggAssignment::AGG_MIN, {5, 5});
+ for (ui32 i = 0; i < ydbSchema.size(); ++i, ++prog) {
+ isFiltered.insert(prog);
+ if (intTypes.count(ydbSchema[i].second) ||
+ strTypes.count(ydbSchema[i].second)) {
+ checkResult.insert(prog);
+ }
+
+ NKikimrSSA::TProgram ssa = MakeSelectAggregatesWithFilter(i + 1, 4, aggKeys, addProjection);
TString serialized;
UNIT_ASSERT(ssa.SerializeToString(&serialized));
NKikimrSSA::TOlapProgram program;
@@ -1100,8 +1298,19 @@ void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema = T
UNIT_ASSERT(program.SerializeToString(&programs.back()));
}
- ui32 i = 0;
+ std::vector<TString> namedColumns = {"res_min", "res_max", "res_some", "res_count"};
+ std::vector<TString> unnamedColumns = {"100", "101", "102", "103"};
+ if (!addProjection) {
+ for (auto& key : aggKeys) {
+ namedColumns.push_back(ydbSchema[key].first);
+ unnamedColumns.push_back(ydbSchema[key].first);
+ }
+ }
+
+ prog = 0;
for (auto& programText : programs) {
+ Cerr << "-- select program: " << prog << " is filtered: " << (int)isFiltered.count(prog) << "\n";
+
auto* readEvent = new TEvColumnShard::TEvRead(sender, metaShard, planStep, txId, tableId);
auto& readProto = Proto(readEvent);
@@ -1118,6 +1327,7 @@ void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema = T
UNIT_ASSERT_EQUAL(resRead.GetOrigin(), TTestTxConfig::TxTablet0);
UNIT_ASSERT_EQUAL(resRead.GetTxInitiator(), metaShard);
+ std::shared_ptr<arrow::RecordBatch> batch;
{
UNIT_ASSERT_EQUAL(resRead.GetStatus(), NKikimrTxColumnShard::EResultStatus::SUCCESS);
UNIT_ASSERT_EQUAL(resRead.GetBatch(), 0);
@@ -1125,15 +1335,35 @@ void TestReadAggregate(const TVector<std::pair<TString, TTypeId>>& ydbSchema = T
UNIT_ASSERT(resRead.GetData().size() > 0);
auto& meta = resRead.GetMeta();
- //auto& schema = meta.GetSchema();
+ auto& schema = meta.GetSchema();
+ auto& data = resRead.GetData();
- TVector<TString> readData;
- readData.push_back(resRead.GetData());
+ batch = NArrow::DeserializeBatch(data, NArrow::DeserializeSchema(schema));
+ UNIT_ASSERT(batch);
+ UNIT_ASSERT(batch->ValidateFull().ok());
+ }
- UNIT_ASSERT(CheckColumns(readData[0], meta, {"100", "101"}, 1));
+ if (checkResult.count(prog)) {
+ if (isFiltered.count(prog)) {
+ UNIT_ASSERT(CheckColumns(batch, namedColumns, expectedFiltered.NumRows));
+ if (aggKeys.empty()) { // TODO: ORDER BY for compare
+ UNIT_ASSERT(CheckIntValues(batch->GetColumnByName("res_min"), expectedFiltered.MinValues));
+ UNIT_ASSERT(CheckIntValues(batch->GetColumnByName("res_max"), expectedFiltered.MaxValues));
+ UNIT_ASSERT(CheckIntValues(batch->GetColumnByName("res_some"), expectedFiltered.MinValues));
+ }
+ UNIT_ASSERT(CheckIntValues(batch->GetColumnByName("res_count"), expectedFiltered.Counts));
+ } else {
+ UNIT_ASSERT(CheckColumns(batch, unnamedColumns, expectedResult.NumRows));
+ if (aggKeys.empty()) { // TODO: ORDER BY for compare
+ UNIT_ASSERT(CheckIntValues(batch->GetColumnByName("100"), expectedResult.MinValues));
+ UNIT_ASSERT(CheckIntValues(batch->GetColumnByName("101"), expectedResult.MaxValues));
+ UNIT_ASSERT(CheckIntValues(batch->GetColumnByName("102"), expectedResult.MinValues));
+ }
+ UNIT_ASSERT(CheckIntValues(batch->GetColumnByName("103"), expectedResult.Counts));
+ }
}
- ++i;
+ ++prog;
}
}
@@ -1185,7 +1415,61 @@ Y_UNIT_TEST_SUITE(TColumnShardTestReadWrite) {
}
Y_UNIT_TEST(ReadAggregate) {
- TestReadAggregate();
+ auto schema = TTestSchema::YdbAllTypesSchema();
+ auto testBlob = MakeTestBlob({0, 100}, schema);
+
+ TestReadAggregate(schema, testBlob, false);
+ TestReadAggregate(schema, testBlob, true);
+ }
+
+ Y_UNIT_TEST(ReadGroupBy) {
+ auto schema = TTestSchema::YdbAllTypesSchema();
+ auto testBlob = MakeTestBlob({0, 100}, schema);
+
+ std::vector<int64_t> counts;
+ counts.reserve(100);
+ for (int i = 0; i < 100; ++i) {
+ counts.push_back(1);
+ }
+
+ THashSet<NScheme::TTypeId> sameValTypes = {
+ NTypeIds::Yson, NTypeIds::Json, NTypeIds::JsonDocument
+ };
+
+ // TODO: query needs normalization to compare with expected
+ TReadAggregateResult resDefault = {100, {}, {}, counts};
+ TReadAggregateResult resFiltered = {1, {}, {}, {1}};
+ TReadAggregateResult resGrouped = {1, {}, {}, {100}};
+
+ for (ui32 key = 0; key < schema.size(); ++key) {
+ Cerr << "-- group by key: " << key << "\n";
+
+ // the type has the same values in test batch so result would be grouped in one row
+ if (sameValTypes.count(schema[key].second)) {
+ TestReadAggregate(schema, testBlob, (key % 2), {key}, resGrouped, resFiltered);
+ } else {
+ TestReadAggregate(schema, testBlob, (key % 2), {key}, resDefault, resFiltered);
+ }
+ }
+ for (ui32 key = 0; key < schema.size() - 1; ++key) {
+ Cerr << "-- group by key: " << key << ", " << key + 1 << "\n";
+ if (sameValTypes.count(schema[key].second) &&
+ sameValTypes.count(schema[key + 1].second)) {
+ TestReadAggregate(schema, testBlob, (key % 2), {key, key + 1}, resGrouped, resFiltered);
+ } else {
+ TestReadAggregate(schema, testBlob, (key % 2), {key, key + 1}, resDefault, resFiltered);
+ }
+ }
+ for (ui32 key = 0; key < schema.size() - 2; ++key) {
+ Cerr << "-- group by key: " << key << ", " << key + 1 << ", " << key + 2 << "\n";
+ if (sameValTypes.count(schema[key].second) &&
+ sameValTypes.count(schema[key + 1].second) &&
+ sameValTypes.count(schema[key + 1].second)) {
+ TestReadAggregate(schema, testBlob, (key % 2), {key, key + 1, key + 2}, resGrouped, resFiltered);
+ } else {
+ TestReadAggregate(schema, testBlob, (key % 2), {key, key + 1, key + 2}, resDefault, resFiltered);
+ }
+ }
}
Y_UNIT_TEST(CompactionSplitGranule) {
diff --git a/ydb/core/tx/columnshard/ut_columnshard_schema.cpp b/ydb/core/tx/columnshard/ut_columnshard_schema.cpp
index 2614ae561c..55429f6cb3 100644
--- a/ydb/core/tx/columnshard/ut_columnshard_schema.cpp
+++ b/ydb/core/tx/columnshard/ut_columnshard_schema.cpp
@@ -9,7 +9,6 @@ using NWrappers::NTestHelpers::TS3Mock;
namespace {
static const TVector<std::pair<TString, TTypeId>> testYdbSchema = TTestSchema::YdbSchema();
-//static const TVector<std::pair<TString, TTypeId>> testYdbPkSchema = TTestSchema::YdbPkSchema();
std::shared_ptr<arrow::RecordBatch> UpdateColumn(std::shared_ptr<arrow::RecordBatch> batch, TString columnName, i64 seconds) {
std::string name(columnName.c_str(), columnName.size());
@@ -429,6 +428,7 @@ void TestTwoHotTiers(bool reboot) {
TestTwoTiers(spec, true, reboot);
}
+#if 0
void TestHotAndColdTiers(bool reboot) {
#if 1
TString bucket = "ydb";
@@ -464,6 +464,7 @@ void TestHotAndColdTiers(bool reboot) {
TestTwoTiers(spec, false, reboot);
}
+#endif
void TestDrop(bool reboots) {
TTestBasicRuntime runtime;
@@ -606,12 +607,14 @@ Y_UNIT_TEST_SUITE(TColumnShardTestSchema) {
}
Y_UNIT_TEST(ColdTiers) {
- TestHotAndColdTiers(false);
+ // Disabled KIKIMR-14942
+ //TestHotAndColdTiers(false);
}
Y_UNIT_TEST(RebootColdTiers) {
- NColumnShard::gAllowLogBatchingDefaultValue = false;
- TestHotAndColdTiers(true);
+ // Disabled KIKIMR-14942
+ //NColumnShard::gAllowLogBatchingDefaultValue = false;
+ //TestHotAndColdTiers(true);
}
Y_UNIT_TEST(Drop) {
diff --git a/ydb/core/tx/columnshard/write_actor.cpp b/ydb/core/tx/columnshard/write_actor.cpp
index ec78578324..6558c08c3d 100644
--- a/ydb/core/tx/columnshard/write_actor.cpp
+++ b/ydb/core/tx/columnshard/write_actor.cpp
@@ -119,7 +119,7 @@ public:
// Heavy operations inside. We cannot run them in tablet event handler.
TString strError;
- std::shared_ptr<arrow::RecordBatch> batch;
+ std::shared_ptr<arrow::RecordBatch>& batch = WriteEv->WrittenBatch;
{
TCpuGuard guard(ResourceUsage);
batch = IndexInfo.PrepareForInsert(srcData, meta, strError);
diff --git a/ydb/core/tx/coordinator/CMakeLists.txt b/ydb/core/tx/coordinator/CMakeLists.txt
index 6c296f93f9..e89ef36e4b 100644
--- a/ydb/core/tx/coordinator/CMakeLists.txt
+++ b/ydb/core/tx/coordinator/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-tx-coordinator)
target_link_libraries(core-tx-coordinator PUBLIC
diff --git a/ydb/core/tx/coordinator/coordinator__plan_step.cpp b/ydb/core/tx/coordinator/coordinator__plan_step.cpp
index d8f93bf32f..3e022a5965 100644
--- a/ydb/core/tx/coordinator/coordinator__plan_step.cpp
+++ b/ydb/core/tx/coordinator/coordinator__plan_step.cpp
@@ -6,8 +6,8 @@ namespace NKikimr {
namespace NFlatTxCoordinator {
struct TInFlyAccountant {
- NMonitoring::TDynamicCounters::TCounterPtr Counter;
- TInFlyAccountant(NMonitoring::TDynamicCounters::TCounterPtr counter)
+ ::NMonitoring::TDynamicCounters::TCounterPtr Counter;
+ TInFlyAccountant(::NMonitoring::TDynamicCounters::TCounterPtr counter)
: Counter(counter)
{
Counter->Inc();
diff --git a/ydb/core/tx/coordinator/coordinator_impl.cpp b/ydb/core/tx/coordinator/coordinator_impl.cpp
index 711b64d24e..64e01eeaf4 100644
--- a/ydb/core/tx/coordinator/coordinator_impl.cpp
+++ b/ydb/core/tx/coordinator/coordinator_impl.cpp
@@ -20,7 +20,7 @@ static void SendTransactionStatus(const TActorId &proxy, TEvTxProxy::TEvProposeT
ctx.Send(proxy, new TEvTxProxy::TEvProposeTransactionStatus(status, txid, stepId));
}
-static TAutoPtr<TTransactionProposal> MakeTransactionProposal(TEvTxProxy::TEvProposeTransaction::TPtr &ev, NMonitoring::TDynamicCounters::TCounterPtr &counter) {
+static TAutoPtr<TTransactionProposal> MakeTransactionProposal(TEvTxProxy::TEvProposeTransaction::TPtr &ev, ::NMonitoring::TDynamicCounters::TCounterPtr &counter) {
const TActorId &sender = ev->Sender;
const NKikimrTx::TEvProposeTransaction &record = ev->Get()->Record;
diff --git a/ydb/core/tx/coordinator/coordinator_impl.h b/ydb/core/tx/coordinator/coordinator_impl.h
index 60c96ba299..075fd89e81 100644
--- a/ydb/core/tx/coordinator/coordinator_impl.h
+++ b/ydb/core/tx/coordinator/coordinator_impl.h
@@ -435,24 +435,24 @@ public:
private:
struct TCoordinatorMonCounters {
- TIntrusivePtr<NMonitoring::TDynamicCounters> Coordinator;
-
- NMonitoring::TDynamicCounters::TCounterPtr TxIn;
- NMonitoring::TDynamicCounters::TCounterPtr TxPlanned;
- NMonitoring::TDynamicCounters::TCounterPtr TxDeclined;
- NMonitoring::TDynamicCounters::TCounterPtr TxInFly;
- NMonitoring::TDynamicCounters::TCounterPtr StepsUncommited;
- NMonitoring::TDynamicCounters::TCounterPtr StepsInFly;
-
- NMonitoring::TDynamicCounters::TCounterPtr PlanTxCalls;
- NMonitoring::TDynamicCounters::TCounterPtr PlanTxOutdated;
- NMonitoring::TDynamicCounters::TCounterPtr PlanTxAccepted;
-
- NMonitoring::TDynamicCounters::TCounterPtr StepConsideredTx;
- NMonitoring::TDynamicCounters::TCounterPtr StepOutdatedTx;
- NMonitoring::TDynamicCounters::TCounterPtr StepPlannedDeclinedTx;
- NMonitoring::TDynamicCounters::TCounterPtr StepPlannedTx;
- NMonitoring::TDynamicCounters::TCounterPtr StepDeclinedNoSpaceTx;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Coordinator;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxIn;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxPlanned;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxDeclined;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxInFly;
+ ::NMonitoring::TDynamicCounters::TCounterPtr StepsUncommited;
+ ::NMonitoring::TDynamicCounters::TCounterPtr StepsInFly;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanTxCalls;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanTxOutdated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanTxAccepted;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr StepConsideredTx;
+ ::NMonitoring::TDynamicCounters::TCounterPtr StepOutdatedTx;
+ ::NMonitoring::TDynamicCounters::TCounterPtr StepPlannedDeclinedTx;
+ ::NMonitoring::TDynamicCounters::TCounterPtr StepPlannedTx;
+ ::NMonitoring::TDynamicCounters::TCounterPtr StepDeclinedNoSpaceTx;
NMonitoring::THistogramPtr TxFromReceiveToPlan;
NMonitoring::THistogramPtr TxPlanLatency;
diff --git a/ydb/core/tx/coordinator/ut/CMakeLists.txt b/ydb/core/tx/coordinator/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/coordinator/ut/CMakeLists.txt
+++ b/ydb/core/tx/coordinator/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/CMakeLists.txt b/ydb/core/tx/datashard/CMakeLists.txt
index f30b9af363..a7b998715c 100644
--- a/ydb/core/tx/datashard/CMakeLists.txt
+++ b/ydb/core/tx/datashard/CMakeLists.txt
@@ -6,6 +6,33 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut_background_compaction)
+add_subdirectory(ut_build_index)
+add_subdirectory(ut_change_collector)
+add_subdirectory(ut_change_exchange)
+add_subdirectory(ut_compaction)
+add_subdirectory(ut_erase_rows)
+add_subdirectory(ut_followers)
+add_subdirectory(ut_init)
+add_subdirectory(ut_keys)
+add_subdirectory(ut_kqp)
+add_subdirectory(ut_kqp_errors)
+add_subdirectory(ut_kqp_scan)
+add_subdirectory(ut_locks)
+add_subdirectory(ut_minikql)
+add_subdirectory(ut_minstep)
+add_subdirectory(ut_order)
+add_subdirectory(ut_range_avl_tree)
+add_subdirectory(ut_range_ops)
+add_subdirectory(ut_range_treap)
+add_subdirectory(ut_read_iterator)
+add_subdirectory(ut_read_table)
+add_subdirectory(ut_reassign)
+add_subdirectory(ut_replication)
+add_subdirectory(ut_rs)
+add_subdirectory(ut_snapshot)
+add_subdirectory(ut_stats)
+add_subdirectory(ut_upload_rows)
add_library(core-tx-datashard)
target_compile_options(core-tx-datashard PRIVATE
diff --git a/ydb/core/tx/datashard/alter_cdc_stream_unit.cpp b/ydb/core/tx/datashard/alter_cdc_stream_unit.cpp
index 3b178306f5..37e372b233 100644
--- a/ydb/core/tx/datashard/alter_cdc_stream_unit.cpp
+++ b/ydb/core/tx/datashard/alter_cdc_stream_unit.cpp
@@ -34,7 +34,6 @@ public:
Y_VERIFY(pathId.OwnerId == DataShard.GetPathOwnerId());
const auto streamPathId = PathIdFromPathId(streamDesc.GetPathId());
- Y_VERIFY(streamPathId.OwnerId == DataShard.GetPathOwnerId());
Y_VERIFY_S(streamDesc.GetState() == NKikimrSchemeOp::ECdcStreamStateDisabled, "Unexpected alter cdc stream"
<< ": desc# " << streamDesc.ShortDebugString());
diff --git a/ydb/core/tx/datashard/change_sender_cdc_stream.cpp b/ydb/core/tx/datashard/change_sender_cdc_stream.cpp
index d5dccdc45c..145778306e 100644
--- a/ydb/core/tx/datashard/change_sender_cdc_stream.cpp
+++ b/ydb/core/tx/datashard/change_sender_cdc_stream.cpp
@@ -93,6 +93,7 @@ class TCdcChangeSenderPartition: public TActorBootstrapped<TCdcChangeSenderParti
cmd.SetSeqNo(record.GetSeqNo());
cmd.SetSourceId(NSourceIdEncoding::EncodeSimple(SourceId));
cmd.SetCreateTimeMS(createdAt.MilliSeconds());
+ cmd.SetIgnoreQuotaDeadline(true);
NKikimrPQClient::TDataChunk data;
data.SetCodec(0 /* CODEC_RAW */);
diff --git a/ydb/core/tx/datashard/create_cdc_stream_unit.cpp b/ydb/core/tx/datashard/create_cdc_stream_unit.cpp
index 490e79f90f..b7cf66b899 100644
--- a/ydb/core/tx/datashard/create_cdc_stream_unit.cpp
+++ b/ydb/core/tx/datashard/create_cdc_stream_unit.cpp
@@ -36,7 +36,6 @@ public:
Y_VERIFY(pathId.OwnerId == DataShard.GetPathOwnerId());
const auto streamPathId = PathIdFromPathId(streamDesc.GetPathId());
- Y_VERIFY(streamPathId.OwnerId == DataShard.GetPathOwnerId());
const auto version = params.GetTableSchemaVersion();
Y_VERIFY(version);
diff --git a/ydb/core/tx/datashard/datashard.cpp b/ydb/core/tx/datashard/datashard.cpp
index f642a47d8c..532a73d492 100644
--- a/ydb/core/tx/datashard/datashard.cpp
+++ b/ydb/core/tx/datashard/datashard.cpp
@@ -608,6 +608,14 @@ void TDataShard::EnqueueChangeRecords(TVector<NMiniKQL::IChangeCollector::TChang
return;
}
+ if (OutChangeSenderSuspended) {
+ LOG_NOTICE_S(*TlsActivationContext, NKikimrServices::TX_DATASHARD, "Cannot enqueue change records"
+ << ": change sender suspended"
+ << ", at tablet: " << TabletID()
+ << ", records: " << JoinSeq(", ", records));
+ return;
+ }
+
LOG_DEBUG_S(*TlsActivationContext, NKikimrServices::TX_DATASHARD, "EnqueueChangeRecords"
<< ": at tablet: " << TabletID()
<< ", records: " << JoinSeq(", ", records));
@@ -644,6 +652,8 @@ void TDataShard::MaybeActivateChangeSender(const TActorContext& ctx) {
LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD, "Trying to activate change sender"
<< ": at tablet: " << TabletID());
+ OutChangeSenderSuspended = false;
+
if (ReceiveActivationsFrom) {
LOG_NOTICE_S(ctx, NKikimrServices::TX_DATASHARD, "Cannot activate change sender"
<< ": at tablet: " << TabletID()
@@ -690,6 +700,11 @@ void TDataShard::KillChangeSender(const TActorContext& ctx) {
}
}
+void TDataShard::SuspendChangeSender(const TActorContext& ctx) {
+ KillChangeSender(ctx);
+ OutChangeSenderSuspended = true;
+}
+
bool TDataShard::LoadChangeRecords(NIceDb::TNiceDb& db, TVector<NMiniKQL::IChangeCollector::TChange>& records) {
using Schema = TDataShard::Schema;
@@ -1034,6 +1049,13 @@ TUserTable::TPtr TDataShard::MoveUserTable(TOperation::TPtr op, const NKikimrTxD
RemoveUserTable(prevId);
AddUserTable(newId, newTableInfo);
+ for (auto& [_, record] : ChangesQueue) {
+ if (record.TableId == prevId) {
+ record.TableId = newId;
+ }
+ }
+
+ SchemaSnapshotManager.RenameSnapshots(txc.DB, prevId, newId);
if (newTableInfo->NeedSchemaSnapshots()) {
AddSchemaSnapshot(newId, version, op->GetStep(), op->GetTxId(), txc, ctx);
}
@@ -2999,6 +3021,7 @@ void TDataShard::Handle(TEvents::TEvUndelivered::TPtr &ev,
op->AddInputEvent(ev.Release());
Pipeline.AddCandidateOp(op);
PlanQueue.Progress(ctx);
+ return;
}
switch (ev->Get()->SourceType) {
diff --git a/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp b/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
index d03c8ef2e6..04135da214 100644
--- a/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
+++ b/ydb/core/tx/datashard/datashard__conditional_erase_rows.cpp
@@ -129,8 +129,8 @@ class TCondEraseScan: public IActor, public IScan, public IEraserOps {
private:
ui64 RowsProcessed;
ui64 RowsErased;
- NMonitoring::TDynamicCounters::TCounterPtr MonProcessed;
- NMonitoring::TDynamicCounters::TCounterPtr MonErased;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MonProcessed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MonErased;
};
static TVector<TCell> MakeKeyCells(const TVector<TKey>& keyOrder, const TRow& row) {
diff --git a/ydb/core/tx/datashard/datashard__engine_host.cpp b/ydb/core/tx/datashard/datashard__engine_host.cpp
index cadf3cbf6d..d957d70e84 100644
--- a/ydb/core/tx/datashard/datashard__engine_host.cpp
+++ b/ydb/core/tx/datashard/datashard__engine_host.cpp
@@ -628,8 +628,8 @@ TEngineBay::~TEngineBay() {
}
}
-void TEngineBay::AddReadRange(const TTableId& tableId, const TVector<NTable::TColumn>& columns, const TTableRange& range,
- const TVector<NScheme::TTypeId>& keyTypes, ui64 itemsLimit, bool reverse)
+void TEngineBay::AddReadRange(const TTableId& tableId, const TVector<NTable::TColumn>& columns,
+ const TTableRange& range, const TVector<NScheme::TTypeId>& keyTypes, ui64 itemsLimit, bool reverse)
{
TVector<TKeyDesc::TColumnOp> columnOps;
columnOps.reserve(columns.size());
@@ -645,7 +645,7 @@ void TEngineBay::AddReadRange(const TTableId& tableId, const TVector<NTable::TCo
"-- AddReadRange: " << DebugPrintRange(keyTypes, range, *AppData()->TypeRegistry));
auto desc = MakeHolder<TKeyDesc>(tableId, range, TKeyDesc::ERowOperation::Read, keyTypes, columnOps, itemsLimit,
- 0 /* bytesLimit */, reverse);
+ 0 /* bytesLimit */, reverse);
Info.Keys.emplace_back(TValidatedKey(std::move(desc), /* isWrite */ false));
// Info.Keys.back().IsResultPart = not a lock key? // TODO: KIKIMR-11134
++Info.ReadsCount;
@@ -653,10 +653,21 @@ void TEngineBay::AddReadRange(const TTableId& tableId, const TVector<NTable::TCo
}
void TEngineBay::AddWriteRange(const TTableId& tableId, const TTableRange& range,
- const TVector<NScheme::TTypeId>& keyTypes)
+ const TVector<NScheme::TTypeId>& keyTypes, const TVector<TColumnWriteMeta>& columns,
+ bool isPureEraseOp)
{
- auto desc = MakeHolder<TKeyDesc>(tableId, range, TKeyDesc::ERowOperation::Update,
- keyTypes, TVector<TKeyDesc::TColumnOp>());
+ TVector<TKeyDesc::TColumnOp> columnOps;
+ for (const auto& writeColumn : columns) {
+ TKeyDesc::TColumnOp op;
+ op.Column = writeColumn.Column.Id;
+ op.Operation = TKeyDesc::EColumnOperation::Set;
+ op.ExpectedType = writeColumn.Column.PType;
+ op.ImmediateUpdateSize = writeColumn.MaxValueSizeBytes;
+ columnOps.emplace_back(std::move(op));
+ }
+
+ auto rowOp = isPureEraseOp ? TKeyDesc::ERowOperation::Erase : TKeyDesc::ERowOperation::Update;
+ auto desc = MakeHolder<TKeyDesc>(tableId, range, rowOp, keyTypes, columnOps);
Info.Keys.emplace_back(TValidatedKey(std::move(desc), /* isWrite */ true));
++Info.WritesCount;
if (!range.Point) {
diff --git a/ydb/core/tx/datashard/datashard__engine_host.h b/ydb/core/tx/datashard/datashard__engine_host.h
index b01f64aedb..a960da0c9f 100644
--- a/ydb/core/tx/datashard/datashard__engine_host.h
+++ b/ydb/core/tx/datashard/datashard__engine_host.h
@@ -37,6 +37,11 @@ public:
ui64 TotalKeysSize = 0;
};
+ struct TColumnWriteMeta {
+ NTable::TColumn Column;
+ ui32 MaxValueSizeBytes = 0;
+ };
+
TEngineBay(TDataShard * self, TTransactionContext& txc, const TActorContext& ctx,
std::pair<ui64, ui64> stepTxId);
@@ -61,9 +66,10 @@ public:
}
void AddReadRange(const TTableId& tableId, const TVector<NTable::TColumn>& columns, const TTableRange& range,
- const TVector<NScheme::TTypeId>& keyTypes, ui64 itemsLimit = 0, bool reverse = false);
+ const TVector<NScheme::TTypeId>& keyTypes, ui64 itemsLimit = 0, bool reverse = false);
- void AddWriteRange(const TTableId& tableId, const TTableRange& range, const TVector<NScheme::TTypeId>& keyTypes);
+ void AddWriteRange(const TTableId& tableId, const TTableRange& range, const TVector<NScheme::TTypeId>& keyTypes,
+ const TVector<TColumnWriteMeta>& columns, bool isPureEraseOp);
void MarkTxLoaded() {
Info.Loaded = true;
diff --git a/ydb/core/tx/datashard/datashard__s3.cpp b/ydb/core/tx/datashard/datashard__s3.cpp
index 2f7a74bbab..f5dfe0d65e 100644
--- a/ydb/core/tx/datashard/datashard__s3.cpp
+++ b/ydb/core/tx/datashard/datashard__s3.cpp
@@ -62,6 +62,7 @@ public:
TVector<TRawTypeValue> key;
TVector<TRawTypeValue> endKey;
+ bool endKeyInclusive = true;
// TODO: check prefix column count against key column count
const TSerializedCellVec prefixColumns(Ev->Get()->Record.GetSerializedKeyPrefix());
@@ -113,6 +114,10 @@ public:
const TString pathEndPrefix = NextPrefix(pathPrefix);
if (pathEndPrefix) {
endKey.emplace_back(pathEndPrefix.data(), pathEndPrefix.size(), NScheme::NTypeIds::Utf8);
+ while (endKey.size() < tableInfo.KeyColumnTypes.size()) {
+ endKey.emplace_back();
+ }
+ endKeyInclusive = false;
}
LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD, Self->TabletID() << " S3 Listing: start at key ("
@@ -135,7 +140,7 @@ public:
keyRange.MinKey = key;
keyRange.MinInclusive = suffixColumns.GetCells().empty();
keyRange.MaxKey = endKey;
- keyRange.MaxInclusive = false;
+ keyRange.MaxInclusive = endKeyInclusive;
if (LastPath) {
// Don't include the last key in case of restart
diff --git a/ydb/core/tx/datashard/datashard_dep_tracker.cpp b/ydb/core/tx/datashard/datashard_dep_tracker.cpp
index 2c099436a6..717ec3f7c3 100644
--- a/ydb/core/tx/datashard/datashard_dep_tracker.cpp
+++ b/ydb/core/tx/datashard/datashard_dep_tracker.cpp
@@ -3,6 +3,8 @@
#include "const.h"
+#include <util/string/escape.h>
+
namespace NKikimr {
namespace NDataShard {
@@ -181,6 +183,14 @@ void TDependencyTracker::TDefaultDependencyTrackingLogic::AddOperation(const TOp
const auto& k = *vk.Key;
if (Parent.Self->IsUserTable(k.TableId)) {
const ui64 tableId = k.TableId.PathId.LocalPathId;
+ Y_VERIFY_DEBUG_S(!k.Range.IsAmbiguous(Parent.Self->GetUserTables().at(tableId)->KeyColumnTypes.size()),
+ (vk.IsWrite ? "Write" : "Read")
+ << " From# \"" << EscapeC(TSerializedCellVec::Serialize(k.Range.From)) << "\""
+ << " To# \"" << EscapeC(TSerializedCellVec::Serialize(k.Range.To)) << "\""
+ << " InclusiveFrom# " << (k.Range.InclusiveFrom ? "true" : "false")
+ << " InclusiveTo# " << (k.Range.InclusiveTo ? "true" : "false")
+ << " Point# " << (k.Range.Point ? "true" : "false")
+ << ": " << k.Range.IsAmbiguousReason(Parent.Self->GetUserTables().at(tableId)->KeyColumnTypes.size()));
if (!tooManyKeys && ++keysCount > MAX_REORDER_TX_KEYS) {
tooManyKeys = true;
}
@@ -622,6 +632,14 @@ void TDependencyTracker::TMvccDependencyTrackingLogic::AddOperation(const TOpera
const auto& k = *vk.Key;
if (Parent.Self->IsUserTable(k.TableId)) {
const ui64 tableId = k.TableId.PathId.LocalPathId;
+ Y_VERIFY_DEBUG_S(!k.Range.IsAmbiguous(Parent.Self->GetUserTables().at(tableId)->KeyColumnTypes.size()),
+ (vk.IsWrite ? "Write" : "Read")
+ << " From# \"" << EscapeC(TSerializedCellVec::Serialize(k.Range.From)) << "\""
+ << " To# \"" << EscapeC(TSerializedCellVec::Serialize(k.Range.To)) << "\""
+ << " InclusiveFrom# " << (k.Range.InclusiveFrom ? "true" : "false")
+ << " InclusiveTo# " << (k.Range.InclusiveTo ? "true" : "false")
+ << " Point# " << (k.Range.Point ? "true" : "false")
+ << ": " << k.Range.IsAmbiguousReason(Parent.Self->GetUserTables().at(tableId)->KeyColumnTypes.size()));
if (!tooManyKeys && ++keysCount > MAX_REORDER_TX_KEYS) {
tooManyKeys = true;
}
diff --git a/ydb/core/tx/datashard/datashard_impl.h b/ydb/core/tx/datashard/datashard_impl.h
index 5068c4c6f6..49b5dffbf5 100644
--- a/ydb/core/tx/datashard/datashard_impl.h
+++ b/ydb/core/tx/datashard/datashard_impl.h
@@ -1460,6 +1460,7 @@ public:
void CreateChangeSender(const TActorContext& ctx);
void KillChangeSender(const TActorContext& ctx);
void MaybeActivateChangeSender(const TActorContext& ctx);
+ void SuspendChangeSender(const TActorContext& ctx);
const TActorId& GetChangeSender() const { return OutChangeSender; }
bool LoadChangeRecords(NIceDb::TNiceDb& db, TVector<NMiniKQL::IChangeCollector::TChange>& records);
@@ -2221,6 +2222,7 @@ private:
THashMap<ui64, TEnqueuedRecord> ChangesQueue; // ui64 is order
ui64 ChangesQueueBytes = 0;
TActorId OutChangeSender;
+ bool OutChangeSenderSuspended = false;
// in
THashMap<ui64, TInChangeSender> InChangeSenders; // ui64 is shard id
diff --git a/ydb/core/tx/datashard/datashard_kqp.cpp b/ydb/core/tx/datashard/datashard_kqp.cpp
index 32f7c49023..b49930a683 100644
--- a/ydb/core/tx/datashard/datashard_kqp.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp.cpp
@@ -291,12 +291,51 @@ bool KqpValidateTransaction(const NKikimrTxDataShard::TKqpTransaction& tx, bool
namespace {
+using TReadOpMeta = NKikimrTxDataShard::TKqpTransaction::TDataTaskMeta::TReadOpMeta;
+using TWriteOpMeta = NKikimrTxDataShard::TKqpTransaction::TDataTaskMeta::TWriteOpMeta;
+using TColumnMeta = NKikimrTxDataShard::TKqpTransaction::TColumnMeta;
+
+NTable::TColumn GetColumn(const TColumnMeta& columnMeta) {
+ return NTable::TColumn(columnMeta.GetName(), columnMeta.GetId(), columnMeta.GetType());
+}
+
+TVector<NTable::TColumn> GetColumns(const TReadOpMeta& readMeta) {
+ TVector<NTable::TColumn> columns;
+ columns.reserve(readMeta.GetColumns().size());
+
+ for (auto& column : readMeta.GetColumns()) {
+ columns.push_back(GetColumn(column));
+ }
+
+ return columns;
+}
+
+TVector<TEngineBay::TColumnWriteMeta> GetColumnWrites(const TWriteOpMeta& writeMeta) {
+ TVector<TEngineBay::TColumnWriteMeta> writeColumns;
+ writeColumns.reserve(writeMeta.ColumnsSize());
+ for (const auto& columnMeta : writeMeta.GetColumns()) {
+ TEngineBay::TColumnWriteMeta writeColumn;
+ writeColumn.Column = GetColumn(columnMeta.GetColumn());
+ writeColumn.MaxValueSizeBytes = columnMeta.GetMaxValueSizeBytes();
+
+ writeColumns.push_back(std::move(writeColumn));
+ }
+
+ return writeColumns;
+}
+
template <bool Read>
void KqpSetTxKeysImpl(ui64 tabletId, ui64 taskId, const TTableId& tableId, const TUserTable* tableInfo,
- const NKikimrTxDataShard::TKqpTransaction_TDataTaskMeta_TKeyRange& rangeKind, const TVector<NTable::TColumn>& columns,
- ui64 itemsLimit, bool reverse, const NScheme::TTypeRegistry& typeRegistry, const TActorContext& ctx,
- TEngineBay& engineBay)
+ const NKikimrTxDataShard::TKqpTransaction_TDataTaskMeta_TKeyRange& rangeKind,
+ const TReadOpMeta* readMeta, const TWriteOpMeta* writeMeta, const NScheme::TTypeRegistry& typeRegistry,
+ const TActorContext& ctx, TEngineBay& engineBay)
{
+ if (Read) {
+ Y_VERIFY(readMeta);
+ } else {
+ Y_VERIFY(writeMeta);
+ }
+
switch (rangeKind.Kind_case()) {
case NKikimrTxDataShard::TKqpTransaction_TDataTaskMeta_TKeyRange::kRanges: {
auto& ranges = rangeKind.GetRanges();
@@ -307,15 +346,18 @@ void KqpSetTxKeysImpl(ui64 tabletId, ui64 taskId, const TTableId& tableId, const
tableRange.Load(range);
LOG_TRACE_S(ctx, NKikimrServices::TX_DATASHARD, "Table " << tableInfo->Path
- << ", shard: " << tabletId << ", task: " << taskId << ", " << (Read ? "read range " : "write range ")
+ << ", shard: " << tabletId
+ << ", task: " << taskId << ", " << (Read ? "read range " : "write range ")
<< DebugPrintRange(tableInfo->KeyColumnTypes, tableRange.ToTableRange(), typeRegistry));
Y_VERIFY_DEBUG(!(tableRange.To.GetCells().empty() && tableRange.ToInclusive));
if constexpr (Read) {
- engineBay.AddReadRange(tableId, columns, tableRange.ToTableRange(), tableInfo->KeyColumnTypes, itemsLimit, reverse);
+ engineBay.AddReadRange(tableId, GetColumns(*readMeta), tableRange.ToTableRange(),
+ tableInfo->KeyColumnTypes, readMeta->GetItemsLimit(), readMeta->GetReverse());
} else {
- engineBay.AddWriteRange(tableId, tableRange.ToTableRange(), tableInfo->KeyColumnTypes);
+ engineBay.AddWriteRange(tableId, tableRange.ToTableRange(), tableInfo->KeyColumnTypes,
+ GetColumnWrites(*writeMeta), writeMeta->GetIsPureEraseOp());
}
}
@@ -324,13 +366,16 @@ void KqpSetTxKeysImpl(ui64 tabletId, ui64 taskId, const TTableId& tableId, const
tablePoint.Point = true;
LOG_TRACE_S(ctx, NKikimrServices::TX_DATASHARD, "Table " << tableInfo->Path
- << ", shard: " << tabletId << ", task: " << taskId << ", " << (Read ? "read point " : "write point ")
+ << ", shard: " << tabletId <<
+ ", task: " << taskId << ", " << (Read ? "read point " : "write point ")
<< DebugPrintPoint(tableInfo->KeyColumnTypes, tablePoint.From.GetCells(), typeRegistry));
if constexpr (Read) {
- engineBay.AddReadRange(tableId, columns, tablePoint.ToTableRange(), tableInfo->KeyColumnTypes, itemsLimit, reverse);
+ engineBay.AddReadRange(tableId, GetColumns(*readMeta), tablePoint.ToTableRange(),
+ tableInfo->KeyColumnTypes, readMeta->GetItemsLimit(), readMeta->GetReverse());
} else {
- engineBay.AddWriteRange(tableId, tablePoint.ToTableRange(), tableInfo->KeyColumnTypes);
+ engineBay.AddWriteRange(tableId, tablePoint.ToTableRange(), tableInfo->KeyColumnTypes,
+ GetColumnWrites(*writeMeta), writeMeta->GetIsPureEraseOp());
}
}
@@ -342,13 +387,16 @@ void KqpSetTxKeysImpl(ui64 tabletId, ui64 taskId, const TTableId& tableId, const
tableRange.Load(rangeKind.GetFullRange());
LOG_TRACE_S(ctx, NKikimrServices::TX_DATASHARD, "Table " << tableInfo->Path
- << ", shard: " << tabletId << ", task: " << taskId << ", " << (Read ? "read range: FULL " : "write range: FULL ")
+ << ", shard: " << tabletId
+ << ", task: " << taskId << ", " << (Read ? "read range: FULL " : "write range: FULL ")
<< DebugPrintRange(tableInfo->KeyColumnTypes, tableRange.ToTableRange(), typeRegistry));
if constexpr (Read) {
- engineBay.AddReadRange(tableId, columns, tableRange.ToTableRange(), tableInfo->KeyColumnTypes, itemsLimit, reverse);
+ engineBay.AddReadRange(tableId, GetColumns(*readMeta), tableRange.ToTableRange(),
+ tableInfo->KeyColumnTypes, readMeta->GetItemsLimit(), readMeta->GetReverse());
} else {
- engineBay.AddWriteRange(tableId, tableRange.ToTableRange(), tableInfo->KeyColumnTypes);
+ engineBay.AddWriteRange(tableId, tableRange.ToTableRange(), tableInfo->KeyColumnTypes,
+ GetColumnWrites(*writeMeta), writeMeta->GetIsPureEraseOp());
}
break;
@@ -356,12 +404,15 @@ void KqpSetTxKeysImpl(ui64 tabletId, ui64 taskId, const TTableId& tableId, const
case NKikimrTxDataShard::TKqpTransaction_TDataTaskMeta_TKeyRange::KIND_NOT_SET: {
LOG_ERROR_S(ctx, NKikimrServices::TX_DATASHARD, "Table " << tableInfo->Path
- << ", shard: " << tabletId << ", task: " << taskId << ", " << (Read ? "read range: UNSPECIFIED" : "write range: UNSPECIFIED"));
+ << ", shard: " << tabletId
+ << ", task: " << taskId << ", " << (Read ? "read range: UNSPECIFIED" : "write range: UNSPECIFIED"));
if constexpr (Read) {
- engineBay.AddReadRange(tableId, columns, tableInfo->Range.ToTableRange(), tableInfo->KeyColumnTypes, itemsLimit, reverse);
+ engineBay.AddReadRange(tableId, GetColumns(*readMeta), tableInfo->Range.ToTableRange(),
+ tableInfo->KeyColumnTypes, readMeta->GetItemsLimit(), readMeta->GetReverse());
} else {
- engineBay.AddWriteRange(tableId, tableInfo->Range.ToTableRange(), tableInfo->KeyColumnTypes);
+ engineBay.AddWriteRange(tableId, tableInfo->Range.ToTableRange(), tableInfo->KeyColumnTypes,
+ GetColumnWrites(*writeMeta), writeMeta->GetIsPureEraseOp());
}
break;
@@ -380,19 +431,13 @@ void KqpSetTxKeys(ui64 tabletId, ui64 taskId, const TUserTable* tableInfo,
tableMeta.GetSchemaVersion());
for (auto& read : meta.GetReads()) {
- TVector<NTable::TColumn> columns;
- columns.reserve(read.GetColumns().size());
- for (auto& c : read.GetColumns()) {
- columns.emplace_back(NTable::TColumn(c.GetName(), c.GetId(), c.GetType()));
- }
-
- KqpSetTxKeysImpl<true>(tabletId, taskId, tableId, tableInfo, read.GetRange(), columns, read.GetItemsLimit(),
- read.GetReverse(), typeRegistry, ctx, engineBay);
+ KqpSetTxKeysImpl<true>(tabletId, taskId, tableId, tableInfo, read.GetRange(), &read, nullptr,
+ typeRegistry, ctx, engineBay);
}
if (meta.HasWrites()) {
- KqpSetTxKeysImpl<false>(tabletId, taskId, tableId, tableInfo, meta.GetWrites().GetRange(), /* columns */ {}, 0,
- /* reverse */ false, typeRegistry, ctx, engineBay);
+ KqpSetTxKeysImpl<false>(tabletId, taskId, tableId, tableInfo, meta.GetWrites().GetRange(), nullptr,
+ &meta.GetWrites(), typeRegistry, ctx, engineBay);
}
}
diff --git a/ydb/core/tx/datashard/datashard_kqp_compute.cpp b/ydb/core/tx/datashard/datashard_kqp_compute.cpp
index a557d87a2b..b83770b18e 100644
--- a/ydb/core/tx/datashard/datashard_kqp_compute.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp_compute.cpp
@@ -14,14 +14,6 @@ namespace NMiniKQL {
using namespace NTable;
using namespace NUdf;
-TSmallVec<TTag> ExtractTags(const TSmallVec<TKqpComputeContextBase::TColumn>& columns) {
- TSmallVec<TTag> tags;
- for (const auto& column : columns) {
- tags.push_back(column.Tag);
- }
- return tags;
-}
-
typedef IComputationNode* (*TCallableDatashardBuilderFunc)(TCallable& callable,
const TComputationNodeFactoryContext& ctx, TKqpDatashardComputeContext& computeCtx);
@@ -530,9 +522,13 @@ bool TKqpDatashardComputeContext::ReadRowImpl(const TTableId& tableId, TReadTabl
stats.SelectRangeRows = 1;
stats.SelectRangeBytes = rowSize;
- stats.InvisibleRowSkips = std::exchange(iterator.Stats.InvisibleRowSkips, 0);
- stats.SelectRangeDeletedRowSkips = std::exchange(iterator.Stats.DeletedRowSkips, 0);
+ break;
+ }
+ stats.InvisibleRowSkips = std::exchange(iterator.Stats.InvisibleRowSkips, 0);
+ stats.SelectRangeDeletedRowSkips = std::exchange(iterator.Stats.DeletedRowSkips, 0);
+
+ if (iterator.Last() == NTable::EReady::Data) {
return true;
}
@@ -577,9 +573,13 @@ bool TKqpDatashardComputeContext::ReadRowWideImpl(const TTableId& tableId, TRead
stats.SelectRangeRows = 1;
stats.SelectRangeBytes = rowSize;
- stats.InvisibleRowSkips = std::exchange(iterator.Stats.InvisibleRowSkips, 0);
- stats.SelectRangeDeletedRowSkips = std::exchange(iterator.Stats.DeletedRowSkips, 0);
+ break;
+ }
+
+ stats.InvisibleRowSkips = std::exchange(iterator.Stats.InvisibleRowSkips, 0);
+ stats.SelectRangeDeletedRowSkips = std::exchange(iterator.Stats.DeletedRowSkips, 0);
+ if (iterator.Last() == NTable::EReady::Data) {
return true;
}
diff --git a/ydb/core/tx/datashard/datashard_kqp_compute.h b/ydb/core/tx/datashard/datashard_kqp_compute.h
index a0e2072be5..d547030db8 100644
--- a/ydb/core/tx/datashard/datashard_kqp_compute.h
+++ b/ydb/core/tx/datashard/datashard_kqp_compute.h
@@ -120,8 +120,6 @@ public:
IEngineFlatHost* Host = nullptr;
};
-TSmallVec<NTable::TTag> ExtractTags(const TSmallVec<TKqpComputeContextBase::TColumn>& columns);
-
IComputationNode* WrapKqpWideReadTableRanges(TCallable& callable, const TComputationNodeFactoryContext& ctx,
TKqpDatashardComputeContext& computeCtx);
IComputationNode* WrapKqpLookupTable(TCallable& callable, const TComputationNodeFactoryContext& ctx,
diff --git a/ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp b/ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp
index ee179cd91c..e1938769fd 100644
--- a/ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp_lookup_table.cpp
@@ -19,8 +19,8 @@ struct TParseLookupTableResult {
TVector<ui32> KeyIndices;
TVector<NUdf::TDataTypeId> KeyTypes;
- TSmallVec<TKqpComputeContextBase::TColumn> Columns;
- TSmallVec<TKqpComputeContextBase::TColumn> SystemColumns;
+ TSmallVec<NTable::TTag> Columns;
+ TSmallVec<NTable::TTag> SystemColumns;
TSmallVec<bool> SkipNullKeys;
};
@@ -88,8 +88,8 @@ public:
, TypeEnv(typeEnv)
, ParseResult(parseResult)
, LookupKeysNode(lookupKeysNode)
- , ColumnTags(ExtractTags(ParseResult.Columns))
- , SystemColumnTags(ExtractTags(ParseResult.SystemColumns))
+ , ColumnTags(ParseResult.Columns)
+ , SystemColumnTags(ParseResult.SystemColumns)
, ShardTableStats(ComputeCtx.GetDatashardCounters())
, TaskTableStats(ComputeCtx.GetTaskCounters(ComputeCtx.GetCurrentTaskId()))
{
@@ -173,8 +173,8 @@ public:
, TypeEnv(typeEnv)
, ParseResult(parseResult)
, LookupKeysNode(lookupKeysNode)
- , ColumnTags(ExtractTags(ParseResult.Columns))
- , SystemColumnTags(ExtractTags(ParseResult.SystemColumns))
+ , ColumnTags(ParseResult.Columns)
+ , SystemColumnTags(ParseResult.SystemColumns)
, ShardTableStats(ComputeCtx.GetDatashardCounters())
, TaskTableStats(ComputeCtx.GetTaskCounters(computeCtx.GetCurrentTaskId())) {}
diff --git a/ydb/core/tx/datashard/datashard_kqp_read_table.cpp b/ydb/core/tx/datashard/datashard_kqp_read_table.cpp
index 7cfa13420e..c57a8a3840 100644
--- a/ydb/core/tx/datashard/datashard_kqp_read_table.cpp
+++ b/ydb/core/tx/datashard/datashard_kqp_read_table.cpp
@@ -252,12 +252,12 @@ public:
const TParseReadTableResult& parseResult, IComputationNode* fromNode, IComputationNode* toNode,
IComputationNode* itemsLimit)
: TKqpWideReadTableWrapperBase<IsReverse>(parseResult.TableId, computeCtx, typeEnv,
- ExtractTags(parseResult.SystemColumns), parseResult.SkipNullKeys)
+ parseResult.SystemColumns, parseResult.SkipNullKeys)
, ParseResult(parseResult)
, FromNode(fromNode)
, ToNode(toNode)
, ItemsLimit(itemsLimit)
- , ColumnTags(ExtractTags(parseResult.Columns))
+ , ColumnTags(parseResult.Columns)
{
this->ShardTableStats.NSelectRange++;
this->TaskTableStats.NSelectRange++;
@@ -315,11 +315,11 @@ public:
TKqpWideReadTableRangesWrapper(TKqpDatashardComputeContext& computeCtx, const TTypeEnvironment& typeEnv,
const TParseReadTableRangesResult& parseResult, IComputationNode* rangesNode, IComputationNode* itemsLimit)
: TKqpWideReadTableWrapperBase<IsReverse>(parseResult.TableId, computeCtx, typeEnv,
- ExtractTags(parseResult.SystemColumns), parseResult.SkipNullKeys)
+ parseResult.SystemColumns, parseResult.SkipNullKeys)
, ParseResult(parseResult)
, RangesNode(rangesNode)
, ItemsLimit(itemsLimit)
- , ColumnTags(ExtractTags(parseResult.Columns)) {}
+ , ColumnTags(parseResult.Columns) {}
private:
EFetchResult ReadValue(TComputationContext& ctx, NUdf::TUnboxedValue* const* output) const final {
diff --git a/ydb/core/tx/datashard/datashard_pipeline.h b/ydb/core/tx/datashard/datashard_pipeline.h
index 2e3a51c07d..f6ef338ac7 100644
--- a/ydb/core/tx/datashard/datashard_pipeline.h
+++ b/ydb/core/tx/datashard/datashard_pipeline.h
@@ -382,8 +382,8 @@ private:
return a.Step < b.Step || (a.Step == b.Step && a.TxId < b.TxId);
}
- friend constexpr bool operator<(const TItem& a, const TRowVersion& b) {
- return a.Step < b.Step || (a.Step == b.Step && a.TxId < b.TxId);
+ friend constexpr bool operator<=(const TItem& a, const TRowVersion& b) {
+ return a.Step < b.Step || (a.Step == b.Step && a.TxId <= b.TxId);
}
};
@@ -394,7 +394,9 @@ private:
auto res = ItemsSet.emplace(version);
if (!res.second)
res.first->Counter += 1;
- TxIdMap.emplace(txId, res.first);
+ auto res2 = TxIdMap.emplace(txId, res.first);
+ Y_VERIFY_S(res2.second, "Unexpected duplicate immediate tx " << txId
+ << " committing at " << version);
}
inline void Add(TRowVersion version) {
@@ -417,7 +419,7 @@ private:
}
inline bool HasOpsBelow(TRowVersion upperBound) const {
- return bool(ItemsSet) && *ItemsSet.begin() < upperBound;
+ return bool(ItemsSet) && *ItemsSet.begin() <= upperBound;
}
private:
diff --git a/ydb/core/tx/datashard/datashard_schema_snapshots.cpp b/ydb/core/tx/datashard/datashard_schema_snapshots.cpp
index 80e865701f..e5f4a97c8e 100644
--- a/ydb/core/tx/datashard/datashard_schema_snapshots.cpp
+++ b/ydb/core/tx/datashard/datashard_schema_snapshots.cpp
@@ -30,7 +30,6 @@ bool TSchemaSnapshotManager::Load(NIceDb::TNiceDb& db) {
return false;
}
- const auto& tables = Self->GetUserTables();
while (!rowset.EndOfSet()) {
const ui64 oid = rowset.GetValue<Schema::SchemaSnapshots::PathOwnerId>();
const ui64 tid = rowset.GetValue<Schema::SchemaSnapshots::LocalPathId>();
@@ -43,13 +42,10 @@ bool TSchemaSnapshotManager::Load(NIceDb::TNiceDb& db) {
const bool ok = ParseFromStringNoSizeLimit(desc, schema);
Y_VERIFY(ok);
- auto it = tables.find(tid);
- Y_VERIFY_S(it != tables.end(), "Cannot find table: " << tid);
-
const auto res = Snapshots.emplace(
std::piecewise_construct,
std::forward_as_tuple(oid, tid, version),
- std::forward_as_tuple(new TUserTable(it->second->LocalTid, desc, 0), step, txId)
+ std::forward_as_tuple(new TUserTable(0, desc, 0), step, txId)
);
Y_VERIFY_S(res.second, "Duplicate schema snapshot: " << res.first->first);
@@ -93,6 +89,36 @@ void TSchemaSnapshotManager::RemoveShapshot(NIceDb::TNiceDb& db, const TSchemaSn
PersistRemoveSnapshot(db, key);
}
+void TSchemaSnapshotManager::RenameSnapshots(NTable::TDatabase& db,
+ const TPathId& prevTableId, const TPathId& newTableId)
+{
+ Y_VERIFY_S(prevTableId < newTableId, "New table id should be greater than previous"
+ << ": prev# " << prevTableId
+ << ", new# " << newTableId);
+
+ NIceDb::TNiceDb nicedb(db);
+ for (auto it = Snapshots.lower_bound(TSchemaSnapshotKey(prevTableId, 1)); it != Snapshots.end();) {
+ const auto& prevKey = it->first;
+ const auto& snapshot = it->second;
+
+ if (TPathId(prevKey.OwnerId, prevKey.PathId) != prevTableId) {
+ break;
+ }
+
+ const TSchemaSnapshotKey newKey(newTableId, prevKey.Version);
+ AddSnapshot(db, newKey, snapshot);
+ PersistRemoveSnapshot(nicedb, prevKey);
+
+ auto refIt = References.find(prevKey);
+ if (refIt != References.end()) {
+ References[newKey] = refIt->second;
+ References.erase(refIt);
+ }
+
+ it = Snapshots.erase(it);
+ }
+}
+
bool TSchemaSnapshotManager::AcquireReference(const TSchemaSnapshotKey& key) {
auto it = Snapshots.find(key);
if (it == Snapshots.end()) {
diff --git a/ydb/core/tx/datashard/datashard_schema_snapshots.h b/ydb/core/tx/datashard/datashard_schema_snapshots.h
index d8e137fecf..db0d3b655b 100644
--- a/ydb/core/tx/datashard/datashard_schema_snapshots.h
+++ b/ydb/core/tx/datashard/datashard_schema_snapshots.h
@@ -32,6 +32,7 @@ public:
bool AddSnapshot(NTable::TDatabase& db, const TSchemaSnapshotKey& key, const TSchemaSnapshot& snapshot);
const TSchemaSnapshot* FindSnapshot(const TSchemaSnapshotKey& key) const;
void RemoveShapshot(NIceDb::TNiceDb& db, const TSchemaSnapshotKey& key);
+ void RenameSnapshots(NTable::TDatabase& db, const TPathId& prevTableId, const TPathId& newTableId);
bool AcquireReference(const TSchemaSnapshotKey& key);
bool ReleaseReference(const TSchemaSnapshotKey& key);
diff --git a/ydb/core/tx/datashard/datashard_ut_change_exchange.cpp b/ydb/core/tx/datashard/datashard_ut_change_exchange.cpp
index 2a8864352d..459dbca6f0 100644
--- a/ydb/core/tx/datashard/datashard_ut_change_exchange.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_change_exchange.cpp
@@ -10,6 +10,7 @@
#include <ydb/core/tx/scheme_board/events.h>
#include <ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h>
#include <ydb/public/sdk/cpp/client/ydb_persqueue_public/persqueue.h>
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
#include <util/generic/size_literals.h>
#include <util/string/printf.h>
@@ -783,6 +784,16 @@ Y_UNIT_TEST_SUITE(Cdc) {
}
};
+ class TTestTopicEnv: public TTestEnv<TTestTopicEnv, NYdb::NTopic::TTopicClient> {
+ public:
+ using TTestEnv<TTestTopicEnv, NYdb::NTopic::TTopicClient>::TTestEnv;
+
+ static THolder<NYdb::NTopic::TTopicClient> MakeClient(const NYdb::TDriver& driver, const TString& database) {
+ return MakeHolder<NYdb::NTopic::TTopicClient>(driver, NYdb::NTopic::TTopicClientSettings().Database(database));
+ }
+ };
+
+
TShardedTableOptions SimpleTable() {
return TShardedTableOptions()
.Columns({
@@ -857,19 +868,27 @@ Y_UNIT_TEST_SUITE(Cdc) {
auto ev = reader->GetEvent(true);
UNIT_ASSERT(ev);
+ TPartitionStream::TPtr pStream;
if (auto* data = std::get_if<TReadSessionEvent::TDataReceivedEvent>(&*ev)) {
+ pStream = data->GetPartitionStream();
for (const auto& item : data->GetMessages()) {
const auto& record = records.at(reads++);
UNIT_ASSERT_VALUES_EQUAL(record, item.GetData());
UNIT_ASSERT_VALUES_EQUAL(CalcPartitionKey(record), item.GetPartitionKey());
}
} else if (auto* create = std::get_if<TReadSessionEvent::TCreatePartitionStreamEvent>(&*ev)) {
+ pStream = create->GetPartitionStream();
create->Confirm();
} else if (auto* destroy = std::get_if<TReadSessionEvent::TDestroyPartitionStreamEvent>(&*ev)) {
+ pStream = destroy->GetPartitionStream();
destroy->Confirm();
} else if (std::get_if<TSessionClosedEvent>(&*ev)) {
break;
}
+
+ if (pStream) {
+ UNIT_ASSERT_VALUES_EQUAL(pStream->GetTopicPath(), "/Root/Table/Stream");
+ }
}
// remove consumer
@@ -983,19 +1002,106 @@ Y_UNIT_TEST_SUITE(Cdc) {
}
};
- #define Y_UNIT_TEST_TWIN(N, VAR1, VAR2) \
+
+ struct TopicRunner {
+ static void Read(const TShardedTableOptions& tableDesc, const TCdcStream& streamDesc,
+ const TVector<TString>& queries, const TVector<TString>& records)
+ {
+ TTestTopicEnv env(tableDesc, streamDesc);
+
+ for (const auto& query : queries) {
+ ExecSQL(env.GetServer(), env.GetEdgeActor(), query);
+ }
+
+ auto& client = env.GetClient();
+
+ // add consumer
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings().BeginAddConsumer("user")
+ .EndAddConsumer()).ExtractValueSync();
+ UNIT_ASSERT_C(res.IsSuccess(), res.GetIssues().ToString());
+ }
+
+ // get records
+ auto reader = client.CreateReadSession(NYdb::NTopic::TReadSessionSettings()
+ .AppendTopics(TString("/Root/Table/Stream"))
+ .ConsumerName("user")
+ );
+
+ ui32 reads = 0;
+ while (reads < records.size()) {
+ auto ev = reader->GetEvent(true);
+ UNIT_ASSERT(ev);
+
+ NYdb::NTopic::TPartitionSession::TPtr pStream;
+ if (auto* data = std::get_if<NYdb::NTopic::TReadSessionEvent::TDataReceivedEvent>(&*ev)) {
+ pStream = data->GetPartitionSession();
+ for (const auto& item : data->GetMessages()) {
+ const auto& record = records.at(reads++);
+ UNIT_ASSERT_VALUES_EQUAL(record, item.GetData());
+ //TODO: check here partition key
+// UNIT_ASSERT_VALUES_EQUAL(CalcPartitionKey(record), item.GetPartitionKey());
+ }
+ } else if (auto* create = std::get_if<NYdb::NTopic::TReadSessionEvent::TStartPartitionSessionEvent>(&*ev)) {
+ pStream = create->GetPartitionSession();
+ create->Confirm();
+ } else if (auto* destroy = std::get_if<NYdb::NTopic::TReadSessionEvent::TStopPartitionSessionEvent>(&*ev)) {
+ pStream = destroy->GetPartitionSession();
+ destroy->Confirm();
+ } else if (std::get_if<NYdb::NTopic::TSessionClosedEvent>(&*ev)) {
+ break;
+ }
+
+ if (pStream) {
+ UNIT_ASSERT_VALUES_EQUAL(pStream->GetTopicPath(), "/Root/Table/Stream");
+ }
+ }
+ // remove consumer
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings()
+ .AppendDropConsumers("user")).ExtractValueSync();
+ UNIT_ASSERT_C(res.IsSuccess(), res.GetIssues().ToString());
+ }
+ }
+
+ static void Write(const TShardedTableOptions& tableDesc, const TCdcStream& streamDesc) {
+ TTestPqEnv env(tableDesc, streamDesc);
+
+ auto session = env.GetClient().CreateSimpleBlockingWriteSession(TWriteSessionSettings()
+ .Path("/Root/Table/Stream")
+ .MessageGroupId("user")
+ .ClusterDiscoveryMode(EClusterDiscoveryMode::Off)
+ );
+
+ const bool failed = !session->Write("message-1");
+ UNIT_ASSERT(failed);
+
+ session->Close();
+ }
+
+ static void Drop(const TShardedTableOptions& tableDesc, const TCdcStream& streamDesc) {
+ TTestTopicEnv env(tableDesc, streamDesc);
+
+ auto res = env.GetClient().DropTopic("/Root/Table/Stream").ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::SCHEME_ERROR);
+ }
+ };
+
+
+ #define Y_UNIT_TEST_TRIPLET(N, VAR1, VAR2, VAR3) \
template<typename TRunner> void N(NUnitTest::TTestContext&); \
struct TTestRegistration##N { \
TTestRegistration##N() { \
TCurrentTest::AddTest(#N "[" #VAR1 "]", static_cast<void (*)(NUnitTest::TTestContext&)>(&N<VAR1>), false); \
TCurrentTest::AddTest(#N "[" #VAR2 "]", static_cast<void (*)(NUnitTest::TTestContext&)>(&N<VAR2>), false); \
+ TCurrentTest::AddTest(#N "[" #VAR3 "]", static_cast<void (*)(NUnitTest::TTestContext&)>(&N<VAR3>), false); \
} \
}; \
static TTestRegistration##N testRegistration##N; \
template<typename TRunner> \
void N(NUnitTest::TTestContext&)
- Y_UNIT_TEST_TWIN(KeysOnlyLog, PqRunner, YdsRunner) {
+ Y_UNIT_TEST_TRIPLET(KeysOnlyLog, PqRunner, YdsRunner, TopicRunner) {
TRunner::Read(SimpleTable(), KeysOnly(NKikimrSchemeOp::ECdcStreamFormatJson), {R"(
UPSERT INTO `/Root/Table` (key, value) VALUES
(1, 10),
@@ -1011,7 +1117,7 @@ Y_UNIT_TEST_SUITE(Cdc) {
});
}
- Y_UNIT_TEST_TWIN(UpdatesLog, PqRunner, YdsRunner) {
+ Y_UNIT_TEST_TRIPLET(UpdatesLog, PqRunner, YdsRunner, TopicRunner) {
TRunner::Read(SimpleTable(), Updates(NKikimrSchemeOp::ECdcStreamFormatJson), {R"(
UPSERT INTO `/Root/Table` (key, value) VALUES
(1, 10),
@@ -1027,7 +1133,7 @@ Y_UNIT_TEST_SUITE(Cdc) {
});
}
- Y_UNIT_TEST_TWIN(NewAndOldImagesLog, PqRunner, YdsRunner) {
+ Y_UNIT_TEST_TRIPLET(NewAndOldImagesLog, PqRunner, YdsRunner, TopicRunner) {
TRunner::Read(SimpleTable(), NewAndOldImages(NKikimrSchemeOp::ECdcStreamFormatJson), {R"(
UPSERT INTO `/Root/Table` (key, value) VALUES
(1, 10),
@@ -1059,7 +1165,7 @@ Y_UNIT_TEST_SUITE(Cdc) {
});
}
- Y_UNIT_TEST_TWIN(HugeKey, PqRunner, YdsRunner) {
+ Y_UNIT_TEST_TRIPLET(HugeKey, PqRunner, YdsRunner, TopicRunner) {
const auto key = TString(512_KB, 'A');
TRunner::Read(Utf8Table(), KeysOnly(NKikimrSchemeOp::ECdcStreamFormatJson), {Sprintf(R"(
@@ -1070,14 +1176,68 @@ Y_UNIT_TEST_SUITE(Cdc) {
});
}
- Y_UNIT_TEST_TWIN(Write, PqRunner, YdsRunner) {
+ Y_UNIT_TEST_TRIPLET(Write, PqRunner, YdsRunner, TopicRunner) {
TRunner::Write(SimpleTable(), KeysOnly(NKikimrSchemeOp::ECdcStreamFormatJson));
}
- Y_UNIT_TEST_TWIN(Drop, PqRunner, YdsRunner) {
+ Y_UNIT_TEST_TRIPLET(Drop, PqRunner, YdsRunner, TopicRunner) {
TRunner::Drop(SimpleTable(), KeysOnly(NKikimrSchemeOp::ECdcStreamFormatJson));
}
+
+ Y_UNIT_TEST(AlterViaTopicService) {
+ TTestTopicEnv env(SimpleTable(), KeysOnly(NKikimrSchemeOp::ECdcStreamFormatJson));
+ auto& client = env.GetClient();
+
+ // try to update partitions count
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings()
+ .AlterPartitioningSettings(5, 5)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::BAD_REQUEST);
+ }
+
+ // try to update retention period
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings()
+ .SetRetentionPeriod(TDuration::Hours(48))).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::BAD_REQUEST);
+ }
+ // try to update supported codecs
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings()
+ .AppendSetSupportedCodecs(NYdb::NTopic::ECodec(5))).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::BAD_REQUEST);
+ }
+ // try to update retention storage
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings()
+ .SetRetentionStorageMb(1)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::BAD_REQUEST);
+ }
+
+ // try to update speed
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings()
+ .SetPartitionWriteSpeedBytesPerSecond(1_MB)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::BAD_REQUEST);
+ }
+
+ // try to update write burst
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings()
+ .SetPartitionWriteBurstBytes(1_MB)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::BAD_REQUEST);
+ }
+
+ // try to update attributes
+ {
+ auto res = client.AlterTopic("/Root/Table/Stream", NYdb::NTopic::TAlterTopicSettings()
+ .BeginAlterAttributes().Add("key", "value").EndAlterAttributes()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::BAD_REQUEST);
+ }
+
+ }
+
// Pq specific
Y_UNIT_TEST(Alter) {
TTestPqEnv env(SimpleTable(), KeysOnly(NKikimrSchemeOp::ECdcStreamFormatJson));
@@ -1104,6 +1264,14 @@ Y_UNIT_TEST_SUITE(Cdc) {
}
// Yds specific
+ Y_UNIT_TEST(DescribeStream) {
+ TTestYdsEnv env(SimpleTable(), KeysOnly(NKikimrSchemeOp::ECdcStreamFormatJson));
+
+ auto res = env.GetClient().DescribeStream("/Root/Table/Stream").ExtractValueSync();
+ UNIT_ASSERT_C(res.IsSuccess(), res.GetIssues().ToString());
+ UNIT_ASSERT_VALUES_EQUAL(res.GetResult().stream_description().stream_name(), "/Root/Table/Stream");
+ }
+
Y_UNIT_TEST(UpdateStream) {
TTestYdsEnv env(SimpleTable(), KeysOnly(NKikimrSchemeOp::ECdcStreamFormatJson));
@@ -1429,6 +1597,9 @@ Y_UNIT_TEST_SUITE(Cdc) {
R"({"update":{"value":20},"key":[2]})",
});
+ // reboot original shard
+ RebootTablet(*env.GetServer()->GetRuntime(), tabletIds.at(0), env.GetEdgeActor());
+
// merge
preventEnqueueing = true;
ExecSQL(env.GetServer(), env.GetEdgeActor(), R"(
@@ -1535,6 +1706,74 @@ Y_UNIT_TEST_SUITE(Cdc) {
});
}
+ Y_UNIT_TEST(RenameTable) {
+ TPortManager portManager;
+ TServer::TPtr server = new TServer(TServerSettings(portManager.GetPort(2134), {}, DefaultPQConfig())
+ .SetUseRealThreads(false)
+ .SetDomainName("Root")
+ );
+
+ auto& runtime = *server->GetRuntime();
+ const auto edgeActor = runtime.AllocateEdgeActor();
+
+ SetupLogging(runtime);
+ InitRoot(server, edgeActor);
+
+ THashSet<ui64> enqueued;
+ runtime.SetObserverFunc([&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) {
+ if (ev->GetTypeRewrite() == TEvChangeExchange::EvEnqueueRecords) {
+ for (const auto& record : ev->Get<TEvChangeExchange::TEvEnqueueRecords>()->Records) {
+ enqueued.insert(record.Order);
+ }
+
+ return TTestActorRuntime::EEventAction::DROP;
+ }
+
+ return TTestActorRuntime::EEventAction::PROCESS;
+ });
+
+ CreateShardedTable(server, edgeActor, "/Root", "Table", SimpleTable());
+ WaitTxNotification(server, edgeActor, AsyncAlterAddStream(server, "/Root", "Table",
+ Updates(NKikimrSchemeOp::ECdcStreamFormatJson)));
+
+ ExecSQL(server, edgeActor, R"(
+ UPSERT INTO `/Root/Table` (key, value) VALUES
+ (1, 10),
+ (2, 20),
+ (3, 30);
+ )");
+
+ if (!enqueued) {
+ TDispatchOptions opts;
+ opts.FinalEvents.emplace_back([&enqueued](IEventHandle&) {
+ return bool(enqueued);
+ });
+ runtime.DispatchEvents(opts);
+ }
+
+ THashSet<ui64> removed;
+ runtime.SetObserverFunc([&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) {
+ if (ev->GetTypeRewrite() == TEvChangeExchange::EvRemoveRecords) {
+ for (const auto& record : ev->Get<TEvChangeExchange::TEvRemoveRecords>()->Records) {
+ removed.insert(record);
+ }
+ }
+
+ return TTestActorRuntime::EEventAction::PROCESS;
+ });
+
+ WaitTxNotification(server, edgeActor, AsyncAlterDropStream(server, "/Root", "Table", "Stream"));
+ WaitTxNotification(server, edgeActor, AsyncMoveTable(server, "/Root/Table", "/Root/MovedTable"));
+
+ if (enqueued != removed) {
+ TDispatchOptions opts;
+ opts.FinalEvents.emplace_back([&enqueued, &removed](IEventHandle&) {
+ return enqueued == removed;
+ });
+ runtime.DispatchEvents(opts);
+ }
+ }
+
} // Cdc
} // NKikimr
diff --git a/ydb/core/tx/datashard/datashard_ut_common.cpp b/ydb/core/tx/datashard/datashard_ut_common.cpp
index b0438ef795..8954f967bc 100644
--- a/ydb/core/tx/datashard/datashard_ut_common.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_common.cpp
@@ -198,7 +198,7 @@ void TTester::RegisterTableInResolver(const TString& schemeText)
keyIdx = ki;
}
}
- table.Columns.insert(std::make_pair(c.GetName(), TColumn{c.GetId(), keyIdx, c.GetTypeId(), 0}));
+ table.Columns.insert(std::make_pair(c.GetName(), TColumn{c.GetId(), keyIdx, c.GetTypeId(), 0, EColumnTypeConstraint::Nullable}));
}
DbSchemeResolver.AddTable(table);
}
@@ -1096,113 +1096,132 @@ void InitRoot(Tests::TServer::TPtr server,
}
}
-void CreateShardedTable(Tests::TServer::TPtr server,
- TActorId sender,
- const TString &root,
- const TString &name,
- const TShardedTableOptions &opts)
+static THolder<TEvTxUserProxy::TEvProposeTransaction> SchemeTxTemplate(
+ NKikimrSchemeOp::EOperationType type,
+ const TString& workingDir = {})
{
- auto &runtime = *server->GetRuntime();
- auto &settings = server->GetSettings();
+ auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
+ request->Record.SetExecTimeoutPeriod(Max<ui64>());
- // Create table with four shards.
- ui64 txId;
- TAutoPtr<IEventHandle> handle;
- {
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetWorkingDir(root);
-
- NKikimrSchemeOp::TTableDescription* desc = nullptr;
- if (opts.Indexes_) {
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpCreateIndexedTable);
- desc = tx.MutableCreateIndexedTable()->MutableTableDescription();
- } else {
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpCreateTable);
- desc = tx.MutableCreateTable();
- }
+ auto& tx = *request->Record.MutableTransaction()->MutableModifyScheme();
+ tx.SetOperationType(type);
- desc->SetName(name);
+ if (workingDir) {
+ tx.SetWorkingDir(workingDir);
+ }
- for (const auto& column : opts.Columns_) {
- auto col = desc->AddColumns();
- col->SetName(column.Name);
- col->SetType(column.Type);
- col->SetNotNull(column.NotNull);
- if (column.IsKey) {
- desc->AddKeyColumnNames(column.Name);
- }
- }
+ return request;
+}
- for (const auto& index : opts.Indexes_) {
- auto* indexDesc = tx.MutableCreateIndexedTable()->MutableIndexDescription()->Add();
+static ui64 RunSchemeTx(
+ TTestActorRuntimeBase& runtime,
+ THolder<TEvTxUserProxy::TEvProposeTransaction>&& request,
+ TActorId sender = {},
+ bool viaActorSystem = false,
+ TEvTxUserProxy::TEvProposeTransactionStatus::EStatus expectedStatus = TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress)
+{
+ if (!sender) {
+ sender = runtime.AllocateEdgeActor();
+ }
- indexDesc->SetName(index.Name);
- indexDesc->SetType(index.Type);
+ runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()), 0, viaActorSystem);
+ auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
+ UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), expectedStatus);
- for (const auto& col : index.IndexColumns) {
- indexDesc->AddKeyColumnNames(col);
- }
- for (const auto& col : index.DataColumns) {
- indexDesc->AddDataColumnNames(col);
- }
- }
+ return ev->Get()->Record.GetTxId();
+}
- desc->SetUniformPartitionsCount(opts.Shards_);
+void CreateShardedTable(
+ Tests::TServer::TPtr server,
+ TActorId sender,
+ const TString &root,
+ const TString &name,
+ const TShardedTableOptions &opts)
+{
+ // Create table with four shards.
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpCreateTable, root);
- if (!opts.EnableOutOfOrder_)
- desc->MutablePartitionConfig()->MutablePipelineConfig()->SetEnableOutOfOrder(false);
+ auto& tx = *request->Record.MutableTransaction()->MutableModifyScheme();
+ NKikimrSchemeOp::TTableDescription* desc = nullptr;
+ if (opts.Indexes_) {
+ tx.SetOperationType(NKikimrSchemeOp::ESchemeOpCreateIndexedTable);
+ desc = tx.MutableCreateIndexedTable()->MutableTableDescription();
+ } else {
+ tx.SetOperationType(NKikimrSchemeOp::ESchemeOpCreateTable);
+ desc = tx.MutableCreateTable();
+ }
- if (opts.Policy_) {
- opts.Policy_->Serialize(*desc->MutablePartitionConfig()->MutableCompactionPolicy());
- }
+ UNIT_ASSERT(desc);
+ desc->SetName(name);
- switch (opts.ShadowData_) {
- case EShadowDataMode::Default:
- break;
- case EShadowDataMode::Enabled:
- desc->MutablePartitionConfig()->SetShadowData(true);
- break;
+ for (const auto& column : opts.Columns_) {
+ auto col = desc->AddColumns();
+ col->SetName(column.Name);
+ col->SetType(column.Type);
+ col->SetNotNull(column.NotNull);
+ if (column.IsKey) {
+ desc->AddKeyColumnNames(column.Name);
}
+ }
- if (opts.Followers_ > 0) {
- auto& followerGroup = *desc->MutablePartitionConfig()->AddFollowerGroups();
- followerGroup.SetFollowerCount(opts.Followers_);
- followerGroup.SetAllowLeaderPromotion(opts.FollowerPromotion_);
- }
+ for (const auto& index : opts.Indexes_) {
+ auto* indexDesc = tx.MutableCreateIndexedTable()->MutableIndexDescription()->Add();
- if (opts.ExternalStorage_) {
- auto& family = *desc->MutablePartitionConfig()->AddColumnFamilies();
- family.SetStorage(NKikimrSchemeOp::ColumnStorageTest_1_2_1k);
- }
+ indexDesc->SetName(index.Name);
+ indexDesc->SetType(index.Type);
- if (opts.ExecutorCacheSize_) {
- desc->MutablePartitionConfig()->SetExecutorCacheSize(*opts.ExecutorCacheSize_);
+ for (const auto& col : index.IndexColumns) {
+ indexDesc->AddKeyColumnNames(col);
+ }
+ for (const auto& col : index.DataColumns) {
+ indexDesc->AddDataColumnNames(col);
}
+ }
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto reply = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(handle);
- UNIT_ASSERT_VALUES_EQUAL(reply->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- txId = reply->Record.GetTxId();
+ desc->SetUniformPartitionsCount(opts.Shards_);
+
+ if (!opts.EnableOutOfOrder_)
+ desc->MutablePartitionConfig()->MutablePipelineConfig()->SetEnableOutOfOrder(false);
+
+ if (opts.Policy_) {
+ opts.Policy_->Serialize(*desc->MutablePartitionConfig()->MutableCompactionPolicy());
}
- {
- auto request = MakeHolder<NSchemeShard::TEvSchemeShard::TEvNotifyTxCompletion>();
- request->Record.SetTxId(txId);
- auto tid = ChangeStateStorage(SchemeRoot, settings.Domain);
- runtime.SendToPipe(tid, sender, request.Release(), 0, GetPipeConfigWithRetries());
- runtime.GrabEdgeEventRethrow<TEvSchemeShard::TEvNotifyTxCompletionResult>(handle);
+
+ switch (opts.ShadowData_) {
+ case EShadowDataMode::Default:
+ break;
+ case EShadowDataMode::Enabled:
+ desc->MutablePartitionConfig()->SetShadowData(true);
+ break;
+ }
+
+ if (opts.Followers_ > 0) {
+ auto& followerGroup = *desc->MutablePartitionConfig()->AddFollowerGroups();
+ followerGroup.SetFollowerCount(opts.Followers_);
+ followerGroup.SetAllowLeaderPromotion(opts.FollowerPromotion_);
+ }
+
+ if (opts.ExternalStorage_) {
+ auto& family = *desc->MutablePartitionConfig()->AddColumnFamilies();
+ family.SetStorage(NKikimrSchemeOp::ColumnStorageTest_1_2_1k);
}
+
+ if (opts.ExecutorCacheSize_) {
+ desc->MutablePartitionConfig()->SetExecutorCacheSize(*opts.ExecutorCacheSize_);
+ }
+
+ WaitTxNotification(server, sender, RunSchemeTx(*server->GetRuntime(), std::move(request), sender));
}
-void CreateShardedTable(Tests::TServer::TPtr server,
- TActorId sender,
- const TString &root,
- const TString &name,
- ui64 shards,
- bool enableOutOfOrder,
- const NLocalDb::TCompactionPolicy* policy,
- EShadowDataMode shadowData)
+void CreateShardedTable(
+ Tests::TServer::TPtr server,
+ TActorId sender,
+ const TString &root,
+ const TString &name,
+ ui64 shards,
+ bool enableOutOfOrder,
+ const NLocalDb::TCompactionPolicy* policy,
+ EShadowDataMode shadowData)
{
auto opts = TShardedTableOptions()
.Shards(shards)
@@ -1219,22 +1238,12 @@ ui64 AsyncCreateCopyTable(
const TString &name,
const TString &from)
{
- auto &runtime = *server->GetRuntime();
-
- // Create table with four shards.
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpCreateTable);
- tx.SetWorkingDir(root);
- auto &desc = *tx.MutableCreateTable();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpCreateTable, root);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableCreateTable();
desc.SetName(name);
desc.SetCopyFromTable(from);
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request), sender);
}
NKikimrScheme::TEvDescribeSchemeResult DescribeTable(Tests::TServer::TPtr server,
@@ -1495,22 +1504,13 @@ ui64 AsyncSplitTable(
ui64 sourceTablet,
ui32 splitKey)
{
- auto &runtime = *server->GetRuntime();
-
- // Create table with four shards.
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpSplitMergeTablePartitions);
- auto &desc = *tx.MutableSplitMergeTablePartitions();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpSplitMergeTablePartitions);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableSplitMergeTablePartitions();
desc.SetTablePath(path);
desc.AddSourceTabletId(sourceTablet);
desc.AddSplitBoundary()->MutableKeyPrefix()->AddTuple()->MutableOptional()->SetUint32(splitKey);
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()), 0, /* viaActorSystem */ true);
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request), sender, true);
}
ui64 AsyncMergeTable(
@@ -1519,23 +1519,26 @@ ui64 AsyncMergeTable(
const TString& path,
const TVector<ui64>& sourceTabletIds)
{
- auto &runtime = *server->GetRuntime();
-
- // Create table with four shards.
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpSplitMergeTablePartitions);
- auto &desc = *tx.MutableSplitMergeTablePartitions();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpSplitMergeTablePartitions);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableSplitMergeTablePartitions();
desc.SetTablePath(path);
for (ui64 tabletId : sourceTabletIds) {
desc.AddSourceTabletId(tabletId);
}
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request), sender);
+}
+
+ui64 AsyncMoveTable(Tests::TServer::TPtr server,
+ const TString& srcTable,
+ const TString& dstTable)
+{
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpMoveTable);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableMoveTable();
+ desc.SetSrcPath(srcTable);
+ desc.SetDstPath(dstTable);
+
+ return RunSchemeTx(*server->GetRuntime(), std::move(request));
}
ui64 AsyncAlterAddExtraColumn(
@@ -1543,25 +1546,14 @@ ui64 AsyncAlterAddExtraColumn(
const TString& workingDir,
const TString& name)
{
- auto &runtime = *server->GetRuntime();
- auto sender = runtime.AllocateEdgeActor();
-
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpAlterTable);
- tx.SetWorkingDir(workingDir);
- auto &desc = *tx.MutableAlterTable();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpAlterTable, workingDir);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableAlterTable();
desc.SetName(name);
+ auto& col = *desc.AddColumns();
+ col.SetName("extra");
+ col.SetType("Uint32");
- auto* col = desc.AddColumns();
- col->SetName("extra");
- col->SetType("Uint32");
-
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request));
}
ui64 AsyncAlterDropColumn(
@@ -1570,24 +1562,13 @@ ui64 AsyncAlterDropColumn(
const TString& name,
const TString& colName)
{
- auto &runtime = *server->GetRuntime();
- auto sender = runtime.AllocateEdgeActor();
-
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpAlterTable);
- tx.SetWorkingDir(workingDir);
- auto &desc = *tx.MutableAlterTable();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpAlterTable, workingDir);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableAlterTable();
desc.SetName(name);
+ auto& col = *desc.AddDropColumns();
+ col.SetName(colName);
- auto* col = desc.AddDropColumns();
- col->SetName(colName);
-
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request));
}
ui64 AsyncAlterAndDisableShadow(
@@ -1596,15 +1577,8 @@ ui64 AsyncAlterAndDisableShadow(
const TString& name,
const NLocalDb::TCompactionPolicy* policy)
{
- auto &runtime = *server->GetRuntime();
- auto sender = runtime.AllocateEdgeActor();
-
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpAlterTable);
- tx.SetWorkingDir(workingDir);
- auto &desc = *tx.MutableAlterTable();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpAlterTable, workingDir);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableAlterTable();
desc.SetName(name);
desc.MutablePartitionConfig()->SetShadowData(false);
@@ -1612,10 +1586,7 @@ ui64 AsyncAlterAndDisableShadow(
policy->Serialize(*desc.MutablePartitionConfig()->MutableCompactionPolicy());
}
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request));
}
ui64 AsyncAlterAddIndex(
@@ -1683,22 +1654,12 @@ ui64 AsyncAlterDropIndex(
const TString& tableName,
const TString& indexName)
{
- auto &runtime = *server->GetRuntime();
- auto sender = runtime.AllocateEdgeActor();
-
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpDropIndex);
- tx.SetWorkingDir(workingDir);
- auto &desc = *tx.MutableDropIndex();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpDropIndex, workingDir);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableDropIndex();
desc.SetTableName(tableName);
desc.SetIndexName(indexName);
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request));
}
ui64 AsyncAlterAddStream(
@@ -1707,24 +1668,14 @@ ui64 AsyncAlterAddStream(
const TString& tableName,
const TShardedTableOptions::TCdcStream& streamDesc)
{
- auto &runtime = *server->GetRuntime();
- auto sender = runtime.AllocateEdgeActor();
-
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpCreateCdcStream);
- tx.SetWorkingDir(workingDir);
- auto &desc = *tx.MutableCreateCdcStream();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpCreateCdcStream, workingDir);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableCreateCdcStream();
desc.SetTableName(tableName);
desc.MutableStreamDescription()->SetName(streamDesc.Name);
desc.MutableStreamDescription()->SetMode(streamDesc.Mode);
desc.MutableStreamDescription()->SetFormat(streamDesc.Format);
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request));
}
ui64 AsyncAlterDisableStream(
@@ -1733,23 +1684,13 @@ ui64 AsyncAlterDisableStream(
const TString& tableName,
const TString& streamName)
{
- auto &runtime = *server->GetRuntime();
- auto sender = runtime.AllocateEdgeActor();
-
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpAlterCdcStream);
- tx.SetWorkingDir(workingDir);
- auto &desc = *tx.MutableAlterCdcStream();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpAlterCdcStream, workingDir);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableAlterCdcStream();
desc.SetTableName(tableName);
desc.SetStreamName(streamName);
desc.MutableDisable();
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request));
}
ui64 AsyncAlterDropStream(
@@ -1758,22 +1699,12 @@ ui64 AsyncAlterDropStream(
const TString& tableName,
const TString& streamName)
{
- auto &runtime = *server->GetRuntime();
- auto sender = runtime.AllocateEdgeActor();
-
- auto request = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- request->Record.SetExecTimeoutPeriod(Max<ui64>());
- auto &tx = *request->Record.MutableTransaction()->MutableModifyScheme();
- tx.SetOperationType(NKikimrSchemeOp::ESchemeOpDropCdcStream);
- tx.SetWorkingDir(workingDir);
- auto &desc = *tx.MutableDropCdcStream();
+ auto request = SchemeTxTemplate(NKikimrSchemeOp::ESchemeOpDropCdcStream, workingDir);
+ auto& desc = *request->Record.MutableTransaction()->MutableModifyScheme()->MutableDropCdcStream();
desc.SetTableName(tableName);
desc.SetStreamName(streamName);
- runtime.Send(new IEventHandle(MakeTxProxyID(), sender, request.Release()));
- auto ev = runtime.GrabEdgeEventRethrow<TEvTxUserProxy::TEvProposeTransactionStatus>(sender);
- UNIT_ASSERT_VALUES_EQUAL(ev->Get()->Record.GetStatus(), TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecInProgress);
- return ev->Get()->Record.GetTxId();
+ return RunSchemeTx(*server->GetRuntime(), std::move(request));
}
void WaitTxNotification(Tests::TServer::TPtr server, TActorId sender, ui64 txId) {
diff --git a/ydb/core/tx/datashard/datashard_ut_common.h b/ydb/core/tx/datashard/datashard_ut_common.h
index 94e2ceaa5f..e9d13eb5aa 100644
--- a/ydb/core/tx/datashard/datashard_ut_common.h
+++ b/ydb/core/tx/datashard/datashard_ut_common.h
@@ -556,6 +556,10 @@ ui64 AsyncMergeTable(
const TString& path,
const TVector<ui64>& sourceTabletIds);
+ui64 AsyncMoveTable(Tests::TServer::TPtr server,
+ const TString& srcTable,
+ const TString& dstTable);
+
ui64 AsyncAlterAddExtraColumn(
Tests::TServer::TPtr server,
const TString& workingDir,
diff --git a/ydb/core/tx/datashard/datashard_ut_common_kqp.h b/ydb/core/tx/datashard/datashard_ut_common_kqp.h
index e5c976dd35..d398647ff9 100644
--- a/ydb/core/tx/datashard/datashard_ut_common_kqp.h
+++ b/ydb/core/tx/datashard/datashard_ut_common_kqp.h
@@ -147,6 +147,64 @@ namespace NKqpHelpers {
return request;
}
+ inline TString KqpSimpleExec(TTestActorRuntime& runtime, const TString& query) {
+ auto reqSender = runtime.AllocateEdgeActor();
+ auto ev = ExecRequest(runtime, reqSender, MakeSimpleRequest(query));
+ auto& response = ev->Get()->Record.GetRef();
+ if (response.GetYdbStatus() != Ydb::StatusIds::SUCCESS) {
+ return TStringBuilder() << "ERROR: " << response.GetYdbStatus();
+ }
+ if (response.GetResponse().GetResults().size() == 0) {
+ return "<empty>";
+ }
+ UNIT_ASSERT_VALUES_EQUAL(response.GetResponse().GetResults().size(), 1u);
+ return response.GetResponse().GetResults()[0].GetValue().ShortDebugString();
+ }
+
+ inline TString KqpSimpleBegin(TTestActorRuntime& runtime, TString& sessionId, TString& txId, const TString& query) {
+ auto reqSender = runtime.AllocateEdgeActor();
+ sessionId = CreateSession(runtime, reqSender);
+ auto ev = ExecRequest(runtime, reqSender, MakeBeginRequest(sessionId, query));
+ auto& response = ev->Get()->Record.GetRef();
+ if (response.GetYdbStatus() != Ydb::StatusIds::SUCCESS) {
+ return TStringBuilder() << "ERROR: " << response.GetYdbStatus();
+ }
+ txId = response.GetResponse().GetTxMeta().id();
+ if (response.GetResponse().GetResults().size() == 0) {
+ return "<empty>";
+ }
+ UNIT_ASSERT_VALUES_EQUAL(response.GetResponse().GetResults().size(), 1u);
+ return response.GetResponse().GetResults()[0].GetValue().ShortDebugString();
+ }
+
+ inline TString KqpSimpleContinue(TTestActorRuntime& runtime, const TString& sessionId, const TString& txId, const TString& query) {
+ auto reqSender = runtime.AllocateEdgeActor();
+ auto ev = ExecRequest(runtime, reqSender, MakeContinueRequest(sessionId, txId, query));
+ auto& response = ev->Get()->Record.GetRef();
+ if (response.GetYdbStatus() != Ydb::StatusIds::SUCCESS) {
+ return TStringBuilder() << "ERROR: " << response.GetYdbStatus();
+ }
+ if (response.GetResponse().GetResults().size() == 0) {
+ return "<empty>";
+ }
+ UNIT_ASSERT_VALUES_EQUAL(response.GetResponse().GetResults().size(), 1u);
+ return response.GetResponse().GetResults()[0].GetValue().ShortDebugString();
+ }
+
+ inline TString KqpSimpleCommit(TTestActorRuntime& runtime, const TString& sessionId, const TString& txId, const TString& query) {
+ auto reqSender = runtime.AllocateEdgeActor();
+ auto ev = ExecRequest(runtime, reqSender, MakeCommitRequest(sessionId, txId, query));
+ auto& response = ev->Get()->Record.GetRef();
+ if (response.GetYdbStatus() != Ydb::StatusIds::SUCCESS) {
+ return TStringBuilder() << "ERROR: " << response.GetYdbStatus();
+ }
+ if (response.GetResponse().GetResults().size() == 0) {
+ return "<empty>";
+ }
+ UNIT_ASSERT_VALUES_EQUAL(response.GetResponse().GetResults().size(), 1u);
+ return response.GetResponse().GetResults()[0].GetValue().ShortDebugString();
+ }
+
} // namespace NKqpHelpers
} // namespace NDataShard
} // namespace NKikimr
diff --git a/ydb/core/tx/datashard/datashard_ut_kqp_errors.cpp b/ydb/core/tx/datashard/datashard_ut_kqp_errors.cpp
index 8e14a1ce09..8318b5e9dc 100644
--- a/ydb/core/tx/datashard/datashard_ut_kqp_errors.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_kqp_errors.cpp
@@ -90,7 +90,7 @@ Y_UNIT_TEST(ResolveTableError) {
auto event = ev.Get()->Get<TEvTxProxySchemeCache::TEvNavigateKeySetResult>();
event->Request->ErrorCount = 1;
auto& entries = event->Request->ResultSet;
- entries[0].Status = NSchemeCache::TSchemeCacheNavigate::EStatus::PathErrorUnknown;
+ entries[0].Status = NSchemeCache::TSchemeCacheNavigate::EStatus::LookupError;
}
}
return TTestActorRuntime::EEventAction::PROCESS;
@@ -108,8 +108,7 @@ Y_UNIT_TEST(ResolveTableError) {
TIssues issues;
IssuesFromMessage(record.GetResponse().GetQueryIssues(), issues);
- UNIT_ASSERT_C(HasIssue(issues, NYql::TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE,
- "Failed to resolve table `Root/table-1`: PathErrorUnknown."), record.GetResponse().DebugString());
+ UNIT_ASSERT(HasIssue(issues, NYql::TIssuesIds::KIKIMR_TEMPORARILY_UNAVAILABLE));
}
Y_UNIT_TEST_NEW_ENGINE(ProposeError) {
@@ -199,8 +198,8 @@ Y_UNIT_TEST_NEW_ENGINE(ProposeError) {
if (UseNewEngine) {
test(TEvProposeTransactionResult::ERROR,
- Ydb::StatusIds::SCHEME_ERROR,
- NYql::TIssuesIds::KIKIMR_SCHEME_ERROR,
+ Ydb::StatusIds::ABORTED,
+ NYql::TIssuesIds::KIKIMR_SCHEME_MISMATCH,
"blah-blah-blah",
[](NKikimrTxDataShard::TEvProposeTransactionResult& x) {
auto* error = x.MutableError()->Add();
diff --git a/ydb/core/tx/datashard/datashard_ut_minikql.cpp b/ydb/core/tx/datashard/datashard_ut_minikql.cpp
index 7974e47486..b788107f87 100644
--- a/ydb/core/tx/datashard/datashard_ut_minikql.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_minikql.cpp
@@ -537,7 +537,7 @@ Y_UNIT_TEST(SelectRangeWithNotFullKey) {
{
auto programText = R"___((
(let r1 '('key1 (Uint32 '345) (Uint32 '347)))
- (let r2 '('key2 (Void) (Void)))
+ (let r2 '('key2 (Nothing (OptionalType (DataType 'Utf8))) (Nothing (OptionalType (DataType 'Utf8)))))
(let range '('IncFrom 'ExcTo r1 r2))
(let select '('key1 'key2 'value))
(let options '())
@@ -557,18 +557,18 @@ Y_UNIT_TEST(SelectRangeWithNotFullKey) {
UNIT_ASSERT_EQUAL(rsl.Size(), 2);
TValue row1 = rsl[0];
TValue row2 = rsl[1];
- UNIT_ASSERT_EQUAL(ui32(row1["key1"]), 346);
- UNIT_ASSERT_EQUAL(ui32(row2["key1"]), 347);
- UNIT_ASSERT_EQUAL(TString(row1["key2"]), "id345");
- UNIT_ASSERT_EQUAL(TString(row2["key2"]), "idXYZ");
- UNIT_ASSERT_EQUAL(TString(row1["value"]), "Tables");
- UNIT_ASSERT_EQUAL(TString(row2["value"]), "Paulson");
+ UNIT_ASSERT_EQUAL(ui32(row1["key1"]), 345);
+ UNIT_ASSERT_EQUAL(ui32(row2["key1"]), 346);
+ UNIT_ASSERT_EQUAL(TString(row1["key2"]), "id123");
+ UNIT_ASSERT_EQUAL(TString(row2["key2"]), "id345");
+ UNIT_ASSERT_EQUAL(TString(row1["value"]), "Robert");
+ UNIT_ASSERT_EQUAL(TString(row2["value"]), "Tables");
}
{
auto programText = R"___((
(let r1 '('key1 (Uint32 '345) (Uint32 '347)))
- (let r2 '('key2 (Void) (Void)))
+ (let r2 '('key2 (Void) (Nothing (OptionalType (DataType 'Utf8)))))
(let range '('ExcFrom 'ExcTo r1 r2))
(let select '('key1 'key2 'value))
(let options '())
@@ -585,21 +585,17 @@ Y_UNIT_TEST(SelectRangeWithNotFullKey) {
TValue rs0 = value["myRes"];
UNIT_ASSERT_EQUAL(bool(rs0["Truncated"]), false);
TValue rsl = rs0["List"];
- UNIT_ASSERT_EQUAL(rsl.Size(), 2);
+ UNIT_ASSERT_EQUAL(rsl.Size(), 1);
TValue row1 = rsl[0];
- TValue row2 = rsl[1];
UNIT_ASSERT_EQUAL(ui32(row1["key1"]), 346);
- UNIT_ASSERT_EQUAL(ui32(row2["key1"]), 347);
UNIT_ASSERT_EQUAL(TString(row1["key2"]), "id345");
- UNIT_ASSERT_EQUAL(TString(row2["key2"]), "idXYZ");
UNIT_ASSERT_EQUAL(TString(row1["value"]), "Tables");
- UNIT_ASSERT_EQUAL(TString(row2["value"]), "Paulson");
}
{
auto programText = R"___((
(let r1 '('key1 (Uint32 '345) (Uint32 '347)))
- (let r2 '('key2 (Void) (Void)))
+ (let r2 '('key2 (Nothing (OptionalType (DataType 'Utf8))) (Void)))
(let range '('IncFrom 'IncTo r1 r2))
(let select '('key1 'key2 'value))
(let options '())
@@ -616,22 +612,26 @@ Y_UNIT_TEST(SelectRangeWithNotFullKey) {
auto rs0 = value["myRes"];
UNIT_ASSERT_EQUAL(bool(rs0["Truncated"]), false);
auto rsl = rs0["List"];
- UNIT_ASSERT_EQUAL(rsl.Size(), 2);
+ UNIT_ASSERT_EQUAL(rsl.Size(), 3);
auto row1 = rsl[0];
auto row2 = rsl[1];
- UNIT_ASSERT_EQUAL(ui32(row1["key1"]), 346);
- UNIT_ASSERT_EQUAL(ui32(row2["key1"]), 347);
- UNIT_ASSERT_EQUAL(TString(row1["key2"]), "id345");
- UNIT_ASSERT_EQUAL(TString(row2["key2"]), "idXYZ");
- UNIT_ASSERT_EQUAL(TString(row1["value"]), "Tables");
- UNIT_ASSERT_EQUAL(TString(row2["value"]), "Paulson");
+ auto row3 = rsl[2];
+ UNIT_ASSERT_EQUAL(ui32(row1["key1"]), 345);
+ UNIT_ASSERT_EQUAL(ui32(row2["key1"]), 346);
+ UNIT_ASSERT_EQUAL(ui32(row3["key1"]), 347);
+ UNIT_ASSERT_EQUAL(TString(row1["key2"]), "id123");
+ UNIT_ASSERT_EQUAL(TString(row2["key2"]), "id345");
+ UNIT_ASSERT_EQUAL(TString(row3["key2"]), "idXYZ");
+ UNIT_ASSERT_EQUAL(TString(row1["value"]), "Robert");
+ UNIT_ASSERT_EQUAL(TString(row2["value"]), "Tables");
+ UNIT_ASSERT_EQUAL(TString(row3["value"]), "Paulson");
}
// (345,inf).. (347,inf)
{
auto programText = R"___((
(let r1 '('key1 (Uint32 '345) (Uint32 '347)))
- (let range '('IncFrom 'ExcTo r1))
+ (let range '('ExcFrom 'IncTo r1))
(let select '('key1 'key2 'value))
(let options '())
(let pgmReturn (AsList
diff --git a/ydb/core/tx/datashard/datashard_ut_order.cpp b/ydb/core/tx/datashard/datashard_ut_order.cpp
index e4501f3d6d..abe8f3cdb2 100644
--- a/ydb/core/tx/datashard/datashard_ut_order.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_order.cpp
@@ -1189,6 +1189,9 @@ Y_UNIT_TEST_WITH_MVCC(ScanFollowedByUpdate) {
auto &tx = *dataTransaction.MutableReadTableTransaction();
tx.MutableTableId()->SetOwnerId(FAKE_SCHEMESHARD_TABLET_ID);
tx.MutableTableId()->SetTableId(13);
+ auto &range = *tx.MutableRange();
+ range.SetFromInclusive(true);
+ range.SetToInclusive(true);
auto &c = *tx.AddColumns();
c.SetId(56);
c.SetName("value");
@@ -3644,7 +3647,8 @@ void TestLateKqpQueryAfterColumnDrop(bool dataQuery, const TString& query, bool
TServerSettings serverSettings(pm.GetPort(2134));
serverSettings.SetDomainName("Root")
.SetEnableMvcc(enableMvcc)
- .SetUseRealThreads(false);
+ .SetUseRealThreads(false)
+ .SetEnableKqpSessionActor(true);
if (dataQuery) {
NKikimrKqp::TKqpSetting setting;
@@ -3746,7 +3750,7 @@ void TestLateKqpQueryAfterColumnDrop(bool dataQuery, const TString& query, bool
auto& response = ev->Get()->Record.GetRef();
Cerr << response.DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(response.GetYdbStatus(), Ydb::StatusIds::ABORTED);
- auto& issue = response.GetResponse().GetQueryIssues(0).Getissues(0);
+ auto& issue = response.GetResponse().GetQueryIssues(0);
UNIT_ASSERT_VALUES_EQUAL(issue.issue_code(), (int) NYql::TIssuesIds::KIKIMR_SCHEME_MISMATCH);
UNIT_ASSERT_STRINGS_EQUAL(issue.message(), "Table \'/Root/table-1\' scheme changed.");
}
@@ -5418,6 +5422,154 @@ Y_UNIT_TEST_TWIN(UncommittedReadSetAck, UseNewEngine) {
)"));
}
+Y_UNIT_TEST_TWIN(UncommittedReads, UseNewEngine) {
+ TPortManager pm;
+ TServerSettings::TControls controls;
+ controls.MutableDataShardControls()->SetPrioritizedMvccSnapshotReads(1);
+ controls.MutableDataShardControls()->SetUnprotectedMvccSnapshotReads(1);
+ controls.MutableDataShardControls()->SetEnableLockedWrites(1);
+
+ TServerSettings serverSettings(pm.GetPort(2134));
+ serverSettings.SetDomainName("Root")
+ .SetEnableMvcc(true)
+ .SetEnableMvccSnapshotReads(true)
+ .SetEnableKqpSessionActor(UseNewEngine)
+ .SetUseRealThreads(false);
+
+ Tests::TServer::TPtr server = new TServer(serverSettings);
+ auto &runtime = *server->GetRuntime();
+ auto sender = runtime.AllocateEdgeActor();
+
+ runtime.SetLogPriority(NKikimrServices::TX_DATASHARD, NLog::PRI_TRACE);
+ runtime.SetLogPriority(NKikimrServices::TX_MEDIATOR_TIMECAST, NLog::PRI_TRACE);
+
+ InitRoot(server, sender);
+
+ TDisableDataShardLogBatching disableDataShardLogBatching;
+ CreateShardedTable(server, sender, "/Root", "table-1", 1);
+
+ auto shards1 = GetTableShards(server, sender, "/Root/table-1");
+
+ auto isTableShard = [&](ui64 tabletId) -> bool {
+ return std::find(shards1.begin(), shards1.end(), tabletId) != shards1.end();
+ };
+
+ ExecSQL(server, sender, Q_("UPSERT INTO `/Root/table-1` (key, value) VALUES (1, 1)"));
+
+ SimulateSleep(server, TDuration::Seconds(1));
+
+ // Read the upserted row and also prime shard for unprotected reads
+ TString sessionId, txId;
+ UNIT_ASSERT_VALUES_EQUAL(
+ KqpSimpleBegin(runtime, sessionId, txId, Q_(R"(
+ SELECT key, value FROM `/Root/table-1`
+ ORDER BY key
+ )")),
+ "Struct { "
+ "List { Struct { Optional { Uint32: 1 } } Struct { Optional { Uint32: 1 } } } "
+ "} Struct { Bool: false }");
+
+ // Make sure we are at the max immediate write edge for current step and it's confirmed
+ ExecSQL(server, sender, Q_("UPSERT INTO `/Root/table-1` (key, value) VALUES (2, 2)"));
+ ExecSQL(server, sender, Q_("UPSERT INTO `/Root/table-1` (key, value) VALUES (3, 3)"));
+
+ // Block commits and start counting propose responses
+ TVector<THolder<IEventHandle>> blockedCommits;
+ size_t seenProposeResults = 0;
+ auto blockCommits = [&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) -> auto {
+ switch (ev->GetTypeRewrite()) {
+ case TEvTablet::TEvCommit::EventType: {
+ auto* msg = ev->Get<TEvTablet::TEvCommit>();
+ if (isTableShard(msg->TabletID)) {
+ Cerr << "... blocked commit for tablet " << msg->TabletID << Endl;
+ blockedCommits.push_back(std::move(ev));
+ return TTestActorRuntime::EEventAction::DROP;
+ }
+ break;
+ }
+ case TEvDataShard::TEvProposeTransactionResult::EventType: {
+ Cerr << "... observed propose transaction result" << Endl;
+ ++seenProposeResults;
+ break;
+ }
+ }
+ return TTestActorRuntime::EEventAction::PROCESS;
+ };
+ auto prevObserver = runtime.SetObserverFunc(blockCommits);
+
+ auto waitFor = [&](const auto& condition, const TString& description) {
+ while (!condition()) {
+ Cerr << "... waiting for " << description << Endl;
+ TDispatchOptions options;
+ options.CustomFinalCondition = [&]() {
+ return condition();
+ };
+ runtime.DispatchEvents(options);
+ }
+ };
+
+ // Start upserting a row with blocked commits, it will stick to the same version as the last upsert
+ auto upsertSender = runtime.AllocateEdgeActor();
+ SendRequest(runtime, upsertSender, MakeSimpleRequest(Q_("UPSERT INTO `/Root/table-1` (key, value) VALUES (4, 4)")));
+
+ waitFor([&]{ return blockedCommits.size() > 0; }, "blocked commit");
+
+ // Start reading data, we know it must read confirmed data, but it will also include the blocked row above
+ auto readSender = runtime.AllocateEdgeActor();
+ SendRequest(runtime, readSender, MakeSimpleRequest(Q_("SELECT key, value FROM `/Root/table-1` ORDER BY key")));
+
+ // Sleep for 1 second
+ SimulateSleep(runtime, TDuration::Seconds(1));
+
+ // We are blocking commits, so read must not see a 4th row until we unblock
+ if (seenProposeResults > 0) {
+ // We might make it possible in the future to run reads like that without blocking
+ // However, it still means we must not return the 4th row that is not committed
+ auto ev = runtime.GrabEdgeEventRethrow<NKqp::TEvKqp::TEvQueryResponse>(readSender);
+ auto& response = ev->Get()->Record.GetRef();
+ UNIT_ASSERT_VALUES_EQUAL(response.GetYdbStatus(), Ydb::StatusIds::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL(response.GetResponse().GetResults().size(), 1u);
+ UNIT_ASSERT_VALUES_EQUAL(
+ response.GetResponse().GetResults()[0].GetValue().ShortDebugString(),
+ "Struct { "
+ "List { Struct { Optional { Uint32: 1 } } Struct { Optional { Uint32: 1 } } } "
+ "List { Struct { Optional { Uint32: 2 } } Struct { Optional { Uint32: 2 } } } "
+ "List { Struct { Optional { Uint32: 3 } } Struct { Optional { Uint32: 3 } } } "
+ "} Struct { Bool: false }");
+ return;
+ }
+
+ // Unblock all commits
+ runtime.SetObserverFunc(prevObserver);
+ for (auto& ev : blockedCommits) {
+ runtime.Send(ev.Release(), 0, true);
+ }
+ blockedCommits.clear();
+
+ // We must successfully upsert the row
+ {
+ auto ev = runtime.GrabEdgeEventRethrow<NKqp::TEvKqp::TEvQueryResponse>(upsertSender);
+ auto& response = ev->Get()->Record.GetRef();
+ UNIT_ASSERT_VALUES_EQUAL(response.GetYdbStatus(), Ydb::StatusIds::SUCCESS);
+ }
+
+ // We must successfully read including the 4th row
+ {
+ auto ev = runtime.GrabEdgeEventRethrow<NKqp::TEvKqp::TEvQueryResponse>(readSender);
+ auto& response = ev->Get()->Record.GetRef();
+ UNIT_ASSERT_VALUES_EQUAL(response.GetYdbStatus(), Ydb::StatusIds::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL(response.GetResponse().GetResults().size(), 1u);
+ UNIT_ASSERT_VALUES_EQUAL(
+ response.GetResponse().GetResults()[0].GetValue().ShortDebugString(),
+ "Struct { "
+ "List { Struct { Optional { Uint32: 1 } } Struct { Optional { Uint32: 1 } } } "
+ "List { Struct { Optional { Uint32: 2 } } Struct { Optional { Uint32: 2 } } } "
+ "List { Struct { Optional { Uint32: 3 } } Struct { Optional { Uint32: 3 } } } "
+ "List { Struct { Optional { Uint32: 4 } } Struct { Optional { Uint32: 4 } } } "
+ "} Struct { Bool: false }");
+ }
+}
+
} // Y_UNIT_TEST_SUITE(DataShardOutOfOrder)
} // namespace NKikimr
diff --git a/ydb/core/tx/datashard/datashard_ut_rs.cpp b/ydb/core/tx/datashard/datashard_ut_rs.cpp
index 06c5e83b37..6442648fdc 100644
--- a/ydb/core/tx/datashard/datashard_ut_rs.cpp
+++ b/ydb/core/tx/datashard/datashard_ut_rs.cpp
@@ -17,7 +17,7 @@ ui64 GetRSCount(TTestActorRuntime &runtime, TActorId sender, ui64 shard)
{
auto request = MakeHolder<TEvTablet::TEvLocalMKQL>();
TString miniKQL = R"___((
- (let range '('IncFrom '('TxId (Uint64 '0) (Void))))
+ (let range '('ExcFrom '('TxId (Uint64 '0) (Void))))
(let select '('TxId))
(let options '())
(let pgmReturn (AsList
@@ -158,7 +158,7 @@ Y_UNIT_TEST_SUITE(TDataShardRSTest) {
{
auto request = MakeHolder<TEvTablet::TEvLocalMKQL>();
TString miniKQL = R"___((
- (let range '('IncFrom '('TxId (Uint64 '0) (Void))))
+ (let range '('ExcFrom '('TxId (Uint64 '0) (Void))))
(let select '('TxId))
(let options '())
(let pgmReturn (AsList
diff --git a/ydb/core/tx/datashard/drop_cdc_stream_unit.cpp b/ydb/core/tx/datashard/drop_cdc_stream_unit.cpp
index 1775888a03..67b676e4e5 100644
--- a/ydb/core/tx/datashard/drop_cdc_stream_unit.cpp
+++ b/ydb/core/tx/datashard/drop_cdc_stream_unit.cpp
@@ -35,7 +35,6 @@ public:
Y_VERIFY(pathId.OwnerId == DataShard.GetPathOwnerId());
const auto streamPathId = PathIdFromPathId(params.GetStreamPathId());
- Y_VERIFY(streamPathId.OwnerId == DataShard.GetPathOwnerId());
const auto version = params.GetTableSchemaVersion();
Y_VERIFY(version);
diff --git a/ydb/core/tx/datashard/export_s3_base_uploader.h b/ydb/core/tx/datashard/export_s3_base_uploader.h
index 3ca6ecf355..03609adc02 100644
--- a/ydb/core/tx/datashard/export_s3_base_uploader.h
+++ b/ydb/core/tx/datashard/export_s3_base_uploader.h
@@ -317,8 +317,20 @@ protected:
return false;
}
+ static bool ShouldRetry(const Aws::S3::S3Error& error) {
+ if (error.ShouldRetry()) {
+ return true;
+ }
+
+ if ("TooManyRequests" == error.GetExceptionName()) {
+ return true;
+ }
+
+ return false;
+ }
+
void RetryOrFinish(const S3Error& error) {
- if (Attempt++ < Retries && error.ShouldRetry()) {
+ if (Attempt++ < Retries && ShouldRetry(error)) {
Delay = Min(Delay * Attempt, TDuration::Minutes(10));
const TDuration random = TDuration::FromValue(TAppData::RandomProvider->GenRand64() % Delay.MicroSeconds());
diff --git a/ydb/core/tx/datashard/export_scan.cpp b/ydb/core/tx/datashard/export_scan.cpp
index d1995c2f86..c0a5901aef 100644
--- a/ydb/core/tx/datashard/export_scan.cpp
+++ b/ydb/core/tx/datashard/export_scan.cpp
@@ -63,9 +63,9 @@ class TExportScan: private NActors::IActor, public NTable::IScan {
}
private:
- NMonitoring::TDynamicCounters::TCounterPtr MonRows;
- NMonitoring::TDynamicCounters::TCounterPtr MonBytesRead;
- NMonitoring::TDynamicCounters::TCounterPtr MonBytesSent;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MonRows;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MonBytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MonBytesSent;
};
bool IsReady() const {
diff --git a/ydb/core/tx/datashard/move_index_unit.cpp b/ydb/core/tx/datashard/move_index_unit.cpp
index 0799b9daeb..e3d9506335 100644
--- a/ydb/core/tx/datashard/move_index_unit.cpp
+++ b/ydb/core/tx/datashard/move_index_unit.cpp
@@ -6,6 +6,8 @@ namespace NKikimr {
namespace NDataShard {
class TMoveIndexUnit : public TExecutionUnit {
+ TVector<NMiniKQL::IChangeCollector::TChange> ChangeRecords;
+
public:
TMoveIndexUnit(TDataShard& dataShard, TPipeline& pipeline)
: TExecutionUnit(EExecutionUnitKind::MoveIndex, false, dataShard, pipeline)
@@ -38,48 +40,42 @@ public:
}
const auto& schemeTx = tx->GetSchemeTx();
-
if (!schemeTx.HasMoveIndex()) {
return EExecutionStatus::Executed;
}
NIceDb::TNiceDb db(txc.DB);
- TVector<NMiniKQL::IChangeCollector::TChange> changeRecords;
- if (!DataShard.LoadChangeRecords(db, changeRecords)) {
+
+ ChangeRecords.clear();
+ if (!DataShard.LoadChangeRecords(db, ChangeRecords)) {
return EExecutionStatus::Restart;
}
LOG_DEBUG_S(*TlsActivationContext, NKikimrServices::TX_DATASHARD, "TMoveIndexUnit Execute"
<< ": schemeTx# " << schemeTx.DebugString()
- << ": changeRecords size# " << changeRecords.size()
+ << ": changeRecords size# " << ChangeRecords.size()
<< ", at tablet# " << DataShard.TabletID());
- const auto& params = schemeTx.GetMoveIndex();
-
- DataShard.KillChangeSender(ctx);
+ DataShard.SuspendChangeSender(ctx);
+ const auto& params = schemeTx.GetMoveIndex();
DataShard.MoveUserIndex(op, params, ctx, txc);
-
- DataShard.CreateChangeSender(ctx);
- MoveChangeRecords(db, params, changeRecords);
- DataShard.EnqueueChangeRecords(std::move(changeRecords));
- DataShard.MaybeActivateChangeSender(ctx);
+ MoveChangeRecords(db, params, ChangeRecords);
BuildResult(op, NKikimrTxDataShard::TEvProposeTransactionResult::COMPLETE);
op->Result()->SetStepOrderId(op->GetStepOrder().ToPair());
- return EExecutionStatus::ExecutedNoMoreRestarts;
+ return EExecutionStatus::DelayCompleteNoMoreRestarts;
}
- void Complete(TOperation::TPtr, const TActorContext&) override {
- // nothing
+ void Complete(TOperation::TPtr, const TActorContext& ctx) override {
+ DataShard.CreateChangeSender(ctx);
+ DataShard.MaybeActivateChangeSender(ctx);
+ DataShard.EnqueueChangeRecords(std::move(ChangeRecords));
}
};
-THolder<TExecutionUnit> CreateMoveIndexUnit(
- TDataShard& dataShard,
- TPipeline& pipeline)
-{
+THolder<TExecutionUnit> CreateMoveIndexUnit(TDataShard& dataShard, TPipeline& pipeline) {
return THolder(new TMoveIndexUnit(dataShard, pipeline));
}
diff --git a/ydb/core/tx/datashard/move_table_unit.cpp b/ydb/core/tx/datashard/move_table_unit.cpp
index ad4becbe1a..e0f21eb6af 100644
--- a/ydb/core/tx/datashard/move_table_unit.cpp
+++ b/ydb/core/tx/datashard/move_table_unit.cpp
@@ -6,9 +6,11 @@ namespace NKikimr {
namespace NDataShard {
class TMoveTableUnit : public TExecutionUnit {
+ TVector<NMiniKQL::IChangeCollector::TChange> ChangeRecords;
+
public:
TMoveTableUnit(TDataShard& dataShard, TPipeline& pipeline)
- : TExecutionUnit(EExecutionUnitKind::DropIndexNotice, false, dataShard, pipeline)
+ : TExecutionUnit(EExecutionUnitKind::MoveTable, false, dataShard, pipeline)
{ }
bool IsReadyToExecute(TOperation::TPtr) const override {
@@ -42,42 +44,37 @@ public:
}
NIceDb::TNiceDb db(txc.DB);
- TVector<NMiniKQL::IChangeCollector::TChange> changeRecords;
- if (!DataShard.LoadChangeRecords(db, changeRecords)) {
+
+ ChangeRecords.clear();
+ if (!DataShard.LoadChangeRecords(db, ChangeRecords)) {
return EExecutionStatus::Restart;
}
LOG_DEBUG_S(*TlsActivationContext, NKikimrServices::TX_DATASHARD, "TMoveTableUnit Execute"
<< ": schemeTx# " << schemeTx.DebugString()
- << ": changeRecords size# " << changeRecords.size()
+ << ": changeRecords size# " << ChangeRecords.size()
<< ", at tablet# " << DataShard.TabletID());
- const auto& params = schemeTx.GetMoveTable();
-
- DataShard.KillChangeSender(ctx);
+ DataShard.SuspendChangeSender(ctx);
+ const auto& params = schemeTx.GetMoveTable();
DataShard.MoveUserTable(op, params, ctx, txc);
-
- DataShard.CreateChangeSender(ctx);
- MoveChangeRecords(db, params, changeRecords);
- DataShard.EnqueueChangeRecords(std::move(changeRecords));
- DataShard.MaybeActivateChangeSender(ctx);
+ MoveChangeRecords(db, params, ChangeRecords);
BuildResult(op, NKikimrTxDataShard::TEvProposeTransactionResult::COMPLETE);
op->Result()->SetStepOrderId(op->GetStepOrder().ToPair());
- return EExecutionStatus::ExecutedNoMoreRestarts;
+ return EExecutionStatus::DelayCompleteNoMoreRestarts;
}
- void Complete(TOperation::TPtr, const TActorContext&) override {
- // nothing
+ void Complete(TOperation::TPtr, const TActorContext& ctx) override {
+ DataShard.CreateChangeSender(ctx);
+ DataShard.MaybeActivateChangeSender(ctx);
+ DataShard.EnqueueChangeRecords(std::move(ChangeRecords));
}
};
-THolder<TExecutionUnit> CreateMoveTableUnit(
- TDataShard& dataShard,
- TPipeline& pipeline)
-{
+THolder<TExecutionUnit> CreateMoveTableUnit(TDataShard& dataShard, TPipeline& pipeline) {
return THolder(new TMoveTableUnit(dataShard, pipeline));
}
diff --git a/ydb/core/tx/datashard/s3_common.h b/ydb/core/tx/datashard/s3_common.h
index db81617d01..6ca33bf9fb 100644
--- a/ydb/core/tx/datashard/s3_common.h
+++ b/ydb/core/tx/datashard/s3_common.h
@@ -35,6 +35,10 @@ inline Aws::Client::ClientConfiguration ConfigFromSettings(const NKikimrSchemeOp
Y_FAIL("Unknown scheme");
}
+ if (settings.HasRegion()) {
+ config.region = settings.GetRegion();
+ }
+
if (settings.HasVerifySSL()) {
config.verifySSL = settings.GetVerifySSL();
}
diff --git a/ydb/core/tx/datashard/upload_stats.h b/ydb/core/tx/datashard/upload_stats.h
index f06ce7a255..ad9bee490a 100644
--- a/ydb/core/tx/datashard/upload_stats.h
+++ b/ydb/core/tx/datashard/upload_stats.h
@@ -38,8 +38,8 @@ private:
ui64 RowsSent = 0;
ui64 BytesSent = 0;
- NMonitoring::TDynamicCounters::TCounterPtr MonRows;
- NMonitoring::TDynamicCounters::TCounterPtr MonBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MonRows;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MonBytes;
};
}}
diff --git a/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.txt b/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_background_compaction/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_build_index/CMakeLists.txt b/ydb/core/tx/datashard/ut_build_index/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_build_index/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_build_index/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_change_collector/CMakeLists.txt b/ydb/core/tx/datashard/ut_change_collector/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_change_collector/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_change_collector/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt
index 9eead1d0b2..2575fb0182 100644
--- a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt
+++ b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.darwin.txt
@@ -29,6 +29,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_change_exchange PUBLIC
udf-service-exception_policy
public-lib-yson_value
cpp-client-ydb_datastreams
+ cpp-client-ydb_topic
cpp-client-ydb_persqueue_public
cpp-client-ydb_result
)
diff --git a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt
index ce0f792f15..080f09525d 100644
--- a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt
+++ b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.linux.txt
@@ -31,6 +31,7 @@ target_link_libraries(ydb-core-tx-datashard-ut_change_exchange PUBLIC
udf-service-exception_policy
public-lib-yson_value
cpp-client-ydb_datastreams
+ cpp-client-ydb_topic
cpp-client-ydb_persqueue_public
cpp-client-ydb_result
)
diff --git a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.txt b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_change_exchange/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_compaction/CMakeLists.txt b/ydb/core/tx/datashard/ut_compaction/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_compaction/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_compaction/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.txt b/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_erase_rows/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_followers/CMakeLists.txt b/ydb/core/tx/datashard/ut_followers/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_followers/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_followers/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_init/CMakeLists.txt b/ydb/core/tx/datashard/ut_init/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_init/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_init/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_keys/CMakeLists.txt b/ydb/core/tx/datashard/ut_keys/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_keys/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_keys/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_kqp/CMakeLists.txt b/ydb/core/tx/datashard/ut_kqp/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_kqp/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_kqp/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.txt b/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_kqp_errors/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.txt b/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_kqp_scan/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_locks/CMakeLists.txt b/ydb/core/tx/datashard/ut_locks/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_locks/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_locks/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_minikql/CMakeLists.txt b/ydb/core/tx/datashard/ut_minikql/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_minikql/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_minikql/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_minstep/CMakeLists.txt b/ydb/core/tx/datashard/ut_minstep/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_minstep/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_minstep/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_order/CMakeLists.txt b/ydb/core/tx/datashard/ut_order/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_order/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_order/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.txt b/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_range_avl_tree/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_range_ops/CMakeLists.txt b/ydb/core/tx/datashard/ut_range_ops/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_range_ops/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_range_ops/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_range_treap/CMakeLists.txt b/ydb/core/tx/datashard/ut_range_treap/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_range_treap/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_range_treap/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.txt b/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_read_iterator/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_read_table/CMakeLists.txt b/ydb/core/tx/datashard/ut_read_table/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_read_table/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_read_table/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_reassign/CMakeLists.txt b/ydb/core/tx/datashard/ut_reassign/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_reassign/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_reassign/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_replication/CMakeLists.txt b/ydb/core/tx/datashard/ut_replication/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_replication/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_replication/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_rs/CMakeLists.txt b/ydb/core/tx/datashard/ut_rs/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_rs/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_rs/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_snapshot/CMakeLists.txt b/ydb/core/tx/datashard/ut_snapshot/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_snapshot/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_snapshot/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_stats/CMakeLists.txt b/ydb/core/tx/datashard/ut_stats/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_stats/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_stats/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.txt b/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.txt
+++ b/ydb/core/tx/datashard/ut_upload_rows/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/long_tx_service/CMakeLists.txt b/ydb/core/tx/long_tx_service/CMakeLists.txt
index 8da6c30891..ac354dd83d 100644
--- a/ydb/core/tx/long_tx_service/CMakeLists.txt
+++ b/ydb/core/tx/long_tx_service/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(public)
+add_subdirectory(ut)
add_library(core-tx-long_tx_service)
target_compile_options(core-tx-long_tx_service PRIVATE
diff --git a/ydb/core/tx/long_tx_service/long_tx_service_ut.cpp b/ydb/core/tx/long_tx_service/long_tx_service_ut.cpp
index b8826fb8ae..6739187183 100644
--- a/ydb/core/tx/long_tx_service/long_tx_service_ut.cpp
+++ b/ydb/core/tx/long_tx_service/long_tx_service_ut.cpp
@@ -64,7 +64,7 @@ Y_UNIT_TEST_SUITE(LongTxService) {
for (ui32 nodeIndex = 0; nodeIndex < runtime.GetNodeCount(); ++nodeIndex) {
auto cacheConfig = MakeIntrusive<NSchemeCache::TSchemeCacheConfig>();
cacheConfig->Roots.emplace_back(1, SCHEME_SHARD1_ID, root);
- cacheConfig->Counters = new NMonitoring::TDynamicCounters();
+ cacheConfig->Counters = new ::NMonitoring::TDynamicCounters();
IActor* schemeCache = CreateSchemeBoardSchemeCache(cacheConfig.Get());
TActorId schemeCacheId = runtime.Register(schemeCache, nodeIndex);
diff --git a/ydb/core/tx/long_tx_service/public/CMakeLists.txt b/ydb/core/tx/long_tx_service/public/CMakeLists.txt
index f5fe906228..01668d86a2 100644
--- a/ydb/core/tx/long_tx_service/public/CMakeLists.txt
+++ b/ydb/core/tx/long_tx_service/public/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(tx-long_tx_service-public)
target_compile_options(tx-long_tx_service-public PRIVATE
diff --git a/ydb/core/tx/long_tx_service/public/ut/CMakeLists.txt b/ydb/core/tx/long_tx_service/public/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/long_tx_service/public/ut/CMakeLists.txt
+++ b/ydb/core/tx/long_tx_service/public/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/long_tx_service/ut/CMakeLists.txt b/ydb/core/tx/long_tx_service/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/long_tx_service/ut/CMakeLists.txt
+++ b/ydb/core/tx/long_tx_service/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/mediator/tablet_queue.cpp b/ydb/core/tx/mediator/tablet_queue.cpp
index 111518714a..3878119294 100644
--- a/ydb/core/tx/mediator/tablet_queue.cpp
+++ b/ydb/core/tx/mediator/tablet_queue.cpp
@@ -77,7 +77,7 @@ class TTxMediatorTabletQueue : public TActor<TTxMediatorTabletQueue> {
TStepEntry *ActiveStep;
THashSet<TActorId> TimecastWatches;
- NMonitoring::TDynamicCounters::TCounterPtr TimecastLagCounter;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TimecastLagCounter;
void SendToTablet(TTabletEntry::TStep *tabletStep, ui64 tablet, const TActorContext &ctx) {
auto evx = new TEvTxProcessing::TEvPlanStep(tabletStep->StepRef->Step, Mediator, tablet);
diff --git a/ydb/core/tx/replication/CMakeLists.txt b/ydb/core/tx/replication/CMakeLists.txt
new file mode 100644
index 0000000000..710a6a0c66
--- /dev/null
+++ b/ydb/core/tx/replication/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(controller)
+add_subdirectory(ydb_proxy)
diff --git a/ydb/core/tx/replication/controller/dst_creator.cpp b/ydb/core/tx/replication/controller/dst_creator.cpp
index 3095dee857..b9c79f46ac 100644
--- a/ydb/core/tx/replication/controller/dst_creator.cpp
+++ b/ydb/core/tx/replication/controller/dst_creator.cpp
@@ -57,9 +57,10 @@ class TDstCreator: public TActorBootstrapped<TDstCreator> {
Ydb::Table::CreateTableRequest scheme;
result.GetTableDescription().SerializeTo(scheme);
+ TTableProfiles profiles; // TODO: load
Ydb::StatusIds::StatusCode status;
TString error;
- if (!FillTableDescription(TxBody, scheme, status, error)) {
+ if (!FillTableDescription(TxBody, scheme, profiles, status, error)) {
return Error(NKikimrScheme::StatusSchemeError, error);
}
diff --git a/ydb/core/tx/replication/ydb_proxy/CMakeLists.txt b/ydb/core/tx/replication/ydb_proxy/CMakeLists.txt
index 247e407d68..9e3fc2864a 100644
--- a/ydb/core/tx/replication/ydb_proxy/CMakeLists.txt
+++ b/ydb/core/tx/replication/ydb_proxy/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(tx-replication-ydb_proxy)
target_compile_options(tx-replication-ydb_proxy PRIVATE
diff --git a/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.txt b/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.txt
+++ b/ydb/core/tx/replication/ydb_proxy/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/scheme_board/CMakeLists.txt b/ydb/core/tx/scheme_board/CMakeLists.txt
index 77a906440f..a5671f3049 100644
--- a/ydb/core/tx/scheme_board/CMakeLists.txt
+++ b/ydb/core/tx/scheme_board/CMakeLists.txt
@@ -6,6 +6,12 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut_cache)
+add_subdirectory(ut_double_indexed)
+add_subdirectory(ut_monitoring)
+add_subdirectory(ut_populator)
+add_subdirectory(ut_replica)
+add_subdirectory(ut_subscriber)
add_library(core-tx-scheme_board)
target_link_libraries(core-tx-scheme_board PUBLIC
diff --git a/ydb/core/tx/scheme_board/cache.cpp b/ydb/core/tx/scheme_board/cache.cpp
index f2169e07b8..5eec5b9e11 100644
--- a/ydb/core/tx/scheme_board/cache.cpp
+++ b/ydb/core/tx/scheme_board/cache.cpp
@@ -542,7 +542,7 @@ namespace {
class TSchemeCache: public TMonitorableActor<TSchemeCache> {
class TCounters {
- using TCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
using THistogramPtr = NMonitoring::THistogramPtr;
TCounterPtr InFlight;
@@ -557,7 +557,7 @@ class TSchemeCache: public TMonitorableActor<TSchemeCache> {
TCounterPtr PerEntrySyncs;
public:
- explicit TCounters(NMonitoring::TDynamicCounterPtr counters)
+ explicit TCounters(::NMonitoring::TDynamicCounterPtr counters)
: InFlight(counters->GetCounter("InFlight", false))
, Requests(counters->GetCounter("Requests", true))
, Hits(counters->GetCounter("Hits", true))
diff --git a/ydb/core/tx/scheme_board/cache_ut.cpp b/ydb/core/tx/scheme_board/cache_ut.cpp
index 8630e45981..67bc8b04b2 100644
--- a/ydb/core/tx/scheme_board/cache_ut.cpp
+++ b/ydb/core/tx/scheme_board/cache_ut.cpp
@@ -26,7 +26,7 @@ public:
TTestWithSchemeshard::SetUp();
TIntrusivePtr<TConfig> config = new TConfig();
- config->Counters = new NMonitoring::TDynamicCounters;
+ config->Counters = new ::NMonitoring::TDynamicCounters;
config->Roots.push_back(TConfig::TTagEntry(0, TTestTxConfig::SchemeShard, "Root"));
SchemeCache = Context->Register(CreateSchemeBoardSchemeCache(config.Get()));
Context->EnableScheduleForActor(SchemeCache, true);
diff --git a/ydb/core/tx/scheme_board/load_test.cpp b/ydb/core/tx/scheme_board/load_test.cpp
index d993f1e5ed..5522df8506 100644
--- a/ydb/core/tx/scheme_board/load_test.cpp
+++ b/ydb/core/tx/scheme_board/load_test.cpp
@@ -309,11 +309,11 @@ public:
private:
const ui64 Owner;
const TTestConfig Config;
- NMonitoring::TDynamicCounters::TCounterPtr SyncDuration;
- NMonitoring::TDynamicCounters::TCounterPtr TotalPaths;
- NMonitoring::TDynamicCounters::TCounterPtr ModifiedPaths;
- NMonitoring::TDynamicCounters::TCounterPtr CreatedPaths;
- NMonitoring::TDynamicCounters::TCounterPtr DeletedPaths;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SyncDuration;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TotalPaths;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ModifiedPaths;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CreatedPaths;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DeletedPaths;
TDescriptions Descriptions;
ui64 NextPathId;
@@ -404,7 +404,7 @@ private:
const TTestConfig Config;
NMonitoring::THistogramPtr Latency;
NMonitoring::THistogramPtr LatencyDir;
- NMonitoring::TDynamicCounters::TCounterPtr SubscribersCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SubscribersCount;
ui64 MaxPathId;
TVector<TActorId> Subscribers;
diff --git a/ydb/core/tx/scheme_board/load_test.h b/ydb/core/tx/scheme_board/load_test.h
index 271e96bf3f..c0bc15bdd1 100644
--- a/ydb/core/tx/scheme_board/load_test.h
+++ b/ydb/core/tx/scheme_board/load_test.h
@@ -8,7 +8,7 @@ namespace NKikimr {
namespace NSchemeBoard {
struct TTestConfig {
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
ui64 Dirs;
ui64 ObjectsPerDir;
@@ -18,7 +18,7 @@ struct TTestConfig {
// creations/deletions
ui32 InFlightChanges;
- explicit TTestConfig(NMonitoring::TDynamicCounterPtr counters)
+ explicit TTestConfig(::NMonitoring::TDynamicCounterPtr counters)
: Counters(counters)
, Dirs(10)
, ObjectsPerDir(10000)
diff --git a/ydb/core/tx/scheme_board/monitoring.cpp b/ydb/core/tx/scheme_board/monitoring.cpp
index deda604655..7173826b9e 100644
--- a/ydb/core/tx/scheme_board/monitoring.cpp
+++ b/ydb/core/tx/scheme_board/monitoring.cpp
@@ -297,7 +297,7 @@ class TMonitoring: public TActorBootstrapped<TMonitoring> {
static void Header(IOutputStream& str, const T& title, const U& subTitile) {
HTML(str) {
DIV_CLASS("page-header") {
- H3() {
+ TAG(TH3) {
str << title;
if (subTitile) {
SMALL() { str << " " << subTitile; }
diff --git a/ydb/core/tx/scheme_board/ut_cache/CMakeLists.txt b/ydb/core/tx/scheme_board/ut_cache/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/scheme_board/ut_cache/CMakeLists.txt
+++ b/ydb/core/tx/scheme_board/ut_cache/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/scheme_board/ut_double_indexed/CMakeLists.txt b/ydb/core/tx/scheme_board/ut_double_indexed/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/scheme_board/ut_double_indexed/CMakeLists.txt
+++ b/ydb/core/tx/scheme_board/ut_double_indexed/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.txt b/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.txt
+++ b/ydb/core/tx/scheme_board/ut_monitoring/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/scheme_board/ut_populator/CMakeLists.txt b/ydb/core/tx/scheme_board/ut_populator/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/scheme_board/ut_populator/CMakeLists.txt
+++ b/ydb/core/tx/scheme_board/ut_populator/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/scheme_board/ut_replica/CMakeLists.txt b/ydb/core/tx/scheme_board/ut_replica/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/scheme_board/ut_replica/CMakeLists.txt
+++ b/ydb/core/tx/scheme_board/ut_replica/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.txt b/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.txt
+++ b/ydb/core/tx/scheme_board/ut_subscriber/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/scheme_cache/scheme_cache.cpp b/ydb/core/tx/scheme_cache/scheme_cache.cpp
index 1024d73c19..cb861640d5 100644
--- a/ydb/core/tx/scheme_cache/scheme_cache.cpp
+++ b/ydb/core/tx/scheme_cache/scheme_cache.cpp
@@ -7,7 +7,7 @@
namespace NKikimr {
namespace NSchemeCache {
-TSchemeCacheConfig::TSchemeCacheConfig(const TAppData* appData, NMonitoring::TDynamicCounterPtr counters)
+TSchemeCacheConfig::TSchemeCacheConfig(const TAppData* appData, ::NMonitoring::TDynamicCounterPtr counters)
: Counters(counters)
{
Y_VERIFY(appData);
diff --git a/ydb/core/tx/scheme_cache/scheme_cache.h b/ydb/core/tx/scheme_cache/scheme_cache.h
index 47d64574d5..4786dd0887 100644
--- a/ydb/core/tx/scheme_cache/scheme_cache.h
+++ b/ydb/core/tx/scheme_cache/scheme_cache.h
@@ -34,10 +34,10 @@ struct TSchemeCacheConfig : public TThrRefBase {
};
TSchemeCacheConfig() = default;
- explicit TSchemeCacheConfig(const TAppData* appData, NMonitoring::TDynamicCounterPtr counters);
+ explicit TSchemeCacheConfig(const TAppData* appData, ::NMonitoring::TDynamicCounterPtr counters);
TVector<TTagEntry> Roots;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
};
struct TDomainInfo : public TAtomicRefCount<TDomainInfo> {
@@ -73,6 +73,10 @@ struct TDomainInfo : public TAtomicRefCount<TDomainInfo> {
}
}
+ inline bool IsServerless() const {
+ return DomainKey != ResourcesDomainKey;
+ }
+
TPathId DomainKey;
TPathId ResourcesDomainKey;
NKikimrSubDomains::TProcessingParams Params;
diff --git a/ydb/core/tx/schemeshard/CMakeLists.txt b/ydb/core/tx/schemeshard/CMakeLists.txt
index 480e801ccb..4809937eb2 100644
--- a/ydb/core/tx/schemeshard/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/CMakeLists.txt
@@ -6,6 +6,48 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut_async_index)
+add_subdirectory(ut_backup)
+add_subdirectory(ut_base)
+add_subdirectory(ut_base_reboots)
+add_subdirectory(ut_bsvolume)
+add_subdirectory(ut_bsvolume_reboots)
+add_subdirectory(ut_cdc_stream)
+add_subdirectory(ut_cdc_stream_reboots)
+add_subdirectory(ut_compaction)
+add_subdirectory(ut_export)
+add_subdirectory(ut_export_reboots_s3)
+add_subdirectory(ut_extsubdomain)
+add_subdirectory(ut_extsubdomain_reboots)
+add_subdirectory(ut_filestore_reboots)
+add_subdirectory(ut_helpers)
+add_subdirectory(ut_index_build)
+add_subdirectory(ut_index_build_reboots)
+add_subdirectory(ut_login)
+add_subdirectory(ut_move)
+add_subdirectory(ut_move_reboots)
+add_subdirectory(ut_olap)
+add_subdirectory(ut_olap_reboots)
+add_subdirectory(ut_pq)
+add_subdirectory(ut_pq_reboots)
+add_subdirectory(ut_reboots)
+add_subdirectory(ut_replication)
+add_subdirectory(ut_replication_reboots)
+add_subdirectory(ut_restore)
+add_subdirectory(ut_rtmr)
+add_subdirectory(ut_rtmr_reboots)
+add_subdirectory(ut_ru_calculator)
+add_subdirectory(ut_sequence)
+add_subdirectory(ut_sequence_reboots)
+add_subdirectory(ut_serverless)
+add_subdirectory(ut_split_merge)
+add_subdirectory(ut_split_merge_reboots)
+add_subdirectory(ut_stats)
+add_subdirectory(ut_subdomain)
+add_subdirectory(ut_subdomain_reboots)
+add_subdirectory(ut_ttl)
+add_subdirectory(ut_user_attributes)
+add_subdirectory(ut_user_attributes_reboots)
add_library(core-tx-schemeshard)
target_compile_options(core-tx-schemeshard PRIVATE
@@ -150,6 +192,7 @@ target_sources(core-tx-schemeshard PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard__upgrade_schema.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard__upgrade_access_database.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard__make_access_database_no_inheritable.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_impl.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_billing_helpers.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_domain_links.cpp
@@ -157,6 +200,7 @@ target_sources(core-tx-schemeshard PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_identificators.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_info_types.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_path_describer.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_path_element.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_path.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_types.cpp
${CMAKE_SOURCE_DIR}/ydb/core/tx/schemeshard/schemeshard_ui64id.cpp
diff --git a/ydb/core/tx/schemeshard/schemeshard__init.cpp b/ydb/core/tx/schemeshard/schemeshard__init.cpp
index 4622e908fd..2f478464b3 100644
--- a/ydb/core/tx/schemeshard/schemeshard__init.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__init.cpp
@@ -18,6 +18,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
TDeque<TPathId> BlockStoreVolumesToClean;
TVector<ui64> ExportsToResume;
TVector<ui64> ImportsToResume;
+ bool Broken = false;
explicit TTxInit(TSelf *self)
: TBase(self)
@@ -188,6 +189,16 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
TString name = rows.GetValue<Schema::Paths::Name>();
+ if (pathId.LocalPathId == 0) {
+ // Skip special incompatibility marker
+ Y_VERIFY_S(parentPathId.LocalPathId == 0 && name == "/incompatible/",
+ "Unexpected row PathId# " << pathId << " ParentPathId# " << parentPathId << " Name# " << name);
+ if (!rows.Next()) {
+ return false;
+ }
+ continue;
+ }
+
TPathElement::EPathType pathType = (TPathElement::EPathType)rows.GetValue<Schema::Paths::PathType>();
TStepId stepCreated = rows.GetValueOrDefault<Schema::Paths::StepCreated>(InvalidStepId);
@@ -560,6 +571,9 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
}
}
+ // We need to sort partitions by PathId/PartitionId due to incompatible change 1
+ std::sort(partitionsRows.begin(), partitionsRows.end());
+
return true;
}
@@ -1281,6 +1295,17 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
return false;\
}
+ RETURN_IF_NO_PRECHARGED(Self->ReadSysValue(db, Schema::SysParam_MaxIncompatibleChange, Self->MaxIncompatibleChange));
+ if (Self->MaxIncompatibleChange > Schema::MaxIncompatibleChangeSupported) {
+ LOG_ERROR_S(ctx, NKikimrServices::FLAT_TX_SCHEMESHARD,
+ "TTxInit, unsupported changes detected: MaxIncompatibleChange = " << Self->MaxIncompatibleChange <<
+ ", MaxIncompatibleChangeSupported = " << Schema::MaxIncompatibleChangeSupported <<
+ ", restarting!");
+ Self->BreakTabletAndRestart(ctx);
+ Broken = true;
+ return true;
+ }
+
{
ui64 initStateVal = (ui64)TTenantInitState::InvalidState;
RETURN_IF_NO_PRECHARGED(Self->ReadSysValue(db, Schema::SysParam_TenantInitState, initStateVal, (ui64)TTenantInitState::InvalidState));
@@ -3680,7 +3705,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
path->IncShardsInside();
auto domainInfo = Self->ResolveDomainInfo(pathId); //domain should't be dropeed?
- domainInfo->AddInternalShard(shardIdx);
+ domainInfo->AddInternalShard(shardIdx, Self->IsBackupTable(pathId));
switch (si.second.TabletType) {
case ETabletType::DataShard:
@@ -3776,8 +3801,9 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
}
if (!path->IsRoot()) {
- parent->IncAliveChildren();
- inclusivedomainInfo->IncPathsInside();
+ const bool isBackupTable = Self->IsBackupTable(item.first);
+ parent->IncAliveChildren(1, isBackupTable);
+ inclusivedomainInfo->IncPathsInside(1, isBackupTable);
}
Self->TabletCounters->Simple()[COUNTER_USER_ATTRIBUTES_COUNT].Add(path->UserAttrs->Size());
@@ -4622,6 +4648,10 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
}
void Complete(const TActorContext &ctx) override {
+ if (Broken) {
+ return;
+ }
+
auto delayPublications = OnComplete.ExtractPublicationsToSchemeBoard(); //there no Populator exist jet
for (auto& [txId, pathIds] : Publications) {
std::move(pathIds.begin(), pathIds.end(), std::back_inserter(delayPublications[txId]));
diff --git a/ydb/core/tx/schemeshard/schemeshard__monitoring.cpp b/ydb/core/tx/schemeshard/schemeshard__monitoring.cpp
index a3acc0b271..6b0f1f7eb1 100644
--- a/ydb/core/tx/schemeshard/schemeshard__monitoring.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__monitoring.cpp
@@ -556,7 +556,7 @@ private:
void OutputMainPage(TStringStream& str) const {
HTML(str) {
- H3() {str << "SchemeShard main page:";}
+ TAG(TH3) {str << "SchemeShard main page:";}
{
str << "<legend>";
@@ -634,21 +634,21 @@ private:
{
str << "<legend>";
- H3() {str << "Transactions in flight:"; }
+ TAG(TH3) {str << "Transactions in flight:"; }
str << "</legend>";
TableTxInfly(str);
}
{
str << "<legend>";
- H3() {str << "Active Build Indexes in flight:"; }
+ TAG(TH3) {str << "Active Build Indexes in flight:"; }
str << "</legend>";
BuildIndexesInfly(str, /*forActive=*/ true);
}
{
str << "<legend>";
- H3() {str << "Finished Build Indexes:"; }
+ TAG(TH3) {str << "Finished Build Indexes:"; }
str << "</legend>";
BuildIndexesInfly(str, /*forActive=*/ false);
}
@@ -695,7 +695,7 @@ private:
void BuildIndexInfoPage(TIndexBuildId buildIndexId, TStringStream& str) const {
HTML(str) {
- H3() {str << "Build index id " << buildIndexId;}
+ TAG(TH3) {str << "Build index id " << buildIndexId;}
if (!Self->IndexBuilds.contains(buildIndexId)) {
PRE() {
@@ -705,7 +705,7 @@ private:
}
const TIndexBuildInfo::TPtr& info = Self->IndexBuilds.at(buildIndexId);
- H4() {str << "Fields";}
+ TAG(TH4) {str << "Fields";}
PRE () {
str << "BuildInfoId: " << info->Id << Endl
<< "Uid: " << info->Uid << Endl
@@ -769,7 +769,7 @@ private:
}
{
- H3() {str << "Shards : " << info->Shards.size() << "\n";}
+ TAG(TH3) {str << "Shards : " << info->Shards.size() << "\n";}
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
TABLER() {
@@ -875,7 +875,7 @@ private:
void OutputTxListPage(TStringStream& str) const {
HTML(str) {
- H3() {str << "Transactions in flight:";}
+ TAG(TH3) {str << "Transactions in flight:";}
TableTxInfly(str);
}
@@ -883,7 +883,7 @@ private:
void OutputTxInfoPage(TOperationId operationId, TStringStream& str) const {
HTML(str) {
- H3() {str << "Transaction " << operationId;}
+ TAG(TH3) {str << "Transaction " << operationId;}
auto txInfo = Self->FindTx(operationId);
if (!txInfo) {
@@ -892,7 +892,7 @@ private:
}
} else {
const TTxState txState = *txInfo;
- H3() {str << "Shards in progress : " << txState.ShardsInProgress.size() << "\n";}
+ TAG(TH3) {str << "Shards in progress : " << txState.ShardsInProgress.size() << "\n";}
TABLE_SORTABLE_CLASS("table") {
TABLEHEAD() {
TABLER() {
@@ -931,7 +931,7 @@ private:
void OutputShardInfo(TShardIdx shardIdx, TStringStream& str) const {
HTML(str) {
if (!Self->ShardInfos.contains(shardIdx)) {
- H4() {
+ TAG(TH4) {
str << "No shard item for shard " << shardIdx << "</a>";
}
return;
@@ -939,7 +939,7 @@ private:
const TShardInfo& shard = Self->ShardInfos.at(shardIdx);
- H4() {str << "Shard idx " << shardIdx << "</a>";}
+ TAG(TH4) {str << "Shard idx " << shardIdx << "</a>";}
PRE () {
str << "TabletID: " << shard.TabletID<< Endl
<< "CurrentTxId: " << shard.CurrentTxId << Endl
@@ -947,7 +947,7 @@ private:
<< "TabletType: " << TTabletTypes::TypeToStr(shard.TabletType) << Endl;
}
- H4() {str << "BindedChannels for shard idx " << shardIdx << "</a>";}
+ TAG(TH4) {str << "BindedChannels for shard idx " << shardIdx << "</a>";}
TABLE_SORTABLE_CLASS("BindedChannels") {
TABLEHEAD() {
TABLER() {
@@ -1001,7 +1001,7 @@ private:
void OutputPathInfo(TPathId pathId, TStringStream& str) const {
HTML(str) {
if (!Self->PathsById.contains(pathId)) {
- H4() {
+ TAG(TH4) {
str << "No path item for shard " << pathId << "</a>";
}
return;
@@ -1012,7 +1012,7 @@ private:
auto localACL = TSecurityObject(path->Owner, path->ACL, path->IsContainer());
auto effectiveACL = TSecurityObject(path->Owner, path->CachedEffectiveACL.GetForSelf(), path->IsContainer());
- H4() {str << "Path info " << pathId << "</a>";}
+ TAG(TH4) {str << "Path info " << pathId << "</a>";}
PRE () {
str << "Path: " << Self->PathToString(path) << Endl
<< "PathId: " << pathId << Endl
@@ -1040,7 +1040,7 @@ private:
}
if (path->UserAttrs->Attrs) {
- H4() {str << "UserAttrs for pathId " << pathId << "</a>";}
+ TAG(TH4) {str << "UserAttrs for pathId " << pathId << "</a>";}
TABLE_SORTABLE_CLASS("UserAttrs") {
TABLEHEAD() {
TABLER() {
@@ -1058,7 +1058,7 @@ private:
}
if (path->GetChildren().size()) {
- H4() {str << "Childrens for pathId " << pathId << "</a>";}
+ TAG(TH4) {str << "Childrens for pathId " << pathId << "</a>";}
TABLE_SORTABLE_CLASS("UserAttrs") {
TABLEHEAD() {
TABLER() {
@@ -1085,7 +1085,7 @@ private:
auto shards = Self->CollectAllShards({pathId});
- H4() {str << "Shards for pathId " << pathId << "</a>";}
+ TAG(TH4) {str << "Shards for pathId " << pathId << "</a>";}
TABLE_SORTABLE_CLASS("ShardForPath") {
TABLEHEAD() {
TABLER() {
@@ -1123,7 +1123,7 @@ private:
void OutputOperationPartInfo(TOperationId opId, TStringStream& str) const {
HTML(str) {
if (!Self->Operations.contains(opId.GetTxId())) {
- H4() {
+ TAG(TH4) {
str << "No operations for tx id " << opId << "</a>";
}
return;
@@ -1132,14 +1132,14 @@ private:
TOperation::TPtr operation = Self->Operations.at(opId.GetTxId());
if (ui64(opId.GetSubTxId()) >= operation->Parts.size()) {
- H4() {
+ TAG(TH4) {
str << "No part operations for operation id " << opId << "</a>";
}
return;
}
if (!Self->TxInFlight.contains(opId)) {
- H4() {
+ TAG(TH4) {
str << "No txInfly record for operation id " << opId << "</a>";
}
return;
@@ -1148,7 +1148,7 @@ private:
const TTxState& txState = Self->TxInFlight.at(opId);
- H4() {str << "TxState info " << opId << "</a>";}
+ TAG(TH4) {str << "TxState info " << opId << "</a>";}
PRE () {
str << "TxType: " << TTxState::TypeName(txState.TxType) << Endl
<< "TargetPathId: " << LinkToPathInfo(txState.TargetPathId) << Endl
@@ -1168,7 +1168,7 @@ private:
<< "Wait operations count: " << operation->WaitOperations.size() << Endl;
}
- H4() {str << "Dependent operations for txId " << opId.GetTxId() << "</a>";}
+ TAG(TH4) {str << "Dependent operations for txId " << opId.GetTxId() << "</a>";}
TABLE_SORTABLE_CLASS("DependentTxId") {
TABLEHEAD() {
TABLER() {
@@ -1182,7 +1182,7 @@ private:
}
}
- H4() {str << "Wait operations for txId " << opId.GetTxId() << "</a>";}
+ TAG(TH4) {str << "Wait operations for txId " << opId.GetTxId() << "</a>";}
TABLE_SORTABLE_CLASS("WaitTxId") {
TABLEHEAD() {
TABLER() {
@@ -1197,7 +1197,7 @@ private:
}
- H4() {str << "Shards for opId " << opId << "</a>";}
+ TAG(TH4) {str << "Shards for opId " << opId << "</a>";}
TABLE_SORTABLE_CLASS("Shards") {
TABLEHEAD() {
TABLER() {
@@ -1220,7 +1220,7 @@ private:
}
}
- H4() {str << "Shards in progress for opId " << opId << "</a>";}
+ TAG(TH4) {str << "Shards in progress for opId " << opId << "</a>";}
TABLE_SORTABLE_CLASS("Shards") {
TABLEHEAD() {
TABLER() {
@@ -1237,7 +1237,7 @@ private:
}
}
- H4() {str << "SchemeChangeNotificationReceived for opId " << opId << "</a>";}
+ TAG(TH4) {str << "SchemeChangeNotificationReceived for opId " << opId << "</a>";}
TABLE_SORTABLE_CLASS("SchemeChangeNotificationReceived") {
TABLEHEAD() {
TABLER() {
@@ -1254,7 +1254,7 @@ private:
}
}
- H4() {str << "ShardStatuses for opId " << opId << "</a>";}
+ TAG(TH4) {str << "ShardStatuses for opId " << opId << "</a>";}
TABLE_SORTABLE_CLASS("ShardStatuses") {
TABLEHEAD() {
TABLER() {
@@ -1284,7 +1284,7 @@ private:
void OutputOperationInfo(TTxId txId, TStringStream& str) const {
HTML(str) {
if (!Self->Operations.contains(txId)) {
- H4() {
+ TAG(TH4) {
str << "No operations for tx id " << txId << "</a>";
}
return;
@@ -1300,7 +1300,7 @@ private:
void OutputPathInfoPage(TPathId pathId, TStringStream& str) {
HTML(str) {
if (!Self->PathsById.contains(pathId)) {
- H4() {
+ TAG(TH4) {
str << "No path item for tablet " << pathId << "</a>";
}
return;
@@ -1320,7 +1320,7 @@ private:
void OutputShardInfoPageByShardIdx(TShardIdx shardIdx, TStringStream& str) const {
HTML(str) {
if (!Self->ShardInfos.contains(shardIdx)) {
- H4() {
+ TAG(TH4) {
str << "No shard info for shard idx " << shardIdx;
}
return;
@@ -1331,7 +1331,7 @@ private:
const TShardInfo& shard = Self->ShardInfos[shardIdx];
if (!Self->PathsById.contains(shard.PathId)) {
- H4() {
+ TAG(TH4) {
str << "No path item path id " << shard.PathId;
}
return;
@@ -1348,7 +1348,7 @@ private:
void OutputShardInfoPageByShardID(TTabletId tabletId, TStringStream& str) const {
HTML(str) {
if (!Self->TabletIdToShardIdx.contains(tabletId)) {
- H4() {
+ TAG(TH4) {
str << "No shard info for shard ID "
<< "<a href='../tablets?TabletID=" << tabletId << "'>" << tabletId << "</a>";
}
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation.cpp b/ydb/core/tx/schemeshard/schemeshard__operation.cpp
index 517e7f3eb0..4180c031fa 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation.cpp
@@ -1,9 +1,12 @@
#include "schemeshard__operation.h"
+#include "schemeshard__operation_part.h"
#include "schemeshard__operation_side_effects.h"
#include "schemeshard__operation_memory_changes.h"
#include "schemeshard__operation_db_changes.h"
+#include "schemeshard_audit_log_fragment.h"
+
#include "schemeshard_impl.h"
#include <ydb/core/tablet/tablet_exception.h>
@@ -68,6 +71,33 @@ NKikimrScheme::TEvModifySchemeTransaction GetRecordForPrint(const NKikimrScheme:
return recordForPrint;
}
+TString GetAuditLogEntry(const TTxId& txId, const THolder<TProposeResponse>& response, TOperationContext& context) {
+ auto auditLog = TStringBuilder();
+
+ auditLog << "txId: " << txId;
+ for (const auto& frag: context.AuditLogFragments) {
+ auditLog << ", ";
+ auditLog << frag.ToString();
+ }
+
+ auto fragPath = TPath::Resolve(context.AuditLogFragments.front().GetAnyPath(), context.SS);
+ if (!fragPath.IsResolved()) {
+ fragPath.RiseUntilFirstResolvedParent();
+ }
+ if (!fragPath.IsEmpty()) {
+ auditLog << ", database: " << fragPath.GetDomainPathString();
+ }
+
+ auditLog << ", subject: " << context.GetSubject();
+
+ auditLog << ", status: " << NKikimrScheme::EStatus_Name(response->Record.GetStatus());
+ if (response->Record.HasReason()) {
+ auditLog << ", reason: " << response->Record.GetReason();
+ }
+
+ return auditLog;
+}
+
THolder<TProposeResponse> TSchemeShard::IgniteOperation(TProposeRequest& request, TOperationContext& context) {
THolder<TProposeResponse> response = nullptr;
@@ -85,7 +115,7 @@ THolder<TProposeResponse> TSchemeShard::IgniteOperation(TProposeRequest& request
}
TOperation::TPtr operation = new TOperation(txId);
- Operations[operation->GetTxId()] = operation; //record is erased at ApplyOnExecute if all parts are done at propose
+ Operations[txId] = operation; //record is erased at ApplyOnExecute if all parts are done at propose
if (record.GetUserToken()) {
NACLibProto::TUserToken tokenPb;
@@ -100,12 +130,18 @@ THolder<TProposeResponse> TSchemeShard::IgniteOperation(TProposeRequest& request
}
for (const auto& transaction: record.GetTransaction()) {
+ context.AddAuditLogFragment(transaction);
+ }
+
+ for (const auto& transaction: record.GetTransaction()) {
auto quotaResult = operation->ConsumeQuota(transaction, context);
if (quotaResult.Status != NKikimrScheme::StatusSuccess) {
response.Reset(new TEvSchemeShard::TEvModifySchemeTransactionResult(
quotaResult.Status, ui64(txId), ui64(selfId)));
response->SetError(quotaResult.Status, quotaResult.Reason);
- Operations.erase(operation->GetTxId());
+ Operations.erase(txId);
+
+ LOG_NOTICE_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "AUDIT: " << GetAuditLogEntry(txId, response, context));
return std::move(response);
}
}
@@ -126,16 +162,20 @@ THolder<TProposeResponse> TSchemeShard::IgniteOperation(TProposeRequest& request
response.Reset(new TEvSchemeShard::TEvModifySchemeTransactionResult(
splitResult.Status, ui64(txId), ui64(selfId)));
response->SetError(splitResult.Status, splitResult.Reason);
- Operations.erase(operation->GetTxId());
+ Operations.erase(txId);
+
+ LOG_NOTICE_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "AUDIT: " << GetAuditLogEntry(txId, response, context));
return std::move(response);
}
transactions.insert(transactions.end(), splitResult.Transactions.begin(), splitResult.Transactions.end());
}
+ const TString owner = record.HasOwner() ? record.GetOwner() : BUILTIN_ACL_ROOT;
+ context.ClearAuditLogFragments();
+
//for all tx in transactions
for (const auto& transaction: transactions) {
- const TOperationId pathOpId = TOperationId(txId, operation->Parts.size());
TVector<ISubOperationBase::TPtr> parts = operation->ConstructParts(transaction, context);
if (parts.size() > 1) {
@@ -143,15 +183,17 @@ THolder<TProposeResponse> TSchemeShard::IgniteOperation(TProposeRequest& request
context.IsAllowedPrivateTables = true;
}
- const TString owner = record.HasOwner() ? record.GetOwner() : BUILTIN_ACL_ROOT;
+ context.AddAuditLogFragment(transaction);
for (auto& part: parts) {
+ const TOperationId pathOpId = operation->NextPartId();
+
response = part->Propose(owner, context);
Y_VERIFY(response);
LOG_NOTICE_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD,
"IgniteOperation"
- << ", opId: " << pathOpId
+ << ", opId: " << operation->NextPartId()
<< ", propose status:" << NKikimrScheme::EStatus_Name(response->Record.GetStatus())
<< ", reason: " << response->Record.GetReason()
<< ", at schemeshard: " << selfId);
@@ -199,12 +241,15 @@ THolder<TProposeResponse> TSchemeShard::IgniteOperation(TProposeRequest& request
context.MemChanges.UnDo(context.SS);
context.OnComplete.ApplyOnExecute(context.SS, context.GetTxc(), context.Ctx);
- Operations.erase(operation->GetTxId());
+ Operations.erase(txId);
+
+ LOG_NOTICE_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "AUDIT: " << GetAuditLogEntry(txId, response, context));
return std::move(response);
}
}
}
+ LOG_NOTICE_S(context.Ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "AUDIT: " << GetAuditLogEntry(txId, response, context));
return std::move(response);
}
@@ -1121,7 +1166,7 @@ TVector<ISubOperationBase::TPtr> TOperation::ConstructParts(const TTxTransaction
switch (opType) {
case NKikimrSchemeOp::EOperationType::ESchemeOpCreateTable:
if (tx.GetCreateTable().HasCopyFromTable()) {
- return {CreateCopyTable(NextPartId(), tx, context)}; // Copy indexes table as well as common table
+ return CreateCopyTable(NextPartId(), tx, context); // Copy indexes table as well as common table
}
return {ConstructPart(opType, tx)};
case NKikimrSchemeOp::EOperationType::ESchemeOpCreateIndexedTable:
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation.h b/ydb/core/tx/schemeshard/schemeshard__operation.h
index 5d19d8edbd..ea66e3c5c8 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation.h
+++ b/ydb/core/tx/schemeshard/schemeshard__operation.h
@@ -132,7 +132,6 @@ struct TOperation: TSimpleRefCount<TOperation> {
Y_VERIFY(Barriers.begin()->first == name);
Barriers.erase(name);
}
-private:
TOperationId NextPartId() { return TOperationId(TxId, TSubTxId(Parts.size())); }
};
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_alter_pq.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_alter_pq.cpp
index da870c9a5b..92a172e5a2 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_alter_pq.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_alter_pq.cpp
@@ -456,6 +456,7 @@ public:
newTabletConfig = tabletConfig;
TPersQueueGroupInfo::TPtr alterData = ParseParams(context, &newTabletConfig, alter, errStr);
+
if (!alterData) {
result->SetError(NKikimrScheme::StatusInvalidParameter, errStr);
return result;
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_alter_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_alter_table.cpp
index fec8cb34e6..184bae1a02 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_alter_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_alter_table.cpp
@@ -87,6 +87,11 @@ TTableInfo::TAlterDataPtr ParseParams(const TPath& path, TTableInfo::TPtr table,
// Ignore column ids if they were passed by user!
for (auto& col : *copyAlter.MutableColumns()) {
+ if (col.GetNotNull()) {
+ errStr = Sprintf("Not null columns is not supported for alter command");
+ status = NKikimrScheme::StatusInvalidParameter;
+ return nullptr;
+ }
col.ClearId();
}
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_copy_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_copy_table.cpp
index 5e6612a946..32e43af1c7 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_copy_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_copy_table.cpp
@@ -398,6 +398,9 @@ public:
const ui32 maxShardsToCreate = srcPath.Shards();
const TString acl = Transaction.GetModifyACL().GetDiffACL();
+ auto schema = Transaction.GetCreateTable();
+ const bool isBackup = schema.GetIsBackup();
+
TPath dstPath = parent.Child(name);
{
TPath::TChecker checks = dstPath.Check();
@@ -420,13 +423,17 @@ public:
checks
.IsValidLeafName()
.IsTheSameDomain(srcPath)
- .PathsLimit()
- .DirChildrenLimit()
- .ShardsLimit(maxShardsToCreate)
.PathShardsLimit(maxShardsToCreate)
.IsValidACL(acl);
}
+ if (checks && !isBackup) {
+ checks
+ .PathsLimit()
+ .DirChildrenLimit()
+ .ShardsLimit(maxShardsToCreate);
+ }
+
if (!checks) {
TString explain = TStringBuilder() << "path fail checks"
<< ", path: " << dstPath.PathString();
@@ -479,9 +486,7 @@ public:
}
}
- auto schema = Transaction.GetCreateTable();
const bool omitFollowers = schema.GetOmitFollowers();
- const bool isBackup = schema.GetIsBackup();
PrepareScheme(&schema, name, srcTableInfo, context);
schema.SetIsBackup(isBackup);
@@ -629,10 +634,10 @@ public:
const ui32 shardsToCreate = tableInfo->GetPartitions().size();
Y_VERIFY_S(shardsToCreate <= maxShardsToCreate, "shardsToCreate: " << shardsToCreate << " maxShardsToCreate: " << maxShardsToCreate);
- dstPath.DomainInfo()->IncPathsInside();
- dstPath.DomainInfo()->AddInternalShards(txState);
+ dstPath.DomainInfo()->IncPathsInside(1, isBackup);
+ dstPath.DomainInfo()->AddInternalShards(txState, isBackup);
dstPath.Base()->IncShardsInside(shardsToCreate);
- parent.Base()->IncAliveChildren();
+ parent.Base()->IncAliveChildren(1, isBackup);
State = NextState();
SetState(SelectStateFunc(State));
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_build_index.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_build_index.cpp
index 2d957165c6..417fc98806 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_create_build_index.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_build_index.cpp
@@ -62,7 +62,7 @@ TVector<ISubOperationBase::TPtr> CreateBuildIndex(TOperationId nextId, const TTx
TString explain;
if (!NTableIndex::IsCompatibleIndex(baseTableColumns, indexKeys, explain)) {
- return {CreateReject(nextId, NKikimrScheme::EStatus::StatusInvalidParameter, explain)};
+ return {CreateReject(nextId, NKikimrScheme::EStatus::StatusInvalidParameter, explain)};
}
NTableIndex::TTableColumns impTableColumns = NTableIndex::CalcTableImplDescription(baseTableColumns, indexKeys);
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp
index 49d5747c94..66c0d04141 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_cdc_stream.cpp
@@ -267,8 +267,9 @@ public:
return result;
}
- void AbortPropose(TOperationContext&) override {
- Y_FAIL("no AbortPropose for TNewCdcStream");
+ void AbortPropose(TOperationContext& context) override {
+ LOG_N("TNewCdcStream AbortPropose"
+ << ": opId# " << OperationId);
}
void AbortUnsafe(TTxId txId, TOperationContext& context) override {
@@ -450,6 +451,10 @@ public:
return result;
}
+ auto guard = context.DbGuard();
+ context.MemChanges.GrabPath(context.SS, tablePath.Base()->PathId);
+ context.MemChanges.GrabNewTxState(context.SS, OperationId);
+
context.DbChanges.PersistTxState(OperationId);
Y_VERIFY(context.SS->Tables.contains(tablePath.Base()->PathId));
@@ -477,8 +482,9 @@ public:
return result;
}
- void AbortPropose(TOperationContext&) override {
- Y_FAIL("no AbortPropose for TNewCdcStreamAtTable");
+ void AbortPropose(TOperationContext& context) override {
+ LOG_N("TNewCdcStreamAtTable AbortPropose"
+ << ": opId# " << OperationId);
}
void AbortUnsafe(TTxId txId, TOperationContext& context) override {
@@ -592,13 +598,6 @@ TVector<ISubOperationBase::TPtr> CreateNewCdcStream(TOperationId opId, const TTx
<< "Invalid stream mode: " << static_cast<ui32>(streamDesc.GetMode()))};
}
- const auto retentionPeriod = TDuration::Seconds(op.GetRetentionPeriodSeconds());
- if (retentionPeriod.Seconds() > TSchemeShard::MaxPQLifetimeSeconds) {
- return {CreateReject(opId, NKikimrScheme::StatusInvalidParameter, TStringBuilder()
- << "Invalid retention period specified: " << retentionPeriod.Seconds()
- << ", limit: " << TSchemeShard::MaxPQLifetimeSeconds)};
- }
-
const ui64 aliveStreams = context.SS->GetAliveChildren(tablePath.Base(), NKikimrSchemeOp::EPathTypeCdcStream);
if (aliveStreams + 1 > tablePath.DomainInfo()->GetSchemeLimits().MaxTableCdcStreams) {
return {CreateReject(opId, NKikimrScheme::EStatus::StatusResourceExhausted, TStringBuilder()
@@ -607,6 +606,11 @@ TVector<ISubOperationBase::TPtr> CreateNewCdcStream(TOperationId opId, const TTx
<< ", intention to create new children: " << aliveStreams + 1)};
}
+ if (!AppData()->PQConfig.GetEnableProtoSourceIdInfo()) {
+ return {CreateReject(opId, NKikimrScheme::EStatus::StatusPreconditionFailed, TStringBuilder()
+ << "Changefeeds require proto source id info to be enabled")};
+ }
+
TString errStr;
if (!context.SS->CheckApplyIf(tx, errStr)) {
return {CreateReject(opId, NKikimrScheme::StatusPreconditionFailed, errStr)};
@@ -650,8 +654,12 @@ TVector<ISubOperationBase::TPtr> CreateNewCdcStream(TOperationId opId, const TTx
auto& pqConfig = *desc.MutablePQTabletConfig();
pqConfig.SetTopicName(streamName);
pqConfig.SetTopicPath(streamPath.Child("streamImpl").PathString());
+ pqConfig.SetMeteringMode(NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS);
+
auto& partitionConfig = *pqConfig.MutablePartitionConfig();
- partitionConfig.SetLifetimeSeconds(retentionPeriod.Seconds());
+ partitionConfig.SetLifetimeSeconds(op.GetRetentionPeriodSeconds());
+ partitionConfig.SetWriteSpeedInBytesPerSecond(1_MB); // TODO: configurable write speed
+ partitionConfig.SetBurstSize(1_MB); // TODO: configurable burst
for (const auto& tag : table->KeyColumnIds) {
Y_VERIFY(table->Columns.contains(tag));
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_indexed_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_indexed_table.cpp
index b115d0f22e..b3cf662501 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_create_indexed_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_indexed_table.cpp
@@ -73,14 +73,6 @@ TVector<ISubOperationBase::TPtr> CreateIndexedTable(TOperationId nextId, const T
<< " GetShardsInside: " << domainInfo->GetShardsInside()
<< " MaxShards: " << domainInfo->GetSchemeLimits().MaxShards);
- if (domainInfo->GetShardsInside() + shardsToCreate > domainInfo->GetSchemeLimits().MaxShards) {
- auto msg = TStringBuilder() << "shards count has reached maximum value in the domain"
- << ", paths limit for domain: " << domainInfo->GetSchemeLimits().MaxShards
- << ", paths count inside domain: " << domainInfo->GetShardsInside()
- << ", intention to create new paths: " << shardsToCreate;
- return {CreateReject(nextId, NKikimrScheme::EStatus::StatusResourceExhausted, msg)};
- }
-
if (indexesCount > domainInfo->GetSchemeLimits().MaxTableIndices) {
auto msg = TStringBuilder() << "indexes count has reached maximum value in the table"
<< ", children limit for dir in domain: " << domainInfo->GetSchemeLimits().MaxTableIndices
@@ -88,18 +80,15 @@ TVector<ISubOperationBase::TPtr> CreateIndexedTable(TOperationId nextId, const T
return {CreateReject(nextId, NKikimrScheme::EStatus::StatusResourceExhausted, msg)};
}
- if (domainInfo->GetPathsInside() + pathToCreate > domainInfo->GetSchemeLimits().MaxPaths) {
- auto msg = TStringBuilder() << "paths count has reached maximum value in the domain"
- << ", paths limit for domain: " << domainInfo->GetSchemeLimits().MaxPaths
- << ", paths count inside domain: " << domainInfo->GetPathsInside()
- << ", intention to create new paths: " << pathToCreate;
- return {CreateReject(nextId, NKikimrScheme::EStatus::StatusResourceExhausted, msg)};
- }
+ auto checks = baseTablePath.Check();
+ checks
+ .PathShardsLimit(baseShards)
+ .PathsLimit(pathToCreate)
+ .ShardsLimit(shardsToCreate);
- if (baseShards > domainInfo->GetSchemeLimits().MaxShardsInPath) {
- auto msg = TStringBuilder() << "shards count has reached maximum value in the path"
- << ", shards limit for path: " << domainInfo->GetSchemeLimits().MaxShardsInPath
- << ", intention to create new shards: " << baseShards;
+ if (!checks) {
+ TString msg;
+ checks.GetStatus(&msg);
return {CreateReject(nextId, NKikimrScheme::EStatus::StatusResourceExhausted, msg)};
}
@@ -216,9 +205,18 @@ TVector<ISubOperationBase::TPtr> CreateIndexedTable(TOperationId nextId, const T
}
for (auto& column : baseTableDescription.GetColumns()) {
- if (column.GetNotNull() && !AppData()->FeatureFlags.GetEnableNotNullColumns()) {
- TString msg = TStringBuilder() << "It is not allowed to create not null column";
- return {CreateReject(nextId, NKikimrScheme::EStatus::StatusPreconditionFailed, msg)};
+ if (column.GetNotNull()) {
+ bool isPrimaryKey = keys.contains(column.GetName());
+
+ if (isPrimaryKey && !AppData()->FeatureFlags.GetEnableNotNullColumns()) {
+ TString msg = TStringBuilder() << "It is not allowed to create not null pk: " << column.GetName();
+ return {CreateReject(nextId, NKikimrScheme::EStatus::StatusPreconditionFailed, msg)};
+ }
+
+ if (!isPrimaryKey && !AppData()->FeatureFlags.GetEnableNotNullDataColumns()) {
+ TString msg = TStringBuilder() << "It is not allowed to create not null data column: " << column.GetName();
+ return {CreateReject(nextId, NKikimrScheme::EStatus::StatusPreconditionFailed, msg)};
+ }
}
if (column.HasDefaultFromSequence()) {
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp
index 0d111051cd..a4937ccd1b 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_create_table.cpp
@@ -19,6 +19,28 @@ void PrepareScheme(NKikimrSchemeOp::TTableDescription& schema) {
schema.ClearKeyColumnIds();
}
+bool CheckColumnTypesConstraints(NKikimrSchemeOp::TTableDescription& desc, TString& errMsg) {
+ THashSet<TString> keyColumns(desc.GetKeyColumnNames().begin(), desc.GetKeyColumnNames().end());
+
+ for (const auto& column : desc.GetColumns()) {
+ if (column.GetNotNull()) {
+ bool isPrimaryKey = keyColumns.contains(column.GetName());
+
+ if (isPrimaryKey && !AppData()->FeatureFlags.GetEnableNotNullColumns()) {
+ errMsg = TStringBuilder() << "It is not allowed to create not null pk: " << column.GetName();
+ return false;
+ }
+
+ if (!isPrimaryKey && !AppData()->FeatureFlags.GetEnableNotNullDataColumns()) {
+ errMsg = TStringBuilder() << "It is not allowed to create not null data column: " << column.GetName();
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
bool InitPartitioning(const NKikimrSchemeOp::TTableDescription& op,
const NScheme::TTypeRegistry* typeRegistry,
const TVector<ui32>& keyColIds,
@@ -542,6 +564,11 @@ public:
TString errStr;
+ if (!CheckColumnTypesConstraints(schema, errStr)) {
+ result->SetError(NKikimrScheme::StatusPreconditionFailed, errStr);
+ return result;
+ }
+
NKikimrSchemeOp::TPartitionConfig compilationPartitionConfig;
if (!TPartitionConfigMerger::ApplyChanges(compilationPartitionConfig, TPartitionConfigMerger::DefaultConfig(AppData()), schema.GetPartitionConfig(), AppData(), errStr)
|| !TPartitionConfigMerger::VerifyCreateParams(compilationPartitionConfig, AppData(), IsShadowDataAllowed(), errStr)) {
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp
index a85a65dca2..ad9ae755b9 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_pq.cpp
@@ -214,7 +214,13 @@ public:
Y_VERIFY(parseOk);
ui64 throughput = ((ui64)pqGroup->TotalPartitionCount) * config.GetPartitionConfig().GetWriteSpeedInBytesPerSecond();
- ui64 storage = throughput * config.GetPartitionConfig().GetLifetimeSeconds();
+ const ui64 storage = [&config, &throughput]() {
+ if (config.GetPartitionConfig().HasStorageLimitBytes()) {
+ return config.GetPartitionConfig().GetStorageLimitBytes();
+ } else {
+ return throughput * config.GetPartitionConfig().GetLifetimeSeconds();
+ }
+ }();
auto domainInfo = context.SS->ResolveDomainInfo(pathId);
domainInfo->DecPathsInside();
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_drop_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_drop_table.cpp
index c558b21fbc..a416ae2608 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_drop_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_drop_table.cpp
@@ -35,11 +35,13 @@ void DropPath(NIceDb::TNiceDb& db,
context.SS->TabletCounters->Simple()[COUNTER_USER_ATTRIBUTES_COUNT].Sub(path->UserAttrs->Size());
context.SS->PersistUserAttributes(db, path->PathId, path->UserAttrs, nullptr);
+ const auto isBackupTable = context.SS->IsBackupTable(path->PathId);
+
auto domainInfo = context.SS->ResolveDomainInfo(path->PathId);
- domainInfo->DecPathsInside();
+ domainInfo->DecPathsInside(1, isBackupTable);
auto parentDir = path.Parent();
- parentDir->DecAliveChildren();
+ parentDir->DecAliveChildren(1, isBackupTable);
++parentDir->DirAlterVersion;
context.SS->PersistPathDirAlterVersion(db, parentDir.Base());
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_move_index.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_move_index.cpp
index fb3b4f2a81..8ebf3bd757 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_move_index.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_move_index.cpp
@@ -498,6 +498,16 @@ TVector<ISubOperationBase::TPtr> CreateConsistentMoveIndex(TOperationId nextId,
TVector<ISubOperationBase::TPtr> result;
+ if (!context.SS->EnableMoveIndex) {
+ TString errStr = "Move index is not supported yet";
+ return {CreateReject(nextId, NKikimrScheme::EStatus::StatusPreconditionFailed, errStr)};
+ }
+
+ const auto& moving = tx.GetMoveIndex();
+ const auto& mainTable = moving.GetTablePath();
+ const auto& srcIndex = moving.GetSrcPath();
+ const auto& dstIndex = moving.GetDstPath();
+
{
TString errStr;
if (!context.SS->CheckApplyIf(tx, errStr)) {
@@ -505,11 +515,6 @@ TVector<ISubOperationBase::TPtr> CreateConsistentMoveIndex(TOperationId nextId,
}
}
- auto moving = tx.GetMoveIndex();
-
- const auto& mainTable = moving.GetTablePath();
- const auto& srcIndex = moving.GetSrcPath();
- const auto& dstIndex = moving.GetDstPath();
bool allowOverwrite = moving.HasAllowOverwrite() && moving.GetAllowOverwrite();
TPath mainTablePath = TPath::Resolve(mainTable, context.SS);
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_move_table.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_move_table.cpp
index dc46563bab..e6a01e494c 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_move_table.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_move_table.cpp
@@ -143,15 +143,16 @@ void MarkSrcDropped(NIceDb::TNiceDb& db,
const TTxState& txState,
TPath& srcPath)
{
+ const auto isBackupTable = context.SS->IsBackupTable(srcPath->PathId);
+ srcPath.Parent()->DecAliveChildren(1, isBackupTable);
+ srcPath.DomainInfo()->DecPathsInside(1, isBackupTable);
+
srcPath->SetDropped(txState.PlanStep, operationId.GetTxId());
context.SS->PersistDropStep(db, srcPath->PathId, txState.PlanStep, operationId);
context.SS->Tables.at(srcPath->PathId)->DetachShardsStats();
context.SS->PersistRemoveTable(db, srcPath->PathId, context.Ctx);
context.SS->PersistUserAttributes(db, srcPath->PathId, srcPath->UserAttrs, nullptr);
- srcPath.Parent()->DecAliveChildren();
- srcPath.DomainInfo()->DecPathsInside();
-
IncParentDirAlterVersionWithRepublish(operationId, srcPath, context);
}
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_move_tables.cpp b/ydb/core/tx/schemeshard/schemeshard__operation_move_tables.cpp
index 57b66f0ca8..e221523f8a 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_move_tables.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_move_tables.cpp
@@ -16,6 +16,10 @@ TVector<ISubOperationBase::TPtr> CreateConsistentMoveTable(TOperationId nextId,
TVector<ISubOperationBase::TPtr> result;
+ const auto& moving = tx.GetMoveTable();
+ const auto& srcStr = moving.GetSrcPath();
+ const auto& dstStr = moving.GetDstPath();
+
{
TString errStr;
if (!context.SS->CheckApplyIf(tx, errStr)) {
@@ -23,11 +27,6 @@ TVector<ISubOperationBase::TPtr> CreateConsistentMoveTable(TOperationId nextId,
}
}
- auto moving = tx.GetMoveTable();
-
- auto& srcStr = moving.GetSrcPath();
- auto& dstStr = moving.GetDstPath();
-
TPath srcPath = TPath::Resolve(srcStr, context.SS);
{
TPath::TChecker checks = srcPath.Check();
diff --git a/ydb/core/tx/schemeshard/schemeshard__operation_part.h b/ydb/core/tx/schemeshard/schemeshard__operation_part.h
index f961f6cfaf..8d42df6893 100644
--- a/ydb/core/tx/schemeshard/schemeshard__operation_part.h
+++ b/ydb/core/tx/schemeshard/schemeshard__operation_part.h
@@ -4,6 +4,7 @@
#include "schemeshard_private.h"
#include "schemeshard_tx_infly.h"
#include "schemeshard_types.h"
+#include "schemeshard_audit_log_fragment.h"
#include "schemeshard__operation_side_effects.h"
#include "schemeshard__operation_memory_changes.h"
#include "schemeshard__operation_db_changes.h"
@@ -89,6 +90,8 @@ public:
TAutoPtr<NACLib::TUserToken> UserToken = nullptr;
bool IsAllowedPrivateTables = false;
+ TVector<TAuditLogFragment> AuditLogFragments;
+
private:
NTabletFlatExecutor::TTransactionContext& Txc;
bool ProtectDB = false;
@@ -107,6 +110,21 @@ public:
, Txc(txc)
{}
+ void AddAuditLogFragment(TAuditLogFragment&& op) {
+ AuditLogFragments.push_back(std::move(op));
+ }
+
+ void ClearAuditLogFragments() {
+ AuditLogFragments.clear();
+ }
+
+ TString GetSubject() const {
+ if (UserToken) {
+ return UserToken->GetUserSID();
+ }
+ return "no subject";
+ }
+
NTable::TDatabase& GetDB() {
Y_VERIFY_S(ProtectDB == false,
"there is attempt to write to the DB when it is protected,"
diff --git a/ydb/core/tx/schemeshard/schemeshard__table_stats.cpp b/ydb/core/tx/schemeshard/schemeshard__table_stats.cpp
index 5e5cdef9ef..7f1449f0e3 100644
--- a/ydb/core/tx/schemeshard/schemeshard__table_stats.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__table_stats.cpp
@@ -376,10 +376,6 @@ bool TTxStorePartitionStats::PersistSingleStats(TTransactionContext& txc, const
} else if (table->GetPartitions().size() >= table->GetMaxPartitionsCount()) {
// We cannot split as there are max partitions already
return true;
- } else if (table->CheckFastSplitForPartition(Self->SplitSettings, shardIdx, dataSize, rowCount)) {
- dataSizeResolution = Max<ui64>(dataSize / 100, 100*1024);
- rowCountResolution = Max<ui64>(rowCount / 100, 1000);
- collectKeySample = true;
} else if (table->CheckSplitByLoad(Self->SplitSettings, shardIdx, dataSize, rowCount)) {
collectKeySample = true;
} else {
@@ -387,29 +383,21 @@ bool TTxStorePartitionStats::PersistSingleStats(TTransactionContext& txc, const
}
{
- constexpr ui64 deltaShards = 2;
- TPathElement::TPtr path = Self->PathsById.at(pathId);
- TSubDomainInfo::TPtr domainInfo = Self->ResolveDomainInfo(pathId);
+ auto path = TPath::Init(pathId, Self);
+ auto checks = path.Check();
- if (domainInfo->GetShardsInside() + deltaShards > domainInfo->GetSchemeLimits().MaxShards) {
- LOG_NOTICE_S(ctx, NKikimrServices::FLAT_TX_SCHEMESHARD,
- "Do not request full stats from datashard"
- << ", datashard: " << datashardId
- << ", reason: shards count has reached maximum value in the domain"
- << ", shards limit for domain: " << domainInfo->GetSchemeLimits().MaxShards
- << ", shards count inside domain: " << domainInfo->GetShardsInside()
- << ", intention to create new shards: " << deltaShards);
- return true;
- }
+ constexpr ui64 deltaShards = 2;
+ checks
+ .PathShardsLimit(deltaShards)
+ .ShardsLimit(deltaShards);
- if (path->GetShardsInside() + deltaShards > domainInfo->GetSchemeLimits().MaxShardsInPath) {
+ if (!checks) {
+ TString reason;
+ checks.GetStatus(&reason);
LOG_NOTICE_S(ctx, NKikimrServices::FLAT_TX_SCHEMESHARD,
"Do not request full stats from datashard"
<< ", datashard: " << datashardId
- << ", reason: shards count has reached maximum value in the path"
- << ", shards limit for path: " << domainInfo->GetSchemeLimits().MaxShardsInPath
- << ", shards count inside path: " << path->GetShardsInside()
- << ", intention to create new shards: " << deltaShards);
+ << ", reason: " << reason);
return true;
}
}
diff --git a/ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp b/ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp
index 0c5adea88c..1001f22c76 100644
--- a/ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard__table_stats_histogram.cpp
@@ -315,13 +315,6 @@ bool TTxPartitionHistogram::Execute(TTransactionContext& txc, const TActorContex
splitReason = ESplitReason::SPLIT_BY_SIZE;
}
- if (splitReason == ESplitReason::NO_SPLIT && table->CheckFastSplitForPartition(Self->SplitSettings, shardIdx, dataSize, rowCount)) {
- const TTableInfo* parentTable = Self->GetMainTableForIndex(tableId);
- if (parentTable && table->GetPartitions().size() < parentTable->GetPartitions().size()) {
- splitReason = ESplitReason::FAST_SPLIT_INDEX;
- }
- }
-
if (splitReason == ESplitReason::NO_SPLIT && table->CheckSplitByLoad(Self->SplitSettings, shardIdx, dataSize, rowCount)) {
splitReason = ESplitReason::SPLIT_BY_LOAD;
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.cpp b/ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.cpp
new file mode 100644
index 0000000000..289e80451d
--- /dev/null
+++ b/ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.cpp
@@ -0,0 +1,513 @@
+#include "schemeshard_audit_log_fragment.h"
+
+#include <ydb/library/aclib/aclib.h>
+#include <ydb/core/base/path.h>
+
+namespace NKikimr {
+namespace NSchemeShard {
+
+TString DefineUserOperationName(NKikimrSchemeOp::EOperationType type) {
+ switch (type) {
+ case NKikimrSchemeOp::EOperationType::ESchemeOpMkDir:
+ return "CREATE DIRECTORY";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateTable:
+ return "CREATE TABLE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreatePersQueueGroup:
+ return "CREATE PERSISTENT QUEUE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropTable:
+ return "DROP TABLE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropPersQueueGroup:
+ return "DROP PERSISTENT QUEUE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterTable:
+ return "ALTER TABLE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterPersQueueGroup:
+ return "ALTER PERSISTENT QUEUE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpModifyACL:
+ return "MODIFY ACL";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpRmDir:
+ return "DROP DIRECTORY";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpSplitMergeTablePartitions:
+ return "ALTER TABLE PARTITIONS";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpBackup:
+ return "BACKUP TABLE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateSubDomain:
+ return "CREATE DATABASE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropSubDomain:
+ return "DROP DATABASE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateRtmrVolume:
+ return "CREATE RTMR VOLUME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateBlockStoreVolume:
+ return "CREATE BLOCK STORE VOLUME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterBlockStoreVolume:
+ return "ALTER BLOCK STORE VOLUME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAssignBlockStoreVolume:
+ return "ALTER BLOCK STORE VOLUME ASSIGN";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropBlockStoreVolume:
+ return "DROP BLOCK STORE VOLUME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateKesus:
+ return "CREATE KESUS";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropKesus:
+ return "DROP KESUS";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpForceDropSubDomain:
+ return "DROP DATABASE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateSolomonVolume:
+ return "CREATE SOLOMON VOLUME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropSolomonVolume:
+ return "DROP SOLOMON VOLUME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterKesus:
+ return "ALTER KESUS";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterSubDomain:
+ return "ALTER DATABASE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterUserAttributes:
+ return "ALTER USER ATTRIBUTES";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpForceDropUnsafe:
+ return "DROP PATH UNSAFE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateIndexedTable:
+ return "CREATE TABLE WITH INDEXES";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateTableIndex:
+ return "CREATE INDEX";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateConsistentCopyTables:
+ return "CREATE TABLE COPY FROM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropTableIndex:
+ return "DROP INDEX";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateExtSubDomain:
+ return "CREATE DATABASE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterExtSubDomain:
+ return "ALTER DATABASE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpForceDropExtSubDomain:
+ return "DROP DATABASE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOp_DEPRECATED_35:
+ return "ESchemeOp_DEPRECATED_35";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpUpgradeSubDomain:
+ return "ALTER DATABASE MIGRATE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpUpgradeSubDomainDecision:
+ return "ALTER DATABASE MIGRATE DECISION";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateIndexBuild:
+ return "BUILD INDEX";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpInitiateBuildIndexMainTable:
+ return "ALTER TABLE BUILD INDEX INIT";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateLockForIndexBuild:
+ return "ALTER TABLE LOCK";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpApplyIndexBuild:
+ return "ALTER TABLE BUILD INDEX APPLY";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpFinalizeBuildIndexMainTable:
+ return "ALTER TABLE BUILD INDEX FINISH";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterTableIndex:
+ return "ALTER INDEX";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterSolomonVolume:
+ return "ALTER SOLOMON VOLUME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropLock:
+ return "ALTER TABLE UNLOCK";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpFinalizeBuildIndexImplTable:
+ return "ALTER TABLE BUILD INDEX FINISH";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpInitiateBuildIndexImplTable:
+ return "ALTER TABLE BUILD INDEX INIT";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropIndex:
+ return "ALTER TABLE DROP INDEX";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropTableIndexAtMainTable:
+ return "ALTER TABLE DROP INDEX";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCancelIndexBuild:
+ return "ALTER TABLE BUILD INDEX CANCEL";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateFileStore:
+ return "CREATE FILE STORE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterFileStore:
+ return "ALTER FILE STORE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropFileStore:
+ return "DROP FILE STORE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpRestore:
+ return "RESTORE TABLE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateColumnStore:
+ return "CREATE COLUMN STORE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterColumnStore:
+ return "ALTER COLUMN STORE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropColumnStore:
+ return "DROP COLUMN STORE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateColumnTable:
+ return "CREATE COLUMN TABLE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterColumnTable:
+ return "ALTER COLUMN TABLE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropColumnTable:
+ return "DROP COLUMN TABLE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterLogin:
+ return "ALTER LOGIN";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateCdcStream:
+ return "ATER TABLE CREATE CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateCdcStreamImpl:
+ return "CREATE CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateCdcStreamAtTable:
+ return "ATER TABLE CREATE CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterCdcStream:
+ return "ATER CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterCdcStreamImpl:
+ return "ATER CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterCdcStreamAtTable:
+ return "ATER TABLE ATER CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropCdcStream:
+ return "DROP CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropCdcStreamImpl:
+ return "DROP CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropCdcStreamAtTable:
+ return "ATER TABLE DROP CDC STREAM";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpMoveTable:
+ return "ALTER TABLE RENAME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpMoveTableIndex:
+ return "ALTER TABLE INDEX RENAME";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateSequence:
+ return "CREATE SEQUENCE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterSequence:
+ return "ALTER SEQUENCE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropSequence:
+ return "DROP SEQUENCE";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateReplication:
+ return "CREATE REPLICATION";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterReplication:
+ return "ALTER REPLICATION";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropReplication:
+ return "DROP REPLICATION";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateBlobDepot:
+ return "CREATE BLOB DEPOT";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterBlobDepot:
+ return "ALTER BLOB DEPOT";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropBlobDepot:
+ return "DROP BLOB DEPOT";
+ case NKikimrSchemeOp::EOperationType::ESchemeOpMoveIndex:
+ return "ALTER TABLE INDEX RENAME";
+ };
+}
+
+TAuditLogFragment::TAuditLogFragment(const NKikimrSchemeOp::TModifyScheme& tx)
+ : Operation(DefineUserOperationName(tx.GetOperationType()))
+ , ProtoRequest(tx.ShortDebugString())
+{
+ FillPathes(tx);
+ FillACL(tx);
+}
+
+void TAuditLogFragment::FillACL(const NKikimrSchemeOp::TModifyScheme& tx) {
+ using namespace NACLib;
+
+ bool hasACL = tx.HasModifyACL() && tx.GetModifyACL().HasDiffACL();
+ if (hasACL) {
+ NACLib::TDiffACL diffACL(tx.GetModifyACL().GetDiffACL());
+ for (const NACLibProto::TDiffACE& diffACE : diffACL.GetDiffACE()) {
+ const NACLibProto::TACE& ace = diffACE.GetACE();
+ switch (static_cast<EDiffType>(diffACE.GetDiffType())) {
+ case EDiffType::Add:
+ AddACL.push_back(TACL::ToString(ace));
+ break;
+ case EDiffType::Remove:
+ RmACL.push_back(TACL::ToString(ace));
+ break;
+ }
+ }
+ }
+
+ bool hasOwner = tx.HasModifyACL() && tx.GetModifyACL().HasNewOwner();
+ if (hasOwner) {
+ NewOwner = tx.GetModifyACL().GetNewOwner();
+ }
+}
+
+void TAuditLogFragment::FillPathes(const NKikimrSchemeOp::TModifyScheme& tx) {
+ switch (tx.GetOperationType()) {
+ case NKikimrSchemeOp::EOperationType::ESchemeOpMkDir:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetMkDir().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateTable().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreatePersQueueGroup:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreatePersQueueGroup().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropPersQueueGroup:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterTable().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterPersQueueGroup:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterPersQueueGroup().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpModifyACL:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetModifyACL().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpRmDir:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpSplitMergeTablePartitions:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetSplitMergeTablePartitions().GetTablePath()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpBackup:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetBackup().GetTableName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateSubDomain:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetSubDomain().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropSubDomain:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateRtmrVolume:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateRtmrVolume().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateBlockStoreVolume:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateBlockStoreVolume().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterBlockStoreVolume:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterBlockStoreVolume().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAssignBlockStoreVolume:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAssignBlockStoreVolume().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropBlockStoreVolume:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateKesus:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetKesus().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropKesus:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpForceDropSubDomain:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateSolomonVolume:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateSolomonVolume().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropSolomonVolume:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterKesus:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetKesus().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterSubDomain:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetSubDomain().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterUserAttributes:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterUserAttributes().GetPathName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpForceDropUnsafe:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateIndexedTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateIndexedTable().GetTableDescription().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateTableIndex:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateTableIndex().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateConsistentCopyTables:
+ for (const auto& item: tx.GetCreateConsistentCopyTables().GetCopyTableDescriptions()) {
+ SrcPaths.push_back(item.GetSrcPath());
+ DstPaths.push_back(item.GetDstPath());
+ }
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropTableIndex:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateExtSubDomain:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetSubDomain().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterExtSubDomain:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetSubDomain().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpForceDropExtSubDomain:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetSubDomain().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOp_DEPRECATED_35:
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpUpgradeSubDomain:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetUpgradeSubDomain().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpUpgradeSubDomainDecision:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetUpgradeSubDomain().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateIndexBuild:
+ Path = JoinPath({tx.GetInitiateIndexBuild().GetTable(), tx.GetInitiateIndexBuild().GetIndex().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpInitiateBuildIndexMainTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetInitiateBuildIndexMainTable().GetTableName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateLockForIndexBuild:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetLockConfig().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpApplyIndexBuild:
+ Path = JoinPath({tx.GetApplyIndexBuild().GetTablePath(), tx.GetApplyIndexBuild().GetIndexName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpFinalizeBuildIndexMainTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetFinalizeBuildIndexMainTable().GetTableName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterTableIndex:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterTableIndex().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterSolomonVolume:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterSolomonVolume().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropLock:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetLockConfig().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpFinalizeBuildIndexImplTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterTable().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpInitiateBuildIndexImplTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateTable().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropIndex:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDropIndex().GetTableName(), tx.GetDropIndex().GetIndexName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropTableIndexAtMainTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDropIndex().GetTableName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCancelIndexBuild:
+ Path = JoinPath({tx.GetCancelIndexBuild().GetTablePath(), tx.GetCancelIndexBuild().GetIndexName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateFileStore:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateFileStore().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterFileStore:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterFileStore().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropFileStore:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpRestore:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetRestore().GetTableName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateColumnStore:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateColumnStore().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterColumnStore:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterColumnStore().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropColumnStore:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateColumnTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterColumnTable().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterColumnTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterColumnTable().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropColumnTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterLogin:
+ Path = tx.GetWorkingDir();
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateCdcStream:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateCdcStream().GetTableName(), tx.GetCreateCdcStream().GetStreamDescription().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateCdcStreamImpl:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateCdcStream().GetStreamDescription().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateCdcStreamAtTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetCreateCdcStream().GetTableName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterCdcStream:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterCdcStream().GetTableName(), tx.GetAlterCdcStream().GetStreamName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterCdcStreamImpl:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterCdcStream().GetStreamName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterCdcStreamAtTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetAlterCdcStream().GetTableName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropCdcStream:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDropCdcStream().GetTableName(), tx.GetDropCdcStream().GetStreamName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropCdcStreamImpl:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropCdcStreamAtTable:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDropCdcStream().GetTableName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpMoveTable:
+ SrcPaths.push_back(tx.GetMoveTable().GetSrcPath());
+ DstPaths.push_back(tx.GetMoveTable().GetDstPath());
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpMoveTableIndex:
+ SrcPaths.push_back(tx.GetMoveTableIndex().GetSrcPath());
+ DstPaths.push_back(tx.GetMoveTableIndex().GetDstPath());
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateSequence:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetSequence().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterSequence:
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropSequence:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateReplication:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetReplication().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterReplication:
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropReplication:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetDrop().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpCreateBlobDepot:
+ Path = JoinPath({tx.GetWorkingDir(), tx.GetBlobDepot().GetName()});
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpAlterBlobDepot:
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpDropBlobDepot:
+ break;
+ case NKikimrSchemeOp::EOperationType::ESchemeOpMoveIndex:
+ SrcPaths.push_back(JoinPath({tx.GetMoveIndex().GetTablePath(), tx.GetMoveIndex().GetSrcPath()}));
+ DstPaths.push_back(JoinPath({tx.GetMoveIndex().GetTablePath(), tx.GetMoveIndex().GetDstPath()}));
+ break;
+ };
+}
+
+TString TAuditLogFragment::GetAnyPath() const {
+ if (Path) {
+ return *Path;
+ } else if (SrcPaths) {
+ return SrcPaths.front();
+ } else if (DstPaths) {
+ return DstPaths.front();
+ } else {
+ return "";
+ }
+}
+
+TString TAuditLogFragment::ToString() const {
+ auto result = TStringBuilder();
+
+ result << "operation: " << Operation;
+
+ if (Path) {
+ result << ", path: " << Path;
+ } else if (SrcPaths && DstPaths) {
+ Y_VERIFY_DEBUG(SrcPaths.size() == DstPaths.size());
+ auto minSize = Min(SrcPaths.size(), DstPaths.size());
+ for (size_t i = 0; i < minSize; ++i) {
+ result << ", src path: " << SrcPaths[i];
+ result << ", dst path: " << DstPaths[i];
+ }
+ } else {
+ result << ", no path";
+ }
+
+ if (NewOwner) {
+ result << ", set owner: " << NewOwner;
+ }
+
+ for (const auto& acl: AddACL) {
+ result << ", add access: " << acl;
+ }
+
+ for (const auto& acl: RmACL) {
+ result << ", remove access: " << acl;
+ }
+
+ if (ProtoRequest) {
+ result << ", protobuf request: " << ProtoRequest;
+ }
+
+ return result;
+}
+
+}
+}
diff --git a/ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.h b/ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.h
new file mode 100644
index 0000000000..4829f0a795
--- /dev/null
+++ b/ydb/core/tx/schemeshard/schemeshard_audit_log_fragment.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "schemeshard_identificators.h"
+
+#include <ydb/core/protos/flat_scheme_op.pb.h>
+
+#include <util/generic/string.h>
+#include <util/generic/maybe.h>
+
+namespace NKikimr {
+namespace NSchemeShard {
+
+struct TAuditLogFragment {
+ TString Operation;
+ TMaybe<TString> Path;
+ TVector<TString> SrcPaths;
+ TVector<TString> DstPaths;
+ TVector<TString> AddACL;
+ TVector<TString> RmACL;
+ TMaybe<TString> NewOwner;
+ TMaybe<TString> ProtoRequest;
+
+ TAuditLogFragment(const NKikimrSchemeOp::TModifyScheme& tx);
+
+ void FillACL(const NKikimrSchemeOp::TModifyScheme& tx);
+ void FillPathes(const NKikimrSchemeOp::TModifyScheme& tx);
+
+ TString GetAnyPath() const;
+ TString ToString() const;
+};
+
+
+} // NSchemeShard
+} // NKikimr
diff --git a/ydb/core/tx/schemeshard/schemeshard_export_flow_proposals.cpp b/ydb/core/tx/schemeshard/schemeshard_export_flow_proposals.cpp
index 2f2176743e..62a1c5845a 100644
--- a/ydb/core/tx/schemeshard/schemeshard_export_flow_proposals.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_export_flow_proposals.cpp
@@ -150,6 +150,10 @@ THolder<TEvSchemeShard::TEvModifySchemeTransaction> BackupPropose(
Y_FAIL("Unknown scheme");
}
+ if (const auto region = exportSettings.region()) {
+ backupSettings.SetRegion(region);
+ }
+
if (const auto compression = exportSettings.compression()) {
Y_VERIFY(FillCompression(*task.MutableCompression(), compression));
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_impl.cpp b/ydb/core/tx/schemeshard/schemeshard_impl.cpp
index 115ae12872..ba04e9d8b4 100644
--- a/ydb/core/tx/schemeshard/schemeshard_impl.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_impl.cpp
@@ -1234,6 +1234,16 @@ const TTableInfo* TSchemeShard::GetMainTableForIndex(TPathId indexTableId) const
return Tables.FindPtr(grandParentId)->Get();
}
+bool TSchemeShard::IsBackupTable(TPathId pathId) const {
+ auto it = Tables.find(pathId);
+ if (it == Tables.end()) {
+ return false;
+ }
+
+ Y_VERIFY(it->second);
+ return it->second->IsBackup;
+}
+
TPathElement::EPathState TSchemeShard::CalcPathState(TTxState::ETxType txType, TPathElement::EPathState oldState) {
// Do not change state if PathId is dropped. It can't become alive.
switch (oldState) {
@@ -1357,6 +1367,27 @@ void TSchemeShard::TRwTxBase::Complete(const TActorContext &ctx) {
DoComplete(ctx);
}
+void TSchemeShard::BumpIncompatibleChanges(NIceDb::TNiceDb& db, ui64 incompatibleChange) {
+ if (MaxIncompatibleChange < incompatibleChange) {
+ Y_VERIFY_S(incompatibleChange <= Schema::MaxIncompatibleChangeSupported,
+ "Attempting to bump incompatible changes to " << incompatibleChange <<
+ ", but maximum supported change is " << Schema::MaxIncompatibleChangeSupported);
+ // We add a special path on the first incompatible change, which breaks
+ // all versions that don't know about incompatible changes. Newer
+ // versions will just skip this non-sensical entry.
+ if (MaxIncompatibleChange == 0) {
+ db.Table<Schema::Paths>().Key(0).Update(
+ NIceDb::TUpdate<Schema::Paths::ParentId>(0),
+ NIceDb::TUpdate<Schema::Paths::Name>("/incompatible/"));
+ }
+ // Persist a new maximum incompatible change, this will cause older
+ // versions to stop gracefully instead of working inconsistently.
+ db.Table<Schema::SysParams>().Key(Schema::SysParam_MaxIncompatibleChange).Update(
+ NIceDb::TUpdate<Schema::SysParams::Value>(ToString(incompatibleChange)));
+ MaxIncompatibleChange = incompatibleChange;
+ }
+}
+
void TSchemeShard::PersistTableIndex(NIceDb::TNiceDb& db, const TPathId& pathId) {
Y_VERIFY(PathsById.contains(pathId));
TPathElement::TPtr elemnt = PathsById.at(pathId);
@@ -2075,14 +2106,20 @@ void TSchemeShard::PersistChannelsBinding(NIceDb::TNiceDb& db, const TShardIdx s
void TSchemeShard::PersistTablePartitioning(NIceDb::TNiceDb& db, const TPathId pathId, const TTableInfo::TPtr tableInfo) {
for (ui64 pi = 0; pi < tableInfo->GetPartitions().size(); ++pi) {
const auto& partition = tableInfo->GetPartitions()[pi];
- if (IsLocalId(pathId)) {
- Y_VERIFY(IsLocalId(partition.ShardIdx));
+ if (IsLocalId(pathId) && IsLocalId(partition.ShardIdx)) {
db.Table<Schema::TablePartitions>().Key(pathId.LocalPathId, pi).Update(
NIceDb::TUpdate<Schema::TablePartitions::RangeEnd>(partition.EndOfRange),
NIceDb::TUpdate<Schema::TablePartitions::DatashardIdx>(partition.ShardIdx.GetLocalId()),
NIceDb::TUpdate<Schema::TablePartitions::LastCondErase>(partition.LastCondErase.GetValue()),
NIceDb::TUpdate<Schema::TablePartitions::NextCondErase>(partition.NextCondErase.GetValue()));
} else {
+ if (IsLocalId(pathId)) {
+ // Incompatible change 1:
+ // Store migrated shards of local tables in migrated table partitions
+ // This change is incompatible with older versions because partitions
+ // may no longer be in a single table and will require sorting at load time.
+ BumpIncompatibleChanges(db, 1);
+ }
db.Table<Schema::MigratedTablePartitions>().Key(pathId.OwnerId, pathId.LocalPathId, pi).Update(
NIceDb::TUpdate<Schema::MigratedTablePartitions::RangeEnd>(partition.EndOfRange),
NIceDb::TUpdate<Schema::MigratedTablePartitions::OwnerShardIdx>(partition.ShardIdx.GetOwnerId()),
@@ -2114,12 +2151,15 @@ void TSchemeShard::PersistTablePartitioningDeletion(NIceDb::TNiceDb& db, const T
void TSchemeShard::PersistTablePartitionCondErase(NIceDb::TNiceDb& db, const TPathId& pathId, ui64 id, const TTableInfo::TPtr tableInfo) {
const auto& partition = tableInfo->GetPartitions()[id];
- if (IsLocalId(pathId)) {
- Y_VERIFY(IsLocalId(partition.ShardIdx));
+ if (IsLocalId(pathId) && IsLocalId(partition.ShardIdx)) {
db.Table<Schema::TablePartitions>().Key(pathId.LocalPathId, id).Update(
NIceDb::TUpdate<Schema::TablePartitions::LastCondErase>(partition.LastCondErase.GetValue()),
NIceDb::TUpdate<Schema::TablePartitions::NextCondErase>(partition.NextCondErase.GetValue()));
} else {
+ if (IsLocalId(pathId)) {
+ // Incompatible change 1 (see above)
+ BumpIncompatibleChanges(db, 1);
+ }
db.Table<Schema::MigratedTablePartitions>().Key(pathId.OwnerId, pathId.LocalPathId, id).Update(
NIceDb::TUpdate<Schema::MigratedTablePartitions::LastCondErase>(partition.LastCondErase.GetValue()),
NIceDb::TUpdate<Schema::MigratedTablePartitions::NextCondErase>(partition.NextCondErase.GetValue()));
@@ -3835,6 +3875,7 @@ void TSchemeShard::OnActivateExecutor(const TActorContext &ctx) {
EnableBackgroundCompaction = appData->FeatureFlags.GetEnableBackgroundCompaction();
EnableBackgroundCompactionServerless = appData->FeatureFlags.GetEnableBackgroundCompactionServerless();
+ EnableMoveIndex = appData->FeatureFlags.GetEnableMoveIndex();
ConfigureCompactionQueues(appData->CompactionConfig, ctx);
ConfigureStatsBatching(appData->SchemeShardConfig, ctx);
@@ -3893,6 +3934,7 @@ void TSchemeShard::StateInit(STFUNC_SIG) {
TRACE_EVENT(NKikimrServices::FLAT_TX_SCHEMESHARD);
switch (ev->GetTypeRewrite()) {
HFuncTraced(TEvents::TEvPoisonPill, Handle);
+ HFuncTraced(TEvents::TEvUndelivered, Handle);
//console configs
HFuncTraced(NConsole::TEvConfigsDispatcher::TEvSetConfigSubscriptionResponse, Handle);
@@ -3908,6 +3950,7 @@ void TSchemeShard::StateConfigure(STFUNC_SIG) {
TRACE_EVENT(NKikimrServices::FLAT_TX_SCHEMESHARD);
switch (ev->GetTypeRewrite()) {
HFuncTraced(TEvents::TEvPoisonPill, Handle);
+ HFuncTraced(TEvents::TEvUndelivered, Handle);
HFuncTraced(TEvSchemeShard::TEvInitRootShard, Handle);
HFuncTraced(TEvSchemeShard::TEvInitTenantSchemeShard, Handle);
@@ -3948,6 +3991,7 @@ void TSchemeShard::StateWork(STFUNC_SIG) {
TRACE_EVENT(NKikimrServices::FLAT_TX_SCHEMESHARD);
switch (ev->GetTypeRewrite()) {
HFuncTraced(TEvents::TEvPoisonPill, Handle);
+ HFuncTraced(TEvents::TEvUndelivered, Handle);
HFuncTraced(TEvSchemeShard::TEvInitRootShard, Handle);
HFuncTraced(TEvSchemeShard::TEvMeasureSelfResponseTime, SelfPinger->Handle);
@@ -4314,12 +4358,14 @@ void TSchemeShard::MarkAsDroping(TPathElement::TPtr node, TTxId txId, const TAct
}
void TSchemeShard::UncountNode(TPathElement::TPtr node) {
+ const auto isBackupTable = IsBackupTable(node->PathId);
+
if (node->IsDomainRoot()) {
- ResolveDomainInfo(node->ParentPathId)->DecPathsInside();
+ ResolveDomainInfo(node->ParentPathId)->DecPathsInside(1, isBackupTable);
} else {
- ResolveDomainInfo(node)->DecPathsInside();
+ ResolveDomainInfo(node)->DecPathsInside(1, isBackupTable);
}
- PathsById.at(node->ParentPathId)->DecAliveChildren();
+ PathsById.at(node->ParentPathId)->DecAliveChildren(1, isBackupTable);
TabletCounters->Simple()[COUNTER_USER_ATTRIBUTES_COUNT].Sub(node->UserAttrs->Size());
@@ -6084,7 +6130,20 @@ void TSchemeShard::SubscribeConsoleConfigs(const TActorContext &ctx) {
(ui32)NKikimrConsole::TConfigItem::FeatureFlagsItem,
(ui32)NKikimrConsole::TConfigItem::CompactionConfigItem,
(ui32)NKikimrConsole::TConfigItem::SchemeShardConfigItem,
- }));
+ (ui32)NKikimrConsole::TConfigItem::TableProfilesConfigItem,
+ }),
+ IEventHandle::FlagTrackDelivery
+ );
+}
+
+void TSchemeShard::Handle(TEvents::TEvUndelivered::TPtr&, const TActorContext& ctx) {
+ LOG_WARN_S(ctx, NKikimrServices::FLAT_TX_SCHEMESHARD, "Cannot subscribe to console configs");
+ TableProfilesLoaded = true;
+
+ auto waiters = std::move(TableProfilesWaiters);
+ for (const auto& [importId, itemIdx] : waiters) {
+ Execute(CreateTxProgressImport(importId, itemIdx), ctx);
+ }
}
void TSchemeShard::ApplyConsoleConfigs(const NKikimrConfig::TAppConfig& appConfig, const TActorContext& ctx) {
@@ -6101,6 +6160,16 @@ void TSchemeShard::ApplyConsoleConfigs(const NKikimrConfig::TAppConfig& appConfi
ConfigureStatsBatching(appConfig.GetSchemeShardConfig(), ctx);
}
+ if (appConfig.HasTableProfilesConfig()) {
+ TableProfiles.Load(appConfig.GetTableProfilesConfig());
+ TableProfilesLoaded = true;
+
+ auto waiters = std::move(TableProfilesWaiters);
+ for (const auto& [importId, itemIdx] : waiters) {
+ Execute(CreateTxProgressImport(importId, itemIdx), ctx);
+ }
+ }
+
if (IsShemeShardConfigured()) {
StartStopCompactionQueues();
}
@@ -6118,6 +6187,7 @@ void TSchemeShard::ApplyConsoleConfigs(const NKikimrConfig::TFeatureFlags& featu
EnableBackgroundCompaction = featureFlags.GetEnableBackgroundCompaction();
EnableBackgroundCompactionServerless = featureFlags.GetEnableBackgroundCompactionServerless();
+ EnableMoveIndex = featureFlags.GetEnableMoveIndex();
}
void TSchemeShard::ConfigureStatsBatching(const NKikimrConfig::TSchemeShardConfig& config, const TActorContext& ctx) {
diff --git a/ydb/core/tx/schemeshard/schemeshard_impl.h b/ydb/core/tx/schemeshard/schemeshard_impl.h
index 4a434e59a3..da7d0f9f5a 100644
--- a/ydb/core/tx/schemeshard/schemeshard_impl.h
+++ b/ydb/core/tx/schemeshard/schemeshard_impl.h
@@ -44,6 +44,7 @@
#include <ydb/core/tx/sequenceshard/public/events.h>
#include <ydb/core/tx/tx_processing.h>
#include <ydb/core/util/pb.h>
+#include <ydb/core/ydb_convert/table_profiles.h>
#include <ydb/core/blockstore/core/blockstore.h>
#include <ydb/core/filestore/core/filestore.h>
@@ -136,6 +137,10 @@ public:
TIntrusivePtr<TChannelProfiles> ChannelProfiles;
+ TTableProfiles TableProfiles;
+ bool TableProfilesLoaded = false;
+ THashSet<std::pair<ui64, ui32>> TableProfilesWaiters;
+
TControlWrapper AllowConditionalEraseOperations;
TControlWrapper AllowServerlessStorageBilling;
TControlWrapper DisablePublicationsOfDropping;
@@ -172,6 +177,7 @@ public:
TVector<TString> RootPathElements;
+ ui64 MaxIncompatibleChange = 0;
THashMap<TPathId, TPathElement::TPtr> PathsById;
TLocalPathId NextLocalPathId = 0;
@@ -243,6 +249,7 @@ public:
THashSet<TShardIdx> ShardsWithLoaned; // shards have parts loaned to another shards
bool EnableBackgroundCompaction = false;
bool EnableBackgroundCompactionServerless = false;
+ bool EnableMoveIndex = false;
TShardDeleter ShardDeleter;
@@ -395,6 +402,8 @@ public:
void StartStopCompactionQueues();
+ void WaitForTableProfiles(ui64 importId, ui32 itemIdx);
+
bool ApplyStorageConfig(const TStoragePools& storagePools,
const NKikimrSchemeOp::TStorageConfig& storageConfig,
TChannelsBindings& channelsBinding,
@@ -466,6 +475,7 @@ public:
ui64 GetAliveChildren(TPathElement::TPtr pathEl, const std::optional<TPathElement::EPathType>& type = std::nullopt) const;
const TTableInfo* GetMainTableForIndex(TPathId indexTableId) const;
+ bool IsBackupTable(TPathId pathId) const;
TPathId ResolvePathIdForDomain(TPathId pathId) const;
TPathId ResolvePathIdForDomain(TPathElement::TPtr pathEl) const;
@@ -528,6 +538,9 @@ public:
void IncrementPathDbRefCount(const TPathId& pathId, const TStringBuf& debug = TStringBuf());
void DecrementPathDbRefCount(const TPathId& pathId, const TStringBuf& debug = TStringBuf());
+ // incompatible changes
+ void BumpIncompatibleChanges(NIceDb::TNiceDb& db, ui64 incompatibleChange);
+
// path
void PersistPath(NIceDb::TNiceDb& db, const TPathId& pathId);
void PersistRemovePath(NIceDb::TNiceDb& db, const TPathElement::TPtr path);
@@ -933,6 +946,7 @@ public:
void Handle(TEvTxProcessing::TEvPlanStep::TPtr &ev, const TActorContext &ctx);
+ void Handle(TEvents::TEvUndelivered::TPtr& ev, const TActorContext& ctx);
void Handle(TEvents::TEvPoisonPill::TPtr& ev, const TActorContext& ctx);
void Handle(NMon::TEvRemoteHttpInfo::TPtr& ev, const TActorContext& ctx);
@@ -1060,7 +1074,7 @@ public:
NTabletFlatExecutor::ITransaction* CreateTxForgetImport(TEvImport::TEvForgetImportRequest::TPtr& ev);
NTabletFlatExecutor::ITransaction* CreateTxListImports(TEvImport::TEvListImportsRequest::TPtr& ev);
- NTabletFlatExecutor::ITransaction* CreateTxProgressImport(ui64 id);
+ NTabletFlatExecutor::ITransaction* CreateTxProgressImport(ui64 id, const TMaybe<ui32>& itemIdx = Nothing());
NTabletFlatExecutor::ITransaction* CreateTxProgressImport(TEvPrivate::TEvImportSchemeReady::TPtr& ev);
NTabletFlatExecutor::ITransaction* CreateTxProgressImport(TEvTxAllocatorClient::TEvAllocateResult::TPtr& ev);
NTabletFlatExecutor::ITransaction* CreateTxProgressImport(TEvSchemeShard::TEvModifySchemeTransactionResult::TPtr& ev);
diff --git a/ydb/core/tx/schemeshard/schemeshard_import.cpp b/ydb/core/tx/schemeshard/schemeshard_import.cpp
index c5e7d6c3d1..42a182223f 100644
--- a/ydb/core/tx/schemeshard/schemeshard_import.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_import.cpp
@@ -196,5 +196,12 @@ void TSchemeShard::ResumeImports(const TVector<ui64>& ids, const TActorContext&
}
}
+void TSchemeShard::WaitForTableProfiles(ui64 importId, ui32 itemIdx) {
+ LOG_N("Wait for table profiles"
+ << ": id# " << importId
+ << ", itemIdx# " << itemIdx);
+ TableProfilesWaiters.insert(std::make_pair(importId, itemIdx));
+}
+
} // NSchemeShard
} // NKikimr
diff --git a/ydb/core/tx/schemeshard/schemeshard_import__create.cpp b/ydb/core/tx/schemeshard/schemeshard_import__create.cpp
index b1469403f7..d6d9066a7d 100644
--- a/ydb/core/tx/schemeshard/schemeshard_import__create.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_import__create.cpp
@@ -10,6 +10,7 @@
#include <ydb/public/api/protos/ydb_status_codes.pb.h>
#include <util/generic/algorithm.h>
+#include <util/generic/maybe.h>
#include <util/generic/ptr.h>
#include <util/generic/xrange.h>
#include <util/string/builder.h>
@@ -218,15 +219,17 @@ struct TSchemeShard::TImport::TTxProgress: public TSchemeShard::TXxport::TTxBase
static constexpr ui32 IssuesSizeLimit = 2 * 1024;
ui64 Id;
+ TMaybe<ui32> ItemIdx;
TEvPrivate::TEvImportSchemeReady::TPtr SchemeResult = nullptr;
TEvTxAllocatorClient::TEvAllocateResult::TPtr AllocateResult = nullptr;
TEvSchemeShard::TEvModifySchemeTransactionResult::TPtr ModifyResult = nullptr;
TEvIndexBuilder::TEvCreateResponse::TPtr CreateIndexResult = nullptr;
TEvSchemeShard::TEvNotifyTxCompletionResult::TPtr NotifyResult = nullptr;
- explicit TTxProgress(TSelf* self, ui64 id)
+ explicit TTxProgress(TSelf* self, ui64 id, const TMaybe<ui32>& itemIdx)
: TXxport::TTxBase(self)
, Id(id)
+ , ItemIdx(itemIdx)
{
}
@@ -552,18 +555,37 @@ private:
TImportInfo::TPtr importInfo = Self->Imports.at(Id);
LOG_D("TImport::TTxProgress: Resume"
- << ": id# " << Id);
+ << ": id# " << Id
+ << ", itemIdx# " << ItemIdx);
+
+ if (ItemIdx) {
+ Resume(importInfo, *ItemIdx, txc, ctx);
+ } else {
+ for (ui32 itemIdx : xrange(importInfo->Items.size())) {
+ Resume(importInfo, itemIdx, txc, ctx);
+ }
+ }
+ }
+
+ void Resume(TImportInfo::TPtr importInfo, ui32 itemIdx, TTransactionContext& txc, const TActorContext& ctx) {
+ Y_VERIFY(itemIdx < importInfo->Items.size());
+ auto& item = importInfo->Items.at(itemIdx);
+
+ LOG_D("TImport::TTxProgress: Resume"
+ << ": info# " << importInfo->ToString()
+ << ", item# " << item.ToString(itemIdx));
NIceDb::TNiceDb db(txc.DB);
switch (importInfo->State) {
- case EState::Waiting:
- for (ui32 itemIdx : xrange(importInfo->Items.size())) {
- const auto& item = importInfo->Items.at(itemIdx);
-
+ case EState::Waiting: {
switch (item.State) {
case EState::GetScheme:
- GetScheme(importInfo, itemIdx, ctx);
+ if (!Self->TableProfilesLoaded) {
+ Self->WaitForTableProfiles(Id, itemIdx);
+ } else {
+ GetScheme(importInfo, itemIdx, ctx);
+ }
break;
case EState::CreateTable:
@@ -582,9 +604,7 @@ private:
}
break;
- case EState::Cancellation:
- for (ui32 itemIdx : xrange(importInfo->Items.size())) {
- auto& item = importInfo->Items.at(itemIdx);
+ case EState::Cancellation: {
TTxId txId = InvalidTxId;
switch (item.State) {
@@ -707,8 +727,12 @@ private:
switch (item.State) {
case EState::CreateTable:
- CreateTable(importInfo, i, txId);
- itemIdx = i;
+ if (!Self->TableProfilesLoaded) {
+ Self->WaitForTableProfiles(id, i);
+ } else {
+ CreateTable(importInfo, i, txId);
+ itemIdx = i;
+ }
break;
case EState::Transferring:
@@ -974,8 +998,8 @@ ITransaction* TSchemeShard::CreateTxCreateImport(TEvImport::TEvCreateImportReque
return new TImport::TTxCreate(this, ev);
}
-ITransaction* TSchemeShard::CreateTxProgressImport(ui64 id) {
- return new TImport::TTxProgress(this, id);
+ITransaction* TSchemeShard::CreateTxProgressImport(ui64 id, const TMaybe<ui32>& itemIdx) {
+ return new TImport::TTxProgress(this, id, itemIdx);
}
ITransaction* TSchemeShard::CreateTxProgressImport(TEvPrivate::TEvImportSchemeReady::TPtr& ev) {
diff --git a/ydb/core/tx/schemeshard/schemeshard_import_flow_proposals.cpp b/ydb/core/tx/schemeshard/schemeshard_import_flow_proposals.cpp
index 5d510760fd..79350ee658 100644
--- a/ydb/core/tx/schemeshard/schemeshard_import_flow_proposals.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_import_flow_proposals.cpp
@@ -40,8 +40,9 @@ THolder<TEvSchemeShard::TEvModifySchemeTransaction> CreateTablePropose(
auto& tableDesc = *modifyScheme.MutableCreateTable();
tableDesc.SetName(wdAndPath.second);
+ Y_VERIFY(ss->TableProfilesLoaded);
Ydb::StatusIds::StatusCode status;
- if (!FillTableDescription(modifyScheme, item.Scheme, status, error)) {
+ if (!FillTableDescription(modifyScheme, item.Scheme, ss->TableProfiles, status, error)) {
return nullptr;
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_info_types.cpp b/ydb/core/tx/schemeshard/schemeshard_info_types.cpp
index ee068bbfb2..5fcd1204e8 100644
--- a/ydb/core/tx/schemeshard/schemeshard_info_types.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_info_types.cpp
@@ -1557,44 +1557,6 @@ bool TTableInfo::CheckCanMergePartitions(const TSplitSettings& splitSettings,
return shardsToMerge.size() > 1;
}
-bool TTableInfo::CheckFastSplitForPartition(const TSplitSettings& splitSettings, TShardIdx shardIdx, ui64 dataSize, ui64 rowCount) const {
- // Don't split/merge backup tables
- if (IsBackup)
- return false;
-
- // Ignore stats from unknown datashard (it could have been split)
- if (!Stats.PartitionStats.contains(shardIdx))
- return false;
-
- if (!Shard2PartitionIdx.contains(shardIdx))
- return false;
-
- const ui64 MIN_ROWS_FOR_FAST_SPLIT = 1000;
- ui64 sizeThreshold = splitSettings.FastSplitSizeThreshold;
- ui64 rowCountThreshold = splitSettings.FastSplitRowCountThreshold;
- float cpuUsageThreshold = 0.01 * splitSettings.FastSplitCpuPercentageThreshold;
-
- const auto& partitionConfig = PartitionConfig();
-
- if (partitionConfig.GetPartitioningPolicy().HasFastSplitSettings()) {
- const auto& settings = partitionConfig.GetPartitioningPolicy().GetFastSplitSettings();
- sizeThreshold = settings.GetSizeThreshold();
- rowCountThreshold = settings.GetRowCountThreshold();
- cpuUsageThreshold = 0.01 * settings.GetCpuPercentageThreshold();
- }
-
- const auto& stats = *Stats.PartitionStats.FindPtr(shardIdx);
- if ((dataSize < sizeThreshold && rowCount < rowCountThreshold) ||
- rowCount < MIN_ROWS_FOR_FAST_SPLIT ||
- stats.InFlightTxCount == 0 ||
- stats.GetCurrentRawCpuUsage() < cpuUsageThreshold * 1000000)
- {
- return false;
- }
-
- return true;
-}
-
bool TTableInfo::CheckSplitByLoad(const TSplitSettings& splitSettings, TShardIdx shardIdx, ui64 dataSize, ui64 rowCount) const {
// Don't split/merge backup tables
if (IsBackup)
diff --git a/ydb/core/tx/schemeshard/schemeshard_info_types.h b/ydb/core/tx/schemeshard/schemeshard_info_types.h
index b2e6a23e92..2fc7710213 100644
--- a/ydb/core/tx/schemeshard/schemeshard_info_types.h
+++ b/ydb/core/tx/schemeshard/schemeshard_info_types.h
@@ -592,7 +592,6 @@ public:
const TForceShardSplitSettings& forceShardSplitSettings,
TShardIdx shardIdx, TVector<TShardIdx>& shardsToMerge) const;
- bool CheckFastSplitForPartition(const TSplitSettings& splitSettings, TShardIdx shardIdx, ui64 dataSize, ui64 rowCount) const;
bool CheckSplitByLoad(const TSplitSettings& splitSettings, TShardIdx shardIdx, ui64 dataSize, ui64 rowCount) const;
bool IsSplitBySizeEnabled(const TForceShardSplitSettings& params) const {
@@ -1369,14 +1368,28 @@ struct TSubDomainInfo: TSimpleRefCount<TSubDomainInfo> {
PathsInsideCount = val;
}
- void IncPathsInside(ui64 delta = 1) {
+ ui64 GetBackupPaths() const {
+ return BackupPathsCount;
+ }
+
+ void IncPathsInside(ui64 delta = 1, bool isBackup = false) {
Y_VERIFY(Max<ui64>() - PathsInsideCount >= delta);
PathsInsideCount += delta;
+
+ if (isBackup) {
+ Y_VERIFY(Max<ui64>() - BackupPathsCount >= delta);
+ BackupPathsCount += delta;
+ }
}
- void DecPathsInside(ui64 delta = 1) {
+ void DecPathsInside(ui64 delta = 1, bool isBackup = false) {
Y_VERIFY_S(PathsInsideCount >= delta, "PathsInsideCount: " << PathsInsideCount << " delta: " << delta);
PathsInsideCount -= delta;
+
+ if (isBackup) {
+ Y_VERIFY_S(BackupPathsCount >= delta, "BackupPathsCount: " << BackupPathsCount << " delta: " << delta);
+ BackupPathsCount -= delta;
+ }
}
ui64 GetPQPartitionsInside() const {
@@ -1426,6 +1439,10 @@ struct TSubDomainInfo: TSimpleRefCount<TSubDomainInfo> {
return InternalShards.size();
}
+ ui64 GetBackupShards() const {
+ return BackupShards.size();
+ }
+
void ActualizeAlterData(const THashMap<TShardIdx, TShardInfo>& allShards, TInstant now, bool isExternal, IQuotaCounters* counters) {
Y_VERIFY(AlterData);
@@ -1600,20 +1617,23 @@ struct TSubDomainInfo: TSimpleRefCount<TSubDomainInfo> {
return PrivateShards;
}
- void AddInternalShard(TShardIdx shardId) {
+ void AddInternalShard(TShardIdx shardId, bool isBackup = false) {
InternalShards.insert(shardId);
+ if (isBackup) {
+ BackupShards.insert(shardId);
+ }
}
const THashSet<TShardIdx>& GetInternalShards() const {
return InternalShards;
}
- void AddInternalShards(const TTxState& txState) {
+ void AddInternalShards(const TTxState& txState, bool isBackup = false) {
for (auto txShard: txState.Shards) {
if (txShard.Operation != TTxState::CreateParts) {
continue;
}
- AddInternalShard(txShard.Idx);
+ AddInternalShard(txShard.Idx, isBackup);
}
}
@@ -1621,6 +1641,7 @@ struct TSubDomainInfo: TSimpleRefCount<TSubDomainInfo> {
auto it = InternalShards.find(shardIdx);
Y_VERIFY_S(it != InternalShards.end(), "shardIdx: " << shardIdx);
InternalShards.erase(it);
+ BackupShards.erase(shardIdx);
}
const THashSet<TShardIdx>& GetSequenceShards() const {
@@ -1883,9 +1904,11 @@ private:
TSchemeQuotas SchemeQuotas;
ui64 PathsInsideCount = 0;
+ ui64 BackupPathsCount = 0;
TDiskSpaceUsage DiskSpaceUsage;
THashSet<TShardIdx> InternalShards;
+ THashSet<TShardIdx> BackupShards;
THashSet<TShardIdx> SequenceShards;
THashSet<TShardIdx> ReplicationControllers;
diff --git a/ydb/core/tx/schemeshard/schemeshard_path.cpp b/ydb/core/tx/schemeshard/schemeshard_path.cpp
index 1a4c6aa511..4c6f69536d 100644
--- a/ydb/core/tx/schemeshard/schemeshard_path.cpp
+++ b/ydb/core/tx/schemeshard/schemeshard_path.cpp
@@ -796,8 +796,15 @@ const TPath::TChecker& TPath::TChecker::PathsLimit(ui64 delta, TPath::TChecker::
}
TSubDomainInfo::TPtr domainInfo = Path.DomainInfo();
+ const auto pathsTotal = domainInfo->GetPathsInside();
+ const auto backupPaths = domainInfo->GetBackupPaths();
- if (!delta || domainInfo->GetPathsInside() + delta <= domainInfo->GetSchemeLimits().MaxPaths) {
+ Y_VERIFY_S(pathsTotal >= backupPaths, "Constraint violation"
+ << ": path: " << Path.PathString()
+ << ", paths total: " << pathsTotal
+ << ", backup paths: " << backupPaths);
+
+ if (!delta || (pathsTotal - backupPaths) + delta <= domainInfo->GetSchemeLimits().MaxPaths) {
return *this;
}
@@ -805,7 +812,8 @@ const TPath::TChecker& TPath::TChecker::PathsLimit(ui64 delta, TPath::TChecker::
Status = status;
Explain << "paths count has reached maximum value in the domain"
<< ", paths limit for domain: " << domainInfo->GetSchemeLimits().MaxPaths
- << ", paths count inside domain: " << domainInfo->GetPathsInside()
+ << ", paths count inside domain: " << pathsTotal
+ << ", backup paths: " << backupPaths
<< ", intention to create new paths: " << delta;
return *this;
}
@@ -816,11 +824,16 @@ const TPath::TChecker& TPath::TChecker::DirChildrenLimit(ui64 delta, TPath::TChe
}
TSubDomainInfo::TPtr domainInfo = Path.DomainInfo();
-
auto parent = Path.Parent();
- ui64 aliveChildren = parent.Base()->GetAliveChildren();
+ const auto aliveChildren = parent.Base()->GetAliveChildren();
+ const auto backupChildren = parent.Base()->GetBackupChildren();
+
+ Y_VERIFY_S(aliveChildren >= backupChildren, "Constraint violation"
+ << ": path: " << parent.PathString()
+ << ", alive children: " << aliveChildren
+ << ", backup children: " << backupChildren);
- if (!delta || aliveChildren + delta <= domainInfo->GetSchemeLimits().MaxChildrenInDir) {
+ if (!delta || (aliveChildren - backupChildren) + delta <= domainInfo->GetSchemeLimits().MaxChildrenInDir) {
return *this;
}
@@ -829,6 +842,7 @@ const TPath::TChecker& TPath::TChecker::DirChildrenLimit(ui64 delta, TPath::TChe
Explain << "children count has reached maximum value in the dir"
<< ", children limit for domain dir: " << domainInfo->GetSchemeLimits().MaxChildrenInDir
<< ", children count inside dir: " << aliveChildren
+ << ", backup children: " << backupChildren
<< ", intention to create new children: " << delta;
return *this;
}
@@ -839,8 +853,15 @@ const TPath::TChecker& TPath::TChecker::ShardsLimit(ui64 delta, TPath::TChecker:
}
TSubDomainInfo::TPtr domainInfo = Path.DomainInfo();
+ const auto shardsTotal = domainInfo->GetShardsInside();
+ const auto backupShards = domainInfo->GetBackupShards();
- if (!delta || domainInfo->GetShardsInside() + delta <= domainInfo->GetSchemeLimits().MaxShards) {
+ Y_VERIFY_S(shardsTotal >= backupShards, "Constraint violation"
+ << ": path: " << Path.PathString()
+ << ", shards total: " << shardsTotal
+ << ", backup shards: " << backupShards);
+
+ if (!delta || (shardsTotal - backupShards) + delta <= domainInfo->GetSchemeLimits().MaxShards) {
return *this;
}
@@ -848,7 +869,8 @@ const TPath::TChecker& TPath::TChecker::ShardsLimit(ui64 delta, TPath::TChecker:
Status = status;
Explain << "shards count has reached maximum value in the domain"
<< ", shards limit for domain: " << domainInfo->GetSchemeLimits().MaxShards
- << ", shards count inside domain: " << domainInfo->GetShardsInside()
+ << ", shards count inside domain: " << shardsTotal
+ << ", backup shards: " << backupShards
<< ", intention to create new shards: " << delta;
return *this;
}
@@ -1147,6 +1169,11 @@ TPath TPath::FirstExistedParent() const {
return result;
}
+TString TPath::GetDomainPathString() const {
+ // TODO: not effective because of creating vectors in Init() method. should keep subdomain path somethere in struct TSubDomainInfo
+ return Init(GetPathIdForDomain(), SS).PathString();
+}
+
TSubDomainInfo::TPtr TPath::DomainInfo() const {
Y_VERIFY(!IsEmpty());
Y_VERIFY(Elements.size());
diff --git a/ydb/core/tx/schemeshard/schemeshard_path.h b/ydb/core/tx/schemeshard/schemeshard_path.h
index 2a43e66d50..0593a0f258 100644
--- a/ydb/core/tx/schemeshard/schemeshard_path.h
+++ b/ydb/core/tx/schemeshard/schemeshard_path.h
@@ -12,6 +12,7 @@ namespace NKikimr {
namespace NSchemeShard {
class TSchemeShard;
+struct TPathElement;
class TPath {
private:
@@ -120,6 +121,7 @@ public:
TPath FirstResoledParent() const;
TPath& RiseUntilExisted();
TPath FirstExistedParent() const;
+ TString GetDomainPathString() const;
TSubDomainInfo::TPtr DomainInfo() const;
TPathId GetPathIdForDomain() const;
TPathId GetDomainKey() const;
diff --git a/ydb/core/tx/schemeshard/schemeshard_path_element.cpp b/ydb/core/tx/schemeshard/schemeshard_path_element.cpp
new file mode 100644
index 0000000000..a317287412
--- /dev/null
+++ b/ydb/core/tx/schemeshard/schemeshard_path_element.cpp
@@ -0,0 +1,366 @@
+#include "schemeshard_path_element.h"
+
+namespace NKikimr {
+namespace NSchemeShard {
+
+TPathElement::TPathElement(TPathId pathId, TPathId parentPathId, TPathId domainPathId, const TString& name, const TString& owner)
+ : PathId(pathId)
+ , ParentPathId(parentPathId)
+ , DomainPathId(domainPathId)
+ , Name(name)
+ , Owner(owner)
+ , UserAttrs(new TUserAttributes(1))
+{}
+
+ui64 TPathElement::GetAliveChildren() const {
+ return AliveChildrenCount;
+}
+
+void TPathElement::SetAliveChildren(ui64 val) {
+ AliveChildrenCount = val;
+}
+
+ui64 TPathElement::GetBackupChildren() const {
+ return BackupChildrenCount;
+}
+
+void TPathElement::IncAliveChildren(ui64 delta, bool isBackup) {
+ Y_VERIFY(Max<ui64>() - AliveChildrenCount >= delta);
+ AliveChildrenCount += delta;
+
+ if (isBackup) {
+ Y_VERIFY(Max<ui64>() - BackupChildrenCount >= delta);
+ BackupChildrenCount += delta;
+ }
+}
+
+void TPathElement::DecAliveChildren(ui64 delta, bool isBackup) {
+ Y_VERIFY(AliveChildrenCount >= delta);
+ AliveChildrenCount -= delta;
+
+ if (isBackup) {
+ Y_VERIFY(BackupChildrenCount >= delta);
+ BackupChildrenCount -= delta;
+ }
+}
+
+ui64 TPathElement::GetShardsInside() const {
+ return ShardsInsideCount;
+}
+
+void TPathElement::SetShardsInside(ui64 val) {
+ ShardsInsideCount = val;
+}
+
+void TPathElement::IncShardsInside(ui64 delta) {
+ Y_VERIFY(Max<ui64>() - ShardsInsideCount >= delta);
+ ShardsInsideCount += delta;
+}
+
+void TPathElement::DecShardsInside(ui64 delta) {
+ Y_VERIFY(ShardsInsideCount >= delta);
+ ShardsInsideCount -= delta;
+}
+
+bool TPathElement::IsRoot() const {
+ return PathId.LocalPathId == RootPathId;
+}
+
+bool TPathElement::IsDirectory() const {
+ return PathType == EPathType::EPathTypeDir;
+}
+
+bool TPathElement::IsTableIndex() const {
+ return PathType == EPathType::EPathTypeTableIndex;
+}
+
+bool TPathElement::IsCdcStream() const {
+ return PathType == EPathType::EPathTypeCdcStream;
+}
+
+bool TPathElement::IsTable() const {
+ return PathType == EPathType::EPathTypeTable;
+}
+
+bool TPathElement::IsSolomon() const {
+ return PathType == EPathType::EPathTypeSolomonVolume;
+}
+
+bool TPathElement::IsPQGroup() const {
+ return PathType == EPathType::EPathTypePersQueueGroup;
+}
+
+bool TPathElement::IsDomainRoot() const {
+ return IsSubDomainRoot() || IsExternalSubDomainRoot();
+}
+
+bool TPathElement::IsSubDomainRoot() const {
+ return PathType == EPathType::EPathTypeSubDomain || IsRoot();
+}
+
+bool TPathElement::IsExternalSubDomainRoot() const {
+ return PathType == EPathType::EPathTypeExtSubDomain;
+}
+
+bool TPathElement::IsRtmrVolume() const {
+ return PathType == EPathType::EPathTypeRtmrVolume;
+}
+
+bool TPathElement::IsBlockStoreVolume() const {
+ return PathType == EPathType::EPathTypeBlockStoreVolume;
+}
+
+bool TPathElement::IsFileStore() const {
+ return PathType == EPathType::EPathTypeFileStore;
+}
+
+bool TPathElement::IsKesus() const {
+ return PathType == EPathType::EPathTypeKesus;
+}
+
+bool TPathElement::IsOlapStore() const {
+ return PathType == EPathType::EPathTypeColumnStore;
+}
+
+bool TPathElement::IsColumnTable() const {
+ return PathType == EPathType::EPathTypeColumnTable;
+}
+
+bool TPathElement::IsSequence() const {
+ return PathType == EPathType::EPathTypeSequence;
+}
+
+bool TPathElement::IsReplication() const {
+ return PathType == EPathType::EPathTypeReplication;
+}
+
+bool TPathElement::IsBlobDepot() const {
+ return PathType == EPathType::EPathTypeBlobDepot;
+}
+
+bool TPathElement::IsContainer() const {
+ return PathType == EPathType::EPathTypeDir || PathType == EPathType::EPathTypeSubDomain
+ || PathType == EPathType::EPathTypeColumnStore;
+}
+
+bool TPathElement::IsLikeDirectory() const {
+ return IsDirectory() || IsDomainRoot() || IsOlapStore();
+}
+
+bool TPathElement::HasActiveChanges() const {
+ // there are old clusters where Root node has CreateTxId == 0
+ return (!IsRoot() && !CreateTxId) || (PathState != EPathState::EPathStateNoChanges);
+}
+
+bool TPathElement::IsCreateFinished() const {
+ return (IsRoot() && CreateTxId) || StepCreated;
+}
+
+TGlobalTimestamp TPathElement::GetCreateTS() const {
+ return TGlobalTimestamp(StepCreated, CreateTxId);
+}
+
+TGlobalTimestamp TPathElement::GetDropTS() const {
+ return TGlobalTimestamp(StepDropped, DropTxId);
+}
+
+void TPathElement::SetDropped(TStepId step, TTxId txId) {
+ PathState = EPathState::EPathStateNotExist;
+ StepDropped = step;
+ DropTxId = txId;
+}
+
+bool TPathElement::NormalState() const {
+ return PathState == EPathState::EPathStateNoChanges;
+}
+
+bool TPathElement::Dropped() const {
+ if (StepDropped) {
+ Y_VERIFY_DEBUG_S(PathState == EPathState::EPathStateNotExist,
+ "Non consistent PathState and StepDropped."
+ << " PathState: " << NKikimrSchemeOp::EPathState_Name(PathState)
+ << ", StepDropped: " << StepDropped
+ << ", PathId: " << PathId);
+ }
+ return bool(StepDropped);
+}
+
+bool TPathElement::IsMigrated() const {
+ return PathState == EPathState::EPathStateMigrated;
+}
+
+bool TPathElement::IsUnderMoving() const {
+ return PathState == EPathState::EPathStateMoving;
+}
+
+bool TPathElement::IsUnderCreating() const {
+ return PathState == EPathState::EPathStateCreate;
+}
+
+bool TPathElement::PlannedToCreate() const {
+ return PathState == EPathState::EPathStateCreate;
+}
+
+bool TPathElement::PlannedToDrop() const {
+ return PathState == EPathState::EPathStateDrop;
+}
+
+bool TPathElement::AddChild(const TString& name, TPathId pathId, bool replace) {
+ TPathId* ptr = FindChild(name);
+ if (ptr && !replace)
+ return false;
+ Children[name] = pathId;
+ return true;
+}
+
+bool TPathElement::RemoveChild(const TString& name, TPathId pathId) {
+ auto it = Children.find(name);
+ if (it != Children.end() && it->second == pathId) {
+ Children.erase(it);
+ return true;
+ }
+ return false;
+}
+
+TPathId* TPathElement::FindChild(const TString& name) {
+ return Children.FindPtr(name);
+}
+
+const TPathElement::TChildrenCont& TPathElement::GetChildren() const {
+ return Children;
+}
+
+void TPathElement::SwapChildren(TChildrenCont& container) {
+ container.swap(Children);
+}
+
+void TPathElement::ApplyACL(const TString& acl) {
+ NACLib::TACL secObj(ACL);
+ NACLib::TDiffACL diffACL(acl);
+ secObj.ApplyDiff(diffACL);
+ ACL = secObj.SerializeAsString();
+}
+
+void TPathElement::ApplySpecialAttributes() {
+ VolumeSpaceRaw.Limit = Max<ui64>();
+ VolumeSpaceSSD.Limit = Max<ui64>();
+ VolumeSpaceHDD.Limit = Max<ui64>();
+ VolumeSpaceSSDNonrepl.Limit = Max<ui64>();
+ VolumeSpaceSSDSystem.Limit = Max<ui64>();
+ ExtraPathSymbolsAllowed = TString();
+ for (const auto& item : UserAttrs->Attrs) {
+ switch (TUserAttributes::ParseName(item.first)) {
+ case EAttribute::VOLUME_SPACE_LIMIT:
+ HandleAttributeValue(item.second, VolumeSpaceRaw.Limit);
+ break;
+ case EAttribute::VOLUME_SPACE_LIMIT_SSD:
+ HandleAttributeValue(item.second, VolumeSpaceSSD.Limit);
+ break;
+ case EAttribute::VOLUME_SPACE_LIMIT_HDD:
+ HandleAttributeValue(item.second, VolumeSpaceHDD.Limit);
+ break;
+ case EAttribute::VOLUME_SPACE_LIMIT_SSD_NONREPL:
+ HandleAttributeValue(item.second, VolumeSpaceSSDNonrepl.Limit);
+ break;
+ case EAttribute::VOLUME_SPACE_LIMIT_SSD_SYSTEM:
+ HandleAttributeValue(item.second, VolumeSpaceSSDSystem.Limit);
+ break;
+ case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
+ HandleAttributeValue(item.second, ExtraPathSymbolsAllowed);
+ break;
+ case EAttribute::DOCUMENT_API_VERSION:
+ HandleAttributeValue(item.second, DocumentApiVersion);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void TPathElement::HandleAttributeValue(const TString& value, TString& target) {
+ target = value;
+}
+
+void TPathElement::HandleAttributeValue(const TString& value, ui64& target) {
+ ui64 parsed;
+ if (TryFromString(value, parsed)) {
+ target = parsed;
+ }
+}
+
+void TPathElement::ChangeVolumeSpaceBegin(TVolumeSpace newSpace, TVolumeSpace oldSpace) {
+ auto update = [](TVolumeSpaceLimits& limits, ui64 newValue, ui64 oldValue) {
+ if (newValue > oldValue) {
+ // Volume space increase is handled at tx begin
+ limits.Allocated += newValue - oldValue;
+ }
+ };
+ update(VolumeSpaceRaw, newSpace.Raw, oldSpace.Raw);
+ update(VolumeSpaceSSD, newSpace.SSD, oldSpace.SSD);
+ update(VolumeSpaceHDD, newSpace.HDD, oldSpace.HDD);
+ update(VolumeSpaceSSDNonrepl, newSpace.SSDNonrepl, oldSpace.SSDNonrepl);
+ update(VolumeSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
+}
+
+void TPathElement::ChangeVolumeSpaceCommit(TVolumeSpace newSpace, TVolumeSpace oldSpace) {
+ auto update = [](TVolumeSpaceLimits& limits, ui64 newValue, ui64 oldValue) {
+ if (newValue < oldValue) {
+ // Volume space decrease is handled at tx commit
+ ui64 diff = oldValue - newValue;
+ Y_VERIFY(limits.Allocated >= diff);
+ limits.Allocated -= diff;
+ }
+ };
+ update(VolumeSpaceRaw, newSpace.Raw, oldSpace.Raw);
+ update(VolumeSpaceSSD, newSpace.SSD, oldSpace.SSD);
+ update(VolumeSpaceHDD, newSpace.HDD, oldSpace.HDD);
+ update(VolumeSpaceSSDNonrepl, newSpace.SSDNonrepl, oldSpace.SSDNonrepl);
+ update(VolumeSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
+}
+
+bool TPathElement::CheckVolumeSpaceChange(TVolumeSpace newSpace, TVolumeSpace oldSpace, TString& errStr) {
+ auto check = [&errStr](const TVolumeSpaceLimits& limits, ui64 newValue, ui64 oldValue, const char* suffix) -> bool {
+ if (newValue > oldValue) {
+ ui64 newAllocated = limits.Allocated + newValue - oldValue;
+ if (newAllocated > limits.Limit) {
+ errStr = TStringBuilder()
+ << "New volume space is over a limit" << suffix
+ << ": " << newAllocated << " > " << limits.Limit;
+ return false;
+ }
+ }
+ return true;
+ };
+ return (check(VolumeSpaceRaw, newSpace.Raw, oldSpace.Raw, "") &&
+ check(VolumeSpaceSSD, newSpace.SSD, oldSpace.SSD, " (ssd)") &&
+ check(VolumeSpaceHDD, newSpace.HDD, oldSpace.HDD, " (hdd)") &&
+ check(VolumeSpaceSSDNonrepl, newSpace.SSDNonrepl, oldSpace.SSDNonrepl, " (ssd_nonrepl)") &&
+ check(VolumeSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem, " (ssd_system)"));
+}
+
+bool TPathElement::HasRuntimeAttrs() const {
+ return (VolumeSpaceRaw.Allocated > 0 ||
+ VolumeSpaceSSD.Allocated > 0 ||
+ VolumeSpaceHDD.Allocated > 0 ||
+ VolumeSpaceSSDNonrepl.Allocated > 0 ||
+ VolumeSpaceSSDSystem.Allocated > 0);
+}
+
+void TPathElement::SerializeRuntimeAttrs(
+ google::protobuf::RepeatedPtrField<NKikimrSchemeOp::TUserAttribute>* userAttrs) const
+{
+ auto process = [userAttrs](const TVolumeSpaceLimits& limits, const char* name) {
+ if (limits.Allocated > 0) {
+ auto* attr = userAttrs->Add();
+ attr->SetKey(name);
+ attr->SetValue(TStringBuilder() << limits.Allocated);
+ }
+ };
+ process(VolumeSpaceRaw, "__volume_space_allocated");
+ process(VolumeSpaceSSD, "__volume_space_allocated_ssd");
+ process(VolumeSpaceHDD, "__volume_space_allocated_hdd");
+ process(VolumeSpaceSSDNonrepl, "__volume_space_allocated_ssd_nonrepl");
+ process(VolumeSpaceSSDSystem, "__volume_space_allocated_ssd_system");
+}
+}
+}
diff --git a/ydb/core/tx/schemeshard/schemeshard_path_element.h b/ydb/core/tx/schemeshard/schemeshard_path_element.h
index 6fd2fbc313..9844676d02 100644
--- a/ydb/core/tx/schemeshard/schemeshard_path_element.h
+++ b/ydb/core/tx/schemeshard/schemeshard_path_element.h
@@ -16,6 +16,8 @@
namespace NKikimr {
namespace NSchemeShard {
+class TPath;
+
constexpr TStringBuf ATTR_PREFIX = "__";
constexpr TStringBuf ATTR_VOLUME_SPACE_LIMIT = "__volume_space_limit";
constexpr TStringBuf ATTR_VOLUME_SPACE_LIMIT_HDD = "__volume_space_limit_hdd";
@@ -339,356 +341,67 @@ struct TPathElement : TSimpleRefCount<TPathElement> {
private:
ui64 AliveChildrenCount = 0;
+ ui64 BackupChildrenCount = 0;
ui64 ShardsInsideCount = 0;
TChildrenCont Children;
-
public:
- TPathElement(TPathId pathId, TPathId parentPathId, TPathId domainPathId, const TString& name, const TString& owner)
- : PathId(pathId)
- , ParentPathId(parentPathId)
- , DomainPathId(domainPathId)
- , Name(name)
- , Owner(owner)
- , UserAttrs(new TUserAttributes(1))
- {}
-
- ui64 GetAliveChildren() const {
- return AliveChildrenCount;
- }
-
- void SetAliveChildren(ui64 val) {
- AliveChildrenCount = val;
- }
-
- void IncAliveChildren(ui64 delta = 1) {
- Y_VERIFY(Max<ui64>() - AliveChildrenCount >= delta);
- AliveChildrenCount += delta;
- }
-
- void DecAliveChildren(ui64 delta = 1) {
- Y_VERIFY(AliveChildrenCount >= delta);
- AliveChildrenCount -= delta;
- }
-
- ui64 GetShardsInside() const {
- return ShardsInsideCount;
- }
-
- void SetShardsInside(ui64 val) {
- ShardsInsideCount = val;
- }
-
- void IncShardsInside(ui64 delta = 1) {
- Y_VERIFY(Max<ui64>() - ShardsInsideCount >= delta);
- ShardsInsideCount += delta;
- }
-
- void DecShardsInside(ui64 delta = 1) {
- Y_VERIFY(ShardsInsideCount >= delta);
- ShardsInsideCount -= delta;
- }
-
- bool IsRoot() const {
- return PathId.LocalPathId == RootPathId;
- }
-
- bool IsDirectory() const {
- return PathType == EPathType::EPathTypeDir;
- }
-
- bool IsTableIndex() const {
- return PathType == EPathType::EPathTypeTableIndex;
- }
-
- bool IsCdcStream() const {
- return PathType == EPathType::EPathTypeCdcStream;
- }
-
- bool IsTable() const {
- return PathType == EPathType::EPathTypeTable;
- }
-
- bool IsSolomon() const {
- return PathType == EPathType::EPathTypeSolomonVolume;
- }
-
- bool IsPQGroup() const {
- return PathType == EPathType::EPathTypePersQueueGroup;
- }
-
- bool IsDomainRoot() const {
- return IsSubDomainRoot() || IsExternalSubDomainRoot();
- }
-
- bool IsSubDomainRoot() const {
- return PathType == EPathType::EPathTypeSubDomain || IsRoot();
- }
-
- bool IsExternalSubDomainRoot() const {
- return PathType == EPathType::EPathTypeExtSubDomain;
- }
-
- bool IsRtmrVolume() const {
- return PathType == EPathType::EPathTypeRtmrVolume;
- }
-
- bool IsBlockStoreVolume() const {
- return PathType == EPathType::EPathTypeBlockStoreVolume;
- }
-
- bool IsFileStore() const {
- return PathType == EPathType::EPathTypeFileStore;
- }
-
- bool IsKesus() const {
- return PathType == EPathType::EPathTypeKesus;
- }
-
- bool IsOlapStore() const {
- return PathType == EPathType::EPathTypeColumnStore;
- }
-
- bool IsColumnTable() const {
- return PathType == EPathType::EPathTypeColumnTable;
- }
-
- bool IsSequence() const {
- return PathType == EPathType::EPathTypeSequence;
- }
-
- bool IsReplication() const {
- return PathType == EPathType::EPathTypeReplication;
- }
-
- bool IsBlobDepot() const {
- return PathType == EPathType::EPathTypeBlobDepot;
- }
-
- bool IsContainer() const {
- return PathType == EPathType::EPathTypeDir || PathType == EPathType::EPathTypeSubDomain
- || PathType == EPathType::EPathTypeColumnStore;
- }
-
- bool IsLikeDirectory() const {
- return IsDirectory() || IsDomainRoot() || IsOlapStore();
- }
-
- bool HasActiveChanges() const {
- // there are old clusters where Root node has CreateTxId == 0
- return (!IsRoot() && !CreateTxId) || (PathState != EPathState::EPathStateNoChanges);
- }
-
- bool IsCreateFinished() const {
- return (IsRoot() && CreateTxId) || StepCreated;
- }
-
- TGlobalTimestamp GetCreateTS() const {
- return TGlobalTimestamp(StepCreated, CreateTxId);
- }
-
- TGlobalTimestamp GetDropTS() const {
- return TGlobalTimestamp(StepDropped, DropTxId);
- }
-
- void SetDropped(TStepId step, TTxId txId) {
- PathState = EPathState::EPathStateNotExist;
- StepDropped = step;
- DropTxId = txId;
- }
-
- bool NormalState() const {
- return PathState == EPathState::EPathStateNoChanges;
- }
-
- bool Dropped() const {
- if (StepDropped) {
- Y_VERIFY_DEBUG_S(PathState == EPathState::EPathStateNotExist,
- "Non consistent PathState and StepDropped."
- << " PathState: " << NKikimrSchemeOp::EPathState_Name(PathState)
- << ", StepDropped: " << StepDropped
- << ", PathId: " << PathId);
- }
- return bool(StepDropped);
- }
-
- bool IsMigrated() const {
- return PathState == EPathState::EPathStateMigrated;
- }
-
- bool IsUnderMoving() const {
- return PathState == EPathState::EPathStateMoving;
- }
-
- bool IsUnderCreating() const {
- return PathState == EPathState::EPathStateCreate;
- }
-
- bool PlannedToCreate() const {
- return PathState == EPathState::EPathStateCreate;
- }
-
- bool PlannedToDrop() const {
- return PathState == EPathState::EPathStateDrop;
- }
-
- bool AddChild(const TString& name, TPathId pathId, bool replace = false) {
- TPathId* ptr = FindChild(name);
- if (ptr && !replace)
- return false;
- Children[name] = pathId;
- return true;
- }
-
- bool RemoveChild(const TString& name, TPathId pathId) {
- auto it = Children.find(name);
- if (it != Children.end() && it->second == pathId) {
- Children.erase(it);
- return true;
- }
- return false;
- }
-
- TPathId* FindChild(const TString& name) {
- return Children.FindPtr(name);
- }
-
- const TChildrenCont& GetChildren() const {
- return Children;
- }
-
- void SwapChildren(TChildrenCont& container) {
- container.swap(Children);
- }
-
- void ApplyACL(const TString& acl) {
- NACLib::TACL secObj(ACL);
- NACLib::TDiffACL diffACL(acl);
- secObj.ApplyDiff(diffACL);
- ACL = secObj.SerializeAsString();
- }
-
- void ApplySpecialAttributes() {
- VolumeSpaceRaw.Limit = Max<ui64>();
- VolumeSpaceSSD.Limit = Max<ui64>();
- VolumeSpaceHDD.Limit = Max<ui64>();
- VolumeSpaceSSDNonrepl.Limit = Max<ui64>();
- VolumeSpaceSSDSystem.Limit = Max<ui64>();
- ExtraPathSymbolsAllowed = TString();
- for (const auto& item : UserAttrs->Attrs) {
- switch (TUserAttributes::ParseName(item.first)) {
- case EAttribute::VOLUME_SPACE_LIMIT:
- HandleAttributeValue(item.second, VolumeSpaceRaw.Limit);
- break;
- case EAttribute::VOLUME_SPACE_LIMIT_SSD:
- HandleAttributeValue(item.second, VolumeSpaceSSD.Limit);
- break;
- case EAttribute::VOLUME_SPACE_LIMIT_HDD:
- HandleAttributeValue(item.second, VolumeSpaceHDD.Limit);
- break;
- case EAttribute::VOLUME_SPACE_LIMIT_SSD_NONREPL:
- HandleAttributeValue(item.second, VolumeSpaceSSDNonrepl.Limit);
- break;
- case EAttribute::VOLUME_SPACE_LIMIT_SSD_SYSTEM:
- HandleAttributeValue(item.second, VolumeSpaceSSDSystem.Limit);
- break;
- case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
- HandleAttributeValue(item.second, ExtraPathSymbolsAllowed);
- break;
- case EAttribute::DOCUMENT_API_VERSION:
- HandleAttributeValue(item.second, DocumentApiVersion);
- break;
- default:
- break;
- }
- }
- }
-
- void HandleAttributeValue(const TString& value, TString& target) {
- target = value;
- }
-
- void HandleAttributeValue(const TString& value, ui64& target) {
- ui64 parsed;
- if (TryFromString(value, parsed)) {
- target = parsed;
- }
- }
-
- void ChangeVolumeSpaceBegin(TVolumeSpace newSpace, TVolumeSpace oldSpace) {
- auto update = [](TVolumeSpaceLimits& limits, ui64 newValue, ui64 oldValue) {
- if (newValue > oldValue) {
- // Volume space increase is handled at tx begin
- limits.Allocated += newValue - oldValue;
- }
- };
- update(VolumeSpaceRaw, newSpace.Raw, oldSpace.Raw);
- update(VolumeSpaceSSD, newSpace.SSD, oldSpace.SSD);
- update(VolumeSpaceHDD, newSpace.HDD, oldSpace.HDD);
- update(VolumeSpaceSSDNonrepl, newSpace.SSDNonrepl, oldSpace.SSDNonrepl);
- update(VolumeSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
- }
-
- void ChangeVolumeSpaceCommit(TVolumeSpace newSpace, TVolumeSpace oldSpace) {
- auto update = [](TVolumeSpaceLimits& limits, ui64 newValue, ui64 oldValue) {
- if (newValue < oldValue) {
- // Volume space decrease is handled at tx commit
- ui64 diff = oldValue - newValue;
- Y_VERIFY(limits.Allocated >= diff);
- limits.Allocated -= diff;
- }
- };
- update(VolumeSpaceRaw, newSpace.Raw, oldSpace.Raw);
- update(VolumeSpaceSSD, newSpace.SSD, oldSpace.SSD);
- update(VolumeSpaceHDD, newSpace.HDD, oldSpace.HDD);
- update(VolumeSpaceSSDNonrepl, newSpace.SSDNonrepl, oldSpace.SSDNonrepl);
- update(VolumeSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
- }
-
- bool CheckVolumeSpaceChange(TVolumeSpace newSpace, TVolumeSpace oldSpace, TString& errStr) {
- auto check = [&errStr](const TVolumeSpaceLimits& limits, ui64 newValue, ui64 oldValue, const char* suffix) -> bool {
- if (newValue > oldValue) {
- ui64 newAllocated = limits.Allocated + newValue - oldValue;
- if (newAllocated > limits.Limit) {
- errStr = TStringBuilder()
- << "New volume space is over a limit" << suffix
- << ": " << newAllocated << " > " << limits.Limit;
- return false;
- }
- }
- return true;
- };
- return (check(VolumeSpaceRaw, newSpace.Raw, oldSpace.Raw, "") &&
- check(VolumeSpaceSSD, newSpace.SSD, oldSpace.SSD, " (ssd)") &&
- check(VolumeSpaceHDD, newSpace.HDD, oldSpace.HDD, " (hdd)") &&
- check(VolumeSpaceSSDNonrepl, newSpace.SSDNonrepl, oldSpace.SSDNonrepl, " (ssd_nonrepl)") &&
- check(VolumeSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem, " (ssd_system)"));
- }
-
- bool HasRuntimeAttrs() const {
- return (VolumeSpaceRaw.Allocated > 0 ||
- VolumeSpaceSSD.Allocated > 0 ||
- VolumeSpaceHDD.Allocated > 0 ||
- VolumeSpaceSSDNonrepl.Allocated > 0 ||
- VolumeSpaceSSDSystem.Allocated > 0);
- }
-
- void SerializeRuntimeAttrs(
- google::protobuf::RepeatedPtrField<NKikimrSchemeOp::TUserAttribute>* userAttrs) const
- {
- auto process = [userAttrs](const TVolumeSpaceLimits& limits, const char* name) {
- if (limits.Allocated > 0) {
- auto* attr = userAttrs->Add();
- attr->SetKey(name);
- attr->SetValue(TStringBuilder() << limits.Allocated);
- }
- };
- process(VolumeSpaceRaw, "__volume_space_allocated");
- process(VolumeSpaceSSD, "__volume_space_allocated_ssd");
- process(VolumeSpaceHDD, "__volume_space_allocated_hdd");
- process(VolumeSpaceSSDNonrepl, "__volume_space_allocated_ssd_nonrepl");
- process(VolumeSpaceSSDSystem, "__volume_space_allocated_ssd_system");
- }
-
+ TPathElement(TPathId pathId, TPathId parentPathId, TPathId domainPathId, const TString& name, const TString& owner);
+ ui64 GetAliveChildren() const;
+ void SetAliveChildren(ui64 val);
+ ui64 GetBackupChildren() const;
+ void IncAliveChildren(ui64 delta = 1, bool isBackup = false);
+ void DecAliveChildren(ui64 delta = 1, bool isBackup = false);
+ ui64 GetShardsInside() const;
+ void SetShardsInside(ui64 val);
+ void IncShardsInside(ui64 delta = 1);
+ void DecShardsInside(ui64 delta = 1);
+ bool IsRoot() const;
+ bool IsDirectory() const;
+ bool IsTableIndex() const;
+ bool IsCdcStream() const;
+ bool IsTable() const;
+ bool IsSolomon() const;
+ bool IsPQGroup() const;
+ bool IsDomainRoot() const;
+ bool IsSubDomainRoot() const;
+ bool IsExternalSubDomainRoot() const;
+ bool IsRtmrVolume() const;
+ bool IsBlockStoreVolume() const;
+ bool IsFileStore() const;
+ bool IsKesus() const;
+ bool IsOlapStore() const;
+ bool IsColumnTable() const;
+ bool IsSequence() const;
+ bool IsReplication() const;
+ bool IsBlobDepot() const;
+ bool IsContainer() const;
+ bool IsLikeDirectory() const;
+ bool HasActiveChanges() const;
+ bool IsCreateFinished() const;
+ TGlobalTimestamp GetCreateTS() const;
+ TGlobalTimestamp GetDropTS() const;
+ void SetDropped(TStepId step, TTxId txId);
+ bool NormalState() const;
+ bool Dropped() const;
+ bool IsMigrated() const;
+ bool IsUnderMoving() const;
+ bool IsUnderCreating() const;
+ bool PlannedToCreate() const;
+ bool PlannedToDrop() const;
+ bool AddChild(const TString& name, TPathId pathId, bool replace = false);
+ bool RemoveChild(const TString& name, TPathId pathId);
+ TPathId* FindChild(const TString& name);
+ const TChildrenCont& GetChildren() const;
+ void SwapChildren(TChildrenCont& container);
+ void ApplyACL(const TString& acl);
+ void ApplySpecialAttributes();
+ void HandleAttributeValue(const TString& value, TString& target);
+ void HandleAttributeValue(const TString& value, ui64& target);
+ void ChangeVolumeSpaceBegin(TVolumeSpace newSpace, TVolumeSpace oldSpace);
+ void ChangeVolumeSpaceCommit(TVolumeSpace newSpace, TVolumeSpace oldSpace);
+ bool CheckVolumeSpaceChange(TVolumeSpace newSpace, TVolumeSpace oldSpace, TString& errStr);
+ bool HasRuntimeAttrs() const;
+ void SerializeRuntimeAttrs(google::protobuf::RepeatedPtrField<NKikimrSchemeOp::TUserAttribute>* userAttrs) const;
};
}
}
diff --git a/ydb/core/tx/schemeshard/schemeshard_schema.h b/ydb/core/tx/schemeshard/schemeshard_schema.h
index 53a2a48af5..fce0f91dc3 100644
--- a/ydb/core/tx/schemeshard/schemeshard_schema.h
+++ b/ydb/core/tx/schemeshard/schemeshard_schema.h
@@ -1720,6 +1720,11 @@ struct Schema : NIceDb::Schema {
static constexpr ui64 SysParam_ParentDomainEffectiveACLVersion = 8;
static constexpr ui64 SysParam_TenantInitState = 9;
static constexpr ui64 SysParam_ServerlessStorageLastBillTime = 10;
+ static constexpr ui64 SysParam_MaxIncompatibleChange = 11;
+
+ // List of incompatible changes:
+ // * Change 1: store migrated shards of local tables (e.g. after a rename) as a migrated record
+ static constexpr ui64 MaxIncompatibleChangeSupported = 1;
};
}
diff --git a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_async_index/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_backup/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_backup/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_base.cpp b/ydb/core/tx/schemeshard/ut_base.cpp
index 092492d316..970fdf1880 100644
--- a/ydb/core/tx/schemeshard/ut_base.cpp
+++ b/ydb/core/tx/schemeshard/ut_base.cpp
@@ -3488,12 +3488,44 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
TTestEnv env(runtime);
ui64 txId = 100;
+ bool splitStarted = false;
+ THashSet<ui64> deletedShardIdxs; // used to sanity check at the end of the test
+
+ runtime.SetObserverFunc([&](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) {
+ switch (ev->GetTypeRewrite()) {
+ case TEvHive::EvDeleteTabletReply:
+ for (const ui64 shardIdx : ev->Get<TEvHive::TEvDeleteTabletReply>()->Record.GetShardLocalIdx()) {
+ deletedShardIdxs.insert(shardIdx);
+ }
+ return TTestActorRuntime::EEventAction::PROCESS;
+
+ case TEvDataShard::EvGetTableStats:
+ splitStarted = true;
+ return TTestActorRuntime::EEventAction::DROP; // prevent splitting
+
+ default:
+ return TTestActorRuntime::EEventAction::PROCESS;
+ }
+ });
+
+ // these limits should have no effect on backup tables
+ TSchemeLimits limits;
+ limits.MaxPaths = 4;
+ limits.MaxShards = 4;
+ limits.MaxChildrenInDir = 3;
+ SetSchemeshardSchemaLimits(runtime, limits);
+
// create src table
TestCreateTable(runtime, ++txId, "/MyRoot", R"(
Name: "Table"
Columns { Name: "key" Type: "Uint32"}
Columns { Name: "value" Type: "Utf8"}
KeyColumnNames: ["key"]
+ PartitionConfig {
+ PartitioningPolicy {
+ SizeToSplit: 100
+ }
+ }
)");
env.TestWaitNotification(runtime, txId);
@@ -3527,6 +3559,94 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
NLs::IsBackupTable(true),
});
+ // write some data...
+ for (ui32 i = 0; i < 100; ++i) {
+ const auto query = Sprintf(R"(
+ (
+ (let key '('('key (Uint32 '%u)) ) )
+ (let value '('('value (Utf8 'foobar)) ) )
+ (return (AsList (UpdateRow '__user__Table key value) ))
+ )
+ )", i);
+ NKikimrMiniKQL::TResult result;
+ TString err;
+ const auto status = LocalMiniKQL(runtime, TTestTxConfig::FakeHiveTablets, query, result, err);
+ UNIT_ASSERT_VALUES_EQUAL(status, NKikimrProto::EReplyStatus::OK);
+ }
+
+ // ... and wait for the split to start
+ if (!splitStarted) {
+ TDispatchOptions opts;
+ opts.FinalEvents.emplace_back([&splitStarted](IEventHandle&) {
+ return splitStarted;
+ });
+ runtime.DispatchEvents(opts);
+ }
+
+ // negative tests
+
+ // shards limit
+ TestCreateTable(runtime, ++txId, "/MyRoot", R"(
+ Name: "Table2"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ UniformPartitionsCount: 4
+ )", {NKikimrScheme::StatusResourceExhausted});
+
+ // ok
+ TestCreateTable(runtime, ++txId, "/MyRoot", R"(
+ Name: "Table2"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ TestMkDir(runtime, ++txId, "/MyRoot", "Dir");
+ env.TestWaitNotification(runtime, txId);
+
+ // children limit
+ TestCreateTable(runtime, ++txId, "/MyRoot", R"(
+ Name: "Table3"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ )", {NKikimrScheme::StatusResourceExhausted});
+
+ // ok
+ TestCreateTable(runtime, ++txId, "/MyRoot/Dir", R"(
+ Name: "Table3"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ // paths limit
+ TestCreateTable(runtime, ++txId, "/MyRoot/Dir", R"(
+ Name: "Table4"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ )", {NKikimrScheme::StatusResourceExhausted});
+
+ // free quota
+ TestDropTable(runtime, ++txId, "/MyRoot", "Table2");
+ env.TestWaitNotification(runtime, txId);
+
+ // ok
+ TestCreateTable(runtime, ++txId, "/MyRoot/Dir", R"(
+ Name: "Table4"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ // reset limits to default
+ SetSchemeshardSchemaLimits(runtime, TSchemeLimits());
+
// cannot create new table with 'IsBackup'
TestCreateTable(runtime, ++txId, "/MyRoot", R"(
Name: "TableForBackup"
@@ -3573,6 +3693,82 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
IsBackup: false
DropColumns { Name: "value" }
)", {NKikimrScheme::StatusInvalidParameter});
+
+ // sanity check
+
+ // drop all tables
+ TVector<ui64> dropTxIds;
+ for (const auto& table : {"Table", "CopyTable", "ConsistentCopyTable"}) {
+ TestDropTable(runtime, dropTxIds.emplace_back(++txId), "/MyRoot", table);
+ }
+ for (const auto& table : {"Table3", "Table4"}) {
+ TestDropTable(runtime, dropTxIds.emplace_back(++txId), "/MyRoot/Dir", table);
+ }
+ // Table2 has already been dropped
+ env.TestWaitNotification(runtime, dropTxIds);
+
+ if (deletedShardIdxs.size() != 6) { // 6 tables with one shard each
+ TDispatchOptions opts;
+ opts.FinalEvents.emplace_back([&deletedShardIdxs](IEventHandle&) {
+ return deletedShardIdxs.size() == 6;
+ });
+ runtime.DispatchEvents(opts);
+ }
+
+ // ok
+ TestCreateTable(runtime, ++txId, "/MyRoot", R"(
+ Name: "Table"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ )");
+ env.TestWaitNotification(runtime, txId);
+ }
+
+ Y_UNIT_TEST(CreateIndexedTableAfterBackup) {
+ TTestBasicRuntime runtime;
+ TTestEnv env(runtime);
+ ui64 txId = 100;
+
+ TSchemeLimits limits;
+ limits.MaxShards = 3; // for table + table + index
+ SetSchemeshardSchemaLimits(runtime, limits);
+
+ TestCreateTable(runtime, ++txId, "/MyRoot", R"(
+ Name: "Table"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ PartitionConfig {
+ PartitioningPolicy {
+ SizeToSplit: 100
+ }
+ }
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ for (int i = 1; i <= 2; ++i) {
+ TestCreateTable(runtime, ++txId, "/MyRoot", Sprintf(R"(
+ Name: "CopyTable%i"
+ CopyFromTable: "/MyRoot/Table"
+ IsBackup: true
+ )", i));
+ env.TestWaitNotification(runtime, txId);
+ }
+
+ TestCreateIndexedTable(runtime, ++txId, "/MyRoot", R"(
+ TableDescription {
+ Name: "Table2"
+ Columns { Name: "key" Type: "Uint32"}
+ Columns { Name: "value" Type: "Utf8"}
+ KeyColumnNames: ["key"]
+ }
+ IndexDescription {
+ Name: "UserDefinedIndexByValue"
+ KeyColumnNames: ["value"]
+ }
+ )");
+ env.TestWaitNotification(runtime, txId);
}
Y_UNIT_TEST(AlterTableAndConcurrentSplit) { //+
@@ -6261,6 +6457,74 @@ Y_UNIT_TEST_SUITE(TSchemeShardTest) {
)", {NKikimrScheme::StatusInvalidParameter});
}
+ Y_UNIT_TEST(TopicMeteringMode) {
+ TTestBasicRuntime runtime;
+ TTestEnv env(runtime);
+ ui64 txId = 100;
+
+ TestCreatePQGroup(runtime, ++txId, "/MyRoot", R"(
+ Name: "Topic1"
+ TotalGroupCount: 1
+ PartitionPerTablet: 1
+ PQTabletConfig {
+ PartitionConfig { LifetimeSeconds: 10 }
+ MeteringMode: METERING_MODE_REQUEST_UNITS
+ }
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ TestDescribeResult(
+ DescribePath(runtime, "/MyRoot/Topic1"), {
+ NLs::PathExist,
+ NLs::Finished, [=] (const NKikimrScheme::TEvDescribeSchemeResult& record) {
+ const auto& config = record.GetPathDescription().GetPersQueueGroup().GetPQTabletConfig();
+ UNIT_ASSERT(config.HasMeteringMode());
+ UNIT_ASSERT(config.GetMeteringMode() == NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS);
+ }
+ }
+ );
+
+ TestAlterPQGroup(runtime, ++txId, "/MyRoot", R"(
+ Name: "Topic1"
+ PQTabletConfig {
+ PartitionConfig { LifetimeSeconds: 10 }
+ MeteringMode: METERING_MODE_RESERVED_CAPACITY
+ }
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ TestDescribeResult(
+ DescribePath(runtime, "/MyRoot/Topic1"), {
+ NLs::PathExist,
+ NLs::Finished, [=] (const NKikimrScheme::TEvDescribeSchemeResult& record) {
+ const auto& config = record.GetPathDescription().GetPersQueueGroup().GetPQTabletConfig();
+ UNIT_ASSERT(config.HasMeteringMode());
+ UNIT_ASSERT(config.GetMeteringMode() == NKikimrPQ::TPQTabletConfig::METERING_MODE_RESERVED_CAPACITY);
+ }
+ }
+ );
+
+ TestCreatePQGroup(runtime, ++txId, "/MyRoot", R"(
+ Name: "Topic2"
+ TotalGroupCount: 1
+ PartitionPerTablet: 1
+ PQTabletConfig {
+ PartitionConfig { LifetimeSeconds: 10 }
+ }
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ TestDescribeResult(
+ DescribePath(runtime, "/MyRoot/Topic2"), {
+ NLs::PathExist,
+ NLs::Finished, [=] (const NKikimrScheme::TEvDescribeSchemeResult& record) {
+ const auto& config = record.GetPathDescription().GetPersQueueGroup().GetPQTabletConfig();
+ UNIT_ASSERT(!config.HasMeteringMode());
+ }
+ }
+ );
+ }
+
Y_UNIT_TEST(DropTable) { //+
TTestBasicRuntime runtime;
TTestEnv env(runtime);
diff --git a/ydb/core/tx/schemeshard/ut_base/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_base/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_base/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_base/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_base_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_bsvolume/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_bsvolume_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream.cpp b/ydb/core/tx/schemeshard/ut_cdc_stream.cpp
index 24a67186b9..8725a18e59 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream.cpp
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream.cpp
@@ -1,6 +1,8 @@
+#include <ydb/core/metering/metering.h>
#include <ydb/core/tx/schemeshard/ut_helpers/helpers.h>
#include <ydb/core/tx/schemeshard/schemeshard_impl.h>
+#include <library/cpp/json/json_reader.h>
#include <util/string/printf.h>
using namespace NKikimr;
@@ -143,6 +145,29 @@ Y_UNIT_TEST_SUITE(TCdcStreamTests) {
)", {NKikimrScheme::StatusNameConflict});
}
+ Y_UNIT_TEST(DisableProtoSourceIdInfo) {
+ TTestBasicRuntime runtime;
+ TTestEnv env(runtime, TTestEnvOptions().EnableProtoSourceIdInfo(false));
+ ui64 txId = 100;
+
+ TestCreateTable(runtime, ++txId, "/MyRoot", R"(
+ Name: "Table"
+ Columns { Name: "key" Type: "Uint64" }
+ Columns { Name: "value" Type: "Uint64" }
+ KeyColumnNames: ["key"]
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ TestCreateCdcStream(runtime, ++txId, "/MyRoot", R"(
+ TableName: "Table"
+ StreamDescription {
+ Name: "Stream"
+ Mode: ECdcStreamModeKeysOnly
+ Format: ECdcStreamFormatProto
+ }
+ )", {NKikimrScheme::StatusPreconditionFailed});
+ }
+
Y_UNIT_TEST(CreateStream) {
TTestBasicRuntime runtime;
TTestEnv env(runtime, TTestEnvOptions().EnableProtoSourceIdInfo(true));
@@ -532,6 +557,8 @@ Y_UNIT_TEST_SUITE(TCdcStreamTests) {
limits.MaxTableCdcStreams = 2;
SetSchemeshardSchemaLimits(runtime, limits);
+ ui32 nStreams = 0;
+
for (ui32 i = 0; i <= limits.MaxTableCdcStreams; ++i) {
const auto status = i < limits.MaxTableCdcStreams
? NKikimrScheme::StatusAccepted
@@ -546,6 +573,10 @@ Y_UNIT_TEST_SUITE(TCdcStreamTests) {
}
)", i), {status});
env.TestWaitNotification(runtime, txId);
+
+ if (status == NKikimrScheme::StatusAccepted) {
+ nStreams++;
+ }
}
limits.MaxChildrenInDir = limits.MaxTableCdcStreams + 1 + 1 /* for index */;
@@ -566,6 +597,30 @@ Y_UNIT_TEST_SUITE(TCdcStreamTests) {
}
)", i), {status});
env.TestWaitNotification(runtime, txId);
+
+ if (status == NKikimrScheme::StatusAccepted) {
+ nStreams++;
+ }
+ }
+
+ limits = TSchemeLimits();
+ limits.MaxPQPartitions = 3;
+ SetSchemeshardSchemaLimits(runtime, limits);
+
+ for (ui32 i = nStreams; i <= limits.MaxPQPartitions; ++i) {
+ const auto status = i < limits.MaxPQPartitions
+ ? NKikimrScheme::StatusAccepted
+ : NKikimrScheme::StatusResourceExhausted;
+
+ TestCreateCdcStream(runtime, ++txId, "/MyRoot", Sprintf(R"(
+ TableName: "Table"
+ StreamDescription {
+ Name: "Stream%u"
+ Mode: ECdcStreamModeKeysOnly
+ Format: ECdcStreamFormatProto
+ }
+ )", i), {status});
+ env.TestWaitNotification(runtime, txId);
}
}
@@ -602,4 +657,140 @@ Y_UNIT_TEST_SUITE(TCdcStreamTests) {
env.TestWaitNotification(runtime, txId);
}
+ void Metering(bool serverless) {
+ TTestBasicRuntime runtime;
+ TTestEnv env(runtime, TTestEnvOptions()
+ .EnableProtoSourceIdInfo(true)
+ .EnablePqBilling(serverless));
+ ui64 txId = 100;
+
+ // create shared db
+ TestCreateExtSubDomain(runtime, ++txId, "/MyRoot", R"(
+ Name: "Shared"
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ TestAlterExtSubDomain(runtime, ++txId, "/MyRoot", R"(
+ Name: "Shared"
+ StoragePools {
+ Name: "pool-1"
+ Kind: "pool-kind-1"
+ }
+ StoragePools {
+ Name: "pool-2"
+ Kind: "pool-kind-2"
+ }
+ PlanResolution: 50
+ Coordinators: 1
+ Mediators: 1
+ TimeCastBucketsPerMediator: 2
+ ExternalSchemeShard: true
+ ExternalHive: false
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ // create serverless db
+ TestCreateExtSubDomain(runtime, ++txId, "/MyRoot", Sprintf(R"(
+ Name: "Serverless"
+ ResourcesDomainKey {
+ SchemeShard: %lu
+ PathId: 2
+ }
+ )", TTestTxConfig::SchemeShard));
+ env.TestWaitNotification(runtime, txId);
+
+ TestAlterExtSubDomain(runtime, ++txId, "/MyRoot", R"(
+ Name: "Serverless"
+ StoragePools {
+ Name: "pool-1"
+ Kind: "pool-kind-1"
+ }
+ PlanResolution: 50
+ Coordinators: 1
+ Mediators: 1
+ TimeCastBucketsPerMediator: 2
+ ExternalSchemeShard: true
+ ExternalHive: false
+ )");
+ env.TestWaitNotification(runtime, txId);
+
+ TString dbName;
+ if (serverless) {
+ dbName = "/MyRoot/Serverless";
+ } else {
+ dbName = "/MyRoot/Shared";
+ }
+
+ ui64 schemeShard = 0;
+ TestDescribeResult(DescribePath(runtime, dbName), {
+ NLs::PathExist,
+ NLs::ExtractTenantSchemeshard(&schemeShard)
+ });
+
+ UNIT_ASSERT(schemeShard != 0 && schemeShard != TTestTxConfig::SchemeShard);
+
+ TestCreateTable(runtime, schemeShard, ++txId, dbName, R"(
+ Name: "Table"
+ Columns { Name: "key" Type: "Uint64" }
+ Columns { Name: "value" Type: "Uint64" }
+ KeyColumnNames: ["key"]
+ UniformPartitionsCount: 2
+ )");
+ env.TestWaitNotification(runtime, txId, schemeShard);
+
+ runtime.SetLogPriority(NKikimrServices::PERSQUEUE, NLog::PRI_NOTICE);
+ TVector<TString> meteringRecords;
+ runtime.SetObserverFunc([&meteringRecords](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) {
+ if (ev->GetTypeRewrite() != NMetering::TEvMetering::EvWriteMeteringJson) {
+ return TTestActorRuntime::EEventAction::PROCESS;
+ }
+
+ meteringRecords.push_back(ev->Get<NMetering::TEvMetering::TEvWriteMeteringJson>()->MeteringJson);
+ return TTestActorRuntime::EEventAction::PROCESS;
+ });
+
+ TestCreateCdcStream(runtime, schemeShard, ++txId, dbName, R"(
+ TableName: "Table"
+ StreamDescription {
+ Name: "Stream"
+ Mode: ECdcStreamModeKeysOnly
+ Format: ECdcStreamFormatProto
+ }
+ )");
+ env.TestWaitNotification(runtime, txId, schemeShard);
+
+ for (int i = 0; i < 10; ++i) {
+ env.SimulateSleep(runtime, TDuration::Seconds(10));
+ }
+
+ for (const auto& rec : meteringRecords) {
+ Cerr << "GOT METERING: " << rec << "\n";
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(meteringRecords.size(), (serverless ? 3 : 0));
+
+ if (!meteringRecords) {
+ return;
+ }
+
+ NJson::TJsonValue json;
+ NJson::ReadJsonTree(meteringRecords[0], &json, true);
+ auto& map = json.GetMap();
+ UNIT_ASSERT(map.contains("schema"));
+ UNIT_ASSERT(map.contains("resource_id"));
+ UNIT_ASSERT(map.contains("tags"));
+ UNIT_ASSERT(map.find("tags")->second.GetMap().contains("ydb_size"));
+ UNIT_ASSERT_VALUES_EQUAL(map.find("schema")->second.GetString(), "ydb.serverless.v1");
+ UNIT_ASSERT_VALUES_EQUAL(map.find("resource_id")->second.GetString(), Sprintf("%s/Table/Stream/streamImpl", dbName.c_str()));
+ UNIT_ASSERT_VALUES_EQUAL(map.find("tags")->second.GetMap().find("ydb_size")->second.GetInteger(), 0);
+ }
+
+ Y_UNIT_TEST(MeteringServerless) {
+ Metering(true);
+ }
+
+ Y_UNIT_TEST(MeteringDedicated) {
+ Metering(false);
+ }
+
} // TCdcStreamTests
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt
index 6d46152995..1af32c3571 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.darwin.txt
@@ -22,6 +22,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream PUBLIC
core-tx-schemeshard
ydb-core-testlib
tx-schemeshard-ut_helpers
+ library-cpp-json
)
target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt
index b34c54fb45..7a6f682acd 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.linux.txt
@@ -24,6 +24,7 @@ target_link_libraries(ydb-core-tx-schemeshard-ut_cdc_stream PUBLIC
core-tx-schemeshard
ydb-core-testlib
tx-schemeshard-ut_helpers
+ library-cpp-json
)
target_link_options(ydb-core-tx-schemeshard-ut_cdc_stream PRIVATE
-ldl
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_cdc_stream_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_compaction.cpp b/ydb/core/tx/schemeshard/ut_compaction.cpp
index 6cec84ff8c..f80f73621e 100644
--- a/ydb/core/tx/schemeshard/ut_compaction.cpp
+++ b/ydb/core/tx/schemeshard/ut_compaction.cpp
@@ -128,19 +128,6 @@ void CreateTableWithData(
WriteData(runtime, name, 0, 100);
}
-void SetConfig(
- TTestActorRuntime &runtime,
- ui64 schemeShard,
- THolder<NConsole::TEvConsole::TEvConfigNotificationRequest> request)
-{
- auto sender = runtime.AllocateEdgeActor();
-
- runtime.SendToPipe(schemeShard, sender, request.Release(), 0, GetPipeConfigWithRetries());
-
- TAutoPtr<IEventHandle> handle;
- runtime.GrabEdgeEventRethrow<NConsole::TEvConsole::TEvConfigNotificationResponse>(handle);
-}
-
THolder<NConsole::TEvConsole::TEvConfigNotificationRequest> GetTestCompactionConfig() {
auto request = MakeHolder<NConsole::TEvConsole::TEvConfigNotificationRequest>();
diff --git a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_compaction/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_export.cpp b/ydb/core/tx/schemeshard/ut_export.cpp
index 952063bd8a..114fd9ab9e 100644
--- a/ydb/core/tx/schemeshard/ut_export.cpp
+++ b/ydb/core/tx/schemeshard/ut_export.cpp
@@ -248,6 +248,99 @@ Y_UNIT_TEST_SUITE(TExportToS3Tests) {
)");
}
+ Y_UNIT_TEST(ShouldOmitNonStrictStorageSettings) {
+ TPortManager portManager;
+ const ui16 port = portManager.GetPort();
+
+ TS3Mock s3Mock({}, TS3Mock::TSettings(port));
+ UNIT_ASSERT(s3Mock.Start());
+
+ TTestBasicRuntime runtime;
+ TTestEnv env(runtime);
+
+ TString scheme;
+ runtime.SetObserverFunc([&scheme](TTestActorRuntimeBase&, TAutoPtr<IEventHandle>& ev) {
+ if (!scheme && ev->GetTypeRewrite() == NWrappers::TEvS3Wrapper::EvPutObjectRequest) {
+ const auto* msg = ev->Get<NWrappers::TEvS3Wrapper::TEvPutObjectRequest>();
+ scheme = msg->Body;
+ }
+
+ return TTestActorRuntime::EEventAction::PROCESS;
+ });
+
+ const TVector<TString> tables = {R"(
+ Name: "Table"
+ Columns { Name: "key" Type: "Utf8" }
+ Columns { Name: "value" Type: "Utf8" }
+ KeyColumnNames: ["key"]
+ PartitionConfig {
+ ColumnFamilies {
+ Id: 0
+ StorageConfig {
+ SysLog {
+ PreferredPoolKind: "hdd-1"
+ AllowOtherKinds: true
+ }
+ Log {
+ PreferredPoolKind: "hdd-1"
+ AllowOtherKinds: true
+ }
+ Data {
+ PreferredPoolKind: "hdd-1"
+ AllowOtherKinds: true
+ }
+ }
+ }
+ }
+ )"};
+
+ Run(runtime, env, tables, Sprintf(R"(
+ ExportToS3Settings {
+ endpoint: "localhost:%d"
+ scheme: HTTP
+ items {
+ source_path: "/MyRoot/Table"
+ destination_prefix: ""
+ }
+ }
+ )", port));
+
+ UNIT_ASSERT_NO_DIFF(scheme, R"(columns {
+ name: "key"
+ type {
+ optional_type {
+ item {
+ type_id: UTF8
+ }
+ }
+ }
+}
+columns {
+ name: "value"
+ type {
+ optional_type {
+ item {
+ type_id: UTF8
+ }
+ }
+ }
+}
+primary_key: "key"
+storage_settings {
+ store_external_blobs: DISABLED
+}
+column_families {
+ name: "default"
+ compression: COMPRESSION_NONE
+}
+partitioning_settings {
+ partitioning_by_size: DISABLED
+ partitioning_by_load: DISABLED
+ min_partitions_count: 1
+}
+)");
+ }
+
void CancelShouldSucceed(TDelayFunc delayFunc) {
TPortManager portManager;
const ui16 port = portManager.GetPort();
diff --git a/ydb/core/tx/schemeshard/ut_export/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_export/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_export/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_export/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_export_reboots_s3/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_extsubdomain/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_extsubdomain_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_filestore_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_helpers/helpers.cpp b/ydb/core/tx/schemeshard/ut_helpers/helpers.cpp
index 37d8562be7..66d2b93f43 100644
--- a/ydb/core/tx/schemeshard/ut_helpers/helpers.cpp
+++ b/ydb/core/tx/schemeshard/ut_helpers/helpers.cpp
@@ -21,6 +21,19 @@
namespace NSchemeShardUT_Private {
using namespace NKikimr;
+ void SetConfig(
+ TTestActorRuntime &runtime,
+ ui64 schemeShard,
+ THolder<NConsole::TEvConsole::TEvConfigNotificationRequest> request)
+ {
+ auto sender = runtime.AllocateEdgeActor();
+
+ runtime.SendToPipe(schemeShard, sender, request.Release(), 0, GetPipeConfigWithRetries());
+
+ TAutoPtr<IEventHandle> handle;
+ runtime.GrabEdgeEventRethrow<NConsole::TEvConsole::TEvConfigNotificationResponse>(handle);
+ }
+
template <typename TEvResponse, typename TEvRequest, typename TStatus>
static ui32 ReliableProposeImpl(
NActors::TTestActorRuntime& runtime, const TActorId& proposer,
@@ -2006,7 +2019,8 @@ namespace NSchemeShardUT_Private {
keyIdx = ki;
}
}
- table.Columns.insert(std::make_pair(c.GetName(), TColumn{c.GetId(), keyIdx, c.GetTypeId(), 0}));
+ table.Columns.insert(std::make_pair(c.GetName(), TColumn{c.GetId(), keyIdx, c.GetTypeId(), 0,
+ EColumnTypeConstraint::Nullable}));
}
dbSchemeResolver.AddTable(table);
};
diff --git a/ydb/core/tx/schemeshard/ut_helpers/helpers.h b/ydb/core/tx/schemeshard/ut_helpers/helpers.h
index e3015f9ca5..78701f59a7 100644
--- a/ydb/core/tx/schemeshard/ut_helpers/helpers.h
+++ b/ydb/core/tx/schemeshard/ut_helpers/helpers.h
@@ -14,6 +14,8 @@
#include <ydb/core/tx/schemeshard/schemeshard_export.h>
#include <ydb/core/tx/schemeshard/schemeshard_import.h>
#include <ydb/core/tx/schemeshard/schemeshard_types.h>
+#include <ydb/core/cms/console/console.h>
+
#include <ydb/library/yql/minikql/mkql_alloc.h>
#include <ydb/library/yql/minikql/mkql_node_serialization.h>
@@ -33,6 +35,11 @@ namespace NSchemeShardUT_Private {
using TEvTx = TEvSchemeShard::TEvModifySchemeTransaction;
+ void SetConfig(
+ TTestActorRuntime &runtime,
+ ui64 schemeShard,
+ THolder<NConsole::TEvConsole::TEvConfigNotificationRequest> request);
+
////////// tablet
NKikimrProto::EReplyStatus LocalMiniKQL(TTestActorRuntime& runtime, ui64 tabletId, const TString& query, NKikimrMiniKQL::TResult& result, TString& err);
NKikimrMiniKQL::TResult LocalMiniKQL(TTestActorRuntime& runtime, ui64 tabletId, const TString& query);
diff --git a/ydb/core/tx/schemeshard/ut_helpers/test_env.cpp b/ydb/core/tx/schemeshard/ut_helpers/test_env.cpp
index 87c526d64d..146bb9f10d 100644
--- a/ydb/core/tx/schemeshard/ut_helpers/test_env.cpp
+++ b/ydb/core/tx/schemeshard/ut_helpers/test_env.cpp
@@ -503,8 +503,10 @@ NSchemeShardUT_Private::TTestEnv::TTestEnv(TTestActorRuntime& runtime, const TTe
app.SetEnableNotNullColumns(opts.EnableNotNullColumns_);
app.SetEnableOlapSchemaOperations(opts.EnableOlapSchemaOperations_);
app.SetEnableProtoSourceIdInfo(opts.EnableProtoSourceIdInfo_);
+ app.SetEnablePqBilling(opts.EnablePqBilling_);
app.SetEnableBackgroundCompaction(opts.EnableBackgroundCompaction_);
app.FeatureFlags.SetEnablePublicApiExternalBlobs(true);
+ app.SetEnableMoveIndex(opts.EnableMoveIndex_);
if (opts.DisableStatsBatching_.value_or(false)) {
app.SchemeShardConfig.SetStatsMaxBatchSize(0);
@@ -1012,5 +1014,7 @@ NSchemeShardUT_Private::TTestEnvOptions NSchemeShardUT_Private::TTestWithReboots
.EnablePipeRetries(false)
.EnableAsyncIndexes(true)
.EnableNotNullColumns(true)
- .EnableProtoSourceIdInfo(true);
+ .EnableProtoSourceIdInfo(true)
+ .DisableStatsBatching(true)
+ .EnableMoveIndex(true);
}
diff --git a/ydb/core/tx/schemeshard/ut_helpers/test_env.h b/ydb/core/tx/schemeshard/ut_helpers/test_env.h
index 9611ece55d..32f52930a8 100644
--- a/ydb/core/tx/schemeshard/ut_helpers/test_env.h
+++ b/ydb/core/tx/schemeshard/ut_helpers/test_env.h
@@ -40,9 +40,11 @@ namespace NSchemeShardUT_Private {
OPTION(std::optional<bool>, EnableNotNullColumns, std::nullopt);
OPTION(std::optional<bool>, EnableOlapSchemaOperations, std::nullopt);
OPTION(std::optional<bool>, EnableProtoSourceIdInfo, std::nullopt);
+ OPTION(std::optional<bool>, EnablePqBilling, std::nullopt);
OPTION(std::optional<bool>, EnableBackgroundCompaction, std::nullopt);
OPTION(std::optional<bool>, DisableStatsBatching, std::nullopt);
OPTION(THashSet<TString>, SystemBackupSIDs, {});
+ OPTION(std::optional<bool>, EnableMoveIndex, std::nullopt);
#undef OPTION
};
diff --git a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_index_build/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_index_build_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_login/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_login/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_login/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_login/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_move.cpp b/ydb/core/tx/schemeshard/ut_move.cpp
index 6007936f6e..6568c096cc 100644
--- a/ydb/core/tx/schemeshard/ut_move.cpp
+++ b/ydb/core/tx/schemeshard/ut_move.cpp
@@ -12,6 +12,15 @@ using namespace NKikimr;
using namespace NSchemeShard;
using namespace NSchemeShardUT_Private;
+void SetEnableMoveIndex(TTestActorRuntime &runtime, TTestEnv&, ui64 schemeShard, bool value) {
+ auto request = MakeHolder<NConsole::TEvConsole::TEvConfigNotificationRequest>();
+
+ NKikimrConfig::TFeatureFlags features;
+ features.SetEnableMoveIndex(value);
+ *request->Record.MutableConfig()->MutableFeatureFlags() = features;
+ SetConfig(runtime, schemeShard, std::move(request));
+}
+
Y_UNIT_TEST_SUITE(TSchemeShardMoveTest) {
Y_UNIT_TEST(Boot) {
TTestBasicRuntime runtime;
@@ -766,6 +775,11 @@ Y_UNIT_TEST_SUITE(TSchemeShardMoveTest) {
NLs::CheckColumns("Table", {"key", "value0", "value1", "valueFloat"}, {}, {"key"}),
NLs::IndexesCount(2)});
+ TestMoveIndex(runtime, ++txId, "/MyRoot/Table", "Sync", "MovedSync", false, {NKikimrScheme::StatusPreconditionFailed});
+ env.TestWaitNotification(runtime, txId);
+
+ SetEnableMoveIndex(runtime, env, TTestTxConfig::SchemeShard, true);
+
TestMoveIndex(runtime, ++txId, "/MyRoot/Table", "Sync", "MovedSync", false);
env.TestWaitNotification(runtime, txId);
@@ -799,7 +813,8 @@ Y_UNIT_TEST_SUITE(TSchemeShardMoveTest) {
TTestBasicRuntime runtime;
TTestEnv env(runtime,
TTestEnvOptions()
- .EnableAsyncIndexes(true));
+ .EnableAsyncIndexes(true)
+ .EnableMoveIndex(true));
ui64 txId = 100;
TestCreateIndexedTable(runtime, ++txId, "/MyRoot", R"(
@@ -866,7 +881,8 @@ Y_UNIT_TEST_SUITE(TSchemeShardMoveTest) {
TTestBasicRuntime runtime;
TTestEnv env(runtime,
TTestEnvOptions()
- .EnableAsyncIndexes(true));
+ .EnableAsyncIndexes(true)
+ .EnableMoveIndex(true));
ui64 txId = 100;
TestCreateIndexedTable(runtime, ++txId, "/MyRoot", R"(
@@ -933,7 +949,8 @@ Y_UNIT_TEST_SUITE(TSchemeShardMoveTest) {
TTestBasicRuntime runtime;
TTestEnv env(runtime,
TTestEnvOptions()
- .EnableAsyncIndexes(true));
+ .EnableAsyncIndexes(true)
+ .EnableMoveIndex(true));
ui64 txId = 100;
TestCreateIndexedTable(runtime, ++txId, "/MyRoot", R"(
diff --git a/ydb/core/tx/schemeshard/ut_move/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_move/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_move/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_move/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_move_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_olap/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_olap/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_olap_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_pq/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_pq/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_pq/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_pq_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_replication/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_replication/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_replication_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_restore.cpp b/ydb/core/tx/schemeshard/ut_restore.cpp
index 42272ebe11..422f4cb6a8 100644
--- a/ydb/core/tx/schemeshard/ut_restore.cpp
+++ b/ydb/core/tx/schemeshard/ut_restore.cpp
@@ -269,19 +269,20 @@ namespace {
NKikimrMiniKQL::TResult ReadTable(TTestActorRuntime& runtime, ui64 tabletId,
const TString& table = "Table",
const TReadKeyDesc& keyDesc = {"key", "Utf8", "\"\""},
- const TVector<TString>& columns = {"key", "value"}) {
+ const TVector<TString>& columns = {"key", "value"},
+ const TString& rangeFlags = "") {
const auto rangeFmt = Sprintf("'%s (%s '%s)", keyDesc.Name.data(), keyDesc.Type.data(), keyDesc.Atom.data());
const auto columnsFmt = "'" + JoinSeq(" '", columns);
return ReadTableImpl(runtime, tabletId, Sprintf(R"(
(
- (let range '( '(%s (Void) )))
+ (let range '(%s '(%s (Void) )))
(let columns '(%s) )
(let result (SelectRange '__user__%s range columns '()))
(return (AsList (SetResult 'Result result) ))
)
- )", rangeFmt.data(), columnsFmt.data(), table.data()));
+ )", rangeFlags.c_str(), rangeFmt.data(), columnsFmt.data(), table.data()));
}
using TDelayFunc = std::function<bool(TAutoPtr<IEventHandle>&)>;
@@ -1592,7 +1593,7 @@ Y_UNIT_TEST_SUITE(TImportTests) {
for (ui32 i = 0; i < indexes; ++i) {
auto content = ReadTable(runtime, TTestTxConfig::FakeHiveTablets + 1 + i,
- "indexImplTable", {"value", "Utf8", "\"\""}, {"value", "key"});
+ "indexImplTable", {"value", "Utf8", "\"\""}, {"value", "key"}, "'ExcFrom");
NKqp::CompareYson(data.Data[0].YsonStr, content);
}
}
diff --git a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_restore/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_restore/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_rtmr/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_rtmr_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_ru_calculator/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_sequence/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_sequence_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_serverless/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_split_merge/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_split_merge_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_stats/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_stats/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_subdomain/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_subdomain_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_ttl/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_user_attributes/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.txt b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.txt
+++ b/ydb/core/tx/schemeshard/ut_user_attributes_reboots/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/sequenceproxy/CMakeLists.txt b/ydb/core/tx/sequenceproxy/CMakeLists.txt
index 606ed7e6be..eb992b1100 100644
--- a/ydb/core/tx/sequenceproxy/CMakeLists.txt
+++ b/ydb/core/tx/sequenceproxy/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(public)
+add_subdirectory(ut)
add_library(core-tx-sequenceproxy)
target_link_libraries(core-tx-sequenceproxy PUBLIC
diff --git a/ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp b/ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp
index f08203fca0..5c163e2709 100644
--- a/ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp
+++ b/ydb/core/tx/sequenceproxy/sequenceproxy_ut.cpp
@@ -66,7 +66,7 @@ Y_UNIT_TEST_SUITE(SequenceProxy) {
for (ui32 nodeIndex = 0; nodeIndex < runtime.GetNodeCount(); ++nodeIndex) {
auto cacheConfig = MakeIntrusive<NSchemeCache::TSchemeCacheConfig>();
cacheConfig->Roots.emplace_back(1, SCHEME_SHARD1_ID, root);
- cacheConfig->Counters = new NMonitoring::TDynamicCounters();
+ cacheConfig->Counters = new ::NMonitoring::TDynamicCounters();
IActor* schemeCache = CreateSchemeBoardSchemeCache(cacheConfig.Get());
TActorId schemeCacheId = runtime.Register(schemeCache, nodeIndex);
diff --git a/ydb/core/tx/sequenceproxy/ut/CMakeLists.txt b/ydb/core/tx/sequenceproxy/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/sequenceproxy/ut/CMakeLists.txt
+++ b/ydb/core/tx/sequenceproxy/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/sequenceshard/CMakeLists.txt b/ydb/core/tx/sequenceshard/CMakeLists.txt
index 027ad090b3..77106a446b 100644
--- a/ydb/core/tx/sequenceshard/CMakeLists.txt
+++ b/ydb/core/tx/sequenceshard/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(public)
+add_subdirectory(ut)
add_library(core-tx-sequenceshard)
target_compile_options(core-tx-sequenceshard PRIVATE
diff --git a/ydb/core/tx/sequenceshard/public/CMakeLists.txt b/ydb/core/tx/sequenceshard/public/CMakeLists.txt
index da9ae8b124..575930e31d 100644
--- a/ydb/core/tx/sequenceshard/public/CMakeLists.txt
+++ b/ydb/core/tx/sequenceshard/public/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(tx-sequenceshard-public)
target_compile_options(tx-sequenceshard-public PRIVATE
diff --git a/ydb/core/tx/sequenceshard/public/ut/CMakeLists.txt b/ydb/core/tx/sequenceshard/public/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/sequenceshard/public/ut/CMakeLists.txt
+++ b/ydb/core/tx/sequenceshard/public/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/sequenceshard/ut/CMakeLists.txt b/ydb/core/tx/sequenceshard/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/sequenceshard/ut/CMakeLists.txt
+++ b/ydb/core/tx/sequenceshard/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/time_cast/CMakeLists.txt b/ydb/core/tx/time_cast/CMakeLists.txt
index dc715c3ec3..a59d2b56bb 100644
--- a/ydb/core/tx/time_cast/CMakeLists.txt
+++ b/ydb/core/tx/time_cast/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-tx-time_cast)
target_link_libraries(core-tx-time_cast PUBLIC
diff --git a/ydb/core/tx/time_cast/ut/CMakeLists.txt b/ydb/core/tx/time_cast/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/time_cast/ut/CMakeLists.txt
+++ b/ydb/core/tx/time_cast/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/tx_allocator/CMakeLists.txt b/ydb/core/tx/tx_allocator/CMakeLists.txt
index fbfe5bd5c3..40cc6362bb 100644
--- a/ydb/core/tx/tx_allocator/CMakeLists.txt
+++ b/ydb/core/tx/tx_allocator/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-tx-tx_allocator)
target_link_libraries(core-tx-tx_allocator PUBLIC
diff --git a/ydb/core/tx/tx_allocator/txallocator_impl.h b/ydb/core/tx/tx_allocator/txallocator_impl.h
index 5a539f9b7b..d7508f590a 100644
--- a/ydb/core/tx/tx_allocator/txallocator_impl.h
+++ b/ydb/core/tx/tx_allocator/txallocator_impl.h
@@ -15,10 +15,10 @@ using NTabletFlatExecutor::ITransaction;
namespace NTxAllocator {
struct TTxAllocatorMonCounters {
- TIntrusivePtr<NMonitoring::TDynamicCounters> AllocatorCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> AllocatorCounters;
- NMonitoring::TDynamicCounters::TCounterPtr Allocated;
- NMonitoring::TDynamicCounters::TCounterPtr AllocationsPresence;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Allocated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AllocationsPresence;
};
class TTxAllocator : public TActor<TTxAllocator>, public TTabletExecutedFlat {
diff --git a/ydb/core/tx/tx_allocator/ut/CMakeLists.txt b/ydb/core/tx/tx_allocator/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/tx_allocator/ut/CMakeLists.txt
+++ b/ydb/core/tx/tx_allocator/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/tx_allocator_client/CMakeLists.txt b/ydb/core/tx/tx_allocator_client/CMakeLists.txt
index 58ddb2d396..4667ead48e 100644
--- a/ydb/core/tx/tx_allocator_client/CMakeLists.txt
+++ b/ydb/core/tx/tx_allocator_client/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-tx-tx_allocator_client)
target_link_libraries(core-tx-tx_allocator_client PUBLIC
diff --git a/ydb/core/tx/tx_allocator_client/ut/CMakeLists.txt b/ydb/core/tx/tx_allocator_client/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/tx_allocator_client/ut/CMakeLists.txt
+++ b/ydb/core/tx/tx_allocator_client/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/tx_proxy/CMakeLists.txt b/ydb/core/tx/tx_proxy/CMakeLists.txt
index f51a8d17ec..2229fe2fd9 100644
--- a/ydb/core/tx/tx_proxy/CMakeLists.txt
+++ b/ydb/core/tx/tx_proxy/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut_base_tenant)
+add_subdirectory(ut_encrypted_storage)
+add_subdirectory(ut_ext_tenant)
+add_subdirectory(ut_storage_tenant)
add_library(core-tx-tx_proxy)
target_compile_options(core-tx-tx_proxy PRIVATE
diff --git a/ydb/core/tx/tx_proxy/datareq.cpp b/ydb/core/tx/tx_proxy/datareq.cpp
index c933a19412..cd37e9c42a 100644
--- a/ydb/core/tx/tx_proxy/datareq.cpp
+++ b/ydb/core/tx/tx_proxy/datareq.cpp
@@ -1166,6 +1166,14 @@ void TDataReq::ProcessReadTableResolve(NSchemeCache::TSchemeCacheRequest *cacheR
auto &range = *tx.MutableRange();
ReadTableRequest->KeySpace.GetSpace().Serialize(range);
+ // Normalize range's From/ToInclusive
+ if (range.GetFrom().empty() && !range.GetFromInclusive()) {
+ range.SetFromInclusive(true);
+ }
+ if (range.GetTo().empty() && !range.GetToInclusive()) {
+ range.SetToInclusive(true);
+ }
+
if (!ReadTableRequest->Snapshot.IsMax()) {
tx.SetSnapshotStep(ReadTableRequest->Snapshot.Step);
tx.SetSnapshotTxId(ReadTableRequest->Snapshot.TxId);
@@ -1561,6 +1569,13 @@ void TDataReq::Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr &ev,
return Die(ctx);
}
+ if (!ReadTableRequest->FromValues.GetCells() && !ReadTableRequest->Range.HasFromInclusive()) {
+ fromInclusive = true; // default to inclusive -inf
+ }
+ if (!ReadTableRequest->ToValues.GetCells() && !ReadTableRequest->Range.HasToInclusive()) {
+ toInclusive = true; // default to inclusive +inf
+ }
+
TTableRange range(ReadTableRequest->FromValues.GetCells(),
fromInclusive,
ReadTableRequest->ToValues.GetCells(),
diff --git a/ydb/core/tx/tx_proxy/mon.cpp b/ydb/core/tx/tx_proxy/mon.cpp
index 14f5d47064..518efa4706 100644
--- a/ydb/core/tx/tx_proxy/mon.cpp
+++ b/ydb/core/tx/tx_proxy/mon.cpp
@@ -5,7 +5,7 @@
namespace NKikimr {
namespace NTxProxy {
-TTxProxyMon::TTxProxyMon(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters)
+TTxProxyMon::TTxProxyMon(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters)
: Counters(counters)
, TxGroup(GetServiceCounters(counters, "proxy")->GetSubgroup("subsystem", "tx"))
, DataReqGroup(GetServiceCounters(counters, "proxy")->GetSubgroup("subsystem", "datareq"))
diff --git a/ydb/core/tx/tx_proxy/mon.h b/ydb/core/tx/tx_proxy/mon.h
index c0558f946b..94a55c5ed1 100644
--- a/ydb/core/tx/tx_proxy/mon.h
+++ b/ydb/core/tx/tx_proxy/mon.h
@@ -12,37 +12,37 @@ namespace NTxProxy {
////////////////////////////////////////////////////////////////////////////
struct TTxProxyMon : public TThrRefBase {
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
// tx_proxy group
- TIntrusivePtr<NMonitoring::TDynamicCounters> TxGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> TxGroup;
NMonitoring::THistogramPtr CacheRequestLatency;
- NMonitoring::TDynamicCounters::TCounterPtr Navigate;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Navigate;
NMonitoring::THistogramPtr NavigateLatency;
- NMonitoring::TDynamicCounters::TCounterPtr SchemeRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SchemeRequest;
NMonitoring::THistogramPtr SchemeRequestLatency;
- NMonitoring::TDynamicCounters::TCounterPtr MakeRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MakeRequest;
//NMonitoring::THistogramPtr MakeRequestLatency;
- NMonitoring::TDynamicCounters::TCounterPtr SnapshotRequest;
- NMonitoring::TDynamicCounters::TCounterPtr CommitWritesRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SnapshotRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CommitWritesRequest;
- NMonitoring::TDynamicCounters::TCounterPtr SchemeRequestProxyNotReady;
- NMonitoring::TDynamicCounters::TCounterPtr MakeRequestProxyNotReady;
- NMonitoring::TDynamicCounters::TCounterPtr TxNotImplemented;
- NMonitoring::TDynamicCounters::TCounterPtr KqpRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SchemeRequestProxyNotReady;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MakeRequestProxyNotReady;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxNotImplemented;
+ ::NMonitoring::TDynamicCounters::TCounterPtr KqpRequest;
- NMonitoring::TDynamicCounters::TCounterPtr DataReqInFly;
- NMonitoring::TDynamicCounters::TCounterPtr SchemeReqInFly;
- NMonitoring::TDynamicCounters::TCounterPtr NavigateReqInFly;
+ ::NMonitoring::TDynamicCounters::TCounterPtr DataReqInFly;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SchemeReqInFly;
+ ::NMonitoring::TDynamicCounters::TCounterPtr NavigateReqInFly;
// tx_proxy_datareq group
- TIntrusivePtr<NMonitoring::TDynamicCounters> DataReqGroup;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> DataReqGroup;
- NMonitoring::TDynamicCounters::TCounterPtr ReportStatusOK;
- NMonitoring::TDynamicCounters::TCounterPtr ReportStatusNotOK;
- NMonitoring::TDynamicCounters::TCounterPtr ReportStatusStreamData;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReportStatusOK;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReportStatusNotOK;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReportStatusStreamData;
NMonitoring::THistogramPtr TxPrepareTimeHgram;
NMonitoring::THistogramPtr TxExecuteTimeHgram;
@@ -57,77 +57,77 @@ namespace NTxProxy {
NMonitoring::THistogramPtr TxPrepareBuildShardProgramsHgram;
NMonitoring::THistogramPtr TxPrepareSendShardProgramsHgram;
- NMonitoring::TDynamicCounters::TCounterPtr MiniKQLResolveSentToShard;
- NMonitoring::TDynamicCounters::TCounterPtr MiniKQLWrongRequest;
-
- NMonitoring::TDynamicCounters::TCounterPtr ReadTableResolveSentToShard;
- NMonitoring::TDynamicCounters::TCounterPtr ReadTableWrongRequest;
-
- NMonitoring::TDynamicCounters::TCounterPtr MiniKQLProgramSize;
- NMonitoring::TDynamicCounters::TCounterPtr MiniKQLParamsSize;
-
- NMonitoring::TDynamicCounters::TCounterPtr ExecTimeout;
- NMonitoring::TDynamicCounters::TCounterPtr MarkShardError;
- NMonitoring::TDynamicCounters::TCounterPtr PrepareErrorTimeout;
-
- NMonitoring::TDynamicCounters::TCounterPtr PlanClientDestroyed;
- NMonitoring::TDynamicCounters::TCounterPtr PlanClientConnected;
- NMonitoring::TDynamicCounters::TCounterPtr PlanCoordinatorDeclined;
-
- NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultComplete;
- NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultAborted;
- NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultResultUnavailable;
- NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultCancelled;
- NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultExecError;
-
- NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusAccepted;
- NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusProcessed;
- NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusConfirmed;
- NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusPlanned;
- NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusCoordinatorDeclined;
-
- NMonitoring::TDynamicCounters::TCounterPtr MakeRequestProxyAccepted;
- NMonitoring::TDynamicCounters::TCounterPtr MakeRequestWrongRequest;
- NMonitoring::TDynamicCounters::TCounterPtr MakeRequestEmptyAffectedSet;
-
- NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetLegacySuccess;
- NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetMiniKQLSuccess;
- NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetReadTableSuccess;
- NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetFail;
- NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetWrongRequest;
- NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetDomainLocalityFail;
- NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetRedirectUnavaible;
-
- NMonitoring::TDynamicCounters::TCounterPtr ClientConnectedOk;
- NMonitoring::TDynamicCounters::TCounterPtr ClientConnectedError;
-
- NMonitoring::TDynamicCounters::TCounterPtr ClientDestroyedOk;
- NMonitoring::TDynamicCounters::TCounterPtr ClientDestroyedError;
-
- NMonitoring::TDynamicCounters::TCounterPtr TxResultTabletPrepared;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultPrepared;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultComplete;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultError;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultAborted;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultFatal;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultShardOverloaded;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultShardTryLater;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultExecError;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultResultUnavailable;
- NMonitoring::TDynamicCounters::TCounterPtr TxResultCancelled;
-
- NMonitoring::TDynamicCounters::TCounterPtr MergeResultRequestExecError;
- NMonitoring::TDynamicCounters::TCounterPtr MergeResultRequestExecComplete;
- NMonitoring::TDynamicCounters::TCounterPtr MergeResultMiniKQLExecError;
- NMonitoring::TDynamicCounters::TCounterPtr MergeResultMiniKQLExecComplete;
- NMonitoring::TDynamicCounters::TCounterPtr MergeResultMiniKQLUnknownStatus;
-
- NMonitoring::TDynamicCounters::TCounterPtr ResultsReceivedCount;
- NMonitoring::TDynamicCounters::TCounterPtr ResultsReceivedSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MiniKQLResolveSentToShard;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MiniKQLWrongRequest;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReadTableResolveSentToShard;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ReadTableWrongRequest;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr MiniKQLProgramSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MiniKQLParamsSize;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr ExecTimeout;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MarkShardError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PrepareErrorTimeout;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanClientDestroyed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanClientConnected;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanCoordinatorDeclined;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultComplete;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultAborted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultResultUnavailable;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultCancelled;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PlanClientTxResultExecError;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusAccepted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusProcessed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusConfirmed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusPlanned;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientTxStatusCoordinatorDeclined;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr MakeRequestProxyAccepted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MakeRequestWrongRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MakeRequestEmptyAffectedSet;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetLegacySuccess;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetMiniKQLSuccess;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetReadTableSuccess;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetFail;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetWrongRequest;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetDomainLocalityFail;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResolveKeySetRedirectUnavaible;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientConnectedOk;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientConnectedError;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientDestroyedOk;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ClientDestroyedError;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultTabletPrepared;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultPrepared;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultComplete;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultAborted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultFatal;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultShardOverloaded;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultShardTryLater;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultExecError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultResultUnavailable;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TxResultCancelled;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr MergeResultRequestExecError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MergeResultRequestExecComplete;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MergeResultMiniKQLExecError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MergeResultMiniKQLExecComplete;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MergeResultMiniKQLUnknownStatus;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResultsReceivedCount;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResultsReceivedSize;
TAlignedPagePoolCounters AllocPoolCounters;
- TTxProxyMon(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters);
+ TTxProxyMon(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters);
};
} // NTxProxy
diff --git a/ydb/core/tx/tx_proxy/proxy_impl.cpp b/ydb/core/tx/tx_proxy/proxy_impl.cpp
index 20dc8cce17..0789be93e7 100644
--- a/ydb/core/tx/tx_proxy/proxy_impl.cpp
+++ b/ydb/core/tx/tx_proxy/proxy_impl.cpp
@@ -57,7 +57,7 @@ class TTxProxy : public TActorBootstrapped<TTxProxy> {
typedef TDelayedQueue<TEvTxUserProxy::TEvAllocateTxId> TDelayedAllocateTxId;
TDelayedAllocateTxId DelayedAllocateTxId;
- TIntrusivePtr<NMonitoring::TDynamicCounters> CacheCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> CacheCounters;
TIntrusivePtr<TTxProxyMon> TxProxyMon;
TRequestControls RequestControls;
diff --git a/ydb/core/tx/tx_proxy/read_table_impl.cpp b/ydb/core/tx/tx_proxy/read_table_impl.cpp
index a364d5ddc1..f2d7539787 100644
--- a/ydb/core/tx/tx_proxy/read_table_impl.cpp
+++ b/ydb/core/tx/tx_proxy/read_table_impl.cpp
@@ -472,6 +472,7 @@ private:
entry.Path = SplitPath(Settings.TablePath);
entry.Operation = NSchemeCache::TSchemeCacheNavigate::OpTable;
entry.ShowPrivatePath = true;
+ entry.SyncVersion = true;
TXLOG_D("Sending TEvNagivateKeySet for table '" << Settings.TablePath << "'");
ctx.Send(Services.SchemeCache, new TEvTxProxySchemeCache::TEvNavigateKeySet(request.Release()));
@@ -577,8 +578,8 @@ private:
return ReplyAndDie(TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ResolveError, NKikimrIssues::TStatusIds::SCHEME_ERROR, ctx);
}
- const bool fromInclusive = Settings.KeyRange.GetFromInclusive();
- const bool toInclusive = Settings.KeyRange.GetToInclusive();
+ bool fromInclusive = Settings.KeyRange.GetFromInclusive();
+ bool toInclusive = Settings.KeyRange.GetToInclusive();
const EParseRangeKeyExp fromExpand = (
Settings.KeyRange.HasFrom()
? (fromInclusive ? EParseRangeKeyExp::TO_NULL : EParseRangeKeyExp::NONE)
@@ -600,6 +601,16 @@ private:
return ReplyAndDie(TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ResolveError, NKikimrIssues::TStatusIds::QUERY_ERROR, ctx);
}
+ if (KeyFromValues.GetCells().size() < keyTypes.size() && !Settings.KeyRange.HasFromInclusive()) {
+ // Default: non-inclusive for incomplete From, except when From is empty
+ fromInclusive = KeyFromValues.GetCells().size() == 0;
+ }
+
+ if (KeyToValues.GetCells().size() < keyTypes.size() && !Settings.KeyRange.HasToInclusive()) {
+ // Default: inclusive for incomplete To
+ toInclusive = true;
+ }
+
TTableRange range(
KeyFromValues.GetCells(), fromInclusive,
KeyToValues.GetCells(), toInclusive);
@@ -1427,6 +1438,14 @@ private:
auto& txRange = *tx.MutableRange();
state.Ranges.front().Serialize(txRange);
+ // Normalize range's From/ToInclusive
+ if (txRange.GetFrom().empty() && !txRange.GetFromInclusive()) {
+ txRange.SetFromInclusive(true);
+ }
+ if (txRange.GetTo().empty() && !txRange.GetToInclusive()) {
+ txRange.SetToInclusive(true);
+ }
+
if (Settings.ReadVersion.IsMax()) {
// Use snapshot that we have created
tx.SetSnapshotStep(PlanStep);
diff --git a/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.txt b/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.txt
+++ b/ydb/core/tx/tx_proxy/ut_base_tenant/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.txt b/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.txt
+++ b/ydb/core/tx/tx_proxy/ut_encrypted_storage/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.txt b/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.txt
+++ b/ydb/core/tx/tx_proxy/ut_ext_tenant/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.txt b/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.txt
+++ b/ydb/core/tx/tx_proxy/ut_storage_tenant/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/util/CMakeLists.txt b/ydb/core/util/CMakeLists.txt
index c0f9e55c1f..d473116dd5 100644
--- a/ydb/core/util/CMakeLists.txt
+++ b/ydb/core/util/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(btree_benchmark)
+add_subdirectory(ut)
add_library(ydb-core-util)
target_link_libraries(ydb-core-util PUBLIC
diff --git a/ydb/core/util/btree_benchmark/CMakeLists.txt b/ydb/core/util/btree_benchmark/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/util/btree_benchmark/CMakeLists.txt
+++ b/ydb/core/util/btree_benchmark/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/util/cache_cache.h b/ydb/core/util/cache_cache.h
index a8ab10977d..850b6b05f5 100644
--- a/ydb/core/util/cache_cache.h
+++ b/ydb/core/util/cache_cache.h
@@ -9,7 +9,7 @@
namespace NKikimr {
struct TCacheCacheConfig : public TAtomicRefCount<TCacheCacheConfig> {
- using TCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+ using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
enum ECacheGeneration {
CacheGenNone,
diff --git a/ydb/core/util/memory_tracker.cpp b/ydb/core/util/memory_tracker.cpp
index 848b36e276..cbec61b07d 100644
--- a/ydb/core/util/memory_tracker.cpp
+++ b/ydb/core/util/memory_tracker.cpp
@@ -88,7 +88,7 @@ private:
GatherDynamicMetrics();
}
- void RegisterCounters(NMonitoring::TDynamicCounterPtr counters) {
+ void RegisterCounters(::NMonitoring::TDynamicCounterPtr counters) {
auto componentGroup = counters->GetSubgroup("component", "memory_tracker");
auto count = TMemoryTracker::Instance()->GetCount();
diff --git a/ydb/core/util/memory_tracker.h b/ydb/core/util/memory_tracker.h
index 1db4ee3e9e..f8adcaaf55 100644
--- a/ydb/core/util/memory_tracker.h
+++ b/ydb/core/util/memory_tracker.h
@@ -11,7 +11,7 @@ namespace NMemory {
NActors::IActor* CreateMemoryTrackerActor(
TDuration updateInterval,
- NMonitoring::TDynamicCounterPtr counters);
+ ::NMonitoring::TDynamicCounterPtr counters);
}
}
diff --git a/ydb/core/util/testactorsys.h b/ydb/core/util/testactorsys.h
index 27a61b2042..bd3976c79e 100644
--- a/ydb/core/util/testactorsys.h
+++ b/ydb/core/util/testactorsys.h
@@ -169,7 +169,7 @@ public:
, LoggerSettings_(MakeIntrusive<NLog::TSettings>(TActorId(0, "logger"), NKikimrServices::LOGGER, defaultPrio))
, InterconnectMock(0, Max<ui64>(), this) // burst capacity (bytes), bytes per second
{
- AppData.Counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ AppData.Counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
AppData.DomainsInfo = MakeIntrusive<TDomainsInfo>();
LoggerSettings_->Append(
NActorsServices::EServiceCommon_MIN,
diff --git a/ydb/core/util/throughput_meter.h b/ydb/core/util/throughput_meter.h
index 935dae2178..00f9fd9f6b 100644
--- a/ydb/core/util/throughput_meter.h
+++ b/ydb/core/util/throughput_meter.h
@@ -9,7 +9,7 @@ namespace NKikimr {
{
const ui64 UpdateDivisionFactor;
const ui64 WindowUpdateTimeoutNs;
- TVector<std::pair<float, NMonitoring::TDynamicCounters::TCounterPtr>> Counters;
+ TVector<std::pair<float, ::NMonitoring::TDynamicCounters::TCounterPtr>> Counters;
ui64 CumTimeNs = 0;
ui64 CumBytes = 0;
@@ -18,13 +18,13 @@ namespace NKikimr {
TVector<ui64> Histogram;
public:
- TThroughputMeter(ui64 updateDivisionFactor, const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ TThroughputMeter(ui64 updateDivisionFactor, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TString& group, const TString& subgroup, const TString& name, const TVector<float>& thresholds,
const TDuration& windowUpdateTimeout = TDuration::MilliSeconds(10))
: UpdateDivisionFactor(updateDivisionFactor)
, WindowUpdateTimeoutNs(windowUpdateTimeout.NanoSeconds())
{
- TIntrusivePtr<NMonitoring::TDynamicCounters> histGroup =
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> histGroup =
counters->GetSubgroup(group, subgroup)->GetSubgroup("sensor", name);
for (float threshold : thresholds) {
Counters.emplace_back(threshold, histGroup->GetNamedCounter("percentile", Sprintf("%.1f", threshold * 100)));
diff --git a/ydb/core/util/ut/CMakeLists.txt b/ydb/core/util/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/util/ut/CMakeLists.txt
+++ b/ydb/core/util/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/viewer/CMakeLists.txt b/ydb/core/viewer/CMakeLists.txt
index 962c4783cd..0a755eab96 100644
--- a/ydb/core/viewer/CMakeLists.txt
+++ b/ydb/core/viewer/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(json)
+add_subdirectory(protos)
+add_subdirectory(ut)
add_library(ydb-core-viewer)
target_compile_options(ydb-core-viewer PRIVATE
@@ -26,6 +29,7 @@ target_link_libraries(ydb-core-viewer PUBLIC
ydb-core-protos
ydb-core-scheme
core-tx-schemeshard
+ core-tx-tx_proxy
ydb-core-util
core-viewer-json
core-viewer-protos
@@ -59,6 +63,7 @@ target_link_libraries(ydb-core-viewer.global PUBLIC
ydb-core-protos
ydb-core-scheme
core-tx-schemeshard
+ core-tx-tx_proxy
ydb-core-util
core-viewer-json
core-viewer-protos
diff --git a/ydb/core/viewer/epilogue.cmake b/ydb/core/viewer/epilogue.cmake
deleted file mode 100644
index 368975a06a..0000000000
--- a/ydb/core/viewer/epilogue.cmake
+++ /dev/null
@@ -1,35 +0,0 @@
-option(YDB_EMBEDDED_UI_DEV_SNAPSHOT "Use latest dev version of embedded UI git repo" Off)
-include(${CMAKE_CURRENT_SOURCE_DIR}/recursive_resources.cmake)
-
-if (YDB_EMBEDDED_UI_DEV_SNAPSHOT)
- find_program(NPM_PATH NAMES npm REQUIRED)
-
- include(ExternalProject)
- ExternalProject_Add(ydb-embedded-ui-git
- GIT_REPOSITORY https://github.com/ydb-platform/ydb-embedded-ui.git
- GIT_TAG main
- USES_TERMINAL_DOWNLOAD On
- USES_TERMINAL_UPDATE On
- USES_TERMINAL_BUILD On
- CONFIGURE_COMMAND ""
- TEST_COMMAND ""
- INSTALL_COMMAND ""
- BUILD_IN_SOURCE On
- BUILD_COMMAND ${NPM_PATH} ci
- COMMAND ${NPM_PATH} run build:embedded
- )
- ExternalProject_Get_property(ydb-embedded-ui-git SOURCE_DIR)
- add_gen_resources(ydb-embedded-ui-git ${CMAKE_BINARY_DIR}/ydb/core/viewer/ydb_embedded_ui_monitoring.cpp
- IN_DIR ${SOURCE_DIR}/build
- PREFIX monitoring
- )
-
-else()
- add_dir_resources(${CMAKE_BINARY_DIR}/ydb/core/viewer/ydb_embedded_ui_monitoring.cpp
- IN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/monitoring
- PREFIX monitoring
- )
-endif()
-target_sources(ydb-core-viewer.global PRIVATE
- ${CMAKE_BINARY_DIR}/ydb/core/viewer/ydb_embedded_ui_monitoring.cpp
-)
diff --git a/ydb/core/viewer/json_nodes.h b/ydb/core/viewer/json_nodes.h
index c6359409e0..52ebc0c186 100644
--- a/ydb/core/viewer/json_nodes.h
+++ b/ydb/core/viewer/json_nodes.h
@@ -7,6 +7,7 @@
#include <ydb/core/viewer/json/json.h>
#include <ydb/core/protos/node_whiteboard.pb.h>
#include <ydb/core/viewer/protos/viewer.pb.h>
+#include <ydb/core/tx/tx_proxy/proxy.h>
#include "viewer.h"
#include "json_pipe_req.h"
#include "json_sysinfo.h"
@@ -29,6 +30,7 @@ class TJsonNodes : public TViewerPipeClient<TJsonNodes> {
NMon::TEvHttpInfo::TPtr Event;
std::unique_ptr<TEvInterconnect::TEvNodesInfo> NodesInfo;
std::unordered_map<TNodeId, THolder<TEvWhiteboard::TEvPDiskStateResponse>> PDiskInfo;
+ std::unordered_map<TNodeId, THolder<TEvWhiteboard::TEvTabletStateResponse>> TabletInfo;
std::unordered_map<TNodeId, THolder<TEvWhiteboard::TEvSystemStateResponse>> SysInfo;
std::unordered_map<TString, THolder<NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult>> DescribeResult;
std::unique_ptr<TEvBlobStorage::TEvControllerConfigResponse> BaseConfig;
@@ -39,16 +41,44 @@ class TJsonNodes : public TViewerPipeClient<TJsonNodes> {
TString FilterStoragePool;
std::unordered_set<TNodeId> FilterNodeIds;
std::unordered_set<ui32> FilterGroupIds;
- std::unordered_set<TNodeId> NodeIds;
+ std::unordered_set<TNodeId> PassedNodeIds;
+ std::vector<TNodeId> NodeIds;
+ std::optional<ui32> Offset;
+ std::optional<ui32> Limit;
enum class EWith {
Everything,
MissingDisks,
SpaceProblems,
};
-
EWith With = EWith::Everything;
+ enum class EType {
+ Any,
+ Static,
+ Dynamic,
+ };
+ EType Type = EType::Static;
+
+ enum class ESort {
+ NodeId,
+ Host,
+ DC,
+ Version,
+ Uptime,
+ Memory,
+ CPU,
+ LoadAverage,
+ };
+ ESort Sort = ESort::NodeId;
+ bool ReverseSort = false;
+ bool SortedNodeList = false;
+
+ bool Storage = true;
+ bool Tablets = true;
+ TNodeId MinAllowedNodeId = std::numeric_limits<TNodeId>::min();
+ TNodeId MaxAllowedNodeId = std::numeric_limits<TNodeId>::max();
+
public:
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
return NKikimrServices::TActivity::VIEWER_HANDLER;
@@ -69,13 +99,66 @@ public:
SplitIds(params.Get("node_id"), ',', FilterNodeIds);
if (params.Get("with") == "missing") {
With = EWith::MissingDisks;
- } if (params.Get("with") == "space") {
+ } else if (params.Get("with") == "space") {
With = EWith::SpaceProblems;
}
+ if (params.Has("offset")) {
+ Offset = FromStringWithDefault<ui32>(params.Get("offset"), 0);
+ }
+ if (params.Has("limit")) {
+ Limit = FromStringWithDefault<ui32>(params.Get("limit"), std::numeric_limits<ui32>::max());
+ }
+ if (params.Get("type") == "static") {
+ Type = EType::Static;
+ } else if (params.Get("type") == "dynamic") {
+ Type = EType::Dynamic;
+ } else if (params.Get("type") == "any") {
+ Type = EType::Any;
+ }
+ Storage = FromStringWithDefault<bool>(params.Get("storage"), Storage);
+ Tablets = FromStringWithDefault<bool>(params.Get("tablets"), Tablets);
+ TStringBuf sort = params.Get("sort");
+ if (sort) {
+ if (sort.StartsWith("-") || sort.StartsWith("+")) {
+ ReverseSort = (sort[0] == '-');
+ sort.Skip(1);
+ }
+ if (sort == "NodeId") {
+ Sort = ESort::NodeId;
+ } else if (sort == "Host") {
+ Sort = ESort::Host;
+ } else if (sort == "DC") {
+ Sort = ESort::DC;
+ } else if (sort == "Version") {
+ Sort = ESort::Version;
+ } else if (sort == "Uptime") {
+ Sort = ESort::Uptime;
+ } else if (sort == "Memory") {
+ Sort = ESort::Memory;
+ } else if (sort == "CPU") {
+ Sort = ESort::CPU;
+ } else if (sort == "LoadAverage") {
+ Sort = ESort::LoadAverage;
+ }
+ }
}
void Bootstrap() {
- RequestBSControllerConfig();
+ if (Type != EType::Any) {
+ TIntrusivePtr<TDynamicNameserviceConfig> dynamicNameserviceConfig = AppData()->DynamicNameserviceConfig;
+ if (dynamicNameserviceConfig) {
+ if (Type == EType::Static) {
+ MaxAllowedNodeId = dynamicNameserviceConfig->MaxStaticNodeId;
+ }
+ if (Type == EType::Dynamic) {
+ MinAllowedNodeId = dynamicNameserviceConfig->MaxStaticNodeId + 1;
+ }
+ }
+ }
+
+ if (Storage) {
+ RequestBSControllerConfig();
+ }
if (!FilterTenant.empty()) {
SendNavigate(FilterTenant);
} else {
@@ -87,7 +170,7 @@ public:
if (FilterNodeIds.empty()) {
SendRequest(GetNameserviceActorId(), new TEvInterconnect::TEvListNodes());
} else {
- for (ui32 nodeId : FilterNodeIds) {
+ for (TNodeId nodeId : FilterNodeIds) {
SendNodeRequest(nodeId);
}
}
@@ -119,11 +202,32 @@ public:
TBase::PassAway();
}
- void SendNodeRequest(ui32 nodeId) {
- if (NodeIds.insert(nodeId).second) {
- TActorId whiteboardServiceId = MakeNodeWhiteboardServiceId(nodeId);
- SendRequest(whiteboardServiceId, new TEvWhiteboard::TEvSystemStateRequest(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
- SendRequest(whiteboardServiceId, new TEvWhiteboard::TEvPDiskStateRequest(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
+ void SendNodeRequest(TNodeId nodeId) {
+ if (nodeId >= MinAllowedNodeId && nodeId <= MaxAllowedNodeId) {
+ if (PassedNodeIds.insert(nodeId).second) {
+ // optimization for paging with default sort
+ if (SortedNodeList && Offset.has_value()) {
+ if (PassedNodeIds.size() <= Offset.value()) {
+ return;
+ }
+ }
+ if (SortedNodeList && Limit.has_value()) {
+ if (NodeIds.size() >= Limit.value()) {
+ return;
+ }
+ }
+ NodeIds.push_back(nodeId);
+ TActorId whiteboardServiceId = MakeNodeWhiteboardServiceId(nodeId);
+ SendRequest(whiteboardServiceId, new TEvWhiteboard::TEvSystemStateRequest(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
+ if (Storage) {
+ SendRequest(whiteboardServiceId, new TEvWhiteboard::TEvPDiskStateRequest(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
+ }
+ if (Tablets) {
+ auto request = std::make_unique<TEvWhiteboard::TEvTabletStateRequest>();
+ request->Record.SetGroupBy("Type,State");
+ SendRequest(whiteboardServiceId, request.release(), IEventHandle::FlagTrackDelivery | IEventHandle::FlagSubscribeOnSession, nodeId);
+ }
+ }
}
}
@@ -131,7 +235,6 @@ public:
auto itBaseConfigGroupIndex = BaseConfigGroupIndex.find(groupId);
if (itBaseConfigGroupIndex != BaseConfigGroupIndex.end()) {
for (const NKikimrBlobStorage::TVSlotId& vslot : itBaseConfigGroupIndex->second->GetVSlotId()) {
- FilterNodeIds.emplace(vslot.GetNodeId());
SendNodeRequest(vslot.GetNodeId());
}
}
@@ -172,16 +275,43 @@ public:
}
void Handle(TEvInterconnect::TEvNodesInfo::TPtr& ev) {
- ui32 maxAllowedNodeId = std::numeric_limits<ui32>::max();
- TIntrusivePtr<TDynamicNameserviceConfig> dynamicNameserviceConfig = AppData()->DynamicNameserviceConfig;
- if (dynamicNameserviceConfig) {
- maxAllowedNodeId = dynamicNameserviceConfig->MaxStaticNodeId;
- }
NodesInfo.reset(ev->Release().Release());
- for (const auto& ni : NodesInfo->Nodes) {
- if (ni.NodeId <= maxAllowedNodeId) {
- SendNodeRequest(ni.NodeId);
+ bool reverse = ReverseSort;
+ std::function<void(TVector<TEvInterconnect::TNodeInfo>&)> sortFunc;
+ switch (Sort) {
+ case ESort::NodeId: {
+ sortFunc = [=](TVector<TEvInterconnect::TNodeInfo>& nodes) {
+ ::Sort(nodes, [=](const TEvInterconnect::TNodeInfo& a, const TEvInterconnect::TNodeInfo& b) {
+ return reverse ^ (a.NodeId < b.NodeId);
+ });
+ };
+ break;
+ }
+ case ESort::Host: {
+ sortFunc = [=](TVector<TEvInterconnect::TNodeInfo>& nodes) {
+ ::Sort(nodes, [=](const TEvInterconnect::TNodeInfo& a, const TEvInterconnect::TNodeInfo& b) {
+ return reverse ^ (a.Host < b.Host);
+ });
+ };
+ break;
}
+ case ESort::DC: {
+ sortFunc = [=](TVector<TEvInterconnect::TNodeInfo>& nodes) {
+ ::Sort(nodes, [=](const TEvInterconnect::TNodeInfo& a, const TEvInterconnect::TNodeInfo& b) {
+ return reverse ^ (a.Location.GetDataCenterId() < b.Location.GetDataCenterId());
+ });
+ };
+ break;
+ }
+ default:
+ break;
+ }
+ if (sortFunc) {
+ sortFunc(NodesInfo->Nodes);
+ SortedNodeList = true;
+ }
+ for (const auto& ni : NodesInfo->Nodes) {
+ SendNodeRequest(ni.NodeId);
}
RequestDone();
}
@@ -189,12 +319,14 @@ public:
void Handle(NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult::TPtr& ev) {
TString path = ev->Get()->GetRecord().GetPath();
const NKikimrSchemeOp::TPathDescription& pathDescription = ev->Get()->GetRecord().GetPathDescription();
- for (const auto& storagePool : pathDescription.GetDomainDescription().GetStoragePools()) {
- TString storagePoolName = storagePool.GetName();
- THolder<TEvBlobStorage::TEvControllerSelectGroups> request = MakeHolder<TEvBlobStorage::TEvControllerSelectGroups>();
- request->Record.SetReturnAllMatchingGroups(true);
- request->Record.AddGroupParameters()->MutableStoragePoolSpecifier()->SetName(storagePoolName);
- RequestBSControllerSelectGroups(std::move(request));
+ if (Storage) {
+ for (const auto& storagePool : pathDescription.GetDomainDescription().GetStoragePools()) {
+ TString storagePoolName = storagePool.GetName();
+ THolder<TEvBlobStorage::TEvControllerSelectGroups> request = MakeHolder<TEvBlobStorage::TEvControllerSelectGroups>();
+ request->Record.SetReturnAllMatchingGroups(true);
+ request->Record.AddGroupParameters()->MutableStoragePoolSpecifier()->SetName(storagePoolName);
+ RequestBSControllerSelectGroups(std::move(request));
+ }
}
DescribeResult[path] = ev->Release();
@@ -214,6 +346,11 @@ public:
RequestDone();
}
break;
+ case TEvWhiteboard::EvTabletStateRequest:
+ if (TabletInfo.emplace(nodeId, nullptr).second) {
+ RequestDone();
+ }
+ break;
}
}
@@ -222,8 +359,15 @@ public:
if (SysInfo.emplace(nodeId, nullptr).second) {
RequestDone();
}
- if (PDiskInfo.emplace(nodeId, nullptr).second) {
- RequestDone();
+ if (Storage) {
+ if (PDiskInfo.emplace(nodeId, nullptr).second) {
+ RequestDone();
+ }
+ }
+ if (Tablets) {
+ if (TabletInfo.emplace(nodeId, nullptr).second) {
+ RequestDone();
+ }
}
}
@@ -239,11 +383,22 @@ public:
RequestDone();
}
+ void Handle(TEvWhiteboard::TEvTabletStateResponse::TPtr& ev) {
+ ui64 nodeId = ev.Get()->Cookie;
+ bool needToGroup = ev->Get()->Record.TabletStateInfoSize() > 0 && !ev->Get()->Record.GetTabletStateInfo(0).HasCount();
+ TabletInfo[nodeId] = ev->Release();
+ if (needToGroup) { // for compatibility with older versions
+ TabletInfo[nodeId] = GroupWhiteboardResponses(TabletInfo[nodeId], "Type,State", false);
+ }
+ RequestDone();
+ }
+
STATEFN(StateWork) {
switch (ev->GetTypeRewrite()) {
hFunc(TEvInterconnect::TEvNodesInfo, Handle);
hFunc(TEvWhiteboard::TEvSystemStateResponse, Handle);
hFunc(TEvWhiteboard::TEvPDiskStateResponse, Handle);
+ hFunc(TEvWhiteboard::TEvTabletStateResponse, Handle);
hFunc(NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult, Handle);
hFunc(TEvBlobStorage::TEvControllerSelectGroupsResult, Handle);
hFunc(TEvBlobStorage::TEvControllerConfigResponse, Handle);
@@ -254,117 +409,168 @@ public:
}
}
- void ReplyAndPassAway() {
- NKikimrViewer::TNodesInfo nodesInfo;
- std::unordered_map<TNodeId, NKikimrViewer::TNodeInfo*> nodeIndex;
- std::unordered_map<TPDiskId, NKikimrWhiteboard::TPDiskStateInfo*> pDiskIndex;
-
- std::function<NKikimrViewer::TNodeInfo&(TNodeId)> getNode = [&nodesInfo, &nodeIndex](TNodeId nodeId) -> NKikimrViewer::TNodeInfo& {
- auto itNode = nodeIndex.find(nodeId);
- if (itNode != nodeIndex.end()) {
- return *(itNode->second);
+ NKikimrViewer::TNodesInfo Result;
+
+ NKikimrWhiteboard::TPDiskStateInfo& GetPDisk(TPDiskId pDiskId) {
+ auto itPDiskInfo = PDiskInfo.find(pDiskId.first);
+ if (itPDiskInfo == PDiskInfo.end()) {
+ itPDiskInfo = PDiskInfo.insert({pDiskId.first, MakeHolder<TEvWhiteboard::TEvPDiskStateResponse>()}).first;
+ }
+
+ for (auto& pDiskInfo : *itPDiskInfo->second->Record.mutable_pdiskstateinfo()) {
+ if (pDiskInfo.pdiskid() == pDiskId.second) {
+ return pDiskInfo;
}
- NKikimrViewer::TNodeInfo& nodeInfo = *nodesInfo.AddNodes();
- nodeInfo.SetNodeId(nodeId);
- nodeIndex.emplace(nodeId, &nodeInfo);
- return nodeInfo;
- };
-
- std::function<NKikimrWhiteboard::TPDiskStateInfo&(TPDiskId)> getPDisk = [&getNode, &pDiskIndex](TPDiskId pDiskId) -> NKikimrWhiteboard::TPDiskStateInfo& {
- auto itPDisk = pDiskIndex.find(pDiskId);
- if (itPDisk != pDiskIndex.end()) {
- return *(itPDisk->second);
+ }
+
+ NKikimrWhiteboard::TPDiskStateInfo& pDiskInfo = *itPDiskInfo->second->Record.add_pdiskstateinfo();
+ pDiskInfo.SetPDiskId(pDiskId.second);
+ return pDiskInfo;
+ }
+
+ static double GetCPU(const NKikimrWhiteboard::TSystemStateInfo& sysInfo) {
+ double cpu = 0;
+ if (sysInfo.PoolStatsSize() > 0) {
+ for (const auto& ps : sysInfo.GetPoolStats()) {
+ cpu = std::max(cpu, ps.GetUsage());
}
- NKikimrViewer::TNodeInfo& nodeInfo = getNode(pDiskId.first);
- NKikimrWhiteboard::TPDiskStateInfo& pDiskInfo = *nodeInfo.AddPDisks();
- pDiskInfo.SetPDiskId(pDiskId.second);
- pDiskIndex.emplace(pDiskId, &pDiskInfo);
- return pDiskInfo;
- };
-
- if (BaseConfig) {
+ }
+ return cpu;
+ }
+
+ static double GetLoadAverage(const NKikimrWhiteboard::TSystemStateInfo& sysInfo) {
+ if (sysInfo.LoadAverageSize() > 0) {
+ return sysInfo.GetLoadAverage(0);
+ }
+ return 0;
+ }
+
+ void ReplyAndPassAway() {
+ if (Storage && BaseConfig) {
const NKikimrBlobStorage::TEvControllerConfigResponse& pbRecord(BaseConfig->Record);
const NKikimrBlobStorage::TConfigResponse::TStatus& pbStatus(pbRecord.GetResponse().GetStatus(0));
const NKikimrBlobStorage::TBaseConfig& pbConfig(pbStatus.GetBaseConfig());
for (const NKikimrBlobStorage::TBaseConfig::TPDisk& pDisk : pbConfig.GetPDisk()) {
+ if (!FilterNodeIds.empty() && FilterNodeIds.count(pDisk.GetNodeId()) == 0) {
+ continue;
+ }
+ if (pDisk.GetNodeId() < MinAllowedNodeId || pDisk.GetNodeId() > MaxAllowedNodeId) {
+ continue;
+ }
TPDiskId pDiskId(pDisk.GetNodeId(), pDisk.GetPDiskId());
- NKikimrWhiteboard::TPDiskStateInfo& pDiskInfo = getPDisk(pDiskId);
+ NKikimrWhiteboard::TPDiskStateInfo& pDiskInfo = GetPDisk(pDiskId);
pDiskInfo.SetPath(pDisk.GetPath());
pDiskInfo.SetGuid(pDisk.GetGuid());
pDiskInfo.SetCategory(static_cast<ui64>(pDisk.GetType()));
- pDiskInfo.SetTotalSize(pDisk.GetPDiskMetrics().GetTotalSize());
- pDiskInfo.SetAvailableSize(pDisk.GetPDiskMetrics().GetAvailableSize());
+ if (pDiskInfo.GetTotalSize() == 0) {
+ pDiskInfo.SetTotalSize(pDisk.GetPDiskMetrics().GetTotalSize());
+ }
+ if (pDiskInfo.GetAvailableSize() == 0) {
+ pDiskInfo.SetAvailableSize(pDisk.GetPDiskMetrics().GetAvailableSize());
+ }
}
}
+ ui64 totalNodes = NodeIds.size();
+
for (TNodeId nodeId : NodeIds) {
- if (!FilterNodeIds.empty() && FilterNodeIds.count(nodeId) == 0) {
- continue;
+ if (Storage) {
+ if (With == EWith::MissingDisks) {
+ auto itPDiskState = PDiskInfo.find(nodeId);
+ if (itPDiskState != PDiskInfo.end() && itPDiskState->second) {
+ int disksNormal = 0;
+ for (const auto& protoPDiskInfo : itPDiskState->second->Record.GetPDiskStateInfo()) {
+ if (protoPDiskInfo.state() == NKikimrBlobStorage::TPDiskState::Normal) {
+ ++disksNormal;
+ }
+ }
+ if (itPDiskState->second->Record.pdiskstateinfo_size() == disksNormal) {
+ continue;
+ }
+ }
+ }
+ if (With == EWith::SpaceProblems) {
+ auto itSystemState = SysInfo.find(nodeId);
+ if (itSystemState != SysInfo.end() && itSystemState->second && itSystemState->second->Record.SystemStateInfoSize() > 0) {
+ if (itSystemState->second->Record.GetSystemStateInfo(0).GetMaxDiskUsage() < 85) {
+ continue;
+ }
+ }
+ }
}
- NKikimrViewer::TNodeInfo& nodeInfo = getNode(nodeId);
+ NKikimrViewer::TNodeInfo& nodeInfo = *Result.add_nodes();
+ nodeInfo.set_nodeid(nodeId);
auto itSystemState = SysInfo.find(nodeId);
if (itSystemState != SysInfo.end() && itSystemState->second) {
*nodeInfo.MutableSystemState() = itSystemState->second->Record.GetSystemStateInfo(0);
- } else {
+ } else if (NodesInfo != nullptr) {
auto* icNodeInfo = NodesInfo->GetNodeInfo(nodeId);
if (icNodeInfo != nullptr) {
nodeInfo.MutableSystemState()->SetHost(icNodeInfo->Host);
}
}
- auto itPDiskState = PDiskInfo.find(nodeId);
- if (itPDiskState != PDiskInfo.end() && itPDiskState->second) {
- for (const auto& protoPDiskInfo : itPDiskState->second->Record.GetPDiskStateInfo()) {
- NKikimrWhiteboard::TPDiskStateInfo& pDiskInfo = getPDisk({nodeId, protoPDiskInfo.GetPDiskId()});
- pDiskInfo.MergeFrom(protoPDiskInfo);
- }
- }
- }
-
- ui64 totalNodes = nodesInfo.NodesSize();
-
- if (!FilterNodeIds.empty() || !FilterTenant.empty()) {
- for (auto itNode = nodesInfo.MutableNodes()->begin(); itNode != nodesInfo.MutableNodes()->end();) {
- if (FilterNodeIds.count(itNode->GetNodeId()) == 0) {
- itNode = nodesInfo.MutableNodes()->erase(itNode);
- } else {
- ++itNode;
+ if (Storage) {
+ auto itPDiskState = PDiskInfo.find(nodeId);
+ if (itPDiskState != PDiskInfo.end() && itPDiskState->second) {
+ for (auto& protoPDiskInfo : *itPDiskState->second->Record.MutablePDiskStateInfo()) {
+ NKikimrWhiteboard::TPDiskStateInfo& pDiskInfo = *nodeInfo.AddPDisks();
+ pDiskInfo = std::move(protoPDiskInfo);
+ }
}
}
- }
-
- if (With == EWith::MissingDisks) {
- for (auto itNode = nodesInfo.MutableNodes()->begin(); itNode != nodesInfo.MutableNodes()->end();) {
- size_t disksNormal = 0;
- for (const NKikimrWhiteboard::TPDiskStateInfo& pDiskInfo : itNode->GetPDisks()) {
- if (pDiskInfo.GetState() == NKikimrBlobStorage::TPDiskState::Normal) {
- ++disksNormal;
+ if (Tablets) {
+ auto itTabletState = TabletInfo.find(nodeId);
+ if (itTabletState != TabletInfo.end() && itTabletState->second) {
+ for (auto& protoTabletInfo : *itTabletState->second->Record.MutableTabletStateInfo()) {
+ NKikimrWhiteboard::TTabletStateInfo& tabletInfo = *nodeInfo.AddTablets();
+ tabletInfo = std::move(protoTabletInfo);
}
}
- if (itNode->PDisksSize() == disksNormal && disksNormal != 0) {
- itNode = nodesInfo.MutableNodes()->erase(itNode);
- } else {
- ++itNode;
- }
}
}
- if (With == EWith::SpaceProblems) {
- for (auto itNode = nodesInfo.MutableNodes()->begin(); itNode != nodesInfo.MutableNodes()->end();) {
- if (itNode->GetSystemState().GetMaxDiskUsage() < 85) {
- itNode = nodesInfo.MutableNodes()->erase(itNode);
- } else {
- ++itNode;
- }
- }
+ bool reverse = ReverseSort;
+
+ switch (Sort) {
+ case ESort::NodeId:
+ case ESort::Host:
+ case ESort::DC:
+ // already sorted
+ break;
+ case ESort::Version:
+ ::Sort(*Result.MutableNodes(), [reverse](const NKikimrViewer::TNodeInfo& a, const NKikimrViewer::TNodeInfo& b) {
+ return reverse ^ (a.GetSystemState().GetVersion() < b.GetSystemState().GetVersion());
+ });
+ break;
+ case ESort::Uptime:
+ ::Sort(*Result.MutableNodes(), [reverse](const NKikimrViewer::TNodeInfo& a, const NKikimrViewer::TNodeInfo& b) {
+ return reverse ^ !(a.GetSystemState().GetStartTime() < b.GetSystemState().GetStartTime());
+ });
+ break;
+ case ESort::Memory:
+ ::Sort(*Result.MutableNodes(), [reverse](const NKikimrViewer::TNodeInfo& a, const NKikimrViewer::TNodeInfo& b) {
+ return reverse ^ (a.GetSystemState().GetMemoryUsed() < b.GetSystemState().GetMemoryUsed());
+ });
+ break;
+ case ESort::CPU:
+ ::Sort(*Result.MutableNodes(), [reverse](const NKikimrViewer::TNodeInfo& a, const NKikimrViewer::TNodeInfo& b) {
+ return reverse ^ (GetCPU(a.GetSystemState()) < GetCPU(b.GetSystemState()));
+ });
+ break;
+ case ESort::LoadAverage:
+ ::Sort(*Result.MutableNodes(), [reverse](const NKikimrViewer::TNodeInfo& a, const NKikimrViewer::TNodeInfo& b) {
+ return reverse ^ (GetLoadAverage(a.GetSystemState()) < GetLoadAverage(b.GetSystemState()));
+ });
+ break;
}
- ui64 foundNodes = nodesInfo.NodesSize();
+ ui64 foundNodes = Result.NodesSize();
- nodesInfo.SetTotalNodes(totalNodes);
- nodesInfo.SetFoundNodes(foundNodes);
+ Result.SetTotalNodes(totalNodes);
+ Result.SetFoundNodes(foundNodes);
TStringStream json;
- TProtoToJson::ProtoToJson(json, nodesInfo, JsonSettings);
+ TProtoToJson::ProtoToJson(json, Result, JsonSettings);
Send(Initiator, new NMon::TEvHttpInfoRes(Viewer->GetHTTPOKJSON(Event->Get(), std::move(json.Str())), 0, NMon::IEvHttpInfoRes::EContentType::Custom));
PassAway();
}
@@ -389,7 +595,13 @@ struct TJsonRequestParameters<TJsonNodes> {
return R"___([{"name":"enums","in":"query","description":"convert enums to strings","required":false,"type":"boolean"},
{"name":"ui64","in":"query","description":"return ui64 as numbers","required":false,"type":"boolean"},
{"name":"tenant","in":"query","description":"tenant filter","required":false,"type":"string"},
- {"name":"with","in":"query","description":"filter groups by missing or space","required":false,"type":"string"},
+ {"name":"with","in":"query","description":"filter nodes by missing disks or space","required":false,"type":"string"},
+ {"name":"type","in":"query","description":"nodes type to get (static,dynamic,any)","required":false,"type":"string"},
+ {"name":"storage","in":"query","description":"return storage info","required":false,"type":"boolean"},
+ {"name":"tablets","in":"query","description":"return tablets info","required":false,"type":"boolean"},
+ {"name":"sort","in":"query","description":"sort by (NodeId,Host,DC,Version,Uptime,Memory,CPU,LoadAverage)","required":false,"type":"string"},
+ {"name":"offset","in":"query","description":"skip N nodes","required":false,"type":"integer"},
+ {"name":"limit","in":"query","description":"limit to N nodes","required":false,"type":"integer"},
{"name":"timeout","in":"query","description":"timeout in ms","required":false,"type":"integer"}])___";
}
};
diff --git a/ydb/core/viewer/json_query.h b/ydb/core/viewer/json_query.h
index bb07dcc521..d2d8b6cfee 100644
--- a/ydb/core/viewer/json_query.h
+++ b/ydb/core/viewer/json_query.h
@@ -8,10 +8,12 @@
#include <library/cpp/json/json_reader.h>
#include <library/cpp/protobuf/json/proto2json.h>
#include <ydb/core/node_whiteboard/node_whiteboard.h>
+#include <ydb/core/grpc_services/rpc_kqp_base.h>
#include <ydb/core/kqp/kqp.h>
#include <ydb/core/kqp/executer/kqp_executer.h>
#include <ydb/core/viewer/json/json.h>
-#include <ydb/public/lib/deprecated/kicli/kicli.h>
+//#include <ydb/public/lib/deprecated/kicli/kicli.h>
+#include <ydb/public/lib/json_value/ydb_json_value.h>
#include <ydb/public/sdk/cpp/client/ydb_result/result.h>
namespace NKikimr {
@@ -31,6 +33,7 @@ class TJsonQuery : public TActorBootstrapped<TJsonQuery> {
TVector<Ydb::ResultSet> ResultSets;
TString Action;
TString Stats;
+ TString Schema = "classic";
public:
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
@@ -70,6 +73,10 @@ public:
TString database = params.Get("database");
Stats = params.Get("stats");
Action = params.Get("action");
+ Schema = params.Get("schema");
+ if (Schema.empty()) {
+ Schema = "classic";
+ }
if (query.empty() && Event->Get()->Request.GetMethod() == HTTP_METHOD_POST) {
TStringBuf content = Event->Get()->Request.GetPostContent();
const THttpHeaders& headers = Event->Get()->Request.GetHeaders();
@@ -205,74 +212,96 @@ private:
void HandleReply(NKqp::TEvKqp::TEvQueryResponse::TPtr& ev) {
TStringBuilder out;
+ NJson::TJsonValue jsonResponse;
NKikimrKqp::TEvQueryResponse& record = ev->Get()->Record.GetRef();
if (record.GetYdbStatus() == Ydb::StatusIds::SUCCESS) {
const auto& response = record.GetResponse();
- out << Viewer->GetHTTPOKJSON(Event->Get());
- if (!Stats.empty()) {
- out << "{\"result\":";
+
+ if (response.ResultsSize() > 0) {
+ for (const auto& result : response.GetResults()) {
+ Ydb::ResultSet resultSet;
+ NGRpcService::ConvertKqpQueryResultToDbResult(result, &resultSet);
+ ResultSets.emplace_back(std::move(resultSet));
+ }
}
+
+ out << Viewer->GetHTTPOKJSON(Event->Get());
if (ResultSets.size() > 0) {
- out << "[";
- bool comma = false;
- for (auto it = ResultSets.begin(); it != ResultSets.end(); ++it) {
- NYdb::TResultSet resultSet(*it);
- const auto& columnsMeta = resultSet.GetColumnsMeta();
- NYdb::TResultSetParser rsParser(resultSet);
- while (rsParser.TryNextRow()) {
- if (comma) {
- out << ",";
+ if (Schema == "classic") {
+ NJson::TJsonValue& jsonResults = jsonResponse["result"];
+ jsonResults.SetType(NJson::JSON_ARRAY);
+ for (auto it = ResultSets.begin(); it != ResultSets.end(); ++it) {
+ NYdb::TResultSet resultSet(*it);
+ const auto& columnsMeta = resultSet.GetColumnsMeta();
+ NYdb::TResultSetParser rsParser(resultSet);
+ while (rsParser.TryNextRow()) {
+ NJson::TJsonValue& jsonRow = jsonResults.AppendValue({});
+ for (size_t columnNum = 0; columnNum < columnsMeta.size(); ++columnNum) {
+ const NYdb::TColumn& columnMeta = columnsMeta[columnNum];
+ jsonRow[columnMeta.Name] = ColumnValueToJsonValue(rsParser.ColumnParser(columnNum));
+ }
}
- out << "{";
+ }
+ }
+
+ if (Schema == "modern") {
+ {
+ NJson::TJsonValue& jsonColumns = jsonResponse["columns"];
+ NYdb::TResultSet resultSet(ResultSets.front());
+ const auto& columnsMeta = resultSet.GetColumnsMeta();
+ jsonColumns.SetType(NJson::JSON_ARRAY);
for (size_t columnNum = 0; columnNum < columnsMeta.size(); ++columnNum) {
+ NJson::TJsonValue& jsonColumn = jsonColumns.AppendValue({});
const NYdb::TColumn& columnMeta = columnsMeta[columnNum];
- out << "\"" << TProtoToJson::EscapeJsonString(columnMeta.Name) << "\":";
- out << NJson::WriteJson(ColumnValueToJsonValue(rsParser.ColumnParser(columnNum)), false);
- if (columnNum + 1 < columnsMeta.size()) {
- out << ",";
+ jsonColumn["name"] = columnMeta.Name;
+ jsonColumn["type"] = columnMeta.Type.ToString();
+ }
+ }
+
+ NJson::TJsonValue& jsonResults = jsonResponse["result"];
+ jsonResults.SetType(NJson::JSON_ARRAY);
+ for (auto it = ResultSets.begin(); it != ResultSets.end(); ++it) {
+ NYdb::TResultSet resultSet(*it);
+ const auto& columnsMeta = resultSet.GetColumnsMeta();
+ NYdb::TResultSetParser rsParser(resultSet);
+ while (rsParser.TryNextRow()) {
+ NJson::TJsonValue& jsonRow = jsonResults.AppendValue({});
+ jsonRow.SetType(NJson::JSON_ARRAY);
+ for (size_t columnNum = 0; columnNum < columnsMeta.size(); ++columnNum) {
+ NJson::TJsonValue& jsonColumn = jsonRow.AppendValue({});
+ jsonColumn = ColumnValueToJsonValue(rsParser.ColumnParser(columnNum));
}
}
- out << "}";
- comma = true;
}
}
- out << ']';
- } else if (response.ResultsSize() > 0) {
- const auto &result = response.GetResults();
- if (result.empty()) {
- out << "[]";
- } else {
- const auto &first = *result.begin();
-
- if (first.HasType() && first.HasValue()) {
- auto value = NClient::TValue::Create(first.GetValue(), first.GetType());
- auto data = value["Data"];
- if (data.HaveValue()) {
- out << data.GetValueText<NClient::TFormatJSON>({JsonSettings.UI64AsString});
- } else {
- out << "[]";
+
+ if (Schema == "ydb") {
+ NJson::TJsonValue& jsonResults = jsonResponse["result"];
+ jsonResults.SetType(NJson::JSON_ARRAY);
+ for (auto it = ResultSets.begin(); it != ResultSets.end(); ++it) {
+ NYdb::TResultSet resultSet(*it);
+ const auto& columnsMeta = resultSet.GetColumnsMeta();
+ NYdb::TResultSetParser rsParser(resultSet);
+ while (rsParser.TryNextRow()) {
+ NJson::TJsonValue& jsonRow = jsonResults.AppendValue({});
+ TString row = NYdb::FormatResultRowJson(rsParser, columnsMeta, NYdb::EBinaryStringEncoding::Base64);
+ NJson::ReadJsonTree(row, &jsonRow);
}
- } else {
- out << "[]";
}
}
- } else if (response.HasQueryPlan()) {
- if (Action == "explain-ast") {
- out << "{\"ast\":\"" << TProtoToJson::EscapeJsonString(response.GetQueryAst()) << "\"}";
- } else {
- out << response.GetQueryPlan();
- }
}
- if (!Stats.empty()) {
- out << ",\"stats\":";
- TStringStream json;
- TProtoToJson::ProtoToJson(json, response.GetQueryStats(), JsonSettings);
- out << json.Str() << "}";
+ if (response.HasQueryAst()) {
+ jsonResponse["ast"] = response.GetQueryAst();
+ }
+ if (response.HasQueryPlan()) {
+ NJson::ReadJsonTree(response.GetQueryPlan(), &(jsonResponse["plan"]));
+ }
+ if (response.HasQueryStats()) {
+ NProtobufJson::Proto2Json(response.GetQueryStats(), jsonResponse["stats"]);
}
} else {
out << "HTTP/1.1 400 Bad Request\r\nContent-Type: application/json\r\nConnection: Close\r\n\r\n";
- NJson::TJsonValue response;
- NJson::TJsonValue& jsonIssues = response["issues"];
+ NJson::TJsonValue& jsonIssues = jsonResponse["issues"];
// find first deepest error
google::protobuf::RepeatedPtrField<Ydb::Issue::IssueMessage>* protoIssues = record.MutableResponse()->MutableQueryIssues();
@@ -284,15 +313,20 @@ private:
}
if (protoIssues->size() > 0) {
const Ydb::Issue::IssueMessage& issue = (*protoIssues)[0];
- NProtobufJson::Proto2Json(issue, response["error"]);
+ NProtobufJson::Proto2Json(issue, jsonResponse["error"]);
}
for (const auto& queryIssue : record.GetResponse().GetQueryIssues()) {
NJson::TJsonValue& issue = jsonIssues.AppendValue({});
NProtobufJson::Proto2Json(queryIssue, issue);
}
- out << NJson::WriteJson(response, false);
}
+ if (Schema == "classic" && Stats.empty() && (Action.empty() || Action == "execute")) {
+ jsonResponse = std::move(jsonResponse["result"]);
+ }
+
+ out << NJson::WriteJson(jsonResponse, false);
+
ReplyAndPassAway(out);
}
@@ -339,6 +373,7 @@ struct TJsonRequestParameters<TJsonQuery> {
return R"___([{"name":"ui64","in":"query","description":"return ui64 as number","required":false,"type":"boolean"},
{"name":"query","in":"query","description":"query text","required":true,"type":"string"},
{"name":"database","in":"query","description":"database name","required":false,"type":"string"},
+ {"name":"schema","in":"query","description":"result format schema (classic, modern, ydb)","required":false,"type":"string"},
{"name":"stats","in":"query","description":"return stats (profile)","required":false,"type":"string"},
{"name":"action","in":"query","description":"execute method (execute-scan, execute-script, explain, explain-ast)","required":false,"type":"string"},
{"name":"timeout","in":"query","description":"timeout in ms","required":false,"type":"integer"}])___";
diff --git a/ydb/core/viewer/json_storage.h b/ydb/core/viewer/json_storage.h
index 4644f6f710..91891e6da8 100644
--- a/ydb/core/viewer/json_storage.h
+++ b/ydb/core/viewer/json_storage.h
@@ -12,6 +12,24 @@
#include "json_vdiskinfo.h"
#include "json_pdiskinfo.h"
+template<>
+struct std::hash<NKikimrBlobStorage::TVSlotId> {
+ std::size_t operator()(const NKikimrBlobStorage::TVSlotId& vSlotId) const {
+ return std::hash<ui32>()(vSlotId.GetNodeId())
+ ^ (std::hash<ui32>()(vSlotId.GetPDiskId()) << 1)
+ ^ (std::hash<ui32>()(vSlotId.GetVSlotId()) << 2);
+ }
+};
+
+template<>
+struct std::equal_to<NKikimrBlobStorage::TVSlotId> {
+ bool operator()(const NKikimrBlobStorage::TVSlotId& lhs, const NKikimrBlobStorage::TVSlotId& rhs) const {
+ return lhs.GetNodeId() == rhs.GetNodeId()
+ && lhs.GetPDiskId() == rhs.GetPDiskId()
+ && lhs.GetVSlotId() == rhs.GetVSlotId();
+ }
+};
+
namespace NKikimr {
namespace NViewer {
@@ -51,6 +69,7 @@ class TJsonStorage : public TViewerPipeClient<TJsonStorage> {
std::unordered_set<TNodeId> NodeIds;
bool NeedGroups = true;
bool NeedDisks = true;
+ bool NeedDonors = true;
enum class EWith {
Everything,
@@ -85,6 +104,7 @@ public:
Sort(FilterGroupIds);
NeedGroups = FromStringWithDefault<bool>(params.Get("need_groups"), true);
NeedDisks = FromStringWithDefault<bool>(params.Get("need_disks"), NeedGroups);
+ NeedDonors = FromStringWithDefault<bool>(params.Get("need_donors"), NeedDonors);
NeedGroups = Max(NeedGroups, NeedDisks);
if (params.Get("with") == "missing") {
With = EWith::MissingDisks;
@@ -328,6 +348,7 @@ public:
TMap<TString, const NKikimrWhiteboard::TBSGroupStateInfo&> BSGroupIndex;
TMap<TString, NKikimrHive::THiveStorageGroupStats> BSGroupHiveIndex;
TMap<NKikimrBlobStorage::TVDiskID, const NKikimrWhiteboard::TVDiskStateInfo&> VDisksIndex;
+ std::unordered_map<NKikimrBlobStorage::TVSlotId, const NKikimrWhiteboard::TVDiskStateInfo&> VSlotsIndex;
TMap<std::pair<ui32, ui32>, const NKikimrWhiteboard::TPDiskStateInfo&> PDisksIndex;
TMap<TString, TString> BSGroupOverall;
THashSet<TString> BSGroupWithMissingDisks;
@@ -391,6 +412,34 @@ public:
}
}
+ void RemapDonors(IOutputStream& json,
+ const ::google::protobuf::Message& protoFrom,
+ const TJsonSettings& jsonSettings) {
+ const auto& info = static_cast<const NKikimrWhiteboard::TVDiskStateInfo&>(protoFrom);
+ const auto& donors = info.GetDonors();
+ if (donors.empty()) {
+ return;
+ }
+ json << "\"Donors\":[";
+ for (auto id = donors.begin(); id != donors.end(); ++id) {
+ if (id != donors.begin()) {
+ json << ',';
+ }
+ const NKikimrBlobStorage::TVSlotId& vSlotId = *id;
+ auto ie = VSlotsIndex.find(vSlotId);
+ if (ie != VSlotsIndex.end()) {
+ json << '{';
+ TProtoToJson::ProtoToJsonInline(json, ie->second, jsonSettings);
+ json << '}';
+ } else {
+ json << "{";
+ TProtoToJson::ProtoToJson(json, vSlotId, jsonSettings);
+ json << "}";
+ }
+ }
+ json << ']';
+ }
+
void RemapPDisk(IOutputStream& json,
const ::google::protobuf::Message& protoFrom,
const TJsonSettings& jsonSettings) {
@@ -429,6 +478,13 @@ public:
element.ClearStoragePoolName();
VDisksOverall.emplace(key, overall);
VDisksIndex.emplace(key, element);
+ if (NeedDonors) {
+ NKikimrBlobStorage::TVSlotId slotId;
+ slotId.SetNodeId(element.GetNodeId());
+ slotId.SetPDiskId(element.GetPDiskId());
+ slotId.SetVSlotId(element.GetVDiskSlotId());
+ VSlotsIndex.emplace(std::move(slotId), element);
+ }
}
for (auto& element : *TWhiteboardInfo<TEvWhiteboard::TEvBSGroupStateResponse>::GetElementsField(MergedBSGroupInfo.Get())) {
auto state = GetBSGroupOverallState(element, VDisksIndex, PDisksIndex);
@@ -581,6 +637,15 @@ public:
const TJsonSettings& jsonSettings) -> void {
RemapPDisk(json, protoFrom, jsonSettings);
};
+ if (NeedDonors) {
+ field = NKikimrWhiteboard::TVDiskStateInfo::descriptor()->FindFieldByName("Donors");
+ JsonSettings.FieldRemapper[field] = [this](
+ IOutputStream& json,
+ const ::google::protobuf::Message& protoFrom,
+ const TJsonSettings& jsonSettings) -> void {
+ RemapDonors(json, protoFrom, jsonSettings);
+ };
+ }
}
StorageInfo.SetTotalGroups(totalGroups);
StorageInfo.SetFoundGroups(foundGroups);
diff --git a/ydb/core/viewer/protos/viewer.proto b/ydb/core/viewer/protos/viewer.proto
index ad9e3c94f9..86e4ef9341 100644
--- a/ydb/core/viewer/protos/viewer.proto
+++ b/ydb/core/viewer/protos/viewer.proto
@@ -395,6 +395,7 @@ message TNodeInfo {
uint32 NodeId = 1;
NKikimrWhiteboard.TSystemStateInfo SystemState = 2;
repeated NKikimrWhiteboard.TPDiskStateInfo PDisks = 3;
+ repeated NKikimrWhiteboard.TTabletStateInfo Tablets = 5;
}
message TNodesInfo {
diff --git a/ydb/core/viewer/ut/CMakeLists.txt b/ydb/core/viewer/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/viewer/ut/CMakeLists.txt
+++ b/ydb/core/viewer/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/viewer/wb_merge.h b/ydb/core/viewer/wb_merge.h
index 27fd3c8f67..ca8e269e7c 100644
--- a/ydb/core/viewer/wb_merge.h
+++ b/ydb/core/viewer/wb_merge.h
@@ -151,7 +151,8 @@ public:
static THolder<TResponseType> MergeResponsesBase(TMap<ui32, THolder<TResponseType>>& responses, const MergeKey& mergeKey) {
std::unordered_map<typename MergeKey::KeyType, TElementType*> mergedData;
ui64 minResponseTime = 0;
- ui32 maxResponseDuration = 0;
+ ui64 maxResponseDuration = 0;
+ //ui64 sumProcessDuration = 0;
TWhiteboardMergerComparator<TElementType> comparator;
for (auto it = responses.begin(); it != responses.end(); ++it) {
if (it->second != nullptr) {
@@ -174,6 +175,7 @@ public:
if (maxResponseDuration == 0 || it->second->Record.GetResponseDuration() > maxResponseDuration) {
maxResponseDuration = it->second->Record.GetResponseDuration();
}
+ //sumProcessDuration += it->second->Record.GetProcessDuration();
}
}
@@ -190,6 +192,9 @@ public:
if (maxResponseDuration) {
result->Record.SetResponseDuration(maxResponseDuration);
}
+ //if (sumProcessDuration) {
+ // result->Record.SetProcessDuration(sumProcessDuration);
+ //}
return result;
}
diff --git a/ydb/core/wrappers/CMakeLists.txt b/ydb/core/wrappers/CMakeLists.txt
index b25618eda9..3a2d9b7038 100644
--- a/ydb/core/wrappers/CMakeLists.txt
+++ b/ydb/core/wrappers/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
+add_subdirectory(ut_helpers)
add_library(ydb-core-wrappers)
target_link_libraries(ydb-core-wrappers PUBLIC
diff --git a/ydb/core/wrappers/ut/CMakeLists.txt b/ydb/core/wrappers/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/wrappers/ut/CMakeLists.txt
+++ b/ydb/core/wrappers/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/ydb_convert/CMakeLists.txt b/ydb/core/ydb_convert/CMakeLists.txt
index 6299224adf..515d27635b 100644
--- a/ydb/core/ydb_convert/CMakeLists.txt
+++ b/ydb/core/ydb_convert/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-core-ydb_convert)
target_compile_options(ydb-core-ydb_convert PRIVATE
@@ -31,5 +32,6 @@ target_sources(ydb-core-ydb_convert PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/ydb_convert/compression.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ydb_convert/table_settings.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ydb_convert/table_description.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/ydb_convert/table_profiles.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ydb_convert/ydb_convert.cpp
)
diff --git a/ydb/core/ydb_convert/table_description.cpp b/ydb/core/ydb_convert/table_description.cpp
index e00200b745..16ce535573 100644
--- a/ydb/core/ydb_convert/table_description.cpp
+++ b/ydb/core/ydb_convert/table_description.cpp
@@ -19,6 +19,20 @@ static NProtoBuf::Timestamp MillisecToProtoTimeStamp(ui64 ms) {
return timestamp;
}
+template <typename TStoragePoolHolder>
+using TAddStoragePoolFunc = Ydb::Table::StoragePool* (TStoragePoolHolder::*)();
+
+template <typename TStoragePoolHolder>
+static void FillStoragePool(TStoragePoolHolder* out, TAddStoragePoolFunc<TStoragePoolHolder> func,
+ const NKikimrSchemeOp::TStorageSettings& in)
+{
+ if (in.GetAllowOtherKinds()) {
+ return;
+ }
+
+ std::invoke(func, out)->set_media(in.GetPreferredPoolKind());
+}
+
template <typename TYdbProto>
void FillColumnDescriptionImpl(TYdbProto& out,
NKikimrMiniKQL::TType& splitKeyType, const NKikimrSchemeOp::TTableDescription& in) {
@@ -41,21 +55,29 @@ void FillColumnDescriptionImpl(TYdbProto& out,
auto newColumn = out.add_columns();
newColumn->set_name(column.GetName());
- auto& item = *newColumn->mutable_type()->mutable_optional_type()->mutable_item();
+
+ Ydb::Type* columnType = nullptr;
+ if (column.GetNotNull()) {
+ columnType = newColumn->mutable_type();
+ } else {
+ columnType = newColumn->mutable_type()->mutable_optional_type()->mutable_item();
+ }
+
+ Y_ENSURE(columnType);
if (protoType == NYql::NProto::TypeIds::Decimal) {
- auto typeParams = item.mutable_decimal_type();
+ auto typeParams = columnType->mutable_decimal_type();
// TODO: Change TEvDescribeSchemeResult to return decimal params
typeParams->set_precision(22);
typeParams->set_scale(9);
} else {
- NMiniKQL::ExportPrimitiveTypeToProto(protoType, item);
+ NMiniKQL::ExportPrimitiveTypeToProto(protoType, *columnType);
}
if (columnIdToKeyPos.count(column.GetId())) {
size_t keyPos = columnIdToKeyPos[column.GetId()];
auto tupleElement = splitKeyType.MutableTuple()->MutableElement(keyPos);
tupleElement->SetKind(NKikimrMiniKQL::ETypeKind::Optional);
- ConvertYdbTypeToMiniKQLType(item, *tupleElement->MutableOptional()->MutableItem());
+ ConvertYdbTypeToMiniKQLType(*columnType, *tupleElement->MutableOptional()->MutableItem());
}
if (column.HasFamilyName()) {
@@ -469,14 +491,16 @@ void FillStorageSettingsImpl(TYdbProto& out,
settings->set_store_external_blobs(Ydb::FeatureFlag::DISABLED);
if (family.HasStorageConfig()) {
+ using StorageSettings = Ydb::Table::StorageSettings;
+
if (family.GetStorageConfig().HasSysLog()) {
- settings->mutable_tablet_commit_log0()->set_media(family.GetStorageConfig().GetSysLog().GetPreferredPoolKind());
+ FillStoragePool(settings, &StorageSettings::mutable_tablet_commit_log0, family.GetStorageConfig().GetSysLog());
}
if (family.GetStorageConfig().HasLog()) {
- settings->mutable_tablet_commit_log1()->set_media(family.GetStorageConfig().GetLog().GetPreferredPoolKind());
+ FillStoragePool(settings, &StorageSettings::mutable_tablet_commit_log1, family.GetStorageConfig().GetLog());
}
if (family.GetStorageConfig().HasExternal()) {
- settings->mutable_external()->set_media(family.GetStorageConfig().GetExternal().GetPreferredPoolKind());
+ FillStoragePool(settings, &StorageSettings::mutable_external, family.GetStorageConfig().GetExternal());
}
const ui32 externalThreshold = family.GetStorageConfig().GetExternalThreshold();
@@ -545,7 +569,7 @@ void FillColumnFamiliesImpl(TYdbProto& out,
}
if (family.HasStorageConfig() && family.GetStorageConfig().HasData()) {
- r->mutable_data()->set_media(family.GetStorageConfig().GetData().GetPreferredPoolKind());
+ FillStoragePool(r, &Ydb::Table::ColumnFamily::mutable_data, family.GetStorageConfig().GetData());
}
if (family.HasColumnCodec()) {
@@ -760,7 +784,8 @@ void FillReadReplicasSettings(Ydb::Table::CreateTableRequest& out,
}
bool FillTableDescription(NKikimrSchemeOp::TModifyScheme& out,
- const Ydb::Table::CreateTableRequest& in, Ydb::StatusIds::StatusCode& status, TString& error)
+ const Ydb::Table::CreateTableRequest& in, const TTableProfiles& profiles,
+ Ydb::StatusIds::StatusCode& status, TString& error)
{
auto& tableDesc = *out.MutableCreateTable();
@@ -770,6 +795,10 @@ bool FillTableDescription(NKikimrSchemeOp::TModifyScheme& out,
tableDesc.MutableKeyColumnNames()->CopyFrom(in.primary_key());
+ if (!profiles.ApplyTableProfile(in.profile(), tableDesc, status, error)) {
+ return false;
+ }
+
TColumnFamilyManager families(tableDesc.MutablePartitionConfig());
if (in.has_storage_settings() && !families.ApplyStorageSettings(in.storage_settings(), &status, &error)) {
return false;
diff --git a/ydb/core/ydb_convert/table_description.h b/ydb/core/ydb_convert/table_description.h
index ea06414d9a..9dc023288a 100644
--- a/ydb/core/ydb_convert/table_description.h
+++ b/ydb/core/ydb_convert/table_description.h
@@ -1,5 +1,7 @@
#pragma once
+#include "table_profiles.h"
+
#include <ydb/library/mkql_proto/protos/minikql.pb.h>
#include <ydb/core/protos/flat_tx_scheme.pb.h>
#include <ydb/public/api/protos/ydb_table.pb.h>
@@ -84,6 +86,7 @@ void FillReadReplicasSettings(Ydb::Table::CreateTableRequest& out,
// in
bool FillTableDescription(NKikimrSchemeOp::TModifyScheme& out,
- const Ydb::Table::CreateTableRequest& in, Ydb::StatusIds::StatusCode& status, TString& error);
+ const Ydb::Table::CreateTableRequest& in, const TTableProfiles& profiles,
+ Ydb::StatusIds::StatusCode& status, TString& error);
} // namespace NKikimr
diff --git a/ydb/core/grpc_services/table_profiles.cpp b/ydb/core/ydb_convert/table_profiles.cpp
index 367de4cc89..1129888f3a 100644
--- a/ydb/core/grpc_services/table_profiles.cpp
+++ b/ydb/core/ydb_convert/table_profiles.cpp
@@ -1,14 +1,11 @@
#include "table_profiles.h"
+#include "table_description.h"
-#include <ydb/core/base/appdata.h>
#include <ydb/core/protos/flat_scheme_op.pb.h>
-#include <ydb/core/ydb_convert/table_description.h>
-#include <ydb/core/ydb_convert/ydb_convert.h>
#include <util/string/printf.h>
namespace NKikimr {
-namespace NGRpcService {
TTableProfiles::TTableProfiles()
{
@@ -459,5 +456,4 @@ bool TTableProfiles::ApplyCompactionPolicy(const TString &name,
}
-} // namespace NGRpcService
} // namespace NKikimr
diff --git a/ydb/core/grpc_services/table_profiles.h b/ydb/core/ydb_convert/table_profiles.h
index 2acec6f115..7e8a9be5e5 100644
--- a/ydb/core/grpc_services/table_profiles.h
+++ b/ydb/core/ydb_convert/table_profiles.h
@@ -1,14 +1,13 @@
#pragma once
-#include <ydb/core/protos/console_config.pb.h>
#include <ydb/core/base/appdata.h>
+#include <ydb/core/protos/config.pb.h>
#include <ydb/public/api/protos/ydb_status_codes.pb.h>
#include <ydb/public/api/protos/ydb_table.pb.h>
#include <util/generic/hash.h>
namespace NKikimr {
-namespace NGRpcService {
class TTableProfiles {
public:
@@ -41,5 +40,4 @@ public:
THashMap<TString, NKikimrConfig::TTableProfile> TableProfiles;
};
-} // namespace NGRpcService
} // namespace NKikimr
diff --git a/ydb/core/ydb_convert/ut/CMakeLists.txt b/ydb/core/ydb_convert/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/ydb_convert/ut/CMakeLists.txt
+++ b/ydb/core/ydb_convert/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/ymq/CMakeLists.txt b/ydb/core/ymq/CMakeLists.txt
new file mode 100644
index 0000000000..d553619c78
--- /dev/null
+++ b/ydb/core/ymq/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actor)
+add_subdirectory(base)
+add_subdirectory(client)
+add_subdirectory(http)
+add_subdirectory(proto)
+add_subdirectory(queues)
+add_subdirectory(ut)
diff --git a/ydb/core/ymq/actor/CMakeLists.txt b/ydb/core/ymq/actor/CMakeLists.txt
index 329ab01f40..5bf19c4d5b 100644
--- a/ydb/core/ymq/actor/CMakeLists.txt
+++ b/ydb/core/ymq/actor/CMakeLists.txt
@@ -7,6 +7,8 @@
find_package(OpenSSL REQUIRED)
+add_subdirectory(ut)
+add_subdirectory(yc_search_ut)
add_library(core-ymq-actor)
target_compile_options(core-ymq-actor PRIVATE
@@ -61,6 +63,7 @@ target_sources(core-ymq-actor PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/cfg.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/change_visibility.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/count_queues.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/cleanup_queue_data.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/create_queue.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/create_user.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/delete_message.cpp
@@ -82,8 +85,9 @@ target_sources(core-ymq-actor PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/local_rate_limiter_allocator.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/message_delay_stats.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/metering.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/migration.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/modify_permissions.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/monitoring.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/node_tracker.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/proxy_actor.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/purge.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/actor/purge_queue.cpp
diff --git a/ydb/core/ymq/actor/action.h b/ydb/core/ymq/actor/action.h
index ee01dc2528..b974384101 100644
--- a/ydb/core/ymq/actor/action.h
+++ b/ydb/core/ymq/actor/action.h
@@ -18,7 +18,6 @@
#include <ydb/core/ymq/base/action.h>
#include <ydb/core/ymq/base/acl.h>
#include <ydb/core/ymq/base/counters.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/base/query_id.h>
#include <ydb/core/ymq/base/security.h>
@@ -46,11 +45,6 @@ public:
, SourceSqsRequest_(sourceSqsRequest)
{
Y_VERIFY(RequestId_);
- DebugInfo->ActionActors.emplace(RequestId_, this);
- }
-
- ~TActionActor() {
- DebugInfo->ActionActors.EraseKeyValue(RequestId_, this);
}
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
@@ -763,8 +757,8 @@ protected:
TMaybe<ui32> TablesFormat_;
TInstant StartTs_;
TInstant FinishTs_;
- TIntrusivePtr<NMonitoring::TDynamicCounters> SqsCoreCounters_; // Raw counters interface. Is is not prefered to use them
- TIntrusivePtr<NMonitoring::TDynamicCounters> YmqRootCounters_; // Raw counters interface. Is is not prefered to use them
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SqsCoreCounters_; // Raw counters interface. Is is not prefered to use them
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> YmqRootCounters_; // Raw counters interface. Is is not prefered to use them
TIntrusivePtr<TUserCounters> UserCounters_;
TIntrusivePtr<TQueueCounters> QueueCounters_;
TMaybe<TSqsEvents::TQueueAttributes> QueueAttributes_;
diff --git a/ydb/core/ymq/actor/cleanup_queue_data.cpp b/ydb/core/ymq/actor/cleanup_queue_data.cpp
new file mode 100644
index 0000000000..0d94214b85
--- /dev/null
+++ b/ydb/core/ymq/actor/cleanup_queue_data.cpp
@@ -0,0 +1,319 @@
+#include "cleanup_queue_data.h"
+
+#include <ydb/core/ymq/actor/cfg.h>
+#include <ydb/core/ymq/base/run_query.h>
+#include <ydb/core/ymq/queues/common/key_hashes.h>
+
+
+namespace NKikimr::NSQS {
+ constexpr TDuration LOCK_PERIOD = TDuration::Seconds(30);
+ constexpr TDuration UPDATE_LOCK_PERIOD = TDuration::Seconds(20);
+
+ constexpr TDuration IDLE_TIMEOUT = TDuration::Seconds(30);
+ constexpr TDuration RETRY_PERIOD_MIN = TDuration::MilliSeconds(100);
+ constexpr TDuration RETRY_PERIOD_MAX = TDuration::Seconds(30);
+
+ // (table, has shard column)
+ const TVector<std::pair<TString, bool>> StdTables = {
+ {"Infly", true},
+ {"MessageData", true},
+ {"Messages", true},
+ {"SentTimestampIdx", true},
+ {"Attributes", false}
+ };
+
+ const TVector<std::pair<TString, bool>> FifoTables = {
+ {"Attributes", false},
+ {"Data", false},
+ {"Deduplication", false},
+ {"Groups", false},
+ {"Messages", false},
+ {"Reads", false},
+ {"SentTimestampIdx", false}
+ };
+
+ TString GetCommonTablePath(const TString& name, bool isFifo) {
+ return TStringBuilder() << Cfg().GetRoot() << "/." << (isFifo ? "FIFO" : "STD") << "/" << name;
+ }
+
+ TCleanupQueueDataActor::TCleanupQueueDataActor(TIntrusivePtr<TMonitoringCounters> monitoringCounters)
+ : MonitoringCounters(monitoringCounters)
+ , RetryPeriod(RETRY_PERIOD_MIN)
+ {}
+
+ void TCleanupQueueDataActor::Bootstrap(const TActorContext& ctx) {
+ Become(&TCleanupQueueDataActor::StateFunc);
+
+ TString removedQueuesTable = Cfg().GetRoot() + "/.RemovedQueues";
+
+ LockQueueQuery = TStringBuilder() << R"__(
+ --!syntax_v1
+ DECLARE $StartProcessTimestamp as Uint64; DECLARE $NodeId as Uint32;
+ DECLARE $LockFreeTimestamp as Uint64;
+ $to_update = (
+ SELECT
+ RemoveTimestamp, QueueIdNumber,
+ $StartProcessTimestamp AS StartProcessTimestamp, $NodeId AS NodeProcess
+ FROM `)__" << removedQueuesTable << R"__(`
+ WHERE StartProcessTimestamp < $LockFreeTimestamp OR StartProcessTimestamp IS NULL OR NodeProcess = $NodeId
+ ORDER BY RemoveTimestamp LIMIT 1
+ );
+ UPDATE `)__" << removedQueuesTable << R"__(` ON SELECT * FROM $to_update;
+ )__";
+
+ UpdateLockQueueQuery = TStringBuilder() << R"__(
+ --!syntax_v1
+ DECLARE $StartProcessTimestamp as Uint64; DECLARE $NodeId as Uint32;
+ DECLARE $RemoveTimestamp as Uint64; DECLARE $QueueIdNumber as Uint64;
+ DECLARE $Now as Uint64;
+ $to_update = (
+ SELECT
+ RemoveTimestamp, QueueIdNumber, $Now AS StartProcessTimestamp
+ FROM `)__" << removedQueuesTable << R"__(`
+ WHERE RemoveTimestamp=$RemoveTimestamp AND QueueIdNumber=$QueueIdNumber
+ AND StartProcessTimestamp = $StartProcessTimestamp AND NodeProcess = $NodeId
+ );
+ UPDATE `)__" << removedQueuesTable << R"__(` ON SELECT * FROM $to_update;
+ )__";
+
+
+ SelectQueuesQuery = TStringBuilder() << R"__(
+ --!syntax_v1
+ DECLARE $StartProcessTimestamp as Uint64; DECLARE $NodeId as Uint32;
+ SELECT RemoveTimestamp, QueueIdNumber, FifoQueue, Shards, TablesFormat
+ FROM `)__" << removedQueuesTable << R"__(`
+ WHERE StartProcessTimestamp = $StartProcessTimestamp AND NodeProcess = $NodeId LIMIT 1;
+ )__";
+
+ RemoveQueueFromListQuery = TStringBuilder() << R"__(
+ --!syntax_v1
+ DECLARE $RemoveTimestamp as Uint64; DECLARE $QueueIdNumber as Uint64;
+ DELETE FROM `)__" << removedQueuesTable << R"__(`
+ WHERE RemoveTimestamp=$RemoveTimestamp AND QueueIdNumber=$QueueIdNumber
+ )__";
+
+ LockQueueToRemove(TDuration::Zero(), ctx);
+ }
+
+ void TCleanupQueueDataActor::RunGetQueuesQuery(EState state, TDuration sendAfter, const TActorContext& ctx) {
+ LOG_DEBUG_S(ctx, NKikimrServices::SQS, "[cleanup removed queues] getting queues...");
+ State = state;
+
+ NClient::TParameters params;
+ params["$StartProcessTimestamp"] = StartProcessTimestamp.Seconds();
+ params["$NodeId"] = SelfId().NodeId();
+
+ RunYqlQuery(SelectQueuesQuery, std::move(params), true, sendAfter, Cfg().GetRoot(), ctx);
+ }
+
+ void TCleanupQueueDataActor::HandleQueryResponse(NKqp::TEvKqp::TEvQueryResponse::TPtr& ev, const TActorContext& ctx) {
+ const auto& record = ev->Get()->Record.GetRef();
+ if (record.GetYdbStatus() != Ydb::StatusIds::SUCCESS) {
+ HandleError(record.DebugString(), ctx);
+ return;
+ }
+ RetryPeriod = RETRY_PERIOD_MIN;
+ auto& response = record.GetResponse();
+
+ switch(State) {
+ case EState::LockQueue: {
+ RunGetQueuesQuery(EState::GetQueue, TDuration::Zero(), ctx);
+ break;
+ }
+ case EState::UpdateLockQueue: {
+ RunGetQueuesQuery(EState::GetQueueAfterLockUpdate, TDuration::Zero(), ctx);
+ break;
+ }
+ case EState::GetQueueAfterLockUpdate:
+ case EState::GetQueue: {
+ Y_VERIFY(response.GetResults().size() == 1);
+ const auto& rr = response.GetResults(0).GetValue().GetStruct(0);
+ if (rr.GetList().empty()) {
+ LOG_DEBUG_S(ctx, NKikimrServices::SQS, "[cleanup removed queues] there are no queues to delete");
+ LockQueueToRemove(IDLE_TIMEOUT, ctx);
+ return;
+ }
+ Y_VERIFY(rr.GetList().size() == 1);
+ const auto& row = rr.GetList()[0];
+ if (State == EState::GetQueueAfterLockUpdate) {
+ ContinueRemoveData(row, ctx);
+ } else {
+ StartRemoveData(row, ctx);
+ }
+ return;
+ }
+ case EState::RemoveData: {
+ Y_VERIFY(response.GetResults().size() == 1);
+ const auto& rr = response.GetResults(0).GetValue().GetStruct(0);
+ ui64 removedRows = rr.GetList()[0].GetStruct(0).GetUint64();
+ OnRemovedData(removedRows, ctx);
+ break;
+ }
+ case EState::Finish: {
+ LOG_INFO_S(ctx, NKikimrServices::SQS, "[cleanup removed queues] queue data (queue_id_number=" << QueueIdNumber << ") removed successfuly.");
+ MonitoringCounters->CleanupRemovedQueuesDone->Inc();
+ LockQueueToRemove(TDuration::Zero(), ctx);
+ break;
+ }
+ }
+ }
+
+ void TCleanupQueueDataActor::HandleProcessResponse(NKqp::TEvKqp::TEvProcessResponse::TPtr& ev, const TActorContext& ctx) {
+ HandleError(ev->Get()->Record.DebugString(), ctx);
+ }
+
+ void TCleanupQueueDataActor::HandleError(const TString& error, const TActorContext& ctx) {
+ MonitoringCounters->CleanupRemovedQueuesErrors->Inc();
+ auto runAfter = RetryPeriod;
+ RetryPeriod = Min(RetryPeriod * 2, RETRY_PERIOD_MAX);
+ LOG_ERROR_S(ctx, NKikimrServices::SQS, "[cleanup removed queues] got an error while deleting data : " << error);
+ LockQueueToRemove(runAfter, ctx);
+ }
+
+ void TCleanupQueueDataActor::LockQueueToRemove(TDuration runAfter, const TActorContext& ctx) {
+ State = EState::LockQueue;
+
+ NClient::TParameters params;
+ StartProcessTimestamp = ctx.Now();
+ params["$StartProcessTimestamp"] = StartProcessTimestamp.Seconds();
+ params["$LockFreeTimestamp"] = (StartProcessTimestamp - LOCK_PERIOD).Seconds();
+ params["$NodeId"] = SelfId().NodeId();
+
+ RunYqlQuery(LockQueueQuery, std::move(params), false, runAfter, Cfg().GetRoot(), ctx);
+ }
+
+ void TCleanupQueueDataActor::UpdateLock(const TActorContext& ctx) {
+ LOG_DEBUG_S(ctx, NKikimrServices::SQS, "[cleanup removed queues] update queue lock...");
+ State = EState::UpdateLockQueue;
+
+ NClient::TParameters params;
+ params["$StartProcessTimestamp"] = StartProcessTimestamp.Seconds();
+ params["$NodeId"] = SelfId().NodeId();
+ params["$RemoveTimestamp"] = RemoveQueueTimetsamp;
+ params["$QueueIdNumber"] = QueueIdNumber;
+ StartProcessTimestamp = ctx.Now();
+ params["$Now"] = StartProcessTimestamp.Seconds();
+
+ RunYqlQuery(UpdateLockQueueQuery, std::move(params), false, TDuration::Zero(), Cfg().GetRoot(), ctx);
+ }
+
+ void TCleanupQueueDataActor::ContinueRemoveData(const NKikimrMiniKQL::TValue& queueRow, const TActorContext& ctx) {
+ // Select RemoveTimestamp, QueueIdNumber, FifoQueue, Shards, TablesFormat
+ ui64 queueIdNumber = queueRow.GetStruct(1).GetOptional().GetUint64();
+ if (queueIdNumber != QueueIdNumber) {
+ LOG_WARN_S(ctx, NKikimrServices::SQS, "[cleanup removed queues] got queue to continue remove data queue_id_number=" << queueIdNumber
+ << ", but was locked queue_id_number=" << QueueIdNumber);
+ StartRemoveData(queueRow, ctx);
+ return;
+ }
+
+ State = EState::RemoveData;
+ RunRemoveData(ctx);
+ }
+
+ void TCleanupQueueDataActor::StartRemoveData(const NKikimrMiniKQL::TValue& queueRow, const TActorContext& ctx) {
+ State = EState::RemoveData;
+ ClearedTablesCount = 0;
+
+ // Select RemoveTimestamp, QueueIdNumber, FifoQueue, Shards, TablesFormat
+ RemoveQueueTimetsamp = queueRow.GetStruct(0).GetOptional().GetUint64();
+ QueueIdNumber = queueRow.GetStruct(1).GetOptional().GetUint64();
+ IsFifoQueue = queueRow.GetStruct(2).GetOptional().GetBool();
+ Shards = queueRow.GetStruct(3).GetOptional().GetUint32();
+ TablesFormat = queueRow.GetStruct(4).GetOptional().GetUint32();
+
+ LOG_INFO_S(ctx, NKikimrServices::SQS, "[cleanup removed queues] got queue to remove data: removed at " << RemoveQueueTimetsamp
+ << " queue_id_number=" << QueueIdNumber << " tables_format=" << TablesFormat);
+ if (TablesFormat == 0) {
+ Finish(ctx); // TODO move code for removing directories
+ } else {
+ ClearNextTable(ctx);
+ }
+ }
+
+ void TCleanupQueueDataActor::OnRemovedData(ui64 removedRows, const TActorContext& ctx) {
+ LOG_DEBUG_S(ctx, NKikimrServices::SQS, "[cleanup removed queues] removed rows " << removedRows
+ << ", cleared tables " << ClearedTablesCount << ", shards to remove " << ShardsToRemove
+ );
+ MonitoringCounters->CleanupRemovedQueuesRows->Add(removedRows);
+ if (removedRows == 0) {
+ if (ShardsToRemove) {
+ --ShardsToRemove;
+ }
+ if (ShardsToRemove == 0) {
+ ++ClearedTablesCount;
+ ClearNextTable(ctx);
+ return;
+ }
+ }
+ RunRemoveData(ctx);
+ }
+
+ void TCleanupQueueDataActor::Finish(const TActorContext& ctx) {
+ State = EState::Finish;
+
+ NClient::TParameters params;
+ params["$RemoveTimestamp"] = RemoveQueueTimetsamp;
+ params["$QueueIdNumber"] = QueueIdNumber;
+ RunYqlQuery(RemoveQueueFromListQuery, std::move(params), false, TDuration::Zero(), Cfg().GetRoot(), ctx);
+ }
+
+ std::optional<std::pair<TString, bool>> TCleanupQueueDataActor::GetNextTable() const {
+ const auto& tables = IsFifoQueue ? FifoTables : StdTables;
+ if (ClearedTablesCount < tables.size()) {
+ return tables[ClearedTablesCount];
+ }
+ return std::nullopt;
+ }
+
+ void TCleanupQueueDataActor::RunRemoveData(const TActorContext& ctx) {
+ if (ctx.Now() - StartProcessTimestamp > UPDATE_LOCK_PERIOD) {
+ UpdateLock(ctx);
+ return;
+ }
+
+ NClient::TParameters params;
+ ui32 shard = ShardsToRemove ? (ShardsToRemove - 1) : 0;
+ params["$QueueIdNumberAndShardHash"] = GetKeysHash(QueueIdNumber, shard);
+ params["$Shard"] = shard;
+ params["$QueueIdNumberHash"] = GetKeysHash(QueueIdNumber);
+ params["$QueueIdNumber"] = QueueIdNumber;
+
+ RunYqlQuery(RemoveDataQuery, std::move(params), false, TDuration::Zero(), Cfg().GetRoot(), ctx);
+ }
+
+ void TCleanupQueueDataActor::ClearNextTable(const TActorContext& ctx) {
+ auto tableInfo = GetNextTable();
+ if (!tableInfo) {
+ Finish(ctx);
+ return;
+ }
+ auto& [tableName, hasShardColumn] = tableInfo.value();
+ auto table = GetCommonTablePath(tableName, IsFifoQueue);
+
+ TString condition;
+ if (hasShardColumn) {
+ ShardsToRemove = Shards;
+ condition = "QueueIdNumberAndShardHash = $QueueIdNumberAndShardHash AND QueueIdNumber=$QueueIdNumber AND Shard=$Shard";
+ } else {
+ ShardsToRemove = 0;
+ condition = "QueueIdNumberHash = $QueueIdNumberHash AND QueueIdNumber=$QueueIdNumber";
+ }
+
+ RemoveDataQuery = TStringBuilder() << R"__(
+ --!syntax_v1
+ DECLARE $QueueIdNumberHash as Uint64; DECLARE $QueueIdNumber as Uint64;
+ DECLARE $QueueIdNumberAndShardHash as Uint64; DECLARE $Shard as Uint32;
+ $to_delete = SELECT * FROM `)__" << table << R"__(`
+ WHERE )__" << condition << R"__( LIMIT 1000;
+
+ SELECt COUNT(*) as count FROM $to_delete;
+
+ DELETE FROM `)__" << table << R"__(` ON SELECT * FROM $to_delete;
+ )__";
+
+ RunRemoveData(ctx);
+ }
+
+
+} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/cleanup_queue_data.h b/ydb/core/ymq/actor/cleanup_queue_data.h
new file mode 100644
index 0000000000..907e051138
--- /dev/null
+++ b/ydb/core/ymq/actor/cleanup_queue_data.h
@@ -0,0 +1,78 @@
+#pragma once
+
+#include <ydb/core/kqp/kqp.h>
+#include <ydb/public/lib/deprecated/kicli/kicli.h>
+#include <ydb/core/ymq/base/counters.h>
+
+#include <library/cpp/actors/core/actor_bootstrapped.h>
+#include <library/cpp/actors/core/hfunc.h>
+#include <library/cpp/actors/core/actorsystem.h>
+#include <library/cpp/actors/core/log.h>
+
+namespace NKikimr::NSQS {
+
+class TCleanupQueueDataActor : public TActorBootstrapped<TCleanupQueueDataActor> {
+private:
+ enum class EState {
+ LockQueue,
+ UpdateLockQueue,
+ GetQueue,
+ GetQueueAfterLockUpdate,
+ RemoveData,
+ Finish
+ };
+
+public:
+ TCleanupQueueDataActor(TIntrusivePtr<TMonitoringCounters> monitoringCounters);
+
+ void Bootstrap(const TActorContext& ctx);
+
+ STRICT_STFUNC(StateFunc,
+ HFunc(NKqp::TEvKqp::TEvQueryResponse, HandleQueryResponse);
+ HFunc(NKqp::TEvKqp::TEvProcessResponse, HandleProcessResponse);
+ IgnoreFunc(NKqp::TEvKqp::TEvCloseSessionResponse);
+ )
+
+ void RunGetQueuesQuery(EState state, TDuration sendAfter, const TActorContext& ctx);
+ void HandleQueryResponse(NKqp::TEvKqp::TEvQueryResponse::TPtr& ev, const TActorContext& ctx);
+ void HandleProcessResponse(NKqp::TEvKqp::TEvProcessResponse::TPtr& ev, const TActorContext& ctx);
+
+ void HandleError(const TString& error, const TActorContext& ctx);
+ void LockQueueToRemove(TDuration runAfter, const TActorContext& ctx);
+ void UpdateLock(const TActorContext& ctx);
+ void ContinueRemoveData(const NKikimrMiniKQL::TValue& queueRow, const TActorContext& ctx);
+ void StartRemoveData(const NKikimrMiniKQL::TValue& queueRow, const TActorContext& ctx);
+
+ std::optional<std::pair<TString, bool>> GetNextTable() const;
+ void ClearNextTable(const TActorContext& ctx);
+ void OnRemovedData(ui64 removedRows, const TActorContext& ctx);
+ void RunRemoveData(const TActorContext& ctx);
+
+ void Finish(const TActorContext& ctx);
+
+
+private:
+ TIntrusivePtr<TMonitoringCounters> MonitoringCounters;
+ TDuration RetryPeriod;
+
+ TString LockQueueQuery;
+ TString UpdateLockQueueQuery;
+ TString SelectQueuesQuery;
+ TString RemoveQueueFromListQuery;
+ TString RemoveDataQuery;
+
+ EState State;
+ TInstant StartProcessTimestamp;
+
+ // Queue info
+ ui64 RemoveQueueTimetsamp;
+ ui64 QueueIdNumber;
+ bool IsFifoQueue;
+ ui32 Shards;
+ ui32 TablesFormat;
+
+ ui32 ClearedTablesCount;
+ ui32 ShardsToRemove;
+};
+
+} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/delete_queue.cpp b/ydb/core/ymq/actor/delete_queue.cpp
index 9711b91734..5ac4b89436 100644
--- a/ydb/core/ymq/actor/delete_queue.cpp
+++ b/ydb/core/ymq/actor/delete_queue.cpp
@@ -39,7 +39,13 @@ private:
SchemaActor_ = Register(
new TDeleteQueueSchemaActorV2(
- TQueuePath(Cfg().GetRoot(), UserName_, GetQueueName()), SelfId(), RequestId_, UserCounters_)
+ TQueuePath(Cfg().GetRoot(), UserName_, GetQueueName(), QueueVersion_.GetRef()),
+ IsFifo_.GetRef(),
+ TablesFormat_.GetRef(),
+ SelfId(),
+ RequestId_,
+ UserCounters_
+ )
);
}
diff --git a/ydb/core/ymq/actor/delete_user.cpp b/ydb/core/ymq/actor/delete_user.cpp
index bea58c5a7a..1b59a647ff 100644
--- a/ydb/core/ymq/actor/delete_user.cpp
+++ b/ydb/core/ymq/actor/delete_user.cpp
@@ -90,12 +90,21 @@ private:
for (size_t i = 0; i < queues.Size(); ++i) {
const TString name((TString(queues[i]["QueueName"])));
+ const ui64 version(queues[i]["Version"]);
+ const bool isFifo(queues[i]["FifoQueue"]);
+ const ui32 tablesFormat(queues[i]["TablesFormat"]);
Queues_.insert(name);
Register(
new TDeleteQueueSchemaActorV2(
- TQueuePath(Cfg().GetRoot(), Request().GetUserName(), name), SelfId(), RequestId_, UserCounters_)
+ TQueuePath(Cfg().GetRoot(), Request().GetUserName(), name, version),
+ isFifo,
+ tablesFormat,
+ SelfId(),
+ RequestId_,
+ UserCounters_
+ )
);
}
diff --git a/ydb/core/ymq/actor/events.h b/ydb/core/ymq/actor/events.h
index 1b3edbcd17..b0e631b6e2 100644
--- a/ydb/core/ymq/actor/events.h
+++ b/ydb/core/ymq/actor/events.h
@@ -126,6 +126,10 @@ struct TSqsEvents {
EvCleanupQueryComplete,
+ EvNodeTrackerSubscribeRequest,
+ EvNodeTrackerUnsubscribeRequest,
+ EvNodeTrackerSubscriptionStatus,
+
EvEnd,
};
@@ -194,7 +198,7 @@ struct TSqsEvents {
TIntrusivePtr<TQuoterResourcesForActions> QuoterResources;
// Counters
- TIntrusivePtr<NMonitoring::TDynamicCounters> SqsCoreCounters; // Raw counters interface. Is is not prefered to use them
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SqsCoreCounters; // Raw counters interface. Is is not prefered to use them
TIntrusivePtr<TUserCounters> UserCounters;
TIntrusivePtr<TQueueCounters> QueueCounters;
@@ -801,6 +805,7 @@ struct TSqsEvents {
ui64 Version = 0;
ui64 ShardsCount = 0;
TInstant CreatedTimestamp;
+ bool IsFifo = false;
bool operator<(const TQueueRecord& r) const {
return std::tie(UserName, QueueName) < std::tie(r.UserName, r.QueueName);
@@ -890,6 +895,44 @@ struct TSqsEvents {
TString Name;
ui64 Type;
};
+
+ struct TEvNodeTrackerSubscribeRequest
+ : public NActors::TEventLocal<TEvNodeTrackerSubscribeRequest, EvNodeTrackerSubscribeRequest>
+ {
+ explicit TEvNodeTrackerSubscribeRequest(
+ ui64 subscriptionId,
+ ui64 queueIdNumber,
+ bool isFifo,
+ std::optional<ui64> tabletId = {}
+ )
+ : SubscriptionId(subscriptionId)
+ , QueueIdNumber(queueIdNumber)
+ , IsFifo(isFifo)
+ , TabletId(tabletId)
+ {}
+ ui64 SubscriptionId;
+ ui64 QueueIdNumber;
+ bool IsFifo;
+ std::optional<ui64> TabletId;
+ };
+
+ struct TEvNodeTrackerUnsubscribeRequest
+ : public NActors::TEventLocal<TEvNodeTrackerUnsubscribeRequest, EvNodeTrackerUnsubscribeRequest>
+ {
+ TEvNodeTrackerUnsubscribeRequest(ui64 subscriptionId)
+ : SubscriptionId(subscriptionId)
+ {}
+ ui64 SubscriptionId;
+ };
+
+ struct TEvNodeTrackerSubscriptionStatus : public NActors::TEventLocal<TEvNodeTrackerSubscriptionStatus, EvNodeTrackerSubscriptionStatus> {
+ explicit TEvNodeTrackerSubscriptionStatus(ui64 subscriptionId, ui32 nodeId)
+ : SubscriptionId(subscriptionId)
+ , NodeId(nodeId)
+ {}
+ ui64 SubscriptionId;
+ ui32 NodeId;
+ };
};
} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/executor.cpp b/ydb/core/ymq/actor/executor.cpp
index 7bf555a97e..5300526cb0 100644
--- a/ydb/core/ymq/actor/executor.cpp
+++ b/ydb/core/ymq/actor/executor.cpp
@@ -7,7 +7,6 @@
#include <ydb/core/engine/mkql_proto.h>
#include <ydb/public/lib/value/value.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/queues/common/db_queries_maker.h>
#include <ydb/library/yql/minikql/mkql_node_serialization.h>
@@ -131,13 +130,7 @@ TMiniKqlExecutionActor::TMiniKqlExecutionActor(
, Counters_(counters)
, QueuePath_(path)
, RetryOnTimeout_(retryOnTimeout)
-{
- DebugInfo->ExecutorActors.emplace(RequestId_, this);
-}
-
-TMiniKqlExecutionActor::~TMiniKqlExecutionActor() {
- DebugInfo->ExecutorActors.EraseKeyValue(RequestId_, this);
-}
+{}
void TMiniKqlExecutionActor::Bootstrap() {
StartTs_ = TActivationContext::Now();
diff --git a/ydb/core/ymq/actor/executor.h b/ydb/core/ymq/actor/executor.h
index 4f2b3eabd0..28861cfe5c 100644
--- a/ydb/core/ymq/actor/executor.h
+++ b/ydb/core/ymq/actor/executor.h
@@ -189,8 +189,6 @@ public:
const TIntrusivePtr<TTransactionCounters>& counters,
TSqsEvents::TExecutedCallback cb = TSqsEvents::TExecutedCallback());
- ~TMiniKqlExecutionActor();
-
void Bootstrap();
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
diff --git a/ydb/core/ymq/actor/fifo_cleanup.cpp b/ydb/core/ymq/actor/fifo_cleanup.cpp
index 5d49c6f904..cd40324b66 100644
--- a/ydb/core/ymq/actor/fifo_cleanup.cpp
+++ b/ydb/core/ymq/actor/fifo_cleanup.cpp
@@ -5,7 +5,6 @@
#include <ydb/public/lib/value/value.h>
#include <ydb/core/base/appdata.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/queues/common/key_hashes.h>
#include <library/cpp/actors/core/hfunc.h>
@@ -25,13 +24,7 @@ TCleanupActor::TCleanupActor(
, RequestId_(CreateGuidAsString())
, QueueLeader_(queueLeader)
, CleanupType(cleanupType)
-{
- DebugInfo->QueueCleanupActors.emplace(TStringBuilder() << TLogQueueName(QueuePath_), this);
-}
-
-TCleanupActor::~TCleanupActor() {
- DebugInfo->QueueCleanupActors.EraseKeyValue(TStringBuilder() << TLogQueueName(QueuePath_), this);
-}
+{}
void TCleanupActor::Bootstrap() {
RLOG_SQS_INFO("Bootstrap cleanup actor for queue " << TLogQueueName(QueuePath_));
diff --git a/ydb/core/ymq/actor/fifo_cleanup.h b/ydb/core/ymq/actor/fifo_cleanup.h
index 4aa9443c89..d296510daf 100644
--- a/ydb/core/ymq/actor/fifo_cleanup.h
+++ b/ydb/core/ymq/actor/fifo_cleanup.h
@@ -15,7 +15,6 @@ public:
};
TCleanupActor(const TQueuePath& queuePath, ui32 tablesFormat, const TActorId& queueLeader, ECleanupType cleanupType);
- ~TCleanupActor();
void Bootstrap();
diff --git a/ydb/core/ymq/actor/garbage_collector.cpp b/ydb/core/ymq/actor/garbage_collector.cpp
index e82284c020..3da3ec7742 100644
--- a/ydb/core/ymq/actor/garbage_collector.cpp
+++ b/ydb/core/ymq/actor/garbage_collector.cpp
@@ -681,7 +681,7 @@ public:
IOutputStream& __stream(str);
- H4() {
+ TAG(TH4) {
str << "Garbage hints";
}
TABLE_SORTABLE_CLASS("hints-table") {
@@ -713,7 +713,7 @@ public:
IOutputStream& __stream(str);
- H4() {
+ TAG(TH4) {
str << "Cleaning history";
}
TABLE_SORTABLE_CLASS("cr-table") {
diff --git a/ydb/core/ymq/actor/migration.cpp b/ydb/core/ymq/actor/migration.cpp
deleted file mode 100644
index 8f5bf3124b..0000000000
--- a/ydb/core/ymq/actor/migration.cpp
+++ /dev/null
@@ -1,366 +0,0 @@
-#include "cfg.h"
-#include "log.h"
-#include "migration.h"
-#include "executor.h"
-
-#include <ydb/core/tx/scheme_cache/scheme_cache.h>
-#include <ydb/core/ymq/base/debug_info.h>
-#include <ydb/core/ymq/queues/common/queries.h>
-
-#include <util/string/builder.h>
-#include <util/string/join.h>
-
-#include <limits>
-
-namespace NKikimr::NSQS {
-
-class TAddColumnActor : public TActorBootstrapped<TAddColumnActor> {
-public:
- TAddColumnActor(const TString& userName,
- const TString& queueName,
- const TActorId& parent,
- const TActorId& schemeCache,
- TIntrusivePtr<TQueueCounters> counters,
- const TString& tablePath,
- const TString& columnName,
- NScheme::TTypeId columnType);
- virtual ~TAddColumnActor() = default;
-
- void Bootstrap();
-
- static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
- return NKikimrServices::TActivity::SQS_QUEUE_MIGRATION_ACTOR;
- }
-
-private:
- STATEFN(StateFunc);
-
- void HandleTableInfo(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev);
- void HandleExecuted(TSqsEvents::TEvExecuted::TPtr& ev);
-
- void SendReplyAndDie(bool ok);
-
- void GetTableInfo();
-
- void CheckAndAddColumn(const NSchemeCache::TSchemeCacheNavigate::TEntry& entry);
- THolder<TEvTxUserProxy::TEvProposeTransaction> MakeAlterTableEvent();
- void OnTableAltered(const TSqsEvents::TEvExecuted::TRecord& ev);
-
-private:
- const TString UserName;
- const TString QueueName;
- const TString TablePath;
- const TString ColumnName;
- const NScheme::TTypeId ColumnType;
- const TActorId Parent;
- const TActorId SchemeCache;
- TIntrusivePtr<TQueueCounters> Counters;
-};
-
-TAddColumnActor::TAddColumnActor(const TString& userName,
- const TString& queueName,
- const TActorId& parent,
- const TActorId& schemeCache,
- TIntrusivePtr<TQueueCounters> counters,
- const TString& tablePath,
- const TString& columnName,
- NScheme::TTypeId columnType)
- : UserName(userName)
- , QueueName(queueName)
- , TablePath(tablePath)
- , ColumnName(columnName)
- , ColumnType(columnType)
- , Parent(parent)
- , SchemeCache(schemeCache)
- , Counters(counters)
-{
-}
-
-STATEFN(TAddColumnActor::StateFunc) {
- switch (ev->GetTypeRewrite()) {
- hFunc(TEvTxProxySchemeCache::TEvNavigateKeySetResult, HandleTableInfo);
- hFunc(TSqsEvents::TEvExecuted, HandleExecuted);
- }
-}
-
-void TAddColumnActor::HandleExecuted(TSqsEvents::TEvExecuted::TPtr& ev) {
- ev->Get()->Call();
-}
-
-void TAddColumnActor::Bootstrap() {
- Become(&TAddColumnActor::StateFunc);
-
- GetTableInfo();
-}
-
-void TAddColumnActor::SendReplyAndDie(bool ok) {
- Send(Parent, new TSqsEvents::TEvMigrationDone(ok));
- PassAway();
-}
-
-void TAddColumnActor::GetTableInfo() {
- auto schemeCacheRequest = MakeHolder<NSchemeCache::TSchemeCacheNavigate>();
- schemeCacheRequest->ResultSet.emplace_back();
- auto& entry = schemeCacheRequest->ResultSet.back();
- entry.Operation = NSchemeCache::TSchemeCacheNavigate::OpTable;
- entry.Path = SplitPath(TablePath);
- Send(SchemeCache, new TEvTxProxySchemeCache::TEvNavigateKeySet(schemeCacheRequest.Release()));
-}
-
-static TString ToString(const NSchemeCache::TSchemeCacheNavigate::TEntry& entry) {
- TStringBuilder s;
- s << "{ TableId: " << entry.TableId
- << " Columns: [";
-
- for (const auto& [id, col] : entry.Columns) {
- s << " { Name: \"" << col.Name << "\""
- << " Type: " << NScheme::TypeName(col.PType)
- << " }";
- }
- s << " ] }";
- return std::move(s);
-}
-
-void TAddColumnActor::HandleTableInfo(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev) {
- const NSchemeCache::TSchemeCacheNavigate* navigate = ev->Get()->Request.Get();
- Y_VERIFY(navigate->ResultSet.size() == 1);
- const auto& entry = navigate->ResultSet.front();
- if (navigate->ErrorCount > 0) {
- LOG_SQS_ERROR("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Failed to get table \"" << TablePath << "\" info: "
- << entry.Status);
- SendReplyAndDie(false);
- } else {
- LOG_SQS_DEBUG("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Table \"" << TablePath << "\" info: "
- << ToString(entry));
- CheckAndAddColumn(entry);
- }
-}
-
-THolder<TEvTxUserProxy::TEvProposeTransaction> TAddColumnActor::MakeAlterTableEvent() {
- auto ev = MakeHolder<TEvTxUserProxy::TEvProposeTransaction>();
- // Transaction info
- auto* trans = ev->Record.MutableTransaction()->MutableModifyScheme();
- trans->SetOperationType(NKikimrSchemeOp::ESchemeOpAlterTable);
-
- auto* info = trans->MutableAlterTable();
- {
- const size_t lastSlashPos = TablePath.rfind('/');
- trans->SetWorkingDir(TablePath.substr(0, lastSlashPos));
- info->SetName(TablePath.substr(lastSlashPos + 1));
- }
-
- auto* col = info->AddColumns();
- col->SetName(ColumnName);
- col->SetType(NScheme::TypeName(ColumnType));
-
- return ev;
-}
-
-void TAddColumnActor::CheckAndAddColumn(const NSchemeCache::TSchemeCacheNavigate::TEntry& entry) {
- for (const auto& [id, col] : entry.Columns) {
- if (col.Name == ColumnName) {
- LOG_SQS_DEBUG("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Found column \"" << ColumnName << "\" in table \"" << TablePath << "\" info. Do nothing");
- SendReplyAndDie(true);
- return;
- }
- }
-
- // Column was not found. Start altering table
- auto alterTableEvent = MakeAlterTableEvent();
- LOG_SQS_INFO("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Adding column \"" << ColumnName << "\" to table \""
- << TablePath << "\": " << alterTableEvent->Record);
- auto transactionCounters = Counters->GetTransactionCounters();
- Register(new TMiniKqlExecutionActor(
- SelfId(),
- "",
- std::move(alterTableEvent),
- false,
- TQueuePath(Cfg().GetRoot(), UserName, QueueName),
- transactionCounters,
- [this](const TSqsEvents::TEvExecuted::TRecord& ev) { OnTableAltered(ev); })
- );
-}
-
-void TAddColumnActor::OnTableAltered(const TSqsEvents::TEvExecuted::TRecord& ev) {
- if (ev.GetStatus() == TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecComplete) {
- LOG_SQS_INFO("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Added column \"" << ColumnName << "\" to table \""
- << TablePath << "\": " << ev);
- SendReplyAndDie(true);
- } else {
- LOG_SQS_ERROR("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Failed to add column \"" << ColumnName << "\" to table \""
- << TablePath << "\": " << ev);
- SendReplyAndDie(false);
- }
-}
-
-
-TQueueMigrationActor::TQueueMigrationActor(const TString& userName, const TString& queueName, const TActorId& queueLeader, const TActorId& schemeCache, TIntrusivePtr<TQueueCounters> counters, TDuration waitBeforeMigration)
- : UserName(userName)
- , QueueName(queueName)
- , QueueLeader(queueLeader)
- , SchemeCache(schemeCache)
- , Counters(std::move(counters))
- , WaitBeforeMigration(waitBeforeMigration)
-{
- DebugInfo->QueueMigrationActors.emplace(TStringBuilder() << TLogQueueName(QueueName, UserName), this);
-}
-
-TQueueMigrationActor::~TQueueMigrationActor() {
- DebugInfo->QueueMigrationActors.EraseKeyValue(TStringBuilder() << TLogQueueName(QueueName, UserName), this);
-}
-
-void TQueueMigrationActor::Bootstrap() {
- Become(&TQueueMigrationActor::StateFunc);
-
- if (!Cfg().GetDoAutomaticMigration()) {
- LOG_SQS_DEBUG("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Migration is turned off. Skipping it");
- SendReplyAndDie(true);
- }
-
- if (WaitBeforeMigration) {
- Schedule(WaitBeforeMigration, new TEvWakeup());
- } else {
- GetQueueParams();
- }
-}
-
-STATEFN(TQueueMigrationActor::StateFunc) {
- switch (ev->GetTypeRewrite()) {
- hFunc(TEvWakeup, HandleWakeup);
- hFunc(TSqsEvents::TEvExecuted, HandleExecuted);
- hFunc(TSqsEvents::TEvMigrationDone, HandleMigrationDone);
- }
-}
-
-void TQueueMigrationActor::SendReplyAndDie(bool ok) {
- if (ok) {
- LOG_SQS_DEBUG("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Migration is done successfully");
- } else {
- LOG_SQS_DEBUG("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Migration failed");
- }
- Send(QueueLeader, new TSqsEvents::TEvMigrationDone(ok));
- PassAway();
-}
-
-void TQueueMigrationActor::HandleWakeup([[maybe_unused]] TEvWakeup::TPtr& ev) {
- GetQueueParams();
-}
-
-void TQueueMigrationActor::HandleExecuted(TSqsEvents::TEvExecuted::TPtr& ev) {
- ev->Get()->Call();
-}
-
-void TQueueMigrationActor::HandleMigrationDone(TSqsEvents::TEvMigrationDone::TPtr& ev) {
- // All logging was done in child actor if something happened
- if (!ev->Get()->Success) {
- Answer = false;
- }
- if (--WaitChildrenCount == 0) { // Wait all children even if there was an error to prevent heavy concurrent modifications
- SendReplyAndDie(Answer);
- }
-}
-
-void TQueueMigrationActor::GetQueueParams() {
- TExecutorBuilder(SelfId(), "")
- .User(UserName)
- .Queue(QueueName)
- .RetryOnTimeout()
- .Text(Sprintf(GetQueueParamsQuery, Cfg().GetRoot().c_str()))
- .OnExecuted([this](const TSqsEvents::TEvExecuted::TRecord& ev) { OnQueueParams(ev); })
- .Counters(Counters)
- .Params()
- .Utf8("NAME", QueueName)
- .Utf8("USER_NAME", UserName)
- .ParentBuilder().StartExecutorActor();
-}
-
-void TQueueMigrationActor::OnQueueParams(const TSqsEvents::TEvExecuted::TRecord& ev) {
- if (ev.GetStatus() == TEvTxUserProxy::TEvProposeTransactionStatus::EStatus::ExecComplete) {
- using NKikimr::NClient::TValue;
- const TValue val(TValue::Create(ev.GetExecutionEngineEvaluatedResponse()));
-
- if (bool(val["exists"])) {
- const auto data(val["queue"]);
- if (data["TablesFormat"].HaveValue() && static_cast<ui32>(data["TablesFormat"]) == 1) {
- SendReplyAndDie(true);
- }
-
- ShardsCount = data["Shards"];
- if (data["Version"].HaveValue()) {
- QueueVersion = data["Version"];
- }
- IsFifoQueue = data["FifoQueue"];
-
- LOG_SQS_DEBUG("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Got queue params: { ShardsCount: " << ShardsCount << " QueueVersion: " << QueueVersion << " IsFifoQueue: " << IsFifoQueue << " }");
-
- StartAltering();
-
- if (WaitChildrenCount == 0) {
- SendReplyAndDie(true);
- }
- } else {
- LOG_SQS_WARN("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Queue doen't exist. Do nothing");
- // Queue is deleting.
- // Do nothing.
- SendReplyAndDie(true);
- }
- } else {
- LOG_SQS_ERROR("Queue " << TLogQueueName(UserName, QueueName)
- << " migration. Failed to get queue params: " << ev);
- SendReplyAndDie(false);
- }
-}
-
-void TQueueMigrationActor::RegisterAndWaitChildMigrationActor(IActor* child) {
- Register(child);
- ++WaitChildrenCount;
-}
-
-TString TQueueMigrationActor::GetTablePath(const ui64 shard, const TString& tableName) {
- const TString queuePath = TQueuePath(Cfg().GetRoot(), UserName, QueueName, QueueVersion).GetVersionedQueuePath();
- TStringBuilder path;
- path << queuePath;
- if (shard != std::numeric_limits<ui64>::max()) {
- path << "/" << shard;
- }
- path << "/" << tableName;
- return std::move(path);
-}
-
-void TQueueMigrationActor::CheckAddColumn(const ui64 shard, const TString& tableName, const TString& columnName, NScheme::TTypeId type) {
- RegisterAndWaitChildMigrationActor(new TAddColumnActor(UserName, QueueName,
- SelfId(), SchemeCache,
- Counters,
- GetTablePath(shard, tableName), columnName, type));
-}
-
-void TQueueMigrationActor::CheckAddColumn(const TString& tableName, const TString& columnName, NScheme::TTypeId type) {
- CheckAddColumn(std::numeric_limits<ui64>::max(), tableName, columnName, type);
-}
-
-void TQueueMigrationActor::StartAltering() {
- CheckAddColumn("Attributes", "DlqName", NScheme::NTypeIds::Utf8);
- CheckAddColumn("Attributes", "DlqArn", NScheme::NTypeIds::Utf8);
- CheckAddColumn("Attributes", "MaxReceiveCount", NScheme::NTypeIds::Uint64);
- CheckAddColumn("Attributes", "ShowDetailedCountersDeadline", NScheme::NTypeIds::Uint64);
-
- CheckAddColumn("State", "InflyVersion", NScheme::NTypeIds::Uint64);
- if (!IsFifoQueue) {
- for (ui64 shard = 0; shard < ShardsCount; ++shard) {
- CheckAddColumn(shard, "Infly", "DelayDeadline", NScheme::NTypeIds::Uint64);
- }
- }
-}
-
-} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/migration.h b/ydb/core/ymq/actor/migration.h
deleted file mode 100644
index 501ec050f3..0000000000
--- a/ydb/core/ymq/actor/migration.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#pragma once
-#include "defs.h"
-#include <ydb/core/ymq/actor/events.h>
-#include <ydb/core/protos/services.pb.h>
-#include <ydb/public/lib/scheme_types/scheme_type_id.h>
-
-#include <library/cpp/actors/core/actor.h>
-
-namespace NKikimr::NSQS {
-
-class TQueueMigrationActor : public TActorBootstrapped<TQueueMigrationActor> {
-public:
- TQueueMigrationActor(const TString& userName, const TString& queueName, const TActorId& queueLeader, const TActorId& schemeCache, TIntrusivePtr<TQueueCounters> counters, TDuration waitBeforeMigration = TDuration::Zero());
- ~TQueueMigrationActor();
-
- void Bootstrap();
-
- static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
- return NKikimrServices::TActivity::SQS_QUEUE_MIGRATION_ACTOR;
- }
-
-private:
- STATEFN(StateFunc);
-
- void HandleWakeup(TEvWakeup::TPtr& ev);
- void HandleExecuted(TSqsEvents::TEvExecuted::TPtr& ev);
- void HandleMigrationDone(TSqsEvents::TEvMigrationDone::TPtr& ev);
-
- void SendReplyAndDie(bool ok);
-
- void GetQueueParams();
- void OnQueueParams(const TSqsEvents::TEvExecuted::TRecord& ev);
-
- void StartAltering();
-
- void RegisterAndWaitChildMigrationActor(IActor* child);
-
- void CheckAddColumn(const ui64 shard, const TString& tableName, const TString& columnName, NScheme::TTypeId type);
- void CheckAddColumn(const TString& tableName, const TString& columnName, NScheme::TTypeId type);
-
- TString GetTablePath(const ui64 shard, const TString& tableName);
-
-private:
- const TString UserName;
- const TString QueueName;
- const TActorId QueueLeader;
- const TActorId SchemeCache;
- TIntrusivePtr<TQueueCounters> Counters;
- TDuration WaitBeforeMigration;
- bool IsFifoQueue = false;
- ui64 ShardsCount = 0;
- ui64 QueueVersion = 0;
- size_t WaitChildrenCount = 0;
- bool Answer = true;
-};
-
-} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/monitoring.cpp b/ydb/core/ymq/actor/monitoring.cpp
new file mode 100644
index 0000000000..3f0d569825
--- /dev/null
+++ b/ydb/core/ymq/actor/monitoring.cpp
@@ -0,0 +1,69 @@
+#include "monitoring.h"
+
+#include <ydb/core/ymq/actor/cfg.h>
+#include <ydb/core/ymq/base/run_query.h>
+
+
+namespace NKikimr::NSQS {
+
+ constexpr TDuration RETRY_PERIOD_MIN = TDuration::Seconds(30);
+ constexpr TDuration RETRY_PERIOD_MAX = TDuration::Minutes(5);
+
+
+ TMonitoringActor::TMonitoringActor(TIntrusivePtr<TMonitoringCounters> counters)
+ : Counters(counters)
+ , RetryPeriod(RETRY_PERIOD_MIN)
+ {}
+
+ void TMonitoringActor::Bootstrap(const TActorContext& ctx) {
+ Become(&TMonitoringActor::StateFunc);
+
+ TString removedQueuesTable = Cfg().GetRoot() + "/.RemovedQueues";
+ RemovedQueuesQuery = TStringBuilder() << R"__(
+ --!syntax_v1
+ SELECT RemoveTimestamp FROM `)__" << removedQueuesTable << R"__(` ORDER BY RemoveTimestamp LIMIT 1000;
+ )__";
+
+ RequestMetrics(TDuration::Zero(), ctx);
+ }
+
+ void TMonitoringActor::HandleError(const TString& error, const TActorContext& ctx) {
+ auto runAfter = RetryPeriod;
+ RetryPeriod = Min(RetryPeriod * 2, RETRY_PERIOD_MAX);
+ LOG_ERROR_S(ctx, NKikimrServices::SQS, "[monitoring] Got an error : " << error);
+ RequestMetrics(runAfter, ctx);
+ }
+
+ void TMonitoringActor::RequestMetrics(TDuration runAfter, const TActorContext& ctx) {
+ RunYqlQuery(RemovedQueuesQuery, std::nullopt, true, runAfter, Cfg().GetRoot(), ctx);
+ }
+
+ void TMonitoringActor::HandleQueryResponse(NKqp::TEvKqp::TEvQueryResponse::TPtr& ev, const TActorContext& ctx) {
+ const auto& record = ev->Get()->Record.GetRef();
+ if (record.GetYdbStatus() != Ydb::StatusIds::SUCCESS) {
+ HandleError(record.DebugString(), ctx);
+ return;
+ }
+ RetryPeriod = RETRY_PERIOD_MIN;
+ auto& response = record.GetResponse();
+
+ Y_VERIFY(response.GetResults().size() == 1);
+ const auto& rr = response.GetResults(0).GetValue().GetStruct(0);
+ TDuration removeQueuesDataLag;
+
+ if (!rr.GetList().empty()) {
+ TInstant minRemoveQueueTimestamp = TInstant::MilliSeconds(rr.GetList()[0].GetStruct(0).GetOptional().GetUint64());
+ removeQueuesDataLag = ctx.Now() - minRemoveQueueTimestamp;
+ }
+
+ LOG_DEBUG_S(ctx, NKikimrServices::SQS, "[monitoring] Report deletion queue data lag: " << removeQueuesDataLag << ", count: " << rr.GetList().size());
+ *Counters->CleanupRemovedQueuesLagSec = removeQueuesDataLag.Seconds();
+ *Counters->CleanupRemovedQueuesLagCount = rr.GetList().size();
+ RequestMetrics(RetryPeriod, ctx);
+ }
+
+ void TMonitoringActor::HandleProcessResponse(NKqp::TEvKqp::TEvProcessResponse::TPtr& ev, const TActorContext& ctx) {
+ HandleError(ev->Get()->Record.DebugString(), ctx);
+ }
+
+} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/monitoring.h b/ydb/core/ymq/actor/monitoring.h
new file mode 100644
index 0000000000..c7d0e47e33
--- /dev/null
+++ b/ydb/core/ymq/actor/monitoring.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include <ydb/core/kqp/kqp.h>
+#include <ydb/core/ymq/base/counters.h>
+#include <ydb/public/lib/deprecated/kicli/kicli.h>
+
+#include <library/cpp/actors/core/actor_bootstrapped.h>
+#include <library/cpp/actors/core/hfunc.h>
+#include <library/cpp/actors/core/actorsystem.h>
+#include <library/cpp/actors/core/log.h>
+
+
+namespace NKikimr::NSQS {
+
+class TMonitoringActor : public TActorBootstrapped<TMonitoringActor> {
+private:
+ enum class EState {
+ LockQueue,
+ GetQueue,
+ RemoveData,
+ Finish
+ };
+
+public:
+ TMonitoringActor(TIntrusivePtr<TMonitoringCounters> counters);
+
+ void Bootstrap(const TActorContext& ctx);
+
+ STRICT_STFUNC(StateFunc,
+ HFunc(NKqp::TEvKqp::TEvQueryResponse, HandleQueryResponse);
+ HFunc(NKqp::TEvKqp::TEvProcessResponse, HandleProcessResponse);
+ IgnoreFunc(NKqp::TEvKqp::TEvCloseSessionResponse);
+ )
+
+ void RequestMetrics(TDuration runAfter, const TActorContext& ctx);
+
+ void HandleError(const TString& error, const TActorContext& ctx);
+
+ void HandleQueryResponse(NKqp::TEvKqp::TEvQueryResponse::TPtr& ev, const TActorContext& ctx);
+ void HandleProcessResponse(NKqp::TEvKqp::TEvProcessResponse::TPtr& ev, const TActorContext& ctx);
+
+
+
+private:
+ TIntrusivePtr<TMonitoringCounters> Counters;
+ TDuration RetryPeriod;
+
+ TString RemovedQueuesQuery;
+};
+
+} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/node_tracker.cpp b/ydb/core/ymq/actor/node_tracker.cpp
new file mode 100644
index 0000000000..eab06da69a
--- /dev/null
+++ b/ydb/core/ymq/actor/node_tracker.cpp
@@ -0,0 +1,394 @@
+#include "node_tracker.h"
+
+#include <ydb/core/base/path.h>
+#include <ydb/core/ymq/actor/cfg.h>
+#include <ydb/core/ymq/actor/serviceid.h>
+#include <ydb/core/ymq/queues/common/key_hashes.h>
+
+#include <util/string/vector.h>
+
+namespace {
+ ui64 GetKeyCellValue(const NKikimr::TCell& cell) {
+ return cell.IsNull() ? Max<ui64>() : cell.AsValue<ui64>();
+ }
+
+ std::tuple<ui64, ui64> GetKeysPrefix(const TConstArrayRef<NKikimr::TCell>& cells) {
+ if (cells.empty()) {
+ return {Max<ui64>(), Max<ui64>()};
+ }
+ return {GetKeyCellValue(cells[0]), GetKeyCellValue(cells[1])};
+ }
+
+ constexpr ui64 STD_PATH_SUBSCRIPTION_KEY = 1;
+ constexpr ui64 FIFO_PATH_SUBSCRIPTION_KEY = 2;
+}
+
+namespace NKikimr::NSQS {
+ TNodeTrackerActor::TSubscriberInfo::TSubscriberInfo(
+ ui64 queueIdNumber,
+ bool isFifo,
+ std::optional<ui64> specifiedLeaderTabletId,
+ std::optional<ui32> nodeId
+ )
+ : QueueIdNumber(queueIdNumber)
+ , IsFifo(isFifo)
+ , SpecifiedLeaderTabletId(specifiedLeaderTabletId)
+ , NodeId(nodeId)
+ {}
+
+ const char* TNodeTrackerActor::GetLogPrefix() {
+ return "[Node tracker] ";
+ }
+
+ TNodeTrackerActor::TNodeTrackerActor(NActors::TActorId schemeCacheActor)
+ : SchemeCacheActor(schemeCacheActor)
+ , TablePathSTD(NKikimr::SplitPath(Cfg().GetRoot() + "/.STD/Messages"))
+ , TablePathFIFO(NKikimr::SplitPath(Cfg().GetRoot() + "/.FIFO/Messages"))
+ {
+ }
+
+ void TNodeTrackerActor::Bootstrap(const NActors::TActorContext& ctx) {
+ ParentActor = MakeSqsServiceID(SelfId().NodeId());
+ Become(&TNodeTrackerActor::WorkFunc);
+ ScheduleDescribeTables(TDuration::Zero(), ctx);
+ Schedule(CLEANUP_UNUSED_TABLETS_PERIOD, new TEvents::TEvWakeup());
+ LOG_SQS_DEBUG(GetLogPrefix() << "bootstrap on node=" << SelfId().NodeId());
+ }
+
+ void TNodeTrackerActor::HandleWakeup(TEvWakeup::TPtr&, const NActors::TActorContext& ctx) {
+ // removed unused tablets
+ for (auto it = LastAccessOfTabletWithoutSubscribers.begin(); it != LastAccessOfTabletWithoutSubscribers.end();) {
+ ui64 tabletId = it->first;
+ TInstant lastAccess = it->second;
+ auto currentIt = it++;
+ if (ctx.Now() - lastAccess >= CLEANUP_UNUSED_TABLETS_PERIOD) {
+ auto infoIt = TabletsInfo.find(tabletId);
+ if (infoIt != TabletsInfo.end()) {
+ ClosePipeToTablet(infoIt->second);
+ TabletsInfo.erase(infoIt);
+ LastAccessOfTabletWithoutSubscribers.erase(currentIt);
+ } else {
+ LOG_SQS_ERROR(GetLogPrefix() << "unknown tabletId=" << tabletId << " with last access at " << lastAccess << " in unused tablets cleanup");
+ }
+ }
+ }
+
+ Schedule(CLEANUP_UNUSED_TABLETS_PERIOD, new TEvents::TEvWakeup());
+ }
+
+ void TNodeTrackerActor::ScheduleDescribeTables(TDuration runAfter, const NActors::TActorContext& ctx) {
+ LOG_SQS_NOTICE(GetLogPrefix() << "schedule describe tables after " << runAfter);
+ auto navigateRequest = std::make_unique<NSchemeCache::TSchemeCacheNavigate>();
+ //navigateRequest->DatabaseName = Cfg().GetRoot();
+
+ navigateRequest->ResultSet.resize(2);
+ navigateRequest->ResultSet.front().Path = TablePathSTD;
+ navigateRequest->ResultSet.back().Path = TablePathFIFO;
+ ctx.ExecutorThread.ActorSystem->Schedule(
+ runAfter,
+ new IEventHandle(
+ SchemeCacheActor,
+ SelfId(),
+ new TEvTxProxySchemeCache::TEvNavigateKeySet(navigateRequest.release())
+ )
+ );
+ }
+
+ void TNodeTrackerActor::DescribeTablesFailed(const TString& error, const NActors::TActorContext& ctx) {
+ LOG_SQS_ERROR(GetLogPrefix() << "describe tables failed: " << error);
+ DescribeTablesRetyPeriod = Min(
+ DESCRIBE_TABLES_PERIOD_MAX,
+ 2 * Max(DescribeTablesRetyPeriod, TDuration::MilliSeconds(100))
+ );
+ ScheduleDescribeTables(DescribeTablesRetyPeriod, ctx);
+ }
+
+ void TNodeTrackerActor::HandlePipeClientConnected(TEvTabletPipe::TEvClientConnected::TPtr& ev, const NActors::TActorContext& ctx) {
+ ui64 tabletId = ev->Get()->TabletId;
+ auto it = TabletsInfo.find(tabletId);
+ if (it == TabletsInfo.end()) {
+ LOG_SQS_WARN(GetLogPrefix() << "connected to unrequired tablet. Tablet id: [" << tabletId << "]. Client pipe actor: " << ev->Get()->ClientId << ". Server pipe actor: " << ev->Get()->ServerId);
+ return;
+ }
+
+ auto& info = it->second;
+ if (ev->Get()->Status != NKikimrProto::OK) {
+ LOG_SQS_WARN(GetLogPrefix() << "failed to connect to tablet " << tabletId << " dead=" << ev->Get()->Dead);
+
+ if (ev->Get()->Dead) {
+ MoveSubscribersFromTablet(tabletId, info, ctx);
+ return;
+ }
+ ReconnectToTablet(tabletId);
+ return;
+ }
+
+ LOG_SQS_DEBUG(GetLogPrefix() << "connected to tabletId [" << tabletId << "]. Client pipe actor: " << ev->Get()->ClientId << ". Server pipe actor: " << ev->Get()->ServerId);
+ info.PipeServer = ev->Get()->ServerId;
+ ui32 nodeId = info.PipeServer.NodeId();
+ for (auto& [id, subscriber] : info.Subscribers) {
+ if (!subscriber->NodeId || subscriber->NodeId.value() != nodeId) {
+ subscriber->NodeId = nodeId;
+ AnswerForSubscriber(id, nodeId);
+ }
+ }
+ }
+
+ void TNodeTrackerActor::AnswerForSubscriber(ui64 subscriptionId, ui32 nodeId) {
+ Send(ParentActor, new TSqsEvents::TEvNodeTrackerSubscriptionStatus(subscriptionId, nodeId));
+ }
+
+ void TNodeTrackerActor::HandlePipeClientDisconnected(TEvTabletPipe::TEvClientDestroyed::TPtr& ev, const NActors::TActorContext&) {
+ auto it = TabletsInfo.find(ev->Get()->TabletId);
+ if (it != TabletsInfo.end()) {
+ LOG_SQS_DEBUG(GetLogPrefix() << "tablet pipe " << ev->Get()->TabletId << " disconnected");
+ ReconnectToTablet(ev->Get()->TabletId);
+ } else {
+ LOG_SQS_WARN(GetLogPrefix() << " disconnected from unrequired tablet id: [" << ev->Get()->TabletId << "]. Client pipe actor: " << ev->Get()->ClientId << ". Server pipe actor: " << ev->Get()->ServerId);
+ }
+ }
+
+ void TNodeTrackerActor::ClosePipeToTablet(TTabletInfo& info) {
+ if (info.PipeClient) {
+ NTabletPipe::CloseClient(SelfId(), info.PipeClient);
+ info.PipeClient = info.PipeServer = TActorId();
+ }
+ }
+
+ TNodeTrackerActor::TTabletInfo& TNodeTrackerActor::ConnectToTablet(ui64 tabletId, bool isReconnect) {
+ LOG_SQS_DEBUG(GetLogPrefix() << "connect to tablet " << tabletId << " is_reconnect=" << isReconnect);
+ NTabletPipe::TClientConfig cfg;
+ cfg.AllowFollower = false;
+ cfg.CheckAliveness = true;
+ cfg.RetryPolicy = {.RetryLimitCount = 3, .MinRetryTime = TDuration::MilliSeconds(100), .DoFirstRetryInstantly = !isReconnect};
+
+ auto& info = TabletsInfo[tabletId];
+ ClosePipeToTablet(info);
+ info.PipeClient = Register(NTabletPipe::CreateClient(SelfId(), tabletId, cfg));
+ return info;
+ }
+
+ TNodeTrackerActor::TTabletInfo& TNodeTrackerActor::ReconnectToTablet(ui64 tabletId) {
+ return ConnectToTablet(tabletId, true);
+ }
+
+ TNodeTrackerActor::TTabletInfo& TNodeTrackerActor::GetTabletInfo(ui64 tabletId) {
+ auto it = TabletsInfo.find(tabletId);
+ if (it == TabletsInfo.end()) {
+ return ConnectToTablet(tabletId);
+ }
+ return it->second;
+ }
+
+ void TNodeTrackerActor::RemoveSubscriber(TSqsEvents::TEvNodeTrackerUnsubscribeRequest::TPtr& request, const NActors::TActorContext& ctx) {
+ ui64 subscriptionId = request->Get()->SubscriptionId;
+ LOG_SQS_DEBUG(GetLogPrefix() << "remove subscriber with id=" << subscriptionId);
+ auto it = TabletPerSubscriptionId.find(subscriptionId);
+ if (it != TabletPerSubscriptionId.end()) {
+ auto tabletIt = TabletsInfo.find(it->second);
+ if (tabletIt != TabletsInfo.end()) {
+ auto& info = tabletIt->second;
+ info.Subscribers.erase(subscriptionId);
+ if (info.Subscribers.empty()) {
+ LastAccessOfTabletWithoutSubscribers[tabletIt->first] = ctx.Now();
+ }
+ } else {
+ LOG_SQS_WARN("Node tracker removing subscription " << subscriptionId << "that is not found in the tablet information " << tabletIt->first);
+ }
+ TabletPerSubscriptionId.erase(it);
+ } else {
+ auto subscriptionIt = SubscriptionsAwaitingPartitionsUpdates.find(subscriptionId);
+ if (subscriptionIt != SubscriptionsAwaitingPartitionsUpdates.end()) {
+ SubscriptionsAwaitingPartitionsUpdates.erase(subscriptionIt);
+ } else {
+ LOG_SQS_WARN("Node tracker removing unknown subscription " << subscriptionId);
+ }
+ }
+ }
+
+ bool TNodeTrackerActor::SubscriberMustWait(const TSubscriberInfo& subscriber) const {
+ if (subscriber.SpecifiedLeaderTabletId) {
+ return false;
+ }
+ // partitions of the common table have not yet been received
+ if (subscriber.IsFifo) {
+ return TabletsPerEndKeyRangeFIFO.empty();
+ }
+ return TabletsPerEndKeyRangeSTD.empty();
+ }
+
+ void TNodeTrackerActor::AddSubscriber(TSqsEvents::TEvNodeTrackerSubscribeRequest::TPtr& request, const NActors::TActorContext& ctx) {
+ auto& req = *request->Get();
+ LOG_SQS_DEBUG(GetLogPrefix() << "add subscriber on init with id=" << req.SubscriptionId
+ << " queue_id_number=" << req.QueueIdNumber << " is_fifo=" << req.IsFifo
+ << " tablet_id=" << req.TabletId.value_or(0)
+ );
+ auto subscriber = std::make_unique<TSubscriberInfo>(req.QueueIdNumber, req.IsFifo, req.TabletId);
+
+ if (SubscriberMustWait(*subscriber)) {
+ SubscriptionsAwaitingPartitionsUpdates[req.SubscriptionId] = std::move(subscriber);
+ return;
+ }
+
+ AddSubscriber(req.SubscriptionId, std::move(subscriber), ctx);
+ }
+
+ void TNodeTrackerActor::AddSubscriber(ui64 subscriptionId, std::unique_ptr<TSubscriberInfo> subscriber, const NActors::TActorContext&) {
+ ui64 tabletId = GetTabletId(*subscriber);
+ TabletPerSubscriptionId[subscriptionId] = tabletId;
+ TTabletInfo& info = GetTabletInfo(tabletId);
+
+ if (info.PipeServer) {
+ ui32 nodeId = info.PipeServer.NodeId();
+ subscriber->NodeId = nodeId;
+ AnswerForSubscriber(subscriptionId, nodeId);
+ }
+ LOG_SQS_DEBUG(GetLogPrefix() << "add subscriber queue_id_number=" << subscriber->QueueIdNumber
+ << " leader_tablet_specified=" << subscriber->SpecifiedLeaderTabletId.has_value()
+ << " tablet_id=" << tabletId
+ << " node_resolved=" << subscriber->NodeId.has_value() << "/" << subscriber->NodeId.value_or(0));
+ info.Subscribers[subscriptionId] = std::move(subscriber);
+ if (info.Subscribers.size() == 1) {
+ LastAccessOfTabletWithoutSubscribers.erase(tabletId);
+ }
+ }
+
+ ui64 TNodeTrackerActor::GetTabletId(const TMap<TKeyPrefix, ui64>& tabletsPerEndKeyRange, TKeyPrefix keyPrefix) const {
+ auto it = tabletsPerEndKeyRange.lower_bound(keyPrefix);
+ Y_VERIFY(it != tabletsPerEndKeyRange.end());
+ return it->second;
+ }
+
+ ui64 TNodeTrackerActor::GetTabletId(const TSubscriberInfo& subscriber) const {
+ if (subscriber.SpecifiedLeaderTabletId) {
+ return subscriber.SpecifiedLeaderTabletId.value();
+ }
+
+ TKeyPrefix keyPrefix;
+ if (subscriber.IsFifo) {
+ keyPrefix = {GetKeysHash(subscriber.QueueIdNumber), subscriber.QueueIdNumber};
+ return GetTabletId(TabletsPerEndKeyRangeFIFO, keyPrefix);
+ }
+
+ keyPrefix = {GetKeysHash(subscriber.QueueIdNumber, 0 /*shard*/), subscriber.QueueIdNumber};
+ return GetTabletId(TabletsPerEndKeyRangeSTD, keyPrefix);
+ }
+
+ void TNodeTrackerActor::MoveSubscribersFromTablet(ui64 tabletId, const NActors::TActorContext& ctx) {
+ auto it = TabletsInfo.find(tabletId);
+ if (it != TabletsInfo.end()) {
+ MoveSubscribersFromTablet(tabletId, it->second, ctx);
+ }
+ }
+
+ void TNodeTrackerActor::MoveSubscribersFromTablet(ui64 tabletId, TTabletInfo& info, const NActors::TActorContext& ctx) {
+ LOG_SQS_DEBUG(GetLogPrefix() << "move subscribers from " << tabletId);
+ if (!info.Subscribers.empty()) {
+ for (auto& [id, subscriber] : info.Subscribers) {
+ SubscriptionsAwaitingPartitionsUpdates[id] = std::move(subscriber);
+ TabletPerSubscriptionId.erase(id);
+ }
+ info.Subscribers.clear();
+ LastAccessOfTabletWithoutSubscribers[tabletId] = ctx.Now();
+ }
+ }
+
+ void TNodeTrackerActor::MoveSubscribersAfterKeyRangeChanged(
+ const TMap<TKeyPrefix, ui64>& current,
+ const TMap<TKeyPrefix, ui64>& actual,
+ const NActors::TActorContext& ctx
+ ) {
+ TKeyPrefix lastCurrent{0, 0};
+ TKeyPrefix lastActual{0, 0};
+
+ auto currentIt = current.begin();
+ auto actualIt = actual.begin();
+ while (currentIt != current.end() && actualIt != actual.end()) {
+ std::pair<TKeyPrefix, TKeyPrefix> intervalC(lastCurrent, currentIt->first);
+ std::pair<TKeyPrefix, TKeyPrefix> intervalA(lastActual, actualIt->first);
+ if (intervalA == intervalC) {
+ if (currentIt->second != actualIt->second) {
+ MoveSubscribersFromTablet(currentIt->second, ctx);
+ }
+ ++currentIt;
+ ++actualIt;
+ } else if (intervalC.second < intervalA.first) { // don't intersect (CCCCC]...(AAAAA]
+ MoveSubscribersFromTablet(currentIt->second, ctx);
+ ++currentIt;
+ } else if (intervalA.second < intervalC.first) { // don't intersect (AAAAA]...(CCCCC]
+ ++actualIt;
+ } else { // intersect
+ MoveSubscribersFromTablet(currentIt->second, ctx);
+ if (intervalC.second <= intervalA.second) {
+ ++currentIt;
+ } else {
+ ++actualIt;
+ }
+ }
+ lastCurrent = intervalC.second;
+ lastActual = intervalA.second;
+ }
+ Y_VERIFY(currentIt == current.end());
+ }
+
+ void TNodeTrackerActor::UpdateKeyRanges(
+ TMap<TKeyPrefix, ui64>& currentTabletsPerEndKeyRange,
+ const NKikimrSchemeOp::TPathDescription& description,
+ const NActors::TActorContext& ctx
+ ) {
+ TMap<TKeyPrefix, ui64> tabletsPerEndKeyRange;
+ for (auto part : description.GetTablePartitions()) {
+ TSerializedCellVec endKeyPrefix(part.GetEndOfRangeKeyPrefix());
+ auto cells = endKeyPrefix.GetCells();
+ auto endKeyRange = GetKeysPrefix(cells);
+ tabletsPerEndKeyRange[endKeyRange] = part.GetDatashardId();
+ }
+
+ MoveSubscribersAfterKeyRangeChanged(currentTabletsPerEndKeyRange, tabletsPerEndKeyRange, ctx);
+ currentTabletsPerEndKeyRange = std::move(tabletsPerEndKeyRange);
+ }
+
+ void TNodeTrackerActor::HandleCacheNavigateResponse(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev, const NActors::TActorContext& ctx) {
+ LOG_SQS_DEBUG(GetLogPrefix() << "got tables description.");
+ const NSchemeCache::TSchemeCacheNavigate* result = ev->Get()->Request.Get();
+ Y_VERIFY(result->ResultSet.size() == 2);
+ for (auto result : result->ResultSet) {
+ if (result.Status != NSchemeCache::TSchemeCacheNavigate::EStatus::Ok) {
+ DescribeTablesFailed(TStringBuilder() << "describe tables failed : " << result.ToString(), ctx);
+ return;
+ }
+ LOG_SQS_INFO(GetLogPrefix() << "got table description: " << result.ToString());
+ bool isFifo = (result.Path == TablePathFIFO);
+ ui64 pathSubscriptonKey = isFifo ? FIFO_PATH_SUBSCRIPTION_KEY : STD_PATH_SUBSCRIPTION_KEY;
+ Send(SchemeCacheActor, new TEvTxProxySchemeCache::TEvWatchPathId(result.TableId.PathId, pathSubscriptonKey));
+ }
+ DescribeTablesRetyPeriod = DESCRIBE_TABLES_PERIOD_MIN;
+ }
+
+ void TNodeTrackerActor::Handle(TEvTxProxySchemeCache::TEvWatchNotifyUpdated::TPtr& ev, const NActors::TActorContext& ctx) {
+ const auto& describeResult = *ev->Get()->Result;
+ const auto& pathDescription = describeResult.GetPathDescription();
+ LOG_SQS_INFO(GetLogPrefix() << "got actual description for ["
+ << ev->Get()->PathId << " / " << describeResult.GetPath() << "] partitions=" << pathDescription.GetTablePartitions().size());
+
+ bool isFifo = ev->Get()->Key == FIFO_PATH_SUBSCRIPTION_KEY;
+ if (isFifo) {
+ UpdateKeyRanges(TabletsPerEndKeyRangeFIFO, pathDescription, ctx);
+ } else {
+ UpdateKeyRanges(TabletsPerEndKeyRangeSTD, pathDescription, ctx);
+ }
+
+ auto it = SubscriptionsAwaitingPartitionsUpdates.begin();
+ while (it != SubscriptionsAwaitingPartitionsUpdates.end()) {
+ if (SubscriberMustWait(*it->second)) {
+ ++it;
+ } else {
+ AddSubscriber(it->first, std::move(it->second), ctx);
+ auto itToRemove = it;
+ ++it;
+ SubscriptionsAwaitingPartitionsUpdates.erase(itToRemove);
+ }
+ }
+ }
+
+} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/node_tracker.h b/ydb/core/ymq/actor/node_tracker.h
new file mode 100644
index 0000000000..aa4dd94161
--- /dev/null
+++ b/ydb/core/ymq/actor/node_tracker.h
@@ -0,0 +1,121 @@
+#pragma once
+
+#include "events.h"
+#include "log.h"
+
+#include <ydb/core/base/tablet_pipe.h>
+
+#include <library/cpp/actors/core/actor_bootstrapped.h>
+
+namespace NKikimr::NSQS {
+
+class TNodeTrackerActor : public TActorBootstrapped<TNodeTrackerActor>{
+private:
+ static constexpr TDuration CLEANUP_UNUSED_TABLETS_PERIOD = TDuration::Minutes(10);
+ static constexpr TDuration DESCRIBE_TABLES_PERIOD_MIN = TDuration::Zero();
+ static constexpr TDuration DESCRIBE_TABLES_PERIOD_MAX = TDuration::Seconds(5);
+
+ using TKeyPrefix = std::tuple<ui64, ui64>;
+
+private:
+ struct TSubscriberInfo {
+ using TPtr = std::unique_ptr<TSubscriberInfo>;
+
+ TSubscriberInfo(
+ ui64 queueIdNumber,
+ bool isFifo,
+ std::optional<ui64> specifiedLeaderTabletId,
+ std::optional<ui32> nodeId = std::nullopt
+ );
+
+ const ui64 QueueIdNumber;
+ const bool IsFifo;
+ const std::optional<ui64> SpecifiedLeaderTabletId;
+
+ std::optional<ui32> NodeId;
+ };
+
+ struct TTabletInfo {
+ TActorId PipeClient;
+ TActorId PipeServer;
+ THashMap<ui64, TSubscriberInfo::TPtr> Subscribers;
+ };
+
+public:
+ static const char* GetLogPrefix();
+
+ TNodeTrackerActor(NActors::TActorId schemeCacheActor);
+ void Bootstrap(const NActors::TActorContext& ctx);
+
+ void WorkFunc(TAutoPtr<IEventHandle>& ev, const NActors::TActorContext& ctx) {
+ switch (ev->GetTypeRewrite()) {
+ HFunc(TEvWakeup, HandleWakeup);
+ HFunc(TEvTxProxySchemeCache::TEvNavigateKeySetResult, HandleCacheNavigateResponse);
+ HFunc(TSqsEvents::TEvNodeTrackerSubscribeRequest, AddSubscriber);
+ HFunc(TSqsEvents::TEvNodeTrackerUnsubscribeRequest, RemoveSubscriber);
+ HFunc(TEvTabletPipe::TEvClientDestroyed, HandlePipeClientDisconnected);
+ HFunc(TEvTabletPipe::TEvClientConnected, HandlePipeClientConnected);
+ HFunc(TEvTxProxySchemeCache::TEvWatchNotifyUpdated, Handle);
+ default:
+ LOG_SQS_ERROR("Unknown type of event came to SQS node tracker actor: " << ev->Type << " (" << ev->GetBase()->ToString() << "), sender: " << ev->Sender);
+ }
+ }
+
+ void HandleWakeup(TEvWakeup::TPtr&, const NActors::TActorContext& ctx);
+ void ScheduleDescribeTables(TDuration runAfter, const NActors::TActorContext& ctx);
+ void DescribeTablesFailed(const TString& error, const NActors::TActorContext& ctx);
+
+ void HandlePipeClientConnected(TEvTabletPipe::TEvClientConnected::TPtr& ev, const NActors::TActorContext& ctx);
+ void HandlePipeClientDisconnected(TEvTabletPipe::TEvClientDestroyed::TPtr& ev, const NActors::TActorContext&);
+ void ClosePipeToTablet(TTabletInfo& info);
+ TTabletInfo& ConnectToTablet(ui64 tabletId, bool isReconnect = false);
+ TTabletInfo& ReconnectToTablet(ui64 tabletId);
+ TTabletInfo& GetTabletInfo(ui64 tabletId);
+
+
+ ui64 GetTabletId(const TMap<TKeyPrefix, ui64>& tabletsPerEndKeyRange, TKeyPrefix keyPrefix) const;
+ ui64 GetTabletId(const TSubscriberInfo& subscriber) const;
+
+ void AnswerForSubscriber(ui64 subscriptionId, ui32 nodeId);
+ void RemoveSubscriber(TSqsEvents::TEvNodeTrackerUnsubscribeRequest::TPtr& request, const NActors::TActorContext& ctx);
+ bool SubscriberMustWait(const TSubscriberInfo& subscriber) const;
+ void AddSubscriber(TSqsEvents::TEvNodeTrackerSubscribeRequest::TPtr& request, const NActors::TActorContext& ctx);
+ void AddSubscriber(ui64 subscriptionId, std::unique_ptr<TSubscriberInfo> subscriber, const NActors::TActorContext&);
+ void MoveSubscribersFromTablet(ui64 tabletId, const NActors::TActorContext& ctx);
+ void MoveSubscribersFromTablet(ui64 tabletId, TTabletInfo& info, const NActors::TActorContext& ctx);
+ void MoveSubscribersAfterKeyRangeChanged(
+ const TMap<TKeyPrefix, ui64>& current,
+ const TMap<TKeyPrefix, ui64>& actual,
+ const NActors::TActorContext& ctx
+ );
+
+ void UpdateKeyRanges(
+ TMap<TKeyPrefix, ui64>& currentTabletsPerEndKeyRange,
+ const NKikimrSchemeOp::TPathDescription& description,
+ const NActors::TActorContext& ctx
+ );
+
+ void HandleCacheNavigateResponse(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev, const NActors::TActorContext& ctx);
+ void Handle(TEvTxProxySchemeCache::TEvWatchNotifyUpdated::TPtr& ev, const NActors::TActorContext& ctx);
+
+private:
+ TDuration DescribeTablesRetyPeriod = DESCRIBE_TABLES_PERIOD_MIN;
+
+ TMap<TKeyPrefix, ui64> TabletsPerEndKeyRangeSTD;
+ TMap<TKeyPrefix, ui64> TabletsPerEndKeyRangeFIFO;
+
+ THashMap<ui64, TTabletInfo> TabletsInfo;
+ THashMap<ui64, TSubscriberInfo::TPtr> SubscriptionsAwaitingPartitionsUpdates;
+ THashMap<ui64, ui64> TabletPerSubscriptionId;
+ THashMap<ui64, TInstant> LastAccessOfTabletWithoutSubscribers;
+
+ TActorId ParentActor;
+ TActorId SchemeCacheActor;
+
+ const TVector<TString> TablePathSTD;
+ const TVector<TString> TablePathFIFO;
+
+ const TDuration UpdatePeriod;
+};
+
+} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/actor/proxy_actor.h b/ydb/core/ymq/actor/proxy_actor.h
index b553716bf0..42d73b8de1 100644
--- a/ydb/core/ymq/actor/proxy_actor.h
+++ b/ydb/core/ymq/actor/proxy_actor.h
@@ -7,7 +7,6 @@
#include "serviceid.h"
#include <ydb/core/ymq/base/counters.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <library/cpp/actors/core/actor_bootstrapped.h>
#include <library/cpp/monlib/dynamic_counters/counters.h>
@@ -42,14 +41,9 @@ public:
, Cb_(std::move(cb))
{
Y_VERIFY(RequestId_);
- DebugInfo->ProxyActors.emplace(RequestId_, this);
RetrieveUserAndQueueParameters();
}
- ~TProxyActor() {
- DebugInfo->ProxyActors.EraseKeyValue(RequestId_, this);
- }
-
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
return NKikimrServices::TActivity::SQS_PROXY_ACTOR;
}
diff --git a/ydb/core/ymq/actor/proxy_service.cpp b/ydb/core/ymq/actor/proxy_service.cpp
index 1eecd85103..ef8b250cb4 100644
--- a/ydb/core/ymq/actor/proxy_service.cpp
+++ b/ydb/core/ymq/actor/proxy_service.cpp
@@ -8,7 +8,6 @@
#include "serviceid.h"
#include <ydb/core/base/counters.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/actor/actor.h>
#include <ydb/core/ymq/base/counters.h>
#include <ydb/core/ymq/base/secure_protobuf_printer.h>
@@ -48,14 +47,6 @@ struct TSqsProxyService::TProxyRequestInfo : public TAtomicRefCount<TProxyReques
TSqsEvents::TEvProxySqsRequest::TPtr ProxyRequest;
};
-TSqsProxyService::TSqsProxyService() {
- DebugInfo->SqsProxyServiceActorPtr = this;
-}
-
-TSqsProxyService::~TSqsProxyService() {
- DebugInfo->SqsProxyServiceActorPtr = nullptr;
-}
-
void TSqsProxyService::Bootstrap() {
LOG_SQS_INFO("Start SQS proxy service actor");
Become(&TThis::StateFunc);
diff --git a/ydb/core/ymq/actor/proxy_service.h b/ydb/core/ymq/actor/proxy_service.h
index a3c991105f..e3fc2c8290 100644
--- a/ydb/core/ymq/actor/proxy_service.h
+++ b/ydb/core/ymq/actor/proxy_service.h
@@ -55,9 +55,6 @@ public:
using TProxyRequestInfoRef = TIntrusivePtr<TProxyRequestInfo>;
public:
- TSqsProxyService();
- ~TSqsProxyService();
-
void Bootstrap();
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
@@ -85,8 +82,8 @@ private:
void HandleGetLeaderNodeForQueueResponse(TSqsEvents::TEvGetLeaderNodeForQueueResponse::TPtr& ev);
private:
- TIntrusivePtr<NMonitoring::TDynamicCounters> SqsCounters_;
- TIntrusivePtr<NMonitoring::TDynamicCounters> YmqPublicCounters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SqsCounters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> YmqPublicCounters_;
/// A map of node ids to TNodeIfno
THashMap<ui32, TNodeInfoRef> NodesInfo_;
diff --git a/ydb/core/ymq/actor/purge.cpp b/ydb/core/ymq/actor/purge.cpp
index 8000b00665..e9c4c9b6ef 100644
--- a/ydb/core/ymq/actor/purge.cpp
+++ b/ydb/core/ymq/actor/purge.cpp
@@ -6,7 +6,6 @@
#include "serviceid.h"
#include <ydb/core/ymq/base/counters.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/base/query_id.h>
#include <ydb/core/ymq/queues/common/key_hashes.h>
@@ -27,13 +26,7 @@ TPurgeActor::TPurgeActor(
, Counters_(std::move(counters))
, QueueLeader_(queueLeader)
, IsFifo_(isFifo)
-{
- DebugInfo->QueuePurgeActors.emplace(TStringBuilder() << TLogQueueName(QueuePath_), this);
-}
-
-TPurgeActor::~TPurgeActor() {
- DebugInfo->QueuePurgeActors.EraseKeyValue(TStringBuilder() << TLogQueueName(QueuePath_), this);
-}
+{}
void TPurgeActor::Bootstrap() {
RLOG_SQS_INFO("Create purge actor for queue " << TString(QueuePath_));
diff --git a/ydb/core/ymq/actor/purge.h b/ydb/core/ymq/actor/purge.h
index ac9d191d04..69a1f836de 100644
--- a/ydb/core/ymq/actor/purge.h
+++ b/ydb/core/ymq/actor/purge.h
@@ -34,7 +34,6 @@ public:
const TActorId& queueLeader,
bool isFifo
);
- ~TPurgeActor();
void Bootstrap();
diff --git a/ydb/core/ymq/actor/queue_leader.cpp b/ydb/core/ymq/actor/queue_leader.cpp
index c36bb5a432..e042d2ea6c 100644
--- a/ydb/core/ymq/actor/queue_leader.cpp
+++ b/ydb/core/ymq/actor/queue_leader.cpp
@@ -2,7 +2,6 @@
#include "fifo_cleanup.h"
#include "executor.h"
#include "log.h"
-#include "migration.h"
#include "purge.h"
#include "retention.h"
@@ -10,7 +9,6 @@
#include <ydb/core/ymq/actor/serviceid.h>
#include <ydb/core/ymq/base/constants.h>
#include <ydb/core/ymq/base/counters.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/base/probes.h>
#include <ydb/core/base/appdata.h>
#include <ydb/core/base/quoter.h>
@@ -49,19 +47,15 @@ TQueueLeader::TQueueLeader(TString userName, TString queueName, TString folderId
, Counters_(std::move(counters))
, UserCounters_(std::move(userCounters))
{
- DebugInfo->QueueLeaders.emplace(TStringBuilder() << TLogQueueName(UserName_, QueueName_), this);
if (quoterResourcesForUser) {
QuoterResources_ = new TSqsEvents::TQuoterResourcesForActions(*quoterResourcesForUser);
}
}
-TQueueLeader::~TQueueLeader() {
- DebugInfo->QueueLeaders.EraseKeyValue(TStringBuilder() << TLogQueueName(UserName_, QueueName_), this);
-}
-
void TQueueLeader::Bootstrap() {
Become(&TQueueLeader::StateInit);
- Register(new TQueueMigrationActor(UserName_, QueueName_, SelfId(), SchemeCache_, Counters_));
+ QueueAttributesCacheTime_ = TDuration::MilliSeconds(Cfg().GetQueueAttributesCacheTimeMs());
+ RequestConfiguration();
}
void TQueueLeader::BecomeWorking() {
@@ -114,7 +108,6 @@ STATEFN(TQueueLeader::StateInit) {
hFunc(TSqsEvents::TEvQueueId, HandleQueueId); // discover dlq id and version
hFunc(TSqsEvents::TEvExecuted, HandleExecuted); // from executor
hFunc(TEvWakeup, HandleWakeup);
- hFunc(TSqsEvents::TEvMigrationDone, HandleMigrationDone); // from migration actor
default:
LOG_SQS_ERROR("Unknown type of event came to SQS background queue " << TLogQueueName(UserName_, QueueName_) << " leader actor: " << ev->Type << " (" << ev->GetBase()->ToString() << "), sender: " << ev->Sender);
}
@@ -203,19 +196,6 @@ void TQueueLeader::HandleWakeup(TEvWakeup::TPtr& ev) {
}
}
-void TQueueLeader::HandleMigrationDone(TSqsEvents::TEvMigrationDone::TPtr& ev) {
- if (ev->Get()->Success) {
- const auto& cfg = Cfg();
- QueueAttributesCacheTime_ = TDuration::MilliSeconds(cfg.GetQueueAttributesCacheTimeMs());
- RequestConfiguration();
- } else {
- INC_COUNTER(Counters_, QueueMasterStartProblems);
- INC_COUNTER(Counters_, QueueLeaderStartProblems);
- Register(new TQueueMigrationActor(UserName_, QueueName_, SelfId(), SchemeCache_, Counters_, TDuration::MilliSeconds(500)));
- FailRequestsDuringStartProblems();
- }
-}
-
void TQueueLeader::HandleGetConfigurationWhileIniting(TSqsEvents::TEvGetConfiguration::TPtr& ev) {
GetConfigurationRequests_.emplace_back(ev);
}
diff --git a/ydb/core/ymq/actor/queue_leader.h b/ydb/core/ymq/actor/queue_leader.h
index c0ed31d99b..323ba22341 100644
--- a/ydb/core/ymq/actor/queue_leader.h
+++ b/ydb/core/ymq/actor/queue_leader.h
@@ -31,7 +31,6 @@ class TQueueLeader : public TActorBootstrapped<TQueueLeader> {
public:
TQueueLeader(TString userName, TString queueName, TString folderId, TString rootUrl, TIntrusivePtr<TQueueCounters> counters, TIntrusivePtr<TUserCounters> userCounters, const TActorId& schemeCache, const TIntrusivePtr<TSqsEvents::TQuoterResourcesForActions>& quoterResourcesForUser);
- ~TQueueLeader();
void Bootstrap();
@@ -65,7 +64,6 @@ private:
void HandleQueuePurgedNotification(TSqsEvents::TEvQueuePurgedNotification::TPtr& ev);
void HandleGetRuntimeQueueAttributesWhileIniting(TSqsEvents::TEvGetRuntimeQueueAttributes::TPtr& ev);
void HandleGetRuntimeQueueAttributesWhileWorking(TSqsEvents::TEvGetRuntimeQueueAttributes::TPtr& ev);
- void HandleMigrationDone(TSqsEvents::TEvMigrationDone::TPtr& ev);
void HandleDeadLetterQueueNotification(TSqsEvents::TEvDeadLetterQueueNotification::TPtr& ev);
void BecomeWorking();
diff --git a/ydb/core/ymq/actor/queue_schema.cpp b/ydb/core/ymq/actor/queue_schema.cpp
index a477a4d6be..90bcb11c45 100644
--- a/ydb/core/ymq/actor/queue_schema.cpp
+++ b/ydb/core/ymq/actor/queue_schema.cpp
@@ -354,6 +354,7 @@ void TCreateQueueSchemaActorV2::OnReadQueueParams(TSqsEvents::TEvExecuted::TPtr&
} else {
resp = MakeErrorResponse(NErrors::INTERNAL_FAILURE);
resp->Error = "Failed to read queue params.";
+ RLOG_SQS_ERROR("Failed to read queue params: " << record);
}
Y_VERIFY(resp);
@@ -542,18 +543,18 @@ void TCreateQueueSchemaActorV2::Step() {
break;
}
case ECreateComponentsStep::MakeQueueDir: {
- if (TablesFormat_ == 0) {
- CurrentCreationStep_ = ECreateComponentsStep::MakeQueueVersionDir;
- } else {
- CurrentCreationStep_ = ECreateComponentsStep::DescribeTableForSetSchemeShardId;
- }
+ CurrentCreationStep_ = ECreateComponentsStep::MakeQueueVersionDir;
break;
}
case ECreateComponentsStep::MakeQueueVersionDir: {
- if (IsFifo_) {
- CurrentCreationStep_ = ECreateComponentsStep::MakeTables;
+ if (TablesFormat_ == 0) {
+ if (IsFifo_) {
+ CurrentCreationStep_ = ECreateComponentsStep::MakeTables;
+ } else {
+ CurrentCreationStep_ = ECreateComponentsStep::MakeShards;
+ }
} else {
- CurrentCreationStep_ = ECreateComponentsStep::MakeShards;
+ CurrentCreationStep_ = ECreateComponentsStep::DescribeTableForSetSchemeShardId;
}
break;
}
@@ -740,7 +741,7 @@ static const char* const CommitQueueParamsQuery = R"__(
(let partitions (Parameter 'PARTITIONS (DataType 'Uint64)))
(let masterTabletId (Parameter 'MASTER_TABLET_ID (DataType 'Uint64)))
(let tablesFormat (Parameter 'TABLES_FORMAT (DataType 'Uint32)))
- (let version (Parameter 'VERSION (DataType 'Uint64)))
+ (let queueIdNumber (Parameter 'QUEUE_ID_NUMBER (DataType 'Uint64)))
(let queueIdNumberHash (Parameter 'QUEUE_ID_NUMBER_HASH (DataType 'Uint64)))
(let maxSize (Parameter 'MAX_SIZE (DataType 'Uint64)))
(let delay (Parameter 'DELAY (DataType 'Uint64)))
@@ -849,7 +850,7 @@ static const char* const CommitQueueParamsQuery = R"__(
'('CreatedTimestamp now)
'('Shards shards)
'('Partitions partitions)
- '('Version version)
+ '('Version queueIdNumber)
'('DlqName dlqName)
'('MasterTabletId masterTabletId)
'('TablesFormat tablesFormat)))
@@ -932,12 +933,12 @@ TString GetStateTableKeys(ui32 tablesFormat, bool isFifo) {
if (isFifo) {
return R"__(
'('QueueIdNumberHash queueIdNumberHash)
- '('QueueIdNumber version)
+ '('QueueIdNumber queueIdNumber)
)__";
}
return R"__(
'('QueueIdNumberHash queueIdNumberHash)
- '('QueueIdNumber version)
+ '('QueueIdNumber queueIdNumber)
'('Shard shard)
)__";
@@ -949,7 +950,7 @@ TString GetAttrTableKeys(ui32 tablesFormat) {
if (tablesFormat == 1) {
return R"__(
'('QueueIdNumberHash queueIdNumberHash)
- '('QueueIdNumber version)
+ '('QueueIdNumber queueIdNumber)
)__";
}
return "'('State (Uint64 '0))";
@@ -997,7 +998,7 @@ void TCreateQueueSchemaActorV2::CommitNewVersion() {
.Uint64("PARTITIONS", Request_.GetPartitions())
.Uint64("MASTER_TABLET_ID", LeaderTabletId_)
.Uint32("TABLES_FORMAT", TablesFormat_)
- .Uint64("VERSION", Version_)
+ .Uint64("QUEUE_ID_NUMBER", Version_)
.Uint64("QUEUE_ID_NUMBER_HASH", GetKeysHash(Version_))
.Uint64("MAX_SIZE", *ValidatedAttributes_.MaximumMessageSize)
.Uint64("DELAY", SecondsToMs(*ValidatedAttributes_.DelaySeconds))
@@ -1064,8 +1065,6 @@ void TCreateQueueSchemaActorV2::MatchQueueAttributes(
) {
Become(&TCreateQueueSchemaActorV2::MatchAttributes);
- Y_VERIFY(currentVersion != 0);
-
TDbQueriesMaker queryMaker(
Cfg().GetRoot(),
QueuePath_.UserName,
@@ -1139,7 +1138,7 @@ void TCreateQueueSchemaActorV2::OnAttributesMatch(TSqsEvents::TEvExecuted::TPtr&
// call the special version of cleanup actor
RLOG_SQS_WARN("Removing redundant queue version: " << Version_ << " for queue " <<
QueuePath_.GetQueuePath() << ". Shards: " << RequiredShardsCount_ << " IsFifo: " << IsFifo_);
- Register(new TDeleteQueueSchemaActorV2(QueuePath_, SelfId(), RequestId_, UserCounters_,
+ Register(new TDeleteQueueSchemaActorV2(QueuePath_, IsFifo_, TablesFormat_, SelfId(), RequestId_, UserCounters_,
Version_, RequiredShardsCount_, IsFifo_));
}
@@ -1165,18 +1164,24 @@ void TCreateQueueSchemaActorV2::PassAway() {
}
TDeleteQueueSchemaActorV2::TDeleteQueueSchemaActorV2(const TQueuePath& path,
+ bool isFifo,
+ ui32 tablesFormat,
const TActorId& sender,
const TString& requestId,
TIntrusivePtr<TUserCounters> userCounters)
: QueuePath_(path)
+ , IsFifo_(isFifo)
+ , TablesFormat_(tablesFormat)
, Sender_(sender)
- , SI_(0)
+ , SI_(static_cast<ui32>(EDeleting::EraseQueueRecord))
, RequestId_(requestId)
, UserCounters_(std::move(userCounters))
{
}
TDeleteQueueSchemaActorV2::TDeleteQueueSchemaActorV2(const TQueuePath& path,
+ bool isFifo,
+ ui32 tablesFormat,
const TActorId& sender,
const TString& requestId,
TIntrusivePtr<TUserCounters> userCounters,
@@ -1184,8 +1189,10 @@ TDeleteQueueSchemaActorV2::TDeleteQueueSchemaActorV2(const TQueuePath& path,
const ui64 advisedShardCount,
const bool advisedIsFifoFlag)
: QueuePath_(path)
+ , IsFifo_(isFifo)
+ , TablesFormat_(tablesFormat)
, Sender_(sender)
- , SI_(static_cast<ui32>(EDeleting::RemoveTables))
+ , SI_(static_cast<ui32>(tablesFormat == 0 ? EDeleting::RemoveTables : EDeleting::RemoveQueueVersionDirectory))
, RequestId_(requestId)
, UserCounters_(std::move(userCounters))
{
@@ -1223,12 +1230,16 @@ static TString GetVersionedQueueDir(const TString& baseQueueDir, const ui64 vers
static const char* EraseQueueRecordQuery = R"__(
(
- (let name (Parameter 'NAME (DataType 'Utf8String)))
- (let userName (Parameter 'USER_NAME (DataType 'Utf8String)))
- (let now (Parameter 'NOW (DataType 'Uint64)))
+ (let name (Parameter 'NAME (DataType 'Utf8String)))
+ (let userName (Parameter 'USER_NAME (DataType 'Utf8String)))
+ (let now (Parameter 'NOW (DataType 'Uint64)))
+ (let queueIdNumber (Parameter 'QUEUE_ID_NUMBER (DataType 'Uint64)))
+ (let queueIdNumberHash (Parameter 'QUEUE_ID_NUMBER_HASH (DataType 'Uint64)))
(let queuesTable '%2$s/.Queues)
+ (let removedQueuesTable '%2$s/.RemovedQueues)
(let eventsTable '%2$s/.Events)
+ (let stateTable '%3$s/State)
(let queuesRow '(
'('Account userName)
@@ -1245,7 +1256,8 @@ static const char* EraseQueueRecordQuery = R"__(
'Shards
'CustomQueueName
'CreatedTimestamp
- 'FolderId))
+ 'FolderId
+ 'TablesFormat))
(let queuesRead (SelectRow queuesTable queuesRow queuesSelect))
(let currentVersion
@@ -1261,6 +1273,21 @@ static const char* EraseQueueRecordQuery = R"__(
(Uint64 '0)
)
)
+
+ (let fifoQueue
+ (Coalesce
+ (Member queuesRead 'FifoQueue)
+ (Bool 'false)
+ )
+ )
+
+ (let shards
+ (Coalesce
+ (Member queuesRead 'Shards)
+ (Uint64 '0)
+ )
+ )
+
(let folderId
(Coalesce
(Member queuesRead 'FolderId)
@@ -1274,14 +1301,37 @@ static const char* EraseQueueRecordQuery = R"__(
(Utf8String '"")
)
)
+
+ (let tablesFormat
+ (Coalesce
+ (Member queuesRead 'TablesFormat)
+ (Uint32 '0)
+ )
+ )
+
+ (let removedQueueRow '(
+ '('RemoveTimestamp now)
+ '('QueueIdNumber currentVersion)))
+
+ (let removedQueueUpdate '(
+ '('Account userName)
+ '('QueueName name)
+ '('FifoQueue fifoQueue)
+ '('Shards (Cast shards 'Uint32))
+ '('CustomQueueName customName)
+ '('FolderId folderId)
+ '('TablesFormat tablesFormat)))
(let eventTs (Max now (Add queueCreateTs (Uint64 '2))))
(let queueExists
(Coalesce
- (Or
- (Equal (Uint64 '1) (Member queuesRead 'QueueState))
- (Equal (Uint64 '3) (Member queuesRead 'QueueState))
+ (And
+ (Equal currentVersion queueIdNumber)
+ (Or
+ (Equal (Uint64 '1) (Member queuesRead 'QueueState))
+ (Equal (Uint64 '3) (Member queuesRead 'QueueState))
+ )
)
(Bool 'false)))
@@ -1290,23 +1340,50 @@ static const char* EraseQueueRecordQuery = R"__(
'('EventTimestamp eventTs)
'('FolderId folderId)))
- (return (AsList
- (SetResult 'exists queueExists)
- (SetResult 'version currentVersion)
- (SetResult 'fields queuesRead)
- (If queueExists (UpdateRow eventsTable eventsRow eventsUpdate) (Void))
- (If queueExists (EraseRow queuesTable queuesRow) (Void))))
+ (return (Extend
+ (AsList
+ (SetResult 'exists queueExists)
+ (SetResult 'version currentVersion)
+ (SetResult 'fields queuesRead)
+ (If queueExists (UpdateRow eventsTable eventsRow eventsUpdate) (Void))
+ (If queueExists (UpdateRow removedQueuesTable removedQueueRow removedQueueUpdate) (Void))
+ (If queueExists (EraseRow queuesTable queuesRow) (Void))
+ )
+
+ (If queueExists
+ (Map (ListFromRange (Uint64 '0) shards) (lambda '(shardOriginal) (block '(
+ (let shard (Cast shardOriginal 'Uint32))
+
+ (let stateRow '(%4$s))
+ (return (EraseRow stateTable stateRow))
+ ))))
+ (AsList (Void))
+ )
+ ))
)
)__";
void TDeleteQueueSchemaActorV2::NextAction() {
switch (EDeleting(SI_)) {
case EDeleting::EraseQueueRecord: {
- auto ev = MakeExecuteEvent(Sprintf(EraseQueueRecordQuery, QueuePath_.GetUserPath().c_str(), Cfg().GetRoot().c_str()));
+ TString queueStateDir = QueuePath_.GetVersionedQueuePath();
+ if (TablesFormat_ == 1) {
+ queueStateDir = Join("/", Cfg().GetRoot(), IsFifo_ ? FIFO_TABLES_DIR : STD_TABLES_DIR);
+ }
+
+ auto ev = MakeExecuteEvent(Sprintf(
+ EraseQueueRecordQuery,
+ QueuePath_.GetUserPath().c_str(),
+ Cfg().GetRoot().c_str(),
+ queueStateDir.c_str(),
+ GetStateTableKeys(TablesFormat_, IsFifo_).c_str()
+ ));
auto* trans = ev->Record.MutableTransaction()->MutableMiniKQLTransaction();
auto nowMs = TInstant::Now().MilliSeconds();
TParameters(trans->MutableParams()->MutableProto())
.Utf8("NAME", QueuePath_.QueueName)
+ .Uint64("QUEUE_ID_NUMBER", QueuePath_.Version)
+ .Uint64("QUEUE_ID_NUMBER_HASH", GetKeysHash(QueuePath_.Version))
.Utf8("USER_NAME", QueuePath_.UserName)
.Uint64("NOW", nowMs);
@@ -1353,26 +1430,40 @@ void TDeleteQueueSchemaActorV2::NextAction() {
}
void TDeleteQueueSchemaActorV2::DoSuccessOperation() {
- if (EDeleting(SI_) == EDeleting::RemoveTables) {
- Tables_.pop_back();
-
- if (Tables_.empty()) {
- if (Shards_.empty()) {
- SI_ = ui32(Version_ ? EDeleting::RemoveQueueVersionDirectory : EDeleting::RemoveQueueDirectory);
+ switch (EDeleting(SI_)) {
+ case EDeleting::EraseQueueRecord: {
+ if (TablesFormat_ == 0) {
+ SI_ = ui32(EDeleting::RemoveTables);
} else {
- SI_ = ui32(EDeleting::RemoveShards);
+ SI_ = ui32(EDeleting::RemoveQueueVersionDirectory);
+ }
+ break;
+ }
+ case EDeleting::RemoveTables: {
+ Tables_.pop_back();
+
+ if (Tables_.empty()) {
+ if (Shards_.empty()) {
+ SI_ = ui32(Version_ ? EDeleting::RemoveQueueVersionDirectory : EDeleting::RemoveQueueDirectory);
+ } else {
+ SI_ = ui32(EDeleting::RemoveShards);
+ }
}
+ break;
}
- } else if (EDeleting(SI_) == EDeleting::RemoveShards) {
- Shards_.pop_back();
+ case EDeleting::RemoveShards: {
+ Shards_.pop_back();
- if (Shards_.empty()) {
- SI_ = ui32(Version_ ? EDeleting::RemoveQueueVersionDirectory : EDeleting::RemoveQueueDirectory);
+ if (Shards_.empty()) {
+ SI_ = ui32(Version_ ? EDeleting::RemoveQueueVersionDirectory : EDeleting::RemoveQueueDirectory);
+ }
+ break;
}
- } else {
- SI_++;
- if ((!Cfg().GetQuotingConfig().GetEnableQuoting() || !Cfg().GetQuotingConfig().HasKesusQuoterConfig()) && EDeleting(SI_) == EDeleting::DeleteQuoterResource) {
+ default: {
SI_++;
+ if ((!Cfg().GetQuotingConfig().GetEnableQuoting() || !Cfg().GetQuotingConfig().HasKesusQuoterConfig()) && EDeleting(SI_) == EDeleting::DeleteQuoterResource) {
+ SI_++;
+ }
}
}
diff --git a/ydb/core/ymq/actor/queue_schema.h b/ydb/core/ymq/actor/queue_schema.h
index 6ff2d5aa06..773910b477 100644
--- a/ydb/core/ymq/actor/queue_schema.h
+++ b/ydb/core/ymq/actor/queue_schema.h
@@ -144,11 +144,15 @@ class TDeleteQueueSchemaActorV2
{
public:
TDeleteQueueSchemaActorV2(const TQueuePath& path,
+ bool isFifo,
+ ui32 tablesFormat,
const TActorId& sender,
const TString& requestId,
TIntrusivePtr<TUserCounters> userCounters);
TDeleteQueueSchemaActorV2(const TQueuePath& path,
+ bool isFifo,
+ ui32 tablesFormat,
const TActorId& sender,
const TString& requestId,
TIntrusivePtr<TUserCounters> userCounters,
@@ -196,6 +200,8 @@ private:
};
const TQueuePath QueuePath_;
+ const bool IsFifo_;
+ const ui32 TablesFormat_;
const TActorId Sender_;
TVector<TTable> Tables_;
TVector<int> Shards_;
diff --git a/ydb/core/ymq/actor/queues_list_reader.cpp b/ydb/core/ymq/actor/queues_list_reader.cpp
index 2cdbcfe2ce..09168e6d0d 100644
--- a/ydb/core/ymq/actor/queues_list_reader.cpp
+++ b/ydb/core/ymq/actor/queues_list_reader.cpp
@@ -132,6 +132,7 @@ void TQueuesListReader::OnQueuesList(const TSqsEvents::TEvExecuted::TRecord& rec
rec.ShardsCount = row["Shards"];
rec.DlqName = row["DlqName"];
rec.CreatedTimestamp = TInstant::MilliSeconds(ui64(row["CreatedTimestamp"]));
+ rec.IsFifo = row["FifoQueue"];
}
const bool truncated = val["truncated"];
diff --git a/ydb/core/ymq/actor/retention.cpp b/ydb/core/ymq/actor/retention.cpp
index d5a0995559..6384ca1127 100644
--- a/ydb/core/ymq/actor/retention.cpp
+++ b/ydb/core/ymq/actor/retention.cpp
@@ -5,7 +5,6 @@
#include <ydb/public/lib/value/value.h>
#include <ydb/core/base/appdata.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/queues/common/key_hashes.h>
#include <library/cpp/actors/core/hfunc.h>
@@ -18,13 +17,7 @@ TRetentionActor::TRetentionActor(const TQueuePath& queuePath, ui32 tablesFormat,
, TablesFormat_(tablesFormat)
, RequestId_(CreateGuidAsString())
, QueueLeader_(queueLeader)
-{
- DebugInfo->QueueRetentionActors.emplace(TStringBuilder() << TLogQueueName(QueuePath_), this);
-}
-
-TRetentionActor::~TRetentionActor() {
- DebugInfo->QueueRetentionActors.EraseKeyValue(TStringBuilder() << TLogQueueName(QueuePath_), this);
-}
+{}
void TRetentionActor::Bootstrap() {
RLOG_SQS_INFO("Bootstrap retention actor for queue " << TLogQueueName(QueuePath_));
diff --git a/ydb/core/ymq/actor/retention.h b/ydb/core/ymq/actor/retention.h
index e2413fafdc..3c4f47f4a2 100644
--- a/ydb/core/ymq/actor/retention.h
+++ b/ydb/core/ymq/actor/retention.h
@@ -10,7 +10,6 @@ namespace NKikimr::NSQS {
class TRetentionActor : public TActorBootstrapped<TRetentionActor> {
public:
TRetentionActor(const TQueuePath& queuePath, ui32 tablesFormat, const TActorId& queueLeader);
- ~TRetentionActor();
void Bootstrap();
diff --git a/ydb/core/ymq/actor/service.cpp b/ydb/core/ymq/actor/service.cpp
index c8fdfe0a91..7a264a3769 100644
--- a/ydb/core/ymq/actor/service.cpp
+++ b/ydb/core/ymq/actor/service.cpp
@@ -5,6 +5,7 @@
#include "executor.h"
#include "garbage_collector.h"
#include "local_rate_limiter_allocator.h"
+#include "monitoring.h"
#include "params.h"
#include "proxy_service.h"
#include "queue_leader.h"
@@ -12,13 +13,14 @@
#include "user_settings_names.h"
#include "user_settings_reader.h"
#include "index_events_processor.h"
+#include "node_tracker.h"
+#include "cleanup_queue_data.h"
#include <ydb/public/lib/value/value.h>
#include <ydb/public/sdk/cpp/client/ydb_types/credentials/credentials.h>
#include <ydb/core/base/quoter.h>
#include <ydb/core/base/tablet_pipe.h>
#include <ydb/core/ymq/base/counters.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/base/probes.h>
#include <ydb/core/ymq/base/secure_protobuf_printer.h>
#include <ydb/core/tx/scheme_board/cache.h>
@@ -55,10 +57,12 @@ using NKikimr::NClient::TValue;
const TString LEADER_CREATE_REASON_USER_REQUEST = "UserRequestOnNode";
const TString LEADER_CREATE_REASON_LOCAL_TABLET = "LocalTablet";
const TString LEADER_DESTROY_REASON_LAST_REF = "LastReference";
-const TString LEADER_DESTROY_REASON_TABLET_PIPE_CLOSED = "TabletPipeClosed";
+const TString LEADER_DESTROY_REASON_TABLET_ON_ANOTHER_NODE = "LeaderTabletOnAnotherNode";
+const TString LEADER_DESTROY_REASON_REMOVE_INFO = "RemoveQueueInfo";
constexpr ui64 LIST_USERS_WAKEUP_TAG = 1;
constexpr ui64 LIST_QUEUES_WAKEUP_TAG = 2;
+constexpr ui64 CONNECT_TIMEOUT_TO_LEADER_WAKEUP_TAG = 3;
constexpr size_t EARLY_REQUEST_USERS_LIST_MAX_BUDGET = 10;
constexpr i64 EARLY_REQUEST_QUEUES_LIST_MAX_BUDGET = 5; // per user
@@ -69,7 +73,7 @@ bool IsInternalFolder(const TString& folder) {
struct TSqsService::TQueueInfo : public TAtomicRefCount<TQueueInfo> {
TQueueInfo(
- TString userName, TString queueName, TString rootUrl, ui64 leaderTabletId, TString customName,
+ TString userName, TString queueName, TString rootUrl, ui64 leaderTabletId, bool isFifo, TString customName,
TString folderId, ui32 tablesFormat, ui64 version, ui64 shardsCount, const TIntrusivePtr<TUserCounters>& userCounters,
const TIntrusivePtr<TFolderCounters>& folderCounters,
const TActorId& schemeCache, TIntrusivePtr<TSqsEvents::TQuoterResourcesForActions> quoterResourcesForUser,
@@ -84,6 +88,7 @@ struct TSqsService::TQueueInfo : public TAtomicRefCount<TQueueInfo> {
, ShardsCount_(shardsCount)
, RootUrl_(std::move(rootUrl))
, LeaderTabletId_(leaderTabletId)
+ , IsFifo_(isFifo)
, Counters_(userCounters->CreateQueueCounters(QueueName_, FolderId_, insertCounters))
, UserCounters_(userCounters)
, FolderCounters_(folderCounters)
@@ -92,36 +97,19 @@ struct TSqsService::TQueueInfo : public TAtomicRefCount<TQueueInfo> {
{
}
- void ConnectToLeaderTablet(bool firstTime = true) {
- if (ConnectingToLeaderTablet_) {
- return;
- }
- ClosePipeToLeaderTablet();
- ConnectingToLeaderTablet_ = true;
- NTabletPipe::TClientConfig cfg;
- cfg.AllowFollower = false;
- cfg.CheckAliveness = true;
- cfg.RetryPolicy = {.RetryLimitCount = 3, .MinRetryTime = TDuration::MilliSeconds(100), .DoFirstRetryInstantly = firstTime};
- PipeClient_ = TActivationContext::Register(NTabletPipe::CreateClient(SelfId(), LeaderTabletId_, cfg));
- LOG_SQS_DEBUG("Connect to leader tablet [" << LeaderTabletId_ << "] for queue [" << UserName_ << "/" << QueueName_ << "]. Pipe client actor: " << PipeClient_);
- }
-
- void SetLeaderPipeServer(const TActorId& pipeServer) {
- LeaderPipeServer_ = pipeServer;
-
- const ui64 nodeId = LeaderPipeServer_.NodeId();
- if (nodeId == SelfId().NodeId()) {
- IncLocalLeaderRef(LEADER_CREATE_REASON_LOCAL_TABLET); // ref for service
- }
+ bool LeaderMustBeOnCurrentNode() const {
+ return LeaderNodeId_ && LeaderNodeId_.value() == SelfId().NodeId();
}
- void ClosePipeToLeaderTablet() {
- if (LeaderPipeServer_.NodeId() == SelfId().NodeId()) {
- DecLocalLeaderRef(LEADER_DESTROY_REASON_TABLET_PIPE_CLOSED); // ref for service
+ void SetLeaderNodeId(ui32 nodeId) {
+ if (LeaderNodeId_ && LeaderNodeId_ == nodeId) {
+ return;
}
- if (PipeClient_) {
- NTabletPipe::CloseClient(SelfId(), PipeClient_);
- PipeClient_ = LeaderPipeServer_ = TActorId();
+ LeaderNodeId_ = nodeId;
+ if (LeaderMustBeOnCurrentNode()) {
+ StartLocalLeader(LEADER_CREATE_REASON_LOCAL_TABLET);
+ } else {
+ StopLocalLeaderIfNeeded(LEADER_DESTROY_REASON_TABLET_ON_ANOTHER_NODE);
}
}
@@ -140,6 +128,12 @@ struct TSqsService::TQueueInfo : public TAtomicRefCount<TQueueInfo> {
}
}
+ void StopLocalLeaderIfNeeded(const TString& reason) {
+ if (!LeaderMustBeOnCurrentNode() && LocalLeaderRefCount_ == 0) {
+ StopLocalLeader(reason);
+ }
+ }
+
void StopLocalLeader(const TString& reason) {
if (LocalLeader_) {
Counters_ = Counters_->GetCountersForNotLeaderNode();
@@ -162,9 +156,7 @@ struct TSqsService::TQueueInfo : public TAtomicRefCount<TQueueInfo> {
void DecLocalLeaderRef(const TString& reason) {
Y_VERIFY(LocalLeaderRefCount_ > 0);
--LocalLeaderRefCount_;
- if (LocalLeaderRefCount_ == 0) {
- StopLocalLeader(reason);
- }
+ StopLocalLeaderIfNeeded(reason);
}
TActorIdentity SelfId() const {
@@ -180,20 +172,21 @@ struct TSqsService::TQueueInfo : public TAtomicRefCount<TQueueInfo> {
ui64 ShardsCount_;
TString RootUrl_;
ui64 LeaderTabletId_ = 0;
+ bool IsFifo_ = false;
TIntrusivePtr<TQueueCounters> Counters_;
TIntrusivePtr<TUserCounters> UserCounters_;
TIntrusivePtr<TFolderCounters> FolderCounters_;
- TActorId PipeClient_;
- TActorId LeaderPipeServer_;
+ std::optional<ui32> LeaderNodeId_;
+ ui64 NodeTrackingSubscriptionId = 0;
+
TActorId LocalLeader_;
TActorId SchemeCache_;
ui64 LocalLeaderRefCount_ = 0;
TIntrusivePtr<TSqsEvents::TQuoterResourcesForActions> QuoterResourcesForUser_;
// State machine
- bool ConnectingToLeaderTablet_ = false;
- TInstant DisconnectedFrom_ = TInstant::Now();
THashSet<TSqsEvents::TEvGetLeaderNodeForQueueRequest::TPtr> GetLeaderNodeRequests_;
+ TInstant NodeUnknownSince_ = TInstant::Now();
};
struct TSqsService::TUserInfo : public TAtomicRefCount<TUserInfo> {
@@ -271,14 +264,6 @@ static TString GetEndpoint(const NKikimrConfig::TSqsConfig& config) {
}
}
-TSqsService::TSqsService() {
- DebugInfo->SqsServiceActorPtr = this;
-}
-
-TSqsService::~TSqsService() {
- DebugInfo->SqsServiceActorPtr = nullptr;
-}
-
void TSqsService::Bootstrap() {
LOG_SQS_INFO("Start SQS service actor");
LOG_SQS_DEBUG("SQS service config: " << Cfg());
@@ -295,11 +280,18 @@ void TSqsService::Bootstrap() {
YmqRootCounters_ = GetYmqPublicCounters(AppData()->Counters);
AllocPoolCounters_ = std::make_shared<TAlignedPagePoolCounters>(AppData()->Counters, "sqs");
AggregatedUserCounters_ = MakeIntrusive<TUserCounters>(
- Cfg(), SqsCoreCounters_, nullptr, AllocPoolCounters_, TOTAL_COUNTER_LABEL, nullptr, true
+ Cfg(), SqsCoreCounters_, nullptr, AllocPoolCounters_, TOTAL_COUNTER_LABEL, nullptr, true
);
AggregatedUserCounters_->ShowDetailedCounters(TInstant::Max());
+ MonitoringCounters_ = MakeIntrusive<TMonitoringCounters>(
+ Cfg(), GetServiceCounters(AppData()->Counters, "sqs")->GetSubgroup("subsystem", "monitoring")
+ );
InitSchemeCache();
+ NodeTrackerActor_ = Register(new TNodeTrackerActor(SchemeCache_));
+
+ Register(new TCleanupQueueDataActor(MonitoringCounters_));
+ Register(new TMonitoringActor(MonitoringCounters_));
Register(new TUserSettingsReader(AggregatedUserCounters_->GetTransactionCounters()));
QueuesListReader_ = Register(new TQueuesListReader(AggregatedUserCounters_->GetTransactionCounters()));
@@ -341,8 +333,7 @@ STATEFN(TSqsService::StateFunc) {
hFunc(TEvWakeup, HandleWakeup);
hFunc(NSchemeShard::TEvSchemeShard::TEvDescribeSchemeResult, HandleDescribeSchemeResult);
hFunc(TSqsEvents::TEvExecuted, HandleExecuted);
- hFunc(TEvTabletPipe::TEvClientDestroyed, HandlePipeClientDisconnected);
- hFunc(TEvTabletPipe::TEvClientConnected, HandlePipeClientConnected);
+ hFunc(TSqsEvents::TEvNodeTrackerSubscriptionStatus, HandleNodeTrackingSubscriptionStatus);
hFunc(TSqsEvents::TEvGetConfiguration, HandleGetConfiguration);
hFunc(TSqsEvents::TEvSqsRequest, HandleSqsRequest);
hFunc(TSqsEvents::TEvInsertQueueCounters, HandleInsertQueueCounters);
@@ -436,15 +427,23 @@ void TSqsService::HandleGetLeaderNodeForQueueRequest(TSqsEvents::TEvGetLeaderNod
return;
}
- if (!queueIt->second->LeaderPipeServer_) {
+ auto queuePtr = queueIt->second;
+ if (!queuePtr->LeaderNodeId_) {
LWPROBE(QueueRequestCacheMiss, userName, queueName, reqId, ev->Get()->ToStringHeader());
RLOG_SQS_REQ_DEBUG(reqId, "Queue [" << userName << "/" << queueName << "] is waiting for connection to leader tablet.");
- auto& queue = queueIt->second;
- queue->GetLeaderNodeRequests_.emplace(std::move(ev));
+
+ queuePtr->GetLeaderNodeRequests_.emplace(std::move(ev));
+ if (QueuesWithGetNodeWaitingRequests.empty()) {
+ Schedule(
+ TDuration::MilliSeconds(Cfg().GetLeaderConnectTimeoutMs()),
+ new TEvWakeup(CONNECT_TIMEOUT_TO_LEADER_WAKEUP_TAG)
+ );
+ }
+ QueuesWithGetNodeWaitingRequests.insert(queuePtr);
return;
}
- const ui64 nodeId = queueIt->second->LeaderPipeServer_.NodeId();
+ const ui32 nodeId = queuePtr->LeaderNodeId_.value();
RLOG_SQS_REQ_DEBUG(reqId, "Leader node for queue [" << userName << "/" << queueName << "] is " << nodeId);
Send(ev->Sender, new TSqsEvents::TEvGetLeaderNodeForQueueResponse(reqId, userName, queueName, nodeId));
}
@@ -737,50 +736,28 @@ TSqsService::TUserInfoPtr TSqsService::GetUserOrWait(TAutoPtr<TEvent>& ev) {
return userIt->second;
}
-void TSqsService::HandlePipeClientConnected(TEvTabletPipe::TEvClientConnected::TPtr& ev) {
- auto queueIt = LeaderTabletIdToQueue_.find(ev->Get()->TabletId);
- if (queueIt == LeaderTabletIdToQueue_.end()) {
- LOG_SQS_WARN("Connected to unknown queue leader. Tablet id: [" << ev->Get()->TabletId << "]. Client pipe actor: " << ev->Get()->ClientId << ". Server pipe actor: " << ev->Get()->ServerId);
+void TSqsService::HandleNodeTrackingSubscriptionStatus(TSqsEvents::TEvNodeTrackerSubscriptionStatus::TPtr& ev) {
+ ui64 subscriptionId = ev->Get()->SubscriptionId;
+ auto it = QueuePerNodeTrackingSubscription.find(subscriptionId);
+ if (it == QueuePerNodeTrackingSubscription.end()) {
+ LOG_SQS_WARN("Get node tracking status for unknown subscription id: " << subscriptionId);
+ Send(NodeTrackerActor_, new TSqsEvents::TEvNodeTrackerUnsubscribeRequest(subscriptionId));
return;
}
- const auto& queue = queueIt->second;
- queue->ConnectingToLeaderTablet_ = false;
-
- if (ev->Get()->Status != NKikimrProto::OK) {
- LOG_SQS_WARN("Failed to connect to queue [" << queue->UserName_ << "/" << queue->QueueName_ << "] leader tablet. Tablet id: [" << ev->Get()->TabletId << "]. Status: " << NKikimrProto::EReplyStatus_Name(ev->Get()->Status));
- const TInstant now = TActivationContext::Now();
- const TDuration timeDisconnecned = now - queue->DisconnectedFrom_;
- const TDuration leaderConnectTimeout = TDuration::MilliSeconds(Cfg().GetLeaderConnectTimeoutMs());
- if (timeDisconnecned >= leaderConnectTimeout) {
- for (auto& req : queue->GetLeaderNodeRequests_) {
- RLOG_SQS_REQ_WARN(req->Get()->RequestId, "Can't connect to leader tablet for " << timeDisconnecned);
- Send(req->Sender, new TSqsEvents::TEvGetLeaderNodeForQueueResponse(req->Get()->RequestId, req->Get()->UserName, req->Get()->QueueName, TSqsEvents::TEvGetLeaderNodeForQueueResponse::EStatus::FailedToConnectToLeader));
- }
- queue->GetLeaderNodeRequests_.clear();
- }
- queue->ConnectToLeaderTablet(false);
- return;
- }
-
- LOG_SQS_DEBUG("Connected to queue [" << queueIt->second->UserName_ << "/" << queueIt->second->QueueName_ << "] leader. Tablet id: [" << ev->Get()->TabletId << "]. Client pipe actor: " << ev->Get()->ClientId << ". Server pipe actor: " << ev->Get()->ServerId);
- queue->SetLeaderPipeServer(ev->Get()->ServerId);
- for (auto& req : queue->GetLeaderNodeRequests_) {
- RLOG_SQS_REQ_DEBUG(req->Get()->RequestId, "Connected to leader tablet. Node id: " << queue->LeaderPipeServer_.NodeId());
- Send(req->Sender, new TSqsEvents::TEvGetLeaderNodeForQueueResponse(req->Get()->RequestId, req->Get()->UserName, req->Get()->QueueName, queue->LeaderPipeServer_.NodeId()));
- }
- queue->GetLeaderNodeRequests_.clear();
-}
-
-void TSqsService::HandlePipeClientDisconnected(TEvTabletPipe::TEvClientDestroyed::TPtr& ev) {
- auto queueIt = LeaderTabletIdToQueue_.find(ev->Get()->TabletId);
- if (queueIt != LeaderTabletIdToQueue_.end()) {
- queueIt->second->ConnectingToLeaderTablet_ = false;
- queueIt->second->DisconnectedFrom_ = TActivationContext::Now();
- LOG_SQS_DEBUG("Disconnected from queue [" << queueIt->second->UserName_ << "/" << queueIt->second->QueueName_ << "] leader. Tablet id: [" << ev->Get()->TabletId << "]. Client pipe actor: " << ev->Get()->ClientId << ". Server pipe actor: " << ev->Get()->ServerId);
- queueIt->second->ConnectToLeaderTablet(false);
- } else {
- LOG_SQS_WARN("Disconnected from unknown queue leader. Tablet id: [" << ev->Get()->TabletId << "]. Client pipe actor: " << ev->Get()->ClientId << ". Server pipe actor: " << ev->Get()->ServerId);
+ auto queuePtr = it->second;
+ auto& queue = *queuePtr;
+ auto nodeId = ev->Get()->NodeId;
+ queue.SetLeaderNodeId(nodeId);
+ LOG_SQS_DEBUG(
+ "Got node leader for queue [" << queue.UserName_ << "/" << queue.QueueName_
+ << "]. Node: " << nodeId << " subscription id: " << subscriptionId
+ );
+ for (auto& req : queue.GetLeaderNodeRequests_) {
+ RLOG_SQS_REQ_DEBUG(req->Get()->RequestId, "Got node leader. Node id: " << nodeId);
+ Send(req->Sender, new TSqsEvents::TEvGetLeaderNodeForQueueResponse(req->Get()->RequestId, req->Get()->UserName, req->Get()->QueueName, nodeId));
}
+ queue.GetLeaderNodeRequests_.clear();
+ QueuesWithGetNodeWaitingRequests.erase(queuePtr);
}
void TSqsService::HandleQueuesList(TSqsEvents::TEvQueuesList::TPtr& ev) {
@@ -798,9 +775,9 @@ void TSqsService::HandleQueuesList(TSqsEvents::TEvQueuesList::TPtr& ev) {
auto oldListIt = user->Queues_.begin();
while (oldListIt != user->Queues_.end() && newListIt != ev->Get()->SortedQueues.end() && newListIt->UserName == user->UserName_) {
if (oldListIt->first == newListIt->QueueName) { // the same queue
- if (oldListIt->second->LeaderTabletId_ != newListIt->LeaderTabletId) {
- LOG_SQS_WARN("Leader tablet id for queue " << oldListIt->first << " has been changed from "
- << oldListIt->second->LeaderTabletId_ << " to " << newListIt->LeaderTabletId << " (queue was recreated)");
+ if (oldListIt->second->Version_ != newListIt->Version) {
+ LOG_SQS_WARN("Queue version for queue " << oldListIt->first << " has been changed from "
+ << oldListIt->second->Version_ << " to " << newListIt->Version << " (queue was recreated)");
THashSet<TSqsEvents::TEvGetLeaderNodeForQueueRequest::TPtr> oldQueueRequests;
oldQueueRequests.swap(oldListIt->second->GetLeaderNodeRequests_);
@@ -813,9 +790,12 @@ void TSqsService::HandleQueuesList(TSqsEvents::TEvQueuesList::TPtr& ev) {
newListIt->TablesFormat,
newListIt->Version,
newListIt->ShardsCount,
- newListIt->CreatedTimestamp);
- Y_VERIFY(oldListIt->second->ConnectingToLeaderTablet_);
+ newListIt->CreatedTimestamp,
+ newListIt->IsFifo);
oldQueueRequests.swap(oldListIt->second->GetLeaderNodeRequests_);
+ if (!oldListIt->second->GetLeaderNodeRequests_.empty()) {
+ QueuesWithGetNodeWaitingRequests.insert(oldListIt->second);
+ }
}
++oldListIt;
++newListIt;
@@ -832,7 +812,8 @@ void TSqsService::HandleQueuesList(TSqsEvents::TEvQueuesList::TPtr& ev) {
newListIt->TablesFormat,
newListIt->Version,
newListIt->ShardsCount,
- newListIt->CreatedTimestamp);
+ newListIt->CreatedTimestamp,
+ newListIt->IsFifo);
++oldListIt;
++newListIt;
}
@@ -851,7 +832,8 @@ void TSqsService::HandleQueuesList(TSqsEvents::TEvQueuesList::TPtr& ev) {
newListIt->TablesFormat,
newListIt->Version,
newListIt->ShardsCount,
- newListIt->CreatedTimestamp);
+ newListIt->CreatedTimestamp,
+ newListIt->IsFifo);
++newListIt;
}
@@ -1018,13 +1000,12 @@ void TSqsService::RemoveQueue(const TString& userName, const TString& queue) {
}
auto queuePtr = queueIt->second;
- queuePtr->ClosePipeToLeaderTablet();
+ CancleNodeTrackingSubscription(queuePtr);
for (auto& req : queuePtr->GetLeaderNodeRequests_) {
RLOG_SQS_REQ_DEBUG(req->Get()->RequestId, "Removing queue [" << req->Get()->UserName << "/" << req->Get()->QueueName << "] from sqs service info");
Send(req->Sender, new TSqsEvents::TEvGetLeaderNodeForQueueResponse(req->Get()->RequestId, req->Get()->UserName, req->Get()->QueueName, TSqsEvents::TEvGetLeaderNodeForQueueResponse::EStatus::NoQueue));
}
queuePtr->GetLeaderNodeRequests_.clear();
- LeaderTabletIdToQueue_.erase(queuePtr->LeaderTabletId_);
userIt->second->QueueByNameAndFolder_.erase(std::make_pair(queuePtr->CustomName_, queuePtr->FolderId_));
auto queuesCount = userIt->second->CountQueuesInFolder(queuePtr->FolderId_);
if (!queuesCount) {
@@ -1042,12 +1023,12 @@ std::map<TString, TSqsService::TQueueInfoPtr>::iterator TSqsService::AddQueue(co
const ui32 tablesFormat,
const ui64 version,
const ui64 shardsCount,
- const TInstant createdTimestamp) {
+ const TInstant createdTimestamp,
+ bool isFifo) {
auto user = MutableUser(userName, false); // don't move requests because they are already moved in our caller
const TInstant now = TActivationContext::Now();
const TInstant timeToInsertCounters = createdTimestamp + TDuration::MilliSeconds(Cfg().GetQueueCountersExportDelayMs());
const bool insertCounters = now >= timeToInsertCounters;
-
auto folderCntrIter = user->FolderCounters_.find(folderId);
if (folderCntrIter == user->FolderCounters_.end()) {
folderCntrIter = user->FolderCounters_.insert(std::make_pair(folderId, user->Counters_->CreateFolderCounters(folderId, true))).first;
@@ -1057,12 +1038,11 @@ std::map<TString, TSqsService::TQueueInfoPtr>::iterator TSqsService::AddQueue(co
}
auto ret = user->Queues_.insert(std::make_pair(queue, TQueueInfoPtr(new TQueueInfo(
- userName, queue, RootUrl_, leaderTabletId, customName, folderId, tablesFormat, version, shardsCount,
+ userName, queue, RootUrl_, leaderTabletId, isFifo, customName, folderId, tablesFormat, version, shardsCount,
user->Counters_, folderCntrIter->second, SchemeCache_, user->QuoterResources_, insertCounters)))
).first;
auto queueInfo = ret->second;
- LeaderTabletIdToQueue_[leaderTabletId] = queueInfo;
user->QueueByNameAndFolder_.emplace(std::make_pair(customName, folderId), queueInfo);
{
@@ -1109,12 +1089,54 @@ std::map<TString, TSqsService::TQueueInfoPtr>::iterator TSqsService::AddQueue(co
}
user->GetQueueFolderIdAndCustomNameRequests_.erase(requests.first, requests.second);
}
-
- queueInfo->ConnectToLeaderTablet();
- LOG_SQS_DEBUG("Created queue record. Queue: [" << queue << "]. Leader tablet id: [" << leaderTabletId << "]. Pipe client actor: " << queueInfo->PipeClient_);
+
+ CreateNodeTrackingSubscription(queueInfo);
+ LOG_SQS_DEBUG("Created queue record. Queue: [" << queue << "]. QueueIdNumber: " << queueInfo->Version_ << ". Leader tablet id: [" << leaderTabletId << "]. Node tracker subscription: " << queueInfo->NodeTrackingSubscriptionId);
return ret;
}
+void TSqsService::CreateNodeTrackingSubscription(TQueueInfoPtr queueInfo) {
+ Y_VERIFY(!queueInfo->NodeTrackingSubscriptionId);
+ queueInfo->NodeTrackingSubscriptionId = ++MaxNodeTrackingSubscriptionId;
+ LOG_SQS_DEBUG("Create node tracking subscription queue_id_number=" << queueInfo->Version_
+ << " tables_format=" << queueInfo->TablesFormat_ << " subscription_id=" << queueInfo->NodeTrackingSubscriptionId
+ );
+
+ QueuePerNodeTrackingSubscription[queueInfo->NodeTrackingSubscriptionId] = queueInfo;
+
+ std::optional<ui64> fixedLeaderTabletId;
+ if (queueInfo->TablesFormat_ == 0) {
+ fixedLeaderTabletId = queueInfo->LeaderTabletId_;
+ }
+ Send(
+ NodeTrackerActor_,
+ new TSqsEvents::TEvNodeTrackerSubscribeRequest(
+ queueInfo->NodeTrackingSubscriptionId,
+ queueInfo->Version_,
+ queueInfo->IsFifo_,
+ fixedLeaderTabletId
+ )
+ );
+}
+
+void TSqsService::CancleNodeTrackingSubscription(TQueueInfoPtr queueInfo) {
+ LOG_SQS_DEBUG("Cancle node tracking subscription queue_id_number=" << queueInfo->Version_
+ << " tables_format=" << queueInfo->TablesFormat_ << " subscription_id=" << queueInfo->NodeTrackingSubscriptionId
+ );
+ Y_VERIFY(queueInfo->NodeTrackingSubscriptionId);
+ auto id = queueInfo->NodeTrackingSubscriptionId;
+ queueInfo->NodeTrackingSubscriptionId = 0;
+
+ QueuePerNodeTrackingSubscription.erase(id);
+ queueInfo->LeaderNodeId_.reset();
+ queueInfo->StopLocalLeaderIfNeeded(LEADER_DESTROY_REASON_REMOVE_INFO);
+
+ Send(
+ NodeTrackerActor_,
+ new TSqsEvents::TEvNodeTrackerUnsubscribeRequest(id)
+ );
+}
+
void TSqsService::AnswerNoUserToRequests() {
AnswerNoUserToRequests(GetLeaderNodeRequests_);
AnswerNoUserToRequests(GetConfigurationRequests_);
@@ -1146,6 +1168,32 @@ void TSqsService::AnswerErrorToRequests(const TUserInfoPtr& user) {
AnswerErrorToRequests(user, user->CountQueuesRequests_);
}
+void TSqsService::ProcessConnectTimeoutToLeader() {
+ TDuration nextRunAfter = TDuration::Max();
+ TDuration leaderConnectTimeout = TDuration::MilliSeconds(Cfg().GetLeaderConnectTimeoutMs());
+ auto it = QueuesWithGetNodeWaitingRequests.begin();
+ while(it != QueuesWithGetNodeWaitingRequests.end()) {
+ auto& queue = **it;
+ auto nodeUnknownTime = TActivationContext::Now() - queue.NodeUnknownSince_;
+ auto timeLeft = leaderConnectTimeout - nodeUnknownTime;
+ if (timeLeft == TDuration::Zero()) {
+ for (auto& req : queue.GetLeaderNodeRequests_) {
+ RLOG_SQS_REQ_WARN(req->Get()->RequestId, "Can't connect to leader tablet for " << nodeUnknownTime);
+ Send(req->Sender, new TSqsEvents::TEvGetLeaderNodeForQueueResponse(req->Get()->RequestId, req->Get()->UserName, req->Get()->QueueName, TSqsEvents::TEvGetLeaderNodeForQueueResponse::EStatus::FailedToConnectToLeader));
+ }
+ queue.GetLeaderNodeRequests_.clear();
+ auto toRemoveIt = it++;
+ QueuesWithGetNodeWaitingRequests.erase(toRemoveIt);
+ } else {
+ nextRunAfter = Min(nextRunAfter, timeLeft);
+ ++it;
+ }
+ }
+ if (nextRunAfter != TDuration::Max()) {
+ Schedule(nextRunAfter, new TEvWakeup(CONNECT_TIMEOUT_TO_LEADER_WAKEUP_TAG));
+ }
+}
+
void TSqsService::HandleWakeup(TEvWakeup::TPtr& ev) {
Y_VERIFY(ev->Get()->Tag != 0);
switch (ev->Get()->Tag) {
@@ -1167,6 +1215,9 @@ void TSqsService::HandleWakeup(TEvWakeup::TPtr& ev) {
RequestSqsQueuesList();
}
break;
+ case CONNECT_TIMEOUT_TO_LEADER_WAKEUP_TAG:
+ ProcessConnectTimeoutToLeader();
+ break;
}
}
diff --git a/ydb/core/ymq/actor/service.h b/ydb/core/ymq/actor/service.h
index ac651c3501..915f7813a4 100644
--- a/ydb/core/ymq/actor/service.h
+++ b/ydb/core/ymq/actor/service.h
@@ -22,9 +22,6 @@ class TSqsService
: public TActorBootstrapped<TSqsService>
{
public:
- TSqsService();
- ~TSqsService();
-
void Bootstrap();
static constexpr NKikimrServices::TActivity::EType ActorActivityType() {
@@ -59,7 +56,11 @@ private:
void HandleInsertQueueCounters(TSqsEvents::TEvInsertQueueCounters::TPtr& ev);
void HandleUserSettingsChanged(TSqsEvents::TEvUserSettingsChanged::TPtr& ev);
void HandleQueuesList(TSqsEvents::TEvQueuesList::TPtr& ev);
+ void HandleNodeTrackingSubscriptionStatus(TSqsEvents::TEvNodeTrackerSubscriptionStatus::TPtr& ev);
+ void CreateNodeTrackingSubscription(TQueueInfoPtr queueInfo);
+ void CancleNodeTrackingSubscription(TQueueInfoPtr queueInfo);
+ void ProcessConnectTimeoutToLeader();
void ScheduleRequestSqsUsersList();
void RequestSqsUsersList();
@@ -73,7 +74,7 @@ private:
void RemoveUser(const TString& userName);
std::map<TString, TQueueInfoPtr>::iterator AddQueue(const TString& userName, const TString& queue, ui64 leaderTabletId,
const TString& customName, const TString& folderId, const ui32 tablesFormat, const ui64 version,
- const ui64 shardsCount, const TInstant createdTimestamp);
+ const ui64 shardsCount, const TInstant createdTimestamp, bool isFifo);
void AnswerNoUserToRequests();
void AnswerNoQueueToRequests(const TUserInfoPtr& user);
@@ -133,12 +134,12 @@ private:
private:
TString RootUrl_;
- TIntrusivePtr<NMonitoring::TDynamicCounters> SqsCoreCounters_;
- TIntrusivePtr<NMonitoring::TDynamicCounters> YmqRootCounters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SqsCoreCounters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> YmqRootCounters_;
std::shared_ptr<TAlignedPagePoolCounters> AllocPoolCounters_;
TIntrusivePtr<TUserCounters> AggregatedUserCounters_;
+ TIntrusivePtr<TMonitoringCounters> MonitoringCounters_;
TUsersMap Users_;
- THashMap<ui64, TQueueInfoPtr> LeaderTabletIdToQueue_;
THashMap<TActorId, TQueueInfoPtr> LocalLeaderRefs_; // referer -> queue info
TActorId SchemeCache_;
TActorId QueuesListReader_;
@@ -159,6 +160,11 @@ private:
THashMultiMap<TString, TSqsEvents::TEvGetQueueFolderIdAndCustomName::TPtr> GetQueueFolderIdAndCustomNameRequests_; // user name -> request
THashMultiMap<TString, TSqsEvents::TEvCountQueues::TPtr> CountQueuesRequests_; // user name -> request
+ TActorId NodeTrackerActor_;
+ THashMap<ui64, TQueueInfoPtr> QueuePerNodeTrackingSubscription;
+ ui64 MaxNodeTrackingSubscriptionId = 0;
+
+ THashSet<TQueueInfoPtr> QueuesWithGetNodeWaitingRequests;
struct TYcSearchEventsConfig {
TString Database;
diff --git a/ydb/core/ymq/actor/ut/CMakeLists.txt b/ydb/core/ymq/actor/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/ymq/actor/ut/CMakeLists.txt
+++ b/ydb/core/ymq/actor/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/ymq/actor/yc_search_ut/CMakeLists.txt b/ydb/core/ymq/actor/yc_search_ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/ymq/actor/yc_search_ut/CMakeLists.txt
+++ b/ydb/core/ymq/actor/yc_search_ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/ymq/base/CMakeLists.txt b/ydb/core/ymq/base/CMakeLists.txt
index 5dae028be0..bf1fda0f31 100644
--- a/ydb/core/ymq/base/CMakeLists.txt
+++ b/ydb/core/ymq/base/CMakeLists.txt
@@ -7,6 +7,7 @@
find_package(OpenSSL REQUIRED)
+add_subdirectory(ut)
add_library(core-ymq-base)
target_link_libraries(core-ymq-base PUBLIC
@@ -33,12 +34,12 @@ target_sources(core-ymq-base PRIVATE
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/acl.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/action.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/counters.cpp
- ${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/debug_info.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/dlq_helpers.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/helpers.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/probes.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/queue_attributes.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/queue_id.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/run_query.cpp
${CMAKE_SOURCE_DIR}/ydb/core/ymq/base/secure_protobuf_printer.cpp
)
generate_enum_serilization(core-ymq-base
diff --git a/ydb/core/ymq/base/counters.cpp b/ydb/core/ymq/base/counters.cpp
index 36486efcca..8bbdf5613c 100644
--- a/ydb/core/ymq/base/counters.cpp
+++ b/ydb/core/ymq/base/counters.cpp
@@ -298,10 +298,10 @@ static_assert(AbsDiffLessThanCounter(HttpUserCountersDescriptor.SizeOfCounters()
sizeof(NKikimrConfig::TSqsConfig*) +
sizeof(TIntrusivePtr<THttpUserCounters>), sizeof(THttpUserCounters)));
-TIntrusivePtr<NMonitoring::TDynamicCounters> GetSqsServiceCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& countersRoot, const TString& subgroup) {
+TIntrusivePtr<::NMonitoring::TDynamicCounters> GetSqsServiceCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& countersRoot, const TString& subgroup) {
return GetServiceCounters(countersRoot, "sqs")->GetSubgroup("subsystem", subgroup);
}
-TIntrusivePtr<NMonitoring::TDynamicCounters> GetYmqPublicCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& countersRoot) {
+TIntrusivePtr<::NMonitoring::TDynamicCounters> GetYmqPublicCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& countersRoot) {
// Remove subgroup and don't have subsystem (is this correct - ?)
return GetServiceCounters(countersRoot, "ymq_public");
}
@@ -349,13 +349,13 @@ std::pair<TIntrusivePtrCntrCouple, TIntrusivePtrCntrCouple> GetUserAndQueueCount
return { std::move(userCounters), std::move(queueCounters) };
}
-TIntrusivePtr<NMonitoring::TDynamicCounters> GetAggregatedCountersFromSqsCoreCounters(
+TIntrusivePtr<::NMonitoring::TDynamicCounters> GetAggregatedCountersFromSqsCoreCounters(
const TIntrusivePtrCntrCouple& rootCounters, const NKikimrConfig::TSqsConfig& cfg
) {
return GetAggregatedCountersFromUserCounters(GetUserCounters(rootCounters, TOTAL_COUNTER_LABEL), cfg);
}
-TIntrusivePtr<NMonitoring::TDynamicCounters> GetAggregatedCountersFromUserCounters(
+TIntrusivePtr<::NMonitoring::TDynamicCounters> GetAggregatedCountersFromUserCounters(
const TIntrusivePtrCntrCouple& userCounters, const NKikimrConfig::TSqsConfig& cfg
) {
if (cfg.GetYandexCloudMode()) {
@@ -406,7 +406,7 @@ ELaziness Lazy(const NKikimrConfig::TSqsConfig& cfg) {
#define INIT_HISTOGRAM_COUNTER(rootCounters, variable, expiring, buckets, lazy) \
INIT_HISTOGRAM_COUNTER_WITH_NAME(rootCounters, variable, Y_STRINGIZE(variable), expiring, buckets, lazy)
-void TActionCounters::Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, EAction action, ELifetime lifetime) {
+void TActionCounters::Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, EAction action, ELifetime lifetime) {
const ELaziness laziness = IsActionForMessage(action) ? Lazy(cfg) : ELaziness::OnDemand;
const EAction nonBatch = GetNonBatchAction(action);
INIT_COUNTER_WITH_NAME(rootCounters, Success, TStringBuilder() << nonBatch << "_Success", lifetime, EValueType::Derivative, laziness);
@@ -421,7 +421,7 @@ void TActionCounters::Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusiv
}
void TYmqActionCounters::Init(
- const NKikimrConfig::TSqsConfig&, const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters,
+ const NKikimrConfig::TSqsConfig&, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters,
EAction action, const TString& labelName, const TString& namePrefix, ELifetime lifetime
) {
const auto& methodName = ActionToCloudConvMethod(action);
@@ -450,7 +450,7 @@ void TQueryTypeCounters::SetAggregatedParent(TQueryTypeCounters* parent) {
QueryTypeCountersDescriptor.SetAggregatedParent(this, parent);
}
-void TTransactionCounters::Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters,
+void TTransactionCounters::Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters,
std::shared_ptr<TAlignedPagePoolCounters> poolCounters, bool forQueue) {
AllocPoolCounters = std::move(poolCounters);
@@ -482,7 +482,7 @@ void TTransactionCounters::SetAggregatedParent(const TIntrusivePtr<TTransactionC
}
}
-void TAPIStatusesCounters::Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& root) {
+void TAPIStatusesCounters::Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& root) {
auto statusesByType = root->GetSubgroup(DEFAULT_COUNTER_NAME, "StatusesByType");
for (const TString& errorCode : TErrorClass::GetAvailableErrorCodes()) {
ErrorToCounter[errorCode].Init(statusesByType, ELifetime::Persistent, EValueType::Derivative, STATUS_CODE, errorCode, ELaziness::OnDemand);
@@ -523,7 +523,7 @@ TFolderCounters::TFolderCounters(const TUserCounters* userCounters, const TStrin
if (insertCounters) {
FolderCounters = GetFolderCounters(UserCounters, folderId);
} else {
- FolderCounters = {new NMonitoring::TDynamicCounters(), new NMonitoring::TDynamicCounters()};
+ FolderCounters = {new ::NMonitoring::TDynamicCounters(), new ::NMonitoring::TDynamicCounters()};
}
//InitCounters();
}
@@ -578,7 +578,7 @@ TQueueCounters::TQueueCounters(const NKikimrConfig::TSqsConfig& cfg,
if (insertCounters) {
QueueCounters = GetQueueCounters(FolderCounters.Defined() ? FolderCounters : UserCounters, queueName);
} else {
- QueueCounters = {new NMonitoring::TDynamicCounters(), new NMonitoring::TDynamicCounters()};
+ QueueCounters = {new ::NMonitoring::TDynamicCounters(), new ::NMonitoring::TDynamicCounters()};
}
InitCounters();
}
@@ -712,7 +712,7 @@ void TQueueCounters::InitCounters(bool forLeaderNode) {
DetailedCounters.Init(QueueCounters.SqsCounters, AllocPoolCounters, forLeaderNode);
}
-void TQueueCounters::TDetailedCounters::Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& queueCounters,
+void TQueueCounters::TDetailedCounters::Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& queueCounters,
const std::shared_ptr<TAlignedPagePoolCounters>& allocPoolCounters, bool forLeaderNode) {
if (!GetConfiguration_Duration) {
INIT_HISTOGRAM_COUNTER(queueCounters, GetConfiguration_Duration, ELifetime::Expiring, DurationBucketsMs, ELaziness::OnDemand);
@@ -922,7 +922,7 @@ void THttpUserCounters::SetAggregatedParent(const TIntrusivePtr<THttpUserCounter
}
}
-void THttpActionCounters::Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, EAction action) {
+void THttpActionCounters::Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, EAction action) {
Cfg = &cfg;
Requests.Init(rootCounters, ELifetime::Persistent, EValueType::Derivative, TStringBuilder() << action << "Request", Lazy(*Cfg));
}
@@ -970,7 +970,7 @@ void TCloudAuthCounters::IncCounter(const NCloudAuth::EActionType actionType, co
++*CloudAuthCounters[actionType][credentialType][grpcStatus];
}
-void TCloudAuthCounters::InitCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> cloudAuthCounters) {
+void TCloudAuthCounters::InitCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> cloudAuthCounters) {
for (size_t actionType = 0; actionType < NCloudAuth::EActionType::ActionTypesCount; ++actionType) {
const auto actionTypeStr = ToString(static_cast<NCloudAuth::EActionType>(actionType));
const auto actionCounters = cloudAuthCounters->GetSubgroup("action_type", actionTypeStr);
@@ -997,4 +997,12 @@ void TMeteringCounters::InitCounters(const TVector<TString>& classifierLabels) {
}
}
+void TMonitoringCounters::InitCounters() {
+ INIT_COUNTER(MonitoringCounters, CleanupRemovedQueuesLagSec, ELifetime::Persistent, EValueType::Derivative, Lazy(Config));
+ INIT_COUNTER(MonitoringCounters, CleanupRemovedQueuesLagCount, ELifetime::Persistent, EValueType::Derivative, Lazy(Config));
+ INIT_COUNTER(MonitoringCounters, CleanupRemovedQueuesDone, ELifetime::Persistent, EValueType::Derivative, Lazy(Config));
+ INIT_COUNTER(MonitoringCounters, CleanupRemovedQueuesRows, ELifetime::Persistent, EValueType::Derivative, Lazy(Config));
+ INIT_COUNTER(MonitoringCounters, CleanupRemovedQueuesErrors, ELifetime::Persistent, EValueType::Derivative, Lazy(Config));
+}
+
} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/base/counters.h b/ydb/core/ymq/base/counters.h
index 8851cdff71..7dda5ff14a 100644
--- a/ydb/core/ymq/base/counters.h
+++ b/ydb/core/ymq/base/counters.h
@@ -99,20 +99,20 @@ struct TCountersCouple {
}
};
-using TIntrusivePtrCntrCouple = TCountersCouple<TIntrusivePtr<NMonitoring::TDynamicCounters>>;
+using TIntrusivePtrCntrCouple = TCountersCouple<TIntrusivePtr<::NMonitoring::TDynamicCounters>>;
-TIntrusivePtr<NMonitoring::TDynamicCounters> GetSqsServiceCounters(
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& countersRoot, const TString& subgroup);
-TIntrusivePtr<NMonitoring::TDynamicCounters> GetYmqPublicCounters(
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& countersRoot);
+TIntrusivePtr<::NMonitoring::TDynamicCounters> GetSqsServiceCounters(
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& countersRoot, const TString& subgroup);
+TIntrusivePtr<::NMonitoring::TDynamicCounters> GetYmqPublicCounters(
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& countersRoot);
TIntrusivePtrCntrCouple GetFolderCounters(const TIntrusivePtrCntrCouple& userCounters, const TString& folderId);
void RemoveFolderCounters(const TIntrusivePtrCntrCouple& userCounters, const TString& folderId);
std::pair<TIntrusivePtrCntrCouple, TIntrusivePtrCntrCouple> GetUserAndQueueCounters(
const TIntrusivePtrCntrCouple& sqsRootCounters, const TQueuePath& queuePath);
-TIntrusivePtr<NMonitoring::TDynamicCounters> GetAggregatedCountersFromSqsCoreCounters(
+TIntrusivePtr<::NMonitoring::TDynamicCounters> GetAggregatedCountersFromSqsCoreCounters(
const TIntrusivePtrCntrCouple& sqsCoreCounters, const NKikimrConfig::TSqsConfig& cfg);
-TIntrusivePtr<NMonitoring::TDynamicCounters> GetAggregatedCountersFromUserCounters(
+TIntrusivePtr<::NMonitoring::TDynamicCounters> GetAggregatedCountersFromUserCounters(
const TIntrusivePtrCntrCouple& sqsCoreCounters, const NKikimrConfig::TSqsConfig& cfg);
extern const TString DEFAULT_COUNTER_NAME;
@@ -226,11 +226,11 @@ struct TLazyCachedCounterBase {
}
}
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, const TString& value, ELaziness laziness) {
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, const TString& value, ELaziness laziness) {
Init(rootCounters, lifetime, DEFAULT_COUNTER_NAME, value, laziness);
}
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, const TString& name, const TString& value, ELaziness laziness) {
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, const TString& name, const TString& value, ELaziness laziness) {
RootCounters = rootCounters;
Name = name;
Value = value;
@@ -291,7 +291,7 @@ protected:
protected:
TLazyCachedCounterBase* AggregatedParent = nullptr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> RootCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> RootCounters;
TString Name;
TString Value;
ELifetime Lifetime = ELifetime::Persistent;
@@ -304,11 +304,11 @@ struct TLazyCachedCounter : public NDetails::TLazyCachedCounterBase<NMonitoring:
TLazyCachedCounter() = default;
TLazyCachedCounter(const TLazyCachedCounter&) = default;
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, EValueType valueType, const TString& value, ELaziness laziness) {
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, EValueType valueType, const TString& value, ELaziness laziness) {
Init(rootCounters, lifetime, valueType, DEFAULT_COUNTER_NAME, value, laziness);
}
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, EValueType valueType, const TString& name, const TString& value, ELaziness laziness) {
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, EValueType valueType, const TString& name, const TString& value, ELaziness laziness) {
TLazyCachedCounterBase::Init(rootCounters, lifetime, name, value, ELaziness::OnDemand);
ValueType = valueType;
if (laziness == ELaziness::OnStart) {
@@ -338,11 +338,11 @@ struct TLazyCachedHistogram : public NDetails::TLazyCachedCounterBase<NMonitorin
TLazyCachedHistogram() = default;
TLazyCachedHistogram(const TLazyCachedHistogram&) = default;
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, const NMonitoring::TBucketBounds& buckets, const TString& value, ELaziness laziness) {
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, const NMonitoring::TBucketBounds& buckets, const TString& value, ELaziness laziness) {
Init(rootCounters, lifetime, buckets, DEFAULT_COUNTER_NAME, value, laziness);
}
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, const NMonitoring::TBucketBounds& buckets, const TString& name, const TString& value, ELaziness laziness) {
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, ELifetime lifetime, const NMonitoring::TBucketBounds& buckets, const TString& name, const TString& value, ELaziness laziness) {
Buckets = &buckets;
TLazyCachedCounterBase::Init(rootCounters, lifetime, name, value, ELaziness::OnDemand);
if (laziness == ELaziness::OnStart) {
@@ -380,7 +380,7 @@ public:
TLazyCachedHistogram WorkingDuration; // Special duration except wait time for ReceiveMessage action (== 18 counters). // User metric for cloud console (ReceiveMessage).
public:
- void Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters,
+ void Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters,
EAction action, ELifetime lifetime = ELifetime::Persistent);
virtual void SetAggregatedParent(TActionCounters* parent);
@@ -388,7 +388,7 @@ public:
};
struct TYmqActionCounters : public TActionCounters {
- void Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters,
+ void Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters,
EAction action, const TString& labelName, const TString& namePrefix,
ELifetime lifetime = ELifetime::Persistent);
public:
@@ -398,7 +398,7 @@ public:
}
private:
- NMonitoring::TDynamicCounterPtr SubGroup;
+ ::NMonitoring::TDynamicCounterPtr SubGroup;
};
// Counters for typed queries (WRITE_MESSAGE_ID, PURGE_QUEUE_ID and etc).
@@ -430,7 +430,7 @@ struct TTransactionCounters : public TAtomicRefCount<TTransactionCounters> {
void SetAggregatedParent(const TIntrusivePtr<TTransactionCounters>& parent);
public:
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters,
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters,
std::shared_ptr<TAlignedPagePoolCounters> poolCounters, bool forQueue);
};
@@ -440,7 +440,7 @@ public:
void AddError(const TString& errorCode, size_t count = 1);
void AddOk(size_t count = 1);
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& root);
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& root);
void SetAggregatedParent(TAPIStatusesCounters* parent);
@@ -493,8 +493,8 @@ struct TUserCounters : public TAtomicRefCount<TUserCounters> {
TIntrusivePtrCntrCouple UserCounters; // User tree in core subsystem
TUserCounters(
- const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& sqsCoreCounters,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& ymqRootCounters,
+ const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& sqsCoreCounters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& ymqRootCounters,
const std::shared_ptr<TAlignedPagePoolCounters>& allocPoolCounters, const TString& userName,
const TIntrusivePtr<TUserCounters>& aggregatedParent,
bool isAggregatedCounters = false
@@ -630,7 +630,7 @@ struct TQueueCounters : public TAtomicRefCount<TQueueCounters> {
TLazyCachedHistogram ReceiveMessageImmediate_Duration; // Time for receive message request that was processed with only one attempt (without wait or try many shards). Histogram with buckets for durations (== 18 counters).
- void Init(const TIntrusivePtr<NMonitoring::TDynamicCounters>& queueCounters,
+ void Init(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& queueCounters,
const std::shared_ptr<TAlignedPagePoolCounters>& allocPoolCounters, bool forLeaderNode);
void SetAggregatedParent(TDetailedCounters* parent);
};
@@ -716,7 +716,7 @@ private:
struct THttpActionCounters {
TLazyCachedCounter Requests; // Requests count of given type.
- void Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& rootCounters, EAction action);
+ void Init(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& rootCounters, EAction action);
void SetAggregatedParent(THttpActionCounters* parent);
private:
@@ -731,10 +731,10 @@ struct THttpUserCounters : public TAtomicRefCount<THttpUserCounters> {
// Raw counters interface
// Don't use counters by name!
- TIntrusivePtr<NMonitoring::TDynamicCounters> SqsHttpCounters; // Sqs http subsystem
- TIntrusivePtr<NMonitoring::TDynamicCounters> UserCounters; // User tree in core subsystem
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SqsHttpCounters; // Sqs http subsystem
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> UserCounters; // User tree in core subsystem
- THttpUserCounters(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<NMonitoring::TDynamicCounters>& sqsHttpCounters, const TString& userName)
+ THttpUserCounters(const NKikimrConfig::TSqsConfig& cfg, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& sqsHttpCounters, const TString& userName)
: SqsHttpCounters(sqsHttpCounters)
, Cfg(&cfg)
{
@@ -758,9 +758,9 @@ struct THttpCounters : public TAtomicRefCount<THttpCounters> {
// Raw counters interface
// Don't use counters by name!
- TIntrusivePtr<NMonitoring::TDynamicCounters> SqsHttpCounters; // Sqs http subsystem
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SqsHttpCounters; // Sqs http subsystem
- THttpCounters(const NKikimrConfig::TSqsConfig& cfg, TIntrusivePtr<NMonitoring::TDynamicCounters> sqsHttpCounters)
+ THttpCounters(const NKikimrConfig::TSqsConfig& cfg, TIntrusivePtr<::NMonitoring::TDynamicCounters> sqsHttpCounters)
: SqsHttpCounters(std::move(sqsHttpCounters))
, Cfg(&cfg)
{
@@ -787,7 +787,7 @@ struct TCloudAuthCounters {
TLazyCachedHistogram AuthorizeDuration; // Histogram with buckets for durations (== 18 counters).
TLazyCachedHistogram GetFolderIdDuration; // Histogram with buckets for durations (== 18 counters).
- explicit TCloudAuthCounters(const NKikimrConfig::TSqsConfig& cfg, TIntrusivePtr<NMonitoring::TDynamicCounters> cloudAuthCountersRoot)
+ explicit TCloudAuthCounters(const NKikimrConfig::TSqsConfig& cfg, TIntrusivePtr<::NMonitoring::TDynamicCounters> cloudAuthCountersRoot)
: Cfg(&cfg)
{
InitCounters(std::move(cloudAuthCountersRoot));
@@ -798,7 +798,7 @@ struct TCloudAuthCounters {
static constexpr int GRPC_STATUSES_COUNT = 18;
private:
- void InitCounters(TIntrusivePtr<NMonitoring::TDynamicCounters> cloudAuthCounters);
+ void InitCounters(TIntrusivePtr<::NMonitoring::TDynamicCounters> cloudAuthCounters);
private:
const NKikimrConfig::TSqsConfig* Cfg = nullptr;
@@ -812,7 +812,7 @@ struct TMeteringCounters : public TAtomicRefCount<TMeteringCounters> {
THashMap<TString, TLazyCachedCounter> ClassifierRequestsResults;
THashMap<TString, TLazyCachedCounter> IdleClassifierRequestsResults;
- TMeteringCounters(const NKikimrConfig::TSqsConfig& config, const TIntrusivePtr<NMonitoring::TDynamicCounters>& sqsMeteringCounters, const TVector<TString>& classifierLabels)
+ TMeteringCounters(const NKikimrConfig::TSqsConfig& config, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& sqsMeteringCounters, const TVector<TString>& classifierLabels)
: SqsMeteringCounters(sqsMeteringCounters)
, Config(config)
{
@@ -823,7 +823,31 @@ private:
void InitCounters(const TVector<TString>& classifierLabels);
private:
- TIntrusivePtr<NMonitoring::TDynamicCounters> SqsMeteringCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> SqsMeteringCounters;
+ const NKikimrConfig::TSqsConfig& Config;
+};
+
+// Common service monitoring counters
+struct TMonitoringCounters : public TAtomicRefCount<TMonitoringCounters> {
+ TLazyCachedCounter CleanupRemovedQueuesLagSec;
+ TLazyCachedCounter CleanupRemovedQueuesLagCount;
+
+ TLazyCachedCounter CleanupRemovedQueuesDone;
+ TLazyCachedCounter CleanupRemovedQueuesRows;
+ TLazyCachedCounter CleanupRemovedQueuesErrors;
+
+ TMonitoringCounters(const NKikimrConfig::TSqsConfig& config, const TIntrusivePtr<::NMonitoring::TDynamicCounters>& monitoringCounters)
+ : MonitoringCounters(monitoringCounters)
+ , Config(config)
+ {
+ InitCounters();
+ }
+
+private:
+ void InitCounters();
+
+private:
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> MonitoringCounters;
const NKikimrConfig::TSqsConfig& Config;
};
diff --git a/ydb/core/ymq/base/debug_info.cpp b/ydb/core/ymq/base/debug_info.cpp
deleted file mode 100644
index b80896b6fb..0000000000
--- a/ydb/core/ymq/base/debug_info.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "debug_info.h"
-
-namespace NKikimr::NSQS {
-
-TDebugInfoHolder DebugInfo = {};
-
-TDebugInfo::TDebugInfo() {
- UnparsedHttpRequests.reserve(1000);
-}
-
-void TDebugInfo::MoveToParsedHttpRequests(const TString& requestId, class THttpRequest* request) {
- ParsedHttpRequests.emplace(requestId, request);
- UnparsedHttpRequests.erase(request);
-}
-
-void TDebugInfo::EraseHttpRequest(const TString& requestId, class THttpRequest* request) {
- if (!ParsedHttpRequests.EraseKeyValue(requestId, request)) {
- UnparsedHttpRequests.erase(request);
- }
-}
-
-} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/base/debug_info.h b/ydb/core/ymq/base/debug_info.h
deleted file mode 100644
index 8ead82ebed..0000000000
--- a/ydb/core/ymq/base/debug_info.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#pragma once
-#include <util/generic/hash.h>
-#include <util/generic/hash_set.h>
-#include <util/generic/string.h>
-#include <util/system/spinlock.h>
-
-namespace NActors {
-class IActor;
-} // namespace NActors
-
-namespace NKikimr::NSQS {
-namespace NDebug {
-
-// Multimap for per request objects.
-// Provides simple deletion by key and value functionality.
-template <class TKey, class T>
-class TMultimapWithKeyValueErase : public THashMultiMap<TKey, T> {
-public:
- TMultimapWithKeyValueErase() {
- this->reserve(1000); // reserve to not reallocate at runtime
- }
-
- using THashMultiMap<TKey, T>::THashMultiMap;
-
- bool EraseKeyValue(const TKey& key, const T& value) {
- auto [i, end] = this->equal_range(key);
- for (; i != end; ++i) {
- if (i->second == value) {
- this->erase(i);
- return true;
- }
- }
- return false;
- }
-};
-
-} // namespace NDebug
-
-// Structure for using in debug purpuses with gdb.
-// Can show all main SQS objects in coredump.
-struct TDebugInfo {
- TDebugInfo();
-
- // Actors
- class TSqsService* SqsServiceActorPtr = nullptr;
- class TSqsProxyService* SqsProxyServiceActorPtr = nullptr;
-
- // Requests by request id
- NDebug::TMultimapWithKeyValueErase<TString, class TProxyActor*> ProxyActors;
- NDebug::TMultimapWithKeyValueErase<TString, NActors::IActor*> ActionActors;
- NDebug::TMultimapWithKeyValueErase<TString, class TMiniKqlExecutionActor*> ExecutorActors;
-
- // Queue activities by [username/queuename]
- NDebug::TMultimapWithKeyValueErase<TString, class TQueueLeader*> QueueLeaders;
- NDebug::TMultimapWithKeyValueErase<TString, class TPurgeActor*> QueuePurgeActors;
- NDebug::TMultimapWithKeyValueErase<TString, class TRetentionActor*> QueueRetentionActors;
- NDebug::TMultimapWithKeyValueErase<TString, class TCleanupActor*> QueueCleanupActors;
- NDebug::TMultimapWithKeyValueErase<TString, class TQueueMigrationActor*> QueueMigrationActors;
-
- // Http
- class TAsyncHttpServer* HttpServer = nullptr;
- THashSet<class THttpRequest*> UnparsedHttpRequests; // requests without assigned request id
- NDebug::TMultimapWithKeyValueErase<TString, class THttpRequest*> ParsedHttpRequests; // http requests with request id
- void MoveToParsedHttpRequests(const TString& requestId, class THttpRequest* request);
- void EraseHttpRequest(const TString& requestId, class THttpRequest* request);
-};
-
-// Helper for safe access to debug info.
-class TDebugInfoHolder {
-public:
- class TAutoGuarder {
- friend class TDebugInfoHolder;
-
- TAutoGuarder(TDebugInfoHolder& parent)
- : Parent(parent)
- , Guard(Parent.Lock)
- {
- }
-
- public:
- TDebugInfo* operator->() {
- return &Parent.DebugInfo;
- }
-
- private:
- TDebugInfoHolder& Parent;
- TGuard<TAdaptiveLock> Guard;
- };
-
- // Returns safe (guarded) debug info to write to.
- TAutoGuarder operator->() {
- return { *this };
- }
-
-private:
- TDebugInfo DebugInfo;
- TAdaptiveLock Lock;
-};
-
-extern TDebugInfoHolder DebugInfo;
-
-} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/base/events_writer_iface.h b/ydb/core/ymq/base/events_writer_iface.h
index 4fcd6ab50a..7bc7b7643a 100644
--- a/ydb/core/ymq/base/events_writer_iface.h
+++ b/ydb/core/ymq/base/events_writer_iface.h
@@ -26,7 +26,7 @@ private:
class IEventsWriterFactory {
public:
- virtual IEventsWriterWrapper::TPtr CreateEventsWriter(const NKikimrConfig::TSqsConfig& config, const NMonitoring::TDynamicCounterPtr& counters) const = 0;
+ virtual IEventsWriterWrapper::TPtr CreateEventsWriter(const NKikimrConfig::TSqsConfig& config, const ::NMonitoring::TDynamicCounterPtr& counters) const = 0;
virtual ~IEventsWriterFactory()
{}
};
diff --git a/ydb/core/ymq/base/run_query.cpp b/ydb/core/ymq/base/run_query.cpp
new file mode 100644
index 0000000000..9525c5edd1
--- /dev/null
+++ b/ydb/core/ymq/base/run_query.cpp
@@ -0,0 +1,49 @@
+#include "run_query.h"
+
+#include <library/cpp/actors/core/executor_thread.h>
+
+namespace NKikimr::NSQS {
+
+ void RunYqlQuery(
+ const TString& query,
+ std::optional<NKikimr::NClient::TParameters> params,
+ bool readonly,
+ TDuration sendAfter,
+ const TString& database,
+ const TActorContext& ctx
+ ) {
+ auto ev = MakeHolder<NKqp::TEvKqp::TEvQueryRequest>();
+ auto* request = ev->Record.MutableRequest();
+
+ request->SetAction(NKikimrKqp::QUERY_ACTION_EXECUTE);
+ request->SetType(NKikimrKqp::QUERY_TYPE_SQL_DML);
+ request->SetKeepSession(false);
+ request->SetQuery(query);
+
+ if (database) {
+ request->SetDatabase(database);
+ }
+
+ request->MutableQueryCachePolicy()->set_keep_in_cache(true);
+
+ if (readonly) {
+ request->MutableTxControl()->mutable_begin_tx()->mutable_stale_read_only();
+ } else {
+ request->MutableTxControl()->mutable_begin_tx()->mutable_serializable_read_write();
+ }
+ request->MutableTxControl()->set_commit_tx(true);
+
+ if (params) {
+ request->MutableParameters()->Swap(&params.value());
+ }
+
+ auto kqpActor = NKqp::MakeKqpProxyID(ctx.SelfID.NodeId());
+ if (sendAfter == TDuration::Zero()) {
+ ctx.Send(kqpActor, ev.Release());
+ } else {
+ ctx.ExecutorThread.Schedule(sendAfter, new IEventHandle(kqpActor, ctx.SelfID, ev.Release()));
+ }
+ }
+
+
+} // namespace NKikimr::NSQS
diff --git a/ydb/core/ymq/base/run_query.h b/ydb/core/ymq/base/run_query.h
new file mode 100644
index 0000000000..7fc4f3c808
--- /dev/null
+++ b/ydb/core/ymq/base/run_query.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include <ydb/core/kqp/kqp.h>
+#include <ydb/public/lib/deprecated/kicli/kicli.h>
+
+#include <library/cpp/actors/core/actor.h>
+
+
+namespace NKikimr::NSQS {
+
+ void RunYqlQuery(
+ const TString& query,
+ std::optional<NKikimr::NClient::TParameters> params,
+ bool readonly,
+ TDuration sendAfter,
+ const TString& database,
+ const TActorContext& ctx
+ );
+
+} // namespace NKikimr::NSQS \ No newline at end of file
diff --git a/ydb/core/ymq/base/ut/CMakeLists.txt b/ydb/core/ymq/base/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/ymq/base/ut/CMakeLists.txt
+++ b/ydb/core/ymq/base/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/ymq/base/ut/counters_ut.cpp b/ydb/core/ymq/base/ut/counters_ut.cpp
index 5ff3d26e36..66df2d5741 100644
--- a/ydb/core/ymq/base/ut/counters_ut.cpp
+++ b/ydb/core/ymq/base/ut/counters_ut.cpp
@@ -9,7 +9,7 @@
namespace NKikimr::NSQS {
-TString CountersString(const TIntrusivePtr<NMonitoring::TDynamicCounters>& root) {
+TString CountersString(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& root) {
TStringStream ss;
root->OutputPlainText(ss);
return ss.Str();
@@ -36,10 +36,10 @@ std::vector<std::pair<TString, TString>> ParseCounterPath(const TString& path) {
// "counters" - simple counter.
// "path/counter" - simple path.
// "user=my_user/queue=my_queue/TransactionCount" - with nondefault names.
-void AssertCounterValue(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, const TString& path, i64 expectedValue) {
+void AssertCounterValue(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, const TString& path, i64 expectedValue) {
const auto pathComponents = ParseCounterPath(path);
UNIT_ASSERT_GT(pathComponents.size(), 0);
- TIntrusivePtr<NMonitoring::TDynamicCounters> parent = counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> parent = counters;
for (size_t i = 0; i < pathComponents.size() - 1; ++i) {
parent = parent->FindSubgroup(pathComponents[i].first, pathComponents[i].second);
UNIT_ASSERT_C(parent, "Subgroup \"" << pathComponents[i].first << "=" << pathComponents[i].second << "\" was not found. Level: " << i);
@@ -52,7 +52,7 @@ void AssertCounterValue(const TIntrusivePtr<NMonitoring::TDynamicCounters>& coun
<< "\nCounters string:\n" << CountersString(counters));
}
-void AssertCounterValues(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters, const std::vector<std::pair<TString, i64>>& expectedValues) {
+void AssertCounterValues(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters, const std::vector<std::pair<TString, i64>>& expectedValues) {
for (const auto& [path, expectedValue] : expectedValues) {
AssertCounterValue(counters, path, expectedValue);
}
@@ -60,7 +60,7 @@ void AssertCounterValues(const TIntrusivePtr<NMonitoring::TDynamicCounters>& cou
Y_UNIT_TEST_SUITE(LazyCounterTest) {
Y_UNIT_TEST(LazyCounterTest) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> root = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> root = new ::NMonitoring::TDynamicCounters();
TLazyCachedCounter counter, counter2, counter3;
counter.Init(root, ELifetime::Persistent, EValueType::Absolute, "A", ELaziness::OnDemand);
counter3.Init(root, ELifetime::Persistent, EValueType::Absolute, "B", ELaziness::OnStart);
@@ -71,7 +71,7 @@ Y_UNIT_TEST_SUITE(LazyCounterTest) {
}
void AggregationTest(ELaziness lazy) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters();
TLazyCachedCounter parent;
parent.Init(counters, ELifetime::Persistent, EValueType::Absolute, "parent", lazy);
@@ -164,7 +164,7 @@ Y_UNIT_TEST_SUITE(LazyCounterTest) {
}
Y_UNIT_TEST(HistogramAggregationTest) {
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters = new ::NMonitoring::TDynamicCounters();
const NMonitoring::TBucketBounds buckets = { 1, 3, 5 };
TLazyCachedHistogram parent;
parent.Init(counters, ELifetime::Persistent, buckets, "parent", ELaziness::OnStart);
@@ -218,8 +218,8 @@ Y_UNIT_TEST_SUITE(UserCountersTest) {
Y_UNIT_TEST(DisableCountersTest) {
NKikimrConfig::TSqsConfig cfg;
cfg.SetCreateLazyCounters(false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> core = new NMonitoring::TDynamicCounters();
- TIntrusivePtr<NMonitoring::TDynamicCounters> ymqCounters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> core = new ::NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ymqCounters = new ::NMonitoring::TDynamicCounters();
TIntrusivePtr<TUserCounters> user1 = new TUserCounters(cfg, core, ymqCounters, nullptr, "user1", nullptr);
TIntrusivePtr<TUserCounters> user2 = new TUserCounters(cfg, core, ymqCounters, nullptr, "user2", nullptr);
ASSERT_USER_PRESENT("user1");
@@ -270,8 +270,8 @@ Y_UNIT_TEST_SUITE(UserCountersTest) {
Y_UNIT_TEST(RemoveUserCountersTest) {
NKikimrConfig::TSqsConfig cfg;
cfg.SetCreateLazyCounters(false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> core = new NMonitoring::TDynamicCounters();
- TIntrusivePtr<NMonitoring::TDynamicCounters> ymqCounters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> core = new ::NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ymqCounters = new ::NMonitoring::TDynamicCounters();
TIntrusivePtr<TUserCounters> user = new TUserCounters(cfg, core, ymqCounters, nullptr, "my_user", nullptr);
ASSERT_USER_PRESENT("my_user");
@@ -283,8 +283,8 @@ Y_UNIT_TEST_SUITE(UserCountersTest) {
Y_UNIT_TEST(CountersAggregationTest) {
NKikimrConfig::TSqsConfig cfg;
cfg.SetCreateLazyCounters(false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> core = new NMonitoring::TDynamicCounters();
- TIntrusivePtr<NMonitoring::TDynamicCounters> ymqCounters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> core = new ::NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ymqCounters = new ::NMonitoring::TDynamicCounters();
TIntrusivePtr<TUserCounters> total = new TUserCounters(cfg, core, ymqCounters, nullptr, TOTAL_COUNTER_LABEL, nullptr);
total->ShowDetailedCounters(TInstant::Max());
TIntrusivePtr<TUserCounters> user = new TUserCounters(cfg, core, ymqCounters, nullptr, "my_user", total);
@@ -346,8 +346,8 @@ Y_UNIT_TEST_SUITE(QueueCountersTest) {
Y_UNIT_TEST(InsertCountersTest) {
NKikimrConfig::TSqsConfig cfg;
cfg.SetCreateLazyCounters(false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> core = new NMonitoring::TDynamicCounters();
- TIntrusivePtr<NMonitoring::TDynamicCounters> ymqCounters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> core = new ::NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ymqCounters = new ::NMonitoring::TDynamicCounters();
TIntrusivePtr<TUserCounters> user = new TUserCounters(cfg, core, ymqCounters, nullptr, "my_user", nullptr);
ASSERT_USER_PRESENT("my_user");
@@ -375,8 +375,8 @@ Y_UNIT_TEST_SUITE(QueueCountersTest) {
void RemoveQueueCountersTest(bool leader, const TString& folderId) {
NKikimrConfig::TSqsConfig cfg;
cfg.SetCreateLazyCounters(false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> core = new NMonitoring::TDynamicCounters();
- TIntrusivePtr<NMonitoring::TDynamicCounters> ymqCounters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> core = new ::NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ymqCounters = new ::NMonitoring::TDynamicCounters();
TIntrusivePtr<TUserCounters> user = new TUserCounters(cfg, core, ymqCounters, nullptr, "my_user", nullptr);
TIntrusivePtr<TQueueCounters> queue = user->CreateQueueCounters("my_queue", folderId, true);
if (leader) {
@@ -407,8 +407,8 @@ Y_UNIT_TEST_SUITE(QueueCountersTest) {
NKikimrConfig::TSqsConfig cfg;
cfg.SetYandexCloudMode(cloudMode);
cfg.SetCreateLazyCounters(false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> core = new NMonitoring::TDynamicCounters();
- TIntrusivePtr<NMonitoring::TDynamicCounters> ymqCounters = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> core = new ::NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ymqCounters = new ::NMonitoring::TDynamicCounters();
TIntrusivePtr<TUserCounters> total = new TUserCounters(cfg, core, ymqCounters, nullptr, TOTAL_COUNTER_LABEL, nullptr);
total->ShowDetailedCounters(TInstant::Max());
TIntrusivePtr<TUserCounters> user = new TUserCounters(cfg, core, ymqCounters, nullptr, "my_user", total);
@@ -481,7 +481,7 @@ Y_UNIT_TEST_SUITE(HttpCountersTest) {
Y_UNIT_TEST(CountersAggregationTest) {
NKikimrConfig::TSqsConfig cfg;
cfg.SetCreateLazyCounters(false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> root = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> root = new ::NMonitoring::TDynamicCounters();
TIntrusivePtr<THttpCounters> http = new THttpCounters(cfg, root);
TIntrusivePtr<THttpUserCounters> user = http->GetUserCounters("my_user");
@@ -504,7 +504,7 @@ Y_UNIT_TEST_SUITE(MeteringCountersTest) {
Y_UNIT_TEST(CountersAggregationTest) {
NKikimrConfig::TSqsConfig config;
config.SetCreateLazyCounters(false);
- TIntrusivePtr<NMonitoring::TDynamicCounters> metering = new NMonitoring::TDynamicCounters();
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> metering = new ::NMonitoring::TDynamicCounters();
TIntrusivePtr<TMeteringCounters> counters = new TMeteringCounters(config, metering, {"inet", "yandex", "unknown", "cloud"});
*counters->ClassifierRequestsResults["inet"] = 33;
*counters->ClassifierRequestsResults["yandex"] = 42;
diff --git a/ydb/core/ymq/client/CMakeLists.txt b/ydb/core/ymq/client/CMakeLists.txt
new file mode 100644
index 0000000000..c4c2a2a4cc
--- /dev/null
+++ b/ydb/core/ymq/client/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(bin)
+add_subdirectory(cpp)
diff --git a/ydb/core/ymq/client/bin/CMakeLists.txt b/ydb/core/ymq/client/bin/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/ymq/client/bin/CMakeLists.txt
+++ b/ydb/core/ymq/client/bin/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/ymq/http/CMakeLists.txt b/ydb/core/ymq/http/CMakeLists.txt
index 6cc7d17cce..5c029dcba2 100644
--- a/ydb/core/ymq/http/CMakeLists.txt
+++ b/ydb/core/ymq/http/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(core-ymq-http)
target_link_libraries(core-ymq-http PUBLIC
diff --git a/ydb/core/ymq/http/http.cpp b/ydb/core/ymq/http/http.cpp
index 5d0963bfb2..206ec6de56 100644
--- a/ydb/core/ymq/http/http.cpp
+++ b/ydb/core/ymq/http/http.cpp
@@ -8,7 +8,6 @@
#include <ydb/core/ymq/actor/events.h>
#include <ydb/core/ymq/actor/log.h>
#include <ydb/core/ymq/actor/serviceid.h>
-#include <ydb/core/ymq/base/debug_info.h>
#include <ydb/core/ymq/base/helpers.h>
#include <ydb/core/ymq/base/limits.h>
#include <ydb/core/ymq/base/secure_protobuf_printer.h>
@@ -123,12 +122,10 @@ THttpRequest::THttpRequest(TAsyncHttpServer* p)
: Parent_(p)
{
Parent_->UpdateConnectionsCountCounter();
- DebugInfo->UnparsedHttpRequests.emplace(this);
}
THttpRequest::~THttpRequest() {
Parent_->UpdateConnectionsCountCounter();
- DebugInfo->EraseHttpRequest(RequestId_, this);
}
void THttpRequest::SendResponse(const TSqsHttpResponse& r) {
@@ -957,8 +954,6 @@ void THttpRequest::GenerateRequestId(const TString& sourceReqId) {
}
RequestId_ = std::move(builder);
-
- DebugInfo->MoveToParsedHttpRequests(RequestId_, this);
}
THttpActionCounters* THttpRequest::GetActionCounters() const {
@@ -987,18 +982,15 @@ bool THttpRequest::SetupPing(const TReplyParams& params) {
TAsyncHttpServer::TAsyncHttpServer(const NKikimrConfig::TSqsConfig& config)
: THttpServer(this, MakeHttpServerOptions(config))
, Config(config)
-{
- DebugInfo->HttpServer = this;
-}
+{}
TAsyncHttpServer::~TAsyncHttpServer() {
Stop();
- DebugInfo->HttpServer = nullptr;
}
void TAsyncHttpServer::Initialize(
- NActors::TActorSystem* as, TIntrusivePtr<NMonitoring::TDynamicCounters> sqsCounters,
- TIntrusivePtr<NMonitoring::TDynamicCounters> ymqCounters, ui32 poolId
+ NActors::TActorSystem* as, TIntrusivePtr<::NMonitoring::TDynamicCounters> sqsCounters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ymqCounters, ui32 poolId
) {
ActorSystem_ = as;
HttpCounters_ = new THttpCounters(Config, sqsCounters->GetSubgroup("subsystem", "http"));
diff --git a/ydb/core/ymq/http/http.h b/ydb/core/ymq/http/http.h
index 01a2b0edc4..64c3747f0f 100644
--- a/ydb/core/ymq/http/http.h
+++ b/ydb/core/ymq/http/http.h
@@ -147,8 +147,8 @@ public:
void Initialize(
NActors::TActorSystem* as,
- TIntrusivePtr<NMonitoring::TDynamicCounters> sqsCounters,
- TIntrusivePtr<NMonitoring::TDynamicCounters> ymqCounters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> sqsCounters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> ymqCounters,
ui32 poolId);
void Start();
diff --git a/ydb/core/ymq/http/ut/CMakeLists.txt b/ydb/core/ymq/http/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/ymq/http/ut/CMakeLists.txt
+++ b/ydb/core/ymq/http/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/ymq/queues/CMakeLists.txt b/ydb/core/ymq/queues/CMakeLists.txt
new file mode 100644
index 0000000000..5f37ade1b1
--- /dev/null
+++ b/ydb/core/ymq/queues/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(common)
+add_subdirectory(fifo)
+add_subdirectory(std)
diff --git a/ydb/core/ymq/queues/std/queries.cpp b/ydb/core/ymq/queues/std/queries.cpp
index 73a7fa71cf..1df5c5a87e 100644
--- a/ydb/core/ymq/queues/std/queries.cpp
+++ b/ydb/core/ymq/queues/std/queries.cpp
@@ -1307,6 +1307,7 @@ const char* const GetQueuesListQuery = R"__(
'Account
'QueueName
'QueueState
+ 'FifoQueue
'CreatedTimestamp
'CustomQueueName
'DlqName
diff --git a/ydb/core/ymq/ut/CMakeLists.txt b/ydb/core/ymq/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/ymq/ut/CMakeLists.txt
+++ b/ydb/core/ymq/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/yq/CMakeLists.txt b/ydb/core/yq/CMakeLists.txt
new file mode 100644
index 0000000000..28eb184166
--- /dev/null
+++ b/ydb/core/yq/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(libs)
diff --git a/ydb/core/yq/libs/CMakeLists.txt b/ydb/core/yq/libs/CMakeLists.txt
new file mode 100644
index 0000000000..77fa5f36ea
--- /dev/null
+++ b/ydb/core/yq/libs/CMakeLists.txt
@@ -0,0 +1,39 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actors)
+add_subdirectory(audit)
+add_subdirectory(checkpoint_storage)
+add_subdirectory(checkpointing)
+add_subdirectory(checkpointing_common)
+add_subdirectory(common)
+add_subdirectory(config)
+add_subdirectory(control_plane_proxy)
+add_subdirectory(control_plane_storage)
+add_subdirectory(db_id_async_resolver_impl)
+add_subdirectory(db_schema)
+add_subdirectory(events)
+add_subdirectory(gateway)
+add_subdirectory(graph_params)
+add_subdirectory(health)
+add_subdirectory(hmac)
+add_subdirectory(init)
+add_subdirectory(logs)
+add_subdirectory(mock)
+add_subdirectory(pretty_printers)
+add_subdirectory(private_client)
+add_subdirectory(protos)
+add_subdirectory(quota_manager)
+add_subdirectory(rate_limiter)
+add_subdirectory(read_rule)
+add_subdirectory(result_formatter)
+add_subdirectory(shared_resources)
+add_subdirectory(signer)
+add_subdirectory(tasks_packer)
+add_subdirectory(test_connection)
+add_subdirectory(ydb)
diff --git a/ydb/core/yq/libs/actors/CMakeLists.txt b/ydb/core/yq/libs/actors/CMakeLists.txt
index 01c3558e76..2d01c86fdc 100644
--- a/ydb/core/yq/libs/actors/CMakeLists.txt
+++ b/ydb/core/yq/libs/actors/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(logging)
add_library(yq-libs-actors)
target_compile_options(yq-libs-actors PRIVATE
diff --git a/ydb/core/yq/libs/actors/pending_fetcher.cpp b/ydb/core/yq/libs/actors/pending_fetcher.cpp
index 387936ece0..9c56adf902 100644
--- a/ydb/core/yq/libs/actors/pending_fetcher.cpp
+++ b/ydb/core/yq/libs/actors/pending_fetcher.cpp
@@ -125,7 +125,7 @@ public:
ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory,
IHTTPGateway::TPtr s3Gateway,
::NPq::NConfigurationManager::IConnections::TPtr pqCmConnections,
- const NMonitoring::TDynamicCounterPtr& clientCounters,
+ const ::NMonitoring::TDynamicCounterPtr& clientCounters,
const TString& tenantName
)
: YqSharedResources(yqSharedResources)
@@ -372,13 +372,13 @@ private:
const ::NPq::NConfigurationManager::IConnections::TPtr PqCmConnections;
const TString Guid; //OwnerId
- const NMonitoring::TDynamicCounterPtr ClientCounters;
+ const ::NMonitoring::TDynamicCounterPtr ClientCounters;
TMaybe<NYql::NLog::TScopedBackend<NYql::NDq::TYqlLogScope>> LogScope;
struct TQueryCountersInfo {
- NMonitoring::TDynamicCounterPtr RootCountersParent;
- NMonitoring::TDynamicCounterPtr PublicCountersParent;
+ ::NMonitoring::TDynamicCounterPtr RootCountersParent;
+ ::NMonitoring::TDynamicCounterPtr PublicCountersParent;
TActorId RunActorId;
};
@@ -405,7 +405,7 @@ NActors::IActor* CreatePendingFetcher(
ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory,
IHTTPGateway::TPtr s3Gateway,
::NPq::NConfigurationManager::IConnections::TPtr pqCmConnections,
- const NMonitoring::TDynamicCounterPtr& clientCounters,
+ const ::NMonitoring::TDynamicCounterPtr& clientCounters,
const TString& tenantName)
{
return new TPendingFetcher(
diff --git a/ydb/core/yq/libs/actors/proxy.h b/ydb/core/yq/libs/actors/proxy.h
index 6c441ff229..9b5f7fd467 100644
--- a/ydb/core/yq/libs/actors/proxy.h
+++ b/ydb/core/yq/libs/actors/proxy.h
@@ -49,7 +49,7 @@ NActors::IActor* CreatePendingFetcher(
NYql::ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory,
NYql::IHTTPGateway::TPtr s3Gateway,
::NPq::NConfigurationManager::IConnections::TPtr pqCmConnections,
- const NMonitoring::TDynamicCounterPtr& clientCounters,
+ const ::NMonitoring::TDynamicCounterPtr& clientCounters,
const TString& tenantName
);
diff --git a/ydb/core/yq/libs/actors/proxy_private.cpp b/ydb/core/yq/libs/actors/proxy_private.cpp
index 3067b4fb52..98c3a772aa 100644
--- a/ydb/core/yq/libs/actors/proxy_private.cpp
+++ b/ydb/core/yq/libs/actors/proxy_private.cpp
@@ -34,7 +34,7 @@ public:
const NConfig::TPrivateProxyConfig& privateProxyConfig,
TIntrusivePtr<ITimeProvider> timeProvider,
TIntrusivePtr<IRandomProvider> randomProvider,
- NMonitoring::TDynamicCounterPtr counters,
+ ::NMonitoring::TDynamicCounterPtr counters,
const NConfig::TTokenAccessorConfig& tokenAccessorConfig)
: PrivateProxyConfig(privateProxyConfig)
, TokenAccessorConfig(tokenAccessorConfig)
@@ -157,7 +157,7 @@ private:
const NConfig::TTokenAccessorConfig TokenAccessorConfig;
TIntrusivePtr<ITimeProvider> TimeProvider;
TIntrusivePtr<IRandomProvider> RandomProvider;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
};
TActorId MakeYqPrivateProxyId() {
@@ -169,7 +169,7 @@ IActor* CreateYqlAnalyticsPrivateProxy(
const NConfig::TPrivateProxyConfig& privateProxyConfig,
TIntrusivePtr<ITimeProvider> timeProvider,
TIntrusivePtr<IRandomProvider> randomProvider,
- NMonitoring::TDynamicCounterPtr counters,
+ ::NMonitoring::TDynamicCounterPtr counters,
const NConfig::TTokenAccessorConfig& tokenAccessorConfig) {
return new TYqlAnalyticsPrivateProxy(privateProxyConfig, timeProvider, randomProvider, counters, tokenAccessorConfig);
}
diff --git a/ydb/core/yq/libs/actors/proxy_private.h b/ydb/core/yq/libs/actors/proxy_private.h
index 8b214c86cc..6620ba88e3 100644
--- a/ydb/core/yq/libs/actors/proxy_private.h
+++ b/ydb/core/yq/libs/actors/proxy_private.h
@@ -26,7 +26,7 @@ NActors::IActor* CreateYqlAnalyticsPrivateProxy(
const NConfig::TPrivateProxyConfig& privateProxyConfig,
TIntrusivePtr<ITimeProvider> timeProvider,
TIntrusivePtr<IRandomProvider> randomProvider,
- NMonitoring::TDynamicCounterPtr counters,
+ ::NMonitoring::TDynamicCounterPtr counters,
const NConfig::TTokenAccessorConfig& tockenAccessorConfig
);
@@ -34,7 +34,7 @@ NActors::IActor* CreatePingTaskRequestActor(
const NActors::TActorId& sender,
TIntrusivePtr<ITimeProvider> timeProvider,
TAutoPtr<TEvents::TEvPingTaskRequest> ev,
- NMonitoring::TDynamicCounterPtr counters
+ ::NMonitoring::TDynamicCounterPtr counters
);
NActors::IActor* CreateGetTaskRequestActor(
@@ -42,21 +42,21 @@ NActors::IActor* CreateGetTaskRequestActor(
const NConfig::TTokenAccessorConfig& tockenAccessorConfig,
TIntrusivePtr<ITimeProvider> timeProvider,
TAutoPtr<TEvents::TEvGetTaskRequest> ev,
- NMonitoring::TDynamicCounterPtr counters
+ ::NMonitoring::TDynamicCounterPtr counters
);
NActors::IActor* CreateWriteTaskResultRequestActor(
const NActors::TActorId& sender,
TIntrusivePtr<ITimeProvider> timeProvider,
TAutoPtr<TEvents::TEvWriteTaskResultRequest> ev,
- NMonitoring::TDynamicCounterPtr counters
+ ::NMonitoring::TDynamicCounterPtr counters
);
NActors::IActor* CreateNodesHealthCheckActor(
const NActors::TActorId& sender,
TIntrusivePtr<ITimeProvider> timeProvider,
TAutoPtr<TEvents::TEvNodesHealthCheckRequest> ev,
- NMonitoring::TDynamicCounterPtr counters
+ ::NMonitoring::TDynamicCounterPtr counters
);
} /* NYq */
diff --git a/ydb/core/yq/libs/actors/run_actor.cpp b/ydb/core/yq/libs/actors/run_actor.cpp
index 00f7acb578..1343273ce5 100644
--- a/ydb/core/yq/libs/actors/run_actor.cpp
+++ b/ydb/core/yq/libs/actors/run_actor.cpp
@@ -1631,7 +1631,7 @@ private:
NActors::TActorId CheckpointCoordinatorId;
TString SessionId;
::NYql::NCommon::TServiceCounters QueryCounters;
- const NMonitoring::TDynamicCounters::TCounterPtr QueryUptime;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr QueryUptime;
bool EnableCheckpointCoordinator = false;
Yq::Private::PingTaskRequest QueryStateUpdateRequest;
diff --git a/ydb/core/yq/libs/actors/run_actor_params.cpp b/ydb/core/yq/libs/actors/run_actor_params.cpp
index c00466ac4c..63c26bae03 100644
--- a/ydb/core/yq/libs/actors/run_actor_params.cpp
+++ b/ydb/core/yq/libs/actors/run_actor_params.cpp
@@ -45,7 +45,7 @@ TRunActorParams::TRunActorParams(
bool automatic,
const TString& queryName,
const TInstant& deadline,
- const NMonitoring::TDynamicCounterPtr& clientCounters,
+ const ::NMonitoring::TDynamicCounterPtr& clientCounters,
TInstant createdAt,
const TString& tenantName,
uint64_t resultBytesLimit
diff --git a/ydb/core/yq/libs/actors/run_actor_params.h b/ydb/core/yq/libs/actors/run_actor_params.h
index facba0a16c..84bc7d07da 100644
--- a/ydb/core/yq/libs/actors/run_actor_params.h
+++ b/ydb/core/yq/libs/actors/run_actor_params.h
@@ -60,7 +60,7 @@ struct TRunActorParams { // TODO2 : Change name
bool automatic,
const TString& queryName,
const TInstant& deadline,
- const NMonitoring::TDynamicCounterPtr& clientCounters,
+ const ::NMonitoring::TDynamicCounterPtr& clientCounters,
TInstant createdAt,
const TString& tenantName,
uint64_t resultBytesLimit
@@ -112,7 +112,7 @@ struct TRunActorParams { // TODO2 : Change name
TString QueryName;
TInstant Deadline;
- const NMonitoring::TDynamicCounterPtr ClientCounters;
+ const ::NMonitoring::TDynamicCounterPtr ClientCounters;
const TInstant CreatedAt;
const TString TenantName;
uint64_t ResultBytesLimit;
diff --git a/ydb/core/yq/libs/audit/CMakeLists.txt b/ydb/core/yq/libs/audit/CMakeLists.txt
index 954f119332..1454f0317c 100644
--- a/ydb/core/yq/libs/audit/CMakeLists.txt
+++ b/ydb/core/yq/libs/audit/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(events)
+add_subdirectory(mock)
add_library(yq-libs-audit)
target_link_libraries(yq-libs-audit PUBLIC
diff --git a/ydb/core/yq/libs/audit/mock/yq_mock_audit_service.cpp b/ydb/core/yq/libs/audit/mock/yq_mock_audit_service.cpp
index f918101453..55c4482522 100644
--- a/ydb/core/yq/libs/audit/mock/yq_mock_audit_service.cpp
+++ b/ydb/core/yq/libs/audit/mock/yq_mock_audit_service.cpp
@@ -67,7 +67,7 @@ private:
}
};
-NActors::IActor* CreateMockYqAuditServiceActor(const NConfig::TAuditConfig& config, const NMonitoring::TDynamicCounterPtr& counters) {
+NActors::IActor* CreateMockYqAuditServiceActor(const NConfig::TAuditConfig& config, const ::NMonitoring::TDynamicCounterPtr& counters) {
Y_UNUSED(config);
Y_UNUSED(counters);
return new TYqMockAuditServiceActor();
diff --git a/ydb/core/yq/libs/audit/mock/yq_mock_audit_service.h b/ydb/core/yq/libs/audit/mock/yq_mock_audit_service.h
index 2c4eadab2c..32013a725c 100644
--- a/ydb/core/yq/libs/audit/mock/yq_mock_audit_service.h
+++ b/ydb/core/yq/libs/audit/mock/yq_mock_audit_service.h
@@ -10,6 +10,6 @@
namespace NYq {
-NActors::IActor* CreateMockYqAuditServiceActor(const NConfig::TAuditConfig& config, const NMonitoring::TDynamicCounterPtr& counters);
+NActors::IActor* CreateMockYqAuditServiceActor(const NConfig::TAuditConfig& config, const ::NMonitoring::TDynamicCounterPtr& counters);
} // namespace NYq
diff --git a/ydb/core/yq/libs/checkpoint_storage/CMakeLists.txt b/ydb/core/yq/libs/checkpoint_storage/CMakeLists.txt
index 735c28fa79..e3ac388861 100644
--- a/ydb/core/yq/libs/checkpoint_storage/CMakeLists.txt
+++ b/ydb/core/yq/libs/checkpoint_storage/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(events)
+add_subdirectory(proto)
add_library(yq-libs-checkpoint_storage)
target_compile_options(yq-libs-checkpoint_storage PRIVATE
diff --git a/ydb/core/yq/libs/checkpointing/CMakeLists.txt b/ydb/core/yq/libs/checkpointing/CMakeLists.txt
index 79bb5aa532..1bb27f344c 100644
--- a/ydb/core/yq/libs/checkpointing/CMakeLists.txt
+++ b/ydb/core/yq/libs/checkpointing/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(events)
+add_subdirectory(ut)
add_library(yq-libs-checkpointing)
target_compile_options(yq-libs-checkpointing PRIVATE
diff --git a/ydb/core/yq/libs/checkpointing/checkpoint_coordinator.cpp b/ydb/core/yq/libs/checkpointing/checkpoint_coordinator.cpp
index 6b968d0b63..f1283ec947 100644
--- a/ydb/core/yq/libs/checkpointing/checkpoint_coordinator.cpp
+++ b/ydb/core/yq/libs/checkpointing/checkpoint_coordinator.cpp
@@ -32,7 +32,7 @@ TCheckpointCoordinator::TCheckpointCoordinator(TCoordinatorId coordinatorId,
const TActorId& storageProxy,
const TActorId& runActorId,
const TCheckpointCoordinatorConfig& settings,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
const NProto::TGraphParams& graphParams,
const YandexQuery::StateLoadMode& stateLoadMode,
const YandexQuery::StreamingDisposition& streamingDisposition)
@@ -589,7 +589,7 @@ void TCheckpointCoordinator::HandleException(const std::exception& err) {
Send(TaskControllerId, NYql::NDq::TEvDq::TEvAbortExecution::InternalError("Internal error in checkpoint coordinator", issues));
}
-THolder<NActors::IActor> MakeCheckpointCoordinator(TCoordinatorId coordinatorId, const TActorId& taskControllerId, const TActorId& storageProxy, const TActorId& runActorId, const TCheckpointCoordinatorConfig& settings, const NMonitoring::TDynamicCounterPtr& counters, const NProto::TGraphParams& graphParams, const YandexQuery::StateLoadMode& stateLoadMode, const YandexQuery::StreamingDisposition& streamingDisposition) {
+THolder<NActors::IActor> MakeCheckpointCoordinator(TCoordinatorId coordinatorId, const TActorId& taskControllerId, const TActorId& storageProxy, const TActorId& runActorId, const TCheckpointCoordinatorConfig& settings, const ::NMonitoring::TDynamicCounterPtr& counters, const NProto::TGraphParams& graphParams, const YandexQuery::StateLoadMode& stateLoadMode, const YandexQuery::StreamingDisposition& streamingDisposition) {
return MakeHolder<TCheckpointCoordinator>(coordinatorId, taskControllerId, storageProxy, runActorId, settings, counters, graphParams, stateLoadMode, streamingDisposition);
}
diff --git a/ydb/core/yq/libs/checkpointing/checkpoint_coordinator.h b/ydb/core/yq/libs/checkpointing/checkpoint_coordinator.h
index 512a8a5d61..38ab67f90e 100644
--- a/ydb/core/yq/libs/checkpointing/checkpoint_coordinator.h
+++ b/ydb/core/yq/libs/checkpointing/checkpoint_coordinator.h
@@ -28,7 +28,7 @@ public:
const TActorId& storageProxy,
const TActorId& runActorId,
const TCheckpointCoordinatorConfig& settings,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
const NProto::TGraphParams& graphParams,
const YandexQuery::StateLoadMode& stateLoadMode,
const YandexQuery::StreamingDisposition& streamingDisposition);
@@ -97,7 +97,7 @@ private:
}
struct TCheckpointCoordinatorMetrics {
- TCheckpointCoordinatorMetrics(const NMonitoring::TDynamicCounterPtr& counters) {
+ TCheckpointCoordinatorMetrics(const ::NMonitoring::TDynamicCounterPtr& counters) {
auto subgroup = counters->GetSubgroup("subsystem", "checkpoint_coordinator");
InProgress = subgroup->GetCounter("InProgress");
Pending = subgroup->GetCounter("Pending");
@@ -119,21 +119,21 @@ private:
RestoredStreamingOffsetsFromCheckpoint = subgroup->GetCounter("RestoredStreamingOffsetsFromCheckpoint", true);
}
- NMonitoring::TDynamicCounters::TCounterPtr InProgress;
- NMonitoring::TDynamicCounters::TCounterPtr Pending;
- NMonitoring::TDynamicCounters::TCounterPtr PendingCommit;
- NMonitoring::TDynamicCounters::TCounterPtr Completed;
- NMonitoring::TDynamicCounters::TCounterPtr Aborted;
- NMonitoring::TDynamicCounters::TCounterPtr StorageError;
- NMonitoring::TDynamicCounters::TCounterPtr FailedToCreate;
- NMonitoring::TDynamicCounters::TCounterPtr Total;
- NMonitoring::TDynamicCounters::TCounterPtr LastCheckpointBarrierDeliveryTimeMillis;
- NMonitoring::TDynamicCounters::TCounterPtr LastCheckpointDurationMillis;
- NMonitoring::TDynamicCounters::TCounterPtr LastCheckpointSizeBytes;
- NMonitoring::TDynamicCounters::TCounterPtr SkippedDueToInFlightLimit;
- NMonitoring::TDynamicCounters::TCounterPtr RestoredFromSavedCheckpoint;
- NMonitoring::TDynamicCounters::TCounterPtr StartedFromEmptyCheckpoint;
- NMonitoring::TDynamicCounters::TCounterPtr RestoredStreamingOffsetsFromCheckpoint;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InProgress;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Pending;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PendingCommit;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Completed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Aborted;
+ ::NMonitoring::TDynamicCounters::TCounterPtr StorageError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr FailedToCreate;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Total;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LastCheckpointBarrierDeliveryTimeMillis;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LastCheckpointDurationMillis;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LastCheckpointSizeBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SkippedDueToInFlightLimit;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestoredFromSavedCheckpoint;
+ ::NMonitoring::TDynamicCounters::TCounterPtr StartedFromEmptyCheckpoint;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RestoredStreamingOffsetsFromCheckpoint;
NMonitoring::THistogramPtr CheckpointBarrierDeliveryTimeMillis;
NMonitoring::THistogramPtr CheckpointDurationMillis;
NMonitoring::THistogramPtr CheckpointSizeBytes;
@@ -177,6 +177,6 @@ private:
YandexQuery::StreamingDisposition StreamingDisposition;
};
-THolder<NActors::IActor> MakeCheckpointCoordinator(TCoordinatorId coordinatorId, const TActorId& executerId, const TActorId& storageProxy, const TActorId& runActorId, const TCheckpointCoordinatorConfig& settings, const NMonitoring::TDynamicCounterPtr& counters, const NProto::TGraphParams& graphParams, const YandexQuery::StateLoadMode& stateLoadMode = YandexQuery::StateLoadMode::FROM_LAST_CHECKPOINT, const YandexQuery::StreamingDisposition& streamingDisposition = {});
+THolder<NActors::IActor> MakeCheckpointCoordinator(TCoordinatorId coordinatorId, const TActorId& executerId, const TActorId& storageProxy, const TActorId& runActorId, const TCheckpointCoordinatorConfig& settings, const ::NMonitoring::TDynamicCounterPtr& counters, const NProto::TGraphParams& graphParams, const YandexQuery::StateLoadMode& stateLoadMode = YandexQuery::StateLoadMode::FROM_LAST_CHECKPOINT, const YandexQuery::StreamingDisposition& streamingDisposition = {});
} // namespace NYq
diff --git a/ydb/core/yq/libs/checkpointing/ut/CMakeLists.txt b/ydb/core/yq/libs/checkpointing/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/yq/libs/checkpointing/ut/CMakeLists.txt
+++ b/ydb/core/yq/libs/checkpointing/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/yq/libs/checkpointing/ut/checkpoint_coordinator_ut.cpp b/ydb/core/yq/libs/checkpointing/ut/checkpoint_coordinator_ut.cpp
index ceb0a9faf5..30affc4052 100644
--- a/ydb/core/yq/libs/checkpointing/ut/checkpoint_coordinator_ut.cpp
+++ b/ydb/core/yq/libs/checkpointing/ut/checkpoint_coordinator_ut.cpp
@@ -62,7 +62,7 @@ struct TTestBootstrap : public TTestActorRuntime {
THashMap<TActorId, ui64> ActorToTask;
- NMonitoring::TDynamicCounterPtr Counters = new NMonitoring::TDynamicCounters();
+ ::NMonitoring::TDynamicCounterPtr Counters = new ::NMonitoring::TDynamicCounters();
explicit TTestBootstrap(ui64 graphFlags = 0)
: TTestActorRuntime(true)
diff --git a/ydb/core/yq/libs/common/CMakeLists.txt b/ydb/core/yq/libs/common/CMakeLists.txt
index 275e5dc237..891769c570 100644
--- a/ydb/core/yq/libs/common/CMakeLists.txt
+++ b/ydb/core/yq/libs/common/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yq-libs-common)
target_compile_options(yq-libs-common PRIVATE
diff --git a/ydb/core/yq/libs/common/ut/CMakeLists.txt b/ydb/core/yq/libs/common/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/yq/libs/common/ut/CMakeLists.txt
+++ b/ydb/core/yq/libs/common/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/yq/libs/config/CMakeLists.txt b/ydb/core/yq/libs/config/CMakeLists.txt
index 8f25ad09cd..e0664e782c 100644
--- a/ydb/core/yq/libs/config/CMakeLists.txt
+++ b/ydb/core/yq/libs/config/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
add_library(yq-libs-config)
target_link_libraries(yq-libs-config PUBLIC
diff --git a/ydb/core/yq/libs/control_plane_proxy/CMakeLists.txt b/ydb/core/yq/libs/control_plane_proxy/CMakeLists.txt
index 087609ae76..058247d5e1 100644
--- a/ydb/core/yq/libs/control_plane_proxy/CMakeLists.txt
+++ b/ydb/core/yq/libs/control_plane_proxy/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(events)
+add_subdirectory(ut)
add_library(yq-libs-control_plane_proxy)
target_compile_options(yq-libs-control_plane_proxy PRIVATE
diff --git a/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp b/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp
index 73ed47736b..d0c8190729 100644
--- a/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp
+++ b/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.cpp
@@ -52,18 +52,18 @@ LWTRACE_USING(YQ_CONTROL_PLANE_PROXY_PROVIDER);
struct TRequestCounters: public virtual TThrRefBase {
const TString Name;
- NMonitoring::TDynamicCounters::TCounterPtr InFly;
- NMonitoring::TDynamicCounters::TCounterPtr Ok;
- NMonitoring::TDynamicCounters::TCounterPtr Error;
- NMonitoring::TDynamicCounters::TCounterPtr Timeout;
- NMonitoring::THistogramPtr LatencyMs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InFly;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Ok;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Error;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Timeout;
+ ::NMonitoring::THistogramPtr LatencyMs;
explicit TRequestCounters(const TString& name)
: Name(name)
{ }
- void Register(const NMonitoring::TDynamicCounterPtr& counters) {
- NMonitoring::TDynamicCounterPtr subgroup = counters->GetSubgroup("request", Name);
+ void Register(const ::NMonitoring::TDynamicCounterPtr& counters) {
+ ::NMonitoring::TDynamicCounterPtr subgroup = counters->GetSubgroup("request", Name);
InFly = subgroup->GetCounter("InFly", false);
Ok = subgroup->GetCounter("Ok", true);
Error = subgroup->GetCounter("Error", true);
@@ -72,8 +72,8 @@ struct TRequestCounters: public virtual TThrRefBase {
}
private:
- static NMonitoring::IHistogramCollectorPtr GetLatencyHistogramBuckets() {
- return NMonitoring::ExplicitHistogram({0, 1, 2, 5, 10, 20, 50, 100, 500, 1000, 2000, 5000, 10000, 30000, 50000, 500000});
+ static ::NMonitoring::IHistogramCollectorPtr GetLatencyHistogramBuckets() {
+ return ::NMonitoring::ExplicitHistogram({0, 1, 2, 5, 10, 20, 50, 100, 500, 1000, 2000, 5000, 10000, 30000, 50000, 500000});
}
};
@@ -412,10 +412,10 @@ class TControlPlaneProxyActor : public NActors::TActorBootstrapped<TControlPlane
});
TMap<TMetricsScope, TScopeCountersPtr> ScopeCounters;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
public:
- explicit TCounters(const NMonitoring::TDynamicCounterPtr& counters)
+ explicit TCounters(const ::NMonitoring::TDynamicCounterPtr& counters)
: Counters(counters)
{
for (auto& request: CommonRequests) {
@@ -476,7 +476,7 @@ class TControlPlaneProxyActor : public NActors::TActorBootstrapped<TControlPlane
bool GetQuotas;
public:
- TControlPlaneProxyActor(const NConfig::TControlPlaneProxyConfig& config, const NMonitoring::TDynamicCounterPtr& counters, bool getQuotas)
+ TControlPlaneProxyActor(const NConfig::TControlPlaneProxyConfig& config, const ::NMonitoring::TDynamicCounterPtr& counters, bool getQuotas)
: Counters(counters)
, Config(config)
, GetQuotas(getQuotas)
@@ -492,7 +492,7 @@ public:
NActors::TMon* mon = AppData()->Mon;
if (mon) {
- NMonitoring::TIndexMonPage* actorsMonPage = mon->RegisterIndexPage("actors", "Actors");
+ ::NMonitoring::TIndexMonPage* actorsMonPage = mon->RegisterIndexPage("actors", "Actors");
mon->RegisterActorPage(actorsMonPage, "yq_control_plane_proxy", "YQ Control Plane Proxy", false,
TlsActivationContext->ExecutorThread.ActorSystem, SelfId());
}
@@ -1769,7 +1769,7 @@ TActorId ControlPlaneProxyActorId() {
return NActors::TActorId(0, name);
}
-IActor* CreateControlPlaneProxyActor(const NConfig::TControlPlaneProxyConfig& config, const NMonitoring::TDynamicCounterPtr& counters, bool getQuotas) {
+IActor* CreateControlPlaneProxyActor(const NConfig::TControlPlaneProxyConfig& config, const ::NMonitoring::TDynamicCounterPtr& counters, bool getQuotas) {
return new TControlPlaneProxyActor(config, counters, getQuotas);
}
diff --git a/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.h b/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.h
index dfd831adbb..c202303c2a 100644
--- a/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.h
+++ b/ydb/core/yq/libs/control_plane_proxy/control_plane_proxy.h
@@ -22,6 +22,6 @@ namespace NYq {
NActors::TActorId ControlPlaneProxyActorId();
-NActors::IActor* CreateControlPlaneProxyActor(const NConfig::TControlPlaneProxyConfig& config, const NMonitoring::TDynamicCounterPtr& counters, bool getQuotas);
+NActors::IActor* CreateControlPlaneProxyActor(const NConfig::TControlPlaneProxyConfig& config, const ::NMonitoring::TDynamicCounterPtr& counters, bool getQuotas);
} // namespace NYq
diff --git a/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.txt b/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.txt
+++ b/ydb/core/yq/libs/control_plane_proxy/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/yq/libs/control_plane_proxy/ut/control_plane_proxy_ut.cpp b/ydb/core/yq/libs/control_plane_proxy/ut/control_plane_proxy_ut.cpp
index 7db7b4e6bc..84fd77aefb 100644
--- a/ydb/core/yq/libs/control_plane_proxy/ut/control_plane_proxy_ut.cpp
+++ b/ydb/core/yq/libs/control_plane_proxy/ut/control_plane_proxy_ut.cpp
@@ -351,7 +351,7 @@ private:
TRuntimePtr runtime(new TTestBasicRuntime());
runtime->SetLogPriority(NKikimrServices::STREAMS_CONTROL_PLANE_SERVICE, NLog::PRI_DEBUG);
- auto controlPlaneProxy = CreateControlPlaneProxyActor(Config, MakeIntrusive<NMonitoring::TDynamicCounters>(), false);
+ auto controlPlaneProxy = CreateControlPlaneProxyActor(Config, MakeIntrusive<::NMonitoring::TDynamicCounters>(), false);
runtime->AddLocalService(
ControlPlaneProxyActorId(),
TActorSetupCmd(controlPlaneProxy, TMailboxType::Simple, 0));
diff --git a/ydb/core/yq/libs/control_plane_storage/CMakeLists.txt b/ydb/core/yq/libs/control_plane_storage/CMakeLists.txt
index ba0038e4a5..9be78f6bee 100644
--- a/ydb/core/yq/libs/control_plane_storage/CMakeLists.txt
+++ b/ydb/core/yq/libs/control_plane_storage/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(events)
+add_subdirectory(internal)
+add_subdirectory(proto)
add_library(yq-libs-control_plane_storage)
target_compile_options(yq-libs-control_plane_storage PRIVATE
diff --git a/ydb/core/yq/libs/control_plane_storage/control_plane_storage.h b/ydb/core/yq/libs/control_plane_storage/control_plane_storage.h
index d91a661c6a..78937f6fe1 100644
--- a/ydb/core/yq/libs/control_plane_storage/control_plane_storage.h
+++ b/ydb/core/yq/libs/control_plane_storage/control_plane_storage.h
@@ -41,7 +41,7 @@ NActors::IActor* CreateInMemoryControlPlaneStorageServiceActor(const NConfig::TC
NActors::IActor* CreateYdbControlPlaneStorageServiceActor(
const NConfig::TControlPlaneStorageConfig& config,
const NConfig::TCommonConfig& common,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
const NYq::TYqSharedResources::TPtr& yqSharedResources,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
const TString& tenantName);
diff --git a/ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.cpp b/ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.cpp
index 89e31f372e..a1d2aac544 100644
--- a/ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.cpp
+++ b/ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.cpp
@@ -5,7 +5,7 @@ namespace NYq {
TRequestCounters::TRequestCounters(const TString& name)
: Name(name) {}
-void TRequestCounters::Register(const NMonitoring::TDynamicCounterPtr& counters) {
+void TRequestCounters::Register(const ::NMonitoring::TDynamicCounterPtr& counters) {
auto requestCounters = counters->GetSubgroup("request", Name);
InFly = requestCounters->GetCounter("InFly", false);
Ok = requestCounters->GetCounter("Ok", true);
@@ -22,7 +22,7 @@ NMonitoring::IHistogramCollectorPtr TRequestCounters::GetLatencyHistogramBuckets
}
-TFinalStatusCounters::TFinalStatusCounters(const NMonitoring::TDynamicCounterPtr& counters) {
+TFinalStatusCounters::TFinalStatusCounters(const ::NMonitoring::TDynamicCounterPtr& counters) {
auto subgroup = counters->GetSubgroup("subcomponent", "FinalStatus");
Completed = subgroup->GetCounter("COMPLETED", true);
AbortedBySystem = subgroup->GetCounter("ABORTED_BY_SYSTEM", true);
diff --git a/ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.h b/ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.h
index f67d4b93f9..066dead268 100644
--- a/ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.h
+++ b/ydb/core/yq/libs/control_plane_storage/control_plane_storage_counters.h
@@ -9,32 +9,32 @@ class TRequestCounters: public virtual TThrRefBase {
public:
const TString Name;
- NMonitoring::TDynamicCounters::TCounterPtr InFly;
- NMonitoring::TDynamicCounters::TCounterPtr Ok;
- NMonitoring::TDynamicCounters::TCounterPtr Error;
- NMonitoring::TDynamicCounters::TCounterPtr Retry;
- NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
- NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InFly;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Ok;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Error;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Retry;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RequestBytes;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ResponseBytes;
NMonitoring::THistogramPtr LatencyMs;
- NMonitoring::TDynamicCounterPtr Issues;
+ ::NMonitoring::TDynamicCounterPtr Issues;
explicit TRequestCounters(const TString& name);
- void Register(const NMonitoring::TDynamicCounterPtr& counters);
+ void Register(const ::NMonitoring::TDynamicCounterPtr& counters);
private:
static NMonitoring::IHistogramCollectorPtr GetLatencyHistogramBuckets();
};
class TFinalStatusCounters: public virtual TThrRefBase {
- NMonitoring::TDynamicCounters::TCounterPtr Completed;
- NMonitoring::TDynamicCounters::TCounterPtr AbortedBySystem;
- NMonitoring::TDynamicCounters::TCounterPtr AbortedByUser;
- NMonitoring::TDynamicCounters::TCounterPtr Failed;
- NMonitoring::TDynamicCounters::TCounterPtr Paused;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Completed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AbortedBySystem;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AbortedByUser;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Failed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Paused;
public:
- TFinalStatusCounters(const NMonitoring::TDynamicCounterPtr& counters);
+ TFinalStatusCounters(const ::NMonitoring::TDynamicCounterPtr& counters);
void IncByStatus(YandexQuery::QueryMeta::ComputeStatus finalStatus);
};
diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp
index 72189f65f3..4c8dc0339d 100644
--- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp
+++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp
@@ -584,7 +584,7 @@ TAsyncStatus TYdbControlPlaneStorageActor::ReadModifyWrite(
NActors::IActor* CreateYdbControlPlaneStorageServiceActor(
const NConfig::TControlPlaneStorageConfig& config,
const NConfig::TCommonConfig& common,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
const ::NYq::TYqSharedResources::TPtr& yqSharedResources,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
const TString& tenantName) {
diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h
index e7ed209cba..d040b7439c 100644
--- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h
+++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h
@@ -219,10 +219,10 @@ class TYdbControlPlaneStorageActor : public NActors::TActorBootstrapped<TYdbCont
TMap<TMetricsScope, TScopeCountersPtr> ScopeCounters;
TMap<TMetricsScope, TFinalStatusCountersPtr> FinalStatusCounters;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
public:
- explicit TCounters(const NMonitoring::TDynamicCounterPtr& counters)
+ explicit TCounters(const ::NMonitoring::TDynamicCounterPtr& counters)
: Counters(counters)
{
for (auto& request: CommonRequests) {
@@ -317,7 +317,7 @@ public:
TYdbControlPlaneStorageActor(
const NConfig::TControlPlaneStorageConfig& config,
const NConfig::TCommonConfig& common,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
const ::NYq::TYqSharedResources::TPtr& yqSharedResources,
const NKikimr::TYdbCredentialsProviderFactory& credProviderFactory,
const TString& tenantName)
diff --git a/ydb/core/yq/libs/events/event_subspace.h b/ydb/core/yq/libs/events/event_subspace.h
index 46aef90629..e283d64253 100644
--- a/ydb/core/yq/libs/events/event_subspace.h
+++ b/ydb/core/yq/libs/events/event_subspace.h
@@ -28,6 +28,7 @@ struct TYqEventSubspace {
TestConnection,
InternalService,
QuotaService,
+ RateLimiter,
SubspacesEnd,
};
diff --git a/ydb/core/yq/libs/graph_params/CMakeLists.txt b/ydb/core/yq/libs/graph_params/CMakeLists.txt
new file mode 100644
index 0000000000..0111ac5e16
--- /dev/null
+++ b/ydb/core/yq/libs/graph_params/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(proto)
diff --git a/ydb/core/yq/libs/health/health.cpp b/ydb/core/yq/libs/health/health.cpp
index 12c84fb398..aa8b2dca60 100644
--- a/ydb/core/yq/libs/health/health.cpp
+++ b/ydb/core/yq/libs/health/health.cpp
@@ -20,7 +20,7 @@ class THealthActor : public NActors::TActorBootstrapped<THealthActor> {
NYq::TYqSharedResources::TPtr YqSharedResources;
public:
- THealthActor(const NConfig::THealthConfig& config, const NYq::TYqSharedResources::TPtr& yqSharedResources, const NMonitoring::TDynamicCounterPtr& )
+ THealthActor(const NConfig::THealthConfig& config, const NYq::TYqSharedResources::TPtr& yqSharedResources, const ::NMonitoring::TDynamicCounterPtr& )
: Config(config)
, Client(yqSharedResources->CoreYdbDriver,
NYdb::TCommonClientSettings()
@@ -82,7 +82,7 @@ TActorId HealthActorId() {
return NActors::TActorId(0, name);
}
-IActor* CreateHealthActor(const NConfig::THealthConfig& config, const NYq::TYqSharedResources::TPtr& yqSharedResources, const NMonitoring::TDynamicCounterPtr& counters) {
+IActor* CreateHealthActor(const NConfig::THealthConfig& config, const NYq::TYqSharedResources::TPtr& yqSharedResources, const ::NMonitoring::TDynamicCounterPtr& counters) {
return new THealthActor(config, yqSharedResources, counters);
}
diff --git a/ydb/core/yq/libs/health/health.h b/ydb/core/yq/libs/health/health.h
index c985efbee2..d0053fd1f5 100644
--- a/ydb/core/yq/libs/health/health.h
+++ b/ydb/core/yq/libs/health/health.h
@@ -26,6 +26,6 @@ NActors::TActorId HealthActorId();
NActors::IActor* CreateHealthActor(
const NConfig::THealthConfig& config,
const NYq::TYqSharedResources::TPtr& yqSharedResources,
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
} // namespace NYq
diff --git a/ydb/core/yq/libs/hmac/CMakeLists.txt b/ydb/core/yq/libs/hmac/CMakeLists.txt
index 710f0125f7..341411884a 100644
--- a/ydb/core/yq/libs/hmac/CMakeLists.txt
+++ b/ydb/core/yq/libs/hmac/CMakeLists.txt
@@ -7,6 +7,7 @@
find_package(OpenSSL REQUIRED)
+add_subdirectory(ut)
add_library(yq-libs-hmac)
target_link_libraries(yq-libs-hmac PUBLIC
diff --git a/ydb/core/yq/libs/hmac/ut/CMakeLists.txt b/ydb/core/yq/libs/hmac/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/yq/libs/hmac/ut/CMakeLists.txt
+++ b/ydb/core/yq/libs/hmac/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/yq/libs/init/init.cpp b/ydb/core/yq/libs/init/init.cpp
index 0f1431b575..58827f0e6c 100644
--- a/ydb/core/yq/libs/init/init.cpp
+++ b/ydb/core/yq/libs/init/init.cpp
@@ -56,7 +56,7 @@ void Init(
::NPq::NConfigurationManager::IConnections::TPtr pqCmConnections,
const IYqSharedResources::TPtr& iyqSharedResources,
const std::function<IActor*(const NKikimrProto::NFolderService::TFolderServiceConfig& authConfig)>& folderServiceFactory,
- const std::function<IActor*(const NYq::NConfig::TAuditConfig& auditConfig, const NMonitoring::TDynamicCounterPtr& counters)>& auditServiceFactory,
+ const std::function<IActor*(const NYq::NConfig::TAuditConfig& auditConfig, const ::NMonitoring::TDynamicCounterPtr& counters)>& auditServiceFactory,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
ui32 icPort,
const std::vector<NKikimr::NMiniKQL::TComputationNodeFactory>& additionalCompNodeFactories
@@ -291,7 +291,7 @@ void Init(
IYqSharedResources::TPtr CreateYqSharedResources(
const NYq::NConfig::TConfig& config,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
{
return CreateYqSharedResourcesImpl(config, credentialsProviderFactory, counters);
}
diff --git a/ydb/core/yq/libs/init/init.h b/ydb/core/yq/libs/init/init.h
index 9d4059d211..8d20dd3c5a 100644
--- a/ydb/core/yq/libs/init/init.h
+++ b/ydb/core/yq/libs/init/init.h
@@ -24,7 +24,7 @@ using TActorRegistrator = std::function<void(NActors::TActorId, NActors::IActor*
IYqSharedResources::TPtr CreateYqSharedResources(
const NYq::NConfig::TConfig& config,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
void Init(
const NYq::NConfig::TConfig& config,
@@ -35,7 +35,7 @@ void Init(
::NPq::NConfigurationManager::IConnections::TPtr pqCmConnections,
const IYqSharedResources::TPtr& yqSharedResources,
const std::function<IActor*(const NKikimrProto::NFolderService::TFolderServiceConfig& authConfig)>& folderServiceFactory,
- const std::function<IActor*(const NYq::NConfig::TAuditConfig& auditConfig, const NMonitoring::TDynamicCounterPtr& counters)>& auditServiceFactory,
+ const std::function<IActor*(const NYq::NConfig::TAuditConfig& auditConfig, const ::NMonitoring::TDynamicCounterPtr& counters)>& auditServiceFactory,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
ui32 icPort,
const std::vector<NKikimr::NMiniKQL::TComputationNodeFactory>& additionalCompNodeFactories
diff --git a/ydb/core/yq/libs/private_client/internal_service.cpp b/ydb/core/yq/libs/private_client/internal_service.cpp
index e80c40fe90..ba013d5d86 100644
--- a/ydb/core/yq/libs/private_client/internal_service.cpp
+++ b/ydb/core/yq/libs/private_client/internal_service.cpp
@@ -29,7 +29,7 @@ public:
const NYq::TYqSharedResources::TPtr& yqSharedResources,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
const ::NYq::NConfig::TPrivateApiConfig& privateApiConfig,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: ServiceCounters(counters->GetSubgroup("subsystem", "InternalService"))
, EventLatency(ServiceCounters->GetSubgroup("subcomponent", "Latency")->GetHistogram("Latency", NMonitoring::ExponentialHistogram(10, 2, 50)))
, PrivateClient(
@@ -110,7 +110,7 @@ private:
});
}
- const NMonitoring::TDynamicCounterPtr ServiceCounters;
+ const ::NMonitoring::TDynamicCounterPtr ServiceCounters;
const NMonitoring::THistogramPtr EventLatency;
TPrivateClient PrivateClient;
};
@@ -119,7 +119,7 @@ NActors::IActor* CreateInternalServiceActor(
const NYq::TYqSharedResources::TPtr& yqSharedResources,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
const NYq::NConfig::TPrivateApiConfig& privateApiConfig,
- const NMonitoring::TDynamicCounterPtr& counters) {
+ const ::NMonitoring::TDynamicCounterPtr& counters) {
return new TInternalService(yqSharedResources, credentialsProviderFactory, privateApiConfig, counters);
}
diff --git a/ydb/core/yq/libs/private_client/internal_service.h b/ydb/core/yq/libs/private_client/internal_service.h
index fc65c22abe..145838e95c 100644
--- a/ydb/core/yq/libs/private_client/internal_service.h
+++ b/ydb/core/yq/libs/private_client/internal_service.h
@@ -20,6 +20,6 @@ NActors::IActor* CreateInternalServiceActor(
const NYq::TYqSharedResources::TPtr& yqSharedResources,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
const NYq::NConfig::TPrivateApiConfig& privateApiConfig,
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
} /* NYq */
diff --git a/ydb/core/yq/libs/private_client/loopback_service.cpp b/ydb/core/yq/libs/private_client/loopback_service.cpp
index e99ddd65f4..8a87d2cc40 100644
--- a/ydb/core/yq/libs/private_client/loopback_service.cpp
+++ b/ydb/core/yq/libs/private_client/loopback_service.cpp
@@ -23,7 +23,7 @@ namespace NYq {
class TLoopbackService : public NActors::TActorBootstrapped<TLoopbackService> {
public:
TLoopbackService(
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: ServiceCounters(counters->GetSubgroup("subsystem", "LoopbackService"))
{
}
@@ -133,14 +133,14 @@ private:
}
}
- const NMonitoring::TDynamicCounterPtr ServiceCounters;
+ const ::NMonitoring::TDynamicCounterPtr ServiceCounters;
ui64 Cookie = 0;
THashMap<ui64, NActors::TActorId> Senders;
THashMap<ui64, ui64> OriginalCookies;
};
NActors::IActor* CreateLoopbackServiceActor(
- const NMonitoring::TDynamicCounterPtr& counters) {
+ const ::NMonitoring::TDynamicCounterPtr& counters) {
return new TLoopbackService(counters);
}
diff --git a/ydb/core/yq/libs/private_client/loopback_service.h b/ydb/core/yq/libs/private_client/loopback_service.h
index 7bf15de799..8a3819df7a 100644
--- a/ydb/core/yq/libs/private_client/loopback_service.h
+++ b/ydb/core/yq/libs/private_client/loopback_service.h
@@ -7,6 +7,6 @@
namespace NYq {
NActors::IActor* CreateLoopbackServiceActor(
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
} /* NYq */
diff --git a/ydb/core/yq/libs/private_client/private_client.cpp b/ydb/core/yq/libs/private_client/private_client.cpp
index bccb8ddd1d..d9fb1562ee 100644
--- a/ydb/core/yq/libs/private_client/private_client.cpp
+++ b/ydb/core/yq/libs/private_client/private_client.cpp
@@ -12,7 +12,7 @@ public:
TImpl(
std::shared_ptr<TGRpcConnectionsImpl>&& connections,
const TCommonClientSettings& settings,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: TClientImplCommon(std::move(connections), settings)
, Counters(counters->GetSubgroup("subsystem", "private_api")->GetSubgroup("subcomponent", "ClientMetrics"))
, PingTaskTime(Counters->GetHistogram("PingTaskMs", NMonitoring::ExponentialHistogram(10, 2, 50)))
@@ -141,7 +141,7 @@ public:
return future;
}
private:
- const NMonitoring::TDynamicCounterPtr Counters;
+ const ::NMonitoring::TDynamicCounterPtr Counters;
const NMonitoring::THistogramPtr PingTaskTime;
const NMonitoring::THistogramPtr GetTaskTime;
const NMonitoring::THistogramPtr WriteTaskResultTime;
@@ -151,7 +151,7 @@ private:
TPrivateClient::TPrivateClient(
const TDriver& driver,
const TCommonClientSettings& settings,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: Impl(new TImpl(CreateInternalInterface(driver), settings, counters))
{}
diff --git a/ydb/core/yq/libs/private_client/private_client.h b/ydb/core/yq/libs/private_client/private_client.h
index e63b67eddb..b932e8410a 100644
--- a/ydb/core/yq/libs/private_client/private_client.h
+++ b/ydb/core/yq/libs/private_client/private_client.h
@@ -56,7 +56,7 @@ public:
TPrivateClient(
const NYdb::TDriver& driver,
const NYdb::TCommonClientSettings& settings = NYdb::TCommonClientSettings(),
- const NMonitoring::TDynamicCounterPtr& counters = MakeIntrusive<NMonitoring::TDynamicCounters>());
+ const ::NMonitoring::TDynamicCounterPtr& counters = MakeIntrusive<::NMonitoring::TDynamicCounters>());
TAsyncGetTaskResult GetTask(
Yq::Private::GetTaskRequest&& request,
diff --git a/ydb/core/yq/libs/protos/yq_private.proto b/ydb/core/yq/libs/protos/yq_private.proto
index a67c0db9ab..92ef72ce93 100644
--- a/ydb/core/yq/libs/protos/yq_private.proto
+++ b/ydb/core/yq/libs/protos/yq_private.proto
@@ -77,6 +77,9 @@ message GetTaskResult {
google.protobuf.Timestamp deadline = 24;
YandexQuery.StreamingDisposition disposition = 25;
uint64 result_limit = 26;
+
+ YandexQuery.Limits limits = 27;
+ string rate_limiter = 28; // Kesus path // If empty, rate limiting is off.
}
repeated Task tasks = 1;
}
@@ -85,6 +88,12 @@ message GetTaskResponse {
Ydb.Operations.Operation operation = 1; // GetTaskResult
}
+message RateLimiterResources {
+ string rate_limiter = 1; // Kesus path
+ string resource_path = 2;
+ bool delete_resource = 3; // Delete resource when query is finished. Otherwise create
+}
+
message PingTaskRequest {
string owner_id = 1;
SignedIdentity query_id = 2;
@@ -107,6 +116,7 @@ message PingTaskRequest {
YandexQuery.StateLoadMode state_load_mode = 18;
YandexQuery.StreamingDisposition disposition = 19;
Ydb.Operations.OperationParams operation_params = 15;
+ RateLimiterResources rate_limiter_resources = 22;
string scope = 100;
string tenant = 104;
google.protobuf.Timestamp started_at = 101;
diff --git a/ydb/core/yq/libs/quota_manager/CMakeLists.txt b/ydb/core/yq/libs/quota_manager/CMakeLists.txt
index 0186382aae..b4eb09f501 100644
--- a/ydb/core/yq/libs/quota_manager/CMakeLists.txt
+++ b/ydb/core/yq/libs/quota_manager/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(events)
add_library(yq-libs-quota_manager)
target_compile_options(yq-libs-quota_manager PRIVATE
diff --git a/ydb/core/yq/libs/quota_manager/quota_manager.cpp b/ydb/core/yq/libs/quota_manager/quota_manager.cpp
index 2e3617f8ea..64f190ee86 100644
--- a/ydb/core/yq/libs/quota_manager/quota_manager.cpp
+++ b/ydb/core/yq/libs/quota_manager/quota_manager.cpp
@@ -48,7 +48,7 @@ public:
TQuotaManagementService(
const NConfig::TQuotasManagerConfig& config,
/* const NYq::TYqSharedResources::TPtr& yqSharedResources, */
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
std::vector<TQuotaDescription> quotaDescriptions)
: Config(config)
, ServiceCounters(counters->GetSubgroup("subsystem", "QuotaService"))
@@ -186,7 +186,7 @@ private:
}
NConfig::TQuotasManagerConfig Config;
- const NMonitoring::TDynamicCounterPtr ServiceCounters;
+ const ::NMonitoring::TDynamicCounterPtr ServiceCounters;
THashMap<TString /* SubjectType */, THashMap<TString /* MetricName */, TQuotaInfo>> QuotaInfoMap;
THashMap<TString /* SubjectType */, THashMap<TString /* SubjectId */, TQuotaCache>> QuotaCacheMap;
TDuration UsageRefreshPeriod;
@@ -195,7 +195,7 @@ private:
NActors::IActor* CreateQuotaServiceActor(
const NConfig::TQuotasManagerConfig& config,
/* const NYq::TYqSharedResources::TPtr& yqSharedResources, */
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
std::vector<TQuotaDescription> quotaDesc) {
return new TQuotaManagementService(config, /* yqSharedResources, */ counters, quotaDesc);
}
diff --git a/ydb/core/yq/libs/quota_manager/quota_manager.h b/ydb/core/yq/libs/quota_manager/quota_manager.h
index b28594fe69..6dd0ac56dd 100644
--- a/ydb/core/yq/libs/quota_manager/quota_manager.h
+++ b/ydb/core/yq/libs/quota_manager/quota_manager.h
@@ -38,7 +38,7 @@ NActors::TActorId MakeQuotaServiceActorId();
NActors::IActor* CreateQuotaServiceActor(
const NConfig::TQuotasManagerConfig& config,
/* const NYq::TYqSharedResources::TPtr& yqSharedResources, */
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
std::vector<TQuotaDescription> quotaDesc);
} /* NYq */
diff --git a/ydb/core/yq/libs/rate_limiter/CMakeLists.txt b/ydb/core/yq/libs/rate_limiter/CMakeLists.txt
new file mode 100644
index 0000000000..266d4ea2a6
--- /dev/null
+++ b/ydb/core/yq/libs/rate_limiter/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(control_plane_service)
+add_subdirectory(events)
diff --git a/ydb/core/yq/libs/rate_limiter/events/CMakeLists.txt b/ydb/core/yq/libs/rate_limiter/events/CMakeLists.txt
new file mode 100644
index 0000000000..010549509f
--- /dev/null
+++ b/ydb/core/yq/libs/rate_limiter/events/CMakeLists.txt
@@ -0,0 +1,19 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(libs-rate_limiter-events)
+target_link_libraries(libs-rate_limiter-events PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ cpp-actors-core
+ yq-libs-events
+)
+target_sources(libs-rate_limiter-events PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/core/yq/libs/rate_limiter/events/events.cpp
+)
diff --git a/ydb/core/yq/libs/rate_limiter/events/events.cpp b/ydb/core/yq/libs/rate_limiter/events/events.cpp
new file mode 100644
index 0000000000..6c3d2603e7
--- /dev/null
+++ b/ydb/core/yq/libs/rate_limiter/events/events.cpp
@@ -0,0 +1 @@
+#include "events.h"
diff --git a/ydb/core/yq/libs/rate_limiter/events/events.h b/ydb/core/yq/libs/rate_limiter/events/events.h
new file mode 100644
index 0000000000..7d2c360f59
--- /dev/null
+++ b/ydb/core/yq/libs/rate_limiter/events/events.h
@@ -0,0 +1,64 @@
+#pragma once
+#include <ydb/core/yq/libs/events/event_subspace.h>
+#include <ydb/library/yql/public/issue/yql_issue.h>
+
+#include <library/cpp/actors/core/event_local.h>
+#include <library/cpp/actors/core/events.h>
+
+namespace NYq {
+
+struct TEvRateLimiter {
+ // Event ids.
+ enum EEv : ui32 {
+ EvGetRateLimiterPath = YqEventSubspaceBegin(NYq::TYqEventSubspace::RateLimiter),
+ EvRateLimiterPath,
+ EvCreateResource,
+ EvCreateResourceResponse,
+ EvEnd,
+ };
+
+ static_assert(EvEnd <= YqEventSubspaceEnd(NYq::TYqEventSubspace::RateLimiter), "All events must be in their subspace");
+
+private:
+ struct TEvGetRateLimiterPath : NActors::TEventLocal<TEvGetRateLimiterPath, EEv::EvGetRateLimiterPath> {
+ explicit TEvGetRateLimiterPath(const TString& cloudId)
+ : CloudId(cloudId)
+ {
+ }
+
+ const TString CloudId;
+ };
+
+ struct TEvRateLimiterPath : NActors::TEventLocal<TEvRateLimiterPath, EEv::EvRateLimiterPath> {
+ explicit TEvRateLimiterPath(const TString& path)
+ : Path(path)
+ {
+ }
+
+ const TString Path;
+ };
+
+ struct TEvCreateResource : NActors::TEventLocal<TEvCreateResource, EEv::EvCreateResource> {
+ explicit TEvCreateResource(const TString& rateLimiterPath, const TString& resourcePath)
+ : RateLimiterPath(rateLimiterPath)
+ , ResourcePath(resourcePath)
+ {
+ }
+
+ const TString RateLimiterPath;
+ const TString ResourcePath;
+ };
+
+ struct TEvCreateResourceResponse : NActors::TEventLocal<TEvCreateResourceResponse, EEv::EvCreateResourceResponse> {
+ explicit TEvCreateResourceResponse(bool success, const NYql::TIssues& issues = {})
+ : Success(success)
+ , Issues(issues)
+ {
+ }
+
+ const bool Success;
+ const NYql::TIssues Issues;
+ };
+};
+
+} // namespace NYq
diff --git a/ydb/core/yq/libs/result_formatter/CMakeLists.txt b/ydb/core/yq/libs/result_formatter/CMakeLists.txt
index a8cf36d10f..c0814c9512 100644
--- a/ydb/core/yq/libs/result_formatter/CMakeLists.txt
+++ b/ydb/core/yq/libs/result_formatter/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yq-libs-result_formatter)
target_compile_options(yq-libs-result_formatter PRIVATE
diff --git a/ydb/core/yq/libs/result_formatter/ut/CMakeLists.txt b/ydb/core/yq/libs/result_formatter/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/yq/libs/result_formatter/ut/CMakeLists.txt
+++ b/ydb/core/yq/libs/result_formatter/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/yq/libs/shared_resources/CMakeLists.txt b/ydb/core/yq/libs/shared_resources/CMakeLists.txt
index 2aade5a890..d53abfbfe8 100644
--- a/ydb/core/yq/libs/shared_resources/CMakeLists.txt
+++ b/ydb/core/yq/libs/shared_resources/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(interface)
add_library(yq-libs-shared_resources)
target_compile_options(yq-libs-shared_resources PRIVATE
diff --git a/ydb/core/yq/libs/shared_resources/db_pool.cpp b/ydb/core/yq/libs/shared_resources/db_pool.cpp
index 1e2abadd6d..5b1fff9913 100644
--- a/ydb/core/yq/libs/shared_resources/db_pool.cpp
+++ b/ydb/core/yq/libs/shared_resources/db_pool.cpp
@@ -30,7 +30,7 @@ class TDbPoolActor : public NActors::TActor<TDbPoolActor> {
public:
TDbPoolActor(
const NYdb::NTable::TTableClient& tableClient,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: TActor(&TThis::WorkingState)
, TableClient(tableClient)
, QueueSize(counters->GetSubgroup("subcomponent", "DbPool")->GetHistogram("InFlight", NMonitoring::ExponentialHistogram(10, 2, 10)))
@@ -193,14 +193,14 @@ private:
TInstant RequestInProgressTimestamp = TInstant::Now();
std::shared_ptr<int> State = std::make_shared<int>();
const NMonitoring::THistogramPtr QueueSize;
- const NMonitoring::TDynamicCounters::TCounterPtr TotalInFlight;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr TotalInFlight;
const NMonitoring::THistogramPtr RequestsTime;
};
TDbPool::TDbPool(
ui32 sessionsCount,
const NYdb::NTable::TTableClient& tableClient,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
const TString& tablePathPrefix)
{
TablePathPrefix = tablePathPrefix;
@@ -246,7 +246,7 @@ TDbPoolMap::TDbPoolMap(
const NYq::NConfig::TDbPoolConfig& config,
NYdb::TDriver driver,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: Config(config)
, Driver(driver)
, CredentialsProviderFactory(credentialsProviderFactory)
@@ -259,7 +259,7 @@ TDbPoolHolder::TDbPoolHolder(
const NYq::NConfig::TDbPoolConfig& config,
const NYdb::TDriver& driver,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: Driver(driver)
, Pools(new TDbPoolMap(config, Driver, credentialsProviderFactory, counters))
{ }
diff --git a/ydb/core/yq/libs/shared_resources/db_pool.h b/ydb/core/yq/libs/shared_resources/db_pool.h
index 0c7c1242c8..e7e28b81a2 100644
--- a/ydb/core/yq/libs/shared_resources/db_pool.h
+++ b/ydb/core/yq/libs/shared_resources/db_pool.h
@@ -26,12 +26,12 @@ public:
private:
friend class TDbPoolMap;
- TDbPool(ui32 sessionsCount, const NYdb::NTable::TTableClient& tableClient, const NMonitoring::TDynamicCounterPtr& counters, const TString& tablePathPrefix);
+ TDbPool(ui32 sessionsCount, const NYdb::NTable::TTableClient& tableClient, const ::NMonitoring::TDynamicCounterPtr& counters, const TString& tablePathPrefix);
TMutex Mutex;
TVector<NActors::TActorId> Actors;
ui32 Index = 0;
- const NMonitoring::TDynamicCounterPtr Counters;
+ const ::NMonitoring::TDynamicCounterPtr Counters;
};
enum class EDbPoolId {
@@ -51,7 +51,7 @@ private:
TDbPoolMap(const NYq::NConfig::TDbPoolConfig& config,
NYdb::TDriver driver,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
void Reset(const NYq::NConfig::TDbPoolConfig& config);
TMutex Mutex;
@@ -60,7 +60,7 @@ private:
THashMap<EDbPoolId, TDbPool::TPtr> Pools;
THolder<NYdb::NTable::TTableClient> TableClient;
NKikimr::TYdbCredentialsProviderFactory CredentialsProviderFactory;
- const NMonitoring::TDynamicCounterPtr Counters;
+ const ::NMonitoring::TDynamicCounterPtr Counters;
};
class TDbPoolHolder: public TThrRefBase {
@@ -70,7 +70,7 @@ public:
const NYq::NConfig::TDbPoolConfig& config,
const NYdb::TDriver& driver,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
~TDbPoolHolder();
diff --git a/ydb/core/yq/libs/shared_resources/shared_resources.cpp b/ydb/core/yq/libs/shared_resources/shared_resources.cpp
index c1a44f8cf9..fe96bb3aba 100644
--- a/ydb/core/yq/libs/shared_resources/shared_resources.cpp
+++ b/ydb/core/yq/libs/shared_resources/shared_resources.cpp
@@ -29,7 +29,7 @@ struct TYqSharedResourcesImpl : public TActorSystemPtrMixin, public TYqSharedRes
explicit TYqSharedResourcesImpl(
const NYq::NConfig::TConfig& config,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: TYqSharedResources(NYdb::TDriver(GetYdbDriverConfig(config.GetCommon().GetYdbDriverConfig())))
{
CreateDbPoolHolder(config.GetDbPool(), credentialsProviderFactory, counters);
@@ -64,7 +64,7 @@ struct TYqSharedResourcesImpl : public TActorSystemPtrMixin, public TYqSharedRes
void CreateDbPoolHolder(
const NYq::NConfig::TDbPoolConfig& config,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters) {
+ const ::NMonitoring::TDynamicCounterPtr& counters) {
DbPoolHolder = MakeIntrusive<NYq::TDbPoolHolder>(config, CoreYdbDriver, credentialsProviderFactory, counters);
}
};
@@ -74,7 +74,7 @@ struct TYqSharedResourcesImpl : public TActorSystemPtrMixin, public TYqSharedRes
TYqSharedResources::TPtr CreateYqSharedResourcesImpl(
const NYq::NConfig::TConfig& config,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters) {
+ const ::NMonitoring::TDynamicCounterPtr& counters) {
return MakeIntrusive<TYqSharedResourcesImpl>(config, credentialsProviderFactory, counters);
}
diff --git a/ydb/core/yq/libs/shared_resources/shared_resources.h b/ydb/core/yq/libs/shared_resources/shared_resources.h
index bd8e5e3950..738396f5e3 100644
--- a/ydb/core/yq/libs/shared_resources/shared_resources.h
+++ b/ydb/core/yq/libs/shared_resources/shared_resources.h
@@ -30,6 +30,6 @@ protected:
TYqSharedResources::TPtr CreateYqSharedResourcesImpl(
const NYq::NConfig::TConfig& config,
const NKikimr::TYdbCredentialsProviderFactory& credentialsProviderFactory,
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
} // namespace NYq
diff --git a/ydb/core/yq/libs/signer/CMakeLists.txt b/ydb/core/yq/libs/signer/CMakeLists.txt
index 7be83dee2a..e3cbf7b435 100644
--- a/ydb/core/yq/libs/signer/CMakeLists.txt
+++ b/ydb/core/yq/libs/signer/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yq-libs-signer)
target_link_libraries(yq-libs-signer PUBLIC
diff --git a/ydb/core/yq/libs/signer/ut/CMakeLists.txt b/ydb/core/yq/libs/signer/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/yq/libs/signer/ut/CMakeLists.txt
+++ b/ydb/core/yq/libs/signer/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/core/yq/libs/test_connection/CMakeLists.txt b/ydb/core/yq/libs/test_connection/CMakeLists.txt
index a31f965504..d3ca813cd3 100644
--- a/ydb/core/yq/libs/test_connection/CMakeLists.txt
+++ b/ydb/core/yq/libs/test_connection/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(events)
+add_subdirectory(ut)
add_library(yq-libs-test_connection)
target_compile_options(yq-libs-test_connection PRIVATE
diff --git a/ydb/core/yq/libs/test_connection/counters.cpp b/ydb/core/yq/libs/test_connection/counters.cpp
index 92bd0d77bd..440627c66f 100644
--- a/ydb/core/yq/libs/test_connection/counters.cpp
+++ b/ydb/core/yq/libs/test_connection/counters.cpp
@@ -6,7 +6,7 @@ TTestConnectionRequestCounters::TTestConnectionRequestCounters(const TString& na
: Name(name)
{}
-void TTestConnectionRequestCounters::Register(const NMonitoring::TDynamicCounterPtr& counters) {
+void TTestConnectionRequestCounters::Register(const ::NMonitoring::TDynamicCounterPtr& counters) {
auto requestCounters = counters->GetSubgroup("request", Name);
InFly = requestCounters->GetCounter("InFly", false);
Ok = requestCounters->GetCounter("Ok", true);
diff --git a/ydb/core/yq/libs/test_connection/counters.h b/ydb/core/yq/libs/test_connection/counters.h
index 9d0dc4b38b..4108c956ee 100644
--- a/ydb/core/yq/libs/test_connection/counters.h
+++ b/ydb/core/yq/libs/test_connection/counters.h
@@ -7,14 +7,14 @@ namespace NYq {
class TTestConnectionRequestCounters: public virtual TThrRefBase {
public:
const TString Name;
- NMonitoring::TDynamicCounters::TCounterPtr InFly;
- NMonitoring::TDynamicCounters::TCounterPtr Ok;
- NMonitoring::TDynamicCounters::TCounterPtr Error;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InFly;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Ok;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Error;
NMonitoring::THistogramPtr LatencyMs;
explicit TTestConnectionRequestCounters(const TString& name);
- void Register(const NMonitoring::TDynamicCounterPtr& counters);
+ void Register(const ::NMonitoring::TDynamicCounterPtr& counters);
private:
static NMonitoring::IHistogramCollectorPtr GetLatencyHistogramBuckets();
diff --git a/ydb/core/yq/libs/test_connection/test_connection.cpp b/ydb/core/yq/libs/test_connection/test_connection.cpp
index 318dd6552f..a024e66dbc 100644
--- a/ydb/core/yq/libs/test_connection/test_connection.cpp
+++ b/ydb/core/yq/libs/test_connection/test_connection.cpp
@@ -47,7 +47,7 @@ class TTestConnectionActor : public NActors::TActorBootstrapped<TTestConnectionA
using TScopeCountersPtr = std::shared_ptr<TScopeCounters>;
TMap<TMetricsScope, TScopeCountersPtr> ScopeCounters;
- NMonitoring::TDynamicCounterPtr Counters;
+ ::NMonitoring::TDynamicCounterPtr Counters;
ERequestTypeScope ToType(YandexQuery::ConnectionSetting::ConnectionCase connectionCase) {
switch (connectionCase) {
@@ -63,7 +63,7 @@ class TTestConnectionActor : public NActors::TActorBootstrapped<TTestConnectionA
}
public:
- explicit TCounters(const NMonitoring::TDynamicCounterPtr& counters)
+ explicit TCounters(const ::NMonitoring::TDynamicCounterPtr& counters)
: Counters(counters)
{}
@@ -118,7 +118,7 @@ public:
const NPq::NConfigurationManager::IConnections::TPtr& cmConnections,
const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry,
const NYql::IHTTPGateway::TPtr& httpGateway,
- const NMonitoring::TDynamicCounterPtr& counters)
+ const ::NMonitoring::TDynamicCounterPtr& counters)
: Config(config)
, ControlPlaneStorageConfig(controlPlaneStorageConfig, commonConfig)
, CommonConfig(commonConfig)
@@ -236,7 +236,7 @@ NActors::IActor* CreateTestConnectionActor(
const NPq::NConfigurationManager::IConnections::TPtr& cmConnections,
const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry,
const NYql::IHTTPGateway::TPtr& httpGateway,
- const NMonitoring::TDynamicCounterPtr& counters) {
+ const ::NMonitoring::TDynamicCounterPtr& counters) {
return new TTestConnectionActor(config, controlPlaneStorageConfig, commonConfig,
tokenAccessorConfig, sharedResources,
credentialsFactory, cmConnections,
diff --git a/ydb/core/yq/libs/test_connection/test_connection.h b/ydb/core/yq/libs/test_connection/test_connection.h
index c273ef6027..fd31c9333e 100644
--- a/ydb/core/yq/libs/test_connection/test_connection.h
+++ b/ydb/core/yq/libs/test_connection/test_connection.h
@@ -50,7 +50,7 @@ NActors::IActor* CreateTestConnectionActor(
const NPq::NConfigurationManager::IConnections::TPtr& cmConnections,
const NKikimr::NMiniKQL::IFunctionRegistry* functionRegistry,
const NYql::IHTTPGateway::TPtr& httpGateway,
- const NMonitoring::TDynamicCounterPtr& counters);
+ const ::NMonitoring::TDynamicCounterPtr& counters);
NActors::IActor* CreateTestDataStreamsConnectionActor(
const YandexQuery::DataStreams& ds,
diff --git a/ydb/core/yq/libs/test_connection/ut/CMakeLists.txt b/ydb/core/yq/libs/test_connection/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/core/yq/libs/test_connection/ut/CMakeLists.txt
+++ b/ydb/core/yq/libs/test_connection/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/CMakeLists.txt b/ydb/library/CMakeLists.txt
new file mode 100644
index 0000000000..62d58f9c1e
--- /dev/null
+++ b/ydb/library/CMakeLists.txt
@@ -0,0 +1,29 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(aclib)
+add_subdirectory(arrow_clickhouse)
+add_subdirectory(backup)
+add_subdirectory(binary_json)
+add_subdirectory(dynumber)
+add_subdirectory(folder_service)
+add_subdirectory(http_proxy)
+add_subdirectory(keys)
+add_subdirectory(logger)
+add_subdirectory(login)
+add_subdirectory(mkql_proto)
+add_subdirectory(naming_conventions)
+add_subdirectory(pdisk_io)
+add_subdirectory(persqueue)
+add_subdirectory(pretty_types_print)
+add_subdirectory(protobuf_printer)
+add_subdirectory(schlab)
+add_subdirectory(security)
+add_subdirectory(workload)
+add_subdirectory(yaml_config)
+add_subdirectory(yql)
diff --git a/ydb/library/aclib/CMakeLists.txt b/ydb/library/aclib/CMakeLists.txt
index ce291a55af..2c32c7d7fa 100644
--- a/ydb/library/aclib/CMakeLists.txt
+++ b/ydb/library/aclib/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
+add_subdirectory(ut)
add_library(ydb-library-aclib)
target_link_libraries(ydb-library-aclib PUBLIC
diff --git a/ydb/library/aclib/ut/CMakeLists.txt b/ydb/library/aclib/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/aclib/ut/CMakeLists.txt
+++ b/ydb/library/aclib/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionAvg.h b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionAvg.h
new file mode 100644
index 0000000000..598afb54a3
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionAvg.h
@@ -0,0 +1,199 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <type_traits>
+
+#include <AggregateFunctions/IAggregateFunction.h>
+#include <AggregateFunctions/AggregateFunctionWrapper.h>
+#include <AggregateFunctions/AggregateFunctionSum.h>
+
+namespace CH
+{
+
+/**
+ * Helper class to encapsulate values conversion for avg and avgWeighted.
+ */
+template <typename Numerator, typename Denominator>
+struct AvgFraction
+{
+ Numerator numerator{0};
+ Denominator denominator{0};
+
+ double divide() const
+ {
+ return static_cast<double>(numerator) / denominator;
+ }
+};
+
+
+/**
+ * @tparam Derived When deriving from this class, use the child class name as in CRTP, e.g.
+ * class Self : Agg<char, bool, bool, Self>.
+ */
+template <typename TNumerator, typename TDenominator, typename Derived>
+class AggregateFunctionAvgBase : public
+ IAggregateFunctionDataHelper<AvgFraction<TNumerator, TDenominator>, Derived>
+{
+public:
+ using Base = IAggregateFunctionDataHelper<AvgFraction<TNumerator, TDenominator>, Derived>;
+ using Numerator = TNumerator;
+ using Denominator = TDenominator;
+ using Fraction = AvgFraction<Numerator, Denominator>;
+
+ explicit AggregateFunctionAvgBase(const DataTypes & argument_types_,
+ UInt32 num_scale_ = 0, UInt32 denom_scale_ = 0)
+ : Base(argument_types_, {}), num_scale(num_scale_), denom_scale(denom_scale_) {}
+
+ DataTypePtr getReturnType() const override
+ {
+ return std::make_shared<arrow::DoubleType>();
+ }
+
+ bool allocatesMemoryInArena() const override { return false; }
+
+ void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs, Arena *) const override
+ {
+ this->data(place).numerator += this->data(rhs).numerator;
+ this->data(place).denominator += this->data(rhs).denominator;
+ }
+#if 0
+ void serialize(ConstAggregateDataPtr __restrict place, WriteBuffer & buf, std::optional<size_t> /* version */) const override
+ {
+ writeBinary(this->data(place).numerator, buf);
+
+ if constexpr (std::is_unsigned_v<Denominator>)
+ writeVarUInt(this->data(place).denominator, buf);
+ else /// Floating point denominator type can be used
+ writeBinary(this->data(place).denominator, buf);
+ }
+
+ void deserialize(AggregateDataPtr __restrict place, ReadBuffer & buf, std::optional<size_t> /* version */, Arena *) const override
+ {
+ readBinary(this->data(place).numerator, buf);
+
+ if constexpr (std::is_unsigned_v<Denominator>)
+ readVarUInt(this->data(place).denominator, buf);
+ else /// Floating point denominator type can be used
+ readBinary(this->data(place).denominator, buf);
+ }
+#endif
+ void insertResultInto(AggregateDataPtr __restrict place, MutableColumn & to, Arena *) const override
+ {
+ assert_cast<MutableColumnFloat64 &>(to).Append(this->data(place).divide()).ok();
+ }
+
+private:
+ UInt32 num_scale;
+ UInt32 denom_scale;
+};
+
+template <typename T>
+using AvgFieldType = std::conditional_t<std::is_floating_point_v<T>, T, UInt64>;
+
+template <typename T>
+class AggregateFunctionAvg : public AggregateFunctionAvgBase<AvgFieldType<T>, UInt64, AggregateFunctionAvg<T>>
+{
+public:
+ using Base = AggregateFunctionAvgBase<AvgFieldType<T>, UInt64, AggregateFunctionAvg<T>>;
+ using Base::Base;
+
+ using Numerator = typename Base::Numerator;
+ using Denominator = typename Base::Denominator;
+ using Fraction = typename Base::Fraction;
+
+ using ColumnType = arrow::NumericArray<T>;
+ using MutableColumnType = arrow::NumericBuilder<T>;
+
+ void add(AggregateDataPtr __restrict place, const IColumn ** columns, size_t row_num, Arena *) const final
+ {
+ increment(place, static_cast<const ColumnType &>(*columns[0]).Value(row_num));
+ ++this->data(place).denominator;
+ }
+
+ void addBatchSinglePlace(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr __restrict place,
+ const IColumn ** columns,
+ Arena *,
+ ssize_t if_argument_pos) const final
+ {
+ AggregateFunctionSumData<Numerator> sum_data;
+ const auto & column = assert_cast<const ColumnType &>(*columns[0]);
+ if (if_argument_pos >= 0)
+ {
+ const auto & flags = assert_cast<const ColumnUInt8 &>(*columns[if_argument_pos]).raw_values();
+ sum_data.addManyConditional(column.raw_values(), flags, row_begin, row_end);
+ this->data(place).denominator += countBytesInFilter(flags, row_begin, row_end);
+ }
+ else
+ {
+ sum_data.addMany(column.raw_values(), row_begin, row_end);
+ this->data(place).denominator += (row_end - row_begin);
+ }
+ increment(place, sum_data.sum);
+ }
+
+private:
+ void increment(AggregateDataPtr __restrict place, Numerator inc) const
+ {
+ this->data(place).numerator += inc;
+ }
+};
+
+class WrappedAvg final : public ArrowAggregateFunctionWrapper
+{
+public:
+ WrappedAvg(std::string name)
+ : ArrowAggregateFunctionWrapper(std::move(name))
+ {}
+
+ AggregateFunctionPtr getHouseFunction(const DataTypes & argument_types) const override
+ {
+ return createWithSameType<AggregateFunctionAvg>(argument_types);
+ }
+
+ template <template <typename> typename AggFunc>
+ std::shared_ptr<IAggregateFunction> createWithSameType(const DataTypes & argument_types) const
+ {
+ if (argument_types.size() != 1)
+ return {};
+
+ const DataTypePtr & type = argument_types[0];
+
+ switch (type->id()) {
+ case arrow::Type::INT8:
+ return std::make_shared<AggFunc<arrow::Int8Type>>(argument_types);
+ case arrow::Type::INT16:
+ return std::make_shared<AggFunc<arrow::Int16Type>>(argument_types);
+ case arrow::Type::INT32:
+ return std::make_shared<AggFunc<arrow::Int32Type>>(argument_types);
+ case arrow::Type::INT64:
+ return std::make_shared<AggFunc<arrow::Int64Type>>(argument_types);
+ case arrow::Type::UINT8:
+ return std::make_shared<AggFunc<arrow::UInt8Type>>(argument_types);
+ case arrow::Type::UINT16:
+ return std::make_shared<AggFunc<arrow::UInt16Type>>(argument_types);
+ case arrow::Type::UINT32:
+ return std::make_shared<AggFunc<arrow::UInt32Type>>(argument_types);
+ case arrow::Type::UINT64:
+ return std::make_shared<AggFunc<arrow::UInt64Type>>(argument_types);
+ case arrow::Type::FLOAT:
+ return std::make_shared<AggFunc<arrow::FloatType>>(argument_types);
+ case arrow::Type::DOUBLE:
+ return std::make_shared<AggFunc<arrow::DoubleType>>(argument_types);
+ case arrow::Type::DURATION:
+ return std::make_shared<AggFunc<arrow::DurationType>>(argument_types);
+ default:
+ break;
+ }
+
+ return {};
+ }
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionCount.h b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionCount.h
new file mode 100644
index 0000000000..0994cadc1f
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionCount.h
@@ -0,0 +1,94 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <AggregateFunctions/IAggregateFunction.h>
+#include <AggregateFunctions/AggregateFunctionWrapper.h>
+#include <Columns/ColumnsCommon.h>
+
+#include <array>
+
+namespace CH
+{
+
+
+struct AggregateFunctionCountData
+{
+ UInt64 count = 0;
+};
+
+
+/// Simply count number of calls.
+class AggregateFunctionCount final : public IAggregateFunctionDataHelper<AggregateFunctionCountData, AggregateFunctionCount>
+{
+public:
+ AggregateFunctionCount(const DataTypes & argument_types_)
+ : IAggregateFunctionDataHelper(argument_types_, {})
+ {}
+
+ DataTypePtr getReturnType() const override
+ {
+ return std::make_shared<DataTypeUInt64>();
+ }
+
+ bool allocatesMemoryInArena() const override { return false; }
+
+ void add(AggregateDataPtr __restrict place, const IColumn **, size_t, Arena *) const override
+ {
+ ++data(place).count;
+ }
+
+ void addBatchSinglePlace(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr __restrict place,
+ const IColumn ** columns,
+ Arena *,
+ ssize_t if_argument_pos) const override
+ {
+ if (if_argument_pos >= 0)
+ {
+ const auto & filter_column = assert_cast<const ColumnUInt8 &>(*columns[if_argument_pos]);
+ const auto & flags = filter_column.raw_values();
+ data(place).count += countBytesInFilter(flags, row_begin, row_end);
+ }
+ else
+ {
+ data(place).count += row_end - row_begin;
+ }
+ }
+
+ void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs, Arena *) const override
+ {
+ data(place).count += data(rhs).count;
+ }
+
+ void insertResultInto(AggregateDataPtr __restrict place, MutableColumn & to, Arena *) const override
+ {
+ assert_cast<MutableColumnUInt64 &>(to).Append(data(place).count).ok();
+ }
+
+ /// Reset the state to specified value. This function is not the part of common interface.
+ void set(AggregateDataPtr __restrict place, UInt64 new_count) const
+ {
+ data(place).count = new_count;
+ }
+};
+
+class WrappedCount final : public ArrowAggregateFunctionWrapper
+{
+public:
+ WrappedCount(std::string name)
+ : ArrowAggregateFunctionWrapper(std::move(name))
+ {}
+
+ AggregateFunctionPtr getHouseFunction(const DataTypes & argument_types) const override
+ {
+ return std::make_shared<AggregateFunctionCount>(argument_types);
+ }
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionMinMaxAny.h b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionMinMaxAny.h
new file mode 100644
index 0000000000..c8ce2884c7
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionMinMaxAny.h
@@ -0,0 +1,684 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <ydb/library/yql/udfs/common/clickhouse/client/src/Common/BitHelpers.h>
+#include <AggregateFunctions/IAggregateFunction.h>
+#include <AggregateFunctions/AggregateFunctionWrapper.h>
+
+
+namespace CH
+{
+
+/// For numeric values.
+template <typename ArrowType>
+struct SingleValueDataFixed
+{
+private:
+ using Self = SingleValueDataFixed;
+ using ColumnType = arrow::NumericArray<ArrowType>;
+ using MutableColumnType = arrow::NumericBuilder<ArrowType>;
+
+ bool has_value = false; /// We need to remember if at least one value has been passed. This is necessary for AggregateFunctionIf.
+ typename arrow::TypeTraits<ArrowType>::CType value;
+
+public:
+ static constexpr bool is_any = false;
+
+ bool has() const
+ {
+ return has_value;
+ }
+
+ void insertResultInto(MutableColumn & to) const
+ {
+ if (has())
+ assert_cast<MutableColumnType &>(to).Append(value).ok();
+ else
+ assert_cast<MutableColumnType &>(to).AppendEmptyValue().ok();
+ }
+
+ void change(const IColumn & column, size_t row_num, Arena *)
+ {
+ has_value = true;
+ value = assert_cast<const ColumnType &>(column).Value(row_num);
+ }
+
+ /// Assuming to.has()
+ void change(const Self & to, Arena *)
+ {
+ has_value = true;
+ value = to.value;
+ }
+
+ bool changeFirstTime(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has())
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeFirstTime(const Self & to, Arena * arena)
+ {
+ if (!has() && to.has())
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeEveryTime(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+
+ bool changeEveryTime(const Self & to, Arena * arena)
+ {
+ if (to.has())
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfLess(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has() || assert_cast<const ColumnType &>(column).Value(row_num) < value)
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfLess(const Self & to, Arena * arena)
+ {
+ if (to.has() && (!has() || to.value < value))
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfGreater(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has() || assert_cast<const ColumnType &>(column).Value(row_num) > value)
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfGreater(const Self & to, Arena * arena)
+ {
+ if (to.has() && (!has() || to.value > value))
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool isEqualTo(const Self & to) const
+ {
+ return has() && to.value == value;
+ }
+
+ bool isEqualTo(const IColumn & column, size_t row_num) const
+ {
+ return has() && assert_cast<const ColumnType &>(column).Value(row_num) == value;
+ }
+
+ static bool allocatesMemoryInArena()
+ {
+ return false;
+ }
+};
+
+
+/** For strings. Short strings are stored in the object itself, and long strings are allocated separately.
+ * NOTE It could also be suitable for arrays of numbers.
+ */
+template <bool is_utf8_string>
+struct SingleValueDataString
+{
+private:
+ using Self = SingleValueDataString<is_utf8_string>;
+ using ColumnType = std::conditional_t<is_utf8_string, ColumnString, ColumnBinary>;
+ using MutableColumnType = std::conditional_t<is_utf8_string, MutableColumnString, MutableColumnBinary>;
+
+ Int32 size = -1; /// -1 indicates that there is no value.
+ Int32 capacity = 0; /// power of two or zero
+ char * large_data;
+
+public:
+ static constexpr Int32 AUTOMATIC_STORAGE_SIZE = 64;
+ static constexpr Int32 MAX_SMALL_STRING_SIZE = AUTOMATIC_STORAGE_SIZE - sizeof(size) - sizeof(capacity) - sizeof(large_data);
+
+private:
+ char small_data[MAX_SMALL_STRING_SIZE]; /// Including the terminating zero.
+
+public:
+ static constexpr bool is_any = false;
+
+ bool has() const
+ {
+ return size >= 0;
+ }
+
+ const char * getData() const
+ {
+ return size <= MAX_SMALL_STRING_SIZE ? small_data : large_data;
+ }
+
+ arrow::util::string_view getStringView() const
+ {
+ if (!has())
+ return {};
+ return arrow::util::string_view(getData(), size);
+ }
+
+ void insertResultInto(MutableColumn & to) const
+ {
+ if (has())
+ assert_cast<MutableColumnType &>(to).Append(getData(), size).ok();
+ else
+ assert_cast<MutableColumnType &>(to).AppendEmptyValue().ok();
+ }
+
+ /// Assuming to.has()
+ void changeImpl(arrow::util::string_view value, Arena * arena)
+ {
+ Int32 value_size = value.size();
+
+ if (value_size <= MAX_SMALL_STRING_SIZE)
+ {
+ /// Don't free large_data here.
+ size = value_size;
+
+ if (size > 0)
+ memcpy(small_data, value.data(), size);
+ }
+ else
+ {
+ if (capacity < value_size)
+ {
+ /// Don't free large_data here.
+ capacity = roundUpToPowerOfTwoOrZero(value_size);
+ large_data = arena->alloc(capacity);
+ }
+
+ size = value_size;
+ memcpy(large_data, value.data(), size);
+ }
+ }
+
+ void change(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ changeImpl(assert_cast<const ColumnType &>(column).Value(row_num), arena);
+ }
+
+ void change(const Self & to, Arena * arena)
+ {
+ changeImpl(to.getStringView(), arena);
+ }
+
+ bool changeFirstTime(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has())
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeFirstTime(const Self & to, Arena * arena)
+ {
+ if (!has() && to.has())
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeEveryTime(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+
+ bool changeEveryTime(const Self & to, Arena * arena)
+ {
+ if (to.has())
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfLess(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has() || assert_cast<const ColumnType &>(column).Value(row_num) < getStringView())
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfLess(const Self & to, Arena * arena)
+ {
+ if (to.has() && (!has() || to.getStringView() < getStringView()))
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfGreater(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has() || assert_cast<const ColumnType &>(column).Value(row_num) > getStringView())
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfGreater(const Self & to, Arena * arena)
+ {
+ if (to.has() && (!has() || to.getStringView() > getStringView()))
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool isEqualTo(const Self & to) const
+ {
+ return has() && to.getStringView() == getStringView();
+ }
+
+ bool isEqualTo(const IColumn & column, size_t row_num) const
+ {
+ return has() && assert_cast<const ColumnType &>(column).Value(row_num) == getStringView();
+ }
+
+ static bool allocatesMemoryInArena()
+ {
+ return true;
+ }
+};
+
+static_assert(sizeof(SingleValueDataString<false>) == SingleValueDataString<false>::AUTOMATIC_STORAGE_SIZE,
+ "Incorrect size of SingleValueDataString struct");
+static_assert(sizeof(SingleValueDataString<true>) == SingleValueDataString<true>::AUTOMATIC_STORAGE_SIZE,
+ "Incorrect size of SingleValueDataString struct");
+
+
+#if 0
+/// For any other value types.
+struct SingleValueDataGeneric
+{
+private:
+ using Self = SingleValueDataGeneric;
+ static constexpr bool is_any = false;
+
+ Field value;
+
+public:
+ bool has() const
+ {
+ return !value.isNull();
+ }
+
+ void insertResultInto(IColumn & to) const
+ {
+ if (has())
+ to.insert(value);
+ else
+ to.insertDefault();
+ }
+
+ void change(const IColumn & column, size_t row_num, Arena *)
+ {
+ column.get(row_num, value);
+ }
+
+ void change(const Self & to, Arena *)
+ {
+ value = to.value;
+ }
+
+ bool changeFirstTime(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has())
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeFirstTime(const Self & to, Arena * arena)
+ {
+ if (!has() && to.has())
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeEveryTime(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+
+ bool changeEveryTime(const Self & to, Arena * arena)
+ {
+ if (to.has())
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfLess(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has())
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ {
+ Field new_value;
+ column.get(row_num, new_value);
+ if (new_value < value)
+ {
+ value = new_value;
+ return true;
+ }
+ else
+ return false;
+ }
+ }
+
+ bool changeIfLess(const Self & to, Arena * arena)
+ {
+ if (to.has() && (!has() || to.value < value))
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool changeIfGreater(const IColumn & column, size_t row_num, Arena * arena)
+ {
+ if (!has())
+ {
+ change(column, row_num, arena);
+ return true;
+ }
+ else
+ {
+ Field new_value;
+ column.get(row_num, new_value);
+ if (new_value > value)
+ {
+ value = new_value;
+ return true;
+ }
+ else
+ return false;
+ }
+ }
+
+ bool changeIfGreater(const Self & to, Arena * arena)
+ {
+ if (to.has() && (!has() || to.value > value))
+ {
+ change(to, arena);
+ return true;
+ }
+ else
+ return false;
+ }
+
+ bool isEqualTo(const IColumn & column, size_t row_num) const
+ {
+ return has() && value == column[row_num];
+ }
+
+ bool isEqualTo(const Self & to) const
+ {
+ return has() && to.value == value;
+ }
+
+ static bool allocatesMemoryInArena()
+ {
+ return false;
+ }
+};
+#endif
+
+/** What is the difference between the aggregate functions min, max, any, anyLast
+ * (the condition that the stored value is replaced by a new one,
+ * as well as, of course, the name).
+ */
+
+template <typename Data>
+struct AggregateFunctionMinData : Data
+{
+ using Self = AggregateFunctionMinData;
+
+ bool changeIfBetter(const IColumn & column, size_t row_num, Arena * arena) { return this->changeIfLess(column, row_num, arena); }
+ bool changeIfBetter(const Self & to, Arena * arena) { return this->changeIfLess(to, arena); }
+};
+
+template <typename Data>
+struct AggregateFunctionMaxData : Data
+{
+ using Self = AggregateFunctionMaxData;
+
+ bool changeIfBetter(const IColumn & column, size_t row_num, Arena * arena) { return this->changeIfGreater(column, row_num, arena); }
+ bool changeIfBetter(const Self & to, Arena * arena) { return this->changeIfGreater(to, arena); }
+};
+
+template <typename Data>
+struct AggregateFunctionAnyData : Data
+{
+ using Self = AggregateFunctionAnyData;
+ static constexpr bool is_any = true;
+
+ bool changeIfBetter(const IColumn & column, size_t row_num, Arena * arena) { return this->changeFirstTime(column, row_num, arena); }
+ bool changeIfBetter(const Self & to, Arena * arena) { return this->changeFirstTime(to, arena); }
+};
+
+template <typename Data>
+class AggregateFunctionsSingleValue final : public IAggregateFunctionDataHelper<Data, AggregateFunctionsSingleValue<Data>>
+{
+ static constexpr bool is_any = Data::is_any;
+
+private:
+ DataTypePtr & type;
+
+public:
+ AggregateFunctionsSingleValue(const DataTypePtr & type_)
+ : IAggregateFunctionDataHelper<Data, AggregateFunctionsSingleValue<Data>>({type_}, {})
+ , type(this->argument_types[0])
+ {
+#if 0
+ if (StringRef(Data::name()) == StringRef("min")
+ || StringRef(Data::name()) == StringRef("max"))
+ {
+ if (!type->isComparable())
+ throw Exception("Illegal type " + type->getName() + " of argument of aggregate function " + getName()
+ + " because the values of that data type are not comparable");
+ }
+#endif
+ }
+
+ DataTypePtr getReturnType() const override
+ {
+ return type;
+ }
+
+ void add(AggregateDataPtr __restrict place, const IColumn ** columns, size_t row_num, Arena * arena) const override
+ {
+ this->data(place).changeIfBetter(*columns[0], row_num, arena);
+ }
+
+ void addBatchSinglePlace(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr place,
+ const IColumn ** columns,
+ Arena * arena,
+ ssize_t if_argument_pos) const override
+ {
+ if constexpr (is_any)
+ if (this->data(place).has())
+ return;
+ if (if_argument_pos >= 0)
+ {
+ const auto & flags = assert_cast<const ColumnUInt8 &>(*columns[if_argument_pos]).raw_values();
+ for (size_t i = row_begin; i < row_end; ++i)
+ {
+ if (flags[i])
+ {
+ this->data(place).changeIfBetter(*columns[0], i, arena);
+ if constexpr (is_any)
+ break;
+ }
+ }
+ }
+ else
+ {
+ for (size_t i = row_begin; i < row_end; ++i)
+ {
+ this->data(place).changeIfBetter(*columns[0], i, arena);
+ if constexpr (is_any)
+ break;
+ }
+ }
+ }
+
+ void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs, Arena * arena) const override
+ {
+ this->data(place).changeIfBetter(this->data(rhs), arena);
+ }
+
+ bool allocatesMemoryInArena() const override
+ {
+ return Data::allocatesMemoryInArena();
+ }
+
+ void insertResultInto(AggregateDataPtr __restrict place, MutableColumn & to, Arena *) const override
+ {
+ this->data(place).insertResultInto(to);
+ }
+};
+
+template <template <typename> typename AggFunc, template <typename> typename AggData>
+inline std::shared_ptr<IAggregateFunction> createAggregateFunctionSingleValue(const DataTypes & argument_types)
+{
+ if (argument_types.size() != 1)
+ return {};
+
+ const DataTypePtr & argument_type = argument_types[0];
+
+ switch (argument_type->id()) {
+ case arrow::Type::INT8:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::Int8Type>>>>(argument_type);
+ case arrow::Type::INT16:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::Int16Type>>>>(argument_type);
+ case arrow::Type::INT32:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::Int32Type>>>>(argument_type);
+ case arrow::Type::INT64:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::Int64Type>>>>(argument_type);
+ case arrow::Type::UINT8:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::UInt8Type>>>>(argument_type);
+ case arrow::Type::UINT16:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::UInt16Type>>>>(argument_type);
+ case arrow::Type::UINT32:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::UInt32Type>>>>(argument_type);
+ case arrow::Type::UINT64:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::UInt64Type>>>>(argument_type);
+ case arrow::Type::FLOAT:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::FloatType>>>>(argument_type);
+ case arrow::Type::DOUBLE:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::DoubleType>>>>(argument_type);
+ case arrow::Type::TIMESTAMP:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::TimestampType>>>>(argument_type);
+ case arrow::Type::DURATION:
+ return std::make_shared<AggFunc<AggData<SingleValueDataFixed<arrow::DurationType>>>>(argument_type);
+ case arrow::Type::BINARY:
+ return std::make_shared<AggFunc<AggData<SingleValueDataString<false>>>>(argument_type);
+ case arrow::Type::STRING:
+ return std::make_shared<AggFunc<AggData<SingleValueDataString<true>>>>(argument_type);
+ default:
+ break;
+ }
+
+ //return std::make_shared<AggFunc<AggData<SingleValueDataGeneric>>>(argument_type); // TODO
+ return {};
+}
+
+template <template <typename> typename AggFunc, template <typename> typename AggData>
+class WrappedMinMaxAny final : public ArrowAggregateFunctionWrapper
+{
+public:
+ WrappedMinMaxAny(std::string name)
+ : ArrowAggregateFunctionWrapper(std::move(name))
+ {}
+
+ AggregateFunctionPtr getHouseFunction(const DataTypes & argument_types) const override
+ {
+ return createAggregateFunctionSingleValue<AggFunc, AggData>(argument_types);
+ }
+};
+
+using WrappedMin = WrappedMinMaxAny<AggregateFunctionsSingleValue, AggregateFunctionMinData>;
+using WrappedMax = WrappedMinMaxAny<AggregateFunctionsSingleValue, AggregateFunctionMaxData>;
+using WrappedAny = WrappedMinMaxAny<AggregateFunctionsSingleValue, AggregateFunctionAnyData>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionSum.h b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionSum.h
new file mode 100644
index 0000000000..9819eac3df
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionSum.h
@@ -0,0 +1,303 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <cstring>
+#include <type_traits>
+
+#include <AggregateFunctions/IAggregateFunction.h>
+#include <AggregateFunctions/AggregateFunctionWrapper.h>
+
+namespace CH
+{
+
+/// Uses addOverflow method (if available) to avoid UB for sumWithOverflow()
+///
+/// Since NO_SANITIZE_UNDEFINED works only for the function itself, without
+/// callers, and in case of non-POD type (i.e. Decimal) you have overwritten
+/// operator+=(), which will have UB.
+template <typename T>
+struct AggregateFunctionSumAddOverflowImpl
+{
+ static void NO_SANITIZE_UNDEFINED ALWAYS_INLINE add(T & lhs, const T & rhs)
+ {
+ lhs += rhs;
+ }
+};
+
+template <typename T>
+struct AggregateFunctionSumData
+{
+ using Impl = AggregateFunctionSumAddOverflowImpl<T>;
+ T sum{};
+
+ void NO_SANITIZE_UNDEFINED ALWAYS_INLINE add(T value)
+ {
+ Impl::add(sum, value);
+ }
+
+ template <typename Value>
+ void NO_SANITIZE_UNDEFINED NO_INLINE addManyImpl(const Value * __restrict ptr, size_t start, size_t end) /// NOLINT
+ {
+ ptr += start;
+ size_t count = end - start;
+ const auto * end_ptr = ptr + count;
+
+ if constexpr (std::is_floating_point_v<T>)
+ {
+ /// Compiler cannot unroll this loop, do it manually.
+ /// (at least for floats, most likely due to the lack of -fassociative-math)
+
+ /// Something around the number of SSE registers * the number of elements fit in register.
+ constexpr size_t unroll_count = 128 / sizeof(T);
+ T partial_sums[unroll_count]{};
+
+ const auto * unrolled_end = ptr + (count / unroll_count * unroll_count);
+
+ while (ptr < unrolled_end)
+ {
+ for (size_t i = 0; i < unroll_count; ++i)
+ Impl::add(partial_sums[i], ptr[i]);
+ ptr += unroll_count;
+ }
+
+ for (size_t i = 0; i < unroll_count; ++i)
+ Impl::add(sum, partial_sums[i]);
+ }
+
+ /// clang cannot vectorize the loop if accumulator is class member instead of local variable.
+ T local_sum{};
+ while (ptr < end_ptr)
+ {
+ Impl::add(local_sum, *ptr);
+ ++ptr;
+ }
+ Impl::add(sum, local_sum);
+ }
+
+ /// Vectorized version
+ template <typename Value>
+ void NO_INLINE addMany(const Value * __restrict ptr, size_t start, size_t end)
+ {
+ addManyImpl(ptr, start, end);
+ }
+
+ template <typename Value, bool add_if_zero>
+ void NO_SANITIZE_UNDEFINED NO_INLINE addManyConditionalInternalImpl(
+ const Value * __restrict ptr,
+ const uint8_t * __restrict condition_map,
+ size_t start,
+ size_t end) /// NOLINT
+ {
+ ptr += start;
+ size_t count = end - start;
+ const auto * end_ptr = ptr + count;
+
+ if constexpr (std::is_integral_v<T>)
+ {
+ /// For integers we can vectorize the operation if we replace the null check using a multiplication (by 0 for null, 1 for not null)
+ /// https://quick-bench.com/q/MLTnfTvwC2qZFVeWHfOBR3U7a8I
+ T local_sum{};
+ while (ptr < end_ptr)
+ {
+ T multiplier = !*condition_map == add_if_zero;
+ Impl::add(local_sum, *ptr * multiplier);
+ ++ptr;
+ ++condition_map;
+ }
+ Impl::add(sum, local_sum);
+ return;
+ }
+
+ if constexpr (std::is_floating_point_v<T>)
+ {
+ /// For floating point we use a similar trick as above, except that now we reinterpret the floating point number as an unsigned
+ /// integer of the same size and use a mask instead (0 to discard, 0xFF..FF to keep)
+ static_assert(sizeof(Value) == 4 || sizeof(Value) == 8);
+ using equivalent_integer = typename std::conditional_t<sizeof(Value) == 4, UInt32, UInt64>;
+
+ constexpr size_t unroll_count = 128 / sizeof(T);
+ T partial_sums[unroll_count]{};
+
+ const auto * unrolled_end = ptr + (count / unroll_count * unroll_count);
+
+ while (ptr < unrolled_end)
+ {
+ for (size_t i = 0; i < unroll_count; ++i)
+ {
+ equivalent_integer value;
+ std::memcpy(&value, &ptr[i], sizeof(Value));
+ value &= (!condition_map[i] != add_if_zero) - 1;
+ Value d;
+ std::memcpy(&d, &value, sizeof(Value));
+ Impl::add(partial_sums[i], d);
+ }
+ ptr += unroll_count;
+ condition_map += unroll_count;
+ }
+
+ for (size_t i = 0; i < unroll_count; ++i)
+ Impl::add(sum, partial_sums[i]);
+ }
+
+ T local_sum{};
+ while (ptr < end_ptr)
+ {
+ if (!*condition_map == add_if_zero)
+ Impl::add(local_sum, *ptr);
+ ++ptr;
+ ++condition_map;
+ }
+ Impl::add(sum, local_sum);
+ }
+
+ /// Vectorized version
+ template <typename Value, bool add_if_zero>
+ void NO_INLINE addManyConditionalInternal(const Value * __restrict ptr, const uint8_t * __restrict condition_map, size_t start, size_t end)
+ {
+ addManyConditionalInternalImpl<Value, add_if_zero>(ptr, condition_map, start, end);
+ }
+
+ template <typename Value>
+ void ALWAYS_INLINE addManyNotNull(const Value * __restrict ptr, const uint8_t * __restrict null_map, size_t start, size_t end)
+ {
+ return addManyConditionalInternal<Value, true>(ptr, null_map, start, end);
+ }
+
+ template <typename Value>
+ void ALWAYS_INLINE addManyConditional(const Value * __restrict ptr, const uint8_t * __restrict cond_map, size_t start, size_t end)
+ {
+ return addManyConditionalInternal<Value, false>(ptr, cond_map, start, end);
+ }
+
+ void NO_SANITIZE_UNDEFINED merge(const AggregateFunctionSumData & rhs)
+ {
+ Impl::add(sum, rhs.sum);
+ }
+
+ T get() const
+ {
+ return sum;
+ }
+};
+
+
+/// Counts the sum of the numbers.
+template <typename T, typename TResult, typename Data>
+class AggregateFunctionSum final : public IAggregateFunctionDataHelper<Data, AggregateFunctionSum<T, TResult, Data>>
+{
+public:
+ using ColumnType = arrow::NumericArray<T>;
+ using MutableColumnType = arrow::NumericBuilder<T>;
+
+ explicit AggregateFunctionSum(const DataTypes & argument_types_)
+ : IAggregateFunctionDataHelper<Data, AggregateFunctionSum<T, TResult, Data>>(argument_types_, {})
+ {}
+
+ AggregateFunctionSum(const IDataType & /*data_type*/, const DataTypes & argument_types_)
+ : IAggregateFunctionDataHelper<Data, AggregateFunctionSum<T, TResult, Data>>(argument_types_, {})
+ {}
+
+ DataTypePtr getReturnType() const override
+ {
+ return std::make_shared<TResult>();
+ }
+
+ bool allocatesMemoryInArena() const override { return false; }
+
+ void add(AggregateDataPtr __restrict place, const IColumn ** columns, size_t row_num, Arena *) const override
+ {
+ const auto & column = assert_cast<const ColumnType &>(*columns[0]);
+ this->data(place).add(column.Value(row_num));
+ }
+
+ void addBatchSinglePlace(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr __restrict place,
+ const IColumn ** columns,
+ Arena *,
+ ssize_t if_argument_pos) const override
+ {
+ const auto & column = assert_cast<const ColumnType &>(*columns[0]);
+ if (if_argument_pos >= 0)
+ {
+ const auto & flags = assert_cast<const ColumnUInt8 &>(*columns[if_argument_pos]).raw_values();
+ this->data(place).addManyConditional(column.raw_values(), flags, row_begin, row_end);
+ }
+ else
+ {
+ this->data(place).addMany(column.raw_values(), row_begin, row_end);
+ }
+ }
+
+ void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs, Arena *) const override
+ {
+ this->data(place).merge(this->data(rhs));
+ }
+
+ void insertResultInto(AggregateDataPtr __restrict place, MutableColumn & to, Arena *) const override
+ {
+ assert_cast<MutableColumnType &>(to).Append(this->data(place).get()).ok();
+ }
+};
+
+class WrappedSum final : public ArrowAggregateFunctionWrapper
+{
+public:
+ template <typename T>
+ using AggregateFunctionSumWithOverflow =
+ AggregateFunctionSum<T, T, AggregateFunctionSumData<typename arrow::TypeTraits<T>::CType>>;
+
+ WrappedSum(std::string name)
+ : ArrowAggregateFunctionWrapper(std::move(name))
+ {}
+
+ AggregateFunctionPtr getHouseFunction(const DataTypes & argument_types) const override
+ {
+ return createWithSameType<AggregateFunctionSumWithOverflow>(argument_types);
+ }
+
+ template <template <typename> typename AggFunc>
+ std::shared_ptr<IAggregateFunction> createWithSameType(const DataTypes & argument_types) const
+ {
+ if (argument_types.size() != 1)
+ return {};
+
+ const DataTypePtr & type = argument_types[0];
+
+ switch (type->id()) {
+ case arrow::Type::INT8:
+ return std::make_shared<AggFunc<arrow::Int8Type>>(argument_types);
+ case arrow::Type::INT16:
+ return std::make_shared<AggFunc<arrow::Int16Type>>(argument_types);
+ case arrow::Type::INT32:
+ return std::make_shared<AggFunc<arrow::Int32Type>>(argument_types);
+ case arrow::Type::INT64:
+ return std::make_shared<AggFunc<arrow::Int64Type>>(argument_types);
+ case arrow::Type::UINT8:
+ return std::make_shared<AggFunc<arrow::UInt8Type>>(argument_types);
+ case arrow::Type::UINT16:
+ return std::make_shared<AggFunc<arrow::UInt16Type>>(argument_types);
+ case arrow::Type::UINT32:
+ return std::make_shared<AggFunc<arrow::UInt32Type>>(argument_types);
+ case arrow::Type::UINT64:
+ return std::make_shared<AggFunc<arrow::UInt64Type>>(argument_types);
+ case arrow::Type::FLOAT:
+ return std::make_shared<AggFunc<arrow::FloatType>>(argument_types);
+ case arrow::Type::DOUBLE:
+ return std::make_shared<AggFunc<arrow::DoubleType>>(argument_types);
+ case arrow::Type::DURATION:
+ return std::make_shared<AggFunc<arrow::DurationType>>(argument_types);
+ default:
+ break;
+ }
+
+ return {};
+ }
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionWrapper.h b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionWrapper.h
new file mode 100644
index 0000000000..bf25ab585e
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/AggregateFunctions/AggregateFunctionWrapper.h
@@ -0,0 +1,243 @@
+#pragma once
+#include "arrow_clickhouse_types.h"
+#include "Aggregator.h"
+#include <AggregateFunctions/IAggregateFunction.h>
+#include <DataStreams/OneBlockInputStream.h>
+#include <DataStreams/AggregatingBlockInputStream.h>
+
+#include <unordered_set>
+
+namespace CH
+{
+
+class ArrowAggregateFunctionWrapper : public arrow::compute::ScalarAggregateFunction
+{
+public:
+ ArrowAggregateFunctionWrapper(std::string name)
+ : arrow::compute::ScalarAggregateFunction(std::move(name), arrow::compute::Arity::Unary(), nullptr)
+ {}
+
+ virtual AggregateFunctionPtr getHouseFunction(const DataTypes & argument_types) const = 0;
+
+ arrow::Result<arrow::Datum> Execute(
+ const std::vector<arrow::Datum>& args,
+ const arrow::compute::FunctionOptions* /*options*/,
+ arrow::compute::ExecContext* /*ctx*/) const override
+ {
+ static const std::string result_name = "res";
+ static const std::vector<std::string> arg_names = {"0", "1", "2", "3", "4", "5"};
+ if (args.size() > arg_names.size())
+ return arrow::Status::Invalid("unexpected arguments count");
+
+ std::vector<uint32_t> arg_positions;
+ arg_positions.reserve(args.size());
+
+ DataTypes types;
+ arrow::FieldVector fields;
+ std::vector<std::shared_ptr<arrow::Array>> columns;
+
+ types.reserve(args.size());
+ fields.reserve(args.size());
+ columns.reserve(args.size());
+
+ int num_rows = 0;
+ uint32_t arg_num = 0;
+ for (auto& arg : args)
+ {
+ if (!arg.is_array())
+ return arrow::Status::Invalid("argument is not an array");
+
+ columns.push_back(arg.make_array());
+ types.push_back(columns.back()->type());
+ fields.push_back(std::make_shared<arrow::Field>(arg_names[arg_num], types.back()));
+
+ if (!arg_num)
+ num_rows = columns.back()->length();
+ else if (num_rows != columns.back()->length())
+ return arrow::Status::Invalid("different argiments length");
+
+ arg_positions.push_back(arg_num);
+ ++arg_num;
+ }
+
+ auto batch = arrow::RecordBatch::Make(std::make_shared<arrow::Schema>(fields), num_rows, columns);
+
+ AggregateDescription description {
+ .function = getHouseFunction(types),
+ .arguments = arg_positions,
+ .column_name = result_name
+ };
+
+ auto input_stream = std::make_shared<OneBlockInputStream>(batch);
+
+ // no agg keys, final aggregate states
+ Aggregator::Params agg_params(false, input_stream->getHeader(), {}, {description}, false);
+ AggregatingBlockInputStream agg_stream(input_stream, agg_params, true);
+
+ auto result_batch = agg_stream.read();
+ if (!result_batch || result_batch->num_rows() != 1)
+ return arrow::Status::Invalid("unexpected arrgerate result");
+ if (agg_stream.read())
+ return arrow::Status::Invalid("unexpected second batch in aggregate result");
+
+ auto res_column = result_batch->GetColumnByName(result_name);
+ if (!res_column || res_column->length() != 1)
+ return arrow::Status::Invalid("no result value");
+
+ return res_column->GetScalar(0);
+ }
+};
+
+class ArrowGroupBy : public arrow::compute::ScalarAggregateFunction
+{
+public:
+ ArrowGroupBy(std::string name)
+ : arrow::compute::ScalarAggregateFunction(std::move(name), arrow::compute::Arity::VarArgs(1), nullptr)
+ {}
+
+ arrow::Result<arrow::Datum> Execute(
+ const std::vector<arrow::Datum>& args,
+ const arrow::compute::FunctionOptions* options,
+ arrow::compute::ExecContext* /*ctx*/) const override
+ {
+ if (args.empty())
+ return arrow::Status::Invalid("GROUP BY without arguments");
+ if (!options)
+ return arrow::Status::Invalid("GROUP BY without options");
+
+ auto* opts = dynamic_cast<const GroupByOptions*>(options);
+ if (!opts || !opts->schema)
+ return arrow::Status::Invalid("Wrong GROUP BY options");
+ if ((int)args.size() != opts->schema->num_fields())
+ return arrow::Status::Invalid("Wrong GROUP BY arguments count");
+
+ // Find needed columns
+ std::unordered_set<std::string> needed_columns;
+ needed_columns.reserve(opts->assigns.size());
+ for (auto& assign : opts->assigns)
+ {
+ if (assign.function != AggFunctionId::AGG_UNSPECIFIED)
+ {
+ for (auto& agg_arg : assign.arguments)
+ needed_columns.insert(agg_arg);
+ }
+ else
+ needed_columns.insert(assign.result_column);
+ }
+
+ // Make batch with needed columns
+ std::shared_ptr<arrow::RecordBatch> batch;
+ {
+ std::vector<std::shared_ptr<arrow::Array>> columns;
+ std::vector<std::shared_ptr<arrow::Field>> fields;
+ columns.reserve(needed_columns.size());
+ fields.reserve(needed_columns.size());
+
+ int64_t num_rows = 0;
+ for (int i = 0; i < opts->schema->num_fields(); ++i) {
+ auto& datum = args[i];
+ auto& field = opts->schema->field(i);
+
+ if (!needed_columns.count(field->name()))
+ continue;
+
+ if (datum.is_array())
+ {
+ if (num_rows && num_rows != datum.mutable_array()->length)
+ return arrow::Status::Invalid("Arrays have different length");
+ num_rows = datum.mutable_array()->length;
+ }
+ else if (!datum.is_scalar())
+ return arrow::Status::Invalid("Bad scalar: '" + field->name() + "'");
+ }
+ if (!num_rows) // All datums are scalars
+ num_rows = 1;
+
+ for (int i = 0; i < opts->schema->num_fields(); ++i) {
+ auto& datum = args[i];
+ auto& field = opts->schema->field(i);
+
+ if (!needed_columns.count(field->name()))
+ continue;
+
+ if (datum.is_scalar())
+ {
+ // TODO: better GROUP BY over scalars
+ auto res = arrow::MakeArrayFromScalar(*datum.scalar(), num_rows);
+ if (!res.ok())
+ return arrow::Status::Invalid("Bad scalar: '" + field->name() + "'");
+ columns.push_back(*res);
+ }
+ else
+ columns.push_back(datum.make_array());
+
+ fields.push_back(field);
+ }
+
+ batch = arrow::RecordBatch::Make(std::make_shared<arrow::Schema>(fields), num_rows, columns);
+ if (!batch)
+ return arrow::Status::Invalid("Wrong GROUP BY arguments: cannot make batch");
+ }
+
+ // Make aggregats descriptions
+ std::vector<AggregateDescription> descriptions;
+ ColumnNumbers keys;
+ {
+ descriptions.reserve(opts->assigns.size());
+ keys.reserve(opts->assigns.size());
+
+ auto& schema = batch->schema();
+
+ for (auto& assign : opts->assigns)
+ {
+ if (assign.function != AggFunctionId::AGG_UNSPECIFIED)
+ {
+ ColumnNumbers arg_positions;
+ arg_positions.reserve(assign.arguments.size());
+ DataTypes types;
+ types.reserve(assign.arguments.size());
+
+ for (auto& agg_arg : assign.arguments) {
+ int pos = schema->GetFieldIndex(agg_arg);
+ if (pos < 0)
+ return arrow::Status::Invalid("Unexpected aggregate function argument in GROUP BY");
+ arg_positions.push_back(pos);
+ types.push_back(schema->field(pos)->type());
+ }
+
+ AggregateFunctionPtr func = GetAggregateFunction(assign.function, types);
+ if (!func)
+ return arrow::Status::Invalid("Unexpected agregate function in GROUP BY");
+
+ descriptions.emplace_back(AggregateDescription{
+ .function = func,
+ .arguments = arg_positions,
+ .column_name = assign.result_column
+ });
+ } else {
+ int pos = schema->GetFieldIndex(assign.result_column);
+ if (pos < 0)
+ return arrow::Status::Invalid("Unexpected key in GROUP BY: '" + assign.result_column + "'");
+ keys.push_back(pos);
+ }
+ }
+ }
+
+ // GROUP BY
+
+ auto input_stream = std::make_shared<OneBlockInputStream>(batch);
+
+ Aggregator::Params agg_params(false, input_stream->getHeader(), keys, descriptions, false);
+ AggregatingBlockInputStream agg_stream(input_stream, agg_params, true);
+
+ auto result_batch = agg_stream.read();
+ if (!result_batch || result_batch->num_rows() == 0)
+ return arrow::Status::Invalid("unexpected arrgerate result");
+ if (agg_stream.read())
+ return arrow::Status::Invalid("unexpected second batch in aggregate result");
+
+ return arrow::Result<arrow::Datum>(result_batch);
+ }
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.cpp b/ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.cpp
new file mode 100644
index 0000000000..87eccca5e4
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.cpp
@@ -0,0 +1,31 @@
+#include <AggregateFunctions/IAggregateFunction.h>
+#include <AggregateFunctions/AggregateFunctionMinMaxAny.h>
+#include <AggregateFunctions/AggregateFunctionCount.h>
+#include <AggregateFunctions/AggregateFunctionSum.h>
+#include <AggregateFunctions/AggregateFunctionAvg.h>
+
+namespace CH
+{
+
+AggregateFunctionPtr GetAggregateFunction(AggFunctionId id, const DataTypes & argument_types)
+{
+ switch (id) {
+ case AggFunctionId::AGG_ANY:
+ return WrappedAny("").getHouseFunction(argument_types);
+ case AggFunctionId::AGG_COUNT:
+ return WrappedCount("").getHouseFunction(argument_types);
+ case AggFunctionId::AGG_MIN:
+ return WrappedMin("").getHouseFunction(argument_types);
+ case AggFunctionId::AGG_MAX:
+ return WrappedMax("").getHouseFunction(argument_types);
+ case AggFunctionId::AGG_SUM:
+ return WrappedSum("").getHouseFunction(argument_types);
+ case AggFunctionId::AGG_AVG:
+ return WrappedAvg("").getHouseFunction(argument_types);
+ default:
+ break;
+ }
+ return {};
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.h b/ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.h
new file mode 100644
index 0000000000..264c44a4fc
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.h
@@ -0,0 +1,520 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <cstddef>
+#include <memory>
+#include <vector>
+#include <type_traits>
+
+namespace CH
+{
+
+class Arena;
+class ReadBuffer;
+class WriteBuffer;
+
+using AggregateDataPtr = char *;
+using ConstAggregateDataPtr = const char *;
+
+class IAggregateFunction;
+using AggregateFunctionPtr = std::shared_ptr<const IAggregateFunction>;
+struct AggregateFunctionProperties;
+
+/** Aggregate functions interface.
+ * Instances of classes with this interface do not contain the data itself for aggregation,
+ * but contain only metadata (description) of the aggregate function,
+ * as well as methods for creating, deleting and working with data.
+ * The data resulting from the aggregation (intermediate computing states) is stored in other objects
+ * (which can be created in some memory pool),
+ * and IAggregateFunction is the external interface for manipulating them.
+ */
+class IAggregateFunction : public std::enable_shared_from_this<IAggregateFunction>
+{
+public:
+ IAggregateFunction(const DataTypes & argument_types_, const Array & parameters_)
+ : argument_types(argument_types_), parameters(parameters_) {}
+
+ /// Get the result type.
+ virtual DataTypePtr getReturnType() const = 0;
+#if 0
+ /// Get the data type of internal state. By default it is AggregateFunction(name(params), argument_types...).
+ virtual DataTypePtr getStateType() const;
+#endif
+
+ virtual ~IAggregateFunction() = default;
+
+ /** Data manipulating functions. */
+
+ /** Create empty data for aggregation with `placement new` at the specified location.
+ * You will have to destroy them using the `destroy` method.
+ */
+ virtual void create(AggregateDataPtr __restrict place) const = 0;
+
+ /// Delete data for aggregation.
+ virtual void destroy(AggregateDataPtr __restrict place) const noexcept = 0;
+
+ /// It is not necessary to delete data.
+ virtual bool hasTrivialDestructor() const = 0;
+
+ /// Get `sizeof` of structure with data.
+ virtual size_t sizeOfData() const = 0;
+
+ /// How the data structure should be aligned.
+ virtual size_t alignOfData() const = 0;
+
+ /** Adds a value into aggregation data on which place points to.
+ * columns points to columns containing arguments of aggregation function.
+ * row_num is number of row which should be added.
+ * Additional parameter arena should be used instead of standard memory allocator if the addition requires memory allocation.
+ */
+ virtual void add(AggregateDataPtr __restrict place, const IColumn ** columns, size_t row_num, Arena * arena) const = 0;
+
+ /// Merges state (on which place points to) with other state of current aggregation function.
+ virtual void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs, Arena * arena) const = 0;
+#if 0
+ /// Serializes state (to transmit it over the network, for example).
+ virtual void serialize(ConstAggregateDataPtr __restrict place, WriteBuffer & buf) const = 0;
+
+ /// Deserializes state. This function is called only for empty (just created) states.
+ virtual void deserialize(AggregateDataPtr __restrict place, ReadBuffer & buf, Arena * arena) const = 0;
+#endif
+ /// Returns true if a function requires Arena to handle own states (see add(), merge(), deserialize()).
+ virtual bool allocatesMemoryInArena() const = 0;
+
+ /// Inserts results into a column. This method might modify the state (e.g.
+ /// sort an array), so must be called once, from single thread. The state
+ /// must remain valid though, and the subsequent calls to add/merge/
+ /// insertResultInto must work correctly. This kind of call sequence occurs
+ /// in `runningAccumulate`, or when calculating an aggregate function as a
+ /// window function.
+ virtual void insertResultInto(AggregateDataPtr __restrict place, MutableColumn & to, Arena * arena) const = 0;
+
+ /** Returns true for aggregate functions of type -State
+ * They are executed as other aggregate functions, but not finalized (return an aggregation state that can be combined with another).
+ * Also returns true when the final value of this aggregate function contains State of other aggregate function inside.
+ */
+ virtual bool isState() const { return false; }
+
+ /** The inner loop that uses the function pointer is better than using the virtual function.
+ * The reason is that in the case of virtual functions GCC 5.1.2 generates code,
+ * which, at each iteration of the loop, reloads the function address (the offset value in the virtual function table) from memory to the register.
+ * This gives a performance drop on simple queries around 12%.
+ * After the appearance of better compilers, the code can be removed.
+ */
+ using AddFunc = void (*)(const IAggregateFunction *, AggregateDataPtr, const IColumn **, size_t, Arena *);
+ virtual AddFunc getAddressOfAddFunction() const = 0;
+
+ /** Contains a loop with calls to "add" function. You can collect arguments into array "places"
+ * and do a single call to "addBatch" for devirtualization and inlining.
+ */
+ virtual void addBatch( /// NOLINT
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset,
+ const IColumn ** columns,
+ Arena * arena,
+ ssize_t if_argument_pos = -1) const = 0;
+
+ virtual void mergeBatch(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset,
+ const AggregateDataPtr * rhs,
+ Arena * arena) const = 0;
+
+ /** The same for single place.
+ */
+ virtual void addBatchSinglePlace( /// NOLINT
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr __restrict place,
+ const IColumn ** columns,
+ Arena * arena,
+ ssize_t if_argument_pos = -1) const = 0;
+
+ /** The case when the aggregation key is UInt8
+ * and pointers to aggregation states are stored in AggregateDataPtr[256] lookup table.
+ */
+ virtual void addBatchLookupTable8(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset,
+ std::function<void(AggregateDataPtr &)> init,
+ const UInt8 * key,
+ const IColumn ** columns,
+ Arena * arena) const = 0;
+
+ /** Insert result of aggregate function into result column with batch size.
+ * If destroy_place_after_insert is true. Then implementation of this method
+ * must destroy aggregate place if insert state into result column was successful.
+ * All places that were not inserted must be destroyed if there was exception during insert into result column.
+ */
+ virtual void insertResultIntoBatch(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset,
+ MutableColumn & to,
+ Arena * arena,
+ bool destroy_place_after_insert) const = 0;
+
+ /** Destroy batch of aggregate places.
+ */
+ virtual void destroyBatch(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset) const noexcept = 0;
+
+ const DataTypes & getArgumentTypes() const { return argument_types; }
+ const Array & getParameters() const { return parameters; }
+
+protected:
+ DataTypes argument_types;
+ Array parameters;
+};
+
+
+/// Implement method to obtain an address of 'add' function.
+template <typename Derived>
+class IAggregateFunctionHelper : public IAggregateFunction
+{
+private:
+ static void addFree(const IAggregateFunction * that, AggregateDataPtr place, const IColumn ** columns, size_t row_num, Arena * arena)
+ {
+ static_cast<const Derived &>(*that).add(place, columns, row_num, arena);
+ }
+
+public:
+ IAggregateFunctionHelper(const DataTypes & argument_types_, const Array & parameters_)
+ : IAggregateFunction(argument_types_, parameters_) {}
+
+ AddFunc getAddressOfAddFunction() const override { return &addFree; }
+
+ void addBatch( /// NOLINT
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset,
+ const IColumn ** columns,
+ Arena * arena,
+ ssize_t if_argument_pos = -1) const override
+ {
+ if (if_argument_pos >= 0)
+ {
+ const auto & flags = assert_cast<const ColumnUInt8 &>(*columns[if_argument_pos]).raw_values();
+ for (size_t i = row_begin; i < row_end; ++i)
+ {
+ if (flags[i] && places[i])
+ static_cast<const Derived *>(this)->add(places[i] + place_offset, columns, i, arena);
+ }
+ }
+ else
+ {
+ for (size_t i = row_begin; i < row_end; ++i)
+ if (places[i])
+ static_cast<const Derived *>(this)->add(places[i] + place_offset, columns, i, arena);
+ }
+ }
+
+ void mergeBatch(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset,
+ const AggregateDataPtr * rhs,
+ Arena * arena) const override
+ {
+ for (size_t i = row_begin; i < row_end; ++i)
+ if (places[i])
+ static_cast<const Derived *>(this)->merge(places[i] + place_offset, rhs[i], arena);
+ }
+
+ void addBatchSinglePlace( /// NOLINT
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr __restrict place,
+ const IColumn ** columns,
+ Arena * arena,
+ ssize_t if_argument_pos = -1) const override
+ {
+ if (if_argument_pos >= 0)
+ {
+ const auto & flags = assert_cast<const ColumnUInt8 &>(*columns[if_argument_pos]).raw_values();
+ for (size_t i = row_begin; i < row_end; ++i)
+ {
+ if (flags[i])
+ static_cast<const Derived *>(this)->add(place, columns, i, arena);
+ }
+ }
+ else
+ {
+ for (size_t i = row_begin; i < row_end; ++i)
+ static_cast<const Derived *>(this)->add(place, columns, i, arena);
+ }
+ }
+
+ void addBatchLookupTable8(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * map,
+ size_t place_offset,
+ std::function<void(AggregateDataPtr &)> init,
+ const UInt8 * key,
+ const IColumn ** columns,
+ Arena * arena) const override
+ {
+ static constexpr size_t UNROLL_COUNT = 8;
+
+ size_t i = row_begin;
+
+ size_t size_unrolled = (row_end - row_begin) / UNROLL_COUNT * UNROLL_COUNT;
+ for (; i < size_unrolled; i += UNROLL_COUNT)
+ {
+ AggregateDataPtr places[UNROLL_COUNT];
+ for (size_t j = 0; j < UNROLL_COUNT; ++j)
+ {
+ AggregateDataPtr & place = map[key[i + j]];
+ if (unlikely(!place))
+ init(place);
+
+ places[j] = place;
+ }
+
+ for (size_t j = 0; j < UNROLL_COUNT; ++j)
+ static_cast<const Derived *>(this)->add(places[j] + place_offset, columns, i + j, arena);
+ }
+
+ for (; i < row_end; ++i)
+ {
+ AggregateDataPtr & place = map[key[i]];
+ if (unlikely(!place))
+ init(place);
+ static_cast<const Derived *>(this)->add(place + place_offset, columns, i, arena);
+ }
+ }
+
+ void insertResultIntoBatch(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset,
+ MutableColumn & to,
+ Arena * arena,
+ bool destroy_place_after_insert) const override
+ {
+ size_t batch_index = row_begin;
+
+ try
+ {
+ for (; batch_index < row_end; ++batch_index)
+ {
+ static_cast<const Derived *>(this)->insertResultInto(places[batch_index] + place_offset, to, arena);
+
+ if (destroy_place_after_insert)
+ static_cast<const Derived *>(this)->destroy(places[batch_index] + place_offset);
+ }
+ }
+ catch (...)
+ {
+ for (size_t destroy_index = batch_index; destroy_index < row_end; ++destroy_index)
+ static_cast<const Derived *>(this)->destroy(places[destroy_index] + place_offset);
+
+ throw;
+ }
+ }
+
+ void destroyBatch(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * places,
+ size_t place_offset) const noexcept override
+ {
+ for (size_t i = row_begin; i < row_end; ++i)
+ {
+ static_cast<const Derived *>(this)->destroy(places[i] + place_offset);
+ }
+ }
+};
+
+
+/// Implements several methods for manipulation with data. T - type of structure with data for aggregation.
+template <typename T, typename Derived>
+class IAggregateFunctionDataHelper : public IAggregateFunctionHelper<Derived>
+{
+protected:
+ using Data = T;
+
+ static Data & data(AggregateDataPtr __restrict place) { return *reinterpret_cast<Data *>(place); }
+ static const Data & data(ConstAggregateDataPtr __restrict place) { return *reinterpret_cast<const Data *>(place); }
+
+public:
+ // Derived class can `override` this to flag that DateTime64 is not supported.
+ static constexpr bool DateTime64Supported = true;
+
+ IAggregateFunctionDataHelper(const DataTypes & argument_types_, const Array & parameters_)
+ : IAggregateFunctionHelper<Derived>(argument_types_, parameters_) {}
+
+ void create(AggregateDataPtr __restrict place) const override /// NOLINT
+ {
+ new (place) Data;
+ }
+
+ void destroy(AggregateDataPtr __restrict place) const noexcept override
+ {
+ data(place).~Data();
+ }
+
+ bool hasTrivialDestructor() const override
+ {
+ return std::is_trivially_destructible_v<Data>;
+ }
+
+ size_t sizeOfData() const override
+ {
+ return sizeof(Data);
+ }
+
+ size_t alignOfData() const override
+ {
+ return alignof(Data);
+ }
+
+ void addBatchLookupTable8(
+ size_t row_begin,
+ size_t row_end,
+ AggregateDataPtr * map,
+ size_t place_offset,
+ std::function<void(AggregateDataPtr &)> init,
+ const UInt8 * key,
+ const IColumn ** columns,
+ Arena * arena) const override
+ {
+ const Derived & func = *static_cast<const Derived *>(this);
+
+ /// If the function is complex or too large, use more generic algorithm.
+
+ if (func.allocatesMemoryInArena() || sizeof(Data) > 16 || func.sizeOfData() != sizeof(Data))
+ {
+ IAggregateFunctionHelper<Derived>::addBatchLookupTable8(row_begin, row_end, map, place_offset, init, key, columns, arena);
+ return;
+ }
+
+ /// Will use UNROLL_COUNT number of lookup tables.
+
+ static constexpr size_t UNROLL_COUNT = 4;
+
+ std::unique_ptr<Data[]> places{new Data[256 * UNROLL_COUNT]};
+ bool has_data[256 * UNROLL_COUNT]{}; /// Separate flags array to avoid heavy initialization.
+
+ size_t i = row_begin;
+
+ /// Aggregate data into different lookup tables.
+
+ size_t size_unrolled = (row_end - row_begin) / UNROLL_COUNT * UNROLL_COUNT;
+ for (; i < size_unrolled; i += UNROLL_COUNT)
+ {
+ for (size_t j = 0; j < UNROLL_COUNT; ++j)
+ {
+ size_t idx = j * 256 + key[i + j];
+ if (unlikely(!has_data[idx]))
+ {
+ new (&places[idx]) Data;
+ has_data[idx] = true;
+ }
+ func.add(reinterpret_cast<char *>(&places[idx]), columns, i + j, nullptr);
+ }
+ }
+
+ /// Merge data from every lookup table to the final destination.
+
+ for (size_t k = 0; k < 256; ++k)
+ {
+ for (size_t j = 0; j < UNROLL_COUNT; ++j)
+ {
+ size_t idx = j * 256 + k;
+ if (has_data[idx])
+ {
+ AggregateDataPtr & place = map[k];
+ if (unlikely(!place))
+ init(place);
+
+ func.merge(place + place_offset, reinterpret_cast<const char *>(&places[idx]), nullptr);
+ }
+ }
+ }
+
+ /// Process tails and add directly to the final destination.
+
+ for (; i < row_end; ++i)
+ {
+ size_t k = key[i];
+ AggregateDataPtr & place = map[k];
+ if (unlikely(!place))
+ init(place);
+
+ func.add(place + place_offset, columns, i, nullptr);
+ }
+ }
+};
+
+
+/// Properties of aggregate function that are independent of argument types and parameters.
+struct AggregateFunctionProperties
+{
+ /** When the function is wrapped with Null combinator,
+ * should we return Nullable type with NULL when no values were aggregated
+ * or we should return non-Nullable type with default value (example: count, countDistinct).
+ */
+ bool returns_default_when_only_null = false;
+
+ /** Result varies depending on the data order (example: groupArray).
+ * Some may also name this property as "non-commutative".
+ */
+ bool is_order_dependent = false;
+};
+
+enum class AggFunctionId {
+ AGG_UNSPECIFIED = 0,
+ AGG_ANY = 1,
+ AGG_COUNT = 2,
+ AGG_MIN = 3,
+ AGG_MAX = 4,
+ AGG_SUM = 5,
+ AGG_AVG = 6,
+ //AGG_VAR = 7,
+ //AGG_COVAR = 8,
+ //AGG_STDDEV = 9,
+ //AGG_CORR = 10,
+ //AGG_ARG_MIN = 11,
+ //AGG_ARG_MAX = 12,
+ //AGG_COUNT_DISTINCT = 13,
+ //AGG_QUANTILES = 14,
+ //AGG_TOP_COUNT = 15,
+ //AGG_TOP_SUM = 16,
+};
+
+struct GroupByOptions : public arrow::compute::ScalarAggregateOptions {
+ // We have to return aggregates + aggregate keys in result.
+ // We use pair {AGG_UNSPECIFIED, result_column} to specify a key.
+ // Then we could place aggregates and keys in one vector to set their order in result.
+ struct Assign {
+ AggFunctionId function = AggFunctionId::AGG_UNSPECIFIED;
+ std::string result_column;
+ std::vector<std::string> arguments;
+ };
+
+ std::shared_ptr<arrow::Schema> schema; // types and names of input arguments
+ std::vector<Assign> assigns; // aggregates and keys in needed result order
+};
+
+AggregateFunctionPtr GetAggregateFunction(AggFunctionId, const DataTypes & argument_types);
+
+}
diff --git a/ydb/library/arrow_clickhouse/AggregationCommon.h b/ydb/library/arrow_clickhouse/AggregationCommon.h
new file mode 100644
index 0000000000..ecd475eacc
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/AggregationCommon.h
@@ -0,0 +1,337 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <array>
+
+#include <Columns/ColumnsCommon.h>
+#include <Common/HashTable/Hash.h>
+#include <Common/memcpySmall.h>
+
+#include <common/StringRef.h>
+
+#if defined(__SSSE3__) && !defined(MEMORY_SANITIZER)
+#include <tmmintrin.h>
+#endif
+
+
+namespace CH
+{
+
+/// When packing the values of nullable columns at a given row, we have to
+/// store the fact that these values are nullable or not. This is achieved
+/// by encoding this information as a bitmap. Let S be the size in bytes of
+/// a packed values binary blob and T the number of bytes we may place into
+/// this blob, the size that the bitmap shall occupy in the blob is equal to:
+/// ceil(T/8). Thus we must have: S = T + ceil(T/8). Below we indicate for
+/// each value of S, the corresponding value of T, and the bitmap size:
+///
+/// 32,28,4
+/// 16,14,2
+/// 8,7,1
+/// 4,3,1
+/// 2,1,1
+///
+
+namespace
+{
+
+template <typename T>
+constexpr auto getBitmapSize()
+{
+ return
+ (sizeof(T) == 32) ?
+ 4 :
+ (sizeof(T) == 16) ?
+ 2 :
+ ((sizeof(T) == 8) ?
+ 1 :
+ ((sizeof(T) == 4) ?
+ 1 :
+ ((sizeof(T) == 2) ?
+ 1 :
+ 0)));
+}
+
+}
+
+template<typename T, size_t step>
+void fillFixedBatch(size_t num_rows, const T * source, T * dest)
+{
+ for (size_t i = 0; i < num_rows; ++i)
+ {
+ *dest = *source;
+ ++source;
+ dest += step;
+ }
+}
+
+/// Move keys of size T into binary blob, starting from offset.
+/// It is assumed that offset is aligned to sizeof(T).
+/// Example: sizeof(key) = 16, sizeof(T) = 4, offset = 8
+/// out[0] : [--------****----]
+/// out[1] : [--------****----]
+/// ...
+template<typename T, typename Key>
+void fillFixedBatch(size_t keys_size, const ColumnRawPtrs & key_columns, const Sizes & key_sizes, PaddedPODArray<Key> & out, size_t & offset)
+{
+ for (size_t i = 0; i < keys_size; ++i)
+ {
+ if (key_sizes[i] == sizeof(T))
+ {
+ const auto * column = key_columns[i];
+ size_t num_rows = column->length();
+ out.resize_fill(num_rows);
+#if 0
+ /// Note: here we violate strict aliasing.
+ /// It should be ok as log as we do not reffer to any value from `out` before filling.
+ const char * source = assert_cast<const ColumnVectorHelper *>(column)->getRawDataBegin<sizeof(T)>();
+ T * dest = reinterpret_cast<T *>(reinterpret_cast<char *>(out.data()) + offset);
+ fillFixedBatch<T, sizeof(Key) / sizeof(T)>(num_rows, reinterpret_cast<const T *>(source), dest);
+ offset += sizeof(T);
+#else
+ T * dest = reinterpret_cast<T *>(reinterpret_cast<char *>(out.data()) + offset);
+ switch (sizeof(T))
+ {
+ case 1:
+ case 2:
+ case 4:
+ case 8:
+ {
+ const uint8_t * source = assert_cast<const ColumnUInt8 *>(column)->raw_values();
+ fillFixedBatch<T, sizeof(Key) / sizeof(T)>(num_rows, reinterpret_cast<const T *>(source), dest);
+ break;
+ }
+ default:
+ {
+ const uint8_t * source = assert_cast<const ColumnFixedString *>(column)->raw_values();
+ fillFixedBatch<T, sizeof(Key) / sizeof(T)>(num_rows, reinterpret_cast<const T *>(source), dest);
+ break;
+ }
+ }
+ offset += sizeof(T);
+#endif
+ }
+ }
+}
+
+/// Pack into a binary blob of type T a set of fixed-size keys. Granted that all the keys fit into the
+/// binary blob. Keys are placed starting from the longest one.
+template <typename T>
+void packFixedBatch(size_t keys_size, const ColumnRawPtrs & key_columns, const Sizes & key_sizes, PaddedPODArray<T> & out)
+{
+ size_t offset = 0;
+ fillFixedBatch<UInt128>(keys_size, key_columns, key_sizes, out, offset);
+ fillFixedBatch<UInt64>(keys_size, key_columns, key_sizes, out, offset);
+ fillFixedBatch<UInt32>(keys_size, key_columns, key_sizes, out, offset);
+ fillFixedBatch<UInt16>(keys_size, key_columns, key_sizes, out, offset);
+ fillFixedBatch<UInt8>(keys_size, key_columns, key_sizes, out, offset);
+}
+
+template <typename T>
+using KeysNullMap = std::array<UInt8, getBitmapSize<T>()>;
+
+/// Pack into a binary blob of type T a set of fixed-size keys. Granted that all the keys fit into the
+/// binary blob, they are disposed in it consecutively.
+template <typename T>
+static inline T ALWAYS_INLINE packFixed(
+ size_t i, size_t keys_size, const ColumnRawPtrs & key_columns, const Sizes & key_sizes)
+{
+ T key{};
+ char * bytes = reinterpret_cast<char *>(&key);
+ size_t offset = 0;
+
+ for (size_t j = 0; j < keys_size; ++j)
+ {
+ size_t index = i;
+ const IColumn * column = key_columns[j];
+
+ switch (key_sizes[j])
+ {
+ case 1:
+ {
+ memcpy(bytes + offset, assert_cast<const ColumnUInt8 *>(column)->raw_values() + index, 1);
+ offset += 1;
+ }
+ break;
+ case 2:
+ if constexpr (sizeof(T) >= 2) /// To avoid warning about memcpy exceeding object size.
+ {
+ memcpy(bytes + offset, assert_cast<const ColumnUInt16 *>(column)->raw_values() + index, 2);
+ offset += 2;
+ }
+ break;
+ case 4:
+ if constexpr (sizeof(T) >= 4)
+ {
+ memcpy(bytes + offset, assert_cast<const ColumnUInt32 *>(column)->raw_values() + index, 4);
+ offset += 4;
+ }
+ break;
+ case 8:
+ if constexpr (sizeof(T) >= 8)
+ {
+ memcpy(bytes + offset, assert_cast<const ColumnUInt64 *>(column)->raw_values() + index, 8);
+ offset += 8;
+ }
+ break;
+ default:
+ memcpy(bytes + offset, assert_cast<const ColumnFixedString *>(column)->raw_values() + index * key_sizes[j], key_sizes[j]);
+ offset += key_sizes[j];
+ }
+ }
+
+ return key;
+}
+
+/// Similar as above but supports nullable values.
+template <typename T>
+static inline T ALWAYS_INLINE packFixed(
+ size_t i, size_t keys_size, const ColumnRawPtrs & key_columns, const Sizes & key_sizes,
+ const KeysNullMap<T> & bitmap)
+{
+ union
+ {
+ T key;
+ char bytes[sizeof(key)] = {};
+ };
+
+ size_t offset = 0;
+
+ static constexpr auto bitmap_size = std::tuple_size<KeysNullMap<T>>::value;
+ static constexpr bool has_bitmap = bitmap_size > 0;
+
+ if (has_bitmap)
+ {
+ memcpy(bytes + offset, bitmap.data(), bitmap_size * sizeof(UInt8));
+ offset += bitmap_size;
+ }
+
+ for (size_t j = 0; j < keys_size; ++j)
+ {
+ bool is_null;
+
+ if (!has_bitmap)
+ is_null = false;
+ else
+ {
+ size_t bucket = j / 8;
+ size_t off = j % 8;
+ is_null = ((bitmap[bucket] >> off) & 1) == 1;
+ }
+
+ if (is_null)
+ continue;
+
+ switch (key_sizes[j])
+ {
+ case 1:
+ memcpy(bytes + offset, assert_cast<const ColumnUInt8 *>(key_columns[j])->raw_values() + i, 1);
+ offset += 1;
+ break;
+ case 2:
+ memcpy(bytes + offset, assert_cast<const ColumnUInt16 *>(key_columns[j])->raw_values() + i, 2);
+ offset += 2;
+ break;
+ case 4:
+ memcpy(bytes + offset, assert_cast<const ColumnUInt32 *>(key_columns[j])->raw_values() + i, 4);
+ offset += 4;
+ break;
+ case 8:
+ memcpy(bytes + offset, assert_cast<const ColumnUInt64 *>(key_columns[j])->raw_values() + i, 8);
+ offset += 8;
+ break;
+ default:
+ memcpy(bytes + offset, assert_cast<const ColumnFixedString *>(key_columns[j])->raw_values() + i * key_sizes[j], key_sizes[j]);
+ offset += key_sizes[j];
+ }
+ }
+
+ return key;
+}
+
+
+/// Hash a set of keys into a UInt128 value.
+static inline UInt128 ALWAYS_INLINE hash128(size_t row, size_t keys_size, const ColumnRawPtrs & key_columns)
+{
+ UInt128 key;
+ SipHash hash;
+
+ for (size_t j = 0; j < keys_size; ++j)
+ updateHashWithValue(*key_columns[j], row, hash);
+
+ hash.get128(key);
+ return key;
+}
+
+
+/// Copy keys to the pool. Then put into pool StringRefs to them and return the pointer to the first.
+static inline StringRef * ALWAYS_INLINE placeKeysInPool(
+ size_t keys_size, StringRefs & keys, Arena & pool)
+{
+ for (size_t j = 0; j < keys_size; ++j)
+ {
+ char * place = pool.alloc(keys[j].size);
+ memcpySmallAllowReadWriteOverflow15(place, keys[j].data, keys[j].size);
+ keys[j].data = place;
+ }
+
+ /// Place the StringRefs on the newly copied keys in the pool.
+ char * res = pool.alignedAlloc(keys_size * sizeof(StringRef), alignof(StringRef));
+ memcpySmallAllowReadWriteOverflow15(res, keys.data(), keys_size * sizeof(StringRef));
+
+ return reinterpret_cast<StringRef *>(res);
+}
+
+
+/** Serialize keys into a continuous chunk of memory.
+ */
+static inline StringRef ALWAYS_INLINE serializeKeysToPoolContiguous(
+ size_t row, size_t keys_size, const ColumnRawPtrs & key_columns, Arena & pool)
+{
+ const char * begin = nullptr;
+
+ size_t sum_size = 0;
+ for (size_t j = 0; j < keys_size; ++j)
+ sum_size += serializeValueIntoArena(*key_columns[j], row, pool, begin).size;
+
+ return {begin, sum_size};
+}
+
+
+/** Pack elements with shuffle instruction.
+ * See the explanation in ColumnsHashing.h
+ */
+#if defined(__SSSE3__) && !defined(MEMORY_SANITIZER)
+template <typename T>
+static T inline packFixedShuffle(
+ const char * __restrict * __restrict srcs,
+ size_t num_srcs,
+ const size_t * __restrict elem_sizes,
+ size_t idx,
+ const uint8_t * __restrict masks)
+{
+ assert(num_srcs > 0);
+
+ __m128i res = _mm_shuffle_epi8(
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(srcs[0] + elem_sizes[0] * idx)),
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(masks)));
+
+ for (size_t i = 1; i < num_srcs; ++i)
+ {
+ res = _mm_xor_si128(res,
+ _mm_shuffle_epi8(
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(srcs[i] + elem_sizes[i] * idx)),
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(&masks[i * sizeof(T)]))));
+ }
+
+ T out;
+ __builtin_memcpy(&out, &res, sizeof(T));
+ return out;
+}
+#endif
+
+}
diff --git a/ydb/library/arrow_clickhouse/Aggregator.cpp b/ydb/library/arrow_clickhouse/Aggregator.cpp
new file mode 100644
index 0000000000..5a6a89befe
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Aggregator.cpp
@@ -0,0 +1,1554 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#include "Aggregator.h"
+#include <DataStreams/IBlockInputStream.h>
+
+
+namespace CH
+{
+
+AggregatedDataVariants::~AggregatedDataVariants()
+{
+ if (aggregator && !aggregator->all_aggregates_has_trivial_destructor)
+ {
+ try
+ {
+ aggregator->destroyAllAggregateStates(*this);
+ }
+ catch (...)
+ {
+ //tryLogCurrentException(__PRETTY_FUNCTION__);
+ }
+ }
+}
+
+Header Aggregator::getHeader(bool final) const
+{
+ return params.getHeader(final);
+}
+
+Header Aggregator::Params::getHeader(
+ const Header & src_header,
+ const Header & intermediate_header,
+ const ColumnNumbers & keys,
+ const AggregateDescriptions & aggregates,
+ bool final)
+{
+ ColumnsWithTypeAndName fields;
+ if (intermediate_header)
+ {
+ fields = intermediate_header->fields();
+
+ if (final)
+ {
+ for (const auto & aggregate : aggregates)
+ {
+ int agg_pos = intermediate_header->GetFieldIndex(aggregate.column_name);
+ DataTypePtr type = aggregate.function->getReturnType();
+
+ fields[agg_pos] = std::make_shared<ColumnWithTypeAndName>(aggregate.column_name, type);
+ }
+ }
+ }
+ else
+ {
+ fields.reserve(keys.size() + aggregates.size());
+
+ for (const auto & key : keys)
+ fields.push_back(src_header->field(key));
+
+ for (const auto & aggregate : aggregates)
+ {
+ size_t arguments_size = aggregate.arguments.size();
+ DataTypes argument_types(arguments_size);
+ for (size_t j = 0; j < arguments_size; ++j)
+ argument_types[j] = src_header->field(aggregate.arguments[j])->type();
+
+ DataTypePtr type;
+ if (final)
+ type = aggregate.function->getReturnType();
+ else
+ type = std::make_shared<DataTypeAggregateFunction>(
+ aggregate.function, argument_types, aggregate.parameters);
+
+ fields.emplace_back(std::make_shared<ColumnWithTypeAndName>(aggregate.column_name, type));
+ }
+ }
+ return std::make_shared<arrow::Schema>(fields);
+}
+
+
+Aggregator::Aggregator(const Params & params_)
+ : params(params_)
+{
+ aggregate_functions.resize(params.aggregates_size);
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i] = params.aggregates[i].function.get();
+
+ /// Initialize sizes of aggregation states and its offsets.
+ offsets_of_aggregate_states.resize(params.aggregates_size);
+ total_size_of_aggregate_states = 0;
+ all_aggregates_has_trivial_destructor = true;
+
+ // aggregate_states will be aligned as below:
+ // |<-- state_1 -->|<-- pad_1 -->|<-- state_2 -->|<-- pad_2 -->| .....
+ //
+ // pad_N will be used to match alignment requirement for each next state.
+ // The address of state_1 is aligned based on maximum alignment requirements in states
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ {
+ offsets_of_aggregate_states[i] = total_size_of_aggregate_states;
+
+ total_size_of_aggregate_states += params.aggregates[i].function->sizeOfData();
+
+ // aggregate states are aligned based on maximum requirement
+ align_aggregate_states = std::max(align_aggregate_states, params.aggregates[i].function->alignOfData());
+
+ // If not the last aggregate_state, we need pad it so that next aggregate_state will be aligned.
+ if (i + 1 < params.aggregates_size)
+ {
+ size_t alignment_of_next_state = params.aggregates[i + 1].function->alignOfData();
+ if ((alignment_of_next_state & (alignment_of_next_state - 1)) != 0)
+ throw Exception("Logical error: alignOfData is not 2^N");
+
+ /// Extend total_size to next alignment requirement
+ /// Add padding by rounding up 'total_size_of_aggregate_states' to be a multiplier of alignment_of_next_state.
+ total_size_of_aggregate_states = (total_size_of_aggregate_states + alignment_of_next_state - 1) / alignment_of_next_state * alignment_of_next_state;
+ }
+
+ if (!params.aggregates[i].function->hasTrivialDestructor())
+ all_aggregates_has_trivial_destructor = false;
+ }
+
+ method_chosen = chooseAggregationMethod();
+ HashMethodContext::Settings cache_settings;
+ cache_settings.max_threads = params.max_threads;
+ aggregation_state_cache = AggregatedDataVariants::createCache(method_chosen, cache_settings);
+}
+
+
+AggregatedDataVariants::Type Aggregator::chooseAggregationMethod()
+{
+ /// If no keys. All aggregating to single row.
+ if (params.keys_size == 0)
+ return AggregatedDataVariants::Type::without_key;
+
+ auto& header = (params.src_header ? params.src_header : params.intermediate_header);
+
+ DataTypes types;
+ types.reserve(params.keys_size);
+ for (const auto & pos : params.keys)
+ types.push_back(header->field(pos)->type());
+
+ size_t keys_bytes = 0;
+ size_t num_fixed_contiguous_keys = 0;
+
+ key_sizes.resize(params.keys_size);
+ for (size_t j = 0; j < params.keys.size(); ++j)
+ {
+ if (size_t fixed_size = fixedContiguousSize(types[j]))
+ {
+ ++num_fixed_contiguous_keys;
+ key_sizes[j] = fixed_size;
+ keys_bytes += fixed_size;
+ }
+ }
+
+ //if (has_nullable_key)
+ {
+ if (params.keys_size == num_fixed_contiguous_keys)
+ {
+ /// Pack if possible all the keys along with information about which key values are nulls
+ /// into a fixed 16- or 32-byte blob.
+ if (std::tuple_size<KeysNullMap<UInt128>>::value + keys_bytes <= 16)
+ return AggregatedDataVariants::Type::nullable_keys128;
+ if (std::tuple_size<KeysNullMap<UInt256>>::value + keys_bytes <= 32)
+ return AggregatedDataVariants::Type::nullable_keys256;
+ }
+
+ /// Fallback case.
+ return AggregatedDataVariants::Type::serialized;
+ }
+
+#if 0 // TODO: keys with explicit NOT NULL
+ /// No key has been found to be nullable.
+
+ /// Single numeric key.
+ if (params.keys_size == 1 && types[0]->isValueRepresentedByNumber())
+ {
+ size_t size_of_field = types[0]->getSizeOfValueInMemory();
+
+ if (size_of_field == 1)
+ return AggregatedDataVariants::Type::key8;
+ if (size_of_field == 2)
+ return AggregatedDataVariants::Type::key16;
+ if (size_of_field == 4)
+ return AggregatedDataVariants::Type::key32;
+ if (size_of_field == 8)
+ return AggregatedDataVariants::Type::key64;
+ if (size_of_field == 16)
+ return AggregatedDataVariants::Type::keys128;
+ if (size_of_field == 32)
+ return AggregatedDataVariants::Type::keys256;
+ throw Exception("Logical error: numeric column has sizeOfField not in 1, 2, 4, 8, 16, 32.");
+ }
+
+ if (params.keys_size == 1 && isFixedString(types[0]))
+ {
+ return AggregatedDataVariants::Type::key_fixed_string;
+ }
+
+ /// If all keys fits in N bits, will use hash table with all keys packed (placed contiguously) to single N-bit key.
+ if (params.keys_size == num_fixed_contiguous_keys)
+ {
+ if (keys_bytes <= 2)
+ return AggregatedDataVariants::Type::keys16;
+ if (keys_bytes <= 4)
+ return AggregatedDataVariants::Type::keys32;
+ if (keys_bytes <= 8)
+ return AggregatedDataVariants::Type::keys64;
+ if (keys_bytes <= 16)
+ return AggregatedDataVariants::Type::keys128;
+ if (keys_bytes <= 32)
+ return AggregatedDataVariants::Type::keys256;
+ }
+
+ /// If single string key - will use hash table with references to it. Strings itself are stored separately in Arena.
+ if (params.keys_size == 1 && isString(types[0]))
+ {
+ return AggregatedDataVariants::Type::key_string;
+ }
+
+ return AggregatedDataVariants::Type::serialized;
+#endif
+}
+
+void Aggregator::createAggregateStates(AggregateDataPtr & aggregate_data) const
+{
+ for (size_t j = 0; j < params.aggregates_size; ++j)
+ {
+ try
+ {
+ /** An exception may occur if there is a shortage of memory.
+ * In order that then everything is properly destroyed, we "roll back" some of the created states.
+ * The code is not very convenient.
+ */
+ aggregate_functions[j]->create(aggregate_data + offsets_of_aggregate_states[j]);
+ }
+ catch (...)
+ {
+ for (size_t rollback_j = 0; rollback_j < j; ++rollback_j)
+ {
+ aggregate_functions[rollback_j]->destroy(aggregate_data + offsets_of_aggregate_states[rollback_j]);
+ }
+
+ throw;
+ }
+ }
+}
+
+/** It's interesting - if you remove `noinline`, then gcc for some reason will inline this function, and the performance decreases (~ 10%).
+ * (Probably because after the inline of this function, more internal functions no longer be inlined.)
+ * Inline does not make sense, since the inner loop is entirely inside this function.
+ */
+template <typename Method>
+void NO_INLINE Aggregator::executeImpl(
+ Method & method,
+ Arena * aggregates_pool,
+ size_t row_begin,
+ size_t row_end,
+ ColumnRawPtrs & key_columns,
+ AggregateFunctionInstruction * aggregate_instructions,
+ bool no_more_keys,
+ AggregateDataPtr overflow_row) const
+{
+ typename Method::State state(key_columns, key_sizes, aggregation_state_cache);
+
+ if (!no_more_keys)
+ {
+ executeImplBatch<false>(method, state, aggregates_pool, row_begin, row_end, aggregate_instructions, overflow_row);
+ }
+ else
+ {
+ executeImplBatch<true>(method, state, aggregates_pool, row_begin, row_end, aggregate_instructions, overflow_row);
+ }
+}
+
+template <bool no_more_keys, typename Method>
+void NO_INLINE Aggregator::executeImplBatch(
+ Method & method,
+ typename Method::State & state,
+ Arena * aggregates_pool,
+ size_t row_begin,
+ size_t row_end,
+ AggregateFunctionInstruction * aggregate_instructions,
+ AggregateDataPtr overflow_row) const
+{
+ /// Optimization for special case when there are no aggregate functions.
+ if (params.aggregates_size == 0)
+ {
+ if constexpr (no_more_keys)
+ return;
+
+ /// For all rows.
+ AggregateDataPtr place = aggregates_pool->alloc(0);
+ for (size_t i = row_begin; i < row_end; ++i)
+ state.emplaceKey(method.data, i, *aggregates_pool).setMapped(place);
+ return;
+ }
+
+ /// Optimization for special case when aggregating by 8bit key.
+ if constexpr (!no_more_keys && std::is_same_v<Method, typename decltype(AggregatedDataVariants::key8)::element_type>)
+ {
+ //if (!has_arrays && !hasSparseArguments(aggregate_instructions))
+ {
+ for (AggregateFunctionInstruction * inst = aggregate_instructions; inst->that; ++inst)
+ {
+ inst->batch_that->addBatchLookupTable8(
+ row_begin,
+ row_end,
+ reinterpret_cast<AggregateDataPtr *>(method.data.data()),
+ inst->state_offset,
+ [&](AggregateDataPtr & aggregate_data)
+ {
+ aggregate_data = aggregates_pool->alignedAlloc(total_size_of_aggregate_states, align_aggregate_states);
+ createAggregateStates(aggregate_data);
+ },
+ state.getKeyData(),
+ inst->batch_arguments,
+ aggregates_pool);
+ }
+ return;
+ }
+ }
+
+ /// NOTE: only row_end-row_start is required, but:
+ /// - this affects only optimize_aggregation_in_order,
+ /// - this is just a pointer, so it should not be significant,
+ /// - and plus this will require other changes in the interface.
+ std::unique_ptr<AggregateDataPtr[]> places(new AggregateDataPtr[row_end]);
+
+ /// For all rows.
+ for (size_t i = row_begin; i < row_end; ++i)
+ {
+ AggregateDataPtr aggregate_data = nullptr;
+
+ if constexpr (!no_more_keys)
+ {
+ auto emplace_result = state.emplaceKey(method.data, i, *aggregates_pool);
+
+ /// If a new key is inserted, initialize the states of the aggregate functions, and possibly something related to the key.
+ if (emplace_result.isInserted())
+ {
+ /// exception-safety - if you can not allocate memory or create states, then destructors will not be called.
+ emplace_result.setMapped(nullptr);
+
+ aggregate_data = aggregates_pool->alignedAlloc(total_size_of_aggregate_states, align_aggregate_states);
+
+ {
+ createAggregateStates(aggregate_data);
+ }
+
+ emplace_result.setMapped(aggregate_data);
+ }
+ else
+ aggregate_data = emplace_result.getMapped();
+
+ assert(aggregate_data != nullptr);
+ }
+ else
+ {
+ /// Add only if the key already exists.
+ auto find_result = state.findKey(method.data, i, *aggregates_pool);
+ if (find_result.isFound())
+ aggregate_data = find_result.getMapped();
+ else
+ aggregate_data = overflow_row;
+ }
+
+ places[i] = aggregate_data;
+ }
+
+ /// Add values to the aggregate functions.
+ for (size_t i = 0; i < aggregate_functions.size(); ++i)
+ {
+ AggregateFunctionInstruction * inst = aggregate_instructions + i;
+
+ inst->batch_that->addBatch(row_begin, row_end, places.get(), inst->state_offset, inst->batch_arguments, aggregates_pool);
+ }
+}
+
+void NO_INLINE Aggregator::executeWithoutKeyImpl(
+ AggregatedDataWithoutKey & res,
+ size_t row_begin, size_t row_end,
+ AggregateFunctionInstruction * aggregate_instructions,
+ Arena * arena) const
+{
+ if (row_begin == row_end)
+ return;
+
+ /// Adding values
+ for (size_t i = 0; i < aggregate_functions.size(); ++i)
+ {
+ AggregateFunctionInstruction * inst = aggregate_instructions + i;
+
+ inst->batch_that->addBatchSinglePlace(
+ row_begin, row_end,
+ res + inst->state_offset,
+ inst->batch_arguments,
+ arena);
+ }
+}
+
+void Aggregator::prepareAggregateInstructions(Columns columns, AggregateColumns & aggregate_columns, Columns & materialized_columns,
+ AggregateFunctionInstructions & aggregate_functions_instructions) const
+{
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_columns[i].resize(params.aggregates[i].arguments.size());
+
+ aggregate_functions_instructions.resize(params.aggregates_size + 1);
+ aggregate_functions_instructions[params.aggregates_size].that = nullptr;
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ {
+ for (size_t j = 0; j < aggregate_columns[i].size(); ++j)
+ {
+ materialized_columns.push_back(columns.at(params.aggregates[i].arguments[j]));
+ aggregate_columns[i][j] = materialized_columns.back().get();
+ }
+
+ aggregate_functions_instructions[i].arguments = aggregate_columns[i].data();
+ aggregate_functions_instructions[i].state_offset = offsets_of_aggregate_states[i];
+
+ const auto * that = aggregate_functions[i];
+
+ aggregate_functions_instructions[i].that = that;
+ aggregate_functions_instructions[i].batch_arguments = aggregate_columns[i].data();
+
+ aggregate_functions_instructions[i].batch_that = that;
+ }
+}
+
+
+bool Aggregator::executeOnBlock(const Block & block,
+ AggregatedDataVariants & result,
+ ColumnRawPtrs & key_columns,
+ AggregateColumns & aggregate_columns,
+ bool & no_more_keys) const
+{
+ return executeOnBlock(block->columns(),
+ /* row_begin= */ 0, block->num_rows(),
+ result,
+ key_columns,
+ aggregate_columns,
+ no_more_keys);
+}
+
+
+bool Aggregator::executeOnBlock(Columns columns,
+ size_t row_begin, size_t row_end,
+ AggregatedDataVariants & result,
+ ColumnRawPtrs & key_columns,
+ AggregateColumns & aggregate_columns,
+ bool & no_more_keys) const
+{
+ /// `result` will destroy the states of aggregate functions in the destructor
+ result.aggregator = this;
+
+ /// How to perform the aggregation?
+ if (result.empty())
+ {
+ result.init(method_chosen);
+ result.keys_size = params.keys_size;
+ result.key_sizes = key_sizes;
+ }
+
+ /** Constant columns are not supported directly during aggregation.
+ * To make them work anyway, we materialize them.
+ */
+ Columns materialized_columns;
+
+ /// Remember the columns we will work with
+ for (size_t i = 0; i < params.keys_size; ++i)
+ {
+ materialized_columns.push_back(columns.at(params.keys[i]));
+ key_columns[i] = materialized_columns.back().get();
+ }
+
+ //NestedColumnsHolder nested_columns_holder;
+ AggregateFunctionInstructions aggregate_functions_instructions;
+ prepareAggregateInstructions(columns, aggregate_columns, materialized_columns, aggregate_functions_instructions);
+
+ if ((params.overflow_row || result.type == AggregatedDataVariants::Type::without_key) && !result.without_key)
+ {
+ AggregateDataPtr place = result.aggregates_pool->alignedAlloc(total_size_of_aggregate_states, align_aggregate_states);
+ createAggregateStates(place);
+ result.without_key = place;
+ }
+
+ /// We select one of the aggregation methods and call it.
+
+ /// For the case when there are no keys (all aggregate into one row).
+ if (result.type == AggregatedDataVariants::Type::without_key)
+ {
+ executeWithoutKeyImpl(result.without_key, row_begin, row_end, aggregate_functions_instructions.data(), result.aggregates_pool);
+ }
+ else
+ {
+ /// This is where data is written that does not fit in `max_rows_to_group_by` with `group_by_overflow_mode = any`.
+ AggregateDataPtr overflow_row_ptr = params.overflow_row ? result.without_key : nullptr;
+
+ #define M(NAME) \
+ else if (result.type == AggregatedDataVariants::Type::NAME) \
+ executeImpl(*result.NAME, result.aggregates_pool, row_begin, row_end, key_columns, aggregate_functions_instructions.data(), \
+ no_more_keys, overflow_row_ptr);
+
+ if (false) {} // NOLINT
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ }
+
+ size_t result_size = result.sizeWithoutOverflowRow();
+
+ /// Checking the constraints.
+ if (!checkLimits(result_size, no_more_keys))
+ return false;
+
+ return true;
+}
+
+
+template <typename Method>
+Block Aggregator::convertOneBucketToBlock(
+ AggregatedDataVariants & data_variants,
+ Method & method,
+ Arena * arena,
+ bool final,
+ size_t bucket) const
+{
+ Block block = prepareBlockAndFill(data_variants, final, method.data.impls[bucket].size(),
+ [bucket, &method, arena, this] (
+ MutableColumns & key_columns,
+ AggregateColumnsData & aggregate_columns,
+ MutableColumns & final_aggregate_columns,
+ bool final_)
+ {
+ convertToBlockImpl(method, method.data.impls[bucket],
+ key_columns, aggregate_columns, final_aggregate_columns, arena, final_);
+ });
+
+ //block.info.bucket_num = bucket;
+ return block;
+}
+
+
+bool Aggregator::checkLimits(size_t result_size, bool & no_more_keys) const
+{
+ if (!no_more_keys && params.max_rows_to_group_by && result_size > params.max_rows_to_group_by)
+ {
+ switch (params.group_by_overflow_mode)
+ {
+ case OverflowMode::THROW:
+ throw Exception("Limit for rows to GROUP BY exceeded");
+
+ case OverflowMode::BREAK:
+ return false;
+
+ case OverflowMode::ANY:
+ no_more_keys = true;
+ break;
+ }
+ }
+
+ return true;
+}
+
+void Aggregator::execute(const BlockInputStreamPtr & stream, AggregatedDataVariants & result)
+{
+ ColumnRawPtrs key_columns(params.keys_size);
+ AggregateColumns aggregate_columns(params.aggregates_size);
+
+ /** Used if there is a limit on the maximum number of rows in the aggregation,
+ * and if group_by_overflow_mode == ANY.
+ * In this case, new keys are not added to the set, but aggregation is performed only by
+ * keys that have already managed to get into the set.
+ */
+ bool no_more_keys = false;
+
+ /// Read all the data
+ while (Block block = stream->read())
+ {
+ if (!executeOnBlock(block, result, key_columns, aggregate_columns, no_more_keys))
+ break;
+ }
+
+ /// If there was no data, and we aggregate without keys, and we must return single row with the result of empty aggregation.
+ /// To do this, we pass a block with zero rows to aggregate.
+ if (result.empty() && params.keys_size == 0 && !params.empty_result_for_aggregation_by_empty_set)
+ {
+ auto emptyColumns = columnsFromHeader(stream->getHeader());
+ executeOnBlock(emptyColumns, 0, 0, result, key_columns, aggregate_columns, no_more_keys);
+ }
+}
+
+
+template <typename Method, typename Table>
+void Aggregator::convertToBlockImpl(
+ Method & method,
+ Table & data,
+ MutableColumns & key_columns,
+ AggregateColumnsData & aggregate_columns,
+ MutableColumns & final_aggregate_columns,
+ Arena * arena,
+ bool final) const
+{
+ if (data.empty())
+ return;
+
+ if (key_columns.size() != params.keys_size)
+ throw Exception{"Aggregate. Unexpected key columns size."};
+
+ if (final)
+ convertToBlockImplFinal<Method>(method, data, key_columns, final_aggregate_columns, arena);
+ else
+ convertToBlockImplNotFinal(method, data, key_columns, aggregate_columns);
+
+ /// In order to release memory early.
+ data.clearAndShrink();
+}
+
+
+template <typename Mapped>
+inline void Aggregator::insertAggregatesIntoColumns(
+ Mapped & mapped,
+ MutableColumns & final_aggregate_columns,
+ Arena * arena) const
+{
+ /** Final values of aggregate functions are inserted to columns.
+ * Then states of aggregate functions, that are not longer needed, are destroyed.
+ *
+ * We mark already destroyed states with "nullptr" in data,
+ * so they will not be destroyed in destructor of Aggregator
+ * (other values will be destroyed in destructor in case of exception).
+ *
+ * But it becomes tricky, because we have multiple aggregate states pointed by a single pointer in data.
+ * So, if exception is thrown in the middle of moving states for different aggregate functions,
+ * we have to catch exceptions and destroy all the states that are no longer needed,
+ * to keep the data in consistent state.
+ *
+ * It is also tricky, because there are aggregate functions with "-State" modifier.
+ * When we call "insertResultInto" for them, they insert a pointer to the state to ColumnAggregateFunction
+ * and ColumnAggregateFunction will take ownership of this state.
+ * So, for aggregate functions with "-State" modifier, the state must not be destroyed
+ * after it has been transferred to ColumnAggregateFunction.
+ * But we should mark that the data no longer owns these states.
+ */
+
+ size_t insert_i = 0;
+ std::exception_ptr exception;
+
+ try
+ {
+ /// Insert final values of aggregate functions into columns.
+ for (; insert_i < params.aggregates_size; ++insert_i)
+ aggregate_functions[insert_i]->insertResultInto(
+ mapped + offsets_of_aggregate_states[insert_i],
+ *final_aggregate_columns[insert_i],
+ arena);
+ }
+ catch (...)
+ {
+ exception = std::current_exception();
+ }
+
+ /** Destroy states that are no longer needed. This loop does not throw.
+ *
+ * Don't destroy states for "-State" aggregate functions,
+ * because the ownership of this state is transferred to ColumnAggregateFunction
+ * and ColumnAggregateFunction will take care.
+ *
+ * But it's only for states that has been transferred to ColumnAggregateFunction
+ * before exception has been thrown;
+ */
+ for (size_t destroy_i = 0; destroy_i < params.aggregates_size; ++destroy_i)
+ {
+ /// If ownership was not transferred to ColumnAggregateFunction.
+ if (!(destroy_i < insert_i && aggregate_functions[destroy_i]->isState()))
+ aggregate_functions[destroy_i]->destroy(
+ mapped + offsets_of_aggregate_states[destroy_i]);
+ }
+
+ /// Mark the cell as destroyed so it will not be destroyed in destructor.
+ mapped = nullptr;
+
+ if (exception)
+ std::rethrow_exception(exception);
+}
+
+
+template <typename Method, typename Table>
+void NO_INLINE Aggregator::convertToBlockImplFinal(
+ Method & method,
+ Table & data,
+ const MutableColumns & key_columns,
+ MutableColumns & final_aggregate_columns,
+ Arena * arena) const
+{
+#if 0 // TODO: enable shuffle in AggregationMethodKeysFixed
+ std::vector<MutableColumn *> raw_key_columns;
+ raw_key_columns.reserve(key_columns.size());
+ for (auto & column : key_columns)
+ raw_key_columns.push_back(column.get());
+
+ //auto shuffled_key_sizes = method.shuffleKeyColumns(key_columns, key_sizes);
+ //const auto & key_sizes_ref = shuffled_key_sizes ? *shuffled_key_sizes : key_sizes;
+#endif
+ const auto & key_sizes_ref = key_sizes;
+
+ PaddedPODArray<AggregateDataPtr> places;
+ places.reserve(data.size());
+
+ data.forEachValue([&](const auto & key, auto & mapped)
+ {
+ method.insertKeyIntoColumns(key, key_columns, key_sizes_ref);
+ places.emplace_back(mapped);
+
+ /// Mark the cell as destroyed so it will not be destroyed in destructor.
+ mapped = nullptr;
+ });
+
+ std::exception_ptr exception;
+ size_t aggregate_functions_destroy_index = 0;
+
+ try
+ {
+ for (; aggregate_functions_destroy_index < params.aggregates_size;)
+ {
+ auto & final_aggregate_column = final_aggregate_columns[aggregate_functions_destroy_index];
+ size_t offset = offsets_of_aggregate_states[aggregate_functions_destroy_index];
+
+ /** We increase aggregate_functions_destroy_index because by function contract if insertResultIntoBatch
+ * throws exception, it also must destroy all necessary states.
+ * Then code need to continue to destroy other aggregate function states with next function index.
+ */
+ size_t destroy_index = aggregate_functions_destroy_index;
+ ++aggregate_functions_destroy_index;
+
+ /// For State AggregateFunction ownership of aggregate place is passed to result column after insert
+ bool is_state = aggregate_functions[destroy_index]->isState();
+ bool destroy_place_after_insert = !is_state;
+
+ aggregate_functions[destroy_index]->insertResultIntoBatch(0, places.size(), places.data(), offset, *final_aggregate_column, arena, destroy_place_after_insert);
+ }
+ }
+ catch (...)
+ {
+ exception = std::current_exception();
+ }
+
+ for (; aggregate_functions_destroy_index < params.aggregates_size; ++aggregate_functions_destroy_index)
+ {
+ size_t offset = offsets_of_aggregate_states[aggregate_functions_destroy_index];
+ aggregate_functions[aggregate_functions_destroy_index]->destroyBatch(0, places.size(), places.data(), offset);
+ }
+
+ if (exception)
+ std::rethrow_exception(exception);
+}
+
+template <typename Method, typename Table>
+void NO_INLINE Aggregator::convertToBlockImplNotFinal(
+ Method & method,
+ Table & data,
+ const MutableColumns & key_columns,
+ AggregateColumnsData & aggregate_columns) const
+{
+#if 0 // TODO: enable shuffle in AggregationMethodKeysFixed
+ std::vector<MutableColumn *> raw_key_columns;
+ raw_key_columns.reserve(key_columns.size());
+ for (auto & column : key_columns)
+ raw_key_columns.push_back(column.get());
+
+ //auto shuffled_key_sizes = method.shuffleKeyColumns(key_columns, key_sizes);
+ //const auto & key_sizes_ref = shuffled_key_sizes ? *shuffled_key_sizes : key_sizes;
+#endif
+ const auto & key_sizes_ref = key_sizes;
+
+ data.forEachValue([&](const auto & key, auto & mapped)
+ {
+ method.insertKeyIntoColumns(key, key_columns, key_sizes_ref);
+
+ /// reserved, so push_back does not throw exceptions
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_columns[i]->Append(reinterpret_cast<uint64_t>(mapped + offsets_of_aggregate_states[i])).ok();
+
+ mapped = nullptr;
+ });
+}
+
+
+template <typename Filler>
+Block Aggregator::prepareBlockAndFill(
+ AggregatedDataVariants & /*data_variants*/,
+ bool final,
+ size_t rows,
+ Filler && filler) const
+{
+ Header header = getHeader(final);
+
+ std::vector<std::shared_ptr<MutableColumnAggregateFunction>> aggregate_columns(params.aggregates_size);
+ MutableColumns final_aggregate_columns(params.aggregates_size);
+ AggregateColumnsData aggregate_columns_data(params.aggregates_size);
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ {
+ if (!final)
+ {
+ const auto & aggregate_column_name = params.aggregates[i].column_name;
+ auto & type = header->GetFieldByName(aggregate_column_name)->type();
+ aggregate_columns[i] = std::make_shared<MutableColumnAggregateFunction>(
+ std::static_pointer_cast<DataTypeAggregateFunction>(type)); // TODO: set pool
+
+ /// The ColumnAggregateFunction column captures the shared ownership of the arena with the aggregate function states.
+ auto & column_aggregate_func = *aggregate_columns[i];
+#if 0
+ for (auto & pool : data_variants.aggregates_pools)
+ column_aggregate_func.addArena(pool);
+#endif
+ aggregate_columns_data[i] = &column_aggregate_func.getData();
+ aggregate_columns_data[i]->Reserve(rows).ok();
+ }
+ else
+ {
+ final_aggregate_columns[i] = createMutableColumn(aggregate_functions[i]->getReturnType());
+ final_aggregate_columns[i]->Reserve(rows).ok();
+ }
+ }
+
+ MutableColumns key_columns(params.keys_size);
+ for (size_t i = 0; i < params.keys_size; ++i)
+ {
+ key_columns[i] = createMutableColumn(header->field(i)->type());
+ key_columns[i]->Reserve(rows).ok();
+ }
+
+ filler(key_columns, aggregate_columns_data, final_aggregate_columns, final);
+
+ Columns columns(params.keys_size + params.aggregates_size);
+
+ for (size_t i = 0; i < params.keys_size; ++i)
+ columns[i] = *key_columns[i]->Finish();
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ {
+ int pos = header->GetFieldIndex(params.aggregates[i].column_name);
+ if (final)
+ columns[pos] = *final_aggregate_columns[i]->Finish();
+ else
+ columns[pos] = *aggregate_columns[i]->Finish();
+ }
+
+ // TODO: check row == columns length()
+ return arrow::RecordBatch::Make(header, rows, columns);
+}
+
+Block Aggregator::prepareBlockAndFillWithoutKey(AggregatedDataVariants & data_variants, bool final, bool /*is_overflows*/) const
+{
+ size_t rows = 1;
+
+ auto filler = [&data_variants, this](
+ MutableColumns & key_columns,
+ AggregateColumnsData & aggregate_columns,
+ MutableColumns & final_aggregate_columns,
+ bool final_)
+ {
+ if (data_variants.type == AggregatedDataVariants::Type::without_key || params.overflow_row)
+ {
+ AggregatedDataWithoutKey & data = data_variants.without_key;
+
+ if (!data)
+ throw Exception("Wrong data variant passed.");
+
+ if (!final_)
+ {
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_columns[i]->Append(reinterpret_cast<uint64_t>(data + offsets_of_aggregate_states[i])).ok();
+ data = nullptr;
+ }
+ else
+ {
+ /// Always single-thread. It's safe to pass current arena from 'aggregates_pool'.
+ insertAggregatesIntoColumns(data, final_aggregate_columns, data_variants.aggregates_pool);
+ }
+
+ if (params.overflow_row)
+ for (size_t i = 0; i < params.keys_size; ++i)
+ key_columns[i]->AppendEmptyValue().ok(); // FIXME: or AppendNull() ???
+ }
+ };
+
+ Block block = prepareBlockAndFill(data_variants, final, rows, filler);
+#if 0
+ if (is_overflows)
+ block.info.is_overflows = true;
+#endif
+ if (final)
+ destroyWithoutKey(data_variants);
+
+ return block;
+}
+
+Block Aggregator::prepareBlockAndFillSingleLevel(AggregatedDataVariants & data_variants, bool final) const
+{
+ size_t rows = data_variants.sizeWithoutOverflowRow();
+
+ auto filler = [&data_variants, this](
+ MutableColumns & key_columns,
+ AggregateColumnsData & aggregate_columns,
+ MutableColumns & final_aggregate_columns,
+ bool final_)
+ {
+ #define M(NAME) \
+ else if (data_variants.type == AggregatedDataVariants::Type::NAME) \
+ convertToBlockImpl(*data_variants.NAME, data_variants.NAME->data, \
+ key_columns, aggregate_columns, final_aggregate_columns, data_variants.aggregates_pool, final_);
+
+ if (false) {} // NOLINT
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ else
+ throw Exception("Unknown aggregated data variant.");
+ };
+
+ return prepareBlockAndFill(data_variants, final, rows, filler);
+}
+
+
+BlocksList Aggregator::convertToBlocks(AggregatedDataVariants & data_variants, bool final) const
+{
+ BlocksList blocks;
+
+ /// In what data structure is the data aggregated?
+ if (data_variants.empty())
+ return blocks;
+
+ if (data_variants.without_key)
+ blocks.emplace_back(prepareBlockAndFillWithoutKey(
+ data_variants, final, data_variants.type != AggregatedDataVariants::Type::without_key));
+
+ if (data_variants.type != AggregatedDataVariants::Type::without_key)
+ {
+ blocks.emplace_back(prepareBlockAndFillSingleLevel(data_variants, final));
+ }
+
+ if (!final)
+ {
+ /// data_variants will not destroy the states of aggregate functions in the destructor.
+ /// Now ColumnAggregateFunction owns the states.
+ data_variants.aggregator = nullptr;
+ }
+
+ size_t rows = 0;
+ //size_t bytes = 0;
+
+ for (const auto & block : blocks)
+ {
+ rows += block->num_rows();
+ //bytes += block.bytes();
+ }
+
+ return blocks;
+}
+
+
+template <typename Method, typename Table>
+void NO_INLINE Aggregator::mergeDataImpl(
+ Table & table_dst,
+ Table & table_src,
+ Arena * arena) const
+{
+ table_src.mergeToViaEmplace(table_dst, [&](AggregateDataPtr & __restrict dst, AggregateDataPtr & __restrict src, bool inserted)
+ {
+ if (!inserted)
+ {
+ {
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->merge(dst + offsets_of_aggregate_states[i], src + offsets_of_aggregate_states[i], arena);
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->destroy(src + offsets_of_aggregate_states[i]);
+ }
+ }
+ else
+ {
+ dst = src;
+ }
+
+ src = nullptr;
+ });
+
+ table_src.clearAndShrink();
+}
+
+
+template <typename Method, typename Table>
+void NO_INLINE Aggregator::mergeDataNoMoreKeysImpl(
+ Table & table_dst,
+ AggregatedDataWithoutKey & overflows,
+ Table & table_src,
+ Arena * arena) const
+{
+ table_src.mergeToViaFind(table_dst, [&](AggregateDataPtr dst, AggregateDataPtr & src, bool found)
+ {
+ AggregateDataPtr res_data = found ? dst : overflows;
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->merge(
+ res_data + offsets_of_aggregate_states[i],
+ src + offsets_of_aggregate_states[i],
+ arena);
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->destroy(src + offsets_of_aggregate_states[i]);
+
+ src = nullptr;
+ });
+ table_src.clearAndShrink();
+}
+
+template <typename Method, typename Table>
+void NO_INLINE Aggregator::mergeDataOnlyExistingKeysImpl(
+ Table & table_dst,
+ Table & table_src,
+ Arena * arena) const
+{
+ table_src.mergeToViaFind(table_dst,
+ [&](AggregateDataPtr dst, AggregateDataPtr & src, bool found)
+ {
+ if (!found)
+ return;
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->merge(
+ dst + offsets_of_aggregate_states[i],
+ src + offsets_of_aggregate_states[i],
+ arena);
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->destroy(src + offsets_of_aggregate_states[i]);
+
+ src = nullptr;
+ });
+ table_src.clearAndShrink();
+}
+
+
+void NO_INLINE Aggregator::mergeWithoutKeyDataImpl(
+ ManyAggregatedDataVariants & non_empty_data) const
+{
+ AggregatedDataVariantsPtr & res = non_empty_data[0];
+
+ /// We merge all aggregation results to the first.
+ for (size_t result_num = 1, size = non_empty_data.size(); result_num < size; ++result_num)
+ {
+ AggregatedDataWithoutKey & res_data = res->without_key;
+ AggregatedDataWithoutKey & current_data = non_empty_data[result_num]->without_key;
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->merge(res_data + offsets_of_aggregate_states[i], current_data + offsets_of_aggregate_states[i], res->aggregates_pool);
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->destroy(current_data + offsets_of_aggregate_states[i]);
+
+ current_data = nullptr;
+ }
+}
+
+
+template <typename Method>
+void NO_INLINE Aggregator::mergeSingleLevelDataImpl(
+ ManyAggregatedDataVariants & non_empty_data) const
+{
+ AggregatedDataVariantsPtr & res = non_empty_data[0];
+ bool no_more_keys = false;
+
+ /// We merge all aggregation results to the first.
+ for (size_t result_num = 1, size = non_empty_data.size(); result_num < size; ++result_num)
+ {
+ if (!checkLimits(res->sizeWithoutOverflowRow(), no_more_keys))
+ break;
+
+ AggregatedDataVariants & current = *non_empty_data[result_num];
+
+ if (!no_more_keys)
+ {
+ {
+ mergeDataImpl<Method>(
+ getDataVariant<Method>(*res).data,
+ getDataVariant<Method>(current).data,
+ res->aggregates_pool);
+ }
+ }
+ else if (res->without_key)
+ {
+ mergeDataNoMoreKeysImpl<Method>(
+ getDataVariant<Method>(*res).data,
+ res->without_key,
+ getDataVariant<Method>(current).data,
+ res->aggregates_pool);
+ }
+ else
+ {
+ mergeDataOnlyExistingKeysImpl<Method>(
+ getDataVariant<Method>(*res).data,
+ getDataVariant<Method>(current).data,
+ res->aggregates_pool);
+ }
+
+ /// `current` will not destroy the states of aggregate functions in the destructor
+ current.aggregator = nullptr;
+ }
+}
+
+#define M(NAME) \
+ template void NO_INLINE Aggregator::mergeSingleLevelDataImpl<decltype(AggregatedDataVariants::NAME)::element_type>( \
+ ManyAggregatedDataVariants & non_empty_data) const;
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+#undef M
+
+template <typename Method>
+void NO_INLINE Aggregator::mergeBucketImpl(
+ ManyAggregatedDataVariants & data, Int32 bucket, Arena * arena, std::atomic<bool> * is_cancelled) const
+{
+ /// We merge all aggregation results to the first.
+ AggregatedDataVariantsPtr & res = data[0];
+ for (size_t result_num = 1, size = data.size(); result_num < size; ++result_num)
+ {
+ if (is_cancelled && is_cancelled->load(std::memory_order_seq_cst))
+ return;
+
+ AggregatedDataVariants & current = *data[result_num];
+
+ {
+ mergeDataImpl<Method>(
+ getDataVariant<Method>(*res).data.impls[bucket],
+ getDataVariant<Method>(current).data.impls[bucket],
+ arena);
+ }
+ }
+}
+
+ManyAggregatedDataVariants Aggregator::prepareVariantsToMerge(ManyAggregatedDataVariants & data_variants) const
+{
+ if (data_variants.empty())
+ throw Exception("Empty data passed to Aggregator::mergeAndConvertToBlocks.");
+
+ ManyAggregatedDataVariants non_empty_data;
+ non_empty_data.reserve(data_variants.size());
+ for (auto & data : data_variants)
+ if (!data->empty())
+ non_empty_data.push_back(data);
+
+ if (non_empty_data.empty())
+ return {};
+
+ if (non_empty_data.size() > 1)
+ {
+ /// Sort the states in descending order so that the merge is more efficient (since all states are merged into the first).
+ std::sort(non_empty_data.begin(), non_empty_data.end(),
+ [](const AggregatedDataVariantsPtr & lhs, const AggregatedDataVariantsPtr & rhs)
+ {
+ return lhs->sizeWithoutOverflowRow() > rhs->sizeWithoutOverflowRow();
+ });
+ }
+
+ AggregatedDataVariantsPtr & first = non_empty_data[0];
+
+ for (size_t i = 1, size = non_empty_data.size(); i < size; ++i)
+ {
+ if (first->type != non_empty_data[i]->type)
+ throw Exception("Cannot merge different aggregated data variants.");
+
+ /** Elements from the remaining sets can be moved to the first data set.
+ * Therefore, it must own all the arenas of all other sets.
+ */
+ first->aggregates_pools.insert(first->aggregates_pools.end(),
+ non_empty_data[i]->aggregates_pools.begin(), non_empty_data[i]->aggregates_pools.end());
+ }
+
+ return non_empty_data;
+}
+
+template <bool no_more_keys, typename Method, typename Table>
+void NO_INLINE Aggregator::mergeStreamsImplCase(
+ Block & block,
+ Arena * aggregates_pool,
+ Method & method [[maybe_unused]],
+ Table & data,
+ AggregateDataPtr overflow_row) const
+{
+ ColumnRawPtrs key_columns(params.keys_size);
+ std::vector<const ColumnAggregateFunction *> aggregate_columns(params.aggregates_size);
+
+ /// Remember the columns we will work with
+ for (size_t i = 0; i < params.keys_size; ++i)
+ key_columns[i] = block->column(i).get();
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ {
+ const auto & aggregate_column_name = params.aggregates[i].column_name;
+ aggregate_columns[i] = &assert_cast<const ColumnAggregateFunction &>(*block->GetColumnByName(aggregate_column_name));
+ }
+
+ typename Method::State state(key_columns, key_sizes, aggregation_state_cache);
+
+ /// For all rows.
+ size_t rows = block->num_rows();
+ std::unique_ptr<AggregateDataPtr[]> places(new AggregateDataPtr[rows]);
+
+ for (size_t i = 0; i < rows; ++i)
+ {
+ AggregateDataPtr aggregate_data = nullptr;
+
+ if (!no_more_keys)
+ {
+ auto emplace_result = state.emplaceKey(data, i, *aggregates_pool);
+ if (emplace_result.isInserted())
+ {
+ emplace_result.setMapped(nullptr);
+
+ aggregate_data = aggregates_pool->alignedAlloc(total_size_of_aggregate_states, align_aggregate_states);
+ createAggregateStates(aggregate_data);
+
+ emplace_result.setMapped(aggregate_data);
+ }
+ else
+ aggregate_data = emplace_result.getMapped();
+ }
+ else
+ {
+ auto find_result = state.findKey(data, i, *aggregates_pool);
+ if (find_result.isFound())
+ aggregate_data = find_result.getMapped();
+ }
+
+ /// aggregate_date == nullptr means that the new key did not fit in the hash table because of no_more_keys.
+
+ AggregateDataPtr value = aggregate_data ? aggregate_data : overflow_row;
+ places[i] = value;
+ }
+
+ for (size_t j = 0; j < params.aggregates_size; ++j)
+ {
+ /// Merge state of aggregate functions.
+ aggregate_functions[j]->mergeBatch(
+ 0, rows,
+ places.get(), offsets_of_aggregate_states[j],
+ aggregate_columns[j]->rawData(),
+ aggregates_pool);
+ }
+
+ /// Early release memory.
+ block.reset();
+}
+
+template <typename Method, typename Table>
+void NO_INLINE Aggregator::mergeStreamsImpl(
+ Block & block,
+ Arena * aggregates_pool,
+ Method & method,
+ Table & data,
+ AggregateDataPtr overflow_row,
+ bool no_more_keys) const
+{
+ if (!no_more_keys)
+ mergeStreamsImplCase<false>(block, aggregates_pool, method, data, overflow_row);
+ else
+ mergeStreamsImplCase<true>(block, aggregates_pool, method, data, overflow_row);
+}
+
+
+void NO_INLINE Aggregator::mergeWithoutKeyStreamsImpl(
+ Block & block,
+ AggregatedDataVariants & result) const
+{
+ std::vector<const ColumnAggregateFunction *> aggregate_columns(params.aggregates_size);
+
+ /// Remember the columns we will work with
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ {
+ const auto & aggregate_column_name = params.aggregates[i].column_name;
+ aggregate_columns[i] = &assert_cast<const ColumnAggregateFunction &>(*block->GetColumnByName(aggregate_column_name));
+ }
+
+ AggregatedDataWithoutKey & res = result.without_key;
+ if (!res)
+ {
+ AggregateDataPtr place = result.aggregates_pool->alignedAlloc(total_size_of_aggregate_states, align_aggregate_states);
+ createAggregateStates(place);
+ res = place;
+ }
+
+ for (size_t row = 0, rows = block->num_rows(); row < rows; ++row)
+ {
+ /// Adding Values
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->merge(res + offsets_of_aggregate_states[i],
+ aggregate_columns[i]->rawData()[row], result.aggregates_pool);
+ }
+
+ /// Early release memory.
+ block.reset();
+}
+
+bool Aggregator::mergeOnBlock(Block block, AggregatedDataVariants & result, bool & no_more_keys) const
+{
+ /// `result` will destroy the states of aggregate functions in the destructor
+ result.aggregator = this;
+
+ /// How to perform the aggregation?
+ if (result.empty())
+ {
+ result.init(method_chosen);
+ result.keys_size = params.keys_size;
+ result.key_sizes = key_sizes;
+ }
+
+ if (result.type == AggregatedDataVariants::Type::without_key /*|| block.info.is_overflows*/)
+ mergeWithoutKeyStreamsImpl(block, result);
+
+#define M(NAME) \
+ else if (result.type == AggregatedDataVariants::Type::NAME) \
+ mergeStreamsImpl(block, result.aggregates_pool, *result.NAME, result.NAME->data, result.without_key, no_more_keys);
+
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+#undef M
+ else if (result.type != AggregatedDataVariants::Type::without_key)
+ throw Exception("Unknown aggregated data variant.");
+
+ size_t result_size = result.sizeWithoutOverflowRow();
+
+ /// Checking the constraints.
+ if (!checkLimits(result_size, no_more_keys))
+ return false;
+
+ return true;
+}
+
+void Aggregator::mergeStream(const BlockInputStreamPtr & stream, AggregatedDataVariants & result)
+{
+#if 0
+ if (isCancelled())
+ return;
+
+ /** If the remote servers used a two-level aggregation method,
+ * then blocks will contain information about the number of the bucket.
+ * Then the calculations can be parallelized by buckets.
+ * We decompose the blocks to the bucket numbers indicated in them.
+ */
+ BucketToBlocks bucket_to_blocks;
+
+ while (Block block = stream->read())
+ {
+ if (isCancelled())
+ return;
+
+ bucket_to_blocks[block.info.bucket_num].emplace_back(std::move(block));
+ }
+
+ mergeBlocks(bucket_to_blocks, result);
+#else
+ BlocksList blocks;
+
+ while (Block block = stream->read())
+ blocks.emplace_back(std::move(block));
+
+ BucketToBlocks bucket_to_blocks;
+ bucket_to_blocks.emplace(-1, std::move(blocks));
+ mergeBlocks(std::move(bucket_to_blocks), result);
+#endif
+}
+
+void Aggregator::mergeBlocks(BucketToBlocks && bucket_to_blocks, AggregatedDataVariants & result)
+{
+ if (bucket_to_blocks.empty())
+ return;
+
+ /** `minus one` means the absence of information about the bucket
+ * - in the case of single-level aggregation, as well as for blocks with "overflowing" values.
+ * If there is at least one block with a bucket number greater or equal than zero, then there was a two-level aggregation.
+ */
+ //auto max_bucket = bucket_to_blocks.rbegin()->first;
+
+ /// result will destroy the states of aggregate functions in the destructor
+ result.aggregator = this;
+
+ result.init(method_chosen);
+ result.keys_size = params.keys_size;
+ result.key_sizes = key_sizes;
+
+ bool has_blocks_with_unknown_bucket = bucket_to_blocks.count(-1);
+
+ if (has_blocks_with_unknown_bucket)
+ {
+ bool no_more_keys = false;
+
+ BlocksList & blocks = bucket_to_blocks[-1];
+ for (Block & block : blocks)
+ {
+ if (!checkLimits(result.sizeWithoutOverflowRow(), no_more_keys))
+ break;
+
+ if (result.type == AggregatedDataVariants::Type::without_key /*|| block.info.is_overflows*/)
+ mergeWithoutKeyStreamsImpl(block, result);
+
+ #define M(NAME) \
+ else if (result.type == AggregatedDataVariants::Type::NAME) \
+ mergeStreamsImpl(block, result.aggregates_pool, *result.NAME, result.NAME->data, result.without_key, no_more_keys);
+
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ else if (result.type != AggregatedDataVariants::Type::without_key)
+ throw Exception("Unknown aggregated data variant.");
+ }
+ }
+}
+
+
+Block Aggregator::mergeBlocks(BlocksList & blocks, bool final)
+{
+ if (blocks.empty())
+ return {};
+
+#if 0
+ auto bucket_num = blocks.front().info.bucket_num;
+ bool is_overflows = blocks.front().info.is_overflows;
+#endif
+
+ /** If possible, change 'method' to some_hash64. Otherwise, leave as is.
+ * Better hash function is needed because during external aggregation,
+ * we may merge partitions of data with total number of keys far greater than 4 billion.
+ */
+ auto merge_method = method_chosen;
+
+#define APPLY_FOR_VARIANTS_THAT_MAY_USE_BETTER_HASH_FUNCTION(M) \
+ M(key64) \
+ M(key_string) \
+ M(key_fixed_string) \
+ M(keys128) \
+ M(keys256) \
+ M(serialized) \
+
+#define M(NAME) \
+ if (merge_method == AggregatedDataVariants::Type::NAME) \
+ merge_method = AggregatedDataVariants::Type::NAME ## _hash64; \
+
+ APPLY_FOR_VARIANTS_THAT_MAY_USE_BETTER_HASH_FUNCTION(M)
+#undef M
+
+#undef APPLY_FOR_VARIANTS_THAT_MAY_USE_BETTER_HASH_FUNCTION
+
+ /// Temporary data for aggregation.
+ AggregatedDataVariants result;
+
+ /// result will destroy the states of aggregate functions in the destructor
+ result.aggregator = this;
+
+ result.init(merge_method);
+ result.keys_size = params.keys_size;
+ result.key_sizes = key_sizes;
+
+ for (Block & block : blocks)
+ {
+#if 0
+ if (bucket_num >= 0 /*&& block.info.bucket_num != bucket_num*/)
+ bucket_num = -1;
+#endif
+ if (result.type == AggregatedDataVariants::Type::without_key /*|| is_overflows*/)
+ mergeWithoutKeyStreamsImpl(block, result);
+
+ #define M(NAME) \
+ else if (result.type == AggregatedDataVariants::Type::NAME) \
+ mergeStreamsImpl(block, result.aggregates_pool, *result.NAME, result.NAME->data, nullptr, false);
+
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ else if (result.type != AggregatedDataVariants::Type::without_key)
+ throw Exception("Unknown aggregated data variant.");
+ }
+
+ Block block;
+ if (result.type == AggregatedDataVariants::Type::without_key /*|| is_overflows*/)
+ block = prepareBlockAndFillWithoutKey(result, final /*, is_overflows*/);
+ else
+ block = prepareBlockAndFillSingleLevel(result, final);
+ /// NOTE: two-level data is not possible here - chooseAggregationMethod chooses only among single-level methods.
+
+ if (!final)
+ {
+ /// Pass ownership of aggregate function states from result to ColumnAggregateFunction objects in the resulting block.
+ result.aggregator = nullptr;
+ }
+
+ //block.info.bucket_num = bucket_num;
+ return block;
+}
+
+
+template <typename Method, typename Table>
+void NO_INLINE Aggregator::destroyImpl(Table & table) const
+{
+ table.forEachMapped([&](AggregateDataPtr & data)
+ {
+ /** If an exception (usually a lack of memory, the MemoryTracker throws) arose
+ * after inserting the key into a hash table, but before creating all states of aggregate functions,
+ * then data will be equal nullptr.
+ */
+ if (nullptr == data)
+ return;
+
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->destroy(data + offsets_of_aggregate_states[i]);
+
+ data = nullptr;
+ });
+}
+
+
+void Aggregator::destroyWithoutKey(AggregatedDataVariants & result) const
+{
+ AggregatedDataWithoutKey & res_data = result.without_key;
+
+ if (nullptr != res_data)
+ {
+ for (size_t i = 0; i < params.aggregates_size; ++i)
+ aggregate_functions[i]->destroy(res_data + offsets_of_aggregate_states[i]);
+
+ res_data = nullptr;
+ }
+}
+
+
+void Aggregator::destroyAllAggregateStates(AggregatedDataVariants & result) const
+{
+ if (result.empty())
+ return;
+
+ /// In what data structure is the data aggregated?
+ if (result.type == AggregatedDataVariants::Type::without_key || params.overflow_row)
+ destroyWithoutKey(result);
+
+#define M(NAME) \
+ else if (result.type == AggregatedDataVariants::Type::NAME) \
+ destroyImpl<decltype(result.NAME)::element_type>(result.NAME->data);
+
+ if (false) {} // NOLINT
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+#undef M
+ else if (result.type != AggregatedDataVariants::Type::without_key)
+ throw Exception("Unknown aggregated data variant.");
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/Aggregator.h b/ydb/library/arrow_clickhouse/Aggregator.h
new file mode 100644
index 0000000000..af08ba1ef7
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Aggregator.h
@@ -0,0 +1,912 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <memory>
+#include <common/StringRef.h>
+
+#include "AggregationCommon.h"
+#include <Common/Arena.h>
+#include <Common/HashTable/FixedHashMap.h>
+#include <Common/HashTable/HashMap.h>
+#include <Common/HashTable/StringHashMap.h>
+#include <Columns/ColumnsHashing.h>
+#include <Columns/ColumnAggregateFunction.h>
+#include <DataStreams/IBlockStream_fwd.h>
+
+namespace CH
+{
+
+/** Different data structures that can be used for aggregation
+ * For efficiency, the aggregation data itself is put into the pool.
+ * Data and pool ownership (states of aggregate functions)
+ * is acquired later - in `convertToBlocks` function, by the ColumnAggregateFunction object.
+ *
+ * Most data structures exist in two versions: normal and two-level (TwoLevel).
+ * A two-level hash table works a little slower with a small number of different keys,
+ * but with a large number of different keys scales better, because it allows
+ * parallelize some operations (merging, post-processing) in a natural way.
+ *
+ * To ensure efficient work over a wide range of conditions,
+ * first single-level hash tables are used,
+ * and when the number of different keys is large enough,
+ * they are converted to two-level ones.
+ *
+ * PS. There are many different approaches to the effective implementation of parallel and distributed aggregation,
+ * best suited for different cases, and this approach is just one of them, chosen for a combination of reasons.
+ */
+
+using AggregateDataPtr = char *;
+using AggregatedDataWithoutKey = AggregateDataPtr;
+
+using AggregatedDataWithUInt8Key = FixedImplicitZeroHashMapWithCalculatedSize<UInt8, AggregateDataPtr>;
+using AggregatedDataWithUInt16Key = FixedImplicitZeroHashMap<UInt16, AggregateDataPtr>;
+
+using AggregatedDataWithUInt32Key = HashMap<UInt32, AggregateDataPtr, HashCRC32<UInt32>>;
+using AggregatedDataWithUInt64Key = HashMap<UInt64, AggregateDataPtr, HashCRC32<UInt64>>;
+
+using AggregatedDataWithShortStringKey = StringHashMap<AggregateDataPtr>;
+
+using AggregatedDataWithStringKey = HashMapWithSavedHash<StringRef, AggregateDataPtr>;
+
+using AggregatedDataWithKeys128 = HashMap<UInt128, AggregateDataPtr, UInt128HashCRC32>;
+using AggregatedDataWithKeys256 = HashMap<UInt256, AggregateDataPtr, UInt256HashCRC32>;
+
+
+/** Variants with better hash function, using more than 32 bits for hash.
+ * Using for merging phase of external aggregation, where number of keys may be far greater than 4 billion,
+ * but we keep in memory and merge only sub-partition of them simultaneously.
+ * TODO We need to switch for better hash function not only for external aggregation,
+ * but also for huge aggregation results on machines with terabytes of RAM.
+ */
+
+using AggregatedDataWithUInt64KeyHash64 = HashMap<UInt64, AggregateDataPtr, DefaultHash<UInt64>>;
+using AggregatedDataWithStringKeyHash64 = HashMapWithSavedHash<StringRef, AggregateDataPtr, StringRefHash>;
+using AggregatedDataWithKeys128Hash64 = HashMap<UInt128, AggregateDataPtr, UInt128Hash>;
+using AggregatedDataWithKeys256Hash64 = HashMap<UInt256, AggregateDataPtr, UInt256Hash>;
+
+template <typename Base>
+struct AggregationDataWithNullKey : public Base
+{
+ using Base::Base;
+
+ bool & hasNullKeyData() { return has_null_key_data; }
+ AggregateDataPtr & getNullKeyData() { return null_key_data; }
+ bool hasNullKeyData() const { return has_null_key_data; }
+ const AggregateDataPtr & getNullKeyData() const { return null_key_data; }
+ size_t size() const { return Base::size() + (has_null_key_data ? 1 : 0); }
+ bool empty() const { return Base::empty() && !has_null_key_data; }
+ void clear()
+ {
+ Base::clear();
+ has_null_key_data = false;
+ }
+ void clearAndShrink()
+ {
+ Base::clearAndShrink();
+ has_null_key_data = false;
+ }
+
+private:
+ bool has_null_key_data = false;
+ AggregateDataPtr null_key_data = nullptr;
+};
+
+template <typename ... Types>
+using HashTableWithNullKey = AggregationDataWithNullKey<HashMapTable<Types ...>>;
+template <typename ... Types>
+using StringHashTableWithNullKey = AggregationDataWithNullKey<StringHashMap<Types ...>>;
+
+using AggregatedDataWithNullableUInt8Key = AggregationDataWithNullKey<AggregatedDataWithUInt8Key>;
+using AggregatedDataWithNullableUInt16Key = AggregationDataWithNullKey<AggregatedDataWithUInt16Key>;
+
+using AggregatedDataWithNullableUInt64Key = AggregationDataWithNullKey<AggregatedDataWithUInt64Key>;
+using AggregatedDataWithNullableStringKey = AggregationDataWithNullKey<AggregatedDataWithStringKey>;
+
+
+/// For the case where there is one numeric key.
+/// FieldType is UInt8/16/32/64 for any type with corresponding bit width.
+template <typename FieldType, typename TData,
+ bool consecutive_keys_optimization = true>
+struct AggregationMethodOneNumber
+{
+ using Data = TData;
+ using Key = typename Data::key_type;
+ using Mapped = typename Data::mapped_type;
+
+ Data data;
+
+ AggregationMethodOneNumber() = default;
+
+ template <typename Other>
+ AggregationMethodOneNumber(const Other & other) : data(other.data) {}
+
+ /// To use one `Method` in different threads, use different `State`.
+ using State = ColumnsHashing::HashMethodOneNumber<typename Data::value_type,
+ Mapped, FieldType, consecutive_keys_optimization>;
+
+ /// Shuffle key columns before `insertKeyIntoColumns` call if needed.
+ std::optional<Sizes> shuffleKeyColumns(std::vector<IColumn *> &, const Sizes &) { return {}; }
+
+ // Insert the key from the hash table into columns.
+ template <typename ColPtr>
+ static void insertKeyIntoColumns(const Key & key, const std::vector<ColPtr> & key_columns, const Sizes & /*key_sizes*/)
+ {
+ insertNumber(*key_columns[0], key);
+ }
+};
+
+
+/// For the case where there is one string key.
+template <typename TData>
+struct AggregationMethodString
+{
+ using Data = TData;
+ using Key = typename Data::key_type;
+ using Mapped = typename Data::mapped_type;
+
+ Data data;
+
+ AggregationMethodString() = default;
+
+ template <typename Other>
+ AggregationMethodString(const Other & other) : data(other.data) {}
+
+ using State = ColumnsHashing::HashMethodString<typename Data::value_type, Mapped>;
+
+ std::optional<Sizes> shuffleKeyColumns(std::vector<IColumn *> &, const Sizes &) { return {}; }
+
+ template <typename ColPtr>
+ static void insertKeyIntoColumns(const StringRef & key, const std::vector<ColPtr> & key_columns, const Sizes &)
+ {
+ insertString(*key_columns[0], key);
+ }
+};
+
+
+/// Same as above but without cache
+template <typename TData>
+struct AggregationMethodStringNoCache
+{
+ using Data = TData;
+ using Key = typename Data::key_type;
+ using Mapped = typename Data::mapped_type;
+
+ Data data;
+
+ AggregationMethodStringNoCache() = default;
+
+ template <typename Other>
+ AggregationMethodStringNoCache(const Other & other) : data(other.data) {}
+
+ using State = ColumnsHashing::HashMethodString<typename Data::value_type, Mapped, true, false>;
+
+ std::optional<Sizes> shuffleKeyColumns(std::vector<IColumn *> &, const Sizes &) { return {}; }
+
+ template <typename ColPtr>
+ static void insertKeyIntoColumns(const StringRef & key, const std::vector<ColPtr> & key_columns, const Sizes &)
+ {
+ insertString(*key_columns[0], key);
+ }
+};
+
+
+/// For the case where there is one fixed-length string key.
+template <typename TData>
+struct AggregationMethodFixedString
+{
+ using Data = TData;
+ using Key = typename Data::key_type;
+ using Mapped = typename Data::mapped_type;
+
+ Data data;
+
+ AggregationMethodFixedString() = default;
+
+ template <typename Other>
+ AggregationMethodFixedString(const Other & other) : data(other.data) {}
+
+ using State = ColumnsHashing::HashMethodFixedString<typename Data::value_type, Mapped>;
+
+ std::optional<Sizes> shuffleKeyColumns(std::vector<IColumn *> &, const Sizes &) { return {}; }
+
+ template <typename ColPtr>
+ static void insertKeyIntoColumns(const StringRef & key, const std::vector<ColPtr> & key_columns, const Sizes &)
+ {
+ insertFixedString(*key_columns[0], key);
+ }
+};
+
+/// Same as above but without cache
+template <typename TData>
+struct AggregationMethodFixedStringNoCache
+{
+ using Data = TData;
+ using Key = typename Data::key_type;
+ using Mapped = typename Data::mapped_type;
+
+ Data data;
+
+ AggregationMethodFixedStringNoCache() = default;
+
+ template <typename Other>
+ AggregationMethodFixedStringNoCache(const Other & other) : data(other.data) {}
+
+ using State = ColumnsHashing::HashMethodFixedString<typename Data::value_type, Mapped, true, false>;
+
+ std::optional<Sizes> shuffleKeyColumns(std::vector<IColumn *> &, const Sizes &) { return {}; }
+
+ template <typename ColPtr>
+ static void insertKeyIntoColumns(const StringRef & key, const std::vector<ColPtr> & key_columns, const Sizes &)
+ {
+ insertFixedString(*key_columns[0], key);
+ }
+};
+
+
+
+/// For the case where all keys are of fixed length, and they fit in N (for example, 128) bits.
+template <typename TData, bool has_nullable_keys_ = false, bool use_cache = true>
+struct AggregationMethodKeysFixed
+{
+ using Data = TData;
+ using Key = typename Data::key_type;
+ using Mapped = typename Data::mapped_type;
+ static constexpr bool has_nullable_keys = has_nullable_keys_;
+
+ Data data;
+
+ AggregationMethodKeysFixed() = default;
+
+ template <typename Other>
+ AggregationMethodKeysFixed(const Other & other) : data(other.data) {}
+
+ using State = ColumnsHashing::HashMethodKeysFixed<
+ typename Data::value_type,
+ Key,
+ Mapped,
+ has_nullable_keys,
+ false,
+ use_cache>;
+#if 0
+ std::optional<Sizes> shuffleKeyColumns(std::vector<IColumn *> & key_columns, const Sizes & key_sizes)
+ {
+ return State::shuffleKeyColumns(key_columns, key_sizes);
+ }
+#endif
+ template <typename ColPtr>
+ static void insertKeyIntoColumns(const Key & key, const std::vector<ColPtr> & key_columns, const Sizes & key_sizes)
+ {
+ size_t keys_count = key_columns.size();
+
+ static constexpr auto bitmap_size = has_nullable_keys ? std::tuple_size<KeysNullMap<Key>>::value : 0;
+ /// In any hash key value, column values to be read start just after the bitmap, if it exists.
+ const char * key_data = reinterpret_cast<const char *>(&key) + bitmap_size;
+
+ for (size_t i = 0; i < keys_count; ++i)
+ {
+ auto & observed_column = *key_columns[i];
+
+ if constexpr (has_nullable_keys)
+ {
+ const char * null_bitmap = reinterpret_cast<const char *>(&key);
+ size_t bucket = i / 8;
+ size_t offset = i % 8;
+ bool is_null = (null_bitmap[bucket] >> offset) & 1;
+
+ if (is_null)
+ {
+ observed_column.AppendNull().ok();
+ continue;
+ }
+ }
+
+ insertData(observed_column, StringRef(key_data, key_sizes[i]));
+ key_data += key_sizes[i];
+ }
+ }
+};
+
+
+/** Aggregates by concatenating serialized key values.
+ * The serialized value differs in that it uniquely allows to deserialize it, having only the position with which it starts.
+ * That is, for example, for strings, it contains first the serialized length of the string, and then the bytes.
+ * Therefore, when aggregating by several strings, there is no ambiguity.
+ */
+template <typename TData>
+struct AggregationMethodSerialized
+{
+ using Data = TData;
+ using Key = typename Data::key_type;
+ using Mapped = typename Data::mapped_type;
+
+ Data data;
+
+ AggregationMethodSerialized() = default;
+
+ template <typename Other>
+ AggregationMethodSerialized(const Other & other) : data(other.data) {}
+
+ using State = ColumnsHashing::HashMethodSerialized<typename Data::value_type, Mapped>;
+
+ std::optional<Sizes> shuffleKeyColumns(std::vector<IColumn *> &, const Sizes &) { return {}; }
+
+ template <typename ColPtr>
+ static void insertKeyIntoColumns(const StringRef & key, const std::vector<ColPtr> & key_columns, const Sizes &)
+ {
+ const auto * pos = key.data;
+ for (auto & column : key_columns)
+ pos = deserializeAndInsertFromArena(*column, pos);
+ }
+};
+
+
+class Aggregator;
+
+using ColumnsHashing::HashMethodContext;
+using ColumnsHashing::HashMethodContextPtr;
+
+struct AggregatedDataVariants //: private boost::noncopyable
+{
+ /** Working with states of aggregate functions in the pool is arranged in the following (inconvenient) way:
+ * - when aggregating, states are created in the pool using IAggregateFunction::create (inside - `placement new` of arbitrary structure);
+ * - they must then be destroyed using IAggregateFunction::destroy (inside - calling the destructor of arbitrary structure);
+ * - if aggregation is complete, then, in the Aggregator::convertToBlocks function, pointers to the states of aggregate functions
+ * are written to ColumnAggregateFunction; ColumnAggregateFunction "acquires ownership" of them, that is - calls `destroy` in its destructor.
+ * - if during the aggregation, before call to Aggregator::convertToBlocks, an exception was thrown,
+ * then the states of aggregate functions must still be destroyed,
+ * otherwise, for complex states (eg, AggregateFunctionUniq), there will be memory leaks;
+ * - in this case, to destroy states, the destructor calls Aggregator::destroyAggregateStates method,
+ * but only if the variable aggregator (see below) is not nullptr;
+ * - that is, until you transfer ownership of the aggregate function states in the ColumnAggregateFunction, set the variable `aggregator`,
+ * so that when an exception occurs, the states are correctly destroyed.
+ *
+ * PS. This can be corrected by making a pool that knows about which states of aggregate functions and in which order are put in it, and knows how to destroy them.
+ * But this can hardly be done simply because it is planned to put variable-length strings into the same pool.
+ * In this case, the pool will not be able to know with what offsets objects are stored.
+ */
+ const Aggregator * aggregator = nullptr;
+
+ size_t keys_size{}; /// Number of keys. NOTE do we need this field?
+ Sizes key_sizes; /// Dimensions of keys, if keys of fixed length
+
+ /// Pools for states of aggregate functions. Ownership will be later transferred to ColumnAggregateFunction.
+ Arenas aggregates_pools;
+ Arena * aggregates_pool{}; /// The pool that is currently used for allocation.
+
+ /** Specialization for the case when there are no keys, and for keys not fitted into max_rows_to_group_by.
+ */
+ AggregatedDataWithoutKey without_key = nullptr;
+
+ // Disable consecutive key optimization for Uint8/16, because they use a FixedHashMap
+ // and the lookup there is almost free, so we don't need to cache the last lookup result
+ std::unique_ptr<AggregationMethodOneNumber<UInt8, AggregatedDataWithUInt8Key, false>> key8;
+ std::unique_ptr<AggregationMethodOneNumber<UInt16, AggregatedDataWithUInt16Key, false>> key16;
+
+ std::unique_ptr<AggregationMethodOneNumber<UInt32, AggregatedDataWithUInt64Key>> key32;
+ std::unique_ptr<AggregationMethodOneNumber<UInt64, AggregatedDataWithUInt64Key>> key64;
+ std::unique_ptr<AggregationMethodStringNoCache<AggregatedDataWithShortStringKey>> key_string;
+ std::unique_ptr<AggregationMethodFixedStringNoCache<AggregatedDataWithShortStringKey>> key_fixed_string;
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithUInt16Key, false, false>> keys16;
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithUInt32Key>> keys32;
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithUInt64Key>> keys64;
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithKeys128>> keys128;
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithKeys256>> keys256;
+ std::unique_ptr<AggregationMethodSerialized<AggregatedDataWithStringKey>> serialized;
+
+ std::unique_ptr<AggregationMethodOneNumber<UInt64, AggregatedDataWithUInt64KeyHash64>> key64_hash64;
+ std::unique_ptr<AggregationMethodString<AggregatedDataWithStringKeyHash64>> key_string_hash64;
+ std::unique_ptr<AggregationMethodFixedString<AggregatedDataWithStringKeyHash64>> key_fixed_string_hash64;
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithKeys128Hash64>> keys128_hash64;
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithKeys256Hash64>> keys256_hash64;
+ std::unique_ptr<AggregationMethodSerialized<AggregatedDataWithStringKeyHash64>> serialized_hash64;
+
+ /// Support for nullable keys.
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithKeys128, true>> nullable_keys128;
+ std::unique_ptr<AggregationMethodKeysFixed<AggregatedDataWithKeys256, true>> nullable_keys256;
+
+ /// In this and similar macros, the option without_key is not considered.
+ #define APPLY_FOR_AGGREGATED_VARIANTS(M) \
+ M(key8) \
+ M(key16) \
+ M(key32) \
+ M(key64) \
+ M(key_string) \
+ M(key_fixed_string) \
+ M(keys16) \
+ M(keys32) \
+ M(keys64) \
+ M(keys128) \
+ M(keys256) \
+ M(serialized) \
+ M(key64_hash64) \
+ M(key_string_hash64) \
+ M(key_fixed_string_hash64) \
+ M(keys128_hash64) \
+ M(keys256_hash64) \
+ M(serialized_hash64) \
+ M(nullable_keys128) \
+ M(nullable_keys256) \
+
+
+ enum class Type
+ {
+ EMPTY = 0,
+ without_key,
+
+ #define M(NAME) NAME,
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ };
+ Type type = Type::EMPTY;
+
+ AggregatedDataVariants()
+ : aggregates_pools(1, std::make_shared<Arena>())
+ , aggregates_pool(aggregates_pools.back().get())
+ {}
+
+ bool empty() const { return type == Type::EMPTY; }
+ void invalidate() { type = Type::EMPTY; }
+
+ ~AggregatedDataVariants();
+
+ void init(Type type_)
+ {
+ switch (type_)
+ {
+ case Type::EMPTY: break;
+ case Type::without_key: break;
+
+ #define M(NAME) \
+ case Type::NAME: NAME = std::make_unique<decltype(NAME)::element_type>(); break;
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ }
+
+ type = type_;
+ }
+
+ /// Number of rows (different keys).
+ size_t size() const
+ {
+ switch (type)
+ {
+ case Type::EMPTY: return 0;
+ case Type::without_key: return 1;
+
+ #define M(NAME) \
+ case Type::NAME: return NAME->data.size() + (without_key != nullptr);
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ }
+
+ __builtin_unreachable();
+ }
+
+ /// The size without taking into account the row in which data is written for the calculation of TOTALS.
+ size_t sizeWithoutOverflowRow() const
+ {
+ switch (type)
+ {
+ case Type::EMPTY: return 0;
+ case Type::without_key: return 1;
+
+ #define M(NAME) \
+ case Type::NAME: return NAME->data.size();
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ }
+
+ __builtin_unreachable();
+ }
+
+ const char * getMethodName() const
+ {
+ switch (type)
+ {
+ case Type::EMPTY: return "EMPTY";
+ case Type::without_key: return "without_key";
+
+ #define M(NAME) \
+ case Type::NAME: return #NAME;
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ }
+
+ __builtin_unreachable();
+ }
+
+ static HashMethodContextPtr createCache(Type type, const HashMethodContext::Settings & settings)
+ {
+ switch (type)
+ {
+ case Type::without_key: return nullptr;
+
+ #define M(NAME) \
+ case Type::NAME: \
+ { \
+ using TPtr ## NAME = decltype(AggregatedDataVariants::NAME); \
+ using T ## NAME = typename TPtr ## NAME ::element_type; \
+ return T ## NAME ::State::createContext(settings); \
+ }
+
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+
+ default:
+ throw Exception("Unknown aggregated data variant.");
+ }
+ }
+};
+
+using AggregatedDataVariantsPtr = std::shared_ptr<AggregatedDataVariants>;
+using ManyAggregatedDataVariants = std::vector<AggregatedDataVariantsPtr>;
+using ManyAggregatedDataVariantsPtr = std::shared_ptr<ManyAggregatedDataVariants>;
+
+/** How are "total" values calculated with WITH TOTALS?
+ * (For more details, see TotalsHavingTransform.)
+ *
+ * In the absence of group_by_overflow_mode = 'any', the data is aggregated as usual, but the states of the aggregate functions are not finalized.
+ * Later, the aggregate function states for all rows (passed through HAVING) are merged into one - this will be TOTALS.
+ *
+ * If there is group_by_overflow_mode = 'any', the data is aggregated as usual, except for the keys that did not fit in max_rows_to_group_by.
+ * For these keys, the data is aggregated into one additional row - see below under the names `overflow_row`, `overflows`...
+ * Later, the aggregate function states for all rows (passed through HAVING) are merged into one,
+ * also overflow_row is added or not added (depending on the totals_mode setting) also - this will be TOTALS.
+ */
+
+
+/** Aggregates the source of the blocks.
+ */
+class Aggregator final
+{
+public:
+ struct Params
+ {
+ /// Data structure of source blocks.
+ Header src_header;
+ /// Data structure of intermediate blocks before merge.
+ Header intermediate_header;
+
+ /// What to count.
+ const ColumnNumbers keys;
+ const AggregateDescriptions aggregates;
+ const size_t keys_size;
+ const size_t aggregates_size;
+
+ /// The settings of approximate calculation of GROUP BY.
+ const bool overflow_row; /// Do we need to put into AggregatedDataVariants::without_key aggregates for keys that are not in max_rows_to_group_by.
+ const size_t max_rows_to_group_by = 0;
+ const OverflowMode group_by_overflow_mode = OverflowMode::THROW;
+
+ /// Return empty result when aggregating without keys on empty set.
+ bool empty_result_for_aggregation_by_empty_set = false;
+
+ /// Settings is used to determine cache size. No threads are created.
+ size_t max_threads;
+
+ Params(const Header & src_header_,
+ const Header & intermediate_header_,
+ const ColumnNumbers & keys_,
+ const AggregateDescriptions & aggregates_,
+ bool overflow_row_,
+ size_t max_threads_ = 1)
+ : src_header(src_header_)
+ , intermediate_header(intermediate_header_)
+ , keys(keys_)
+ , aggregates(aggregates_)
+ , keys_size(keys.size())
+ , aggregates_size(aggregates.size())
+ , overflow_row(overflow_row_)
+ , max_threads(max_threads_)
+ {}
+
+ Params(bool is_megre, const Header & header_,
+ const ColumnNumbers & keys_, const AggregateDescriptions & aggregates_, bool overflow_row_, size_t max_threads_ = 1)
+ : Params((is_megre ? Header() : header_), (is_megre ? header_ : Header()), keys_, aggregates_, overflow_row_, max_threads_)
+ {}
+
+ static Header getHeader(
+ const Header & src_header,
+ const Header & intermediate_header,
+ const ColumnNumbers & keys,
+ const AggregateDescriptions & aggregates,
+ bool final);
+
+ Header getHeader(bool final) const
+ {
+ return getHeader(src_header, intermediate_header, keys, aggregates, final);
+ }
+ };
+
+ explicit Aggregator(const Params & params_);
+
+ /// Aggregate the source. Get the result in the form of one of the data structures.
+ void execute(const BlockInputStreamPtr & stream, AggregatedDataVariants & result);
+
+ using AggregateColumns = std::vector<ColumnRawPtrs>;
+ using AggregateFunctionsPlainPtrs = std::vector<const IAggregateFunction *>;
+
+ /// Process one block. Return false if the processing should be aborted (with group_by_overflow_mode = 'break').
+ bool executeOnBlock(const Block & block,
+ AggregatedDataVariants & result,
+ ColumnRawPtrs & key_columns,
+ AggregateColumns & aggregate_columns, /// Passed to not create them anew for each block
+ bool & no_more_keys) const;
+
+ bool executeOnBlock(Columns columns,
+ size_t row_begin, size_t row_end,
+ AggregatedDataVariants & result,
+ ColumnRawPtrs & key_columns,
+ AggregateColumns & aggregate_columns, /// Passed to not create them anew for each block
+ bool & no_more_keys) const;
+
+ /// Used for aggregate projection.
+ bool mergeOnBlock(Block block, AggregatedDataVariants & result, bool & no_more_keys) const;
+
+ /** Convert the aggregation data structure into a block.
+ * If overflow_row = true, then aggregates for rows that are not included in max_rows_to_group_by are put in the first block.
+ *
+ * If final = false, then ColumnAggregateFunction is created as the aggregation columns with the state of the calculations,
+ * which can then be combined with other states (for distributed query processing).
+ * If final = true, then columns with ready values are created as aggregate columns.
+ */
+ BlocksList convertToBlocks(AggregatedDataVariants & data_variants, bool final) const;
+
+ ManyAggregatedDataVariants prepareVariantsToMerge(ManyAggregatedDataVariants & data_variants) const;
+
+ /** Merge the stream of partially aggregated blocks into one data structure.
+ * (Pre-aggregate several blocks that represent the result of independent aggregations from remote servers.)
+ */
+ void mergeStream(const BlockInputStreamPtr & stream, AggregatedDataVariants & result);
+
+ using BucketToBlocks = std::map<Int32, BlocksList>;
+ /// Merge partially aggregated blocks separated to buckets into one data structure.
+ void mergeBlocks(BucketToBlocks && bucket_to_blocks, AggregatedDataVariants & result);
+
+ /// Merge several partially aggregated blocks into one.
+ /// Precondition: for all blocks block.info.is_overflows flag must be the same.
+ /// (either all blocks are from overflow data or none blocks are).
+ /// The resulting block has the same value of is_overflows flag.
+ Block mergeBlocks(BlocksList & blocks, bool final);
+
+ /// Get data structure of the result.
+ Header getHeader(bool final) const;
+
+private:
+ friend struct AggregatedDataVariants;
+ friend class MergingAndConvertingBlockInputStream;
+
+ Params params;
+
+ AggregatedDataVariants::Type method_chosen;
+ Sizes key_sizes;
+
+ HashMethodContextPtr aggregation_state_cache;
+
+ AggregateFunctionsPlainPtrs aggregate_functions;
+
+ /** This array serves two purposes.
+ *
+ * Function arguments are collected side by side, and they do not need to be collected from different places. Also the array is made zero-terminated.
+ * The inner loop (for the case without_key) is almost twice as compact; performance gain of about 30%.
+ */
+ struct AggregateFunctionInstruction
+ {
+ const IAggregateFunction * that{};
+ size_t state_offset{};
+ const IColumn ** arguments{};
+ const IAggregateFunction * batch_that{};
+ const IColumn ** batch_arguments{};
+ };
+
+ using AggregateFunctionInstructions = std::vector<AggregateFunctionInstruction>;
+
+ Sizes offsets_of_aggregate_states; /// The offset to the n-th aggregate function in a row of aggregate functions.
+ size_t total_size_of_aggregate_states = 0; /// The total size of the row from the aggregate functions.
+
+ // add info to track alignment requirement
+ // If there are states whose alignment are v1, ..vn, align_aggregate_states will be max(v1, ... vn)
+ size_t align_aggregate_states = 1;
+
+ bool all_aggregates_has_trivial_destructor = false;
+
+ /** Select the aggregation method based on the number and types of keys. */
+ AggregatedDataVariants::Type chooseAggregationMethod();
+
+ /** Create states of aggregate functions for one key.
+ */
+ void createAggregateStates(AggregateDataPtr & aggregate_data) const;
+
+ /** Call `destroy` methods for states of aggregate functions.
+ * Used in the exception handler for aggregation, since RAII in this case is not applicable.
+ */
+ void destroyAllAggregateStates(AggregatedDataVariants & result) const;
+
+
+ /// Process one data block, aggregate the data into a hash table.
+ template <typename Method>
+ void executeImpl(
+ Method & method,
+ Arena * aggregates_pool,
+ size_t row_begin,
+ size_t row_end,
+ ColumnRawPtrs & key_columns,
+ AggregateFunctionInstruction * aggregate_instructions,
+ bool no_more_keys,
+ AggregateDataPtr overflow_row) const;
+
+ /// Specialization for a particular value no_more_keys.
+ template <bool no_more_keys, typename Method>
+ void executeImplBatch(
+ Method & method,
+ typename Method::State & state,
+ Arena * aggregates_pool,
+ size_t row_begin,
+ size_t row_end,
+ AggregateFunctionInstruction * aggregate_instructions,
+ AggregateDataPtr overflow_row) const;
+
+ /// For case when there are no keys (all aggregate into one row).
+ void executeWithoutKeyImpl(
+ AggregatedDataWithoutKey & res,
+ size_t row_begin,
+ size_t row_end,
+ AggregateFunctionInstruction * aggregate_instructions,
+ Arena * arena) const;
+
+ /// Merge NULL key data from hash table `src` into `dst`.
+ template <typename Method, typename Table>
+ void mergeDataNullKey(
+ Table & table_dst,
+ Table & table_src,
+ Arena * arena) const;
+
+ /// Merge data from hash table `src` into `dst`.
+ template <typename Method, typename Table>
+ void mergeDataImpl(
+ Table & table_dst,
+ Table & table_src,
+ Arena * arena) const;
+
+ /// Merge data from hash table `src` into `dst`, but only for keys that already exist in dst. In other cases, merge the data into `overflows`.
+ template <typename Method, typename Table>
+ void mergeDataNoMoreKeysImpl(
+ Table & table_dst,
+ AggregatedDataWithoutKey & overflows,
+ Table & table_src,
+ Arena * arena) const;
+
+ /// Same, but ignores the rest of the keys.
+ template <typename Method, typename Table>
+ void mergeDataOnlyExistingKeysImpl(
+ Table & table_dst,
+ Table & table_src,
+ Arena * arena) const;
+
+ void mergeWithoutKeyDataImpl(
+ ManyAggregatedDataVariants & non_empty_data) const;
+
+ template <typename Method>
+ void mergeSingleLevelDataImpl(
+ ManyAggregatedDataVariants & non_empty_data) const;
+
+ template <typename Method, typename Table>
+ void convertToBlockImpl(
+ Method & method,
+ Table & data,
+ MutableColumns & key_columns,
+ AggregateColumnsData & aggregate_columns,
+ MutableColumns & final_aggregate_columns,
+ Arena * arena,
+ bool final) const;
+
+ template <typename Mapped>
+ void insertAggregatesIntoColumns(
+ Mapped & mapped,
+ MutableColumns & final_aggregate_columns,
+ Arena * arena) const;
+
+ template <typename Method, typename Table>
+ void convertToBlockImplFinal(
+ Method & method,
+ Table & data,
+ const MutableColumns & key_columns,
+ MutableColumns & final_aggregate_columns,
+ Arena * arena) const;
+
+ template <typename Method, typename Table>
+ void convertToBlockImplNotFinal(
+ Method & method,
+ Table & data,
+ const MutableColumns & key_columns,
+ AggregateColumnsData & aggregate_columns) const;
+
+ template <typename Filler>
+ Block prepareBlockAndFill(
+ AggregatedDataVariants & data_variants,
+ bool final,
+ size_t rows,
+ Filler && filler) const;
+
+ template <typename Method>
+ Block convertOneBucketToBlock(
+ AggregatedDataVariants & data_variants,
+ Method & method,
+ Arena * arena,
+ bool final,
+ size_t bucket) const;
+
+ Block prepareBlockAndFillWithoutKey(AggregatedDataVariants & data_variants, bool final, bool is_overflows = false) const;
+ Block prepareBlockAndFillSingleLevel(AggregatedDataVariants & data_variants, bool final) const;
+
+ template <bool no_more_keys, typename Method, typename Table>
+ void mergeStreamsImplCase(
+ Block & block,
+ Arena * aggregates_pool,
+ Method & method,
+ Table & data,
+ AggregateDataPtr overflow_row) const;
+
+ template <typename Method, typename Table>
+ void mergeStreamsImpl(
+ Block & block,
+ Arena * aggregates_pool,
+ Method & method,
+ Table & data,
+ AggregateDataPtr overflow_row,
+ bool no_more_keys) const;
+
+ void mergeWithoutKeyStreamsImpl(
+ Block & block,
+ AggregatedDataVariants & result) const;
+
+ template <typename Method>
+ void mergeBucketImpl(
+ ManyAggregatedDataVariants & data, Int32 bucket, Arena * arena, std::atomic<bool> * is_cancelled = nullptr) const;
+
+ template <typename Method>
+ void convertBlockToTwoLevelImpl(
+ Method & method,
+ Arena * pool,
+ ColumnRawPtrs & key_columns,
+ const Block & source,
+ std::vector<Block> & destinations) const;
+
+ template <typename Method, typename Table>
+ void destroyImpl(Table & table) const;
+
+ void destroyWithoutKey(
+ AggregatedDataVariants & result) const;
+
+
+ /** Checks constraints on the maximum number of keys for aggregation.
+ * If it is exceeded, then, depending on the group_by_overflow_mode, either
+ * - throws an exception;
+ * - returns false, which means that execution must be aborted;
+ * - sets the variable no_more_keys to true.
+ */
+ bool checkLimits(size_t result_size, bool & no_more_keys) const;
+
+ void prepareAggregateInstructions(
+ Columns columns,
+ AggregateColumns & aggregate_columns,
+ Columns & materialized_columns,
+ AggregateFunctionInstructions & instructions) const;
+};
+
+
+/** Get the aggregation variant by its type. */
+template <typename Method> Method & getDataVariant(AggregatedDataVariants & variants);
+
+#define M(NAME) \
+ template <> inline decltype(AggregatedDataVariants::NAME)::element_type & getDataVariant<decltype(AggregatedDataVariants::NAME)::element_type>(AggregatedDataVariants & variants) { return *variants.NAME; }
+
+APPLY_FOR_AGGREGATED_VARIANTS(M)
+
+#undef M
+
+}
diff --git a/ydb/library/arrow_clickhouse/CMakeLists.txt b/ydb/library/arrow_clickhouse/CMakeLists.txt
new file mode 100644
index 0000000000..afe895bcb2
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/CMakeLists.txt
@@ -0,0 +1,34 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(Columns)
+add_subdirectory(Common)
+add_subdirectory(DataStreams)
+add_subdirectory(ut)
+
+add_library(ydb-library-arrow_clickhouse)
+target_include_directories(ydb-library-arrow_clickhouse PUBLIC
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/base
+)
+target_include_directories(ydb-library-arrow_clickhouse PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
+)
+target_link_libraries(ydb-library-arrow_clickhouse PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ libs-apache-arrow
+ library-arrow_clickhouse-Common
+ library-arrow_clickhouse-Columns
+ library-arrow_clickhouse-DataStreams
+)
+target_sources(ydb-library-arrow_clickhouse PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/AggregateFunctions/IAggregateFunction.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/Aggregator.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/base/common/mremap.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/base/common/getPageSize.cpp
+)
diff --git a/ydb/library/arrow_clickhouse/Columns/CMakeLists.txt b/ydb/library/arrow_clickhouse/Columns/CMakeLists.txt
new file mode 100644
index 0000000000..0f4c153a98
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Columns/CMakeLists.txt
@@ -0,0 +1,23 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(library-arrow_clickhouse-Columns)
+target_include_directories(library-arrow_clickhouse-Columns PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/base
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
+)
+target_link_libraries(library-arrow_clickhouse-Columns PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ libs-apache-arrow
+)
+target_sources(library-arrow_clickhouse-Columns PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/Columns/ColumnsCommon.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.cpp
+)
diff --git a/ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.cpp b/ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.cpp
new file mode 100644
index 0000000000..7d854890f3
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.cpp
@@ -0,0 +1,31 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#include <sstream>
+
+#include <Columns/ColumnAggregateFunction.h>
+#include <Columns/ColumnsCommon.h>
+#include <Common/Arena.h>
+#include <Common/HashTable/Hash.h>
+
+
+namespace CH
+{
+
+std::shared_ptr<arrow::Array> DataTypeAggregateFunction::MakeArray(std::shared_ptr<arrow::ArrayData> data) const
+{
+ return std::make_shared<ColumnAggregateFunction>(data);
+}
+
+ColumnAggregateFunction::~ColumnAggregateFunction()
+{
+ if (!func->hasTrivialDestructor() && !src)
+ {
+ auto & arr = getData();
+ for (int64_t i = 0; i < arr.length(); ++i)
+ func->destroy(reinterpret_cast<AggregateDataPtr>(arr.Value(i)));
+ }
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.h b/ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.h
new file mode 100644
index 0000000000..27cbb8ecd5
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Columns/ColumnAggregateFunction.h
@@ -0,0 +1,147 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <AggregateFunctions/IAggregateFunction.h>
+
+#include <common/StringRef.h>
+#include <ranges>
+
+namespace CH
+{
+
+class DataTypeAggregateFunction final : public arrow::ExtensionType
+{
+public:
+ static constexpr const char * FAMILY_NAME = "aggregate_function";
+
+ DataTypeAggregateFunction(const AggregateFunctionPtr & function_,
+ const DataTypes & argument_types_,
+ const Array & parameters_)
+ : arrow::ExtensionType(arrow::uint64())
+ , function(function_)
+ , argument_types(argument_types_)
+ , parameters(parameters_)
+ {}
+
+ std::string extension_name() const override { return FAMILY_NAME; }
+
+ bool ExtensionEquals(const arrow::ExtensionType& other) const override
+ {
+ return extension_name() != other.extension_name(); // TODO
+ }
+
+ std::shared_ptr<arrow::Array> MakeArray(std::shared_ptr<arrow::ArrayData> data) const override;
+
+ virtual arrow::Result<std::shared_ptr<arrow::DataType>> Deserialize(std::shared_ptr<arrow::DataType> /*storage_type*/,
+ const std::string& /*serialized_data*/) const override
+ {
+ return std::make_shared<DataTypeAggregateFunction>(AggregateFunctionPtr{}, DataTypes{}, Array{}); // TODO
+ }
+
+ std::string Serialize() const override { return {}; } // TODO
+
+ AggregateFunctionPtr getFunction() const { return function; }
+
+private:
+ AggregateFunctionPtr function;
+ DataTypes argument_types;
+ Array parameters;
+};
+
+/** Column of states of aggregate functions.
+ * Presented as an array of pointers to the states of aggregate functions (data).
+ * The states themselves are stored in one of the pools (arenas).
+ *
+ * It can be in two variants:
+ *
+ * 1. Own its values - that is, be responsible for destroying them.
+ * The column consists of the values "assigned to it" after the aggregation is performed (see Aggregator, convertToBlocks function),
+ * or from values created by itself (see `insert` method).
+ * In this case, `src` will be `nullptr`, and the column itself will be destroyed (call `IAggregateFunction::destroy`)
+ * states of aggregate functions in the destructor.
+ *
+ * 2. Do not own its values, but use values taken from another ColumnAggregateFunction column.
+ * For example, this is a column obtained by permutation/filtering or other transformations from another column.
+ * In this case, `src` will be `shared ptr` to the source column. Destruction of values will be handled by this source column.
+ *
+ * This solution is somewhat limited:
+ * - the variant in which the column contains a part of "it's own" and a part of "another's" values is not supported;
+ * - the option of having multiple source columns is not supported, which may be necessary for a more optimal merge of the two columns.
+ *
+ * These restrictions can be removed if you add an array of flags or even refcount,
+ * specifying which individual values should be destroyed and which ones should not.
+ * Clearly, this method would have a substantially non-zero price.
+ */
+class ColumnAggregateFunction final : public arrow::ExtensionArray
+{
+private:
+#if 0
+ /// Arenas used by function states that are created elsewhere. We own these
+ /// arenas in the sense of extending their lifetime, but do not modify them.
+ /// Even reading these arenas is unsafe, because they may be shared with
+ /// other data blocks and modified by other threads concurrently.
+ ConstArenas foreign_arenas;
+#endif
+ /// Used for destroying states and for finalization of values.
+ AggregateFunctionPtr func;
+
+ /// Source column. Used (holds source from destruction),
+ /// if this column has been constructed from another and uses all or part of its values.
+ ColumnPtr src;
+
+public:
+ ColumnAggregateFunction(const std::shared_ptr<DataTypeAggregateFunction> & data_type)
+ : arrow::ExtensionArray(data_type, *arrow::MakeArrayOfNull(arrow::uint64(), 0))
+ , func(data_type->getFunction())
+ {}
+
+ explicit ColumnAggregateFunction(const std::shared_ptr<arrow::ArrayData>& data)
+ : arrow::ExtensionArray(data)
+ , func(std::static_pointer_cast<DataTypeAggregateFunction>(data->type)->getFunction())
+ {}
+
+ ~ColumnAggregateFunction() override;
+
+ const arrow::UInt64Array & getData() const { return static_cast<arrow::UInt64Array &>(*storage()); }
+ const AggregateDataPtr * rawData() const { return reinterpret_cast<const AggregateDataPtr *>(getData().raw_values()); }
+};
+
+
+class MutableColumnAggregateFunction final : public arrow::ArrayBuilder
+{
+public:
+ MutableColumnAggregateFunction(const std::shared_ptr<DataTypeAggregateFunction> & data_type_,
+ arrow::MemoryPool* pool = arrow::default_memory_pool())
+ : arrow::ArrayBuilder(pool)
+ , data_type(data_type_)
+ , builder(std::make_shared<arrow::UInt64Builder>(pool))
+ {}
+
+ std::shared_ptr<arrow::DataType> type() const override { return data_type; }
+
+ arrow::Status AppendNull() override { return arrow::Status(arrow::StatusCode::NotImplemented, __FUNCTION__); }
+ arrow::Status AppendNulls(int64_t) override { return arrow::Status(arrow::StatusCode::NotImplemented, __FUNCTION__); }
+ arrow::Status AppendEmptyValue() override { return arrow::Status(arrow::StatusCode::NotImplemented, __FUNCTION__); }
+ arrow::Status AppendEmptyValues(int64_t) override { return arrow::Status(arrow::StatusCode::NotImplemented, __FUNCTION__); }
+
+ arrow::Status FinishInternal(std::shared_ptr<arrow::ArrayData>* out) override
+ {
+ auto array = *builder->Finish();
+ *out = array->data()->Copy();
+ (*out)->type = data_type;
+ // TODO: add arenas
+ return arrow::Status::OK();
+ }
+
+ arrow::UInt64Builder & getData() { return *builder; }
+
+private:
+ std::shared_ptr<DataTypeAggregateFunction> data_type;
+ std::shared_ptr<arrow::UInt64Builder> builder;
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/Columns/ColumnsCommon.cpp b/ydb/library/arrow_clickhouse/Columns/ColumnsCommon.cpp
new file mode 100644
index 0000000000..c44841f07e
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Columns/ColumnsCommon.cpp
@@ -0,0 +1,575 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#ifdef __SSE2__
+ #include <emmintrin.h>
+#endif
+
+#include <Columns/ColumnsCommon.h>
+#include <Common/HashTable/HashSet.h>
+#include <Common/PODArray.h>
+
+
+namespace CH
+{
+
+#if defined(__SSE2__) && defined(__POPCNT__)
+/// Transform 64-byte mask to 64-bit mask.
+static UInt64 toBits64(const Int8 * bytes64)
+{
+ static const __m128i zero16 = _mm_setzero_si128();
+ UInt64 res =
+ static_cast<UInt64>(_mm_movemask_epi8(_mm_cmpeq_epi8(
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(bytes64)), zero16)))
+ | (static_cast<UInt64>(_mm_movemask_epi8(_mm_cmpeq_epi8(
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(bytes64 + 16)), zero16))) << 16)
+ | (static_cast<UInt64>(_mm_movemask_epi8(_mm_cmpeq_epi8(
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(bytes64 + 32)), zero16))) << 32)
+ | (static_cast<UInt64>(_mm_movemask_epi8(_mm_cmpeq_epi8(
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(bytes64 + 48)), zero16))) << 48);
+
+ return ~res;
+}
+#endif
+
+size_t countBytesInFilter(const uint8_t * filt, size_t start, size_t end)
+{
+ size_t count = 0;
+
+ /** NOTE: In theory, `filt` should only contain zeros and ones.
+ * But, just in case, here the condition > 0 (to signed bytes) is used.
+ * It would be better to use != 0, then this does not allow SSE2.
+ */
+
+ const Int8 * pos = reinterpret_cast<const Int8 *>(filt);
+ pos += start;
+
+ const Int8 * end_pos = pos + (end - start);
+
+#if defined(__SSE2__)
+ const Int8 * end_pos64 = pos + (end - start) / 64 * 64;
+
+ for (; pos < end_pos64; pos += 64)
+ count += std::popcount(toBits64(pos));
+
+ /// TODO Add duff device for tail?
+#endif
+
+ for (; pos < end_pos; ++pos)
+ count += *pos != 0;
+
+ return count;
+}
+
+size_t countBytesInFilterWithNull(const uint8_t * filt, const uint8_t * null_map, size_t start, size_t end)
+{
+ size_t count = 0;
+
+ /** NOTE: In theory, `filt` should only contain zeros and ones.
+ * But, just in case, here the condition > 0 (to signed bytes) is used.
+ * It would be better to use != 0, then this does not allow SSE2.
+ */
+
+ const Int8 * pos = reinterpret_cast<const Int8 *>(filt) + start;
+ const Int8 * pos2 = reinterpret_cast<const Int8 *>(null_map) + start;
+ const Int8 * end_pos = pos + (end - start);
+
+#if defined(__SSE2__)
+ const Int8 * end_pos64 = pos + (end - start) / 64 * 64;
+
+ for (; pos < end_pos64; pos += 64, pos2 += 64)
+ count += std::popcount(toBits64(pos) & ~toBits64(pos2));
+
+ /// TODO Add duff device for tail?
+#endif
+
+ for (; pos < end_pos; ++pos, ++pos2)
+ count += (*pos & ~*pos2) != 0;
+
+ return count;
+}
+
+namespace
+{
+ /// Implementation details of filterArraysImpl function, used as template parameter.
+ /// Allow to build or not to build offsets array.
+
+ struct ResultOffsetsBuilder
+ {
+ PaddedPODArray<UInt64> & res_offsets;
+ XColumn::Offset current_src_offset = 0;
+
+ explicit ResultOffsetsBuilder(PaddedPODArray<UInt64> * res_offsets_) : res_offsets(*res_offsets_) {}
+
+ void reserve(ssize_t result_size_hint, size_t src_size)
+ {
+ res_offsets.reserve(result_size_hint > 0 ? result_size_hint : src_size);
+ }
+
+ void insertOne(size_t array_size)
+ {
+ current_src_offset += array_size;
+ res_offsets.push_back(current_src_offset);
+ }
+
+ template <size_t SIMD_BYTES>
+ void insertChunk(
+ const XColumn::Offset * src_offsets_pos,
+ bool first,
+ XColumn::Offset chunk_offset,
+ size_t chunk_size)
+ {
+ const auto offsets_size_old = res_offsets.size();
+ res_offsets.resize(offsets_size_old + SIMD_BYTES);
+ memcpy(&res_offsets[offsets_size_old], src_offsets_pos, SIMD_BYTES * sizeof(XColumn::Offset));
+
+ if (!first)
+ {
+ /// difference between current and actual offset
+ const auto diff_offset = chunk_offset - current_src_offset;
+
+ if (diff_offset > 0)
+ {
+ auto * res_offsets_pos = &res_offsets[offsets_size_old];
+
+ /// adjust offsets
+ for (size_t i = 0; i < SIMD_BYTES; ++i)
+ res_offsets_pos[i] -= diff_offset;
+ }
+ }
+ current_src_offset += chunk_size;
+ }
+ };
+
+ struct NoResultOffsetsBuilder
+ {
+ explicit NoResultOffsetsBuilder(PaddedPODArray<UInt64> *) {}
+ void reserve(ssize_t, size_t) {}
+ void insertOne(size_t) {}
+
+ template <size_t SIMD_BYTES>
+ void insertChunk(
+ const XColumn::Offset *,
+ bool,
+ XColumn::Offset,
+ size_t)
+ {
+ }
+ };
+
+
+ template <typename T, typename ResultOffsetsBuilder>
+ void filterArraysImplGeneric(
+ const PaddedPODArray<T> & src_elems, const PaddedPODArray<UInt64> & src_offsets,
+ PaddedPODArray<T> & res_elems, PaddedPODArray<UInt64> * res_offsets,
+ const XColumn::Filter & filt, ssize_t result_size_hint)
+ {
+ const size_t size = src_offsets.size();
+ if (size != filt.size())
+ throw Exception("Size of filter doesn't match size of column.");
+
+ ResultOffsetsBuilder result_offsets_builder(res_offsets);
+
+ if (result_size_hint)
+ {
+ result_offsets_builder.reserve(result_size_hint, size);
+
+ if (result_size_hint < 0)
+ res_elems.reserve(src_elems.size());
+ else if (result_size_hint < 1000000000 && src_elems.size() < 1000000000) /// Avoid overflow.
+ res_elems.reserve((result_size_hint * src_elems.size() + size - 1) / size);
+ }
+
+ const UInt8 * filt_pos = filt.data();
+ const auto * filt_end = filt_pos + size;
+
+ const auto * offsets_pos = src_offsets.data();
+ const auto * offsets_begin = offsets_pos;
+
+ /// copy array ending at *end_offset_ptr
+ const auto copy_array = [&] (const XColumn::Offset * offset_ptr)
+ {
+ const auto arr_offset = offset_ptr == offsets_begin ? 0 : offset_ptr[-1];
+ const auto arr_size = *offset_ptr - arr_offset;
+
+ result_offsets_builder.insertOne(arr_size);
+
+ const auto elems_size_old = res_elems.size();
+ res_elems.resize(elems_size_old + arr_size);
+ memcpy(&res_elems[elems_size_old], &src_elems[arr_offset], arr_size * sizeof(T));
+ };
+
+ #ifdef __SSE2__
+ const __m128i zero_vec = _mm_setzero_si128();
+ static constexpr size_t SIMD_BYTES = 16;
+ const auto * filt_end_aligned = filt_pos + size / SIMD_BYTES * SIMD_BYTES;
+
+ while (filt_pos < filt_end_aligned)
+ {
+ UInt16 mask = _mm_movemask_epi8(_mm_cmpeq_epi8(
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(filt_pos)),
+ zero_vec));
+ mask = ~mask;
+
+ if (mask == 0)
+ {
+ /// SIMD_BYTES consecutive rows do not pass the filter
+ }
+ else if (mask == 0xffff)
+ {
+ /// SIMD_BYTES consecutive rows pass the filter
+ const auto first = offsets_pos == offsets_begin;
+
+ const auto chunk_offset = first ? 0 : offsets_pos[-1];
+ const auto chunk_size = offsets_pos[SIMD_BYTES - 1] - chunk_offset;
+
+ result_offsets_builder.template insertChunk<SIMD_BYTES>(offsets_pos, first, chunk_offset, chunk_size);
+
+ /// copy elements for SIMD_BYTES arrays at once
+ const auto elems_size_old = res_elems.size();
+ res_elems.resize(elems_size_old + chunk_size);
+ memcpy(&res_elems[elems_size_old], &src_elems[chunk_offset], chunk_size * sizeof(T));
+ }
+ else
+ {
+ for (size_t i = 0; i < SIMD_BYTES; ++i)
+ if (filt_pos[i])
+ copy_array(offsets_pos + i);
+ }
+
+ filt_pos += SIMD_BYTES;
+ offsets_pos += SIMD_BYTES;
+ }
+ #endif
+
+ while (filt_pos < filt_end)
+ {
+ if (*filt_pos)
+ copy_array(offsets_pos);
+
+ ++filt_pos;
+ ++offsets_pos;
+ }
+ }
+}
+
+bool insertData(MutableColumn & column, const StringRef & value)
+{
+ switch (column.type()->id())
+ {
+ case arrow::Type::UINT8:
+ return insertNumber(column, *reinterpret_cast<const UInt8 *>(value.data));
+ case arrow::Type::UINT16:
+ return insertNumber(column, *reinterpret_cast<const UInt16 *>(value.data));
+ case arrow::Type::UINT32:
+ return insertNumber(column, *reinterpret_cast<const UInt32 *>(value.data));
+ case arrow::Type::UINT64:
+ return insertNumber(column, *reinterpret_cast<const UInt64 *>(value.data));
+
+ case arrow::Type::INT8:
+ return insertNumber(column, *reinterpret_cast<const Int8 *>(value.data));
+ case arrow::Type::INT16:
+ return insertNumber(column, *reinterpret_cast<const Int16 *>(value.data));
+ case arrow::Type::INT32:
+ return insertNumber(column, *reinterpret_cast<const Int32 *>(value.data));
+ case arrow::Type::INT64:
+ return insertNumber(column, *reinterpret_cast<const Int64 *>(value.data));
+
+ case arrow::Type::FLOAT:
+ return insertNumber(column, *reinterpret_cast<const float *>(value.data));
+ case arrow::Type::DOUBLE:
+ return insertNumber(column, *reinterpret_cast<const double *>(value.data));
+
+ case arrow::Type::FIXED_SIZE_BINARY:
+ return insertFixedString(column, value);
+
+ case arrow::Type::STRING:
+ case arrow::Type::BINARY:
+ return insertString(column, value);
+
+ case arrow::Type::TIMESTAMP:
+ return insertNumber(column, *reinterpret_cast<const Int64 *>(value.data));
+ case arrow::Type::DURATION:
+ return insertNumber(column, *reinterpret_cast<const Int64 *>(value.data));
+ case arrow::Type::DECIMAL:
+ return insertDecimal(column, value);
+
+ case arrow::Type::EXTENSION: // AggregateColumn
+ break; // TODO
+
+ default:
+ break;
+ }
+
+ throw Exception(std::string(__FUNCTION__) + " unexpected type " + column.type()->ToString());
+}
+
+StringRef serializeValueIntoArena(const IColumn& column, size_t row, Arena & pool, char const *& begin)
+{
+ switch (column.type_id())
+ {
+ case arrow::Type::UINT8:
+ return serializeNumberIntoArena(assert_cast<const ColumnUInt8 &>(column).Value(row), pool, begin);
+ case arrow::Type::UINT16:
+ return serializeNumberIntoArena(assert_cast<const ColumnUInt16 &>(column).Value(row), pool, begin);
+ case arrow::Type::UINT32:
+ return serializeNumberIntoArena(assert_cast<const ColumnUInt32 &>(column).Value(row), pool, begin);
+ case arrow::Type::UINT64:
+ return serializeNumberIntoArena(assert_cast<const ColumnUInt64 &>(column).Value(row), pool, begin);
+
+ case arrow::Type::INT8:
+ return serializeNumberIntoArena(assert_cast<const ColumnInt8 &>(column).Value(row), pool, begin);
+ case arrow::Type::INT16:
+ return serializeNumberIntoArena(assert_cast<const ColumnInt16 &>(column).Value(row), pool, begin);
+ case arrow::Type::INT32:
+ return serializeNumberIntoArena(assert_cast<const ColumnInt32 &>(column).Value(row), pool, begin);
+ case arrow::Type::INT64:
+ return serializeNumberIntoArena(assert_cast<const ColumnInt64 &>(column).Value(row), pool, begin);
+
+ case arrow::Type::FLOAT:
+ return serializeNumberIntoArena(assert_cast<const ColumnFloat32 &>(column).Value(row), pool, begin);
+ case arrow::Type::DOUBLE:
+ return serializeNumberIntoArena(assert_cast<const ColumnFloat64 &>(column).Value(row), pool, begin);
+
+ case arrow::Type::FIXED_SIZE_BINARY:
+ {
+ auto str = assert_cast<const ColumnFixedString &>(column).GetView(row);
+ return serializeFixedStringIntoArena(StringRef(str.data(), str.size()), pool, begin);
+ }
+ case arrow::Type::STRING:
+ case arrow::Type::BINARY:
+ {
+ auto str = assert_cast<const ColumnBinary &>(column).GetView(row);
+ return serializeStringIntoArena(StringRef(str.data(), str.size()), pool, begin);
+ }
+
+ case arrow::Type::TIMESTAMP:
+ return serializeNumberIntoArena(assert_cast<const ColumnTimestamp &>(column).Value(row), pool, begin);
+ case arrow::Type::DURATION:
+ return serializeNumberIntoArena(assert_cast<const ColumnDuration &>(column).Value(row), pool, begin);
+ case arrow::Type::DECIMAL:
+ {
+ auto str = assert_cast<const ColumnDecimal &>(column).GetView(row);
+ return serializeDecimalIntoArena(StringRef(str.data(), str.size()), pool, begin);
+ }
+
+ case arrow::Type::EXTENSION: // AggregateColumn
+ break; // TODO
+
+ default:
+ break;
+ }
+
+ throw Exception(std::string(__FUNCTION__) + " unexpected type " + column.type()->ToString());
+}
+
+const char * deserializeAndInsertFromArena(MutableColumn& column, const char * pos)
+{
+ switch (column.type()->id())
+ {
+ case arrow::Type::UINT8:
+ return deserializeNumberFromArena(assert_cast<MutableColumnUInt8 &>(column), pos);
+ case arrow::Type::UINT16:
+ return deserializeNumberFromArena(assert_cast<MutableColumnUInt16 &>(column), pos);
+ case arrow::Type::UINT32:
+ return deserializeNumberFromArena(assert_cast<MutableColumnUInt32 &>(column), pos);
+ case arrow::Type::UINT64:
+ return deserializeNumberFromArena(assert_cast<MutableColumnUInt64 &>(column), pos);
+
+ case arrow::Type::INT8:
+ return deserializeNumberFromArena(assert_cast<MutableColumnInt8 &>(column), pos);
+ case arrow::Type::INT16:
+ return deserializeNumberFromArena(assert_cast<MutableColumnInt16 &>(column), pos);
+ case arrow::Type::INT32:
+ return deserializeNumberFromArena(assert_cast<MutableColumnInt32 &>(column), pos);
+ case arrow::Type::INT64:
+ return deserializeNumberFromArena(assert_cast<MutableColumnInt64 &>(column), pos);
+
+ case arrow::Type::FLOAT:
+ return deserializeNumberFromArena(assert_cast<MutableColumnFloat32 &>(column), pos);
+ case arrow::Type::DOUBLE:
+ return deserializeNumberFromArena(assert_cast<MutableColumnFloat64 &>(column), pos);
+
+ case arrow::Type::FIXED_SIZE_BINARY:
+ return deserializeStringFromArena(assert_cast<MutableColumnFixedString &>(column), pos);
+
+ case arrow::Type::STRING:
+ case arrow::Type::BINARY:
+ return deserializeStringFromArena(assert_cast<MutableColumnBinary &>(column), pos);
+
+ case arrow::Type::TIMESTAMP:
+ return deserializeNumberFromArena(assert_cast<MutableColumnTimestamp &>(column), pos);
+ case arrow::Type::DURATION:
+ return deserializeNumberFromArena(assert_cast<MutableColumnDuration &>(column), pos);
+ case arrow::Type::DECIMAL:
+ return deserializeDecimalFromArena(assert_cast<MutableColumnDecimal &>(column), pos);
+
+ case arrow::Type::EXTENSION: // AggregateColumn
+ break; // TODO
+
+ default:
+ break;
+ }
+
+ throw Exception(std::string(__FUNCTION__) + " unexpected type " + column.type()->ToString());
+}
+
+void updateHashWithValue(const IColumn& column, size_t row, SipHash & hash)
+{
+ switch (column.type_id())
+ {
+ case arrow::Type::UINT8:
+ return hash.update(assert_cast<const ColumnUInt8 &>(column).Value(row));
+ case arrow::Type::UINT16:
+ return hash.update(assert_cast<const ColumnUInt16 &>(column).Value(row));
+ case arrow::Type::UINT32:
+ return hash.update(assert_cast<const ColumnUInt32 &>(column).Value(row));
+ case arrow::Type::UINT64:
+ return hash.update(assert_cast<const ColumnUInt64 &>(column).Value(row));
+
+ case arrow::Type::INT8:
+ return hash.update(assert_cast<const ColumnInt8 &>(column).Value(row));
+ case arrow::Type::INT16:
+ return hash.update(assert_cast<const ColumnInt16 &>(column).Value(row));
+ case arrow::Type::INT32:
+ return hash.update(assert_cast<const ColumnInt32 &>(column).Value(row));
+ case arrow::Type::INT64:
+ return hash.update(assert_cast<const ColumnInt64 &>(column).Value(row));
+
+ case arrow::Type::FLOAT:
+ return hash.update(assert_cast<const ColumnFloat32 &>(column).Value(row));
+ case arrow::Type::DOUBLE:
+ return hash.update(assert_cast<const ColumnFloat64 &>(column).Value(row));
+
+ case arrow::Type::FIXED_SIZE_BINARY:
+ {
+ auto str = assert_cast<const ColumnFixedString &>(column).GetView(row);
+ return hash.update(str.data(), str.size());
+ }
+ case arrow::Type::STRING:
+ case arrow::Type::BINARY:
+ {
+ auto str = assert_cast<const ColumnBinary &>(column).GetView(row);
+ return hash.update(str.data(), str.size());
+ }
+
+ case arrow::Type::TIMESTAMP:
+ return hash.update(assert_cast<const ColumnTimestamp &>(column).Value(row));
+ case arrow::Type::DURATION:
+ return hash.update(assert_cast<const ColumnDuration &>(column).Value(row));
+ case arrow::Type::DECIMAL:
+ return hash.update(assert_cast<const ColumnDecimal &>(column).Value(row));
+
+ case arrow::Type::EXTENSION: // AggregateColumn
+ break; // TODO
+
+ default:
+ break;
+ }
+
+ throw Exception(std::string(__FUNCTION__) + " unexpected type " + column.type()->ToString());
+}
+
+MutableColumnPtr createMutableColumn(const DataTypePtr & type)
+{
+ switch (type->id())
+ {
+ case arrow::Type::UINT8:
+ return std::make_shared<MutableColumnUInt8>();
+ case arrow::Type::UINT16:
+ return std::make_shared<MutableColumnUInt16>();
+ case arrow::Type::UINT32:
+ return std::make_shared<MutableColumnUInt32>();
+ case arrow::Type::UINT64:
+ return std::make_shared<MutableColumnUInt64>();
+
+ case arrow::Type::INT8:
+ return std::make_shared<MutableColumnInt8>();
+ case arrow::Type::INT16:
+ return std::make_shared<MutableColumnInt16>();
+ case arrow::Type::INT32:
+ return std::make_shared<MutableColumnInt32>();
+ case arrow::Type::INT64:
+ return std::make_shared<MutableColumnInt64>();
+
+ case arrow::Type::FLOAT:
+ return std::make_shared<MutableColumnFloat32>();
+ case arrow::Type::DOUBLE:
+ return std::make_shared<MutableColumnFloat64>();
+
+ case arrow::Type::FIXED_SIZE_BINARY:
+ return std::make_shared<MutableColumnFixedString>(type);
+
+ case arrow::Type::BINARY:
+ return std::make_shared<MutableColumnBinary>();
+ case arrow::Type::STRING:
+ return std::make_shared<MutableColumnString>();
+
+ case arrow::Type::TIMESTAMP:
+ return std::make_shared<MutableColumnTimestamp>(type, arrow::default_memory_pool());
+ case arrow::Type::DURATION:
+ return std::make_shared<MutableColumnDuration>(type, arrow::default_memory_pool());
+ case arrow::Type::DECIMAL:
+ return std::make_shared<MutableColumnDecimal>(type, arrow::default_memory_pool());
+
+ case arrow::Type::EXTENSION: // AggregateColumn
+ break; // TODO: do we really need it here?
+
+ default:
+ break;
+ }
+
+ throw Exception(std::string(__FUNCTION__) + " unexpected type " + type->ToString());
+}
+
+uint32_t fixedContiguousSize(const DataTypePtr & type)
+{
+ switch (type->id())
+ {
+ case arrow::Type::UINT8:
+ return 1;
+ case arrow::Type::UINT16:
+ return 2;
+ case arrow::Type::UINT32:
+ return 4;
+ case arrow::Type::UINT64:
+ return 8;
+ case arrow::Type::INT8:
+ return 1;
+ case arrow::Type::INT16:
+ return 2;
+ case arrow::Type::INT32:
+ return 4;
+ case arrow::Type::INT64:
+ return 8;
+ case arrow::Type::FLOAT:
+ return 4;
+ case arrow::Type::DOUBLE:
+ return 8;
+
+ case arrow::Type::FIXED_SIZE_BINARY:
+ return std::static_pointer_cast<DataTypeFixedString>(type)->byte_width();
+
+ case arrow::Type::STRING:
+ case arrow::Type::BINARY:
+ break;
+
+ case arrow::Type::TIMESTAMP:
+ return 8;
+ case arrow::Type::DURATION:
+ return 8;
+ case arrow::Type::DECIMAL:
+ return std::static_pointer_cast<DataTypeDecimal>(type)->byte_width();
+
+ case arrow::Type::EXTENSION: // AggregateColumn
+ break;
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/Columns/ColumnsCommon.h b/ydb/library/arrow_clickhouse/Columns/ColumnsCommon.h
new file mode 100644
index 0000000000..e427867e49
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Columns/ColumnsCommon.h
@@ -0,0 +1,135 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <Common/SipHash.h>
+#include <Common/Arena.h>
+
+#include <common/StringRef.h>
+
+/// Common helper methods for implementation of different columns.
+
+namespace CH
+{
+
+/// Counts how many bytes of `filt` are greater than zero.
+size_t countBytesInFilter(const uint8_t * filt, size_t start, size_t end);
+size_t countBytesInFilterWithNull(const uint8_t * filt, const uint8_t * null_map, size_t start, size_t end);
+
+template <typename T>
+inline StringRef serializeNumberIntoArena(T value, Arena & arena, char const *& begin)
+{
+ auto * pos = arena.allocContinue(sizeof(T), begin);
+ unalignedStore<T>(pos, value);
+ return StringRef(pos, sizeof(T));
+}
+
+inline StringRef serializeStringIntoArena(const StringRef & str, Arena & arena, char const *& begin)
+{
+ StringRef res;
+ res.size = sizeof(str.size) + str.size;
+ char * pos = arena.allocContinue(res.size, begin);
+ memcpy(pos, &str.size, sizeof(str.size));
+ memcpy(pos + sizeof(str.size), str.data, str.size);
+ res.data = pos;
+ return res;
+}
+
+inline StringRef serializeFixedStringIntoArena(const StringRef & str, Arena & arena, char const *& begin)
+{
+ auto * pos = arena.allocContinue(str.size, begin);
+ memcpy(pos, str.data, str.size);
+ return StringRef(pos, str.size);
+}
+
+inline StringRef serializeDecimalIntoArena(const StringRef & str, Arena & arena, char const *& begin)
+{
+ auto * pos = arena.allocContinue(str.size, begin);
+ memcpy(pos, str.data, str.size);
+ return StringRef(pos, str.size);
+}
+
+template <typename T>
+inline bool insertNumber(MutableColumn & column, T value)
+{
+ if constexpr (std::is_same_v<T, UInt8>)
+ return assert_cast<MutableColumnUInt8 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, UInt16>)
+ return assert_cast<MutableColumnUInt16 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, UInt32>)
+ return assert_cast<MutableColumnUInt32 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, UInt64>)
+ return assert_cast<MutableColumnUInt64 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, Int8>)
+ return assert_cast<MutableColumnInt8 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, Int16>)
+ return assert_cast<MutableColumnInt16 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, Int32>)
+ return assert_cast<MutableColumnInt32 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, Int64>)
+ return assert_cast<MutableColumnInt64 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, float>)
+ return assert_cast<MutableColumnFloat32 &>(column).Append(value).ok();
+ else if constexpr (std::is_same_v<T, double>)
+ return assert_cast<MutableColumnFloat64 &>(column).Append(value).ok();
+
+ throw Exception("unexpected type");
+}
+
+inline bool insertString(MutableColumn & column, const StringRef & value)
+{
+ return assert_cast<MutableColumnBinary &>(column).Append(arrow::util::string_view{value.data, value.size}).ok();
+}
+
+inline bool insertFixedString(MutableColumn & column, const StringRef & value)
+{
+ return assert_cast<MutableColumnFixedString &>(column).Append(arrow::util::string_view{value.data, value.size}).ok();
+}
+
+inline bool insertDecimal(MutableColumn & column, const StringRef & value)
+{
+ return assert_cast<MutableColumnDecimal &>(column).Append(arrow::util::string_view{value.data, value.size}).ok();
+}
+
+template <typename DataType>
+inline const char * deserializeNumberFromArena(arrow::NumericBuilder<DataType> & column, const char * pos)
+{
+ using T = typename arrow::TypeTraits<DataType>::CType;
+
+ T value = unalignedLoad<T>(pos);
+ column.Append(value).ok();
+ return pos + sizeof(T);
+}
+
+inline const char * deserializeStringFromArena(MutableColumnBinary & column, const char * pos)
+{
+ const size_t string_size = unalignedLoad<size_t>(pos);
+ pos += sizeof(string_size);
+
+ column.Append(pos, string_size).ok();
+ return pos + string_size;
+}
+
+inline const char * deserializeStringFromArena(MutableColumnFixedString & column, const char * pos)
+{
+ column.Append(pos).ok();
+ return pos + column.byte_width();
+}
+
+inline const char * deserializeDecimalFromArena(MutableColumnDecimal & column, const char * pos)
+{
+ column.Append(pos).ok();
+ return pos + column.byte_width();
+}
+
+bool insertData(MutableColumn & column, const StringRef & value);
+StringRef serializeValueIntoArena(const IColumn& column, size_t row, Arena & pool, char const *& begin);
+const char * deserializeAndInsertFromArena(MutableColumn& column, const char * pos);
+void updateHashWithValue(const IColumn& column, size_t row, SipHash & hash);
+MutableColumnPtr createMutableColumn(const DataTypePtr & type);
+uint32_t fixedContiguousSize(const DataTypePtr & type);
+
+}
diff --git a/ydb/library/arrow_clickhouse/Columns/ColumnsHashing.h b/ydb/library/arrow_clickhouse/Columns/ColumnsHashing.h
new file mode 100644
index 0000000000..dd3ce650f0
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Columns/ColumnsHashing.h
@@ -0,0 +1,293 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <Common/Arena.h>
+#include <Common/PODArray.h>
+#include <Common/HashTable/HashTable.h>
+#include <Common/HashTable/HashTableKeyHolder.h>
+#include <Columns/ColumnsHashingImpl.h>
+
+#include <common/unaligned.h>
+
+#include <memory>
+#include <cassert>
+
+
+namespace CH
+{
+
+namespace ColumnsHashing
+{
+
+/// For the case when there is one numeric key.
+/// UInt8/16/32/64 for any type with corresponding bit width.
+template <typename Value, typename Mapped, typename FieldType, bool use_cache = true, bool need_offset = false>
+struct HashMethodOneNumber
+ : public columns_hashing_impl::HashMethodBase<HashMethodOneNumber<Value, Mapped, FieldType, use_cache, need_offset>, Value, Mapped, use_cache, need_offset>
+{
+ using Self = HashMethodOneNumber<Value, Mapped, FieldType, use_cache, need_offset>;
+ using Base = columns_hashing_impl::HashMethodBase<Self, Value, Mapped, use_cache, need_offset>;
+
+ const uint8_t * vec{};
+
+ /// If the keys of a fixed length then key_sizes contains their lengths, empty otherwise.
+ HashMethodOneNumber(const ColumnRawPtrs & key_columns, const Sizes & /*key_sizes*/, const HashMethodContextPtr &)
+ {
+ vec = assert_cast<const ColumnUInt8 *>(key_columns[0])->raw_values();
+ }
+
+ HashMethodOneNumber(const IColumn * column)
+ {
+ vec = assert_cast<const ColumnUInt8 *>(column)->raw_values();
+ }
+
+ /// Creates context. Method is called once and result context is used in all threads.
+ using Base::createContext; /// (const HashMethodContext::Settings &) -> HashMethodContextPtr
+
+ /// Emplace key into HashTable or HashMap. If Data is HashMap, returns ptr to value, otherwise nullptr.
+ /// Data is a HashTable where to insert key from column's row.
+ /// For Serialized method, key may be placed in pool.
+ using Base::emplaceKey; /// (Data & data, size_t row, Arena & pool) -> EmplaceResult
+
+ /// Find key into HashTable or HashMap. If Data is HashMap and key was found, returns ptr to value, otherwise nullptr.
+ using Base::findKey; /// (Data & data, size_t row, Arena & pool) -> FindResult
+
+ /// Get hash value of row.
+ using Base::getHash; /// (const Data & data, size_t row, Arena & pool) -> size_t
+
+ /// Is used for default implementation in HashMethodBase.
+ FieldType getKeyHolder(size_t row, Arena &) const { return unalignedLoad<FieldType>(vec + row * sizeof(FieldType)); }
+
+ const FieldType * getKeyData() const { return reinterpret_cast<const FieldType *>(vec); }
+};
+
+
+/// For the case when there is one string key.
+template <typename Value, typename Mapped, bool place_string_to_arena = true, bool use_cache = true, bool need_offset = false>
+struct HashMethodString
+ : public columns_hashing_impl::HashMethodBase<HashMethodString<Value, Mapped, place_string_to_arena, use_cache, need_offset>, Value, Mapped, use_cache, need_offset>
+{
+ using Self = HashMethodString<Value, Mapped, place_string_to_arena, use_cache, need_offset>;
+ using Base = columns_hashing_impl::HashMethodBase<Self, Value, Mapped, use_cache, need_offset>;
+
+ const int * offsets{};
+ const uint8_t * chars{};
+
+ HashMethodString(const ColumnRawPtrs & key_columns, const Sizes & /*key_sizes*/, const HashMethodContextPtr &)
+ {
+ const IColumn & column = *key_columns[0];
+ const auto & column_string = assert_cast<const ColumnBinary &>(column);
+ offsets = column_string.raw_value_offsets();
+ chars = column_string.raw_data();
+ }
+
+ auto getKeyHolder(ssize_t row, [[maybe_unused]] Arena & pool) const
+ {
+ StringRef key(chars + offsets[row - 1], offsets[row] - offsets[row - 1] - 1);
+
+ if constexpr (place_string_to_arena)
+ {
+ return ArenaKeyHolder{key, pool};
+ }
+ else
+ {
+ return key;
+ }
+ }
+
+protected:
+ friend class columns_hashing_impl::HashMethodBase<Self, Value, Mapped, use_cache>;
+};
+
+
+/// For the case when there is one fixed-length string key.
+template <typename Value, typename Mapped, bool place_string_to_arena = true, bool use_cache = true, bool need_offset = false>
+struct HashMethodFixedString
+ : public columns_hashing_impl::
+ HashMethodBase<HashMethodFixedString<Value, Mapped, place_string_to_arena, use_cache, need_offset>, Value, Mapped, use_cache, need_offset>
+{
+ using Self = HashMethodFixedString<Value, Mapped, place_string_to_arena, use_cache, need_offset>;
+ using Base = columns_hashing_impl::HashMethodBase<Self, Value, Mapped, use_cache, need_offset>;
+
+ size_t n{};
+ const uint8_t * chars{};
+
+ HashMethodFixedString(const ColumnRawPtrs & key_columns, const Sizes & /*key_sizes*/, const HashMethodContextPtr &)
+ {
+ const IColumn & column = *key_columns[0];
+ const ColumnFixedString & column_string = assert_cast<const ColumnFixedString &>(column);
+ n = column_string.byte_width();
+ chars = column_string.raw_values();
+ }
+
+ auto getKeyHolder(size_t row, [[maybe_unused]] Arena & pool) const
+ {
+ StringRef key(&chars[row * n], n);
+
+ if constexpr (place_string_to_arena)
+ {
+ return ArenaKeyHolder{key, pool};
+ }
+ else
+ {
+ return key;
+ }
+ }
+
+protected:
+ friend class columns_hashing_impl::HashMethodBase<Self, Value, Mapped, use_cache>;
+};
+
+
+/// For the case when all keys are of fixed length, and they fit in N (for example, 128) bits.
+template <
+ typename Value,
+ typename Key,
+ typename Mapped,
+ bool has_nullable_keys_ = false,
+ bool has_low_cardinality_ = false,
+ bool use_cache = true,
+ bool need_offset = false>
+struct HashMethodKeysFixed
+ : private columns_hashing_impl::BaseStateKeysFixed<Key, has_nullable_keys_>
+ , public columns_hashing_impl::HashMethodBase<HashMethodKeysFixed<Value, Key, Mapped, has_nullable_keys_, has_low_cardinality_, use_cache, need_offset>, Value, Mapped, use_cache, need_offset>
+{
+ using Self = HashMethodKeysFixed<Value, Key, Mapped, has_nullable_keys_, has_low_cardinality_, use_cache, need_offset>;
+ using BaseHashed = columns_hashing_impl::HashMethodBase<Self, Value, Mapped, use_cache, need_offset>;
+ using Base = columns_hashing_impl::BaseStateKeysFixed<Key, has_nullable_keys_>;
+
+ static constexpr bool has_nullable_keys = has_nullable_keys_;
+
+ Sizes key_sizes;
+ size_t keys_size;
+
+#if 0 // shuffleKeyColumns disabled
+ PaddedPODArray<Key> prepared_keys;
+
+ static bool usePreparedKeys(const Sizes & key_sizes)
+ {
+ if (has_nullable_keys || sizeof(Key) > 16)
+ return false;
+
+ for (auto size : key_sizes)
+ if (size != 1 && size != 2 && size != 4 && size != 8 && size != 16)
+ return false;
+
+ return true;
+ }
+#endif
+
+ HashMethodKeysFixed(const ColumnRawPtrs & key_columns, const Sizes & key_sizes_, const HashMethodContextPtr &)
+ : Base(key_columns), key_sizes(std::move(key_sizes_)), keys_size(key_columns.size())
+ {
+#if 0
+ if (usePreparedKeys(key_sizes))
+ packFixedBatch(keys_size, Base::getActualColumns(), key_sizes, prepared_keys);
+#endif
+ }
+
+ ALWAYS_INLINE Key getKeyHolder(size_t row, Arena &) const
+ {
+ if constexpr (has_nullable_keys)
+ {
+ auto bitmap = Base::createBitmap(row);
+ return packFixed<Key>(row, keys_size, Base::getActualColumns(), key_sizes, bitmap);
+ }
+ else
+ {
+#if 0
+ if (!prepared_keys.empty())
+ return prepared_keys[row];
+#endif
+ return packFixed<Key>(row, keys_size, Base::getActualColumns(), key_sizes);
+ }
+ }
+#if 0
+ static std::optional<Sizes> shuffleKeyColumns(std::vector<IColumn *> & key_columns, const Sizes & key_sizes)
+ {
+ if (!usePreparedKeys(key_sizes))
+ return {};
+
+ std::vector<IColumn *> new_columns;
+ new_columns.reserve(key_columns.size());
+
+ Sizes new_sizes;
+ auto fill_size = [&](size_t size)
+ {
+ for (size_t i = 0; i < key_sizes.size(); ++i)
+ {
+ if (key_sizes[i] == size)
+ {
+ new_columns.push_back(key_columns[i]);
+ new_sizes.push_back(size);
+ }
+ }
+ };
+
+ fill_size(16);
+ fill_size(8);
+ fill_size(4);
+ fill_size(2);
+ fill_size(1);
+
+ key_columns.swap(new_columns);
+ return new_sizes;
+ }
+#endif
+};
+
+/** Hash by concatenating serialized key values.
+ * The serialized value differs in that it uniquely allows to deserialize it, having only the position with which it starts.
+ * That is, for example, for strings, it contains first the serialized length of the string, and then the bytes.
+ * Therefore, when aggregating by several strings, there is no ambiguity.
+ */
+template <typename Value, typename Mapped>
+struct HashMethodSerialized
+ : public columns_hashing_impl::HashMethodBase<HashMethodSerialized<Value, Mapped>, Value, Mapped, false>
+{
+ using Self = HashMethodSerialized<Value, Mapped>;
+ using Base = columns_hashing_impl::HashMethodBase<Self, Value, Mapped, false>;
+
+ ColumnRawPtrs key_columns;
+ size_t keys_size;
+
+ HashMethodSerialized(const ColumnRawPtrs & key_columns_, const Sizes & /*key_sizes*/, const HashMethodContextPtr &)
+ : key_columns(key_columns_), keys_size(key_columns_.size()) {}
+
+protected:
+ friend class columns_hashing_impl::HashMethodBase<Self, Value, Mapped, false>;
+
+ ALWAYS_INLINE SerializedKeyHolder getKeyHolder(size_t row, Arena & pool) const
+ {
+ return SerializedKeyHolder{
+ serializeKeysToPoolContiguous(row, keys_size, key_columns, pool),
+ pool};
+ }
+};
+
+/// For the case when there is one string key.
+template <typename Value, typename Mapped, bool use_cache = true, bool need_offset = false>
+struct HashMethodHashed
+ : public columns_hashing_impl::HashMethodBase<HashMethodHashed<Value, Mapped, use_cache, need_offset>, Value, Mapped, use_cache, need_offset>
+{
+ using Key = UInt128;
+ using Self = HashMethodHashed<Value, Mapped, use_cache, need_offset>;
+ using Base = columns_hashing_impl::HashMethodBase<Self, Value, Mapped, use_cache, need_offset>;
+
+ ColumnRawPtrs key_columns;
+
+ HashMethodHashed(ColumnRawPtrs key_columns_, const Sizes &, const HashMethodContextPtr &)
+ : key_columns(std::move(key_columns_)) {}
+
+ ALWAYS_INLINE Key getKeyHolder(size_t row, Arena &) const
+ {
+ return hash128(row, key_columns.size(), key_columns);
+ }
+};
+
+}
+}
diff --git a/ydb/library/arrow_clickhouse/Columns/ColumnsHashingImpl.h b/ydb/library/arrow_clickhouse/Columns/ColumnsHashingImpl.h
new file mode 100644
index 0000000000..b3f2adf200
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Columns/ColumnsHashingImpl.h
@@ -0,0 +1,375 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include "AggregationCommon.h"
+#include <Common/HashTable/HashTableKeyHolder.h>
+
+namespace CH
+{
+
+namespace ColumnsHashing
+{
+
+/// Generic context for HashMethod. Context is shared between multiple threads, all methods must be thread-safe.
+/// Is used for caching.
+class HashMethodContext
+{
+public:
+ virtual ~HashMethodContext() = default;
+
+ struct Settings
+ {
+ size_t max_threads;
+ };
+};
+
+using HashMethodContextPtr = std::shared_ptr<HashMethodContext>;
+
+
+namespace columns_hashing_impl
+{
+
+template <typename Value, bool consecutive_keys_optimization_>
+struct LastElementCache
+{
+ static constexpr bool consecutive_keys_optimization = consecutive_keys_optimization_;
+ Value value;
+ bool empty = true;
+ bool found = false;
+
+ bool check(const Value & value_) { return !empty && value == value_; }
+
+ template <typename Key>
+ bool check(const Key & key) { return !empty && value.first == key; }
+};
+
+template <typename Data>
+struct LastElementCache<Data, false>
+{
+ static constexpr bool consecutive_keys_optimization = false;
+};
+
+template <typename Mapped>
+class EmplaceResultImpl
+{
+ Mapped & value;
+ Mapped & cached_value;
+ bool inserted;
+
+public:
+ EmplaceResultImpl(Mapped & value_, Mapped & cached_value_, bool inserted_)
+ : value(value_), cached_value(cached_value_), inserted(inserted_) {}
+
+ bool isInserted() const { return inserted; }
+ auto & getMapped() const { return value; }
+
+ void setMapped(const Mapped & mapped)
+ {
+ cached_value = mapped;
+ value = mapped;
+ }
+};
+
+template <>
+class EmplaceResultImpl<void>
+{
+ bool inserted;
+
+public:
+ explicit EmplaceResultImpl(bool inserted_) : inserted(inserted_) {}
+ bool isInserted() const { return inserted; }
+};
+
+/// FindResult optionally may contain pointer to value and offset in hashtable buffer.
+/// Only bool found is required.
+/// So we will have 4 different specializations for FindResultImpl
+class FindResultImplBase
+{
+ bool found;
+
+public:
+ explicit FindResultImplBase(bool found_) : found(found_) {}
+ bool isFound() const { return found; }
+};
+
+template <bool need_offset = false>
+class FindResultImplOffsetBase
+{
+public:
+ constexpr static bool has_offset = need_offset;
+ explicit FindResultImplOffsetBase(size_t /* off */) {}
+};
+
+template <>
+class FindResultImplOffsetBase<true>
+{
+ size_t offset;
+public:
+ constexpr static bool has_offset = true;
+
+ explicit FindResultImplOffsetBase(size_t off) : offset(off) {}
+ ALWAYS_INLINE size_t getOffset() const { return offset; }
+};
+
+template <typename Mapped, bool need_offset = false>
+class FindResultImpl : public FindResultImplBase, public FindResultImplOffsetBase<need_offset>
+{
+ Mapped * value;
+
+public:
+ FindResultImpl()
+ : FindResultImplBase(false), FindResultImplOffsetBase<need_offset>(0)
+ {}
+
+ FindResultImpl(Mapped * value_, bool found_, size_t off)
+ : FindResultImplBase(found_), FindResultImplOffsetBase<need_offset>(off), value(value_) {}
+ Mapped & getMapped() const { return *value; }
+};
+
+template <bool need_offset>
+class FindResultImpl<void, need_offset> : public FindResultImplBase, public FindResultImplOffsetBase<need_offset>
+{
+public:
+ FindResultImpl(bool found_, size_t off) : FindResultImplBase(found_), FindResultImplOffsetBase<need_offset>(off) {}
+};
+
+template <typename Derived, typename Value, typename Mapped, bool consecutive_keys_optimization, bool need_offset = false>
+class HashMethodBase
+{
+public:
+ using EmplaceResult = EmplaceResultImpl<Mapped>;
+ using FindResult = FindResultImpl<Mapped, need_offset>;
+ static constexpr bool has_mapped = !std::is_same<Mapped, void>::value;
+ using Cache = LastElementCache<Value, consecutive_keys_optimization>;
+
+ static HashMethodContextPtr createContext(const HashMethodContext::Settings &) { return nullptr; }
+
+ template <typename Data>
+ ALWAYS_INLINE EmplaceResult emplaceKey(Data & data, size_t row, Arena & pool)
+ {
+ auto key_holder = static_cast<Derived &>(*this).getKeyHolder(row, pool);
+ return emplaceImpl(key_holder, data);
+ }
+
+ template <typename Data>
+ ALWAYS_INLINE FindResult findKey(Data & data, size_t row, Arena & pool)
+ {
+ auto key_holder = static_cast<Derived &>(*this).getKeyHolder(row, pool);
+ return findKeyImpl(keyHolderGetKey(key_holder), data);
+ }
+
+ template <typename Data>
+ ALWAYS_INLINE size_t getHash(const Data & data, size_t row, Arena & pool)
+ {
+ auto key_holder = static_cast<Derived &>(*this).getKeyHolder(row, pool);
+ return data.hash(keyHolderGetKey(key_holder));
+ }
+
+protected:
+ Cache cache;
+
+ HashMethodBase()
+ {
+ if constexpr (consecutive_keys_optimization)
+ {
+ if constexpr (has_mapped)
+ {
+ /// Init PairNoInit elements.
+ cache.value.second = Mapped();
+ cache.value.first = {};
+ }
+ else
+ cache.value = Value();
+ }
+ }
+
+ template <typename Data, typename KeyHolder>
+ ALWAYS_INLINE EmplaceResult emplaceImpl(KeyHolder & key_holder, Data & data)
+ {
+ if constexpr (Cache::consecutive_keys_optimization)
+ {
+ if (cache.found && cache.check(keyHolderGetKey(key_holder)))
+ {
+ if constexpr (has_mapped)
+ return EmplaceResult(cache.value.second, cache.value.second, false);
+ else
+ return EmplaceResult(false);
+ }
+ }
+
+ typename Data::LookupResult it;
+ bool inserted = false;
+ data.emplace(key_holder, it, inserted);
+
+ [[maybe_unused]] Mapped * cached = nullptr;
+ if constexpr (has_mapped)
+ cached = &it->getMapped();
+
+ if (inserted)
+ {
+ if constexpr (has_mapped)
+ {
+ new (&it->getMapped()) Mapped();
+ }
+ }
+
+ if constexpr (consecutive_keys_optimization)
+ {
+ cache.found = true;
+ cache.empty = false;
+
+ if constexpr (has_mapped)
+ {
+ cache.value.first = it->getKey();
+ cache.value.second = it->getMapped();
+ cached = &cache.value.second;
+ }
+ else
+ {
+ cache.value = it->getKey();
+ }
+ }
+
+ if constexpr (has_mapped)
+ return EmplaceResult(it->getMapped(), *cached, inserted);
+ else
+ return EmplaceResult(inserted);
+ }
+
+ template <typename Data, typename Key>
+ ALWAYS_INLINE FindResult findKeyImpl(Key key, Data & data)
+ {
+ if constexpr (Cache::consecutive_keys_optimization)
+ {
+ /// It's possible to support such combination, but code will became more complex.
+ /// Now there's not place where we need this options enabled together
+ static_assert(!FindResult::has_offset, "`consecutive_keys_optimization` and `has_offset` are conflicting options");
+ if (cache.check(key))
+ {
+ if constexpr (has_mapped)
+ return FindResult(&cache.value.second, cache.found, 0);
+ else
+ return FindResult(cache.found, 0);
+ }
+ }
+
+ auto it = data.find(key);
+
+ if constexpr (consecutive_keys_optimization)
+ {
+ cache.found = it != nullptr;
+ cache.empty = false;
+
+ if constexpr (has_mapped)
+ {
+ cache.value.first = key;
+ if (it)
+ {
+ cache.value.second = it->getMapped();
+ }
+ }
+ else
+ {
+ cache.value = key;
+ }
+ }
+
+ size_t offset = 0;
+ if constexpr (FindResult::has_offset)
+ {
+ offset = it ? data.offsetInternal(it) : 0;
+ }
+ if constexpr (has_mapped)
+ return FindResult(it ? &it->getMapped() : nullptr, it != nullptr, offset);
+ else
+ return FindResult(it != nullptr, offset);
+ }
+};
+
+
+template <typename T>
+struct MappedCache : public PaddedPODArray<T> {};
+
+template <>
+struct MappedCache<void> {};
+
+
+/// This class is designed to provide the functionality that is required for
+/// supporting nullable keys in HashMethodKeysFixed. If there are
+/// no nullable keys, this class is merely implemented as an empty shell.
+template <typename Key, bool has_nullable_keys>
+class BaseStateKeysFixed;
+
+/// Case where nullable keys are supported.
+template <typename Key>
+class BaseStateKeysFixed<Key, true>
+{
+protected:
+ BaseStateKeysFixed(const ColumnRawPtrs & key_columns)
+ {
+ actual_columns.reserve(key_columns.size());
+ for (const auto & col : key_columns)
+ {
+ actual_columns.push_back(col);
+ }
+ }
+
+ /// Return the columns which actually contain the values of the keys.
+ /// For a given key column, if it is nullable, we return its nested
+ /// column. Otherwise we return the key column itself.
+ inline const ColumnRawPtrs & getActualColumns() const
+ {
+ return actual_columns;
+ }
+
+ /// Create a bitmap that indicates whether, for a particular row,
+ /// a key column bears a null value or not.
+ KeysNullMap<Key> createBitmap(size_t row) const
+ {
+ KeysNullMap<Key> bitmap{};
+
+ for (size_t k = 0; k < actual_columns.size(); ++k)
+ {
+ bool is_null = actual_columns[k]->IsNull(row);
+ if (is_null)
+ {
+ size_t bucket = k / 8;
+ size_t offset = k % 8;
+ bitmap[bucket] |= UInt8(1) << offset;
+ }
+ }
+
+ return bitmap;
+ }
+
+private:
+ ColumnRawPtrs actual_columns;
+};
+
+/// Case where nullable keys are not supported.
+template <typename Key>
+class BaseStateKeysFixed<Key, false>
+{
+protected:
+ BaseStateKeysFixed(const ColumnRawPtrs & columns) : actual_columns(columns) {}
+
+ const ColumnRawPtrs & getActualColumns() const { return actual_columns; }
+
+ KeysNullMap<Key> createBitmap(size_t) const
+ {
+ throw Exception{"Internal error: calling createBitmap() for non-nullable keys is forbidden"};
+ }
+
+private:
+ ColumnRawPtrs actual_columns;
+};
+
+}
+
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/Allocator.cpp b/ydb/library/arrow_clickhouse/Common/Allocator.cpp
new file mode 100644
index 0000000000..96a2ae6ad0
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/Allocator.cpp
@@ -0,0 +1,35 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#include <Common/Allocator.h>
+
+namespace CH
+{
+
+/** Keep definition of this constant in cpp file; otherwise its value
+ * is inlined into allocator code making it impossible to override it
+ * in third-party code.
+ *
+ * Note: extern may seem redundant, but is actually needed due to bug in GCC.
+ * See also: https://gcc.gnu.org/legacy-ml/gcc-help/2017-12/msg00021.html
+ */
+#ifdef NDEBUG
+ __attribute__((__weak__)) extern const size_t MMAP_THRESHOLD = 64 * (1ULL << 20);
+#else
+ /**
+ * In debug build, use small mmap threshold to reproduce more memory
+ * stomping bugs. Along with ASLR it will hopefully detect more issues than
+ * ASan. The program may fail due to the limit on number of memory mappings.
+ *
+ * Not too small to avoid too quick exhaust of memory mappings.
+ */
+ __attribute__((__weak__)) extern const size_t MMAP_THRESHOLD = 16384;
+#endif
+
+template class Allocator<false, false>;
+template class Allocator<true, false>;
+template class Allocator<false, true>;
+template class Allocator<true, true>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/Allocator.h b/ydb/library/arrow_clickhouse/Common/Allocator.h
new file mode 100644
index 0000000000..46fcc75719
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/Allocator.h
@@ -0,0 +1,346 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <string.h>
+
+#ifdef NDEBUG
+ #define ALLOCATOR_ASLR 0
+#else
+ #define ALLOCATOR_ASLR 1
+#endif
+
+#if !defined(__APPLE__) && !defined(__FreeBSD__)
+#include <malloc.h>
+#endif
+#if !defined(WIN32)
+#include <sys/mman.h>
+#endif
+
+#include <cstdlib>
+#include <algorithm>
+
+
+#include <common/mremap.h>
+#include <common/getPageSize.h>
+
+#include <Common/Allocator_fwd.h>
+
+/// Required for older Darwin builds, that lack definition of MAP_ANONYMOUS
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+namespace CH
+{
+
+/**
+ * Many modern allocators (for example, tcmalloc) do not do a mremap for
+ * realloc, even in case of large enough chunks of memory. Although this allows
+ * you to increase performance and reduce memory consumption during realloc.
+ * To fix this, we do mremap manually if the chunk of memory is large enough.
+ * The threshold (64 MB) is chosen quite large, since changing the address
+ * space is very slow, especially in the case of a large number of threads. We
+ * expect that the set of operations mmap/something to do/mremap can only be
+ * performed about 1000 times per second.
+ *
+ * P.S. This is also required, because tcmalloc can not allocate a chunk of
+ * memory greater than 16 GB.
+ *
+ * P.P.S. Note that MMAP_THRESHOLD symbol is intentionally made weak. It allows
+ * to override it during linkage when using ClickHouse as a library in
+ * third-party applications which may already use own allocator doing mmaps
+ * in the implementation of alloc/realloc.
+ */
+extern const size_t MMAP_THRESHOLD;
+
+static constexpr size_t MALLOC_MIN_ALIGNMENT = 8;
+
+
+/** Responsible for allocating / freeing memory. Used, for example, in PODArray, Arena.
+ * Also used in hash tables.
+ * The interface is different from std::allocator
+ * - the presence of the method realloc, which for large chunks of memory uses mremap;
+ * - passing the size into the `free` method;
+ * - by the presence of the `alignment` argument;
+ * - the possibility of zeroing memory (used in hash tables);
+ * - random hint address for mmap
+ * - mmap_threshold for using mmap less or more
+ */
+template <bool clear_memory_, bool mmap_populate>
+class Allocator
+{
+public:
+ /// Allocate memory range.
+ void * alloc(size_t size, size_t alignment = 0)
+ {
+ checkSize(size);
+ return allocNoTrack(size, alignment);
+ }
+
+ /// Free memory range.
+ void free(void * buf, size_t size)
+ {
+ try
+ {
+ checkSize(size);
+ freeNoTrack(buf, size);
+ }
+ catch (...)
+ {
+ //DB::tryLogCurrentException("Allocator::free");
+ throw;
+ }
+ }
+
+ /** Enlarge memory range.
+ * Data from old range is moved to the beginning of new range.
+ * Address of memory range could change.
+ */
+ void * realloc(void * buf, size_t old_size, size_t new_size, size_t alignment = 0)
+ {
+ checkSize(new_size);
+
+ if (old_size == new_size)
+ {
+ /// nothing to do.
+ /// BTW, it's not possible to change alignment while doing realloc.
+ }
+ else if (old_size < MMAP_THRESHOLD && new_size < MMAP_THRESHOLD
+ && alignment <= MALLOC_MIN_ALIGNMENT)
+ {
+ void * new_buf = ::realloc(buf, new_size);
+ if (nullptr == new_buf)
+ throw std::runtime_error("Allocator: Cannot realloc");
+
+ buf = new_buf;
+ if constexpr (clear_memory)
+ if (new_size > old_size)
+ memset(reinterpret_cast<char *>(buf) + old_size, 0, new_size - old_size);
+ }
+ else if (old_size >= MMAP_THRESHOLD && new_size >= MMAP_THRESHOLD)
+ {
+ // On apple and freebsd self-implemented mremap used (common/mremap.h)
+ buf = clickhouse_mremap(buf, old_size, new_size, MREMAP_MAYMOVE,
+ PROT_READ | PROT_WRITE, mmap_flags, -1, 0);
+ if (MAP_FAILED == buf)
+ throw std::runtime_error("Allocator: Cannot mremap memory");
+
+ /// No need for zero-fill, because mmap guarantees it.
+ }
+ else if (new_size < MMAP_THRESHOLD)
+ {
+ void * new_buf = allocNoTrack(new_size, alignment);
+ memcpy(new_buf, buf, std::min(old_size, new_size));
+ freeNoTrack(buf, old_size);
+ buf = new_buf;
+ }
+ else
+ {
+ /// Big allocs that requires a copy. MemoryTracker is called inside 'alloc', 'free' methods.
+
+ void * new_buf = alloc(new_size, alignment);
+ memcpy(new_buf, buf, std::min(old_size, new_size));
+ free(buf, old_size);
+ buf = new_buf;
+ }
+
+ return buf;
+ }
+
+protected:
+ static constexpr size_t getStackThreshold()
+ {
+ return 0;
+ }
+
+ static constexpr bool clear_memory = clear_memory_;
+
+ // Freshly mmapped pages are copy-on-write references to a global zero page.
+ // On the first write, a page fault occurs, and an actual writable page is
+ // allocated. If we are going to use this memory soon, such as when resizing
+ // hash tables, it makes sense to pre-fault the pages by passing
+ // MAP_POPULATE to mmap(). This takes some time, but should be faster
+ // overall than having a hot loop interrupted by page faults.
+ // It is only supported on Linux.
+ static constexpr int mmap_flags = MAP_PRIVATE | MAP_ANONYMOUS
+#if defined(OS_LINUX)
+ | (mmap_populate ? MAP_POPULATE : 0)
+#endif
+ ;
+
+private:
+ void * allocNoTrack(size_t size, size_t alignment)
+ {
+ void * buf;
+ size_t mmap_min_alignment = ::getPageSize();
+
+ if (size >= MMAP_THRESHOLD)
+ {
+ if (alignment > mmap_min_alignment)
+ throw std::runtime_error("Too large alignment: more than page size when allocating");
+
+ buf = mmap(getMmapHint(), size, PROT_READ | PROT_WRITE,
+ mmap_flags, -1, 0);
+ if (MAP_FAILED == buf)
+ throw std::runtime_error("Allocator: Cannot mmap");
+
+ /// No need for zero-fill, because mmap guarantees it.
+ }
+ else
+ {
+ if (alignment <= MALLOC_MIN_ALIGNMENT)
+ {
+ if constexpr (clear_memory)
+ buf = ::calloc(size, 1);
+ else
+ buf = ::malloc(size);
+
+ if (nullptr == buf)
+ throw std::runtime_error("Allocator: Cannot malloc");
+ }
+ else
+ {
+ buf = nullptr;
+ int res = posix_memalign(&buf, alignment, size);
+
+ if (0 != res)
+ throw std::runtime_error("Cannot allocate memory (posix_memalign)");
+
+ if constexpr (clear_memory)
+ memset(buf, 0, size);
+ }
+ }
+ return buf;
+ }
+
+ void freeNoTrack(void * buf, size_t size)
+ {
+ if (size >= MMAP_THRESHOLD)
+ {
+ if (0 != munmap(buf, size))
+ throw std::runtime_error("Allocator: Cannot munmap");
+ }
+ else
+ {
+ ::free(buf);
+ }
+ }
+
+ void checkSize(size_t size)
+ {
+ /// More obvious exception in case of possible overflow (instead of just "Cannot mmap").
+ if (size >= 0x8000000000000000ULL)
+ throw std::runtime_error("Too large size passed to allocator. It indicates an error.");
+ }
+
+#ifndef NDEBUG
+ /// In debug builds, request mmap() at random addresses (a kind of ASLR), to
+ /// reproduce more memory stomping bugs. Note that Linux doesn't do it by
+ /// default. This may lead to worse TLB performance.
+ void * getMmapHint()
+ {
+ //return reinterpret_cast<void *>(std::uniform_int_distribution<intptr_t>(0x100000000000UL, 0x700000000000UL)(thread_local_rng));
+ return nullptr;
+ }
+#else
+ void * getMmapHint()
+ {
+ return nullptr;
+ }
+#endif
+};
+
+/** When using AllocatorWithStackMemory, located on the stack,
+ * GCC 4.9 mistakenly assumes that we can call `free` from a pointer to the stack.
+ * In fact, the combination of conditions inside AllocatorWithStackMemory does not allow this.
+ */
+#if !defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
+#endif
+
+/** Allocator with optimization to place small memory ranges in automatic memory.
+ */
+template <typename Base, size_t _initial_bytes, size_t Alignment>
+class AllocatorWithStackMemory : private Base
+{
+private:
+ alignas(Alignment) char stack_memory[_initial_bytes];
+
+public:
+ static constexpr size_t initial_bytes = _initial_bytes;
+
+ /// Do not use boost::noncopyable to avoid the warning about direct base
+ /// being inaccessible due to ambiguity, when derived classes are also
+ /// noncopiable (-Winaccessible-base).
+ AllocatorWithStackMemory(const AllocatorWithStackMemory&) = delete;
+ AllocatorWithStackMemory & operator = (const AllocatorWithStackMemory&) = delete;
+ AllocatorWithStackMemory() = default;
+ ~AllocatorWithStackMemory() = default;
+
+ void * alloc(size_t size)
+ {
+ if (size <= initial_bytes)
+ {
+ if constexpr (Base::clear_memory)
+ memset(stack_memory, 0, initial_bytes);
+ return stack_memory;
+ }
+
+ return Base::alloc(size, Alignment);
+ }
+
+ void free(void * buf, size_t size)
+ {
+ if (size > initial_bytes)
+ Base::free(buf, size);
+ }
+
+ void * realloc(void * buf, size_t old_size, size_t new_size)
+ {
+ /// Was in stack_memory, will remain there.
+ if (new_size <= initial_bytes)
+ return buf;
+
+ /// Already was big enough to not fit in stack_memory.
+ if (old_size > initial_bytes)
+ return Base::realloc(buf, old_size, new_size, Alignment);
+
+ /// Was in stack memory, but now will not fit there.
+ void * new_buf = Base::alloc(new_size, Alignment);
+ memcpy(new_buf, buf, old_size);
+ return new_buf;
+ }
+
+protected:
+ static constexpr size_t getStackThreshold()
+ {
+ return initial_bytes;
+ }
+};
+
+// A constant that gives the number of initially available bytes in
+// the allocator. Used to check that this number is in sync with the
+// initial size of array or hash table that uses the allocator.
+template<typename TAllocator>
+constexpr size_t allocatorInitialBytes = 0;
+
+template<typename Base, size_t initial_bytes, size_t Alignment>
+constexpr size_t allocatorInitialBytes<AllocatorWithStackMemory<
+ Base, initial_bytes, Alignment>> = initial_bytes;
+
+/// Prevent implicit template instantiation of Allocator
+
+extern template class Allocator<false, false>;
+extern template class Allocator<true, false>;
+extern template class Allocator<false, true>;
+extern template class Allocator<true, true>;
+
+}
+
+#if !defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
diff --git a/ydb/library/arrow_clickhouse/Common/Allocator_fwd.h b/ydb/library/arrow_clickhouse/Common/Allocator_fwd.h
new file mode 100644
index 0000000000..6e1b6b6225
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/Allocator_fwd.h
@@ -0,0 +1,19 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+/**
+ * This file provides forward declarations for Allocator.
+ */
+
+namespace CH
+{
+
+template <bool clear_memory_, bool mmap_populate = false>
+class Allocator;
+
+template <typename Base, size_t N = 64, size_t Alignment = 1>
+class AllocatorWithStackMemory;
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/Arena.h b/ydb/library/arrow_clickhouse/Common/Arena.h
new file mode 100644
index 0000000000..7f86e70e5a
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/Arena.h
@@ -0,0 +1,311 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <string.h>
+#include <memory>
+#include <vector>
+
+#include <Common/memcpySmall.h>
+#include <Common/Allocator.h>
+
+namespace CH
+{
+
+/** Memory pool to append something. For example, short strings.
+ * Usage scenario:
+ * - put lot of strings inside pool, keep their addresses;
+ * - addresses remain valid during lifetime of pool;
+ * - at destruction of pool, all memory is freed;
+ * - memory is allocated and freed by large MemoryChunks;
+ * - freeing parts of data is not possible (but look at ArenaWithFreeLists if you need);
+ */
+class Arena //: private boost::noncopyable
+{
+private:
+ /// Padding allows to use 'memcpySmallAllowReadWriteOverflow15' instead of 'memcpy'.
+ static constexpr size_t pad_right = 15;
+
+ /// Contiguous MemoryChunk of memory and pointer to free space inside it. Member of single-linked list.
+ struct alignas(16) MemoryChunk : private Allocator<false> /// empty base optimization
+ {
+ char * begin;
+ char * pos;
+ char * end; /// does not include padding.
+
+ MemoryChunk * prev;
+
+ MemoryChunk(size_t size_, MemoryChunk * prev_)
+ {
+ begin = reinterpret_cast<char *>(Allocator<false>::alloc(size_));
+ pos = begin;
+ end = begin + size_ - pad_right;
+ prev = prev_;
+
+ //ASAN_POISON_MEMORY_REGION(begin, size_);
+ }
+
+ ~MemoryChunk()
+ {
+ /// We must unpoison the memory before returning to the allocator,
+ /// because the allocator might not have asan integration, and the
+ /// memory would stay poisoned forever. If the allocator supports
+ /// asan, it will correctly poison the memory by itself.
+ //ASAN_UNPOISON_MEMORY_REGION(begin, size());
+
+ Allocator<false>::free(begin, size());
+
+ if (prev)
+ delete prev;
+ }
+
+ size_t size() const { return end + pad_right - begin; }
+ size_t remaining() const { return end - pos; }
+ };
+
+ size_t growth_factor;
+ size_t linear_growth_threshold;
+
+ /// Last contiguous MemoryChunk of memory.
+ MemoryChunk * head;
+ size_t size_in_bytes;
+ size_t page_size;
+
+ static size_t roundUpToPageSize(size_t s, size_t page_size)
+ {
+ return (s + page_size - 1) / page_size * page_size;
+ }
+
+ /// If MemoryChunks size is less than 'linear_growth_threshold', then use exponential growth, otherwise - linear growth
+ /// (to not allocate too much excessive memory).
+ size_t nextSize(size_t min_next_size) const
+ {
+ size_t size_after_grow = 0;
+
+ if (head->size() < linear_growth_threshold)
+ {
+ size_after_grow = std::max(min_next_size, head->size() * growth_factor);
+ }
+ else
+ {
+ // allocContinue() combined with linear growth results in quadratic
+ // behavior: we append the data by small amounts, and when it
+ // doesn't fit, we create a new MemoryChunk and copy all the previous data
+ // into it. The number of times we do this is directly proportional
+ // to the total size of data that is going to be serialized. To make
+ // the copying happen less often, round the next size up to the
+ // linear_growth_threshold.
+ size_after_grow = ((min_next_size + linear_growth_threshold - 1)
+ / linear_growth_threshold) * linear_growth_threshold;
+ }
+
+ assert(size_after_grow >= min_next_size);
+ return roundUpToPageSize(size_after_grow, page_size);
+ }
+
+ /// Add next contiguous MemoryChunk of memory with size not less than specified.
+ void NO_INLINE addMemoryChunk(size_t min_size)
+ {
+ head = new MemoryChunk(nextSize(min_size + pad_right), head);
+ size_in_bytes += head->size();
+ }
+
+ friend class ArenaAllocator;
+ template <size_t> friend class AlignedArenaAllocator;
+
+public:
+ explicit Arena(size_t initial_size_ = 4096, size_t growth_factor_ = 2, size_t linear_growth_threshold_ = 128 * 1024 * 1024)
+ : growth_factor(growth_factor_), linear_growth_threshold(linear_growth_threshold_),
+ head(new MemoryChunk(initial_size_, nullptr)), size_in_bytes(head->size()),
+ page_size(static_cast<size_t>(::getPageSize()))
+ {
+ }
+
+ ~Arena()
+ {
+ delete head;
+ }
+
+ /// Get piece of memory, without alignment.
+ char * alloc(size_t size)
+ {
+ if (unlikely(head->pos + size > head->end))
+ addMemoryChunk(size);
+
+ char * res = head->pos;
+ head->pos += size;
+ //ASAN_UNPOISON_MEMORY_REGION(res, size + pad_right);
+ return res;
+ }
+
+ /// Get piece of memory with alignment
+ char * alignedAlloc(size_t size, size_t alignment)
+ {
+ do
+ {
+ void * head_pos = head->pos;
+ size_t space = head->end - head->pos;
+
+ auto * res = static_cast<char *>(std::align(alignment, size, head_pos, space));
+ if (res)
+ {
+ head->pos = static_cast<char *>(head_pos);
+ head->pos += size;
+ //ASAN_UNPOISON_MEMORY_REGION(res, size + pad_right);
+ return res;
+ }
+
+ addMemoryChunk(size + alignment);
+ } while (true);
+ }
+
+ template <typename T>
+ T * alloc()
+ {
+ return reinterpret_cast<T *>(alignedAlloc(sizeof(T), alignof(T)));
+ }
+
+ /** Rollback just performed allocation.
+ * Must pass size not more that was just allocated.
+ * Return the resulting head pointer, so that the caller can assert that
+ * the allocation it intended to roll back was indeed the last one.
+ */
+ void * rollback(size_t size)
+ {
+ head->pos -= size;
+ //ASAN_POISON_MEMORY_REGION(head->pos, size + pad_right);
+ return head->pos;
+ }
+
+ /** Begin or expand a contiguous range of memory.
+ * 'range_start' is the start of range. If nullptr, a new range is
+ * allocated.
+ * If there is no space in the current MemoryChunk to expand the range,
+ * the entire range is copied to a new, bigger memory MemoryChunk, and the value
+ * of 'range_start' is updated.
+ * If the optional 'start_alignment' is specified, the start of range is
+ * kept aligned to this value.
+ *
+ * NOTE This method is usable only for the last allocation made on this
+ * Arena. For earlier allocations, see 'realloc' method.
+ */
+ char * allocContinue(size_t additional_bytes, char const *& range_start,
+ size_t start_alignment = 0)
+ {
+ /*
+ * Allocating zero bytes doesn't make much sense. Also, a zero-sized
+ * range might break the invariant that the range begins at least before
+ * the current MemoryChunk end.
+ */
+ assert(additional_bytes > 0);
+
+ if (!range_start)
+ {
+ // Start a new memory range.
+ char * result = start_alignment
+ ? alignedAlloc(additional_bytes, start_alignment)
+ : alloc(additional_bytes);
+
+ range_start = result;
+ return result;
+ }
+
+ // Extend an existing memory range with 'additional_bytes'.
+
+ // This method only works for extending the last allocation. For lack of
+ // original size, check a weaker condition: that 'begin' is at least in
+ // the current MemoryChunk.
+ assert(range_start >= head->begin);
+ assert(range_start < head->end);
+
+ if (head->pos + additional_bytes <= head->end)
+ {
+ // The new size fits into the last MemoryChunk, so just alloc the
+ // additional size. We can alloc without alignment here, because it
+ // only applies to the start of the range, and we don't change it.
+ return alloc(additional_bytes);
+ }
+
+ // New range doesn't fit into this MemoryChunk, will copy to a new one.
+ //
+ // Note: among other things, this method is used to provide a hack-ish
+ // implementation of realloc over Arenas in ArenaAllocators. It wastes a
+ // lot of memory -- quadratically so when we reach the linear allocation
+ // threshold. This deficiency is intentionally left as is, and should be
+ // solved not by complicating this method, but by rethinking the
+ // approach to memory management for aggregate function states, so that
+ // we can provide a proper realloc().
+ const size_t existing_bytes = head->pos - range_start;
+ const size_t new_bytes = existing_bytes + additional_bytes;
+ const char * old_range = range_start;
+
+ char * new_range = start_alignment
+ ? alignedAlloc(new_bytes, start_alignment)
+ : alloc(new_bytes);
+
+ memcpy(new_range, old_range, existing_bytes);
+
+ range_start = new_range;
+ return new_range + existing_bytes;
+ }
+
+ /// NOTE Old memory region is wasted.
+ char * realloc(const char * old_data, size_t old_size, size_t new_size)
+ {
+ char * res = alloc(new_size);
+ if (old_data)
+ {
+ memcpy(res, old_data, old_size);
+ //ASAN_POISON_MEMORY_REGION(old_data, old_size);
+ }
+ return res;
+ }
+
+ char * alignedRealloc(const char * old_data, size_t old_size, size_t new_size, size_t alignment)
+ {
+ char * res = alignedAlloc(new_size, alignment);
+ if (old_data)
+ {
+ memcpy(res, old_data, old_size);
+ //ASAN_POISON_MEMORY_REGION(old_data, old_size);
+ }
+ return res;
+ }
+
+ /// Insert string without alignment.
+ const char * insert(const char * data, size_t size)
+ {
+ char * res = alloc(size);
+ memcpy(res, data, size);
+ return res;
+ }
+
+ const char * alignedInsert(const char * data, size_t size, size_t alignment)
+ {
+ char * res = alignedAlloc(size, alignment);
+ memcpy(res, data, size);
+ return res;
+ }
+
+ /// Size of MemoryChunks in bytes.
+ size_t size() const
+ {
+ return size_in_bytes;
+ }
+
+ /// Bad method, don't use it -- the MemoryChunks are not your business, the entire
+ /// purpose of the arena code is to manage them for you, so if you find
+ /// yourself having to use this method, probably you're doing something wrong.
+ size_t remainingSpaceInCurrentMemoryChunk() const
+ {
+ return head->remaining();
+ }
+};
+
+using ArenaPtr = std::shared_ptr<Arena>;
+using Arenas = std::vector<ArenaPtr>;
+
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/CMakeLists.txt b/ydb/library/arrow_clickhouse/Common/CMakeLists.txt
new file mode 100644
index 0000000000..a455b526c0
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/CMakeLists.txt
@@ -0,0 +1,23 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(library-arrow_clickhouse-Common)
+target_include_directories(library-arrow_clickhouse-Common PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/base
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
+)
+target_link_libraries(library-arrow_clickhouse-Common PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ libs-apache-arrow
+)
+target_sources(library-arrow_clickhouse-Common PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/Common/Allocator.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/Common/PODArray.cpp
+)
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/FixedHashMap.h b/ydb/library/arrow_clickhouse/Common/HashTable/FixedHashMap.h
new file mode 100644
index 0000000000..7358fc0ea8
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/FixedHashMap.h
@@ -0,0 +1,186 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <Common/HashTable/FixedHashTable.h>
+#include <Common/HashTable/HashMap.h>
+
+namespace CH
+{
+
+template <typename Key, typename TMapped, typename TState = HashTableNoState>
+struct FixedHashMapCell
+{
+ using Mapped = TMapped;
+ using State = TState;
+
+ using value_type = PairNoInit<Key, Mapped>;
+ using mapped_type = TMapped;
+
+ bool full;
+ Mapped mapped;
+
+ FixedHashMapCell() {} //-V730
+ FixedHashMapCell(const Key &, const State &) : full(true) {}
+ FixedHashMapCell(const value_type & value_, const State &) : full(true), mapped(value_.second) {}
+
+ const VoidKey getKey() const { return {}; }
+ Mapped & getMapped() { return mapped; }
+ const Mapped & getMapped() const { return mapped; }
+
+ bool isZero(const State &) const { return !full; }
+ void setZero() { full = false; }
+
+ /// Similar to FixedHashSetCell except that we need to contain a pointer to the Mapped field.
+ /// Note that we have to assemble a continuous layout for the value_type on each call of getValue().
+ struct CellExt
+ {
+ CellExt() {} //-V730
+ CellExt(Key && key_, const FixedHashMapCell * ptr_) : key(key_), ptr(const_cast<FixedHashMapCell *>(ptr_)) {}
+ void update(Key && key_, const FixedHashMapCell * ptr_)
+ {
+ key = key_;
+ ptr = const_cast<FixedHashMapCell *>(ptr_);
+ }
+ Key key;
+ FixedHashMapCell * ptr;
+
+ const Key & getKey() const { return key; }
+ Mapped & getMapped() { return ptr->mapped; }
+ const Mapped & getMapped() const { return ptr->mapped; }
+ const value_type getValue() const { return {key, ptr->mapped}; }
+ };
+};
+
+
+/// In case when we can encode empty cells with zero mapped values.
+template <typename Key, typename TMapped, typename TState = HashTableNoState>
+struct FixedHashMapImplicitZeroCell
+{
+ using Mapped = TMapped;
+ using State = TState;
+
+ using value_type = PairNoInit<Key, Mapped>;
+ using mapped_type = TMapped;
+
+ Mapped mapped;
+
+ FixedHashMapImplicitZeroCell() {}
+ FixedHashMapImplicitZeroCell(const Key &, const State &) {}
+ FixedHashMapImplicitZeroCell(const value_type & value_, const State &) : mapped(value_.second) {}
+
+ const VoidKey getKey() const { return {}; }
+ Mapped & getMapped() { return mapped; }
+ const Mapped & getMapped() const { return mapped; }
+
+ bool isZero(const State &) const { return !mapped; }
+ void setZero() { mapped = {}; }
+
+ /// Similar to FixedHashSetCell except that we need to contain a pointer to the Mapped field.
+ /// Note that we have to assemble a continuous layout for the value_type on each call of getValue().
+ struct CellExt
+ {
+ CellExt() {} //-V730
+ CellExt(Key && key_, const FixedHashMapImplicitZeroCell * ptr_) : key(key_), ptr(const_cast<FixedHashMapImplicitZeroCell *>(ptr_)) {}
+ void update(Key && key_, const FixedHashMapImplicitZeroCell * ptr_)
+ {
+ key = key_;
+ ptr = const_cast<FixedHashMapImplicitZeroCell *>(ptr_);
+ }
+ Key key;
+ FixedHashMapImplicitZeroCell * ptr;
+
+ const Key & getKey() const { return key; }
+ Mapped & getMapped() { return ptr->mapped; }
+ const Mapped & getMapped() const { return ptr->mapped; }
+ const value_type getValue() const { return {key, ptr->mapped}; }
+ };
+};
+
+
+template <
+ typename Key,
+ typename Mapped,
+ typename Cell = FixedHashMapCell<Key, Mapped>,
+ typename Size = FixedHashTableStoredSize<Cell>,
+ typename Allocator = HashTableAllocator>
+class FixedHashMap : public FixedHashTable<Key, Cell, Size, Allocator>
+{
+public:
+ using Base = FixedHashTable<Key, Cell, Size, Allocator>;
+ using Self = FixedHashMap;
+ using LookupResult = typename Base::LookupResult;
+
+ using Base::Base;
+
+ template <typename Func>
+ void ALWAYS_INLINE mergeToViaEmplace(Self & that, Func && func)
+ {
+ for (auto it = this->begin(), end = this->end(); it != end; ++it)
+ {
+ typename Self::LookupResult res_it;
+ bool inserted;
+ that.emplace(it->getKey(), res_it, inserted, it.getHash());
+ func(res_it->getMapped(), it->getMapped(), inserted);
+ }
+ }
+
+ template <typename Func>
+ void ALWAYS_INLINE mergeToViaFind(Self & that, Func && func)
+ {
+ for (auto it = this->begin(), end = this->end(); it != end; ++it)
+ {
+ auto res_it = that.find(it->getKey(), it.getHash());
+ if (!res_it)
+ func(it->getMapped(), it->getMapped(), false);
+ else
+ func(res_it->getMapped(), it->getMapped(), true);
+ }
+ }
+
+ template <typename Func>
+ void forEachValue(Func && func)
+ {
+ for (auto & v : *this)
+ func(v.getKey(), v.getMapped());
+ }
+
+ template <typename Func>
+ void forEachMapped(Func && func)
+ {
+ for (auto & v : *this)
+ func(v.getMapped());
+ }
+
+ Mapped & ALWAYS_INLINE operator[](const Key & x)
+ {
+ LookupResult it;
+ bool inserted;
+ this->emplace(x, it, inserted);
+ if (inserted)
+ new (&it->getMapped()) Mapped();
+
+ return it->getMapped();
+ }
+};
+
+
+template <typename Key, typename Mapped, typename Allocator = HashTableAllocator>
+using FixedImplicitZeroHashMap = FixedHashMap<
+ Key,
+ Mapped,
+ FixedHashMapImplicitZeroCell<Key, Mapped>,
+ FixedHashTableStoredSize<FixedHashMapImplicitZeroCell<Key, Mapped>>,
+ Allocator>;
+
+template <typename Key, typename Mapped, typename Allocator = HashTableAllocator>
+using FixedImplicitZeroHashMapWithCalculatedSize = FixedHashMap<
+ Key,
+ Mapped,
+ FixedHashMapImplicitZeroCell<Key, Mapped>,
+ FixedHashTableCalculatedSize<FixedHashMapImplicitZeroCell<Key, Mapped>>,
+ Allocator>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/FixedHashTable.h b/ydb/library/arrow_clickhouse/Common/HashTable/FixedHashTable.h
new file mode 100644
index 0000000000..2e8d781fc7
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/FixedHashTable.h
@@ -0,0 +1,497 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <Common/HashTable/HashTable.h>
+
+namespace CH
+{
+
+template <typename Key, typename TState = HashTableNoState>
+struct FixedHashTableCell
+{
+ using State = TState;
+
+ using value_type = Key;
+ using mapped_type = VoidMapped;
+ bool full;
+
+ FixedHashTableCell() {} //-V730
+ FixedHashTableCell(const Key &, const State &) : full(true) {}
+
+ const VoidKey getKey() const { return {}; }
+ VoidMapped getMapped() const { return {}; }
+
+ bool isZero(const State &) const { return !full; }
+ void setZero() { full = false; }
+ static constexpr bool need_zero_value_storage = false;
+
+ /// This Cell is only stored inside an iterator. It's used to accommodate the fact
+ /// that the iterator based API always provide a reference to a continuous memory
+ /// containing the Key. As a result, we have to instantiate a real Key field.
+ /// All methods that return a mutable reference to the Key field are named with
+ /// -Mutable suffix, indicating this is uncommon usage. As this is only for lookup
+ /// tables, it's totally fine to discard the Key mutations.
+ struct CellExt
+ {
+ Key key;
+
+ const VoidKey getKey() const { return {}; }
+ VoidMapped getMapped() const { return {}; }
+ const value_type & getValue() const { return key; }
+ void update(Key && key_, FixedHashTableCell *) { key = key_; }
+ };
+};
+
+
+/// How to obtain the size of the table.
+
+template <typename Cell>
+struct FixedHashTableStoredSize
+{
+ size_t m_size = 0;
+
+ size_t getSize(const Cell *, const typename Cell::State &, size_t) const { return m_size; }
+ bool isEmpty(const Cell *, const typename Cell::State &, size_t) const { return m_size == 0; }
+
+ void increaseSize() { ++m_size; }
+ void clearSize() { m_size = 0; }
+ void setSize(size_t to) { m_size = to; }
+};
+
+template <typename Cell>
+struct FixedHashTableCalculatedSize
+{
+ size_t getSize(const Cell * buf, const typename Cell::State & state, size_t num_cells) const
+ {
+ size_t res = 0;
+ for (const Cell * end = buf + num_cells; buf != end; ++buf)
+ if (!buf->isZero(state))
+ ++res;
+ return res;
+ }
+
+ bool isEmpty(const Cell * buf, const typename Cell::State & state, size_t num_cells) const
+ {
+ for (const Cell * end = buf + num_cells; buf != end; ++buf)
+ if (!buf->isZero(state))
+ return false;
+ return true;
+ }
+
+ void increaseSize() {}
+ void clearSize() {}
+ void setSize(size_t) {}
+};
+
+
+/** Used as a lookup table for small keys such as UInt8, UInt16. It's different
+ * than a HashTable in that keys are not stored in the Cell buf, but inferred
+ * inside each iterator. There are a bunch of to make it faster than using
+ * HashTable: a) It doesn't have a conflict chain; b) There is no key
+ * comparison; c) The number of cycles for checking cell empty is halved; d)
+ * Memory layout is tighter, especially the Clearable variants.
+ *
+ * NOTE: For Set variants this should always be better. For Map variants
+ * however, as we need to assemble the real cell inside each iterator, there
+ * might be some cases we fall short.
+ *
+ * TODO: Deprecate the cell API so that end users don't rely on the structure
+ * of cell. Instead iterator should be used for operations such as cell
+ * transfer, key updates (f.g. StringRef) and serde. This will allow
+ * TwoLevelHashSet(Map) to contain different type of sets(maps).
+ */
+template <typename Key, typename Cell, typename Size, typename Allocator>
+class FixedHashTable : /*private boost::noncopyable,*/ protected Allocator, protected Cell::State, protected Size
+{
+ static constexpr size_t NUM_CELLS = 1ULL << (sizeof(Key) * 8);
+
+protected:
+ friend class const_iterator;
+ friend class iterator;
+ friend class Reader;
+
+ using Self = FixedHashTable;
+
+ Cell * buf; /// A piece of memory for all elements.
+
+ void alloc() { buf = reinterpret_cast<Cell *>(Allocator::alloc(NUM_CELLS * sizeof(Cell))); }
+
+ void free()
+ {
+ if (buf)
+ {
+ Allocator::free(buf, getBufferSizeInBytes());
+ buf = nullptr;
+ }
+ }
+
+ void destroyElements()
+ {
+ if (!std::is_trivially_destructible_v<Cell>)
+ for (iterator it = begin(), it_end = end(); it != it_end; ++it)
+ it.ptr->~Cell();
+ }
+
+
+ template <typename Derived, bool is_const>
+ class iterator_base
+ {
+ using Container = std::conditional_t<is_const, const Self, Self>;
+ using cell_type = std::conditional_t<is_const, const Cell, Cell>;
+
+ Container * container;
+ cell_type * ptr;
+
+ friend class FixedHashTable;
+
+ public:
+ iterator_base() {}
+ iterator_base(Container * container_, cell_type * ptr_) : container(container_), ptr(ptr_)
+ {
+ cell.update(ptr - container->buf, ptr);
+ }
+
+ bool operator==(const iterator_base & rhs) const { return ptr == rhs.ptr; }
+ bool operator!=(const iterator_base & rhs) const { return ptr != rhs.ptr; }
+
+ Derived & operator++()
+ {
+ ++ptr;
+
+ /// Skip empty cells in the main buffer.
+ auto buf_end = container->buf + container->NUM_CELLS;
+ while (ptr < buf_end && ptr->isZero(*container))
+ ++ptr;
+
+ return static_cast<Derived &>(*this);
+ }
+
+ auto & operator*()
+ {
+ if (cell.key != ptr - container->buf)
+ cell.update(ptr - container->buf, ptr);
+ return cell;
+ }
+ auto * operator-> ()
+ {
+ if (cell.key != ptr - container->buf)
+ cell.update(ptr - container->buf, ptr);
+ return &cell;
+ }
+
+ auto getPtr() const { return ptr; }
+ size_t getHash() const { return ptr - container->buf; }
+ size_t getCollisionChainLength() const { return 0; }
+ typename cell_type::CellExt cell;
+ };
+
+
+public:
+ using key_type = Key;
+ using mapped_type = typename Cell::mapped_type;
+ using value_type = typename Cell::value_type;
+ using cell_type = Cell;
+
+ using LookupResult = Cell *;
+ using ConstLookupResult = const Cell *;
+
+
+ size_t hash(const Key & x) const { return x; }
+
+ FixedHashTable() { alloc(); }
+
+ FixedHashTable(FixedHashTable && rhs) : buf(nullptr) { *this = std::move(rhs); }
+
+ ~FixedHashTable()
+ {
+ destroyElements();
+ free();
+ }
+
+ FixedHashTable & operator=(FixedHashTable && rhs)
+ {
+ destroyElements();
+ free();
+
+ std::swap(buf, rhs.buf);
+ this->setSize(rhs.size());
+
+ Allocator::operator=(std::move(rhs));
+ Cell::State::operator=(std::move(rhs));
+
+ return *this;
+ }
+#if 0
+ class Reader final : private Cell::State
+ {
+ public:
+ Reader(DB::ReadBuffer & in_) : in(in_) {}
+
+ Reader(const Reader &) = delete;
+ Reader & operator=(const Reader &) = delete;
+
+ bool next()
+ {
+ if (!is_initialized)
+ {
+ Cell::State::read(in);
+ DB::readVarUInt(size, in);
+ is_initialized = true;
+ }
+
+ if (read_count == size)
+ {
+ is_eof = true;
+ return false;
+ }
+
+ cell.read(in);
+ ++read_count;
+
+ return true;
+ }
+
+ inline const value_type & get() const
+ {
+ if (!is_initialized || is_eof)
+ throw CH::Exception("No available data");
+
+ return cell.getValue();
+ }
+
+ private:
+ DB::ReadBuffer & in;
+ Cell cell;
+ size_t read_count = 0;
+ size_t size = 0;
+ bool is_eof = false;
+ bool is_initialized = false;
+ };
+#endif
+
+ class iterator : public iterator_base<iterator, false>
+ {
+ public:
+ using iterator_base<iterator, false>::iterator_base;
+ };
+
+ class const_iterator : public iterator_base<const_iterator, true>
+ {
+ public:
+ using iterator_base<const_iterator, true>::iterator_base;
+ };
+
+
+ const_iterator begin() const
+ {
+ if (!buf)
+ return end();
+
+ const Cell * ptr = buf;
+ auto buf_end = buf + NUM_CELLS;
+ while (ptr < buf_end && ptr->isZero(*this))
+ ++ptr;
+
+ return const_iterator(this, ptr);
+ }
+
+ const_iterator cbegin() const { return begin(); }
+
+ iterator begin()
+ {
+ if (!buf)
+ return end();
+
+ Cell * ptr = buf;
+ auto buf_end = buf + NUM_CELLS;
+ while (ptr < buf_end && ptr->isZero(*this))
+ ++ptr;
+
+ return iterator(this, ptr);
+ }
+
+ const_iterator end() const
+ {
+ /// Avoid UBSan warning about adding zero to nullptr. It is valid in C++20 (and earlier) but not valid in C.
+ return const_iterator(this, buf ? buf + NUM_CELLS : buf);
+ }
+
+ const_iterator cend() const
+ {
+ return end();
+ }
+
+ iterator end()
+ {
+ return iterator(this, buf ? buf + NUM_CELLS : buf);
+ }
+
+
+public:
+ /// The last parameter is unused but exists for compatibility with HashTable interface.
+ void ALWAYS_INLINE emplace(const Key & x, LookupResult & it, bool & inserted, size_t /* hash */ = 0)
+ {
+ it = &buf[x];
+
+ if (!buf[x].isZero(*this))
+ {
+ inserted = false;
+ return;
+ }
+
+ new (&buf[x]) Cell(x, *this);
+ inserted = true;
+ this->increaseSize();
+ }
+
+ std::pair<LookupResult, bool> ALWAYS_INLINE insert(const value_type & x)
+ {
+ std::pair<LookupResult, bool> res;
+ emplace(Cell::getKey(x), res.first, res.second);
+ if (res.second)
+ insertSetMapped(res.first->getMapped(), x);
+
+ return res;
+ }
+
+ LookupResult ALWAYS_INLINE find(const Key & x) { return !buf[x].isZero(*this) ? &buf[x] : nullptr; }
+
+ ConstLookupResult ALWAYS_INLINE find(const Key & x) const { return const_cast<std::decay_t<decltype(*this)> *>(this)->find(x); }
+
+ LookupResult ALWAYS_INLINE find(const Key &, size_t hash_value) { return !buf[hash_value].isZero(*this) ? &buf[hash_value] : nullptr; }
+
+ ConstLookupResult ALWAYS_INLINE find(const Key & key, size_t hash_value) const
+ {
+ return const_cast<std::decay_t<decltype(*this)> *>(this)->find(key, hash_value);
+ }
+
+ bool ALWAYS_INLINE has(const Key & x) const { return !buf[x].isZero(*this); }
+ bool ALWAYS_INLINE has(const Key &, size_t hash_value) const { return !buf[hash_value].isZero(*this); }
+#if 0
+ void write(DB::WriteBuffer & wb) const
+ {
+ Cell::State::write(wb);
+ DB::writeVarUInt(size(), wb);
+
+ if (!buf)
+ return;
+
+ for (auto ptr = buf, buf_end = buf + NUM_CELLS; ptr < buf_end; ++ptr)
+ {
+ if (!ptr->isZero(*this))
+ {
+ DB::writeVarUInt(ptr - buf);
+ ptr->write(wb);
+ }
+ }
+ }
+
+ void writeText(DB::WriteBuffer & wb) const
+ {
+ Cell::State::writeText(wb);
+ DB::writeText(size(), wb);
+
+ if (!buf)
+ return;
+
+ for (auto ptr = buf, buf_end = buf + NUM_CELLS; ptr < buf_end; ++ptr)
+ {
+ if (!ptr->isZero(*this))
+ {
+ DB::writeChar(',', wb);
+ DB::writeText(ptr - buf, wb);
+ DB::writeChar(',', wb);
+ ptr->writeText(wb);
+ }
+ }
+ }
+
+ void read(DB::ReadBuffer & rb)
+ {
+ Cell::State::read(rb);
+ destroyElements();
+ size_t m_size;
+ DB::readVarUInt(m_size, rb);
+ this->setSize(m_size);
+ free();
+ alloc();
+
+ for (size_t i = 0; i < m_size; ++i)
+ {
+ size_t place_value = 0;
+ DB::readVarUInt(place_value, rb);
+ Cell x;
+ x.read(rb);
+ new (&buf[place_value]) Cell(x, *this);
+ }
+ }
+
+ void readText(DB::ReadBuffer & rb)
+ {
+ Cell::State::readText(rb);
+ destroyElements();
+ size_t m_size;
+ DB::readText(m_size, rb);
+ this->setSize(m_size);
+ free();
+ alloc();
+
+ for (size_t i = 0; i < m_size; ++i)
+ {
+ size_t place_value = 0;
+ DB::assertChar(',', rb);
+ DB::readText(place_value, rb);
+ Cell x;
+ DB::assertChar(',', rb);
+ x.readText(rb);
+ new (&buf[place_value]) Cell(x, *this);
+ }
+ }
+#endif
+ size_t size() const { return this->getSize(buf, *this, NUM_CELLS); }
+ bool empty() const { return this->isEmpty(buf, *this, NUM_CELLS); }
+
+ void clear()
+ {
+ destroyElements();
+ this->clearSize();
+
+ memset(static_cast<void *>(buf), 0, NUM_CELLS * sizeof(*buf));
+ }
+
+ /// After executing this function, the table can only be destroyed,
+ /// and also you can use the methods `size`, `empty`, `begin`, `end`.
+ void clearAndShrink()
+ {
+ destroyElements();
+ this->clearSize();
+ free();
+ }
+
+ size_t getBufferSizeInBytes() const { return NUM_CELLS * sizeof(Cell); }
+
+ size_t getBufferSizeInCells() const { return NUM_CELLS; }
+
+ /// Return offset for result in internal buffer.
+ /// Result can have value up to `getBufferSizeInCells() + 1`
+ /// because offset for zero value considered to be 0
+ /// and for other values it will be `offset in buffer + 1`
+ size_t offsetInternal(ConstLookupResult ptr) const
+ {
+ if (ptr->isZero(*this))
+ return 0;
+ return ptr - buf + 1;
+ }
+
+ const Cell * data() const { return buf; }
+ Cell * data() { return buf; }
+
+#ifdef DBMS_HASH_MAP_COUNT_COLLISIONS
+ size_t getCollisions() const { return 0; }
+#endif
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/Hash.h b/ydb/library/arrow_clickhouse/Common/HashTable/Hash.h
new file mode 100644
index 0000000000..89aaeb48a4
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/Hash.h
@@ -0,0 +1,417 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <util/digest/city.h>
+#include <common/types.h>
+#include <common/unaligned.h>
+#include <common/StringRef.h>
+
+#include <type_traits>
+
+namespace CH
+{
+
+/** Hash functions that are better than the trivial function std::hash.
+ *
+ * Example: when we do aggregation by the visitor ID, the performance increase is more than 5 times.
+ * This is because of following reasons:
+ * - in Yandex, visitor identifier is an integer that has timestamp with seconds resolution in lower bits;
+ * - in typical implementation of standard library, hash function for integers is trivial and just use lower bits;
+ * - traffic is non-uniformly distributed across a day;
+ * - we are using open-addressing linear probing hash tables that are most critical to hash function quality,
+ * and trivial hash function gives disastrous results.
+ */
+
+/** Taken from MurmurHash. This is Murmur finalizer.
+ * Faster than intHash32 when inserting into the hash table UInt64 -> UInt64, where the key is the visitor ID.
+ */
+inline UInt64 intHash64(UInt64 x)
+{
+ x ^= x >> 33;
+ x *= 0xff51afd7ed558ccdULL;
+ x ^= x >> 33;
+ x *= 0xc4ceb9fe1a85ec53ULL;
+ x ^= x >> 33;
+
+ return x;
+}
+
+/** CRC32C is not very high-quality as a hash function,
+ * according to avalanche and bit independence tests (see SMHasher software), as well as a small number of bits,
+ * but can behave well when used in hash tables,
+ * due to high speed (latency 3 + 1 clock cycle, throughput 1 clock cycle).
+ * Works only with SSE 4.2 support.
+ */
+#ifdef __SSE4_2__
+#include <nmmintrin.h>
+#endif
+
+#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
+#include <arm_acle.h>
+#include <arm_neon.h>
+#endif
+
+inline UInt64 intHashCRC32(UInt64 x)
+{
+#ifdef __SSE4_2__
+ return _mm_crc32_u64(-1ULL, x);
+#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
+ return __crc32cd(-1U, x);
+#else
+ /// On other platforms we do not have CRC32. NOTE This can be confusing.
+ return intHash64(x);
+#endif
+}
+
+inline UInt64 intHashCRC32(UInt64 x, UInt64 updated_value)
+{
+#ifdef __SSE4_2__
+ return _mm_crc32_u64(updated_value, x);
+#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
+ return __crc32cd(updated_value, x);
+#else
+ /// On other platforms we do not have CRC32. NOTE This can be confusing.
+ return intHash64(x) ^ updated_value;
+#endif
+}
+
+template <typename T>
+inline typename std::enable_if<(sizeof(T) > sizeof(UInt64)), UInt64>::type
+intHashCRC32(const T & x, UInt64 updated_value)
+{
+ auto * begin = reinterpret_cast<const char *>(&x);
+ for (size_t i = 0; i < sizeof(T); i += sizeof(UInt64))
+ {
+ updated_value = intHashCRC32(unalignedLoad<UInt64>(begin), updated_value);
+ begin += sizeof(UInt64);
+ }
+
+ return updated_value;
+}
+
+
+inline UInt32 updateWeakHash32(const UInt8 * pos, size_t size, UInt32 updated_value)
+{
+ if (size < 8)
+ {
+ UInt64 value = 0;
+
+ switch (size)
+ {
+ case 0:
+ break;
+ case 1:
+ __builtin_memcpy(&value, pos, 1);
+ break;
+ case 2:
+ __builtin_memcpy(&value, pos, 2);
+ break;
+ case 3:
+ __builtin_memcpy(&value, pos, 3);
+ break;
+ case 4:
+ __builtin_memcpy(&value, pos, 4);
+ break;
+ case 5:
+ __builtin_memcpy(&value, pos, 5);
+ break;
+ case 6:
+ __builtin_memcpy(&value, pos, 6);
+ break;
+ case 7:
+ __builtin_memcpy(&value, pos, 7);
+ break;
+ default:
+ __builtin_unreachable();
+ }
+
+ reinterpret_cast<unsigned char *>(&value)[7] = size;
+ return intHashCRC32(value, updated_value);
+ }
+
+ const auto * end = pos + size;
+ while (pos + 8 <= end)
+ {
+ auto word = unalignedLoad<UInt64>(pos);
+ updated_value = intHashCRC32(word, updated_value);
+
+ pos += 8;
+ }
+
+ if (pos < end)
+ {
+ /// If string size is not divisible by 8.
+ /// Lets' assume the string was 'abcdefghXYZ', so it's tail is 'XYZ'.
+ UInt8 tail_size = end - pos;
+ /// Load tailing 8 bytes. Word is 'defghXYZ'.
+ auto word = unalignedLoad<UInt64>(end - 8);
+ /// Prepare mask which will set other 5 bytes to 0. It is 0xFFFFFFFFFFFFFFFF << 5 = 0xFFFFFF0000000000.
+ /// word & mask = '\0\0\0\0\0XYZ' (bytes are reversed because of little ending)
+ word &= (~UInt64(0)) << UInt8(8 * (8 - tail_size));
+ /// Use least byte to store tail length.
+ word |= tail_size;
+ /// Now word is '\3\0\0\0\0XYZ'
+ updated_value = intHashCRC32(word, updated_value);
+ }
+
+ return updated_value;
+}
+
+template <typename T>
+inline size_t DefaultHash64(std::enable_if_t<(sizeof(T) <= sizeof(UInt64)), T> key)
+{
+ union
+ {
+ T in;
+ UInt64 out;
+ } u;
+ u.out = 0;
+ u.in = key;
+ return intHash64(u.out);
+}
+
+
+template <typename T>
+inline size_t DefaultHash64(std::enable_if_t<(sizeof(T) > sizeof(UInt64)), T> key)
+{
+ if constexpr (is_big_int_v<T> && sizeof(T) == 16)
+ {
+ /// TODO This is classical antipattern.
+ return intHash64(
+ static_cast<UInt64>(key) ^
+ static_cast<UInt64>(key >> 64));
+ }
+ else if constexpr (is_big_int_v<T> && sizeof(T) == 32)
+ {
+ return intHash64(
+ static_cast<UInt64>(key) ^
+ static_cast<UInt64>(key >> 64) ^
+ static_cast<UInt64>(key >> 128) ^
+ static_cast<UInt64>(key >> 256));
+ }
+ assert(false);
+ __builtin_unreachable();
+}
+
+
+template <typename T>
+struct DefaultHash
+{
+ size_t operator() (T key) const
+ {
+ return DefaultHash64<T>(key);
+ }
+};
+
+template <typename T> struct HashCRC32;
+
+template <typename T>
+inline size_t hashCRC32(std::enable_if_t<(sizeof(T) <= sizeof(UInt64)), T> key)
+{
+ union
+ {
+ T in;
+ UInt64 out;
+ } u;
+ u.out = 0;
+ u.in = key;
+ return intHashCRC32(u.out);
+}
+
+template <typename T>
+inline size_t hashCRC32(std::enable_if_t<(sizeof(T) > sizeof(UInt64)), T> key)
+{
+ return intHashCRC32(key, -1);
+}
+
+#define DEFINE_HASH(T) \
+template <> struct HashCRC32<T>\
+{\
+ size_t operator() (T key) const\
+ {\
+ return hashCRC32<T>(key);\
+ }\
+};
+
+DEFINE_HASH(UInt8)
+DEFINE_HASH(UInt16)
+DEFINE_HASH(UInt32)
+DEFINE_HASH(UInt64)
+DEFINE_HASH(UInt128)
+DEFINE_HASH(UInt256)
+DEFINE_HASH(Int8)
+DEFINE_HASH(Int16)
+DEFINE_HASH(Int32)
+DEFINE_HASH(Int64)
+DEFINE_HASH(Int128)
+DEFINE_HASH(Int256)
+DEFINE_HASH(float)
+DEFINE_HASH(double)
+
+#undef DEFINE_HASH
+
+
+struct UInt128Hash
+{
+ size_t operator()(UInt128 x) const
+ {
+ return ::Hash128to64({x.items[0], x.items[1]});
+ }
+};
+#if 0
+struct UUIDHash
+{
+ size_t operator()(DB::UUID x) const
+ {
+ return UInt128Hash()(x.toUnderType());
+ }
+};
+#endif
+#ifdef __SSE4_2__
+
+struct UInt128HashCRC32
+{
+ size_t operator()(UInt128 x) const
+ {
+ UInt64 crc = -1ULL;
+ crc = _mm_crc32_u64(crc, x.items[0]);
+ crc = _mm_crc32_u64(crc, x.items[1]);
+ return crc;
+ }
+};
+
+#else
+
+/// On other platforms we do not use CRC32. NOTE This can be confusing.
+struct UInt128HashCRC32 : public UInt128Hash {};
+
+#endif
+
+struct UInt128TrivialHash
+{
+ size_t operator()(UInt128 x) const { return x.items[0]; }
+};
+#if 0
+struct UUIDTrivialHash
+{
+ size_t operator()(DB::UUID x) const { return x.toUnderType().items[0]; }
+};
+#endif
+struct UInt256Hash
+{
+ size_t operator()(UInt256 x) const
+ {
+ /// NOTE suboptimal
+ return ::Hash128to64({
+ ::Hash128to64({x.items[0], x.items[1]}),
+ ::Hash128to64({x.items[2], x.items[3]})});
+ }
+};
+
+#ifdef __SSE4_2__
+
+struct UInt256HashCRC32
+{
+ size_t operator()(UInt256 x) const
+ {
+ UInt64 crc = -1ULL;
+ crc = _mm_crc32_u64(crc, x.items[0]);
+ crc = _mm_crc32_u64(crc, x.items[1]);
+ crc = _mm_crc32_u64(crc, x.items[2]);
+ crc = _mm_crc32_u64(crc, x.items[3]);
+ return crc;
+ }
+};
+
+#else
+
+/// We do not need to use CRC32 on other platforms. NOTE This can be confusing.
+struct UInt256HashCRC32 : public UInt256Hash {};
+
+#endif
+
+template <>
+struct DefaultHash<UInt128> : public UInt128Hash {};
+
+template <>
+struct DefaultHash<UInt256> : public UInt256Hash {};
+#if 0
+template <>
+struct DefaultHash<DB::UUID> : public UUIDHash {};
+#endif
+
+/// It is reasonable to use for UInt8, UInt16 with sufficient hash table size.
+struct TrivialHash
+{
+ template <typename T>
+ size_t operator() (T key) const
+ {
+ return key;
+ }
+};
+
+
+/** A relatively good non-cryptographic hash function from UInt64 to UInt32.
+ * But worse (both in quality and speed) than just cutting intHash64.
+ * Taken from here: http://www.concentric.net/~ttwang/tech/inthash.htm
+ *
+ * Slightly changed compared to the function by link: shifts to the right are accidentally replaced by a cyclic shift to the right.
+ * This change did not affect the smhasher test results.
+ *
+ * It is recommended to use different salt for different tasks.
+ * That was the case that in the database values were sorted by hash (for low-quality pseudo-random spread),
+ * and in another place, in the aggregate function, the same hash was used in the hash table,
+ * as a result, this aggregate function was monstrously slowed due to collisions.
+ *
+ * NOTE Salting is far from perfect, because it commutes with first steps of calculation.
+ *
+ * NOTE As mentioned, this function is slower than intHash64.
+ * But occasionally, it is faster, when written in a loop and loop is vectorized.
+ */
+template <UInt64 salt>
+inline UInt32 intHash32(UInt64 key)
+{
+ key ^= salt;
+
+ key = (~key) + (key << 18);
+ key = key ^ ((key >> 31) | (key << 33));
+ key = key * 21;
+ key = key ^ ((key >> 11) | (key << 53));
+ key = key + (key << 6);
+ key = key ^ ((key >> 22) | (key << 42));
+
+ return key;
+}
+
+
+/// For containers.
+template <typename T, UInt64 salt = 0>
+struct IntHash32
+{
+ size_t operator() (const T & key) const
+ {
+ if constexpr (is_big_int_v<T> && sizeof(T) == 16)
+ {
+ return intHash32<salt>(key.items[0] ^ key.items[1]);
+ }
+ else if constexpr (is_big_int_v<T> && sizeof(T) == 32)
+ {
+ return intHash32<salt>(key.items[0] ^ key.items[1] ^ key.items[2] ^ key.items[3]);
+ }
+ else if constexpr (sizeof(T) <= sizeof(UInt64))
+ {
+ return intHash32<salt>(key);
+ }
+
+ assert(false);
+ __builtin_unreachable();
+ }
+};
+
+template <>
+struct DefaultHash<CH::StringRef> : public CH::StringRefHash {};
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/HashMap.h b/ydb/library/arrow_clickhouse/Common/HashTable/HashMap.h
new file mode 100644
index 0000000000..a76cd5b353
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/HashMap.h
@@ -0,0 +1,314 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <Common/HashTable/Hash.h>
+#include <Common/HashTable/HashTable.h>
+#include <Common/HashTable/HashTableAllocator.h>
+
+
+/** NOTE HashMap could only be used for memmoveable (position independent) types.
+ * Example: std::string is not position independent in libstdc++ with C++11 ABI or in libc++.
+ * Also, key in hash table must be of type, that zero bytes is compared equals to zero key.
+ */
+
+namespace CH
+{
+
+struct NoInitTag
+{
+};
+
+/// A pair that does not initialize the elements, if not needed.
+template <typename First, typename Second>
+struct PairNoInit
+{
+ First first;
+ Second second;
+
+ PairNoInit() {} /// NOLINT
+
+ template <typename FirstValue>
+ PairNoInit(FirstValue && first_, NoInitTag)
+ : first(std::forward<FirstValue>(first_))
+ {
+ }
+
+ template <typename FirstValue, typename SecondValue>
+ PairNoInit(FirstValue && first_, SecondValue && second_)
+ : first(std::forward<FirstValue>(first_))
+ , second(std::forward<SecondValue>(second_))
+ {
+ }
+};
+
+template <typename First, typename Second>
+PairNoInit<std::decay_t<First>, std::decay_t<Second>> makePairNoInit(First && first, Second && second)
+{
+ return PairNoInit<std::decay_t<First>, std::decay_t<Second>>(std::forward<First>(first), std::forward<Second>(second));
+}
+
+
+template <typename Key, typename TMapped, typename Hash, typename TState = HashTableNoState>
+struct HashMapCell
+{
+ using Mapped = TMapped;
+ using State = TState;
+
+ using value_type = PairNoInit<Key, Mapped>;
+ using mapped_type = Mapped;
+ using key_type = Key;
+
+ value_type value;
+
+ HashMapCell() = default;
+ HashMapCell(const Key & key_, const State &) : value(key_, NoInitTag()) {}
+ HashMapCell(const value_type & value_, const State &) : value(value_) {}
+
+ /// Get the key (externally).
+ const Key & getKey() const { return value.first; }
+ Mapped & getMapped() { return value.second; }
+ const Mapped & getMapped() const { return value.second; }
+ const value_type & getValue() const { return value; }
+
+ /// Get the key (internally).
+ static const Key & getKey(const value_type & value) { return value.first; }
+
+ bool keyEquals(const Key & key_) const { return bitEquals(value.first, key_); }
+ bool keyEquals(const Key & key_, size_t /*hash_*/) const { return bitEquals(value.first, key_); }
+ bool keyEquals(const Key & key_, size_t /*hash_*/, const State & /*state*/) const { return bitEquals(value.first, key_); }
+
+ void setHash(size_t /*hash_value*/) {}
+ size_t getHash(const Hash & hash) const { return hash(value.first); }
+
+ bool isZero(const State & state) const { return isZero(value.first, state); }
+ static bool isZero(const Key & key, const State & /*state*/) { return ZeroTraits::check(key); }
+
+ /// Set the key value to zero.
+ void setZero() { ZeroTraits::set(value.first); }
+
+ /// Do I need to store the zero key separately (that is, can a zero key be inserted into the hash table).
+ static constexpr bool need_zero_value_storage = true;
+
+ void setMapped(const value_type & value_) { value.second = value_.second; }
+#if 0
+ /// Serialization, in binary and text form.
+ void write(DB::WriteBuffer & wb) const
+ {
+ DB::writeBinary(value.first, wb);
+ DB::writeBinary(value.second, wb);
+ }
+
+ void writeText(DB::WriteBuffer & wb) const
+ {
+ DB::writeDoubleQuoted(value.first, wb);
+ DB::writeChar(',', wb);
+ DB::writeDoubleQuoted(value.second, wb);
+ }
+
+ /// Deserialization, in binary and text form.
+ void read(DB::ReadBuffer & rb)
+ {
+ DB::readBinary(value.first, rb);
+ DB::readBinary(value.second, rb);
+ }
+
+ void readText(DB::ReadBuffer & rb)
+ {
+ DB::readDoubleQuoted(value.first, rb);
+ DB::assertChar(',', rb);
+ DB::readDoubleQuoted(value.second, rb);
+ }
+#endif
+ static bool constexpr need_to_notify_cell_during_move = false;
+
+ static void move(HashMapCell * /* old_location */, HashMapCell * /* new_location */) {}
+
+ template <size_t I>
+ auto & get() & {
+ if constexpr (I == 0) return value.first;
+ else if constexpr (I == 1) return value.second;
+ }
+
+ template <size_t I>
+ auto const & get() const & {
+ if constexpr (I == 0) return value.first;
+ else if constexpr (I == 1) return value.second;
+ }
+
+ template <size_t I>
+ auto && get() && {
+ if constexpr (I == 0) return std::move(value.first);
+ else if constexpr (I == 1) return std::move(value.second);
+ }
+
+};
+
+template <typename Key, typename TMapped, typename Hash, typename TState = HashTableNoState>
+struct HashMapCellWithSavedHash : public HashMapCell<Key, TMapped, Hash, TState>
+{
+ using Base = HashMapCell<Key, TMapped, Hash, TState>;
+
+ size_t saved_hash;
+
+ using Base::Base;
+
+ bool keyEquals(const Key & key_) const { return bitEquals(this->value.first, key_); }
+ bool keyEquals(const Key & key_, size_t hash_) const { return saved_hash == hash_ && bitEquals(this->value.first, key_); }
+ bool keyEquals(const Key & key_, size_t hash_, const typename Base::State &) const { return keyEquals(key_, hash_); }
+
+ void setHash(size_t hash_value) { saved_hash = hash_value; }
+ size_t getHash(const Hash & /*hash_function*/) const { return saved_hash; }
+};
+
+template <
+ typename Key,
+ typename Cell,
+ typename Hash = DefaultHash<Key>,
+ typename Grower = HashTableGrower<>,
+ typename Allocator = HashTableAllocator>
+class HashMapTable : public HashTable<Key, Cell, Hash, Grower, Allocator>
+{
+public:
+ using Self = HashMapTable;
+ using Base = HashTable<Key, Cell, Hash, Grower, Allocator>;
+ using LookupResult = typename Base::LookupResult;
+
+ using Base::Base;
+
+ /// Merge every cell's value of current map into the destination map via emplace.
+ /// Func should have signature void(Mapped & dst, Mapped & src, bool emplaced).
+ /// Each filled cell in current map will invoke func once. If that map doesn't
+ /// have a key equals to the given cell, a new cell gets emplaced into that map,
+ /// and func is invoked with the third argument emplaced set to true. Otherwise
+ /// emplaced is set to false.
+ template <typename Func>
+ void ALWAYS_INLINE mergeToViaEmplace(Self & that, Func && func)
+ {
+ for (auto it = this->begin(), end = this->end(); it != end; ++it)
+ {
+ typename Self::LookupResult res_it;
+ bool inserted;
+ that.emplace(Cell::getKey(it->getValue()), res_it, inserted, it.getHash());
+ func(res_it->getMapped(), it->getMapped(), inserted);
+ }
+ }
+
+ /// Merge every cell's value of current map into the destination map via find.
+ /// Func should have signature void(Mapped & dst, Mapped & src, bool exist).
+ /// Each filled cell in current map will invoke func once. If that map doesn't
+ /// have a key equals to the given cell, func is invoked with the third argument
+ /// exist set to false. Otherwise exist is set to true.
+ template <typename Func>
+ void ALWAYS_INLINE mergeToViaFind(Self & that, Func && func)
+ {
+ for (auto it = this->begin(), end = this->end(); it != end; ++it)
+ {
+ auto res_it = that.find(Cell::getKey(it->getValue()), it.getHash());
+ if (!res_it)
+ func(it->getMapped(), it->getMapped(), false);
+ else
+ func(res_it->getMapped(), it->getMapped(), true);
+ }
+ }
+
+ /// Call func(const Key &, Mapped &) for each hash map element.
+ template <typename Func>
+ void forEachValue(Func && func)
+ {
+ for (auto & v : *this)
+ func(v.getKey(), v.getMapped());
+ }
+
+ /// Call func(Mapped &) for each hash map element.
+ template <typename Func>
+ void forEachMapped(Func && func)
+ {
+ for (auto & v : *this)
+ func(v.getMapped());
+ }
+
+ typename Cell::Mapped & ALWAYS_INLINE operator[](const Key & x)
+ {
+ LookupResult it;
+ bool inserted;
+ this->emplace(x, it, inserted);
+
+ /** It may seem that initialization is not necessary for POD-types (or __has_trivial_constructor),
+ * since the hash table memory is initially initialized with zeros.
+ * But, in fact, an empty cell may not be initialized with zeros in the following cases:
+ * - ZeroValueStorage (it only zeros the key);
+ * - after resizing and moving a part of the cells to the new half of the hash table, the old cells also have only the key to zero.
+ *
+ * On performance, there is almost always no difference, due to the fact that it->second is usually assigned immediately
+ * after calling `operator[]`, and since `operator[]` is inlined, the compiler removes unnecessary initialization.
+ *
+ * Sometimes due to initialization, the performance even grows. This occurs in code like `++map[key]`.
+ * When we do the initialization, for new cells, it's enough to make `store 1` right away.
+ * And if we did not initialize, then even though there was zero in the cell,
+ * the compiler can not guess about this, and generates the `load`, `increment`, `store` code.
+ */
+ if (inserted)
+ new (&it->getMapped()) typename Cell::Mapped();
+
+ return it->getMapped();
+ }
+};
+
+template <
+ typename Key,
+ typename Mapped,
+ typename Hash = DefaultHash<Key>,
+ typename Grower = HashTableGrower<>,
+ typename Allocator = HashTableAllocator>
+using HashMap = HashMapTable<Key, HashMapCell<Key, Mapped, Hash>, Hash, Grower, Allocator>;
+
+
+template <
+ typename Key,
+ typename Mapped,
+ typename Hash = DefaultHash<Key>,
+ typename Grower = HashTableGrower<>,
+ typename Allocator = HashTableAllocator>
+using HashMapWithSavedHash = HashMapTable<Key, HashMapCellWithSavedHash<Key, Mapped, Hash>, Hash, Grower, Allocator>;
+
+template <typename Key, typename Mapped, typename Hash,
+ size_t initial_size_degree>
+using HashMapWithStackMemory = HashMapTable<
+ Key,
+ HashMapCellWithSavedHash<Key, Mapped, Hash>,
+ Hash,
+ HashTableGrower<initial_size_degree>,
+ HashTableAllocatorWithStackMemory<
+ (1ULL << initial_size_degree)
+ * sizeof(HashMapCellWithSavedHash<Key, Mapped, Hash>)>>;
+
+}
+
+namespace std
+{
+
+ template <typename Key, typename TMapped, typename Hash, typename TState>
+ struct tuple_size<CH::HashMapCell<Key, TMapped, Hash, TState>> : std::integral_constant<size_t, 2> { };
+
+ template <typename Key, typename TMapped, typename Hash, typename TState>
+ struct tuple_element<0, CH::HashMapCell<Key, TMapped, Hash, TState>> { using type = Key; };
+
+ template <typename Key, typename TMapped, typename Hash, typename TState>
+ struct tuple_element<1, CH::HashMapCell<Key, TMapped, Hash, TState>> { using type = TMapped; };
+}
+
+namespace std
+{
+
+ template <typename Key, typename TMapped, typename Hash, typename TState>
+ struct tuple_size<CH::HashMapCellWithSavedHash<Key, TMapped, Hash, TState>> : std::integral_constant<size_t, 2> { };
+
+ template <typename Key, typename TMapped, typename Hash, typename TState>
+ struct tuple_element<0, CH::HashMapCellWithSavedHash<Key, TMapped, Hash, TState>> { using type = Key; };
+
+ template <typename Key, typename TMapped, typename Hash, typename TState>
+ struct tuple_element<1, CH::HashMapCellWithSavedHash<Key, TMapped, Hash, TState>> { using type = TMapped; };
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/HashSet.h b/ydb/library/arrow_clickhouse/Common/HashTable/HashSet.h
new file mode 100644
index 0000000000..0f349e5d9c
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/HashSet.h
@@ -0,0 +1,124 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <Common/HashTable/Hash.h>
+#include <Common/HashTable/HashTable.h>
+#include <Common/HashTable/HashTableAllocator.h>
+
+/** NOTE HashSet could only be used for memmoveable (position independent) types.
+ * Example: std::string is not position independent in libstdc++ with C++11 ABI or in libc++.
+ * Also, key must be of type, that zero bytes is compared equals to zero key.
+ */
+
+namespace CH
+{
+
+template
+<
+ typename Key,
+ typename TCell,
+ typename Hash = DefaultHash<Key>,
+ typename Grower = HashTableGrower<>,
+ typename Allocator = HashTableAllocator
+>
+class HashSetTable : public HashTable<Key, TCell, Hash, Grower, Allocator>
+{
+public:
+ using Self = HashSetTable;
+ using Cell = TCell;
+
+ using Base = HashTable<Key, TCell, Hash, Grower, Allocator>;
+ using typename Base::LookupResult;
+
+ void merge(const Self & rhs)
+ {
+ if (!this->hasZero() && rhs.hasZero())
+ {
+ this->setHasZero();
+ ++this->m_size;
+ }
+
+ for (size_t i = 0; i < rhs.grower.bufSize(); ++i)
+ if (!rhs.buf[i].isZero(*this))
+ this->insert(rhs.buf[i].getValue());
+ }
+
+#if 0
+ void readAndMerge(DB::ReadBuffer & rb)
+ {
+ Cell::State::read(rb);
+
+ size_t new_size = 0;
+ DB::readVarUInt(new_size, rb);
+
+ this->resize(new_size);
+
+ for (size_t i = 0; i < new_size; ++i)
+ {
+ Cell x;
+ x.read(rb);
+ this->insert(x.getValue());
+ }
+ }
+#endif
+};
+
+
+template <typename Key, typename Hash, typename TState = HashTableNoState>
+struct HashSetCellWithSavedHash : public HashTableCell<Key, Hash, TState>
+{
+ using Base = HashTableCell<Key, Hash, TState>;
+
+ size_t saved_hash;
+
+ HashSetCellWithSavedHash() : Base() {} //-V730
+ HashSetCellWithSavedHash(const Key & key_, const typename Base::State & state) : Base(key_, state) {} //-V730
+
+ bool keyEquals(const Key & key_) const { return bitEquals(this->key, key_); }
+ bool keyEquals(const Key & key_, size_t hash_) const { return saved_hash == hash_ && bitEquals(this->key, key_); }
+ bool keyEquals(const Key & key_, size_t hash_, const typename Base::State &) const { return keyEquals(key_, hash_); }
+
+ void setHash(size_t hash_value) { saved_hash = hash_value; }
+ size_t getHash(const Hash & /*hash_function*/) const { return saved_hash; }
+};
+
+template
+<
+ typename Key,
+ typename Hash = DefaultHash<Key>,
+ typename Grower = HashTableGrower<>,
+ typename Allocator = HashTableAllocator
+>
+using HashSet = HashSetTable<Key, HashTableCell<Key, Hash>, Hash, Grower, Allocator>;
+
+template <typename Key, typename Hash, size_t initial_size_degree>
+using HashSetWithStackMemory = HashSet<
+ Key,
+ Hash,
+ HashTableGrower<initial_size_degree>,
+ HashTableAllocatorWithStackMemory<
+ (1ULL << initial_size_degree)
+ * sizeof(HashTableCell<Key, Hash>)>>;
+
+template
+<
+ typename Key,
+ typename Hash = DefaultHash<Key>,
+ typename Grower = HashTableGrower<>,
+ typename Allocator = HashTableAllocator
+>
+using HashSetWithSavedHash = HashSetTable<Key, HashSetCellWithSavedHash<Key, Hash>, Hash, Grower, Allocator>;
+
+template <typename Key, typename Hash, size_t initial_size_degree>
+using HashSetWithSavedHashWithStackMemory = HashSetWithSavedHash<
+ Key,
+ Hash,
+ HashTableGrower<initial_size_degree>,
+ HashTableAllocatorWithStackMemory<
+ (1ULL << initial_size_degree)
+ * sizeof(HashSetCellWithSavedHash<Key, Hash>)>>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/HashTable.h b/ydb/library/arrow_clickhouse/Common/HashTable/HashTable.h
new file mode 100644
index 0000000000..98fe66a0df
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/HashTable.h
@@ -0,0 +1,1311 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <string.h>
+#include <math.h>
+
+#include <new>
+#include <utility>
+
+//#include <boost/noncopyable.hpp>
+
+#include <common/types.h>
+
+#include <Common/HashTable/HashTableAllocator.h>
+#include <Common/HashTable/HashTableKeyHolder.h>
+
+#ifdef DBMS_HASH_MAP_DEBUG_RESIZES
+ #include <iostream>
+ #include <iomanip>
+#endif
+
+/** NOTE HashTable could only be used for memmoveable (position independent) types.
+ * Example: std::string is not position independent in libstdc++ with C++11 ABI or in libc++.
+ * Also, key in hash table must be of type, that zero bytes is compared equals to zero key.
+ */
+
+namespace CH
+{
+
+/** The state of the hash table that affects the properties of its cells.
+ * Used as a template parameter.
+ * For example, there is an implementation of an instantly clearable hash table - ClearableHashMap.
+ * For it, each cell holds the version number, and in the hash table itself is the current version.
+ * When clearing, the current version simply increases; All cells with a mismatching version are considered empty.
+ * Another example: for an approximate calculation of the number of unique visitors, there is a hash table for UniquesHashSet.
+ * It has the concept of "degree". At each overflow, cells with keys that do not divide by the corresponding power of the two are deleted.
+ */
+struct HashTableNoState
+{
+#if 0
+ /// Serialization, in binary and text form.
+ void write(DB::WriteBuffer &) const {}
+ void writeText(DB::WriteBuffer &) const {}
+
+ /// Deserialization, in binary and text form.
+ void read(DB::ReadBuffer &) {}
+ void readText(DB::ReadBuffer &) {}
+#endif
+};
+
+
+/// These functions can be overloaded for custom types.
+namespace ZeroTraits
+{
+
+template <typename T>
+bool check(const T x) { return x == T{}; }
+
+template <typename T>
+void set(T & x) { x = {}; }
+
+}
+
+
+/** Numbers are compared bitwise.
+ * Complex types are compared by operator== as usual (this is important if there are gaps).
+ *
+ * This is needed if you use floats as keys. They are compared by bit equality.
+ * Otherwise the invariants in hash table probing do not met when NaNs are present.
+ */
+template <typename T>
+inline bool bitEquals(T && a, T && b)
+{
+ using RealT = std::decay_t<T>;
+
+ if constexpr (std::is_floating_point_v<RealT>)
+ return 0 == memcmp(&a, &b, sizeof(RealT)); /// Note that memcmp with constant size is compiler builtin.
+ else
+ return a == b;
+}
+
+
+/**
+ * getKey/Mapped -- methods to get key/"mapped" values from the LookupResult returned by find() and
+ * emplace() methods of HashTable. Must not be called for a null LookupResult.
+ *
+ * We don't use iterators for lookup result. Instead, LookupResult is a pointer of some kind. There
+ * are methods getKey/Mapped, that return references or values to key/"mapped" values.
+ *
+ * Different hash table implementations support this interface to a varying degree:
+ *
+ * 1) Hash tables that store neither the key in its original form, nor a "mapped" value:
+ * FixedHashTable or StringHashTable. Neither GetKey nor GetMapped are supported, the only valid
+ * operation is checking LookupResult for null.
+ *
+ * 2) Hash maps that do not store the key, e.g. FixedHashMap or StringHashMap. Only GetMapped is
+ * supported.
+ *
+ * 3) Hash tables that store the key and do not have a "mapped" value, e.g. the normal HashTable.
+ * GetKey returns the key, and GetMapped returns a zero void pointer. This simplifies generic
+ * code that works with mapped values: it can overload on the return type of GetMapped(), and
+ * doesn't need other parameters. One example is insertSetMapped() function.
+ *
+ * 4) Hash tables that store both the key and the "mapped" value, e.g. HashMap. Both GetKey and
+ * GetMapped are supported.
+ *
+ * The implementation side goes as follows:
+ *
+ * for (1), LookupResult->getKey = const VoidKey, LookupResult->getMapped = VoidMapped;
+ *
+ * for (2), LookupResult->getKey = const VoidKey, LookupResult->getMapped = Mapped &;
+ *
+ * for (3) and (4), LookupResult->getKey = const Key [&], LookupResult->getMapped = Mapped &;
+ * VoidKey and VoidMapped may have specialized function overloads for generic code.
+ */
+
+struct VoidKey {};
+struct VoidMapped
+{
+ template <typename T>
+ auto & operator=(const T &)
+ {
+ return *this;
+ }
+};
+
+/** Compile-time interface for cell of the hash table.
+ * Different cell types are used to implement different hash tables.
+ * The cell must contain a key.
+ * It can also contain a value and arbitrary additional data
+ * (example: the stored hash value; version number for ClearableHashMap).
+ */
+template <typename Key, typename Hash, typename TState = HashTableNoState>
+struct HashTableCell
+{
+ using State = TState;
+
+ using key_type = Key;
+ using value_type = Key;
+ using mapped_type = VoidMapped;
+
+ Key key;
+
+ HashTableCell() {}
+
+ /// Create a cell with the given key / key and value.
+ HashTableCell(const Key & key_, const State &) : key(key_) {}
+
+ /// Get the key (externally).
+ const Key & getKey() const { return key; }
+ VoidMapped getMapped() const { return {}; }
+ const value_type & getValue() const { return key; }
+
+ /// Get the key (internally).
+ static const Key & getKey(const value_type & value) { return value; }
+
+ /// Are the keys at the cells equal?
+ bool keyEquals(const Key & key_) const { return bitEquals(key, key_); }
+ bool keyEquals(const Key & key_, size_t /*hash_*/) const { return bitEquals(key, key_); }
+ bool keyEquals(const Key & key_, size_t /*hash_*/, const State & /*state*/) const { return bitEquals(key, key_); }
+
+ /// If the cell can remember the value of the hash function, then remember it.
+ void setHash(size_t /*hash_value*/) {}
+
+ /// If the cell can store the hash value in itself, then return the stored value.
+ /// It must be at least once calculated before.
+ /// If storing the hash value is not provided, then just compute the hash.
+ size_t getHash(const Hash & hash) const { return hash(key); }
+
+ /// Whether the key is zero. In the main buffer, cells with a zero key are considered empty.
+ /// If zero keys can be inserted into the table, then the cell for the zero key is stored separately, not in the main buffer.
+ /// Zero keys must be such that the zeroed-down piece of memory is a zero key.
+ bool isZero(const State & state) const { return isZero(key, state); }
+ static bool isZero(const Key & key, const State & /*state*/) { return ZeroTraits::check(key); }
+
+ /// Set the key value to zero.
+ void setZero() { ZeroTraits::set(key); }
+
+ /// Do the hash table need to store the zero key separately (that is, can a zero key be inserted into the hash table).
+ static constexpr bool need_zero_value_storage = true;
+
+ /// Set the mapped value, if any (for HashMap), to the corresponding `value`.
+ void setMapped(const value_type & /*value*/) {}
+#if 0
+ /// Serialization, in binary and text form.
+ void write(DB::WriteBuffer & wb) const { DB::writeBinary(key, wb); }
+ void writeText(DB::WriteBuffer & wb) const { DB::writeDoubleQuoted(key, wb); }
+
+ /// Deserialization, in binary and text form.
+ void read(DB::ReadBuffer & rb) { DB::readBinary(key, rb); }
+ void readText(DB::ReadBuffer & rb) { DB::readDoubleQuoted(key, rb); }
+#endif
+ /// When cell pointer is moved during erase, reinsert or resize operations
+
+ static constexpr bool need_to_notify_cell_during_move = false;
+
+ static void move(HashTableCell * /* old_location */, HashTableCell * /* new_location */) {}
+
+};
+
+/**
+ * A helper function for HashTable::insert() to set the "mapped" value.
+ * Overloaded on the mapped type, does nothing if it's VoidMapped.
+ */
+template <typename ValueType>
+void insertSetMapped(VoidMapped /* dest */, const ValueType & /* src */) {}
+
+template <typename MappedType, typename ValueType>
+void insertSetMapped(MappedType & dest, const ValueType & src) { dest = src.second; }
+
+
+/** Determines the size of the hash table, and when and how much it should be resized.
+ */
+template <size_t initial_size_degree = 8>
+struct HashTableGrower
+{
+ /// The state of this structure is enough to get the buffer size of the hash table.
+
+ UInt8 size_degree = initial_size_degree;
+ static constexpr auto initial_count = 1ULL << initial_size_degree;
+
+ /// If collision resolution chains are contiguous, we can implement erase operation by moving the elements.
+ static constexpr auto performs_linear_probing_with_single_step = true;
+
+ /// The size of the hash table in the cells.
+ size_t bufSize() const { return 1ULL << size_degree; }
+
+ size_t maxFill() const { return 1ULL << (size_degree - 1); }
+ size_t mask() const { return bufSize() - 1; }
+
+ /// From the hash value, get the cell number in the hash table.
+ size_t place(size_t x) const { return x & mask(); }
+
+ /// The next cell in the collision resolution chain.
+ size_t next(size_t pos) const { ++pos; return pos & mask(); }
+
+ /// Whether the hash table is sufficiently full. You need to increase the size of the hash table, or remove something unnecessary from it.
+ bool overflow(size_t elems) const { return elems > maxFill(); }
+
+ /// Increase the size of the hash table.
+ void increaseSize()
+ {
+ size_degree += size_degree >= 23 ? 1 : 2;
+ }
+
+ /// Set the buffer size by the number of elements in the hash table. Used when deserializing a hash table.
+ void set(size_t num_elems)
+ {
+ size_degree = num_elems <= 1
+ ? initial_size_degree
+ : ((initial_size_degree > static_cast<size_t>(log2(num_elems - 1)) + 2)
+ ? initial_size_degree
+ : (static_cast<size_t>(log2(num_elems - 1)) + 2));
+ }
+
+ void setBufSize(size_t buf_size_)
+ {
+ size_degree = static_cast<size_t>(log2(buf_size_ - 1) + 1);
+ }
+};
+
+
+/** When used as a Grower, it turns a hash table into something like a lookup table.
+ * It remains non-optimal - the cells store the keys.
+ * Also, the compiler can not completely remove the code of passing through the collision resolution chain, although it is not needed.
+ * NOTE: Better to use FixedHashTable instead.
+ */
+template <size_t key_bits>
+struct HashTableFixedGrower
+{
+ static constexpr auto initial_count = 1ULL << key_bits;
+
+ static constexpr auto performs_linear_probing_with_single_step = true;
+
+ size_t bufSize() const { return 1ULL << key_bits; }
+ size_t place(size_t x) const { return x; }
+ /// You could write __builtin_unreachable(), but the compiler does not optimize everything, and it turns out less efficiently.
+ size_t next(size_t pos) const { return pos + 1; }
+ bool overflow(size_t /*elems*/) const { return false; }
+
+ void increaseSize() { __builtin_unreachable(); }
+ void set(size_t /*num_elems*/) {}
+ void setBufSize(size_t /*buf_size_*/) {}
+};
+
+
+/** If you want to store the zero key separately - a place to store it. */
+template <bool need_zero_value_storage, typename Cell>
+struct ZeroValueStorage;
+
+template <typename Cell>
+struct ZeroValueStorage<true, Cell> //-V730
+{
+private:
+ bool has_zero = false;
+ std::aligned_storage_t<sizeof(Cell), alignof(Cell)> zero_value_storage; /// Storage of element with zero key.
+
+public:
+ bool hasZero() const { return has_zero; }
+
+ void setHasZero()
+ {
+ has_zero = true;
+ new (zeroValue()) Cell();
+ }
+
+ void clearHasZero()
+ {
+ has_zero = false;
+ zeroValue()->~Cell();
+ }
+
+ Cell * zeroValue() { return std::launder(reinterpret_cast<Cell*>(&zero_value_storage)); }
+ const Cell * zeroValue() const { return std::launder(reinterpret_cast<const Cell*>(&zero_value_storage)); }
+};
+
+template <typename Cell>
+struct ZeroValueStorage<false, Cell>
+{
+ bool hasZero() const { return false; }
+ void setHasZero() { throw std::runtime_error("HashTable: logical error"); }
+ void clearHasZero() {}
+
+ Cell * zeroValue() { return nullptr; }
+ const Cell * zeroValue() const { return nullptr; }
+};
+
+
+template <bool enable, typename Allocator, typename Cell>
+struct AllocatorBufferDeleter;
+
+template <typename Allocator, typename Cell>
+struct AllocatorBufferDeleter<false, Allocator, Cell>
+{
+ AllocatorBufferDeleter(Allocator &, size_t) {}
+
+ void operator()(Cell *) const {}
+
+};
+
+template <typename Allocator, typename Cell>
+struct AllocatorBufferDeleter<true, Allocator, Cell>
+{
+ AllocatorBufferDeleter(Allocator & allocator_, size_t size_)
+ : allocator(allocator_)
+ , size(size_) {}
+
+ void operator()(Cell * buffer) const { allocator.free(buffer, size); }
+
+ Allocator & allocator;
+ size_t size;
+};
+
+
+// The HashTable
+template
+<
+ typename Key,
+ typename Cell,
+ typename Hash,
+ typename Grower,
+ typename Allocator
+>
+class HashTable :
+ //private boost::noncopyable,
+ protected Hash,
+ protected Allocator,
+ protected Cell::State,
+ protected ZeroValueStorage<Cell::need_zero_value_storage, Cell> /// empty base optimization
+{
+public:
+ // If we use an allocator with inline memory, check that the initial
+ // size of the hash table is in sync with the amount of this memory.
+ static constexpr size_t initial_buffer_bytes
+ = Grower::initial_count * sizeof(Cell);
+ static_assert(allocatorInitialBytes<Allocator> == 0
+ || allocatorInitialBytes<Allocator> == initial_buffer_bytes);
+
+protected:
+ friend class const_iterator;
+ friend class iterator;
+ friend class Reader;
+
+ template <typename, typename, typename, typename, typename, typename, size_t>
+ friend class TwoLevelHashTable;
+
+ template <typename, typename, size_t>
+ friend class TwoLevelStringHashTable;
+
+ template <typename SubMaps>
+ friend class StringHashTable;
+
+ using HashValue = size_t;
+ using Self = HashTable;
+
+ size_t m_size = 0; /// Amount of elements
+ Cell * buf; /// A piece of memory for all elements except the element with zero key.
+ Grower grower;
+
+#ifdef DBMS_HASH_MAP_COUNT_COLLISIONS
+ mutable size_t collisions = 0;
+#endif
+
+ /// Find a cell with the same key or an empty cell, starting from the specified position and further along the collision resolution chain.
+ size_t ALWAYS_INLINE findCell(const Key & x, size_t hash_value, size_t place_value) const
+ {
+ while (!buf[place_value].isZero(*this) && !buf[place_value].keyEquals(x, hash_value, *this))
+ {
+ place_value = grower.next(place_value);
+#ifdef DBMS_HASH_MAP_COUNT_COLLISIONS
+ ++collisions;
+#endif
+ }
+
+ return place_value;
+ }
+
+
+ /// Find an empty cell, starting with the specified position and further along the collision resolution chain.
+ size_t ALWAYS_INLINE findEmptyCell(size_t place_value) const
+ {
+ while (!buf[place_value].isZero(*this))
+ {
+ place_value = grower.next(place_value);
+#ifdef DBMS_HASH_MAP_COUNT_COLLISIONS
+ ++collisions;
+#endif
+ }
+
+ return place_value;
+ }
+
+ void alloc(const Grower & new_grower)
+ {
+ buf = reinterpret_cast<Cell *>(Allocator::alloc(new_grower.bufSize() * sizeof(Cell)));
+ grower = new_grower;
+ }
+
+ void free()
+ {
+ if (buf)
+ {
+ Allocator::free(buf, getBufferSizeInBytes());
+ buf = nullptr;
+ }
+ }
+
+ /// Increase the size of the buffer.
+ void resize(size_t for_num_elems = 0, size_t for_buf_size = 0)
+ {
+#ifdef DBMS_HASH_MAP_DEBUG_RESIZES
+ Stopwatch watch;
+#endif
+
+ size_t old_size = grower.bufSize();
+
+ /** In case of exception for the object to remain in the correct state,
+ * changing the variable `grower` (which determines the buffer size of the hash table)
+ * is postponed for a moment after a real buffer change.
+ * The temporary variable `new_grower` is used to determine the new size.
+ */
+ Grower new_grower = grower;
+
+ if (for_num_elems)
+ {
+ new_grower.set(for_num_elems);
+ if (new_grower.bufSize() <= old_size)
+ return;
+ }
+ else if (for_buf_size)
+ {
+ new_grower.setBufSize(for_buf_size);
+ if (new_grower.bufSize() <= old_size)
+ return;
+ }
+ else
+ new_grower.increaseSize();
+
+ /// Expand the space.
+
+ size_t old_buffer_size = getBufferSizeInBytes();
+
+ /** If cell required to be notified during move we need to temporary keep old buffer
+ * because realloc does not quarantee for reallocated buffer to have same base address
+ */
+ using Deleter = AllocatorBufferDeleter<Cell::need_to_notify_cell_during_move, Allocator, Cell>;
+ Deleter buffer_deleter(*this, old_buffer_size);
+ std::unique_ptr<Cell, Deleter> old_buffer(buf, buffer_deleter);
+
+ if constexpr (Cell::need_to_notify_cell_during_move)
+ {
+ buf = reinterpret_cast<Cell *>(Allocator::alloc(new_grower.bufSize() * sizeof(Cell)));
+ memcpy(reinterpret_cast<void *>(buf), reinterpret_cast<const void *>(old_buffer.get()), old_buffer_size);
+ }
+ else
+ buf = reinterpret_cast<Cell *>(Allocator::realloc(buf, old_buffer_size, new_grower.bufSize() * sizeof(Cell)));
+
+ grower = new_grower;
+
+ /** Now some items may need to be moved to a new location.
+ * The element can stay in place, or move to a new location "on the right",
+ * or move to the left of the collision resolution chain, because the elements to the left of it have been moved to the new "right" location.
+ */
+ size_t i = 0;
+ for (; i < old_size; ++i)
+ if (!buf[i].isZero(*this))
+ {
+ size_t updated_place_value = reinsert(buf[i], buf[i].getHash(*this));
+
+ if constexpr (Cell::need_to_notify_cell_during_move)
+ Cell::move(&(old_buffer.get())[i], &buf[updated_place_value]);
+ }
+
+ /** There is also a special case:
+ * if the element was to be at the end of the old buffer, [ x]
+ * but is at the beginning because of the collision resolution chain, [o x]
+ * then after resizing, it will first be out of place again, [ xo ]
+ * and in order to transfer it where necessary,
+ * after transferring all the elements from the old halves you need to [ o x ]
+ * process tail from the collision resolution chain immediately after it [ o x ]
+ */
+ size_t new_size = grower.bufSize();
+ for (; i < new_size && !buf[i].isZero(*this); ++i)
+ {
+ size_t updated_place_value = reinsert(buf[i], buf[i].getHash(*this));
+
+ if constexpr (Cell::need_to_notify_cell_during_move)
+ if (&buf[i] != &buf[updated_place_value])
+ Cell::move(&buf[i], &buf[updated_place_value]);
+ }
+
+#ifdef DBMS_HASH_MAP_DEBUG_RESIZES
+ watch.stop();
+ std::cerr << std::fixed << std::setprecision(3)
+ << "Resize from " << old_size << " to " << grower.bufSize() << " took " << watch.elapsedSeconds() << " sec."
+ << std::endl;
+#endif
+ }
+
+
+ /** Paste into the new buffer the value that was in the old buffer.
+ * Used when increasing the buffer size.
+ */
+ size_t reinsert(Cell & x, size_t hash_value)
+ {
+ size_t place_value = grower.place(hash_value);
+
+ /// If the element is in its place.
+ if (&x == &buf[place_value])
+ return place_value;
+
+ /// Compute a new location, taking into account the collision resolution chain.
+ place_value = findCell(Cell::getKey(x.getValue()), hash_value, place_value);
+
+ /// If the item remains in its place in the old collision resolution chain.
+ if (!buf[place_value].isZero(*this))
+ return place_value;
+
+ /// Copy to a new location and zero the old one.
+ x.setHash(hash_value);
+ memcpy(static_cast<void*>(&buf[place_value]), &x, sizeof(x));
+ x.setZero();
+
+ /// Then the elements that previously were in collision with this can move to the old place.
+ return place_value;
+ }
+
+
+ void destroyElements()
+ {
+ if (!std::is_trivially_destructible_v<Cell>)
+ {
+ for (iterator it = begin(), it_end = end(); it != it_end; ++it)
+ {
+ it.ptr->~Cell();
+ /// In case of poison_in_dtor=1 it will be poisoned,
+ /// but it maybe used later, during iteration.
+ ///
+ /// NOTE, that technically this is UB [1], but OK for now.
+ ///
+ /// [1]: https://github.com/google/sanitizers/issues/854#issuecomment-329661378
+ //__msan_unpoison(it.ptr, sizeof(*it.ptr));
+ }
+ }
+ }
+
+
+ template <typename Derived, bool is_const>
+ class iterator_base
+ {
+ using Container = std::conditional_t<is_const, const Self, Self>;
+ using cell_type = std::conditional_t<is_const, const Cell, Cell>;
+
+ Container * container;
+ cell_type * ptr;
+
+ friend class HashTable;
+
+ public:
+ iterator_base() {}
+ iterator_base(Container * container_, cell_type * ptr_) : container(container_), ptr(ptr_) {}
+
+ bool operator== (const iterator_base & rhs) const { return ptr == rhs.ptr; }
+ bool operator!= (const iterator_base & rhs) const { return ptr != rhs.ptr; }
+
+ Derived & operator++()
+ {
+ /// If iterator was pointed to ZeroValueStorage, move it to the beginning of the main buffer.
+ if (unlikely(ptr->isZero(*container)))
+ ptr = container->buf;
+ else
+ ++ptr;
+
+ /// Skip empty cells in the main buffer.
+ auto buf_end = container->buf + container->grower.bufSize();
+ while (ptr < buf_end && ptr->isZero(*container))
+ ++ptr;
+
+ return static_cast<Derived &>(*this);
+ }
+
+ auto & operator* () const { return *ptr; }
+ auto * operator->() const { return ptr; }
+
+ auto getPtr() const { return ptr; }
+ size_t getHash() const { return ptr->getHash(*container); }
+
+ size_t getCollisionChainLength() const
+ {
+ return container->grower.place((ptr - container->buf) - container->grower.place(getHash()));
+ }
+
+ /**
+ * A hack for HashedDictionary.
+ *
+ * The problem: std-like find() returns an iterator, which has to be
+ * compared to end(). On the other hand, HashMap::find() returns
+ * LookupResult, which is compared to nullptr. HashedDictionary has to
+ * support both hash maps with the same code, hence the need for this
+ * hack.
+ *
+ * The proper way would be to remove iterator interface from our
+ * HashMap completely, change all its users to the existing internal
+ * iteration interface, and redefine end() to return LookupResult for
+ * compatibility with std find(). Unfortunately, now is not the time to
+ * do this.
+ */
+ operator Cell * () const { return nullptr; }
+ };
+
+
+public:
+ using key_type = Key;
+ using mapped_type = typename Cell::mapped_type;
+ using value_type = typename Cell::value_type;
+ using cell_type = Cell;
+
+ using LookupResult = Cell *;
+ using ConstLookupResult = const Cell *;
+
+ size_t hash(const Key & x) const { return Hash::operator()(x); }
+
+
+ HashTable()
+ {
+ if (Cell::need_zero_value_storage)
+ this->zeroValue()->setZero();
+ alloc(grower);
+ }
+
+ HashTable(size_t reserve_for_num_elements)
+ {
+ if (Cell::need_zero_value_storage)
+ this->zeroValue()->setZero();
+ grower.set(reserve_for_num_elements);
+ alloc(grower);
+ }
+
+ HashTable(HashTable && rhs)
+ : buf(nullptr)
+ {
+ *this = std::move(rhs);
+ }
+
+ ~HashTable()
+ {
+ destroyElements();
+ free();
+ }
+
+ HashTable & operator= (HashTable && rhs)
+ {
+ destroyElements();
+ free();
+
+ std::swap(buf, rhs.buf);
+ std::swap(m_size, rhs.m_size);
+ std::swap(grower, rhs.grower);
+
+ Hash::operator=(std::move(rhs));
+ Allocator::operator=(std::move(rhs));
+ Cell::State::operator=(std::move(rhs));
+ ZeroValueStorage<Cell::need_zero_value_storage, Cell>::operator=(std::move(rhs));
+
+ return *this;
+ }
+#if 0
+ class Reader final : private Cell::State
+ {
+ public:
+ Reader(DB::ReadBuffer & in_)
+ : in(in_)
+ {
+ }
+
+ Reader(const Reader &) = delete;
+ Reader & operator=(const Reader &) = delete;
+
+ bool next()
+ {
+ if (!is_initialized)
+ {
+ Cell::State::read(in);
+ DB::readVarUInt(size, in);
+ is_initialized = true;
+ }
+
+ if (read_count == size)
+ {
+ is_eof = true;
+ return false;
+ }
+
+ cell.read(in);
+ ++read_count;
+
+ return true;
+ }
+
+ inline const value_type & get() const
+ {
+ if (!is_initialized || is_eof)
+ throw DB::Exception("No available data");
+
+ return cell.getValue();
+ }
+
+ private:
+ DB::ReadBuffer & in;
+ Cell cell;
+ size_t read_count = 0;
+ size_t size = 0;
+ bool is_eof = false;
+ bool is_initialized = false;
+ };
+#endif
+
+ class iterator : public iterator_base<iterator, false>
+ {
+ public:
+ using iterator_base<iterator, false>::iterator_base;
+ };
+
+ class const_iterator : public iterator_base<const_iterator, true>
+ {
+ public:
+ using iterator_base<const_iterator, true>::iterator_base;
+ };
+
+
+ const_iterator begin() const
+ {
+ if (!buf)
+ return end();
+
+ if (this->hasZero())
+ return iteratorToZero();
+
+ const Cell * ptr = buf;
+ auto buf_end = buf + grower.bufSize();
+ while (ptr < buf_end && ptr->isZero(*this))
+ ++ptr;
+
+ return const_iterator(this, ptr);
+ }
+
+ const_iterator cbegin() const { return begin(); }
+
+ iterator begin()
+ {
+ if (!buf)
+ return end();
+
+ if (this->hasZero())
+ return iteratorToZero();
+
+ Cell * ptr = buf;
+ auto buf_end = buf + grower.bufSize();
+ while (ptr < buf_end && ptr->isZero(*this))
+ ++ptr;
+
+ return iterator(this, ptr);
+ }
+
+ const_iterator end() const
+ {
+ /// Avoid UBSan warning about adding zero to nullptr. It is valid in C++20 (and earlier) but not valid in C.
+ return const_iterator(this, buf ? buf + grower.bufSize() : buf);
+ }
+
+ const_iterator cend() const
+ {
+ return end();
+ }
+
+ iterator end()
+ {
+ return iterator(this, buf ? buf + grower.bufSize() : buf);
+ }
+
+
+protected:
+ const_iterator iteratorTo(const Cell * ptr) const { return const_iterator(this, ptr); }
+ iterator iteratorTo(Cell * ptr) { return iterator(this, ptr); }
+ const_iterator iteratorToZero() const { return iteratorTo(this->zeroValue()); }
+ iterator iteratorToZero() { return iteratorTo(this->zeroValue()); }
+
+
+ /// If the key is zero, insert it into a special place and return true.
+ /// We don't have to persist a zero key, because it's not actually inserted.
+ /// That's why we just take a Key by value, an not a key holder.
+ bool ALWAYS_INLINE emplaceIfZero(const Key & x, LookupResult & it, bool & inserted, size_t hash_value)
+ {
+ /// If it is claimed that the zero key can not be inserted into the table.
+ if (!Cell::need_zero_value_storage)
+ return false;
+
+ if (Cell::isZero(x, *this))
+ {
+ it = this->zeroValue();
+
+ if (!this->hasZero())
+ {
+ ++m_size;
+ this->setHasZero();
+ this->zeroValue()->setHash(hash_value);
+ inserted = true;
+ }
+ else
+ inserted = false;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ template <typename KeyHolder>
+ void ALWAYS_INLINE emplaceNonZeroImpl(size_t place_value, KeyHolder && key_holder,
+ LookupResult & it, bool & inserted, size_t hash_value)
+ {
+ it = &buf[place_value];
+
+ if (!buf[place_value].isZero(*this))
+ {
+ keyHolderDiscardKey(key_holder);
+ inserted = false;
+ return;
+ }
+
+ keyHolderPersistKey(key_holder);
+ const auto & key = keyHolderGetKey(key_holder);
+
+ new (&buf[place_value]) Cell(key, *this);
+ buf[place_value].setHash(hash_value);
+ inserted = true;
+ ++m_size;
+
+ if (unlikely(grower.overflow(m_size)))
+ {
+ try
+ {
+ resize();
+ }
+ catch (...)
+ {
+ /** If we have not resized successfully, then there will be problems.
+ * There remains a key, but uninitialized mapped-value,
+ * which, perhaps, can not even be called a destructor.
+ */
+ --m_size;
+ buf[place_value].setZero();
+ inserted = false;
+ throw;
+ }
+
+ // The hash table was rehashed, so we have to re-find the key.
+ size_t new_place = findCell(key, hash_value, grower.place(hash_value));
+ assert(!buf[new_place].isZero(*this));
+ it = &buf[new_place];
+ }
+ }
+
+ /// Only for non-zero keys. Find the right place, insert the key there, if it does not already exist. Set iterator to the cell in output parameter.
+ template <typename KeyHolder>
+ void ALWAYS_INLINE emplaceNonZero(KeyHolder && key_holder, LookupResult & it,
+ bool & inserted, size_t hash_value)
+ {
+ const auto & key = keyHolderGetKey(key_holder);
+ size_t place_value = findCell(key, hash_value, grower.place(hash_value));
+ emplaceNonZeroImpl(place_value, key_holder, it, inserted, hash_value);
+ }
+
+
+public:
+ void reserve(size_t num_elements)
+ {
+ resize(num_elements);
+ }
+
+ /// Insert a value. In the case of any more complex values, it is better to use the `emplace` function.
+ std::pair<LookupResult, bool> ALWAYS_INLINE insert(const value_type & x)
+ {
+ std::pair<LookupResult, bool> res;
+
+ size_t hash_value = hash(Cell::getKey(x));
+ if (!emplaceIfZero(Cell::getKey(x), res.first, res.second, hash_value))
+ {
+ emplaceNonZero(Cell::getKey(x), res.first, res.second, hash_value);
+ }
+
+ if (res.second)
+ insertSetMapped(res.first->getMapped(), x);
+
+ return res;
+ }
+
+
+ /// Reinsert node pointed to by iterator
+ void ALWAYS_INLINE reinsert(iterator & it, size_t hash_value)
+ {
+ size_t place_value = reinsert(*it.getPtr(), hash_value);
+
+ if constexpr (Cell::need_to_notify_cell_during_move)
+ if (it.getPtr() != &buf[place_value])
+ Cell::move(it.getPtr(), &buf[place_value]);
+ }
+
+
+ /** Insert the key.
+ * Return values:
+ * 'it' -- a LookupResult pointing to the corresponding key/mapped pair.
+ * 'inserted' -- whether a new key was inserted.
+ *
+ * You have to make `placement new` of value if you inserted a new key,
+ * since when destroying a hash table, it will call the destructor!
+ *
+ * Example usage:
+ *
+ * Map::LookupResult it;
+ * bool inserted;
+ * map.emplace(key, it, inserted);
+ * if (inserted)
+ * new (&it->getMapped()) Mapped(value);
+ */
+ template <typename KeyHolder>
+ void ALWAYS_INLINE emplace(KeyHolder && key_holder, LookupResult & it, bool & inserted)
+ {
+ const auto & key = keyHolderGetKey(key_holder);
+ emplace(key_holder, it, inserted, hash(key));
+ }
+
+ template <typename KeyHolder>
+ void ALWAYS_INLINE emplace(KeyHolder && key_holder, LookupResult & it,
+ bool & inserted, size_t hash_value)
+ {
+ const auto & key = keyHolderGetKey(key_holder);
+ if (!emplaceIfZero(key, it, inserted, hash_value))
+ emplaceNonZero(key_holder, it, inserted, hash_value);
+ }
+
+ /// Copy the cell from another hash table. It is assumed that the cell is not zero, and also that there was no such key in the table yet.
+ void ALWAYS_INLINE insertUniqueNonZero(const Cell * cell, size_t hash_value)
+ {
+ size_t place_value = findEmptyCell(grower.place(hash_value));
+
+ memcpy(static_cast<void*>(&buf[place_value]), cell, sizeof(*cell));
+ ++m_size;
+
+ if (unlikely(grower.overflow(m_size)))
+ resize();
+ }
+
+ LookupResult ALWAYS_INLINE find(const Key & x)
+ {
+ if (Cell::isZero(x, *this))
+ return this->hasZero() ? this->zeroValue() : nullptr;
+
+ size_t hash_value = hash(x);
+ size_t place_value = findCell(x, hash_value, grower.place(hash_value));
+ return !buf[place_value].isZero(*this) ? &buf[place_value] : nullptr;
+ }
+
+ ConstLookupResult ALWAYS_INLINE find(const Key & x) const
+ {
+ return const_cast<std::decay_t<decltype(*this)> *>(this)->find(x);
+ }
+
+ LookupResult ALWAYS_INLINE find(const Key & x, size_t hash_value)
+ {
+ if (Cell::isZero(x, *this))
+ return this->hasZero() ? this->zeroValue() : nullptr;
+
+ size_t place_value = findCell(x, hash_value, grower.place(hash_value));
+ return !buf[place_value].isZero(*this) ? &buf[place_value] : nullptr;
+ }
+
+ ConstLookupResult ALWAYS_INLINE find(const Key & x, size_t hash_value) const
+ {
+ return const_cast<std::decay_t<decltype(*this)> *>(this)->find(x, hash_value);
+ }
+
+ std::enable_if_t<Grower::performs_linear_probing_with_single_step, bool>
+ ALWAYS_INLINE erase(const Key & x)
+ {
+ return erase(x, hash(x));
+ }
+
+ std::enable_if_t<Grower::performs_linear_probing_with_single_step, bool>
+ ALWAYS_INLINE erase(const Key & x, size_t hash_value)
+ {
+ /** Deletion from open addressing hash table without tombstones
+ *
+ * https://en.wikipedia.org/wiki/Linear_probing
+ * https://en.wikipedia.org/wiki/Open_addressing
+ * Algorithm without recomputing hash but keep probes difference value (difference of natural cell position and inserted one)
+ * in cell https://arxiv.org/ftp/arxiv/papers/0909/0909.2547.pdf
+ *
+ * Currently we use algorithm with hash recomputing on each step from https://en.wikipedia.org/wiki/Open_addressing
+ */
+
+ if (Cell::isZero(x, *this))
+ {
+ if (this->hasZero())
+ {
+ --m_size;
+ this->clearHasZero();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ size_t erased_key_position = findCell(x, hash_value, grower.place(hash_value));
+
+ /// Key is not found
+ if (buf[erased_key_position].isZero(*this))
+ return false;
+
+ /// We need to guarantee loop termination because there will be empty position
+ assert(m_size < grower.bufSize());
+
+ size_t next_position = erased_key_position;
+
+ /**
+ * During element deletion there is a possibility that the search will be broken for one
+ * of the following elements, because this place erased_key_position is empty. We will check
+ * next_element. Consider a sequence from (erased_key_position, next_element], if the
+ * optimal_position of next_element falls into it, then removing erased_key_position
+ * will not break search for next_element.
+ * If optimal_position of the element does not fall into the sequence (erased_key_position, next_element]
+ * then deleting a erased_key_position will break search for it, so we need to move next_element
+ * to erased_key_position. Now we have empty place at next_element, so we apply the identical
+ * procedure for it.
+ * If an empty element is encountered then means that there is no more next elements for which we can
+ * break the search so we can exit.
+ */
+
+ /// Walk to the right through collision resolution chain and move elements to better positions
+ while (true)
+ {
+ next_position = grower.next(next_position);
+
+ /// If there's no more elements in the chain
+ if (buf[next_position].isZero(*this))
+ break;
+
+ /// The optimal position of the element in the cell at next_position
+ size_t optimal_position = grower.place(buf[next_position].getHash(*this));
+
+ /// If position of this element is already optimal - proceed to the next element.
+ if (optimal_position == next_position)
+ continue;
+
+ /// Cannot move this element because optimal position is after the freed place
+ /// The second condition is tricky - if the chain was overlapped before erased_key_position,
+ /// and the optimal position is actually before in collision resolution chain:
+ ///
+ /// [*xn***----------------***]
+ /// ^^-next elem ^
+ /// | |
+ /// erased elem the optimal position of the next elem
+ ///
+ /// so, the next elem should be moved to position of erased elem
+
+ /// The case of non overlapping part of chain
+ if (next_position > erased_key_position
+ && (optimal_position > erased_key_position) && (optimal_position < next_position))
+ {
+ continue;
+ }
+
+ /// The case of overlapping chain
+ if (next_position < erased_key_position
+ /// Cannot move this element because optimal position is after the freed place
+ && ((optimal_position > erased_key_position) || (optimal_position < next_position)))
+ {
+ continue;
+ }
+
+ /// Move the element to the freed place
+ memcpy(static_cast<void *>(&buf[erased_key_position]), static_cast<void *>(&buf[next_position]), sizeof(Cell));
+
+ if constexpr (Cell::need_to_notify_cell_during_move)
+ Cell::move(&buf[next_position], &buf[erased_key_position]);
+
+ /// Now we have another freed place
+ erased_key_position = next_position;
+ }
+
+ buf[erased_key_position].setZero();
+ --m_size;
+
+ return true;
+ }
+
+ bool ALWAYS_INLINE has(const Key & x) const
+ {
+ if (Cell::isZero(x, *this))
+ return this->hasZero();
+
+ size_t hash_value = hash(x);
+ size_t place_value = findCell(x, hash_value, grower.place(hash_value));
+ return !buf[place_value].isZero(*this);
+ }
+
+
+ bool ALWAYS_INLINE has(const Key & x, size_t hash_value) const
+ {
+ if (Cell::isZero(x, *this))
+ return this->hasZero();
+
+ size_t place_value = findCell(x, hash_value, grower.place(hash_value));
+ return !buf[place_value].isZero(*this);
+ }
+
+#if 0
+ void write(DB::WriteBuffer & wb) const
+ {
+ Cell::State::write(wb);
+ DB::writeVarUInt(m_size, wb);
+
+ if (this->hasZero())
+ this->zeroValue()->write(wb);
+
+ if (!buf)
+ return;
+
+ for (auto ptr = buf, buf_end = buf + grower.bufSize(); ptr < buf_end; ++ptr)
+ if (!ptr->isZero(*this))
+ ptr->write(wb);
+ }
+
+ void writeText(DB::WriteBuffer & wb) const
+ {
+ Cell::State::writeText(wb);
+ DB::writeText(m_size, wb);
+
+ if (this->hasZero())
+ {
+ DB::writeChar(',', wb);
+ this->zeroValue()->writeText(wb);
+ }
+
+ if (!buf)
+ return;
+
+ for (auto ptr = buf, buf_end = buf + grower.bufSize(); ptr < buf_end; ++ptr)
+ {
+ if (!ptr->isZero(*this))
+ {
+ DB::writeChar(',', wb);
+ ptr->writeText(wb);
+ }
+ }
+ }
+
+ void read(DB::ReadBuffer & rb)
+ {
+ Cell::State::read(rb);
+
+ destroyElements();
+ this->clearHasZero();
+ m_size = 0;
+
+ size_t new_size = 0;
+ DB::readVarUInt(new_size, rb);
+
+ free();
+ Grower new_grower = grower;
+ new_grower.set(new_size);
+ alloc(new_grower);
+
+ for (size_t i = 0; i < new_size; ++i)
+ {
+ Cell x;
+ x.read(rb);
+ insert(x.getValue());
+ }
+ }
+
+ void readText(DB::ReadBuffer & rb)
+ {
+ Cell::State::readText(rb);
+
+ destroyElements();
+ this->clearHasZero();
+ m_size = 0;
+
+ size_t new_size = 0;
+ DB::readText(new_size, rb);
+
+ free();
+ Grower new_grower = grower;
+ new_grower.set(new_size);
+ alloc(new_grower);
+
+ for (size_t i = 0; i < new_size; ++i)
+ {
+ Cell x;
+ DB::assertChar(',', rb);
+ x.readText(rb);
+ insert(x.getValue());
+ }
+ }
+#endif
+
+ size_t size() const
+ {
+ return m_size;
+ }
+
+ bool empty() const
+ {
+ return 0 == m_size;
+ }
+
+ void clear()
+ {
+ destroyElements();
+ this->clearHasZero();
+ m_size = 0;
+
+ memset(static_cast<void*>(buf), 0, grower.bufSize() * sizeof(*buf));
+ }
+
+ /// After executing this function, the table can only be destroyed,
+ /// and also you can use the methods `size`, `empty`, `begin`, `end`.
+ void clearAndShrink()
+ {
+ destroyElements();
+ this->clearHasZero();
+ m_size = 0;
+ free();
+ }
+
+ size_t getBufferSizeInBytes() const
+ {
+ return grower.bufSize() * sizeof(Cell);
+ }
+
+ size_t getBufferSizeInCells() const
+ {
+ return grower.bufSize();
+ }
+
+ /// Return offset for result in internal buffer.
+ /// Result can have value up to `getBufferSizeInCells() + 1`
+ /// because offset for zero value considered to be 0
+ /// and for other values it will be `offset in buffer + 1`
+ size_t offsetInternal(ConstLookupResult ptr) const
+ {
+ if (ptr->isZero(*this))
+ return 0;
+ return ptr - buf + 1;
+ }
+
+#ifdef DBMS_HASH_MAP_COUNT_COLLISIONS
+ size_t getCollisions() const
+ {
+ return collisions;
+ }
+#endif
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/HashTableAllocator.h b/ydb/library/arrow_clickhouse/Common/HashTable/HashTableAllocator.h
new file mode 100644
index 0000000000..6522a5e27a
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/HashTableAllocator.h
@@ -0,0 +1,22 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <Common/Allocator.h>
+
+namespace CH
+{
+
+/**
+ * We are going to use the entire memory we allocated when resizing a hash
+ * table, so it makes sense to pre-fault the pages so that page faults don't
+ * interrupt the resize loop. Set the allocator parameter accordingly.
+ */
+using HashTableAllocator = Allocator<true /* clear_memory */, true /* mmap_populate */>;
+
+template <size_t initial_bytes = 64>
+using HashTableAllocatorWithStackMemory = AllocatorWithStackMemory<HashTableAllocator, initial_bytes>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/HashTableKeyHolder.h b/ydb/library/arrow_clickhouse/Common/HashTable/HashTableKeyHolder.h
new file mode 100644
index 0000000000..e55400103d
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/HashTableKeyHolder.h
@@ -0,0 +1,127 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <Common/Arena.h>
+
+/**
+ * In some aggregation scenarios, when adding a key to the hash table, we
+ * start with a temporary key object, and if it turns out to be a new key,
+ * we must make it persistent (e.g. copy to an Arena) and use the resulting
+ * persistent object as hash table key. This happens only for StringRef keys,
+ * because other key types are stored by value, but StringRef is a pointer-like
+ * type: the actual data are stored elsewhere. Even for StringRef, we don't
+ * make a persistent copy of the key in each of the following cases:
+ * 1) the aggregation method doesn't use temporary keys, so they're persistent
+ * from the start;
+ * 1) the key is already present in the hash table;
+ * 3) that particular key is stored by value, e.g. a short StringRef key in
+ * StringHashMap.
+ *
+ * In the past, the caller was responsible for making the key persistent after
+ * in was inserted. emplace() returned whether the key is new or not, so the
+ * caller only stored new keys (this is case (2) from the above list). However,
+ * now we are adding a compound hash table for StringRef keys, so case (3)
+ * appears. The decision about persistence now depends on some properties of
+ * the key, and the logic of this decision is tied to the particular hash table
+ * implementation. This means that the hash table user now doesn't have enough
+ * data and logic to make this decision by itself.
+ *
+ * To support these new requirements, we now manage key persistence by passing
+ * a special key holder to emplace(), which has the functions to make the key
+ * persistent or to discard it. emplace() then calls these functions at the
+ * appropriate moments.
+ *
+ * This approach has the following benefits:
+ * - no extra runtime branches in the caller to make the key persistent.
+ * - no additional data is stored in the hash table itself, which is important
+ * when it's used in aggregate function states.
+ * - no overhead when the key memory management isn't needed: we just pass the
+ * bare key without any wrapper to emplace(), and the default callbacks do
+ * nothing.
+ *
+ * This file defines the default key persistence functions, as well as two
+ * different key holders and corresponding functions for storing StringRef
+ * keys to Arena.
+ */
+
+namespace CH
+{
+
+/**
+ * Returns the key. Can return the temporary key initially.
+ * After the call to keyHolderPersistKey(), must return the persistent key.
+ */
+template <typename Key>
+inline Key & ALWAYS_INLINE keyHolderGetKey(Key && key) { return key; }
+
+/**
+ * Make the key persistent. keyHolderGetKey() must return the persistent key
+ * after this call.
+ */
+template <typename Key>
+inline void ALWAYS_INLINE keyHolderPersistKey(Key &&) {}
+
+/**
+ * Discard the key. Calling keyHolderGetKey() is ill-defined after this.
+ */
+template <typename Key>
+inline void ALWAYS_INLINE keyHolderDiscardKey(Key &&) {}
+
+/**
+ * ArenaKeyHolder is a key holder for hash tables that serializes a StringRef
+ * key to an Arena.
+ */
+struct ArenaKeyHolder
+{
+ StringRef key;
+ Arena & pool;
+
+};
+
+inline StringRef & ALWAYS_INLINE keyHolderGetKey(CH::ArenaKeyHolder & holder)
+{
+ return holder.key;
+}
+
+inline void ALWAYS_INLINE keyHolderPersistKey(CH::ArenaKeyHolder & holder)
+{
+ // Hash table shouldn't ask us to persist a zero key
+ assert(holder.key.size > 0);
+ holder.key.data = holder.pool.insert(holder.key.data, holder.key.size);
+}
+
+inline void ALWAYS_INLINE keyHolderDiscardKey(CH::ArenaKeyHolder &)
+{
+}
+
+/** SerializedKeyHolder is a key holder for a StringRef key that is already
+ * serialized to an Arena. The key must be the last allocation in this Arena,
+ * and is discarded by rolling back the allocation.
+ */
+struct SerializedKeyHolder
+{
+ StringRef key;
+ Arena & pool;
+};
+
+inline StringRef & ALWAYS_INLINE keyHolderGetKey(CH::SerializedKeyHolder & holder)
+{
+ return holder.key;
+}
+
+inline void ALWAYS_INLINE keyHolderPersistKey(CH::SerializedKeyHolder &)
+{
+}
+
+inline void ALWAYS_INLINE keyHolderDiscardKey(CH::SerializedKeyHolder & holder)
+{
+ [[maybe_unused]] void * new_head = holder.pool.rollback(holder.key.size);
+ assert(new_head == holder.key.data);
+ holder.key.data = nullptr;
+ holder.key.size = 0;
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/StringHashMap.h b/ydb/library/arrow_clickhouse/Common/HashTable/StringHashMap.h
new file mode 100644
index 0000000000..bb6e0994c3
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/StringHashMap.h
@@ -0,0 +1,198 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <Common/HashTable/HashMap.h>
+#include <Common/HashTable/HashTableAllocator.h>
+#include <Common/HashTable/StringHashTable.h>
+
+namespace CH
+{
+
+template <typename Key, typename TMapped>
+struct StringHashMapCell : public HashMapCell<Key, TMapped, StringHashTableHash, HashTableNoState>
+{
+ using Base = HashMapCell<Key, TMapped, StringHashTableHash, HashTableNoState>;
+ using value_type = typename Base::value_type;
+ using Base::Base;
+ static constexpr bool need_zero_value_storage = false;
+ // external
+ const StringRef getKey() const { return toStringRef(this->value.first); }
+ // internal
+ static const Key & getKey(const value_type & value_) { return value_.first; }
+};
+
+template <typename TMapped>
+struct StringHashMapCell<StringKey16, TMapped> : public HashMapCell<StringKey16, TMapped, StringHashTableHash, HashTableNoState>
+{
+ using Base = HashMapCell<StringKey16, TMapped, StringHashTableHash, HashTableNoState>;
+ using value_type = typename Base::value_type;
+ using Base::Base;
+ static constexpr bool need_zero_value_storage = false;
+ bool isZero(const HashTableNoState & state) const { return isZero(this->value.first, state); }
+
+ // Zero means unoccupied cells in hash table. Use key with last word = 0 as
+ // zero keys, because such keys are unrepresentable (no way to encode length).
+ static bool isZero(const StringKey16 & key, const HashTableNoState &) { return key.items[1] == 0; }
+ void setZero() { this->value.first.items[1] = 0; }
+
+ // external
+ const StringRef getKey() const { return toStringRef(this->value.first); }
+ // internal
+ static const StringKey16 & getKey(const value_type & value_) { return value_.first; }
+};
+
+template <typename TMapped>
+struct StringHashMapCell<StringKey24, TMapped> : public HashMapCell<StringKey24, TMapped, StringHashTableHash, HashTableNoState>
+{
+ using Base = HashMapCell<StringKey24, TMapped, StringHashTableHash, HashTableNoState>;
+ using value_type = typename Base::value_type;
+ using Base::Base;
+ static constexpr bool need_zero_value_storage = false;
+ bool isZero(const HashTableNoState & state) const { return isZero(this->value.first, state); }
+
+ // Zero means unoccupied cells in hash table. Use key with last word = 0 as
+ // zero keys, because such keys are unrepresentable (no way to encode length).
+ static bool isZero(const StringKey24 & key, const HashTableNoState &)
+ { return key.c == 0; }
+ void setZero() { this->value.first.c = 0; }
+
+ // external
+ const StringRef getKey() const { return toStringRef(this->value.first); }
+ // internal
+ static const StringKey24 & getKey(const value_type & value_) { return value_.first; }
+};
+
+template <typename TMapped>
+struct StringHashMapCell<StringRef, TMapped> : public HashMapCellWithSavedHash<StringRef, TMapped, StringHashTableHash, HashTableNoState>
+{
+ using Base = HashMapCellWithSavedHash<StringRef, TMapped, StringHashTableHash, HashTableNoState>;
+ using value_type = typename Base::value_type;
+ using Base::Base;
+ static constexpr bool need_zero_value_storage = false;
+ // external
+ using Base::getKey;
+ // internal
+ static const StringRef & getKey(const value_type & value_) { return value_.first; }
+};
+
+template <typename TMapped, typename Allocator>
+struct StringHashMapSubMaps
+{
+ using T0 = StringHashTableEmpty<StringHashMapCell<StringRef, TMapped>>;
+ using T1 = HashMapTable<StringKey8, StringHashMapCell<StringKey8, TMapped>, StringHashTableHash, StringHashTableGrower<>, Allocator>;
+ using T2 = HashMapTable<StringKey16, StringHashMapCell<StringKey16, TMapped>, StringHashTableHash, StringHashTableGrower<>, Allocator>;
+ using T3 = HashMapTable<StringKey24, StringHashMapCell<StringKey24, TMapped>, StringHashTableHash, StringHashTableGrower<>, Allocator>;
+ using Ts = HashMapTable<StringRef, StringHashMapCell<StringRef, TMapped>, StringHashTableHash, StringHashTableGrower<>, Allocator>;
+};
+
+template <typename TMapped, typename Allocator = HashTableAllocator>
+class StringHashMap : public StringHashTable<StringHashMapSubMaps<TMapped, Allocator>>
+{
+public:
+ using Key = StringRef;
+ using Base = StringHashTable<StringHashMapSubMaps<TMapped, Allocator>>;
+ using Self = StringHashMap;
+ using LookupResult = typename Base::LookupResult;
+
+ using Base::Base;
+
+ /// Merge every cell's value of current map into the destination map.
+ /// Func should have signature void(Mapped & dst, Mapped & src, bool emplaced).
+ /// Each filled cell in current map will invoke func once. If that map doesn't
+ /// have a key equals to the given cell, a new cell gets emplaced into that map,
+ /// and func is invoked with the third argument emplaced set to true. Otherwise
+ /// emplaced is set to false.
+ template <typename Func>
+ void ALWAYS_INLINE mergeToViaEmplace(Self & that, Func && func)
+ {
+ if (this->m0.hasZero() && that.m0.hasZero())
+ func(that.m0.zeroValue()->getMapped(), this->m0.zeroValue()->getMapped(), false);
+ else if (this->m0.hasZero())
+ {
+ that.m0.setHasZero();
+ func(that.m0.zeroValue()->getMapped(), this->m0.zeroValue()->getMapped(), true);
+ }
+ this->m1.mergeToViaEmplace(that.m1, func);
+ this->m2.mergeToViaEmplace(that.m2, func);
+ this->m3.mergeToViaEmplace(that.m3, func);
+ this->ms.mergeToViaEmplace(that.ms, func);
+ }
+
+ /// Merge every cell's value of current map into the destination map via find.
+ /// Func should have signature void(Mapped & dst, Mapped & src, bool exist).
+ /// Each filled cell in current map will invoke func once. If that map doesn't
+ /// have a key equals to the given cell, func is invoked with the third argument
+ /// exist set to false. Otherwise exist is set to true.
+ template <typename Func>
+ void ALWAYS_INLINE mergeToViaFind(Self & that, Func && func)
+ {
+ if (this->m0.size() && that.m0.size())
+ func(that.m0.zeroValue()->getMapped(), this->m0.zeroValue()->getMapped(), true);
+ else if (this->m0.size())
+ func(this->m0.zeroValue()->getMapped(), this->m0.zeroValue()->getMapped(), false);
+ this->m1.mergeToViaFind(that.m1, func);
+ this->m2.mergeToViaFind(that.m2, func);
+ this->m3.mergeToViaFind(that.m3, func);
+ this->ms.mergeToViaFind(that.ms, func);
+ }
+
+ TMapped & ALWAYS_INLINE operator[](const Key & x)
+ {
+ LookupResult it;
+ bool inserted;
+ this->emplace(x, it, inserted);
+ if (inserted)
+ new (&it->getMapped()) TMapped();
+
+ return it->getMapped();
+ }
+
+ template <typename Func>
+ void ALWAYS_INLINE forEachValue(Func && func)
+ {
+ if (this->m0.size())
+ {
+ func(StringRef{}, this->m0.zeroValue()->getMapped());
+ }
+
+ for (auto & v : this->m1)
+ {
+ func(v.getKey(), v.getMapped());
+ }
+
+ for (auto & v : this->m2)
+ {
+ func(v.getKey(), v.getMapped());
+ }
+
+ for (auto & v : this->m3)
+ {
+ func(v.getKey(), v.getMapped());
+ }
+
+ for (auto & v : this->ms)
+ {
+ func(v.getKey(), v.getMapped());
+ }
+ }
+
+ template <typename Func>
+ void ALWAYS_INLINE forEachMapped(Func && func)
+ {
+ if (this->m0.size())
+ func(this->m0.zeroValue()->getMapped());
+ for (auto & v : this->m1)
+ func(v.getMapped());
+ for (auto & v : this->m2)
+ func(v.getMapped());
+ for (auto & v : this->m3)
+ func(v.getMapped());
+ for (auto & v : this->ms)
+ func(v.getMapped());
+ }
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/HashTable/StringHashTable.h b/ydb/library/arrow_clickhouse/Common/HashTable/StringHashTable.h
new file mode 100644
index 0000000000..da81754482
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/HashTable/StringHashTable.h
@@ -0,0 +1,444 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <Common/HashTable/HashMap.h>
+#include <Common/HashTable/HashTable.h>
+
+#include <new>
+#include <variant>
+
+namespace CH
+{
+
+using StringKey8 = UInt64;
+using StringKey16 = UInt128;
+struct StringKey24
+{
+ UInt64 a;
+ UInt64 b;
+ UInt64 c;
+
+ bool operator==(const StringKey24 rhs) const { return a == rhs.a && b == rhs.b && c == rhs.c; }
+};
+
+inline StringRef ALWAYS_INLINE toStringRef(const StringKey8 & n)
+{
+ assert(n != 0);
+ return {reinterpret_cast<const char *>(&n), 8ul - (__builtin_clzll(n) >> 3)};
+}
+inline StringRef ALWAYS_INLINE toStringRef(const StringKey16 & n)
+{
+ assert(n.items[1] != 0);
+ return {reinterpret_cast<const char *>(&n), 16ul - (__builtin_clzll(n.items[1]) >> 3)};
+}
+inline StringRef ALWAYS_INLINE toStringRef(const StringKey24 & n)
+{
+ assert(n.c != 0);
+ return {reinterpret_cast<const char *>(&n), 24ul - (__builtin_clzll(n.c) >> 3)};
+}
+
+struct StringHashTableHash
+{
+#if defined(__SSE4_2__)
+ size_t ALWAYS_INLINE operator()(StringKey8 key) const
+ {
+ size_t res = -1ULL;
+ res = _mm_crc32_u64(res, key);
+ return res;
+ }
+ size_t ALWAYS_INLINE operator()(StringKey16 key) const
+ {
+ size_t res = -1ULL;
+ res = _mm_crc32_u64(res, key.items[0]);
+ res = _mm_crc32_u64(res, key.items[1]);
+ return res;
+ }
+ size_t ALWAYS_INLINE operator()(StringKey24 key) const
+ {
+ size_t res = -1ULL;
+ res = _mm_crc32_u64(res, key.a);
+ res = _mm_crc32_u64(res, key.b);
+ res = _mm_crc32_u64(res, key.c);
+ return res;
+ }
+#else
+ size_t ALWAYS_INLINE operator()(StringKey8 key) const
+ {
+ return CityHash_v1_0_2::CityHash64(reinterpret_cast<const char *>(&key), 8);
+ }
+ size_t ALWAYS_INLINE operator()(StringKey16 key) const
+ {
+ return CityHash_v1_0_2::CityHash64(reinterpret_cast<const char *>(&key), 16);
+ }
+ size_t ALWAYS_INLINE operator()(StringKey24 key) const
+ {
+ return CityHash_v1_0_2::CityHash64(reinterpret_cast<const char *>(&key), 24);
+ }
+#endif
+ size_t ALWAYS_INLINE operator()(StringRef key) const
+ {
+ return StringRefHash()(key);
+ }
+};
+
+template <typename Cell>
+struct StringHashTableEmpty //-V730
+{
+ using Self = StringHashTableEmpty;
+
+ bool has_zero = false;
+ std::aligned_storage_t<sizeof(Cell), alignof(Cell)> zero_value_storage; /// Storage of element with zero key.
+
+public:
+ bool hasZero() const { return has_zero; }
+
+ void setHasZero()
+ {
+ has_zero = true;
+ new (zeroValue()) Cell();
+ }
+
+ void setHasZero(const Cell & other)
+ {
+ has_zero = true;
+ new (zeroValue()) Cell(other);
+ }
+
+ void clearHasZero()
+ {
+ has_zero = false;
+ if (!std::is_trivially_destructible_v<Cell>)
+ zeroValue()->~Cell();
+ }
+
+ Cell * zeroValue() { return std::launder(reinterpret_cast<Cell *>(&zero_value_storage)); }
+ const Cell * zeroValue() const { return std::launder(reinterpret_cast<const Cell *>(&zero_value_storage)); }
+
+ using LookupResult = Cell *;
+ using ConstLookupResult = const Cell *;
+
+ template <typename KeyHolder>
+ void ALWAYS_INLINE emplace(KeyHolder &&, LookupResult & it, bool & inserted, size_t = 0)
+ {
+ if (!hasZero())
+ {
+ setHasZero();
+ inserted = true;
+ }
+ else
+ inserted = false;
+ it = zeroValue();
+ }
+
+ template <typename Key>
+ LookupResult ALWAYS_INLINE find(const Key &, size_t = 0)
+ {
+ return hasZero() ? zeroValue() : nullptr;
+ }
+
+ template <typename Key>
+ ConstLookupResult ALWAYS_INLINE find(const Key &, size_t = 0) const
+ {
+ return hasZero() ? zeroValue() : nullptr;
+ }
+#if 0
+ void write(DB::WriteBuffer & wb) const { zeroValue()->write(wb); }
+ void writeText(DB::WriteBuffer & wb) const { zeroValue()->writeText(wb); }
+ void read(DB::ReadBuffer & rb) { zeroValue()->read(rb); }
+ void readText(DB::ReadBuffer & rb) { zeroValue()->readText(rb); }
+#endif
+ size_t size() const { return hasZero() ? 1 : 0; }
+ bool empty() const { return !hasZero(); }
+ size_t getBufferSizeInBytes() const { return sizeof(Cell); }
+ size_t getCollisions() const { return 0; }
+};
+
+template <size_t initial_size_degree = 8>
+struct StringHashTableGrower : public HashTableGrower<initial_size_degree>
+{
+ // Smooth growing for string maps
+ void increaseSize() { this->size_degree += 1; }
+};
+
+template <typename Mapped>
+struct StringHashTableLookupResult
+{
+ Mapped * mapped_ptr;
+ StringHashTableLookupResult() {}
+ StringHashTableLookupResult(Mapped * mapped_ptr_) : mapped_ptr(mapped_ptr_) {}
+ StringHashTableLookupResult(std::nullptr_t) {}
+ const VoidKey getKey() const { return {}; }
+ auto & getMapped() { return *mapped_ptr; }
+ auto & operator*() { return *this; }
+ auto & operator*() const { return *this; }
+ auto * operator->() { return this; }
+ auto * operator->() const { return this; }
+ operator bool() const { return mapped_ptr; }
+ friend bool operator==(const StringHashTableLookupResult & a, const nullptr_t &) { return !a.mapped_ptr; }
+ friend bool operator==(const std::nullptr_t &, const StringHashTableLookupResult & b) { return !b.mapped_ptr; }
+ friend bool operator!=(const StringHashTableLookupResult & a, const nullptr_t &) { return a.mapped_ptr; }
+ friend bool operator!=(const std::nullptr_t &, const StringHashTableLookupResult & b) { return b.mapped_ptr; }
+};
+
+template <typename SubMaps>
+class StringHashTable //: private boost::noncopyable
+{
+protected:
+ static constexpr size_t NUM_MAPS = 5;
+ // Map for storing empty string
+ using T0 = typename SubMaps::T0;
+
+ // Short strings are stored as numbers
+ using T1 = typename SubMaps::T1;
+ using T2 = typename SubMaps::T2;
+ using T3 = typename SubMaps::T3;
+
+ // Long strings are stored as StringRef along with saved hash
+ using Ts = typename SubMaps::Ts;
+ using Self = StringHashTable;
+
+ template <typename, typename, size_t>
+ friend class TwoLevelStringHashTable;
+
+ T0 m0;
+ T1 m1;
+ T2 m2;
+ T3 m3;
+ Ts ms;
+
+public:
+ using Key = StringRef;
+ using key_type = Key;
+ using mapped_type = typename Ts::mapped_type;
+ using value_type = typename Ts::value_type;
+ using cell_type = typename Ts::cell_type;
+
+ using LookupResult = StringHashTableLookupResult<typename cell_type::mapped_type>;
+ using ConstLookupResult = StringHashTableLookupResult<const typename cell_type::mapped_type>;
+
+ StringHashTable() = default;
+
+ StringHashTable(size_t reserve_for_num_elements)
+ : m1{reserve_for_num_elements / 4}
+ , m2{reserve_for_num_elements / 4}
+ , m3{reserve_for_num_elements / 4}
+ , ms{reserve_for_num_elements / 4}
+ {
+ }
+
+ StringHashTable(StringHashTable && rhs)
+ : m1(std::move(rhs.m1))
+ , m2(std::move(rhs.m2))
+ , m3(std::move(rhs.m3))
+ , ms(std::move(rhs.ms))
+ {
+ }
+
+ ~StringHashTable() = default;
+
+public:
+ // Dispatch is written in a way that maximizes the performance:
+ // 1. Always memcpy 8 times bytes
+ // 2. Use switch case extension to generate fast dispatching table
+ // 3. Funcs are named callables that can be force_inlined
+ //
+ // NOTE: It relies on Little Endianness
+ //
+ // NOTE: It requires padded to 8 bytes keys (IOW you cannot pass
+ // std::string here, but you can pass i.e. ColumnString::getDataAt()),
+ // since it copies 8 bytes at a time.
+ template <typename Self, typename KeyHolder, typename Func>
+ static auto ALWAYS_INLINE dispatch(Self & self, KeyHolder && key_holder, Func && func)
+ {
+ StringHashTableHash hash;
+ const StringRef & x = keyHolderGetKey(key_holder);
+ const size_t sz = x.size;
+ if (sz == 0)
+ {
+ keyHolderDiscardKey(key_holder);
+ return func(self.m0, VoidKey{}, 0);
+ }
+
+ if (x.data[sz - 1] == 0)
+ {
+ // Strings with trailing zeros are not representable as fixed-size
+ // string keys. Put them to the generic table.
+ return func(self.ms, std::forward<KeyHolder>(key_holder), hash(x));
+ }
+
+ const char * p = x.data;
+ // pending bits that needs to be shifted out
+ const char s = (-sz & 7) * 8;
+ union
+ {
+ StringKey8 k8;
+ StringKey16 k16;
+ StringKey24 k24;
+ UInt64 n[3];
+ };
+ switch ((sz - 1) >> 3)
+ {
+ case 0: // 1..8 bytes
+ {
+ // first half page
+ if ((reinterpret_cast<uintptr_t>(p) & 2048) == 0)
+ {
+ memcpy(&n[0], p, 8);
+ n[0] &= -1ul >> s;
+ }
+ else
+ {
+ const char * lp = x.data + x.size - 8;
+ memcpy(&n[0], lp, 8);
+ n[0] >>= s;
+ }
+ keyHolderDiscardKey(key_holder);
+ return func(self.m1, k8, hash(k8));
+ }
+ case 1: // 9..16 bytes
+ {
+ memcpy(&n[0], p, 8);
+ const char * lp = x.data + x.size - 8;
+ memcpy(&n[1], lp, 8);
+ n[1] >>= s;
+ keyHolderDiscardKey(key_holder);
+ return func(self.m2, k16, hash(k16));
+ }
+ case 2: // 17..24 bytes
+ {
+ memcpy(&n[0], p, 16);
+ const char * lp = x.data + x.size - 8;
+ memcpy(&n[2], lp, 8);
+ n[2] >>= s;
+ keyHolderDiscardKey(key_holder);
+ return func(self.m3, k24, hash(k24));
+ }
+ default: // >= 25 bytes
+ {
+ return func(self.ms, std::forward<KeyHolder>(key_holder), hash(x));
+ }
+ }
+ }
+
+ struct EmplaceCallable
+ {
+ LookupResult & mapped;
+ bool & inserted;
+
+ EmplaceCallable(LookupResult & mapped_, bool & inserted_)
+ : mapped(mapped_), inserted(inserted_) {}
+
+ template <typename Map, typename KeyHolder>
+ void ALWAYS_INLINE operator()(Map & map, KeyHolder && key_holder, size_t hash)
+ {
+ typename Map::LookupResult result;
+ map.emplace(key_holder, result, inserted, hash);
+ mapped = &result->getMapped();
+ }
+ };
+
+ template <typename KeyHolder>
+ void ALWAYS_INLINE emplace(KeyHolder && key_holder, LookupResult & it, bool & inserted)
+ {
+ this->dispatch(*this, key_holder, EmplaceCallable(it, inserted));
+ }
+
+ struct FindCallable
+ {
+ // find() doesn't need any key memory management, so we don't work with
+ // any key holders here, only with normal keys. The key type is still
+ // different for every subtable, this is why it is a template parameter.
+ template <typename Submap, typename SubmapKey>
+ auto ALWAYS_INLINE operator()(Submap & map, const SubmapKey & key, size_t hash)
+ {
+ auto it = map.find(key, hash);
+ if (!it)
+ return decltype(&it->getMapped()){};
+ else
+ return &it->getMapped();
+ }
+ };
+
+ LookupResult ALWAYS_INLINE find(const Key & x)
+ {
+ return dispatch(*this, x, FindCallable{});
+ }
+
+ ConstLookupResult ALWAYS_INLINE find(const Key & x) const
+ {
+ return dispatch(*this, x, FindCallable{});
+ }
+
+ bool ALWAYS_INLINE has(const Key & x, size_t = 0) const
+ {
+ return dispatch(*this, x, FindCallable{}) != nullptr;
+ }
+#if 0
+ void write(DB::WriteBuffer & wb) const
+ {
+ m0.write(wb);
+ m1.write(wb);
+ m2.write(wb);
+ m3.write(wb);
+ ms.write(wb);
+ }
+
+ void writeText(DB::WriteBuffer & wb) const
+ {
+ m0.writeText(wb);
+ DB::writeChar(',', wb);
+ m1.writeText(wb);
+ DB::writeChar(',', wb);
+ m2.writeText(wb);
+ DB::writeChar(',', wb);
+ m3.writeText(wb);
+ DB::writeChar(',', wb);
+ ms.writeText(wb);
+ }
+
+ void read(DB::ReadBuffer & rb)
+ {
+ m0.read(rb);
+ m1.read(rb);
+ m2.read(rb);
+ m3.read(rb);
+ ms.read(rb);
+ }
+
+ void readText(DB::ReadBuffer & rb)
+ {
+ m0.readText(rb);
+ DB::assertChar(',', rb);
+ m1.readText(rb);
+ DB::assertChar(',', rb);
+ m2.readText(rb);
+ DB::assertChar(',', rb);
+ m3.readText(rb);
+ DB::assertChar(',', rb);
+ ms.readText(rb);
+ }
+#endif
+ size_t size() const { return m0.size() + m1.size() + m2.size() + m3.size() + ms.size(); }
+
+ bool empty() const { return m0.empty() && m1.empty() && m2.empty() && m3.empty() && ms.empty(); }
+
+ size_t getBufferSizeInBytes() const
+ {
+ return m0.getBufferSizeInBytes() + m1.getBufferSizeInBytes() + m2.getBufferSizeInBytes() + m3.getBufferSizeInBytes()
+ + ms.getBufferSizeInBytes();
+ }
+
+ void clearAndShrink()
+ {
+ m1.clearHasZero();
+ m1.clearAndShrink();
+ m2.clearAndShrink();
+ m3.clearAndShrink();
+ ms.clearAndShrink();
+ }
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/PODArray.cpp b/ydb/library/arrow_clickhouse/Common/PODArray.cpp
new file mode 100644
index 0000000000..0840d8b7a0
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/PODArray.cpp
@@ -0,0 +1,23 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#include <Common/PODArray.h>
+
+namespace CH
+{
+
+/// Used for left padding of PODArray when empty
+const char empty_pod_array[empty_pod_array_size]{};
+
+template class PODArray<UInt8, 4096, Allocator<false>, 15, 16>;
+template class PODArray<UInt16, 4096, Allocator<false>, 15, 16>;
+template class PODArray<UInt32, 4096, Allocator<false>, 15, 16>;
+template class PODArray<UInt64, 4096, Allocator<false>, 15, 16>;
+
+template class PODArray<Int8, 4096, Allocator<false>, 15, 16>;
+template class PODArray<Int16, 4096, Allocator<false>, 15, 16>;
+template class PODArray<Int32, 4096, Allocator<false>, 15, 16>;
+template class PODArray<Int64, 4096, Allocator<false>, 15, 16>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/PODArray.h b/ydb/library/arrow_clickhouse/Common/PODArray.h
new file mode 100644
index 0000000000..45924b0222
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/PODArray.h
@@ -0,0 +1,803 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <string.h>
+#include <cstddef>
+#include <cassert>
+#include <algorithm>
+#include <memory>
+
+//#include <boost/noncopyable.hpp>
+
+#include <common/strong_typedef.h>
+
+#include <Common/Allocator.h>
+#include <Common/memcpySmall.h>
+
+#ifndef NDEBUG
+ #include <sys/mman.h>
+#endif
+
+#include <Common/PODArray_fwd.h>
+
+namespace CH
+{
+
+/** Whether we can use memcpy instead of a loop with assignment to T from U.
+ * It is Ok if types are the same. And if types are integral and of the same size,
+ * example: char, signed char, unsigned char.
+ * It's not Ok for int and float.
+ * Don't forget to apply std::decay when using this constexpr.
+ */
+template <typename T, typename U>
+constexpr bool memcpy_can_be_used_for_assignment = std::is_same_v<T, U>
+ || (std::is_integral_v<T> && std::is_integral_v<U> && sizeof(T) == sizeof(U));
+
+
+/** A dynamic array for POD types.
+ * Designed for a small number of large arrays (rather than a lot of small ones).
+ * To be more precise - for use in ColumnVector.
+ * It differs from std::vector in that it does not initialize the elements.
+ *
+ * Made noncopyable so that there are no accidental copies. You can copy the data using `assign` method.
+ *
+ * Only part of the std::vector interface is supported.
+ *
+ * The default constructor creates an empty object that does not allocate memory.
+ * Then the memory is allocated at least initial_bytes bytes.
+ *
+ * If you insert elements with push_back, without making a `reserve`, then PODArray is about 2.5 times faster than std::vector.
+ *
+ * The template parameter `pad_right` - always allocate at the end of the array as many unused bytes.
+ * Can be used to make optimistic reading, writing, copying with unaligned SIMD instructions.
+ *
+ * The template parameter `pad_left` - always allocate memory before 0th element of the array (rounded up to the whole number of elements)
+ * and zero initialize -1th element. It allows to use -1th element that will have value 0.
+ * This gives performance benefits when converting an array of offsets to array of sizes.
+ *
+ * Some methods using allocator have TAllocatorParams variadic arguments.
+ * These arguments will be passed to corresponding methods of TAllocator.
+ * Example: pointer to Arena, that is used for allocations.
+ *
+ * Why Allocator is not passed through constructor, as it is done in C++ standard library?
+ * Because sometimes we have many small objects, that share same allocator with same parameters,
+ * and we must avoid larger object size due to storing the same parameters in each object.
+ * This is required for states of aggregate functions.
+ *
+ * TODO Pass alignment to Allocator.
+ * TODO Allow greater alignment than alignof(T). Example: array of char aligned to page size.
+ */
+static constexpr size_t empty_pod_array_size = 1024;
+extern const char empty_pod_array[empty_pod_array_size];
+
+/** Base class that depend only on size of element, not on element itself.
+ * You can static_cast to this class if you want to insert some data regardless to the actual type T.
+ */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wnull-dereference"
+
+inline size_t roundUpToPowerOfTwoOrZero(size_t n)
+{
+ // if MSB is set, return n, to avoid return zero
+ if (unlikely(n >= 0x8000000000000000ULL))
+ return n;
+
+ --n;
+ n |= n >> 1;
+ n |= n >> 2;
+ n |= n >> 4;
+ n |= n >> 8;
+ n |= n >> 16;
+ n |= n >> 32;
+ ++n;
+
+ return n;
+}
+
+template <size_t ELEMENT_SIZE, size_t initial_bytes, typename TAllocator, size_t pad_right_, size_t pad_left_>
+class PODArrayBase : /*private boost::noncopyable,*/ private TAllocator /// empty base optimization
+{
+protected:
+ /// Round padding up to an whole number of elements to simplify arithmetic.
+ static constexpr size_t pad_right = integerRoundUp(pad_right_, ELEMENT_SIZE);
+ /// pad_left is also rounded up to 16 bytes to maintain alignment of allocated memory.
+ static constexpr size_t pad_left = integerRoundUp(integerRoundUp(pad_left_, ELEMENT_SIZE), 16);
+ /// Empty array will point to this static memory as padding and begin/end.
+ static constexpr char * null = const_cast<char *>(empty_pod_array) + pad_left;
+
+ static_assert(pad_left <= empty_pod_array_size && "Left Padding exceeds empty_pod_array_size. Is the element size too large?");
+
+ // If we are using allocator with inline memory, the minimal size of
+ // array must be in sync with the size of this memory.
+ static_assert(allocatorInitialBytes<TAllocator> == 0
+ || allocatorInitialBytes<TAllocator> == initial_bytes);
+
+ char * c_start = null; /// Does not include pad_left.
+ char * c_end = null;
+ char * c_end_of_storage = null; /// Does not include pad_right.
+
+ /// The amount of memory occupied by the num_elements of the elements.
+ static size_t byte_size(size_t num_elements)
+ {
+ size_t amount;
+ if (__builtin_mul_overflow(num_elements, ELEMENT_SIZE, &amount))
+ throw Exception("Amount of memory requested to allocate is more than allowed");
+ return amount;
+ }
+
+ /// Minimum amount of memory to allocate for num_elements, including padding.
+ static size_t minimum_memory_for_elements(size_t num_elements) { return byte_size(num_elements) + pad_right + pad_left; }
+
+ void alloc_for_num_elements(size_t num_elements)
+ {
+ alloc(minimum_memory_for_elements(num_elements));
+ }
+
+ template <typename ... TAllocatorParams>
+ void alloc(size_t bytes, TAllocatorParams &&... allocator_params)
+ {
+ char * allocated = reinterpret_cast<char *>(TAllocator::alloc(bytes, std::forward<TAllocatorParams>(allocator_params)...));
+
+ c_start = allocated + pad_left;
+ c_end = c_start;
+ c_end_of_storage = allocated + bytes - pad_right;
+
+ if (pad_left)
+ memset(c_start - ELEMENT_SIZE, 0, ELEMENT_SIZE);
+ }
+
+ void dealloc()
+ {
+ if (c_start == null)
+ return;
+
+ unprotect();
+
+ TAllocator::free(c_start - pad_left, allocated_bytes());
+ }
+
+ template <typename ... TAllocatorParams>
+ void realloc(size_t bytes, TAllocatorParams &&... allocator_params)
+ {
+ if (c_start == null)
+ {
+ alloc(bytes, std::forward<TAllocatorParams>(allocator_params)...);
+ return;
+ }
+
+ unprotect();
+
+ ptrdiff_t end_diff = c_end - c_start;
+
+ char * allocated = reinterpret_cast<char *>(
+ TAllocator::realloc(c_start - pad_left, allocated_bytes(), bytes, std::forward<TAllocatorParams>(allocator_params)...));
+
+ c_start = allocated + pad_left;
+ c_end = c_start + end_diff;
+ c_end_of_storage = allocated + bytes - pad_right;
+ }
+
+ bool isInitialized() const
+ {
+ return (c_start != null) && (c_end != null) && (c_end_of_storage != null);
+ }
+
+ bool isAllocatedFromStack() const
+ {
+ static constexpr size_t stack_threshold = TAllocator::getStackThreshold();
+ return (stack_threshold > 0) && (allocated_bytes() <= stack_threshold);
+ }
+
+ template <typename ... TAllocatorParams>
+ void reserveForNextSize(TAllocatorParams &&... allocator_params)
+ {
+ if (empty())
+ {
+ // The allocated memory should be multiplication of ELEMENT_SIZE to hold the element, otherwise,
+ // memory issue such as corruption could appear in edge case.
+ realloc(std::max(integerRoundUp(initial_bytes, ELEMENT_SIZE),
+ minimum_memory_for_elements(1)),
+ std::forward<TAllocatorParams>(allocator_params)...);
+ }
+ else
+ realloc(allocated_bytes() * 2, std::forward<TAllocatorParams>(allocator_params)...);
+ }
+
+#ifndef NDEBUG
+ /// Make memory region readonly with mprotect if it is large enough.
+ /// The operation is slow and performed only for debug builds.
+ void protectImpl(int prot)
+ {
+ static constexpr size_t PROTECT_PAGE_SIZE = 4096;
+
+ char * left_rounded_up = reinterpret_cast<char *>((reinterpret_cast<intptr_t>(c_start) - pad_left + PROTECT_PAGE_SIZE - 1) / PROTECT_PAGE_SIZE * PROTECT_PAGE_SIZE);
+ char * right_rounded_down = reinterpret_cast<char *>((reinterpret_cast<intptr_t>(c_end_of_storage) + pad_right) / PROTECT_PAGE_SIZE * PROTECT_PAGE_SIZE);
+
+ if (right_rounded_down > left_rounded_up)
+ {
+ size_t length = right_rounded_down - left_rounded_up;
+ if (0 != mprotect(left_rounded_up, length, prot))
+ throw Exception("Cannot mprotect memory region");
+ }
+ }
+
+ /// Restore memory protection in destructor or realloc for further reuse by allocator.
+ bool mprotected = false;
+#endif
+
+public:
+ bool empty() const { return c_end == c_start; }
+ size_t size() const { return (c_end - c_start) / ELEMENT_SIZE; }
+ size_t capacity() const { return (c_end_of_storage - c_start) / ELEMENT_SIZE; }
+
+ /// This method is safe to use only for information about memory usage.
+ size_t allocated_bytes() const { return c_end_of_storage - c_start + pad_right + pad_left; }
+
+ void clear() { c_end = c_start; }
+
+ template <typename ... TAllocatorParams>
+#if defined(__clang__)
+ ALWAYS_INLINE /// Better performance in clang build, worse performance in gcc build.
+#endif
+ void reserve(size_t n, TAllocatorParams &&... allocator_params)
+ {
+ if (n > capacity())
+ realloc(roundUpToPowerOfTwoOrZero(minimum_memory_for_elements(n)), std::forward<TAllocatorParams>(allocator_params)...);
+ }
+
+ template <typename ... TAllocatorParams>
+ void reserve_exact(size_t n, TAllocatorParams &&... allocator_params)
+ {
+ if (n > capacity())
+ realloc(minimum_memory_for_elements(n), std::forward<TAllocatorParams>(allocator_params)...);
+ }
+
+ template <typename ... TAllocatorParams>
+ void resize(size_t n, TAllocatorParams &&... allocator_params)
+ {
+ reserve(n, std::forward<TAllocatorParams>(allocator_params)...);
+ resize_assume_reserved(n);
+ }
+
+ template <typename ... TAllocatorParams>
+ void resize_exact(size_t n, TAllocatorParams &&... allocator_params)
+ {
+ reserve_exact(n, std::forward<TAllocatorParams>(allocator_params)...);
+ resize_assume_reserved(n);
+ }
+
+ void resize_assume_reserved(const size_t n)
+ {
+ c_end = c_start + byte_size(n);
+ }
+
+ const char * raw_data() const
+ {
+ return c_start;
+ }
+
+ template <typename ... TAllocatorParams>
+ void push_back_raw(const void * ptr, TAllocatorParams &&... allocator_params)
+ {
+ size_t required_capacity = size() + ELEMENT_SIZE;
+ if (unlikely(required_capacity > capacity()))
+ reserve(required_capacity, std::forward<TAllocatorParams>(allocator_params)...);
+
+ memcpy(c_end, ptr, ELEMENT_SIZE);
+ c_end += ELEMENT_SIZE;
+ }
+
+ void protect()
+ {
+#ifndef NDEBUG
+ protectImpl(PROT_READ);
+ mprotected = true;
+#endif
+ }
+
+ void unprotect()
+ {
+#ifndef NDEBUG
+ if (mprotected)
+ protectImpl(PROT_WRITE);
+ mprotected = false;
+#endif
+ }
+
+ template <typename It1, typename It2>
+ inline void assertNotIntersects(It1 from_begin [[maybe_unused]], It2 from_end [[maybe_unused]])
+ {
+#if !defined(NDEBUG)
+ const char * ptr_begin = reinterpret_cast<const char *>(&*from_begin);
+ const char * ptr_end = reinterpret_cast<const char *>(&*from_end);
+
+ /// Also it's safe if the range is empty.
+ assert(!((ptr_begin >= c_start && ptr_begin < c_end) || (ptr_end > c_start && ptr_end <= c_end)) || (ptr_begin == ptr_end));
+#endif
+ }
+
+ ~PODArrayBase()
+ {
+ dealloc();
+ }
+};
+
+template <typename T, size_t initial_bytes, typename TAllocator, size_t pad_right_, size_t pad_left_>
+class PODArray : public PODArrayBase<sizeof(T), initial_bytes, TAllocator, pad_right_, pad_left_>
+{
+protected:
+ using Base = PODArrayBase<sizeof(T), initial_bytes, TAllocator, pad_right_, pad_left_>;
+
+ T * t_start() { return reinterpret_cast<T *>(this->c_start); }
+ T * t_end() { return reinterpret_cast<T *>(this->c_end); }
+
+ const T * t_start() const { return reinterpret_cast<const T *>(this->c_start); }
+ const T * t_end() const { return reinterpret_cast<const T *>(this->c_end); }
+
+public:
+ using value_type = T;
+
+ /// We cannot use boost::iterator_adaptor, because it defeats loop vectorization,
+ /// see https://github.com/ClickHouse/ClickHouse/pull/9442
+
+ using iterator = T *;
+ using const_iterator = const T *;
+
+
+ PODArray() = default;
+
+ PODArray(size_t n)
+ {
+ this->alloc_for_num_elements(n);
+ this->c_end += this->byte_size(n);
+ }
+
+ PODArray(size_t n, const T & x)
+ {
+ this->alloc_for_num_elements(n);
+ assign(n, x);
+ }
+
+ PODArray(const_iterator from_begin, const_iterator from_end)
+ {
+ this->alloc_for_num_elements(from_end - from_begin);
+ insert(from_begin, from_end);
+ }
+
+ PODArray(std::initializer_list<T> il)
+ {
+ this->reserve(std::size(il));
+
+ for (const auto & x : il)
+ {
+ this->push_back(x);
+ }
+ }
+
+ PODArray(PODArray && other)
+ {
+ this->swap(other);
+ }
+
+ PODArray & operator=(PODArray && other)
+ {
+ this->swap(other);
+ return *this;
+ }
+
+ T * data() { return t_start(); }
+ const T * data() const { return t_start(); }
+
+ /// The index is signed to access -1th element without pointer overflow.
+ T & operator[] (ssize_t n)
+ {
+ /// <= size, because taking address of one element past memory range is Ok in C++ (expression like &arr[arr.size()] is perfectly valid).
+ assert((n >= (static_cast<ssize_t>(pad_left_) ? -1 : 0)) && (n <= static_cast<ssize_t>(this->size())));
+ return t_start()[n];
+ }
+
+ const T & operator[] (ssize_t n) const
+ {
+ assert((n >= (static_cast<ssize_t>(pad_left_) ? -1 : 0)) && (n <= static_cast<ssize_t>(this->size())));
+ return t_start()[n];
+ }
+
+ T & front() { return t_start()[0]; }
+ T & back() { return t_end()[-1]; }
+ const T & front() const { return t_start()[0]; }
+ const T & back() const { return t_end()[-1]; }
+
+ iterator begin() { return t_start(); }
+ iterator end() { return t_end(); }
+ const_iterator begin() const { return t_start(); }
+ const_iterator end() const { return t_end(); }
+ const_iterator cbegin() const { return t_start(); }
+ const_iterator cend() const { return t_end(); }
+
+ /// Same as resize, but zeroes new elements.
+ void resize_fill(size_t n)
+ {
+ size_t old_size = this->size();
+ if (n > old_size)
+ {
+ this->reserve(n);
+ memset(this->c_end, 0, this->byte_size(n - old_size));
+ }
+ this->c_end = this->c_start + this->byte_size(n);
+ }
+
+ void resize_fill(size_t n, const T & value)
+ {
+ size_t old_size = this->size();
+ if (n > old_size)
+ {
+ this->reserve(n);
+ std::fill(t_end(), t_end() + n - old_size, value);
+ }
+ this->c_end = this->c_start + this->byte_size(n);
+ }
+
+ template <typename U, typename ... TAllocatorParams>
+ void push_back(U && x, TAllocatorParams &&... allocator_params)
+ {
+ if (unlikely(this->c_end + sizeof(T) > this->c_end_of_storage))
+ this->reserveForNextSize(std::forward<TAllocatorParams>(allocator_params)...);
+
+ new (t_end()) T(std::forward<U>(x));
+ this->c_end += this->byte_size(1);
+ }
+
+ /** This method doesn't allow to pass parameters for Allocator,
+ * and it couldn't be used if Allocator requires custom parameters.
+ */
+ template <typename... Args>
+ void emplace_back(Args &&... args)
+ {
+ if (unlikely(this->c_end + sizeof(T) > this->c_end_of_storage))
+ this->reserveForNextSize();
+
+ new (t_end()) T(std::forward<Args>(args)...);
+ this->c_end += this->byte_size(1);
+ }
+
+ void pop_back()
+ {
+ this->c_end -= this->byte_size(1);
+ }
+
+ /// Do not insert into the array a piece of itself. Because with the resize, the iterators on themselves can be invalidated.
+ template <typename It1, typename It2, typename ... TAllocatorParams>
+ void insertPrepare(It1 from_begin, It2 from_end, TAllocatorParams &&... allocator_params)
+ {
+ this->assertNotIntersects(from_begin, from_end);
+ size_t required_capacity = this->size() + (from_end - from_begin);
+ if (required_capacity > this->capacity())
+ this->reserve(roundUpToPowerOfTwoOrZero(required_capacity), std::forward<TAllocatorParams>(allocator_params)...);
+ }
+
+ /// Do not insert into the array a piece of itself. Because with the resize, the iterators on themselves can be invalidated.
+ template <typename It1, typename It2, typename ... TAllocatorParams>
+ void insert(It1 from_begin, It2 from_end, TAllocatorParams &&... allocator_params)
+ {
+ insertPrepare(from_begin, from_end, std::forward<TAllocatorParams>(allocator_params)...);
+ insert_assume_reserved(from_begin, from_end);
+ }
+
+ /// In contrast to 'insert' this method is Ok even for inserting from itself.
+ /// Because we obtain iterators after reserving memory.
+ template <typename Container, typename ... TAllocatorParams>
+ void insertByOffsets(Container && rhs, size_t from_begin, size_t from_end, TAllocatorParams &&... allocator_params)
+ {
+ static_assert(memcpy_can_be_used_for_assignment<std::decay_t<T>, std::decay_t<decltype(rhs.front())>>);
+
+ assert(from_end >= from_begin);
+ assert(from_end <= rhs.size());
+
+ size_t required_capacity = this->size() + (from_end - from_begin);
+ if (required_capacity > this->capacity())
+ this->reserve(roundUpToPowerOfTwoOrZero(required_capacity), std::forward<TAllocatorParams>(allocator_params)...);
+
+ size_t bytes_to_copy = this->byte_size(from_end - from_begin);
+ if (bytes_to_copy)
+ {
+ memcpy(this->c_end, reinterpret_cast<const void *>(rhs.begin() + from_begin), bytes_to_copy);
+ this->c_end += bytes_to_copy;
+ }
+ }
+
+ /// Works under assumption, that it's possible to read up to 15 excessive bytes after `from_end` and this PODArray is padded.
+ template <typename It1, typename It2, typename ... TAllocatorParams>
+ void insertSmallAllowReadWriteOverflow15(It1 from_begin, It2 from_end, TAllocatorParams &&... allocator_params)
+ {
+ static_assert(pad_right_ >= 15);
+ static_assert(sizeof(T) == sizeof(*from_begin));
+ insertPrepare(from_begin, from_end, std::forward<TAllocatorParams>(allocator_params)...);
+ size_t bytes_to_copy = this->byte_size(from_end - from_begin);
+ memcpySmallAllowReadWriteOverflow15(this->c_end, reinterpret_cast<const void *>(&*from_begin), bytes_to_copy);
+ this->c_end += bytes_to_copy;
+ }
+
+ /// Do not insert into the array a piece of itself. Because with the resize, the iterators on themselves can be invalidated.
+ template <typename It1, typename It2>
+ void insert(iterator it, It1 from_begin, It2 from_end)
+ {
+ static_assert(memcpy_can_be_used_for_assignment<std::decay_t<T>, std::decay_t<decltype(*from_begin)>>);
+
+ size_t bytes_to_copy = this->byte_size(from_end - from_begin);
+ if (!bytes_to_copy)
+ return;
+
+ size_t bytes_to_move = this->byte_size(end() - it);
+
+ insertPrepare(from_begin, from_end);
+
+ if (unlikely(bytes_to_move))
+ memmove(this->c_end + bytes_to_copy - bytes_to_move, this->c_end - bytes_to_move, bytes_to_move);
+
+ memcpy(this->c_end - bytes_to_move, reinterpret_cast<const void *>(&*from_begin), bytes_to_copy);
+
+ this->c_end += bytes_to_copy;
+ }
+
+ template <typename ... TAllocatorParams>
+ void insertFromItself(iterator from_begin, iterator from_end, TAllocatorParams && ... allocator_params)
+ {
+ static_assert(memcpy_can_be_used_for_assignment<std::decay_t<T>, std::decay_t<decltype(*from_begin)>>);
+
+ /// Convert iterators to indexes because reserve can invalidate iterators
+ size_t start_index = from_begin - begin();
+ size_t end_index = from_end - begin();
+ size_t copy_size = end_index - start_index;
+
+ assert(start_index <= end_index);
+
+ size_t required_capacity = this->size() + copy_size;
+ if (required_capacity > this->capacity())
+ this->reserve(roundUpToPowerOfTwoOrZero(required_capacity), std::forward<TAllocatorParams>(allocator_params)...);
+
+ size_t bytes_to_copy = this->byte_size(copy_size);
+ if (bytes_to_copy)
+ {
+ auto begin = this->c_start + this->byte_size(start_index);
+ memcpy(this->c_end, reinterpret_cast<const void *>(&*begin), bytes_to_copy);
+ this->c_end += bytes_to_copy;
+ }
+ }
+
+ template <typename It1, typename It2>
+ void insert_assume_reserved(It1 from_begin, It2 from_end)
+ {
+ static_assert(memcpy_can_be_used_for_assignment<std::decay_t<T>, std::decay_t<decltype(*from_begin)>>);
+ this->assertNotIntersects(from_begin, from_end);
+
+ size_t bytes_to_copy = this->byte_size(from_end - from_begin);
+ if (bytes_to_copy)
+ {
+ memcpy(this->c_end, reinterpret_cast<const void *>(&*from_begin), bytes_to_copy);
+ this->c_end += bytes_to_copy;
+ }
+ }
+
+ template <typename... TAllocatorParams>
+ void swap(PODArray & rhs, TAllocatorParams &&... allocator_params)
+ {
+#ifndef NDEBUG
+ this->unprotect();
+ rhs.unprotect();
+#endif
+
+ /// Swap two PODArray objects, arr1 and arr2, that satisfy the following conditions:
+ /// - The elements of arr1 are stored on stack.
+ /// - The elements of arr2 are stored on heap.
+ auto swap_stack_heap = [&](PODArray & arr1, PODArray & arr2)
+ {
+ size_t stack_size = arr1.size();
+ size_t stack_allocated = arr1.allocated_bytes();
+
+ size_t heap_size = arr2.size();
+ size_t heap_allocated = arr2.allocated_bytes();
+
+ /// Keep track of the stack content we have to copy.
+ char * stack_c_start = arr1.c_start;
+
+ /// arr1 takes ownership of the heap memory of arr2.
+ arr1.c_start = arr2.c_start;
+ arr1.c_end_of_storage = arr1.c_start + heap_allocated - arr2.pad_right - arr2.pad_left;
+ arr1.c_end = arr1.c_start + this->byte_size(heap_size);
+
+ /// Allocate stack space for arr2.
+ arr2.alloc(stack_allocated, std::forward<TAllocatorParams>(allocator_params)...);
+ /// Copy the stack content.
+ memcpy(arr2.c_start, stack_c_start, this->byte_size(stack_size));
+ arr2.c_end = arr2.c_start + this->byte_size(stack_size);
+ };
+
+ auto do_move = [&](PODArray & src, PODArray & dest)
+ {
+ if (src.isAllocatedFromStack())
+ {
+ dest.dealloc();
+ dest.alloc(src.allocated_bytes(), std::forward<TAllocatorParams>(allocator_params)...);
+ memcpy(dest.c_start, src.c_start, this->byte_size(src.size()));
+ dest.c_end = dest.c_start + this->byte_size(src.size());
+
+ src.c_start = Base::null;
+ src.c_end = Base::null;
+ src.c_end_of_storage = Base::null;
+ }
+ else
+ {
+ std::swap(dest.c_start, src.c_start);
+ std::swap(dest.c_end, src.c_end);
+ std::swap(dest.c_end_of_storage, src.c_end_of_storage);
+ }
+ };
+
+ if (!this->isInitialized() && !rhs.isInitialized())
+ {
+ return;
+ }
+ else if (!this->isInitialized() && rhs.isInitialized())
+ {
+ do_move(rhs, *this);
+ return;
+ }
+ else if (this->isInitialized() && !rhs.isInitialized())
+ {
+ do_move(*this, rhs);
+ return;
+ }
+
+ if (this->isAllocatedFromStack() && rhs.isAllocatedFromStack())
+ {
+ size_t min_size = std::min(this->size(), rhs.size());
+ size_t max_size = std::max(this->size(), rhs.size());
+
+ for (size_t i = 0; i < min_size; ++i)
+ std::swap(this->operator[](i), rhs[i]);
+
+ if (this->size() == max_size)
+ {
+ for (size_t i = min_size; i < max_size; ++i)
+ rhs[i] = this->operator[](i);
+ }
+ else
+ {
+ for (size_t i = min_size; i < max_size; ++i)
+ this->operator[](i) = rhs[i];
+ }
+
+ size_t lhs_size = this->size();
+ size_t lhs_allocated = this->allocated_bytes();
+
+ size_t rhs_size = rhs.size();
+ size_t rhs_allocated = rhs.allocated_bytes();
+
+ this->c_end_of_storage = this->c_start + rhs_allocated - Base::pad_right - Base::pad_left;
+ rhs.c_end_of_storage = rhs.c_start + lhs_allocated - Base::pad_right - Base::pad_left;
+
+ this->c_end = this->c_start + this->byte_size(rhs_size);
+ rhs.c_end = rhs.c_start + this->byte_size(lhs_size);
+ }
+ else if (this->isAllocatedFromStack() && !rhs.isAllocatedFromStack())
+ {
+ swap_stack_heap(*this, rhs);
+ }
+ else if (!this->isAllocatedFromStack() && rhs.isAllocatedFromStack())
+ {
+ swap_stack_heap(rhs, *this);
+ }
+ else
+ {
+ std::swap(this->c_start, rhs.c_start);
+ std::swap(this->c_end, rhs.c_end);
+ std::swap(this->c_end_of_storage, rhs.c_end_of_storage);
+ }
+ }
+
+ template <typename... TAllocatorParams>
+ void assign(size_t n, const T & x, TAllocatorParams &&... allocator_params)
+ {
+ this->resize_exact(n, std::forward<TAllocatorParams>(allocator_params)...);
+ std::fill(begin(), end(), x);
+ }
+
+ template <typename It1, typename It2, typename... TAllocatorParams>
+ void assign(It1 from_begin, It2 from_end, TAllocatorParams &&... allocator_params)
+ {
+ static_assert(memcpy_can_be_used_for_assignment<std::decay_t<T>, std::decay_t<decltype(*from_begin)>>);
+ this->assertNotIntersects(from_begin, from_end);
+
+ size_t required_capacity = from_end - from_begin;
+ if (required_capacity > this->capacity())
+ this->reserve_exact(required_capacity, std::forward<TAllocatorParams>(allocator_params)...);
+
+ size_t bytes_to_copy = this->byte_size(required_capacity);
+ if (bytes_to_copy)
+ {
+ memcpy(this->c_start, reinterpret_cast<const void *>(&*from_begin), bytes_to_copy);
+ this->c_end = this->c_start + bytes_to_copy;
+ }
+ }
+
+ // ISO C++ has strict ambiguity rules, thus we cannot apply TAllocatorParams here.
+ void assign(const PODArray & from)
+ {
+ assign(from.begin(), from.end());
+ }
+
+ void erase(const_iterator first, const_iterator last)
+ {
+ iterator first_no_const = const_cast<iterator>(first);
+ iterator last_no_const = const_cast<iterator>(last);
+
+ size_t items_to_move = end() - last;
+
+ while (items_to_move != 0)
+ {
+ *first_no_const = *last_no_const;
+
+ ++first_no_const;
+ ++last_no_const;
+
+ --items_to_move;
+ }
+
+ this->c_end = reinterpret_cast<char *>(first_no_const);
+ }
+
+ void erase(const_iterator pos)
+ {
+ this->erase(pos, pos + 1);
+ }
+
+ bool operator== (const PODArray & rhs) const
+ {
+ if (this->size() != rhs.size())
+ return false;
+
+ const_iterator lhs_it = begin();
+ const_iterator rhs_it = rhs.begin();
+
+ while (lhs_it != end())
+ {
+ if (*lhs_it != *rhs_it)
+ return false;
+
+ ++lhs_it;
+ ++rhs_it;
+ }
+
+ return true;
+ }
+
+ bool operator!= (const PODArray & rhs) const
+ {
+ return !operator==(rhs);
+ }
+};
+
+template <typename T, size_t initial_bytes, typename TAllocator, size_t pad_right_, size_t pad_left_>
+void swap(PODArray<T, initial_bytes, TAllocator, pad_right_, pad_left_> & lhs, PODArray<T, initial_bytes, TAllocator, pad_right_, pad_left_> & rhs)
+{
+ lhs.swap(rhs);
+}
+#pragma GCC diagnostic pop
+
+/// Prevent implicit template instantiation of PODArray for common numeric types
+
+extern template class PODArray<UInt8, 4096, Allocator<false>, 15, 16>;
+extern template class PODArray<UInt16, 4096, Allocator<false>, 15, 16>;
+extern template class PODArray<UInt32, 4096, Allocator<false>, 15, 16>;
+extern template class PODArray<UInt64, 4096, Allocator<false>, 15, 16>;
+
+extern template class PODArray<Int8, 4096, Allocator<false>, 15, 16>;
+extern template class PODArray<Int16, 4096, Allocator<false>, 15, 16>;
+extern template class PODArray<Int32, 4096, Allocator<false>, 15, 16>;
+extern template class PODArray<Int64, 4096, Allocator<false>, 15, 16>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/PODArray_fwd.h b/ydb/library/arrow_clickhouse/Common/PODArray_fwd.h
new file mode 100644
index 0000000000..8be2d0590a
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/PODArray_fwd.h
@@ -0,0 +1,40 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+/**
+ * This file contains some using-declarations that define various kinds of
+ * PODArray.
+ */
+
+#include <common/types.h>
+#include <Common/Allocator_fwd.h>
+
+namespace CH
+{
+
+inline constexpr size_t integerRoundUp(size_t value, size_t dividend)
+{
+ return ((value + dividend - 1) / dividend) * dividend;
+}
+
+template <typename T, size_t initial_bytes = 4096,
+ typename TAllocator = Allocator<false>, size_t pad_right_ = 0,
+ size_t pad_left_ = 0>
+class PODArray;
+
+/** For columns. Padding is enough to read and write xmm-register at the address of the last element. */
+template <typename T, size_t initial_bytes = 4096, typename TAllocator = Allocator<false>>
+using PaddedPODArray = PODArray<T, initial_bytes, TAllocator, 15, 16>;
+
+/** A helper for declaring PODArray that uses inline memory.
+ * The initial size is set to use all the inline bytes, since using less would
+ * only add some extra allocation calls.
+ */
+template <typename T, size_t inline_bytes,
+ size_t rounded_bytes = integerRoundUp(inline_bytes, sizeof(T))>
+using PODArrayWithStackMemory = PODArray<T, rounded_bytes,
+ AllocatorWithStackMemory<Allocator<false>, rounded_bytes, alignof(T)>>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/SipHash.h b/ydb/library/arrow_clickhouse/Common/SipHash.h
new file mode 100644
index 0000000000..ac9c21c7d9
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/SipHash.h
@@ -0,0 +1,219 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+/** SipHash is a fast cryptographic hash function for short strings.
+ * Taken from here: https://www.131002.net/siphash/
+ *
+ * This is SipHash 2-4 variant.
+ *
+ * Two changes are made:
+ * - returns also 128 bits, not only 64;
+ * - done streaming (can be calculated in parts).
+ *
+ * On short strings (URL, search phrases) more than 3 times faster than MD5 from OpenSSL.
+ * (~ 700 MB/sec, 15 million strings per second)
+ */
+
+#include <common/types.h>
+#include <common/unaligned.h>
+#include <string>
+#include <type_traits>
+#include <cstddef>
+
+namespace CH
+{
+
+#define ROTL(x, b) static_cast<UInt64>(((x) << (b)) | ((x) >> (64 - (b))))
+
+#define SIPROUND \
+ do \
+ { \
+ v0 += v1; v1 = ROTL(v1, 13); v1 ^= v0; v0 = ROTL(v0, 32); \
+ v2 += v3; v3 = ROTL(v3, 16); v3 ^= v2; \
+ v0 += v3; v3 = ROTL(v3, 21); v3 ^= v0; \
+ v2 += v1; v1 = ROTL(v1, 17); v1 ^= v2; v2 = ROTL(v2, 32); \
+ } while(0)
+
+
+class SipHash
+{
+private:
+ /// State.
+ UInt64 v0;
+ UInt64 v1;
+ UInt64 v2;
+ UInt64 v3;
+
+ /// How many bytes have been processed.
+ UInt64 cnt;
+
+ /// The current 8 bytes of input data.
+ union
+ {
+ UInt64 current_word;
+ UInt8 current_bytes[8];
+ };
+
+ ALWAYS_INLINE void finalize()
+ {
+ /// In the last free byte, we write the remainder of the division by 256.
+ current_bytes[7] = cnt;
+
+ v3 ^= current_word;
+ SIPROUND;
+ SIPROUND;
+ v0 ^= current_word;
+
+ v2 ^= 0xff;
+ SIPROUND;
+ SIPROUND;
+ SIPROUND;
+ SIPROUND;
+ }
+
+public:
+ /// Arguments - seed.
+ SipHash(UInt64 k0 = 0, UInt64 k1 = 0)
+ {
+ /// Initialize the state with some random bytes and seed.
+ v0 = 0x736f6d6570736575ULL ^ k0;
+ v1 = 0x646f72616e646f6dULL ^ k1;
+ v2 = 0x6c7967656e657261ULL ^ k0;
+ v3 = 0x7465646279746573ULL ^ k1;
+
+ cnt = 0;
+ current_word = 0;
+ }
+
+ void update(const char * data, UInt64 size)
+ {
+ const char * end = data + size;
+
+ /// We'll finish to process the remainder of the previous update, if any.
+ if (cnt & 7)
+ {
+ while (cnt & 7 && data < end)
+ {
+ current_bytes[cnt & 7] = *data;
+ ++data;
+ ++cnt;
+ }
+
+ /// If we still do not have enough bytes to an 8-byte word.
+ if (cnt & 7)
+ return;
+
+ v3 ^= current_word;
+ SIPROUND;
+ SIPROUND;
+ v0 ^= current_word;
+ }
+
+ cnt += end - data;
+
+ while (data + 8 <= end)
+ {
+ current_word = unalignedLoad<UInt64>(data);
+
+ v3 ^= current_word;
+ SIPROUND;
+ SIPROUND;
+ v0 ^= current_word;
+
+ data += 8;
+ }
+
+ /// Pad the remainder, which is missing up to an 8-byte word.
+ current_word = 0;
+ switch (end - data)
+ {
+ case 7: current_bytes[6] = data[6]; [[fallthrough]];
+ case 6: current_bytes[5] = data[5]; [[fallthrough]];
+ case 5: current_bytes[4] = data[4]; [[fallthrough]];
+ case 4: current_bytes[3] = data[3]; [[fallthrough]];
+ case 3: current_bytes[2] = data[2]; [[fallthrough]];
+ case 2: current_bytes[1] = data[1]; [[fallthrough]];
+ case 1: current_bytes[0] = data[0]; [[fallthrough]];
+ case 0: break;
+ }
+ }
+
+ template <typename T>
+ void update(const T & x)
+ {
+ update(reinterpret_cast<const char *>(&x), sizeof(x));
+ }
+
+ void update(const std::string & x)
+ {
+ update(x.data(), x.length());
+ }
+
+ /// Get the result in some form. This can only be done once!
+
+ void get128(char * out)
+ {
+ finalize();
+ unalignedStore<UInt64>(out, v0 ^ v1);
+ unalignedStore<UInt64>(out + 8, v2 ^ v3);
+ }
+
+ template <typename T>
+ ALWAYS_INLINE void get128(T & lo, T & hi)
+ {
+ static_assert(sizeof(T) == 8);
+ finalize();
+ lo = v0 ^ v1;
+ hi = v2 ^ v3;
+ }
+
+ template <typename T>
+ ALWAYS_INLINE void get128(T & dst)
+ {
+ static_assert(sizeof(T) == 16);
+ get128(reinterpret_cast<char *>(&dst));
+ }
+
+ UInt64 get64()
+ {
+ finalize();
+ return v0 ^ v1 ^ v2 ^ v3;
+ }
+};
+
+
+#undef ROTL
+#undef SIPROUND
+
+inline void sipHash128(const char * data, const size_t size, char * out)
+{
+ SipHash hash;
+ hash.update(data, size);
+ hash.get128(out);
+}
+
+inline UInt64 sipHash64(const char * data, const size_t size)
+{
+ SipHash hash;
+ hash.update(data, size);
+ return hash.get64();
+}
+
+template <typename T>
+UInt64 sipHash64(const T & x)
+{
+ SipHash hash;
+ hash.update(x);
+ return hash.get64();
+}
+
+inline UInt64 sipHash64(const std::string & s)
+{
+ return sipHash64(s.data(), s.size());
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/Common/memcpySmall.h b/ydb/library/arrow_clickhouse/Common/memcpySmall.h
new file mode 100644
index 0000000000..113342a4d7
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/Common/memcpySmall.h
@@ -0,0 +1,78 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <string.h>
+
+#ifdef __SSE2__
+#include <emmintrin.h>
+
+namespace CH
+{
+
+/** memcpy function could work suboptimal if all the following conditions are met:
+ * 1. Size of memory region is relatively small (approximately, under 50 bytes).
+ * 2. Size of memory region is not known at compile-time.
+ *
+ * In that case, memcpy works suboptimal by following reasons:
+ * 1. Function is not inlined.
+ * 2. Much time/instructions are spend to process "tails" of data.
+ *
+ * There are cases when function could be implemented in more optimal way, with help of some assumptions.
+ * One of that assumptions - ability to read and write some number of bytes after end of passed memory regions.
+ * Under that assumption, it is possible not to implement difficult code to process tails of data and do copy always by big chunks.
+ *
+ * This case is typical, for example, when many small pieces of data are gathered to single contiguous piece of memory in a loop.
+ * - because each next copy will overwrite excessive data after previous copy.
+ *
+ * Assumption that size of memory region is small enough allows us to not unroll the loop.
+ * This is slower, when size of memory is actually big.
+ *
+ * Use with caution.
+ */
+
+namespace detail
+{
+ inline void memcpySmallAllowReadWriteOverflow15Impl(char * __restrict dst, const char * __restrict src, ssize_t n)
+ {
+ while (n > 0)
+ {
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(dst),
+ _mm_loadu_si128(reinterpret_cast<const __m128i *>(src)));
+
+ dst += 16;
+ src += 16;
+ n -= 16;
+ }
+ }
+}
+
+/** Works under assumption, that it's possible to read up to 15 excessive bytes after end of 'src' region
+ * and to write any garbage into up to 15 bytes after end of 'dst' region.
+ */
+inline void memcpySmallAllowReadWriteOverflow15(void * __restrict dst, const void * __restrict src, size_t n)
+{
+ detail::memcpySmallAllowReadWriteOverflow15Impl(reinterpret_cast<char *>(dst), reinterpret_cast<const char *>(src), n);
+}
+
+/** NOTE There was also a function, that assumes, that you could read any bytes inside same memory page of src.
+ * This function was unused, and also it requires special handling for Valgrind and ASan.
+ */
+
+}
+
+#else /// Implementation for other platforms.
+
+namespace CH
+{
+
+inline void memcpySmallAllowReadWriteOverflow15(void * __restrict dst, const void * __restrict src, size_t n)
+{
+ memcpy(dst, src, n);
+}
+
+}
+
+#endif
diff --git a/ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.cpp b/ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.cpp
new file mode 100644
index 0000000000..b23b70eeb8
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.cpp
@@ -0,0 +1,127 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#include <DataStreams/AggregatingBlockInputStream.h>
+#include <DataStreams/OneBlockInputStream.h>
+
+namespace CH
+{
+
+/** Combines aggregation states together, turns them into blocks, and outputs streams.
+ * If the aggregation states are two-level, then it produces blocks strictly in order of 'bucket_num'.
+ * (This is important for distributed processing.)
+ * In doing so, it can handle different buckets in parallel, using up to `threads` threads.
+ */
+class MergingAndConvertingBlockInputStream : public IBlockInputStream
+{
+public:
+ /** The input is a set of non-empty sets of partially aggregated data,
+ * which are all either single-level, or are two-level.
+ */
+ MergingAndConvertingBlockInputStream(const Aggregator & aggregator_, ManyAggregatedDataVariants & data_, bool final_)
+ : aggregator(aggregator_), data(data_), final(final_), threads(1)
+ {
+ /// At least we need one arena in first data item per thread
+ if (!data.empty() && threads > data[0]->aggregates_pools.size())
+ {
+ Arenas & first_pool = data[0]->aggregates_pools;
+ for (size_t j = first_pool.size(); j < threads; j++)
+ first_pool.emplace_back(std::make_shared<Arena>());
+ }
+ }
+
+ String getName() const override { return "MergingAndConverting"; }
+
+ Header getHeader() const override { return aggregator.getHeader(final); }
+
+protected:
+ Block readImpl() override
+ {
+ if (data.empty())
+ return {};
+
+ if (current_bucket_num >= NUM_BUCKETS)
+ return {};
+
+ AggregatedDataVariantsPtr & first = data[0];
+
+ if (current_bucket_num == -1)
+ {
+ ++current_bucket_num;
+
+ if (first->type == AggregatedDataVariants::Type::without_key || aggregator.params.overflow_row)
+ {
+ aggregator.mergeWithoutKeyDataImpl(data);
+ return aggregator.prepareBlockAndFillWithoutKey(
+ *first, final, first->type != AggregatedDataVariants::Type::without_key);
+ }
+ }
+
+ {
+ if (current_bucket_num > 0)
+ return {};
+
+ if (first->type == AggregatedDataVariants::Type::without_key)
+ return {};
+
+ ++current_bucket_num;
+
+ #define M(NAME) \
+ else if (first->type == AggregatedDataVariants::Type::NAME) \
+ aggregator.mergeSingleLevelDataImpl<decltype(first->NAME)::element_type>(data);
+ if (false) {} // NOLINT
+ APPLY_FOR_AGGREGATED_VARIANTS(M)
+ #undef M
+ else
+ throw Exception("Unknown aggregated data variant.");
+
+ return aggregator.prepareBlockAndFillSingleLevel(*first, final);
+ }
+ }
+
+private:
+ const Aggregator & aggregator;
+ ManyAggregatedDataVariants data;
+ bool final;
+ size_t threads;
+
+ Int32 current_bucket_num = -1;
+ static constexpr Int32 NUM_BUCKETS = 256;
+};
+
+static std::unique_ptr<IBlockInputStream> mergeAndConvertToBlocks(Aggregator & aggregator,
+ ManyAggregatedDataVariants & data_variants,
+ bool final)
+{
+ ManyAggregatedDataVariants non_empty_data = aggregator.prepareVariantsToMerge(data_variants);
+ if (non_empty_data.empty())
+ return std::make_unique<OneBlockInputStream>(blockFromHeader(aggregator.getHeader(final)));
+ return std::make_unique<MergingAndConvertingBlockInputStream>(aggregator, non_empty_data, final);
+}
+
+Header AggregatingBlockInputStream::getHeader() const
+{
+ return aggregator.getHeader(final);
+}
+
+Block AggregatingBlockInputStream::readImpl()
+{
+ if (!executed)
+ {
+ executed = true;
+ AggregatedDataVariantsPtr data_variants = std::make_shared<AggregatedDataVariants>();
+
+ aggregator.execute(children.back(), *data_variants);
+
+ ManyAggregatedDataVariants many_data { data_variants };
+ impl = mergeAndConvertToBlocks(aggregator, many_data, final);
+ }
+
+ if (isCancelledOrThrowIfKilled() || !impl)
+ return {};
+
+ return impl->read();
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.h b/ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.h
new file mode 100644
index 0000000000..e127c0a7b5
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.h
@@ -0,0 +1,49 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include "Aggregator.h"
+#include <DataStreams/IBlockStream_fwd.h>
+#include <DataStreams/IBlockInputStream.h>
+
+namespace CH
+{
+
+/** Aggregates the stream of blocks using the specified key columns and aggregate functions.
+ * Columns with aggregate functions adds to the end of the block.
+ * If final = false, the aggregate functions are not finalized, that is, they are not replaced by their value, but contain an intermediate state of calculations.
+ * This is necessary so that aggregation can continue (for example, by combining streams of partially aggregated data).
+ */
+class AggregatingBlockInputStream : public IBlockInputStream
+{
+public:
+ /** keys are taken from the GROUP BY part of the query
+ * Aggregate functions are searched everywhere in the expression.
+ * Columns corresponding to keys and arguments of aggregate functions must already be computed.
+ */
+ AggregatingBlockInputStream(const BlockInputStreamPtr & input, const Aggregator::Params & params_, bool final_)
+ : params(params_), aggregator(params), final(final_)
+ {
+ children.push_back(input);
+ }
+
+ String getName() const override { return "Aggregating"; }
+ Header getHeader() const override;
+
+protected:
+ Block readImpl() override;
+
+ Aggregator::Params params;
+ Aggregator aggregator;
+ bool final;
+
+ bool executed = false;
+
+ /** From here we will get the completed blocks after the aggregation. */
+ std::unique_ptr<IBlockInputStream> impl;
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/DataStreams/CMakeLists.txt b/ydb/library/arrow_clickhouse/DataStreams/CMakeLists.txt
new file mode 100644
index 0000000000..a150b18b74
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/CMakeLists.txt
@@ -0,0 +1,24 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(library-arrow_clickhouse-DataStreams)
+target_include_directories(library-arrow_clickhouse-DataStreams PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/base
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
+)
+target_link_libraries(library-arrow_clickhouse-DataStreams PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ libs-apache-arrow
+)
+target_sources(library-arrow_clickhouse-DataStreams PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/DataStreams/AggregatingBlockInputStream.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.cpp
+)
diff --git a/ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.cpp b/ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.cpp
new file mode 100644
index 0000000000..619255403d
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.cpp
@@ -0,0 +1,90 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#include <DataStreams/IBlockInputStream.h>
+
+namespace CH
+{
+
+
+/// It's safe to access children without mutex as long as these methods are called before first call to `read()` or `readPrefix()`.
+
+
+Block IBlockInputStream::read()
+{
+ Block res;
+ if (isCancelledOrThrowIfKilled())
+ return res;
+
+ res = readImpl();
+ if (!res)
+ {
+ /** If the stream is over, then we will ask all children to abort the execution.
+ * This makes sense when running a query with LIMIT
+ * - there is a situation when all the necessary data has already been read,
+ * but children sources are still working,
+ * herewith they can work in separate threads or even remotely.
+ */
+ cancel(false);
+ }
+
+ return res;
+}
+
+
+void IBlockInputStream::readPrefix()
+{
+ readPrefixImpl();
+
+ forEachChild([&] (IBlockInputStream & child)
+ {
+ child.readPrefix();
+ return false;
+ });
+}
+
+
+void IBlockInputStream::readSuffix()
+{
+ forEachChild([&] (IBlockInputStream & child)
+ {
+ child.readSuffix();
+ return false;
+ });
+
+ readSuffixImpl();
+}
+
+
+void IBlockInputStream::cancel(bool kill)
+{
+#if 0
+ if (kill)
+ is_killed = true;
+#endif
+ bool old_val = false;
+ if (!is_cancelled.compare_exchange_strong(old_val, true, std::memory_order_seq_cst, std::memory_order_relaxed))
+ return;
+
+ forEachChild([&] (IBlockInputStream & child)
+ {
+ child.cancel(kill);
+ return false;
+ });
+}
+
+
+bool IBlockInputStream::isCancelled() const
+{
+ return is_cancelled;
+}
+
+bool IBlockInputStream::isCancelledOrThrowIfKilled() const
+{
+ if (!is_cancelled)
+ return false;
+ return true;
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.h b/ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.h
new file mode 100644
index 0000000000..7c11acb094
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/IBlockInputStream.h
@@ -0,0 +1,118 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+
+#include <DataStreams/IBlockStream_fwd.h>
+
+#include <atomic>
+#include <shared_mutex>
+
+
+namespace CH
+{
+
+/** The stream interface for reading data by blocks from the database.
+ * Relational operations are supposed to be done also as implementations of this interface.
+ * Watches out at how the source of the blocks works.
+ * Lets you get information for profiling: rows per second, blocks per second, megabytes per second, etc.
+ * Allows you to stop reading data (in nested sources).
+ */
+class IBlockInputStream
+{
+public:
+ IBlockInputStream() {}
+ virtual ~IBlockInputStream() {}
+
+ IBlockInputStream(const IBlockInputStream &) = delete;
+ IBlockInputStream & operator=(const IBlockInputStream &) = delete;
+
+ /// To output the data stream transformation tree (query execution plan).
+ virtual String getName() const = 0;
+
+ /** Get data structure of the stream in a form of "header" block (it is also called "sample block").
+ * Header block contains column names, data types, columns of size 0. Constant columns must have corresponding values.
+ * It is guaranteed that method "read" returns blocks of exactly that structure.
+ */
+ virtual Header getHeader() const = 0;
+
+ /** Read next block.
+ * If there are no more blocks, return an empty block (for which operator `bool` returns false).
+ * NOTE: Only one thread can read from one instance of IBlockInputStream simultaneously.
+ * This also applies for readPrefix, readSuffix.
+ */
+ Block read();
+
+ /** Read something before starting all data or after the end of all data.
+ * In the `readSuffix` function, you can implement a finalization that can lead to an exception.
+ * readPrefix() must be called before the first call to read().
+ * readSuffix() should be called after read() returns an empty block, or after a call to cancel(), but not during read() execution.
+ */
+
+ /** The default implementation calls readPrefixImpl() on itself, and then readPrefix() recursively for all children.
+ * There are cases when you do not want `readPrefix` of children to be called synchronously, in this function,
+ * but you want them to be called, for example, in separate threads (for parallel initialization of children).
+ * Then overload `readPrefix` function.
+ */
+ virtual void readPrefix();
+
+ /** The default implementation calls recursively readSuffix() on all children, and then readSuffixImpl() on itself.
+ * If this stream calls read() in children in a separate thread, this behavior is usually incorrect:
+ * readSuffix() of the child can not be called at the moment when the same child's read() is executed in another thread.
+ * In this case, you need to override this method so that readSuffix() in children is called, for example, after connecting streams.
+ */
+ virtual void readSuffix();
+
+ /** Ask to abort the receipt of data as soon as possible.
+ * By default - just sets the flag is_cancelled and asks that all children be interrupted.
+ * This function can be called several times, including simultaneously from different threads.
+ * Have two modes:
+ * with kill = false only is_cancelled is set - streams will stop silently with returning some processed data.
+ * with kill = true also is_killed set - queries will stop with exception.
+ */
+ virtual void cancel(bool kill = false);
+
+ bool isCancelled() const;
+ bool isCancelledOrThrowIfKilled() const;
+
+protected:
+ BlockInputStreams children;
+ std::shared_mutex children_mutex;
+
+ std::atomic<bool> is_cancelled{false};
+
+ void addChild(const BlockInputStreamPtr & child)
+ {
+ std::unique_lock lock(children_mutex);
+ children.push_back(child);
+ }
+
+private:
+ /// Derived classes must implement this function.
+ virtual Block readImpl() = 0;
+
+ /// Here you can do a preliminary initialization.
+ virtual void readPrefixImpl() {}
+
+ /// Here you need to do a finalization, which can lead to an exception.
+ virtual void readSuffixImpl() {}
+
+ template <typename F>
+ void forEachChild(F && f)
+ {
+ /// NOTE: Acquire a read lock, therefore f() should be thread safe
+ std::shared_lock lock(children_mutex);
+
+ // Reduce lock scope and avoid recursive locking since that is undefined for shared_mutex.
+ const auto children_copy = children;
+ lock.unlock();
+
+ for (auto & child : children_copy)
+ if (f(*child))
+ return;
+ }
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/DataStreams/IBlockStream_fwd.h b/ydb/library/arrow_clickhouse/DataStreams/IBlockStream_fwd.h
new file mode 100644
index 0000000000..1bf79768c0
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/IBlockStream_fwd.h
@@ -0,0 +1,21 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+
+#include <memory>
+#include <vector>
+
+namespace CH
+{
+
+class IBlockInputStream;
+class IBlockOutputStream;
+
+using BlockInputStreamPtr = std::shared_ptr<IBlockInputStream>;
+using BlockInputStreams = std::vector<BlockInputStreamPtr>;
+using BlockOutputStreamPtr = std::shared_ptr<IBlockOutputStream>;
+using BlockOutputStreams = std::vector<BlockOutputStreamPtr>;
+
+}
diff --git a/ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.cpp b/ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.cpp
new file mode 100644
index 0000000000..2bd14e1371
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.cpp
@@ -0,0 +1,43 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#include <DataStreams/MergingAggregatedBlockInputStream.h>
+
+
+namespace CH
+{
+
+Header MergingAggregatedBlockInputStream::getHeader() const
+{
+ return aggregator.getHeader(final);
+}
+
+
+Block MergingAggregatedBlockInputStream::readImpl()
+{
+ if (!executed)
+ {
+ executed = true;
+ AggregatedDataVariants data_variants;
+#if 0
+ Aggregator::CancellationHook hook = [&]() { return this->isCancelled(); };
+ aggregator.setCancellationHook(hook);
+#endif
+ aggregator.mergeStream(children.back(), data_variants);
+ blocks = aggregator.convertToBlocks(data_variants, final);
+ it = blocks.begin();
+ }
+
+ Block res;
+ if (isCancelledOrThrowIfKilled() || it == blocks.end())
+ return res;
+
+ res = std::move(*it);
+ ++it;
+
+ return res;
+}
+
+
+}
diff --git a/ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.h b/ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.h
new file mode 100644
index 0000000000..a4fa0274ac
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/MergingAggregatedBlockInputStream.h
@@ -0,0 +1,42 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+#include "Aggregator.h"
+#include <DataStreams/IBlockInputStream.h>
+
+
+namespace CH
+{
+
+/** A pre-aggregate stream of blocks in which each block is already aggregated.
+ * Aggregate functions in blocks should not be finalized so that their states can be merged.
+ */
+class MergingAggregatedBlockInputStream : public IBlockInputStream
+{
+public:
+ MergingAggregatedBlockInputStream(const BlockInputStreamPtr & input, const Aggregator::Params & params, bool final_)
+ : aggregator(params), final(final_)
+ {
+ children.push_back(input);
+ }
+
+ String getName() const override { return "MergingAggregated"; }
+
+ Header getHeader() const override;
+
+protected:
+ Block readImpl() override;
+
+private:
+ Aggregator aggregator;
+ bool final;
+
+ bool executed = false;
+ BlocksList blocks;
+ BlocksList::iterator it;
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/DataStreams/OneBlockInputStream.h b/ydb/library/arrow_clickhouse/DataStreams/OneBlockInputStream.h
new file mode 100644
index 0000000000..6735022c46
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/DataStreams/OneBlockInputStream.h
@@ -0,0 +1,49 @@
+// The code in this file is based on original ClickHouse source code
+// which is licensed under Apache license v2.0
+// See: https://github.com/ClickHouse/ClickHouse/
+
+#pragma once
+#include "arrow_clickhouse_types.h"
+#include <DataStreams/IBlockInputStream.h>
+
+namespace CH
+{
+
+/** A stream of blocks from which you can read one block.
+ * Also see BlocksListBlockInputStream.
+ */
+class OneBlockInputStream : public IBlockInputStream
+{
+public:
+ explicit OneBlockInputStream(Block block_)
+ : block(std::move(block_))
+ {
+ if (!block->Validate().ok())
+ throw Exception("Bad batch in OneBlockInputStream");
+ }
+
+ String getName() const override { return "One"; }
+
+ Header getHeader() const override
+ {
+ if (!block)
+ return {};
+ return block->schema();
+ }
+
+protected:
+ Block readImpl() override
+ {
+ if (has_been_read)
+ return {};
+
+ has_been_read = true;
+ return block;
+ }
+
+private:
+ Block block{};
+ bool has_been_read = false;
+};
+
+}
diff --git a/ydb/library/arrow_clickhouse/README.md b/ydb/library/arrow_clickhouse/README.md
new file mode 100644
index 0000000000..89149bf4f9
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/README.md
@@ -0,0 +1,16 @@
+ClickHouse aggregate functions over Apache Arrow primitives
+--------
+
+This library is a modified ClickHouse (https://github.com/ClickHouse/ClickHouse/) code that uses Apache Arrow
+(https://arrow.apache.org/) primitives instead of ClickHouse native ones. I.e. it uses arrow::RecordBatch
+instead of DB::Block, arrow::Array and arrow::Builder instead of DB::IColumn and so on.
+The redefinition of types is in arrow_clickhouse_types.h header.
+
+The library uses DataStreams primitives that were replaced by processors in ClickHouse 20.3. It's not possible to
+extract processors from ClickHouse code base. It's too monolithic and depends on specific multithreading model.
+
+The core reason of library is posibility to use ClickHouse's GROUP BY code (Aggregator.cpp) and aggregate fucntions
+(AggregateFunctions directory) with minimal modifications over data presented in Apache Arrow formats.
+
+Original ClickHouse support 2-level aggregation and several optiumizations (LowCardinality, Sparse data, LLVM).
+Also it allows to add functions combinators to aggregate functions. Such optimizations are not implemented here yet.
diff --git a/ydb/library/arrow_clickhouse/arrow_clickhouse_types.h b/ydb/library/arrow_clickhouse/arrow_clickhouse_types.h
new file mode 100644
index 0000000000..57dee49a1f
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/arrow_clickhouse_types.h
@@ -0,0 +1,180 @@
+#pragma once
+#include <cstdint>
+#include <string>
+#include <vector>
+#include <list>
+#include <map>
+#include <stdexcept>
+
+#include <util/system/types.h>
+
+#include <contrib/libs/apache/arrow/cpp/src/arrow/api.h>
+#include <contrib/libs/apache/arrow/cpp/src/arrow/compute/api.h>
+
+#include <common/StringRef.h>
+#include <common/extended_types.h>
+#include <common/defines.h>
+
+#include <Common/PODArray_fwd.h>
+
+namespace CH
+{
+
+using NDB::StringRef;
+using NDB::StringRefHash;
+using NDB::StringRefs;
+
+/// What to do if the limit is exceeded.
+enum class OverflowMode
+{
+ THROW = 0, /// Throw exception.
+ BREAK = 1, /// Abort query execution, return what is.
+
+ /** Only for GROUP BY: do not add new rows to the set,
+ * but continue to aggregate for keys that are already in the set.
+ */
+ ANY = 2,
+};
+
+using Exception = std::runtime_error;
+using ColumnNumbers = std::vector<uint32_t>; // it's vector<size_t> in CH
+using Names = std::vector<std::string>;
+
+using Block = std::shared_ptr<arrow::RecordBatch>;
+using BlocksList = std::list<Block>;
+using Array = arrow::ScalarVector;
+using ColumnWithTypeAndName = arrow::Field;
+using ColumnsWithTypeAndName = arrow::FieldVector;
+using Header = std::shared_ptr<arrow::Schema>;
+using Sizes = std::vector<size_t>;
+
+// TODO: replace with arrow::memory_pool
+class Arena;
+using ArenaPtr = std::shared_ptr<Arena>;
+using ConstArenaPtr = std::shared_ptr<const Arena>;
+using ConstArenas = std::vector<ConstArenaPtr>;
+
+using IColumn = arrow::Array;
+using ColumnPtr = std::shared_ptr<IColumn>;
+using Columns = std::vector<ColumnPtr>;
+using ColumnRawPtrs = std::vector<const IColumn *>;
+
+using MutableColumn = arrow::ArrayBuilder;
+using MutableColumnPtr = std::shared_ptr<arrow::ArrayBuilder>;
+using MutableColumns = std::vector<MutableColumnPtr>;
+
+struct XColumn {
+ using Offset = UInt64;
+ using Offsets = PaddedPODArray<Offset>;
+
+ using ColumnIndex = UInt64;
+ using Selector = PaddedPODArray<ColumnIndex>;
+
+ using Filter = PaddedPODArray<UInt8>;
+};
+
+using ColumnInt8 = arrow::NumericArray<arrow::Int8Type>;
+using ColumnInt16 = arrow::NumericArray<arrow::Int16Type>;
+using ColumnInt32 = arrow::NumericArray<arrow::Int32Type>;
+using ColumnInt64 = arrow::NumericArray<arrow::Int64Type>;
+
+using ColumnUInt8 = arrow::NumericArray<arrow::UInt8Type>;
+using ColumnUInt16 = arrow::NumericArray<arrow::UInt16Type>;
+using ColumnUInt32 = arrow::NumericArray<arrow::UInt32Type>;
+using ColumnUInt64 = arrow::NumericArray<arrow::UInt64Type>;
+
+using ColumnFloat32 = arrow::NumericArray<arrow::FloatType>;
+using ColumnFloat64 = arrow::NumericArray<arrow::DoubleType>;
+
+using ColumnBinary = arrow::BinaryArray;
+using ColumnString = arrow::StringArray;
+using ColumnFixedString = arrow::FixedSizeBinaryArray;
+
+using ColumnTimestamp = arrow::TimestampArray;
+using ColumnDuration = arrow::DurationArray;
+using ColumnDecimal = arrow::DecimalArray;
+
+using MutableColumnInt8 = arrow::Int8Builder;
+using MutableColumnInt16 = arrow::Int16Builder;
+using MutableColumnInt32 = arrow::Int32Builder;
+using MutableColumnInt64 = arrow::Int64Builder;
+
+using MutableColumnUInt8 = arrow::UInt8Builder;
+using MutableColumnUInt16 = arrow::UInt16Builder;
+using MutableColumnUInt32 = arrow::UInt32Builder;
+using MutableColumnUInt64 = arrow::UInt64Builder;
+
+using MutableColumnFloat32 = arrow::FloatBuilder;
+using MutableColumnFloat64 = arrow::DoubleBuilder;
+
+using MutableColumnBinary = arrow::BinaryBuilder;
+using MutableColumnString = arrow::StringBuilder;
+using MutableColumnFixedString = arrow::FixedSizeBinaryBuilder;
+
+using MutableColumnTimestamp = arrow::TimestampBuilder;
+using MutableColumnDuration = arrow::DurationBuilder;
+using MutableColumnDecimal = arrow::DecimalBuilder;
+
+using IDataType = arrow::DataType;
+using DataTypePtr = std::shared_ptr<IDataType>;
+using DataTypes = arrow::DataTypeVector;
+
+using DataTypeInt8 = arrow::Int8Type;
+using DataTypeInt16 = arrow::Int16Type;
+using DataTypeInt32 = arrow::Int32Type;
+using DataTypeInt64 = arrow::Int64Type;
+
+using DataTypeUInt8 = arrow::UInt8Type;
+using DataTypeUInt16 = arrow::UInt16Type;
+using DataTypeUInt32 = arrow::UInt32Type;
+using DataTypeUInt64 = arrow::UInt64Type;
+
+using DataTypeBinary = arrow::BinaryType;
+using DataTypeString = arrow::StringType;
+using DataTypeFixedString = arrow::FixedSizeBinaryType;
+
+using DataTypeTimestamp = arrow::TimestampType;
+using DataTypeDuration = arrow::DurationType;
+using DataTypeDecimal = arrow::DecimalType;
+
+class IAggregateFunction;
+using AggregateFunctionPtr = std::shared_ptr<const IAggregateFunction>;
+
+struct AggregateDescription
+{
+ AggregateFunctionPtr function;
+ Array parameters; /// Parameters of the (parametric) aggregate function.
+ ColumnNumbers arguments;
+ Names argument_names; /// used if no `arguments` are specified.
+ String column_name; /// What name to use for a column with aggregate function values
+};
+
+using AggregateDescriptions = std::vector<AggregateDescription>;
+
+using AggregateColumnsData = std::vector<arrow::UInt64Builder *>;
+using AggregateColumnsConstData = std::vector<const arrow::UInt64Array *>;
+
+
+inline Columns columnsFromHeader(const Header& schema, size_t num_rows = 0)
+{
+ std::vector<std::shared_ptr<arrow::Array>> columns;
+ columns.reserve(schema->num_fields());
+
+ for (auto& field : schema->fields()) {
+ columns.emplace_back(*arrow::MakeArrayOfNull(field->type(), num_rows));
+ }
+ return columns;
+}
+
+inline Block blockFromHeader(const Header& schema, size_t num_rows = 0)
+{
+ return arrow::RecordBatch::Make(schema, num_rows, columnsFromHeader(schema, num_rows));
+}
+
+template <typename To, typename From>
+inline To assert_cast(From && from)
+{
+ return static_cast<To>(from);
+}
+
+}
diff --git a/ydb/library/arrow_clickhouse/ut/CMakeLists.darwin.txt b/ydb/library/arrow_clickhouse/ut/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..1a9a9c7126
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/ut/CMakeLists.darwin.txt
@@ -0,0 +1,41 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(ydb-library-arrow_clickhouse-ut)
+target_include_directories(ydb-library-arrow_clickhouse-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
+)
+target_link_libraries(ydb-library-arrow_clickhouse-ut PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ library-cpp-cpuid_check
+ cpp-testing-unittest_main
+ ydb-library-arrow_clickhouse
+)
+target_link_options(ydb-library-arrow_clickhouse-ut PRIVATE
+ -Wl,-no_deduplicate
+ -Wl,-sdk_version,10.15
+ -fPIC
+ -fPIC
+)
+target_sources(ydb-library-arrow_clickhouse-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/ut_aggregator.cpp
+)
+add_test(
+ NAME
+ ydb-library-arrow_clickhouse-ut
+ COMMAND
+ ydb-library-arrow_clickhouse-ut
+ --print-before-suite
+ --print-before-test
+ --fork-tests
+ --print-times
+ --show-fails
+)
+vcs_info(ydb-library-arrow_clickhouse-ut)
diff --git a/ydb/library/arrow_clickhouse/ut/CMakeLists.linux.txt b/ydb/library/arrow_clickhouse/ut/CMakeLists.linux.txt
new file mode 100644
index 0000000000..37e06a0822
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/ut/CMakeLists.linux.txt
@@ -0,0 +1,47 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(ydb-library-arrow_clickhouse-ut)
+target_include_directories(ydb-library-arrow_clickhouse-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse
+)
+target_link_libraries(ydb-library-arrow_clickhouse-ut PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ cpp-malloc-tcmalloc
+ libs-tcmalloc-no_percpu_cache
+ library-cpp-cpuid_check
+ cpp-testing-unittest_main
+ ydb-library-arrow_clickhouse
+)
+target_link_options(ydb-library-arrow_clickhouse-ut PRIVATE
+ -ldl
+ -lrt
+ -Wl,--no-as-needed
+ -fPIC
+ -fPIC
+ -lpthread
+ -lrt
+ -ldl
+)
+target_sources(ydb-library-arrow_clickhouse-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/arrow_clickhouse/ut_aggregator.cpp
+)
+add_test(
+ NAME
+ ydb-library-arrow_clickhouse-ut
+ COMMAND
+ ydb-library-arrow_clickhouse-ut
+ --print-before-suite
+ --print-before-test
+ --fork-tests
+ --print-times
+ --show-fails
+)
+vcs_info(ydb-library-arrow_clickhouse-ut)
diff --git a/ydb/library/arrow_clickhouse/ut/CMakeLists.txt b/ydb/library/arrow_clickhouse/ut/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/ut/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/ydb/library/arrow_clickhouse/ut_aggregator.cpp b/ydb/library/arrow_clickhouse/ut_aggregator.cpp
new file mode 100644
index 0000000000..ca25f3aff3
--- /dev/null
+++ b/ydb/library/arrow_clickhouse/ut_aggregator.cpp
@@ -0,0 +1,365 @@
+#include <array>
+#include <memory>
+#include <vector>
+#include <iostream>
+#include <iomanip>
+
+#include <library/cpp/testing/unittest/registar.h>
+
+#include "Aggregator.h"
+#include "DataStreams/OneBlockInputStream.h"
+#include "DataStreams/AggregatingBlockInputStream.h"
+#include "DataStreams/MergingAggregatedBlockInputStream.h"
+#include "AggregateFunctions/AggregateFunctionCount.h"
+#include "AggregateFunctions/AggregateFunctionMinMaxAny.h"
+#include "AggregateFunctions/AggregateFunctionSum.h"
+#include "AggregateFunctions/AggregateFunctionAvg.h"
+
+namespace CH {
+
+void RegisterAggregates(arrow::compute::FunctionRegistry * registry = nullptr) {
+ if (!registry)
+ registry = arrow::compute::GetFunctionRegistry();
+
+ registry->AddFunction(std::make_shared<CH::WrappedCount>("ch.count")).ok();
+ registry->AddFunction(std::make_shared<CH::WrappedMin>("ch.min")).ok();
+ registry->AddFunction(std::make_shared<CH::WrappedMax>("ch.max")).ok();
+ registry->AddFunction(std::make_shared<CH::WrappedAny>("ch.any")).ok();
+ registry->AddFunction(std::make_shared<CH::WrappedSum>("ch.sum")).ok();
+ registry->AddFunction(std::make_shared<CH::WrappedAvg>("ch.avg")).ok();
+}
+
+// {i16, ui32, s1, s2}
+Block makeTestBlock(size_t num_rows) {
+ std::vector<std::string> strings = {"abc", "def", "abcd", "defg", "ac"};
+
+ arrow::FieldVector fields;
+ arrow::ArrayVector columns;
+
+ {
+ auto field = std::make_shared<arrow::Field>("i16", arrow::int16());
+ arrow::Int16Builder col;
+ col.Reserve(num_rows).ok();
+
+ for (size_t i = 0; i < num_rows; ++i)
+ col.Append(i % 9).ok();
+
+ fields.emplace_back(std::move(field));
+ columns.emplace_back(std::move(*col.Finish()));
+ }
+
+ {
+ auto field = std::make_shared<arrow::Field>("ui32", arrow::uint32());
+ arrow::UInt32Builder col;
+ col.Reserve(num_rows).ok();
+
+ for (size_t i = 0; i < num_rows; ++i)
+ col.Append(i % 7).ok();
+
+ fields.emplace_back(std::move(field));
+ columns.emplace_back(std::move(*col.Finish()));
+ }
+
+ {
+ auto field = std::make_shared<arrow::Field>("s1", arrow::binary());
+ arrow::BinaryBuilder col;
+ col.Reserve(num_rows).ok();
+
+ for (size_t i = 0; i < num_rows; ++i)
+ col.Append(strings[i % strings.size()]).ok();
+
+ fields.emplace_back(std::move(field));
+ columns.emplace_back(std::move(*col.Finish()));
+ }
+
+ {
+ auto field = std::make_shared<arrow::Field>("s2", arrow::binary());
+ arrow::BinaryBuilder col;
+ col.Reserve(num_rows).ok();
+
+ for (size_t i = 0; i < num_rows; ++i)
+ col.Append(strings[i % 3]).ok();
+
+ fields.emplace_back(std::move(field));
+ columns.emplace_back(std::move(*col.Finish()));
+ }
+
+ return arrow::RecordBatch::Make(std::make_shared<arrow::Schema>(fields), num_rows, columns);
+}
+
+AggregateDescription MakeCountDescription(const std::string & column_name = "cnt")
+{
+ auto * registry = arrow::compute::GetFunctionRegistry();
+ auto func = registry->GetFunction("ch.count");
+ auto wrapped = std::static_pointer_cast<ArrowAggregateFunctionWrapper>(*func);
+
+ DataTypes empty_list_of_types;
+ return AggregateDescription {
+ .function = wrapped->getHouseFunction(empty_list_of_types),
+ .column_name = column_name
+ };
+}
+
+AggregateDescription MakeMinMaxAnyDescription(const std::string & agg_name, DataTypePtr data_type,
+ uint32_t column_id)
+{
+ auto * registry = arrow::compute::GetFunctionRegistry();
+ auto func = registry->GetFunction(agg_name);
+ auto wrapped = std::static_pointer_cast<ArrowAggregateFunctionWrapper>(*func);
+
+ DataTypes list_of_types = {data_type};
+ return AggregateDescription {
+ .function = wrapped->getHouseFunction(list_of_types),
+ .arguments = {column_id},
+ .column_name = "res_" + agg_name
+ };
+}
+
+AggregateDescription MakeSumDescription(DataTypePtr data_type, uint32_t column_id,
+ const std::string & column_name = "res_sum")
+{
+ auto * registry = arrow::compute::GetFunctionRegistry();
+ auto func = registry->GetFunction("ch.sum");
+ auto wrapped = std::static_pointer_cast<ArrowAggregateFunctionWrapper>(*func);
+
+ DataTypes list_of_types = {data_type};
+ return AggregateDescription {
+ .function = wrapped->getHouseFunction(list_of_types),
+ .arguments = {column_id},
+ .column_name = column_name
+ };
+}
+
+AggregateDescription MakeAvgDescription(DataTypePtr data_type, uint32_t column_id,
+ const std::string & column_name = "res_avg")
+{
+ auto * registry = arrow::compute::GetFunctionRegistry();
+ auto func = registry->GetFunction("ch.avg");
+ auto wrapped = std::static_pointer_cast<ArrowAggregateFunctionWrapper>(*func);
+
+ DataTypes list_of_types = {data_type};
+ return AggregateDescription {
+ .function = wrapped->getHouseFunction(list_of_types),
+ .arguments = {column_id},
+ .column_name = column_name
+ };
+}
+
+BlockInputStreamPtr MakeAggregatingStream(const BlockInputStreamPtr & stream,
+ const ColumnNumbers & agg_keys,
+ const AggregateDescriptions & aggregate_descriptions)
+{
+ Header src_header = stream->getHeader();
+ Aggregator::Params agg_params(false, src_header, agg_keys, aggregate_descriptions, false);
+ BlockInputStreamPtr agg_stream = std::make_shared<AggregatingBlockInputStream>(stream, agg_params, false);
+
+ ColumnNumbers merge_keys;
+ {
+ Header agg_header = agg_stream->getHeader();
+ for (const auto & key : agg_keys)
+ merge_keys.push_back(agg_header->GetFieldIndex(src_header->field(key)->name()));
+ }
+
+ Aggregator::Params merge_params(true, agg_stream->getHeader(), merge_keys, aggregate_descriptions, false);
+ return std::make_shared<MergingAggregatedBlockInputStream>(agg_stream, merge_params, true);
+}
+
+bool TestExecute(const Block & block, const ColumnNumbers & agg_keys)
+{
+ try
+ {
+ BlockInputStreamPtr stream = std::make_shared<OneBlockInputStream>(block);
+
+ AggregateDescription aggregate_description = MakeCountDescription();
+ Aggregator::Params params(false, stream->getHeader(), agg_keys, {aggregate_description}, false);
+ Aggregator aggregator(params);
+
+ AggregatedDataVariants aggregated_data_variants;
+
+ {
+ //Stopwatch stopwatch;
+ //stopwatch.start();
+
+ aggregator.execute(stream, aggregated_data_variants);
+
+ //stopwatch.stop();
+ //std::cout << std::fixed << std::setprecision(2)
+ // << "Elapsed " << stopwatch.elapsedSeconds() << " sec."
+ // << ", " << n / stopwatch.elapsedSeconds() << " rows/sec."
+ // << std::endl;
+ }
+ }
+ catch (const Exception & e)
+ {
+ std::cerr << e.what() << std::endl;
+ return false;
+ }
+
+ return true;
+}
+
+size_t TestAggregate(const Block & block, const ColumnNumbers & agg_keys, const AggregateDescription & description)
+{
+ size_t rows = 0;
+
+ try
+ {
+ std::cerr << "aggregate by keys: ";
+ for (auto& key : agg_keys) {
+ std::cerr << key << " ";
+ }
+ std::cerr << std::endl;
+
+ auto stream = MakeAggregatingStream(std::make_shared<OneBlockInputStream>(block), agg_keys, {description});
+
+ while (auto block = stream->read()) {
+ std::cerr << "result rows: " << block->num_rows() << std::endl;
+ rows += block->num_rows();
+ }
+ }
+ catch (const Exception & e)
+ {
+ std::cerr << e.what() << std::endl;
+ return 0;
+ }
+
+ return rows;
+}
+
+}
+
+
+Y_UNIT_TEST_SUITE(CH_Aggregator) {
+ Y_UNIT_TEST(ExecuteCount) {
+ CH::RegisterAggregates();
+
+ auto block = CH::makeTestBlock(1000);
+
+ UNIT_ASSERT(CH::TestExecute(block, {0, 1}));
+ UNIT_ASSERT(CH::TestExecute(block, {1, 0}));
+ UNIT_ASSERT(CH::TestExecute(block, {0, 2}));
+ UNIT_ASSERT(CH::TestExecute(block, {2, 0}));
+ UNIT_ASSERT(CH::TestExecute(block, {2, 3}));
+ UNIT_ASSERT(CH::TestExecute(block, {0, 1, 2, 3}));
+ }
+
+ Y_UNIT_TEST(AggregateCount) {
+ CH::RegisterAggregates();
+
+ auto block = CH::makeTestBlock(1000);
+
+ auto agg_count = CH::MakeCountDescription();
+
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1}, agg_count), 9*7);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {1, 0}, agg_count), 7*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 2}, agg_count), 9*5);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 0}, agg_count), 5*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 3}, agg_count), 5*3);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1, 2, 3}, agg_count), 9*7*5);
+ }
+
+ Y_UNIT_TEST(AggregateMin) {
+ CH::RegisterAggregates();
+
+ auto block = CH::makeTestBlock(1000);
+
+ for (int i = 0; i < block->num_columns(); ++i) {
+ auto type = block->column(i)->type();
+ auto agg_descr = CH::MakeMinMaxAnyDescription("ch.min", type, i);
+
+ UNIT_ASSERT(agg_descr.function);
+ UNIT_ASSERT_VALUES_EQUAL(agg_descr.arguments.size(), 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1}, agg_descr), 9*7);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {1, 0}, agg_descr), 7*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 2}, agg_descr), 9*5);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 0}, agg_descr), 5*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 3}, agg_descr), 5*3);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1, 2, 3}, agg_descr), 9*7*5);
+ }
+ }
+
+ Y_UNIT_TEST(AggregateMax) {
+ CH::RegisterAggregates();
+
+ auto block = CH::makeTestBlock(1000);
+
+ for (int i = 0; i < block->num_columns(); ++i) {
+ auto type = block->column(i)->type();
+ auto agg_descr = CH::MakeMinMaxAnyDescription("ch.max", type, i);
+
+ UNIT_ASSERT(agg_descr.function);
+ UNIT_ASSERT_VALUES_EQUAL(agg_descr.arguments.size(), 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1}, agg_descr), 9*7);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {1, 0}, agg_descr), 7*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 2}, agg_descr), 9*5);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 0}, agg_descr), 5*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 3}, agg_descr), 5*3);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1, 2, 3}, agg_descr), 9*7*5);
+ }
+ }
+
+ Y_UNIT_TEST(AggregateAny) {
+ CH::RegisterAggregates();
+
+ auto block = CH::makeTestBlock(1000);
+
+ for (int i = 0; i < block->num_columns(); ++i) {
+ auto type = block->column(i)->type();
+ auto agg_descr = CH::MakeMinMaxAnyDescription("ch.any", type, i);
+
+ UNIT_ASSERT(agg_descr.function);
+ UNIT_ASSERT_VALUES_EQUAL(agg_descr.arguments.size(), 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1}, agg_descr), 9*7);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {1, 0}, agg_descr), 7*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 2}, agg_descr), 9*5);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 0}, agg_descr), 5*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 3}, agg_descr), 5*3);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1, 2, 3}, agg_descr), 9*7*5);
+ }
+ }
+
+ Y_UNIT_TEST(AggregateSum) {
+ CH::RegisterAggregates();
+
+ auto block = CH::makeTestBlock(1000);
+
+ for (int i = 0; i < 2; ++i) {
+ auto type = block->column(i)->type();
+ auto agg_descr = CH::MakeSumDescription(type, i);
+
+ UNIT_ASSERT(agg_descr.function);
+ UNIT_ASSERT_VALUES_EQUAL(agg_descr.arguments.size(), 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1}, agg_descr), 9*7);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {1, 0}, agg_descr), 7*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 2}, agg_descr), 9*5);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 0}, agg_descr), 5*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 3}, agg_descr), 5*3);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1, 2, 3}, agg_descr), 9*7*5);
+ }
+ }
+
+ Y_UNIT_TEST(AggregateAvg) {
+ CH::RegisterAggregates();
+
+ auto block = CH::makeTestBlock(1000);
+
+ for (int i = 0; i < 2; ++i) {
+ auto type = block->column(i)->type();
+ auto agg_descr = CH::MakeAvgDescription(type, i);
+
+ UNIT_ASSERT(agg_descr.function);
+ UNIT_ASSERT_VALUES_EQUAL(agg_descr.arguments.size(), 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1}, agg_descr), 9*7);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {1, 0}, agg_descr), 7*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 2}, agg_descr), 9*5);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 0}, agg_descr), 5*9);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {2, 3}, agg_descr), 5*3);
+ UNIT_ASSERT_VALUES_EQUAL(CH::TestAggregate(block, {0, 1, 2, 3}, agg_descr), 9*7*5);
+ }
+ }
+}
diff --git a/ydb/library/backup/CMakeLists.txt b/ydb/library/backup/CMakeLists.txt
index 6f6b3c7172..f10492155d 100644
--- a/ydb/library/backup/CMakeLists.txt
+++ b/ydb/library/backup/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(kikimr_backup)
target_link_libraries(kikimr_backup PUBLIC
diff --git a/ydb/library/backup/ut/CMakeLists.txt b/ydb/library/backup/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/backup/ut/CMakeLists.txt
+++ b/ydb/library/backup/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/binary_json/CMakeLists.txt b/ydb/library/binary_json/CMakeLists.txt
index 14c3c176d9..20509dd4a3 100644
--- a/ydb/library/binary_json/CMakeLists.txt
+++ b/ydb/library/binary_json/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-library-binary_json)
target_compile_options(ydb-library-binary_json PRIVATE
diff --git a/ydb/library/binary_json/read.cpp b/ydb/library/binary_json/read.cpp
index d0ee07490f..30ec6d93ec 100644
--- a/ydb/library/binary_json/read.cpp
+++ b/ydb/library/binary_json/read.cpp
@@ -325,8 +325,13 @@ TString SerializeToJson(const TBinaryJson& binaryJson) {
TString SerializeToJson(TStringBuf binaryJson) {
auto reader = TBinaryJsonReader::Make(binaryJson);
+
+ TJsonWriterConfig config;
+ config.DoubleNDigits = 16;
+ config.FloatNDigits = 8;
+
TStringStream output;
- TJsonWriter writer(&output, /* formatOutput */ false);
+ TJsonWriter writer(&output, config);
ReadContainerToJson(reader->GetRootCursor(), writer);
writer.Flush();
return output.Str();
diff --git a/ydb/library/binary_json/ut/CMakeLists.txt b/ydb/library/binary_json/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/binary_json/ut/CMakeLists.txt
+++ b/ydb/library/binary_json/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/dynumber/CMakeLists.txt b/ydb/library/dynumber/CMakeLists.txt
index 4306fc6d23..3b47326b61 100644
--- a/ydb/library/dynumber/CMakeLists.txt
+++ b/ydb/library/dynumber/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-library-dynumber)
target_link_libraries(ydb-library-dynumber PUBLIC
diff --git a/ydb/library/dynumber/ut/CMakeLists.txt b/ydb/library/dynumber/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/dynumber/ut/CMakeLists.txt
+++ b/ydb/library/dynumber/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/folder_service/CMakeLists.txt b/ydb/library/folder_service/CMakeLists.txt
index 9779abeee1..eded5dafc9 100644
--- a/ydb/library/folder_service/CMakeLists.txt
+++ b/ydb/library/folder_service/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(mock)
+add_subdirectory(proto)
add_library(ydb-library-folder_service)
target_link_libraries(ydb-library-folder_service PUBLIC
diff --git a/ydb/library/http_proxy/CMakeLists.txt b/ydb/library/http_proxy/CMakeLists.txt
new file mode 100644
index 0000000000..7c1d730d47
--- /dev/null
+++ b/ydb/library/http_proxy/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(authorization)
+add_subdirectory(error)
diff --git a/ydb/library/http_proxy/authorization/CMakeLists.txt b/ydb/library/http_proxy/authorization/CMakeLists.txt
index 0904148fb7..a7f6e978f5 100644
--- a/ydb/library/http_proxy/authorization/CMakeLists.txt
+++ b/ydb/library/http_proxy/authorization/CMakeLists.txt
@@ -7,6 +7,7 @@
find_package(OpenSSL REQUIRED)
+add_subdirectory(ut)
add_library(library-http_proxy-authorization)
target_link_libraries(library-http_proxy-authorization PUBLIC
diff --git a/ydb/library/http_proxy/authorization/ut/CMakeLists.txt b/ydb/library/http_proxy/authorization/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/http_proxy/authorization/ut/CMakeLists.txt
+++ b/ydb/library/http_proxy/authorization/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/keys/CMakeLists.txt b/ydb/library/keys/CMakeLists.txt
index 93deaf97d3..8471d0d718 100644
--- a/ydb/library/keys/CMakeLists.txt
+++ b/ydb/library/keys/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-library-keys)
target_link_libraries(ydb-library-keys PUBLIC
diff --git a/ydb/library/keys/ut/CMakeLists.txt b/ydb/library/keys/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/keys/ut/CMakeLists.txt
+++ b/ydb/library/keys/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/login/CMakeLists.txt b/ydb/library/login/CMakeLists.txt
index 221098fe63..da3622dd23 100644
--- a/ydb/library/login/CMakeLists.txt
+++ b/ydb/library/login/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
+add_subdirectory(ut)
add_library(ydb-library-login)
target_link_libraries(ydb-library-login PUBLIC
diff --git a/ydb/library/login/ut/CMakeLists.txt b/ydb/library/login/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/login/ut/CMakeLists.txt
+++ b/ydb/library/login/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/mkql_proto/CMakeLists.txt b/ydb/library/mkql_proto/CMakeLists.txt
index faf52c3f7e..a385c3e9ac 100644
--- a/ydb/library/mkql_proto/CMakeLists.txt
+++ b/ydb/library/mkql_proto/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
+add_subdirectory(ut)
add_library(ydb-library-mkql_proto)
target_compile_options(ydb-library-mkql_proto PRIVATE
diff --git a/ydb/library/mkql_proto/mkql_proto.cpp b/ydb/library/mkql_proto/mkql_proto.cpp
index 053892c028..6b9bb4b7d8 100644
--- a/ydb/library/mkql_proto/mkql_proto.cpp
+++ b/ydb/library/mkql_proto/mkql_proto.cpp
@@ -288,8 +288,9 @@ void ExportTypeToProtoImpl(TType* type, Ydb::Type& res) {
case TType::EKind::Struct: {
auto structType = static_cast<TStructType*>(type);
+ auto resStruct = res.mutable_struct_type();
for (ui32 index = 0; index < structType->GetMembersCount(); ++index) {
- auto newMember = res.mutable_struct_type()->add_members();
+ auto newMember = resStruct->add_members();
newMember->set_name(TString(structType->GetMemberName(index)));
ExportTypeToProtoImpl(structType->GetMemberType(index), *newMember->mutable_type());
}
@@ -299,8 +300,9 @@ void ExportTypeToProtoImpl(TType* type, Ydb::Type& res) {
case TType::EKind::Tuple: {
auto tupleType = static_cast<TTupleType*>(type);
+ auto resTuple = res.mutable_tuple_type();
for (ui32 index = 0; index < tupleType->GetElementsCount(); ++index) {
- ExportTypeToProtoImpl(tupleType->GetElementType(index), *res.mutable_tuple_type()->add_elements());
+ ExportTypeToProtoImpl(tupleType->GetElementType(index), *resTuple->add_elements());
}
break;
diff --git a/ydb/library/mkql_proto/mkql_proto_ut.cpp b/ydb/library/mkql_proto/mkql_proto_ut.cpp
index 2a589ba0b3..1b8578780b 100644
--- a/ydb/library/mkql_proto/mkql_proto_ut.cpp
+++ b/ydb/library/mkql_proto/mkql_proto_ut.cpp
@@ -183,6 +183,23 @@ Y_UNIT_TEST_SUITE(TMiniKQLProtoTest) {
"}\n");
}
+ Y_UNIT_TEST(TestExportEmptyTupleType) {
+ TestExportType<NKikimrMiniKQL::TType>([](TProgramBuilder& pgmBuilder) {
+ TVector<TRuntimeNode> items;
+ auto pgmReturn = pgmBuilder.NewTuple(items);
+ return pgmReturn;
+ },
+ "Kind: Tuple\n");
+
+ TestExportType<Ydb::Type>([](TProgramBuilder& pgmBuilder) {
+ TVector<TRuntimeNode> items;
+ auto pgmReturn = pgmBuilder.NewTuple(items);
+ return pgmReturn;
+ },
+ "tuple_type {\n"
+ "}\n");
+ }
+
Y_UNIT_TEST(TestExportStructType) {
TestExportType<NKikimrMiniKQL::TType>([](TProgramBuilder& pgmBuilder) {
std::vector<std::pair<std::string_view, TRuntimeNode>> items;
@@ -214,6 +231,23 @@ Y_UNIT_TEST_SUITE(TMiniKQLProtoTest) {
"}\n");
}
+ Y_UNIT_TEST(TestExportEmptyStructType) {
+ TestExportType<NKikimrMiniKQL::TType>([](TProgramBuilder& pgmBuilder) {
+ std::vector<std::pair<std::string_view, TRuntimeNode>> items;
+ auto pgmReturn = pgmBuilder.NewStruct(items);
+ return pgmReturn;
+ },
+ "Kind: Struct\n");
+
+ TestExportType<Ydb::Type>([](TProgramBuilder& pgmBuilder) {
+ std::vector<std::pair<std::string_view, TRuntimeNode>> items;
+ auto pgmReturn = pgmBuilder.NewStruct(items);
+ return pgmReturn;
+ },
+ "struct_type {\n"
+ "}\n");
+ }
+
Y_UNIT_TEST(TestExportDictType) {
TestExportType<NKikimrMiniKQL::TType>([](TProgramBuilder& pgmBuilder) {
auto dictType = pgmBuilder.NewDictType(pgmBuilder.NewDataType(NUdf::TDataType<i32>::Id),
diff --git a/ydb/library/mkql_proto/ut/CMakeLists.darwin.txt b/ydb/library/mkql_proto/ut/CMakeLists.darwin.txt
index 9c5feac322..3cbe0120c0 100644
--- a/ydb/library/mkql_proto/ut/CMakeLists.darwin.txt
+++ b/ydb/library/mkql_proto/ut/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(helpers)
add_executable(ydb-library-mkql_proto-ut)
target_compile_options(ydb-library-mkql_proto-ut PRIVATE
diff --git a/ydb/library/mkql_proto/ut/CMakeLists.linux.txt b/ydb/library/mkql_proto/ut/CMakeLists.linux.txt
index 93263048d0..2c7c06c339 100644
--- a/ydb/library/mkql_proto/ut/CMakeLists.linux.txt
+++ b/ydb/library/mkql_proto/ut/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(helpers)
add_executable(ydb-library-mkql_proto-ut)
target_compile_options(ydb-library-mkql_proto-ut PRIVATE
diff --git a/ydb/library/mkql_proto/ut/CMakeLists.txt b/ydb/library/mkql_proto/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/mkql_proto/ut/CMakeLists.txt
+++ b/ydb/library/mkql_proto/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/naming_conventions/CMakeLists.txt b/ydb/library/naming_conventions/CMakeLists.txt
index c3d01039c5..3ce7663582 100644
--- a/ydb/library/naming_conventions/CMakeLists.txt
+++ b/ydb/library/naming_conventions/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-library-naming_conventions)
target_link_libraries(ydb-library-naming_conventions PUBLIC
diff --git a/ydb/library/naming_conventions/ut/CMakeLists.txt b/ydb/library/naming_conventions/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/naming_conventions/ut/CMakeLists.txt
+++ b/ydb/library/naming_conventions/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/pdisk_io/CMakeLists.darwin.txt b/ydb/library/pdisk_io/CMakeLists.darwin.txt
index ef2e2d0688..70b528fbc7 100644
--- a/ydb/library/pdisk_io/CMakeLists.darwin.txt
+++ b/ydb/library/pdisk_io/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
add_library(ydb-library-pdisk_io)
target_link_libraries(ydb-library-pdisk_io PUBLIC
diff --git a/ydb/library/pdisk_io/CMakeLists.linux.txt b/ydb/library/pdisk_io/CMakeLists.linux.txt
index 9706b4e3b5..2234fabbe9 100644
--- a/ydb/library/pdisk_io/CMakeLists.linux.txt
+++ b/ydb/library/pdisk_io/CMakeLists.linux.txt
@@ -7,6 +7,7 @@
find_package(AIO REQUIRED)
+add_subdirectory(protos)
add_library(ydb-library-pdisk_io)
target_link_libraries(ydb-library-pdisk_io PUBLIC
diff --git a/ydb/library/pdisk_io/CMakeLists.txt b/ydb/library/pdisk_io/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/pdisk_io/CMakeLists.txt
+++ b/ydb/library/pdisk_io/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/pdisk_io/buffer_pool.h b/ydb/library/pdisk_io/buffer_pool.h
index 0caffbf7de..88402094be 100644
--- a/ydb/library/pdisk_io/buffer_pool.h
+++ b/ydb/library/pdisk_io/buffer_pool.h
@@ -15,9 +15,9 @@ template<typename TObject, ui32 Size>
class TPool {
TVector<TObject> Objects;
NThreading::TObstructiveConsumerAuxQueue<TObject> InPoolObjects;
- NMonitoring::TDynamicCounters::TCounterPtr TotalAllocatedObjects;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TotalAllocatedObjects;
TAtomic FreeObjects;
- NMonitoring::TDynamicCounters::TCounterPtr FreeObjectsMin;
+ ::NMonitoring::TDynamicCounters::TCounterPtr FreeObjectsMin;
public:
TPool()
@@ -57,8 +57,8 @@ class TPool {
}
}
- void InitializeMonitoring(NMonitoring::TDynamicCounters::TCounterPtr totalAllocatedObjects,
- NMonitoring::TDynamicCounters::TCounterPtr freeObjectsMin) {
+ void InitializeMonitoring(::NMonitoring::TDynamicCounters::TCounterPtr totalAllocatedObjects,
+ ::NMonitoring::TDynamicCounters::TCounterPtr freeObjectsMin) {
TotalAllocatedObjects = totalAllocatedObjects;
FreeObjectsMin = freeObjectsMin;
*FreeObjectsMin = AtomicGet(FreeObjects);
diff --git a/ydb/library/pdisk_io/buffers.h b/ydb/library/pdisk_io/buffers.h
index a7b7867151..ce778d55d1 100644
--- a/ydb/library/pdisk_io/buffers.h
+++ b/ydb/library/pdisk_io/buffers.h
@@ -114,13 +114,13 @@ public:
class TBufferPool {
public:
struct TPDiskParams {
- NMonitoring::TDynamicCounters::TCounterPtr FailedAllocations = nullptr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr FailedAllocations = nullptr;
TActorSystem *ActorSystem = nullptr;
ui32 PDiskId = 0;
TPDiskParams() = default;
- TPDiskParams(NMonitoring::TDynamicCounters::TCounterPtr failedAllocations, TActorSystem *actorSystem,
+ TPDiskParams(::NMonitoring::TDynamicCounters::TCounterPtr failedAllocations, TActorSystem *actorSystem,
ui32 pDiskId)
: FailedAllocations(failedAllocations)
, ActorSystem(actorSystem)
diff --git a/ydb/library/persqueue/CMakeLists.txt b/ydb/library/persqueue/CMakeLists.txt
new file mode 100644
index 0000000000..fb5c3ab584
--- /dev/null
+++ b/ydb/library/persqueue/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(counter_time_keeper)
+add_subdirectory(obfuscate)
+add_subdirectory(tests)
+add_subdirectory(topic_parser)
+add_subdirectory(topic_parser_public)
diff --git a/ydb/library/persqueue/topic_parser/CMakeLists.txt b/ydb/library/persqueue/topic_parser/CMakeLists.txt
index 8e3272cf16..539d6aac12 100644
--- a/ydb/library/persqueue/topic_parser/CMakeLists.txt
+++ b/ydb/library/persqueue/topic_parser/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(library-persqueue-topic_parser)
target_link_libraries(library-persqueue-topic_parser PUBLIC
diff --git a/ydb/library/persqueue/topic_parser/counters.cpp b/ydb/library/persqueue/topic_parser/counters.cpp
index 2d80eef499..baf401d165 100644
--- a/ydb/library/persqueue/topic_parser/counters.cpp
+++ b/ydb/library/persqueue/topic_parser/counters.cpp
@@ -2,7 +2,7 @@
namespace NPersQueue {
-NMonitoring::TDynamicCounterPtr GetCounters(NMonitoring::TDynamicCounterPtr counters,
+::NMonitoring::TDynamicCounterPtr GetCounters(::NMonitoring::TDynamicCounterPtr counters,
const TString& subsystem, const TTopicConverterPtr& topic)
{
TString cluster = topic->GetCluster();
@@ -15,7 +15,7 @@ NMonitoring::TDynamicCounterPtr GetCounters(NMonitoring::TDynamicCounterPtr coun
->GetSubgroup("Topic", topic->GetShortClientsideName());
}
-NMonitoring::TDynamicCounterPtr GetCountersForStream(NMonitoring::TDynamicCounterPtr counters)
+::NMonitoring::TDynamicCounterPtr GetCountersForStream(::NMonitoring::TDynamicCounterPtr counters)
{
return counters->GetSubgroup("counters", "datastreams");
}
diff --git a/ydb/library/persqueue/topic_parser/counters.h b/ydb/library/persqueue/topic_parser/counters.h
index e18a5b6483..32af523141 100644
--- a/ydb/library/persqueue/topic_parser/counters.h
+++ b/ydb/library/persqueue/topic_parser/counters.h
@@ -12,8 +12,8 @@ TVector<NPersQueue::TPQLabelsInfo> GetLabelsForCustomCluster(const TTopicConvert
TVector<NPersQueue::TPQLabelsInfo> GetLabelsForStream(const TTopicConverterPtr& topic, const TString& cloudId,
const TString& dbId, const TString& folderId);
-NMonitoring::TDynamicCounterPtr GetCounters(NMonitoring::TDynamicCounterPtr counters,
+::NMonitoring::TDynamicCounterPtr GetCounters(::NMonitoring::TDynamicCounterPtr counters,
const TString& subsystem,
const TTopicConverterPtr& topic);
-NMonitoring::TDynamicCounterPtr GetCountersForStream(NMonitoring::TDynamicCounterPtr counters);
+::NMonitoring::TDynamicCounterPtr GetCountersForStream(::NMonitoring::TDynamicCounterPtr counters);
} // namespace NPersQueue
diff --git a/ydb/library/persqueue/topic_parser/topic_parser.cpp b/ydb/library/persqueue/topic_parser/topic_parser.cpp
index 419383f3fd..72fa54f93a 100644
--- a/ydb/library/persqueue/topic_parser/topic_parser.cpp
+++ b/ydb/library/persqueue/topic_parser/topic_parser.cpp
@@ -32,6 +32,28 @@ namespace {
}
}
+void NormalizeAsFullPath(TString& path) {
+ if (!path.Empty() && !path.StartsWith("/")) {
+ path = TString("/") + path;
+ }
+}
+
+TString StripLeadSlash(const TString& path) {
+ if (!path.StartsWith("/")) {
+ return path;
+ } else {
+ return path.substr(1);
+ }
+}
+
+TString NormalizeFullPath(const TString& fullPath) {
+ if (!fullPath.Empty() && !fullPath.StartsWith("/")) {
+ return TString("/") + fullPath;
+ } else {
+ return fullPath;
+ }
+}
+
TString GetFullTopicPath(const NActors::TActorContext& ctx, const TMaybe<TString>& database, const TString& topicPath) {
if (NKikimr::AppData(ctx)->PQConfig.GetTopicsAreFirstClassCitizen()) {
return FullPath(database, topicPath);
@@ -72,14 +94,6 @@ TString MakeConsumerPath(const TString& consumer) {
return res;
}
-TString NormalizeFullPath(const TString& fullPath) {
- if (fullPath.StartsWith("/"))
- return fullPath.substr(1);
- else {
- return fullPath;
- }
-}
-
TDiscoveryConverterPtr TDiscoveryConverter::ForFstClass(const TString& topic, const TString& database) {
auto* res = new TDiscoveryConverter();
res->FstClass = true;
@@ -115,12 +129,14 @@ TDiscoveryConverter::TDiscoveryConverter(bool firstClass,
: PQPrefix(pqNormalizedPrefix)
{
auto name = pqTabletConfig.GetTopicName();
- if (name.empty()) {
- name = pqTabletConfig.GetTopic();
- }
- Y_VERIFY(!name.empty());
auto path = pqTabletConfig.GetTopicPath();
- if (path.empty()) {
+ if (name.empty()) {
+ Y_VERIFY(!path.empty());
+ TStringBuf pathBuf(path), fst, snd;
+ auto res = pathBuf.TryRSplit("/", fst, snd);
+ Y_VERIFY(res);
+ name = snd;
+ } else if (path.empty()) {
path = name;
}
if (!ydbDatabaseRootOverride.empty()) {
@@ -132,8 +148,11 @@ TDiscoveryConverter::TDiscoveryConverter(bool firstClass,
res_ = pathBuf.SkipPrefix("/");
TStringBuf acc, rest;
res_ = pathBuf.TrySplit("/", acc, rest);
- Y_VERIFY(res_);
+ if (res_) {
Database = NKikimr::JoinPath({TString(dbRoot), TString(acc)});
+ } else {
+ Database = TString(dbRoot);
+ }
}
}
if (!Database.Defined()) {
@@ -206,8 +225,10 @@ void TDiscoveryConverter::BuildForFederation(const TStringBuf& databaseBuf, TStr
return;
Y_VERIFY_DEBUG(!FullModernName.empty());
PrimaryPath = NKikimr::JoinPath({*Database, FullModernName});
+ NormalizeAsFullPath(PrimaryPath);
if (!FullLegacyName.empty()) {
SecondaryPath = NKikimr::JoinPath({PQPrefix, FullLegacyName});
+ NormalizeAsFullPath(SecondaryPath.GetRef());
}
BuildFromShortModernName();
} else {
@@ -225,10 +246,13 @@ void TDiscoveryConverter::BuildForFederation(const TStringBuf& databaseBuf, TStr
}
TTopicConverterPtr TDiscoveryConverter::UpgradeToFullConverter(
- const NKikimrPQ::TPQTabletConfig& pqTabletConfig, const TString& ydbDatabaseRootOverride
+ const NKikimrPQ::TPQTabletConfig& pqTabletConfig,
+ const TString& ydbDatabaseRootOverride,
+ const TMaybe<TString>& clientsideNameOverride
) {
Y_VERIFY_S(Valid, Reason.c_str());
- auto* res = new TTopicNameConverter(FstClass, PQPrefix, pqTabletConfig, ydbDatabaseRootOverride);
+ auto* res = new TTopicNameConverter(FstClass, PQPrefix, pqTabletConfig,
+ ydbDatabaseRootOverride, clientsideNameOverride);
return TTopicConverterPtr(res);
}
@@ -247,6 +271,8 @@ void TDiscoveryConverter::BuildFstClassNames() {
PrimaryPath = TString(normTopic);
Database = "";
}
+ NormalizeAsFullPath(PrimaryPath);
+
FullModernPath = PrimaryPath;
};
@@ -263,37 +289,27 @@ void TDiscoveryConverter::BuildFromFederationPath(const TString& rootPrefix) {
BuildFromShortModernName();
Y_VERIFY_DEBUG(!FullLegacyName.empty());
PrimaryPath = NKikimr::JoinPath({rootPrefix, FullLegacyName});
+ NormalizeAsFullPath(PrimaryPath);
PendingDatabase = true;
}
bool TDiscoveryConverter::TryParseModernMirroredPath(TStringBuf path) {
- if (!path.Contains(".") || !path.Contains("/mirrored-from-")) {
+ if (!path.Contains("-mirrored-from-")) {
+ CHECK_SET_VALID(!path.Contains("mirrored-from"), "Federation topics cannot contain 'mirrored-from' in name unless this is a mirrored topic", return false);
return false;
}
TStringBuf fst, snd;
- auto res = path.TryRSplit("/", fst, snd);
- CHECK_SET_VALID(res, "Malformed mirrored topic path - expected to end with '/mirrored-from-<cluster>'", return false);
- CHECK_SET_VALID(!snd.empty(), "Malformed mirrored topic path - expected to end with '/mirrored-from-<cluster>",
+ auto res = path.TryRSplit("-mirrored-from-", fst, snd);
+ CHECK_SET_VALID(res, "Malformed mirrored topic path - expected to end with '-mirrored-from-<cluster>'", return false);
+ CHECK_SET_VALID(!snd.empty(), "Malformed mirrored topic path - expected to end with valid cluster name",
return false);
- res = snd.SkipPrefix("mirrored-from-");
- CHECK_SET_VALID(res, "Malformed mirrored topic path - invalid '/mirrored-from-<cluster>; part" , return false);
CHECK_SET_VALID(Dc.empty() || Dc == "unknown" || Dc == snd,
"Bad mirrored topic path - cluster in name mismatches with cluster provided",
return false);
Dc = snd;
FullModernName = path;
- path = fst;
- res = path.TryRSplit("/", fst, snd);
- if (res) {
- res = snd.SkipPrefix(".");
- CHECK_SET_VALID(res, "Malformed mirrored topic path - topic name is expected to start with '.'", return false);
- ModernName = NKikimr::JoinPath({TString(fst), TString(snd)});
- } else {
- res = path.SkipPrefix(".");
- CHECK_SET_VALID(res, "Malformed mirrored topic path - topic name is expected to start with '.'", return false);
- ModernName = path;
- }
+ ModernName = fst;
if (Account_.Defined()) {
BuildFromShortModernName();
}
@@ -305,14 +321,14 @@ void TDiscoveryConverter::ParseModernPath(const TStringBuf& path) {
// So only convention supported is 'account/dir/topic' and account in path matches LB account;
TStringBuilder pathAfterAccount;
- // Path after account would contain 'dir/topic' OR dir/.topic/mirrored-from-..
+ // Path after account would contain 'dir/topic' OR dir/topic-mirrored-from-...
if (!Dc.empty() && !LocalDc.empty() && Dc != LocalDc) {
TStringBuf directories, topicName;
auto res = path.TrySplit("/", directories, topicName);
if (res) {
- pathAfterAccount << directories << "/." << topicName << "/mirrored-from-" << Dc;
+ pathAfterAccount << directories << "/" << topicName << "-mirrored-from-" << Dc;
} else {
- pathAfterAccount << "." << path << "/mirrored-from-" << Dc;
+ pathAfterAccount << path << "-mirrored-from-" << Dc;
}
} else {
pathAfterAccount << path;
@@ -433,7 +449,7 @@ void TDiscoveryConverter::BuildFromLegacyName(const TString& rootPrefix, bool fo
if (res) {
if (!Account_.Defined()) {
Account_ = fst;
- } else if (*Account_ != fst){
+ } else {
modernName << fst << "/";
fullModernName << fst << "/";
}
@@ -444,14 +460,11 @@ void TDiscoveryConverter::BuildFromLegacyName(const TString& rootPrefix, bool fo
}
topicName = topic;
}
- if (!modernName.empty()) {
- modernName << topicName;
- }
modernName << topicName;
Y_VERIFY(!Dc.empty());
bool isMirrored = (!LocalDc.empty() && Dc != LocalDc);
if (isMirrored) {
- fullModernName << "." << topicName << "/mirrored-from-" << Dc;
+ fullModernName << topicName << "-mirrored-from-" << Dc;
} else {
fullModernName << topicName;
}
@@ -460,7 +473,7 @@ void TDiscoveryConverter::BuildFromLegacyName(const TString& rootPrefix, bool fo
ShortLegacyName = shortLegacyName;
FullLegacyName = fullLegacyName;
PrimaryPath = NKikimr::JoinPath({rootPrefix, fullLegacyName});
-
+ NormalizeAsFullPath(PrimaryPath);
FullModernName = fullModernName;
ModernName = modernName;
LbPath = NKikimr::JoinPath({*Account_, modernName});
@@ -528,6 +541,7 @@ void TDiscoveryConverter::SetDatabase(const TString& database) {
Y_VERIFY(!FullModernName.empty());
if (!SecondaryPath.Defined()) {
SecondaryPath = NKikimr::JoinPath({*Database, FullModernName});
+ NormalizeAsFullPath(SecondaryPath.GetRef());
}
FullModernPath = SecondaryPath.GetRef();
PendingDatabase = false;
@@ -635,6 +649,7 @@ TTopicConverterPtr TTopicNameConverter::ForFederation(
}
Y_VERIFY(!res->FullModernName.empty());
res->PrimaryPath = NKikimr::JoinPath({*res->Database, res->FullModernName});
+ NormalizeAsFullPath(res->PrimaryPath);
}
if (res->IsValid()) {
Y_VERIFY(res->Account_.Defined());
@@ -651,12 +666,16 @@ TTopicConverterPtr TTopicNameConverter::ForFederation(
TTopicNameConverter::TTopicNameConverter(
bool firstClass, const TString& pqPrefix,
const NKikimrPQ::TPQTabletConfig& pqTabletConfig,
- const TString& ydbDatabaseRootOverride
+ const TString& ydbDatabaseRootOverride,
+ const TMaybe<TString>& clientsideNameOverride
)
: TDiscoveryConverter(firstClass, pqPrefix, pqTabletConfig, ydbDatabaseRootOverride)
{
if (Valid) {
BuildInternals(pqTabletConfig);
+ if (clientsideNameOverride) {
+ ClientsideName = *clientsideNameOverride;
+ }
}
}
@@ -761,7 +780,7 @@ TString TTopicNameConverter::GetTopicForSrcId() const {
if (!IsValid())
return {};
if (FstClass) {
- return FullModernPath;
+ return StripLeadSlash(FullModernPath);
} else {
return GetClientsideName();
}
@@ -771,7 +790,7 @@ TString TTopicNameConverter::GetTopicForSrcIdHash() const {
if (!IsValid())
return {};
if (FstClass) {
- return FullModernPath;
+ return StripLeadSlash(FullModernPath);
} else {
return ShortLegacyName;
}
diff --git a/ydb/library/persqueue/topic_parser/topic_parser.h b/ydb/library/persqueue/topic_parser/topic_parser.h
index c7e5b16f9f..3fec6e0f6a 100644
--- a/ydb/library/persqueue/topic_parser/topic_parser.h
+++ b/ydb/library/persqueue/topic_parser/topic_parser.h
@@ -79,7 +79,8 @@ public:
const TString& GetReason() const;
const TString& GetOriginalTopic() const;
TTopicConverterPtr UpgradeToFullConverter(const NKikimrPQ::TPQTabletConfig& pqTabletConfig,
- const TString& ydbDatabaseRootOverride);
+ const TString& ydbDatabaseRootOverride,
+ const TMaybe<TString>& clientsideNameOverride = {});
TString GetPrintableString() const;
@@ -117,6 +118,18 @@ public:
PrimaryPath = path;
}
+ void RestorePrimaryPath() {
+ Y_VERIFY(!OriginalPath.empty());
+ PrimaryPath = OriginalPath;
+ OriginalPath.clear();
+ }
+
+ // Only for control plane
+ const TString& GetFullModernName() const {
+ Y_VERIFY(!FullModernName.empty());
+ return FullModernName;
+ }
+
protected:
/** Account will be set for federation topics without database only;
* Generally used only for discovery purposes
@@ -172,7 +185,8 @@ protected:
const TString& pqPrefix,
//const TVector<TString>& rootDatabases,
const NKikimrPQ::TPQTabletConfig& pqTabletConfig,
- const TString& ydbDatabaseRootOverride);
+ const TString& ydbDatabaseRootOverride,
+ const TMaybe<TString>& clientsideNameOverride = {});
public:
static TTopicConverterPtr ForFirstClass(const NKikimrPQ::TPQTabletConfig& pqTabletConfig);
@@ -381,6 +395,7 @@ public:
};
TString NormalizeFullPath(const TString& fullPath);
+TString StripLeadSlash(const TString& path);
} // namespace NPersQueue
diff --git a/ydb/library/persqueue/topic_parser/ut/CMakeLists.txt b/ydb/library/persqueue/topic_parser/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/persqueue/topic_parser/ut/CMakeLists.txt
+++ b/ydb/library/persqueue/topic_parser/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/persqueue/topic_parser/ut/topic_names_converter_ut.cpp b/ydb/library/persqueue/topic_parser/ut/topic_names_converter_ut.cpp
index 368949b8c2..9caf5ee2f3 100644
--- a/ydb/library/persqueue/topic_parser/ut/topic_names_converter_ut.cpp
+++ b/ydb/library/persqueue/topic_parser/ut/topic_names_converter_ut.cpp
@@ -75,7 +75,7 @@ Y_UNIT_TEST_SUITE(DiscoveryConverterTest) {
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetShortLegacyName(), "account--topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetFullLegacyName(), "rt3.dc1--account--topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetDc(), "dc1");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "Root/PQ/rt3.dc1--account--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc1--account--topic");
wrapper.SetConverter("account--topic", "", "");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetFullLegacyName(), "rt3.dc1--account--topic");
@@ -88,7 +88,7 @@ Y_UNIT_TEST_SUITE(DiscoveryConverterTest) {
Y_UNIT_TEST(FullLegacyPath) {
TConverterTestWrapper wrapper(false, "/Root/PQ", TString("dc1"));
wrapper.SetConverter("/Root/PQ/rt3.dc1--account--topic", "", "/Root");
- //UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetInternalName(), "Root/PQ/rt3.dc1--account--topic");
+ //UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetInternalName(), "/Root/PQ/rt3.dc1--account--topic");
}
Y_UNIT_TEST(MinimalName) {
@@ -96,30 +96,30 @@ Y_UNIT_TEST_SUITE(DiscoveryConverterTest) {
wrapper.SetConverter("rt3.dc1--topic", "", "");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetShortLegacyName(), "topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetFullLegacyName(), "rt3.dc1--topic");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "Root/PQ/rt3.dc1--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc1--topic");
wrapper.SetConverter("topic", "", "");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetFullLegacyName(), "rt3.dc1--topic");
wrapper.SetConverter("topic", "dc2", "");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetFullLegacyName(), "rt3.dc2--topic");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "Root/PQ/rt3.dc2--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc2--topic");
}
Y_UNIT_TEST(FullLegacyNamesWithRootDatabase) {
TConverterTestWrapper wrapper(false, "/Root/PQ", TString("dc1"));
wrapper.SetConverter("rt3.dc1--account--topic", "", "/Root");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "Root/PQ/rt3.dc1--account--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc1--account--topic");
}
Y_UNIT_TEST(WithLogbrokerPath) {
TConverterTestWrapper wrapper(false, "/Root/PQ", TString("dc1"));
wrapper.SetConverter("account/topic", "", "");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "Root/PQ/rt3.dc1--account--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc1--account--topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetAccount(), "account");
wrapper.SetConverter("account/topic", "dc2", "/Root");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "Root/PQ/rt3.dc2--account--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc2--account--topic");
}
Y_UNIT_TEST(AccountDatabase) {
@@ -127,10 +127,10 @@ Y_UNIT_TEST_SUITE(DiscoveryConverterTest) {
wrapper.SetConverter("account/topic", "", "");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetAccount(), "account");
wrapper.SetDatabase("/database");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetSecondaryPath(""), "database/topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetSecondaryPath(""), "/database/topic");
wrapper.SetConverter("account2/topic2", "", "");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetSecondaryPath("database2"), "database2/topic2");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetSecondaryPath("database2"), "/database2/topic2");
UNIT_ASSERT_VALUES_EQUAL(wrapper.GetAccount(), "account2");
wrapper.SetConverter("rt3.dc1--account3--topic3", "", "");
@@ -145,13 +145,13 @@ Y_UNIT_TEST_SUITE(DiscoveryConverterTest) {
TConverterTestWrapper wrapper(true, "", "");
wrapper.SetConverter("account/stream", "", "/database");
wrapper.BasicFirstClassChecks();
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "database/account/stream");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/database/account/stream");
wrapper.SetConverter("/somedb/account/stream", "", "/somedb");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "somedb/account/stream");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/somedb/account/stream");
wrapper.SetConverter("/somedb2/account/stream", "", "");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "somedb2/account/stream");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.DiscoveryConverter->GetPrimaryPath(), "/somedb2/account/stream");
}
}
@@ -174,11 +174,35 @@ Y_UNIT_TEST_SUITE(TopicNameConverterTest) {
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetClientsideName(), "rt3.dc1--account--topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetModernName(), "topic");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetPrimaryPath(), "Root/PQ/rt3.dc1--account--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc1--account--topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetFederationPath(), "account/topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetInternalName(), "rt3.dc1--account--topic");
}
+ Y_UNIT_TEST(LegacyStyleDoubleName) {
+ TConverterTestWrapper wrapper(false, "/Root/PQ", "dc1");
+
+ NKikimrPQ::TPQTabletConfig pqConfig;
+ pqConfig.SetTopicName("rt3.dc1--account@account--account");
+ pqConfig.SetTopicPath("/Root/PQ/rt3.dc1--account@account--account");
+ pqConfig.SetFederationAccount("account");
+ pqConfig.SetLocalDC(true);
+ pqConfig.SetYdbDatabasePath("");
+ wrapper.SetConverter(pqConfig);
+
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetFederationPath(), "account/account/account");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetCluster(), "dc1");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetTopicForSrcId(), "rt3.dc1--account@account--account");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetTopicForSrcIdHash(), "account@account--account");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetClientsideName(), "rt3.dc1--account@account--account");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetModernName(), "account/account");
+
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc1--account@account--account");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetInternalName(), "rt3.dc1--account@account--account");
+ }
+
+
+
Y_UNIT_TEST(Paths) {
TConverterTestWrapper wrapper(false, "/Root/PQ", "dc1");
{
@@ -193,8 +217,8 @@ Y_UNIT_TEST_SUITE(TopicNameConverterTest) {
wrapper.SetConverter(pqConfig);
- UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetPrimaryPath(), "lb/account-database/path/topic");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetSecondaryPath(), "Root/PQ/rt3.dc1--account@path--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetPrimaryPath(), "/lb/account-database/path/topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetSecondaryPath(), "/Root/PQ/rt3.dc1--account@path--topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetModernName(), "path/topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetClientsideName(), "rt3.dc1--account@path--topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetFederationPath(), "account/path/topic");
@@ -205,21 +229,44 @@ Y_UNIT_TEST_SUITE(TopicNameConverterTest) {
NKikimrPQ::TPQTabletConfig pqConfig;
pqConfig.SetTopicName("rt3.dc2--account@path--topic");
pqConfig.SetLocalDC(false);
- pqConfig.SetTopicPath("/lb/account-database/path/.topic/mirrored-from-dc2");
+ pqConfig.SetTopicPath("/lb/account-database/path/topic-mirrored-from-dc2");
pqConfig.SetFederationAccount("account");
pqConfig.SetYdbDatabasePath("/lb/account-database");
wrapper.SetConverter(pqConfig);
- UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetPrimaryPath(), "lb/account-database/path/.topic/mirrored-from-dc2");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetSecondaryPath(), "Root/PQ/rt3.dc2--account@path--topic");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetModernName(), "path/.topic/mirrored-from-dc2");
+ UNIT_ASSERT_C(wrapper.TopicConverter->IsValid(), wrapper.TopicConverter->GetReason());
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetPrimaryPath(), "/lb/account-database/path/topic-mirrored-from-dc2");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetSecondaryPath(), "/Root/PQ/rt3.dc2--account@path--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetModernName(), "path/topic-mirrored-from-dc2");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetClientsideName(), "rt3.dc2--account@path--topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetFederationPath(), "account/path/topic");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetInternalName(), "rt3.dc2--account@path--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetTopicForSrcId(), "rt3.dc2--account@path--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetTopicForSrcIdHash(), "account@path--topic");
}
}
+ Y_UNIT_TEST(NoTopicName) {
+ TConverterTestWrapper wrapper(false, "/Root/PQ", "dc1");
+ {
+ NKikimrPQ::TPQTabletConfig pqConfig;
+ pqConfig.SetTopic("topic");
+ pqConfig.SetTopicPath("/Root/PQ/rt3.dc1--account@path--topic");
+ pqConfig.SetFederationAccount("account");
+ pqConfig.SetDC("dc1");
+ pqConfig.SetLocalDC(true);
+
+ wrapper.SetConverter(pqConfig);
+
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetPrimaryPath(), "/Root/PQ/rt3.dc1--account@path--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetModernName(), "path/topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetClientsideName(), "rt3.dc1--account@path--topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetFederationPath(), "account/path/topic");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetInternalName(), "rt3.dc1--account@path--topic");
+
+ }
+ }
Y_UNIT_TEST(FirstClass) {
TConverterTestWrapper wrapper(true, "", "");
@@ -235,7 +282,7 @@ Y_UNIT_TEST_SUITE(TopicNameConverterTest) {
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetTopicForSrcIdHash(), "lb/database/my-stream");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetModernName(), "my-stream");
UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetFederationPath(), "my-stream");
- UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetInternalName(), "lb/database/my-stream");
+ UNIT_ASSERT_VALUES_EQUAL(wrapper.TopicConverter->GetInternalName(), "/lb/database/my-stream");
}
}
@@ -247,7 +294,7 @@ Y_UNIT_TEST_SUITE(TopicNameConverterForCPTest) {
UNIT_ASSERT_VALUES_EQUAL(converter->GetCluster(), "sas");
UNIT_ASSERT_VALUES_EQUAL(converter->GetLegacyProducer(), "account");
UNIT_ASSERT_VALUES_EQUAL(converter->GetLegacyLogtype(), "topic");
- UNIT_ASSERT_VALUES_EQUAL(converter->GetPrimaryPath(), "Root/PQ/rt3.sas--account--topic");
+ UNIT_ASSERT_VALUES_EQUAL(converter->GetPrimaryPath(), "/Root/PQ/rt3.sas--account--topic");
UNIT_ASSERT_VALUES_EQUAL(converter->GetInternalName(), "rt3.sas--account--topic");
converter = TTopicNameConverter::ForFederation("/Root/PQ", "", "rt3.sas--account@dir--topic", "/Root/PQ", "/Root", false);
@@ -256,7 +303,7 @@ Y_UNIT_TEST_SUITE(TopicNameConverterForCPTest) {
UNIT_ASSERT_VALUES_EQUAL(converter->GetCluster(), "sas");
UNIT_ASSERT_VALUES_EQUAL(converter->GetLegacyProducer(), "account@dir");
UNIT_ASSERT_VALUES_EQUAL(converter->GetLegacyLogtype(), "topic");
- UNIT_ASSERT_VALUES_EQUAL(converter->GetPrimaryPath(), "Root/PQ/rt3.sas--account@dir--topic");
+ UNIT_ASSERT_VALUES_EQUAL(converter->GetPrimaryPath(), "/Root/PQ/rt3.sas--account@dir--topic");
UNIT_ASSERT_VALUES_EQUAL(converter->GetInternalName(), "rt3.sas--account@dir--topic");
}
@@ -278,17 +325,17 @@ Y_UNIT_TEST_SUITE(TopicNameConverterForCPTest) {
UNIT_ASSERT_VALUES_EQUAL(converter->GetCluster(), "sas");
UNIT_ASSERT_VALUES_EQUAL(converter->GetLegacyProducer(), "account");
UNIT_ASSERT_VALUES_EQUAL(converter->GetLegacyLogtype(), "topic");
- UNIT_ASSERT_VALUES_EQUAL(converter->GetPrimaryPath(), "LbCommunal/account/topic");
+ UNIT_ASSERT_VALUES_EQUAL(converter->GetPrimaryPath(), "/LbCommunal/account/topic");
converter = TTopicNameConverter::ForFederation(
- "/Root/PQ", "", "mirrored-from-sas", "/LbCommunal/account/dir/.topic", "/LbCommunal/account", false, "", "account"
+ "/Root/PQ", "", "topic-mirrored-from-sas", "/LbCommunal/account/dir", "/LbCommunal/account", false, "", "account"
);
UNIT_ASSERT_C(converter->IsValid(), converter->GetReason());
UNIT_ASSERT_VALUES_EQUAL(converter->GetAccount(), "account");
UNIT_ASSERT_VALUES_EQUAL(converter->GetCluster(), "sas");
UNIT_ASSERT_VALUES_EQUAL(converter->GetLegacyProducer(), "account@dir");
UNIT_ASSERT_VALUES_EQUAL(converter->GetLegacyLogtype(), "topic");
- UNIT_ASSERT_VALUES_EQUAL(converter->GetPrimaryPath(), "LbCommunal/account/dir/.topic/mirrored-from-sas");
+ UNIT_ASSERT_VALUES_EQUAL(converter->GetPrimaryPath(), "/LbCommunal/account/dir/topic-mirrored-from-sas");
}
Y_UNIT_TEST(BadModernTopics) {
@@ -308,7 +355,12 @@ Y_UNIT_TEST_SUITE(TopicNameConverterForCPTest) {
UNIT_ASSERT(!converter->IsValid());
converter = TTopicNameConverter::ForFederation(
- "", "", "mirrored-from-sas", "/LbCommunal/account/.topic", "/LbCommunal/account", true, "sas", "account"
+ "", "", "topic-mirrored-from-sas", "/LbCommunal/account", "/LbCommunal/account", true, "sas", "account"
+ );
+ UNIT_ASSERT(!converter->IsValid());
+
+ converter = TTopicNameConverter::ForFederation(
+ "", "", "topic-mirrored-from-", "/LbCommunal/account", "/LbCommunal/account", true, "sas", "account"
);
UNIT_ASSERT(!converter->IsValid());
diff --git a/ydb/library/pretty_types_print/CMakeLists.txt b/ydb/library/pretty_types_print/CMakeLists.txt
new file mode 100644
index 0000000000..2dfdbaa716
--- /dev/null
+++ b/ydb/library/pretty_types_print/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(protobuf)
+add_subdirectory(wilson)
diff --git a/ydb/library/protobuf_printer/CMakeLists.txt b/ydb/library/protobuf_printer/CMakeLists.txt
index 081c1bc36f..074e844012 100644
--- a/ydb/library/protobuf_printer/CMakeLists.txt
+++ b/ydb/library/protobuf_printer/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-library-protobuf_printer)
target_link_libraries(ydb-library-protobuf_printer PUBLIC
diff --git a/ydb/library/protobuf_printer/ut/CMakeLists.txt b/ydb/library/protobuf_printer/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/protobuf_printer/ut/CMakeLists.txt
+++ b/ydb/library/protobuf_printer/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/schlab/CMakeLists.txt b/ydb/library/schlab/CMakeLists.txt
index 517a75edb0..4a168df062 100644
--- a/ydb/library/schlab/CMakeLists.txt
+++ b/ydb/library/schlab/CMakeLists.txt
@@ -6,6 +6,13 @@
# original buildsystem will not be accepted.
+add_subdirectory(mon)
+add_subdirectory(probes)
+add_subdirectory(protos)
+add_subdirectory(schemu)
+add_subdirectory(schine)
+add_subdirectory(schoot)
+add_subdirectory(ut)
add_library(ydb-library-schlab)
target_link_libraries(ydb-library-schlab PUBLIC
diff --git a/ydb/library/schlab/mon/CMakeLists.txt b/ydb/library/schlab/mon/CMakeLists.txt
index 0a70a9c4ff..48c26185e9 100644
--- a/ydb/library/schlab/mon/CMakeLists.txt
+++ b/ydb/library/schlab/mon/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(static)
+add_subdirectory(test)
add_library(library-schlab-mon)
target_link_libraries(library-schlab-mon PUBLIC
diff --git a/ydb/library/schlab/mon/static/CMakeLists.txt b/ydb/library/schlab/mon/static/CMakeLists.txt
index e7df6186c1..251aeb5314 100644
--- a/ydb/library/schlab/mon/static/CMakeLists.txt
+++ b/ydb/library/schlab/mon/static/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(css)
+add_subdirectory(js)
add_library(schlab-mon-static INTERFACE)
target_link_libraries(schlab-mon-static INTERFACE
diff --git a/ydb/library/schlab/mon/test/CMakeLists.txt b/ydb/library/schlab/mon/test/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/schlab/mon/test/CMakeLists.txt
+++ b/ydb/library/schlab/mon/test/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/schlab/ut/CMakeLists.txt b/ydb/library/schlab/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/schlab/ut/CMakeLists.txt
+++ b/ydb/library/schlab/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/security/CMakeLists.txt b/ydb/library/security/CMakeLists.txt
index ab1ed77718..dde8aa446f 100644
--- a/ydb/library/security/CMakeLists.txt
+++ b/ydb/library/security/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-library-security)
target_link_libraries(ydb-library-security PUBLIC
diff --git a/ydb/library/security/ut/CMakeLists.txt b/ydb/library/security/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/security/ut/CMakeLists.txt
+++ b/ydb/library/security/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yaml_config/yaml_config_parser.cpp b/ydb/library/yaml_config/yaml_config_parser.cpp
index 87ef842937..fa6f573910 100644
--- a/ydb/library/yaml_config/yaml_config_parser.cpp
+++ b/ydb/library/yaml_config/yaml_config_parser.cpp
@@ -18,8 +18,25 @@ namespace NKikimr::NYaml {
return false;
}
+ static const TString& GetStringSafe(const NJson::TJsonValue& json, const TStringBuf& key) {
+ auto& value = json[key];
+ Y_ENSURE_BT(value.IsString(), "Unexpected value for key: " << key << ", expected string value.");
+ return value.GetStringSafe();
+ }
+
+ static ui64 GetUnsignedIntegerSafe(const NJson::TJsonValue& json, const TStringBuf& key) {
+ Y_ENSURE_BT(json.Has(key), "Value is not set for key: " << key);
+ auto& value = json[key];
+ Y_ENSURE_BT(value.IsUInteger(), "Unexpected value for key: " << key << ", expected integer value.");
+ return value.GetUIntegerSafe();
+ }
+
+ void EnsureJsonFieldIsArray(const NJson::TJsonValue& json, const TStringBuf& key) {
+ Y_ENSURE_BT(json.Has(key) && json[key].IsArray(), "Array field `" << key << "` must be specified.");
+ }
+
NJson::TJsonValue Yaml2Json(const YAML::Node& yaml, bool isRoot) {
- Y_ENSURE(!isRoot || yaml.IsMap(), "YAML root is expected to be a map");
+ Y_ENSURE_BT(!isRoot || yaml.IsMap(), "YAML root is expected to be a map");
NJson::TJsonValue json;
@@ -27,7 +44,7 @@ namespace NKikimr::NYaml {
for (const auto& it : yaml) {
const auto& key = it.first.as<TString>();
- Y_ENSURE(!json.Has(key), "Duplicate key entry: " << key);
+ Y_ENSURE_BT(!json.Has(key), "Duplicate key entry: " << key);
json[key] = Yaml2Json(it.second, false);
}
@@ -76,7 +93,7 @@ namespace NKikimr::NYaml {
}
static NJson::TJsonValue BuildDefaultChannels(NJson::TJsonValue& json) {
- TString erasureName = json["static_erasure"].GetStringSafe();
+ const TString& erasureName = GetStringSafe(json, "static_erasure");
NJson::TJsonValue channelsInfo;
channelsInfo.SetType(NJson::EJsonValueType::JSON_ARRAY);
for(ui32 channelId = 0; channelId < 3; ++channelId) {
@@ -121,7 +138,7 @@ namespace NKikimr::NYaml {
return cnt;
}
}
- Y_ENSURE(false, "unknown tablet " << type);
+ Y_ENSURE_BT(false, "unknown tablet " << type);
}
bool isUnique(TString& type) {
@@ -138,10 +155,10 @@ namespace NKikimr::NYaml {
}
TString HostAndICPort(const NJson::TJsonValue& host) {
- TString hostname = host["host"].GetStringSafe();
+ TString hostname = GetStringSafe(host, "host");
ui32 InterconnectPort = 19001;
if (host.Has("port")) {
- InterconnectPort = host["port"].GetUIntegerSafe();
+ InterconnectPort = GetUnsignedIntegerSafe(host, "port");
}
return TStringBuilder() << hostname << ":" << InterconnectPort;
@@ -151,7 +168,7 @@ namespace NKikimr::NYaml {
ui32 foundCandidates = 0;
NJson::TJsonValue result;
for(auto& host: json["nameservice_config"]["node"].GetArraySafe()) {
- if (data == host["host"].GetStringSafe()) {
+ if (data == GetStringSafe(host, "host")) {
result = host;
++foundCandidates;
}
@@ -169,7 +186,7 @@ namespace NKikimr::NYaml {
}
}
- Y_ENSURE(foundCandidates == 1, "Cannot find node_id for " << data);
+ Y_ENSURE_BT(foundCandidates == 1, "Cannot find node_id for " << data);
return result;
}
@@ -178,8 +195,9 @@ namespace NKikimr::NYaml {
return host.GetUIntegerSafe();
}
+ Y_ENSURE_BT(host.IsString(), "host value must be either integer or string.");
auto node = FindNodeByString(json, host.GetStringSafe());
- return node["node_id"].GetUIntegerSafe();
+ return GetUnsignedIntegerSafe(node, "node_id");
}
ui64 GetNextTabletID(TString& type, ui32 idx) {
@@ -197,14 +215,12 @@ namespace NKikimr::NYaml {
};
auto it = tablets.find(type);
- Y_ENSURE(it != tablets.end());
+ Y_ENSURE_BT(it != tablets.end());
return it->second;
}
const NJson::TJsonArray::TArray& GetTabletsFor(NJson::TJsonValue& json, TString type) {
auto& systemTabletsConfig = json["system_tablets"];
- Y_ENSURE(json.Has("static_erasure"));
- TString erasureName = json["static_erasure"].GetStringSafe();
TString toLowerType = to_lower(type);
if (!systemTabletsConfig.Has(toLowerType)) {
@@ -232,12 +248,12 @@ namespace NKikimr::NYaml {
tablet.InsertValue("type", type);
}
- Y_ENSURE(tablet["node"].IsArray());
+ EnsureJsonFieldIsArray(tablet, "node");
NJson::TJsonValue& tabletInfo = tablet["info"];
if (!tabletInfo.Has("tablet_id")) {
- Y_ENSURE(idx <= GetDefaultTabletCount(type));
+ Y_ENSURE_BT(idx <= GetDefaultTabletCount(type));
tabletInfo.InsertValue("tablet_id", NJson::TJsonValue(GetNextTabletID(type, idx)));
}
@@ -262,7 +278,7 @@ namespace NKikimr::NYaml {
if (!config.Has(fieldName)) {
ui32 executorID = 0;
for(const auto& executor: executors.GetArraySafe()) {
- if (to_lower(executor["name"].GetStringSafe()) == to_lower(name)) {
+ if (to_lower(GetStringSafe(executor, "name")) == to_lower(name)) {
config.InsertValue(fieldName, executorID);
break;
}
@@ -271,7 +287,7 @@ namespace NKikimr::NYaml {
}
}
- Y_ENSURE(config.Has(fieldName), "cannot deduce executor id for " << fieldName);
+ Y_ENSURE_BT(config.Has(fieldName), "cannot deduce executor id for " << fieldName);
}
if (!config.Has("service_executor")) {
@@ -280,7 +296,7 @@ namespace NKikimr::NYaml {
ui32 executorID = 0;
for(const auto& executor: executors.GetArraySafe()) {
- if (to_lower(executor["name"].GetStringSafe()) == "ic") {
+ if (to_lower(GetStringSafe(executor, "name")) == "ic") {
NJson::TJsonValue val;
val.InsertValue("service_name", "Interconnect");
val.InsertValue("executor_id", executorID);
@@ -301,12 +317,12 @@ namespace NKikimr::NYaml {
return 2;
}
- Y_ENSURE(false, "unknown pdisk category " << data);
+ Y_ENSURE_BT(false, "unknown pdisk category " << data);
}
ui32 ErasureStrToNum(const TString& info) {
TErasureType::EErasureSpecies species = TErasureType::ErasureSpeciesByName(info);
- Y_ENSURE(species != TErasureType::ErasureSpeciesCount, "unknown erasure " << info);
+ Y_ENSURE_BT(species != TErasureType::ErasureSpeciesCount, "unknown erasure " << info);
return species;
}
@@ -316,7 +332,7 @@ namespace NKikimr::NYaml {
}
auto& config = json["blob_storage_config"];
- Y_ENSURE(config["service_set"].IsMap());
+ Y_ENSURE_BT(config["service_set"].IsMap(), "service_set field in blob_storage_config must be json map.");
auto& serviceSet = config["service_set"];
if (!serviceSet.Has("availability_domains")) {
@@ -326,7 +342,7 @@ namespace NKikimr::NYaml {
serviceSet.InsertValue("availability_domains", arr);
}
- Y_ENSURE(serviceSet.Has("groups"));
+ Y_ENSURE_BT(serviceSet.Has("groups"), "groups field should be specified in service_set field of blob_storage_config");
auto& groups = serviceSet["groups"];
bool shouldFillVdisks = !serviceSet.Has("vdisks");
auto& vdisksServiceSet = serviceSet["vdisks"];
@@ -351,18 +367,17 @@ namespace NKikimr::NYaml {
group.InsertValue("group_id", NJson::TJsonValue(groupID));
}
- ui32 groupID = group["group_id"].GetUIntegerSafe();
- ui32 groupGeneration = group["group_generation"].GetUIntegerSafe();
- Y_ENSURE(group.Has("erasure_species"));
+ ui32 groupID = GetUnsignedIntegerSafe(group, "group_id");
+ ui32 groupGeneration = GetUnsignedIntegerSafe(group, "group_generation");
+ Y_ENSURE_BT(group.Has("erasure_species"), "erasure species are not specified for group, id " << groupID);
if (group["erasure_species"].IsString()) {
- auto species = group["erasure_species"].GetStringSafe();
+ auto species = GetStringSafe(group, "erasure_species");
ui32 num = ErasureStrToNum(species);
group.EraseValue("erasure_species");
group.InsertValue("erasure_species", NJson::TJsonValue(num));
}
- Y_ENSURE(group.Has("rings"));
- Y_ENSURE(group["rings"].IsArray());
+ EnsureJsonFieldIsArray(group, "rings");
auto& ringsInfo = group["rings"].GetArraySafe();
@@ -371,22 +386,22 @@ namespace NKikimr::NYaml {
std::unordered_map<ui32, std::unordered_set<ui32>> UniquePdiskGuids;
for(auto& ring: ringsInfo) {
- Y_ENSURE(ring["fail_domains"].IsArray());
+ EnsureJsonFieldIsArray(ring, "fail_domains");
auto& failDomains = ring["fail_domains"].GetArraySafe();
ui32 failDomainID = 0;
for(auto& failDomain: failDomains) {
- Y_ENSURE(failDomain["vdisk_locations"].IsArray());
- Y_ENSURE(failDomain["vdisk_locations"].GetArraySafe().size() == 1);
+ EnsureJsonFieldIsArray(failDomain, "vdisk_locations");
+ Y_ENSURE_BT(failDomain["vdisk_locations"].GetArraySafe().size() == 1);
for(auto& vdiskLocation: failDomain["vdisk_locations"].GetArraySafe()) {
- Y_ENSURE(vdiskLocation.Has("node_id"));
+ Y_ENSURE_BT(vdiskLocation.Has("node_id"));
vdiskLocation.InsertValue("node_id", FindNodeId(json, vdiskLocation["node_id"]));
if (!vdiskLocation.Has("vdisk_slot_id")) {
vdiskLocation.InsertValue("vdisk_slot_id", NJson::TJsonValue(0));
}
- ui64 myNodeId = vdiskLocation["node_id"].GetUIntegerSafe();
+ ui64 myNodeId = GetUnsignedIntegerSafe(vdiskLocation, "node_id");
if (!vdiskLocation.Has("pdisk_guid")) {
for(ui32 pdiskGuid = 1; ; pdiskGuid++) {
if (UniquePdiskGuids[myNodeId].find(pdiskGuid) == UniquePdiskGuids[myNodeId].end()) {
@@ -396,7 +411,11 @@ namespace NKikimr::NYaml {
}
}
- Y_ENSURE(UniquePdiskGuids[myNodeId].insert(vdiskLocation["pdisk_guid"].GetUIntegerSafe()).second, "pdisk guids should be unique");
+ {
+ ui64 guid = GetUnsignedIntegerSafe(vdiskLocation, "pdisk_guid");
+ auto [it, success] = UniquePdiskGuids[myNodeId].insert(guid);
+ Y_ENSURE_BT(success, "pdisk guids should be unique, non-unique guid is " << guid);
+ }
if (!vdiskLocation.Has("pdisk_id")) {
for(ui32 pdiskID = 1; ; pdiskID++) {
@@ -407,7 +426,11 @@ namespace NKikimr::NYaml {
}
}
- Y_ENSURE(UniquePdiskIds[myNodeId].insert(vdiskLocation["pdisk_id"].GetUIntegerSafe()).second, "pdisk ids should be unique");
+ {
+ ui64 pdiskId = GetUnsignedIntegerSafe(vdiskLocation, "pdisk_id");
+ auto [it, success] = UniquePdiskIds[myNodeId].insert(pdiskId);
+ Y_ENSURE_BT(success, "pdisk ids should be unique, non unique pdisk_id : " << pdiskId);
+ }
if (shouldFillPdisks) {
NJson::TJsonValue pdiskInfo = vdiskLocation;
@@ -417,7 +440,7 @@ namespace NKikimr::NYaml {
if (pdiskInfo.Has("pdisk_category")) {
if (pdiskInfo["pdisk_category"].IsString()) {
- auto cat = pdiskInfo["pdisk_category"].GetStringSafe();
+ auto cat = GetStringSafe(pdiskInfo, "pdisk_category");
pdiskInfo.InsertValue("pdisk_category", NJson::TJsonValue(PdiskCategoryFromString(cat)));
}
}
@@ -471,12 +494,12 @@ namespace NKikimr::NYaml {
}
if (!json["system_tablets"].Has("default_node")) {
- Y_ENSURE(json["nameservice_config"]["node"].IsArray());
+ Y_ENSURE_BT(json["nameservice_config"]["node"].IsArray());
auto& config = json["system_tablets"]["default_node"];
config.SetType(NJson::EJsonValueType::JSON_ARRAY);
for(auto node: json["nameservice_config"]["node"].GetArraySafe()) {
- Y_ENSURE(node["node_id"].IsUInteger(), "node_id must be specified");
+ Y_ENSURE_BT(node["node_id"].IsUInteger(), "node_id must be specified");
auto nodeId = node["node_id"];
config.AppendValue(nodeId);
}
@@ -506,14 +529,14 @@ namespace NKikimr::NYaml {
void PrepareDomainsConfig(NJson::TJsonValue& json) {
- Y_ENSURE(json.Has("domains_config"));
- Y_ENSURE(json["domains_config"].IsMap());
+ Y_ENSURE_BT(json.Has("domains_config"));
+ Y_ENSURE_BT(json["domains_config"].IsMap());
NJson::TJsonValue& domainsConfig = json["domains_config"];
- Y_ENSURE(domainsConfig.Has("domain"));
+ Y_ENSURE_BT(domainsConfig.Has("domain"));
NJson::TJsonValue& domains = domainsConfig["domain"];
- Y_ENSURE(domains.GetArraySafe().size() == 1);
+ Y_ENSURE_BT(domains.GetArraySafe().size() == 1);
if (!domainsConfig.Has("hive_config")) {
auto& hiveConfig = domainsConfig["hive_config"];
@@ -526,10 +549,10 @@ namespace NKikimr::NYaml {
}
for(NJson::TJsonValue& domain: domains.GetArraySafe()) {
- Y_ENSURE(domain.Has("name"));
+ Y_ENSURE_BT(domain.Has("name"));
if (domain.Has("domain_id")) {
- Y_ENSURE(domain["domain_id"].GetUIntegerSafe() == 1);
+ Y_ENSURE_BT(GetUnsignedIntegerSafe(domain, "domain_id") == 1);
} else {
domain.InsertValue("domain_id", std::move(NJson::TJsonValue(static_cast<ui64>(1))));
}
@@ -542,7 +565,7 @@ namespace NKikimr::NYaml {
domain.InsertValue("plan_resolution", std::move(NJson::TJsonValue(10)));
}
- Y_ENSURE(domain.Has("plan_resolution"));
+ Y_ENSURE_BT(domain.Has("plan_resolution"));
if (!domain.Has("hive_uid")) {
auto& hiveUids = domain["hive_uid"];
@@ -558,19 +581,19 @@ namespace NKikimr::NYaml {
const std::vector<std::pair<TString, TString>> exps = {{"explicit_coordinators", "FLAT_TX_COORDINATOR"}, {"explicit_allocators", "TX_ALLOCATOR"}, {"explicit_mediators", "TX_MEDIATOR"}};
for(auto [field, type] : exps) {
- Y_ENSURE(!domain.Has(field));
+ Y_ENSURE_BT(!domain.Has(field));
auto& arr = domain[field];
arr.SetType(NJson::EJsonValueType::JSON_ARRAY);
for(auto tablet: GetTabletsFor(json, type)) {
- arr.AppendValue(tablet["info"]["tablet_id"].GetUIntegerSafe());
+ arr.AppendValue(GetUnsignedIntegerSafe(tablet["info"], "tablet_id"));
}
}
}
}
void PrepareSecurityConfig(NJson::TJsonValue& json) {
- Y_ENSURE(json.Has("domains_config"));
- Y_ENSURE(json["domains_config"].IsMap());
+ Y_ENSURE_BT(json.Has("domains_config"));
+ Y_ENSURE_BT(json["domains_config"].IsMap());
bool disabledDefaultSecurity = false;
NJson::TJsonValue& domainsConfig = json["domains_config"];
@@ -584,11 +607,11 @@ namespace NKikimr::NYaml {
if (securityConfig.Has("default_users")) {
NJson::TJsonValue& defaultUsers = securityConfig["default_users"];
- Y_ENSURE(defaultUsers.IsArray());
- Y_ENSURE(defaultUsers.GetArraySafe().size() > 0);
+ Y_ENSURE_BT(defaultUsers.IsArray());
+ Y_ENSURE_BT(defaultUsers.GetArraySafe().size() > 0);
NJson::TJsonValue& defaultUser = defaultUsers.GetArraySafe()[0];
- Y_ENSURE(defaultUser.IsMap());
- defaultUserName = defaultUser["password"].GetStringRobust();
+ Y_ENSURE_BT(defaultUser.IsMap());
+ defaultUserName = defaultUser["name"].GetStringRobust();
} else if (!disabledDefaultSecurity) {
NJson::TJsonValue& defaultUser = securityConfig["default_users"].AppendValue({});
defaultUser["name"] = defaultUserName = "root";
@@ -673,7 +696,7 @@ namespace NKikimr::NYaml {
void PrepareNameserviceConfig(NJson::TJsonValue& json) {
if (json.Has("nameservice_config")) {
- Y_ENSURE(json["nameservice_config"].IsMap());
+ Y_ENSURE_BT(json["nameservice_config"].IsMap());
if (json["nameservice_config"].Has("node")) {
return;
}
@@ -696,7 +719,7 @@ namespace NKikimr::NYaml {
auto& nodes = config["node"];
- Y_ENSURE(json["hosts"].IsArray());
+ EnsureJsonFieldIsArray(json, "hosts");
ui32 nodeID = 0;
for(auto& host : json["hosts"].GetArraySafe()) {
@@ -771,7 +794,9 @@ namespace NKikimr::NYaml {
NKikimrBlobStorage::TConfigRequest BuildInitDistributedStorageCommand(const TString& data) {
auto yamlNode = YAML::Load(data);
NJson::TJsonValue json = Yaml2Json(yamlNode, true);
- Y_ENSURE(json.Has("hosts"));
+ Y_ENSURE_BT(json.Has("hosts") && json["hosts"].IsArray(), "Specify hosts list to use blobstorage init command");
+ Y_ENSURE_BT(json["host_configs"].IsArray(), "Specify host_configs to use blobstorage init command");
+
PrepareNameserviceConfig(json);
NKikimrBlobStorage::TConfigRequest result;
@@ -784,20 +809,17 @@ namespace NKikimr::NYaml {
auto *defineBox = result.AddCommand()->MutableDefineBox();
defineBox->SetBoxId(1);
if (json.Has("storage_config_generation")) {
- defineBox->SetItemConfigGeneration(json["storage_config_generation"].GetUIntegerSafe());
+ defineBox->SetItemConfigGeneration(GetUnsignedIntegerSafe(json, "storage_config_generation"));
} else {
defineBox->SetItemConfigGeneration(0);
}
- Y_ENSURE(json["hosts"].IsArray());
- Y_ENSURE(json["host_configs"].IsArray());
-
for(auto jsonHost: json["hosts"].GetArraySafe()) {
auto* host = defineBox->AddHost();
host->MutableKey()->SetNodeId(FindNodeId(json, jsonHost["node_id"]));
- host->MutableKey()->SetFqdn(jsonHost["host"].GetStringSafe());
- host->MutableKey()->SetIcPort(jsonHost["port"].GetUIntegerSafe());
- host->SetHostConfigId(jsonHost["host_config_id"].GetUIntegerSafe());
+ host->MutableKey()->SetFqdn(GetStringSafe(jsonHost, "host"));
+ host->MutableKey()->SetIcPort(GetUnsignedIntegerSafe(jsonHost, "port"));
+ host->SetHostConfigId(GetUnsignedIntegerSafe(jsonHost, "host_config_id"));
}
return result;
diff --git a/ydb/library/yql/CMakeLists.txt b/ydb/library/yql/CMakeLists.txt
new file mode 100644
index 0000000000..f2c776dfda
--- /dev/null
+++ b/ydb/library/yql/CMakeLists.txt
@@ -0,0 +1,19 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(ast)
+add_subdirectory(core)
+add_subdirectory(dq)
+add_subdirectory(minikql)
+add_subdirectory(parser)
+add_subdirectory(protos)
+add_subdirectory(providers)
+add_subdirectory(public)
+add_subdirectory(sql)
+add_subdirectory(udfs)
+add_subdirectory(utils)
diff --git a/ydb/library/yql/ast/CMakeLists.txt b/ydb/library/yql/ast/CMakeLists.txt
index 3968bd3ef0..724ee28894 100644
--- a/ydb/library/yql/ast/CMakeLists.txt
+++ b/ydb/library/yql/ast/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(serialize)
+add_subdirectory(ut)
add_library(library-yql-ast)
target_link_libraries(library-yql-ast PUBLIC
diff --git a/ydb/library/yql/ast/ut/CMakeLists.txt b/ydb/library/yql/ast/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/ast/ut/CMakeLists.txt
+++ b/ydb/library/yql/ast/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/core/CMakeLists.txt b/ydb/library/yql/core/CMakeLists.txt
index 1938149266..4e2113b6e3 100644
--- a/ydb/library/yql/core/CMakeLists.txt
+++ b/ydb/library/yql/core/CMakeLists.txt
@@ -6,6 +6,18 @@
# original buildsystem will not be accepted.
+add_subdirectory(common_opt)
+add_subdirectory(expr_nodes)
+add_subdirectory(expr_nodes_gen)
+add_subdirectory(extract_predicate)
+add_subdirectory(facade)
+add_subdirectory(file_storage)
+add_subdirectory(issue)
+add_subdirectory(peephole_opt)
+add_subdirectory(services)
+add_subdirectory(sql_types)
+add_subdirectory(type_ann)
+add_subdirectory(user_data)
add_library(library-yql-core)
target_compile_options(library-yql-core PRIVATE
@@ -35,6 +47,7 @@ target_link_libraries(library-yql-core PUBLIC
tools-enum_parser-enum_serialization_runtime
)
target_sources(library-yql-core PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_aggregate_expander.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_callable_transform.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_csv.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_execution.cpp
@@ -47,7 +60,6 @@ target_sources(library-yql-core PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_holding_file_storage.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_join.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_library_compiler.cpp
- ${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_opt_aggregate.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_opt_proposed_by_data.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_opt_range.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/core/yql_opt_rewrite_io.cpp
diff --git a/ydb/library/yql/core/common_opt/yql_co_extr_members.cpp b/ydb/library/yql/core/common_opt/yql_co_extr_members.cpp
index aeba710603..98c428f454 100644
--- a/ydb/library/yql/core/common_opt/yql_co_extr_members.cpp
+++ b/ydb/library/yql/core/common_opt/yql_co_extr_members.cpp
@@ -719,7 +719,17 @@ TExprNode::TPtr ApplyExtractMembersToAggregate(const TExprNode::TPtr& node, cons
if (handler.DistinctName()) {
usedFields.insert(handler.DistinctName().Cast().Value());
} else {
- auto structType = handler.Trait().ItemType().Ref().GetTypeAnn()->Cast<TTypeExprType>()->GetType()->Cast<TStructExprType>();
+ const auto& trait = handler.Trait().Ref();
+ ui32 index;
+ if (trait.IsCallable("AggregationTraits")) {
+ index = 0;
+ } else if (trait.IsCallable("AggApply")) {
+ index = 1;
+ } else {
+ return {};
+ }
+
+ auto structType = trait.Child(index)->GetTypeAnn()->Cast<TTypeExprType>()->GetType()->Cast<TStructExprType>();
for (const auto& item : structType->GetItems()) {
usedFields.insert(item->GetName());
}
diff --git a/ydb/library/yql/core/common_opt/yql_co_flow1.cpp b/ydb/library/yql/core/common_opt/yql_co_flow1.cpp
index d15804a305..251ccc1efa 100644
--- a/ydb/library/yql/core/common_opt/yql_co_flow1.cpp
+++ b/ydb/library/yql/core/common_opt/yql_co_flow1.cpp
@@ -1270,76 +1270,112 @@ TExprNode::TPtr CountAggregateRewrite(const TCoAggregate& node, TExprContext& ct
auto traits = aggregatedColumn.Ref().Child(1);
auto outputColumn = aggregatedColumn.Ref().HeadPtr();
- // validation of traits
- auto inputItemType = traits->Head().GetTypeAnn()->Cast<TTypeExprType>()->GetType();
- const bool isOptionalColumn = inputItemType->GetKind() == ETypeAnnotationKind::Optional;
- auto init = TCoLambda(traits->Child(1));
+ // validation of traits
+ const TTypeAnnotationNode* inputItemType;
bool onlyColumn = true;
bool onlyZero = true;
TExprNode::TPtr initVal;
- TExprNode::TPtr updateVal;
- if (init.Body().Ref().IsCallable("Uint64") &&
- init.Body().Ref().Head().Content() == "1") {
- onlyZero = false;
- } else if (init.Body().Ref().IsCallable("Uint64") &&
- init.Body().Ref().Head().Content() == "0") {
- onlyColumn = false;
- } else if (init.Body().Ref().IsCallable("AggrCountInit")) {
- initVal = init.Body().Ref().HeadPtr();
- onlyColumn = onlyColumn && init.Body().Ref().Child(0) == init.Args().Arg(0).Raw();
- onlyZero = false;
- } else {
- return node.Ptr();
- }
+ if (traits->IsCallable("AggregationTraits")) {
+ inputItemType = traits->Head().GetTypeAnn()->Cast<TTypeExprType>()->GetType();
+
+ auto init = TCoLambda(traits->Child(1));
+ TExprNode::TPtr updateVal;
+ if (init.Body().Ref().IsCallable("Uint64") &&
+ init.Body().Ref().Head().Content() == "1") {
+ onlyZero = false;
+ } else if (init.Body().Ref().IsCallable("Uint64") &&
+ init.Body().Ref().Head().Content() == "0") {
+ onlyColumn = false;
+ } else if (init.Body().Ref().IsCallable("AggrCountInit")) {
+ initVal = init.Body().Ref().HeadPtr();
+ onlyColumn = onlyColumn && init.Body().Ref().Child(0) == init.Args().Arg(0).Raw();
+ onlyZero = false;
+ } else {
+ return node.Ptr();
+ }
- auto update = TCoLambda(traits->Child(2));
- auto inc = update.Body().Ptr();
- if (inc->IsCallable("Inc") && inc->Child(0) == update.Args().Arg(1).Raw()) {
- onlyZero = false;
- } else if (inc->IsCallable("AggrCountUpdate") && inc->Child(1) == update.Args().Arg(1).Raw()) {
- updateVal = inc->HeadPtr();
- onlyColumn = onlyColumn && inc->Child(0) == update.Args().Arg(0).Raw();
- onlyZero = false;
- } else if (inc == update.Args().Arg(1).Raw()) {
- onlyColumn = false;
- } else {
- return node.Ptr();
- }
+ auto update = TCoLambda(traits->Child(2));
+ auto inc = update.Body().Ptr();
+ if (inc->IsCallable("Inc") && inc->Child(0) == update.Args().Arg(1).Raw()) {
+ onlyZero = false;
+ } else if (inc->IsCallable("AggrCountUpdate") && inc->Child(1) == update.Args().Arg(1).Raw()) {
+ updateVal = inc->HeadPtr();
+ onlyColumn = onlyColumn && inc->Child(0) == update.Args().Arg(0).Raw();
+ onlyZero = false;
+ } else if (inc == update.Args().Arg(1).Raw()) {
+ onlyColumn = false;
+ } else {
+ return node.Ptr();
+ }
- auto save = TCoLambda(traits->Child(3));
- if (save.Body().Raw() != save.Args().Arg(0).Raw()) {
- return node.Ptr();
- }
+ auto save = TCoLambda(traits->Child(3));
+ if (save.Body().Raw() != save.Args().Arg(0).Raw()) {
+ return node.Ptr();
+ }
- auto load = TCoLambda(traits->Child(4));
- if (load.Body().Raw() != load.Args().Arg(0).Raw()) {
- return node.Ptr();
- }
+ auto load = TCoLambda(traits->Child(4));
+ if (load.Body().Raw() != load.Args().Arg(0).Raw()) {
+ return node.Ptr();
+ }
- auto merge = TCoLambda(traits->Child(5));
- {
- auto& plus = merge.Body().Ref();
- if (!plus.IsCallable("+")) {
+ auto merge = TCoLambda(traits->Child(5));
+ {
+ auto& plus = merge.Body().Ref();
+ if (!plus.IsCallable("+")) {
+ return node.Ptr();
+ }
+
+ if (!(plus.Child(0) == merge.Args().Arg(0).Raw() &&
+ plus.Child(1) == merge.Args().Arg(1).Raw())) {
+ return node.Ptr();
+ }
+ }
+
+ auto finish = TCoLambda(traits->Child(6));
+ if (finish.Body().Raw() != finish.Args().Arg(0).Raw()) {
return node.Ptr();
}
- if (!(plus.Child(0) == merge.Args().Arg(0).Raw() &&
- plus.Child(1) == merge.Args().Arg(1).Raw())) {
+ auto defVal = traits->Child(7);
+ if (!defVal->IsCallable("Uint64") || defVal->Head().Content() != "0") {
return node.Ptr();
}
- }
- auto finish = TCoLambda(traits->Child(6));
- if (finish.Body().Raw() != finish.Args().Arg(0).Raw()) {
- return node.Ptr();
- }
+ if (!isDistinct) {
+ if (!onlyZero && !onlyColumn) {
+ if (!initVal || !updateVal || initVal != updateVal) {
+ return node.Ptr();
+ }
+ }
+ }
+ } else if (traits->IsCallable("AggApply")) {
+ if (traits->Head().Content() != "count_all" && traits->Head().Content() != "count") {
+ return node.Ptr();
+ }
- auto defVal = traits->Child(7);
- if (!defVal->IsCallable("Uint64") || defVal->Head().Content() != "0") {
+ inputItemType = traits->Child(1)->GetTypeAnn()->Cast<TTypeExprType>()->GetType();
+ onlyZero = false;
+ onlyColumn = false;
+ if (&traits->Child(2)->Head().Head() == &traits->Child(2)->Tail()) {
+ onlyColumn = true;
+ }
+
+ if (!isDistinct) {
+ if (IsDepended(traits->Child(2)->Tail(), traits->Child(2)->Head().Head())) {
+ return node.Ptr();
+ }
+
+ if (traits->Head().Content() == "count") {
+ initVal = traits->Child(2)->TailPtr();
+ }
+ }
+ } else {
return node.Ptr();
}
+ const bool isOptionalColumn = inputItemType->GetKind() == ETypeAnnotationKind::Optional;
+
if (!isDistinct) {
auto length = ctx.Builder(node.Pos())
.Callable("Length")
@@ -1353,11 +1389,7 @@ TExprNode::TPtr CountAggregateRewrite(const TCoAggregate& node, TExprContext& ct
.Atom(0, "0", TNodeFlags::Default)
.Seal()
.Build();
- } else if (!onlyColumn) {
- if (!initVal || !updateVal || initVal != updateVal) {
- return node.Ptr();
- }
-
+ } else if (!onlyColumn && initVal) {
length = ctx.Builder(node.Pos())
.Callable("If")
.Callable(0, "Exists")
diff --git a/ydb/library/yql/core/common_opt/yql_co_flow2.cpp b/ydb/library/yql/core/common_opt/yql_co_flow2.cpp
index 7a67e5bc02..a606a61b88 100644
--- a/ydb/library/yql/core/common_opt/yql_co_flow2.cpp
+++ b/ydb/library/yql/core/common_opt/yql_co_flow2.cpp
@@ -50,7 +50,16 @@ TExprNode::TPtr AggregateSubsetFieldsAnalyzer(const TCoAggregate& node, TExprCon
}
else {
auto traits = x.Ref().Child(1);
- auto structType = traits->Child(0)->GetTypeAnn()->Cast<TTypeExprType>()->GetType()->Cast<TStructExprType>();
+ ui32 index;
+ if (traits->IsCallable("AggregationTraits")) {
+ index = 0;
+ } else if (traits->IsCallable("AggApply")) {
+ index = 1;
+ } else {
+ return node.Ptr();
+ }
+
+ auto structType = traits->Child(index)->GetTypeAnn()->Cast<TTypeExprType>()->GetType()->Cast<TStructExprType>();
for (const auto& item : structType->GetItems()) {
usedFields.insert(item->GetName());
}
@@ -2394,6 +2403,38 @@ void RegisterCoFlowCallables2(TCallableOptimizerMap& map) {
.Build();
};
+ map["AggApply"] = [](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx) {
+ auto type = node->Child(1)->GetTypeAnn()->Cast<TTypeExprType>()->GetType();
+ if (type->GetKind() != ETypeAnnotationKind::Struct) {
+ // usually distinct, type of column is used instead
+ return node;
+ }
+
+ auto structType = type->Cast<TStructExprType>();
+ TSet<TStringBuf> usedFields;
+ auto extractor = node->Child(2);
+ TSet<TStringBuf> lambdaSubset;
+ if (!HaveFieldsSubset(extractor->ChildPtr(1), *extractor->Child(0)->Child(0), lambdaSubset, *optCtx.ParentsMap)) {
+ return node;
+ }
+
+ usedFields.insert(lambdaSubset.cbegin(), lambdaSubset.cend());
+ if (usedFields.size() == structType->GetSize()) {
+ return node;
+ }
+
+ TVector<const TItemExprType*> subsetItems;
+ for (const auto& item : structType->GetItems()) {
+ if (usedFields.contains(item->GetName())) {
+ subsetItems.push_back(item);
+ }
+ }
+
+ auto subsetType = ctx.MakeType<TStructExprType>(subsetItems);
+ YQL_CLOG(DEBUG, Core) << "FieldSubset for AggApply";
+ return ctx.ChangeChild(*node, 1, ExpandType(node->Pos(), *subsetType, ctx));
+ };
+
map["SessionWindowTraits"] = map["SortTraits"] = map["Lag"] = map["Lead"] = map["RowNumber"] = map["Rank"] = map["DenseRank"] =
[](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx)
{
diff --git a/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json b/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json
index 65e5acba4f..a6d5dff85d 100644
--- a/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json
+++ b/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json
@@ -419,6 +419,23 @@
]
},
{
+ "Name": "TCoAggrCountInit",
+ "Base": "TCallable",
+ "Match": {"Type": "Callable", "Name": "AggrCountInit"},
+ "Children": [
+ {"Index": 0, "Name": "Value", "Type": "TExprBase"}
+ ]
+ },
+ {
+ "Name": "TCoAggrCountUpdate",
+ "Base": "TCallable",
+ "Match": {"Type": "Callable", "Name": "AggrCountUpdate"},
+ "Children": [
+ {"Index": 0, "Name": "Value", "Type": "TExprBase"},
+ {"Index": 1, "Name": "State", "Type": "TExprBase"}
+ ]
+ },
+ {
"Name": "TCoMin",
"VarArgBase": "TExprBase",
"Match": {"Type": "Callable", "Name": "Min"}
@@ -438,13 +455,19 @@
]
},
{
- "Name": "TCoTake",
+ "Name": "TCoTakeBase",
"Base": "TCoCountBase",
+ "Match": {"Type": "CallableBase"},
+ "Builder": {"Generate": "None"}
+ },
+ {
+ "Name": "TCoTake",
+ "Base": "TCoTakeBase",
"Match": {"Type": "Callable", "Name": "Take"}
},
{
"Name": "TCoLimit",
- "Base": "TCoCountBase",
+ "Base": "TCoTakeBase",
"Match": {"Type": "Callable", "Name": "Limit"}
},
{
@@ -598,7 +621,7 @@
"Match": {"Type": "Tuple"},
"Children": [
{"Index": 0, "Name": "ColumnName", "Type": "TExprBase"},
- {"Index": 1, "Name": "Trait", "Type": "TCoAggregationTraits"},
+ {"Index": 1, "Name": "Trait", "Type": "TExprBase"},
{"Index": 2, "Name": "DistinctName", "Type": "TCoAtom", "Optional": true}
]
},
diff --git a/ydb/library/yql/core/file_storage/CMakeLists.txt b/ydb/library/yql/core/file_storage/CMakeLists.txt
index d359e43b2e..b9a2aff3ab 100644
--- a/ydb/library/yql/core/file_storage/CMakeLists.txt
+++ b/ydb/library/yql/core/file_storage/CMakeLists.txt
@@ -6,6 +6,11 @@
# original buildsystem will not be accepted.
+add_subdirectory(defs)
+add_subdirectory(download)
+add_subdirectory(http_download)
+add_subdirectory(proto)
+add_subdirectory(ut)
add_library(yql-core-file_storage)
target_link_libraries(yql-core-file_storage PUBLIC
diff --git a/ydb/library/yql/core/file_storage/http_download/CMakeLists.txt b/ydb/library/yql/core/file_storage/http_download/CMakeLists.txt
index 8ec894706d..eeb6a66452 100644
--- a/ydb/library/yql/core/file_storage/http_download/CMakeLists.txt
+++ b/ydb/library/yql/core/file_storage/http_download/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(proto)
add_library(core-file_storage-http_download)
target_link_libraries(core-file_storage-http_download PUBLIC
diff --git a/ydb/library/yql/core/file_storage/ut/CMakeLists.txt b/ydb/library/yql/core/file_storage/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/core/file_storage/ut/CMakeLists.txt
+++ b/ydb/library/yql/core/file_storage/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/core/issue/CMakeLists.txt b/ydb/library/yql/core/issue/CMakeLists.txt
index 3842fd388a..382aa54d59 100644
--- a/ydb/library/yql/core/issue/CMakeLists.txt
+++ b/ydb/library/yql/core/issue/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
+add_subdirectory(ut)
add_library(yql-core-issue)
target_link_libraries(yql-core-issue PUBLIC
diff --git a/ydb/library/yql/core/issue/ut/CMakeLists.txt b/ydb/library/yql/core/issue/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/core/issue/ut/CMakeLists.txt
+++ b/ydb/library/yql/core/issue/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp b/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
index 3b577aa065..7cf2403d72 100644
--- a/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
+++ b/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
@@ -12,7 +12,7 @@
#include <ydb/library/yql/core/yql_gc_transformer.h>
#include <ydb/library/yql/core/yql_expr_csee.h>
#include <ydb/library/yql/core/type_ann/type_ann_expr.h>
-#include <ydb/library/yql/core/yql_opt_aggregate.h>
+#include <ydb/library/yql/core/yql_aggregate_expander.h>
#include <ydb/library/yql/utils/log/log.h>
#include <ydb/library/yql/core/services/yql_transform_pipeline.h>
#include <ydb/library/yql/core/services/yql_out_transformers.h>
@@ -31,8 +31,8 @@ using namespace NNodes;
using TPeepHoleOptimizerPtr = TExprNode::TPtr (*const)(const TExprNode::TPtr&, TExprContext&);
using TPeepHoleOptimizerMap = std::unordered_map<std::string_view, TPeepHoleOptimizerPtr>;
-using TNonDeterministicOptimizerPtr = TExprNode::TPtr (*const)(const TExprNode::TPtr&, TExprContext&, TTypeAnnotationContext& types);
-using TNonDeterministicOptimizerMap = std::unordered_map<std::string_view, TNonDeterministicOptimizerPtr>;
+using TExtPeepHoleOptimizerPtr = TExprNode::TPtr (*const)(const TExprNode::TPtr&, TExprContext&, TTypeAnnotationContext& types);
+using TExtPeepHoleOptimizerMap = std::unordered_map<std::string_view, TExtPeepHoleOptimizerPtr>;
TExprNode::TPtr MakeNothing(TPositionHandle pos, const TTypeAnnotationNode& type, TExprContext& ctx) {
return ctx.NewCallable(pos, "Nothing", {ExpandType(pos, *ctx.MakeType<TOptionalExprType>(&type), ctx)});
@@ -1884,22 +1884,26 @@ TExprNode::TPtr ExpandFilter(const TExprNode::TPtr& input, TExprContext& ctx) {
}
IGraphTransformer::TStatus PeepHoleCommonStage(const TExprNode::TPtr& input, TExprNode::TPtr& output,
- TExprContext& ctx, TTypeAnnotationContext& types, const TPeepHoleOptimizerMap& optimizers)
+ TExprContext& ctx, TTypeAnnotationContext& types,
+ const TPeepHoleOptimizerMap& optimizers, const TExtPeepHoleOptimizerMap& extOptimizers)
{
TOptimizeExprSettings settings(&types);
settings.CustomInstantTypeTransformer = types.CustomInstantTypeTransformer.Get();
- return OptimizeExpr(input, output, [&optimizers](const TExprNode::TPtr& node, TExprContext& ctx) -> TExprNode::TPtr {
+ return OptimizeExpr(input, output, [&optimizers, &extOptimizers, &types](const TExprNode::TPtr& node, TExprContext& ctx) -> TExprNode::TPtr {
if (const auto rule = optimizers.find(node->Content()); optimizers.cend() != rule)
return (rule->second)(node, ctx);
+ if (const auto rule = extOptimizers.find(node->Content()); extOptimizers.cend() != rule)
+ return (rule->second)(node, ctx, types);
+
return node;
}, ctx, settings);
}
IGraphTransformer::TStatus PeepHoleFinalStage(const TExprNode::TPtr& input, TExprNode::TPtr& output,
TExprContext& ctx, TTypeAnnotationContext& types, bool* hasNonDeterministicFunctions,
- const TPeepHoleOptimizerMap& optimizers, const TNonDeterministicOptimizerMap& nonDetOptimizers)
+ const TPeepHoleOptimizerMap& optimizers, const TExtPeepHoleOptimizerMap& nonDetOptimizers)
{
TOptimizeExprSettings settings(&types);
settings.CustomInstantTypeTransformer = types.CustomInstantTypeTransformer.Get();
@@ -5823,7 +5827,6 @@ struct TPeepHoleRules {
{"OptionalReduce", &ExpandOptionalReduce},
{"AggrMin", &ExpandAggrMinMax<true>},
{"AggrMax", &ExpandAggrMinMax<false>},
- {"Aggregate", &ExpandAggregatePeephole},
{"And", &OptimizeLogicalDups<true>},
{"Or", &OptimizeLogicalDups<false>},
{"CombineByKey", &ExpandCombineByKey},
@@ -5850,6 +5853,10 @@ struct TPeepHoleRules {
{"ToFlow", &DropToFlowDeps},
};
+ static constexpr std::initializer_list<TExtPeepHoleOptimizerMap::value_type> CommonStageExtRulesInit = {
+ {"Aggregate", &ExpandAggregatePeephole},
+ };
+
static constexpr std::initializer_list<TPeepHoleOptimizerMap::value_type> SimplifyStageRulesInit = {
{"Map", &OptimizeMap<false, EnableNewOptimizers>},
{"OrderedMap", &OptimizeMap<true, EnableNewOptimizers>},
@@ -5909,7 +5916,7 @@ struct TPeepHoleRules {
{"SqueezeToDict", &OptimizeSqueezeToDict}
};
- static constexpr std::initializer_list<TNonDeterministicOptimizerMap::value_type> FinalStageNonDetRulesInit = {
+ static constexpr std::initializer_list<TExtPeepHoleOptimizerMap::value_type> FinalStageNonDetRulesInit = {
{"Random", &Random0Arg<double>},
{"RandomNumber", &Random0Arg<ui64>},
{"RandomUuid", &Random0Arg<TGUID>},
@@ -5921,6 +5928,7 @@ struct TPeepHoleRules {
TPeepHoleRules()
: CommonStageRules(CommonStageRulesInit)
+ , CommonStageExtRules(CommonStageExtRulesInit)
, FinalStageRules(FinalStageRulesInit)
, SimplifyStageRules(SimplifyStageRulesInit)
, FinalStageNonDetRules(FinalStageNonDetRulesInit)
@@ -5931,9 +5939,10 @@ struct TPeepHoleRules {
}
const TPeepHoleOptimizerMap CommonStageRules;
+ const TExtPeepHoleOptimizerMap CommonStageExtRules;
const TPeepHoleOptimizerMap FinalStageRules;
const TPeepHoleOptimizerMap SimplifyStageRules;
- const TNonDeterministicOptimizerMap FinalStageNonDetRules;
+ const TExtPeepHoleOptimizerMap FinalStageNonDetRules;
};
template <bool EnableNewOptimizers>
@@ -5955,7 +5964,9 @@ THolder<IGraphTransformer> CreatePeepHoleCommonStageTransformer(TTypeAnnotationC
pipeline.AddCommonOptimization(issueCode);
pipeline.Add(CreateFunctorTransformer(
[&types](const TExprNode::TPtr& input, TExprNode::TPtr& output, TExprContext& ctx) {
- return PeepHoleCommonStage(input, output, ctx, types, TPeepHoleRules<EnableNewOptimizers>::Instance().CommonStageRules);
+ return PeepHoleCommonStage(input, output, ctx, types,
+ TPeepHoleRules<EnableNewOptimizers>::Instance().CommonStageRules,
+ TPeepHoleRules<EnableNewOptimizers>::Instance().CommonStageExtRules);
}
),
"PeepHoleCommon",
@@ -5997,7 +6008,7 @@ THolder<IGraphTransformer> CreatePeepHoleFinalStageTransformer(TTypeAnnotationCo
}
const auto& nonDetStageRules = withNonDeterministicRules ?
- TPeepHoleRules<EnableNewOptimizers>::Instance().FinalStageNonDetRules : TNonDeterministicOptimizerMap{};
+ TPeepHoleRules<EnableNewOptimizers>::Instance().FinalStageNonDetRules : TExtPeepHoleOptimizerMap{};
return PeepHoleFinalStage(input, output, ctx, types, hasNonDeterministicFunctions, stageRules, nonDetStageRules);
}
diff --git a/ydb/library/yql/core/services/CMakeLists.txt b/ydb/library/yql/core/services/CMakeLists.txt
index f6ccd6987b..b44cca0c9f 100644
--- a/ydb/library/yql/core/services/CMakeLists.txt
+++ b/ydb/library/yql/core/services/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(mounts)
add_library(yql-core-services)
target_compile_options(yql-core-services PRIVATE
diff --git a/ydb/library/yql/core/type_ann/type_ann_core.cpp b/ydb/library/yql/core/type_ann/type_ann_core.cpp
index 187abebcae..cb48db3519 100644
--- a/ydb/library/yql/core/type_ann/type_ann_core.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_core.cpp
@@ -11225,6 +11225,7 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
Functions["MultiAggregate"] = &MultiAggregateWrapper;
Functions["Aggregate"] = &AggregateWrapper;
Functions["SqlAggregateAll"] = &SqlAggregateAllWrapper;
+ Functions["AggApply"] = &AggApplyWrapper;
Functions["WinOnRows"] = &WinOnWrapper;
Functions["WinOnGroups"] = &WinOnWrapper;
Functions["WinOnRange"] = &WinOnWrapper;
diff --git a/ydb/library/yql/core/type_ann/type_ann_list.cpp b/ydb/library/yql/core/type_ann/type_ann_list.cpp
index 743a7a872d..6c6aa56973 100644
--- a/ydb/library/yql/core/type_ann/type_ann_list.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_list.cpp
@@ -4726,7 +4726,9 @@ namespace {
}
}
- if (!child->Child(1)->IsCallable("AggregationTraits")) {
+ const bool isAggApply = child->Child(1)->IsCallable("AggApply");
+ const bool isTraits = child->Child(1)->IsCallable("AggregationTraits");
+ if (!isAggApply && !isTraits) {
ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(child->Child(1)->Pos()), "Expected aggregation traits"));
return IGraphTransformer::TStatus::Error;
}
@@ -4752,7 +4754,7 @@ namespace {
}
}
- auto finishType = child->Child(1)->Child(6)->GetTypeAnn();
+ auto finishType = isAggApply ? child->Child(1)->GetTypeAnn() : child->Child(1)->Child(6)->GetTypeAnn();
bool isOptional = finishType->GetKind() == ETypeAnnotationKind::Optional;
if (child->Head().IsList()) {
if (isOptional) {
@@ -4774,17 +4776,33 @@ namespace {
item->GetKind() != ETypeAnnotationKind::Optional ? ctx.Expr.MakeType<TOptionalExprType>(item) : item));
}
} else {
- auto defVal = child->Child(1)->Child(7);
- if (defVal->IsCallable("Null") && !isOptional && !isHopping && input->Child(1)->ChildrenSize() == 0) {
+ const TTypeAnnotationNode* defValType;
+ bool isDefNull;
+ if (isTraits) {
+ auto defVal = child->Child(1)->Child(7);
+ isDefNull = defVal->IsCallable("Null");
+ defValType = defVal->GetTypeAnn();
+ } else {
+ auto name = child->Child(1)->Child(0)->Content();
+ if (name == "count" || name == "count_all") {
+ isDefNull = false;
+ defValType = ctx.Expr.MakeType<TDataExprType>(EDataSlot::Uint64);
+ } else {
+ isDefNull = true;
+ defValType = ctx.Expr.MakeType<TNullExprType>();
+ }
+ }
+
+ if (isDefNull && !isOptional && !isHopping && input->Child(1)->ChildrenSize() == 0) {
if (finishType->GetKind() != ETypeAnnotationKind::Null &&
finishType->GetKind() != ETypeAnnotationKind::Pg) {
finishType = ctx.Expr.MakeType<TOptionalExprType>(finishType);
}
- } else if (!defVal->IsCallable("Null") && defVal->GetTypeAnn()->GetKind() != ETypeAnnotationKind::Optional
+ } else if (!isDefNull && defValType->GetKind() != ETypeAnnotationKind::Optional
&& finishType->GetKind() == ETypeAnnotationKind::Optional) {
finishType = finishType->Cast<TOptionalExprType>()->GetItemType();
- } else if (!defVal->IsCallable("Null") && finishType->GetKind() == ETypeAnnotationKind::Null && input->Child(1)->ChildrenSize() == 0) {
- finishType = defVal->GetTypeAnn();
+ } else if (!isDefNull && finishType->GetKind() == ETypeAnnotationKind::Null && input->Child(1)->ChildrenSize() == 0) {
+ finishType = defValType;
}
rowColumns.push_back(ctx.Expr.MakeType<TItemExprType>(child->Head().Content(), finishType));
@@ -4840,6 +4858,75 @@ namespace {
return IGraphTransformer::TStatus::Ok;
}
+ IGraphTransformer::TStatus AggApplyWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
+ Y_UNUSED(output);
+ if (!EnsureArgsCount(*input, 3, ctx.Expr)) {
+ return IGraphTransformer::TStatus::Error;
+ }
+
+ if (!EnsureAtom(*input->Child(0), ctx.Expr)) {
+ return IGraphTransformer::TStatus::Error;
+ }
+
+ auto name = input->Child(0)->Content();
+ if (auto status = EnsureTypeRewrite(input->ChildRef(1), ctx.Expr); status != IGraphTransformer::TStatus::Ok) {
+ return status;
+ }
+
+ auto itemType = input->Child(1)->GetTypeAnn()->Cast<TTypeExprType>()->GetType();
+ auto& lambda = input->ChildRef(2);
+ const auto status = ConvertToLambda(lambda, ctx.Expr, 1);
+ if (status.Level != IGraphTransformer::TStatus::Ok) {
+ return status;
+ }
+
+ if (!UpdateLambdaAllArgumentsTypes(lambda, { itemType }, ctx.Expr)) {
+ return IGraphTransformer::TStatus::Error;
+ }
+
+ if (!lambda->GetTypeAnn()) {
+ return IGraphTransformer::TStatus::Repeat;
+ }
+
+ if (name == "count" || name == "count_all") {
+ input->SetTypeAnn(ctx.Expr.MakeType<TDataExprType>(EDataSlot::Uint64));
+ } else if (name == "sum") {
+ bool isOptional;
+ const TDataExprType* lambdaType;
+ if(IsDataOrOptionalOfData(lambda->GetTypeAnn(), isOptional, lambdaType)) {
+ auto lambdaTypeSlot = lambdaType->GetSlot();
+ const TTypeAnnotationNode *sumResultType = nullptr;
+ if (IsDataTypeSigned(lambdaTypeSlot)) {
+ sumResultType = ctx.Expr.MakeType<TDataExprType>(EDataSlot::Int64);
+ } else if (IsDataTypeUnsigned(lambdaTypeSlot)) {
+ sumResultType = ctx.Expr.MakeType<TDataExprType>(EDataSlot::Uint64);
+ } else if (IsDataTypeDecimal(lambdaTypeSlot)) {
+ const auto decimalType = lambdaType->Cast<TDataExprParamsType>();
+ sumResultType = ctx.Expr.MakeType<TDataExprParamsType>(EDataSlot::Decimal, "35", decimalType->GetParamTwo());
+ } else if (IsDataTypeFloat(lambdaTypeSlot) || IsDataTypeInterval(lambdaTypeSlot)) {
+ sumResultType = ctx.Expr.MakeType<TDataExprType>(lambdaTypeSlot);
+ } else {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
+ TStringBuilder() << "Unsupported column type: " << lambdaTypeSlot));
+ return IGraphTransformer::TStatus::Error;
+ }
+ input->SetTypeAnn(ctx.Expr.MakeType<TOptionalExprType>(sumResultType));
+ } else if (IsNull(*lambda->GetTypeAnn())) {
+ input->SetTypeAnn(ctx.Expr.MakeType<TNullExprType>());
+ } else {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
+ TStringBuilder() << "Unsupported type: " << FormatType(lambda->GetTypeAnn()) << ". Expected Data or Optional of Data."));
+ return IGraphTransformer::TStatus::Error;
+ }
+ } else {
+ ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()),
+ TStringBuilder() << "Unsupported agg name: " << name));
+ return IGraphTransformer::TStatus::Error;
+ }
+
+ return IGraphTransformer::TStatus::Ok;
+ }
+
IGraphTransformer::TStatus FilterNullMembersWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
if (!EnsureMinMaxArgsCount(*input, 1, 2, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
diff --git a/ydb/library/yql/core/type_ann/type_ann_list.h b/ydb/library/yql/core/type_ann/type_ann_list.h
index 3fd48517da..840f647774 100644
--- a/ydb/library/yql/core/type_ann/type_ann_list.h
+++ b/ydb/library/yql/core/type_ann/type_ann_list.h
@@ -94,6 +94,7 @@ namespace NTypeAnnImpl {
IGraphTransformer::TStatus MultiAggregateWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus AggregateWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus SqlAggregateAllWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
+ IGraphTransformer::TStatus AggApplyWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus FilterNullMembersWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus SkipNullMembersWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus FilterNullElementsWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
diff --git a/ydb/library/yql/core/yql_opt_aggregate.cpp b/ydb/library/yql/core/yql_aggregate_expander.cpp
index e977a47fea..5fc6708233 100644
--- a/ydb/library/yql/core/yql_opt_aggregate.cpp
+++ b/ydb/library/yql/core/yql_aggregate_expander.cpp
@@ -1,42 +1,104 @@
-#include "yql_opt_aggregate.h"
-#include "yql_opt_utils.h"
-#include "yql_opt_window.h"
-#include "yql_expr_type_annotation.h"
+#include "yql_aggregate_expander.h"
+
+#include <ydb/library/yql/core/yql_expr_optimize.h>
+#include <ydb/library/yql/core/yql_expr_type_annotation.h>
+#include <ydb/library/yql/core/yql_opt_window.h>
namespace NYql {
-TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, TExprContext& ctx, bool forceCompact) {
- auto list = node->HeadPtr();
- auto keyColumns = node->ChildPtr(1);
- auto aggregatedColumns = node->Child(2);
- auto settings = node->Child(3);
+TExprNode::TPtr TAggregateExpander::ExpandAggregate()
+{
+ AggList = Node->HeadPtr();
+ KeyColumns = Node->ChildPtr(1);
+ AggregatedColumns = Node->Child(2);
+ auto settings = Node->Child(3);
+ if (!CollectTraits()) {
+ return RebuildAggregate();
+ }
YQL_ENSURE(!HasSetting(*settings, "hopping"), "Aggregate with hopping unsupported here.");
- static const TStringBuf sessionStartMemberName = "_yql_group_session_start";
- const TExprNode::TPtr voidNode = ctx.NewCallable(node->Pos(), "Void", {});
-
- TExprNode::TPtr sessionKey;
- const TTypeAnnotationNode* sessionKeyType = nullptr;
- const TTypeAnnotationNode* sessionParamsType = nullptr;
- TExprNode::TPtr sessionInit;
- TExprNode::TPtr sessionUpdate;
-
- TExprNode::TPtr sortKey = voidNode;
- TExprNode::TPtr sortOrder = voidNode;
-
- bool effectiveCompact = forceCompact || HasSetting(*settings, "compact");
- for (ui32 index = 0; index < aggregatedColumns->ChildrenSize(); ++index) {
- auto trait = aggregatedColumns->Child(index)->Child(1);
+ HaveDistinct = AnyOf(AggregatedColumns->ChildrenList(),
+ [](const auto& child) { return child->ChildrenSize() == 3; });
+ EffectiveCompact = (HaveDistinct && CompactForDistinct) || ForceCompact || HasSetting(*settings, "compact");
+ for (const auto& trait : Traits) {
auto mergeLambda = trait->Child(5);
if (mergeLambda->Tail().IsCallable("Void")) {
- effectiveCompact = true;
+ EffectiveCompact = true;
break;
}
}
- auto contextLambda = HasContextFuncs(*aggregatedColumns) ?
- ctx.Builder(node->Pos())
+ OriginalRowType = GetSeqItemType(Node->Head().GetTypeAnn())->Cast<TStructExprType>();
+ RowItems = OriginalRowType->GetItems();
+
+ ProcessSessionSetting(GetSetting(*settings, "session"));
+ RowType = Ctx.MakeType<TStructExprType>(RowItems);
+
+ TVector<const TTypeAnnotationNode*> keyItemTypes = GetKeyItemTypes();
+ bool needPickle = IsNeedPickle(keyItemTypes);
+ auto keyExtractor = GetKeyExtractor(needPickle);
+ CollectColumnsSpecs();
+
+ TExprNode::TPtr preAgg = GeneratePartialAggregate(keyExtractor, keyItemTypes, needPickle);
+ if (EffectiveCompact || !preAgg) {
+ preAgg = std::move(AggList);
+ }
+ return GeneratePostAggregate(preAgg, keyExtractor);
+}
+
+TExprNode::TPtr TAggregateExpander::ExpandAggApply(const TExprNode::TPtr& node)
+{
+ auto name = node->Head().Content();
+ auto exportsPtr = TypesCtx.Modules->GetModule("/lib/yql/aggregate.yql");
+ YQL_ENSURE(exportsPtr);
+ const auto& exports = exportsPtr->Symbols();
+ const auto ex = exports.find(TString(name) + "_traits_factory");
+ YQL_ENSURE(exports.cend() != ex);
+ TNodeOnNodeOwnedMap deepClones;
+ auto lambda = Ctx.DeepCopy(*ex->second, exportsPtr->ExprCtx(), deepClones, true, false);
+
+ auto listTypeNode = Ctx.NewCallable(node->Pos(), "ListType", { node->ChildPtr(1) });
+ auto extractor = node->ChildPtr(2);
+
+ auto traits = Ctx.ReplaceNodes(lambda->TailPtr(), {
+ {lambda->Head().Child(0), listTypeNode},
+ {lambda->Head().Child(1), extractor}
+ });
+
+ Ctx.Step.Repeat(TExprStep::ExpandApplyForLambdas);
+ auto status = ExpandApply(traits, traits, Ctx);
+ YQL_ENSURE(status != IGraphTransformer::TStatus::Error);
+ return traits;
+}
+
+bool TAggregateExpander::CollectTraits() {
+ bool allTraitsCollected = true;
+ for (ui32 index = 0; index < AggregatedColumns->ChildrenSize(); ++index) {
+ auto trait = AggregatedColumns->Child(index)->ChildPtr(1);
+ if (trait->IsCallable("AggApply")) {
+ trait = ExpandAggApply(trait);
+ allTraitsCollected = false;
+ }
+ Traits.push_back(trait);
+ }
+ return allTraitsCollected;
+}
+
+TExprNode::TPtr TAggregateExpander::RebuildAggregate()
+{
+ TExprNode::TListType newAggregatedColumnsItems = AggregatedColumns->ChildrenList();
+ for (ui32 index = 0; index < AggregatedColumns->ChildrenSize(); ++index) {
+ newAggregatedColumnsItems[index] = Ctx.ChangeChild(*(newAggregatedColumnsItems[index]), 1, std::move(Traits[index]));
+ }
+
+ return Ctx.ChangeChild(*Node, 2, Ctx.NewList(Node->Pos(), std::move(newAggregatedColumnsItems)));
+}
+
+TExprNode::TPtr TAggregateExpander::GetContextLambda()
+{
+ return HasContextFuncs(*AggregatedColumns) ?
+ Ctx.Builder(Node->Pos())
.Lambda()
.Param("stream")
.Callable("WithContext")
@@ -45,116 +107,110 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Seal()
.Seal()
.Build() :
- ctx.Builder(node->Pos())
+ Ctx.Builder(Node->Pos())
.Lambda()
.Param("stream")
.Arg("stream")
.Seal()
.Build();
+}
- const TStructExprType* originalRowType = GetSeqItemType(node->Head().GetTypeAnn())->Cast<TStructExprType>();
- TVector<const TItemExprType*> rowItems = originalRowType->GetItems();
-
- const auto sessionSetting = GetSetting(*settings, "session");
- TMaybe<TStringBuf> sessionOutputColumn;
- if (sessionSetting) {
- YQL_ENSURE(sessionSetting->Child(1)->Child(0)->IsAtom());
- sessionOutputColumn = sessionSetting->Child(1)->Child(0)->Content();
-
- // remove session column from other keys
- TExprNodeList keyColumnsList = keyColumns->ChildrenList();
- EraseIf(keyColumnsList, [&](const auto& key) { return sessionOutputColumn == key->Content(); });
- keyColumns = ctx.NewList(keyColumns->Pos(), std::move(keyColumnsList));
-
- const bool haveDistinct = AnyOf(aggregatedColumns->ChildrenList(),
- [](const auto& child) { return child->ChildrenSize() == 3; });
-
- TExprNode::TPtr sessionSortTraits;
- ExtractSessionWindowParams(node->Pos(), sessionSetting->Child(1)->ChildPtr(1), sessionKey, sessionKeyType, sessionParamsType, sessionSortTraits,
- sessionInit, sessionUpdate, ctx);
- ExtractSortKeyAndOrder(node->Pos(), sessionSortTraits, sortKey, sortOrder, ctx);
-
- if (haveDistinct) {
- auto keySelector = BuildKeySelector(node->Pos(), *originalRowType, keyColumns, ctx);
- const auto sessionStartMemberLambda = AddSessionParamsMemberLambda(node->Pos(), sessionStartMemberName, "", keySelector,
- sessionKey, sessionInit, sessionUpdate, ctx);
-
- list = ctx.Builder(node->Pos())
- .Callable("PartitionsByKeys")
- .Add(0, list)
- .Add(1, keySelector)
- .Add(2, sortOrder)
- .Add(3, sortKey)
- .Lambda(4)
- .Param("partitionedStream")
- .Apply(sessionStartMemberLambda)
- .With(0, "partitionedStream")
- .Seal()
+void TAggregateExpander::ProcessSessionSetting(TExprNode::TPtr sessionSetting)
+{
+ if (!sessionSetting) {
+ return;
+ }
+ HaveSessionSetting = true;
+
+ YQL_ENSURE(sessionSetting->Child(1)->Child(0)->IsAtom());
+ SessionOutputColumn = sessionSetting->Child(1)->Child(0)->Content();
+
+ // remove session column from other keys
+ TExprNodeList keyColumnsList = KeyColumns->ChildrenList();
+ EraseIf(keyColumnsList, [&](const auto& key) { return SessionOutputColumn == key->Content(); });
+ KeyColumns = Ctx.NewList(KeyColumns->Pos(), std::move(keyColumnsList));
+
+ SessionWindowParams.Traits = sessionSetting->Child(1)->ChildPtr(1);
+ ExtractSessionWindowParams(Node->Pos(), SessionWindowParams, Ctx);
+ ExtractSortKeyAndOrder(Node->Pos(), SessionWindowParams.SortTraits, SortParams, Ctx);
+
+ if (HaveDistinct) {
+ auto keySelector = BuildKeySelector(Node->Pos(), *OriginalRowType, KeyColumns, Ctx);
+ const auto sessionStartMemberLambda = AddSessionParamsMemberLambda(Node->Pos(), SessionStartMemberName, keySelector,
+ SessionWindowParams, Ctx);
+
+ AggList = Ctx.Builder(Node->Pos())
+ .Callable("PartitionsByKeys")
+ .Add(0, AggList)
+ .Add(1, keySelector)
+ .Add(2, SortParams.Order)
+ .Add(3, SortParams.Key)
+ .Lambda(4)
+ .Param("partitionedStream")
+ .Apply(sessionStartMemberLambda)
+ .With(0, "partitionedStream")
.Seal()
.Seal()
- .Build();
+ .Seal()
+ .Build();
- auto keyColumnsList = keyColumns->ChildrenList();
- keyColumnsList.push_back(ctx.NewAtom(node->Pos(), sessionStartMemberName));
- keyColumns = ctx.NewList(node->Pos(), std::move(keyColumnsList));
+ auto keyColumnsList = KeyColumns->ChildrenList();
+ keyColumnsList.push_back(Ctx.NewAtom(Node->Pos(), SessionStartMemberName));
+ KeyColumns = Ctx.NewList(Node->Pos(), std::move(keyColumnsList));
- rowItems.push_back(ctx.MakeType<TItemExprType>(sessionStartMemberName, sessionKeyType));
+ RowItems.push_back(Ctx.MakeType<TItemExprType>(SessionStartMemberName, SessionWindowParams.KeyType));
- sortOrder = sortKey = voidNode;
- sessionKey = sessionInit = sessionUpdate = {};
- sessionKeyType = nullptr;
- } else {
- effectiveCompact = true;
- }
+ SessionWindowParams.Reset();
+ SortParams.Key = SortParams.Order = VoidNode;
+ } else {
+ EffectiveCompact = true;
}
+}
- const bool compact = effectiveCompact;
- const auto rowType = ctx.MakeType<TStructExprType>(rowItems);
-
- auto preMap = ctx.Builder(node->Pos())
- .Lambda()
- .Param("premap")
- .Callable("Just").Arg(0, "premap").Seal()
- .Seal().Build();
-
- bool needPickle = false;
+TVector<const TTypeAnnotationNode*> TAggregateExpander::GetKeyItemTypes()
+{
TVector<const TTypeAnnotationNode*> keyItemTypes;
- for (auto keyColumn : keyColumns->Children()) {
- auto index = rowType->FindItem(keyColumn->Content());
+ for (auto keyColumn : KeyColumns->Children()) {
+ auto index = RowType->FindItem(keyColumn->Content());
YQL_ENSURE(index, "Unknown column: " << keyColumn->Content());
- auto type = rowType->GetItems()[*index]->GetItemType();
+ auto type = RowType->GetItems()[*index]->GetItemType();
keyItemTypes.push_back(type);
- needPickle = needPickle || allowPickle && !IsDataOrOptionalOfData(type);
+
}
+ return keyItemTypes;
+}
- const TTypeAnnotationNode* pickleType = nullptr;
- TExprNode::TPtr pickleTypeNode;
- if (needPickle) {
- pickleType = keyColumns->ChildrenSize() > 1 ? ctx.MakeType<TTupleExprType>(keyItemTypes) : keyItemTypes[0];
- pickleTypeNode = ExpandType(node->Pos(), *pickleType, ctx);
+bool TAggregateExpander::IsNeedPickle(const TVector<const TTypeAnnotationNode*>& keyItemTypes)
+{
+ bool needPickle = false;
+ for (auto type : keyItemTypes) {
+ needPickle = needPickle || AllowPickle && !IsDataOrOptionalOfData(type);
}
+ return needPickle;
+}
- auto keyExtractor = ctx.Builder(node->Pos())
+TExprNode::TPtr TAggregateExpander::GetKeyExtractor(bool needPickle)
+{
+ TExprNode::TPtr keyExtractor = Ctx.Builder(Node->Pos())
.Lambda()
.Param("item")
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- if (keyColumns->ChildrenSize() == 0) {
+ if (KeyColumns->ChildrenSize() == 0) {
return parent.Callable("Uint32").Atom(0, "0", TNodeFlags::Default).Seal();
}
- else if (keyColumns->ChildrenSize() == 1) {
- return parent.Callable("Member").Arg(0, "item").Add(1, keyColumns->HeadPtr()).Seal();
+ else if (KeyColumns->ChildrenSize() == 1) {
+ return parent.Callable("Member").Arg(0, "item").Add(1, KeyColumns->HeadPtr()).Seal();
}
else {
auto listBuilder = parent.List();
ui32 pos = 0;
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
listBuilder
.Callable(pos++, "Member")
.Arg(0, "item")
- .Add(1, keyColumns->ChildPtr(i))
+ .Add(1, KeyColumns->ChildPtr(i))
.Seal();
}
-
return listBuilder.Seal();
}
})
@@ -162,7 +218,7 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Build();
if (needPickle) {
- keyExtractor = ctx.Builder(node->Pos())
+ keyExtractor = Ctx.Builder(Node->Pos())
.Lambda()
.Param("item")
.Callable("StablePickle")
@@ -173,45 +229,36 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Seal()
.Build();
}
+ return keyExtractor;
+}
- TExprNode::TListType initialColumnNames;
- TExprNode::TListType finalColumnNames;
- TExprNode::TListType distinctFields;
- using TIdxSet = std::set<ui32>;
- std::unordered_map<std::string_view, TIdxSet> distinct2Columns;
- std::unordered_map<std::string_view, bool> distinctFieldNeedsPickle;
- std::unordered_map<std::string_view, TExprNode::TPtr> udfSetCreate;
- std::unordered_map<std::string_view, TExprNode::TPtr> udfAddValue;
- std::unordered_map<std::string_view, TExprNode::TPtr> udfWasChanged;
- TIdxSet nondistinctColumns;
- for (auto child : aggregatedColumns->Children()) {
+void TAggregateExpander::CollectColumnsSpecs()
+{
+ for (ui32 index = 0; index < AggregatedColumns->ChildrenSize(); ++index) {
+ auto child = AggregatedColumns->Child(index);
if (const auto distinctField = (child->ChildrenSize() == 3) ? child->Child(2) : nullptr) {
- const auto ins = distinct2Columns.emplace(distinctField->Content(), TIdxSet());
+ const auto ins = Distinct2Columns.emplace(distinctField->Content(), TIdxSet());
if (ins.second) {
- distinctFields.push_back(distinctField);
+ DistinctFields.push_back(distinctField);
}
- ins.first->second.insert(initialColumnNames.size());
+ ins.first->second.insert(InitialColumnNames.size());
} else {
- nondistinctColumns.insert(initialColumnNames.size());
+ NonDistinctColumns.insert(InitialColumnNames.size());
}
if (child->Head().IsAtom()) {
- finalColumnNames.push_back(child->HeadPtr());
+ FinalColumnNames.push_back(child->HeadPtr());
} else {
- finalColumnNames.push_back(child->Head().HeadPtr());
+ FinalColumnNames.push_back(child->Head().HeadPtr());
}
- initialColumnNames.push_back(ctx.NewAtom(finalColumnNames.back()->Pos(), "_yql_agg_" + ToString(initialColumnNames.size()), TNodeFlags::Default));
- }
-
- TExprNode::TListType nothingStates;
- for (ui32 index = 0; index < aggregatedColumns->ChildrenSize(); ++index) {
- auto trait = aggregatedColumns->Child(index)->Child(1);
+ InitialColumnNames.push_back(Ctx.NewAtom(FinalColumnNames.back()->Pos(), "_yql_agg_" + ToString(InitialColumnNames.size()), TNodeFlags::Default));
+ auto trait = Traits[index];
auto saveLambda = trait->Child(3);
auto saveLambdaType = saveLambda->GetTypeAnn();
- auto typeNode = ExpandType(node->Pos(), *saveLambdaType, ctx);
- nothingStates.push_back(ctx.Builder(node->Pos())
+ auto typeNode = ExpandType(Node->Pos(), *saveLambdaType, Ctx);
+ NothingStates.push_back(Ctx.Builder(Node->Pos())
.Callable("Nothing")
.Callable(0, "OptionalType")
.Add(0, std::move(typeNode))
@@ -220,620 +267,681 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Build()
);
}
+}
- TExprNode::TPtr groupInput;
+TExprNode::TPtr TAggregateExpander::GeneratePartialAggregate(const TExprNode::TPtr keyExtractor,
+ const TVector<const TTypeAnnotationNode*>& keyItemTypes, bool needPickle)
+{
+ TExprNode::TPtr pickleTypeNode = nullptr;
+ if (needPickle) {
+ const TTypeAnnotationNode* pickleType = nullptr;
+ pickleType = KeyColumns->ChildrenSize() > 1 ? Ctx.MakeType<TTupleExprType>(keyItemTypes) : keyItemTypes[0];
+ pickleTypeNode = ExpandType(Node->Pos(), *pickleType, Ctx);
+ }
- if (!nondistinctColumns.empty()) {
- auto combineInit = ctx.Builder(node->Pos())
- .Lambda()
- .Param("key")
- .Param("item")
- .Callable("AsStruct")
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- ui32 ndx = 0;
- for (ui32 i: nondistinctColumns) {
- auto trait = aggregatedColumns->Child(i)->Child(1);
- auto initLambda = trait->Child(1);
- if (initLambda->Head().ChildrenSize() == 1) {
- parent.List(ndx++)
- .Add(0, initialColumnNames[i])
- .Apply(1, *initLambda)
- .With(0)
- .Callable("CastStruct")
- .Arg(0, "item")
- .Add(1, ExpandType(node->Pos(), *initLambda->Head().Head().GetTypeAnn(), ctx))
- .Seal()
- .Done()
- .Seal()
- .Seal();
- } else {
- parent.List(ndx++)
- .Add(0, initialColumnNames[i])
- .Apply(1, *initLambda)
- .With(0)
- .Callable("CastStruct")
- .Arg(0, "item")
- .Add(1, ExpandType(node->Pos(), *initLambda->Head().Head().GetTypeAnn(), ctx))
- .Seal()
- .Done()
- .With(1)
- .Callable("Uint32")
- .Atom(0, ToString(i), TNodeFlags::Default)
- .Seal()
- .Done()
- .Seal()
- .Seal();
- }
- }
- return parent;
- })
+ TExprNode::TPtr partialAgg = nullptr;
+ if (!NonDistinctColumns.empty()) {
+ partialAgg = GeneratePartialAggregateForNonDistinct(keyExtractor, pickleTypeNode);
+ }
+ for (ui32 index = 0; index < DistinctFields.size(); ++index) {
+ auto distinctField = DistinctFields[index];
+
+ bool needDistinctPickle = EffectiveCompact ? false : needPickle;
+ auto distinctGrouper = GenerateDistinctGrouper(distinctField, keyItemTypes, needDistinctPickle);
+
+ if (!partialAgg) {
+ partialAgg = std::move(distinctGrouper);
+ } else {
+ partialAgg = Ctx.Builder(Node->Pos())
+ .Callable("Extend")
+ .Add(0, std::move(partialAgg))
+ .Add(1, std::move(distinctGrouper))
.Seal()
- .Seal()
- .Build();
+ .Build();
+ }
+ }
+ // If no aggregation functions then add additional combiner
+ if (AggregatedColumns->ChildrenSize() == 0 && KeyColumns->ChildrenSize() > 0 && !SessionWindowParams.Update) {
+ if (!partialAgg) {
+ partialAgg = AggList;
+ }
- auto combineUpdate = ctx.Builder(node->Pos())
+ auto uniqCombineInit = ReturnKeyAsIsForCombineInit(pickleTypeNode);
+ auto uniqCombineUpdate = Ctx.Builder(Node->Pos())
.Lambda()
.Param("key")
.Param("item")
.Param("state")
- .Callable("AsStruct")
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- ui32 ndx = 0;
- for (ui32 i: nondistinctColumns) {
- auto trait = aggregatedColumns->Child(i)->Child(1);
- auto updateLambda = trait->Child(2);
- if (updateLambda->Head().ChildrenSize() == 2) {
- parent.List(ndx++)
- .Add(0, initialColumnNames[i])
- .Apply(1, *updateLambda)
- .With(0)
- .Callable("CastStruct")
- .Arg(0, "item")
- .Add(1, ExpandType(node->Pos(), *updateLambda->Head().Head().GetTypeAnn(), ctx))
- .Seal()
- .Done()
- .With(1)
- .Callable("Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal()
- .Done()
- .Seal()
- .Seal();
- } else {
- parent.List(ndx++)
- .Add(0, initialColumnNames[i])
- .Apply(1, *updateLambda)
- .With(0)
- .Callable("CastStruct")
- .Arg(0, "item")
- .Add(1, ExpandType(node->Pos(), *updateLambda->Head().Head().GetTypeAnn(), ctx))
- .Seal()
- .Done()
- .With(1)
- .Callable("Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal()
- .Done()
- .With(2)
- .Callable("Uint32")
- .Atom(0, ToString(i), TNodeFlags::Default)
- .Seal()
- .Done()
- .Seal()
- .Seal();
- }
- }
- return parent;
- })
- .Seal()
+ .Arg("state")
.Seal()
.Build();
-
- auto combineSave = ctx.Builder(node->Pos())
+
+ // Return state as-is
+ auto uniqCombineSave = Ctx.Builder(Node->Pos())
.Lambda()
.Param("key")
.Param("state")
.Callable("Just")
- .Callable(0, "AsStruct")
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i = 0; i < initialColumnNames.size(); ++i) {
- if (nondistinctColumns.find(i) == nondistinctColumns.end()) {
+ .Arg(0, "state")
+ .Seal()
+ .Seal()
+ .Build();
+
+ partialAgg = Ctx.Builder(Node->Pos())
+ .Callable("CombineByKey")
+ .Add(0, std::move(partialAgg))
+ .Add(1, PreMap)
+ .Add(2, keyExtractor)
+ .Add(3, std::move(uniqCombineInit))
+ .Add(4, std::move(uniqCombineUpdate))
+ .Add(5, std::move(uniqCombineSave))
+ .Seal()
+ .Build();
+ }
+ return partialAgg;
+}
+
+TExprNode::TPtr TAggregateExpander::GeneratePartialAggregateForNonDistinct(const TExprNode::TPtr& keyExtractor, const TExprNode::TPtr& pickleTypeNode)
+{
+ auto combineInit = Ctx.Builder(Node->Pos())
+ .Lambda()
+ .Param("key")
+ .Param("item")
+ .Callable("AsStruct")
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ ui32 ndx = 0;
+ for (ui32 i: NonDistinctColumns) {
+ auto trait = Traits[i];
+ auto initLambda = trait->Child(1);
+ if (initLambda->Head().ChildrenSize() == 1) {
+ parent.List(ndx++)
+ .Add(0, InitialColumnNames[i])
+ .Apply(1, *initLambda)
+ .With(0)
+ .Callable("CastStruct")
+ .Arg(0, "item")
+ .Add(1, ExpandType(Node->Pos(), *initLambda->Head().Head().GetTypeAnn(), Ctx))
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal();
+ } else {
+ parent.List(ndx++)
+ .Add(0, InitialColumnNames[i])
+ .Apply(1, *initLambda)
+ .With(0)
+ .Callable("CastStruct")
+ .Arg(0, "item")
+ .Add(1, ExpandType(Node->Pos(), *initLambda->Head().Head().GetTypeAnn(), Ctx))
+ .Seal()
+ .Done()
+ .With(1)
+ .Callable("Uint32")
+ .Atom(0, ToString(i), TNodeFlags::Default)
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal();
+ }
+ }
+ return parent;
+ })
+ .Seal()
+ .Seal()
+ .Build();
+
+ auto combineUpdate = Ctx.Builder(Node->Pos())
+ .Lambda()
+ .Param("key")
+ .Param("item")
+ .Param("state")
+ .Callable("AsStruct")
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ ui32 ndx = 0;
+ for (ui32 i: NonDistinctColumns) {
+ auto trait = Traits[i];
+ auto updateLambda = trait->Child(2);
+ if (updateLambda->Head().ChildrenSize() == 2) {
+ parent.List(ndx++)
+ .Add(0, InitialColumnNames[i])
+ .Apply(1, *updateLambda)
+ .With(0)
+ .Callable("CastStruct")
+ .Arg(0, "item")
+ .Add(1, ExpandType(Node->Pos(), *updateLambda->Head().Head().GetTypeAnn(), Ctx))
+ .Seal()
+ .Done()
+ .With(1)
+ .Callable("Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal();
+ } else {
+ parent.List(ndx++)
+ .Add(0, InitialColumnNames[i])
+ .Apply(1, *updateLambda)
+ .With(0)
+ .Callable("CastStruct")
+ .Arg(0, "item")
+ .Add(1, ExpandType(Node->Pos(), *updateLambda->Head().Head().GetTypeAnn(), Ctx))
+ .Seal()
+ .Done()
+ .With(1)
+ .Callable("Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
+ .Seal()
+ .Done()
+ .With(2)
+ .Callable("Uint32")
+ .Atom(0, ToString(i), TNodeFlags::Default)
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal();
+ }
+ }
+ return parent;
+ })
+ .Seal()
+ .Seal()
+ .Build();
+
+ auto combineSave = Ctx.Builder(Node->Pos())
+ .Lambda()
+ .Param("key")
+ .Param("state")
+ .Callable("Just")
+ .Callable(0, "AsStruct")
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ for (ui32 i = 0; i < InitialColumnNames.size(); ++i) {
+ if (NonDistinctColumns.find(i) == NonDistinctColumns.end()) {
+ parent.List(i)
+ .Add(0, InitialColumnNames[i])
+ .Add(1, NothingStates[i])
+ .Seal();
+ } else {
+ auto trait = Traits[i];
+ auto saveLambda = trait->Child(3);
+ if (!DistinctFields.empty()) {
parent.List(i)
- .Add(0, initialColumnNames[i])
- .Add(1, nothingStates[i])
- .Seal();
- } else {
- auto trait = aggregatedColumns->Child(i)->Child(1);
- auto saveLambda = trait->Child(3);
- if (!distinctFields.empty()) {
- parent.List(i)
- .Add(0, initialColumnNames[i])
- .Callable(1, "Just")
- .Apply(0, *saveLambda)
- .With(0)
- .Callable("Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal()
- .Done()
- .Seal()
- .Seal()
- .Seal();
- } else {
- parent.List(i)
- .Add(0, initialColumnNames[i])
- .Apply(1, *saveLambda)
+ .Add(0, InitialColumnNames[i])
+ .Callable(1, "Just")
+ .Apply(0, *saveLambda)
.With(0)
.Callable("Member")
.Arg(0, "state")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Done()
.Seal()
- .Seal();
- }
+ .Seal()
+ .Seal();
+ } else {
+ parent.List(i)
+ .Add(0, InitialColumnNames[i])
+ .Apply(1, *saveLambda)
+ .With(0)
+ .Callable("Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal();
}
}
- return parent;
- })
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- ui32 pos = 0;
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
- auto listBuilder = parent.List(initialColumnNames.size() + i);
- listBuilder.Add(0, keyColumns->ChildPtr(i));
- if (keyColumns->ChildrenSize() > 1) {
- if (needPickle) {
- listBuilder
- .Callable(1, "Nth")
- .Callable(0, "Unpickle")
- .Add(0, pickleTypeNode)
- .Arg(1, "key")
- .Seal()
- .Atom(1, ToString(pos), TNodeFlags::Default)
- .Seal();
- } else {
- listBuilder
- .Callable(1, "Nth")
- .Arg(0, "key")
- .Atom(1, ToString(pos), TNodeFlags::Default)
- .Seal();
- }
- ++pos;
+ }
+ return parent;
+ })
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ ui32 pos = 0;
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
+ auto listBuilder = parent.List(InitialColumnNames.size() + i);
+ listBuilder.Add(0, KeyColumns->ChildPtr(i));
+ if (KeyColumns->ChildrenSize() > 1) {
+ if (pickleTypeNode) {
+ listBuilder
+ .Callable(1, "Nth")
+ .Callable(0, "Unpickle")
+ .Add(0, pickleTypeNode)
+ .Arg(1, "key")
+ .Seal()
+ .Atom(1, ToString(pos), TNodeFlags::Default)
+ .Seal();
} else {
- if (needPickle) {
- listBuilder.Callable(1, "Unpickle")
- .Add(0, pickleTypeNode)
- .Arg(1, "key")
- .Seal();
- } else {
- listBuilder.Arg(1, "key");
- }
+ listBuilder
+ .Callable(1, "Nth")
+ .Arg(0, "key")
+ .Atom(1, ToString(pos), TNodeFlags::Default)
+ .Seal();
+ }
+ ++pos;
+ } else {
+ if (pickleTypeNode) {
+ listBuilder.Callable(1, "Unpickle")
+ .Add(0, pickleTypeNode)
+ .Arg(1, "key")
+ .Seal();
+ } else {
+ listBuilder.Arg(1, "key");
}
- listBuilder.Seal();
}
- return parent;
- })
- .Seal()
+ listBuilder.Seal();
+ }
+ return parent;
+ })
.Seal()
.Seal()
- .Build();
+ .Seal()
+ .Build();
- groupInput = ctx.Builder(node->Pos())
- .Callable("CombineByKey")
- .Add(0, list)
- .Add(1, preMap)
- .Add(2, keyExtractor)
- .Add(3, std::move(combineInit))
- .Add(4, std::move(combineUpdate))
- .Add(5, std::move(combineSave))
- .Seal()
- .Build();
- }
+ return Ctx.Builder(Node->Pos())
+ .Callable("CombineByKey")
+ .Add(0, AggList)
+ .Add(1, PreMap)
+ .Add(2, keyExtractor)
+ .Add(3, std::move(combineInit))
+ .Add(4, std::move(combineUpdate))
+ .Add(5, std::move(combineSave))
+ .Seal()
+ .Build();
+}
- for (ui32 index = 0; index < distinctFields.size(); ++index) {
- auto distinctField = distinctFields[index];
- auto& indicies = distinct2Columns[distinctField->Content()];
- auto distinctIndex = rowType->FindItem(distinctField->Content());
- YQL_ENSURE(distinctIndex, "Unknown field: " << distinctField->Content());
- auto distinctType = rowType->GetItems()[*distinctIndex]->GetItemType();
- TVector<const TTypeAnnotationNode*> distinctKeyItemTypes = keyItemTypes;
- distinctKeyItemTypes.push_back(distinctType);
- bool needDistinctPickle = compact ? false : needPickle;
- auto valueType = distinctType;
- if (distinctType->GetKind() == ETypeAnnotationKind::Optional) {
- distinctType = distinctType->Cast<TOptionalExprType>()->GetItemType();
- }
+TExprNode::TPtr TAggregateExpander::GenerateDistinctGrouper(const TExprNode::TPtr distinctField,
+ const TVector<const TTypeAnnotationNode*>& keyItemTypes, bool needDistinctPickle)
+{
+ auto& indicies = Distinct2Columns[distinctField->Content()];
+ auto distinctIndex = RowType->FindItem(distinctField->Content());
+ YQL_ENSURE(distinctIndex, "Unknown field: " << distinctField->Content());
+ auto distinctType = RowType->GetItems()[*distinctIndex]->GetItemType();
+ TVector<const TTypeAnnotationNode*> distinctKeyItemTypes = keyItemTypes;
+ distinctKeyItemTypes.push_back(distinctType);
+ auto valueType = distinctType;
+ if (distinctType->GetKind() == ETypeAnnotationKind::Optional) {
+ distinctType = distinctType->Cast<TOptionalExprType>()->GetItemType();
+ }
- if (distinctType->GetKind() != ETypeAnnotationKind::Data) {
- needDistinctPickle = true;
- valueType = ctx.MakeType<TDataExprType>(EDataSlot::String);
- }
+ if (distinctType->GetKind() != ETypeAnnotationKind::Data) {
+ needDistinctPickle = true;
+ valueType = Ctx.MakeType<TDataExprType>(EDataSlot::String);
+ }
- const auto expandedValueType = needDistinctPickle ?
- ctx.Builder(node->Pos())
- .Callable("DataType")
- .Atom(0, "String", TNodeFlags::Default)
- .Seal()
- .Build():
- ExpandType(node->Pos(), *valueType, ctx);
-
- distinctFieldNeedsPickle[distinctField->Content()] = needDistinctPickle;
- auto udfSetCreateValue = ctx.Builder(node->Pos())
- .Callable("Udf")
- .Atom(0, "Set.Create")
- .Callable(1, "Void").Seal()
- .Callable(2, "TupleType")
- .Callable(0, "TupleType")
- .Add(0, expandedValueType)
- .Callable(1, "DataType")
- .Atom(0, "Uint32", TNodeFlags::Default)
- .Seal()
+ const auto expandedValueType = needDistinctPickle ?
+ Ctx.Builder(Node->Pos())
+ .Callable("DataType")
+ .Atom(0, "String", TNodeFlags::Default)
+ .Seal()
+ .Build()
+ : ExpandType(Node->Pos(), *valueType, Ctx);
+
+ DistinctFieldNeedsPickle[distinctField->Content()] = needDistinctPickle;
+ auto udfSetCreateValue = Ctx.Builder(Node->Pos())
+ .Callable("Udf")
+ .Atom(0, "Set.Create")
+ .Callable(1, "Void").Seal()
+ .Callable(2, "TupleType")
+ .Callable(0, "TupleType")
+ .Add(0, expandedValueType)
+ .Callable(1, "DataType")
+ .Atom(0, "Uint32", TNodeFlags::Default)
.Seal()
- .Callable(1, "StructType").Seal()
- .Add(2, expandedValueType)
.Seal()
+ .Callable(1, "StructType").Seal()
+ .Add(2, expandedValueType)
.Seal()
- .Build();
+ .Seal()
+ .Build();
- udfSetCreate[distinctField->Content()] = udfSetCreateValue;
- auto resourceType = ctx.Builder(node->Pos())
- .Callable("TypeOf")
- .Callable(0, "Apply")
- .Add(0, udfSetCreateValue)
- .Callable(1, "InstanceOf")
- .Add(0, expandedValueType)
- .Seal()
- .Callable(2, "Uint32")
- .Atom(0, "0", TNodeFlags::Default)
- .Seal()
+ UdfSetCreate[distinctField->Content()] = udfSetCreateValue;
+ auto resourceType = Ctx.Builder(Node->Pos())
+ .Callable("TypeOf")
+ .Callable(0, "Apply")
+ .Add(0, udfSetCreateValue)
+ .Callable(1, "InstanceOf")
+ .Add(0, expandedValueType)
+ .Seal()
+ .Callable(2, "Uint32")
+ .Atom(0, "0", TNodeFlags::Default)
.Seal()
.Seal()
- .Build();
+ .Seal()
+ .Build();
- udfAddValue[distinctField->Content()] = ctx.Builder(node->Pos())
- .Callable("Udf")
- .Atom(0, "Set.AddValue")
- .Callable(1, "Void").Seal()
- .Callable(2, "TupleType")
- .Callable(0, "TupleType")
- .Add(0, resourceType)
- .Add(1, expandedValueType)
- .Seal()
- .Callable(1, "StructType").Seal()
- .Add(2, expandedValueType)
+ UdfAddValue[distinctField->Content()] = Ctx.Builder(Node->Pos())
+ .Callable("Udf")
+ .Atom(0, "Set.AddValue")
+ .Callable(1, "Void").Seal()
+ .Callable(2, "TupleType")
+ .Callable(0, "TupleType")
+ .Add(0, resourceType)
+ .Add(1, expandedValueType)
.Seal()
+ .Callable(1, "StructType").Seal()
+ .Add(2, expandedValueType)
.Seal()
- .Build();
+ .Seal()
+ .Build();
- udfWasChanged[distinctField->Content()] = ctx.Builder(node->Pos())
- .Callable("Udf")
- .Atom(0, "Set.WasChanged")
- .Callable(1, "Void").Seal()
- .Callable(2, "TupleType")
- .Callable(0, "TupleType")
- .Add(0, resourceType)
- .Seal()
- .Callable(1, "StructType").Seal()
- .Add(2, expandedValueType)
+ UdfWasChanged[distinctField->Content()] = Ctx.Builder(Node->Pos())
+ .Callable("Udf")
+ .Atom(0, "Set.WasChanged")
+ .Callable(1, "Void").Seal()
+ .Callable(2, "TupleType")
+ .Callable(0, "TupleType")
+ .Add(0, resourceType)
.Seal()
+ .Callable(1, "StructType").Seal()
+ .Add(2, expandedValueType)
.Seal()
- .Build();
+ .Seal()
+ .Build();
- auto distinctKeyExtractor = ctx.Builder(node->Pos())
- .Lambda()
- .Param("item")
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- if (keyColumns->ChildrenSize() != 0) {
- auto listBuilder = parent.List();
- ui32 pos = 0;
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
- listBuilder
- .Callable(pos++, "Member")
- .Arg(0, "item")
- .Add(1, keyColumns->ChildPtr(i))
- .Seal();
- }
+ auto distinctKeyExtractor = Ctx.Builder(Node->Pos())
+ .Lambda()
+ .Param("item")
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ if (KeyColumns->ChildrenSize() != 0) {
+ auto listBuilder = parent.List();
+ ui32 pos = 0;
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
listBuilder
- .Callable(pos, "Member")
- .Arg(0, "item")
- .Add(1, distinctField)
- .Seal();
-
- return listBuilder.Seal();
- } else {
- return parent
- .Callable("Member")
+ .Callable(pos++, "Member")
.Arg(0, "item")
- .Add(1, distinctField)
+ .Add(1, KeyColumns->ChildPtr(i))
.Seal();
}
- })
- .Seal()
- .Build();
+ listBuilder
+ .Callable(pos, "Member")
+ .Arg(0, "item")
+ .Add(1, distinctField)
+ .Seal();
- const TTypeAnnotationNode* distinctPickleType = nullptr;
- TExprNode::TPtr distinctPickleTypeNode;
- if (needDistinctPickle) {
- distinctPickleType = keyColumns->ChildrenSize() > 0 ? ctx.MakeType<TTupleExprType>(distinctKeyItemTypes) : distinctKeyItemTypes.front();
- distinctPickleTypeNode = ExpandType(node->Pos(), *distinctPickleType, ctx);
- }
+ return listBuilder.Seal();
+ } else {
+ return parent
+ .Callable("Member")
+ .Arg(0, "item")
+ .Add(1, distinctField)
+ .Seal();
+ }
+ })
+ .Seal()
+ .Build();
- if (needDistinctPickle) {
- distinctKeyExtractor = ctx.Builder(node->Pos())
- .Lambda()
- .Param("item")
- .Callable("StablePickle")
- .Apply(0, *distinctKeyExtractor).With(0, "item").Seal()
- .Seal()
- .Seal()
- .Build();
- }
+ const TTypeAnnotationNode* distinctPickleType = nullptr;
+ TExprNode::TPtr distinctPickleTypeNode;
+ if (needDistinctPickle) {
+ distinctPickleType = KeyColumns->ChildrenSize() > 0 ? Ctx.MakeType<TTupleExprType>(distinctKeyItemTypes) : distinctKeyItemTypes.front();
+ distinctPickleTypeNode = ExpandType(Node->Pos(), *distinctPickleType, Ctx);
+ }
- auto distinctCombineInit = ctx.Builder(node->Pos())
+ if (needDistinctPickle) {
+ distinctKeyExtractor = Ctx.Builder(Node->Pos())
.Lambda()
- .Param("key")
.Param("item")
- .Callable("AsStruct")
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- ui32 ndx = 0;
- for (ui32 i: indicies) {
- auto trait = aggregatedColumns->Child(i)->Child(1);
- auto initLambda = trait->Child(1);
- if (initLambda->Head().ChildrenSize() == 1) {
- parent.List(ndx++)
- .Add(0, initialColumnNames[i])
- .Apply(1, *initLambda)
- .With(0)
- .Callable("Member")
- .Arg(0, "item")
- .Add(1, distinctField)
- .Seal()
- .Done()
- .Seal()
- .Seal();
- } else {
- parent.List(ndx++)
- .Add(0, initialColumnNames[i])
- .Apply(1, *initLambda)
- .With(0)
- .Callable("Member")
- .Arg(0, "item")
- .Add(1, distinctField)
- .Seal()
- .Done()
- .With(1)
- .Callable("Uint32")
- .Atom(0, ToString(i), TNodeFlags::Default)
- .Seal()
- .Done()
- .Seal()
- .Seal();
- }
- }
- return parent;
- })
+ .Callable("StablePickle")
+ .Apply(0, *distinctKeyExtractor).With(0, "item").Seal()
.Seal()
.Seal()
.Build();
+ }
- auto distinctCombineUpdate = ctx.Builder(node->Pos())
- .Lambda()
- .Param("key")
- .Param("item")
- .Param("state")
- .Arg("state")
+ auto distinctCombineInit = Ctx.Builder(Node->Pos())
+ .Lambda()
+ .Param("key")
+ .Param("item")
+ .Callable("AsStruct")
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ ui32 ndx = 0;
+ for (ui32 i: indicies) {
+ auto trait = Traits[i];
+ auto initLambda = trait->Child(1);
+ if (initLambda->Head().ChildrenSize() == 1) {
+ parent.List(ndx++)
+ .Add(0, InitialColumnNames[i])
+ .Apply(1, *initLambda)
+ .With(0)
+ .Callable("Member")
+ .Arg(0, "item")
+ .Add(1, distinctField)
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal();
+ } else {
+ parent.List(ndx++)
+ .Add(0, InitialColumnNames[i])
+ .Apply(1, *initLambda)
+ .With(0)
+ .Callable("Member")
+ .Arg(0, "item")
+ .Add(1, distinctField)
+ .Seal()
+ .Done()
+ .With(1)
+ .Callable("Uint32")
+ .Atom(0, ToString(i), TNodeFlags::Default)
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal();
+ }
+ }
+ return parent;
+ })
.Seal()
- .Build();
+ .Seal()
+ .Build();
- ui32 ndx = 0;
- auto distinctCombineSave = ctx.Builder(node->Pos())
- .Lambda()
- .Param("key")
- .Param("state")
- .Callable("Just")
- .Callable(0, "AsStruct")
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i: indicies) {
- auto trait = aggregatedColumns->Child(i)->Child(1);
- auto saveLambda = trait->Child(3);
- parent.List(ndx++)
- .Add(0, initialColumnNames[i])
- .Apply(1, *saveLambda)
- .With(0)
- .Callable("Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal()
- .Done()
- .Seal()
- .Seal();
- }
- return parent;
- })
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- if (keyColumns->ChildrenSize() > 0) {
- if (needDistinctPickle) {
- ui32 pos = 0;
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
- parent.List(ndx++)
- .Add(0, keyColumns->ChildPtr(i))
- .Callable(1, "Nth")
- .Callable(0, "Unpickle")
- .Add(0, distinctPickleTypeNode)
- .Arg(1, "key")
- .Seal()
- .Atom(1, ToString(pos++), TNodeFlags::Default)
- .Seal()
- .Seal();
- }
+ auto distinctCombineUpdate = Ctx.Builder(Node->Pos())
+ .Lambda()
+ .Param("key")
+ .Param("item")
+ .Param("state")
+ .Arg("state")
+ .Seal()
+ .Build();
+
+ ui32 ndx = 0;
+ auto distinctCombineSave = Ctx.Builder(Node->Pos())
+ .Lambda()
+ .Param("key")
+ .Param("state")
+ .Callable("Just")
+ .Callable(0, "AsStruct")
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ for (ui32 i: indicies) {
+ auto trait = Traits[i];
+ auto saveLambda = trait->Child(3);
+ parent.List(ndx++)
+ .Add(0, InitialColumnNames[i])
+ .Apply(1, *saveLambda)
+ .With(0)
+ .Callable("Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal();
+ }
+ return parent;
+ })
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ if (KeyColumns->ChildrenSize() > 0) {
+ if (needDistinctPickle) {
+ ui32 pos = 0;
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
parent.List(ndx++)
- .Add(0, distinctField)
+ .Add(0, KeyColumns->ChildPtr(i))
.Callable(1, "Nth")
- .Callable(0, "Unpickle")
- .Add(0, distinctPickleTypeNode)
- .Arg(1, "key")
- .Seal()
+ .Callable(0, "Unpickle")
+ .Add(0, distinctPickleTypeNode)
+ .Arg(1, "key")
+ .Seal()
.Atom(1, ToString(pos++), TNodeFlags::Default)
.Seal()
- .Seal();
-
- } else {
- ui32 pos = 0;
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
- parent.List(ndx++)
- .Add(0, keyColumns->ChildPtr(i))
- .Callable(1, "Nth")
- .Arg(0, "key")
- .Atom(1, ToString(pos++), TNodeFlags::Default)
+ .Seal();
+ }
+ parent.List(ndx++)
+ .Add(0, distinctField)
+ .Callable(1, "Nth")
+ .Callable(0, "Unpickle")
+ .Add(0, distinctPickleTypeNode)
+ .Arg(1, "key")
.Seal()
- .Seal();
- }
+ .Atom(1, ToString(pos++), TNodeFlags::Default)
+ .Seal()
+ .Seal();
+
+ } else {
+ ui32 pos = 0;
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
parent.List(ndx++)
- .Add(0, distinctField)
+ .Add(0, KeyColumns->ChildPtr(i))
.Callable(1, "Nth")
.Arg(0, "key")
.Atom(1, ToString(pos++), TNodeFlags::Default)
.Seal()
- .Seal();
+ .Seal();
}
- } else {
- if (needDistinctPickle) {
- parent.List(ndx++)
- .Add(0, distinctField)
- .Callable(1, "Unpickle")
- .Add(0, distinctPickleTypeNode)
- .Arg(1, "key")
- .Seal()
- .Seal();
- } else {
- parent.List(ndx++)
- .Add(0, distinctField)
+ parent.List(ndx++)
+ .Add(0, distinctField)
+ .Callable(1, "Nth")
+ .Arg(0, "key")
+ .Atom(1, ToString(pos++), TNodeFlags::Default)
+ .Seal()
+ .Seal();
+ }
+ } else {
+ if (needDistinctPickle) {
+ parent.List(ndx++)
+ .Add(0, distinctField)
+ .Callable(1, "Unpickle")
+ .Add(0, distinctPickleTypeNode)
.Arg(1, "key")
- .Seal();
- }
+ .Seal()
+ .Seal();
+ } else {
+ parent.List(ndx++)
+ .Add(0, distinctField)
+ .Arg(1, "key")
+ .Seal();
}
- return parent;
- })
- .Seal()
+ }
+ return parent;
+ })
.Seal()
.Seal()
- .Build();
+ .Seal()
+ .Build();
- auto distinctCombiner = ctx.Builder(node->Pos())
- .Callable("CombineByKey")
- .Add(0, list)
- .Add(1, preMap)
- .Add(2, distinctKeyExtractor)
- .Add(3, std::move(distinctCombineInit))
- .Add(4, std::move(distinctCombineUpdate))
- .Add(5, std::move(distinctCombineSave))
- .Seal()
- .Build();
+ auto distinctCombiner = Ctx.Builder(Node->Pos())
+ .Callable("CombineByKey")
+ .Add(0, AggList)
+ .Add(1, PreMap)
+ .Add(2, distinctKeyExtractor)
+ .Add(3, std::move(distinctCombineInit))
+ .Add(4, std::move(distinctCombineUpdate))
+ .Add(5, std::move(distinctCombineSave))
+ .Seal()
+ .Build();
- auto distinctGrouper = ctx.Builder(node->Pos())
- .Callable("PartitionsByKeys")
- .Add(0, std::move(distinctCombiner))
- .Add(1, distinctKeyExtractor)
- .Callable(2, "Void").Seal()
- .Callable(3, "Void").Seal()
- .Lambda(4)
- .Param("groups")
- .Callable("Map")
- .Callable(0, "Condense1")
- .Arg(0, "groups")
- .Lambda(1)
- .Param("item")
- .Arg("item")
- .Seal()
- .Lambda(2)
- .Param("item")
- .Param("state")
- .Callable("IsKeySwitch")
- .Arg(0, "item")
- .Arg(1, "state")
- .Add(2, distinctKeyExtractor)
- .Add(3, distinctKeyExtractor)
- .Seal()
- .Seal()
- .Lambda(3)
- .Param("item")
- .Param("state")
- .Arg("item")
+ auto distinctGrouper = Ctx.Builder(Node->Pos())
+ .Callable("PartitionsByKeys")
+ .Add(0, std::move(distinctCombiner))
+ .Add(1, distinctKeyExtractor)
+ .Callable(2, "Void").Seal()
+ .Callable(3, "Void").Seal()
+ .Lambda(4)
+ .Param("groups")
+ .Callable("Map")
+ .Callable(0, "Condense1")
+ .Arg(0, "groups")
+ .Lambda(1)
+ .Param("item")
+ .Arg("item")
+ .Seal()
+ .Lambda(2)
+ .Param("item")
+ .Param("state")
+ .Callable("IsKeySwitch")
+ .Arg(0, "item")
+ .Arg(1, "state")
+ .Add(2, distinctKeyExtractor)
+ .Add(3, distinctKeyExtractor)
.Seal()
.Seal()
- .Lambda(1)
+ .Lambda(3)
+ .Param("item")
.Param("state")
- .Callable("AsStruct")
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i = 0; i < initialColumnNames.size(); ++i) {
- if (indicies.find(i) != indicies.end()) {
- parent.List(i)
- .Add(0, initialColumnNames[i])
- .Callable(1, "Just")
- .Callable(0, "Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal()
+ .Arg("item")
+ .Seal()
+ .Seal()
+ .Lambda(1)
+ .Param("state")
+ .Callable("AsStruct")
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ for (ui32 i = 0; i < InitialColumnNames.size(); ++i) {
+ if (indicies.find(i) != indicies.end()) {
+ parent.List(i)
+ .Add(0, InitialColumnNames[i])
+ .Callable(1, "Just")
+ .Callable(0, "Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
.Seal()
- .Seal();
- } else {
- parent.List(i)
- .Add(0, initialColumnNames[i])
- .Add(1, nothingStates[i])
- .Seal();
- }
+ .Seal()
+ .Seal();
+ } else {
+ parent.List(i)
+ .Add(0, InitialColumnNames[i])
+ .Add(1, NothingStates[i])
+ .Seal();
}
- return parent;
- })
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- if (keyColumns->ChildrenSize() > 0) {
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
- parent.List(initialColumnNames.size() + i)
- .Add(0, keyColumns->ChildPtr(i))
- .Callable(1, "Member")
- .Arg(0, "state")
- .Add(1, keyColumns->ChildPtr(i))
- .Seal().Seal();
- }
+ }
+ return parent;
+ })
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ if (KeyColumns->ChildrenSize() > 0) {
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
+ parent.List(InitialColumnNames.size() + i)
+ .Add(0, KeyColumns->ChildPtr(i))
+ .Callable(1, "Member")
+ .Arg(0, "state")
+ .Add(1, KeyColumns->ChildPtr(i))
+ .Seal().Seal();
}
- return parent;
- })
- .Seal()
+ }
+ return parent;
+ })
.Seal()
.Seal()
.Seal()
.Seal()
- .Build();
-
- if (!groupInput) {
- groupInput = std::move(distinctGrouper);
- } else {
- groupInput = ctx.Builder(node->Pos())
- .Callable("Extend")
- .Add(0, std::move(groupInput))
- .Add(1, std::move(distinctGrouper))
- .Seal()
- .Build();
- }
- }
+ .Seal()
+ .Build();
+ return distinctGrouper;
+}
- // If no aggregation functions than add addional combiner
- if (aggregatedColumns->ChildrenSize() == 0 && keyColumns->ChildrenSize() > 0 && !sessionUpdate) {
- // Return key as-is
- auto uniqCombineInit = ctx.Builder(node->Pos())
+TExprNode::TPtr TAggregateExpander::ReturnKeyAsIsForCombineInit(const TExprNode::TPtr& pickleTypeNode)
+{
+ return Ctx.Builder(Node->Pos())
.Lambda()
.Param("key")
.Param("item")
.Callable("AsStruct")
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
ui32 pos = 0;
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
auto listBuilder = parent.List(i);
- listBuilder.Add(0, keyColumns->Child(i));
- if (keyColumns->ChildrenSize() > 1) {
- if (needPickle) {
+ listBuilder.Add(0, KeyColumns->Child(i));
+ if (KeyColumns->ChildrenSize() > 1) {
+ if (pickleTypeNode) {
listBuilder
.Callable(1, "Nth")
.Callable(0, "Unpickle")
@@ -850,7 +958,7 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Seal();
}
} else {
- if (needPickle) {
+ if (pickleTypeNode) {
listBuilder.Callable(1, "Unpickle")
.Add(0, pickleTypeNode)
.Arg(1, "key")
@@ -866,97 +974,172 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Seal()
.Seal()
.Build();
+}
+
+TExprNode::TPtr TAggregateExpander::GeneratePostAggregate(const TExprNode::TPtr& preAgg, const TExprNode::TPtr& keyExtractor)
+{
+ auto preprocessLambda = GeneratePreprocessLambda(keyExtractor);
+ auto condenseSwitch = GenerateCondenseSwitch(keyExtractor);
+ auto postAgg = Ctx.Builder(Node->Pos())
+ .Callable("PartitionsByKeys")
+ .Add(0, std::move(preAgg))
+ .Add(1, keyExtractor)
+ .Add(2, SortParams.Order)
+ .Add(3, SortParams.Key)
+ .Lambda(4)
+ .Param("stream")
+ .Apply(GetContextLambda())
+ .With(0)
+ .Callable("Map")
+ .Callable(0, "Condense1")
+ .Apply(0, preprocessLambda)
+ .With(0, "stream")
+ .Seal()
+ .Add(1, GeneratePostAggregateInitPhase())
+ .Add(2, condenseSwitch)
+ .Add(3, GeneratePostAggregateMergePhase())
+ .Seal()
+ .Add(1, GeneratePostAggregateSavePhase())
+ .Seal()
+ .Done()
+ .Seal()
+ .Seal()
+ .Seal().Build();
+
+ if (KeyColumns->ChildrenSize() == 0 && !HaveSessionSetting) {
+ return MakeSingleGroupRow(*Node, postAgg, Ctx);
+ }
- auto uniqCombineUpdate = ctx.Builder(node->Pos())
+ return postAgg;
+}
+
+TExprNode::TPtr TAggregateExpander::GeneratePreprocessLambda(const TExprNode::TPtr& keyExtractor)
+{
+ TExprNode::TPtr preprocessLambda;
+ if (SessionWindowParams.Update) {
+ YQL_ENSURE(EffectiveCompact);
+ YQL_ENSURE(SessionWindowParams.Key);
+ YQL_ENSURE(SessionWindowParams.KeyType);
+ YQL_ENSURE(SessionWindowParams.Init);
+
+ preprocessLambda = AddSessionParamsMemberLambda(Node->Pos(), SessionStartMemberName, "", keyExtractor,
+ SessionWindowParams.Key, SessionWindowParams.Init, SessionWindowParams.Update, Ctx);
+ } else {
+ YQL_ENSURE(!SessionWindowParams.Key);
+ preprocessLambda = MakeIdentityLambda(Node->Pos(), Ctx);
+ }
+ return preprocessLambda;
+}
+
+TExprNode::TPtr TAggregateExpander::GenerateCondenseSwitch(const TExprNode::TPtr& keyExtractor)
+{
+ TExprNode::TPtr condenseSwitch;
+ if (SessionWindowParams.Update) {
+ YQL_ENSURE(EffectiveCompact);
+ YQL_ENSURE(SessionWindowParams.Key);
+ YQL_ENSURE(SessionWindowParams.KeyType);
+ YQL_ENSURE(SessionWindowParams.Init);
+
+ condenseSwitch = Ctx.Builder(Node->Pos())
.Lambda()
- .Param("key")
.Param("item")
.Param("state")
- .Arg("state")
+ .Callable("Or")
+ .Callable(0, "AggrNotEquals")
+ .Apply(0, keyExtractor)
+ .With(0, "item")
+ .Seal()
+ .Apply(1, keyExtractor)
+ .With(0, "state")
+ .Seal()
+ .Seal()
+ .Callable(1, "AggrNotEquals")
+ .Callable(0, "Member")
+ .Arg(0, "item")
+ .Atom(1, SessionStartMemberName)
+ .Seal()
+ .Callable(1, "Member")
+ .Arg(0, "state")
+ .Atom(1, SessionStartMemberName)
+ .Seal()
+ .Seal()
+ .Seal()
.Seal()
.Build();
-
- // Return state as-is
- auto uniqCombineSave = ctx.Builder(node->Pos())
+ } else {
+ YQL_ENSURE(!SessionWindowParams.Key);
+ condenseSwitch = Ctx.Builder(Node->Pos())
.Lambda()
- .Param("key")
+ .Param("item")
.Param("state")
- .Callable("Just")
- .Arg(0, "state")
+ .Callable("IsKeySwitch")
+ .Arg(0, "item")
+ .Arg(1, "state")
+ .Add(2, keyExtractor)
+ .Add(3, keyExtractor)
.Seal()
.Seal()
.Build();
-
- if (!groupInput) {
- groupInput = list;
- }
-
- groupInput = ctx.Builder(node->Pos())
- .Callable("CombineByKey")
- .Add(0, std::move(groupInput))
- .Add(1, preMap)
- .Add(2, keyExtractor)
- .Add(3, std::move(uniqCombineInit))
- .Add(4, std::move(uniqCombineUpdate))
- .Add(5, std::move(uniqCombineSave))
- .Seal()
- .Build();
}
+ return condenseSwitch;
+}
+TExprNode::TPtr TAggregateExpander::GeneratePostAggregateInitPhase()
+{
ui32 index = 0U;
- auto groupInit = ctx.Builder(node->Pos())
+ return Ctx.Builder(Node->Pos())
.Lambda()
.Param("item")
.Callable("AsStruct")
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
parent
.List(index++)
- .Add(0, keyColumns->ChildPtr(i))
+ .Add(0, KeyColumns->ChildPtr(i))
.Callable(1, "Member")
.Arg(0, "item")
- .Add(1, keyColumns->ChildPtr(i))
+ .Add(1, KeyColumns->ChildPtr(i))
.Seal()
.Seal();
}
- if (sessionUpdate) {
+ if (SessionWindowParams.Update) {
parent
.List(index++)
- .Atom(0, sessionStartMemberName)
+ .Atom(0, SessionStartMemberName)
.Callable(1, "Member")
.Arg(0, "item")
- .Atom(1, sessionStartMemberName)
+ .Atom(1, SessionStartMemberName)
.Seal()
.Seal();
}
return parent;
})
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i = 0; i < initialColumnNames.size(); ++i) {
- auto child = aggregatedColumns->Child(i);
- auto trait = child->Child(1);
- if (!compact) {
+ for (ui32 i = 0; i < InitialColumnNames.size(); ++i) {
+ auto child = AggregatedColumns->Child(i);
+ auto trait = Traits[i];
+ if (!EffectiveCompact) {
auto loadLambda = trait->Child(4);
- if (!distinctFields.empty()) {
+ if (!DistinctFields.empty()) {
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.Callable(1, "Map")
.Callable(0, "Member")
.Arg(0, "item")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Add(1, loadLambda)
.Seal()
.Seal();
} else {
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.Apply(1, *loadLambda)
.With(0)
.Callable("Member")
.Arg(0, "item")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Done()
.Seal();
@@ -978,7 +1161,7 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
parent
.Callable("CastStruct")
.Arg(0, "item")
- .Add(1, ExpandType(node->Pos(), *initLambda->Head().Head().GetTypeAnn(), ctx))
+ .Add(1, ExpandType(Node->Pos(), *initLambda->Head().Head().GetTypeAnn(), Ctx))
.Seal();
}
@@ -1002,16 +1185,16 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
};
if (distinctField) {
- const bool isFirst = *distinct2Columns[distinctField->Content()].begin() == i;
+ const bool isFirst = *Distinct2Columns[distinctField->Content()].begin() == i;
if (isFirst) {
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.List(1)
.Callable(0, "NamedApply")
- .Add(0, udfSetCreate[distinctField->Content()])
+ .Add(0, UdfSetCreate[distinctField->Content()])
.List(1)
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- if (!distinctFieldNeedsPickle[distinctField->Content()]) {
+ if (!DistinctFieldNeedsPickle[distinctField->Content()]) {
parent.Callable(0, "Member")
.Arg(0, "item")
.Add(1, distinctField)
@@ -1043,13 +1226,13 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Seal();
} else {
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.Do(initApply)
.Seal();
}
} else {
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.Do(initApply)
.Seal();
}
@@ -1060,72 +1243,205 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Seal()
.Seal()
.Build();
+}
- index = 0;
- auto groupMerge = ctx.Builder(node->Pos())
+TExprNode::TPtr TAggregateExpander::GeneratePostAggregateSavePhase()
+{
+ ui32 index = 0U;
+ return Ctx.Builder(Node->Pos())
+ .Lambda()
+ .Param("state")
+ .Callable("AsStruct")
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
+ if (KeyColumns->Child(i)->Content() == SessionStartMemberName) {
+ continue;
+ }
+ parent
+ .List(index++)
+ .Add(0, KeyColumns->ChildPtr(i))
+ .Callable(1, "Member")
+ .Arg(0, "state")
+ .Add(1, KeyColumns->ChildPtr(i))
+ .Seal()
+ .Seal();
+ }
+
+ if (SessionOutputColumn) {
+ parent
+ .List(index++)
+ .Atom(0, *SessionOutputColumn)
+ .Callable(1, "Member")
+ .Arg(0, "state")
+ .Atom(1, SessionStartMemberName)
+ .Seal()
+ .Seal();
+ }
+ return parent;
+ })
+ .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ for (ui32 i = 0; i < InitialColumnNames.size(); ++i) {
+ auto child = AggregatedColumns->Child(i);
+ auto trait = Traits[i];
+ auto finishLambda = trait->Child(6);
+
+ if (!EffectiveCompact && !DistinctFields.empty()) {
+ if (child->Head().IsAtom()) {
+ parent.List(index++)
+ .Add(0, FinalColumnNames[i])
+ .Callable(1, "Unwrap")
+ .Callable(0, "Map")
+ .Callable(0, "Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
+ .Seal()
+ .Add(1, finishLambda)
+ .Seal()
+ .Seal()
+ .Seal();
+ } else {
+ const auto& multiFields = child->Child(0);
+ for (ui32 field = 0; field < multiFields->ChildrenSize(); ++field) {
+ parent.List(index++)
+ .Atom(0, multiFields->Child(field)->Content())
+ .Callable(1, "Nth")
+ .Callable(0, "Unwrap")
+ .Callable(0, "Map")
+ .Callable(0, "Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
+ .Seal()
+ .Add(1, finishLambda)
+ .Seal()
+ .Seal()
+ .Atom(1, ToString(field), TNodeFlags::Default)
+ .Seal()
+ .Seal();
+ }
+ }
+ } else {
+ auto distinctField = (child->ChildrenSize() == 3) ? child->Child(2) : nullptr;
+ auto stateExtractor = [&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
+ const bool isFirst = distinctField ? (*Distinct2Columns[distinctField->Content()].begin() == i) : false;
+ if (distinctField && isFirst) {
+ parent.Callable("Nth")
+ .Callable(0, "Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
+ .Seal()
+ .Atom(1, "1", TNodeFlags::Default)
+ .Seal();
+ } else {
+ parent.Callable("Member")
+ .Arg(0, "state")
+ .Add(1, InitialColumnNames[i])
+ .Seal();
+ }
+
+ return parent;
+ };
+
+ if (child->Head().IsAtom()) {
+ parent.List(index++)
+ .Add(0, FinalColumnNames[i])
+ .Apply(1, *finishLambda)
+ .With(0)
+ .Do(stateExtractor)
+ .Done()
+ .Seal()
+ .Seal();
+ } else {
+ const auto& multiFields = child->Head();
+ for (ui32 field = 0; field < multiFields.ChildrenSize(); ++field) {
+ parent.List(index++)
+ .Atom(0, multiFields.Child(field)->Content())
+ .Callable(1, "Nth")
+ .Apply(0, *finishLambda)
+ .With(0)
+ .Do(stateExtractor)
+ .Done()
+ .Seal()
+ .Atom(1, ToString(field), TNodeFlags::Default)
+ .Seal()
+ .Seal();
+ }
+ }
+ }
+ }
+ return parent;
+ })
+ .Seal()
+ .Seal()
+ .Build();
+}
+
+TExprNode::TPtr TAggregateExpander::GeneratePostAggregateMergePhase()
+{
+ ui32 index = 0U;
+ return Ctx.Builder(Node->Pos())
.Lambda()
.Param("item")
.Param("state")
.Callable("AsStruct")
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
+ for (ui32 i = 0; i < KeyColumns->ChildrenSize(); ++i) {
parent
.List(index++)
- .Add(0, keyColumns->ChildPtr(i))
+ .Add(0, KeyColumns->ChildPtr(i))
.Callable(1, "Member")
.Arg(0, "state")
- .Add(1, keyColumns->ChildPtr(i))
+ .Add(1, KeyColumns->ChildPtr(i))
.Seal()
.Seal();
}
- if (sessionUpdate) {
+ if (SessionWindowParams.Update) {
parent
.List(index++)
- .Atom(0, sessionStartMemberName)
+ .Atom(0, SessionStartMemberName)
.Callable(1, "Member")
.Arg(0, "state")
- .Atom(1, sessionStartMemberName)
+ .Atom(1, SessionStartMemberName)
.Seal()
.Seal();
}
return parent;
})
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i = 0; i < initialColumnNames.size(); ++i) {
- auto child = aggregatedColumns->Child(i);
- auto trait = child->Child(1);
- if (!compact) {
+ for (ui32 i = 0; i < InitialColumnNames.size(); ++i) {
+ auto child = AggregatedColumns->Child(i);
+ auto trait = Traits[i];
+ if (!EffectiveCompact) {
auto loadLambda = trait->Child(4);
auto mergeLambda = trait->Child(5);
- if (!distinctFields.empty()) {
+ if (!DistinctFields.empty()) {
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.Callable(1, "OptionalReduce")
.Callable(0, "Map")
.Callable(0, "Member")
.Arg(0, "item")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Add(1, loadLambda)
.Seal()
.Callable(1, "Member")
.Arg(0, "state")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Add(2, mergeLambda)
.Seal()
.Seal();
} else {
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.Apply(1, *mergeLambda)
.With(0)
.Apply(*loadLambda)
.With(0)
.Callable("Member")
.Arg(0, "item")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Done()
.Seal()
@@ -1133,7 +1449,7 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.With(1)
.Callable("Member")
.Arg(0, "state")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Done()
.Seal()
@@ -1142,7 +1458,7 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
} else {
auto updateLambda = trait->Child(2);
auto distinctField = (child->ChildrenSize() == 3) ? child->Child(2) : nullptr;
- const bool isFirst = distinctField ? (*distinct2Columns[distinctField->Content()].begin() == i) : false;
+ const bool isFirst = distinctField ? (*Distinct2Columns[distinctField->Content()].begin() == i) : false;
auto updateApply = [&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
parent.Apply(1, *updateLambda)
.With(0)
@@ -1157,7 +1473,7 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
parent
.Callable("CastStruct")
.Arg(0, "item")
- .Add(1, ExpandType(node->Pos(), *updateLambda->Head().Head().GetTypeAnn(), ctx))
+ .Add(1, ExpandType(Node->Pos(), *updateLambda->Head().Head().GetTypeAnn(), Ctx))
.Seal();
}
@@ -1170,14 +1486,14 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
parent.Callable("Nth")
.Callable(0, "Member")
.Arg(0, "state")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Atom(1, "1", TNodeFlags::Default)
.Seal();
} else {
parent.Callable("Member")
.Arg(0, "state")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal();
}
@@ -1202,21 +1518,21 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
};
if (distinctField) {
- auto distinctIndex = *distinct2Columns[distinctField->Content()].begin();
+ auto distinctIndex = *Distinct2Columns[distinctField->Content()].begin();
ui32 newValueIndex = 0;
auto newValue = [&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
parent.Callable(newValueIndex, "NamedApply")
- .Add(0, udfAddValue[distinctField->Content()])
+ .Add(0, UdfAddValue[distinctField->Content()])
.List(1)
.Callable(0, "Nth")
.Callable(0, "Member")
.Arg(0, "state")
- .Add(1, initialColumnNames[distinctIndex])
+ .Add(1, InitialColumnNames[distinctIndex])
.Seal()
.Atom(1, "0", TNodeFlags::Default)
.Seal()
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- if (!distinctFieldNeedsPickle[distinctField->Content()]) {
+ if (!DistinctFieldNeedsPickle[distinctField->Content()]) {
parent.Callable(1, "Member")
.Arg(0, "item")
.Add(1, distinctField)
@@ -1240,23 +1556,23 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
};
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.Callable(1, "If")
.Callable(0, "NamedApply")
- .Add(0, udfWasChanged[distinctField->Content()])
+ .Add(0, UdfWasChanged[distinctField->Content()])
.List(1)
.Callable(0, "NamedApply")
- .Add(0, udfAddValue[distinctField->Content()])
+ .Add(0, UdfAddValue[distinctField->Content()])
.List(1)
.Callable(0, "Nth")
.Callable(0, "Member")
.Arg(0, "state")
- .Add(1, initialColumnNames[distinctIndex])
+ .Add(1, InitialColumnNames[distinctIndex])
.Seal()
.Atom(1, "0", TNodeFlags::Default)
.Seal()
.Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- if (!distinctFieldNeedsPickle[distinctField->Content()]) {
+ if (!DistinctFieldNeedsPickle[distinctField->Content()]) {
parent.Callable(1, "Member")
.Arg(0, "item")
.Add(1, distinctField)
@@ -1292,13 +1608,13 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
})
.Callable(2, "Member")
.Arg(0, "state")
- .Add(1, initialColumnNames[i])
+ .Add(1, InitialColumnNames[i])
.Seal()
.Seal()
.Seal();
} else {
parent.List(index++)
- .Add(0, initialColumnNames[i])
+ .Add(0, InitialColumnNames[i])
.Do(updateApply)
.Seal();
}
@@ -1309,223 +1625,6 @@ TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, T
.Seal()
.Seal()
.Build();
-
- index = 0U;
- auto groupSave = ctx.Builder(node->Pos())
- .Lambda()
- .Param("state")
- .Callable("AsStruct")
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i = 0; i < keyColumns->ChildrenSize(); ++i) {
- if (keyColumns->Child(i)->Content() == sessionStartMemberName) {
- continue;
- }
- parent
- .List(index++)
- .Add(0, keyColumns->ChildPtr(i))
- .Callable(1, "Member")
- .Arg(0, "state")
- .Add(1, keyColumns->ChildPtr(i))
- .Seal()
- .Seal();
- }
-
- if (sessionOutputColumn) {
- parent
- .List(index++)
- .Atom(0, *sessionOutputColumn)
- .Callable(1, "Member")
- .Arg(0, "state")
- .Atom(1, sessionStartMemberName)
- .Seal()
- .Seal();
- }
- return parent;
- })
- .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- for (ui32 i = 0; i < initialColumnNames.size(); ++i) {
- auto child = aggregatedColumns->Child(i);
- auto trait = child->Child(1);
- auto finishLambda = trait->Child(6);
-
- if (!compact && !distinctFields.empty()) {
- if (child->Head().IsAtom()) {
- parent.List(index++)
- .Add(0, finalColumnNames[i])
- .Callable(1, "Unwrap")
- .Callable(0, "Map")
- .Callable(0, "Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal()
- .Add(1, finishLambda)
- .Seal()
- .Seal()
- .Seal();
- } else {
- const auto& multiFields = child->Child(0);
- for (ui32 field = 0; field < multiFields->ChildrenSize(); ++field) {
- parent.List(index++)
- .Atom(0, multiFields->Child(field)->Content())
- .Callable(1, "Nth")
- .Callable(0, "Unwrap")
- .Callable(0, "Map")
- .Callable(0, "Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal()
- .Add(1, finishLambda)
- .Seal()
- .Seal()
- .Atom(1, ToString(field), TNodeFlags::Default)
- .Seal()
- .Seal();
- }
- }
- } else {
- auto distinctField = (child->ChildrenSize() == 3) ? child->Child(2) : nullptr;
- auto stateExtractor = [&](TExprNodeBuilder& parent) -> TExprNodeBuilder& {
- const bool isFirst = distinctField ? (*distinct2Columns[distinctField->Content()].begin() == i) : false;
- if (distinctField && isFirst) {
- parent.Callable("Nth")
- .Callable(0, "Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal()
- .Atom(1, "1", TNodeFlags::Default)
- .Seal();
- } else {
- parent.Callable("Member")
- .Arg(0, "state")
- .Add(1, initialColumnNames[i])
- .Seal();
- }
-
- return parent;
- };
-
- if (child->Head().IsAtom()) {
- parent.List(index++)
- .Add(0, finalColumnNames[i])
- .Apply(1, *finishLambda)
- .With(0)
- .Do(stateExtractor)
- .Done()
- .Seal()
- .Seal();
- } else {
- const auto& multiFields = child->Head();
- for (ui32 field = 0; field < multiFields.ChildrenSize(); ++field) {
- parent.List(index++)
- .Atom(0, multiFields.Child(field)->Content())
- .Callable(1, "Nth")
- .Apply(0, *finishLambda)
- .With(0)
- .Do(stateExtractor)
- .Done()
- .Seal()
- .Atom(1, ToString(field), TNodeFlags::Default)
- .Seal()
- .Seal();
- }
- }
- }
- }
- return parent;
- })
- .Seal()
- .Seal()
- .Build();
-
- if (compact || !groupInput) {
- groupInput = std::move(list);
- }
-
- TExprNode::TPtr preprocessLambda;
- TExprNode::TPtr condenseSwitch;
- if (sessionUpdate) {
- YQL_ENSURE(compact);
- YQL_ENSURE(sessionKey);
- YQL_ENSURE(sessionKeyType);
- YQL_ENSURE(sessionInit);
-
- preprocessLambda =
- AddSessionParamsMemberLambda(node->Pos(), sessionStartMemberName, "", keyExtractor, sessionKey, sessionInit, sessionUpdate, ctx);
-
- condenseSwitch = ctx.Builder(node->Pos())
- .Lambda()
- .Param("item")
- .Param("state")
- .Callable("Or")
- .Callable(0, "AggrNotEquals")
- .Apply(0, keyExtractor)
- .With(0, "item")
- .Seal()
- .Apply(1, keyExtractor)
- .With(0, "state")
- .Seal()
- .Seal()
- .Callable(1, "AggrNotEquals")
- .Callable(0, "Member")
- .Arg(0, "item")
- .Atom(1, sessionStartMemberName)
- .Seal()
- .Callable(1, "Member")
- .Arg(0, "state")
- .Atom(1, sessionStartMemberName)
- .Seal()
- .Seal()
- .Seal()
- .Seal()
- .Build();
- } else {
- YQL_ENSURE(!sessionKey);
- preprocessLambda = MakeIdentityLambda(node->Pos(), ctx);
- condenseSwitch = ctx.Builder(node->Pos())
- .Lambda()
- .Param("item")
- .Param("state")
- .Callable("IsKeySwitch")
- .Arg(0, "item")
- .Arg(1, "state")
- .Add(2, keyExtractor)
- .Add(3, keyExtractor)
- .Seal()
- .Seal()
- .Build();
- }
-
- auto grouper = ctx.Builder(node->Pos())
- .Callable("PartitionsByKeys")
- .Add(0, std::move(groupInput))
- .Add(1, keyExtractor)
- .Add(2, sortOrder)
- .Add(3, sortKey)
- .Lambda(4)
- .Param("stream")
- .Apply(contextLambda)
- .With(0)
- .Callable("Map")
- .Callable(0, "Condense1")
- .Apply(0, preprocessLambda)
- .With(0, "stream")
- .Seal()
- .Add(1, std::move(groupInit))
- .Add(2, condenseSwitch)
- .Add(3, std::move(groupMerge))
- .Seal()
- .Add(1, std::move(groupSave))
- .Seal()
- .Done()
- .Seal()
- .Seal()
- .Seal().Build();
-
- if (keyColumns->ChildrenSize() == 0 && !sessionSetting) {
- return MakeSingleGroupRow(*node, grouper, ctx);
- }
-
- return grouper;
}
-}
+} // namespace NYql \ No newline at end of file
diff --git a/ydb/library/yql/core/yql_aggregate_expander.h b/ydb/library/yql/core/yql_aggregate_expander.h
new file mode 100644
index 0000000000..552bdee222
--- /dev/null
+++ b/ydb/library/yql/core/yql_aggregate_expander.h
@@ -0,0 +1,113 @@
+#pragma once
+#include <ydb/library/yql/core/expr_nodes/yql_expr_nodes.h>
+#include <ydb/library/yql/core/yql_opt_utils.h>
+
+#include "yql_type_annotation.h"
+
+namespace NYql {
+
+class TAggregateExpander {
+public:
+ TAggregateExpander(bool allowPickle, const TExprNode::TPtr& node, TExprContext& ctx, TTypeAnnotationContext& typesCtx, bool forceCompact = false, bool compactForDistinct = false)
+ : Node(node)
+ , Ctx(ctx)
+ , TypesCtx(typesCtx)
+ , AllowPickle(allowPickle)
+ , ForceCompact(forceCompact)
+ , CompactForDistinct(compactForDistinct)
+ , AggregatedColumns(nullptr)
+ , VoidNode(ctx.NewCallable(node->Pos(), "Void", {}))
+ , HaveDistinct(false)
+ , EffectiveCompact(false)
+ , HaveSessionSetting(false)
+ , OriginalRowType(nullptr)
+ , RowType(nullptr)
+ {
+ PreMap = Ctx.Builder(node->Pos())
+ .Lambda()
+ .Param("premap")
+ .Callable("Just").Arg(0, "premap").Seal()
+ .Seal().Build();
+ SortParams = {
+ .Key = VoidNode,
+ .Order = VoidNode
+ };
+ }
+
+ TExprNode::TPtr ExpandAggregate();
+
+private:
+ TExprNode::TPtr ExpandAggApply(const TExprNode::TPtr& node);
+ bool CollectTraits();
+ TExprNode::TPtr RebuildAggregate();
+ TExprNode::TPtr GetContextLambda();
+ void ProcessSessionSetting(TExprNode::TPtr sessionSetting);
+ TVector<const TTypeAnnotationNode*> GetKeyItemTypes();
+ bool IsNeedPickle(const TVector<const TTypeAnnotationNode*>& keyItemTypes);
+ TExprNode::TPtr GetKeyExtractor(bool needPickle);
+ void CollectColumnsSpecs();
+
+ // Partial aggregate generation
+ TExprNode::TPtr GeneratePartialAggregate(const TExprNode::TPtr keyExtractor, const TVector<const TTypeAnnotationNode*>& keyItemTypes, bool needPickle);
+ TExprNode::TPtr GeneratePartialAggregateForNonDistinct(const TExprNode::TPtr& keyExtractor, const TExprNode::TPtr& pickleTypeNode);
+
+ TExprNode::TPtr GenerateDistinctGrouper(const TExprNode::TPtr distinctField,
+ const TVector<const TTypeAnnotationNode*>& keyItemTypes, bool needDistinctPickle);
+
+ TExprNode::TPtr ReturnKeyAsIsForCombineInit(const TExprNode::TPtr& pickleTypeNode);
+
+ // Post aggregate
+ TExprNode::TPtr GeneratePostAggregate(const TExprNode::TPtr& preAgg, const TExprNode::TPtr& keyExtractor);
+ TExprNode::TPtr GeneratePreprocessLambda(const TExprNode::TPtr& keyExtractor);
+ TExprNode::TPtr GenerateCondenseSwitch(const TExprNode::TPtr& keyExtractor);
+ TExprNode::TPtr GeneratePostAggregateInitPhase();
+ TExprNode::TPtr GeneratePostAggregateSavePhase();
+ TExprNode::TPtr GeneratePostAggregateMergePhase();
+
+private:
+ static constexpr TStringBuf SessionStartMemberName = "_yql_group_session_start";
+
+ const TExprNode::TPtr Node;
+ TExprContext& Ctx;
+ TTypeAnnotationContext& TypesCtx;
+ bool AllowPickle;
+ bool ForceCompact;
+ bool CompactForDistinct;
+
+ TSessionWindowParams SessionWindowParams;
+ TExprNode::TPtr AggList;
+ TExprNode::TListType Traits;
+ TExprNode::TPtr KeyColumns;
+ TExprNode::TPtr AggregatedColumns;
+ const TExprNode::TPtr VoidNode;
+ TMaybe<TStringBuf> SessionOutputColumn;
+ TSortParams SortParams;
+ bool HaveDistinct;
+ bool EffectiveCompact;
+ bool HaveSessionSetting;
+ const TStructExprType* OriginalRowType;
+ const TStructExprType* RowType;
+ TVector<const TItemExprType*> RowItems;
+ TExprNode::TPtr PreMap;
+
+ TExprNode::TListType InitialColumnNames;
+ TExprNode::TListType FinalColumnNames;
+ TExprNode::TListType DistinctFields;
+ TExprNode::TListType NothingStates;
+
+ using TIdxSet = std::set<ui32>;
+ std::unordered_map<std::string_view, TIdxSet> Distinct2Columns;
+ TIdxSet NonDistinctColumns;
+
+ std::unordered_map<std::string_view, bool> DistinctFieldNeedsPickle;
+ std::unordered_map<std::string_view, TExprNode::TPtr> UdfSetCreate;
+ std::unordered_map<std::string_view, TExprNode::TPtr> UdfAddValue;
+ std::unordered_map<std::string_view, TExprNode::TPtr> UdfWasChanged;
+};
+
+inline TExprNode::TPtr ExpandAggregatePeephole(const TExprNode::TPtr& node, TExprContext& ctx, TTypeAnnotationContext& typesCtx) {
+ TAggregateExpander aggExpander(false, node, ctx, typesCtx, true);
+ return aggExpander.ExpandAggregate();
+}
+
+} \ No newline at end of file
diff --git a/ydb/library/yql/core/yql_opt_aggregate.h b/ydb/library/yql/core/yql_opt_aggregate.h
deleted file mode 100644
index 9707405544..0000000000
--- a/ydb/library/yql/core/yql_opt_aggregate.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-#include <ydb/library/yql/core/expr_nodes/yql_expr_nodes.h>
-
-namespace NYql {
-
-TExprNode::TPtr ExpandAggregate(bool allowPickle, const TExprNode::TPtr& node, TExprContext& ctx, bool forceCompact = false);
-inline TExprNode::TPtr ExpandAggregatePeephole(const TExprNode::TPtr& node, TExprContext& ctx) {
- return ExpandAggregate(false, node, ctx, true);
-}
-
-}
-
diff --git a/ydb/library/yql/core/yql_opt_rewrite_io.cpp b/ydb/library/yql/core/yql_opt_rewrite_io.cpp
index ea96f34b68..40fc5aa22d 100644
--- a/ydb/library/yql/core/yql_opt_rewrite_io.cpp
+++ b/ydb/library/yql/core/yql_opt_rewrite_io.cpp
@@ -34,7 +34,10 @@ IGraphTransformer::TStatus RewriteIO(const TExprNode::TPtr& input, TExprNode::TP
return ret;
}
- if (!ctx.Step.IsDone(TExprStep::DiscoveryIO)) {
+ if (
+ !ctx.Step.IsDone(TExprStep::DiscoveryIO) ||
+ !ctx.Step.IsDone(TExprStep::ExpandApplyForLambdas)
+ ) {
return IGraphTransformer::TStatus(IGraphTransformer::TStatus::Repeat, true);
}
diff --git a/ydb/library/yql/core/yql_opt_utils.cpp b/ydb/library/yql/core/yql_opt_utils.cpp
index 9fc315badd..6ea51e07b6 100644
--- a/ydb/library/yql/core/yql_opt_utils.cpp
+++ b/ydb/library/yql/core/yql_opt_utils.cpp
@@ -1034,6 +1034,11 @@ TExprNode::TPtr ApplyWithCastStructForFirstArg(const TExprNode::TPtr& node, cons
}
+void ExtractSortKeyAndOrder(TPositionHandle pos, const TExprNode::TPtr& sortTraitsNode, TSortParams& sortParams, TExprContext& ctx)
+{
+ ExtractSortKeyAndOrder(pos, sortTraitsNode, sortParams.Key, sortParams.Order, ctx);
+}
+
void ExtractSortKeyAndOrder(TPositionHandle pos, const TExprNode::TPtr& sortTraitsNode, TExprNode::TPtr& sortKey, TExprNode::TPtr& sortOrder, TExprContext& ctx) {
if (sortTraitsNode->IsCallable("SortTraits")) {
TCoSortTraits sortTraits(sortTraitsNode);
@@ -1047,6 +1052,13 @@ void ExtractSortKeyAndOrder(TPositionHandle pos, const TExprNode::TPtr& sortTrai
}
}
+void ExtractSessionWindowParams(TPositionHandle pos, TSessionWindowParams& sessionParams, TExprContext& ctx)
+{
+ ExtractSessionWindowParams(pos, sessionParams.Traits, sessionParams.Key,
+ sessionParams.KeyType, sessionParams.ParamsType, sessionParams.SortTraits, sessionParams.Init,
+ sessionParams.Update, ctx);
+}
+
void ExtractSessionWindowParams(TPositionHandle pos, const TExprNode::TPtr& sessionTraits, TExprNode::TPtr& sessionKey,
const TTypeAnnotationNode*& sessionKeyType, const TTypeAnnotationNode*& sessionParamsType, TExprNode::TPtr& sessionSortTraits, TExprNode::TPtr& sessionInit,
TExprNode::TPtr& sessionUpdate, TExprContext& ctx)
diff --git a/ydb/library/yql/core/yql_opt_utils.h b/ydb/library/yql/core/yql_opt_utils.h
index eee4574bf4..dc3782bcd3 100644
--- a/ydb/library/yql/core/yql_opt_utils.h
+++ b/ydb/library/yql/core/yql_opt_utils.h
@@ -2,6 +2,7 @@
#include <ydb/library/yql/core/expr_nodes/yql_expr_nodes.h>
#include <ydb/library/yql/core/yql_graph_transformer.h>
+#include <ydb/library/yql/core/yql_opt_window.h>
#include <util/generic/hash_set.h>
#include <util/generic/strbuf.h>
@@ -90,6 +91,9 @@ void ExtractSessionWindowParams(TPositionHandle pos, const TExprNode::TPtr& sess
const TTypeAnnotationNode*& sessionKeyType, const TTypeAnnotationNode*& sessionParamsType, TExprNode::TPtr& sessionSortTraits, TExprNode::TPtr& sessionInit,
TExprNode::TPtr& sessionUpdate, TExprContext& ctx);
+void ExtractSortKeyAndOrder(TPositionHandle pos, const TExprNode::TPtr& sortTraitsNode, TSortParams& sortParams, TExprContext& ctx);
+void ExtractSessionWindowParams(TPositionHandle pos, TSessionWindowParams& sessionParams, TExprContext& ctx);
+
TExprNode::TPtr BuildKeySelector(TPositionHandle pos, const TStructExprType& rowType, const TExprNode::TPtr& keyColumns, TExprContext& ctx);
template <bool Cannonize, bool EnableNewOptimizers = true>
diff --git a/ydb/library/yql/core/yql_opt_window.cpp b/ydb/library/yql/core/yql_opt_window.cpp
index fb9c40b0f8..6b2c881993 100644
--- a/ydb/library/yql/core/yql_opt_window.cpp
+++ b/ydb/library/yql/core/yql_opt_window.cpp
@@ -3209,6 +3209,14 @@ TExprNode::TPtr ZipWithSessionParamsLambda(TPositionHandle pos, const TExprNode:
}
TExprNode::TPtr AddSessionParamsMemberLambda(TPositionHandle pos,
+ TStringBuf sessionStartMemberName, const TExprNode::TPtr& partitionKeySelector,
+ const TSessionWindowParams& sessionWindowParams, TExprContext& ctx)
+{
+ return AddSessionParamsMemberLambda(pos, sessionStartMemberName, "", partitionKeySelector,
+ sessionWindowParams.Key, sessionWindowParams.Init, sessionWindowParams.Update, ctx);
+}
+
+TExprNode::TPtr AddSessionParamsMemberLambda(TPositionHandle pos,
TStringBuf sessionStartMemberName, TStringBuf sessionParamsMemberName,
const TExprNode::TPtr& partitionKeySelector,
const TExprNode::TPtr& sessionKeySelector, const TExprNode::TPtr& sessionInit,
@@ -3275,4 +3283,15 @@ TExprNode::TPtr AddSessionParamsMemberLambda(TPositionHandle pos,
.Build();
}
+void TSessionWindowParams::Reset()
+{
+ Traits = {};
+ Key = {};
+ KeyType = nullptr;
+ ParamsType = nullptr;
+ Init = {};
+ Update = {};
+ SortTraits = {};
+}
+
}
diff --git a/ydb/library/yql/core/yql_opt_window.h b/ydb/library/yql/core/yql_opt_window.h
index 6e51a6c794..0e909f1d9d 100644
--- a/ydb/library/yql/core/yql_opt_window.h
+++ b/ydb/library/yql/core/yql_opt_window.h
@@ -45,6 +45,33 @@ private:
bool Compact = false;
};
+struct TSessionWindowParams {
+ TSessionWindowParams()
+ : Traits(nullptr)
+ , Key(nullptr)
+ , KeyType(nullptr)
+ , ParamsType(nullptr)
+ , Init(nullptr)
+ , Update(nullptr)
+ , SortTraits(nullptr)
+ {}
+
+ void Reset();
+
+ TExprNode::TPtr Traits;
+ TExprNode::TPtr Key;
+ const TTypeAnnotationNode* KeyType;
+ const TTypeAnnotationNode* ParamsType;
+ TExprNode::TPtr Init;
+ TExprNode::TPtr Update;
+ TExprNode::TPtr SortTraits;
+};
+
+struct TSortParams {
+ TExprNode::TPtr Key;
+ TExprNode::TPtr Order;
+};
+
// Lambda(input: Stream/List<T>) -> Stream/List<Tuple<T, SessionKey, SessionState, ....>>
// input is assumed to be partitioned by partitionKeySelector
TExprNode::TPtr ZipWithSessionParamsLambda(TPositionHandle pos, const TExprNode::TPtr& partitionKeySelector,
@@ -57,4 +84,10 @@ TExprNode::TPtr AddSessionParamsMemberLambda(TPositionHandle pos,
const TExprNode::TPtr& partitionKeySelector,
const TExprNode::TPtr& sessionKeySelector, const TExprNode::TPtr& sessionInit,
const TExprNode::TPtr& sessionUpdate, TExprContext& ctx);
+
+// input should be List/Stream of structs + see above
+TExprNode::TPtr AddSessionParamsMemberLambda(TPositionHandle pos,
+ TStringBuf sessionStartMemberName, const TExprNode::TPtr& partitionKeySelector,
+ const TSessionWindowParams& sessionWindowParams, TExprContext& ctx);
+
}
diff --git a/ydb/library/yql/dq/CMakeLists.txt b/ydb/library/yql/dq/CMakeLists.txt
new file mode 100644
index 0000000000..babe9af6b1
--- /dev/null
+++ b/ydb/library/yql/dq/CMakeLists.txt
@@ -0,0 +1,19 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actors)
+add_subdirectory(common)
+add_subdirectory(comp_nodes)
+add_subdirectory(expr_nodes)
+add_subdirectory(opt)
+add_subdirectory(proto)
+add_subdirectory(runtime)
+add_subdirectory(state)
+add_subdirectory(tasks)
+add_subdirectory(transform)
+add_subdirectory(type_ann)
diff --git a/ydb/library/yql/dq/actors/CMakeLists.txt b/ydb/library/yql/dq/actors/CMakeLists.txt
index 17c2ae159c..5a1e61f456 100644
--- a/ydb/library/yql/dq/actors/CMakeLists.txt
+++ b/ydb/library/yql/dq/actors/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(compute)
+add_subdirectory(protos)
+add_subdirectory(task_runner)
add_library(yql-dq-actors)
set_property(TARGET yql-dq-actors PROPERTY
diff --git a/ydb/library/yql/dq/actors/compute/CMakeLists.txt b/ydb/library/yql/dq/actors/compute/CMakeLists.txt
index 32461c2c33..02fbceab3a 100644
--- a/ydb/library/yql/dq/actors/compute/CMakeLists.txt
+++ b/ydb/library/yql/dq/actors/compute/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(dq-actors-compute)
target_compile_options(dq-actors-compute PRIVATE
diff --git a/ydb/library/yql/dq/actors/compute/dq_compute_actor_channels.cpp b/ydb/library/yql/dq/actors/compute/dq_compute_actor_channels.cpp
index 920c1a7d19..e21a0f0ad6 100644
--- a/ydb/library/yql/dq/actors/compute/dq_compute_actor_channels.cpp
+++ b/ydb/library/yql/dq/actors/compute/dq_compute_actor_channels.cpp
@@ -9,6 +9,8 @@
LOG_DEBUG_S(*NActors::TlsActivationContext, NKikimrServices::KQP_COMPUTE, "TxId: " << TxId << ", task: " << TaskId << ". " << s)
#define LOG_I(s) \
LOG_INFO_S(*NActors::TlsActivationContext, NKikimrServices::KQP_COMPUTE, "TxId: " << TxId << ", task: " << TaskId << ". " << s)
+#define LOG_N(s) \
+ LOG_NOTICE_S(*NActors::TlsActivationContext, NKikimrServices::KQP_COMPUTE, "TxId: " << TxId << ", task: " << TaskId << ". " << s)
#define LOG_E(s) \
LOG_ERROR_S(*NActors::TlsActivationContext, NKikimrServices::KQP_COMPUTE, "TxId: " << TxId << ", task: " << TaskId << ". " << s)
#define LOG_C(s) \
@@ -313,12 +315,6 @@ void TDqComputeActorChannels::HandleWork(TEvents::TEvUndelivered::TPtr& ev) {
auto sourceType = ev->Get()->SourceType;
auto reason = ev->Get()->Reason;
- if (!RetryOnUndelivery) {
- auto message = TStringBuilder() << "Handle undelivered event: " << sourceType << ", cookie: " << ev->Cookie
- << ", reason: " << reason;
- return RuntimeError(message);
- }
-
if (sourceType == TEvDqCompute::TEvChannelData::EventType) {
return HandleUndeliveredEvChannelData(ev->Cookie, reason);
}
@@ -327,8 +323,17 @@ void TDqComputeActorChannels::HandleWork(TEvents::TEvUndelivered::TPtr& ev) {
return HandleUndeliveredEvChannelDataAck(ev->Cookie, reason);
}
- LOG_E("Handle undelivered event: " << sourceType << ", cookie: " << ev->Cookie << ", reason: " << reason
- << ", ignore it");
+ if (sourceType == TEvDq::TEvAbortExecution::EventType) {
+ LOG_N("Ignoring undelivered event: " << sourceType << ", cookie: " << ev->Cookie << ", reason: " << reason);
+ return;
+ }
+
+ auto message = TStringBuilder() << "Undelivered event: " << sourceType
+ << ", cookie: " << ev->Cookie
+ << ", reason: " << reason;
+
+ LOG_E(message);
+ return InternalError(message);
}
void TDqComputeActorChannels::HandleWork(TEvInterconnect::TEvNodeDisconnected::TPtr& ev) {
@@ -383,31 +388,35 @@ void TDqComputeActorChannels::HandleWork(TEvInterconnect::TEvNodeDisconnected::T
}
void TDqComputeActorChannels::HandleUndeliveredEvChannelData(ui64 channelId, TEvents::TEvUndelivered::EReason reason) {
- LOG_E("Handle undelivered event: TEvChannelData, channelId: " << channelId << ", reason: " << reason);
-
TOutputChannelState& outputChannel = OutCh(channelId);
if (outputChannel.Finished && outputChannel.EarlyFinish && !SupportCheckpoints) {
- LOG_E("Ignore undelivered TEvChannelData event due to early finish, channelId: " << channelId);
+ LOG_I("Ignore undelivered TEvChannelData event due to early finish, channelId: " << channelId);
outputChannel.InFlight.clear();
Cbs->ResumeExecution();
return;
}
+ LOG_N("Handle undelivered event: TEvChannelData, channelId: " << channelId << ", reason: " << reason);
+
if (reason == TEvents::TEvUndelivered::ReasonActorUnknown) {
- return RuntimeError("unknown output channel actor");
+ return RuntimeError("Output channel actor is unavailable");
}
if (outputChannel.InFlight.empty()) {
return;
}
+ if (!RetryOnUndelivery) {
+ auto message = TStringBuilder() << "Failed to deliver output channel data, channelId: "
+ << channelId << ", reason: " << reason;
+ return RuntimeError(message);
+ }
+
ScheduleRetryForChannel<TOutputChannelState, TEvDqCompute::TEvRetryChannelData>(outputChannel, Now());
}
void TDqComputeActorChannels::HandleUndeliveredEvChannelDataAck(ui64 channelId, TEvents::TEvUndelivered::EReason reason) {
- LOG_E("Handle undelivered event: TEvChannelDataAck, channelId: " << channelId << ", reason: " << reason);
-
TInputChannelState& inputChannel = InCh(channelId);
inputChannel.PollRequest.reset();
@@ -419,14 +428,22 @@ void TDqComputeActorChannels::HandleUndeliveredEvChannelDataAck(ui64 channelId,
return;
}
+ LOG_N("Handle undelivered event: TEvChannelDataAck, channelId: " << channelId << ", reason: " << reason);
+
if (reason == TEvents::TEvUndelivered::ReasonActorUnknown) {
- return RuntimeError("unknown input channel actor");
+ return RuntimeError("Input channel actor is unavailable");
}
if (inputChannel.InFlight.empty()) {
return;
}
+ if (!RetryOnUndelivery) {
+ auto message = TStringBuilder() << "Failed to deliver input channel ack, channelId: "
+ << channelId << ", reason: " << reason;
+ return RuntimeError(message);
+ }
+
ScheduleRetryForChannel<TInputChannelState, TEvDqCompute::TEvRetryChannelDataAck>(inputChannel, Now());
}
diff --git a/ydb/library/yql/dq/actors/compute/ut/CMakeLists.txt b/ydb/library/yql/dq/actors/compute/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/dq/actors/compute/ut/CMakeLists.txt
+++ b/ydb/library/yql/dq/actors/compute/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/dq/actors/dq.cpp b/ydb/library/yql/dq/actors/dq.cpp
index 795b91b468..66493ca6c3 100644
--- a/ydb/library/yql/dq/actors/dq.cpp
+++ b/ydb/library/yql/dq/actors/dq.cpp
@@ -24,9 +24,11 @@ Ydb::StatusIds::StatusCode DqStatusToYdbStatus(NYql::NDqProto::StatusIds::Status
return Ydb::StatusIds::CANCELLED;
case NYql::NDqProto::StatusIds::OVERLOADED:
return Ydb::StatusIds::OVERLOADED;
+ case NYql::NDqProto::StatusIds::SCHEME_ERROR:
+ return Ydb::StatusIds::SCHEME_ERROR;
default:
return Ydb::StatusIds::GENERIC_ERROR;
- }
+ }
}
NYql::NDqProto::StatusIds::StatusCode YdbStatusToDqStatus(Ydb::StatusIds::StatusCode statusCode) {
@@ -53,6 +55,8 @@ NYql::NDqProto::StatusIds::StatusCode YdbStatusToDqStatus(Ydb::StatusIds::Status
return NYql::NDqProto::StatusIds::PRECONDITION_FAILED;
case Ydb::StatusIds::CANCELLED:
return NYql::NDqProto::StatusIds::CANCELLED;
+ case Ydb::StatusIds::SCHEME_ERROR:
+ return NYql::NDqProto::StatusIds::SCHEME_ERROR;
default:
return NYql::NDqProto::StatusIds::UNSPECIFIED;
}
diff --git a/ydb/library/yql/dq/actors/protos/dq_status_codes.proto b/ydb/library/yql/dq/actors/protos/dq_status_codes.proto
index fd7fb9e868..7fa69f7ae5 100644
--- a/ydb/library/yql/dq/actors/protos/dq_status_codes.proto
+++ b/ydb/library/yql/dq/actors/protos/dq_status_codes.proto
@@ -19,5 +19,6 @@ message StatusIds {
UNSUPPORTED = 11;
EXTERNAL_ERROR = 12;
CLUSTER_OVERLOADED = 13;
+ SCHEME_ERROR = 14;
}
}
diff --git a/ydb/library/yql/dq/expr_nodes/dq_expr_nodes.json b/ydb/library/yql/dq/expr_nodes/dq_expr_nodes.json
index 46d880b3a5..11e2d47da4 100644
--- a/ydb/library/yql/dq/expr_nodes/dq_expr_nodes.json
+++ b/ydb/library/yql/dq/expr_nodes/dq_expr_nodes.json
@@ -245,6 +245,15 @@
{"Index": 1, "Name": "TransformName", "Type": "TExprBase"},
{"Index": 2, "Name": "Settings", "Type": "TCoNameValueTupleList"}
]
+ },
+ {
+ "Name": "TDqPhyLength",
+ "Base": "TCallable",
+ "Match": {"Type": "Callable", "Name": "DqPhyLength"},
+ "Children": [
+ {"Index": 0, "Name": "Input", "Type": "TExprBase"},
+ {"Index": 1, "Name": "Name", "Type": "TCoAtom"}
+ ]
}
]
}
diff --git a/ydb/library/yql/dq/opt/dq_opt.cpp b/ydb/library/yql/dq/opt/dq_opt.cpp
index d936a0939c..3ae4e9f285 100644
--- a/ydb/library/yql/dq/opt/dq_opt.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt.cpp
@@ -190,6 +190,46 @@ bool IsDqPureExpr(const TExprBase& node, bool isPrecomputePure) {
return !FindNode(node.Ptr(), predicate);
}
+bool IsDqSelfContainedExpr(const TExprBase& node) {
+ bool selfContained = true;
+ TNodeSet knownArguments;
+
+ VisitExpr(node.Ptr(),
+ [&selfContained, &knownArguments] (const TExprNode::TPtr& node) {
+ if (!selfContained) {
+ return false;
+ }
+
+ if (auto maybeLambda = TMaybeNode<TCoLambda>(node)) {
+ for (const auto& arg : maybeLambda.Cast().Args()) {
+ YQL_ENSURE(knownArguments.emplace(arg.Raw()).second);
+ }
+ }
+
+ if (node->IsArgument()) {
+ if (!knownArguments.contains(node.Get())) {
+ selfContained = false;
+ return false;
+ }
+ }
+
+ return true;
+ },
+ [&knownArguments] (const TExprNode::TPtr& node) {
+ if (auto maybeLambda = TMaybeNode<TCoLambda>(node)) {
+ for (const auto& arg : maybeLambda.Cast().Args()) {
+ auto it = knownArguments.find(arg.Raw());
+ YQL_ENSURE(it != knownArguments.end());
+ knownArguments.erase(it);
+ }
+ }
+
+ return true;
+ });
+
+ return selfContained;
+}
+
bool IsDqDependsOnStage(const TExprBase& node, const TDqStageBase& stage) {
return !!FindNode(node.Ptr(), [ptr = stage.Raw()](const TExprNode::TPtr& exprNode) {
return exprNode.Get() == ptr;
diff --git a/ydb/library/yql/dq/opt/dq_opt.h b/ydb/library/yql/dq/opt/dq_opt.h
index 3d9a14e1f8..3887ef720a 100644
--- a/ydb/library/yql/dq/opt/dq_opt.h
+++ b/ydb/library/yql/dq/opt/dq_opt.h
@@ -58,6 +58,7 @@ ui32 GetStageOutputsCount(const NNodes::TDqStageBase& stage);
TVector<NNodes::TDqConnection> FindDqConnections(const NNodes::TExprBase& node);
bool IsDqPureExpr(const NNodes::TExprBase& node, bool isPrecomputePure = true);
+bool IsDqSelfContainedExpr(const NNodes::TExprBase& node);
bool IsDqDependsOnStage(const NNodes::TExprBase& node, const NNodes::TDqStageBase& stage);
bool CanPushDqExpr(const NNodes::TExprBase& expr, const NNodes::TDqStageBase& stage);
diff --git a/ydb/library/yql/dq/opt/dq_opt_log.cpp b/ydb/library/yql/dq/opt/dq_opt_log.cpp
index 10feb101ed..b071b0d287 100644
--- a/ydb/library/yql/dq/opt/dq_opt_log.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_log.cpp
@@ -2,8 +2,8 @@
#include "dq_opt.h"
+#include <ydb/library/yql/core/yql_aggregate_expander.h>
#include <ydb/library/yql/core/yql_expr_optimize.h>
-#include <ydb/library/yql/core/yql_opt_aggregate.h>
#include <ydb/library/yql/core/yql_opt_window.h>
#include <ydb/library/yql/core/yql_opt_utils.h>
#include <ydb/library/yql/core/yql_type_annotation.h>
@@ -13,12 +13,13 @@ using namespace NYql::NNodes;
namespace NYql::NDq {
-TExprBase DqRewriteAggregate(TExprBase node, TExprContext& ctx) {
+TExprBase DqRewriteAggregate(TExprBase node, TExprContext& ctx, TTypeAnnotationContext& typesCtx) {
if (!node.Maybe<TCoAggregate>()) {
return node;
}
- auto result = ExpandAggregate(true, node.Ptr(), ctx);
+ TAggregateExpander aggExpander(true, node.Ptr(), ctx, typesCtx);
+ auto result = aggExpander.ExpandAggregate();
YQL_ENSURE(result);
return TExprBase(result);
diff --git a/ydb/library/yql/dq/opt/dq_opt_log.h b/ydb/library/yql/dq/opt/dq_opt_log.h
index 8e9ed97b06..024ab5551e 100644
--- a/ydb/library/yql/dq/opt/dq_opt_log.h
+++ b/ydb/library/yql/dq/opt/dq_opt_log.h
@@ -12,7 +12,7 @@ namespace NYql {
namespace NYql::NDq {
-NNodes::TExprBase DqRewriteAggregate(NNodes::TExprBase node, TExprContext& ctx);
+NNodes::TExprBase DqRewriteAggregate(NNodes::TExprBase node, TExprContext& ctx, TTypeAnnotationContext& typesCtx);
NNodes::TExprBase DqRewriteTakeSortToTopSort(NNodes::TExprBase node, TExprContext& ctx, const TParentsMap& parents);
diff --git a/ydb/library/yql/dq/opt/dq_opt_peephole.cpp b/ydb/library/yql/dq/opt/dq_opt_peephole.cpp
index 223cc2c9be..ea8864e0d7 100644
--- a/ydb/library/yql/dq/opt/dq_opt_peephole.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_peephole.cpp
@@ -666,4 +666,36 @@ NNodes::TExprBase DqPeepholeDropUnusedInputs(const NNodes::TExprBase& node, TExp
return NNodes::TExprBase(ctx.ChangeChildren(node.Ref(), std::move(children)));
}
+NNodes::TExprBase DqPeepholeRewriteLength(const NNodes::TExprBase& node, TExprContext& ctx) {
+ if (!node.Maybe<TDqPhyLength>()) {
+ return node;
+ }
+
+ auto dqPhyLength = node.Cast<TDqPhyLength>();
+
+ auto zero = Build<TCoUint64>(ctx, node.Pos())
+ .Literal().Build("0")
+ .Done();
+
+ return Build<TCoCondense>(ctx, node.Pos())
+ .Input(dqPhyLength.Input())
+ .State<TCoUint64>()
+ .Literal().Build("0")
+ .Build()
+ .SwitchHandler()
+ .Args({"item", "state"})
+ .Body(MakeBool<false>(node.Pos(), ctx))
+ .Build()
+ .UpdateHandler()
+ .Args({"item", "state"})
+ .Body<TCoAggrAdd>()
+ .Left("state")
+ .Right<TCoUint64>()
+ .Literal().Build("1")
+ .Build()
+ .Build()
+ .Build()
+ .Done();
+}
+
} // namespace NYql::NDq
diff --git a/ydb/library/yql/dq/opt/dq_opt_peephole.h b/ydb/library/yql/dq/opt/dq_opt_peephole.h
index f403c8d39d..e2bf494c0e 100644
--- a/ydb/library/yql/dq/opt/dq_opt_peephole.h
+++ b/ydb/library/yql/dq/opt/dq_opt_peephole.h
@@ -13,5 +13,6 @@ NNodes::TExprBase DqPeepholeRewriteMapJoin(const NNodes::TExprBase& node, TExprC
NNodes::TExprBase DqPeepholeRewriteReplicate(const NNodes::TExprBase& node, TExprContext& ctx);
NNodes::TExprBase DqPeepholeRewritePureJoin(const NNodes::TExprBase& node, TExprContext& ctx);
NNodes::TExprBase DqPeepholeDropUnusedInputs(const NNodes::TExprBase& node, TExprContext& ctx);
+NNodes::TExprBase DqPeepholeRewriteLength(const NNodes::TExprBase& node, TExprContext& ctx);
} // namespace NYql::NDq
diff --git a/ydb/library/yql/dq/opt/dq_opt_phy.cpp b/ydb/library/yql/dq/opt/dq_opt_phy.cpp
index 9b938fd990..1981384335 100644
--- a/ydb/library/yql/dq/opt/dq_opt_phy.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_phy.cpp
@@ -10,25 +10,29 @@ namespace NYql::NDq {
using namespace NYql::NNodes;
-namespace {
-
-TVector<TCoArgument> PrepareArgumentsReplacement(const TCoArguments& args, const TVector<TDqConnection>& newInputs,
+TVector<TCoArgument> PrepareArgumentsReplacement(const TExprBase& node, const TVector<TDqConnection>& newInputs,
TExprContext& ctx, TNodeOnNodeOwnedMap& replaceMap)
{
TVector<TCoArgument> newArgs;
- newArgs.reserve(args.Size() + newInputs.size());
replaceMap.clear();
- for (size_t i = 0; i < args.Size(); ++i) {
- TCoArgument newArg{ctx.NewArgument(args.Pos(), TStringBuilder()
- << "_dq_replace_arg_" << i)};
- replaceMap[args.Arg(i).Raw()] = newArg.Ptr();
- newArgs.emplace_back(newArg);
+ if (auto maybeArgs = node.Maybe<TCoArguments>()) {
+ auto args = maybeArgs.Cast();
+
+ newArgs.reserve(args.Size() + newInputs.size());
+ for (size_t i = 0; i < args.Size(); ++i) {
+ TCoArgument newArg{ctx.NewArgument(node.Pos(), TStringBuilder()
+ << "_dq_replace_arg_" << i)};
+ replaceMap[args.Arg(i).Raw()] = newArg.Ptr();
+ newArgs.emplace_back(newArg);
+ }
+ } else {
+ newArgs.reserve(newInputs.size());
}
for (size_t i = 0; i < newInputs.size(); ++i) {
- TCoArgument newArg{ctx.NewArgument(args.Pos(), TStringBuilder()
- << "_dq_replace_input_arg_" << args.Size() + i)};
+ TCoArgument newArg{ctx.NewArgument(node.Pos(), TStringBuilder()
+ << "_dq_replace_input_arg_" << newArgs.size())};
replaceMap[newInputs[i].Raw()] = newArg.Ptr();
newArgs.emplace_back(newArg);
}
@@ -36,6 +40,8 @@ TVector<TCoArgument> PrepareArgumentsReplacement(const TCoArguments& args, const
return newArgs;
}
+namespace {
+
template <typename TPartition>
TExprBase DqBuildPartitionsStageStub(TExprBase node, TExprContext& ctx, const TParentsMap& parentsMap) {
if (!node.Maybe<TPartition>().Input().template Maybe<TDqCnUnionAll>()) {
@@ -192,6 +198,118 @@ TExprBase DqPushMembersFilterToStage(TExprBase node, TExprContext& ctx, IOptimiz
return result.Cast();
}
+TMaybeNode<TDqStage> DqPushFlatMapInnerConnectionsToStageInput(TCoFlatMapBase& flatmap,
+ TExprNode::TListType&& innerConnections, const TParentsMap& parentsMap, TExprContext& ctx)
+{
+ TVector<TDqConnection> inputs;
+ TNodeOnNodeOwnedMap replaceMap;
+
+ // prepare inputs (inner connections + flatmap input)
+ inputs.reserve(innerConnections.size() + 1);
+ inputs.push_back(flatmap.Input().Cast<TDqConnection>());
+ for (auto& cn : innerConnections) {
+ if (!TMaybeNode<TDqCnUnionAll>(cn).IsValid() && !TMaybeNode<TDqCnMerge>(cn).IsValid()) {
+ return {};
+ }
+
+ if (!IsSingleConsumerConnection(TDqConnection(cn), parentsMap, false)) {
+ return {};
+ }
+
+ inputs.push_back(TDqConnection(cn));
+ }
+
+ auto args = PrepareArgumentsReplacement(flatmap.Input(), inputs, ctx, replaceMap);
+ auto newFlatMap = ctx.ReplaceNodes(flatmap.Ptr(), replaceMap);
+
+ auto buildDqBroadcastCn = [&ctx](auto& cn) {
+ auto collectStage = Build<TDqStage>(ctx, cn.Pos())
+ .Inputs()
+ .Add(cn)
+ .Build()
+ .Program()
+ .Args({"stream"})
+ .Body("stream")
+ .Build()
+ .Settings(TDqStageSettings().BuildNode(ctx, cn.Pos()))
+ .Done();
+
+ return Build<TDqCnBroadcast>(ctx, cn.Pos())
+ .Output()
+ .Stage(collectStage)
+ .Index().Build("0")
+ .Build()
+ .Done();
+ };
+
+ TVector<TExprBase> stageInputs;
+ stageInputs.reserve(inputs.size());
+ auto mapCn = Build<TDqCnMap>(ctx, flatmap.Input().Pos())
+ .Output(inputs[0].Output())
+ .Done();
+ stageInputs.emplace_back(std::move(mapCn));
+
+ // gather all elements from stream inputs (skip flatmap input)
+ for (ui32 inputId = 1; inputId < inputs.size(); ++inputId) {
+ auto argAsList = ctx.NewArgument(inputs[inputId].Pos(), TStringBuilder() << "_dq_list_arg" << inputId);
+ auto stageInput = buildDqBroadcastCn(inputs[inputId]);
+
+ auto condenseInput = Build<TCoCondense>(ctx, stageInput.Pos())
+ .Input(args[inputId])
+ .State<TCoList>()
+ .ListType<TCoTypeOf>()
+ .Value(stageInput)
+ .Build()
+ .Build()
+ .SwitchHandler()
+ .Args({"item", "state"})
+ .Body(MakeBool<false>(stageInput.Pos(), ctx))
+ .Build()
+ .UpdateHandler()
+ .Args({"item", "state"})
+ .Body<TCoAppend>()
+ .List("state")
+ .Item("item")
+ .Build()
+ .Build()
+ .Done().Ptr();
+
+ newFlatMap = Build<TCoFlatMap>(ctx, stageInput.Pos())
+ .Input(condenseInput)
+ .Lambda()
+ .Args({argAsList})
+ .Body(ctx.ReplaceNode(std::move(newFlatMap), args[inputId].Ref(), argAsList))
+ .Build()
+ .Done().Ptr();
+
+ stageInputs.emplace_back(std::move(stageInput));
+ }
+
+ return Build<TDqStage>(ctx, flatmap.Pos())
+ .Inputs()
+ .Add(std::move(stageInputs))
+ .Build()
+ .Program()
+ .Args(args)
+ .Body(newFlatMap)
+ .Build()
+ .Settings(TDqStageSettings().BuildNode(ctx, flatmap.Pos()))
+ .Done();
+}
+
+TExprNode::TListType FindLambdaConnections(const TCoLambda& lambda) {
+ auto filter = [](const TExprNode::TPtr& node) {
+ return !TMaybeNode<TDqPhyPrecompute>(node).IsValid();
+ };
+
+ auto predicate = [](const TExprNode::TPtr& node) {
+ return TMaybeNode<TDqSource>(node).IsValid() ||
+ TMaybeNode<TDqConnection>(node).IsValid();
+ };
+
+ return FindNodes(lambda.Body().Ptr(), filter, predicate);
+}
+
} // namespace
TMaybeNode<TDqStage> DqPushLambdaToStage(const TDqStage& stage, const TCoAtom& outputIndex, TCoLambda& lambda,
@@ -333,6 +451,44 @@ TExprBase DqPushExtractMembersToStage(TExprBase node, TExprContext& ctx, IOptimi
return DqPushMembersFilterToStage<TCoExtractMembers>(node, ctx, optCtx, parentsMap, allowStageMultiUsage);
}
+TExprBase DqBuildPureFlatmapStage(TExprBase node, TExprContext& ctx) {
+ if (!node.Maybe<TCoFlatMapBase>()) {
+ return node;
+ }
+
+ auto flatmap = node.Cast<TCoFlatMapBase>();
+
+ if (!IsDqPureExpr(flatmap.Input())) {
+ return node;
+ }
+
+ auto innerConnections = FindLambdaConnections(flatmap.Lambda());
+ if (innerConnections.empty()) {
+ return node;
+ }
+
+ auto inputStage = Build<TDqStage>(ctx, flatmap.Input().Pos())
+ .Inputs()
+ .Build()
+ .Program()
+ .Args({})
+ .Body<TCoIterator>()
+ .List(flatmap.Input())
+ .Build()
+ .Build()
+ .Settings(TDqStageSettings().BuildNode(ctx, flatmap.Input().Pos()))
+ .Done();
+
+ auto inputConnection = Build<TDqCnUnionAll>(ctx, flatmap.Pos())
+ .Output()
+ .Stage(inputStage)
+ .Index().Build("0")
+ .Build()
+ .Done();
+
+ return TExprBase(ctx.ChangeChild(flatmap.Ref(), TCoFlatMapBase::idx_Input, inputConnection.Ptr()));
+}
+
TExprBase DqBuildFlatmapStage(TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx,
const TParentsMap& parentsMap, bool allowStageMultiUsage)
{
@@ -346,41 +502,47 @@ TExprBase DqBuildFlatmapStage(TExprBase node, TExprContext& ctx, IOptimizationCo
return node;
}
- if (!IsDqPureExpr(flatmap.Lambda())) {
- return node;
- }
+ auto innerConnections = FindLambdaConnections(flatmap.Lambda());
- if (auto connToPushableStage = DqBuildPushableStage(dqUnion, ctx)) {
- return TExprBase(ctx.ChangeChild(*node.Raw(), TCoFlatMapBase::idx_Input, std::move(connToPushableStage)));
- }
-
- auto lambda = TCoLambda(ctx.Builder(flatmap.Lambda().Pos())
- .Lambda()
- .Param("stream")
- .Callable(flatmap.Ref().Content())
- .Arg(0, "stream")
- .Add(1, ctx.DeepCopyLambda(flatmap.Lambda().Ref()))
- .Seal()
- .Seal().Build());
+ TMaybeNode<TDqStage> flatmapStage;
+ if (!innerConnections.empty()) {
+ flatmapStage = DqPushFlatMapInnerConnectionsToStageInput(flatmap, std::move(innerConnections), parentsMap, ctx);
+ if (!flatmapStage) {
+ return node;
+ }
+ } else {
+ if (auto connToPushableStage = DqBuildPushableStage(dqUnion, ctx)) {
+ return TExprBase(ctx.ChangeChild(*node.Raw(), TCoFlatMapBase::idx_Input, std::move(connToPushableStage)));
+ }
- auto pushResult = DqPushLambdaToStageUnionAll(dqUnion, lambda, {}, ctx, optCtx);
- if (pushResult) {
- return pushResult.Cast();
- }
+ auto lambda = TCoLambda(ctx.Builder(flatmap.Lambda().Pos())
+ .Lambda()
+ .Param("stream")
+ .Callable(flatmap.Ref().Content())
+ .Arg(0, "stream")
+ .Add(1, ctx.DeepCopyLambda(flatmap.Lambda().Ref()))
+ .Seal()
+ .Seal().Build());
+
+ auto pushResult = DqPushLambdaToStageUnionAll(dqUnion, lambda, {}, ctx, optCtx);
+ if (pushResult) {
+ return pushResult.Cast();
+ }
- auto flatmapStage = Build<TDqStage>(ctx, flatmap.Pos())
- .Inputs()
- .Add<TDqCnMap>()
- .Output(dqUnion.Output())
+ flatmapStage = Build<TDqStage>(ctx, flatmap.Pos())
+ .Inputs()
+ .Add<TDqCnMap>()
+ .Output(dqUnion.Output())
+ .Build()
.Build()
- .Build()
- .Program(lambda)
- .Settings(TDqStageSettings().BuildNode(ctx, flatmap.Pos()))
- .Done();
+ .Program(lambda)
+ .Settings(TDqStageSettings().BuildNode(ctx, flatmap.Pos()))
+ .Done();
+ }
return Build<TDqCnUnionAll>(ctx, node.Pos())
.Output()
- .Stage(flatmapStage)
+ .Stage(flatmapStage.Cast())
.Index().Build("0")
.Build()
.Done();
@@ -423,7 +585,7 @@ TExprBase DqPushBaseLMapToStage(TExprBase node, TExprContext& ctx, IOptimization
return node;
}
- const TTypeAnnotationNode* lmapItemTy = GetSeqItemType(lmap.Ref().GetTypeAnn());
+ const TTypeAnnotationNode* lmapItemTy = GetSeqItemType(lmap.Ref().GetTypeAnn());
if (lmapItemTy->GetKind() == ETypeAnnotationKind::Variant) {
// preserve typing by Mux'ing several stage outputs into one
const auto variantItemTy = lmapItemTy->template Cast<TVariantExprType>();
@@ -1057,11 +1219,11 @@ TExprBase DqBuildSkipStage(TExprBase node, TExprContext& ctx, IOptimizationConte
TExprBase DqBuildTakeStage(TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx,
const TParentsMap& parentsMap, bool allowStageMultiUsage)
{
- if (!node.Maybe<TCoTake>().Input().Maybe<TDqCnUnionAll>()) {
+ if (!node.Maybe<TCoTakeBase>().Input().Maybe<TDqCnUnionAll>()) {
return node;
}
- auto take = node.Cast<TCoTake>();
+ auto take = node.Cast<TCoTakeBase>();
auto dqUnion = take.Input().Cast<TDqCnUnionAll>();
if (!IsSingleConsumerConnection(dqUnion, parentsMap, allowStageMultiUsage)) {
return node;
@@ -1072,7 +1234,7 @@ TExprBase DqBuildTakeStage(TExprBase node, TExprContext& ctx, IOptimizationConte
}
if (auto connToPushableStage = DqBuildPushableStage(dqUnion, ctx)) {
- return TExprBase(ctx.ChangeChild(*node.Raw(), TCoTake::idx_Input, std::move(connToPushableStage)));
+ return TExprBase(ctx.ChangeChild(*node.Raw(), TCoTakeBase::idx_Input, std::move(connToPushableStage)));
}
auto result = dqUnion.Output().Stage().Program().Body();
@@ -1117,11 +1279,11 @@ TExprBase DqBuildTakeStage(TExprBase node, TExprContext& ctx, IOptimizationConte
TExprBase DqBuildTakeSkipStage(TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx,
const TParentsMap& parentsMap, bool allowStageMultiUsage)
{
- if (!node.Maybe<TCoTake>().Input().Maybe<TCoSkip>().Input().Maybe<TDqCnUnionAll>()) {
+ if (!node.Maybe<TCoTakeBase>().Input().Maybe<TCoSkip>().Input().Maybe<TDqCnUnionAll>()) {
return node;
}
- auto take = node.Cast<TCoTake>();
+ auto take = node.Cast<TCoTakeBase>();
auto skip = take.Input().Cast<TCoSkip>();
auto dqUnion = skip.Input().Cast<TDqCnUnionAll>();
@@ -1138,7 +1300,7 @@ TExprBase DqBuildTakeSkipStage(TExprBase node, TExprContext& ctx, IOptimizationC
}
if (auto connToPushableStage = DqBuildPushableStage(dqUnion, ctx)) {
- return TExprBase(ctx.ChangeChild(*node.Raw(), TCoTake::idx_Input, std::move(connToPushableStage)));
+ return TExprBase(ctx.ChangeChild(*node.Raw(), TCoTakeBase::idx_Input, std::move(connToPushableStage)));
}
auto lambda = Build<TCoLambda>(ctx, node.Pos())
@@ -1204,47 +1366,16 @@ TExprBase DqRewriteLengthOfStageOutput(TExprBase node, TExprContext& ctx, IOptim
auto field = BuildAtom("_dq_agg_cnt", node.Pos(), ctx);
- auto combineLambda = Build<TCoLambda>(ctx, node.Pos())
+ auto dqLengthLambda = Build<TCoLambda>(ctx, node.Pos())
.Args({"stream"})
- .Body<TCoCombineByKey>()
+ .Body<TDqPhyLength>()
.Input("stream")
- .PreMapLambda()
- .Args({"item"})
- .Body<TCoJust>()
- .Input("item")
- .Build()
- .Build()
- .KeySelectorLambda()
- .Args({"item"})
- .Body(zero)
- .Build()
- .InitHandlerLambda()
- .Args({"key", "item"})
- .Body<TCoUint64>()
- .Literal().Build("1")
- .Build()
- .Build()
- .UpdateHandlerLambda()
- .Args({"key", "item", "state"})
- .Body<TCoInc>()
- .Value("state")
- .Build()
- .Build()
- .FinishHandlerLambda()
- .Args({"key", "state"})
- .Body<TCoJust>()
- .Input<TCoAsStruct>()
- .Add<TCoNameValueTuple>()
- .Name(field)
- .Value("state")
- .Build()
- .Build()
- .Build()
- .Build()
+ .Name(field)
.Build()
.Done();
- auto result = DqPushLambdaToStageUnionAll(dqUnion, combineLambda, {}, ctx, optCtx);
+
+ auto result = DqPushLambdaToStageUnionAll(dqUnion, dqLengthLambda, {}, ctx, optCtx);
if (!result) {
return node;
}
@@ -1266,10 +1397,7 @@ TExprBase DqRewriteLengthOfStageOutput(TExprBase node, TExprContext& ctx, IOptim
.Args({"item", "state"})
.Body<TCoAggrAdd>()
.Left("state")
- .Right<TCoMember>()
- .Struct("item")
- .Name(field)
- .Build()
+ .Right("item")
.Build()
.Build()
.Build()
@@ -1627,6 +1755,143 @@ TExprBase DqBuildHasItems(TExprBase node, TExprContext& ctx, IOptimizationContex
return precompute;
}
+TExprBase DqBuildSqlIn(TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx,
+ const TParentsMap& parentsMap, bool allowStageMultiUsage)
+{
+ if (!node.Maybe<TCoSqlIn>().Collection().Maybe<TDqCnUnionAll>()) {
+ return node;
+ }
+
+ auto sqlIn = node.Cast<TCoSqlIn>();
+ auto unionAll = sqlIn.Collection().Cast<TDqCnUnionAll>();
+
+ if (!IsSingleConsumerConnection(unionAll, parentsMap, allowStageMultiUsage)) {
+ return node;
+ }
+
+ if (!IsDqPureExpr(sqlIn.Lookup())) {
+ return node;
+ }
+
+ if (!IsDqSelfContainedExpr(sqlIn.Lookup())) {
+ return node;
+ }
+
+ if (auto connToPushableStage = DqBuildPushableStage(unionAll, ctx)) {
+ return TExprBase(ctx.ChangeChild(*node.Raw(), TCoSqlIn::idx_Collection, std::move(connToPushableStage)));
+ }
+
+ auto localProgram = Build<TCoLambda>(ctx, node.Pos())
+ .Args({"stream"})
+ .Body<TCoMap>()
+ .Input<TCoCondense>()
+ .Input("stream")
+ .State<TCoList>()
+ .ListType(ExpandType(node.Pos(), *unionAll.Ref().GetTypeAnn(), ctx))
+ .Build()
+ .SwitchHandler()
+ .Args({"item", "state"})
+ .Body(MakeBool<false>(node.Pos(), ctx))
+ .Build()
+ .UpdateHandler()
+ .Args({"item", "state"})
+ .Body<TCoAppend>()
+ .List("state")
+ .Item("item")
+ .Build()
+ .Build()
+ .Build()
+ .Lambda()
+ .Args({"list"})
+ .Body<TCoSqlIn>()
+ .Collection("list")
+ .Lookup(sqlIn.Lookup())
+ .Options(sqlIn.Options())
+ .Build()
+ .Build()
+ .Build()
+ .Done();
+
+ auto newUnion = DqPushLambdaToStageUnionAll(unionAll, localProgram, {}, ctx, optCtx);
+
+ if (!newUnion.IsValid()) {
+ return node;
+ }
+
+ auto resultsArg = Build<TCoArgument>(ctx, node.Pos())
+ .Name("results_stream")
+ .Done();
+
+ TExprBase finalProgram = Build<TCoCondense>(ctx, node.Pos())
+ .Input(resultsArg)
+ .State<TCoJust>()
+ .Input<TCoBool>()
+ .Literal().Build("false")
+ .Build()
+ .Build()
+ .SwitchHandler()
+ .Args({"item", "state"})
+ .Body(MakeBool<false>(node.Pos(), ctx))
+ .Build()
+ .UpdateHandler()
+ .Args({"item", "state"})
+ .Body<TCoIf>()
+ .Predicate<TCoExists>()
+ .Optional("state")
+ .Build()
+ .ThenValue<TCoIf>()
+ .Predicate<TCoExists>()
+ .Optional("item")
+ .Build()
+ .ThenValue<TCoIf>()
+ .Predicate<TCoCoalesce>()
+ .Predicate("item")
+ .Value(MakeBool<false>(node.Pos(), ctx))
+ .Build()
+ .ThenValue("item")
+ .ElseValue("state")
+ .Build()
+ .ElseValue<TCoNull>().Build()
+ .Build()
+ .ElseValue<TCoNull>().Build()
+ .Build()
+ .Build()
+ .Done();
+
+ if (sqlIn.Ref().GetTypeAnn()->GetKind() != ETypeAnnotationKind::Optional) {
+ finalProgram = Build<TCoMap>(ctx, node.Pos())
+ .Input(finalProgram)
+ .Lambda()
+ .Args({"result"})
+ // Result can't be NULL, double check here.
+ .Body<TCoUnwrap>()
+ .Optional("result")
+ .Build()
+ .Build()
+ .Done();
+ }
+
+ auto stage = Build<TDqStage>(ctx, node.Pos())
+ .Inputs()
+ .Add(newUnion.Cast())
+ .Build()
+ .Program()
+ .Args({resultsArg})
+ .Body(finalProgram)
+ .Build()
+ .Settings(TDqStageSettings().BuildNode(ctx, node.Pos()))
+ .Done();
+
+ return Build<TDqPrecompute>(ctx, node.Pos())
+ .Input<TDqCnValue>()
+ .Output<TDqOutput>()
+ .Stage(stage)
+ .Index().Build("0")
+ .Build()
+ .Build()
+ .Done();
+}
+
TExprBase DqBuildScalarPrecompute(TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx,
const TParentsMap& parentsMap, bool allowStageMultiUsage)
{
@@ -1657,8 +1922,8 @@ TExprBase DqBuildScalarPrecompute(TExprBase node, TExprContext& ctx, IOptimizati
}
if (auto connToPushableStage = DqBuildPushableStage(unionAll, ctx)) {
return TExprBase(ctx.ChangeChild(
- *node.Raw(),
- node.Maybe<TCoToOptional>() ? TCoToOptional::idx_List : TCoHead::idx_Input,
+ *node.Raw(),
+ node.Maybe<TCoToOptional>() ? TCoToOptional::idx_List : TCoHead::idx_Input,
std::move(connToPushableStage)));
}
diff --git a/ydb/library/yql/dq/opt/dq_opt_phy.h b/ydb/library/yql/dq/opt/dq_opt_phy.h
index 0349e35865..87b8f5a704 100644
--- a/ydb/library/yql/dq/opt/dq_opt_phy.h
+++ b/ydb/library/yql/dq/opt/dq_opt_phy.h
@@ -31,6 +31,8 @@ NNodes::TExprBase DqPushOrderedLMapToStage(NNodes::TExprBase node, TExprContext&
NNodes::TExprBase DqPushLMapToStage(NNodes::TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx,
const TParentsMap& parentsMap, bool allowStageMultiUsage = true);
+NNodes::TExprBase DqBuildPureFlatmapStage(NNodes::TExprBase node, TExprContext& ctx);
+
NNodes::TExprBase DqBuildFlatmapStage(NNodes::TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx,
const TParentsMap& parentsMap, bool allowStageMultiUsage = true);
@@ -95,6 +97,9 @@ NNodes::TExprBase DqBuildPrecompute(NNodes::TExprBase node, TExprContext& ctx);
NYql::NNodes::TExprBase DqBuildHasItems(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
NYql::IOptimizationContext& optCtx);
+NNodes::TExprBase DqBuildSqlIn(NNodes::TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx,
+ const TParentsMap& parentsMap, bool allowStageMultiUsage);
+
NYql::NNodes::TExprBase DqBuildScalarPrecompute(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
NYql::IOptimizationContext& optCtx, const TParentsMap& parentsMap, bool allowStageMultiUsage);
@@ -106,4 +111,7 @@ NYql::NNodes::TExprBase DqPropagatePrecomuteTake(NYql::NNodes::TExprBase node, N
NYql::NNodes::TExprBase DqPropagatePrecomuteFlatmap(NYql::NNodes::TExprBase node, NYql::TExprContext& ctx,
NYql::IOptimizationContext& optCtx, const NYql::TParentsMap& parentsMap, bool allowStageMultiUsage);
+TVector<NYql::NNodes::TCoArgument> PrepareArgumentsReplacement(const NYql::NNodes::TExprBase& node, const TVector<NYql::NNodes::TDqConnection>& newInputs,
+ NYql::TExprContext& ctx, NYql::TNodeOnNodeOwnedMap& replaceMap);
+
} // namespace NYql::NDq
diff --git a/ydb/library/yql/dq/opt/dq_opt_phy_finalizing.cpp b/ydb/library/yql/dq/opt/dq_opt_phy_finalizing.cpp
index 17e5f0678f..221c5666b2 100644
--- a/ydb/library/yql/dq/opt/dq_opt_phy_finalizing.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_phy_finalizing.cpp
@@ -500,9 +500,6 @@ IGraphTransformer::TStatus DqReplicateStageMultiOutput(TExprNode::TPtr input, TE
YQL_CLOG(TRACE, CoreDq) << "DqReplicateStageMultiOutput: already have multiused connection";
return false;
}
- if (ptr->IsLambda()) {
- return false;
- }
TExprBase expr{ptr};
diff --git a/ydb/library/yql/dq/proto/dq_tasks.proto b/ydb/library/yql/dq/proto/dq_tasks.proto
index 5ae888c114..5ac9c3fe85 100644
--- a/ydb/library/yql/dq/proto/dq_tasks.proto
+++ b/ydb/library/yql/dq/proto/dq_tasks.proto
@@ -151,4 +151,6 @@ message TDqTask {
repeated TTaskOutput Outputs = 6;
google.protobuf.Any Meta = 7;
bool CreateSuspended = 8;
+ string RateLimiter = 10;
+ string RateLimiterResource = 11;
}
diff --git a/ydb/library/yql/dq/runtime/CMakeLists.txt b/ydb/library/yql/dq/runtime/CMakeLists.txt
index d30defbdcd..6e46f5cf5c 100644
--- a/ydb/library/yql/dq/runtime/CMakeLists.txt
+++ b/ydb/library/yql/dq/runtime/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yql-dq-runtime)
target_compile_options(yql-dq-runtime PRIVATE
diff --git a/ydb/library/yql/dq/runtime/ut/CMakeLists.txt b/ydb/library/yql/dq/runtime/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/dq/runtime/ut/CMakeLists.txt
+++ b/ydb/library/yql/dq/runtime/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/dq/state/CMakeLists.txt b/ydb/library/yql/dq/state/CMakeLists.txt
index 63cbc58dff..0ca364bd6a 100644
--- a/ydb/library/yql/dq/state/CMakeLists.txt
+++ b/ydb/library/yql/dq/state/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yql-dq-state)
target_link_libraries(yql-dq-state PUBLIC
diff --git a/ydb/library/yql/dq/state/ut/CMakeLists.txt b/ydb/library/yql/dq/state/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/dq/state/ut/CMakeLists.txt
+++ b/ydb/library/yql/dq/state/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/dq/type_ann/dq_type_ann.cpp b/ydb/library/yql/dq/type_ann/dq_type_ann.cpp
index 5f46d1bb53..f4835abdad 100644
--- a/ydb/library/yql/dq/type_ann/dq_type_ann.cpp
+++ b/ydb/library/yql/dq/type_ann/dq_type_ann.cpp
@@ -842,6 +842,21 @@ TStatus AnnotateDqPhyPrecompute(const TExprNode::TPtr& node, TExprContext& ctx)
return TStatus::Ok;
}
+TStatus AnnotateDqPhyLength(const TExprNode::TPtr& node, TExprContext& ctx) {
+ if (!EnsureArgsCount(*node, 2, ctx)) {
+ return TStatus::Error;
+ }
+ auto* input = node->Child(TDqPhyLength::idx_Input);
+ auto* aggName = node->Child(TDqPhyLength::idx_Name);
+
+ TVector<const TItemExprType*> aggTypes;
+ if (!EnsureAtom(*aggName, ctx)) {
+ return TStatus::Error;
+ }
+ node->SetTypeAnn(MakeSequenceType(input->GetTypeAnn()->GetKind(), *ctx.MakeType<TDataExprType>(EDataSlot::Uint64), ctx));
+ return TStatus::Ok;
+}
+
THolder<IGraphTransformer> CreateDqTypeAnnotationTransformer(TTypeAnnotationContext& typesCtx) {
auto coreTransformer = CreateExtCallableTypeAnnotationTransformer(typesCtx);
@@ -937,6 +952,10 @@ THolder<IGraphTransformer> CreateDqTypeAnnotationTransformer(TTypeAnnotationCont
return AnnotateDqPhyPrecompute(input, ctx);
}
+ if (TDqPhyLength::Match(input.Get())) {
+ return AnnotateDqPhyLength(input, ctx);
+ }
+
return coreTransformer->Transform(input, output, ctx);
});
}
diff --git a/ydb/library/yql/minikql/CMakeLists.txt b/ydb/library/yql/minikql/CMakeLists.txt
index d4c1c7539b..17a0a2b493 100644
--- a/ydb/library/yql/minikql/CMakeLists.txt
+++ b/ydb/library/yql/minikql/CMakeLists.txt
@@ -6,6 +6,16 @@
# original buildsystem will not be accepted.
+add_subdirectory(arrow)
+add_subdirectory(benchmark)
+add_subdirectory(codegen)
+add_subdirectory(comp_nodes)
+add_subdirectory(computation)
+add_subdirectory(dom)
+add_subdirectory(invoke_builtins)
+add_subdirectory(jsonpath)
+add_subdirectory(perf)
+add_subdirectory(ut)
add_library(library-yql-minikql)
target_compile_options(library-yql-minikql PRIVATE
diff --git a/ydb/library/yql/minikql/aligned_page_pool.cpp b/ydb/library/yql/minikql/aligned_page_pool.cpp
index 563c0b5803..d63d6a693b 100644
--- a/ydb/library/yql/minikql/aligned_page_pool.cpp
+++ b/ydb/library/yql/minikql/aligned_page_pool.cpp
@@ -109,10 +109,10 @@ private:
} // unnamed
-TAlignedPagePoolCounters::TAlignedPagePoolCounters(NMonitoring::TDynamicCounterPtr countersRoot, const TString& name) {
+TAlignedPagePoolCounters::TAlignedPagePoolCounters(::NMonitoring::TDynamicCounterPtr countersRoot, const TString& name) {
if (!countersRoot || name.empty())
return;
- NMonitoring::TDynamicCounterPtr subGroup = countersRoot->GetSubgroup("counters", "utils")->GetSubgroup("subsystem", "mkqlalloc");
+ ::NMonitoring::TDynamicCounterPtr subGroup = countersRoot->GetSubgroup("counters", "utils")->GetSubgroup("subsystem", "mkqlalloc");
TotalBytesAllocatedCntr = subGroup->GetCounter(name + "/TotalBytesAllocated");
AllocationsCntr = subGroup->GetCounter(name + "/Allocations", true);
PoolsCntr = subGroup->GetCounter(name + "/Pools", true);
diff --git a/ydb/library/yql/minikql/aligned_page_pool.h b/ydb/library/yql/minikql/aligned_page_pool.h
index 2ef2878655..ffef6f9408 100644
--- a/ydb/library/yql/minikql/aligned_page_pool.h
+++ b/ydb/library/yql/minikql/aligned_page_pool.h
@@ -16,12 +16,12 @@
namespace NKikimr {
struct TAlignedPagePoolCounters {
- explicit TAlignedPagePoolCounters(NMonitoring::TDynamicCounterPtr countersRoot = nullptr, const TString& name = TString());
+ explicit TAlignedPagePoolCounters(::NMonitoring::TDynamicCounterPtr countersRoot = nullptr, const TString& name = TString());
- NMonitoring::TDynamicCounters::TCounterPtr TotalBytesAllocatedCntr;
- NMonitoring::TDynamicCounters::TCounterPtr AllocationsCntr;
- NMonitoring::TDynamicCounters::TCounterPtr PoolsCntr;
- NMonitoring::TDynamicCounters::TCounterPtr LostPagesBytesFreeCntr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr TotalBytesAllocatedCntr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr AllocationsCntr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PoolsCntr;
+ ::NMonitoring::TDynamicCounters::TCounterPtr LostPagesBytesFreeCntr;
void Swap(TAlignedPagePoolCounters& other) {
DoSwap(TotalBytesAllocatedCntr, other.TotalBytesAllocatedCntr);
diff --git a/ydb/library/yql/minikql/benchmark/CMakeLists.txt b/ydb/library/yql/minikql/benchmark/CMakeLists.txt
new file mode 100644
index 0000000000..ac2de6318c
--- /dev/null
+++ b/ydb/library/yql/minikql/benchmark/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(pack_num)
diff --git a/ydb/library/yql/minikql/benchmark/pack_num/CMakeLists.txt b/ydb/library/yql/minikql/benchmark/pack_num/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/benchmark/pack_num/CMakeLists.txt
+++ b/ydb/library/yql/minikql/benchmark/pack_num/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/minikql/codegen/CMakeLists.txt b/ydb/library/yql/minikql/codegen/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/codegen/CMakeLists.txt
+++ b/ydb/library/yql/minikql/codegen/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp b/ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp
index 71e5fa7e8e..a40427ac04 100644
--- a/ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp
@@ -406,7 +406,7 @@ NUdf::TUnboxedValue TValuePacker::UnpackImpl(const TType* type, TStringBuf& buf,
return MakeString(NUdf::TStringRef(ptr, 16));
}
case NUdf::EDataSlot::Decimal: {
- const auto des = NYql::NDecimal::Deserialize(buf.data());
+ const auto des = NYql::NDecimal::Deserialize(buf.data(), buf.size());
MKQL_ENSURE(!NYql::NDecimal::IsError(des.first), "Bad packed data: invalid decimal.");
buf.Skip(des.second);
return NUdf::TUnboxedValuePod(des.first);
diff --git a/ydb/library/yql/minikql/computation/presort.cpp b/ydb/library/yql/minikql/computation/presort.cpp
index eac451bfeb..efd765b8b7 100644
--- a/ydb/library/yql/minikql/computation/presort.cpp
+++ b/ydb/library/yql/minikql/computation/presort.cpp
@@ -103,8 +103,8 @@ Y_FORCE_INLINE
template <bool Desc>
Y_FORCE_INLINE
NYql::NDecimal::TInt128 DecodeDecimal(TStringBuf& input) {
- MKQL_ENSURE(input.size() > 0U && input.size() <= DecimalSize, "premature end of input");
- const auto des = NYql::NDecimal::Deserialize(input.data());
+ const auto des = NYql::NDecimal::Deserialize(input.data(), input.size());
+ MKQL_ENSURE(!NYql::NDecimal::IsError(des.first), "Bad packed data: invalid decimal.");
input.Skip(des.second);
return Desc ? -des.first : des.first;
}
diff --git a/ydb/library/yql/minikql/jsonpath/CMakeLists.txt b/ydb/library/yql/minikql/jsonpath/CMakeLists.txt
index ad6bafb853..b37111afa6 100644
--- a/ydb/library/yql/minikql/jsonpath/CMakeLists.txt
+++ b/ydb/library/yql/minikql/jsonpath/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(benchmark)
add_library(yql-minikql-jsonpath)
target_compile_options(yql-minikql-jsonpath PRIVATE
diff --git a/ydb/library/yql/minikql/jsonpath/benchmark/CMakeLists.txt b/ydb/library/yql/minikql/jsonpath/benchmark/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/jsonpath/benchmark/CMakeLists.txt
+++ b/ydb/library/yql/minikql/jsonpath/benchmark/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/minikql/mkql_runtime_version.h b/ydb/library/yql/minikql/mkql_runtime_version.h
index 168babe974..2170e68b28 100644
--- a/ydb/library/yql/minikql/mkql_runtime_version.h
+++ b/ydb/library/yql/minikql/mkql_runtime_version.h
@@ -24,12 +24,19 @@ namespace NMiniKQL {
// 1. Bump this version every time incompatible runtime nodes are introduced.
// 2. Make sure you provide runtime node generation for previous runtime versions.
#ifndef MKQL_RUNTIME_VERSION
-#define MKQL_RUNTIME_VERSION 30U
+#define MKQL_RUNTIME_VERSION 29U
#endif
// History:
// v4 is the version supported by kikimr-19-6
// v14 is the version supported by kikimr-20-2
+// v14 is the version supported by kikimr-20-2
+// v21 is the version supported by kikimr-20-4
+// v21 is the version supported by kikimr-20-6
+// v23 is the version supported by kikimr-21-2
+// v24 is the version supported by kikimr-21-4
+// v29 is the version supported by kikimr-22-2
+// v30 is the version supported by kikimr-22-4
constexpr ui32 RuntimeVersion = MKQL_RUNTIME_VERSION;
}
diff --git a/ydb/library/yql/minikql/perf/CMakeLists.txt b/ydb/library/yql/minikql/perf/CMakeLists.txt
new file mode 100644
index 0000000000..fa3243c1dc
--- /dev/null
+++ b/ydb/library/yql/minikql/perf/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(alloc)
+add_subdirectory(mt_param)
+add_subdirectory(packer)
+add_subdirectory(param)
+add_subdirectory(presort)
diff --git a/ydb/library/yql/minikql/perf/alloc/CMakeLists.txt b/ydb/library/yql/minikql/perf/alloc/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/perf/alloc/CMakeLists.txt
+++ b/ydb/library/yql/minikql/perf/alloc/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/minikql/perf/mt_param/CMakeLists.txt b/ydb/library/yql/minikql/perf/mt_param/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/perf/mt_param/CMakeLists.txt
+++ b/ydb/library/yql/minikql/perf/mt_param/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/minikql/perf/packer/CMakeLists.txt b/ydb/library/yql/minikql/perf/packer/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/perf/packer/CMakeLists.txt
+++ b/ydb/library/yql/minikql/perf/packer/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/minikql/perf/param/CMakeLists.txt b/ydb/library/yql/minikql/perf/param/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/perf/param/CMakeLists.txt
+++ b/ydb/library/yql/minikql/perf/param/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/minikql/perf/presort/CMakeLists.txt b/ydb/library/yql/minikql/perf/presort/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/perf/presort/CMakeLists.txt
+++ b/ydb/library/yql/minikql/perf/presort/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/minikql/ut/CMakeLists.txt b/ydb/library/yql/minikql/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/minikql/ut/CMakeLists.txt
+++ b/ydb/library/yql/minikql/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/parser/CMakeLists.txt b/ydb/library/yql/parser/CMakeLists.txt
new file mode 100644
index 0000000000..38a4f1ec7d
--- /dev/null
+++ b/ydb/library/yql/parser/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(lexer_common)
+add_subdirectory(pg_catalog)
+add_subdirectory(proto_ast)
diff --git a/ydb/library/yql/parser/lexer_common/CMakeLists.txt b/ydb/library/yql/parser/lexer_common/CMakeLists.txt
index 5a30441a05..ce92c9e23d 100644
--- a/ydb/library/yql/parser/lexer_common/CMakeLists.txt
+++ b/ydb/library/yql/parser/lexer_common/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yql-parser-lexer_common)
target_link_libraries(yql-parser-lexer_common PUBLIC
diff --git a/ydb/library/yql/parser/lexer_common/ut/CMakeLists.txt b/ydb/library/yql/parser/lexer_common/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/parser/lexer_common/ut/CMakeLists.txt
+++ b/ydb/library/yql/parser/lexer_common/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/parser/pg_catalog/CMakeLists.txt b/ydb/library/yql/parser/pg_catalog/CMakeLists.txt
index 27f5f29ae4..c7adee303a 100644
--- a/ydb/library/yql/parser/pg_catalog/CMakeLists.txt
+++ b/ydb/library/yql/parser/pg_catalog/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yql-parser-pg_catalog)
target_link_libraries(yql-parser-pg_catalog PUBLIC
diff --git a/ydb/library/yql/parser/pg_catalog/ut/CMakeLists.txt b/ydb/library/yql/parser/pg_catalog/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/parser/pg_catalog/ut/CMakeLists.txt
+++ b/ydb/library/yql/parser/pg_catalog/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/parser/proto_ast/CMakeLists.txt b/ydb/library/yql/parser/proto_ast/CMakeLists.txt
index f2723200d6..c996e00c71 100644
--- a/ydb/library/yql/parser/proto_ast/CMakeLists.txt
+++ b/ydb/library/yql/parser/proto_ast/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(collect_issues)
+add_subdirectory(gen)
add_library(yql-parser-proto_ast)
target_link_libraries(yql-parser-proto_ast PUBLIC
diff --git a/ydb/library/yql/parser/proto_ast/gen/CMakeLists.txt b/ydb/library/yql/parser/proto_ast/gen/CMakeLists.txt
new file mode 100644
index 0000000000..6cd9c9121b
--- /dev/null
+++ b/ydb/library/yql/parser/proto_ast/gen/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(jsonpath)
+add_subdirectory(v0)
+add_subdirectory(v1)
+add_subdirectory(v1_ansi)
+add_subdirectory(v1_proto)
diff --git a/ydb/library/yql/parser/proto_ast/gen/v1/epilogue.cmake b/ydb/library/yql/parser/proto_ast/gen/v1/epilogue.cmake
deleted file mode 100644
index 261c66d4ca..0000000000
--- a/ydb/library/yql/parser/proto_ast/gen/v1/epilogue.cmake
+++ /dev/null
@@ -1,9 +0,0 @@
-set(GRAMMAR_STRING_CORE_SINGLE "~(QUOTE_SINGLE | BACKSLASH) | (BACKSLASH .)")
-set(GRAMMAR_STRING_CORE_DOUBLE "~(QUOTE_DOUBLE | BACKSLASH) | (BACKSLASH .)")
-set(GRAMMAR_MULTILINE_COMMENT_CORE ".")
-configure_file(
- ${CMAKE_SOURCE_DIR}/ydb/library/yql/sql/v1/SQLv1.g.in
- ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/proto_ast/gen/v1/SQLv1.g
-)
-
-
diff --git a/ydb/library/yql/parser/proto_ast/gen/v1_ansi/epilogue.cmake b/ydb/library/yql/parser/proto_ast/gen/v1_ansi/epilogue.cmake
deleted file mode 100644
index 6b2f4d40d3..0000000000
--- a/ydb/library/yql/parser/proto_ast/gen/v1_ansi/epilogue.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-set(GRAMMAR_STRING_CORE_SINGLE "~QUOTE_SINGLE | (QUOTE_SINGLE QUOTE_SINGLE)")
-set(GRAMMAR_STRING_CORE_DOUBLE "~QUOTE_DOUBLE | (QUOTE_DOUBLE QUOTE_DOUBLE)")
-set(GRAMMAR_MULTILINE_COMMENT_CORE "MULTILINE_COMMENT | .")
-
-configure_file(
- ${CMAKE_SOURCE_DIR}/ydb/library/yql/sql/v1/SQLv1.g.in
- ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/proto_ast/gen/v1_ansi/SQLv1.g
-)
-
-
diff --git a/ydb/library/yql/parser/proto_ast/gen/v1_proto/epilogue.cmake b/ydb/library/yql/parser/proto_ast/gen/v1_proto/epilogue.cmake
deleted file mode 100644
index 7bc5309af9..0000000000
--- a/ydb/library/yql/parser/proto_ast/gen/v1_proto/epilogue.cmake
+++ /dev/null
@@ -1,9 +0,0 @@
-set(GRAMMAR_STRING_CORE_SINGLE "~(QUOTE_SINGLE | BACKSLASH) | (BACKSLASH .)")
-set(GRAMMAR_STRING_CORE_DOUBLE "~(QUOTE_DOUBLE | BACKSLASH) | (BACKSLASH .)")
-set(GRAMMAR_MULTILINE_COMMENT_CORE ".")
-
-configure_file(
- ${CMAKE_SOURCE_DIR}/ydb/library/yql/sql/v1/SQLv1.g.in
- ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/proto_ast/gen/v1_proto/SQLv1.g
-)
-
diff --git a/ydb/library/yql/providers/CMakeLists.txt b/ydb/library/yql/providers/CMakeLists.txt
new file mode 100644
index 0000000000..33e8f9848b
--- /dev/null
+++ b/ydb/library/yql/providers/CMakeLists.txt
@@ -0,0 +1,18 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(clickhouse)
+add_subdirectory(common)
+add_subdirectory(config)
+add_subdirectory(dq)
+add_subdirectory(function)
+add_subdirectory(pq)
+add_subdirectory(result)
+add_subdirectory(s3)
+add_subdirectory(solomon)
+add_subdirectory(ydb)
diff --git a/ydb/library/yql/providers/clickhouse/CMakeLists.txt b/ydb/library/yql/providers/clickhouse/CMakeLists.txt
new file mode 100644
index 0000000000..7318668915
--- /dev/null
+++ b/ydb/library/yql/providers/clickhouse/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actors)
+add_subdirectory(expr_nodes)
+add_subdirectory(proto)
+add_subdirectory(provider)
diff --git a/ydb/library/yql/providers/common/CMakeLists.txt b/ydb/library/yql/providers/common/CMakeLists.txt
new file mode 100644
index 0000000000..c711b0193b
--- /dev/null
+++ b/ydb/library/yql/providers/common/CMakeLists.txt
@@ -0,0 +1,25 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(codec)
+add_subdirectory(comp_nodes)
+add_subdirectory(config)
+add_subdirectory(db_id_async_resolver)
+add_subdirectory(dq)
+add_subdirectory(gateway)
+add_subdirectory(http_gateway)
+add_subdirectory(metrics)
+add_subdirectory(mkql)
+add_subdirectory(proto)
+add_subdirectory(provider)
+add_subdirectory(schema)
+add_subdirectory(structured_token)
+add_subdirectory(token_accessor)
+add_subdirectory(transform)
+add_subdirectory(udf_resolve)
+add_subdirectory(ut_helpers)
diff --git a/ydb/library/yql/providers/common/codec/CMakeLists.txt b/ydb/library/yql/providers/common/codec/CMakeLists.txt
index fd7f39584c..8c90e40f97 100644
--- a/ydb/library/yql/providers/common/codec/CMakeLists.txt
+++ b/ydb/library/yql/providers/common/codec/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(providers-common-codec)
target_compile_options(providers-common-codec PRIVATE
diff --git a/ydb/library/yql/providers/common/codec/ut/CMakeLists.txt b/ydb/library/yql/providers/common/codec/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/providers/common/codec/ut/CMakeLists.txt
+++ b/ydb/library/yql/providers/common/codec/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/providers/common/codec/yql_codec.cpp b/ydb/library/yql/providers/common/codec/yql_codec.cpp
index 0e93780775..81e999b029 100644
--- a/ydb/library/yql/providers/common/codec/yql_codec.cpp
+++ b/ydb/library/yql/providers/common/codec/yql_codec.cpp
@@ -870,9 +870,9 @@ NUdf::TUnboxedValue ReadYsonValue(TType* type,
case NUdf::TDataType<NUdf::TDecimal>::Id: {
auto nextString = ReadNextString(cmd, buf);
if (isTableFormat) {
- const auto& des = NDecimal::Deserialize(nextString.data());
- YQL_ENSURE(nextString.size() == des.second);
+ const auto& des = NDecimal::Deserialize(nextString.data(), nextString.size());
YQL_ENSURE(!NDecimal::IsError(des.first));
+ YQL_ENSURE(nextString.size() == des.second);
return NUdf::TUnboxedValuePod(des.first);
} else {
const auto params = static_cast<TDataDecimalType*>(type)->GetParams();
@@ -1440,9 +1440,9 @@ NUdf::TUnboxedValue ReadSkiffData(TType* type, ui64 nativeYtTypeFlags, TInputBuf
YQL_ENSURE(size > 0U && size <= maxSize, "Bad decimal field size: " << size);
char data[maxSize];
buf.ReadMany(data, size);
- const auto& v = NDecimal::Deserialize(data);
- YQL_ENSURE(size == v.second, "Bad decimal field size: " << size);
+ const auto& v = NDecimal::Deserialize(data, size);
YQL_ENSURE(!NDecimal::IsError(v.first), "Bad decimal field data: " << data);
+ YQL_ENSURE(size == v.second, "Bad decimal field size: " << size);
return NUdf::TUnboxedValuePod(v.first);
}
}
diff --git a/ydb/library/yql/providers/common/http_gateway/CMakeLists.txt b/ydb/library/yql/providers/common/http_gateway/CMakeLists.txt
index 252772a3c7..8fb2b7ebe0 100644
--- a/ydb/library/yql/providers/common/http_gateway/CMakeLists.txt
+++ b/ydb/library/yql/providers/common/http_gateway/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(mock)
add_library(providers-common-http_gateway)
target_compile_options(providers-common-http_gateway PRIVATE
diff --git a/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp b/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp
index aa0c973e23..eac4d35d4b 100644
--- a/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp
+++ b/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.cpp
@@ -24,7 +24,7 @@ public:
PUT
};
- TEasyCurl(const NMonitoring::TDynamicCounters::TCounterPtr& counter, const NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const NMonitoring::TDynamicCounters::TCounterPtr& uploadedBytes, TString url, IHTTPGateway::THeaders headers, EMethod method, size_t offset = 0ULL, bool withBody = false)
+ TEasyCurl(const ::NMonitoring::TDynamicCounters::TCounterPtr& counter, const ::NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const ::NMonitoring::TDynamicCounters::TCounterPtr& uploadedBytes, TString url, IHTTPGateway::THeaders headers, EMethod method, size_t offset = 0ULL, bool withBody = false)
: Offset(offset), Handle(curl_easy_init()), Counter(counter), DownloadedBytes(downloadedBytes), UploadedBytes(uploadedBytes)
{
switch (method) {
@@ -103,9 +103,9 @@ private:
const size_t Offset;
CURL *const Handle;
curl_slist* Headers = nullptr;
- const NMonitoring::TDynamicCounters::TCounterPtr Counter;
- const NMonitoring::TDynamicCounters::TCounterPtr DownloadedBytes;
- const NMonitoring::TDynamicCounters::TCounterPtr UploadedBytes;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr Counter;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr DownloadedBytes;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr UploadedBytes;
};
class TEasyCurlBuffer : public TEasyCurl {
@@ -113,14 +113,14 @@ public:
using TPtr = std::shared_ptr<TEasyCurlBuffer>;
using TWeakPtr = std::weak_ptr<TEasyCurlBuffer>;
- TEasyCurlBuffer(const NMonitoring::TDynamicCounters::TCounterPtr& counter, const NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const NMonitoring::TDynamicCounters::TCounterPtr& uploadededBytes, TString url, EMethod method, TString data, IHTTPGateway::THeaders headers, size_t offset, size_t expectedSize, IHTTPGateway::TOnResult callback)
+ TEasyCurlBuffer(const ::NMonitoring::TDynamicCounters::TCounterPtr& counter, const ::NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const ::NMonitoring::TDynamicCounters::TCounterPtr& uploadededBytes, TString url, EMethod method, TString data, IHTTPGateway::THeaders headers, size_t offset, size_t expectedSize, IHTTPGateway::TOnResult callback)
: TEasyCurl(counter, downloadedBytes, uploadededBytes, url, headers, method, offset, !data.empty()), ExpectedSize(expectedSize), Data(std::move(data)), Input(Data), Output(Buffer)
{
Output.Reserve(ExpectedSize);
Callbacks.emplace(std::move(callback));
}
- static TPtr Make(const NMonitoring::TDynamicCounters::TCounterPtr& counter, const NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const NMonitoring::TDynamicCounters::TCounterPtr& uploadededBytes, TString url, EMethod method, TString data, IHTTPGateway::THeaders headers, size_t offset, size_t expectedSize, IHTTPGateway::TOnResult callback) {
+ static TPtr Make(const ::NMonitoring::TDynamicCounters::TCounterPtr& counter, const ::NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const ::NMonitoring::TDynamicCounters::TCounterPtr& uploadededBytes, TString url, EMethod method, TString data, IHTTPGateway::THeaders headers, size_t offset, size_t expectedSize, IHTTPGateway::TOnResult callback) {
return std::make_shared<TEasyCurlBuffer>(counter, downloadedBytes, uploadededBytes, std::move(url), method, std::move(data), std::move(headers), offset, expectedSize, std::move(callback));
}
@@ -188,11 +188,11 @@ public:
using TPtr = std::shared_ptr<TEasyCurlStream>;
using TWeakPtr = std::weak_ptr<TEasyCurlStream>;
- TEasyCurlStream(const NMonitoring::TDynamicCounters::TCounterPtr& counter, const NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const NMonitoring::TDynamicCounters::TCounterPtr& uploadededBytes, TString url, IHTTPGateway::THeaders headers, size_t offset, IHTTPGateway::TOnNewDataPart onNewData, IHTTPGateway::TOnDownloadFinish onFinish)
+ TEasyCurlStream(const ::NMonitoring::TDynamicCounters::TCounterPtr& counter, const ::NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const ::NMonitoring::TDynamicCounters::TCounterPtr& uploadededBytes, TString url, IHTTPGateway::THeaders headers, size_t offset, IHTTPGateway::TOnNewDataPart onNewData, IHTTPGateway::TOnDownloadFinish onFinish)
: TEasyCurl(counter, downloadedBytes, uploadededBytes, url, headers, EMethod::GET, offset), OnNewData(std::move(onNewData)), OnFinish(std::move(onFinish)), Counter(std::make_shared<std::atomic_size_t>(0ULL))
{}
- static TPtr Make(const NMonitoring::TDynamicCounters::TCounterPtr& counter, const NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const NMonitoring::TDynamicCounters::TCounterPtr& uploadededBytes, TString url, IHTTPGateway::THeaders headers, size_t offset, IHTTPGateway::TOnNewDataPart onNewData, IHTTPGateway::TOnDownloadFinish onFinish) {
+ static TPtr Make(const ::NMonitoring::TDynamicCounters::TCounterPtr& counter, const ::NMonitoring::TDynamicCounters::TCounterPtr& downloadedBytes, const ::NMonitoring::TDynamicCounters::TCounterPtr& uploadededBytes, TString url, IHTTPGateway::THeaders headers, size_t offset, IHTTPGateway::TOnNewDataPart onNewData, IHTTPGateway::TOnDownloadFinish onFinish) {
return std::make_shared<TEasyCurlStream>(counter, downloadedBytes, uploadededBytes, std::move(url), std::move(headers), offset, std::move(onNewData), std::move(onFinish));
}
@@ -267,7 +267,7 @@ public:
explicit THTTPMultiGateway(
const THttpGatewayConfig* httpGatewaysCfg,
- NMonitoring::TDynamicCounterPtr counters)
+ ::NMonitoring::TDynamicCounterPtr counters)
: Counters(std::move(counters))
, Rps(Counters->GetCounter("Requests", true))
, InFlight(Counters->GetCounter("InFlight"))
@@ -577,19 +577,19 @@ private:
static std::mutex CreateSync;
static TWeakPtr Singleton;
- const NMonitoring::TDynamicCounterPtr Counters;
- const NMonitoring::TDynamicCounters::TCounterPtr Rps;
- const NMonitoring::TDynamicCounters::TCounterPtr InFlight;
- const NMonitoring::TDynamicCounters::TCounterPtr InFlightStreams;
- const NMonitoring::TDynamicCounters::TCounterPtr MaxInFlight;
- const NMonitoring::TDynamicCounters::TCounterPtr AllocatedMemory;
- const NMonitoring::TDynamicCounters::TCounterPtr MaxAllocatedMemory;
- const NMonitoring::TDynamicCounters::TCounterPtr OutputMemory;
- const NMonitoring::TDynamicCounters::TCounterPtr PerformCycles;
- const NMonitoring::TDynamicCounters::TCounterPtr AwaitQueue;
- const NMonitoring::TDynamicCounters::TCounterPtr AwaitQueueTopExpectedSize;
- const NMonitoring::TDynamicCounters::TCounterPtr DownloadedBytes;
- const NMonitoring::TDynamicCounters::TCounterPtr UploadedBytes;
+ const ::NMonitoring::TDynamicCounterPtr Counters;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr Rps;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr InFlight;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr InFlightStreams;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr MaxInFlight;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr AllocatedMemory;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr MaxAllocatedMemory;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr OutputMemory;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr PerformCycles;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr AwaitQueue;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr AwaitQueueTopExpectedSize;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr DownloadedBytes;
+ const ::NMonitoring::TDynamicCounters::TCounterPtr UploadedBytes;
TTaskScheduler TaskScheduler;
};
@@ -658,7 +658,7 @@ TString IHTTPGateway::TCountedContent::Extract() {
}
IHTTPGateway::TPtr
-IHTTPGateway::Make(const THttpGatewayConfig* httpGatewaysCfg, NMonitoring::TDynamicCounterPtr counters) {
+IHTTPGateway::Make(const THttpGatewayConfig* httpGatewaysCfg, ::NMonitoring::TDynamicCounterPtr counters) {
const std::unique_lock lock(THTTPMultiGateway::CreateSync);
if (const auto g = THTTPMultiGateway::Singleton.lock())
return g;
diff --git a/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h b/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h
index 926c4f790b..67d2421218 100644
--- a/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h
+++ b/ydb/library/yql/providers/common/http_gateway/yql_http_gateway.h
@@ -25,7 +25,7 @@ public:
// Throws on error.
static TPtr Make(
const THttpGatewayConfig* httpGatewaysCfg = nullptr,
- NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<NMonitoring::TDynamicCounters>());
+ ::NMonitoring::TDynamicCounterPtr counters = MakeIntrusive<::NMonitoring::TDynamicCounters>());
class TContentBase : protected TString {
protected:
diff --git a/ydb/library/yql/providers/common/metrics/CMakeLists.txt b/ydb/library/yql/providers/common/metrics/CMakeLists.txt
index eb1517baa5..926bba81f6 100644
--- a/ydb/library/yql/providers/common/metrics/CMakeLists.txt
+++ b/ydb/library/yql/providers/common/metrics/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
add_library(providers-common-metrics)
target_link_libraries(providers-common-metrics PUBLIC
diff --git a/ydb/library/yql/providers/common/metrics/sensors_group.h b/ydb/library/yql/providers/common/metrics/sensors_group.h
index 956a0c6fe2..1155fe3840 100644
--- a/ydb/library/yql/providers/common/metrics/sensors_group.h
+++ b/ydb/library/yql/providers/common/metrics/sensors_group.h
@@ -13,7 +13,7 @@ namespace NSensorComponent {
} // namspace NSensorComponent
-using TSensorsGroup = NMonitoring::TDynamicCounters;
+using TSensorsGroup = ::NMonitoring::TDynamicCounters;
using TSensorsGroupPtr = TIntrusivePtr<TSensorsGroup>;
using TSensorCounter = NMonitoring::TCounterForPtr;
diff --git a/ydb/library/yql/providers/common/metrics/service_counters.cpp b/ydb/library/yql/providers/common/metrics/service_counters.cpp
index b7cba1c4b3..631c6e140a 100644
--- a/ydb/library/yql/providers/common/metrics/service_counters.cpp
+++ b/ydb/library/yql/providers/common/metrics/service_counters.cpp
@@ -4,8 +4,8 @@ namespace NYql {
namespace NCommon {
TServiceCounters::TServiceCounters(
- const NMonitoring::TDynamicCounterPtr& rootCounters,
- const NMonitoring::TDynamicCounterPtr& publicCounters,
+ const ::NMonitoring::TDynamicCounterPtr& rootCounters,
+ const ::NMonitoring::TDynamicCounterPtr& publicCounters,
const TString& subsystemName)
: RootCounters(rootCounters)
, PublicCounters(publicCounters)
@@ -14,7 +14,7 @@ TServiceCounters::TServiceCounters(
}
TServiceCounters::TServiceCounters(
- const NMonitoring::TDynamicCounterPtr& baseCounters,
+ const ::NMonitoring::TDynamicCounterPtr& baseCounters,
const TString& subsystemName)
: RootCounters(baseCounters->GetSubgroup("counters", "yq"))
, PublicCounters(baseCounters->GetSubgroup("counters", "yq_public"))
diff --git a/ydb/library/yql/providers/common/metrics/service_counters.h b/ydb/library/yql/providers/common/metrics/service_counters.h
index 05685daf85..3257711d66 100644
--- a/ydb/library/yql/providers/common/metrics/service_counters.h
+++ b/ydb/library/yql/providers/common/metrics/service_counters.h
@@ -7,20 +7,20 @@ namespace NYql {
namespace NCommon {
struct TServiceCounters {
- NMonitoring::TDynamicCounterPtr RootCounters; // "counters/counters=yq" - root counters for service metrics
- NMonitoring::TDynamicCounterPtr PublicCounters; // "counters/counters=public" - root counters for cloud user metrics
- NMonitoring::TDynamicCounterPtr Counters; // "counters/counters=yq/subsystem=smth" - subsystem part, may match to RootCounters if subsystem name is empty
+ ::NMonitoring::TDynamicCounterPtr RootCounters; // "counters/counters=yq" - root counters for service metrics
+ ::NMonitoring::TDynamicCounterPtr PublicCounters; // "counters/counters=public" - root counters for cloud user metrics
+ ::NMonitoring::TDynamicCounterPtr Counters; // "counters/counters=yq/subsystem=smth" - subsystem part, may match to RootCounters if subsystem name is empty
- NMonitoring::TDynamicCounters::TCounterPtr UptimeRootCounter; // yq/uptime_seconds
- NMonitoring::TDynamicCounters::TCounterPtr UptimePublicCounter; // yq_public/query.uptime_seconds
+ ::NMonitoring::TDynamicCounters::TCounterPtr UptimeRootCounter; // yq/uptime_seconds
+ ::NMonitoring::TDynamicCounters::TCounterPtr UptimePublicCounter; // yq_public/query.uptime_seconds
explicit TServiceCounters(
- const NMonitoring::TDynamicCounterPtr& rootCounters,
- const NMonitoring::TDynamicCounterPtr& publicCounters,
+ const ::NMonitoring::TDynamicCounterPtr& rootCounters,
+ const ::NMonitoring::TDynamicCounterPtr& publicCounters,
const TString& subsystemName = "");
explicit TServiceCounters(
- const NMonitoring::TDynamicCounterPtr& baseCounters,
+ const ::NMonitoring::TDynamicCounterPtr& baseCounters,
const TString& subsystemName = "");
explicit TServiceCounters(
diff --git a/ydb/library/yql/providers/common/mkql/parser.cpp b/ydb/library/yql/providers/common/mkql/parser.cpp
index d50833f6f5..69a9fa37cc 100644
--- a/ydb/library/yql/providers/common/mkql/parser.cpp
+++ b/ydb/library/yql/providers/common/mkql/parser.cpp
@@ -104,11 +104,14 @@ TString ResolveUDFNameByCompression(std::string_view input) {
} // namespace
TRuntimeNode BuildParseCall(
+ TPosition pos,
TRuntimeNode input,
+ TMaybe<TRuntimeNode> extraColumnsByPathIndex,
const std::string_view& format,
const std::string_view& compression,
TType* inputType,
TType* outputItemType,
+ TType* finalItemType,
NCommon::TMkqlBuildContext& ctx)
{
if (!compression.empty()) {
@@ -122,54 +125,102 @@ TRuntimeNode BuildParseCall(
MKQL_ENSURE(1U == structType->GetMembersCount(), "Expected single column.");
bool isOptional;
const auto schemeType = UnpackOptionalData(structType->GetMemberType(0U), isOptional)->GetSchemeType();
- return ctx.ProgramBuilder.ExpandMap(ctx.ProgramBuilder.ToFlow(input),
- [&](TRuntimeNode item)->TRuntimeNode::TList {
- return { NUdf::TDataType<const char*>::Id == schemeType ?
- isOptional ? ctx.ProgramBuilder.NewOptional(item) : item :
- (ctx.ProgramBuilder.*(isOptional ? &TProgramBuilder::FromString : &TProgramBuilder::StrictFromString))
- (item, ctx.ProgramBuilder.NewDataType(schemeType, isOptional))
- };
+ auto parseLambda = [&](TRuntimeNode item) {
+ TRuntimeNode converted;
+ if (NUdf::TDataType<const char*>::Id == schemeType) {
+ converted = isOptional ? ctx.ProgramBuilder.NewOptional(item) : item;
+ } else {
+ auto type = ctx.ProgramBuilder.NewDataType(schemeType, isOptional);
+ converted = isOptional ? ctx.ProgramBuilder.FromString(item, type) :
+ ctx.ProgramBuilder.StrictFromString(item, type);
+ }
+
+ return ctx.ProgramBuilder.NewStruct(outputItemType, {{structType->GetMemberName(0), converted }});
+ };
+
+ input = ctx.ProgramBuilder.Map(ctx.ProgramBuilder.ToFlow(input),
+ [&](TRuntimeNode item) {
+ if (extraColumnsByPathIndex) {
+ auto data = ctx.ProgramBuilder.Nth(item, 0);
+ auto pathInd = ctx.ProgramBuilder.Nth(item, 1);
+ return ctx.ProgramBuilder.NewTuple({ parseLambda(data), pathInd });
+ }
+ return parseLambda(item);
}
);
} else if (format == "json_list") {
+ auto parseToListLambda = [&](TRuntimeNode blob) {
+ const auto json = ctx.ProgramBuilder.StrictFromString(blob, ctx.ProgramBuilder.NewDataType(NUdf::TDataType<NUdf::TJson>::Id));
+ const auto dom = ctx.ProgramBuilder.Apply(ctx.ProgramBuilder.Udf("Yson2.ParseJson"), {json});
+ const auto userType = ctx.ProgramBuilder.NewTupleType({ctx.ProgramBuilder.NewTupleType({dom.GetStaticType()}), ctx.ProgramBuilder.NewStructType({}), ctx.ProgramBuilder.NewListType(outputItemType)});
+ return ctx.ProgramBuilder.Apply(ctx.ProgramBuilder.Udf("Yson2.ConvertTo", {}, userType), {dom});
+ };
+
input = ctx.ProgramBuilder.FlatMap(ctx.ProgramBuilder.ToFlow(input),
[&](TRuntimeNode blob) {
- const auto json = ctx.ProgramBuilder.StrictFromString(blob, ctx.ProgramBuilder.NewDataType(NUdf::TDataType<NUdf::TJson>::Id));
- const auto dom = ctx.ProgramBuilder.Apply(ctx.ProgramBuilder.Udf("Yson2.ParseJson"), {json});
- const auto userType = ctx.ProgramBuilder.NewTupleType({ctx.ProgramBuilder.NewTupleType({dom.GetStaticType()}), ctx.ProgramBuilder.NewStructType({}), ctx.ProgramBuilder.NewListType(outputItemType)});
- return ctx.ProgramBuilder.Apply(ctx.ProgramBuilder.Udf("Yson2.ConvertTo", {}, userType), {dom});
+ TRuntimeNode parsedList;
+ if (extraColumnsByPathIndex) {
+ auto data = ctx.ProgramBuilder.Nth(blob, 0);
+ auto pathInd = ctx.ProgramBuilder.Nth(blob, 1);
+
+ parsedList = ctx.ProgramBuilder.Map(parseToListLambda(data),
+ [&](TRuntimeNode item) {
+ return ctx.ProgramBuilder.NewTuple({ item, pathInd });
+ }
+ );
+ } else {
+ parsedList = parseToListLambda(blob);
+ }
+ return parsedList;
});
} else {
- const auto userType = ctx.ProgramBuilder.NewTupleType({ctx.ProgramBuilder.NewTupleType({inputType}), ctx.ProgramBuilder.NewStructType({}), outputItemType});
- input = TType::EKind::Resource == static_cast<TStreamType*>(inputType)->GetItemType()->GetKind() ?
+ TType* userOutputType = outputItemType;
+ TType* inputDataType = static_cast<TStreamType*>(inputType)->GetItemType();
+ if (extraColumnsByPathIndex) {
+ userOutputType = ctx.ProgramBuilder.NewTupleType({ userOutputType, ctx.ProgramBuilder.NewDataType(NUdf::EDataSlot::Uint64)});
+ inputDataType = static_cast<TTupleType*>(inputDataType)->GetElementType(0);
+ }
+ const auto userType = ctx.ProgramBuilder.NewTupleType({ctx.ProgramBuilder.NewTupleType({inputType}), ctx.ProgramBuilder.NewStructType({}), userOutputType});
+ input = TType::EKind::Resource == inputDataType->GetKind() ?
ctx.ProgramBuilder.ToFlow(ctx.ProgramBuilder.Apply(ctx.ProgramBuilder.Udf("ClickHouseClient.ParseBlocks", {}, userType), {input})):
ctx.ProgramBuilder.ToFlow(ctx.ProgramBuilder.Apply(ctx.ProgramBuilder.Udf("ClickHouseClient.ParseFormat", {}, userType, format), {input}));
}
+ const auto finalStructType = static_cast<const TStructType*>(finalItemType);
+ if (extraColumnsByPathIndex) {
+ return ctx.ProgramBuilder.ExpandMap(input,
+ [&](TRuntimeNode item) {
+ // find extra columns by path index and combine them with parsed output
+ auto data = ctx.ProgramBuilder.Nth(item, 0);
+ auto pathInd = ctx.ProgramBuilder.Nth(item, 1);
+
+ auto extra = ctx.ProgramBuilder.Lookup(ctx.ProgramBuilder.ToIndexDict(*extraColumnsByPathIndex), pathInd);
+ extra = ctx.ProgramBuilder.Unwrap(extra,
+ ctx.ProgramBuilder.NewDataLiteral<NUdf::EDataSlot::String>("Failed to lookup path index"),
+ pos.File, pos.Row, pos.Column);
+
+ TRuntimeNode::TList fields;
+ fields.reserve(finalStructType->GetMembersCount());
+ for (ui32 i = 0; i < finalStructType->GetMembersCount(); ++i) {
+ TStringBuf name = finalStructType->GetMemberName(i);
+ const bool inData = structType->FindMemberIndex(name).Defined();
+ fields.push_back(ctx.ProgramBuilder.Member(inData ? data : extra, name));
+ }
+ return fields;
+ }
+ );
+ }
+
return ctx.ProgramBuilder.ExpandMap(input,
[&](TRuntimeNode item) {
TRuntimeNode::TList fields;
- fields.reserve(structType->GetMembersCount());
+ fields.reserve(finalStructType->GetMembersCount());
auto j = 0U;
- std::generate_n(std::back_inserter(fields), structType->GetMembersCount(), [&](){ return ctx.ProgramBuilder.Member(item, structType->GetMemberName(j++)); });
+ std::generate_n(std::back_inserter(fields), finalStructType->GetMembersCount(), [&](){ return ctx.ProgramBuilder.Member(item, finalStructType->GetMemberName(j++)); });
return fields;
});
}
-NCommon::IMkqlCallableCompiler::TCompiler BuildCompiler(const std::string_view& providerName) {
- return [providerName](const TExprNode& node, NCommon::TMkqlBuildContext& ctx) {
- if (const auto wrapper = TDqSourceWideWrap(&node); wrapper.DataSource().Category().Value() == providerName) {
- const auto input = MkqlBuildExpr(wrapper.Input().Ref(), ctx);
- const auto inputItemType = NCommon::BuildType(wrapper.Input().Ref(), *wrapper.Input().Ref().GetTypeAnn(), ctx.ProgramBuilder);
- const auto outputItemType = NCommon::BuildType(wrapper.RowType().Ref(), *wrapper.RowType().Ref().GetTypeAnn()->Cast<TTypeExprType>()->GetType(), ctx.ProgramBuilder);
- const auto& settings = GetSettings(wrapper.Settings().Cast().Ref());
- return BuildParseCall(input, GetFormat(wrapper.Settings().Cast().Ref()).Content() + settings.front(), settings.back(), inputItemType, outputItemType, ctx);
- }
-
- return TRuntimeNode();
- };
-}
-
TMaybe<TRuntimeNode> TryWrapWithParser(const TDqSourceWideWrap& wrapper, NCommon::TMkqlBuildContext& ctx) {
const auto& format = GetFormat(wrapper.Settings().Cast().Ref());
if (!format.Content()) {
@@ -178,9 +229,24 @@ TMaybe<TRuntimeNode> TryWrapWithParser(const TDqSourceWideWrap& wrapper, NCommon
const auto input = MkqlBuildExpr(wrapper.Input().Ref(), ctx);
const auto inputItemType = NCommon::BuildType(wrapper.Input().Ref(), *wrapper.Input().Ref().GetTypeAnn(), ctx.ProgramBuilder);
- const auto outputItemType = NCommon::BuildType(wrapper.RowType().Ref(), *wrapper.RowType().Ref().GetTypeAnn()->Cast<TTypeExprType>()->GetType(), ctx.ProgramBuilder);
+
+ const TStructExprType* rowType = wrapper.RowType().Ref().GetTypeAnn()->Cast<TTypeExprType>()->GetType()->Cast<TStructExprType>();
+ const TStructExprType* parsedType = rowType;
+
+ TMaybe<TRuntimeNode> extraColumns;
+ if (auto extraColumnsSetting = GetSetting(wrapper.Settings().Cast().Ref(), "extraColumns")) {
+ extraColumns = MkqlBuildExpr(extraColumnsSetting->Tail(), ctx);
+ const TStructExprType* extraType = extraColumnsSetting->Tail().GetTypeAnn()->Cast<TListExprType>()->GetItemType()->Cast<TStructExprType>();
+ auto parsedItems = rowType->GetItems();
+ EraseIf(parsedItems, [extraType](const auto& item) { return extraType->FindItem(item->GetName()); });
+ parsedType = ctx.ExprCtx.MakeType<TStructExprType>(parsedItems);
+ }
+
+ const auto outputItemType = NCommon::BuildType(wrapper.RowType().Ref(), *parsedType, ctx.ProgramBuilder);
+ const auto finalItemType = NCommon::BuildType(wrapper.RowType().Ref(), *rowType, ctx.ProgramBuilder);
const auto& settings = GetSettings(wrapper.Settings().Cast().Ref());
- return BuildParseCall(input, format.Content() + settings.front(), settings.back(), inputItemType, outputItemType, ctx);
+ TPosition pos = ctx.ExprCtx.GetPosition(wrapper.Pos());
+ return BuildParseCall(pos, input, extraColumns, format.Content() + settings.front(), settings.back(), inputItemType, outputItemType, finalItemType, ctx);
}
}
diff --git a/ydb/library/yql/providers/common/mkql/parser.h b/ydb/library/yql/providers/common/mkql/parser.h
index 285366a386..83f52328fc 100644
--- a/ydb/library/yql/providers/common/mkql/parser.h
+++ b/ydb/library/yql/providers/common/mkql/parser.h
@@ -14,11 +14,14 @@
namespace NYql {
NKikimr::NMiniKQL::TRuntimeNode BuildParseCall(
+ TPosition pos,
NKikimr::NMiniKQL::TRuntimeNode input,
+ TMaybe<NKikimr::NMiniKQL::TRuntimeNode> extraColumnsByPathIndex,
const std::string_view& format,
const std::string_view& compression,
NKikimr::NMiniKQL::TType* inputItemType,
NKikimr::NMiniKQL::TType* outputItemType,
+ NKikimr::NMiniKQL::TType* finalItemType,
NCommon::TMkqlBuildContext& ctx);
TMaybe<NKikimr::NMiniKQL::TRuntimeNode> TryWrapWithParser(const NYql::NNodes::TDqSourceWideWrap& wrapper, NCommon::TMkqlBuildContext& ctx);
diff --git a/ydb/library/yql/providers/common/schema/CMakeLists.txt b/ydb/library/yql/providers/common/schema/CMakeLists.txt
index 5ce03cb5c1..372c599fb8 100644
--- a/ydb/library/yql/providers/common/schema/CMakeLists.txt
+++ b/ydb/library/yql/providers/common/schema/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(expr)
+add_subdirectory(mkql)
+add_subdirectory(parser)
+add_subdirectory(skiff)
add_library(providers-common-schema)
target_link_libraries(providers-common-schema PUBLIC
diff --git a/ydb/library/yql/providers/common/structured_token/CMakeLists.txt b/ydb/library/yql/providers/common/structured_token/CMakeLists.txt
index 7785b99010..6cad9ae8d7 100644
--- a/ydb/library/yql/providers/common/structured_token/CMakeLists.txt
+++ b/ydb/library/yql/providers/common/structured_token/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(providers-common-structured_token)
target_link_libraries(providers-common-structured_token PUBLIC
diff --git a/ydb/library/yql/providers/common/structured_token/ut/CMakeLists.txt b/ydb/library/yql/providers/common/structured_token/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/providers/common/structured_token/ut/CMakeLists.txt
+++ b/ydb/library/yql/providers/common/structured_token/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/providers/common/token_accessor/CMakeLists.txt b/ydb/library/yql/providers/common/token_accessor/CMakeLists.txt
new file mode 100644
index 0000000000..57b2c8d829
--- /dev/null
+++ b/ydb/library/yql/providers/common/token_accessor/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(client)
+add_subdirectory(grpc)
diff --git a/ydb/library/yql/providers/dq/CMakeLists.txt b/ydb/library/yql/providers/dq/CMakeLists.txt
new file mode 100644
index 0000000000..dab4d1f588
--- /dev/null
+++ b/ydb/library/yql/providers/dq/CMakeLists.txt
@@ -0,0 +1,24 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actors)
+add_subdirectory(api)
+add_subdirectory(backtrace)
+add_subdirectory(common)
+add_subdirectory(config)
+add_subdirectory(counters)
+add_subdirectory(expr_nodes)
+add_subdirectory(interface)
+add_subdirectory(mkql)
+add_subdirectory(opt)
+add_subdirectory(planner)
+add_subdirectory(provider)
+add_subdirectory(runtime)
+add_subdirectory(task_runner)
+add_subdirectory(task_runner_actor)
+add_subdirectory(worker_manager)
diff --git a/ydb/library/yql/providers/dq/actors/executer_actor.cpp b/ydb/library/yql/providers/dq/actors/executer_actor.cpp
index c58cc24487..9caf03e4ff 100644
--- a/ydb/library/yql/providers/dq/actors/executer_actor.cpp
+++ b/ydb/library/yql/providers/dq/actors/executer_actor.cpp
@@ -42,7 +42,7 @@ public:
const NActors::TActorId& printerId,
const TString& traceId, const TString& username,
const TDqConfiguration::TPtr& settings,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
TInstant requestStartTime,
bool createTaskSuspended)
: TRichActor<TDqExecuter>(&TDqExecuter::Handler)
@@ -457,7 +457,7 @@ private:
ui64 ResourceId = 0;
const TString TraceId;
const TString Username;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TDynamicCounters::TCounterPtr LongWorkersAllocationCounter;
TDynamicCounters::TCounterPtr ExecutionTimeoutCounter;
@@ -484,7 +484,7 @@ NActors::IActor* MakeDqExecuter(
const NActors::TActorId& printerId,
const TString& traceId, const TString& username,
const TDqConfiguration::TPtr& settings,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
TInstant requestStartTime,
bool createTaskSuspended
) {
diff --git a/ydb/library/yql/providers/dq/actors/executer_actor.h b/ydb/library/yql/providers/dq/actors/executer_actor.h
index fae7d1cdbf..c4652142c1 100644
--- a/ydb/library/yql/providers/dq/actors/executer_actor.h
+++ b/ydb/library/yql/providers/dq/actors/executer_actor.h
@@ -13,7 +13,7 @@ NActors::IActor* MakeDqExecuter(
const NActors::TActorId& printerId,
const TString& traceId, const TString& username,
const TDqConfiguration::TPtr& settings,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
TInstant requestStartTime = TInstant::Now(),
bool createTaskSuspended = false
);
diff --git a/ydb/library/yql/providers/dq/actors/resource_allocator.cpp b/ydb/library/yql/providers/dq/actors/resource_allocator.cpp
index c8c786f6a3..8087a4d66d 100644
--- a/ydb/library/yql/providers/dq/actors/resource_allocator.cpp
+++ b/ydb/library/yql/providers/dq/actors/resource_allocator.cpp
@@ -48,7 +48,7 @@ public:
ui32 workerCount,
const TString& traceId,
const TDqConfiguration::TPtr settings,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TVector<NYql::NDqProto::TDqTask>& tasks,
const TString& computeActorType)
: TRichActor<TResourceAllocator>(&TResourceAllocator::Handle)
@@ -320,7 +320,7 @@ private:
const TDqConfiguration::TPtr Settings;
int NetworkRetries;
TDuration Timeout;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TDynamicCounters::TCounterPtr RetryCounter;
TCounters QueryStat;
@@ -336,7 +336,7 @@ NActors::IActor* CreateResourceAllocator(
ui32 size,
const TString& traceId,
const TDqConfiguration::TPtr& settings,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TVector<NYql::NDqProto::TDqTask>& tasks,
const TString& computeActorType)
{
diff --git a/ydb/library/yql/providers/dq/actors/resource_allocator.h b/ydb/library/yql/providers/dq/actors/resource_allocator.h
index ab5db2df0e..af9002663c 100644
--- a/ydb/library/yql/providers/dq/actors/resource_allocator.h
+++ b/ydb/library/yql/providers/dq/actors/resource_allocator.h
@@ -14,7 +14,7 @@ namespace NYql {
ui32 workerCount,
const TString& traceId,
const TDqConfiguration::TPtr& settings,
- const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters,
+ const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters,
const TVector<NYql::NDqProto::TDqTask>& tasks = {},
const TString& computeActorType = "old");
} // namespace NYql
diff --git a/ydb/library/yql/providers/dq/actors/task_controller.cpp b/ydb/library/yql/providers/dq/actors/task_controller.cpp
index 4becd9b1d4..d173cb6d74 100644
--- a/ydb/library/yql/providers/dq/actors/task_controller.cpp
+++ b/ydb/library/yql/providers/dq/actors/task_controller.cpp
@@ -190,7 +190,7 @@ private:
}
};
- NMonitoring::TDynamicCounterPtr GroupForExport(const TCounters& stat, const TString& counterName, ui64 taskId, TString& name, std::map<TString, TString>& labels) {
+ ::NMonitoring::TDynamicCounterPtr GroupForExport(const TCounters& stat, const TString& counterName, ui64 taskId, TString& name, std::map<TString, TString>& labels) {
Y_UNUSED(stat);
TString prefix;
if (NCommon::ParseCounterName(&prefix, &labels, &name, counterName)) {
diff --git a/ydb/library/yql/providers/dq/api/CMakeLists.txt b/ydb/library/yql/providers/dq/api/CMakeLists.txt
new file mode 100644
index 0000000000..bd2e57c6b5
--- /dev/null
+++ b/ydb/library/yql/providers/dq/api/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(grpc)
+add_subdirectory(protos)
diff --git a/ydb/library/yql/providers/dq/api/protos/service.proto b/ydb/library/yql/providers/dq/api/protos/service.proto
index b91351e5d1..c3d001ff95 100644
--- a/ydb/library/yql/providers/dq/api/protos/service.proto
+++ b/ydb/library/yql/providers/dq/api/protos/service.proto
@@ -81,6 +81,8 @@ message ExecuteGraphRequest {
map<string, string> SecureParams = 9;
bool Discard = 12;
map<string, string> GraphParams = 13;
+ string RateLimiter = 14;
+ string RateLimiterResource = 15;
}
message ExecuteGraphResponse {
diff --git a/ydb/library/yql/providers/dq/opt/dqs_opt.cpp b/ydb/library/yql/providers/dq/opt/dqs_opt.cpp
index c171924714..7ce46e261e 100644
--- a/ydb/library/yql/providers/dq/opt/dqs_opt.cpp
+++ b/ydb/library/yql/providers/dq/opt/dqs_opt.cpp
@@ -58,6 +58,7 @@ namespace NYql::NDqs {
PERFORM_RULE(DqPeepholeRewritePureJoin, node, ctx);
PERFORM_RULE(DqPeepholeRewriteReplicate, node, ctx);
PERFORM_RULE(DqPeepholeDropUnusedInputs, node, ctx);
+ PERFORM_RULE(DqPeepholeRewriteLength, node, ctx);
return inputExpr;
}, ctx, optSettings);
});
diff --git a/ydb/library/yql/providers/dq/opt/logical_optimize.cpp b/ydb/library/yql/providers/dq/opt/logical_optimize.cpp
index 91b394273e..ae858adfcd 100644
--- a/ydb/library/yql/providers/dq/opt/logical_optimize.cpp
+++ b/ydb/library/yql/providers/dq/opt/logical_optimize.cpp
@@ -42,8 +42,9 @@ TString BuildColumnName(const TExprBase column) {
class TDqsLogicalOptProposalTransformer : public TOptimizeTransformerBase {
public:
TDqsLogicalOptProposalTransformer(TTypeAnnotationContext* typeCtx, const TDqConfiguration::TPtr& config)
- : TOptimizeTransformerBase(typeCtx, NLog::EComponent::ProviderDq, {})
+ : TOptimizeTransformerBase(/*TODO*/nullptr, NLog::EComponent::ProviderDq, {})
, Config(config)
+ , TypesCtx(*typeCtx)
{
#define HNDL(name) "DqsLogical-"#name, Hndl(&TDqsLogicalOptProposalTransformer::name)
AddHandler(0, &TCoUnorderedBase::Match, HNDL(SkipUnordered));
@@ -81,7 +82,7 @@ protected:
if (hopSetting) {
return RewriteAsHoppingWindow(node, ctx, input.Cast()).Cast();
} else {
- return DqRewriteAggregate(node, ctx);
+ return DqRewriteAggregate(node, ctx, TypesCtx);
}
}
return node;
@@ -484,14 +485,14 @@ private:
const auto tuple = handler.Cast<TCoAggregateTuple>();
TMaybeNode<TExprBase> applier;
- if (tuple.Trait().InitHandler().Args().Size() == 1) {
+ if (tuple.Trait().Cast<TCoAggregationTraits>().InitHandler().Args().Size() == 1) {
applier = Build<TExprApplier>(ctx, pos)
- .Apply(tuple.Trait().InitHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().InitHandler())
.With(0, initItemArg)
.Done();
} else {
applier = Build<TExprApplier>(ctx, pos)
- .Apply(tuple.Trait().InitHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().InitHandler())
.With(0, initItemArg)
.With<TCoUint32>(1)
.Literal().Build(ToString(index))
@@ -536,15 +537,15 @@ private:
.Done();
TMaybeNode<TExprBase> applier;
- if (tuple.Trait().UpdateHandler().Args().Size() == 2) {
+ if (tuple.Trait().Cast<TCoAggregationTraits>().UpdateHandler().Args().Size() == 2) {
applier = Build<TExprApplier>(ctx, pos)
- .Apply(tuple.Trait().UpdateHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().UpdateHandler())
.With(0, updateItemArg)
.With(1, member)
.Done();
} else {
applier = Build<TExprApplier>(ctx, pos)
- .Apply(tuple.Trait().UpdateHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().UpdateHandler())
.With(0, updateItemArg)
.With(1, member)
.With<TCoUint32>(2)
@@ -595,7 +596,7 @@ private:
structItems.push_back(Build<TCoNameValueTuple>(ctx, pos)
.Name().Build(columnName)
.Value<TExprApplier>()
- .Apply(tuple.Trait().MergeHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().MergeHandler())
.With(0, member1)
.With(1, member2)
.Build()
@@ -655,7 +656,7 @@ private:
structItems.push_back(Build<TCoNameValueTuple>(ctx, pos)
.Name().Build(compoundColumnName)
.Value<TExprApplier>()
- .Apply(tuple.Trait().FinishHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().FinishHandler())
.With(0, member)
.Build()
.Done());
@@ -665,7 +666,7 @@ private:
if (const auto namesList = tuple.ColumnName().Maybe<TCoAtomList>()) {
const auto expApplier = Build<TExprApplier>(ctx, pos)
- .Apply(tuple.Trait().FinishHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().FinishHandler())
.With(0, member)
.Done();
@@ -724,7 +725,7 @@ private:
structItems.push_back(Build<TCoNameValueTuple>(ctx, pos)
.Name().Build(columnName)
.Value<TExprApplier>()
- .Apply(tuple.Trait().SaveHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().SaveHandler())
.With(0, member)
.Build()
.Done());
@@ -760,7 +761,7 @@ private:
structItems.push_back(Build<TCoNameValueTuple>(ctx, pos)
.Name().Build(columnName)
.Value<TExprApplier>()
- .Apply(tuple.Trait().LoadHandler())
+ .Apply(tuple.Trait().Cast<TCoAggregationTraits>().LoadHandler())
.With(0, member)
.Build()
.Done());
@@ -777,6 +778,7 @@ private:
private:
TDqConfiguration::TPtr Config;
+ TTypeAnnotationContext& TypesCtx;
};
THolder<IGraphTransformer> CreateDqsLogOptTransformer(TTypeAnnotationContext* typeCtx, const TDqConfiguration::TPtr& config) {
diff --git a/ydb/library/yql/providers/dq/opt/physical_optimize.cpp b/ydb/library/yql/providers/dq/opt/physical_optimize.cpp
index 77713e64c4..30b1e77a95 100644
--- a/ydb/library/yql/providers/dq/opt/physical_optimize.cpp
+++ b/ydb/library/yql/providers/dq/opt/physical_optimize.cpp
@@ -28,6 +28,7 @@ public:
AddHandler(0, &TDqReadWrap::Match, HNDL(BuildStageWithReadWrap));
AddHandler(0, &TCoSkipNullMembers::Match, HNDL(PushSkipNullMembersToStage<false>));
AddHandler(0, &TCoExtractMembers::Match, HNDL(PushExtractMembersToStage<false>));
+ AddHandler(0, &TCoFlatMapBase::Match, HNDL(BuildPureFlatmapStage));
AddHandler(0, &TCoFlatMapBase::Match, HNDL(BuildFlatmapStage<false>));
AddHandler(0, &TCoCombineByKey::Match, HNDL(PushCombineToStage<false>));
AddHandler(0, &TCoPartitionsByKeys::Match, HNDL(BuildPartitionsStage));
@@ -35,7 +36,7 @@ public:
AddHandler(0, &TCoAsList::Match, HNDL(BuildAggregationResultStage));
AddHandler(0, &TCoTopSort::Match, HNDL(BuildTopSortStage<false>));
AddHandler(0, &TCoSort::Match, HNDL(BuildSortStage<false>));
- AddHandler(0, &TCoTake::Match, HNDL(BuildTakeOrTakeSkipStage<false>));
+ AddHandler(0, &TCoTakeBase::Match, HNDL(BuildTakeOrTakeSkipStage<false>));
AddHandler(0, &TCoLength::Match, HNDL(RewriteLengthOfStageOutput));
AddHandler(0, &TCoExtendBase::Match, HNDL(BuildExtendStage));
AddHandler(0, &TDqJoin::Match, HNDL(RewriteRightJoinToLeft));
@@ -46,6 +47,7 @@ public:
AddHandler(0, &TCoLMap::Match, HNDL(PushLMapToStage<false>));
if (enablePrecompute) {
AddHandler(0, &TCoHasItems::Match, HNDL(BuildHasItems));
+ AddHandler(0, &TCoSqlIn::Match, HNDL(BuildSqlIn<false>));
AddHandler(0, &TCoToOptional::Match, HNDL(BuildScalarPrecompute<false>));
AddHandler(0, &TCoHead::Match, HNDL(BuildScalarPrecompute<false>));
AddHandler(0, &TDqPrecompute::Match, HNDL(BuildPrecompute));
@@ -60,13 +62,14 @@ public:
AddHandler(1, &TCoCombineByKey::Match, HNDL(PushCombineToStage<true>));
AddHandler(1, &TCoTopSort::Match, HNDL(BuildTopSortStage<true>));
AddHandler(1, &TCoSort::Match, HNDL(BuildSortStage<true>));
- AddHandler(1, &TCoTake::Match, HNDL(BuildTakeOrTakeSkipStage<true>));
+ AddHandler(1, &TCoTakeBase::Match, HNDL(BuildTakeOrTakeSkipStage<true>));
AddHandler(1, &TDqJoin::Match, HNDL(RewriteLeftPureJoin<true>));
AddHandler(1, &TDqJoin::Match, HNDL(BuildJoin<true>));
AddHandler(1, &TCoAssumeSorted::Match, HNDL(BuildSortStage<true>));
AddHandler(1, &TCoOrderedLMap::Match, HNDL(PushOrderedLMapToStage<true>));
AddHandler(1, &TCoLMap::Match, HNDL(PushLMapToStage<true>));
if (enablePrecompute) {
+ AddHandler(1, &TCoSqlIn::Match, HNDL(BuildSqlIn<true>));
AddHandler(1, &TCoToOptional::Match, HNDL(BuildScalarPrecompute<true>));
AddHandler(1, &TCoHead::Match, HNDL(BuildScalarPrecompute<true>));
AddHandler(1, &TCoTake::Match, HNDL(PropagatePrecomuteTake<true>));
@@ -227,6 +230,10 @@ protected:
return DqPushExtractMembersToStage(node, ctx, optCtx, *getParents(), IsGlobal);
}
+ TMaybeNode<TExprBase> BuildPureFlatmapStage(TExprBase node, TExprContext& ctx) {
+ return DqBuildPureFlatmapStage(node, ctx);
+ }
+
template <bool IsGlobal>
TMaybeNode<TExprBase> BuildFlatmapStage(TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx, const TGetParents& getParents) {
return DqBuildFlatmapStage(node, ctx, optCtx, *getParents(), IsGlobal);
@@ -307,6 +314,11 @@ protected:
}
template <bool IsGlobal>
+ TMaybeNode<TExprBase> BuildSqlIn(TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx, const TGetParents& getParents) {
+ return DqBuildSqlIn(node, ctx, optCtx, *getParents(), IsGlobal);
+ }
+
+ template <bool IsGlobal>
TMaybeNode<TExprBase> BuildScalarPrecompute(TExprBase node, TExprContext& ctx, IOptimizationContext& optCtx, const TGetParents& getParents) {
return DqBuildScalarPrecompute(node, ctx, optCtx, *getParents(), IsGlobal);
}
diff --git a/ydb/library/yql/providers/dq/provider/CMakeLists.txt b/ydb/library/yql/providers/dq/provider/CMakeLists.txt
index 45f6509992..736d33142e 100644
--- a/ydb/library/yql/providers/dq/provider/CMakeLists.txt
+++ b/ydb/library/yql/providers/dq/provider/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(exec)
add_library(providers-dq-provider)
target_compile_options(providers-dq-provider PRIVATE
diff --git a/ydb/library/yql/providers/dq/provider/yql_dq_datasink.cpp b/ydb/library/yql/providers/dq/provider/yql_dq_datasink.cpp
index 9ab03526cc..cdbcc43669 100644
--- a/ydb/library/yql/providers/dq/provider/yql_dq_datasink.cpp
+++ b/ydb/library/yql/providers/dq/provider/yql_dq_datasink.cpp
@@ -27,8 +27,8 @@ class TDqDataProviderSink: public TDataProviderBase {
public:
TDqDataProviderSink(const TDqStatePtr& state)
: State(state)
- , LogOptTransformer([state] () { return CreateDqsLogOptTransformer(/*TODO: State->TypeCtx);*/nullptr, state->Settings); })
- , PhyOptTransformer([state] () { return CreateDqsPhyOptTransformer(/*TODO: State->TypeCtx*/nullptr, state->Settings); })
+ , LogOptTransformer([state] () { return CreateDqsLogOptTransformer(state->TypeCtx, state->Settings); })
+ , PhyOptTransformer([state] () { return CreateDqsPhyOptTransformer(/*TODO*/nullptr, state->Settings); })
, PhysicalFinalizingTransformer([] () { return CreateDqsFinalizingOptTransformer(); })
, TypeAnnotationTransformer([state] () { return CreateDqsDataSinkTypeAnnotationTransformer(state->TypeCtx); })
, RecaptureTransformer([state] () { return CreateDqsRecaptureTransformer(state); })
diff --git a/ydb/library/yql/providers/dq/worker_manager/CMakeLists.txt b/ydb/library/yql/providers/dq/worker_manager/CMakeLists.txt
index f20c6f8825..b2185f9e9b 100644
--- a/ydb/library/yql/providers/dq/worker_manager/CMakeLists.txt
+++ b/ydb/library/yql/providers/dq/worker_manager/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(interface)
add_library(providers-dq-worker_manager)
target_compile_options(providers-dq-worker_manager PRIVATE
diff --git a/ydb/library/yql/providers/dq/worker_manager/interface/counters.cpp b/ydb/library/yql/providers/dq/worker_manager/interface/counters.cpp
index a38bcccdf8..cf150e270c 100644
--- a/ydb/library/yql/providers/dq/worker_manager/interface/counters.cpp
+++ b/ydb/library/yql/providers/dq/worker_manager/interface/counters.cpp
@@ -2,7 +2,7 @@
namespace NYql::NDqs {
-TWorkerManagerCounters::TWorkerManagerCounters(NMonitoring::TDynamicCounterPtr root) {
+TWorkerManagerCounters::TWorkerManagerCounters(::NMonitoring::TDynamicCounterPtr root) {
ActiveWorkers = root->GetCounter("ActiveWorkers");
MkqlMemoryLimit = root->GetCounter("MkqlMemoryLimit");
MkqlMemoryAllocated = root->GetCounter("MkqlMemoryAllocated");
@@ -10,7 +10,7 @@ TWorkerManagerCounters::TWorkerManagerCounters(NMonitoring::TDynamicCounterPtr r
}
TWorkerManagerCounters::TWorkerManagerCounters()
- : TWorkerManagerCounters(new NMonitoring::TDynamicCounters)
+ : TWorkerManagerCounters(new ::NMonitoring::TDynamicCounters)
{ }
} // namespace NYql::NDqs
diff --git a/ydb/library/yql/providers/dq/worker_manager/interface/counters.h b/ydb/library/yql/providers/dq/worker_manager/interface/counters.h
index ee0613022c..16f206e769 100644
--- a/ydb/library/yql/providers/dq/worker_manager/interface/counters.h
+++ b/ydb/library/yql/providers/dq/worker_manager/interface/counters.h
@@ -4,12 +4,12 @@
namespace NYql::NDqs {
struct TWorkerManagerCounters {
- NMonitoring::TDynamicCounters::TCounterPtr ActiveWorkers;
- NMonitoring::TDynamicCounters::TCounterPtr MkqlMemoryLimit;
- NMonitoring::TDynamicCounters::TCounterPtr MkqlMemoryAllocated;
- NMonitoring::TDynamicCounters::TCounterPtr FreeGroupError;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ActiveWorkers;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MkqlMemoryLimit;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MkqlMemoryAllocated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr FreeGroupError;
- explicit TWorkerManagerCounters(NMonitoring::TDynamicCounterPtr root);
+ explicit TWorkerManagerCounters(::NMonitoring::TDynamicCounterPtr root);
TWorkerManagerCounters();
};
diff --git a/ydb/library/yql/providers/dq/worker_manager/interface/worker_info.h b/ydb/library/yql/providers/dq/worker_manager/interface/worker_info.h
index 5281a844f4..e82a1ce32a 100644
--- a/ydb/library/yql/providers/dq/worker_manager/interface/worker_info.h
+++ b/ydb/library/yql/providers/dq/worker_manager/interface/worker_info.h
@@ -89,8 +89,8 @@ public:
private:
TGlobalResources& Resources;
- NMonitoring::TDynamicCounters::TCounterPtr Capacity;
- NMonitoring::TDynamicCounters::TCounterPtr RunningRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Capacity;
+ ::NMonitoring::TDynamicCounters::TCounterPtr RunningRequests;
};
struct TWorkerInfo: public TThrRefBase {
diff --git a/ydb/library/yql/providers/function/CMakeLists.txt b/ydb/library/yql/providers/function/CMakeLists.txt
new file mode 100644
index 0000000000..97c6df49e6
--- /dev/null
+++ b/ydb/library/yql/providers/function/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(common)
+add_subdirectory(expr_nodes)
+add_subdirectory(gateway)
+add_subdirectory(proto)
+add_subdirectory(provider)
diff --git a/ydb/library/yql/providers/pq/CMakeLists.txt b/ydb/library/yql/providers/pq/CMakeLists.txt
new file mode 100644
index 0000000000..ec814d7bed
--- /dev/null
+++ b/ydb/library/yql/providers/pq/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(async_io)
+add_subdirectory(cm_client)
+add_subdirectory(common)
+add_subdirectory(expr_nodes)
+add_subdirectory(gateway)
+add_subdirectory(proto)
+add_subdirectory(provider)
+add_subdirectory(task_meta)
diff --git a/ydb/library/yql/providers/pq/gateway/CMakeLists.txt b/ydb/library/yql/providers/pq/gateway/CMakeLists.txt
new file mode 100644
index 0000000000..b79dce3ba3
--- /dev/null
+++ b/ydb/library/yql/providers/pq/gateway/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(dummy)
+add_subdirectory(native)
diff --git a/ydb/library/yql/providers/result/CMakeLists.txt b/ydb/library/yql/providers/result/CMakeLists.txt
new file mode 100644
index 0000000000..7d69f063e9
--- /dev/null
+++ b/ydb/library/yql/providers/result/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(expr_nodes)
+add_subdirectory(provider)
diff --git a/ydb/library/yql/providers/s3/CMakeLists.txt b/ydb/library/yql/providers/s3/CMakeLists.txt
new file mode 100644
index 0000000000..2973e7b03d
--- /dev/null
+++ b/ydb/library/yql/providers/s3/CMakeLists.txt
@@ -0,0 +1,14 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actors)
+add_subdirectory(compressors)
+add_subdirectory(expr_nodes)
+add_subdirectory(path_generator)
+add_subdirectory(proto)
+add_subdirectory(provider)
diff --git a/ydb/library/yql/providers/s3/actors/CMakeLists.txt b/ydb/library/yql/providers/s3/actors/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/providers/s3/actors/CMakeLists.txt
+++ b/ydb/library/yql/providers/s3/actors/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/providers/s3/actors/yql_s3_read_actor.cpp b/ydb/library/yql/providers/s3/actors/yql_s3_read_actor.cpp
index f3b0309ee3..503947c64f 100644
--- a/ydb/library/yql/providers/s3/actors/yql_s3_read_actor.cpp
+++ b/ydb/library/yql/providers/s3/actors/yql_s3_read_actor.cpp
@@ -15,7 +15,7 @@
#include <ydb/library/yql/udfs/common/clickhouse/client/src/Core/ColumnsWithTypeAndName.h>
#include <ydb/library/yql/udfs/common/clickhouse/client/src/Formats/FormatFactory.h>
-#include <ydb/library/yql/udfs/common/clickhouse/client/src/Formats/InputStreamFromInputFormat.h>
+#include <ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/InputStreamFromInputFormat.h>
#endif
#include "yql_s3_read_actor.h"
@@ -68,7 +68,7 @@ struct TEvPrivate {
// Events
struct TEvReadResult : public TEventLocal<TEvReadResult, EvReadResult> {
- TEvReadResult(IHTTPGateway::TContent&& result, size_t pathInd = 0U): Result(std::move(result)), PathIndex(pathInd) {}
+ TEvReadResult(IHTTPGateway::TContent&& result, size_t pathInd): Result(std::move(result)), PathIndex(pathInd) {}
IHTTPGateway::TContent Result;
const size_t PathIndex;
};
@@ -81,7 +81,7 @@ struct TEvPrivate {
struct TEvReadFinished : public TEventLocal<TEvReadFinished, EvReadFinished> {};
struct TEvReadError : public TEventLocal<TEvReadError, EvReadError> {
- TEvReadError(TIssues&& error, size_t pathInd = 0U) : Error(std::move(error)), PathIndex(pathInd) {}
+ TEvReadError(TIssues&& error, size_t pathInd = std::numeric_limits<size_t>::max()) : Error(std::move(error)), PathIndex(pathInd) {}
const TIssues Error;
const size_t PathIndex;
};
@@ -97,8 +97,9 @@ struct TEvPrivate {
};
struct TEvNextBlock : public NActors::TEventLocal<TEvNextBlock, EvNextBlock> {
- explicit TEvNextBlock(NDB::Block& block) { Block.swap(block); }
+ TEvNextBlock(NDB::Block& block, size_t pathInd) : PathIndex(pathInd) { Block.swap(block); }
NDB::Block Block;
+ const size_t PathIndex;
};
};
@@ -147,18 +148,24 @@ class TS3ReadActor : public TActorBootstrapped<TS3ReadActor>, public IDqComputeA
public:
TS3ReadActor(ui64 inputIndex,
IHTTPGateway::TPtr gateway,
+ const NKikimr::NMiniKQL::THolderFactory& holderFactory,
const TString& url,
const TString& token,
TPathList&& paths,
+ bool addPathIndex,
+ ui64 startPathIndex,
const NActors::TActorId& computeActorId,
const std::shared_ptr<NS3::TRetryConfig>& retryConfig
) : Gateway(std::move(gateway))
+ , HolderFactory(holderFactory)
, InputIndex(inputIndex)
, ComputeActorId(computeActorId)
, ActorSystem(TActivationContext::ActorSystem())
, Url(url)
, Headers(MakeHeader(token))
, Paths(std::move(paths))
+ , AddPathIndex(addPathIndex)
+ , StartPathIndex(startPathIndex)
, RetryConfig(retryConfig)
{}
@@ -169,7 +176,7 @@ public:
const TPath& path = Paths[pathInd];
Gateway->Download(Url + std::get<TString>(path),
Headers, std::get<size_t>(path),
- std::bind(&TS3ReadActor::OnDownloadFinished, ActorSystem, SelfId(), std::placeholders::_1, pathInd));
+ std::bind(&TS3ReadActor::OnDownloadFinished, ActorSystem, SelfId(), std::placeholders::_1, pathInd + StartPathIndex));
};
}
@@ -205,8 +212,18 @@ private:
if (!Blocks.empty()) {
buffer.reserve(buffer.size() + Blocks.size());
do {
- const auto size = Blocks.front().size();
- buffer.emplace_back(NKikimr::NMiniKQL::MakeString(std::string_view(Blocks.front())));
+ auto& content = std::get<IHTTPGateway::TContent>(Blocks.front());
+ const auto size = content.size();
+ auto value = NKikimr::NMiniKQL::MakeString(std::string_view(content));
+ if (AddPathIndex) {
+ NUdf::TUnboxedValue* tupleItems = nullptr;
+ auto tuple = ContainerCache.NewArray(HolderFactory, 2, tupleItems);
+ *tupleItems++ = value;
+ *tupleItems++ = NUdf::TUnboxedValuePod(std::get<ui64>(Blocks.front()));
+ value = tuple;
+ }
+
+ buffer.emplace_back(std::move(value));
Blocks.pop();
total += size;
freeSpace -= size;
@@ -215,6 +232,7 @@ private:
if (Blocks.empty() && IsDoneCounter == Paths.size()) {
finished = true;
+ ContainerCache.Clear();
}
return total;
@@ -223,7 +241,7 @@ private:
void Handle(TEvPrivate::TEvReadResult::TPtr& result) {
++IsDoneCounter;
- Blocks.emplace(std::move(result->Get()->Result));
+ Blocks.emplace(std::make_tuple(std::move(result->Get()->Result), result->Get()->PathIndex));
Send(ComputeActorId, new TEvNewAsyncInputDataArrived(InputIndex));
}
@@ -258,6 +276,8 @@ private:
size_t IsDoneCounter = 0U;
const IHTTPGateway::TPtr Gateway;
+ const NKikimr::NMiniKQL::THolderFactory& HolderFactory;
+ NKikimr::NMiniKQL::TPlainContainerCache ContainerCache;
const ui64 InputIndex;
const NActors::TActorId ComputeActorId;
@@ -267,8 +287,10 @@ private:
const TString Url;
const IHTTPGateway::THeaders Headers;
const TPathList Paths;
+ const bool AddPathIndex;
+ const ui64 StartPathIndex;
- std::queue<IHTTPGateway::TContent> Blocks;
+ std::queue<std::tuple<IHTTPGateway::TContent, ui64>> Blocks;
std::vector<TRetryParams> RetriesPerPath;
const std::shared_ptr<NS3::TRetryConfig> RetryConfig;
@@ -303,8 +325,8 @@ private:
TString Value;
};
public:
- TS3ReadCoroImpl(ui64 inputIndex, const NActors::TActorId& sourceActorId, const NActors::TActorId& computeActorId, const TReadSpec::TPtr& readSpec)
- : TActorCoroImpl(256_KB), InputIndex(inputIndex), ReadSpec(readSpec), SourceActorId(sourceActorId), ComputeActorId(computeActorId)
+ TS3ReadCoroImpl(ui64 inputIndex, const NActors::TActorId& sourceActorId, const NActors::TActorId& computeActorId, const TReadSpec::TPtr& readSpec, size_t pathIndex)
+ : TActorCoroImpl(256_KB), InputIndex(inputIndex), ReadSpec(readSpec), SourceActorId(sourceActorId), ComputeActorId(computeActorId), PathIndex(pathIndex)
{}
bool Next(TString& value) {
@@ -335,7 +357,7 @@ private:
NDB::InputStreamFromInputFormat stream(NDB::FormatFactory::instance().getInputFormat(ReadSpec->Format, decompress ? *decompress : buffer, NDB::Block(ReadSpec->Columns), nullptr, 1_MB, ReadSpec->Settings));
while (auto block = stream.read())
- Send(SourceActorId, new TEvPrivate::TEvNextBlock(block));
+ Send(SourceActorId, new TEvPrivate::TEvNextBlock(block, PathIndex));
Send(SourceActorId, new TEvPrivate::TEvReadFinished);
} catch (const std::exception& err) {
@@ -352,6 +374,7 @@ private:
const TString Format, RowType, Compression;
const NActors::TActorId SourceActorId;
const NActors::TActorId ComputeActorId;
+ const size_t PathIndex;
bool Finished = false;
};
@@ -428,18 +451,24 @@ public:
TS3StreamReadActor(
ui64 inputIndex,
IHTTPGateway::TPtr gateway,
+ const NKikimr::NMiniKQL::THolderFactory& holderFactory,
const TString& url,
const TString& token,
TPathList&& paths,
+ bool addPathIndex,
+ ui64 startPathIndex,
const TReadSpec::TPtr& readSpec,
const NActors::TActorId& computeActorId,
const std::shared_ptr<NS3::TRetryConfig>& retryConfig
) : Gateway(std::move(gateway))
+ , HolderFactory(holderFactory)
, InputIndex(inputIndex)
, ComputeActorId(computeActorId)
, Url(url)
, Headers(MakeHeader(token))
, Paths(std::move(paths))
+ , AddPathIndex(addPathIndex)
+ , StartPathIndex(startPathIndex)
, ReadSpec(readSpec)
, RetryConfig(retryConfig)
, Count(Paths.size())
@@ -447,8 +476,9 @@ public:
void Bootstrap() {
Become(&TS3StreamReadActor::StateFunc);
- for (const auto& path : Paths) {
- auto impl = MakeHolder<TS3ReadCoroImpl>(InputIndex, SelfId(), ComputeActorId, ReadSpec);
+ for (size_t pathInd = 0; pathInd < Paths.size(); ++pathInd) {
+ const TPath& path = Paths[pathInd];
+ auto impl = MakeHolder<TS3ReadCoroImpl>(InputIndex, SelfId(), ComputeActorId, ReadSpec, pathInd + StartPathIndex);
RegisterWithSameMailbox(MakeHolder<TS3ReadCoroActor>(std::move(impl), Gateway, Url, Headers, std::get<TString>(path), std::get<std::size_t>(path), RetryConfig).Release());
}
}
@@ -481,14 +511,28 @@ private:
i64 GetAsyncInputData(NKikimr::NMiniKQL::TUnboxedValueVector& output, bool& finished, i64 free) final {
i64 total = 0LL;
if (!Blocks.empty()) do {
- const i64 s = Blocks.front().bytes();
+ auto& block = std::get<NDB::Block>(Blocks.front());
+ const i64 s = block.bytes();
+
+ auto value = NUdf::TUnboxedValuePod(new TBoxedBlock(block));
+ if (AddPathIndex) {
+ NUdf::TUnboxedValue* tupleItems = nullptr;
+ auto tuple = ContainerCache.NewArray(HolderFactory, 2, tupleItems);
+ *tupleItems++ = value;
+ *tupleItems++ = NUdf::TUnboxedValuePod(std::get<ui64>(Blocks.front()));
+ value = tuple;
+ }
+
free -= s;
total += s;
- output.emplace_back(NUdf::TUnboxedValuePod(new TBoxedBlock(Blocks.front())));
+ output.emplace_back(std::move(value));
Blocks.pop_front();
- } while (!Blocks.empty() && free > 0LL && Blocks.front().bytes() <= size_t(free));
+ } while (!Blocks.empty() && free > 0LL && std::get<NDB::Block>(Blocks.front()).bytes() <= size_t(free));
finished = Blocks.empty() && !Count;
+ if (finished) {
+ ContainerCache.Clear();
+ }
return total;
}
@@ -513,7 +557,10 @@ private:
void HandleNextBlock(TEvPrivate::TEvNextBlock::TPtr& next) {
Blocks.emplace_back();
- Blocks.back().swap(next->Get()->Block);
+ auto& block = std::get<NDB::Block>(Blocks.back());
+ auto& pathInd = std::get<size_t>(Blocks.back());
+ block.swap(next->Get()->Block);
+ pathInd = next->Get()->PathIndex;
Send(ComputeActorId, new IDqComputeActorAsyncInput::TEvNewAsyncInputDataArrived(InputIndex));
}
@@ -523,6 +570,8 @@ private:
}
const IHTTPGateway::TPtr Gateway;
+ const NKikimr::NMiniKQL::THolderFactory& HolderFactory;
+ NKikimr::NMiniKQL::TPlainContainerCache ContainerCache;
const ui64 InputIndex;
const NActors::TActorId ComputeActorId;
@@ -531,9 +580,11 @@ private:
const TString Url;
const IHTTPGateway::THeaders Headers;
const TPathList Paths;
+ const bool AddPathIndex;
+ const ui64 StartPathIndex;
const TReadSpec::TPtr ReadSpec;
const std::shared_ptr<NS3::TRetryConfig> RetryConfig;
- std::deque<NDB::Block> Blocks;
+ std::deque<std::tuple<NDB::Block, size_t>> Blocks;
ui32 Count;
};
@@ -607,7 +658,7 @@ using namespace NKikimr::NMiniKQL;
std::pair<NYql::NDq::IDqComputeActorAsyncInput*, IActor*> CreateS3ReadActor(
const TTypeEnvironment& typeEnv,
- const IFunctionRegistry& functionRegistry,
+ const NKikimr::NMiniKQL::THolderFactory& holderFactory,
IHTTPGateway::TPtr gateway,
NS3::TSource&& params,
ui64 inputIndex,
@@ -617,28 +668,40 @@ std::pair<NYql::NDq::IDqComputeActorAsyncInput*, IActor*> CreateS3ReadActor(
ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory,
const std::shared_ptr<NS3::TRetryConfig>& retryConfig)
{
+ const IFunctionRegistry& functionRegistry = *holderFactory.GetFunctionRegistry();
std::unordered_map<TString, size_t> map(params.GetPath().size());
for (auto i = 0; i < params.GetPath().size(); ++i)
map.emplace(params.GetPath().Get(i).GetPath(), params.GetPath().Get(i).GetSize());
TPathList paths;
- paths.reserve(map.size());
+ ui64 startPathIndex = 0;
if (const auto taskParamsIt = taskParams.find(S3ProviderName); taskParamsIt != taskParams.cend()) {
NS3::TRange range;
TStringInput input(taskParamsIt->second);
range.Load(&input);
+ startPathIndex = range.GetStartPathIndex();
for (auto i = 0; i < range.GetPath().size(); ++i) {
const auto& path = range.GetPath().Get(i);
- paths.emplace_back(path, map[path]);
+ auto it = map.find(path);
+ YQL_ENSURE(it != map.end());
+ paths.emplace_back(path, it->second);
}
- } else
- while (auto item = map.extract(map.cbegin()))
- paths.emplace_back(std::move(item.key()), std::move(item.mapped()));
+ } else {
+ for (auto i = 0; i < params.GetPath().size(); ++i) {
+ paths.emplace_back(params.GetPath().Get(i).GetPath(), params.GetPath().Get(i).GetSize());
+ }
+ }
const auto token = secureParams.Value(params.GetToken(), TString{});
const auto credentialsProviderFactory = CreateCredentialsProviderFactoryForStructuredToken(credentialsFactory, token);
const auto authToken = credentialsProviderFactory->CreateProvider()->GetAuthInfo();
+ const auto& settings = params.GetSettings();
+ bool addPathIndex = false;
+ if (auto it = settings.find("addPathIndex"); it != settings.cend()) {
+ addPathIndex = FromString<bool>(it->second);
+ }
+
if (params.HasFormat() && params.HasRowType()) {
const auto pb = std::make_unique<TProgramBuilder>(typeEnv, functionRegistry);
const auto outputItemType = NCommon::ParseTypeFromYson(TStringBuf(params.GetRowType()), *pb, Cerr);
@@ -653,7 +716,6 @@ std::pair<NYql::NDq::IDqComputeActorAsyncInput*, IActor*> CreateS3ReadActor(
}
readSpec->Format = params.GetFormat();
- const auto& settings = params.GetSettings();
if (const auto it = settings.find("compression"); settings.cend() != it)
readSpec->Compression = it->second;
@@ -674,10 +736,12 @@ std::pair<NYql::NDq::IDqComputeActorAsyncInput*, IActor*> CreateS3ReadActor(
#undef SET_FLAG
#undef SUPPORTED_FLAGS
- const auto actor = new TS3StreamReadActor(inputIndex, std::move(gateway), params.GetUrl(), authToken, std::move(paths), readSpec, computeActorId, retryConfig);
+ const auto actor = new TS3StreamReadActor(inputIndex, std::move(gateway), holderFactory, params.GetUrl(), authToken,
+ std::move(paths), addPathIndex, startPathIndex, readSpec, computeActorId, retryConfig);
return {actor, actor};
} else {
- const auto actor = new TS3ReadActor(inputIndex, std::move(gateway), params.GetUrl(), authToken, std::move(paths), computeActorId, retryConfig);
+ const auto actor = new TS3ReadActor(inputIndex, std::move(gateway), holderFactory, params.GetUrl(), authToken,
+ std::move(paths), addPathIndex, startPathIndex, computeActorId, retryConfig);
return {actor, actor};
}
}
diff --git a/ydb/library/yql/providers/s3/actors/yql_s3_read_actor.h b/ydb/library/yql/providers/s3/actors/yql_s3_read_actor.h
index 9e323c2a33..d8b153ccbc 100644
--- a/ydb/library/yql/providers/s3/actors/yql_s3_read_actor.h
+++ b/ydb/library/yql/providers/s3/actors/yql_s3_read_actor.h
@@ -11,7 +11,7 @@ namespace NYql::NDq {
std::pair<NYql::NDq::IDqComputeActorAsyncInput*, NActors::IActor*> CreateS3ReadActor(
const NKikimr::NMiniKQL::TTypeEnvironment& typeEnv,
- const NKikimr::NMiniKQL::IFunctionRegistry& functionRegistry,
+ const NKikimr::NMiniKQL::THolderFactory& holderFactory,
IHTTPGateway::TPtr gateway,
NS3::TSource&& params,
ui64 inputIndex,
diff --git a/ydb/library/yql/providers/s3/actors/yql_s3_source_factory.cpp b/ydb/library/yql/providers/s3/actors/yql_s3_source_factory.cpp
index b1c3b208a5..fa2ce93576 100644
--- a/ydb/library/yql/providers/s3/actors/yql_s3_source_factory.cpp
+++ b/ydb/library/yql/providers/s3/actors/yql_s3_source_factory.cpp
@@ -17,7 +17,7 @@ void RegisterS3ReadActorFactory(
NDB::registerFormats();
factory.RegisterSource<NS3::TSource>("S3Source",
[credentialsFactory, gateway, retryConfig](NS3::TSource&& settings, IDqAsyncIoFactory::TSourceArguments&& args) {
- return CreateS3ReadActor(args.TypeEnv, *args.HolderFactory.GetFunctionRegistry(), gateway, std::move(settings), args.InputIndex, args.SecureParams, args.TaskParams, args.ComputeActorId, credentialsFactory, retryConfig);
+ return CreateS3ReadActor(args.TypeEnv, args.HolderFactory, gateway, std::move(settings), args.InputIndex, args.SecureParams, args.TaskParams, args.ComputeActorId, credentialsFactory, retryConfig);
});
#else
Y_UNUSED(factory);
diff --git a/ydb/library/yql/providers/s3/compressors/CMakeLists.txt b/ydb/library/yql/providers/s3/compressors/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/providers/s3/compressors/CMakeLists.txt
+++ b/ydb/library/yql/providers/s3/compressors/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/providers/s3/expr_nodes/yql_s3_expr_nodes.json b/ydb/library/yql/providers/s3/expr_nodes/yql_s3_expr_nodes.json
index f1f6e0d8ff..40be1652cc 100644
--- a/ydb/library/yql/providers/s3/expr_nodes/yql_s3_expr_nodes.json
+++ b/ydb/library/yql/providers/s3/expr_nodes/yql_s3_expr_nodes.json
@@ -32,7 +32,7 @@
"Children": [
{"Index": 0, "Name": "Path", "Type": "TCoAtom"},
{"Index": 1, "Name": "Size", "Type": "TCoAtom"},
- {"Index": 2, "Name": "Settings", "Type": "TExprBase", "Optional": true}
+ {"Index": 2, "Name": "ExtraColumns", "Type": "TExprBase"}
]
},
{
diff --git a/ydb/library/yql/providers/s3/path_generator/CMakeLists.txt b/ydb/library/yql/providers/s3/path_generator/CMakeLists.txt
index 1164973aa2..8c8cac7332 100644
--- a/ydb/library/yql/providers/s3/path_generator/CMakeLists.txt
+++ b/ydb/library/yql/providers/s3/path_generator/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(providers-s3-path_generator)
target_link_libraries(providers-s3-path_generator PUBLIC
diff --git a/ydb/library/yql/providers/s3/path_generator/ut/CMakeLists.txt b/ydb/library/yql/providers/s3/path_generator/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/providers/s3/path_generator/ut/CMakeLists.txt
+++ b/ydb/library/yql/providers/s3/path_generator/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/providers/s3/proto/range.proto b/ydb/library/yql/providers/s3/proto/range.proto
index 7da7cf6136..ce018fbe9a 100644
--- a/ydb/library/yql/providers/s3/proto/range.proto
+++ b/ydb/library/yql/providers/s3/proto/range.proto
@@ -5,4 +5,5 @@ package NYql.NS3;
message TRange {
repeated string Path = 2;
+ uint64 StartPathIndex = 3;
}
diff --git a/ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp b/ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp
index 7fa248a5eb..505fe7410e 100644
--- a/ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp
+++ b/ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp
@@ -15,6 +15,53 @@ using namespace NNodes;
namespace {
+bool ValidateS3Paths(const TExprNode& node, const TStructExprType*& extraColumnsType, TExprContext& ctx) {
+ if (!EnsureTupleMinSize(node, 1, ctx)) {
+ return false;
+ }
+
+ extraColumnsType = nullptr;
+ for (auto& path : node.ChildrenList()) {
+ if (!EnsureTupleSize(*path, 3, ctx)) {
+ return false;
+ }
+
+ if (!EnsureAtom(*path->Child(TS3Path::idx_Path), ctx) || !EnsureAtom(*path->Child(TS3Path::idx_Size), ctx))
+ {
+ return false;
+ }
+
+ if (path->Child(TS3Path::idx_Path)->Content().empty()) {
+ ctx.AddError(TIssue(ctx.GetPosition(path->Child(TS3Path::idx_Path)->Pos()), "Expected non-empty path"));
+ return false;
+ }
+
+ ui64 size = 0;
+ auto sizeStr = path->Child(TS3Path::idx_Size)->Content();
+ if (!TryFromString(sizeStr, size)) {
+ ctx.AddError(TIssue(ctx.GetPosition(path->Child(TS3Path::idx_Size)->Pos()),
+ TStringBuilder() << "Expected number as S3 object size, got: '" << sizeStr << "'"));
+ return false;
+ }
+
+ auto extraColumns = path->Child(TS3Path::idx_ExtraColumns);
+ if (!EnsureStructType(*extraColumns, ctx) || !EnsurePersistable(*extraColumns, ctx)) {
+ return false;
+ }
+
+ const TStructExprType* current = extraColumns->GetTypeAnn()->Cast<TStructExprType>();
+ if (!extraColumnsType) {
+ extraColumnsType = current;
+ } else if (!IsSameAnnotation(*current, *extraColumnsType)) {
+ ctx.AddError(TIssue(ctx.GetPosition(path->Pos()), TStringBuilder() << "Extra columns type mismatch: got "
+ << *(const TTypeAnnotationNode*)current << ", expecting "
+ << *(const TTypeAnnotationNode*)extraColumnsType));
+ return false;
+ }
+ }
+ return true;
+}
+
class TS3DataSourceTypeAnnotationTransformer : public TVisitorTransformerBase {
public:
@@ -35,7 +82,8 @@ public:
return TStatus::Error;
}
- if (!EnsureTuple(*input->Child(TS3SourceSettings::idx_Paths), ctx)) {
+ const TStructExprType* extraColumnsType = nullptr;
+ if (!ValidateS3Paths(*input->Child(TS3SourceSettings::idx_Paths), extraColumnsType, ctx)) {
return TStatus::Error;
}
@@ -44,7 +92,12 @@ public:
return TStatus::Error;
}
- input->SetTypeAnn(ctx.MakeType<TStreamExprType>(ctx.MakeType<TDataExprType>(EDataSlot::String)));
+ const TTypeAnnotationNode* itemType = ctx.MakeType<TDataExprType>(EDataSlot::String);
+ if (extraColumnsType->GetSize()) {
+ itemType = ctx.MakeType<TTupleExprType>(
+ TTypeAnnotationNode::TListType{ itemType, ctx.MakeType<TDataExprType>(EDataSlot::Uint64) });
+ }
+ input->SetTypeAnn(ctx.MakeType<TStreamExprType>(itemType));
return TStatus::Ok;
}
@@ -53,7 +106,8 @@ public:
return TStatus::Error;
}
- if (!EnsureTuple(*input->Child(TS3ParseSettings::idx_Paths), ctx)) {
+ const TStructExprType* extraColumnsType = nullptr;
+ if (!ValidateS3Paths(*input->Child(TS3SourceSettings::idx_Paths), extraColumnsType, ctx)) {
return TStatus::Error;
}
@@ -62,20 +116,32 @@ public:
return TStatus::Error;
}
- if (!EnsureAtom(*input->Child(TS3ParseSettings::idx_Format), ctx)) {
+ if (!EnsureAtom(*input->Child(TS3ParseSettings::idx_Format), ctx) ||
+ !NCommon::ValidateFormat(input->Child(TS3ParseSettings::idx_Format)->Content(), ctx))
+ {
return TStatus::Error;
}
- const auto type = input->Child(TS3ParseSettings::idx_RowType)->GetTypeAnn()->Cast<TTypeExprType>()->GetType();
- if (!EnsureStructType(input->Child(TS3ParseSettings::idx_RowType)->Pos(), *type, ctx)) {
- return IGraphTransformer::TStatus::Error;
+ const auto& rowTypeNode = *input->Child(TS3ParseSettings::idx_RowType);
+ if (!EnsureType(rowTypeNode, ctx)) {
+ return TStatus::Error;
+ }
+
+ const TTypeAnnotationNode* rowType = rowTypeNode.GetTypeAnn()->Cast<TTypeExprType>()->GetType();
+ if (!EnsureStructType(rowTypeNode.Pos(), *rowType, ctx)) {
+ return TStatus::Error;
}
if (input->ChildrenSize() > TS3ParseSettings::idx_Settings && !EnsureTuple(*input->Child(TS3ParseSettings::idx_Settings), ctx)) {
return TStatus::Error;
}
- input->SetTypeAnn(ctx.MakeType<TStreamExprType>(ctx.MakeType<TResourceExprType>("ClickHouseClient.Block")));
+ const TTypeAnnotationNode* itemType = ctx.MakeType<TResourceExprType>("ClickHouseClient.Block");
+ if (extraColumnsType->GetSize()) {
+ itemType = ctx.MakeType<TTupleExprType>(
+ TTypeAnnotationNode::TListType{ itemType, ctx.MakeType<TDataExprType>(EDataSlot::Uint64) });
+ }
+ input->SetTypeAnn(ctx.MakeType<TStreamExprType>(itemType));
return TStatus::Ok;
}
@@ -101,10 +167,19 @@ public:
return TStatus::Error;
}
- const auto itemType = input->Child(TS3ReadObject::idx_RowType)->GetTypeAnn()->Cast<TTypeExprType>()->GetType();
+ const auto& rowTypeNode = *input->Child(TS3ReadObject::idx_RowType);
+ if (!EnsureType(rowTypeNode, ctx)) {
+ return TStatus::Error;
+ }
+
+ const TTypeAnnotationNode* rowType = rowTypeNode.GetTypeAnn()->Cast<TTypeExprType>()->GetType();
+ if (!EnsureStructType(rowTypeNode.Pos(), *rowType, ctx)) {
+ return TStatus::Error;
+ }
+
input->SetTypeAnn(ctx.MakeType<TTupleExprType>(TTypeAnnotationNode::TListType{
input->Child(TS3ReadObject::idx_World)->GetTypeAnn(),
- ctx.MakeType<TListExprType>(itemType)
+ ctx.MakeType<TListExprType>(rowType)
}));
if (input->ChildrenSize() > TS3ReadObject::idx_ColumnOrder) {
@@ -113,8 +188,18 @@ public:
return TStatus::Error;
}
TVector<TString> columnOrder;
+ THashSet<TStringBuf> uniqs;
columnOrder.reserve(order.ChildrenSize());
- order.ForEachChild([&columnOrder](const TExprNode& child) { columnOrder.emplace_back(child.Content()); });
+ uniqs.reserve(order.ChildrenSize());
+
+ for (auto& child : order.ChildrenList()) {
+ TStringBuf col = child->Content();
+ if (!uniqs.emplace(col).second) {
+ ctx.AddError(TIssue(ctx.GetPosition(child->Pos()), TStringBuilder() << "Duplicate column '" << col << "' in column order list"));
+ return TStatus::Error;
+ }
+ columnOrder.push_back(ToString(col));
+ }
return State_->Types->SetColumnOrder(*input, columnOrder, ctx);
}
@@ -143,77 +228,85 @@ public:
return TStatus::Error;
}
- if (!EnsureTuple(*input->Child(TS3Object::idx_Paths), ctx)) {
+ const TStructExprType* extraColumnsType = nullptr;
+ if (!ValidateS3Paths(*input->Child(TS3Object::idx_Paths), extraColumnsType, ctx)) {
return TStatus::Error;
}
- for (auto& path : input->Child(TS3Object::idx_Paths)->ChildrenList()) {
- if (!EnsureTupleMinSize(*path, 2, ctx) || !EnsureTupleMaxSize(*path, 3, ctx)) {
- return TStatus::Error;
- }
-
- if (!EnsureAtom(*path->Child(TS3Path::idx_Path), ctx) ||
- !EnsureAtom(*path->Child(TS3Path::idx_Size), ctx))
- {
- return TStatus::Error;
- }
-
- if (path->Child(TS3Path::idx_Path)->Content().empty()) {
- ctx.AddError(TIssue(ctx.GetPosition(path->Child(TS3Path::idx_Path)->Pos()), "Expected non-empty path"));
- return TStatus::Error;
- }
+ if (!EnsureAtom(*input->Child(TS3Object::idx_Format), ctx) ||
+ !NCommon::ValidateFormat(input->Child(TS3Object::idx_Format)->Content(), ctx))
+ {
+ return TStatus::Error;
+ }
- ui64 size = 0;
- auto sizeStr = path->Child(TS3Path::idx_Size)->Content();
- if (!TryFromString(sizeStr, size)) {
- ctx.AddError(TIssue(ctx.GetPosition(path->Child(TS3Path::idx_Size)->Pos()),
- TStringBuilder() << "Expected number as S3 object size, got: '" << sizeStr << "'"));
- return TStatus::Error;
- }
+ if (input->ChildrenSize() > TS3Object::idx_Settings) {
+ auto validator = [](TStringBuf name, const TExprNode& setting, TExprContext& ctx) {
+ if ((name == "compression" || name == "projection") && setting.ChildrenSize() != 2) {
+ ctx.AddError(TIssue(ctx.GetPosition(setting.Pos()),
+ TStringBuilder() << "Expected single value setting for " << name << ", but got " << setting.ChildrenSize() - 1));
+ return false;
+ }
- if (path->ChildrenSize() > TS3Path::idx_Settings) {
- auto validator = [](TStringBuf name, const TExprNode& setting, TExprContext& ctx) {
- Y_UNUSED(name);
+ bool havePartitionedBy = false;
+ if (name == "compression") {
auto& value = setting.Tail();
- if (!EnsureStructType(value, ctx) || !EnsurePersistable(value, ctx)) {
+ TStringBuf compression;
+ if (value.IsAtom()) {
+ compression = value.Content();
+ } else {
+ if (!EnsureStringOrUtf8Type(value, ctx)) {
+ return false;
+ }
+ if (!value.IsCallable({"String", "Utf8"})) {
+ ctx.AddError(TIssue(ctx.GetPosition(value.Pos()), "Expected literal string as compression value"));
+ return false;
+ }
+ compression = value.Head().Content();
+ }
+ return NCommon::ValidateCompression(compression, ctx);
+ }
+ if (name == "partitionedby") {
+ havePartitionedBy = true;
+ if (setting.ChildrenSize() < 2) {
+ ctx.AddError(TIssue(ctx.GetPosition(setting.Pos()), "Expected at least one column in partitioned_by setting"));
return false;
}
+
+ THashSet<TStringBuf> uniqs;
+ for (size_t i = 1; i < setting.ChildrenSize(); ++i) {
+ const auto& column = setting.Child(i);
+ if (!EnsureAtom(*column, ctx)) {
+ return false;
+ }
+ if (!uniqs.emplace(column->Content()).second) {
+ ctx.AddError(TIssue(ctx.GetPosition(column->Pos()),
+ TStringBuilder() << "Duplicate partitioned_by column '" << column->Content() << "'"));
+ return false;
+ }
+ }
+
return true;
- };
+ }
- if (!EnsureValidSettings(*path->Child(TS3Path::idx_Settings), { "externalColumns" },
- RequireSingleValueSettings(validator), ctx))
- {
- return TStatus::Error;
+ YQL_ENSURE(name == "projection");
+ if (!EnsureAtom(setting.Tail(), ctx)) {
+ return false;
}
- }
- }
- if (!EnsureAtom(*input->Child(TS3Object::idx_Format), ctx) || !NCommon::ValidateFormat(input->Child(TS3Object::idx_Format)->Content(), ctx)) {
- return TStatus::Error;
- }
+ if (setting.Tail().Content().empty()) {
+ ctx.AddError(TIssue(ctx.GetPosition(setting.Pos()), "Expecting non-empty projection setting"));
+ return false;
+ }
- if (input->ChildrenSize() > TS3Object::idx_Settings) {
- auto validator = [](TStringBuf name, const TExprNode& setting, TExprContext& ctx) {
- Y_UNUSED(name);
- auto& value = setting.Tail();
- TStringBuf compression;
- if (value.IsAtom()) {
- compression = value.Content();
- } else {
- if (!EnsureStringOrUtf8Type(value, ctx)) {
- return false;
- }
- if (!value.IsCallable({"String", "Utf8"})) {
- ctx.AddError(TIssue(ctx.GetPosition(value.Pos()), "Expected literal string as compression value"));
- return false;
- }
- compression = value.Head().Content();
+ if (!havePartitionedBy) {
+ ctx.AddError(TIssue(ctx.GetPosition(setting.Pos()), "Missing partitioned_by setting for projection"));
+ return false;
}
- return NCommon::ValidateCompression(compression, ctx);
+
+ return true;
};
- if (!EnsureValidSettings(*input->Child(TS3Object::idx_Settings), { "compression" },
- RequireSingleValueSettings(validator), ctx))
+ if (!EnsureValidSettings(*input->Child(TS3Object::idx_Settings),
+ { "compression", "partitionedby", "projection" }, validator, ctx))
{
return TStatus::Error;
}
diff --git a/ydb/library/yql/providers/s3/provider/yql_s3_dq_integration.cpp b/ydb/library/yql/providers/s3/provider/yql_s3_dq_integration.cpp
index ba58f6d9ac..5d0b9c45a1 100644
--- a/ydb/library/yql/providers/s3/provider/yql_s3_dq_integration.cpp
+++ b/ydb/library/yql/providers/s3/provider/yql_s3_dq_integration.cpp
@@ -58,9 +58,11 @@ public:
}
partitions.reserve(parts.size());
+ ui64 startIdx = 0;
for (const auto& part : parts) {
NS3::TRange range;
- std::for_each(part.cbegin(), part.cend(), [&range](const TString& path) { range.AddPath(path); });
+ range.SetStartPathIndex(startIdx);
+ std::for_each(part.cbegin(), part.cend(), [&range, &startIdx](const TString& path) { range.AddPath(path); ++startIdx; });
partitions.emplace_back();
TStringOutput out(partitions.back());
@@ -96,6 +98,22 @@ public:
.Seal().Build()
);
+ TExprNodeList extraColumns;
+ for (size_t i = 0; i < s3ReadObject.Object().Paths().Size(); ++i) {
+ extraColumns.push_back(s3ReadObject.Object().Paths().Item(i).ExtraColumns().Ptr());
+ }
+ YQL_ENSURE(!extraColumns.empty());
+ if (extraColumns.front()->GetTypeAnn()->Cast<TStructExprType>()->GetSize()) {
+ settings.push_back(
+ ctx.Builder(s3ReadObject.Object().Pos())
+ .List()
+ .Atom(0, "extraColumns")
+ .Add(1, ctx.NewCallable(s3ReadObject.Object().Pos(), "AsList", std::move(extraColumns)))
+ .Seal()
+ .Build()
+ );
+ }
+
if (const auto useCoro = State_->Configuration->SourceCoroActor.Get(); (!useCoro || *useCoro) && !s3ReadObject.Object().Format().Ref().IsAtom({"raw", "json_list"}))
return Build<TDqSourceWrap>(ctx, read->Pos())
.Input<TS3ParseSettings>()
@@ -150,6 +168,8 @@ public:
srcDesc.SetToken(settings.Token().Name().StringValue());
const auto& paths = settings.Paths();
+ YQL_ENSURE(paths.Size() > 0);
+ const TStructExprType* extraColumnsType = paths.Item(0).ExtraColumns().Ref().GetTypeAnn()->Cast<TStructExprType>();
for (auto i = 0U; i < paths.Size(); ++i) {
const auto p = srcDesc.AddPath();
p->SetPath(paths.Item(i).Path().StringValue());
@@ -159,7 +179,16 @@ public:
if (const auto mayParseSettings = settings.Maybe<TS3ParseSettings>()) {
const auto parseSettings = mayParseSettings.Cast();
srcDesc.SetFormat(parseSettings.Format().StringValue().c_str());
- srcDesc.SetRowType(NCommon::WriteTypeToYson(parseSettings.RowType().Ref().GetTypeAnn()->Cast<TTypeExprType>()->GetType(), NYT::NYson::EYsonFormat::Text));
+
+ const TStructExprType* fullRowType = parseSettings.RowType().Ref().GetTypeAnn()->Cast<TTypeExprType>()->GetType()->Cast<TStructExprType>();
+ // exclude extra columns to get actual row type we need to read from input
+ auto rowTypeItems = fullRowType->GetItems();
+ EraseIf(rowTypeItems, [extraColumnsType](const auto& item) { return extraColumnsType->FindItem(item->GetName()); });
+ {
+ // TODO: pass context
+ TExprContext ctx;
+ srcDesc.SetRowType(NCommon::WriteTypeToYson(ctx.MakeType<TStructExprType>(rowTypeItems), NYT::NYson::EYsonFormat::Text));
+ }
if (const auto maySettings = parseSettings.Settings()) {
const auto& settings = maySettings.Cast();
@@ -169,6 +198,10 @@ public:
}
}
+ if (extraColumnsType->GetSize()) {
+ srcDesc.MutableSettings()->insert({"addPathIndex", "true"});
+ }
+
protoSettings.PackFrom(srcDesc);
sourceType = "S3Source";
}
diff --git a/ydb/library/yql/providers/s3/provider/yql_s3_io_discovery.cpp b/ydb/library/yql/providers/s3/provider/yql_s3_io_discovery.cpp
index 306cd0c5f6..5822ec42a4 100644
--- a/ydb/library/yql/providers/s3/provider/yql_s3_io_discovery.cpp
+++ b/ydb/library/yql/providers/s3/provider/yql_s3_io_discovery.cpp
@@ -2,7 +2,9 @@
#include "yql_s3_list.h"
#include <ydb/library/yql/providers/s3/expr_nodes/yql_s3_expr_nodes.h>
+#include <ydb/library/yql/providers/s3/path_generator/yql_s3_path_generator.h>
#include <ydb/library/yql/core/yql_expr_optimize.h>
+#include <ydb/library/yql/core/yql_opt_utils.h>
#include <ydb/library/yql/utils/log/log.h>
#include <ydb/library/yql/utils/url_builder.h>
@@ -37,6 +39,11 @@ bool operator<(const TListRequest& a, const TListRequest& b) {
using TPendingRequests = TMap<TListRequest, NThreading::TFuture<IS3Lister::TListResult>>;
+struct TGeneratedColumnsConfig {
+ TVector<TString> Columns;
+ TExprNode::TPtr SchemaTypeNode;
+};
+
class TS3IODiscoveryTransformer : public TGraphTransformerBase {
public:
TS3IODiscoveryTransformer(TS3State::TPtr state, IHTTPGateway::TPtr gateway)
@@ -62,26 +69,13 @@ public:
TVector<NThreading::TFuture<IS3Lister::TListResult>> futures;
for (auto& r : reads) {
const TS3Read read(std::move(r));
- std::unordered_set<std::string_view> paths;
- const auto& object = read.Arg(2).Ref();
- YQL_ENSURE(object.IsCallable("MrTableConcat"));
- object.ForEachChild([&paths](const TExprNode& child){ paths.emplace(child.Head().Tail().Head().Content()); });
- const auto& connect = State_->Configuration->Clusters.at(read.DataSource().Cluster().StringValue());
- const auto& token = State_->Configuration->Tokens.at(read.DataSource().Cluster().StringValue());
- const auto credentialsProviderFactory = CreateCredentialsProviderFactoryForStructuredToken(State_->CredentialsFactory, token);
-
- TListRequest req;
- req.Token = credentialsProviderFactory->CreateProvider()->GetAuthInfo();
- req.Url = connect.Url;
- for (const auto& path : paths) {
- req.Pattern = path;
- RequestsByNode_[read.Raw()].push_back(req);
-
- if (PendingRequests_.find(req) == PendingRequests_.end()) {
- auto future = Lister_->List(req.Token, req.Url, req.Pattern);
- PendingRequests_[req] = future;
- futures.push_back(std::move(future));
+ try {
+ if (!LaunchListsForNode(read, futures, ctx)) {
+ return TStatus::Error;
}
+ } catch (const std::exception& ex) {
+ ctx.AddError(TIssue(ctx.GetPosition(read.Pos()), TStringBuilder() << "Error while doing S3 discovery: " << ex.what()));
+ return TStatus::Error;
}
}
@@ -140,11 +134,37 @@ public:
return TStatus::Error;
}
for (auto& entry : listEntries) {
+ TExprNodeList extraColumnsAsStructArgs;
+ if (auto confIt = GenColumnsByNode_.find(node); confIt != GenColumnsByNode_.end()) {
+ const TGeneratedColumnsConfig& config = confIt->second;
+ YQL_ENSURE(config.Columns.size() <= entry.MatchedGlobs.size());
+ YQL_ENSURE(config.SchemaTypeNode);
+
+ for (size_t i = 0; i < config.Columns.size(); ++i) {
+ auto& col = config.Columns[i];
+ extraColumnsAsStructArgs.push_back(
+ ctx.Builder(object.Pos())
+ .List()
+ .Atom(0, col)
+ .Callable(1, "Data")
+ .Callable(0, "StructMemberType")
+ .Add(0, config.SchemaTypeNode)
+ .Atom(1, col)
+ .Seal()
+ .Atom(1, entry.MatchedGlobs[i])
+ .Seal()
+ .Seal()
+ .Build()
+ );
+ }
+ }
+
pathNodes.emplace_back(
ctx.Builder(object.Pos())
.List()
.Atom(0, entry.Path)
.Atom(1, ToString(entry.Size), TNodeFlags::Default)
+ .Add(2, ctx.NewCallable(object.Pos(), "AsStruct", std::move(extraColumnsAsStructArgs)))
.Seal()
.Build()
);
@@ -196,11 +216,133 @@ public:
return RemapExpr(input, output, replaces, ctx, TOptimizeExprSettings(nullptr));
}
private:
+ bool LaunchListsForNode(const TS3Read& read, TVector<NThreading::TFuture<IS3Lister::TListResult>>& futures, TExprContext& ctx) {
+ const auto& settings = *read.Ref().Child(4);
+
+ // schema is required
+ auto schema = GetSetting(settings, "userschema");
+ if (!schema) {
+ ctx.AddError(TIssue(ctx.GetPosition(read.Pos()), "Missing schema - please use WITH SCHEMA when reading from S3"));
+ return false;
+ }
+ if (!EnsureTupleMinSize(*schema, 2, ctx)) {
+ return false;
+ }
+
+ TVector<TString> partitionedBy;
+ if (auto partitionedBySetting = GetSetting(settings, "partitionedby")) {
+ if (!EnsureTupleMinSize(*partitionedBySetting, 2, ctx)) {
+ return false;
+ }
+
+ THashSet<TStringBuf> uniqs;
+ for (size_t i = 1; i < partitionedBySetting->ChildrenSize(); ++i) {
+ const auto& column = partitionedBySetting->Child(i);
+ if (!EnsureAtom(*column, ctx)) {
+ return false;
+ }
+ if (!uniqs.emplace(column->Content()).second) {
+ ctx.AddError(TIssue(ctx.GetPosition(column->Pos()), TStringBuilder() << "Duplicate partitioned_by column '" << column->Content() << "'"));
+ return false;
+ }
+ partitionedBy.push_back(ToString(column->Content()));
+
+ }
+ }
+
+ TString projection;
+ if (auto projectionSetting = GetSetting(settings, "projection")) {
+ if (!EnsureTupleSize(*projectionSetting, 2, ctx)) {
+ return false;
+ }
+
+ if (!EnsureAtom(projectionSetting->Tail(), ctx)) {
+ return false;
+ }
+
+ if (projectionSetting->Tail().Content().empty()) {
+ ctx.AddError(TIssue(ctx.GetPosition(projectionSetting->Pos()), "Expecting non-empty projection setting"));
+ return false;
+ }
+
+ if (partitionedBy.empty()) {
+ ctx.AddError(TIssue(ctx.GetPosition(projectionSetting->Pos()), "Missing partitioned_by setting for projection"));
+ return false;
+ }
+ projection = projectionSetting->Tail().Content();
+ }
+
+ TVector<TString> paths;
+ const auto& object = read.Arg(2).Ref();
+ YQL_ENSURE(object.IsCallable("MrTableConcat"));
+ object.ForEachChild([&paths](const TExprNode& child){ paths.push_back(ToString(child.Head().Tail().Head().Content())); });
+
+ const auto& connect = State_->Configuration->Clusters.at(read.DataSource().Cluster().StringValue());
+ const auto& token = State_->Configuration->Tokens.at(read.DataSource().Cluster().StringValue());
+ const auto credentialsProviderFactory = CreateCredentialsProviderFactoryForStructuredToken(State_->CredentialsFactory, token);
+
+ const TString url = connect.Url;
+ const TString tokenStr = credentialsProviderFactory->CreateProvider()->GetAuthInfo();
+
+ TString generatedPattern;
+ if (!partitionedBy.empty()) {
+ TGeneratedColumnsConfig config;
+ if (!BuildGeneratedPattern(projection, partitionedBy, schema->ChildPtr(1), config, generatedPattern)) {
+ return false;
+ }
+ GenColumnsByNode_[read.Raw()] = config;
+ }
+
+ for (const auto& path : paths) {
+ TListRequest req;
+ req.Token = tokenStr;
+ req.Url = url;
+
+ if (partitionedBy.empty()) {
+ // treat paths as regular wildcard patterns
+ req.Pattern = path;
+ } else {
+ if (IS3Lister::HasWildcards(path)) {
+ ctx.AddError(TIssue(ctx.GetPosition(read.Pos()), TStringBuilder() << "Path prefix: '" << path << "' contains wildcards"));
+ return false;
+ }
+ req.Pattern = path + generatedPattern;
+ }
+
+ RequestsByNode_[read.Raw()].push_back(req);
+ if (PendingRequests_.find(req) == PendingRequests_.end()) {
+ auto future = Lister_->List(req.Token, req.Url, req.Pattern);
+ PendingRequests_[req] = future;
+ futures.push_back(std::move(future));
+ }
+ }
+
+ return true;
+ }
+
+ static bool BuildGeneratedPattern(const TString& projection, const TVector<TString>& partitionedBy,
+ const TExprNode::TPtr& schemaTypeNode, TGeneratedColumnsConfig& config, TString& generatedPattern)
+ {
+ if (!projection.empty()) {
+ ythrow yexception() << "Projection settings are not supported yet";
+ }
+
+ generatedPattern.clear();
+ config.Columns = partitionedBy;
+ config.SchemaTypeNode = schemaTypeNode;
+ for (auto& col : partitionedBy) {
+ generatedPattern += "/" + col + "=*";
+ }
+ generatedPattern += "/*";
+ return true;
+ }
+
const TS3State::TPtr State_;
const IS3Lister::TPtr Lister_;
TPendingRequests PendingRequests_;
TNodeMap<TVector<TListRequest>> RequestsByNode_;
+ TNodeMap<TGeneratedColumnsConfig> GenColumnsByNode_;
NThreading::TFuture<void> AllFuture_;
};
diff --git a/ydb/library/yql/providers/solomon/CMakeLists.txt b/ydb/library/yql/providers/solomon/CMakeLists.txt
new file mode 100644
index 0000000000..038f82c4c6
--- /dev/null
+++ b/ydb/library/yql/providers/solomon/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(async_io)
+add_subdirectory(expr_nodes)
+add_subdirectory(gateway)
+add_subdirectory(proto)
+add_subdirectory(provider)
diff --git a/ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.cpp b/ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.cpp
index f2a24eaab0..dc0825146c 100644
--- a/ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.cpp
+++ b/ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.cpp
@@ -125,7 +125,7 @@ public:
const TTxId& txId,
TDqSolomonWriteParams&& writeParams,
NYql::NDq::IDqComputeActorAsyncOutput::ICallbacks* callbacks,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
std::shared_ptr<NYdb::ICredentialsProvider> credentialsProvider,
i64 freeSpace)
: TActor<TDqSolomonWriteActor>(&TDqSolomonWriteActor::StateFunc)
@@ -204,7 +204,7 @@ public:
private:
struct TDqSolomonWriteActorMetrics {
- explicit TDqSolomonWriteActorMetrics(const NMonitoring::TDynamicCounterPtr& counters) {
+ explicit TDqSolomonWriteActorMetrics(const ::NMonitoring::TDynamicCounterPtr& counters) {
auto subgroup = counters->GetSubgroup("subsystem", "dq_solomon_write_actor");
SendingBufferSize = subgroup->GetCounter("SendingBufferSize");
WindowMinSendingBufferSize = subgroup->GetCounter("WindowMinSendingBufferSize");
@@ -214,12 +214,12 @@ private:
ะกonfirmedMetrics = subgroup->GetCounter("ะกonfirmedMetrics", true);
}
- NMonitoring::TDynamicCounters::TCounterPtr SendingBufferSize;
- NMonitoring::TDynamicCounters::TCounterPtr WindowMinSendingBufferSize;
- NMonitoring::TDynamicCounters::TCounterPtr InflightRequests;
- NMonitoring::TDynamicCounters::TCounterPtr WindowMinInflightRequests;
- NMonitoring::TDynamicCounters::TCounterPtr SentMetrics;
- NMonitoring::TDynamicCounters::TCounterPtr ะกonfirmedMetrics;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SendingBufferSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr WindowMinSendingBufferSize;
+ ::NMonitoring::TDynamicCounters::TCounterPtr InflightRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr WindowMinInflightRequests;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SentMetrics;
+ ::NMonitoring::TDynamicCounters::TCounterPtr ะกonfirmedMetrics;
public:
void ReportSendingBufferSize(size_t size) {
@@ -495,7 +495,7 @@ std::pair<NYql::NDq::IDqComputeActorAsyncOutput*, NActors::IActor*> CreateDqSolo
const TTxId& txId,
const THashMap<TString, TString>& secureParams,
NYql::NDq::IDqComputeActorAsyncOutput::ICallbacks* callbacks,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory,
i64 freeSpace)
{
@@ -526,7 +526,7 @@ void RegisterDQSolomonWriteActorFactory(TDqAsyncIoFactory& factory, ISecuredServ
NYql::NSo::NProto::TDqSolomonShard&& settings,
IDqAsyncIoFactory::TSinkArguments&& args)
{
- auto counters = MakeIntrusive<NMonitoring::TDynamicCounters>();
+ auto counters = MakeIntrusive<::NMonitoring::TDynamicCounters>();
return CreateDqSolomonWriteActor(
std::move(settings),
diff --git a/ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.h b/ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.h
index 5314129a05..3d422e333c 100644
--- a/ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.h
+++ b/ydb/library/yql/providers/solomon/async_io/dq_solomon_write_actor.h
@@ -24,7 +24,7 @@ std::pair<NYql::NDq::IDqComputeActorAsyncOutput*, NActors::IActor*> CreateDqSolo
const TTxId& txId,
const THashMap<TString, TString>& secureParams,
NYql::NDq::IDqComputeActorAsyncOutput::ICallbacks* callbacks,
- const NMonitoring::TDynamicCounterPtr& counters,
+ const ::NMonitoring::TDynamicCounterPtr& counters,
ISecuredServiceAccountCredentialsFactory::TPtr credentialsFactory,
i64 freeSpace = DqSolomonDefaultFreeSpace);
diff --git a/ydb/library/yql/providers/ydb/CMakeLists.txt b/ydb/library/yql/providers/ydb/CMakeLists.txt
new file mode 100644
index 0000000000..a9e4e8777c
--- /dev/null
+++ b/ydb/library/yql/providers/ydb/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actors)
+add_subdirectory(comp_nodes)
+add_subdirectory(expr_nodes)
+add_subdirectory(proto)
+add_subdirectory(provider)
diff --git a/ydb/library/yql/public/CMakeLists.txt b/ydb/library/yql/public/CMakeLists.txt
new file mode 100644
index 0000000000..97b7790031
--- /dev/null
+++ b/ydb/library/yql/public/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(decimal)
+add_subdirectory(issue)
+add_subdirectory(types)
+add_subdirectory(udf)
diff --git a/ydb/library/yql/public/decimal/CMakeLists.txt b/ydb/library/yql/public/decimal/CMakeLists.txt
index f9959b6724..c3facd11f7 100644
--- a/ydb/library/yql/public/decimal/CMakeLists.txt
+++ b/ydb/library/yql/public/decimal/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yql-public-decimal)
target_link_libraries(yql-public-decimal PUBLIC
diff --git a/ydb/library/yql/public/decimal/ut/CMakeLists.txt b/ydb/library/yql/public/decimal/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/public/decimal/ut/CMakeLists.txt
+++ b/ydb/library/yql/public/decimal/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/public/decimal/ut/yql_decimal_ut.cpp b/ydb/library/yql/public/decimal/ut/yql_decimal_ut.cpp
index 9c263c2b0b..9a79bbb53d 100644
--- a/ydb/library/yql/public/decimal/ut/yql_decimal_ut.cpp
+++ b/ydb/library/yql/public/decimal/ut/yql_decimal_ut.cpp
@@ -22,9 +22,11 @@ Y_UNIT_TEST_SUITE(TYqlDecimalTest) {
char buff[sizeof(TInt128)];
const auto s = Serialize(v, buff);
UNIT_ASSERT_VALUES_EQUAL(s, expectedSize);
- const auto& des = Deserialize(buff);
+ const auto& des = Deserialize(buff, expectedSize);
UNIT_ASSERT_VALUES_EQUAL(des.second, expectedSize);
UNIT_ASSERT(des.first == v);
+ const auto& e = Deserialize(buff, expectedSize - 1);
+ UNIT_ASSERT(e.first == Err());
}
template<ui8 Precision, ui8 Scale>
diff --git a/ydb/library/yql/public/decimal/yql_decimal_serialize.cpp b/ydb/library/yql/public/decimal/yql_decimal_serialize.cpp
index 58d1681fe6..ace496465a 100644
--- a/ydb/library/yql/public/decimal/yql_decimal_serialize.cpp
+++ b/ydb/library/yql/public/decimal/yql_decimal_serialize.cpp
@@ -46,8 +46,8 @@ size_t Serialize(TInt128 value, char* buf) {
return size;
}
-std::pair<TInt128, size_t> Deserialize(const char* b) {
- if (!b)
+std::pair<TInt128, size_t> Deserialize(const char* b, size_t len) {
+ if (!b || len == 0U)
return std::make_pair(Err(), 0U);
const auto mark = ui8(*b);
@@ -64,6 +64,8 @@ std::pair<TInt128, size_t> Deserialize(const char* b) {
const bool neg = mark < 0x80u;
const auto used = neg ? 0x80u - mark : mark - 0x7Fu;
+ if (len < used)
+ return std::make_pair(Err(), 0U);
TInt128 v;
const auto size = sizeof(v);
diff --git a/ydb/library/yql/public/decimal/yql_decimal_serialize.h b/ydb/library/yql/public/decimal/yql_decimal_serialize.h
index 533af2df36..57a642f36b 100644
--- a/ydb/library/yql/public/decimal/yql_decimal_serialize.h
+++ b/ydb/library/yql/public/decimal/yql_decimal_serialize.h
@@ -7,7 +7,7 @@ namespace NDecimal {
// big-endian 16 bytes buffer.
size_t Serialize(TInt128 v, char* buff);
-std::pair<TInt128, size_t> Deserialize(const char* buff);
+std::pair<TInt128, size_t> Deserialize(const char* buff, size_t len);
}
}
diff --git a/ydb/library/yql/public/issue/CMakeLists.txt b/ydb/library/yql/public/issue/CMakeLists.txt
index 5f5fc471b0..79aa57aabf 100644
--- a/ydb/library/yql/public/issue/CMakeLists.txt
+++ b/ydb/library/yql/public/issue/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
+add_subdirectory(ut)
add_library(yql-public-issue)
target_link_libraries(yql-public-issue PUBLIC
diff --git a/ydb/library/yql/public/issue/ut/CMakeLists.txt b/ydb/library/yql/public/issue/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/public/issue/ut/CMakeLists.txt
+++ b/ydb/library/yql/public/issue/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/public/udf/CMakeLists.txt b/ydb/library/yql/public/udf/CMakeLists.txt
index bf419863d2..b1f9a16080 100644
--- a/ydb/library/yql/public/udf/CMakeLists.txt
+++ b/ydb/library/yql/public/udf/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(service)
+add_subdirectory(support)
+add_subdirectory(tz)
+add_subdirectory(ut)
add_library(yql-public-udf)
target_compile_options(yql-public-udf PRIVATE
diff --git a/ydb/library/yql/public/udf/service/CMakeLists.txt b/ydb/library/yql/public/udf/service/CMakeLists.txt
new file mode 100644
index 0000000000..afe68303ab
--- /dev/null
+++ b/ydb/library/yql/public/udf/service/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(exception_policy)
+add_subdirectory(stub)
+add_subdirectory(terminate_policy)
diff --git a/ydb/library/yql/public/udf/ut/CMakeLists.txt b/ydb/library/yql/public/udf/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/public/udf/ut/CMakeLists.txt
+++ b/ydb/library/yql/public/udf/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/sql/CMakeLists.txt b/ydb/library/yql/sql/CMakeLists.txt
index 24b0c63d40..865496c94a 100644
--- a/ydb/library/yql/sql/CMakeLists.txt
+++ b/ydb/library/yql/sql/CMakeLists.txt
@@ -6,6 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(pg_dummy)
+add_subdirectory(settings)
+add_subdirectory(v0)
+add_subdirectory(v1)
add_library(library-yql-sql)
target_link_libraries(library-yql-sql PUBLIC
diff --git a/ydb/library/yql/sql/v0/CMakeLists.txt b/ydb/library/yql/sql/v0/CMakeLists.txt
index 04c83d3f31..e1d952379d 100644
--- a/ydb/library/yql/sql/v0/CMakeLists.txt
+++ b/ydb/library/yql/sql/v0/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(lexer)
add_library(yql-sql-v0)
target_compile_options(yql-sql-v0 PRIVATE
diff --git a/ydb/library/yql/sql/v1/CMakeLists.txt b/ydb/library/yql/sql/v1/CMakeLists.txt
index 89836ed0ed..0916a9443a 100644
--- a/ydb/library/yql/sql/v1/CMakeLists.txt
+++ b/ydb/library/yql/sql/v1/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(lexer)
+add_subdirectory(perf)
+add_subdirectory(proto_parser)
add_library(yql-sql-v1)
target_compile_options(yql-sql-v1 PRIVATE
diff --git a/ydb/library/yql/sql/v1/aggregation.cpp b/ydb/library/yql/sql/v1/aggregation.cpp
index c59f39d3df..e43d3d1a5b 100644
--- a/ydb/library/yql/sql/v1/aggregation.cpp
+++ b/ydb/library/yql/sql/v1/aggregation.cpp
@@ -29,6 +29,11 @@ namespace {
}
}
+static const THashSet<TString> AggApplyFuncs = {
+ "count_traits_factory",
+ "sum_traits_factory"
+};
+
class TAggregationFactory : public IAggregation {
public:
TAggregationFactory(TPosition pos, const TString& name, const TString& func, EAggregateMode aggMode,
@@ -37,6 +42,10 @@ public:
BuildBind(Pos, aggMode == EAggregateMode::OverWindow ? "window_module" : "aggregate_module", func) : nullptr),
Multi(multi), ValidateArgs(validateArgs), DynamicFactory(!Factory)
{
+ if (!func.empty() && AggApplyFuncs.contains(func)) {
+ AggApplyName = func.substr(0, func.size() - 15);
+ }
+
if (!Factory) {
FakeSource = BuildFakeSource(pos);
}
@@ -44,6 +53,10 @@ public:
protected:
bool InitAggr(TContext& ctx, bool isFactory, ISource* src, TAstListNode& node, const TVector<TNodePtr>& exprs) override {
+ if (!ctx.EmitAggApply) {
+ AggApplyName = "";
+ }
+
if (ValidateArgs || isFactory) {
ui32 expectedArgs = ValidateArgs && !Factory ? 2 : (isFactory ? 0 : 1);
if (!Factory && ValidateArgs) {
@@ -79,6 +92,9 @@ protected:
Name = src->MakeLocalName(Name);
}
+ if (Expr && Expr->IsAsterisk() && AggApplyName == "count") {
+ AggApplyName = "count_all";
+ }
if (!Init(ctx, src)) {
return false;
@@ -100,6 +116,10 @@ protected:
TNodePtr GetApply(const TNodePtr& type) const override {
if (!Multi) {
+ if (!DynamicFactory && !AggApplyName.empty()) {
+ return Y("AggApply", Q(AggApplyName), Y("ListItemType", type), BuildLambda(Pos, Y("row"), Y("PersistableRepr", Expr)));
+ }
+
return Y("Apply", Factory, (DynamicFactory ? Y("ListItemType", type) : type),
BuildLambda(Pos, Y("row"), Y("PersistableRepr", Expr)));
}
@@ -183,6 +203,7 @@ protected:
TNodePtr Expr;
bool Multi;
bool ValidateArgs;
+ TString AggApplyName;
TVector<TNodePtr> Exprs;
private:
diff --git a/ydb/library/yql/sql/v1/context.cpp b/ydb/library/yql/sql/v1/context.cpp
index 72bd5c5f1d..5ec69a5662 100644
--- a/ydb/library/yql/sql/v1/context.cpp
+++ b/ydb/library/yql/sql/v1/context.cpp
@@ -56,6 +56,7 @@ THashMap<TStringBuf, TPragmaField> CTX_PRAGMA_FIELDS = {
{"AnsiCurrentRow", &TContext::AnsiCurrentRow},
{"EmitStartsWith", &TContext::EmitStartsWith},
{"EnforceAnsiOrderByLimitInUnionAll", &TContext::EnforceAnsiOrderByLimitInUnionAll},
+ {"EmitAggApply", &TContext::EmitAggApply},
};
typedef TMaybe<bool> TContext::*TPragmaMaybeField;
@@ -139,6 +140,21 @@ TString TContext::MakeName(const TString& name) {
return str;
}
+void TContext::PushCurrentBlocks(TBlocks* blocks) {
+ YQL_ENSURE(blocks);
+ CurrentBlocks.push_back(blocks);
+}
+
+void TContext::PopCurrentBlocks() {
+ YQL_ENSURE(!CurrentBlocks.empty());
+ CurrentBlocks.pop_back();
+}
+
+TBlocks& TContext::GetCurrentBlocks() const {
+ YQL_ENSURE(!CurrentBlocks.empty());
+ return *CurrentBlocks.back();
+}
+
IOutputStream& TContext::Error(NYql::TIssueCode code) {
return Error(Pos(), code);
}
diff --git a/ydb/library/yql/sql/v1/context.h b/ydb/library/yql/sql/v1/context.h
index bc1ef02750..bd1ff59f30 100644
--- a/ydb/library/yql/sql/v1/context.h
+++ b/ydb/library/yql/sql/v1/context.h
@@ -89,7 +89,10 @@ namespace NSQLTranslationV1 {
const NYql::TPosition& Pos() const;
- void ClearBlockScope();
+ void PushCurrentBlocks(TBlocks* blocks);
+ void PopCurrentBlocks();
+ TBlocks& GetCurrentBlocks() const;
+
TString MakeName(const TString& name);
IOutputStream& Error(NYql::TIssueCode code = NYql::TIssuesIds::DEFAULT_ERROR);
@@ -207,6 +210,7 @@ namespace NSQLTranslationV1 {
EColumnRefState ColumnReferenceState = EColumnRefState::Deny;
EColumnRefState TopLevelColumnReferenceState = EColumnRefState::Deny;
TString NoColumnErrorContext = "in current scope";
+ TVector<TBlocks*> CurrentBlocks;
public:
THashMap<TString, TNodePtr> Variables;
@@ -272,6 +276,7 @@ namespace NSQLTranslationV1 {
NYql::TWarningPolicy WarningPolicy;
TString PqReadByRtmrCluster;
bool EmitStartsWith = true;
+ bool EmitAggApply = false;
};
class TColumnRefScope {
diff --git a/ydb/library/yql/sql/v1/perf/CMakeLists.txt b/ydb/library/yql/sql/v1/perf/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/sql/v1/perf/CMakeLists.txt
+++ b/ydb/library/yql/sql/v1/perf/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/sql/v1/sql.cpp b/ydb/library/yql/sql/v1/sql.cpp
index 27f1adcad7..25df30ded6 100644
--- a/ydb/library/yql/sql/v1/sql.cpp
+++ b/ydb/library/yql/sql/v1/sql.cpp
@@ -31,6 +31,7 @@
#include <util/charset/wide.h>
#include <util/generic/array_ref.h>
+#include <util/generic/scope.h>
#include <util/generic/set.h>
#include <util/generic/ylimits.h>
#include <util/string/ascii.h>
@@ -4873,7 +4874,12 @@ TMaybe<TExprOrIdent> TSqlExpression::InAtomExpr(const TRule_in_atom_expr& node,
return {};
}
Ctx.IncrementMonCounter("sql_features", "InSubquery");
- result.Expr = BuildSelectResult(pos, std::move(source), false, Mode == NSQLTranslation::ESqlMode::SUBQUERY, Ctx.Scoped);
+ const auto alias = Ctx.MakeName("subquerynode");
+ const auto ref = Ctx.MakeName("subquery");
+ auto& blocks = Ctx.GetCurrentBlocks();
+ blocks.push_back(BuildSubquery(std::move(source), alias, Mode == NSQLTranslation::ESqlMode::SUBQUERY, -1, Ctx.Scoped));
+ blocks.back()->SetLabel(ref);
+ result.Expr = BuildSubqueryRef(blocks.back(), ref, -1);
break;
}
case TRule_in_atom_expr::kAltInAtomExpr8: {
@@ -9847,6 +9853,9 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success
} else if (normalizedPragma == "disableansicurrentrow") {
Ctx.AnsiCurrentRow = false;
Ctx.IncrementMonCounter("sql_pragma", "DisableAnsiCurrentRow");
+ } else if (normalizedPragma == "emitaggapply") {
+ Ctx.EmitAggApply = true;
+ Ctx.IncrementMonCounter("sql_pragma", "EmitAggApply");
} else {
Error() << "Unknown pragma: " << pragma;
Ctx.IncrementMonCounter("sql_errors", "UnknownPragma");
@@ -10140,6 +10149,10 @@ TNodePtr TSqlQuery::Build(const TSQLv1ParserAST& ast) {
const auto& query = ast.GetRule_sql_query();
TVector<TNodePtr> blocks;
+ Ctx.PushCurrentBlocks(&blocks);
+ Y_DEFER {
+ Ctx.PopCurrentBlocks();
+ };
if (query.Alt_case() == TRule_sql_query::kAltSqlQuery1) {
const auto& statements = query.GetAlt_sql_query1().GetRule_sql_stmt_list1();
if (!Statement(blocks, statements.GetRule_sql_stmt2().GetRule_sql_stmt_core2())) {
@@ -10176,6 +10189,10 @@ TNodePtr TSqlQuery::Build(const TSQLv1ParserAST& ast) {
bool TSqlTranslation::DefineActionOrSubqueryBody(TSqlQuery& query, TBlocks& blocks, const TRule_define_action_or_subquery_body& body) {
if (body.HasBlock2()) {
+ Ctx.PushCurrentBlocks(&blocks);
+ Y_DEFER {
+ Ctx.PopCurrentBlocks();
+ };
if (!query.Statement(blocks, body.GetBlock2().GetRule_sql_stmt_core1())) {
return false;
}
diff --git a/ydb/library/yql/udfs/CMakeLists.txt b/ydb/library/yql/udfs/CMakeLists.txt
new file mode 100644
index 0000000000..39b9818db6
--- /dev/null
+++ b/ydb/library/yql/udfs/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(common)
+add_subdirectory(logs)
diff --git a/ydb/library/yql/udfs/common/CMakeLists.txt b/ydb/library/yql/udfs/common/CMakeLists.txt
new file mode 100644
index 0000000000..d60ad8cba9
--- /dev/null
+++ b/ydb/library/yql/udfs/common/CMakeLists.txt
@@ -0,0 +1,29 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(clickhouse)
+add_subdirectory(datetime)
+add_subdirectory(datetime2)
+add_subdirectory(digest)
+add_subdirectory(histogram)
+add_subdirectory(hyperloglog)
+add_subdirectory(hyperscan)
+add_subdirectory(ip_base)
+add_subdirectory(json)
+add_subdirectory(json2)
+add_subdirectory(math)
+add_subdirectory(pire)
+add_subdirectory(re2)
+add_subdirectory(set)
+add_subdirectory(stat)
+add_subdirectory(string)
+add_subdirectory(top)
+add_subdirectory(topfreq)
+add_subdirectory(unicode_base)
+add_subdirectory(url_base)
+add_subdirectory(yson2)
diff --git a/ydb/library/yql/udfs/common/clickhouse/CMakeLists.txt b/ydb/library/yql/udfs/common/clickhouse/CMakeLists.txt
new file mode 100644
index 0000000000..49369c57a0
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(client)
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.linux.txt b/ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.linux.txt
index 48ca0a7ec0..489a192190 100644
--- a/ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.linux.txt
+++ b/ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.linux.txt
@@ -221,6 +221,7 @@ target_sources(clickhouse_client_udf.global PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferFromFileDescriptor.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferFromFileDescriptorDiscardOnFailure.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferFromPocoSocket.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Compression/CompressionCodecLZ4.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Compression/CompressionCodecMultiple.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Compression/CompressionCodecNone.cpp
@@ -436,6 +437,7 @@ target_sources(clickhouse_client_udf.global PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/CSVRowInputFormat.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONAsStringRowInputFormat.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowInputFormat.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/ORCBlockInputFormat.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/ParquetBlockInputFormat.cpp
${CMAKE_SOURCE_DIR}/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/RawBLOBRowInputFormat.cpp
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.txt b/ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/clickhouse/client/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/clickhouse_client_udf.cpp b/ydb/library/yql/udfs/common/clickhouse/client/clickhouse_client_udf.cpp
index cf16ed544c..d10c814826 100644
--- a/ydb/library/yql/udfs/common/clickhouse/client/clickhouse_client_udf.cpp
+++ b/ydb/library/yql/udfs/common/clickhouse/client/clickhouse_client_udf.cpp
@@ -32,8 +32,9 @@
#include "src/Core/ColumnsWithTypeAndName.h"
#include "src/Formats/FormatFactory.h"
-#include "src/Formats/InputStreamFromInputFormat.h"
#include "src/Formats/registerFormats.h"
+#include "src/Processors/Formats/InputStreamFromInputFormat.h"
+#include "src/Processors/Formats/OutputStreamToOutputFormat.h"
#include <util/generic/yexception.h>
#include <util/string/split.h>
@@ -215,11 +216,12 @@ NDB::DataTypePtr MetaToClickHouse(const TColumnMeta& meta) {
return ret;
}
-void PermuteUuid(const char* src, char* dst, bool forward) {
- static ui32 Pairs[16] = { 4, 5, 6, 7, 2, 3, 0, 1, 15, 14, 13, 12, 11, 10, 9, 8 };
- static ui32 InvPairs[16] = { 6, 7, 4, 5, 0, 1, 2, 3, 15, 14, 13, 12, 11, 10, 9, 8 };
+template<bool Forward>
+void PermuteUuid(const char* src, char* dst) {
+ static constexpr ui32 Pairs[16] = { 4, 5, 6, 7, 2, 3, 0, 1, 15, 14, 13, 12, 11, 10, 9, 8 };
+ static constexpr ui32 InvPairs[16] = { 6, 7, 4, 5, 0, 1, 2, 3, 15, 14, 13, 12, 11, 10, 9, 8 };
for (ui32 i = 0; i < 16; ++i) {
- dst[forward ? Pairs[i] : InvPairs[i]] = src[i];
+ dst[Forward ? Pairs[i] : InvPairs[i]] = src[i];
}
}
@@ -320,7 +322,7 @@ TUnboxedValuePod ConvertOutputValue(const NDB::IColumn* col, const TColumnMeta&
}
else if (slot == EDataSlot::Uuid) {
char uuid[16];
- PermuteUuid(ref.data, uuid, false);
+ PermuteUuid<false>(ref.data, uuid);
return valueBuilder->NewString({ uuid, sizeof(uuid) }).Release();
}
else if (slot == EDataSlot::Decimal) {
@@ -360,6 +362,49 @@ TUnboxedValuePod ConvertOutputValue(const NDB::IColumn* col, const TColumnMeta&
}
}
+void ConvertInputValue(const TUnboxedValuePod& value, const NDB::IColumn::MutablePtr& col, const TColumnMeta& meta) {
+ if (meta.IsOptional && !value)
+ return col->insert(NDB::Field());
+
+ switch (*meta.Slot) {
+ case EDataSlot::Utf8:
+ case EDataSlot::Json:
+ case EDataSlot::String:
+ return col->insert(NDB::Field(value.AsStringRef()));
+ case EDataSlot::Bool:
+ return col->insert(NDB::Field(value.Get<bool>()));
+ case EDataSlot::Uint8:
+ return col->insert(NDB::Field(value.Get<ui8>()));
+ case EDataSlot::Uint16:
+ case EDataSlot::Date:
+ case EDataSlot::TzDate:
+ return col->insert(NDB::Field(value.Get<ui16>()));
+ case EDataSlot::Uint32:
+ case EDataSlot::Datetime:
+ case EDataSlot::TzDatetime:
+ return col->insert(NDB::Field(value.Get<ui32>()));
+ case EDataSlot::Uint64:
+ case EDataSlot::Timestamp:
+ case EDataSlot::TzTimestamp:
+ return col->insert(NDB::Field(value.Get<ui64>()));
+ case EDataSlot::Int8:
+ return col->insert(NDB::Field(value.Get<i8>()));
+ case EDataSlot::Int16:
+ return col->insert(NDB::Field(value.Get<i16>()));
+ case EDataSlot::Int32:
+ return col->insert(NDB::Field(value.Get<i32>()));
+ case EDataSlot::Int64:
+ return col->insert(NDB::Field(value.Get<i64>()));
+ case EDataSlot::Uuid: {
+ NDB::UUID uuid;
+ PermuteUuid<true>(value.AsStringRef().Data(), reinterpret_cast<char*>(&uuid));
+ return col->insert(NDB::Field(uuid));
+ }
+ default:
+ UdfTerminate("TODO: Unsupported field type.");
+ }
+}
+
class TParseFromYdb : public TBoxedValue {
public:
class TStreamValue : public TBoxedValue {
@@ -456,14 +501,16 @@ private:
class TStreamValue : public TBoxedValue {
public:
TStreamValue(const std::string& type, const NDB::FormatSettings& settings, const IValueBuilder* valueBuilder, const TUnboxedValue& stream,
- const std::vector<TColumnMeta> outMeta, const NDB::ColumnsWithTypeAndName& columns, const TSourcePosition& pos, ui32 tzId)
+ const std::vector<TColumnMeta> outMeta, const NDB::ColumnsWithTypeAndName& columns, ui32 tupleSize, const TSourcePosition& pos, ui32 tzId)
: ValueBuilder(valueBuilder)
, Stream(stream)
, OutMeta(outMeta)
, Columns(columns)
+ , TupleSize(tupleSize)
, Pos(pos)
, TzId(tzId)
, Cache(OutMeta.size())
+ , TupleCache(tupleSize)
, Type(type)
, Settings(settings)
{}
@@ -474,7 +521,8 @@ private:
if (const auto status = Stream.Fetch(Input); EFetchStatus::Ok != status)
return status;
- const std::string_view buffer = Input.AsStringRef();
+ auto input = TupleSize ? Input.GetElement(0) : Input;
+ const std::string_view buffer = input.AsStringRef();
Buffer = std::make_unique<NDB::ReadBufferFromMemory>(buffer.data(), buffer.size());
BlockStream = std::make_unique<NDB::InputStreamFromInputFormat>(NDB::FormatFactory::instance().getInputFormat(Type, *Buffer, NDB::Block(Columns), nullptr, buffer.size(), Settings));
}
@@ -494,6 +542,16 @@ private:
*items++ = ConvertOutputValue(CurrentBlock.getByPosition(i).column.get(), OutMeta[i], TzId, ValueBuilder, CurrentRow);
}
+ if (TupleSize) {
+ TUnboxedValue* tupleItems = nullptr;
+ auto tuple = TupleCache.NewArray(*ValueBuilder, tupleItems);
+ *tupleItems++ = result;
+ for (ui32 i = 1; i < TupleSize; ++i) {
+ *tupleItems++ = Input.GetElement(i);
+ }
+ result = tuple;
+ }
+
++CurrentRow;
return EFetchStatus::Ok;
}
@@ -509,10 +567,12 @@ private:
const TUnboxedValue Stream;
const std::vector<TColumnMeta> OutMeta;
const NDB::ColumnsWithTypeAndName Columns;
+ const ui32 TupleSize;
const TSourcePosition Pos;
const ui32 TzId;
TPlainArrayCache Cache;
+ TPlainArrayCache TupleCache;
TUnboxedValue Input;
const TString Type;
@@ -524,10 +584,42 @@ private:
size_t CurrentRow = 0U;
};
+NDB::FormatSettings GetFormatSettings(const std::string_view& view) {
+ NDB::FormatSettings settings;
+ settings.skip_unknown_fields = true;
+ settings.with_names_use_header = true;
+ if (!view.empty()) {
+ const std::string str(view);
+ const JSON json(str);
+#define SUPPORTED_FLAGS(xx) \
+ xx(skip_unknown_fields) \
+ xx(import_nested_json) \
+ xx(with_names_use_header) \
+ xx(null_as_default) \
+
+#define SET_FLAG(flag) \
+ if (json.has(#flag)) \
+ settings.flag = json[#flag].get<bool>();
+
+ SUPPORTED_FLAGS(SET_FLAG)
+
+#undef SET_FLAG
+#undef SUPPORTED_FLAGS
+ }
+ return settings;
+}
+
class TParseFormat : public TBoxedValue {
public:
- TParseFormat(const std::string_view& type, const std::string_view& settings, const TSourcePosition& pos, std::vector<TColumnMeta>&& outMeta, NDB::ColumnsWithTypeAndName&& columns)
- : Type(type), Settings(GetFormatSettings(settings)), Pos(pos), OutMeta(std::move(outMeta)), Columns(std::move(columns))
+ TParseFormat(const std::string_view& type, const std::string_view& settings,
+ const TSourcePosition& pos, std::vector<TColumnMeta>&& outMeta,
+ NDB::ColumnsWithTypeAndName&& columns, ui32 tupleSize)
+ : Type(type)
+ , Settings(GetFormatSettings(settings))
+ , Pos(pos)
+ , OutMeta(std::move(outMeta))
+ , Columns(std::move(columns))
+ , TupleSize(tupleSize)
{}
TUnboxedValue Run(const IValueBuilder* valueBuilder, const TUnboxedValuePod* args) const final try {
@@ -538,7 +630,7 @@ public:
}
}
- return TUnboxedValuePod(new TStreamValue(Type, Settings, valueBuilder, *args, OutMeta, Columns, Pos, tzId));
+ return TUnboxedValuePod(new TStreamValue(Type, Settings, valueBuilder, *args, OutMeta, Columns, TupleSize, Pos, tzId));
}
catch (const Poco::Exception& e) {
UdfTerminate((TStringBuilder() << valueBuilder->WithCalleePosition(Pos) << " " << e.displayText()).data());
@@ -547,48 +639,26 @@ public:
UdfTerminate((TStringBuilder() << valueBuilder->WithCalleePosition(Pos) << " " << e.what()).data());
}
private:
- static NDB::FormatSettings GetFormatSettings(const std::string_view& view) {
- NDB::FormatSettings settings;
- settings.skip_unknown_fields = true;
- settings.with_names_use_header = true;
- if (!view.empty()) {
- const std::string str(view);
- const JSON json(str);
- #define SUPPORTED_FLAGS(xx) \
- xx(skip_unknown_fields) \
- xx(import_nested_json) \
- xx(with_names_use_header) \
- xx(null_as_default) \
-
- #define SET_FLAG(flag) \
- if (json.has(#flag)) \
- settings.flag = json[#flag].get<bool>();
-
- SUPPORTED_FLAGS(SET_FLAG)
-
- #undef SET_FLAG
- #undef SUPPORTED_FLAGS
- }
- return settings;
- }
-
const std::string Type;
const NDB::FormatSettings Settings;
const TSourcePosition Pos;
const std::vector<TColumnMeta> OutMeta;
const NDB::ColumnsWithTypeAndName Columns;
+ const ui32 TupleSize;
};
class TParseBlocks : public TBoxedValue {
class TStreamValue : public TBoxedValue {
public:
- TStreamValue(const IValueBuilder* valueBuilder, const TUnboxedValue& stream, const std::vector<TColumnMeta> outMeta, const TSourcePosition& pos, ui32 tzId)
+ TStreamValue(const IValueBuilder* valueBuilder, const TUnboxedValue& stream, const std::vector<TColumnMeta> outMeta, ui32 tupleSize, const TSourcePosition& pos, ui32 tzId)
: ValueBuilder(valueBuilder)
, Stream(stream)
, OutMeta(outMeta)
+ , TupleSize(tupleSize)
, Pos(pos)
, TzId(tzId)
, Cache(OutMeta.size())
+ , TupleCache(tupleSize)
{}
private:
EFetchStatus Fetch(TUnboxedValue& result) final try {
@@ -598,7 +668,8 @@ class TParseBlocks : public TBoxedValue {
return status;
}
- const auto block = static_cast<NDB::Block*>(Input.GetResource());
+ const auto block = static_cast<NDB::Block*>(TupleSize ? Input.GetElement(0).GetResource() :
+ Input.GetResource());
if (CurrentRow >= block->rows()) {
CurrentRow = 0;
@@ -612,6 +683,16 @@ class TParseBlocks : public TBoxedValue {
*items++ = ConvertOutputValue(block->getByPosition(i).column.get(), OutMeta[i], TzId, ValueBuilder, CurrentRow);
}
+ if (TupleSize) {
+ TUnboxedValue* tupleItems = nullptr;
+ auto tuple = TupleCache.NewArray(*ValueBuilder, tupleItems);
+ *tupleItems++ = result;
+ for (ui32 i = 1; i < TupleSize; ++i) {
+ *tupleItems++ = Input.GetElement(i);
+ }
+ result = tuple;
+ }
+
++CurrentRow;
return EFetchStatus::Ok;
}
@@ -626,18 +707,20 @@ class TParseBlocks : public TBoxedValue {
const IValueBuilder* ValueBuilder;
const TUnboxedValue Stream;
const std::vector<TColumnMeta> OutMeta;
+ const ui32 TupleSize;
const TSourcePosition Pos;
const ui32 TzId;
TPlainArrayCache Cache;
+ TPlainArrayCache TupleCache;
TUnboxedValue Input;
size_t CurrentRow = 0U;
};
public:
- TParseBlocks(const TSourcePosition& pos, std::vector<TColumnMeta>&& outMeta)
- : Pos(pos), OutMeta(std::move(outMeta))
+ TParseBlocks(const TSourcePosition& pos, std::vector<TColumnMeta>&& outMeta, ui32 tupleSize)
+ : Pos(pos), OutMeta(std::move(outMeta)), TupleSize(tupleSize)
{}
TUnboxedValue Run(const IValueBuilder* valueBuilder, const TUnboxedValuePod* args) const final try {
@@ -648,7 +731,7 @@ public:
}
}
- return TUnboxedValuePod(new TStreamValue(valueBuilder, *args, OutMeta, Pos, tzId));
+ return TUnboxedValuePod(new TStreamValue(valueBuilder, *args, OutMeta, TupleSize, Pos, tzId));
}
catch (const Poco::Exception& e) {
UdfTerminate((TStringBuilder() << valueBuilder->WithCalleePosition(Pos) << " " << e.displayText()).data());
@@ -659,6 +742,94 @@ public:
private:
const TSourcePosition Pos;
const std::vector<TColumnMeta> OutMeta;
+ const ui32 TupleSize;
+};
+
+class TSerializeFormat : public TBoxedValue {
+ class TStreamValue : public TBoxedValue {
+ public:
+ TStreamValue(const IValueBuilder* valueBuilder, const TUnboxedValue& stream, const std::string& type, const NDB::FormatSettings& settings, const std::vector<TColumnMeta>& inMeta, const NDB::ColumnsWithTypeAndName& columns, const TSourcePosition& pos)
+ : ValueBuilder(valueBuilder)
+ , Stream(stream)
+ , InMeta(inMeta)
+ , Pos(pos)
+ , Buffer(std::make_unique<NDB::WriteBufferFromOwnString>())
+ , BlockStream(std::make_unique<NDB::OutputStreamToOutputFormat>(NDB::FormatFactory::instance().getOutputFormat(type, *Buffer, NDB::Block(columns), nullptr, {}, settings)))
+ , CurrentBlock(columns)
+ {
+ BlockStream->writePrefix();
+ }
+ private:
+ EFetchStatus Fetch(TUnboxedValue& result) final try {
+ if (IsFinished)
+ return EFetchStatus::Finish;
+
+ auto columns = CurrentBlock.mutateColumns();
+ for (TUnboxedValue row; !IsFinished;) {
+ switch (const auto status = Stream.Fetch(row)) {
+ case EFetchStatus::Yield:
+ return EFetchStatus::Yield;
+ case EFetchStatus::Ok:
+ for (auto i = 0U; i < columns.size(); ++i)
+ ConvertInputValue(row.GetElement(i), columns[i], InMeta[i]);
+ continue;
+ case EFetchStatus::Finish:
+ IsFinished = true;
+ BlockStream->writeSuffix();
+ BlockStream->flush();
+ break;
+ }
+ }
+
+ CurrentBlock.setColumns(std::move(columns));
+ BlockStream->write(CurrentBlock);
+ BlockStream->flush();
+ CurrentBlock = CurrentBlock.cloneEmpty();
+
+ result = ValueBuilder->NewString(Buffer->str());
+ Buffer->restart();
+ return EFetchStatus::Ok;
+ }
+ catch (const Poco::Exception& e) {
+ UdfTerminate((TStringBuilder() << ValueBuilder->WithCalleePosition(Pos) << " " << e.displayText()).data());
+ }
+ catch (const std::exception& e) {
+ UdfTerminate((TStringBuilder() << ValueBuilder->WithCalleePosition(Pos) << " " << e.what()).data());
+ }
+
+ const IValueBuilder* ValueBuilder;
+ const TUnboxedValue Stream;
+ const std::vector<TColumnMeta> InMeta;
+ const TSourcePosition Pos;
+
+ const std::unique_ptr<NDB::WriteBufferFromOwnString> Buffer;
+ const std::unique_ptr<NDB::IBlockOutputStream> BlockStream;
+
+ NDB::Block CurrentBlock;
+ bool IsFinished = false;
+ };
+
+public:
+ TSerializeFormat(const std::string_view& type, const std::string_view& settings, const TSourcePosition& pos, std::vector<TColumnMeta>&& inMeta, NDB::ColumnsWithTypeAndName&& columns)
+ : Type(type), Settings(GetFormatSettings(settings)), Pos(pos), InMeta(std::move(inMeta)), Columns(std::move(columns))
+ {}
+
+ TUnboxedValue Run(const IValueBuilder* valueBuilder, const TUnboxedValuePod* args) const final try {
+ return TUnboxedValuePod(new TStreamValue(valueBuilder, *args, Type, Settings, InMeta, Columns, Pos));
+ }
+ catch (const Poco::Exception& e) {
+ UdfTerminate((TStringBuilder() << valueBuilder->WithCalleePosition(Pos) << " " << e.displayText()).data());
+ }
+ catch (const std::exception& e) {
+ UdfTerminate((TStringBuilder() << valueBuilder->WithCalleePosition(Pos) << " " << e.what()).data());
+ }
+private:
+ const std::string Type;
+ const NDB::FormatSettings Settings;
+
+ const TSourcePosition Pos;
+ const std::vector<TColumnMeta> InMeta;
+ const NDB::ColumnsWithTypeAndName Columns;
};
struct TCHInitializer {
@@ -799,7 +970,7 @@ public:
TClickHouseClientModule() = default;
static const TStringRef& Name() {
- static const auto name = TStringRef::Of("ClickHouseClient");
+ static constexpr auto name = TStringRef::Of("ClickHouseClient");
return name;
}
@@ -810,6 +981,7 @@ public:
sink.Add(TStringRef::Of("ParseFormat"))->SetTypeAwareness();
sink.Add(TStringRef::Of("ParseBlocks"))->SetTypeAwareness();
sink.Add(TStringRef::Of("ParseFromYdb"))->SetTypeAwareness();
+ sink.Add(TStringRef::Of("SerializeFormat"))->SetTypeAwareness();
}
void BuildFunctionTypeInfo(
@@ -820,7 +992,6 @@ public:
IFunctionTypeInfoBuilder& builder) const final try {
LazyInitContext();
auto argBuilder = builder.Args();
-
if (name == "ToYqlType") {
argBuilder->Add<TUtf8>();
argBuilder->Add<TUtf8>();
@@ -852,14 +1023,32 @@ public:
return builder.SetError(sb);
}
+ ui32 tupleSize = 0;
+ TType* inputItemType = builder.Resource("ClickHouseClient.Block");
+
const auto resultType = userTypeInspector.GetElementType(2);
+ auto structType = TStructTypeInspector(*typeHelper, resultType);
+ if (!structType) {
+ if (const auto tupleType = TTupleTypeInspector(*typeHelper, resultType)) {
+ tupleSize = tupleType.GetElementsCount();
+ if (tupleSize > 0) {
+ structType = TStructTypeInspector(*typeHelper, tupleType.GetElementType(0));
+ auto tupleBuilder = builder.Tuple(tupleSize);
+ tupleBuilder->Add(inputItemType);
+ for (ui32 i = 1; i < tupleSize; ++i) {
+ tupleBuilder->Add(tupleType.GetElementType(i));
+ }
+ inputItemType = tupleBuilder->Build();
+ }
+ }
+ }
builder.UserType(userType);
- builder.Args()->Add(builder.Stream()->Item(builder.Resource("ClickHouseClient.Block"))).Add<TOptional<TUtf8>>().Done();
+ builder.Args()->Add(builder.Stream()->Item(inputItemType)).Add<TOptional<TUtf8>>().Done();
builder.OptionalArgs(1U);
builder.Returns(builder.Stream()->Item(resultType));
- if (const auto structType = TStructTypeInspector(*typeHelper, resultType)) {
+ if (structType) {
std::vector<TColumnMeta> outMeta(structType.GetMembersCount());
for (ui32 i = 0U; i < structType.GetMembersCount(); ++i) {
if (auto& meta = outMeta[i]; !GetDataType(*typeHelper, structType.GetMemberType(i), meta)) {
@@ -871,7 +1060,7 @@ public:
}
if (!(flags & TFlags::TypesOnly)) {
- builder.Implementation(new TParseBlocks(builder.GetSourcePosition(), std::move(outMeta)));
+ builder.Implementation(new TParseBlocks(builder.GetSourcePosition(), std::move(outMeta), tupleSize));
}
return;
} else {
@@ -898,14 +1087,32 @@ public:
return builder.SetError(sb);
}
+ ui32 tupleSize = 0;
+ TType* inputItemType = builder.Primitive(GetDataTypeInfo(EDataSlot::String).TypeId);
+
const auto resultType = userTypeInspector.GetElementType(2);
+ auto structType = TStructTypeInspector(*typeHelper, resultType);
+ if (!structType) {
+ if (const auto tupleType = TTupleTypeInspector(*typeHelper, resultType)) {
+ tupleSize = tupleType.GetElementsCount();
+ if (tupleSize > 0) {
+ structType = TStructTypeInspector(*typeHelper, tupleType.GetElementType(0));
+ auto tupleBuilder = builder.Tuple(tupleSize);
+ tupleBuilder->Add(inputItemType);
+ for (ui32 i = 1; i < tupleSize; ++i) {
+ tupleBuilder->Add(tupleType.GetElementType(i));
+ }
+ inputItemType = tupleBuilder->Build();
+ }
+ }
+ }
builder.UserType(userType);
- builder.Args()->Add(builder.Stream()->Item<char*>()).Add<TOptional<TUtf8>>().Done();
+ builder.Args()->Add(builder.Stream()->Item(inputItemType)).Add<TOptional<TUtf8>>().Done();
builder.OptionalArgs(1U);
builder.Returns(builder.Stream()->Item(resultType));
- if (const auto structType = TStructTypeInspector(*typeHelper, resultType)) {
+ if (structType) {
std::vector<TColumnMeta> outMeta(structType.GetMembersCount());
NDB::ColumnsWithTypeAndName columns(structType.GetMembersCount());
for (ui32 i = 0U; i < structType.GetMembersCount(); ++i) {
@@ -924,7 +1131,12 @@ public:
if (!(flags & TFlags::TypesOnly)) {
const std::string_view& typeCfg = typeConfig;
const auto jsonFrom = typeCfg.find('{');
- builder.Implementation(new TParseFormat(typeCfg.substr(0U, jsonFrom), std::string_view::npos == jsonFrom ? "" : typeCfg.substr(jsonFrom), builder.GetSourcePosition(), std::move(outMeta), std::move(columns)));
+ builder.Implementation(new TParseFormat(typeCfg.substr(0U, jsonFrom),
+ std::string_view::npos == jsonFrom ? "" : typeCfg.substr(jsonFrom),
+ builder.GetSourcePosition(),
+ std::move(outMeta),
+ std::move(columns),
+ tupleSize));
}
return;
} else {
@@ -933,6 +1145,58 @@ public:
TTypePrinter(*typeHelper, resultType).Out(sb.Out);
return builder.SetError(sb);
}
+ } else if (name == "SerializeFormat") {
+ const auto userTypeInspector = TTupleTypeInspector(*typeHelper, userType);
+ if (!userTypeInspector || userTypeInspector.GetElementsCount() < 1) {
+ return builder.SetError("Invalid user type.");
+ }
+
+ const auto argsTypeTuple = userTypeInspector.GetElementType(0);
+ const auto argsTypeInspector = TTupleTypeInspector(*typeHelper, argsTypeTuple);
+ if (!argsTypeInspector) {
+ return builder.SetError("Invalid user type - expected tuple.");
+ }
+
+ if (const auto argsCount = argsTypeInspector.GetElementsCount(); argsCount != 1) {
+ ::TStringBuilder sb;
+ sb << "Invalid user type - expected one or two arguments, got: " << argsCount;
+ return builder.SetError(sb);
+ }
+
+ const auto inputType = argsTypeInspector.GetElementType(0);
+
+ builder.UserType(userType);
+ builder.Args()->Add(inputType).Done();
+ builder.Returns(builder.Stream()->Item<char*>());
+
+ if (const auto structType = TStructTypeInspector(*typeHelper, TStreamTypeInspector(*typeHelper, inputType).GetItemType())) {
+ std::vector<TColumnMeta> outMeta(structType.GetMembersCount());
+ NDB::ColumnsWithTypeAndName columns(structType.GetMembersCount());
+ for (ui32 i = 0U; i < structType.GetMembersCount(); ++i) {
+ if (auto& meta = outMeta[i]; GetDataType(*typeHelper, structType.GetMemberType(i), meta)) {
+ auto& colsumn = columns[i];
+ colsumn.type = MetaToClickHouse(meta);
+ colsumn.name = structType.GetMemberName(i);
+ } else {
+ ::TStringBuilder sb;
+ sb << "Incompatible column '" << structType.GetMemberName(i) << "' type: ";
+ TTypePrinter(*typeHelper, structType.GetMemberType(i)).Out(sb.Out);
+ return builder.SetError(sb);
+ }
+ }
+
+ if (!(flags & TFlags::TypesOnly)) {
+ const std::string_view& typeCfg = typeConfig;
+ const auto jsonFrom = typeCfg.find('{');
+ builder.Implementation(new TSerializeFormat(typeCfg.substr(0U, jsonFrom), std::string_view::npos == jsonFrom ? "" : typeCfg.substr(jsonFrom), builder.GetSourcePosition(), std::move(outMeta), std::move(columns)));
+ }
+ return;
+ } else {
+ ::TStringBuilder sb;
+ sb << "Incompatible row type: ";
+ TTypePrinter(*typeHelper, inputType).Out(sb.Out);
+ return builder.SetError(sb);
+ }
} else if (name == "ParseFromYdb") {
builder.UserType(userType);
builder.Args()->Add(builder.Stream()->Item<char*>()).Add<TOptional<TUtf8>>().Done();
@@ -960,7 +1224,7 @@ public:
builder.Implementation(new TParseFromYdb(builder.GetSourcePosition(), std::move(columns)));
}
return;
- } else {
+ } else {
::TStringBuilder sb;
sb << "Incompatible row type: ";
TTypePrinter(*typeHelper, userType).Out(sb.Out);
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/src/Formats/registerFormats.cpp b/ydb/library/yql/udfs/common/clickhouse/client/src/Formats/registerFormats.cpp
index 70373cc27b..9dc0db6243 100644
--- a/ydb/library/yql/udfs/common/clickhouse/client/src/Formats/registerFormats.cpp
+++ b/ydb/library/yql/udfs/common/clickhouse/client/src/Formats/registerFormats.cpp
@@ -11,6 +11,7 @@ namespace NDB
void registerInputFormatProcessorNative(FormatFactory & factory);
void registerInputFormatProcessorJSONAsString(FormatFactory & factory);
void registerInputFormatProcessorJSONEachRow(FormatFactory & factory);
+void registerOutputFormatProcessorJSONEachRow(FormatFactory & factory);
void registerInputFormatProcessorRawBLOB(FormatFactory & factory);
void registerInputFormatProcessorORC(FormatFactory & factory);
void registerInputFormatProcessorArrow(FormatFactory & factory);
@@ -29,6 +30,7 @@ void registerFormats()
registerInputFormatProcessorNative(factory);
registerInputFormatProcessorJSONAsString(factory);
registerInputFormatProcessorJSONEachRow(factory);
+ registerOutputFormatProcessorJSONEachRow(factory);
registerInputFormatProcessorRawBLOB(factory);
registerInputFormatProcessorORC(factory);
registerInputFormatProcessorArrow(factory);
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.cpp b/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.cpp
new file mode 100644
index 0000000000..89479042f4
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.cpp
@@ -0,0 +1,142 @@
+#include <Poco/UTF8Encoding.h>
+#include <IO/WriteBufferValidUTF8.h>
+#include <Common/MemoryTracker.h>
+#include <common/types.h>
+
+#ifdef __SSE2__
+ #include <emmintrin.h>
+#endif
+
+
+namespace NDB
+{
+
+const size_t WriteBufferValidUTF8::DEFAULT_SIZE = 4096;
+
+/** Index into the table below with the first byte of a UTF-8 sequence to
+ * get the number of trailing bytes that are supposed to follow it.
+ * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
+ * left as-is for anyone who may want to do such conversion, which was
+ * allowed in earlier algorithms.
+ */
+extern const UInt8 length_of_utf8_sequence[256] =
+{
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6
+};
+
+
+WriteBufferValidUTF8::WriteBufferValidUTF8(
+ WriteBuffer & output_buffer_, bool group_replacements_, const char * replacement_, size_t size)
+ : BufferWithOwnMemory<WriteBuffer>(std::max(static_cast<size_t>(32), size)), output_buffer(output_buffer_),
+ group_replacements(group_replacements_), replacement(replacement_)
+{
+}
+
+
+inline void WriteBufferValidUTF8::putReplacement()
+{
+ if (replacement.empty() || (group_replacements && just_put_replacement))
+ return;
+
+ just_put_replacement = true;
+ output_buffer.write(replacement.data(), replacement.size());
+}
+
+
+inline void WriteBufferValidUTF8::putValid(char *data, size_t len)
+{
+ if (len == 0)
+ return;
+
+ just_put_replacement = false;
+ output_buffer.write(data, len);
+}
+
+
+void WriteBufferValidUTF8::nextImpl()
+{
+ char * p = memory.data();
+ char * valid_start = p;
+
+ while (p < pos)
+ {
+#ifdef __SSE2__
+ /// Fast skip of ASCII
+ static constexpr size_t SIMD_BYTES = 16;
+ const char * simd_end = p + (pos - p) / SIMD_BYTES * SIMD_BYTES;
+
+ while (p < simd_end && !_mm_movemask_epi8(_mm_loadu_si128(reinterpret_cast<const __m128i*>(p))))
+ p += SIMD_BYTES;
+
+ if (!(p < pos))
+ break;
+#endif
+
+ size_t len = length_of_utf8_sequence[static_cast<unsigned char>(*p)];
+
+ if (len > 4)
+ { // NOLINT
+ /// Invalid start of sequence. Skip one byte.
+ putValid(valid_start, p - valid_start);
+ putReplacement();
+ ++p;
+ valid_start = p;
+ }
+ else if (p + len > pos)
+ {
+ /// Sequence was not fully written to this buffer.
+ break;
+ }
+ else if (Poco::UTF8Encoding::isLegal(reinterpret_cast<unsigned char *>(p), len))
+ {
+ /// Valid sequence.
+ p += len;
+ }
+ else
+ {
+ /// Invalid sequence. Skip just first byte.
+ putValid(valid_start, p - valid_start);
+ putReplacement();
+ ++p;
+ valid_start = p;
+ }
+ }
+
+ putValid(valid_start, p - valid_start);
+
+ size_t cnt = pos - p;
+
+ /// Shift unfinished sequence to start of buffer.
+ for (size_t i = 0; i < cnt; ++i)
+ memory[i] = p[i];
+
+ working_buffer = Buffer(&memory[cnt], memory.data() + memory.size());
+}
+
+
+void WriteBufferValidUTF8::finish()
+{
+ /// Write all complete sequences from buffer.
+ nextImpl();
+
+ /// If unfinished sequence at end, then write replacement.
+ if (working_buffer.begin() != memory.data())
+ putReplacement();
+}
+
+
+WriteBufferValidUTF8::~WriteBufferValidUTF8()
+{
+ /// FIXME move final flush into the caller
+ MemoryTracker::LockExceptionInThread lock(VariableContext::Global);
+ finish();
+}
+
+}
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.h b/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.h
new file mode 100644
index 0000000000..0e13bb5de0
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/src/IO/WriteBufferValidUTF8.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <IO/WriteBuffer.h>
+#include <IO/BufferWithOwnMemory.h>
+
+
+namespace NDB
+{
+
+/** Writes the data to another buffer, replacing the invalid UTF-8 sequences with the specified sequence.
+ * If the valid UTF-8 is already written, it works faster.
+ * Note: before using the resulting string, destroy this object.
+ */
+class WriteBufferValidUTF8 final : public BufferWithOwnMemory<WriteBuffer>
+{
+private:
+ WriteBuffer & output_buffer;
+ bool group_replacements;
+ /// The last recorded character was `replacement`.
+ bool just_put_replacement = false;
+ std::string replacement;
+
+ void putReplacement();
+ void putValid(char * data, size_t len);
+
+ void nextImpl() override;
+ void finish();
+
+public:
+ static const size_t DEFAULT_SIZE;
+
+ WriteBufferValidUTF8(
+ WriteBuffer & output_buffer_,
+ bool group_replacements_ = true,
+ const char * replacement_ = "\xEF\xBF\xBD",
+ size_t size = DEFAULT_SIZE);
+
+ ~WriteBufferValidUTF8() override;
+};
+
+}
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.cpp b/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.cpp
new file mode 100644
index 0000000000..6bb86ee934
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.cpp
@@ -0,0 +1,157 @@
+#include <IO/WriteHelpers.h>
+#include <IO/WriteBufferValidUTF8.h>
+#include <Processors/Formats/Impl/JSONEachRowRowOutputFormat.h>
+#include <Formats/FormatFactory.h>
+
+
+namespace NDB
+{
+
+
+JSONEachRowRowOutputFormat::JSONEachRowRowOutputFormat(
+ WriteBuffer & out_,
+ const Block & header_,
+ const RowOutputFormatParams & params_,
+ const FormatSettings & settings_)
+ : IRowOutputFormat(header_, out_, params_),
+ settings(settings_)
+{
+ const auto & sample = getPort(PortKind::Main).getHeader();
+ size_t columns = sample.columns();
+ fields.resize(columns);
+
+ for (size_t i = 0; i < columns; ++i)
+ {
+ WriteBufferFromString buf(fields[i]);
+ writeJSONString(sample.getByPosition(i).name, buf, settings);
+ }
+}
+
+
+void JSONEachRowRowOutputFormat::writeField(const IColumn & column, const ISerialization & serialization, size_t row_num)
+{
+ writeString(fields[field_number], out);
+ writeChar(':', out);
+
+ if (settings.json.serialize_as_strings)
+ {
+ WriteBufferFromOwnString buf;
+
+ serialization.serializeText(column, row_num, buf, settings);
+ writeJSONString(buf.str(), out, settings);
+ }
+ else
+ serialization.serializeTextJSON(column, row_num, out, settings);
+
+ ++field_number;
+}
+
+
+void JSONEachRowRowOutputFormat::writeFieldDelimiter()
+{
+ writeChar(',', out);
+}
+
+
+void JSONEachRowRowOutputFormat::writeRowStartDelimiter()
+{
+ writeChar('{', out);
+}
+
+
+void JSONEachRowRowOutputFormat::writeRowEndDelimiter()
+{
+ // Why do we need this weird `if`?
+ //
+ // The reason is the formatRow function that is broken with respect to
+ // row-between delimiters. It should not write them, but it does, and then
+ // hacks around it by having a special formatRowNoNewline version, which, as
+ // you guessed, removes the newline from the end of row. But the row-between
+ // delimiter goes into a second row, so it turns out to be in the beginning
+ // of the line, and the removal doesn't work. There is also a second bug --
+ // the row-between delimiter in this format is written incorrectly. In fact,
+ // it is not written at all, and the newline is written in a row-end
+ // delimiter ("}\n" instead of the correct "}"). With these two bugs
+ // combined, the test 01420_format_row works perfectly.
+ //
+ // A proper implementation of formatRow would use IRowOutputFormat directly,
+ // and not write row-between delimiters, instead of using IOutputFormat
+ // processor and its crutch row callback. This would require exposing
+ // IRowOutputFormat, which we don't do now, but which can be generally useful
+ // for other cases such as parallel formatting, that also require a control
+ // flow different from the usual IOutputFormat.
+ //
+ // I just don't have time or energy to redo all of this, but I need to
+ // support JSON array output here, which requires proper ",\n" row-between
+ // delimiters. For compatibility, I preserve the bug in case of non-array
+ // output.
+ if (settings.json.array_of_rows)
+ {
+ writeCString("}", out);
+ }
+ else
+ {
+ writeCString("}\n", out);
+ }
+ field_number = 0;
+}
+
+
+void JSONEachRowRowOutputFormat::writeRowBetweenDelimiter()
+{
+ // We preserve an existing bug here for compatibility. See the comment above.
+ if (settings.json.array_of_rows)
+ {
+ writeCString(",\n", out);
+ }
+}
+
+
+void JSONEachRowRowOutputFormat::writePrefix()
+{
+ if (settings.json.array_of_rows)
+ {
+ writeCString("[\n", out);
+ }
+}
+
+
+void JSONEachRowRowOutputFormat::writeSuffix()
+{
+ if (settings.json.array_of_rows)
+ {
+ writeCString("\n]\n", out);
+ }
+}
+
+
+void registerOutputFormatProcessorJSONEachRow(FormatFactory & factory)
+{
+ factory.registerOutputFormatProcessor("json_each_row", [](
+ WriteBuffer & buf,
+ const Block & sample,
+ const RowOutputFormatParams & params,
+ const FormatSettings & _format_settings)
+ {
+ FormatSettings settings = _format_settings;
+ settings.json.serialize_as_strings = false;
+ return std::make_shared<JSONEachRowRowOutputFormat>(buf, sample, params,
+ settings);
+ });
+ factory.markOutputFormatSupportsParallelFormatting("json_each_row");
+
+ factory.registerOutputFormatProcessor("JSONStringsEachRow", [](
+ WriteBuffer & buf,
+ const Block & sample,
+ const RowOutputFormatParams & params,
+ const FormatSettings & _format_settings)
+ {
+ FormatSettings settings = _format_settings;
+ settings.json.serialize_as_strings = true;
+ return std::make_shared<JSONEachRowRowOutputFormat>(buf, sample, params,
+ settings);
+ });
+ factory.markOutputFormatSupportsParallelFormatting("JSONStringEachRow");
+}
+
+}
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.h b/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.h
new file mode 100644
index 0000000000..133b7b8323
--- /dev/null
+++ b/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/Impl/JSONEachRowRowOutputFormat.h
@@ -0,0 +1,47 @@
+#pragma once
+
+#include <Core/Block.h>
+#include <IO/WriteBuffer.h>
+#include <Processors/Formats/IRowOutputFormat.h>
+#include <Formats/FormatSettings.h>
+
+
+namespace NDB
+{
+
+/** The stream for outputting data in JSON format, by object per line.
+ * Does not validate UTF-8.
+ */
+class JSONEachRowRowOutputFormat : public IRowOutputFormat
+{
+public:
+ JSONEachRowRowOutputFormat(
+ WriteBuffer & out_,
+ const Block & header_,
+ const RowOutputFormatParams & params_,
+ const FormatSettings & settings_);
+
+ String getName() const override { return "JSONEachRowRowOutputFormat"; }
+
+ void writeField(const IColumn & column, const ISerialization & serialization, size_t row_num) override;
+ void writeFieldDelimiter() override;
+ void writeRowStartDelimiter() override;
+ void writeRowEndDelimiter() override;
+ void writeRowBetweenDelimiter() override;
+ void writePrefix() override;
+ void writeSuffix() override;
+
+protected:
+ /// No totals and extremes.
+ void consumeTotals(Chunk) override {}
+ void consumeExtremes(Chunk) override {}
+
+ size_t field_number = 0;
+
+private:
+ Names fields;
+
+ FormatSettings settings;
+};
+
+}
diff --git a/ydb/library/yql/udfs/common/clickhouse/client/src/Formats/InputStreamFromInputFormat.h b/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/InputStreamFromInputFormat.h
index de41f52cd7..de41f52cd7 100644
--- a/ydb/library/yql/udfs/common/clickhouse/client/src/Formats/InputStreamFromInputFormat.h
+++ b/ydb/library/yql/udfs/common/clickhouse/client/src/Processors/Formats/InputStreamFromInputFormat.h
diff --git a/ydb/library/yql/udfs/common/hyperscan/CMakeLists.txt b/ydb/library/yql/udfs/common/hyperscan/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/udfs/common/hyperscan/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/hyperscan/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/udfs/common/ip_base/CMakeLists.txt b/ydb/library/yql/udfs/common/ip_base/CMakeLists.txt
index db3d806c4a..5ad0b9c3c2 100644
--- a/ydb/library/yql/udfs/common/ip_base/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/ip_base/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
add_library(ip_udf INTERFACE)
target_link_libraries(ip_udf INTERFACE
diff --git a/ydb/library/yql/udfs/common/math/CMakeLists.txt b/ydb/library/yql/udfs/common/math/CMakeLists.txt
index d3a7c8e939..934b4baf1b 100644
--- a/ydb/library/yql/udfs/common/math/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/math/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
add_library(math_udf INTERFACE)
target_link_libraries(math_udf INTERFACE
diff --git a/ydb/library/yql/udfs/common/stat/CMakeLists.txt b/ydb/library/yql/udfs/common/stat/CMakeLists.txt
index 5dbdb478b8..1456cc4c58 100644
--- a/ydb/library/yql/udfs/common/stat/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/stat/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(static)
+add_subdirectory(ut)
add_library(stat_udf INTERFACE)
target_link_libraries(stat_udf INTERFACE
diff --git a/ydb/library/yql/udfs/common/stat/ut/CMakeLists.txt b/ydb/library/yql/udfs/common/stat/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/udfs/common/stat/ut/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/stat/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/udfs/common/topfreq/CMakeLists.txt b/ydb/library/yql/udfs/common/topfreq/CMakeLists.txt
index d5c94b1b45..39c8b65853 100644
--- a/ydb/library/yql/udfs/common/topfreq/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/topfreq/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(static)
+add_subdirectory(ut)
add_library(topfreq_udf INTERFACE)
target_link_libraries(topfreq_udf INTERFACE
diff --git a/ydb/library/yql/udfs/common/topfreq/ut/CMakeLists.txt b/ydb/library/yql/udfs/common/topfreq/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/udfs/common/topfreq/ut/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/topfreq/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/udfs/common/unicode_base/CMakeLists.txt b/ydb/library/yql/udfs/common/unicode_base/CMakeLists.txt
index 224d1897bb..c09f932d53 100644
--- a/ydb/library/yql/udfs/common/unicode_base/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/unicode_base/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
add_library(unicode_udf INTERFACE)
target_link_libraries(unicode_udf INTERFACE
diff --git a/ydb/library/yql/udfs/common/url_base/CMakeLists.txt b/ydb/library/yql/udfs/common/url_base/CMakeLists.txt
index 0dda25627c..a8d3e3f5b9 100644
--- a/ydb/library/yql/udfs/common/url_base/CMakeLists.txt
+++ b/ydb/library/yql/udfs/common/url_base/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(lib)
add_library(url_udf INTERFACE)
target_link_libraries(url_udf INTERFACE
diff --git a/ydb/library/yql/udfs/logs/CMakeLists.txt b/ydb/library/yql/udfs/logs/CMakeLists.txt
new file mode 100644
index 0000000000..606404041f
--- /dev/null
+++ b/ydb/library/yql/udfs/logs/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(dsv)
diff --git a/ydb/library/yql/utils/CMakeLists.txt b/ydb/library/yql/utils/CMakeLists.txt
index d9c4f5fd3d..3934652161 100644
--- a/ydb/library/yql/utils/CMakeLists.txt
+++ b/ydb/library/yql/utils/CMakeLists.txt
@@ -6,6 +6,14 @@
# original buildsystem will not be accepted.
+add_subdirectory(actor_log)
+add_subdirectory(actors)
+add_subdirectory(backtrace)
+add_subdirectory(failure_injector)
+add_subdirectory(fetch)
+add_subdirectory(log)
+add_subdirectory(threading)
+add_subdirectory(ut)
add_library(library-yql-utils)
target_link_libraries(library-yql-utils PUBLIC
diff --git a/ydb/library/yql/utils/actors/CMakeLists.txt b/ydb/library/yql/utils/actors/CMakeLists.txt
index 44220aa831..85f2c73c68 100644
--- a/ydb/library/yql/utils/actors/CMakeLists.txt
+++ b/ydb/library/yql/utils/actors/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yql-utils-actors)
target_link_libraries(yql-utils-actors PUBLIC
diff --git a/ydb/library/yql/utils/actors/ut/CMakeLists.txt b/ydb/library/yql/utils/actors/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/utils/actors/ut/CMakeLists.txt
+++ b/ydb/library/yql/utils/actors/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/utils/failure_injector/CMakeLists.txt b/ydb/library/yql/utils/failure_injector/CMakeLists.txt
index 1b9aac18c8..0877b32a07 100644
--- a/ydb/library/yql/utils/failure_injector/CMakeLists.txt
+++ b/ydb/library/yql/utils/failure_injector/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yql-utils-failure_injector)
target_link_libraries(yql-utils-failure_injector PUBLIC
diff --git a/ydb/library/yql/utils/failure_injector/ut/CMakeLists.txt b/ydb/library/yql/utils/failure_injector/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/utils/failure_injector/ut/CMakeLists.txt
+++ b/ydb/library/yql/utils/failure_injector/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/utils/log/CMakeLists.txt b/ydb/library/yql/utils/log/CMakeLists.txt
index caa2afeb90..be1cdcefab 100644
--- a/ydb/library/yql/utils/log/CMakeLists.txt
+++ b/ydb/library/yql/utils/log/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(yql-utils-log)
target_link_libraries(yql-utils-log PUBLIC
diff --git a/ydb/library/yql/utils/log/ut/CMakeLists.txt b/ydb/library/yql/utils/log/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/utils/log/ut/CMakeLists.txt
+++ b/ydb/library/yql/utils/log/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/library/yql/utils/ut/CMakeLists.txt b/ydb/library/yql/utils/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/library/yql/utils/ut/CMakeLists.txt
+++ b/ydb/library/yql/utils/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/CMakeLists.txt b/ydb/public/CMakeLists.txt
new file mode 100644
index 0000000000..e7a4fe2e5f
--- /dev/null
+++ b/ydb/public/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(api)
+add_subdirectory(lib)
+add_subdirectory(sdk)
diff --git a/ydb/public/api/CMakeLists.txt b/ydb/public/api/CMakeLists.txt
new file mode 100644
index 0000000000..bd2e57c6b5
--- /dev/null
+++ b/ydb/public/api/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(grpc)
+add_subdirectory(protos)
diff --git a/ydb/public/api/grpc/CMakeLists.txt b/ydb/public/api/grpc/CMakeLists.txt
index f3f8fd2ca0..ff65665973 100644
--- a/ydb/public/api/grpc/CMakeLists.txt
+++ b/ydb/public/api/grpc/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(draft)
add_library(api-grpc)
set_property(TARGET api-grpc PROPERTY
@@ -31,6 +32,7 @@ target_proto_messages(api-grpc PRIVATE
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/ydb_scheme_v1.proto
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/ydb_scripting_v1.proto
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/ydb_table_v1.proto
+ ${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/ydb_topic_v1.proto
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/yq_v1.proto
)
target_proto_addincls(api-grpc
diff --git a/ydb/public/api/grpc/draft/CMakeLists.txt b/ydb/public/api/grpc/draft/CMakeLists.txt
index 2093014f61..8cb8f24ea2 100644
--- a/ydb/public/api/grpc/draft/CMakeLists.txt
+++ b/ydb/public/api/grpc/draft/CMakeLists.txt
@@ -23,7 +23,6 @@ target_proto_messages(api-grpc-draft PRIVATE
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/draft/dummy.proto
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/draft/ydb_clickhouse_internal_v1.proto
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/draft/ydb_persqueue_v1.proto
- ${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/draft/ydb_topic_v1.proto
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/draft/ydb_datastreams_v1.proto
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/draft/ydb_experimental_v1.proto
${CMAKE_SOURCE_DIR}/ydb/public/api/grpc/draft/ydb_s3_internal_v1.proto
diff --git a/ydb/public/api/grpc/draft/ydb_datastreams_v1.proto b/ydb/public/api/grpc/draft/ydb_datastreams_v1.proto
index 069ee7ad4c..c87857ea48 100644
--- a/ydb/public/api/grpc/draft/ydb_datastreams_v1.proto
+++ b/ydb/public/api/grpc/draft/ydb_datastreams_v1.proto
@@ -30,6 +30,8 @@ service DataStreamsService {
rpc DecreaseStreamRetentionPeriod(DecreaseStreamRetentionPeriodRequest) returns (DecreaseStreamRetentionPeriodResponse);
rpc IncreaseStreamRetentionPeriod(IncreaseStreamRetentionPeriodRequest) returns (IncreaseStreamRetentionPeriodResponse);
rpc UpdateShardCount(UpdateShardCountRequest) returns (UpdateShardCountResponse);
+ rpc UpdateStreamMode(UpdateStreamModeRequest) returns (UpdateStreamModeResponse);
+
// stream consumer methods
rpc RegisterStreamConsumer(RegisterStreamConsumerRequest) returns (RegisterStreamConsumerResponse);
rpc DeregisterStreamConsumer(DeregisterStreamConsumerRequest) returns (DeregisterStreamConsumerResponse);
diff --git a/ydb/public/api/grpc/draft/ydb_topic_v1.proto b/ydb/public/api/grpc/ydb_topic_v1.proto
index d119b3b459..d119b3b459 100644
--- a/ydb/public/api/grpc/draft/ydb_topic_v1.proto
+++ b/ydb/public/api/grpc/ydb_topic_v1.proto
diff --git a/ydb/public/api/protos/CMakeLists.txt b/ydb/public/api/protos/CMakeLists.txt
index 797619ffbd..9096201adf 100644
--- a/ydb/public/api/protos/CMakeLists.txt
+++ b/ydb/public/api/protos/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(annotations)
+add_subdirectory(out)
add_library(api-protos)
target_link_libraries(api-protos PUBLIC
diff --git a/ydb/public/api/protos/draft/datastreams.proto b/ydb/public/api/protos/draft/datastreams.proto
index 01a0e5ec70..a995fb24a2 100644
--- a/ydb/public/api/protos/draft/datastreams.proto
+++ b/ydb/public/api/protos/draft/datastreams.proto
@@ -16,6 +16,7 @@ enum EFieldTransformationType {
TRANSFORM_EMPTY_TO_NOTHING = 3;
}
+
extend google.protobuf.FieldOptions {
EFieldTransformationType FieldTransformer = 58123;
}
@@ -28,6 +29,13 @@ enum EncryptionType {
KMS = 2;
}
+enum StreamMode {
+ STREAM_MODE_UNDEFINED = 0;
+ PROVISIONED = 1;
+ ON_DEMAND = 2;
+}
+
+
message EnhancedMetrics {
// List of shard-level metrics
repeated string shard_level_metrics = 1;
@@ -103,8 +111,15 @@ message StreamDescription {
StreamStatus stream_status = 9;
// Name of the stream
string stream_name = 10;
+ // YDS-specific Write quota in KB/S
int32 write_quota_kb_per_sec = 11;
+ // YDS-specific Owner of the stream
string owner = 12;
+ // YDS-specific Storage limit in MB of the stream
+ int64 storage_limit_mb = 13;
+
+ // stream metering mode
+ StreamModeDetails stream_mode_details = 14;
}
// Represents range of possible sequence numbers for the shard
@@ -253,6 +268,11 @@ message Tag {
string value = 2;
}
+// Represents stream mode details
+message StreamModeDetails {
+ StreamMode stream_mode = 1;
+}
+
message CreateStreamRequest {
Ydb.Operations.OperationParams operation_params = 1;
// Name of the stream
@@ -267,6 +287,8 @@ message CreateStreamRequest {
// Retention storage in megabytes
int32 retention_storage_megabytes = 6;
}
+ // stream metering mode
+ StreamModeDetails stream_mode_details = 7;
}
message CreateStreamResponse {
@@ -371,6 +393,9 @@ message UpdateStreamRequest {
// Retention storage in megabytes
int32 retention_storage_megabytes = 6;
}
+ // stream metering mode
+ StreamModeDetails stream_mode_details = 7;
+
}
message UpdateStreamResponse {
@@ -864,3 +889,23 @@ message UpdateShardCountResult {
// Updated number of shards
int32 target_shard_count = 3;
}
+
+
+message UpdateStreamModeRequest {
+ Ydb.Operations.OperationParams operation_params = 1;
+ // Stream name or arn
+ string stream_arn = 2;
+ // stream metering mode
+ StreamModeDetails stream_mode_details = 3;
+
+
+}
+
+message UpdateStreamModeResponse {
+ // Result of request will be inside operation.
+ Ydb.Operations.Operation operation = 1;
+}
+
+message UpdateStreamModeResult {
+}
+
diff --git a/ydb/public/api/protos/ydb_export.proto b/ydb/public/api/protos/ydb_export.proto
index ca1d796929..4e7d33c2bd 100644
--- a/ydb/public/api/protos/ydb_export.proto
+++ b/ydb/public/api/protos/ydb_export.proto
@@ -111,6 +111,9 @@ message ExportToS3Settings {
// - zstd.
// - zstd-N, where N is compression level, e.g. zstd-3.
string compression = 10;
+
+ // Region to use in requests
+ string region = 11;
}
message ExportToS3Result {
diff --git a/ydb/public/api/protos/ydb_table.proto b/ydb/public/api/protos/ydb_table.proto
index efc4c8b46a..1bce7e444f 100644
--- a/ydb/public/api/protos/ydb_table.proto
+++ b/ydb/public/api/protos/ydb_table.proto
@@ -692,11 +692,16 @@ message OnlineModeSettings {
message StaleModeSettings {
}
+
+message SnapshotModeSettings {
+}
+
message TransactionSettings {
oneof tx_mode {
SerializableModeSettings serializable_read_write = 1;
OnlineModeSettings online_read_only = 2;
StaleModeSettings stale_read_only = 3;
+ SnapshotModeSettings snapshot_read_only = 4;
}
}
diff --git a/ydb/public/api/protos/ydb_topic.proto b/ydb/public/api/protos/ydb_topic.proto
index d55a4d882e..9b13a292e6 100644
--- a/ydb/public/api/protos/ydb_topic.proto
+++ b/ydb/public/api/protos/ydb_topic.proto
@@ -348,6 +348,8 @@ message StreamReadMessage {
// Compressed client message body.
bytes data = 5;
// Uncompressed size of client message body.
+ // sent as is from WriteRequest, without check on server side. May be empty (for writes from old client) or wrong (if bug in writer).
+ // Use it for optimization purposes only, don't trust it.
int64 uncompressed_size = 6;
// Filled if message_group_id was set on message write.
@@ -557,6 +559,16 @@ message AlterPartitioningSettings {
optional int64 set_partition_count_limit = 2 [(Ydb.value) = ">= 0"];
}
+// Metering mode specifies the method used to determine consumption of resources by the topic.
+// This settings will have an effect only in a serverless database.
+enum MeteringMode {
+ // Use default
+ METERING_MODE_UNSPECIFIED = 0;
+ // Metering based on resource reservation
+ METERING_MODE_RESERVED_CAPACITY = 1;
+ // Metering based on actual consumption. Default.
+ METERING_MODE_REQUEST_UNITS = 2;
+}
// Create topic request sent from client to server.
message CreateTopicRequest {
@@ -593,6 +605,9 @@ message CreateTopicRequest {
// List of consumers for this topic.
repeated Consumer consumers = 11 [(Ydb.size).le = 3000];
+
+ // Metering mode for the topic in a serverless database.
+ MeteringMode metering_mode = 12;
}
// Create topic response sent from server to client.
@@ -660,6 +675,9 @@ message DescribeTopicResult {
// List of consumers for this topic.
repeated Consumer consumers = 11;
+ // Metering settings.
+ MeteringMode metering_mode = 12;
+
message PartitionInfo {
// Partition identifier.
int64 partition_id = 1;
@@ -706,10 +724,13 @@ message AlterTopicRequest {
// Add consumers.
repeated Consumer add_consumers = 11 [(Ydb.size).le = 3000];
- // Remove consumers (by its names)
+ // Remove consumers (by their names)
repeated string drop_consumers = 12 [(Ydb.size).le = 3000];
// Alter consumers
repeated AlterConsumer alter_consumers = 13 [(Ydb.size).le = 3000];
+
+ // Set metering mode for topic in serverless database.
+ MeteringMode set_metering_mode = 14;
}
// Update topic response sent from server to client.
diff --git a/ydb/public/lib/CMakeLists.txt b/ydb/public/lib/CMakeLists.txt
new file mode 100644
index 0000000000..522a7bed4c
--- /dev/null
+++ b/ydb/public/lib/CMakeLists.txt
@@ -0,0 +1,21 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(base)
+add_subdirectory(deprecated)
+add_subdirectory(experimental)
+add_subdirectory(idx_test)
+add_subdirectory(json_value)
+add_subdirectory(jwt)
+add_subdirectory(operation_id)
+add_subdirectory(scheme_types)
+add_subdirectory(validation)
+add_subdirectory(value)
+add_subdirectory(ydb_cli)
+add_subdirectory(yq)
+add_subdirectory(yson_value)
diff --git a/ydb/public/lib/deprecated/CMakeLists.txt b/ydb/public/lib/deprecated/CMakeLists.txt
new file mode 100644
index 0000000000..e13c69715c
--- /dev/null
+++ b/ydb/public/lib/deprecated/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(client)
+add_subdirectory(kicli)
diff --git a/ydb/public/lib/deprecated/kicli/CMakeLists.txt b/ydb/public/lib/deprecated/kicli/CMakeLists.txt
index e950d93709..44ca41f859 100644
--- a/ydb/public/lib/deprecated/kicli/CMakeLists.txt
+++ b/ydb/public/lib/deprecated/kicli/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(lib-deprecated-kicli)
target_link_libraries(lib-deprecated-kicli PUBLIC
diff --git a/ydb/public/lib/deprecated/kicli/cpp_ut.cpp b/ydb/public/lib/deprecated/kicli/cpp_ut.cpp
index cb7dc3ed6d..a4f5e480ba 100644
--- a/ydb/public/lib/deprecated/kicli/cpp_ut.cpp
+++ b/ydb/public/lib/deprecated/kicli/cpp_ut.cpp
@@ -1472,9 +1472,9 @@ Y_UNIT_TEST_SUITE(ClientLib) {
'('Rank rank)
'('UrlHash urlHash)))
(let column1 '('UrlHash))
- (let range '('IncFrom '('ShardId shardId (Void))
- '('HostTitleHash hostTitleHash (Void))
- '('GroupSimHash groupSimHash (Void))
+ (let range '('ExcFrom 'IncTo '('ShardId shardId (Void))
+ '('HostTitleHash hostTitleHash (Void))
+ '('GroupSimHash groupSimHash (Void))
))
(let column2 '('UrlHash))
(let options '('('ItemsLimit (Uint64 '1))))
@@ -1510,6 +1510,9 @@ Y_UNIT_TEST_SUITE(ClientLib) {
{
using namespace NClient;
+ Y_UNUSED(includeFrom);
+ Y_UNUSED(includeTo);
+
auto rawq = kikimr.Query(
Sprintf(R"___(
(
@@ -1524,8 +1527,8 @@ Y_UNIT_TEST_SUITE(ClientLib) {
(return pgmReturn)
)
)___",
- includeFrom ? "IncFrom" : "ExcFrom",
- includeTo ? "IncTo" : "ExcTo"
+ "ExcFrom" /* incomplete From is always non-inclusive */,
+ "IncTo" /* incomplete To is always inclusive */
));
auto q = rawq.SyncPrepare();
UNIT_ASSERT_VALUES_EQUAL_C(q.GetStatus(), NMsgBusProxy::MSTATUS_OK, q.GetError().GetMessage().c_str());
diff --git a/ydb/public/lib/deprecated/kicli/ut/CMakeLists.txt b/ydb/public/lib/deprecated/kicli/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/lib/deprecated/kicli/ut/CMakeLists.txt
+++ b/ydb/public/lib/deprecated/kicli/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/lib/idx_test/CMakeLists.txt b/ydb/public/lib/idx_test/CMakeLists.txt
index 3d2f7fe494..8e1e89668d 100644
--- a/ydb/public/lib/idx_test/CMakeLists.txt
+++ b/ydb/public/lib/idx_test/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(public-lib-idx_test)
target_link_libraries(public-lib-idx_test PUBLIC
diff --git a/ydb/public/lib/idx_test/ut/CMakeLists.txt b/ydb/public/lib/idx_test/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/lib/idx_test/ut/CMakeLists.txt
+++ b/ydb/public/lib/idx_test/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/lib/json_value/CMakeLists.txt b/ydb/public/lib/json_value/CMakeLists.txt
index 0ddec99749..5a8f7be33d 100644
--- a/ydb/public/lib/json_value/CMakeLists.txt
+++ b/ydb/public/lib/json_value/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(public-lib-json_value)
target_link_libraries(public-lib-json_value PUBLIC
diff --git a/ydb/public/lib/json_value/ut/CMakeLists.txt b/ydb/public/lib/json_value/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/lib/json_value/ut/CMakeLists.txt
+++ b/ydb/public/lib/json_value/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/lib/operation_id/CMakeLists.txt b/ydb/public/lib/operation_id/CMakeLists.txt
index 53e4258aff..f1618439af 100644
--- a/ydb/public/lib/operation_id/CMakeLists.txt
+++ b/ydb/public/lib/operation_id/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
+add_subdirectory(ut)
add_library(public-lib-operation_id)
target_link_libraries(public-lib-operation_id PUBLIC
diff --git a/ydb/public/lib/operation_id/ut/CMakeLists.txt b/ydb/public/lib/operation_id/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/lib/operation_id/ut/CMakeLists.txt
+++ b/ydb/public/lib/operation_id/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/lib/validation/CMakeLists.darwin.txt b/ydb/public/lib/validation/CMakeLists.darwin.txt
index 09ea99424f..1919b69f25 100644
--- a/ydb/public/lib/validation/CMakeLists.darwin.txt
+++ b/ydb/public/lib/validation/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_executable(validation)
target_link_libraries(validation PUBLIC
diff --git a/ydb/public/lib/validation/CMakeLists.linux.txt b/ydb/public/lib/validation/CMakeLists.linux.txt
index ce93be5a66..853c21fadc 100644
--- a/ydb/public/lib/validation/CMakeLists.linux.txt
+++ b/ydb/public/lib/validation/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_executable(validation)
target_link_libraries(validation PUBLIC
diff --git a/ydb/public/lib/validation/CMakeLists.txt b/ydb/public/lib/validation/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/lib/validation/CMakeLists.txt
+++ b/ydb/public/lib/validation/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/lib/validation/ut/CMakeLists.darwin.txt b/ydb/public/lib/validation/ut/CMakeLists.darwin.txt
index 4d4ec127e1..da7292ea50 100644
--- a/ydb/public/lib/validation/ut/CMakeLists.darwin.txt
+++ b/ydb/public/lib/validation/ut/CMakeLists.darwin.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
add_executable(ydb-public-lib-validation-ut)
target_include_directories(ydb-public-lib-validation-ut PRIVATE
diff --git a/ydb/public/lib/validation/ut/CMakeLists.linux.txt b/ydb/public/lib/validation/ut/CMakeLists.linux.txt
index 2c016f9238..2224ef9df5 100644
--- a/ydb/public/lib/validation/ut/CMakeLists.linux.txt
+++ b/ydb/public/lib/validation/ut/CMakeLists.linux.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(protos)
add_executable(ydb-public-lib-validation-ut)
target_include_directories(ydb-public-lib-validation-ut PRIVATE
diff --git a/ydb/public/lib/validation/ut/CMakeLists.txt b/ydb/public/lib/validation/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/lib/validation/ut/CMakeLists.txt
+++ b/ydb/public/lib/validation/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/lib/ydb_cli/CMakeLists.txt b/ydb/public/lib/ydb_cli/CMakeLists.txt
new file mode 100644
index 0000000000..48130d110a
--- /dev/null
+++ b/ydb/public/lib/ydb_cli/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(commands)
+add_subdirectory(common)
+add_subdirectory(dump)
+add_subdirectory(import)
diff --git a/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp b/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp
index f9f2a16e85..76bb4db7c7 100644
--- a/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp
+++ b/ydb/public/lib/ydb_cli/commands/ydb_profile.cpp
@@ -420,6 +420,9 @@ void TCommandDeleteProfile::Config(TConfig& config) {
config.SetFreeArgsMax(1);
SetFreeArgTitle(0, "<name>", "Profile name (case sensitive)");
+
+ config.Opts->AddLongOption('f', "force", "Ignore nonexistent profiles, never prompt")
+ .StoreTrue(&Force);
}
void TCommandDeleteProfile::Parse(TConfig& config) {
@@ -427,6 +430,9 @@ void TCommandDeleteProfile::Parse(TConfig& config) {
if (config.ParseResult->GetFreeArgCount()) {
ProfileName = config.ParseResult->GetFreeArgs()[0];
}
+ if (Force && !ProfileName) {
+ throw TMisuseException() << "Profile name was not specified while using --force option.";
+ }
}
int TCommandDeleteProfile::Run(TConfig& config) {
@@ -435,6 +441,9 @@ int TCommandDeleteProfile::Run(TConfig& config) {
const auto profileNames = profileManager->ListProfiles();
if (ProfileName) {
if (find(profileNames.begin(), profileNames.end(), ProfileName) == profileNames.end()) {
+ if (Force) {
+ return EXIT_SUCCESS;
+ }
Cerr << "No existing profile \"" << ProfileName << "\". "
<< "Run \"ydb config profile list\" without arguments to see existing profiles" << Endl;
return EXIT_FAILURE;
@@ -470,18 +479,21 @@ int TCommandDeleteProfile::Run(TConfig& config) {
return EXIT_FAILURE;
}
}
-
- Cout << "Profile \"" << ProfileName << "\" will be permanently removed. Continue? (y/n): ";
- if (AskYesOrNo()) {
- if (profileManager->RemoveProfile(ProfileName)) {
- Cout << "Profile \"" << ProfileName << "\" was removed." << Endl;
+ if (Force) {
+ profileManager->RemoveProfile(ProfileName);
+ } else {
+ Cout << "Profile \"" << ProfileName << "\" will be permanently removed. Continue? (y/n): ";
+ if (AskYesOrNo()) {
+ if (profileManager->RemoveProfile(ProfileName)) {
+ Cout << "Profile \"" << ProfileName << "\" was removed." << Endl;
+ } else {
+ Cerr << "Profile \"" << ProfileName << "\" was not removed." << Endl;
+ return EXIT_FAILURE;
+ }
} else {
- Cerr << "Profile \"" << ProfileName << "\" was not removed." << Endl;
- return EXIT_FAILURE;
+ Cout << "Nothing is done." << Endl;
+ return EXIT_SUCCESS;
}
- } else {
- Cout << "Nothing is done." << Endl;
- return EXIT_SUCCESS;
}
return EXIT_SUCCESS;
diff --git a/ydb/public/lib/ydb_cli/commands/ydb_profile.h b/ydb/public/lib/ydb_cli/commands/ydb_profile.h
index 1d556f5585..5d0bbcdf45 100644
--- a/ydb/public/lib/ydb_cli/commands/ydb_profile.h
+++ b/ydb/public/lib/ydb_cli/commands/ydb_profile.h
@@ -45,6 +45,7 @@ public:
private:
TString ProfileName;
+ bool Force = false;
};
class TCommandActivateProfile : public TClientCommand {
@@ -65,7 +66,7 @@ public:
virtual int Run(TConfig& config) override;
private:
- bool WithContent;
+ bool WithContent = false;
};
class TCommandGetProfile : public TClientCommand {
diff --git a/ydb/public/lib/ydb_cli/common/CMakeLists.txt b/ydb/public/lib/ydb_cli/common/CMakeLists.txt
index d5db1ed31e..c90c7fb747 100644
--- a/ydb/public/lib/ydb_cli/common/CMakeLists.txt
+++ b/ydb/public/lib/ydb_cli/common/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(common)
target_link_libraries(common PUBLIC
diff --git a/ydb/public/lib/ydb_cli/common/command.h b/ydb/public/lib/ydb_cli/common/command.h
index 5f3251a839..1d198478b3 100644
--- a/ydb/public/lib/ydb_cli/common/command.h
+++ b/ydb/public/lib/ydb_cli/common/command.h
@@ -131,6 +131,16 @@ public:
return lastArg == "--help" || lastArg == "-h" || lastArg == "-?";
}
+ bool IsYdbCommand() const {
+ for (int i = 0; i < InitialArgC; ++i) {
+ TString arg = InitialArgV[i];
+ if (arg.EndsWith("ydb") || arg.EndsWith("ydb.exe")) {
+ return true;
+ }
+ }
+ return false;
+ }
+
bool IsSvnVersionCommand() const {
TString lastArg = ArgV[ArgC - 1];
return lastArg == "--svnrevision" || lastArg == "-V";
@@ -153,27 +163,11 @@ public:
}
bool IsInitCommand() const {
- TString lastArg = InitialArgV[InitialArgC - 1];
- if (lastArg == "init" && InitialArgC > 1) {
- TString penultimateArg = InitialArgV[InitialArgC - 2];
- if (penultimateArg.EndsWith("ydb") || penultimateArg.EndsWith("ydb.exe")) {
- return true;
- }
- }
- return false;
+ return HasArgs({ "init" }) && !HasArgs({ "workload" });
}
bool IsProfileCommand() const {
- for (int i = 1; i < 3; ++i) {
- if (ArgC <= i) {
- return false;
- }
- TString currentArg = ArgV[ArgC - i - 1];
- if (currentArg == "profile") {
- return true;
- }
- }
- return false;
+ return HasArgs({ "profile" });
}
bool IsLicenseCommand() const {
@@ -191,8 +185,15 @@ public:
return lastArg == "--help-ex";
}
+ // "System" commands doesn't need endpoint, database and authentication to operate
bool IsSystemCommand() const {
- return IsHelpCommand() || IsSvnVersionCommand() || IsUpdateCommand() || IsVersionCommand()
+ if (IsHelpCommand()) {
+ return true;
+ }
+ if (!IsYdbCommand()) {
+ return false;
+ }
+ return IsSvnVersionCommand() || IsUpdateCommand() || IsVersionCommand()
|| IsInitCommand() || IsProfileCommand() || IsLicenseCommand() || IsCreditsCommand()
|| IsHelpExCommand();
}
diff --git a/ydb/public/lib/ydb_cli/common/ut/CMakeLists.txt b/ydb/public/lib/ydb_cli/common/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/lib/ydb_cli/common/ut/CMakeLists.txt
+++ b/ydb/public/lib/ydb_cli/common/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/lib/ydb_cli/dump/CMakeLists.txt b/ydb/public/lib/ydb_cli/dump/CMakeLists.txt
index 4b47860c08..3d9e360472 100644
--- a/ydb/public/lib/ydb_cli/dump/CMakeLists.txt
+++ b/ydb/public/lib/ydb_cli/dump/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(util)
add_library(lib-ydb_cli-dump)
target_link_libraries(lib-ydb_cli-dump PUBLIC
diff --git a/ydb/public/sdk/CMakeLists.txt b/ydb/public/sdk/CMakeLists.txt
new file mode 100644
index 0000000000..48e888c46d
--- /dev/null
+++ b/ydb/public/sdk/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(cpp)
diff --git a/ydb/public/sdk/cpp/CMakeLists.txt b/ydb/public/sdk/cpp/CMakeLists.txt
new file mode 100644
index 0000000000..823e8c453c
--- /dev/null
+++ b/ydb/public/sdk/cpp/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(client)
+add_subdirectory(examples)
diff --git a/ydb/public/sdk/cpp/client/CMakeLists.txt b/ydb/public/sdk/cpp/client/CMakeLists.txt
new file mode 100644
index 0000000000..cd0db2c3cf
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/CMakeLists.txt
@@ -0,0 +1,33 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(draft)
+add_subdirectory(extensions)
+add_subdirectory(impl)
+add_subdirectory(resources)
+add_subdirectory(ydb_common_client)
+add_subdirectory(ydb_coordination)
+add_subdirectory(ydb_datastreams)
+add_subdirectory(ydb_discovery)
+add_subdirectory(ydb_driver)
+add_subdirectory(ydb_export)
+add_subdirectory(ydb_extension)
+add_subdirectory(ydb_import)
+add_subdirectory(ydb_monitoring)
+add_subdirectory(ydb_operation)
+add_subdirectory(ydb_params)
+add_subdirectory(ydb_persqueue_core)
+add_subdirectory(ydb_persqueue_public)
+add_subdirectory(ydb_proto)
+add_subdirectory(ydb_rate_limiter)
+add_subdirectory(ydb_result)
+add_subdirectory(ydb_scheme)
+add_subdirectory(ydb_table)
+add_subdirectory(ydb_topic)
+add_subdirectory(ydb_types)
+add_subdirectory(ydb_value)
diff --git a/ydb/public/sdk/cpp/client/draft/CMakeLists.txt b/ydb/public/sdk/cpp/client/draft/CMakeLists.txt
index a2b06c8d34..de0df9620e 100644
--- a/ydb/public/sdk/cpp/client/draft/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/draft/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(cpp-client-draft)
target_link_libraries(cpp-client-draft PUBLIC
diff --git a/ydb/public/sdk/cpp/client/draft/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/draft/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/draft/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/draft/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/extensions/CMakeLists.txt b/ydb/public/sdk/cpp/client/extensions/CMakeLists.txt
new file mode 100644
index 0000000000..dc2684d9aa
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/extensions/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(discovery_mutator)
+add_subdirectory(solomon_stats)
diff --git a/ydb/public/sdk/cpp/client/extensions/discovery_mutator/CMakeLists.txt b/ydb/public/sdk/cpp/client/extensions/discovery_mutator/CMakeLists.txt
index 847e3708b4..ca9fb73f0b 100644
--- a/ydb/public/sdk/cpp/client/extensions/discovery_mutator/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/extensions/discovery_mutator/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(client-extensions-discovery_mutator)
target_link_libraries(client-extensions-discovery_mutator PUBLIC
diff --git a/ydb/public/sdk/cpp/client/extensions/discovery_mutator/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/extensions/discovery_mutator/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/extensions/discovery_mutator/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/extensions/discovery_mutator/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/impl/CMakeLists.txt b/ydb/public/sdk/cpp/client/impl/CMakeLists.txt
new file mode 100644
index 0000000000..0e890f05d5
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/impl/CMakeLists.txt
@@ -0,0 +1,11 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(ydb_endpoints)
+add_subdirectory(ydb_internal)
+add_subdirectory(ydb_stats)
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_endpoints/CMakeLists.txt b/ydb/public/sdk/cpp/client/impl/ydb_endpoints/CMakeLists.txt
index 9d4a934ec6..cea98992c0 100644
--- a/ydb/public/sdk/cpp/client/impl/ydb_endpoints/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/impl/ydb_endpoints/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(client-impl-ydb_endpoints)
target_link_libraries(client-impl-ydb_endpoints PUBLIC
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_endpoints/endpoints.h b/ydb/public/sdk/cpp/client/impl/ydb_endpoints/endpoints.h
index b949a5bc75..fb79052130 100644
--- a/ydb/public/sdk/cpp/client/impl/ydb_endpoints/endpoints.h
+++ b/ydb/public/sdk/cpp/client/impl/ydb_endpoints/endpoints.h
@@ -114,9 +114,9 @@ private:
std::unordered_map<ui64, TKnownEndpoint> KnownEndpointsByNodeId_;
i32 BestK_ = -1;
std::atomic_int PessimizationRatio_ = 0;
- NSdkStats::TAtomicCounter<NMonitoring::TIntGauge> EndpointCountGauge_;
- NSdkStats::TAtomicCounter<NMonitoring::TIntGauge> PessimizationRatioGauge_;
- NSdkStats::TAtomicCounter<NMonitoring::TIntGauge> EndpointActiveGauge_;
+ NSdkStats::TAtomicCounter<::NMonitoring::TIntGauge> EndpointCountGauge_;
+ NSdkStats::TAtomicCounter<::NMonitoring::TIntGauge> PessimizationRatioGauge_;
+ NSdkStats::TAtomicCounter<::NMonitoring::TIntGauge> EndpointActiveGauge_;
};
// Used to track object
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_endpoints/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/impl/ydb_endpoints/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/impl/ydb_endpoints/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/impl/ydb_endpoints/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_internal/CMakeLists.txt b/ydb/public/sdk/cpp/client/impl/ydb_internal/CMakeLists.txt
new file mode 100644
index 0000000000..4102395cf3
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/impl/ydb_internal/CMakeLists.txt
@@ -0,0 +1,16 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(common)
+add_subdirectory(db_driver_state)
+add_subdirectory(grpc_connections)
+add_subdirectory(logger)
+add_subdirectory(make_request)
+add_subdirectory(plain_status)
+add_subdirectory(thread_pool)
+add_subdirectory(value_helpers)
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_internal/db_driver_state/state.h b/ydb/public/sdk/cpp/client/impl/ydb_internal/db_driver_state/state.h
index f60cf82209..96b4c17e0e 100644
--- a/ydb/public/sdk/cpp/client/impl/ydb_internal/db_driver_state/state.h
+++ b/ydb/public/sdk/cpp/client/impl/ydb_internal/db_driver_state/state.h
@@ -97,7 +97,7 @@ public:
);
NThreading::TFuture<void> SendNotification(
TDbDriverState::ENotifyType type);
- void SetMetricRegistry(NMonitoring::TMetricRegistry *sensorsRegistry);
+ void SetMetricRegistry(::NMonitoring::TMetricRegistry *sensorsRegistry);
private:
IInternalClient* DiscoveryClient_;
std::unordered_map<TStateKey, std::weak_ptr<TDbDriverState>, TStateKeyHash> States_;
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_internal/grpc_connections/grpc_connections.h b/ydb/public/sdk/cpp/client/impl/ydb_internal/grpc_connections/grpc_connections.h
index 2f0800ac1d..e07ab5a9e4 100644
--- a/ydb/public/sdk/cpp/client/impl/ydb_internal/grpc_connections/grpc_connections.h
+++ b/ydb/public/sdk/cpp/client/impl/ydb_internal/grpc_connections/grpc_connections.h
@@ -606,8 +606,8 @@ public:
bool GetDrainOnDtors() const;
TBalancingSettings GetBalancingSettings() const override;
- bool StartStatCollecting(NMonitoring::IMetricRegistry* sensorsRegistry) override;
- NMonitoring::TMetricRegistry* GetMetricRegistry() override;
+ bool StartStatCollecting(::NMonitoring::IMetricRegistry* sensorsRegistry) override;
+ ::NMonitoring::TMetricRegistry* GetMetricRegistry() override;
void RegisterExtension(IExtension* extension);
void RegisterExtensionApi(IExtensionApi* api);
void SetDiscoveryMutator(IDiscoveryMutatorApi::TMutatorCb&& cb);
@@ -698,7 +698,7 @@ private:
private:
std::mutex ExtensionsLock_;
- NMonitoring::TMetricRegistry* MetricRegistryPtr_ = nullptr;
+ ::NMonitoring::TMetricRegistry* MetricRegistryPtr_ = nullptr;
std::unique_ptr<IThreadPool> ResponseQueue_;
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_internal/internal_client/client.h b/ydb/public/sdk/cpp/client/impl/ydb_internal/internal_client/client.h
index 07fbadf88b..5a6ad2821d 100644
--- a/ydb/public/sdk/cpp/client/impl/ydb_internal/internal_client/client.h
+++ b/ydb/public/sdk/cpp/client/impl/ydb_internal/internal_client/client.h
@@ -29,8 +29,8 @@ public:
virtual void DeleteChannels(const std::vector<TStringType>& endpoints) = 0;
#endif
virtual TBalancingSettings GetBalancingSettings() const = 0;
- virtual bool StartStatCollecting(NMonitoring::IMetricRegistry* sensorsRegistry) = 0;
- virtual NMonitoring::TMetricRegistry* GetMetricRegistry() = 0;
+ virtual bool StartStatCollecting(::NMonitoring::IMetricRegistry* sensorsRegistry) = 0;
+ virtual ::NMonitoring::TMetricRegistry* GetMetricRegistry() = 0;
virtual const TLog& GetLog() const = 0;
};
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_internal/stats_extractor/extractor.h b/ydb/public/sdk/cpp/client/impl/ydb_internal/stats_extractor/extractor.h
index 2a2186a0dc..c01c74d000 100644
--- a/ydb/public/sdk/cpp/client/impl/ydb_internal/stats_extractor/extractor.h
+++ b/ydb/public/sdk/cpp/client/impl/ydb_internal/stats_extractor/extractor.h
@@ -17,7 +17,7 @@ public:
: Client_(client)
{ }
- virtual void SetMetricRegistry(NMonitoring::IMetricRegistry* sensorsRegistry) override {
+ virtual void SetMetricRegistry(::NMonitoring::IMetricRegistry* sensorsRegistry) override {
auto strong = Client_.lock();
if (strong) {
strong->StartStatCollecting(sensorsRegistry);
diff --git a/ydb/public/sdk/cpp/client/impl/ydb_stats/stats.h b/ydb/public/sdk/cpp/client/impl/ydb_stats/stats.h
index cae4099682..a6222a656e 100644
--- a/ydb/public/sdk/cpp/client/impl/ydb_stats/stats.h
+++ b/ydb/public/sdk/cpp/client/impl/ydb_stats/stats.h
@@ -138,7 +138,7 @@ public:
// Sessions count for all clients
// Every client has 3 TSessionCounter for active, in session pool, in settler sessions
// TSessionCounters in different clients with same role share one sensor
-class TSessionCounter: public TAtomicPointer<NMonitoring::TIntGauge> {
+class TSessionCounter: public TAtomicPointer<::NMonitoring::TIntGauge> {
public:
// Call with mutex
@@ -150,7 +150,7 @@ public:
}
~TSessionCounter() {
- NMonitoring::TIntGauge* gauge = this->Get();
+ ::NMonitoring::TIntGauge* gauge = this->Get();
if (gauge) {
gauge->Add(-oldValue);
}
@@ -161,23 +161,23 @@ private:
};
struct TStatCollector {
- using TMetricRegistry = NMonitoring::TMetricRegistry;
+ using TMetricRegistry = ::NMonitoring::TMetricRegistry;
public:
struct TEndpointElectorStatCollector {
- TEndpointElectorStatCollector(NMonitoring::TIntGauge* endpointCount = nullptr
- , NMonitoring::TIntGauge* pessimizationRatio = nullptr
- , NMonitoring::TIntGauge* activeEndpoints = nullptr)
+ TEndpointElectorStatCollector(::NMonitoring::TIntGauge* endpointCount = nullptr
+ , ::NMonitoring::TIntGauge* pessimizationRatio = nullptr
+ , ::NMonitoring::TIntGauge* activeEndpoints = nullptr)
: EndpointCount(endpointCount)
, PessimizationRatio(pessimizationRatio)
, EndpointActive(activeEndpoints)
{ }
- NMonitoring::TIntGauge* EndpointCount;
- NMonitoring::TIntGauge* PessimizationRatio;
- NMonitoring::TIntGauge* EndpointActive;
+ ::NMonitoring::TIntGauge* EndpointCount;
+ ::NMonitoring::TIntGauge* PessimizationRatio;
+ ::NMonitoring::TIntGauge* EndpointActive;
};
struct TSessionPoolStatCollector {
@@ -187,22 +187,22 @@ public:
SETTLERPOOL
};
- TSessionPoolStatCollector(NMonitoring::TIntGauge* activeSessions = nullptr
- , NMonitoring::TIntGauge* inPoolSessions = nullptr
- , NMonitoring::TRate* fakeSessions = nullptr)
+ TSessionPoolStatCollector(::NMonitoring::TIntGauge* activeSessions = nullptr
+ , ::NMonitoring::TIntGauge* inPoolSessions = nullptr
+ , ::NMonitoring::TRate* fakeSessions = nullptr)
: ActiveSessions(activeSessions), InPoolSessions(inPoolSessions), FakeSessions(fakeSessions)
{ }
- NMonitoring::TIntGauge* ActiveSessions;
- NMonitoring::TIntGauge* InPoolSessions;
- NMonitoring::TRate* FakeSessions;
+ ::NMonitoring::TIntGauge* ActiveSessions;
+ ::NMonitoring::TIntGauge* InPoolSessions;
+ ::NMonitoring::TRate* FakeSessions;
};
struct TClientRetryOperationStatCollector {
TClientRetryOperationStatCollector() : MetricRegistry_(), Database_() {}
- TClientRetryOperationStatCollector(NMonitoring::TMetricRegistry* registry, const TStringType& database)
+ TClientRetryOperationStatCollector(::NMonitoring::TMetricRegistry* registry, const TStringType& database)
: MetricRegistry_(registry), Database_(database)
{ }
@@ -223,17 +223,17 @@ public:
}
private:
- TAtomicPointer<NMonitoring::TMetricRegistry> MetricRegistry_;
+ TAtomicPointer<::NMonitoring::TMetricRegistry> MetricRegistry_;
TStringType Database_;
};
struct TClientStatCollector {
- TClientStatCollector(NMonitoring::TRate* cacheMiss = nullptr
- , NMonitoring::THistogram* querySize = nullptr
- , NMonitoring::THistogram* paramsSize = nullptr
- , NMonitoring::TRate* sessionRemoved = nullptr
- , NMonitoring::TRate* requestMigrated = nullptr
+ TClientStatCollector(::NMonitoring::TRate* cacheMiss = nullptr
+ , ::NMonitoring::THistogram* querySize = nullptr
+ , ::NMonitoring::THistogram* paramsSize = nullptr
+ , ::NMonitoring::TRate* sessionRemoved = nullptr
+ , ::NMonitoring::TRate* requestMigrated = nullptr
, TClientRetryOperationStatCollector retryOperationStatCollector = TClientRetryOperationStatCollector())
: CacheMiss(cacheMiss)
, QuerySize(querySize)
@@ -243,11 +243,11 @@ public:
, RetryOperationStatCollector(retryOperationStatCollector)
{ }
- NMonitoring::TRate* CacheMiss;
- NMonitoring::THistogram* QuerySize;
- NMonitoring::THistogram* ParamsSize;
- NMonitoring::TRate* SessionRemovedDueBalancing;
- NMonitoring::TRate* RequestMigrated;
+ ::NMonitoring::TRate* CacheMiss;
+ ::NMonitoring::THistogram* QuerySize;
+ ::NMonitoring::THistogram* ParamsSize;
+ ::NMonitoring::TRate* SessionRemovedDueBalancing;
+ ::NMonitoring::TRate* RequestMigrated;
TClientRetryOperationStatCollector RetryOperationStatCollector;
};
@@ -280,13 +280,13 @@ public:
GRpcInFlight_.Set(sensorsRegistry->IntGauge({ DatabaseLabel_, {"sensor", "Grpc/InFlight"} }));
RequestLatency_.Set(sensorsRegistry->HistogramRate({ DatabaseLabel_, {"sensor", "Request/Latency"} },
- NMonitoring::ExponentialHistogram(20, 2, 1)));
+ ::NMonitoring::ExponentialHistogram(20, 2, 1)));
QuerySize_.Set(sensorsRegistry->HistogramRate({ DatabaseLabel_, {"sensor", "Request/QuerySize"} },
- NMonitoring::ExponentialHistogram(20, 2, 32)));
+ ::NMonitoring::ExponentialHistogram(20, 2, 32)));
ParamsSize_.Set(sensorsRegistry->HistogramRate({ DatabaseLabel_, {"sensor", "Request/ParamsSize"} },
- NMonitoring::ExponentialHistogram(10, 2, 32)));
+ ::NMonitoring::ExponentialHistogram(10, 2, 32)));
ResultSize_.Set(sensorsRegistry->HistogramRate({ DatabaseLabel_, {"sensor", "Request/ResultSize"} },
- NMonitoring::ExponentialHistogram(20, 2, 32)));
+ ::NMonitoring::ExponentialHistogram(20, 2, 32)));
}
void IncDiscoveryDuePessimization() {
@@ -391,27 +391,27 @@ public:
void DeleteHost(const TStringType& host);
private:
const TStringType Database_;
- const NMonitoring::TLabel DatabaseLabel_;
+ const ::NMonitoring::TLabel DatabaseLabel_;
TAtomicPointer<TMetricRegistry> MetricRegistryPtr_;
- TAtomicCounter<NMonitoring::TRate> DiscoveryDuePessimization_;
- TAtomicCounter<NMonitoring::TRate> DiscoveryDueExpiration_;
- TAtomicCounter<NMonitoring::TRate> RequestFailDueQueueOverflow_;
- TAtomicCounter<NMonitoring::TRate> RequestFailDueNoEndpoint_;
- TAtomicCounter<NMonitoring::TRate> RequestFailDueTransportError_;
- TAtomicCounter<NMonitoring::TRate> DiscoveryFailDueTransportError_;
- TAtomicPointer<NMonitoring::TIntGauge> ActiveSessions_;
- TAtomicPointer<NMonitoring::TIntGauge> InPoolSessions_;
- TAtomicPointer<NMonitoring::TIntGauge> SettlerSessions_;
- TAtomicCounter<NMonitoring::TIntGauge> SessionCV_;
- TAtomicCounter<NMonitoring::TRate> SessionRemovedDueBalancing_;
- TAtomicCounter<NMonitoring::TRate> RequestMigrated_;
- TAtomicCounter<NMonitoring::TRate> FakeSessions_;
- TAtomicCounter<NMonitoring::TRate> CacheMiss_;
- TAtomicCounter<NMonitoring::TIntGauge> GRpcInFlight_;
- TAtomicHistogram<NMonitoring::THistogram> RequestLatency_;
- TAtomicHistogram<NMonitoring::THistogram> QuerySize_;
- TAtomicHistogram<NMonitoring::THistogram> ParamsSize_;
- TAtomicHistogram<NMonitoring::THistogram> ResultSize_;
+ TAtomicCounter<::NMonitoring::TRate> DiscoveryDuePessimization_;
+ TAtomicCounter<::NMonitoring::TRate> DiscoveryDueExpiration_;
+ TAtomicCounter<::NMonitoring::TRate> RequestFailDueQueueOverflow_;
+ TAtomicCounter<::NMonitoring::TRate> RequestFailDueNoEndpoint_;
+ TAtomicCounter<::NMonitoring::TRate> RequestFailDueTransportError_;
+ TAtomicCounter<::NMonitoring::TRate> DiscoveryFailDueTransportError_;
+ TAtomicPointer<::NMonitoring::TIntGauge> ActiveSessions_;
+ TAtomicPointer<::NMonitoring::TIntGauge> InPoolSessions_;
+ TAtomicPointer<::NMonitoring::TIntGauge> SettlerSessions_;
+ TAtomicCounter<::NMonitoring::TIntGauge> SessionCV_;
+ TAtomicCounter<::NMonitoring::TRate> SessionRemovedDueBalancing_;
+ TAtomicCounter<::NMonitoring::TRate> RequestMigrated_;
+ TAtomicCounter<::NMonitoring::TRate> FakeSessions_;
+ TAtomicCounter<::NMonitoring::TRate> CacheMiss_;
+ TAtomicCounter<::NMonitoring::TIntGauge> GRpcInFlight_;
+ TAtomicHistogram<::NMonitoring::THistogram> RequestLatency_;
+ TAtomicHistogram<::NMonitoring::THistogram> QuerySize_;
+ TAtomicHistogram<::NMonitoring::THistogram> ParamsSize_;
+ TAtomicHistogram<::NMonitoring::THistogram> ResultSize_;
};
} // namespace NSdkStats
diff --git a/ydb/public/sdk/cpp/client/ydb_common_client/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_common_client/CMakeLists.txt
index bfb00bd136..6897269667 100644
--- a/ydb/public/sdk/cpp/client/ydb_common_client/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_common_client/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(impl)
add_library(cpp-client-ydb_common_client)
target_link_libraries(cpp-client-ydb_common_client PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_coordination/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_coordination/CMakeLists.txt
index 48477af5af..363aa8aaab 100644
--- a/ydb/public/sdk/cpp/client/ydb_coordination/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_coordination/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(cpp-client-ydb_coordination)
target_link_libraries(cpp-client-ydb_coordination PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_coordination/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_coordination/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/ydb_coordination/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_coordination/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp b/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp
index e84ec7ffd6..6604fbe83c 100644
--- a/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.cpp
@@ -84,6 +84,11 @@ namespace NYdb::NDataStreams::V1 {
req.set_retention_period_hours(24);
}
req.set_write_quota_kb_per_sec(settings.WriteQuotaKbPerSec_);
+ if (settings.StreamMode_.Defined()) {
+ req.mutable_stream_mode_details()->set_stream_mode(
+ *settings.StreamMode_ == ESM_PROVISIONED ? Ydb::DataStreams::V1::StreamMode::PROVISIONED
+ : Ydb::DataStreams::V1::StreamMode::ON_DEMAND);
+ }
});
}
@@ -225,6 +230,20 @@ namespace NYdb::NDataStreams::V1 {
});
}
+ TAsyncUpdateStreamModeResult UpdateStreamMode(const TString& path, TUpdateStreamModeSettings settings) {
+ return CallImpl<Ydb::DataStreams::V1::DataStreamsService,
+ Ydb::DataStreams::V1::UpdateStreamModeRequest,
+ Ydb::DataStreams::V1::UpdateStreamModeResponse,
+ Ydb::DataStreams::V1::UpdateStreamModeResult>(settings, &Ydb::DataStreams::V1::DataStreamsService::Stub::AsyncUpdateStreamMode,
+ [&](Ydb::DataStreams::V1::UpdateStreamModeRequest& req) {
+ req.set_stream_arn(path);
+
+ req.mutable_stream_mode_details()->set_stream_mode(
+ settings.StreamMode_ == ESM_PROVISIONED ? Ydb::DataStreams::V1::StreamMode::PROVISIONED
+ : Ydb::DataStreams::V1::StreamMode::ON_DEMAND);
+ });
+ }
+
TAsyncRegisterStreamConsumerResult RegisterStreamConsumer(const TString& path, const TString& consumer_name, TRegisterStreamConsumerSettings settings) {
return CallImpl<Ydb::DataStreams::V1::DataStreamsService,
Ydb::DataStreams::V1::RegisterStreamConsumerRequest,
@@ -349,6 +368,11 @@ namespace NYdb::NDataStreams::V1 {
req.set_retention_storage_megabytes(*settings.RetentionStorageMegabytes_.Get());
}
req.set_write_quota_kb_per_sec(settings.WriteQuotaKbPerSec_);
+ if (settings.StreamMode_.Defined()) {
+ req.mutable_stream_mode_details()->set_stream_mode(
+ *settings.StreamMode_ == ESM_PROVISIONED ? Ydb::DataStreams::V1::StreamMode::PROVISIONED
+ : Ydb::DataStreams::V1::StreamMode::ON_DEMAND);
+ }
});
}
@@ -469,6 +493,10 @@ namespace NYdb::NDataStreams::V1 {
return Impl_->UpdateShardCount(path, settings);
}
+ TAsyncUpdateStreamModeResult TDataStreamsClient::UpdateStreamMode(const TString& path, TUpdateStreamModeSettings settings) {
+ return Impl_->UpdateStreamMode(path, settings);
+ }
+
TAsyncRegisterStreamConsumerResult TDataStreamsClient::RegisterStreamConsumer(const TString& path, const TString& consumer_name, const TRegisterStreamConsumerSettings settings) {
return Impl_->RegisterStreamConsumer(path, consumer_name, settings);
}
@@ -688,6 +716,18 @@ namespace NYdb::NDataStreams::V1 {
TProtoRequestSettings settings
);
+ template NThreading::TFuture<TProtoResultWrapper<Ydb::DataStreams::V1::UpdateStreamModeResult>> TDataStreamsClient::DoProtoRequest
+ <
+ Ydb::DataStreams::V1::UpdateStreamModeRequest,
+ Ydb::DataStreams::V1::UpdateStreamModeResponse,
+ Ydb::DataStreams::V1::UpdateStreamModeResult,
+ decltype(&Ydb::DataStreams::V1::DataStreamsService::Stub::AsyncUpdateStreamMode)
+ >(
+ const Ydb::DataStreams::V1::UpdateStreamModeRequest& request,
+ decltype(&Ydb::DataStreams::V1::DataStreamsService::Stub::AsyncUpdateStreamMode) method,
+ TProtoRequestSettings settings
+ );
+
template NThreading::TFuture<TProtoResultWrapper<Ydb::DataStreams::V1::RegisterStreamConsumerResult>> TDataStreamsClient::DoProtoRequest
<
Ydb::DataStreams::V1::RegisterStreamConsumerRequest,
diff --git a/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h b/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h
index 63d7fb2918..ef1f475d16 100644
--- a/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h
+++ b/ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h
@@ -28,6 +28,11 @@ namespace NYdb::NDataStreams::V1 {
std::unique_ptr<TProtoResult> Result;
};
+ enum EStreamMode {
+ ESM_PROVISIONED = 1,
+ ESM_ON_DEMAND = 2,
+ };
+
using TCreateStreamResult = TProtoResultWrapper<Ydb::DataStreams::V1::CreateStreamResult>;
using TDeleteStreamResult = TProtoResultWrapper<Ydb::DataStreams::V1::DeleteStreamResult>;
using TDescribeStreamResult = TProtoResultWrapper<Ydb::DataStreams::V1::DescribeStreamResult>;
@@ -46,6 +51,7 @@ namespace NYdb::NDataStreams::V1 {
using TDecreaseStreamRetentionPeriodResult = TProtoResultWrapper<Ydb::DataStreams::V1::DecreaseStreamRetentionPeriodResult>;
using TIncreaseStreamRetentionPeriodResult = TProtoResultWrapper<Ydb::DataStreams::V1::IncreaseStreamRetentionPeriodResult>;
using TUpdateShardCountResult = TProtoResultWrapper<Ydb::DataStreams::V1::UpdateShardCountResult>;
+ using TUpdateStreamModeResult = TProtoResultWrapper<Ydb::DataStreams::V1::UpdateStreamModeResult>;
using TListStreamConsumersResult = TProtoResultWrapper<Ydb::DataStreams::V1::ListStreamConsumersResult>;
using TAddTagsToStreamResult = TProtoResultWrapper<Ydb::DataStreams::V1::AddTagsToStreamResult>;
using TDisableEnhancedMonitoringResult = TProtoResultWrapper<Ydb::DataStreams::V1::DisableEnhancedMonitoringResult>;
@@ -76,6 +82,7 @@ namespace NYdb::NDataStreams::V1 {
using TAsyncDecreaseStreamRetentionPeriodResult = NThreading::TFuture<TDecreaseStreamRetentionPeriodResult>;
using TAsyncIncreaseStreamRetentionPeriodResult = NThreading::TFuture<TIncreaseStreamRetentionPeriodResult>;
using TAsyncUpdateShardCountResult = NThreading::TFuture<TUpdateShardCountResult>;
+ using TAsyncUpdateStreamModeResult = NThreading::TFuture<TUpdateStreamModeResult>;
using TAsyncListStreamConsumersResult = NThreading::TFuture<TListStreamConsumersResult>;
using TAsyncAddTagsToStreamResult = NThreading::TFuture<TAddTagsToStreamResult>;
using TAsyncDisableEnhancedMonitoringResult = NThreading::TFuture<TDisableEnhancedMonitoringResult>;
@@ -99,6 +106,7 @@ namespace NYdb::NDataStreams::V1 {
FLUENT_SETTING_OPTIONAL(ui32, RetentionPeriodHours);
FLUENT_SETTING_OPTIONAL(ui32, RetentionStorageMegabytes);
FLUENT_SETTING(ui64, WriteQuotaKbPerSec);
+ FLUENT_SETTING_OPTIONAL(EStreamMode, StreamMode);
};
struct TListStreamsSettings : public NYdb::TOperationRequestSettings<TListStreamsSettings> {
FLUENT_SETTING(ui32, Limit);
@@ -137,11 +145,16 @@ namespace NYdb::NDataStreams::V1 {
struct TUpdateShardCountSettings : public NYdb::TOperationRequestSettings<TUpdateShardCountSettings> {
FLUENT_SETTING(ui32, TargetShardCount);
};
+ struct TUpdateStreamModeSettings : public NYdb::TOperationRequestSettings<TUpdateStreamModeSettings> {
+ FLUENT_SETTING_DEFAULT(EStreamMode, StreamMode, ESM_PROVISIONED);
+ };
struct TUpdateStreamSettings : public NYdb::TOperationRequestSettings<TUpdateStreamSettings> {
FLUENT_SETTING(ui32, TargetShardCount);
FLUENT_SETTING_OPTIONAL(ui32, RetentionPeriodHours);
FLUENT_SETTING_OPTIONAL(ui32, RetentionStorageMegabytes);
FLUENT_SETTING(ui64, WriteQuotaKbPerSec);
+ FLUENT_SETTING_OPTIONAL(EStreamMode, StreamMode);
+
};
struct TPutRecordSettings : public NYdb::TOperationRequestSettings<TPutRecordSettings> {};
struct TPutRecordsSettings : public NYdb::TOperationRequestSettings<TPutRecordsSettings> {};
@@ -185,6 +198,7 @@ namespace NYdb::NDataStreams::V1 {
TAsyncDecreaseStreamRetentionPeriodResult DecreaseStreamRetentionPeriod(const TString& path, TDecreaseStreamRetentionPeriodSettings settings = TDecreaseStreamRetentionPeriodSettings());
TAsyncIncreaseStreamRetentionPeriodResult IncreaseStreamRetentionPeriod(const TString& path, TIncreaseStreamRetentionPeriodSettings settings = TIncreaseStreamRetentionPeriodSettings());
TAsyncUpdateShardCountResult UpdateShardCount(const TString& path, TUpdateShardCountSettings settings = TUpdateShardCountSettings());
+ TAsyncUpdateStreamModeResult UpdateStreamMode(const TString& path, TUpdateStreamModeSettings settings = TUpdateStreamModeSettings());
TAsyncRegisterStreamConsumerResult RegisterStreamConsumer(const TString& path, const TString& consumer_name, TRegisterStreamConsumerSettings settings = TRegisterStreamConsumerSettings());
TAsyncDeregisterStreamConsumerResult DeregisterStreamConsumer(const TString& path, const TString& consumer_name, TDeregisterStreamConsumerSettings settings = TDeregisterStreamConsumerSettings());
TAsyncDescribeStreamConsumerResult DescribeStreamConsumer(TDescribeStreamConsumerSettings settings = TDescribeStreamConsumerSettings());
diff --git a/ydb/public/sdk/cpp/client/ydb_driver/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_driver/CMakeLists.txt
index 51c3bcb308..6043aa41a9 100644
--- a/ydb/public/sdk/cpp/client/ydb_driver/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_driver/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(cpp-client-ydb_driver)
target_link_libraries(cpp-client-ydb_driver PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_driver/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_driver/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/ydb_driver/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_driver/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/ydb_extension/extension.h b/ydb/public/sdk/cpp/client/ydb_extension/extension.h
index 3371bffddc..1dd8589501 100644
--- a/ydb/public/sdk/cpp/client/ydb_extension/extension.h
+++ b/ydb/public/sdk/cpp/client/ydb_extension/extension.h
@@ -37,8 +37,8 @@ class IStatApi: public IExtensionApi {
public:
static IStatApi* Create(TDriver driver);
public:
- virtual void SetMetricRegistry(NMonitoring::IMetricRegistry* sensorsRegistry) = 0;
- virtual void Accept(NMonitoring::IMetricConsumer* consumer) const = 0;
+ virtual void SetMetricRegistry(::NMonitoring::IMetricRegistry* sensorsRegistry) = 0;
+ virtual void Accept(::NMonitoring::IMetricConsumer* consumer) const = 0;
};
class DestroyedClientException: public yexception {};
diff --git a/ydb/public/sdk/cpp/client/ydb_monitoring/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_monitoring/CMakeLists.txt
new file mode 100644
index 0000000000..b094d5fe1e
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_monitoring/CMakeLists.txt
@@ -0,0 +1,27 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_library(cpp-client-ydb_monitoring)
+target_link_libraries(cpp-client-ydb_monitoring PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ tools-enum_parser-enum_serialization_runtime
+ cpp-client-ydb_proto
+ impl-ydb_internal-make_request
+ client-ydb_common_client-impl
+ cpp-client-ydb_driver
+)
+target_sources(cpp-client-ydb_monitoring PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.cpp
+)
+generate_enum_serilization(cpp-client-ydb_monitoring
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.h
+ INCLUDE_HEADERS
+ ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.h
+)
diff --git a/ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.cpp b/ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.cpp
new file mode 100644
index 0000000000..0a4d8bffbb
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.cpp
@@ -0,0 +1,99 @@
+#include "monitoring.h"
+
+#define INCLUDE_YDB_INTERNAL_H
+#include <ydb/public/sdk/cpp/client/impl/ydb_internal/make_request/make.h>
+#undef INCLUDE_YDB_INTERNAL_H
+
+#include <ydb/public/api/grpc/ydb_monitoring_v1.grpc.pb.h>
+#include <ydb/public/api/protos/ydb_monitoring.pb.h>
+#include <ydb/public/sdk/cpp/client/ydb_common_client/impl/client.h>
+#include <ydb/public/sdk/cpp/client/ydb_proto/accessor.h>
+
+namespace NYdb {
+namespace NMonitoring {
+
+using namespace NThreading;
+
+class TSelfCheckResult::TImpl {
+public:
+ TImpl(Ydb::Monitoring::SelfCheckResult&& result)
+ : Result(std::move(result))
+ {}
+ Ydb::Monitoring::SelfCheckResult Result;
+};
+
+TSelfCheckResult::TSelfCheckResult(TStatus&& status, Ydb::Monitoring::SelfCheckResult&& result)
+ : TStatus(std::move(status))
+ , Impl_(std::make_shared<TSelfCheckResult::TImpl>(std::move(result)))
+{}
+
+class TMonitoringClient::TImpl : public TClientImplCommon<TMonitoringClient::TImpl> {
+public:
+ TImpl(std::shared_ptr<TGRpcConnectionsImpl>&& connections, const TCommonClientSettings& settings)
+ : TClientImplCommon(std::move(connections), settings)
+ {}
+
+ TAsyncSelfCheckResult SelfCheck(const TSelfCheckSettings& settings) {
+ auto request = MakeOperationRequest<Ydb::Monitoring::SelfCheckRequest>(settings);
+
+ if (settings.ReturnVerboseStatus_) {
+ request.set_return_verbose_status(settings.ReturnVerboseStatus_.GetRef());
+ }
+
+ if (settings.MinimumStatus_) {
+ request.set_minimum_status((::Ydb::Monitoring::StatusFlag_Status)settings.MinimumStatus_.GetRef());
+ }
+
+ if (settings.MaximumLevel_) {
+ request.set_maximum_level(settings.MaximumLevel_.GetRef());
+ }
+
+ auto promise = NThreading::NewPromise<TSelfCheckResult>();
+
+ auto extractor = [promise]
+ (google::protobuf::Any* any, TPlainStatus status) mutable {
+ Ydb::Monitoring::SelfCheckResult result;
+ if (any) {
+ any->UnpackTo(&result);
+ }
+ TSelfCheckResult val(
+ TStatus(std::move(status)),
+ std::move(result));
+
+ promise.SetValue(std::move(val));
+ };
+
+ using Ydb::Monitoring::SelfCheckRequest;
+ using Ydb::Monitoring::SelfCheckResponse;
+
+ auto requestSettings = TRpcRequestSettings::Make(settings);
+ requestSettings.EndpointPolicy = TRpcRequestSettings::TEndpointPolicy::UseDiscoveryEndpoint;
+
+ Connections_->RunDeferred<Ydb::Monitoring::V1::MonitoringService, SelfCheckRequest, SelfCheckResponse>(
+ std::move(request),
+ extractor,
+ &Ydb::Monitoring::V1::MonitoringService::Stub::AsyncSelfCheck,
+ DbDriverState_,
+ INITIAL_DEFERRED_CALL_DELAY,
+ requestSettings,
+ settings.ClientTimeout_);
+
+ return promise.GetFuture();
+ }
+};
+
+TMonitoringClient::TMonitoringClient(const TDriver& driver, const TCommonClientSettings& settings)
+ : Impl_(new TImpl(CreateInternalInterface(driver), settings))
+{}
+
+TAsyncSelfCheckResult TMonitoringClient::SelfCheck(const TSelfCheckSettings& settings) {
+ return Impl_->SelfCheck(settings);
+}
+
+}
+
+const Ydb::Monitoring::SelfCheckResult& TProtoAccessor::GetProto(const NYdb::NMonitoring::TSelfCheckResult& selfCheckResult) {
+ return selfCheckResult.Impl_->Result;
+}
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.h b/ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.h
new file mode 100644
index 0000000000..834e2bcbac
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.h
@@ -0,0 +1,58 @@
+#pragma once
+
+#include <ydb/public/sdk/cpp/client/ydb_driver/driver.h>
+
+namespace Ydb {
+namespace Monitoring {
+ class SelfCheckResult;
+}
+}
+
+namespace NYdb {
+
+class TProtoAccessor;
+
+namespace NMonitoring {
+
+////////////////////////////////////////////////////////////////////////////////
+
+enum class EStatusFlag {
+ UNSPECIFIED = 0,
+ GREY = 1,
+ GREEN = 2,
+ BLUE = 3,
+ YELLOW = 4,
+ ORANGE = 5,
+ RED = 6,
+};
+
+struct TSelfCheckSettings : public TOperationRequestSettings<TSelfCheckSettings>{
+ FLUENT_SETTING_OPTIONAL(bool, ReturnVerboseStatus);
+ FLUENT_SETTING_OPTIONAL(EStatusFlag, MinimumStatus);
+ FLUENT_SETTING_OPTIONAL(ui32, MaximumLevel);
+};
+
+class TSelfCheckResult : public TStatus {
+ friend class NYdb::TProtoAccessor;
+public:
+ TSelfCheckResult(TStatus&& status, Ydb::Monitoring::SelfCheckResult&& result);
+private:
+ class TImpl;
+ std::shared_ptr<TImpl> Impl_;
+};
+
+using TAsyncSelfCheckResult = NThreading::TFuture<TSelfCheckResult>;
+
+class TMonitoringClient {
+ class TImpl;
+
+public:
+ TMonitoringClient(const TDriver& driver, const TCommonClientSettings& settings = TCommonClientSettings());
+
+ TAsyncSelfCheckResult SelfCheck(const TSelfCheckSettings& settings = TSelfCheckSettings());
+private:
+ std::shared_ptr<TImpl> Impl_;
+};
+
+}
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_params/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_params/CMakeLists.txt
index 65a30921dc..6fee2c8111 100644
--- a/ydb/public/sdk/cpp/client/ydb_params/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_params/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(cpp-client-ydb_params)
target_link_libraries(cpp-client-ydb_params PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_params/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_params/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/ydb_params/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_params/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/CMakeLists.txt
index 7934e9acaf..b6fea7e40d 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(impl)
+add_subdirectory(ut)
add_library(cpp-client-ydb_persqueue_core)
target_link_libraries(cpp-client-ydb_persqueue_core PUBLIC
@@ -16,6 +18,9 @@ target_link_libraries(cpp-client-ydb_persqueue_core PUBLIC
client-ydb_persqueue_core-impl
cpp-client-ydb_proto
cpp-client-ydb_driver
+ api-grpc
+ api-grpc-draft
+ api-protos
)
target_sources(cpp-client-ydb_persqueue_core PRIVATE
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/proto_accessor.cpp
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/CMakeLists.txt
index 02d362f1ce..b5d67ca599 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/CMakeLists.txt
@@ -14,6 +14,7 @@ target_link_libraries(client-ydb_persqueue_core-impl PUBLIC
cpp-containers-disjoint_interval_tree
cpp-grpc-client
cpp-monlib-dynamic_counters
+ cpp-monlib-metrics
cpp-string_utils-url
library-persqueue-obfuscate
api-grpc-draft
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.cpp
index e0e9fd6857..17bc321c25 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.cpp
@@ -54,6 +54,10 @@ ERetryErrorClass GetRetryErrorClassV2(EStatus status) {
}
}
+TString IssuesSingleLineString(const NYql::TIssues& issues) {
+ return SubstGlobalCopy(issues.ToString(), '\n', ' ');
+}
+
void Cancel(NGrpc::IQueueClientContextPtr& context) {
if (context) {
context->Cancel();
@@ -70,26 +74,6 @@ NYql::TIssues MakeIssueWithSubIssues(const TString& description, const NYql::TIs
return issues;
}
-size_t CalcDataSize(const TReadSessionEvent::TEvent& event) {
- if (const TReadSessionEvent::TDataReceivedEvent* dataEvent = std::get_if<TReadSessionEvent::TDataReceivedEvent>(&event)) {
- size_t len = 0;
- if (dataEvent->IsCompressedMessages()) {
- for (const auto& msg : dataEvent->GetCompressedMessages()) {
- len += msg.GetData().size();
- }
- } else {
- for (const auto& msg : dataEvent->GetMessages()) {
- if (!msg.HasException()) {
- len += msg.GetData().size();
- }
- }
- }
- return len;
- } else {
- return 0;
- }
-}
-
static TStringBuf SplitPort(TStringBuf endpoint) {
for (int i = endpoint.Size() - 1; i >= 0; --i) {
if (endpoint[i] == ':') {
@@ -207,4 +191,9 @@ TThreadPoolExecutor::TThreadPoolExecutor(size_t threadsCount)
ThreadsCount = threadsCount;
}
+IExecutor::TPtr CreateSyncExecutor()
+{
+ return MakeIntrusive<TSyncExecutor>();
+}
+
}
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h
index 8c140e2217..69b5c1aa7a 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h
@@ -20,7 +20,37 @@ NYql::TIssues MakeIssueWithSubIssues(const TString& description, const NYql::TIs
TString IssuesSingleLineString(const NYql::TIssues& issues);
-size_t CalcDataSize(const TReadSessionEvent::TEvent& event);
+template <typename TReadSessionEvent>
+size_t CalcDataSize(const typename TReadSessionEvent::TEvent& event) {
+ constexpr bool UseMigrationProtocol = std::is_same_v<TReadSessionEvent, NPersQueue::TReadSessionEvent>;
+
+ if (const typename TReadSessionEvent::TDataReceivedEvent* dataEvent =
+ std::get_if<typename TReadSessionEvent::TDataReceivedEvent>(&event)) {
+ size_t len = 0;
+
+ bool hasCompressedMsgs = [&dataEvent](){
+ if constexpr (UseMigrationProtocol) {
+ return dataEvent->IsCompressedMessages();
+ } else {
+ return dataEvent->HasCompressedMessages();
+ }
+ }();
+
+ if (hasCompressedMsgs) {
+ for (const auto& msg : dataEvent->GetCompressedMessages()) {
+ len += msg.GetData().size();
+ }
+ } else {
+ for (const auto& msg : dataEvent->GetMessages()) {
+ if (!msg.HasException()) {
+ len += msg.GetData().size();
+ }
+ }
+ }
+ return len;
+ }
+ return 0;
+}
template <class TMessage>
bool IsErrorMessage(const TMessage& serverMessage) {
@@ -271,14 +301,15 @@ private:
// - packing events for waiters;
// - waking up waiters.
// Thread safe.
-template <class TSettings_, class TEvent_, class TEventInfo_ = TBaseEventInfo<TEvent_>>
+template <class TSettings_, class TEvent_, class TClosedEvent_, class TExecutor_, class TEventInfo_ = TBaseEventInfo<TEvent_>>
class TBaseSessionEventsQueue : public ISignalable {
protected:
- using TSelf = TBaseSessionEventsQueue<TSettings_, TEvent_, TEventInfo_>;
+ using TSelf = TBaseSessionEventsQueue<TSettings_, TEvent_, TClosedEvent_, TExecutor_, TEventInfo_>;
using TSettings = TSettings_;
using TEvent = TEvent_;
using TEventInfo = TEventInfo_;
-
+ using TClosedEvent = TClosedEvent_;
+ using TExecutor = TExecutor_;
// Template for visitor implementation.
struct TBaseHandlersVisitor {
@@ -316,7 +347,7 @@ protected:
});
}
- virtual void Post(const IExecutor::TPtr& executor, IExecutor::TFunction&& f) {
+ virtual void Post(const typename TExecutor::TPtr& executor, typename TExecutor::TFunction&& f) {
executor->Post(std::move(f));
}
@@ -379,7 +410,7 @@ protected:
std::queue<TEventInfo> Events;
TCondVar CondVar;
TMutex Mutex;
- TMaybe<TSessionClosedEvent> CloseEvent;
+ TMaybe<TClosedEvent> CloseEvent;
std::atomic<bool> Closed = false;
};
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.cpp
index 5e05fa1f19..857ea12b17 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.cpp
@@ -20,8 +20,6 @@ namespace NYdb::NPersQueue {
static const TString DRIVER_IS_STOPPING_DESCRIPTION = "Driver is stopping";
-static const bool RangesMode = !GetEnv("PQ_OFFSET_RANGES_MODE").empty();
-
std::pair<ui64, ui64> GetMessageOffsetRange(const TReadSessionEvent::TDataReceivedEvent& dataReceivedEvent, ui64 index) {
if (dataReceivedEvent.IsCompressedMessages()) {
const auto& msg = dataReceivedEvent.GetCompressedMessages()[index];
@@ -31,25 +29,8 @@ std::pair<ui64, ui64> GetMessageOffsetRange(const TReadSessionEvent::TDataReceiv
return {msg.GetOffset(), msg.GetOffset() + 1};
}
-TString IssuesSingleLineString(const NYql::TIssues& issues) {
- return SubstGlobalCopy(issues.ToString(), '\n', ' ');
-}
-
-void MakeCountersNotNull(TReaderCounters& counters);
-bool HasNullCounters(TReaderCounters& counters);
-
-class TErrorHandler : public IErrorHandler {
-public:
- TErrorHandler(std::weak_ptr<TReadSession> session)
- : Session(std::move(session))
- {
- }
-
- void AbortSession(TSessionClosedEvent&& closeEvent) override;
-
-private:
- std::weak_ptr<TReadSession> Session;
-};
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TReadSession
TStringBuilder TReadSession::GetLogPrefix() const {
return TStringBuilder() << GetDatabaseLogPrefix(DbDriverState->Database) << "[" << SessionId << "] ";
@@ -90,8 +71,8 @@ Ydb::PersQueue::ClusterDiscovery::DiscoverClustersRequest TReadSession::MakeClus
}
void TReadSession::Start() {
- ErrorHandler = MakeIntrusive<TErrorHandler>(weak_from_this());
- EventsQueue = std::make_shared<TReadSessionEventsQueue>(Settings, weak_from_this());
+ ErrorHandler = MakeIntrusive<TErrorHandler<true>>(weak_from_this());
+ EventsQueue = std::make_shared<TReadSessionEventsQueue<true>>(Settings, weak_from_this());
if (!ValidateSettings()) {
return;
@@ -166,7 +147,7 @@ void TReadSession::StartClusterDiscovery() {
void TReadSession::ProceedWithoutClusterDiscovery() {
- TDeferredActions deferred;
+ TDeferredActions<true> deferred;
with_lock (Lock) {
if (Aborting) {
return;
@@ -183,7 +164,7 @@ void TReadSession::ProceedWithoutClusterDiscovery() {
ScheduleDumpCountersToLog();
}
-void TReadSession::CreateClusterSessionsImpl(TDeferredActions& deferred) {
+void TReadSession::CreateClusterSessionsImpl(TDeferredActions<true>& deferred) {
// Create cluster sessions.
ui64 partitionStreamIdStart = 1;
const size_t clusterSessionsCount = ClusterSessions.size();
@@ -205,7 +186,7 @@ void TReadSession::CreateClusterSessionsImpl(TDeferredActions& deferred) {
return;
}
clusterSessionInfo.Session =
- std::make_shared<TSingleClusterReadSessionImpl>(
+ std::make_shared<TSingleClusterReadSessionImpl<true>>(
sessionSettings,
DbDriverState->Database,
SessionId,
@@ -222,7 +203,7 @@ void TReadSession::CreateClusterSessionsImpl(TDeferredActions& deferred) {
}
void TReadSession::OnClusterDiscovery(const TStatus& status, const Ydb::PersQueue::ClusterDiscovery::DiscoverClustersResult& result) {
- TDeferredActions deferred;
+ TDeferredActions<true> deferred;
with_lock (Lock) {
if (Aborting) {
return;
@@ -322,7 +303,7 @@ void TReadSession::OnClusterDiscovery(const TStatus& status, const Ydb::PersQueu
ScheduleDumpCountersToLog();
}
-void TReadSession::RestartClusterDiscoveryImpl(TDuration delay, TDeferredActions& deferred) {
+void TReadSession::RestartClusterDiscoveryImpl(TDuration delay, TDeferredActions<true>& deferred) {
Log.Write(TLOG_DEBUG, GetLogPrefix() << "Restart cluster discovery in " << delay);
auto startCallback = [self = weak_from_this()](bool ok) {
if (ok) {
@@ -344,14 +325,10 @@ void TReadSession::RestartClusterDiscoveryImpl(TDuration delay, TDeferredActions
bool TReadSession::Close(TDuration timeout) {
Log.Write(TLOG_INFO, GetLogPrefix() << "Closing read session. Close timeout: " << timeout);
- with_lock (Lock) {
- Cancel(ClusterDiscoveryDelayContext);
- Cancel(DumpCountersContext);
- }
// Log final counters.
DumpCountersToLog();
- std::vector<TSingleClusterReadSessionImpl::TPtr> sessions;
+ std::vector<TSingleClusterReadSessionImpl<true>::TPtr> sessions;
NThreading::TPromise<bool> promise = NThreading::NewPromise<bool>();
std::shared_ptr<std::atomic<size_t>> count = std::make_shared<std::atomic<size_t>>(0);
auto callback = [=]() mutable {
@@ -360,7 +337,7 @@ bool TReadSession::Close(TDuration timeout) {
}
};
- TDeferredActions deferred;
+ TDeferredActions<true> deferred;
with_lock (Lock) {
if (Closing || Aborting) {
return false;
@@ -425,12 +402,18 @@ bool TReadSession::Close(TDuration timeout) {
return result;
}
-void TReadSession::AbortImpl(TSessionClosedEvent&& closeEvent, TDeferredActions& deferred) {
+void TReadSession::AbortImpl(TSessionClosedEvent&& closeEvent, TDeferredActions<true>& deferred) {
if (!Aborting) {
Aborting = true;
Log.Write(TLOG_NOTICE, GetLogPrefix() << "Aborting read session. Description: " << closeEvent.DebugString());
- Cancel(ClusterDiscoveryDelayContext);
- Cancel(DumpCountersContext);
+ if (ClusterDiscoveryDelayContext) {
+ ClusterDiscoveryDelayContext->Cancel();
+ ClusterDiscoveryDelayContext.reset();
+ }
+ if (DumpCountersContext) {
+ DumpCountersContext->Cancel();
+ DumpCountersContext.reset();
+ }
for (auto& [cluster, sessionInfo] : ClusterSessions) {
if (sessionInfo.Session) {
sessionInfo.Session->Abort();
@@ -440,11 +423,11 @@ void TReadSession::AbortImpl(TSessionClosedEvent&& closeEvent, TDeferredActions&
}
}
-void TReadSession::AbortImpl(EStatus statusCode, NYql::TIssues&& issues, TDeferredActions& deferred) {
+void TReadSession::AbortImpl(EStatus statusCode, NYql::TIssues&& issues, TDeferredActions<true>& deferred) {
AbortImpl(TSessionClosedEvent(statusCode, std::move(issues)), deferred);
}
-void TReadSession::AbortImpl(EStatus statusCode, const TString& message, TDeferredActions& deferred) {
+void TReadSession::AbortImpl(EStatus statusCode, const TString& message, TDeferredActions<true>& deferred) {
NYql::TIssues issues;
issues.AddIssue(message);
AbortImpl(statusCode, std::move(issues), deferred);
@@ -461,7 +444,7 @@ void TReadSession::Abort(EStatus statusCode, const TString& message) {
}
void TReadSession::Abort(TSessionClosedEvent&& closeEvent) {
- TDeferredActions deferred;
+ TDeferredActions<true> deferred;
with_lock (Lock) {
AbortImpl(std::move(closeEvent), deferred);
}
@@ -553,7 +536,7 @@ void TReadSession::DumpCountersToLog(size_t timeNumber) {
const bool dumpSessionsStatistics = timeNumber % 600 == 0; // Every 10 minutes.
*Settings.Counters_->CurrentSessionLifetimeMs = (TInstant::Now() - StartSessionTime).MilliSeconds();
- std::vector<TSingleClusterReadSessionImpl::TPtr> sessions;
+ std::vector<TSingleClusterReadSessionImpl<true>::TPtr> sessions;
with_lock (Lock) {
if (Closing || Aborting) {
return;
@@ -625,976 +608,8 @@ void TReadSession::ScheduleDumpCountersToLog(size_t timeNumber) {
}
}
-TPartitionStreamImpl::~TPartitionStreamImpl() = default;
-
-TLog TPartitionStreamImpl::GetLog() const {
- if (auto session = Session.lock()) {
- return session->GetLog();
- }
- return {};
-}
-
-void TPartitionStreamImpl::Commit(ui64 startOffset, ui64 endOffset) {
- std::vector<std::pair<ui64, ui64>> toCommit;
- if (auto sessionShared = Session.lock()) {
- Y_VERIFY(endOffset > startOffset);
- with_lock(sessionShared->Lock) {
- if (!AddToCommitRanges(startOffset, endOffset, true)) // Add range for real commit always.
- return;
-
- Y_VERIFY(!Commits.Empty());
- for (auto c : Commits) {
- if (c.first >= endOffset) break; // Commit only gaps before client range.
- toCommit.emplace_back(c);
- }
- Commits.EraseInterval(0, endOffset); // Drop only committed ranges;
- }
- for (auto range: toCommit) {
- sessionShared->Commit(this, range.first, range.second);
- }
- }
-}
-
-void TPartitionStreamImpl::RequestStatus() {
- if (auto sessionShared = Session.lock()) {
- sessionShared->RequestPartitionStreamStatus(this);
- }
-}
-
-void TPartitionStreamImpl::ConfirmCreate(TMaybe<ui64> readOffset, TMaybe<ui64> commitOffset) {
- if (auto sessionShared = Session.lock()) {
- sessionShared->ConfirmPartitionStreamCreate(this, readOffset, commitOffset);
- }
-}
-
-void TPartitionStreamImpl::ConfirmDestroy() {
- if (auto sessionShared = Session.lock()) {
- sessionShared->ConfirmPartitionStreamDestroy(this);
- }
-}
-
-void TPartitionStreamImpl::StopReading() {
- Y_FAIL("Not implemented"); // TODO
-}
-
-void TPartitionStreamImpl::ResumeReading() {
- Y_FAIL("Not implemented"); // TODO
-}
-
-void TPartitionStreamImpl::SignalReadyEvents(TReadSessionEventsQueue* queue, TDeferredActions& deferred) {
- for (auto& event : EventsQueue) {
- event.Signal(this, queue, deferred);
-
- if (!event.IsReady()) {
- break;
- }
- }
-}
-
-TStringBuilder TSingleClusterReadSessionImpl::GetLogPrefix() const {
- return TStringBuilder() << GetDatabaseLogPrefix(Database) << "[" << SessionId << "] [" << ClusterName << "] ";
-}
-
-void TSingleClusterReadSessionImpl::Start() {
- Settings.DecompressionExecutor_->Start();
- Settings.EventHandlers_.HandlersExecutor_->Start();
- if (!Reconnect(TPlainStatus())) {
- ErrorHandler->AbortSession(EStatus::ABORTED, DRIVER_IS_STOPPING_DESCRIPTION);
- }
-}
-
-bool TSingleClusterReadSessionImpl::Reconnect(const TPlainStatus& status) {
- TDuration delay = TDuration::Zero();
- NGrpc::IQueueClientContextPtr delayContext = nullptr;
- NGrpc::IQueueClientContextPtr connectContext = ClientContext->CreateContext();
- NGrpc::IQueueClientContextPtr connectTimeoutContext = ClientContext->CreateContext();
- if (!connectContext || !connectTimeoutContext) {
- return false;
- }
-
- // Previous operations contexts.
- NGrpc::IQueueClientContextPtr prevConnectContext;
- NGrpc::IQueueClientContextPtr prevConnectTimeoutContext;
- NGrpc::IQueueClientContextPtr prevConnectDelayContext;
-
- if (!status.Ok()) {
- Log.Write(
- TLOG_INFO,
- GetLogPrefix() << "Got error. Status: " << status.Status
- << ". Description: " << IssuesSingleLineString(status.Issues)
- );
- }
-
- TDeferredActions deferred;
- with_lock (Lock) {
- if (Aborting) {
- Cancel(connectContext);
- Cancel(connectTimeoutContext);
- return false;
- }
- Processor = nullptr;
- WaitingReadResponse = false;
- ServerMessage = std::make_shared<Ydb::PersQueue::V1::MigrationStreamingReadServerMessage>();
- ++ConnectionGeneration;
- if (RetryState) {
- TMaybe<TDuration> nextDelay = RetryState->GetNextRetryDelay(status.Status);
- if (nextDelay) {
- delay = *nextDelay;
- delayContext = ClientContext->CreateContext();
- if (!delayContext) {
- return false;
- }
- Log.Write(
- TLOG_DEBUG,
- GetLogPrefix() << "Reconnecting session to cluster " << ClusterName << " in "<< delay
- );
- } else {
- return false;
- }
- } else {
- RetryState = Settings.RetryPolicy_->CreateRetryState();
- }
- ++ConnectionAttemptsDone;
-
- // Set new context
- prevConnectContext = std::exchange(ConnectContext, connectContext);
- prevConnectTimeoutContext = std::exchange(ConnectTimeoutContext, connectTimeoutContext);
- prevConnectDelayContext = std::exchange(ConnectDelayContext, delayContext);
-
- Y_ASSERT(ConnectContext);
- Y_ASSERT(ConnectTimeoutContext);
- Y_ASSERT((delay == TDuration::Zero()) == !ConnectDelayContext);
-
- // Destroy all partition streams before connecting.
- DestroyAllPartitionStreamsImpl(deferred);
- }
-
- // Cancel previous operations.
- Cancel(prevConnectContext);
- Cancel(prevConnectTimeoutContext);
- Cancel(prevConnectDelayContext);
-
- auto connectCallback = [weakThis = weak_from_this(), connectContext = connectContext](TPlainStatus&& st, typename IProcessor::TPtr&& processor) {
- if (auto sharedThis = weakThis.lock()) {
- sharedThis->OnConnect(std::move(st), std::move(processor), connectContext); //OnConnect could be called inplace!
- }
- };
-
- auto connectTimeoutCallback = [weakThis = weak_from_this(), connectTimeoutContext = connectTimeoutContext](bool ok) {
- if (ok) {
- if (auto sharedThis = weakThis.lock()) {
- sharedThis->OnConnectTimeout(connectTimeoutContext);
- }
- }
- };
-
- Y_ASSERT(connectContext);
- Y_ASSERT(connectTimeoutContext);
- Y_ASSERT((delay == TDuration::Zero()) == !delayContext);
- ConnectionFactory->CreateProcessor(
- std::move(connectCallback),
- TRpcRequestSettings::Make(Settings),
- std::move(connectContext),
- TDuration::Seconds(30) /* connect timeout */, // TODO: make connect timeout setting.
- std::move(connectTimeoutContext),
- std::move(connectTimeoutCallback),
- delay,
- std::move(delayContext));
- return true;
-}
-
-void TSingleClusterReadSessionImpl::BreakConnectionAndReconnectImpl(TPlainStatus&& status, TDeferredActions& deferred) {
- Log.Write(
- TLOG_INFO,
- GetLogPrefix() << "Break connection due to unexpected message from server. Status: " << status.Status
- << ", Issues: \"" << IssuesSingleLineString(status.Issues) << "\""
- );
-
- Processor->Cancel();
- Processor = nullptr;
- RetryState = Settings.RetryPolicy_->CreateRetryState(); // Explicitly create retry state to determine whether we should connect to server again.
-
- deferred.DeferReconnection(shared_from_this(), ErrorHandler, std::move(status));
-}
-
-void TSingleClusterReadSessionImpl::OnConnectTimeout(const NGrpc::IQueueClientContextPtr& connectTimeoutContext) {
- with_lock (Lock) {
- if (ConnectTimeoutContext == connectTimeoutContext) {
- Cancel(ConnectContext);
- ConnectContext = nullptr;
- ConnectTimeoutContext = nullptr;
- ConnectDelayContext = nullptr;
-
- if (Closing || Aborting) {
- CallCloseCallbackImpl();
- return;
- }
- } else {
- return;
- }
- }
-
- ++*Settings.Counters_->Errors;
- TStringBuilder description;
- description << "Failed to establish connection to server. Attempts done: " << ConnectionAttemptsDone;
- if (!Reconnect(TPlainStatus(EStatus::TIMEOUT, description))) {
- ErrorHandler->AbortSession(EStatus::TIMEOUT, description);
- }
-}
-
-void TSingleClusterReadSessionImpl::OnConnect(TPlainStatus&& st, typename IProcessor::TPtr&& processor, const NGrpc::IQueueClientContextPtr& connectContext) {
- TDeferredActions deferred;
- with_lock (Lock) {
- if (ConnectContext == connectContext) {
- Cancel(ConnectTimeoutContext);
- ConnectContext = nullptr;
- ConnectTimeoutContext = nullptr;
- ConnectDelayContext = nullptr;
-
- if (Closing || Aborting) {
- CallCloseCallbackImpl();
- return;
- }
-
- if (st.Ok()) {
- Processor = std::move(processor);
- RetryState = nullptr;
- ConnectionAttemptsDone = 0;
- InitImpl(deferred);
- return;
- }
- } else {
- return;
- }
- }
-
- if (!st.Ok()) {
- ++*Settings.Counters_->Errors;
- if (!Reconnect(st)) {
- ErrorHandler->AbortSession(st.Status,
- MakeIssueWithSubIssues(
- TStringBuilder() << "Failed to establish connection to server \"" << st.Endpoint << "\" ( cluster " << ClusterName << "). Attempts done: "
- << ConnectionAttemptsDone,
- st.Issues));
- }
- }
-}
-
-void TSingleClusterReadSessionImpl::InitImpl(TDeferredActions& deferred) { // Assumes that we're under lock.
- Log.Write(TLOG_DEBUG, GetLogPrefix() << "Successfully connected. Initializing session");
- Ydb::PersQueue::V1::MigrationStreamingReadClientMessage req;
- auto& init = *req.mutable_init_request();
- init.set_ranges_mode(GetRangesMode());
- for (const TTopicReadSettings& topic : Settings.Topics_) {
- auto* topicSettings = init.add_topics_read_settings();
- topicSettings->set_topic(topic.Path_);
- if (topic.StartingMessageTimestamp_) {
- topicSettings->set_start_from_written_at_ms(topic.StartingMessageTimestamp_->MilliSeconds());
- }
- for (ui64 groupId : topic.PartitionGroupIds_) {
- topicSettings->add_partition_group_ids(groupId);
- }
- }
- init.set_consumer(Settings.ConsumerName_);
- init.set_read_only_original(Settings.ReadOnlyOriginal_);
- init.mutable_read_params()->set_max_read_size(Settings.MaxMemoryUsageBytes_);
- if (Settings.MaxTimeLag_) {
- init.set_max_lag_duration_ms(Settings.MaxTimeLag_->MilliSeconds());
- }
- if (Settings.StartingMessageTimestamp_) {
- init.set_start_from_written_at_ms(Settings.StartingMessageTimestamp_->MilliSeconds());
- }
-
- WriteToProcessorImpl(std::move(req));
- ReadFromProcessorImpl(deferred);
-}
-
-void TSingleClusterReadSessionImpl::ContinueReadingDataImpl() { // Assumes that we're under lock.
- if (!Closing
- && !Aborting
- && !WaitingReadResponse
- && !DataReadingSuspended
- && Processor
- && CompressedDataSize < GetCompressedDataSizeLimit()
- && static_cast<size_t>(CompressedDataSize + DecompressedDataSize) < Settings.MaxMemoryUsageBytes_)
- {
- Ydb::PersQueue::V1::MigrationStreamingReadClientMessage req;
- req.mutable_read();
-
- WriteToProcessorImpl(std::move(req));
- WaitingReadResponse = true;
- }
-}
-
-bool TSingleClusterReadSessionImpl::IsActualPartitionStreamImpl(const TPartitionStreamImpl* partitionStream) { // Assumes that we're under lock.
- auto actualPartitionStreamIt = PartitionStreams.find(partitionStream->GetAssignId());
- return actualPartitionStreamIt != PartitionStreams.end()
- && actualPartitionStreamIt->second->GetPartitionStreamId() == partitionStream->GetPartitionStreamId();
-}
-
-void TSingleClusterReadSessionImpl::ConfirmPartitionStreamCreate(const TPartitionStreamImpl* partitionStream, TMaybe<ui64> readOffset, TMaybe<ui64> commitOffset) {
- TStringBuilder commitOffsetLogStr;
- if (commitOffset) {
- commitOffsetLogStr << ". Commit offset: " << *commitOffset;
- }
- Log.Write(
- TLOG_INFO,
- GetLogPrefix() << "Confirm partition stream create. Partition stream id: " << partitionStream->GetPartitionStreamId()
- << ". Cluster: \"" << partitionStream->GetCluster() << "\". Topic: \"" << partitionStream->GetTopicPath()
- << "\". Partition: " << partitionStream->GetPartitionId()
- << ". Read offset: " << readOffset << commitOffsetLogStr
- );
-
- with_lock (Lock) {
- if (Aborting || Closing || !IsActualPartitionStreamImpl(partitionStream)) { // Got previous incarnation.
- Log.Write(
- TLOG_DEBUG,
- GetLogPrefix() << "Skip partition stream create confirm. Partition stream id: "
- << partitionStream->GetPartitionStreamId()
- );
- return;
- }
-
- Ydb::PersQueue::V1::MigrationStreamingReadClientMessage req;
- auto& startRead = *req.mutable_start_read();
- startRead.mutable_topic()->set_path(partitionStream->GetTopicPath());
- startRead.set_cluster(partitionStream->GetCluster());
- startRead.set_partition(partitionStream->GetPartitionId());
- startRead.set_assign_id(partitionStream->GetAssignId());
- if (readOffset) {
- startRead.set_read_offset(*readOffset);
- }
- if (commitOffset) {
- startRead.set_commit_offset(*commitOffset);
- }
-
- WriteToProcessorImpl(std::move(req));
- }
-}
-
-void TSingleClusterReadSessionImpl::ConfirmPartitionStreamDestroy(TPartitionStreamImpl* partitionStream) {
- Log.Write(
- TLOG_INFO,
- GetLogPrefix() << "Confirm partition stream destroy. Partition stream id: "
- << partitionStream->GetPartitionStreamId()
- << ". Cluster: \"" << partitionStream->GetCluster() << "\". Topic: \"" << partitionStream->GetTopicPath()
- << "\". Partition: " << partitionStream->GetPartitionId()
- );
-
- TDeferredActions deferred;
- with_lock (Lock) {
- if (Aborting || Closing || !IsActualPartitionStreamImpl(partitionStream)) { // Got previous incarnation.
- Log.Write(
- TLOG_DEBUG,
- GetLogPrefix() << "Skip partition stream destroy confirm. Partition stream id: "
- << partitionStream->GetPartitionStreamId()
- );
- return;
- }
-
- CookieMapping.RemoveMapping(partitionStream->GetPartitionStreamId());
- PartitionStreams.erase(partitionStream->GetAssignId());
- EventsQueue->PushEvent({partitionStream, weak_from_this(), TReadSessionEvent::TPartitionStreamClosedEvent(partitionStream, TReadSessionEvent::TPartitionStreamClosedEvent::EReason::DestroyConfirmedByUser)}, deferred);
-
- Ydb::PersQueue::V1::MigrationStreamingReadClientMessage req;
- auto& released = *req.mutable_released();
- released.mutable_topic()->set_path(partitionStream->GetTopicPath());
- released.set_cluster(partitionStream->GetCluster());
- released.set_partition(partitionStream->GetPartitionId());
- released.set_assign_id(partitionStream->GetAssignId());
-
- WriteToProcessorImpl(std::move(req));
- }
-}
-
-void TSingleClusterReadSessionImpl::Commit(const TPartitionStreamImpl* partitionStream, ui64 startOffset, ui64 endOffset) {
- Log.Write(
- TLOG_DEBUG,
- GetLogPrefix() << "Commit offsets [" << startOffset << ", " << endOffset
- << "). Partition stream id: " << partitionStream->GetPartitionStreamId()
- );
- with_lock (Lock) {
- if (Aborting || Closing || !IsActualPartitionStreamImpl(partitionStream)) { // Got previous incarnation.
- return;
- }
- Ydb::PersQueue::V1::MigrationStreamingReadClientMessage req;
- bool hasSomethingToCommit = false;
- if (GetRangesMode()) {
- hasSomethingToCommit = true;
- auto* range = req.mutable_commit()->add_offset_ranges();
- range->set_assign_id(partitionStream->GetAssignId());
- range->set_start_offset(startOffset);
- range->set_end_offset(endOffset);
- } else {
- for (ui64 offset = startOffset; offset < endOffset; ++offset) {
- TPartitionCookieMapping::TCookie::TPtr cookie = CookieMapping.CommitOffset(partitionStream->GetPartitionStreamId(), offset);
- if (cookie) {
- hasSomethingToCommit = true;
- auto* cookieInfo = req.mutable_commit()->add_cookies();
- cookieInfo->set_assign_id(partitionStream->GetAssignId());
- cookieInfo->set_partition_cookie(cookie->Cookie);
- }
- }
- }
- if (hasSomethingToCommit) {
- WriteToProcessorImpl(std::move(req));
- }
- }
-}
-
-void TSingleClusterReadSessionImpl::RequestPartitionStreamStatus(const TPartitionStreamImpl* partitionStream) {
- Log.Write(
- TLOG_DEBUG,
- GetLogPrefix() << "Requesting status for partition stream id: " << partitionStream->GetPartitionStreamId()
- );
- with_lock (Lock) {
- if (Aborting || Closing || !IsActualPartitionStreamImpl(partitionStream)) { // Got previous incarnation.
- return;
- }
-
- Ydb::PersQueue::V1::MigrationStreamingReadClientMessage req;
- auto& status = *req.mutable_status();
- status.mutable_topic()->set_path(partitionStream->GetTopicPath());
- status.set_cluster(partitionStream->GetCluster());
- status.set_partition(partitionStream->GetPartitionId());
- status.set_assign_id(partitionStream->GetAssignId());
-
- WriteToProcessorImpl(std::move(req));
- }
-}
-
-void TSingleClusterReadSessionImpl::OnUserRetrievedEvent(const TReadSessionEvent::TEvent& event) {
- Log.Write(TLOG_DEBUG, GetLogPrefix() << "Read session event " << DebugString(event));
- const i64 bytesCount = static_cast<i64>(CalcDataSize(event));
- Y_ASSERT(bytesCount >= 0);
-
- if (!std::get_if<TReadSessionEvent::TDataReceivedEvent>(&event)) { // Event is not data event.
- return;
- }
-
- *Settings.Counters_->MessagesInflight -= std::get<TReadSessionEvent::TDataReceivedEvent>(event).GetMessagesCount();
- *Settings.Counters_->BytesInflightTotal -= bytesCount;
- *Settings.Counters_->BytesInflightUncompressed -= bytesCount;
-
- TDeferredActions deferred;
- with_lock (Lock) {
- UpdateMemoryUsageStatisticsImpl();
- Y_VERIFY(bytesCount <= DecompressedDataSize);
- DecompressedDataSize -= bytesCount;
- ContinueReadingDataImpl();
- StartDecompressionTasksImpl(deferred);
- }
-}
-
-void TSingleClusterReadSessionImpl::WriteToProcessorImpl(Ydb::PersQueue::V1::MigrationStreamingReadClientMessage&& req) { // Assumes that we're under lock.
- if (Processor) {
- Processor->Write(std::move(req));
- }
-}
-
-bool TSingleClusterReadSessionImpl::HasCommitsInflightImpl() const {
- for (const auto& [id, partitionStream] : PartitionStreams) {
- if (partitionStream->HasCommitsInflight())
- return true;
- }
- return false;
-}
-
-void TSingleClusterReadSessionImpl::ReadFromProcessorImpl(TDeferredActions& deferred) { // Assumes that we're under lock.
- if (Closing && !HasCommitsInflightImpl()) {
- Processor->Cancel();
- CallCloseCallbackImpl();
- return;
- }
-
- if (Processor) {
- ServerMessage->Clear();
-
- auto callback = [weakThis = weak_from_this(),
- connectionGeneration = ConnectionGeneration,
- // Capture message & processor not to read in freed memory.
- serverMessage = ServerMessage,
- processor = Processor](NGrpc::TGrpcStatus&& grpcStatus) {
- if (auto sharedThis = weakThis.lock()) {
- sharedThis->OnReadDone(std::move(grpcStatus), connectionGeneration);
- }
- };
-
- deferred.DeferReadFromProcessor(Processor, ServerMessage.get(), std::move(callback));
- }
-}
-
-void TSingleClusterReadSessionImpl::OnReadDone(NGrpc::TGrpcStatus&& grpcStatus, size_t connectionGeneration) {
- TPlainStatus errorStatus;
- if (!grpcStatus.Ok()) {
- errorStatus = TPlainStatus(std::move(grpcStatus));
- }
-
- TDeferredActions deferred;
- with_lock (Lock) {
- if (Aborting) {
- return;
- }
-
- if (connectionGeneration != ConnectionGeneration) {
- return; // Message from previous connection. Ignore.
- }
- if (errorStatus.Ok()) {
- if (IsErrorMessage(*ServerMessage)) {
- errorStatus = MakeErrorFromProto(*ServerMessage);
- } else {
- switch (ServerMessage->response_case()) {
- case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kInitResponse:
- OnReadDoneImpl(std::move(*ServerMessage->mutable_init_response()), deferred);
- break;
- case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kDataBatch:
- OnReadDoneImpl(std::move(*ServerMessage->mutable_data_batch()), deferred);
- break;
- case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kAssigned:
- OnReadDoneImpl(std::move(*ServerMessage->mutable_assigned()), deferred);
- break;
- case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kRelease:
- OnReadDoneImpl(std::move(*ServerMessage->mutable_release()), deferred);
- break;
- case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kCommitted:
- OnReadDoneImpl(std::move(*ServerMessage->mutable_committed()), deferred);
- break;
- case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kPartitionStatus:
- OnReadDoneImpl(std::move(*ServerMessage->mutable_partition_status()), deferred);
- break;
- case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::RESPONSE_NOT_SET:
- errorStatus = TPlainStatus::Internal("Unexpected response from server");
- break;
- }
- if (errorStatus.Ok()) {
- ReadFromProcessorImpl(deferred); // Read next.
- }
- }
- }
- }
- if (!errorStatus.Ok()) {
- ++*Settings.Counters_->Errors;
- RetryState = Settings.RetryPolicy_->CreateRetryState(); // Explicitly create retry state to determine whether we should connect to server again.
- if (!Reconnect(errorStatus)) {
- ErrorHandler->AbortSession(std::move(errorStatus));
- }
- }
-}
-
-void TSingleClusterReadSessionImpl::OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::InitResponse&& msg, TDeferredActions& deferred) { // Assumes that we're under lock.
- Y_UNUSED(deferred);
-
- Log.Write(TLOG_INFO, GetLogPrefix() << "Server session id: " << msg.session_id());
-
- // Successful init. Do nothing.
- ContinueReadingDataImpl();
-}
-
-void TSingleClusterReadSessionImpl::OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch&& msg, TDeferredActions& deferred) { // Assumes that we're under lock.
- if (Closing || Aborting) {
- return; // Don't process new data.
- }
- UpdateMemoryUsageStatisticsImpl();
- for (Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData& partitionData : *msg.mutable_partition_data()) {
- auto partitionStreamIt = PartitionStreams.find(partitionData.cookie().assign_id());
- if (partitionStreamIt == PartitionStreams.end()) {
- ++*Settings.Counters_->Errors;
- BreakConnectionAndReconnectImpl(EStatus::INTERNAL_ERROR,
- TStringBuilder() << "Got unexpected partition stream data message. Topic: "
- << partitionData.topic()
- << ". Partition: " << partitionData.partition() << " AssignId: " << partitionData.cookie().assign_id(),
- deferred);
- return;
- }
- const TIntrusivePtr<TPartitionStreamImpl>& partitionStream = partitionStreamIt->second;
-
- TPartitionCookieMapping::TCookie::TPtr cookie = MakeIntrusive<TPartitionCookieMapping::TCookie>(partitionData.cookie().partition_cookie(), partitionStream);
-
- ui64 firstOffset = std::numeric_limits<ui64>::max();
- ui64 currentOffset = std::numeric_limits<ui64>::max();
- ui64 desiredOffset = partitionStream->GetFirstNotReadOffset();
- for (const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::Batch& batch : partitionData.batches()) {
- // Validate messages.
- for (const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::MessageData& messageData : batch.message_data()) {
- // Check offsets continuity.
- if (messageData.offset() != desiredOffset) {
- bool res = partitionStream->AddToCommitRanges(desiredOffset, messageData.offset(), GetRangesMode());
- Y_VERIFY(res);
- }
-
- if (firstOffset == std::numeric_limits<ui64>::max()) {
- firstOffset = messageData.offset();
- }
- currentOffset = messageData.offset();
- desiredOffset = currentOffset + 1;
- partitionStream->UpdateMaxReadOffset(currentOffset);
- const i64 messageSize = static_cast<i64>(messageData.data().size());
- CompressedDataSize += messageSize;
- *Settings.Counters_->BytesInflightTotal += messageSize;
- *Settings.Counters_->BytesInflightCompressed += messageSize;
- ++*Settings.Counters_->MessagesInflight;
- }
- }
- if (firstOffset == std::numeric_limits<ui64>::max()) {
- BreakConnectionAndReconnectImpl(EStatus::INTERNAL_ERROR,
- TStringBuilder() << "Got empty data message. Topic: "
- << partitionData.topic()
- << ". Partition: " << partitionData.partition()
- << " message: " << msg,
- deferred);
- return;
- }
- cookie->SetOffsetRange(std::make_pair(firstOffset, desiredOffset));
- partitionStream->SetFirstNotReadOffset(desiredOffset);
- if (!CookieMapping.AddMapping(cookie)) {
- BreakConnectionAndReconnectImpl(EStatus::INTERNAL_ERROR,
- TStringBuilder() << "Got unexpected data message. Topic: "
- << partitionData.topic()
- << ". Partition: " << partitionData.partition()
- << ". Cookie mapping already has such cookie",
- deferred);
- return;
- }
- TDataDecompressionInfo* decompressionInfo = EventsQueue->PushDataEvent(partitionStream, std::move(partitionData));
- Y_VERIFY(decompressionInfo);
- if (decompressionInfo) {
- DecompressionQueue.emplace_back(decompressionInfo, partitionStream);
- StartDecompressionTasksImpl(deferred);
- }
- }
-
- WaitingReadResponse = false;
- ContinueReadingDataImpl();
-}
-
-void TSingleClusterReadSessionImpl::OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Assigned&& msg, TDeferredActions& deferred) { // Assumes that we're under lock.
- auto partitionStream = MakeIntrusive<TPartitionStreamImpl>(NextPartitionStreamId,
- msg.topic().path(),
- msg.cluster(),
- msg.partition() + 1, // Group.
- msg.partition(), // Partition.
- msg.assign_id(),
- msg.read_offset(),
- weak_from_this(),
- ErrorHandler);
- NextPartitionStreamId += PartitionStreamIdStep;
-
- // Renew partition stream.
- TIntrusivePtr<TPartitionStreamImpl>& currentPartitionStream = PartitionStreams[partitionStream->GetAssignId()];
- if (currentPartitionStream) {
- CookieMapping.RemoveMapping(currentPartitionStream->GetPartitionStreamId());
- EventsQueue->PushEvent({currentPartitionStream, weak_from_this(), TReadSessionEvent::TPartitionStreamClosedEvent(currentPartitionStream, TReadSessionEvent::TPartitionStreamClosedEvent::EReason::Lost)}, deferred);
- }
- currentPartitionStream = partitionStream;
-
- // Send event to user.
- EventsQueue->PushEvent({partitionStream, weak_from_this(), TReadSessionEvent::TCreatePartitionStreamEvent(partitionStream, msg.read_offset(), msg.end_offset())}, deferred);
-}
-
-void TSingleClusterReadSessionImpl::OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Release&& msg, TDeferredActions& deferred) { // Assumes that we're under lock.
- auto partitionStreamIt = PartitionStreams.find(msg.assign_id());
- if (partitionStreamIt == PartitionStreams.end()) {
- return;
- }
- TIntrusivePtr<TPartitionStreamImpl> partitionStream = partitionStreamIt->second;
- if (msg.forceful_release()) {
- PartitionStreams.erase(msg.assign_id());
- CookieMapping.RemoveMapping(partitionStream->GetPartitionStreamId());
- EventsQueue->PushEvent({partitionStream, weak_from_this(), TReadSessionEvent::TPartitionStreamClosedEvent(partitionStream, TReadSessionEvent::TPartitionStreamClosedEvent::EReason::Lost)}, deferred);
- } else {
- EventsQueue->PushEvent({partitionStream, weak_from_this(), TReadSessionEvent::TDestroyPartitionStreamEvent(std::move(partitionStream), msg.commit_offset())}, deferred);
- }
-}
-
-void TSingleClusterReadSessionImpl::OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Committed&& msg, TDeferredActions& deferred) { // Assumes that we're under lock.
-
- Log.Write(TLOG_DEBUG, GetLogPrefix() << "Committed response: " << msg);
-
- TMap<ui64, TIntrusivePtr<TPartitionStreamImpl>> partitionStreams;
- for (const Ydb::PersQueue::V1::CommitCookie& cookieProto : msg.cookies()) {
- TPartitionCookieMapping::TCookie::TPtr cookie = CookieMapping.RetrieveCommittedCookie(cookieProto);
- if (cookie) {
- cookie->PartitionStream->UpdateMaxCommittedOffset(cookie->OffsetRange.second);
- partitionStreams[cookie->PartitionStream->GetPartitionStreamId()] = cookie->PartitionStream;
- }
- }
- for (auto& [id, partitionStream] : partitionStreams) {
- EventsQueue->PushEvent({partitionStream, weak_from_this(), TReadSessionEvent::TCommitAcknowledgementEvent(partitionStream, partitionStream->GetMaxCommittedOffset())}, deferred);
- }
-
- for (const auto& rangeProto : msg.offset_ranges()) {
- auto partitionStreamIt = PartitionStreams.find(rangeProto.assign_id());
- if (partitionStreamIt != PartitionStreams.end()) {
- auto partitionStream = partitionStreamIt->second;
- partitionStream->UpdateMaxCommittedOffset(rangeProto.end_offset());
- EventsQueue->PushEvent({partitionStream, weak_from_this(), TReadSessionEvent::TCommitAcknowledgementEvent(partitionStream, rangeProto.end_offset())}, deferred);
- }
- }
-
-}
-
-void TSingleClusterReadSessionImpl::OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::PartitionStatus&& msg, TDeferredActions& deferred) { // Assumes that we're under lock.
- auto partitionStreamIt = PartitionStreams.find(msg.assign_id());
- if (partitionStreamIt == PartitionStreams.end()) {
- return;
- }
- EventsQueue->PushEvent(
- {partitionStreamIt->second, weak_from_this(), TReadSessionEvent::TPartitionStreamStatusEvent(partitionStreamIt->second,
- msg.committed_offset(),
- 0, // TODO: support read offset in status
- msg.end_offset(),
- TInstant::MilliSeconds(msg.write_watermark_ms()))},
- deferred);
-}
-
-void TSingleClusterReadSessionImpl::StartDecompressionTasksImpl(TDeferredActions& deferred) {
- UpdateMemoryUsageStatisticsImpl();
- const i64 limit = GetDecompressedDataSizeLimit();
- Y_VERIFY(limit > 0);
- while (DecompressedDataSize < limit
- && (static_cast<size_t>(CompressedDataSize + DecompressedDataSize) < Settings.MaxMemoryUsageBytes_
- || DecompressedDataSize == 0 /* Allow decompression of at least one message even if memory is full. */)
- && !DecompressionQueue.empty())
- {
- TDecompressionQueueItem& current = DecompressionQueue.front();
- auto sentToDecompress = current.BatchInfo->StartDecompressionTasks(Settings.DecompressionExecutor_,
- Max(limit - DecompressedDataSize, static_cast<i64>(1)),
- AverageCompressionRatio,
- current.PartitionStream,
- deferred);
- DecompressedDataSize += sentToDecompress;
- if (current.BatchInfo->AllDecompressionTasksStarted()) {
- DecompressionQueue.pop_front();
- } else {
- break;
- }
- }
-}
-
-void TSingleClusterReadSessionImpl::DestroyAllPartitionStreamsImpl(TDeferredActions& deferred) {
- for (auto&& [key, partitionStream] : PartitionStreams) {
- EventsQueue->PushEvent({partitionStream, weak_from_this(), TReadSessionEvent::TPartitionStreamClosedEvent(std::move(partitionStream), TReadSessionEvent::TPartitionStreamClosedEvent::EReason::ConnectionLost)}, deferred);
- }
- PartitionStreams.clear();
- CookieMapping.ClearMapping();
-}
-
-void TSingleClusterReadSessionImpl::OnCreateNewDecompressionTask() {
- ++DecompressionTasksInflight;
-}
-
-void TSingleClusterReadSessionImpl::OnDataDecompressed(i64 sourceSize, i64 estimatedDecompressedSize, i64 decompressedSize, size_t messagesCount) {
- TDeferredActions deferred;
- --DecompressionTasksInflight;
-
- *Settings.Counters_->BytesRead += decompressedSize;
- *Settings.Counters_->BytesReadCompressed += sourceSize;
- *Settings.Counters_->MessagesRead += messagesCount;
- *Settings.Counters_->BytesInflightUncompressed += decompressedSize;
- *Settings.Counters_->BytesInflightCompressed -= sourceSize;
- *Settings.Counters_->BytesInflightTotal += (decompressedSize - sourceSize);
-
- with_lock (Lock) {
- UpdateMemoryUsageStatisticsImpl();
- CompressedDataSize -= sourceSize;
- DecompressedDataSize += decompressedSize - estimatedDecompressedSize;
- constexpr double weight = 0.6;
- if (sourceSize > 0) {
- AverageCompressionRatio = weight * static_cast<double>(decompressedSize) / static_cast<double>(sourceSize) + (1 - weight) * AverageCompressionRatio;
- }
- if (Aborting) {
- return;
- }
- ContinueReadingDataImpl();
- StartDecompressionTasksImpl(deferred);
- }
-}
-
-void TSingleClusterReadSessionImpl::Abort() {
- Log.Write(TLOG_DEBUG, GetLogPrefix() << "Abort session to cluster");
-
- with_lock (Lock) {
- if (!Aborting) {
- Aborting = true;
- CloseCallback = {};
-
- // Cancel(ClientContext); // Don't cancel, because this is used only as factory for other contexts.
- Cancel(ConnectContext);
- Cancel(ConnectTimeoutContext);
- Cancel(ConnectDelayContext);
-
- if (Processor) {
- Processor->Cancel();
- }
- }
- }
-}
-
-void TSingleClusterReadSessionImpl::Close(std::function<void()> callback) {
- with_lock (Lock) {
- if (Aborting) {
- callback();
- }
-
- if (!Closing) {
- Closing = true;
-
- CloseCallback = std::move(callback);
-
- Cancel(ConnectContext);
- Cancel(ConnectTimeoutContext);
- Cancel(ConnectDelayContext);
-
- if (!Processor) {
- CallCloseCallbackImpl();
- } else {
- if (!HasCommitsInflightImpl()) {
- Processor->Cancel();
- CallCloseCallbackImpl();
- }
- }
- }
- }
-}
-
-void TSingleClusterReadSessionImpl::CallCloseCallbackImpl() {
- if (CloseCallback) {
- CloseCallback();
- CloseCallback = {};
- }
- Aborting = true; // So abort call will have no effect.
-}
-
-void TSingleClusterReadSessionImpl::StopReadingData() {
- with_lock (Lock) {
- DataReadingSuspended = true;
- }
-}
-
-void TSingleClusterReadSessionImpl::ResumeReadingData() {
- with_lock (Lock) {
- if (DataReadingSuspended) {
- DataReadingSuspended = false;
- ContinueReadingDataImpl();
- }
- }
-}
-
-void TSingleClusterReadSessionImpl::WaitAllDecompressionTasks() {
- Y_ASSERT(DecompressionTasksInflight >= 0);
- while (DecompressionTasksInflight > 0) {
- Sleep(TDuration::MilliSeconds(5)); // Perform active wait because this is aborting process and there are no decompression tasks here in normal situation.
- }
-}
-
-void TSingleClusterReadSessionImpl::DumpStatisticsToLog(TLogElement& log) {
- with_lock (Lock) {
- // cluster:topic:partition:stream-id:read-offset:committed-offset
- for (auto&& [key, partitionStream] : PartitionStreams) {
- log << " "
- << ClusterName
- << ':' << partitionStream->GetTopicPath()
- << ':' << partitionStream->GetPartitionId()
- << ':' << partitionStream->GetPartitionStreamId()
- << ':' << partitionStream->GetMaxReadOffset()
- << ':' << partitionStream->GetMaxCommittedOffset();
- }
- }
-}
-
-void TSingleClusterReadSessionImpl::UpdateMemoryUsageStatisticsImpl() {
- const TInstant now = TInstant::Now();
- const ui64 delta = (now - UsageStatisticsLastUpdateTime).MilliSeconds();
- UsageStatisticsLastUpdateTime = now;
- const double percent = 100.0 / static_cast<double>(Settings.MaxMemoryUsageBytes_);
-
- Settings.Counters_->TotalBytesInflightUsageByTime->Collect((DecompressedDataSize + CompressedDataSize) * percent, delta);
- Settings.Counters_->UncompressedBytesInflightUsageByTime->Collect(DecompressedDataSize * percent, delta);
- Settings.Counters_->CompressedBytesInflightUsageByTime->Collect(CompressedDataSize * percent, delta);
-}
-
-void TSingleClusterReadSessionImpl::UpdateMemoryUsageStatistics() {
- with_lock (Lock) {
- UpdateMemoryUsageStatisticsImpl();
- }
-}
-
-bool TSingleClusterReadSessionImpl::GetRangesMode() const {
- return Settings.RangesMode_.GetOrElse(RangesMode);
-}
-
-bool TSingleClusterReadSessionImpl::TPartitionCookieMapping::AddMapping(const TCookie::TPtr& cookie) {
- if (!Cookies.emplace(cookie->GetKey(), cookie).second) {
- return false;
- }
- for (ui64 offset = cookie->OffsetRange.first; offset < cookie->OffsetRange.second; ++offset) {
- if (!UncommittedOffsetToCookie.emplace(std::make_pair(cookie->PartitionStream->GetPartitionStreamId(), offset), cookie).second) {
- return false;
- }
- }
- PartitionStreamIdToCookie.emplace(cookie->PartitionStream->GetPartitionStreamId(), cookie);
- return true;
-}
-
-TSingleClusterReadSessionImpl::TPartitionCookieMapping::TCookie::TPtr TSingleClusterReadSessionImpl::TPartitionCookieMapping::CommitOffset(ui64 partitionStreamId, ui64 offset) {
- auto cookieIt = UncommittedOffsetToCookie.find(std::make_pair(partitionStreamId, offset));
- if (cookieIt != UncommittedOffsetToCookie.end()) {
- TCookie::TPtr cookie;
- if (!--cookieIt->second->UncommittedMessagesLeft) {
- ++CommitInflight;
- cookie = cookieIt->second;
- }
- UncommittedOffsetToCookie.erase(cookieIt);
- return cookie;
- } else {
- ThrowFatalError(TStringBuilder() << "Invalid offset " << offset << ". Partition stream id: " << partitionStreamId << Endl);
- }
- // If offset wasn't found, there might be already hard released partition.
- // This situation is OK.
- return nullptr;
-}
-
-TSingleClusterReadSessionImpl::TPartitionCookieMapping::TCookie::TPtr TSingleClusterReadSessionImpl::TPartitionCookieMapping::RetrieveCommittedCookie(const Ydb::PersQueue::V1::CommitCookie& cookieProto) {
- TCookie::TPtr cookieInfo;
- auto cookieIt = Cookies.find(TCookie::TKey(cookieProto.assign_id(), cookieProto.partition_cookie()));
- if (cookieIt != Cookies.end()) {
- --CommitInflight;
- cookieInfo = cookieIt->second;
- Cookies.erase(cookieIt);
-
- auto [rangeBegin, rangeEnd] = PartitionStreamIdToCookie.equal_range(cookieInfo->PartitionStream->GetPartitionStreamId());
- for (auto i = rangeBegin; i != rangeEnd; ++i) {
- if (i->second == cookieInfo) {
- PartitionStreamIdToCookie.erase(i);
- break;
- }
- }
- }
- return cookieInfo;
-}
-
-void TSingleClusterReadSessionImpl::TPartitionCookieMapping::RemoveMapping(ui64 partitionStreamId) {
- auto [rangeBegin, rangeEnd] = PartitionStreamIdToCookie.equal_range(partitionStreamId);
- for (auto i = rangeBegin; i != rangeEnd; ++i) {
- TCookie::TPtr cookie = i->second;
- Cookies.erase(cookie->GetKey());
- for (ui64 offset = cookie->OffsetRange.first; offset < cookie->OffsetRange.second; ++offset) {
- UncommittedOffsetToCookie.erase(std::make_pair(partitionStreamId, offset));
- }
- }
- PartitionStreamIdToCookie.erase(rangeBegin, rangeEnd);
-}
-
-void TSingleClusterReadSessionImpl::TPartitionCookieMapping::ClearMapping() {
- Cookies.clear();
- UncommittedOffsetToCookie.clear();
- PartitionStreamIdToCookie.clear();
- CommitInflight = 0;
-}
-
-bool TSingleClusterReadSessionImpl::TPartitionCookieMapping::HasUnacknowledgedCookies() const {
- return CommitInflight != 0;
-}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NPersQueue::TReadSessionEvent
TReadSessionEvent::TCreatePartitionStreamEvent::TCreatePartitionStreamEvent(TPartitionStream::TPtr partitionStream, ui64 committedOffset, ui64 endOffset)
: PartitionStream(std::move(partitionStream))
@@ -1605,7 +620,7 @@ TReadSessionEvent::TCreatePartitionStreamEvent::TCreatePartitionStreamEvent(TPar
void TReadSessionEvent::TCreatePartitionStreamEvent::Confirm(TMaybe<ui64> readOffset, TMaybe<ui64> commitOffset) {
if (PartitionStream) {
- static_cast<TPartitionStreamImpl*>(PartitionStream.Get())->ConfirmCreate(readOffset, commitOffset);
+ static_cast<TPartitionStreamImpl<true>*>(PartitionStream.Get())->ConfirmCreate(readOffset, commitOffset);
}
}
@@ -1617,7 +632,7 @@ TReadSessionEvent::TDestroyPartitionStreamEvent::TDestroyPartitionStreamEvent(TP
void TReadSessionEvent::TDestroyPartitionStreamEvent::Confirm() {
if (PartitionStream) {
- static_cast<TPartitionStreamImpl*>(PartitionStream.Get())->ConfirmDestroy();
+ static_cast<TPartitionStreamImpl<true>*>(PartitionStream.Get())->ConfirmDestroy();
}
}
@@ -1646,7 +661,7 @@ TReadSessionEvent::TDataReceivedEvent::TDataReceivedEvent(TVector<TMessage> mess
void TReadSessionEvent::TDataReceivedEvent::Commit() {
for (auto [from, to] : OffsetRanges) {
- static_cast<TPartitionStreamImpl*>(PartitionStream.Get())->Commit(from, to);
+ static_cast<TPartitionStreamImpl<true>*>(PartitionStream.Get())->Commit(from, to);
}
}
@@ -1733,635 +748,6 @@ TReadSessionEvent::TPartitionStreamStatusEvent::TPartitionStreamStatusEvent(TPar
{
}
-TReadSessionEventInfo::TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl> partitionStream, std::weak_ptr<IUserRetrievedEventCallback> session, TEvent event)
- : PartitionStream(std::move(partitionStream))
- , Event(std::move(event))
- , Session(std::move(session))
-{}
-
-TReadSessionEventInfo::TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl> partitionStream, std::weak_ptr<IUserRetrievedEventCallback> session)
- : PartitionStream(std::move(partitionStream))
- , Session(std::move(session))
-{}
-
-TReadSessionEventInfo::TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl> partitionStream,
- std::weak_ptr<IUserRetrievedEventCallback> session,
- TVector<TReadSessionEvent::TDataReceivedEvent::TMessage> messages,
- TVector<TReadSessionEvent::TDataReceivedEvent::TCompressedMessage> compressedMessages)
- : PartitionStream(std::move(partitionStream))
- , Event(
- NMaybe::TInPlace(),
- std::in_place_type_t<TReadSessionEvent::TDataReceivedEvent>(),
- std::move(messages),
- std::move(compressedMessages),
- PartitionStream
- )
- , Session(std::move(session))
-{
-}
-
-void TReadSessionEventInfo::MoveToPartitionStream() {
- PartitionStream->InsertEvent(std::move(*Event));
- Event = Nothing();
- Y_ASSERT(PartitionStream->HasEvents());
-}
-
-void TReadSessionEventInfo::ExtractFromPartitionStream() {
- if (!Event && !IsEmpty()) {
- Event = std::move(PartitionStream->TopEvent().GetEvent());
- PartitionStream->PopEvent();
- }
-}
-
-bool TReadSessionEventInfo::IsEmpty() const {
- return !PartitionStream || !PartitionStream->HasEvents();
-}
-
-bool TReadSessionEventInfo::IsDataEvent() const {
- return !IsEmpty() && PartitionStream->TopEvent().IsDataEvent();
-}
-
-bool TReadSessionEventInfo::HasMoreData() const {
- return PartitionStream->TopEvent().GetData().HasMoreData();
-}
-
-bool TReadSessionEventInfo::HasReadyUnreadData() const {
- return PartitionStream->TopEvent().GetData().HasReadyUnreadData();
-}
-
-void TReadSessionEventInfo::OnUserRetrievedEvent() {
- if (auto session = Session.lock()) {
- session->OnUserRetrievedEvent(*Event);
- }
-}
-
-bool TReadSessionEventInfo::TakeData(TVector<TReadSessionEvent::TDataReceivedEvent::TMessage>* messages,
- TVector<TReadSessionEvent::TDataReceivedEvent::TCompressedMessage>* compressedMessages,
- size_t* maxByteSize)
-{
- return PartitionStream->TopEvent().GetData().TakeData(PartitionStream, messages, compressedMessages, maxByteSize);
-}
-
-TReadSessionEventsQueue::TReadSessionEventsQueue(const TSettings& settings, std::weak_ptr<IUserRetrievedEventCallback> session)
- : TParent(settings)
- , Session(std::move(session))
-{
- const auto& h = Settings.EventHandlers_;
- if (h.CommonHandler_
- || h.DataReceivedHandler_
- || h.CommitAcknowledgementHandler_
- || h.CreatePartitionStreamHandler_
- || h.DestroyPartitionStreamHandler_
- || h.PartitionStreamStatusHandler_
- || h.PartitionStreamClosedHandler_
- || h.SessionClosedHandler_)
- {
- HasEventCallbacks = true;
- } else {
- HasEventCallbacks = false;
- }
-}
-
-void TReadSessionEventsQueue::PushEvent(TReadSessionEventInfo eventInfo, TDeferredActions& deferred) {
- if (Closed) {
- return;
- }
-
- with_lock (Mutex) {
- auto partitionStream = eventInfo.PartitionStream;
- eventInfo.MoveToPartitionStream();
- SignalReadyEventsImpl(partitionStream.Get(), deferred);
- }
-}
-
-void TReadSessionEventsQueue::SignalEventImpl(TIntrusivePtr<TPartitionStreamImpl> partitionStream, TDeferredActions& deferred) {
- if (Closed) {
- return;
- }
- auto session = partitionStream->GetSession();
- Events.emplace(std::move(partitionStream), std::move(session));
- SignalWaiterImpl(deferred);
-}
-
-TDataDecompressionInfo* TReadSessionEventsQueue::PushDataEvent(TIntrusivePtr<TPartitionStreamImpl> partitionStream, Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData&& msg) {
- if (Closed) {
- return nullptr;
- }
-
- with_lock (Mutex) {
- return &partitionStream->InsertDataEvent(std::move(msg), Settings.Decompress_);
- }
-}
-
-TMaybe<TReadSessionEventsQueue::TEventInfo> TReadSessionEventsQueue::GetDataEventImpl(TEventInfo& srcDataEventInfo, size_t* maxByteSize) { // Assumes that we're under lock.
- TVector<TReadSessionEvent::TDataReceivedEvent::TMessage> messages;
- TVector<TReadSessionEvent::TDataReceivedEvent::TCompressedMessage> compressedMessages;
- TIntrusivePtr<TPartitionStreamImpl> partitionStream = srcDataEventInfo.PartitionStream;
- bool messageExtracted = false;
- while (srcDataEventInfo.HasReadyUnreadData() && *maxByteSize > 0) {
- const bool hasMoreUnpackedData = srcDataEventInfo.TakeData(&messages, &compressedMessages, maxByteSize);
- if (!hasMoreUnpackedData) {
- const bool messageIsFullyRead = !srcDataEventInfo.HasMoreData();
- if (messageIsFullyRead) {
- partitionStream->PopEvent();
- messageExtracted = true;
- break;
- }
- }
- }
- if (!messageExtracted) {
- partitionStream->TopEvent().Signalled = false;
- }
-
- if (messages.empty() && compressedMessages.empty()) {
- return Nothing();
- }
- return TEventInfo(partitionStream, partitionStream->GetSession(), std::move(messages), std::move(compressedMessages));
-}
-
-void TReadSessionEventsQueue::SignalReadyEvents(TPartitionStreamImpl* partitionStream) {
- Y_ASSERT(partitionStream);
- TDeferredActions deferred;
- with_lock (Mutex) {
- SignalReadyEventsImpl(partitionStream, deferred);
- }
-}
-
-void TReadSessionEventsQueue::SignalReadyEventsImpl(TPartitionStreamImpl* partitionStream, TDeferredActions& deferred) {
- partitionStream->SignalReadyEvents(this, deferred);
- ApplyCallbacksToReadyEventsImpl(deferred);
-}
-
-bool TReadSessionEventsQueue::ApplyCallbacksToReadyEventsImpl(TDeferredActions& deferred) {
- if (!HasEventCallbacks) {
- return false;
- }
- bool applied = false;
- while (HasCallbackForNextEventImpl()) {
- size_t maxSize = std::numeric_limits<size_t>::max();
- TMaybe<TReadSessionEventInfo> eventInfo = GetEventImpl(&maxSize);
- if (!eventInfo) {
- break;
- }
- const TIntrusivePtr<TPartitionStreamImpl> partitionStreamForSignalling = eventInfo->IsDataEvent() ? eventInfo->PartitionStream : nullptr;
- applied = true;
- if (!ApplyHandler(*eventInfo, deferred)) { // Close session event.
- break;
- }
- if (partitionStreamForSignalling) {
- SignalReadyEventsImpl(partitionStreamForSignalling.Get(), deferred);
- }
- }
- return applied;
-}
-
-struct THasCallbackForEventVisitor {
- explicit THasCallbackForEventVisitor(const TReadSessionSettings& settings)
- : Settings(settings)
- {
- }
-
-#define DECLARE_HANDLER(type, handler) \
- bool operator()(const type&) { \
- return bool(Settings.EventHandlers_.handler); \
- } \
- /**/
-
- DECLARE_HANDLER(TReadSessionEvent::TDataReceivedEvent, DataReceivedHandler_);
- DECLARE_HANDLER(TReadSessionEvent::TCommitAcknowledgementEvent, CommitAcknowledgementHandler_);
- DECLARE_HANDLER(TReadSessionEvent::TCreatePartitionStreamEvent, CreatePartitionStreamHandler_);
- DECLARE_HANDLER(TReadSessionEvent::TDestroyPartitionStreamEvent, DestroyPartitionStreamHandler_);
- DECLARE_HANDLER(TReadSessionEvent::TPartitionStreamStatusEvent, PartitionStreamStatusHandler_);
- DECLARE_HANDLER(TReadSessionEvent::TPartitionStreamClosedEvent, PartitionStreamClosedHandler_);
- DECLARE_HANDLER(TSessionClosedEvent, SessionClosedHandler_);
-
-#undef DECLARE_HANDLER
-
- const TReadSessionSettings& Settings;
-};
-
-bool TReadSessionEventsQueue::HasCallbackForNextEventImpl() const {
- if (!HasEventsImpl()) {
- return false;
- }
- if (Settings.EventHandlers_.CommonHandler_) {
- return true;
- }
-
- if (!Events.empty()) {
- const TEventInfo& topEvent = Events.front();
- const TReadSessionEvent::TEvent* event = nullptr;
- if (topEvent.Event) {
- event = &*topEvent.Event;
- } else if (topEvent.PartitionStream && topEvent.PartitionStream->HasEvents()) {
- const TRawPartitionStreamEvent& partitionStreamTopEvent = topEvent.PartitionStream->TopEvent();
- if (partitionStreamTopEvent.IsDataEvent()) {
- return bool(Settings.EventHandlers_.DataReceivedHandler_);
- } else {
- event = &partitionStreamTopEvent.GetEvent();
- }
- }
-
- if (!event) {
- return false;
- }
-
- THasCallbackForEventVisitor visitor(Settings);
- return std::visit(visitor, *event);
- } else if (CloseEvent) {
- return bool(Settings.EventHandlers_.SessionClosedHandler_);
- }
- Y_ASSERT(false);
- return false;
-}
-
-void TReadSessionEventsQueue::ClearAllEvents() {
- TDeferredActions deferred;
- with_lock (Mutex) {
- while (!Events.empty()) {
- auto& event = Events.front();
- if (event.PartitionStream && event.PartitionStream->HasEvents()) {
- event.PartitionStream->PopEvent();
- }
- Events.pop();
- }
- }
-}
-
-TDataDecompressionInfo::TDataDecompressionInfo(
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData&& msg,
- std::weak_ptr<TSingleClusterReadSessionImpl> session,
- bool doDecompress
-)
- : ServerMessage(std::move(msg))
- , Session(std::move(session))
- , DoDecompress(doDecompress)
-{
- for (const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::Batch& batch : ServerMessage.batches()) {
- for (const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::MessageData& messageData : batch.message_data()) {
- CompressedDataSize += messageData.data().size();
- }
- }
- SourceDataNotProcessed = CompressedDataSize;
-
- BuildBatchesMeta();
-}
-
-void TDataDecompressionInfo::BuildBatchesMeta() {
- BatchesMeta.reserve(ServerMessage.batches_size());
- for (const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::Batch& batch : ServerMessage.batches()) {
- // Extra fields.
- TWriteSessionMeta::TPtr meta = MakeIntrusive<TWriteSessionMeta>();
- meta->Fields.reserve(batch.extra_fields_size());
- for (const Ydb::PersQueue::V1::KeyValue& kv : batch.extra_fields()) {
- meta->Fields.emplace(kv.key(), kv.value());
- }
- BatchesMeta.emplace_back(std::move(meta));
- }
-}
-
-void TDataDecompressionInfo::PutDecompressionError(std::exception_ptr error, size_t batch, size_t message) {
- if (!DecompressionErrorsStructCreated) {
- with_lock (DecompressionErrorsStructLock) {
- DecompressionErrors.resize(ServerMessage.batches_size());
- for (size_t batch = 0; batch < static_cast<size_t>(ServerMessage.batches_size()); ++batch) {
- DecompressionErrors[batch].resize(static_cast<size_t>(ServerMessage.batches(batch).message_data_size()));
- }
-
- // Set barrier.
- DecompressionErrorsStructCreated = true;
- }
- }
- Y_ASSERT(batch < DecompressionErrors.size());
- Y_ASSERT(message < DecompressionErrors[batch].size());
- DecompressionErrors[batch][message] = std::move(error);
-}
-
-std::exception_ptr TDataDecompressionInfo::GetDecompressionError(size_t batch, size_t message) {
- if (!DecompressionErrorsStructCreated) {
- return {};
- }
- Y_ASSERT(batch < DecompressionErrors.size());
- Y_ASSERT(message < DecompressionErrors[batch].size());
- return DecompressionErrors[batch][message];
-}
-
-i64 TDataDecompressionInfo::StartDecompressionTasks(const IExecutor::TPtr& executor, i64 availableMemory, double averageCompressionRatio, const TIntrusivePtr<TPartitionStreamImpl>& partitionStream, TDeferredActions& deferred) {
- constexpr size_t TASK_LIMIT = 512_KB;
- std::shared_ptr<TSingleClusterReadSessionImpl> session = Session.lock();
- Y_ASSERT(session);
- ReadyThresholds.emplace_back();
- TDecompressionTask task(this, partitionStream, &ReadyThresholds.back());
- i64 used = 0;
- while (availableMemory > 0 && !AllDecompressionTasksStarted()) {
- const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::Batch& batch = ServerMessage.batches(CurrentDecompressingMessage.first);
- if (CurrentDecompressingMessage.second < static_cast<size_t>(batch.message_data_size())) {
- const auto& messageData = batch.message_data(CurrentDecompressingMessage.second);
- const i64 size = static_cast<i64>(messageData.data().size());
- const i64 estimatedDecompressedSize =
- messageData.uncompressed_size() ? static_cast<i64>(messageData.uncompressed_size()) : static_cast<i64>(size * averageCompressionRatio);
-
- Y_VERIFY(estimatedDecompressedSize >= 0);
-
- task.Add(CurrentDecompressingMessage.first, CurrentDecompressingMessage.second, size, estimatedDecompressedSize);
- used += estimatedDecompressedSize;
- availableMemory -= estimatedDecompressedSize;
- }
- ++CurrentDecompressingMessage.second;
- if (CurrentDecompressingMessage.second >= static_cast<size_t>(batch.message_data_size())) { // next batch
- ++CurrentDecompressingMessage.first;
- CurrentDecompressingMessage.second = 0;
- }
- if (task.AddedDataSize() >= TASK_LIMIT) {
- session->OnCreateNewDecompressionTask();
- deferred.DeferStartExecutorTask(executor, std::move(task));
- ReadyThresholds.emplace_back();
- task = TDecompressionTask(this, partitionStream, &ReadyThresholds.back());
- }
- }
- if (task.AddedMessagesCount() > 0) {
- session->OnCreateNewDecompressionTask();
- deferred.DeferStartExecutorTask(executor, std::move(task));
- } else {
- ReadyThresholds.pop_back(); // Revert.
- }
- return used;
-}
-
-bool TDataDecompressionInfo::TakeData(const TIntrusivePtr<TPartitionStreamImpl>& partitionStream,
- TVector<TReadSessionEvent::TDataReceivedEvent::TMessage>* messages,
- TVector<TReadSessionEvent::TDataReceivedEvent::TCompressedMessage>* compressedMessages,
- size_t* maxByteSize)
-{
- TMaybe<std::pair<size_t, size_t>> readyThreshold = GetReadyThreshold();
- Y_ASSERT(readyThreshold);
- auto& msg = GetServerMessage();
- ui64 minOffset = Max<ui64>();
- ui64 maxOffset = 0;
- const auto prevReadingMessage = CurrentReadingMessage;
- while (HasMoreData() && *maxByteSize > 0 && CurrentReadingMessage <= *readyThreshold) {
- auto& batch = *msg.mutable_batches(CurrentReadingMessage.first);
- if (CurrentReadingMessage.second < static_cast<size_t>(batch.message_data_size())) {
- const auto& meta = GetBatchMeta(CurrentReadingMessage.first);
- const TInstant batchWriteTimestamp = TInstant::MilliSeconds(batch.write_timestamp_ms());
- auto& messageData = *batch.mutable_message_data(CurrentReadingMessage.second);
- minOffset = Min(minOffset, messageData.offset());
- maxOffset = Max(maxOffset, messageData.offset());
- TReadSessionEvent::TDataReceivedEvent::TMessageInformation messageInfo(
- messageData.offset(),
- batch.source_id(),
- messageData.seq_no(),
- TInstant::MilliSeconds(messageData.create_timestamp_ms()),
- batchWriteTimestamp,
- batch.ip(),
- meta,
- messageData.uncompressed_size()
- );
- if (DoDecompress) {
- messages->emplace_back(
- messageData.data(),
- GetDecompressionError(CurrentReadingMessage.first, CurrentReadingMessage.second),
- messageInfo,
- partitionStream,
- messageData.partition_key(),
- messageData.explicit_hash()
- );
- } else {
- compressedMessages->emplace_back(
- static_cast<ECodec>(messageData.codec()),
- messageData.data(),
- TVector<TReadSessionEvent::TDataReceivedEvent::TMessageInformation>{messageInfo},
- partitionStream,
- messageData.partition_key(),
- messageData.explicit_hash()
- );
- }
- *maxByteSize -= Min(*maxByteSize, messageData.data().size());
-
- // Clear data to free internal session's memory.
- messageData.clear_data();
- }
-
- ++CurrentReadingMessage.second;
- if (CurrentReadingMessage.second >= static_cast<size_t>(batch.message_data_size())) {
- CurrentReadingMessage.second = 0;
- do {
- ++CurrentReadingMessage.first;
- } while (CurrentReadingMessage.first < static_cast<size_t>(msg.batches_size()) && msg.batches(CurrentReadingMessage.first).message_data_size() == 0);
- }
- }
- partitionStream->GetLog().Write(TLOG_DEBUG, TStringBuilder() << "Take Data. Partition " << partitionStream->GetPartitionId()
- << ". Read: {" << prevReadingMessage.first << ", " << prevReadingMessage.second << "} -> {"
- << CurrentReadingMessage.first << ", " << CurrentReadingMessage.second << "} ("
- << minOffset << "-" << maxOffset << ")");
- return CurrentReadingMessage <= *readyThreshold;
-}
-
-bool TDataDecompressionInfo::HasReadyUnreadData() const {
- TMaybe<std::pair<size_t, size_t>> threshold = GetReadyThreshold();
- if (!threshold) {
- return false;
- }
- return CurrentReadingMessage <= *threshold;
-}
-
-void TDataDecompressionInfo::TDecompressionTask::Add(size_t batch, size_t message, size_t sourceDataSize, size_t estimatedDecompressedSize) {
- if (Messages.empty() || Messages.back().Batch != batch) {
- Messages.push_back({ batch, { message, message + 1 } });
- }
- Messages.back().MessageRange.second = message + 1;
- SourceDataSize += sourceDataSize;
- EstimatedDecompressedSize += estimatedDecompressedSize;
- Ready->Batch = batch;
- Ready->Message = message;
-}
-
-TDataDecompressionInfo::TDecompressionTask::TDecompressionTask(TDataDecompressionInfo* parent, TIntrusivePtr<TPartitionStreamImpl> partitionStream, TReadyMessageThreshold* ready)
- : Parent(parent)
- , PartitionStream(std::move(partitionStream))
- , Ready(ready)
-{
-}
-
-// Forward delcaration
-namespace NCompressionDetails {
- extern TString Decompress(const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::MessageData& data);
-}
-
-void TDataDecompressionInfo::TDecompressionTask::operator()() {
- ui64 minOffset = Max<ui64>();
- ui64 maxOffset = 0;
- const ui64 partition = Parent->ServerMessage.partition();
- i64 dataProcessed = 0;
- size_t messagesProcessed = 0;
- for (const TMessageRange& messages : Messages) {
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::Batch& batch =
- *Parent->ServerMessage.mutable_batches(messages.Batch);
- for (size_t i = messages.MessageRange.first; i < messages.MessageRange.second; ++i) {
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::MessageData& data =
- *batch.mutable_message_data(i);
-
- ++messagesProcessed;
- dataProcessed += static_cast<i64>(data.data().size());
- minOffset = Min(minOffset, data.offset());
- maxOffset = Max(maxOffset, data.offset());
-
- try {
- if (Parent->DoDecompress
- && data.codec() != Ydb::PersQueue::V1::CODEC_RAW
- && data.codec() != Ydb::PersQueue::V1::CODEC_UNSPECIFIED
- ) {
- TString decompressed = NCompressionDetails::Decompress(data);
- data.set_data(decompressed);
- data.set_codec(Ydb::PersQueue::V1::CODEC_RAW);
- }
- DecompressedSize += data.data().size();
- } catch (...) {
- Parent->PutDecompressionError(std::current_exception(), messages.Batch, i);
- data.clear_data(); // Free memory, because we don't count it.
-
- std::shared_ptr<TSingleClusterReadSessionImpl> session = Parent->Session.lock();
- if (session) {
- session->GetLog() << TLOG_INFO << "Error decompressing data: " << CurrentExceptionMessage();
- }
- }
- }
- }
- if (auto session = Parent->Session.lock()) {
- session->GetLog().Write(
- TLOG_DEBUG,
- TStringBuilder() << "Decompression task done. Partition: " << partition << " (" << minOffset << "-" << maxOffset << ")"
- );
- }
- Y_ASSERT(dataProcessed == SourceDataSize);
- std::shared_ptr<TSingleClusterReadSessionImpl> session = Parent->Session.lock();
-
- if (session) {
- session->OnDataDecompressed(SourceDataSize, EstimatedDecompressedSize, DecompressedSize, messagesProcessed);
- }
-
- Parent->SourceDataNotProcessed -= dataProcessed;
- Ready->Ready = true;
-
- if (session) {
- session->GetEventsQueue()->SignalReadyEvents(PartitionStream.Get());
- }
-}
-
-void TRawPartitionStreamEvent::Signal(TPartitionStreamImpl* partitionStream, TReadSessionEventsQueue* queue, TDeferredActions& deferred) {
- if (!Signalled) {
- Signalled = true;
- queue->SignalEventImpl(partitionStream, deferred);
- }
-}
-
-void TDeferredActions::DeferReadFromProcessor(const IProcessor::TPtr& processor,
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage* dst,
- IProcessor::TReadCallback callback)
-{
- Y_ASSERT(!Processor);
- Y_ASSERT(!ReadDst);
- Y_ASSERT(!ReadCallback);
- Processor = processor;
- ReadDst = dst;
- ReadCallback = std::move(callback);
-}
-
-void TDeferredActions::DeferStartExecutorTask(const IExecutor::TPtr& executor, IExecutor::TFunction task) {
- ExecutorsTasks.emplace_back(executor, std::move(task));
-}
-
-void TDeferredActions::DeferAbortSession(const IErrorHandler::TPtr& errorHandler, TSessionClosedEvent&& closeEvent) {
- ErrorHandler = errorHandler;
- SessionClosedEvent.ConstructInPlace(std::move(closeEvent));
-}
-
-void TDeferredActions::DeferAbortSession(const IErrorHandler::TPtr& errorHandler, EStatus statusCode, NYql::TIssues&& issues) {
- DeferAbortSession(errorHandler, TSessionClosedEvent(statusCode, std::move(issues)));
-}
-
-void TDeferredActions::DeferAbortSession(const IErrorHandler::TPtr& errorHandler, EStatus statusCode, const TString& message) {
- NYql::TIssues issues;
- issues.AddIssue(message);
- DeferAbortSession(errorHandler, statusCode, std::move(issues));
-}
-
-void TDeferredActions::DeferAbortSession(const IErrorHandler::TPtr& errorHandler, TPlainStatus&& status) {
- DeferAbortSession(errorHandler, TSessionClosedEvent(std::move(status)));
-}
-
-void TDeferredActions::DeferReconnection(std::shared_ptr<TSingleClusterReadSessionImpl> session, const IErrorHandler::TPtr& errorHandler, TPlainStatus&& status) {
- Session = std::move(session);
- ErrorHandler = errorHandler;
- ReconnectionStatus = std::move(status);
-}
-
-void TDeferredActions::DeferStartSession(std::shared_ptr<TSingleClusterReadSessionImpl> session) {
- Sessions.push_back(std::move(session));
-}
-
-void TDeferredActions::DeferSignalWaiter(TWaiter&& waiter) {
- Waiters.emplace_back(std::move(waiter));
-}
-
-void TDeferredActions::DoActions() {
- Read();
- StartExecutorTasks();
- AbortSession();
- Reconnect();
- SignalWaiters();
- StartSessions();
-}
-
-void TDeferredActions::StartSessions() {
- for (auto& session : Sessions) {
- session->Start();
- }
-}
-
-
-void TDeferredActions::Read() {
- if (ReadDst) {
- Y_ASSERT(Processor);
- Y_ASSERT(ReadCallback);
- Processor->Read(ReadDst, std::move(ReadCallback));
- }
-}
-
-void TDeferredActions::StartExecutorTasks() {
- for (auto&& [executor, task] : ExecutorsTasks) {
- executor->Post(std::move(task));
- }
-}
-
-void TDeferredActions::AbortSession() {
- if (SessionClosedEvent) {
- Y_ASSERT(ErrorHandler);
- ErrorHandler->AbortSession(std::move(*SessionClosedEvent));
- }
-}
-
-void TDeferredActions::Reconnect() {
- if (Session) {
- Y_ASSERT(ErrorHandler);
- if (!Session->Reconnect(ReconnectionStatus)) {
- ErrorHandler->AbortSession(std::move(ReconnectionStatus));
- }
- }
-}
-
-void TDeferredActions::SignalWaiters() {
- for (auto& w : Waiters) {
- w.Signal();
- }
-}
-
-void TErrorHandler::AbortSession(TSessionClosedEvent&& closeEvent) {
- if (auto session = Session.lock()) {
- session->Abort(std::move(closeEvent));
- }
-}
-
class TGracefulReleasingSimpleDataHandlers : public TThrRefBase {
public:
explicit TGracefulReleasingSimpleDataHandlers(std::function<void(TReadSessionEvent::TDataReceivedEvent&)> dataHandler, bool commitAfterProcessing)
@@ -2492,6 +878,9 @@ TReadSessionSettings::TEventHandlers& TReadSessionSettings::TEventHandlers::Simp
return *this;
}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TDeferredCommit
+
class TDeferredCommit::TImpl {
public:
@@ -2602,7 +991,7 @@ void TDeferredCommit::TImpl::Add(const TReadSessionEvent::TDataReceivedEvent& da
void TDeferredCommit::TImpl::Commit() {
for (auto&& [partitionStream, offsetRanges] : Offsets) {
for (auto&& [startOffset, endOffset] : offsetRanges) {
- static_cast<TPartitionStreamImpl*>(partitionStream.Get())->Commit(startOffset, endOffset);
+ static_cast<TPartitionStreamImpl<true>*>(partitionStream.Get())->Commit(startOffset, endOffset);
}
}
Offsets.clear();
@@ -2610,7 +999,7 @@ void TDeferredCommit::TImpl::Commit() {
#define HISTOGRAM_SETUP NMonitoring::ExplicitHistogram({0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100})
-TReaderCounters::TReaderCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters) {
+TReaderCounters::TReaderCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters) {
Errors = counters->GetCounter("errors", true);
CurrentSessionLifetimeMs = counters->GetCounter("currentSessionLifetimeMs", false);
BytesRead = counters->GetCounter("bytesRead", true);
@@ -2626,72 +1015,6 @@ TReaderCounters::TReaderCounters(const TIntrusivePtr<NMonitoring::TDynamicCounte
CompressedBytesInflightUsageByTime = counters->GetHistogram("compressedBytesInflightUsageByTime", HISTOGRAM_SETUP);
}
-void MakeCountersNotNull(TReaderCounters& counters) {
- if (!counters.Errors) {
- counters.Errors = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- }
-
- if (!counters.CurrentSessionLifetimeMs) {
- counters.CurrentSessionLifetimeMs = MakeIntrusive<NMonitoring::TCounterForPtr>(false);
- }
-
- if (!counters.BytesRead) {
- counters.BytesRead = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- }
-
- if (!counters.MessagesRead) {
- counters.MessagesRead = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- }
-
- if (!counters.BytesReadCompressed) {
- counters.BytesReadCompressed = MakeIntrusive<NMonitoring::TCounterForPtr>(true);
- }
-
- if (!counters.BytesInflightUncompressed) {
- counters.BytesInflightUncompressed = MakeIntrusive<NMonitoring::TCounterForPtr>(false);
- }
-
- if (!counters.BytesInflightCompressed) {
- counters.BytesInflightCompressed = MakeIntrusive<NMonitoring::TCounterForPtr>(false);
- }
-
- if (!counters.BytesInflightTotal) {
- counters.BytesInflightTotal = MakeIntrusive<NMonitoring::TCounterForPtr>(false);
- }
-
- if (!counters.MessagesInflight) {
- counters.MessagesInflight = MakeIntrusive<NMonitoring::TCounterForPtr>(false);
- }
-
-
- if (!counters.TotalBytesInflightUsageByTime) {
- counters.TotalBytesInflightUsageByTime = MakeIntrusive<NMonitoring::THistogramCounter>(HISTOGRAM_SETUP);
- }
-
- if (!counters.UncompressedBytesInflightUsageByTime) {
- counters.UncompressedBytesInflightUsageByTime = MakeIntrusive<NMonitoring::THistogramCounter>(HISTOGRAM_SETUP);
- }
-
- if (!counters.CompressedBytesInflightUsageByTime) {
- counters.CompressedBytesInflightUsageByTime = MakeIntrusive<NMonitoring::THistogramCounter>(HISTOGRAM_SETUP);
- }
-}
-
#undef HISTOGRAM_SETUP
-bool HasNullCounters(TReaderCounters& counters) {
- return !counters.Errors
- || !counters.CurrentSessionLifetimeMs
- || !counters.BytesRead
- || !counters.MessagesRead
- || !counters.BytesReadCompressed
- || !counters.BytesInflightUncompressed
- || !counters.BytesInflightCompressed
- || !counters.BytesInflightTotal
- || !counters.MessagesInflight
- || !counters.TotalBytesInflightUsageByTime
- || !counters.UncompressedBytesInflightUsageByTime
- || !counters.CompressedBytesInflightUsageByTime;
-}
-
} // namespace NYdb::NPersQueue
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h
index 3317cd28eb..60765db31f 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h
@@ -5,7 +5,9 @@
#include <ydb/public/sdk/cpp/client/ydb_common_client/impl/client.h>
#include <ydb/public/api/grpc/draft/ydb_persqueue_v1.grpc.pb.h>
+#include <ydb/public/api/grpc/ydb_topic_v1.grpc.pb.h>
#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/persqueue.h>
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
#include <library/cpp/containers/disjoint_interval_tree/disjoint_interval_tree.h>
@@ -18,20 +20,87 @@
namespace NYdb::NPersQueue {
+template <bool UseMigrationProtocol>
+using TClientMessage = std::conditional_t<UseMigrationProtocol,
+ Ydb::PersQueue::V1::MigrationStreamingReadClientMessage,
+ Ydb::Topic::StreamReadMessage::FromClient>;
+
+template <bool UseMigrationProtocol>
+using TServerMessage = std::conditional_t<UseMigrationProtocol,
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage,
+ Ydb::Topic::StreamReadMessage::FromServer>;
+
+template <bool UseMigrationProtocol>
+using IReadSessionConnectionProcessorFactory =
+ ISessionConnectionProcessorFactory<TClientMessage<UseMigrationProtocol>, TServerMessage<UseMigrationProtocol>>;
+
+template <bool UseMigrationProtocol>
+using IProcessor = typename IReadSessionConnectionProcessorFactory<UseMigrationProtocol>::IProcessor;
+
+template <bool UseMigrationProtocol>
+using TPartitionData = std::conditional_t<UseMigrationProtocol,
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData,
+ Ydb::Topic::StreamReadMessage::ReadResponse::PartitionData>;
+
+template <bool UseMigrationProtocol>
+using TAWriteSessionMeta = std::conditional_t<UseMigrationProtocol,
+ NYdb::NPersQueue::TWriteSessionMeta,
+ NYdb::NTopic::TWriteSessionMeta>;
+
+template <bool UseMigrationProtocol>
+using TASessionClosedEvent = std::conditional_t<UseMigrationProtocol,
+ NYdb::NPersQueue::TSessionClosedEvent,
+ NYdb::NTopic::TSessionClosedEvent>;
+
+template <bool UseMigrationProtocol>
+using TAPartitionStream = std::conditional_t<UseMigrationProtocol,
+ NYdb::NPersQueue::TPartitionStream,
+ NYdb::NTopic::TPartitionSession>;
+
+template <bool UseMigrationProtocol>
+using TAReadSessionEvent = std::conditional_t<UseMigrationProtocol,
+ NYdb::NPersQueue::TReadSessionEvent,
+ NYdb::NTopic::TReadSessionEvent>;
+
+template <bool UseMigrationProtocol>
+using IARetryPolicy = std::conditional_t<UseMigrationProtocol,
+ NYdb::NPersQueue::IRetryPolicy,
+ NYdb::NTopic::IRetryPolicy>;
+
+template <bool UseMigrationProtocol>
+using IAExecutor = std::conditional_t<UseMigrationProtocol,
+ NYdb::NPersQueue::IExecutor,
+ NYdb::NTopic::IExecutor>;
+
+template <bool UseMigrationProtocol>
+using TAReadSessionSettings = std::conditional_t<UseMigrationProtocol,
+ NYdb::NPersQueue::TReadSessionSettings,
+ NYdb::NTopic::TReadSessionSettings>;
+
+
+template <bool UseMigrationProtocol>
class TPartitionStreamImpl;
+
+template <bool UseMigrationProtocol>
class TSingleClusterReadSessionImpl;
+
+template <bool UseMigrationProtocol>
class TDeferredActions;
-class TReadSession;
-using IReadSessionConnectionProcessorFactory = ISessionConnectionProcessorFactory<Ydb::PersQueue::V1::MigrationStreamingReadClientMessage, Ydb::PersQueue::V1::MigrationStreamingReadServerMessage>;
+
+template <bool UseMigrationProtocol>
class TReadSessionEventsQueue;
+class TReadSession;
+
+
+template <bool UseMigrationProtocol>
struct IErrorHandler : public TThrRefBase {
using TPtr = TIntrusivePtr<IErrorHandler>;
- virtual void AbortSession(TSessionClosedEvent&& closeEvent) = 0;
+ virtual void AbortSession(TASessionClosedEvent<UseMigrationProtocol>&& closeEvent) = 0;
void AbortSession(EStatus statusCode, NYql::TIssues&& issues) {
- AbortSession(TSessionClosedEvent(statusCode, std::move(issues)));
+ AbortSession(TASessionClosedEvent<UseMigrationProtocol>(statusCode, std::move(issues)));
}
void AbortSession(EStatus statusCode, const TString& message) {
@@ -41,28 +110,26 @@ struct IErrorHandler : public TThrRefBase {
}
void AbortSession(TPlainStatus&& status) {
- AbortSession(TSessionClosedEvent(std::move(status)));
+ AbortSession(TASessionClosedEvent<UseMigrationProtocol>(std::move(status)));
}
};
// Special class that stores actions to be done after lock will be released.
+template <bool UseMigrationProtocol>
class TDeferredActions {
public:
- using IProcessor = IReadSessionConnectionProcessorFactory::IProcessor;
-
-public:
~TDeferredActions() {
DoActions();
}
- void DeferReadFromProcessor(const IProcessor::TPtr& processor, Ydb::PersQueue::V1::MigrationStreamingReadServerMessage* dst, IProcessor::TReadCallback callback);
- void DeferStartExecutorTask(const IExecutor::TPtr& executor, IExecutor::TFunction task);
- void DeferAbortSession(const IErrorHandler::TPtr& errorHandler, TSessionClosedEvent&& closeEvent);
- void DeferAbortSession(const IErrorHandler::TPtr& errorHandler, EStatus statusCode, NYql::TIssues&& issues);
- void DeferAbortSession(const IErrorHandler::TPtr& errorHandler, EStatus statusCode, const TString& message);
- void DeferAbortSession(const IErrorHandler::TPtr& errorHandler, TPlainStatus&& status);
- void DeferReconnection(std::shared_ptr<TSingleClusterReadSessionImpl> session, const IErrorHandler::TPtr& errorHandler, TPlainStatus&& status);
- void DeferStartSession(std::shared_ptr<TSingleClusterReadSessionImpl> session);
+ void DeferReadFromProcessor(const typename IProcessor<UseMigrationProtocol>::TPtr& processor, TServerMessage<UseMigrationProtocol>* dst, typename IProcessor<UseMigrationProtocol>::TReadCallback callback);
+ void DeferStartExecutorTask(const typename IAExecutor<UseMigrationProtocol>::TPtr& executor, typename IAExecutor<UseMigrationProtocol>::TFunction task);
+ void DeferAbortSession(const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, TASessionClosedEvent<UseMigrationProtocol>&& closeEvent);
+ void DeferAbortSession(const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, EStatus statusCode, NYql::TIssues&& issues);
+ void DeferAbortSession(const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, EStatus statusCode, const TString& message);
+ void DeferAbortSession(const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, TPlainStatus&& status);
+ void DeferReconnection(std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session, const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, TPlainStatus&& status);
+ void DeferStartSession(std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session);
void DeferSignalWaiter(TWaiter&& waiter);
@@ -78,44 +145,47 @@ private:
private:
// Read.
- IProcessor::TPtr Processor;
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage* ReadDst = nullptr;
- IProcessor::TReadCallback ReadCallback;
+ typename IProcessor<UseMigrationProtocol>::TPtr Processor;
+ TServerMessage<UseMigrationProtocol>* ReadDst = nullptr;
+ typename IProcessor<UseMigrationProtocol>::TReadCallback ReadCallback;
// Executor tasks.
- std::vector<std::pair<IExecutor::TPtr, IExecutor::TFunction>> ExecutorsTasks;
+ std::vector<std::pair<typename IAExecutor<UseMigrationProtocol>::TPtr, typename IAExecutor<UseMigrationProtocol>::TFunction>> ExecutorsTasks;
// Abort session.
- IErrorHandler::TPtr ErrorHandler;
- TMaybe<TSessionClosedEvent> SessionClosedEvent;
+ typename IErrorHandler<UseMigrationProtocol>::TPtr ErrorHandler;
+ TMaybe<TASessionClosedEvent<UseMigrationProtocol>> SessionClosedEvent;
// Waiters.
std::vector<TWaiter> Waiters;
// Reconnection.
- std::shared_ptr<TSingleClusterReadSessionImpl> Session;
+ std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> Session;
TPlainStatus ReconnectionStatus;
// Session to start
- std::vector<std::shared_ptr<TSingleClusterReadSessionImpl>> Sessions;
-
+ std::vector<std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>>> Sessions;
};
-class TDataDecompressionInfo {
+template <bool UseMigrationProtocol>
+class TDataDecompressionInfo : public std::enable_shared_from_this<TDataDecompressionInfo<UseMigrationProtocol>> {
public:
+ using TPtr = std::shared_ptr<TDataDecompressionInfo<UseMigrationProtocol>>;
+
TDataDecompressionInfo(const TDataDecompressionInfo&) = default;
TDataDecompressionInfo(TDataDecompressionInfo&&) = default;
TDataDecompressionInfo(
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData&& msg,
- std::weak_ptr<TSingleClusterReadSessionImpl> session,
- bool doDecompress
+ TPartitionData<UseMigrationProtocol>&& msg,
+ std::weak_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session,
+ bool doDecompress,
+ i64 serverBytesSize = 0 // to increment read request bytes size
);
- i64 StartDecompressionTasks(const IExecutor::TPtr& executor,
+ i64 StartDecompressionTasks(const typename IAExecutor<UseMigrationProtocol>::TPtr& executor,
i64 availableMemory,
double averageCompressionRatio,
- const TIntrusivePtr<TPartitionStreamImpl>& partitionStream,
- TDeferredActions& deferred);
+ const TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>>& partitionStream,
+ TDeferredActions<UseMigrationProtocol>& deferred);
bool IsReady() const {
return SourceDataNotProcessed == 0;
@@ -130,14 +200,18 @@ public:
return CompressedDataSize;
}
- const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData& GetServerMessage() const {
+ const TPartitionData<UseMigrationProtocol>& GetServerMessage() const {
return ServerMessage;
}
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData& GetServerMessage() {
+ TPartitionData<UseMigrationProtocol>& GetServerMessage() {
return ServerMessage;
}
+ bool GetDoDecompress() const {
+ return DoDecompress;
+ }
+
TMaybe<std::pair<size_t, size_t>> GetReadyThreshold() const {
size_t readyCount = 0;
std::pair<size_t, size_t> ret;
@@ -156,15 +230,15 @@ public:
return ret;
}
- TWriteSessionMeta::TPtr GetBatchMeta(size_t batchIndex) const {
+ typename TAWriteSessionMeta<UseMigrationProtocol>::TPtr GetBatchMeta(size_t batchIndex) const {
Y_ASSERT(batchIndex < BatchesMeta.size());
return BatchesMeta[batchIndex];
}
// Takes data. Returns true if event has more unpacked data.
- bool TakeData(const TIntrusivePtr<TPartitionStreamImpl>& partitionStream,
- TVector<TReadSessionEvent::TDataReceivedEvent::TMessage>* messages,
- TVector<TReadSessionEvent::TDataReceivedEvent::TCompressedMessage>* compressedMessages,
+ bool TakeData(const TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>>& partitionStream,
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TMessage>* messages,
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TCompressedMessage>* compressedMessages,
size_t* maxByteSize);
bool HasMoreData() const {
@@ -185,7 +259,7 @@ private:
};
struct TDecompressionTask {
- explicit TDecompressionTask(TDataDecompressionInfo* parent, TIntrusivePtr<TPartitionStreamImpl> partitionStream, TReadyMessageThreshold* ready);
+ TDecompressionTask(TDataDecompressionInfo::TPtr parent, TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream, TReadyMessageThreshold* ready);
// Decompress and notify about memory consumption changes.
void operator()();
@@ -200,8 +274,8 @@ private:
}
private:
- TDataDecompressionInfo* Parent;
- TIntrusivePtr<TPartitionStreamImpl> PartitionStream;
+ TDataDecompressionInfo::TPtr Parent;
+ TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> PartitionStream;
i64 SourceDataSize = 0;
i64 EstimatedDecompressedSize = 0;
i64 DecompressedSize = 0;
@@ -216,11 +290,12 @@ private:
void BuildBatchesMeta();
private:
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData ServerMessage;
- std::vector<TWriteSessionMeta::TPtr> BatchesMeta;
- std::weak_ptr<TSingleClusterReadSessionImpl> Session;
+ TPartitionData<UseMigrationProtocol> ServerMessage;
+ std::vector<typename TAWriteSessionMeta<UseMigrationProtocol>::TPtr> BatchesMeta;
+ std::weak_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> Session;
bool DoDecompress;
i64 CompressedDataSize = 0;
+ i64 ServerBytesSize = 0;
std::atomic<i64> SourceDataNotProcessed = 0;
std::pair<size_t, size_t> CurrentDecompressingMessage = {0, 0}; // (Batch, Message)
std::deque<TReadyMessageThreshold> ReadyThresholds;
@@ -232,125 +307,191 @@ private:
TAdaptiveLock DecompressionErrorsStructLock;
std::vector<std::vector<std::exception_ptr>> DecompressionErrors;
};
+
+template <bool UseMigrationProtocol>
+class TDataDecompressionEvent {
+public:
+ TDataDecompressionEvent(size_t batch, size_t message, typename TDataDecompressionInfo<UseMigrationProtocol>::TPtr parent, std::atomic<bool> &ready) :
+ Batch{batch},
+ Message{message},
+ Parent{std::move(parent)},
+ Ready{ready}
+ {
+ }
+
+ bool IsReady() const {
+ return Ready;
+ }
+
+ bool TakeData(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TMessage>* messages,
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TCompressedMessage>* compressedMessages,
+ size_t* maxByteSize) const;
+
+private:
+ size_t Batch;
+ size_t Message;
+ typename TDataDecompressionInfo<UseMigrationProtocol>::TPtr Parent;
+ std::atomic<bool> &Ready;
+};
+template <bool UseMigrationProtocol>
struct IUserRetrievedEventCallback {
virtual ~IUserRetrievedEventCallback() = default;
- virtual void OnUserRetrievedEvent(const TReadSessionEvent::TEvent& event) = 0;
+ virtual void OnUserRetrievedEvent(const typename TAReadSessionEvent<UseMigrationProtocol>::TEvent& event) = 0;
};
+template <bool UseMigrationProtocol>
struct TReadSessionEventInfo {
- using TEvent = TReadSessionEvent::TEvent;
+ using TEvent = typename TAReadSessionEvent<UseMigrationProtocol>::TEvent;
+ using TDataReceivedEvent = typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent;
+ using TMessage = typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TMessage;
+ using TCompressedMessage = typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TCompressedMessage;
// Event with only partition stream ref.
// Partition stream holds all its events.
- TIntrusivePtr<TPartitionStreamImpl> PartitionStream;
+ TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> PartitionStream;
+ bool HasDataEvents = false;
+ size_t EventsCount = 0;
TMaybe<TEvent> Event;
- std::weak_ptr<IUserRetrievedEventCallback> Session;
+ std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> Session;
// Close event.
- TReadSessionEventInfo(const TSessionClosedEvent& event, std::weak_ptr<IUserRetrievedEventCallback> session = {})
+ TReadSessionEventInfo(const TASessionClosedEvent<UseMigrationProtocol>& event, std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> session = {})
: Event(TEvent(event))
, Session(session)
{
}
// Usual event.
- TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl> partitionStream, std::weak_ptr<IUserRetrievedEventCallback> session, TEvent event);
+ TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream, std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> session, TEvent event);
// Data event.
- TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl> partitionStream, std::weak_ptr<IUserRetrievedEventCallback> session);
-
- TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl> partitionStream,
- std::weak_ptr<IUserRetrievedEventCallback> session,
- TVector<TReadSessionEvent::TDataReceivedEvent::TMessage> messages,
- TVector<TReadSessionEvent::TDataReceivedEvent::TCompressedMessage> compressedMessages);
+ TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> session,
+ bool hasDataEvents);
bool IsEmpty() const;
bool IsDataEvent() const;
- // Takes data. Returns true if event has more unpacked data.
- bool TakeData(TVector<TReadSessionEvent::TDataReceivedEvent::TMessage>* messages,
- TVector<TReadSessionEvent::TDataReceivedEvent::TCompressedMessage>* comressedMessages,
- size_t* maxByteSize);
-
TEvent& GetEvent() {
Y_ASSERT(Event);
return *Event;
}
- // Move event to partition stream queue.
- void MoveToPartitionStream();
-
- void ExtractFromPartitionStream();
-
void OnUserRetrievedEvent();
- bool HasMoreData() const; // Has unread data.
- bool HasReadyUnreadData() const; // Has ready unread data.
-
bool IsSessionClosedEvent() const {
- return Event && std::holds_alternative<TSessionClosedEvent>(*Event);
+ return Event && std::holds_alternative<TASessionClosedEvent<UseMigrationProtocol>>(*Event);
}
};
// Raw data with maybe uncompressed parts or other read session event.
+template <bool UseMigrationProtocol>
struct TRawPartitionStreamEvent {
- std::variant<TDataDecompressionInfo, TReadSessionEvent::TEvent> Event;
- bool Signalled = false;
+ using TEvent = typename TAReadSessionEvent<UseMigrationProtocol>::TEvent;
+
+ std::variant<TDataDecompressionEvent<UseMigrationProtocol>, TEvent> Event;
TRawPartitionStreamEvent(const TRawPartitionStreamEvent&) = default;
TRawPartitionStreamEvent(TRawPartitionStreamEvent&&) = default;
- TRawPartitionStreamEvent(
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData&& msg,
- std::weak_ptr<TSingleClusterReadSessionImpl> session,
- bool doDecompress
- )
- : Event(std::in_place_type_t<TDataDecompressionInfo>(), std::move(msg), std::move(session), doDecompress)
+ TRawPartitionStreamEvent(size_t batch,
+ size_t message,
+ typename TDataDecompressionInfo<UseMigrationProtocol>::TPtr parent,
+ std::atomic<bool> &ready)
+ : Event(std::in_place_type_t<TDataDecompressionEvent<UseMigrationProtocol>>(),
+ batch,
+ message,
+ std::move(parent),
+ ready)
{
}
template <class T>
explicit TRawPartitionStreamEvent(T&& event)
- : Event(std::in_place_type_t<TReadSessionEvent::TEvent>(), std::forward<T>(event))
+ : Event(std::in_place_type_t<TEvent>(), std::forward<T>(event))
{
}
bool IsDataEvent() const {
- return std::holds_alternative<TDataDecompressionInfo>(Event);
- }
-
- const TDataDecompressionInfo& GetData() const {
- Y_ASSERT(IsDataEvent());
- return std::get<TDataDecompressionInfo>(Event);
+ return std::holds_alternative<TDataDecompressionEvent<UseMigrationProtocol>>(Event);
}
- TDataDecompressionInfo& GetData() {
+ const TDataDecompressionEvent<UseMigrationProtocol>& GetDataEvent() const {
Y_ASSERT(IsDataEvent());
- return std::get<TDataDecompressionInfo>(Event);
+ return std::get<TDataDecompressionEvent<UseMigrationProtocol>>(Event);
}
- TReadSessionEvent::TEvent& GetEvent() {
+ TEvent& GetEvent() {
Y_ASSERT(!IsDataEvent());
- return std::get<TReadSessionEvent::TEvent>(Event);
+ return std::get<TEvent>(Event);
}
- const TReadSessionEvent::TEvent& GetEvent() const {
+ const TEvent& GetEvent() const {
Y_ASSERT(!IsDataEvent());
- return std::get<TReadSessionEvent::TEvent>(Event);
+ return std::get<TEvent>(Event);
}
bool IsReady() const {
- return !IsDataEvent() || GetData().IsReady();
- }
+ if (!IsDataEvent()) {
+ return true;
+ }
- void Signal(TPartitionStreamImpl* partitionStream, TReadSessionEventsQueue* queue, TDeferredActions& deferred);
+ return std::get<TDataDecompressionEvent<UseMigrationProtocol>>(Event).IsReady();
+ }
};
+template <bool UseMigrationProtocol>
+class TRawPartitionStreamEventQueue {
+public:
+ TRawPartitionStreamEventQueue() = default;
+
+ template <class... Ts>
+ TRawPartitionStreamEvent<UseMigrationProtocol>& emplace_back(Ts&&... event)
+ {
+ return NotReady.emplace_back(std::forward<Ts>(event)...);
+ }
+
+ bool empty() const
+ {
+ return Ready.empty() && NotReady.empty();
+ }
+ TRawPartitionStreamEvent<UseMigrationProtocol>& front()
+ {
+ Y_VERIFY(!empty());
-class TPartitionStreamImpl : public TPartitionStream {
+ return (Ready.empty() ? NotReady : Ready).front();
+ }
+
+ void pop_front()
+ {
+ Y_VERIFY(!empty());
+
+ (Ready.empty() ? NotReady : Ready).pop_front();
+ }
+
+ void pop_back()
+ {
+ Y_VERIFY(!empty());
+
+ (NotReady.empty() ? Ready : NotReady).pop_back();
+ }
+
+ void SignalReadyEvents(TPartitionStreamImpl<UseMigrationProtocol>& stream,
+ TReadSessionEventsQueue<UseMigrationProtocol>& queue,
+ TDeferredActions<UseMigrationProtocol>& deferred);
+ void DeleteNotReadyTail();
+
+private:
+ std::deque<TRawPartitionStreamEvent<UseMigrationProtocol>> Ready;
+ std::deque<TRawPartitionStreamEvent<UseMigrationProtocol>> NotReady;
+};
+
+template <bool UseMigrationProtocol>
+class TPartitionStreamImpl : public TAPartitionStream<UseMigrationProtocol> {
public:
struct TKey { // Hash<TKey> is defined later in this file.
TString Topic;
@@ -365,6 +506,7 @@ public:
}
};
+ template <bool V = UseMigrationProtocol, class = std::enable_if_t<V>>
TPartitionStreamImpl(ui64 partitionStreamId,
TString topicPath,
TString cluster,
@@ -372,23 +514,43 @@ public:
ui64 partitionId,
ui64 assignId,
ui64 readOffset,
- std::weak_ptr<TSingleClusterReadSessionImpl> parentSession,
- IErrorHandler::TPtr errorHandler)
+ std::weak_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> parentSession,
+ typename IErrorHandler<UseMigrationProtocol>::TPtr errorHandler)
: Key{topicPath, cluster, partitionId}
, AssignId(assignId)
, FirstNotReadOffset(readOffset)
, Session(std::move(parentSession))
, ErrorHandler(std::move(errorHandler))
{
- PartitionStreamId = partitionStreamId;
- TopicPath = std::move(topicPath);
- Cluster = std::move(cluster);
- PartitionGroupId = partitionGroupId;
- PartitionId = partitionId;
+ TAPartitionStream<true>::PartitionStreamId = partitionStreamId;
+ TAPartitionStream<true>::TopicPath = std::move(topicPath);
+ TAPartitionStream<true>::Cluster = std::move(cluster);
+ TAPartitionStream<true>::PartitionGroupId = partitionGroupId;
+ TAPartitionStream<true>::PartitionId = partitionId;
MaxCommittedOffset = readOffset;
}
- ~TPartitionStreamImpl();
+ template <bool V = UseMigrationProtocol, class = std::enable_if_t<!V>>
+ TPartitionStreamImpl(ui64 partitionStreamId,
+ TString topicPath,
+ i64 partitionId,
+ i64 assignId,
+ i64 readOffset,
+ std::weak_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> parentSession,
+ typename IErrorHandler<UseMigrationProtocol>::TPtr errorHandler)
+ : Key{topicPath, "", static_cast<ui64>(partitionId)}
+ , AssignId(static_cast<ui64>(assignId))
+ , FirstNotReadOffset(static_cast<ui64>(readOffset))
+ , Session(std::move(parentSession))
+ , ErrorHandler(std::move(errorHandler))
+ {
+ TAPartitionStream<false>::PartitionSessionId = static_cast<i64>(partitionStreamId);
+ TAPartitionStream<false>::TopicPath = std::move(topicPath);
+ TAPartitionStream<false>::PartitionId = partitionId;
+ MaxCommittedOffset = static_cast<ui64>(readOffset);
+ }
+
+ ~TPartitionStreamImpl() = default;
ui64 GetFirstNotReadOffset() const {
return FirstNotReadOffset;
@@ -420,12 +582,13 @@ public:
EventsQueue.emplace_back(std::forward<T>(event));
}
- TDataDecompressionInfo& InsertDataEvent(
- Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData&& msg,
- bool doDecompress
- ) {
+ void InsertDataEvent(size_t batch,
+ size_t message,
+ typename TDataDecompressionInfo<UseMigrationProtocol>::TPtr parent,
+ std::atomic<bool> &ready)
+ {
++DataDecompressionEventsCount;
- return EventsQueue.emplace_back(std::move(msg), Session, doDecompress).GetData();
+ EventsQueue.emplace_back(batch, message, std::move(parent), ready);
}
bool IsWaitingForDataDecompression() const {
@@ -436,11 +599,7 @@ public:
return !EventsQueue.empty();
}
- TRawPartitionStreamEvent& TopEvent() {
- return EventsQueue.front();
- }
-
- const TRawPartitionStreamEvent& TopEvent() const {
+ TRawPartitionStreamEvent<UseMigrationProtocol>& TopEvent() {
return EventsQueue.front();
}
@@ -451,15 +610,15 @@ public:
EventsQueue.pop_front();
}
- std::weak_ptr<TSingleClusterReadSessionImpl> GetSession() const {
+ std::weak_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> GetSession() const {
return Session;
}
TLog GetLog() const;
- void SignalReadyEvents(TReadSessionEventsQueue* queue, TDeferredActions& deferred);
+ void SignalReadyEvents(TReadSessionEventsQueue<UseMigrationProtocol>* queue, TDeferredActions<UseMigrationProtocol>& deferred);
- const IErrorHandler::TPtr& GetErrorHandler() const {
+ const typename IErrorHandler<UseMigrationProtocol>::TPtr& GetErrorHandler() const {
return ErrorHandler;
}
@@ -499,8 +658,15 @@ public:
bool AddToCommitRanges(const ui64 startOffset, const ui64 endOffset, bool rangesMode) {
if (ClientCommits.Intersects(startOffset, endOffset) || startOffset < MaxCommittedOffset) {
+ auto id = [this](){
+ if constexpr (UseMigrationProtocol) {
+ return this->PartitionStreamId;
+ } else {
+ return this->PartitionSessionId;
+ }
+ }();
ThrowFatalError(TStringBuilder() << "Invalid offset range [" << startOffset << ", " << endOffset << ") : range must start from "
- << MaxCommittedOffset << " or has some offsets that are committed already. Partition stream id: " << PartitionStreamId << Endl);
+ << MaxCommittedOffset << " or has some offsets that are committed already. Partition stream id: -" << id << Endl);
return false;
}
if (rangesMode) { // Otherwise no need to send it to server.
@@ -511,14 +677,15 @@ public:
return true;
}
+ void DeleteNotReadyTail();
private:
const TKey Key;
ui64 AssignId;
ui64 FirstNotReadOffset;
- std::weak_ptr<TSingleClusterReadSessionImpl> Session;
- IErrorHandler::TPtr ErrorHandler;
- std::deque<TRawPartitionStreamEvent> EventsQueue;
+ std::weak_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> Session;
+ typename IErrorHandler<UseMigrationProtocol>::TPtr ErrorHandler;
+ TRawPartitionStreamEventQueue<UseMigrationProtocol> EventsQueue;
size_t DataDecompressionEventsCount = 0;
ui64 MaxReadOffset = 0;
ui64 MaxCommittedOffset = 0;
@@ -527,120 +694,107 @@ private:
TDisjointIntervalTree<ui64> ClientCommits;
};
-
-class TReadSessionEventsQueue : public TBaseSessionEventsQueue<TReadSessionSettings, TReadSessionEvent::TEvent, TReadSessionEventInfo> {
- using TParent = TBaseSessionEventsQueue<TReadSessionSettings, TReadSessionEvent::TEvent, TReadSessionEventInfo>;
+template <bool UseMigrationProtocol>
+class TReadSessionEventsQueue: public TBaseSessionEventsQueue<TAReadSessionSettings<UseMigrationProtocol>,
+ typename TAReadSessionEvent<UseMigrationProtocol>::TEvent,
+ TASessionClosedEvent<UseMigrationProtocol>,
+ IAExecutor<UseMigrationProtocol>,
+ TReadSessionEventInfo<UseMigrationProtocol>> {
+ using TParent = TBaseSessionEventsQueue<TAReadSessionSettings<UseMigrationProtocol>,
+ typename TAReadSessionEvent<UseMigrationProtocol>::TEvent,
+ TASessionClosedEvent<UseMigrationProtocol>,
+ IAExecutor<UseMigrationProtocol>,
+ TReadSessionEventInfo<UseMigrationProtocol>>;
public:
- explicit TReadSessionEventsQueue(const TSettings& settings, std::weak_ptr<IUserRetrievedEventCallback> session);
+ explicit TReadSessionEventsQueue(const TAReadSessionSettings<UseMigrationProtocol>& settings, std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> session);
+
+ typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent
+ GetDataEventImpl(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> stream, size_t* maxByteSize); // Assumes that we're under lock.
- TMaybe<TEventInfo> GetDataEventImpl(TEventInfo& srcDataEventInfo, size_t* maxByteSize); // Assumes that we're under lock.
+ TReadSessionEventInfo<UseMigrationProtocol> GetEventImpl(size_t* maxByteSize) { // Assumes that we're under lock.
+ Y_ASSERT(TParent::HasEventsImpl());
- TMaybe<TEventInfo> TryGetEventImpl(size_t* maxByteSize) { // Assumes that we're under lock.
- Y_ASSERT(HasEventsImpl());
- TVector<TReadSessionEvent::TDataReceivedEvent::TMessage> messages;
- if (!Events.empty()) {
- TEventInfo event = std::move(Events.front());
- Events.pop();
- RenewWaiterImpl();
- auto partitionStream = event.PartitionStream;
+ if (!TParent::Events.empty()) {
+ TReadSessionEventInfo<UseMigrationProtocol>& front = TParent::Events.front();
+ auto partitionStream = front.PartitionStream;
if (!partitionStream->HasEvents()) {
Y_FAIL("can't be here - got events in global queue, but nothing in partition queue");
- return Nothing();
}
+ TMaybe<typename TAReadSessionEvent<UseMigrationProtocol>::TEvent> event;
+
if (partitionStream->TopEvent().IsDataEvent()) {
- return GetDataEventImpl(event, maxByteSize);
+ event = GetDataEventImpl(partitionStream, maxByteSize);
+ } else {
+ event = std::move(partitionStream->TopEvent().GetEvent());
+ partitionStream->PopEvent();
+
+ TParent::Events.pop();
}
- event = TReadSessionEventInfo(partitionStream.Get(), event.Session, partitionStream->TopEvent().GetEvent());
- partitionStream->PopEvent();
- return event;
+ TParent::RenewWaiterImpl();
+
+ return {partitionStream, front.Session, std::move(*event)};
}
- Y_ASSERT(CloseEvent);
- return TEventInfo(*CloseEvent, Session);
- }
+ Y_ASSERT(TParent::CloseEvent);
- TMaybe<TEventInfo> GetEventImpl(size_t* maxByteSize) { // Assumes that we're under lock and that the event queue has events.
- do {
- TMaybe<TEventInfo> result = TryGetEventImpl(maxByteSize); // We could have read all the data in current message previous time.
- if (result) {
- return result;
- }
- } while (HasEventsImpl());
- return Nothing();
+ return {*TParent::CloseEvent, Session};
}
- TVector<TEvent> GetEvents(bool block = false, TMaybe<size_t> maxEventsCount = Nothing(), size_t maxByteSize = std::numeric_limits<size_t>::max()) {
- TVector<TEventInfo> eventInfos;
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TEvent> GetEvents(bool block = false, TMaybe<size_t> maxEventsCount = Nothing(), size_t maxByteSize = std::numeric_limits<size_t>::max()) {
+ TVector<TReadSessionEventInfo<UseMigrationProtocol>> eventInfos;
const size_t maxCount = maxEventsCount ? *maxEventsCount : std::numeric_limits<size_t>::max();
- TDeferredActions deferred;
- std::vector<TIntrusivePtr<TPartitionStreamImpl>> partitionStreamsForSignalling;
- with_lock (Mutex) {
- eventInfos.reserve(Min(Events.size() + CloseEvent.Defined(), maxCount));
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (TParent::Mutex) {
+ eventInfos.reserve(Min(TParent::Events.size() + TParent::CloseEvent.Defined(), maxCount));
do {
if (block) {
- WaitEventsImpl();
+ TParent::WaitEventsImpl();
}
ApplyCallbacksToReadyEventsImpl(deferred);
- while (HasEventsImpl() && eventInfos.size() < maxCount && maxByteSize > 0) {
- TMaybe<TEventInfo> event = GetEventImpl(&maxByteSize);
- if (event) {
- const TIntrusivePtr<TPartitionStreamImpl> partitionStreamForSignalling = event->IsDataEvent() ? event->PartitionStream : nullptr;
- eventInfos.emplace_back(std::move(*event));
- if (eventInfos.back().IsSessionClosedEvent()) {
- break;
- }
- if (partitionStreamForSignalling) {
- partitionStreamsForSignalling.emplace_back(std::move(partitionStreamForSignalling));
- }
+ while (TParent::HasEventsImpl() && eventInfos.size() < maxCount && maxByteSize > 0) {
+ TReadSessionEventInfo<UseMigrationProtocol> event = GetEventImpl(&maxByteSize);
+ eventInfos.emplace_back(std::move(event));
+ if (eventInfos.back().IsSessionClosedEvent()) {
+ break;
}
}
} while (block && (eventInfos.empty() || eventInfos.back().IsSessionClosedEvent()));
ApplyCallbacksToReadyEventsImpl(deferred);
- for (const auto& partitionStreamForSignalling : partitionStreamsForSignalling) {
- SignalReadyEventsImpl(partitionStreamForSignalling.Get(), deferred);
- }
}
- TVector<TEvent> result;
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TEvent> result;
result.reserve(eventInfos.size());
- for (TEventInfo& eventInfo : eventInfos) {
+ for (TReadSessionEventInfo<UseMigrationProtocol>& eventInfo : eventInfos) {
eventInfo.OnUserRetrievedEvent();
result.emplace_back(std::move(eventInfo.GetEvent()));
}
return result;
}
- TMaybe<TEvent> GetEvent(bool block = false, size_t maxByteSize = std::numeric_limits<size_t>::max()) {
- TMaybe<TEventInfo> eventInfo;
- TDeferredActions deferred;
- with_lock (Mutex) {
- TIntrusivePtr<TPartitionStreamImpl> partitionStreamForSignalling;
+ TMaybe<typename TAReadSessionEvent<UseMigrationProtocol>::TEvent> GetEvent(bool block = false, size_t maxByteSize = std::numeric_limits<size_t>::max()) {
+ TMaybe<TReadSessionEventInfo<UseMigrationProtocol>> eventInfo;
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (TParent::Mutex) {
do {
if (block) {
- WaitEventsImpl();
+ TParent::WaitEventsImpl();
}
const bool appliedCallbacks = ApplyCallbacksToReadyEventsImpl(deferred);
- if (HasEventsImpl()) {
+ if (TParent::HasEventsImpl()) {
eventInfo = GetEventImpl(&maxByteSize);
- if (eventInfo && eventInfo->IsDataEvent()) {
- partitionStreamForSignalling = eventInfo->PartitionStream;
- }
} else if (!appliedCallbacks) {
return Nothing();
}
} while (block && !eventInfo);
ApplyCallbacksToReadyEventsImpl(deferred);
- if (partitionStreamForSignalling) {
- SignalReadyEventsImpl(partitionStreamForSignalling.Get(), deferred);
- }
}
if (eventInfo) {
eventInfo->OnUserRetrievedEvent();
@@ -650,37 +804,46 @@ public:
}
}
- void Close(const TSessionClosedEvent& event, TDeferredActions& deferred) {
+ void Close(const TASessionClosedEvent<UseMigrationProtocol>& event, TDeferredActions<UseMigrationProtocol>& deferred) {
TWaiter waiter;
- with_lock (Mutex) {
- CloseEvent = event;
- Closed = true;
- waiter = TWaiter(Waiter.ExtractPromise(), this);
+ with_lock (TParent::Mutex) {
+ TParent::CloseEvent = event;
+ TParent::Closed = true;
+ waiter = TWaiter(TParent::Waiter.ExtractPromise(), this);
}
- TEventInfo info(event);
+ TReadSessionEventInfo<UseMigrationProtocol> info(event);
ApplyHandler(info, deferred);
waiter.Signal();
}
bool HasCallbackForNextEventImpl() const;
- bool ApplyCallbacksToReadyEventsImpl(TDeferredActions& deferred);
+ bool ApplyCallbacksToReadyEventsImpl(TDeferredActions<UseMigrationProtocol>& deferred);
// Push usual event.
- void PushEvent(TReadSessionEventInfo eventInfo, TDeferredActions& deferred);
+ void PushEvent(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> session,
+ typename TAReadSessionEvent<UseMigrationProtocol>::TEvent event,
+ TDeferredActions<UseMigrationProtocol>& deferred);
// Push data event.
- TDataDecompressionInfo* PushDataEvent(TIntrusivePtr<TPartitionStreamImpl> partitionStream, Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::PartitionData&& msg);
+ void PushDataEvent(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> stream,
+ size_t batch,
+ size_t message,
+ typename TDataDecompressionInfo<UseMigrationProtocol>::TPtr parent,
+ std::atomic<bool> &ready);
- void SignalEventImpl(TIntrusivePtr<TPartitionStreamImpl> partitionStream, TDeferredActions& deferred); // Assumes that we're under lock.
+ void SignalEventImpl(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ TDeferredActions<UseMigrationProtocol>& deferred,
+ bool isDataEvent); // Assumes that we're under lock.
- void SignalReadyEvents(TPartitionStreamImpl* partitionStream);
+ void SignalReadyEvents(TPartitionStreamImpl<UseMigrationProtocol>* partitionStream);
- void SignalReadyEventsImpl(TPartitionStreamImpl* partitionStream, TDeferredActions& deferred); // Assumes that we're under lock.
+ void SignalReadyEventsImpl(TPartitionStreamImpl<UseMigrationProtocol>* partitionStream, TDeferredActions<UseMigrationProtocol>& deferred); // Assumes that we're under lock.
- void SignalWaiterImpl(TDeferredActions& deferred) {
- TWaiter waiter = PopWaiterImpl();
+ void SignalWaiterImpl(TDeferredActions<UseMigrationProtocol>& deferred) {
+ TWaiter waiter = TParent::PopWaiterImpl();
deferred.DeferSignalWaiter(std::move(waiter)); // No effect if waiter is empty.
}
@@ -688,60 +851,76 @@ public:
private:
struct THandlersVisitor : public TParent::TBaseHandlersVisitor {
- THandlersVisitor(const TSettings& settings, TEventInfo& eventInfo, TDeferredActions& deferred)
- : TBaseHandlersVisitor(settings, eventInfo)
+ THandlersVisitor(const TAReadSessionSettings<UseMigrationProtocol>& settings, TReadSessionEventInfo<UseMigrationProtocol>& eventInfo, TDeferredActions<UseMigrationProtocol>& deferred)
+ : TParent::TBaseHandlersVisitor(settings, eventInfo)
, Deferred(deferred)
{}
#define DECLARE_HANDLER(type, handler, answer) \
bool operator()(type&) { \
- if (PushHandler<type>( \
- std::move(EventInfo), \
- Settings.EventHandlers_.handler, \
- Settings.EventHandlers_.CommonHandler_)) { \
+ if (this->template PushHandler<type>( \
+ std::move(TParent::TBaseHandlersVisitor::EventInfo), \
+ this->Settings.EventHandlers_.handler, \
+ this->Settings.EventHandlers_.CommonHandler_)) { \
return answer; \
} \
return false; \
} \
/**/
- DECLARE_HANDLER(TReadSessionEvent::TDataReceivedEvent, DataReceivedHandler_, true);
- DECLARE_HANDLER(TReadSessionEvent::TCommitAcknowledgementEvent, CommitAcknowledgementHandler_, true);
- DECLARE_HANDLER(TReadSessionEvent::TCreatePartitionStreamEvent, CreatePartitionStreamHandler_, true);
- DECLARE_HANDLER(TReadSessionEvent::TDestroyPartitionStreamEvent, DestroyPartitionStreamHandler_, true);
- DECLARE_HANDLER(TReadSessionEvent::TPartitionStreamStatusEvent, PartitionStreamStatusHandler_, true);
- DECLARE_HANDLER(TReadSessionEvent::TPartitionStreamClosedEvent, PartitionStreamClosedHandler_, true);
- DECLARE_HANDLER(TSessionClosedEvent, SessionClosedHandler_, false); // Not applied
+ DECLARE_HANDLER(typename TAReadSessionEvent<true>::TDataReceivedEvent, DataReceivedHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<true>::TCommitAcknowledgementEvent, CommitAcknowledgementHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<true>::TCreatePartitionStreamEvent, CreatePartitionStreamHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<true>::TDestroyPartitionStreamEvent, DestroyPartitionStreamHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<true>::TPartitionStreamStatusEvent, PartitionStreamStatusHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<true>::TPartitionStreamClosedEvent, PartitionStreamClosedHandler_, true);
+
+ DECLARE_HANDLER(typename TAReadSessionEvent<false>::TDataReceivedEvent, DataReceivedHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<false>::TCommitOffsetAcknowledgementEvent, CommitOffsetAcknowledgementHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<false>::TStartPartitionSessionEvent, StartPartitionSessionHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<false>::TStopPartitionSessionEvent, StopPartitionSessionHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<false>::TPartitionSessionStatusEvent, PartitionSessionStatusHandler_, true);
+ DECLARE_HANDLER(typename TAReadSessionEvent<false>::TPartitionSessionClosedEvent, PartitionSessionClosedHandler_, true);
+
+ DECLARE_HANDLER(TASessionClosedEvent<UseMigrationProtocol>, SessionClosedHandler_, false); // Not applied
#undef DECLARE_HANDLER
bool Visit() {
- return std::visit(*this, EventInfo.GetEvent());
+ return std::visit(*this, TParent::TBaseHandlersVisitor::EventInfo.GetEvent());
}
- void Post(const IExecutor::TPtr& executor, IExecutor::TFunction&& f) {
+ void Post(const typename IAExecutor<UseMigrationProtocol>::TPtr& executor, typename IAExecutor<UseMigrationProtocol>::TFunction&& f) {
Deferred.DeferStartExecutorTask(executor, std::move(f));
}
- TDeferredActions& Deferred;
+ TDeferredActions<UseMigrationProtocol>& Deferred;
};
- bool ApplyHandler(TEventInfo& eventInfo, TDeferredActions& deferred) {
- THandlersVisitor visitor(Settings, eventInfo, deferred);
+ bool ApplyHandler(TReadSessionEventInfo<UseMigrationProtocol>& eventInfo, TDeferredActions<UseMigrationProtocol>& deferred) {
+ THandlersVisitor visitor(this->Settings, eventInfo, deferred);
return visitor.Visit();
}
private:
bool HasEventCallbacks;
- std::weak_ptr<IUserRetrievedEventCallback> Session;
+ std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> Session;
};
-
-
} // namespace NYdb::NPersQueue
template <>
-struct THash<NYdb::NPersQueue::TPartitionStreamImpl::TKey> {
- size_t operator()(const NYdb::NPersQueue::TPartitionStreamImpl::TKey& key) const {
+struct THash<NYdb::NPersQueue::TPartitionStreamImpl<false>::TKey> {
+ size_t operator()(const NYdb::NPersQueue::TPartitionStreamImpl<false>::TKey& key) const {
+ THash<TString> strHash;
+ const size_t h1 = strHash(key.Topic);
+ const size_t h2 = NumericHash(key.Partition);
+ return CombineHashes(h1, h2);
+ }
+};
+
+template <>
+struct THash<NYdb::NPersQueue::TPartitionStreamImpl<true>::TKey> {
+ size_t operator()(const NYdb::NPersQueue::TPartitionStreamImpl<true>::TKey& key) const {
THash<TString> strHash;
const size_t h1 = strHash(key.Topic);
const size_t h2 = strHash(key.Cluster);
@@ -756,23 +935,24 @@ namespace NYdb::NPersQueue {
// This class holds only read session logic.
// It is parametrized with output queue for client events
// and connection factory interface to separate logic from transport.
-class TSingleClusterReadSessionImpl : public std::enable_shared_from_this<TSingleClusterReadSessionImpl>,
- public IUserRetrievedEventCallback {
+template <bool UseMigrationProtocol>
+class TSingleClusterReadSessionImpl : public std::enable_shared_from_this<TSingleClusterReadSessionImpl<UseMigrationProtocol>>,
+ public IUserRetrievedEventCallback<UseMigrationProtocol> {
public:
- using TPtr = std::shared_ptr<TSingleClusterReadSessionImpl>;
- using IProcessor = IReadSessionConnectionProcessorFactory::IProcessor;
+ using TPtr = std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>>;
+ using IProcessor = typename IReadSessionConnectionProcessorFactory<UseMigrationProtocol>::IProcessor;
- friend class TPartitionStreamImpl;
+ friend class TPartitionStreamImpl<UseMigrationProtocol>;
TSingleClusterReadSessionImpl(
- const TReadSessionSettings& settings,
+ const TAReadSessionSettings<UseMigrationProtocol>& settings,
const TString& database,
const TString& sessionId,
const TString& clusterName,
const TLog& log,
- std::shared_ptr<IReadSessionConnectionProcessorFactory> connectionFactory,
- std::shared_ptr<TReadSessionEventsQueue> eventsQueue,
- IErrorHandler::TPtr errorHandler,
+ std::shared_ptr<IReadSessionConnectionProcessorFactory<UseMigrationProtocol>> connectionFactory,
+ std::shared_ptr<TReadSessionEventsQueue<UseMigrationProtocol>> eventsQueue,
+ typename IErrorHandler<UseMigrationProtocol>::TPtr errorHandler,
NGrpc::IQueueClientContextPtr clientContext,
ui64 partitionStreamIdStart, ui64 partitionStreamIdStep
)
@@ -788,23 +968,25 @@ public:
, ErrorHandler(std::move(errorHandler))
, ClientContext(std::move(clientContext))
, CookieMapping(ErrorHandler)
+ , ReadSizeBudget(GetCompressedDataSizeLimit())
+ , ReadSizeServerDelta(GetCompressedDataSizeLimit())
{
}
void Start();
- void ConfirmPartitionStreamCreate(const TPartitionStreamImpl* partitionStream, TMaybe<ui64> readOffset, TMaybe<ui64> commitOffset);
- void ConfirmPartitionStreamDestroy(TPartitionStreamImpl* partitionStream);
- void RequestPartitionStreamStatus(const TPartitionStreamImpl* partitionStream);
- void Commit(const TPartitionStreamImpl* partitionStream, ui64 startOffset, ui64 endOffset);
+ void ConfirmPartitionStreamCreate(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream, TMaybe<ui64> readOffset, TMaybe<ui64> commitOffset);
+ void ConfirmPartitionStreamDestroy(TPartitionStreamImpl<UseMigrationProtocol>* partitionStream);
+ void RequestPartitionStreamStatus(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream);
+ void Commit(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream, ui64 startOffset, ui64 endOffset);
void OnCreateNewDecompressionTask();
- void OnDataDecompressed(i64 sourceSize, i64 estimatedDecompressedSize, i64 decompressedSize, size_t messagesCount);
+ void OnDataDecompressed(i64 sourceSize, i64 estimatedDecompressedSize, i64 decompressedSize, size_t messagesCount, i64 serverBytesSize = 0);
- TReadSessionEventsQueue* GetEventsQueue() {
+ TReadSessionEventsQueue<UseMigrationProtocol>* GetEventsQueue() {
return EventsQueue.get();
}
- void OnUserRetrievedEvent(const TReadSessionEvent::TEvent& event) override;
+ void OnUserRetrievedEvent(const typename TAReadSessionEvent<UseMigrationProtocol>::TEvent& event) override;
void Abort();
void Close(std::function<void()> callback);
@@ -826,13 +1008,13 @@ public:
}
private:
- void BreakConnectionAndReconnectImpl(TPlainStatus&& status, TDeferredActions& deferred);
+ void BreakConnectionAndReconnectImpl(TPlainStatus&& status, TDeferredActions<UseMigrationProtocol>& deferred);
- void BreakConnectionAndReconnectImpl(EStatus statusCode, NYql::TIssues&& issues, TDeferredActions& deferred) {
+ void BreakConnectionAndReconnectImpl(EStatus statusCode, NYql::TIssues&& issues, TDeferredActions<UseMigrationProtocol>& deferred) {
BreakConnectionAndReconnectImpl(TPlainStatus(statusCode, std::move(issues)), deferred);
}
- void BreakConnectionAndReconnectImpl(EStatus statusCode, const TString& message, TDeferredActions& deferred) {
+ void BreakConnectionAndReconnectImpl(EStatus statusCode, const TString& message, TDeferredActions<UseMigrationProtocol>& deferred) {
BreakConnectionAndReconnectImpl(TPlainStatus(statusCode, message), deferred);
}
@@ -840,27 +1022,25 @@ private:
void OnConnectTimeout(const NGrpc::IQueueClientContextPtr& connectTimeoutContext);
void OnConnect(TPlainStatus&&, typename IProcessor::TPtr&&, const NGrpc::IQueueClientContextPtr& connectContext);
- void DestroyAllPartitionStreamsImpl(TDeferredActions& deferred); // Destroy all streams before setting new connection // Assumes that we're under lock.
+ void DestroyAllPartitionStreamsImpl(TDeferredActions<UseMigrationProtocol>& deferred); // Destroy all streams before setting new connection // Assumes that we're under lock.
// Initing.
- void InitImpl(TDeferredActions& deferred); // Assumes that we're under lock.
+ inline void InitImpl(TDeferredActions<UseMigrationProtocol>& deferred); // Assumes that we're under lock.
// Working logic.
void ContinueReadingDataImpl(); // Assumes that we're under lock.
- bool IsActualPartitionStreamImpl(const TPartitionStreamImpl* partitionStream); // Assumes that we're under lock.
+ bool IsActualPartitionStreamImpl(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream); // Assumes that we're under lock.
// Read/Write.
- void ReadFromProcessorImpl(TDeferredActions& deferred); // Assumes that we're under lock.
- void WriteToProcessorImpl(Ydb::PersQueue::V1::MigrationStreamingReadClientMessage&& req); // Assumes that we're under lock.
+ void ReadFromProcessorImpl(TDeferredActions<UseMigrationProtocol>& deferred); // Assumes that we're under lock.
+ void WriteToProcessorImpl(TClientMessage<UseMigrationProtocol>&& req); // Assumes that we're under lock.
void OnReadDone(NGrpc::TGrpcStatus&& grpcStatus, size_t connectionGeneration);
- void OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::InitResponse&& msg, TDeferredActions& deferred); // Assumes that we're under lock.
- void OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch&& msg, TDeferredActions& deferred); // Assumes that we're under lock.
- void OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Assigned&& msg, TDeferredActions& deferred); // Assumes that we're under lock.
- void OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Release&& msg, TDeferredActions& deferred); // Assumes that we're under lock.
- void OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Committed&& msg, TDeferredActions& deferred); // Assumes that we're under lock.
- void OnReadDoneImpl(Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::PartitionStatus&& msg, TDeferredActions& deferred); // Assumes that we're under lock.
- void StartDecompressionTasksImpl(TDeferredActions& deferred); // Assumes that we're under lock.
+ // Assumes that we're under lock.
+ template<typename TMessage>
+ inline void OnReadDoneImpl(TMessage&& msg, TDeferredActions<UseMigrationProtocol>& deferred);
+
+ void StartDecompressionTasksImpl(TDeferredActions<UseMigrationProtocol>& deferred); // Assumes that we're under lock.
i64 GetCompressedDataSizeLimit() const {
const double overallLimit = static_cast<double>(Settings.MaxMemoryUsageBytes_);
@@ -906,7 +1086,7 @@ private:
using TPtr = TIntrusivePtr<TCookie>;
- explicit TCookie(ui64 cookie, TIntrusivePtr<TPartitionStreamImpl> partitionStream)
+ explicit TCookie(ui64 cookie, TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream)
: Cookie(cookie)
, PartitionStream(std::move(partitionStream))
{
@@ -923,24 +1103,24 @@ private:
}
ui64 Cookie = 0;
- TIntrusivePtr<TPartitionStreamImpl> PartitionStream;
+ TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> PartitionStream;
std::pair<ui64, ui64> OffsetRange;
size_t UncommittedMessagesLeft = 0;
};
- explicit TPartitionCookieMapping(IErrorHandler::TPtr errorHandler)
+ explicit TPartitionCookieMapping(typename IErrorHandler<UseMigrationProtocol>::TPtr errorHandler)
: ErrorHandler(std::move(errorHandler))
{
}
- bool AddMapping(const TCookie::TPtr& cookie);
+ bool AddMapping(const typename TCookie::TPtr& cookie);
// Removes (partition stream, offset) from mapping.
// Returns cookie ptr if this was the last message, otherwise nullptr.
- TCookie::TPtr CommitOffset(ui64 partitionStreamId, ui64 offset);
+ typename TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::TCookie::TPtr CommitOffset(ui64 partitionStreamId, ui64 offset);
// Gets and then removes committed cookie from mapping.
- TCookie::TPtr RetrieveCommittedCookie(const Ydb::PersQueue::V1::CommitCookie& cookieProto);
+ typename TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::TCookie::TPtr RetrieveCommittedCookie(const Ydb::PersQueue::V1::CommitCookie& cookieProto);
// Removes mapping on partition stream.
void RemoveMapping(ui64 partitionStreamId);
@@ -951,43 +1131,44 @@ private:
bool HasUnacknowledgedCookies() const;
private:
- THashMap<TCookie::TKey, TCookie::TPtr, TCookie::TKey::THash> Cookies;
- THashMap<std::pair<ui64, ui64>, TCookie::TPtr> UncommittedOffsetToCookie; // (Partition stream id, Offset) -> Cookie.
- THashMultiMap<ui64, TCookie::TPtr> PartitionStreamIdToCookie;
- IErrorHandler::TPtr ErrorHandler;
+ THashMap<typename TCookie::TKey, typename TCookie::TPtr, typename TCookie::TKey::THash> Cookies;
+ THashMap<std::pair<ui64, ui64>, typename TCookie::TPtr> UncommittedOffsetToCookie; // (Partition stream id, Offset) -> Cookie.
+ THashMultiMap<ui64, typename TCookie::TPtr> PartitionStreamIdToCookie;
+ typename IErrorHandler<UseMigrationProtocol>::TPtr ErrorHandler;
size_t CommitInflight = 0; // Commit inflight to server.
};
struct TDecompressionQueueItem {
- TDecompressionQueueItem(TDataDecompressionInfo* batchInfo, TIntrusivePtr<TPartitionStreamImpl> partitionStream)
- : BatchInfo(batchInfo)
+ TDecompressionQueueItem(typename TDataDecompressionInfo<UseMigrationProtocol>::TPtr batchInfo,
+ TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream)
+ : BatchInfo(std::move(batchInfo))
, PartitionStream(std::move(partitionStream))
{
}
- TDataDecompressionInfo* BatchInfo;
- TIntrusivePtr<TPartitionStreamImpl> PartitionStream;
+ typename TDataDecompressionInfo<UseMigrationProtocol>::TPtr BatchInfo;
+ TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> PartitionStream;
};
private:
- const TReadSessionSettings Settings;
+ const TAReadSessionSettings<UseMigrationProtocol> Settings;
const TString Database;
const TString SessionId;
const TString ClusterName;
TLog Log;
ui64 NextPartitionStreamId;
ui64 PartitionStreamIdStep;
- std::shared_ptr<IReadSessionConnectionProcessorFactory> ConnectionFactory;
- std::shared_ptr<TReadSessionEventsQueue> EventsQueue;
- IErrorHandler::TPtr ErrorHandler;
+ std::shared_ptr<IReadSessionConnectionProcessorFactory<UseMigrationProtocol>> ConnectionFactory;
+ std::shared_ptr<TReadSessionEventsQueue<UseMigrationProtocol>> EventsQueue;
+ typename IErrorHandler<UseMigrationProtocol>::TPtr ErrorHandler;
NGrpc::IQueueClientContextPtr ClientContext; // Common client context.
NGrpc::IQueueClientContextPtr ConnectContext;
NGrpc::IQueueClientContextPtr ConnectTimeoutContext;
NGrpc::IQueueClientContextPtr ConnectDelayContext;
size_t ConnectionGeneration = 0;
TAdaptiveLock Lock;
- IProcessor::TPtr Processor;
- IRetryPolicy::IRetryState::TPtr RetryState; // Current retry state (if now we are (re)connecting).
+ typename IProcessor::TPtr Processor;
+ typename IARetryPolicy<UseMigrationProtocol>::IRetryState::TPtr RetryState; // Current retry state (if now we are (re)connecting).
size_t ConnectionAttemptsDone = 0;
// Memory usage.
@@ -997,8 +1178,8 @@ private:
TInstant UsageStatisticsLastUpdateTime = TInstant::Now();
bool WaitingReadResponse = false;
- std::shared_ptr<Ydb::PersQueue::V1::MigrationStreamingReadServerMessage> ServerMessage; // Server message to write server response to.
- THashMap<ui64, TIntrusivePtr<TPartitionStreamImpl>> PartitionStreams; // assignId -> Partition stream.
+ std::shared_ptr<TServerMessage<UseMigrationProtocol>> ServerMessage; // Server message to write server response to.
+ THashMap<ui64, TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>>> PartitionStreams; // assignId -> Partition stream.
TPartitionCookieMapping CookieMapping;
std::deque<TDecompressionQueueItem> DecompressionQueue;
bool DataReadingSuspended = false;
@@ -1008,6 +1189,8 @@ private:
bool Closing = false;
std::function<void()> CloseCallback;
std::atomic<int> DecompressionTasksInflight = 0;
+ ui64 ReadSizeBudget;
+ i64 ReadSizeServerDelta;
};
// High level class that manages several read session impls.
@@ -1015,7 +1198,7 @@ private:
// This class communicates with cluster discovery service and then creates
// sessions to each cluster.
class TReadSession : public IReadSession,
- public IUserRetrievedEventCallback,
+ public IUserRetrievedEventCallback<true>,
public std::enable_shared_from_this<TReadSession> {
struct TClusterSessionInfo {
TClusterSessionInfo(const TString& cluster)
@@ -1024,7 +1207,7 @@ class TReadSession : public IReadSession,
}
TString ClusterName; // In lower case
- TSingleClusterReadSessionImpl::TPtr Session;
+ TSingleClusterReadSessionImpl<true>::TPtr Session;
TVector<TTopicReadSettings> Topics;
TString ClusterEndpoint;
};
@@ -1091,17 +1274,17 @@ private:
void StartClusterDiscovery();
void OnClusterDiscovery(const TStatus& status, const Ydb::PersQueue::ClusterDiscovery::DiscoverClustersResult& result);
void ProceedWithoutClusterDiscovery();
- void RestartClusterDiscoveryImpl(TDuration delay, TDeferredActions& deferred);
- void CreateClusterSessionsImpl(TDeferredActions& deferred);
+ void RestartClusterDiscoveryImpl(TDuration delay, TDeferredActions<true>& deferred);
+ void CreateClusterSessionsImpl(TDeferredActions<true>& deferred);
// Shutdown.
void Abort(EStatus statusCode, NYql::TIssues&& issues);
void Abort(EStatus statusCode, const TString& message);
- void AbortImpl(TSessionClosedEvent&& closeEvent, TDeferredActions& deferred);
- void AbortImpl(EStatus statusCode, NYql::TIssues&& issues, TDeferredActions& deferred);
- void AbortImpl(EStatus statusCode, const TString& message, TDeferredActions& deferred);
+ void AbortImpl(TSessionClosedEvent&& closeEvent, TDeferredActions<true>& deferred);
+ void AbortImpl(EStatus statusCode, NYql::TIssues&& issues, TDeferredActions<true>& deferred);
+ void AbortImpl(EStatus statusCode, const TString& message, TDeferredActions<true>& deferred);
void OnUserRetrievedEvent(const TReadSessionEvent::TEvent& event) override;
@@ -1116,10 +1299,10 @@ private:
TLog Log;
std::shared_ptr<TPersQueueClient::TImpl> Client;
std::shared_ptr<TGRpcConnectionsImpl> Connections;
- IErrorHandler::TPtr ErrorHandler;
+ typename IErrorHandler<true>::TPtr ErrorHandler;
TDbDriverStatePtr DbDriverState;
TAdaptiveLock Lock;
- std::shared_ptr<TReadSessionEventsQueue> EventsQueue;
+ std::shared_ptr<TReadSessionEventsQueue<true>> EventsQueue;
THashMap<TString, TClusterSessionInfo> ClusterSessions; // Cluster name (in lower case) -> TClusterSessionInfo
NGrpc::IQueueClientContextPtr ClusterDiscoveryDelayContext;
IRetryPolicy::IRetryState::TPtr ClusterDiscoveryRetryState;
@@ -1133,3 +1316,9 @@ private:
};
} // namespace NYdb::NPersQueue
+
+/////////////////////////////////////////
+// Templates implementation
+#define READ_SESSION_IMPL
+#include "read_session.ipp"
+#undef READ_SESSION_IMPL
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.ipp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.ipp
new file mode 100644
index 0000000000..dae3a27e87
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.ipp
@@ -0,0 +1,2462 @@
+#ifndef READ_SESSION_IMPL
+#error "Do not include this file directly"
+#endif
+// #include "read_session.h"
+
+#include "persqueue_impl.h"
+#include "common.h"
+
+#define INCLUDE_YDB_INTERNAL_H
+#include <ydb/public/sdk/cpp/client/impl/ydb_internal/logger/log.h>
+#undef INCLUDE_YDB_INTERNAL_H
+
+#include <google/protobuf/util/time_util.h>
+
+#include <library/cpp/containers/disjoint_interval_tree/disjoint_interval_tree.h>
+#include <util/generic/guid.h>
+#include <util/generic/size_literals.h>
+#include <util/generic/utility.h>
+#include <util/generic/yexception.h>
+#include <util/stream/mem.h>
+#include <util/system/env.h>
+
+#include <variant>
+
+namespace NYdb::NTopic {
+ class TReadSession;
+}
+
+namespace NYdb::NPersQueue {
+
+static const bool RangesMode = !GetEnv("PQ_OFFSET_RANGES_MODE").empty();
+
+template <typename TReaderCounters>
+void MakeCountersNotNull(TReaderCounters& counters);
+template <typename TReaderCounters>
+bool HasNullCounters(TReaderCounters& counters);
+
+template <bool UseMigrationProtocol>
+class TErrorHandler : public IErrorHandler<UseMigrationProtocol> {
+ using TReadSession = typename std::conditional_t<UseMigrationProtocol,
+ NPersQueue::TReadSession,
+ NTopic::TReadSession>;
+public:
+ TErrorHandler(std::weak_ptr<TReadSession> session)
+ : Session(std::move(session))
+ {
+ }
+
+ void AbortSession(TASessionClosedEvent<UseMigrationProtocol>&& closeEvent) override;
+
+private:
+ std::weak_ptr<TReadSession> Session;
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TPartitionStreamImpl
+
+template<bool UseMigrationProtocol>
+TLog TPartitionStreamImpl<UseMigrationProtocol>::GetLog() const {
+ if (auto session = Session.lock()) {
+ return session->GetLog();
+ }
+ return {};
+}
+
+template<bool UseMigrationProtocol>
+void TPartitionStreamImpl<UseMigrationProtocol>::Commit(ui64 startOffset, ui64 endOffset) {
+ std::vector<std::pair<ui64, ui64>> toCommit;
+ if (auto sessionShared = Session.lock()) {
+ Y_VERIFY(endOffset > startOffset);
+ with_lock(sessionShared->Lock) {
+ if (!AddToCommitRanges(startOffset, endOffset, true)) // Add range for real commit always.
+ return;
+
+ Y_VERIFY(!Commits.Empty());
+ for (auto c : Commits) {
+ if (c.first >= endOffset) break; // Commit only gaps before client range.
+ toCommit.emplace_back(c);
+ }
+ Commits.EraseInterval(0, endOffset); // Drop only committed ranges;
+ }
+ for (auto range: toCommit) {
+ sessionShared->Commit(this, range.first, range.second);
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TPartitionStreamImpl<UseMigrationProtocol>::RequestStatus() {
+ if (auto sessionShared = Session.lock()) {
+ sessionShared->RequestPartitionStreamStatus(this);
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TPartitionStreamImpl<UseMigrationProtocol>::ConfirmCreate(TMaybe<ui64> readOffset, TMaybe<ui64> commitOffset) {
+ if (auto sessionShared = Session.lock()) {
+ sessionShared->ConfirmPartitionStreamCreate(this, readOffset, commitOffset);
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TPartitionStreamImpl<UseMigrationProtocol>::ConfirmDestroy() {
+ if (auto sessionShared = Session.lock()) {
+ sessionShared->ConfirmPartitionStreamDestroy(this);
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TPartitionStreamImpl<UseMigrationProtocol>::StopReading() {
+ Y_FAIL("Not implemented"); // TODO
+}
+
+template<bool UseMigrationProtocol>
+void TPartitionStreamImpl<UseMigrationProtocol>::ResumeReading() {
+ Y_FAIL("Not implemented"); // TODO
+}
+
+template<bool UseMigrationProtocol>
+void TPartitionStreamImpl<UseMigrationProtocol>::SignalReadyEvents(TReadSessionEventsQueue<UseMigrationProtocol>* queue, TDeferredActions<UseMigrationProtocol>& deferred) {
+ Y_VERIFY(queue);
+ EventsQueue.SignalReadyEvents(*this, *queue, deferred);
+}
+
+template<bool UseMigrationProtocol>
+void TPartitionStreamImpl<UseMigrationProtocol>::DeleteNotReadyTail()
+{
+ EventsQueue.DeleteNotReadyTail();
+}
+
+template<bool UseMigrationProtocol>
+void TRawPartitionStreamEventQueue<UseMigrationProtocol>::SignalReadyEvents(TPartitionStreamImpl<UseMigrationProtocol>& stream,
+ TReadSessionEventsQueue<UseMigrationProtocol>& queue,
+ TDeferredActions<UseMigrationProtocol>& deferred)
+{
+ while (!NotReady.empty() && NotReady.front().IsReady()) {
+ auto& event = NotReady.front();
+
+ queue.SignalEventImpl(&stream, deferred, event.IsDataEvent());
+
+ Ready.push_back(std::move(event));
+ NotReady.pop_front();
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TRawPartitionStreamEventQueue<UseMigrationProtocol>::DeleteNotReadyTail()
+{
+ std::deque<TRawPartitionStreamEvent<UseMigrationProtocol>> head;
+
+ for (auto& event : NotReady) {
+ if (!event.IsReady()) {
+ break;
+ }
+
+ head.push_back(std::move(event));
+ }
+
+ swap(head, NotReady);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TSingleClusterReadSessionImpl
+
+template<bool UseMigrationProtocol>
+TStringBuilder TSingleClusterReadSessionImpl<UseMigrationProtocol>::GetLogPrefix() const {
+ return TStringBuilder() << GetDatabaseLogPrefix(Database) << "[" << SessionId << "] [" << ClusterName << "] ";
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::Start() {
+ Settings.DecompressionExecutor_->Start();
+ Settings.EventHandlers_.HandlersExecutor_->Start();
+ if (!Reconnect(TPlainStatus())) {
+ ErrorHandler->AbortSession(EStatus::ABORTED, "Driver is stopping");
+ }
+}
+
+template<bool UseMigrationProtocol>
+bool TSingleClusterReadSessionImpl<UseMigrationProtocol>::Reconnect(const TPlainStatus& status) {
+ TDuration delay = TDuration::Zero();
+ NGrpc::IQueueClientContextPtr delayContext = nullptr;
+ NGrpc::IQueueClientContextPtr connectContext = ClientContext->CreateContext();
+ NGrpc::IQueueClientContextPtr connectTimeoutContext = ClientContext->CreateContext();
+ if (!connectContext || !connectTimeoutContext) {
+ return false;
+ }
+
+ // Previous operations contexts.
+ NGrpc::IQueueClientContextPtr prevConnectContext;
+ NGrpc::IQueueClientContextPtr prevConnectTimeoutContext;
+ NGrpc::IQueueClientContextPtr prevConnectDelayContext;
+
+ if (!status.Ok()) {
+ Log.Write(TLOG_INFO, GetLogPrefix() << "Got error. Status: " << status.Status
+ << ". Description: " << IssuesSingleLineString(status.Issues));
+ }
+
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (Lock) {
+ if (Aborting) {
+ Cancel(connectContext);
+ Cancel(connectTimeoutContext);
+ return false;
+ }
+ Processor = nullptr;
+ WaitingReadResponse = false;
+ ServerMessage = std::make_shared<TServerMessage<UseMigrationProtocol>>();
+ ++ConnectionGeneration;
+ if (RetryState) {
+ TMaybe<TDuration> nextDelay = RetryState->GetNextRetryDelay(status.Status);
+ if (nextDelay) {
+ delay = *nextDelay;
+ delayContext = ClientContext->CreateContext();
+ if (!delayContext) {
+ return false;
+ }
+ Log.Write(TLOG_DEBUG, GetLogPrefix()
+ << "Reconnecting session to cluster " << ClusterName << " in " << delay);
+ } else {
+ return false;
+ }
+ } else {
+ RetryState = Settings.RetryPolicy_->CreateRetryState();
+ }
+ ++ConnectionAttemptsDone;
+
+ // Set new context
+ prevConnectContext = std::exchange(ConnectContext, connectContext);
+ prevConnectTimeoutContext = std::exchange(ConnectTimeoutContext, connectTimeoutContext);
+ prevConnectDelayContext = std::exchange(ConnectDelayContext, delayContext);
+
+ Y_ASSERT(ConnectContext);
+ Y_ASSERT(ConnectTimeoutContext);
+ Y_ASSERT((delay == TDuration::Zero()) == !ConnectDelayContext);
+
+ // Destroy all partition streams before connecting.
+ DestroyAllPartitionStreamsImpl(deferred);
+ }
+
+ // Cancel previous operations.
+ Cancel(prevConnectContext);
+ Cancel(prevConnectTimeoutContext);
+ Cancel(prevConnectDelayContext);
+
+ auto connectCallback = [weakThis = TSingleClusterReadSessionImpl<UseMigrationProtocol>::weak_from_this(),
+ connectContext = connectContext](TPlainStatus&& st, typename IProcessor::TPtr&& processor) {
+ if (auto sharedThis = weakThis.lock()) {
+ sharedThis->OnConnect(std::move(st), std::move(processor),
+ connectContext); // OnConnect could be called inplace!
+ }
+ };
+
+ auto connectTimeoutCallback = [weakThis = TSingleClusterReadSessionImpl<UseMigrationProtocol>::weak_from_this(),
+ connectTimeoutContext = connectTimeoutContext](bool ok) {
+ if (ok) {
+ if (auto sharedThis = weakThis.lock()) {
+ sharedThis->OnConnectTimeout(connectTimeoutContext);
+ }
+ }
+ };
+
+ Y_ASSERT(connectContext);
+ Y_ASSERT(connectTimeoutContext);
+ Y_ASSERT((delay == TDuration::Zero()) == !delayContext);
+ ConnectionFactory->CreateProcessor(
+ std::move(connectCallback),
+ TRpcRequestSettings::Make(Settings),
+ std::move(connectContext),
+ TDuration::Seconds(30) /* connect timeout */, // TODO: make connect timeout setting.
+ std::move(connectTimeoutContext),
+ std::move(connectTimeoutCallback),
+ delay,
+ std::move(delayContext));
+ return true;
+}
+
+template <bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::BreakConnectionAndReconnectImpl(
+ TPlainStatus&& status, TDeferredActions<UseMigrationProtocol>& deferred) {
+ Log.Write(TLOG_INFO,
+ GetLogPrefix() << "Break connection due to unexpected message from server. Status: " << status.Status
+ << ", Issues: \"" << IssuesSingleLineString(status.Issues) << "\"");
+
+ Processor->Cancel();
+ Processor = nullptr;
+ RetryState = Settings.RetryPolicy_->CreateRetryState(); // Explicitly create retry state to determine whether we should connect to server again.
+
+ deferred.DeferReconnection(TSingleClusterReadSessionImpl<UseMigrationProtocol>::shared_from_this(), ErrorHandler, std::move(status));
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::OnConnectTimeout(const NGrpc::IQueueClientContextPtr& connectTimeoutContext) {
+ with_lock (Lock) {
+ if (ConnectTimeoutContext == connectTimeoutContext) {
+ Cancel(ConnectContext);
+ ConnectContext = nullptr;
+ ConnectTimeoutContext = nullptr;
+ ConnectDelayContext = nullptr;
+
+ if (Closing || Aborting) {
+ CallCloseCallbackImpl();
+ return;
+ }
+ } else {
+ return;
+ }
+ }
+
+ ++*Settings.Counters_->Errors;
+ TStringBuilder description;
+ description << "Failed to establish connection to server. Attempts done: " << ConnectionAttemptsDone;
+ if (!Reconnect(TPlainStatus(EStatus::TIMEOUT, description))) {
+ ErrorHandler->AbortSession(EStatus::TIMEOUT, description);
+ }
+}
+
+template <bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::OnConnect(
+ TPlainStatus&& st, typename IProcessor::TPtr&& processor, const NGrpc::IQueueClientContextPtr& connectContext) {
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (Lock) {
+ if (ConnectContext == connectContext) {
+ Cancel(ConnectTimeoutContext);
+ ConnectContext = nullptr;
+ ConnectTimeoutContext = nullptr;
+ ConnectDelayContext = nullptr;
+
+ if (Closing || Aborting) {
+ CallCloseCallbackImpl();
+ return;
+ }
+
+ if (st.Ok()) {
+ Processor = std::move(processor);
+ RetryState = nullptr;
+ ConnectionAttemptsDone = 0;
+ InitImpl(deferred);
+ return;
+ }
+ } else {
+ return;
+ }
+ }
+
+ if (!st.Ok()) {
+ ++*Settings.Counters_->Errors;
+ if (!Reconnect(st)) {
+ ErrorHandler->AbortSession(
+ st.Status, MakeIssueWithSubIssues(TStringBuilder() << "Failed to establish connection to server \""
+ << st.Endpoint << "\" ( cluster " << ClusterName
+ << "). Attempts done: " << ConnectionAttemptsDone,
+ st.Issues));
+ }
+ }
+}
+
+template<>
+inline void TSingleClusterReadSessionImpl<true>::InitImpl(TDeferredActions<true>& deferred) { // Assumes that we're under lock.
+ Log.Write(TLOG_DEBUG, GetLogPrefix() << "Successfully connected. Initializing session");
+ TClientMessage<true> req;
+ auto& init = *req.mutable_init_request();
+ init.set_ranges_mode(GetRangesMode());
+ for (const TTopicReadSettings& topic : Settings.Topics_) {
+ auto* topicSettings = init.add_topics_read_settings();
+ topicSettings->set_topic(topic.Path_);
+ if (topic.StartingMessageTimestamp_) {
+ topicSettings->set_start_from_written_at_ms(topic.StartingMessageTimestamp_->MilliSeconds());
+ }
+ for (ui64 groupId : topic.PartitionGroupIds_) {
+ topicSettings->add_partition_group_ids(groupId);
+ }
+ }
+ init.set_consumer(Settings.ConsumerName_);
+ init.set_read_only_original(Settings.ReadOnlyOriginal_);
+ init.mutable_read_params()->set_max_read_size(Settings.MaxMemoryUsageBytes_);
+ if (Settings.MaxTimeLag_) {
+ init.set_max_lag_duration_ms(Settings.MaxTimeLag_->MilliSeconds());
+ }
+ if (Settings.StartingMessageTimestamp_) {
+ init.set_start_from_written_at_ms(Settings.StartingMessageTimestamp_->MilliSeconds());
+ }
+
+ WriteToProcessorImpl(std::move(req));
+ ReadFromProcessorImpl(deferred);
+}
+
+template<>
+inline void TSingleClusterReadSessionImpl<false>::InitImpl(TDeferredActions<false>& deferred) { // Assumes that we're under lock.
+ Log.Write(TLOG_DEBUG, GetLogPrefix() << "Successfully connected. Initializing session");
+ TClientMessage<false> req;
+ auto& init = *req.mutable_init_request();
+
+ init.set_consumer(Settings.ConsumerName_);
+
+ for (const NTopic::TTopicReadSettings& topic : Settings.Topics_) {
+ auto* topicSettings = init.add_topics_read_settings();
+ topicSettings->set_path(topic.Path_);
+ for (ui64 partitionId : topic.PartitionIds_) {
+ topicSettings->add_partition_ids(partitionId);
+ }
+
+ if (topic.ReadFromTimestamp_) {
+ *topicSettings->mutable_read_from() =
+ ::google::protobuf::util::TimeUtil::MillisecondsToTimestamp(topic.ReadFromTimestamp_->MilliSeconds());
+ } else if (Settings.ReadFromTimestamp_) {
+ *topicSettings->mutable_read_from() =
+ ::google::protobuf::util::TimeUtil::MillisecondsToTimestamp(Settings.ReadFromTimestamp_->MilliSeconds());
+ }
+
+ if (topic.MaxLag_) {
+ *topicSettings->mutable_max_lag() =
+ ::google::protobuf::util::TimeUtil::MillisecondsToDuration(topic.MaxLag_->MilliSeconds());
+ } else if (Settings.ReadFromTimestamp_) {
+ *topicSettings->mutable_max_lag() =
+ ::google::protobuf::util::TimeUtil::MillisecondsToDuration(Settings.MaxLag_->MilliSeconds());
+ }
+ }
+
+ WriteToProcessorImpl(std::move(req));
+ ReadFromProcessorImpl(deferred);
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::ContinueReadingDataImpl() { // Assumes that we're under lock.
+ if (!Closing
+ && !Aborting
+ && !WaitingReadResponse
+ && !DataReadingSuspended
+ && Processor
+ && CompressedDataSize < GetCompressedDataSizeLimit()
+ && static_cast<size_t>(CompressedDataSize + DecompressedDataSize) < Settings.MaxMemoryUsageBytes_)
+ {
+ TClientMessage<UseMigrationProtocol> req;
+ if constexpr (UseMigrationProtocol) {
+ req.mutable_read();
+ } else {
+ if (ReadSizeBudget == 0 || ReadSizeServerDelta <= 0) {
+ return;
+ }
+ req.mutable_read_request()->set_bytes_size(ReadSizeBudget);
+ ReadSizeBudget = 0;
+ }
+
+ WriteToProcessorImpl(std::move(req));
+ WaitingReadResponse = true;
+ }
+}
+
+template<bool UseMigrationProtocol>
+ui64 GetPartitionStreamId(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream) {
+ if constexpr (UseMigrationProtocol) {
+ return partitionStream->GetPartitionStreamId();
+ } else {
+ return partitionStream->GetPartitionSessionId();
+ }
+}
+
+template<bool UseMigrationProtocol>
+TString GetCluster(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream) {
+ if constexpr (UseMigrationProtocol) {
+ return partitionStream->GetCluster();
+ } else {
+ return "-";
+ }
+}
+
+template<bool UseMigrationProtocol>
+bool TSingleClusterReadSessionImpl<UseMigrationProtocol>::IsActualPartitionStreamImpl(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream) { // Assumes that we're under lock.
+ auto actualPartitionStreamIt = PartitionStreams.find(partitionStream->GetAssignId());
+ return actualPartitionStreamIt != PartitionStreams.end()
+ && GetPartitionStreamId(actualPartitionStreamIt->second.Get()) == GetPartitionStreamId(partitionStream);
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::ConfirmPartitionStreamCreate(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream, TMaybe<ui64> readOffset, TMaybe<ui64> commitOffset) {
+ TStringBuilder commitOffsetLogStr;
+ if (commitOffset) {
+ commitOffsetLogStr << ". Commit offset: " << *commitOffset;
+ }
+ Log.Write(
+ TLOG_INFO,
+ GetLogPrefix() << "Confirm partition stream create. Partition stream id: " << GetPartitionStreamId(partitionStream)
+ << ". Cluster: \"" << GetCluster(partitionStream) << "\". Topic: \"" << partitionStream->GetTopicPath()
+ << "\". Partition: " << partitionStream->GetPartitionId()
+ << ". Read offset: " << readOffset << commitOffsetLogStr
+ );
+
+ with_lock (Lock) {
+ if (Aborting || Closing || !IsActualPartitionStreamImpl(partitionStream)) { // Got previous incarnation.
+ Log.Write(
+ TLOG_DEBUG,
+ GetLogPrefix() << "Skip partition stream create confirm. Partition stream id: "
+ << GetPartitionStreamId(partitionStream)
+ );
+ return;
+ }
+
+ TClientMessage<UseMigrationProtocol> req;
+
+ if constexpr (UseMigrationProtocol) {
+ auto& startRead = *req.mutable_start_read();
+ startRead.mutable_topic()->set_path(partitionStream->GetTopicPath());
+ startRead.set_cluster(partitionStream->GetCluster());
+ startRead.set_partition(partitionStream->GetPartitionId());
+ startRead.set_assign_id(partitionStream->GetAssignId());
+ if (readOffset) {
+ startRead.set_read_offset(*readOffset);
+ }
+ if (commitOffset) {
+ startRead.set_commit_offset(*commitOffset);
+ }
+ } else {
+ auto& startRead = *req.mutable_start_partition_session_response();
+ startRead.set_partition_session_id(partitionStream->GetAssignId());
+ if (readOffset) {
+ startRead.set_read_offset(*readOffset);
+ }
+ if (commitOffset) {
+ startRead.set_commit_offset(*commitOffset);
+ }
+ }
+
+ WriteToProcessorImpl(std::move(req));
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::ConfirmPartitionStreamDestroy(TPartitionStreamImpl<UseMigrationProtocol>* partitionStream) {
+ Log.Write(
+ TLOG_INFO,
+ GetLogPrefix() << "Confirm partition stream destroy. Partition stream id: "
+ << GetPartitionStreamId(partitionStream)
+ << ". Cluster: \"" << GetCluster(partitionStream) << "\". Topic: \"" << partitionStream->GetTopicPath()
+ << "\". Partition: " << partitionStream->GetPartitionId()
+ );
+
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (Lock) {
+ if (Aborting || Closing || !IsActualPartitionStreamImpl(partitionStream)) { // Got previous incarnation.
+ Log.Write(
+ TLOG_DEBUG,
+ GetLogPrefix() << "Skip partition stream destroy confirm. Partition stream id: "
+ << GetPartitionStreamId(partitionStream)
+ );
+ return;
+ }
+
+ using TClosedEvent = std::conditional_t<
+ UseMigrationProtocol,
+ NPersQueue::TReadSessionEvent::TPartitionStreamClosedEvent,
+ NTopic::TReadSessionEvent::TPartitionSessionClosedEvent
+ >;
+
+ CookieMapping.RemoveMapping(GetPartitionStreamId(partitionStream));
+ PartitionStreams.erase(partitionStream->GetAssignId());
+
+ if constexpr (UseMigrationProtocol) {
+ EventsQueue->PushEvent(partitionStream, TSingleClusterReadSessionImpl<UseMigrationProtocol>::weak_from_this(),
+ TClosedEvent(partitionStream, TClosedEvent::EReason::DestroyConfirmedByUser),
+ deferred);
+ } else {
+ EventsQueue->PushEvent(partitionStream, TSingleClusterReadSessionImpl<UseMigrationProtocol>::weak_from_this(),
+ TClosedEvent(partitionStream, TClosedEvent::EReason::StopConfirmedByUser),
+ deferred);
+ }
+
+ TClientMessage<UseMigrationProtocol> req;
+
+ if constexpr (UseMigrationProtocol) {
+ auto& released = *req.mutable_released();
+ released.mutable_topic()->set_path(partitionStream->GetTopicPath());
+ released.set_cluster(partitionStream->GetCluster());
+ released.set_partition(partitionStream->GetPartitionId());
+ released.set_assign_id(partitionStream->GetAssignId());
+ } else {
+ auto& released = *req.mutable_stop_partition_session_response();
+ released.set_partition_session_id(partitionStream->GetAssignId());
+ }
+
+ WriteToProcessorImpl(std::move(req));
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::Commit(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream, ui64 startOffset, ui64 endOffset) {
+ Log.Write(
+ TLOG_DEBUG,
+ GetLogPrefix() << "Commit offsets [" << startOffset << ", " << endOffset
+ << "). Partition stream id: " << GetPartitionStreamId(partitionStream)
+ );
+ with_lock (Lock) {
+ if (Aborting || Closing || !IsActualPartitionStreamImpl(partitionStream)) { // Got previous incarnation.
+ return;
+ }
+ TClientMessage<UseMigrationProtocol> req;
+ bool hasSomethingToCommit = false;
+
+ if constexpr (UseMigrationProtocol) {
+ if (GetRangesMode()) {
+ hasSomethingToCommit = true;
+ auto* range = req.mutable_commit()->add_offset_ranges();
+ range->set_assign_id(partitionStream->GetAssignId());
+ range->set_start_offset(startOffset);
+ range->set_end_offset(endOffset);
+ } else {
+ for (ui64 offset = startOffset; offset < endOffset; ++offset) {
+ typename TPartitionCookieMapping::TCookie::TPtr cookie = CookieMapping.CommitOffset(GetPartitionStreamId(partitionStream), offset);
+ if (cookie) {
+ hasSomethingToCommit = true;
+ auto* cookieInfo = req.mutable_commit()->add_cookies();
+ cookieInfo->set_assign_id(partitionStream->GetAssignId());
+ cookieInfo->set_partition_cookie(cookie->Cookie);
+ }
+ }
+ }
+ } else {
+ hasSomethingToCommit = true;
+ auto* part_commit = req.mutable_commit_offset_request()->add_commit_offsets();
+ part_commit->set_partition_session_id(partitionStream->GetAssignId());
+ auto* range = part_commit->add_offsets();
+ range->set_start(startOffset);
+ range->set_end(endOffset);
+ }
+
+ if (hasSomethingToCommit) {
+ WriteToProcessorImpl(std::move(req));
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::RequestPartitionStreamStatus(const TPartitionStreamImpl<UseMigrationProtocol>* partitionStream) {
+ Log.Write(
+ TLOG_DEBUG,
+ GetLogPrefix() << "Requesting status for partition stream id: " << GetPartitionStreamId(partitionStream)
+ );
+ with_lock (Lock) {
+ if (Aborting || Closing || !IsActualPartitionStreamImpl(partitionStream)) { // Got previous incarnation.
+ return;
+ }
+
+ TClientMessage<UseMigrationProtocol> req;
+
+ if constexpr (UseMigrationProtocol) {
+ auto& status = *req.mutable_status();
+ status.mutable_topic()->set_path(partitionStream->GetTopicPath());
+ status.set_cluster(partitionStream->GetCluster());
+ status.set_partition(partitionStream->GetPartitionId());
+ status.set_assign_id(partitionStream->GetAssignId());
+ } else {
+ auto& status = *req.mutable_partition_session_status_request();
+ status.set_partition_session_id(partitionStream->GetAssignId());
+ }
+
+ WriteToProcessorImpl(std::move(req));
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::OnUserRetrievedEvent(const typename TAReadSessionEvent<UseMigrationProtocol>::TEvent& event) {
+ Log.Write(TLOG_DEBUG, GetLogPrefix() << "Read session event " << DebugString(event));
+ const i64 bytesCount = static_cast<i64>(CalcDataSize<TAReadSessionEvent<UseMigrationProtocol>>(event));
+ Y_ASSERT(bytesCount >= 0);
+
+ if (!std::get_if<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent>(&event)) { // Event is not data event.
+ return;
+ }
+
+ *Settings.Counters_->MessagesInflight -= std::get<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent>(event).GetMessagesCount();
+ *Settings.Counters_->BytesInflightTotal -= bytesCount;
+ *Settings.Counters_->BytesInflightUncompressed -= bytesCount;
+
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (Lock) {
+ UpdateMemoryUsageStatisticsImpl();
+ Y_VERIFY(bytesCount <= DecompressedDataSize);
+ DecompressedDataSize -= bytesCount;
+ ContinueReadingDataImpl();
+ StartDecompressionTasksImpl(deferred);
+ }
+}
+
+template <bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::WriteToProcessorImpl(
+ TClientMessage<UseMigrationProtocol>&& req) { // Assumes that we're under lock.
+ if (Processor) {
+ Processor->Write(std::move(req));
+ }
+}
+
+template<bool UseMigrationProtocol>
+bool TSingleClusterReadSessionImpl<UseMigrationProtocol>::HasCommitsInflightImpl() const {
+ for (const auto& [id, partitionStream] : PartitionStreams) {
+ if (partitionStream->HasCommitsInflight())
+ return true;
+ }
+ return false;
+}
+
+template <bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::ReadFromProcessorImpl(
+ TDeferredActions<UseMigrationProtocol>& deferred) { // Assumes that we're under lock.
+ if (Closing && !HasCommitsInflightImpl()) {
+ Processor->Cancel();
+ CallCloseCallbackImpl();
+ return;
+ }
+
+ if (Processor) {
+ ServerMessage->Clear();
+
+ auto callback = [weakThis = TSingleClusterReadSessionImpl<UseMigrationProtocol>::weak_from_this(),
+ connectionGeneration = ConnectionGeneration,
+ // Capture message & processor not to read in freed memory.
+ serverMessage = ServerMessage,
+ processor = Processor](NGrpc::TGrpcStatus&& grpcStatus) {
+ if (auto sharedThis = weakThis.lock()) {
+ sharedThis->OnReadDone(std::move(grpcStatus), connectionGeneration);
+ }
+ };
+
+ deferred.DeferReadFromProcessor(Processor, ServerMessage.get(), std::move(callback));
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::OnReadDone(NGrpc::TGrpcStatus&& grpcStatus, size_t connectionGeneration) {
+ TPlainStatus errorStatus;
+ if (!grpcStatus.Ok()) {
+ errorStatus = TPlainStatus(std::move(grpcStatus));
+ }
+
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (Lock) {
+ if (Aborting) {
+ return;
+ }
+
+ if (connectionGeneration != ConnectionGeneration) {
+ return; // Message from previous connection. Ignore.
+ }
+ if (errorStatus.Ok()) {
+ if (IsErrorMessage(*ServerMessage)) {
+ errorStatus = MakeErrorFromProto(*ServerMessage);
+ } else {
+
+ if constexpr (UseMigrationProtocol) {
+ switch (ServerMessage->response_case()) {
+ case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kInitResponse:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_init_response()), deferred);
+ break;
+ case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kDataBatch:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_data_batch()), deferred);
+ break;
+ case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kAssigned:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_assigned()), deferred);
+ break;
+ case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kRelease:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_release()), deferred);
+ break;
+ case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kCommitted:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_committed()), deferred);
+ break;
+ case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::kPartitionStatus:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_partition_status()), deferred);
+ break;
+ case Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::RESPONSE_NOT_SET:
+ errorStatus = TPlainStatus::Internal("Unexpected response from server");
+ break;
+ }
+ } else {
+ switch (ServerMessage->server_message_case()) {
+ case TServerMessage<false>::kInitResponse:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_init_response()), deferred);
+ break;
+ case TServerMessage<false>::kReadResponse:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_read_response()), deferred);
+ break;
+ case TServerMessage<false>::kStartPartitionSessionRequest:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_start_partition_session_request()), deferred);
+ break;
+ case TServerMessage<false>::kStopPartitionSessionRequest:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_stop_partition_session_request()), deferred);
+ break;
+ case TServerMessage<false>::kCommitOffsetResponse:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_commit_offset_response()), deferred);
+ break;
+ case TServerMessage<false>::kPartitionSessionStatusResponse:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_partition_session_status_response()), deferred);
+ break;
+ case TServerMessage<false>::kUpdateTokenResponse:
+ OnReadDoneImpl(std::move(*ServerMessage->mutable_update_token_response()), deferred);
+ break;
+ case TServerMessage<false>::SERVER_MESSAGE_NOT_SET:
+ errorStatus = TPlainStatus::Internal("Unexpected response from server");
+ break;
+ }
+ }
+
+ if (errorStatus.Ok()) {
+ ReadFromProcessorImpl(deferred); // Read next.
+ }
+ }
+ }
+ }
+ if (!errorStatus.Ok()) {
+ ++*Settings.Counters_->Errors;
+ // Explicitly create retry state to determine whether we should connect to server again.
+ RetryState = Settings.RetryPolicy_->CreateRetryState();
+ if (!Reconnect(errorStatus)) {
+ ErrorHandler->AbortSession(std::move(errorStatus));
+ }
+ }
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<true>::OnReadDoneImpl(
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::InitResponse&& msg,
+ TDeferredActions<true>& deferred) { // Assumes that we're under lock.
+ Y_UNUSED(deferred);
+
+ Log.Write(TLOG_INFO, GetLogPrefix() << "Server session id: " << msg.session_id());
+
+ // Successful init. Do nothing.
+ ContinueReadingDataImpl();
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<true>::OnReadDoneImpl(
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch&& msg,
+ TDeferredActions<true>& deferred) { // Assumes that we're under lock.
+ if (Closing || Aborting) {
+ return; // Don't process new data.
+ }
+ UpdateMemoryUsageStatisticsImpl();
+ for (TPartitionData<true>& partitionData : *msg.mutable_partition_data()) {
+ auto partitionStreamIt = PartitionStreams.find(partitionData.cookie().assign_id());
+ if (partitionStreamIt == PartitionStreams.end()) {
+ ++*Settings.Counters_->Errors;
+ BreakConnectionAndReconnectImpl(EStatus::INTERNAL_ERROR,
+ TStringBuilder()
+ << "Got unexpected partition stream data message. Topic: "
+ << partitionData.topic() << ". Partition: " << partitionData.partition()
+ << " AssignId: " << partitionData.cookie().assign_id(),
+ deferred);
+ return;
+ }
+ const TIntrusivePtr<TPartitionStreamImpl<true>>& partitionStream = partitionStreamIt->second;
+
+ typename TPartitionCookieMapping::TCookie::TPtr cookie = MakeIntrusive<typename TPartitionCookieMapping::TCookie>(partitionData.cookie().partition_cookie(), partitionStream);
+
+ ui64 firstOffset = std::numeric_limits<ui64>::max();
+ ui64 currentOffset = std::numeric_limits<ui64>::max();
+ ui64 desiredOffset = partitionStream->GetFirstNotReadOffset();
+ for (const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::Batch& batch : partitionData.batches()) {
+ // Validate messages.
+ for (const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::MessageData& messageData : batch.message_data()) {
+ // Check offsets continuity.
+ if (messageData.offset() != desiredOffset) {
+ bool res = partitionStream->AddToCommitRanges(desiredOffset, messageData.offset(), GetRangesMode());
+ Y_VERIFY(res);
+ }
+
+ if (firstOffset == std::numeric_limits<ui64>::max()) {
+ firstOffset = messageData.offset();
+ }
+ currentOffset = messageData.offset();
+ desiredOffset = currentOffset + 1;
+ partitionStream->UpdateMaxReadOffset(currentOffset);
+ const i64 messageSize = static_cast<i64>(messageData.data().size());
+ CompressedDataSize += messageSize;
+ *Settings.Counters_->BytesInflightTotal += messageSize;
+ *Settings.Counters_->BytesInflightCompressed += messageSize;
+ ++*Settings.Counters_->MessagesInflight;
+ }
+ }
+ if (firstOffset == std::numeric_limits<ui64>::max()) {
+ BreakConnectionAndReconnectImpl(EStatus::INTERNAL_ERROR,
+ TStringBuilder() << "Got empty data message. Topic: "
+ << partitionData.topic()
+ << ". Partition: " << partitionData.partition()
+ << " message: " << msg,
+ deferred);
+ return;
+ }
+ cookie->SetOffsetRange(std::make_pair(firstOffset, desiredOffset));
+ partitionStream->SetFirstNotReadOffset(desiredOffset);
+ if (!CookieMapping.AddMapping(cookie)) {
+ BreakConnectionAndReconnectImpl(EStatus::INTERNAL_ERROR,
+ TStringBuilder() << "Got unexpected data message. Topic: "
+ << partitionData.topic()
+ << ". Partition: " << partitionData.partition()
+ << ". Cookie mapping already has such cookie",
+ deferred);
+ return;
+ }
+
+ auto decompressionInfo = std::make_shared<TDataDecompressionInfo<true>>(std::move(partitionData),
+ shared_from_this(),
+ Settings.Decompress_);
+ Y_VERIFY(decompressionInfo);
+
+ if (decompressionInfo) {
+ DecompressionQueue.emplace_back(decompressionInfo, partitionStream);
+ StartDecompressionTasksImpl(deferred);
+ }
+ }
+
+ WaitingReadResponse = false;
+ ContinueReadingDataImpl();
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<true>::OnReadDoneImpl(
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Assigned&& msg,
+ TDeferredActions<true>& deferred) { // Assumes that we're under lock.
+ auto partitionStream = MakeIntrusive<TPartitionStreamImpl<true>>(
+ NextPartitionStreamId, msg.topic().path(), msg.cluster(),
+ msg.partition() + 1, // Group.
+ msg.partition(), // Partition.
+ msg.assign_id(), msg.read_offset(), weak_from_this(),
+ ErrorHandler);
+ NextPartitionStreamId += PartitionStreamIdStep;
+
+ // Renew partition stream.
+ TIntrusivePtr<TPartitionStreamImpl<true>>& currentPartitionStream =
+ PartitionStreams[partitionStream->GetAssignId()];
+ if (currentPartitionStream) {
+ CookieMapping.RemoveMapping(currentPartitionStream->GetPartitionStreamId());
+ EventsQueue->PushEvent(
+ currentPartitionStream, weak_from_this(),
+ TReadSessionEvent::TPartitionStreamClosedEvent(
+ currentPartitionStream, TReadSessionEvent::TPartitionStreamClosedEvent::EReason::Lost),
+ deferred);
+ }
+ currentPartitionStream = partitionStream;
+
+ // Send event to user.
+ EventsQueue->PushEvent(
+ partitionStream, weak_from_this(),
+ TReadSessionEvent::TCreatePartitionStreamEvent(partitionStream, msg.read_offset(), msg.end_offset()),
+ deferred);
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<true>::OnReadDoneImpl(
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Release&& msg,
+ TDeferredActions<true>& deferred) { // Assumes that we're under lock.
+ auto partitionStreamIt = PartitionStreams.find(msg.assign_id());
+ if (partitionStreamIt == PartitionStreams.end()) {
+ return;
+ }
+ TIntrusivePtr<TPartitionStreamImpl<true>> partitionStream = partitionStreamIt->second;
+ if (msg.forceful_release()) {
+ PartitionStreams.erase(msg.assign_id());
+ CookieMapping.RemoveMapping(partitionStream->GetPartitionStreamId());
+ EventsQueue->PushEvent(partitionStream, weak_from_this(),
+ TReadSessionEvent::TPartitionStreamClosedEvent(
+ partitionStream, TReadSessionEvent::TPartitionStreamClosedEvent::EReason::Lost),
+ deferred);
+ } else {
+ EventsQueue->PushEvent(
+ partitionStream, weak_from_this(),
+ TReadSessionEvent::TDestroyPartitionStreamEvent(std::move(partitionStream), msg.commit_offset()),
+ deferred);
+ }
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<true>::OnReadDoneImpl(
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::Committed&& msg,
+ TDeferredActions<true>& deferred) { // Assumes that we're under lock.
+
+ Log.Write(TLOG_DEBUG, GetLogPrefix() << "Committed response: " << msg);
+
+ TMap<ui64, TIntrusivePtr<TPartitionStreamImpl<true>>> partitionStreams;
+ for (const Ydb::PersQueue::V1::CommitCookie& cookieProto : msg.cookies()) {
+ typename TPartitionCookieMapping::TCookie::TPtr cookie = CookieMapping.RetrieveCommittedCookie(cookieProto);
+ if (cookie) {
+ cookie->PartitionStream->UpdateMaxCommittedOffset(cookie->OffsetRange.second);
+ partitionStreams[cookie->PartitionStream->GetPartitionStreamId()] = cookie->PartitionStream;
+ }
+ }
+ for (auto& [id, partitionStream] : partitionStreams) {
+ EventsQueue->PushEvent(
+ partitionStream, weak_from_this(),
+ TReadSessionEvent::TCommitAcknowledgementEvent(partitionStream, partitionStream->GetMaxCommittedOffset()),
+ deferred);
+ }
+
+ for (const auto& rangeProto : msg.offset_ranges()) {
+ auto partitionStreamIt = PartitionStreams.find(rangeProto.assign_id());
+ if (partitionStreamIt != PartitionStreams.end()) {
+ auto partitionStream = partitionStreamIt->second;
+ partitionStream->UpdateMaxCommittedOffset(rangeProto.end_offset());
+ EventsQueue->PushEvent(
+ partitionStream, weak_from_this(),
+ TReadSessionEvent::TCommitAcknowledgementEvent(partitionStream, rangeProto.end_offset()),
+ deferred);
+ }
+ }
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<true>::OnReadDoneImpl(
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::PartitionStatus&& msg,
+ TDeferredActions<true>& deferred) { // Assumes that we're under lock.
+ auto partitionStreamIt = PartitionStreams.find(msg.assign_id());
+ if (partitionStreamIt == PartitionStreams.end()) {
+ return;
+ }
+ EventsQueue->PushEvent(partitionStreamIt->second, weak_from_this(),
+ TReadSessionEvent::TPartitionStreamStatusEvent(
+ partitionStreamIt->second, msg.committed_offset(),
+ 0, // TODO: support read offset in status
+ msg.end_offset(), TInstant::MilliSeconds(msg.write_watermark_ms())),
+ deferred);
+}
+
+//////////////
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<false>::OnReadDoneImpl(
+ Ydb::Topic::StreamReadMessage::InitResponse&& msg,
+ TDeferredActions<false>& deferred) { // Assumes that we're under lock.
+ Y_UNUSED(deferred);
+
+ Log.Write(TLOG_INFO, GetLogPrefix() << "Server session id: " << msg.session_id());
+
+ // Successful init. Do nothing.
+ ContinueReadingDataImpl();
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<false>::OnReadDoneImpl(
+ Ydb::Topic::StreamReadMessage::ReadResponse&& msg,
+ TDeferredActions<false>& deferred) { // Assumes that we're under lock.
+
+ if (Closing || Aborting) {
+ return; // Don't process new data.
+ }
+
+ i64 serverBytesSize = msg.bytes_size();
+ ReadSizeServerDelta -= serverBytesSize;
+
+ UpdateMemoryUsageStatisticsImpl();
+ for (TPartitionData<false>& partitionData : *msg.mutable_partition_data()) {
+ auto partitionStreamIt = PartitionStreams.find(partitionData.partition_session_id());
+ if (partitionStreamIt == PartitionStreams.end()) {
+ ++*Settings.Counters_->Errors;
+ BreakConnectionAndReconnectImpl(EStatus::INTERNAL_ERROR,
+ TStringBuilder() << "Got unexpected partition stream data message. "
+ << "PartitionSessionId: " << partitionData.partition_session_id(),
+ deferred);
+ return;
+ }
+ const TIntrusivePtr<TPartitionStreamImpl<false>>& partitionStream = partitionStreamIt->second;
+
+ i64 firstOffset = std::numeric_limits<i64>::max();
+ i64 currentOffset = std::numeric_limits<i64>::max();
+ i64 desiredOffset = partitionStream->GetFirstNotReadOffset();
+ for (const auto& batch : partitionData.batches()) {
+ // Validate messages.
+ for (const auto& messageData : batch.message_data()) {
+ // Check offsets continuity.
+ if (messageData.offset() != desiredOffset) {
+ bool res = partitionStream->AddToCommitRanges(desiredOffset, messageData.offset(), GetRangesMode());
+ Y_VERIFY(res);
+ }
+
+ if (firstOffset == std::numeric_limits<i64>::max()) {
+ firstOffset = messageData.offset();
+ }
+ currentOffset = messageData.offset();
+ desiredOffset = currentOffset + 1;
+ partitionStream->UpdateMaxReadOffset(currentOffset);
+ const i64 messageSize = static_cast<i64>(messageData.data().size());
+ CompressedDataSize += messageSize;
+ *Settings.Counters_->BytesInflightTotal += messageSize;
+ *Settings.Counters_->BytesInflightCompressed += messageSize;
+ ++*Settings.Counters_->MessagesInflight;
+ }
+ }
+ if (firstOffset == std::numeric_limits<i64>::max()) {
+ BreakConnectionAndReconnectImpl(EStatus::INTERNAL_ERROR,
+ TStringBuilder() << "Got empty data message. "
+ << "PartitionSessionId: " << partitionData.partition_session_id()
+ << " message: " << msg,
+ deferred);
+ return;
+ }
+ partitionStream->SetFirstNotReadOffset(desiredOffset);
+
+ auto decompressionInfo = std::make_shared<TDataDecompressionInfo<false>>(std::move(partitionData),
+ shared_from_this(),
+ Settings.Decompress_,
+ serverBytesSize);
+ // TODO (ildar-khisam@): share serverBytesSize between partitions data according to their actual sizes;
+ // for now whole serverBytesSize goes with first (and only) partition data.
+ serverBytesSize = 0;
+ Y_VERIFY(decompressionInfo);
+
+ if (decompressionInfo) {
+ DecompressionQueue.emplace_back(decompressionInfo, partitionStream);
+ StartDecompressionTasksImpl(deferred);
+ }
+ }
+
+ WaitingReadResponse = false;
+ ContinueReadingDataImpl();
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<false>::OnReadDoneImpl(
+ Ydb::Topic::StreamReadMessage::StartPartitionSessionRequest&& msg,
+ TDeferredActions<false>& deferred) { // Assumes that we're under lock.
+ auto partitionStream = MakeIntrusive<TPartitionStreamImpl<false>>(
+ NextPartitionStreamId, msg.partition_session().path(), msg.partition_session().partition_id(),
+ msg.partition_session().partition_session_id(), msg.committed_offset(),
+ weak_from_this(), ErrorHandler);
+ NextPartitionStreamId += PartitionStreamIdStep;
+
+ // Renew partition stream.
+ TIntrusivePtr<TPartitionStreamImpl<false>>& currentPartitionStream = PartitionStreams[partitionStream->GetAssignId()];
+ if (currentPartitionStream) {
+ EventsQueue->PushEvent(
+ currentPartitionStream, weak_from_this(),
+ NTopic::TReadSessionEvent::TPartitionSessionClosedEvent(
+ currentPartitionStream, NTopic::TReadSessionEvent::TPartitionSessionClosedEvent::EReason::Lost),
+ deferred);
+ }
+ currentPartitionStream = partitionStream;
+
+ // Send event to user.
+ EventsQueue->PushEvent(partitionStream, weak_from_this(),
+ NTopic::TReadSessionEvent::TStartPartitionSessionEvent(
+ partitionStream, msg.committed_offset(), msg.partition_offsets().end()),
+ deferred);
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<false>::OnReadDoneImpl(
+ Ydb::Topic::StreamReadMessage::StopPartitionSessionRequest&& msg,
+ TDeferredActions<false>& deferred) { // Assumes that we're under lock.
+ auto partitionStreamIt = PartitionStreams.find(msg.partition_session_id());
+ if (partitionStreamIt == PartitionStreams.end()) {
+ return;
+ }
+ TIntrusivePtr<TPartitionStreamImpl<false>> partitionStream = partitionStreamIt->second;
+ if (!msg.graceful()) {
+ PartitionStreams.erase(msg.partition_session_id());
+ EventsQueue->PushEvent(partitionStream, weak_from_this(),
+ NTopic::TReadSessionEvent::TPartitionSessionClosedEvent(
+ partitionStream, NTopic::TReadSessionEvent::TPartitionSessionClosedEvent::EReason::Lost),
+ deferred);
+ } else {
+ EventsQueue->PushEvent(
+ partitionStream, weak_from_this(),
+ NTopic::TReadSessionEvent::TStopPartitionSessionEvent(std::move(partitionStream), msg.committed_offset()),
+ deferred);
+ }
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<false>::OnReadDoneImpl(
+ Ydb::Topic::StreamReadMessage::CommitOffsetResponse&& msg,
+ TDeferredActions<false>& deferred) { // Assumes that we're under lock.
+
+ Log.Write(TLOG_DEBUG, GetLogPrefix() << "Committed response: " << msg);
+
+ for (const auto& rangeProto : msg.partitions_committed_offsets()) {
+ auto partitionStreamIt = PartitionStreams.find(rangeProto.partition_session_id());
+ if (partitionStreamIt != PartitionStreams.end()) {
+ auto partitionStream = partitionStreamIt->second;
+ partitionStream->UpdateMaxCommittedOffset(rangeProto.committed_offset());
+ EventsQueue->PushEvent(partitionStream, weak_from_this(),
+ NTopic::TReadSessionEvent::TCommitOffsetAcknowledgementEvent(
+ partitionStream, rangeProto.committed_offset()),
+ deferred);
+ }
+ }
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<false>::OnReadDoneImpl(
+ Ydb::Topic::StreamReadMessage::PartitionSessionStatusResponse&& msg,
+ TDeferredActions<false>& deferred) { // Assumes that we're under lock.
+ auto partitionStreamIt = PartitionStreams.find(msg.partition_session_id());
+ if (partitionStreamIt == PartitionStreams.end()) {
+ return;
+ }
+ EventsQueue->PushEvent(partitionStreamIt->second, weak_from_this(),
+ NTopic::TReadSessionEvent::TPartitionSessionStatusEvent(
+ partitionStreamIt->second, msg.committed_offset(),
+ 0, // TODO: support read offset in status
+ msg.partition_offsets().end(),
+ TInstant::MilliSeconds(::google::protobuf::util::TimeUtil::TimestampToMilliseconds(
+ msg.write_time_high_watermark()))),
+ deferred);
+}
+
+template <>
+template <>
+inline void TSingleClusterReadSessionImpl<false>::OnReadDoneImpl(
+ Ydb::Topic::UpdateTokenResponse&& msg,
+ TDeferredActions<false>& deferred) { // Assumes that we're under lock.
+ // TODO
+ Y_UNUSED(msg, deferred);
+}
+
+//////////////
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::StartDecompressionTasksImpl(TDeferredActions<UseMigrationProtocol>& deferred) {
+ UpdateMemoryUsageStatisticsImpl();
+ const i64 limit = GetDecompressedDataSizeLimit();
+ Y_VERIFY(limit > 0);
+ while (DecompressedDataSize < limit
+ && (static_cast<size_t>(CompressedDataSize + DecompressedDataSize) < Settings.MaxMemoryUsageBytes_
+ || DecompressedDataSize == 0 /* Allow decompression of at least one message even if memory is full. */)
+ && !DecompressionQueue.empty())
+ {
+ TDecompressionQueueItem& current = DecompressionQueue.front();
+ auto sentToDecompress = current.BatchInfo->StartDecompressionTasks(Settings.DecompressionExecutor_,
+ Max(limit - DecompressedDataSize, static_cast<i64>(1)),
+ AverageCompressionRatio,
+ current.PartitionStream,
+ deferred);
+ DecompressedDataSize += sentToDecompress;
+ if (current.BatchInfo->AllDecompressionTasksStarted()) {
+ DecompressionQueue.pop_front();
+ } else {
+ break;
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::DestroyAllPartitionStreamsImpl(TDeferredActions<UseMigrationProtocol>& deferred) {
+ using TClosedEvent = std::conditional_t<
+ UseMigrationProtocol,
+ NPersQueue::TReadSessionEvent::TPartitionStreamClosedEvent,
+ NTopic::TReadSessionEvent::TPartitionSessionClosedEvent
+ >;
+
+ for (auto&& [key, partitionStream] : PartitionStreams) {
+ EventsQueue->PushEvent(partitionStream, TSingleClusterReadSessionImpl<UseMigrationProtocol>::weak_from_this(),
+ TClosedEvent(std::move(partitionStream), TClosedEvent::EReason::ConnectionLost),
+ deferred);
+ }
+ PartitionStreams.clear();
+ CookieMapping.ClearMapping();
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::OnCreateNewDecompressionTask() {
+ ++DecompressionTasksInflight;
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::OnDataDecompressed(i64 sourceSize, i64 estimatedDecompressedSize, i64 decompressedSize, size_t messagesCount, i64 serverBytesSize) {
+ TDeferredActions<UseMigrationProtocol> deferred;
+ --DecompressionTasksInflight;
+
+ *Settings.Counters_->BytesRead += decompressedSize;
+ *Settings.Counters_->BytesReadCompressed += sourceSize;
+ *Settings.Counters_->MessagesRead += messagesCount;
+ *Settings.Counters_->BytesInflightUncompressed += decompressedSize;
+ *Settings.Counters_->BytesInflightCompressed -= sourceSize;
+ *Settings.Counters_->BytesInflightTotal += (decompressedSize - sourceSize);
+
+ with_lock (Lock) {
+ UpdateMemoryUsageStatisticsImpl();
+ CompressedDataSize -= sourceSize;
+ DecompressedDataSize += decompressedSize - estimatedDecompressedSize;
+ constexpr double weight = 0.6;
+ if (sourceSize > 0) {
+ AverageCompressionRatio = weight * static_cast<double>(decompressedSize) / static_cast<double>(sourceSize) + (1 - weight) * AverageCompressionRatio;
+ }
+ if (Aborting) {
+ return;
+ }
+ if constexpr (!UseMigrationProtocol) {
+ ReadSizeBudget += serverBytesSize;
+ ReadSizeServerDelta += serverBytesSize;
+ }
+ ContinueReadingDataImpl();
+ StartDecompressionTasksImpl(deferred);
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::Abort() {
+ Log.Write(TLOG_DEBUG, GetLogPrefix() << "Abort session to cluster");
+
+ with_lock (Lock) {
+ if (!Aborting) {
+ Aborting = true;
+ CloseCallback = {};
+
+ // Cancel(ClientContext); // Don't cancel, because this is used only as factory for other contexts.
+ Cancel(ConnectContext);
+ Cancel(ConnectTimeoutContext);
+ Cancel(ConnectDelayContext);
+
+ if (ClientContext) {
+ ClientContext->Cancel();
+ ClientContext.reset();
+ }
+
+ if (Processor) {
+ Processor->Cancel();
+ }
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::Close(std::function<void()> callback) {
+ with_lock (Lock) {
+ if (Aborting) {
+ callback();
+ }
+
+ if (!Closing) {
+ Closing = true;
+
+ CloseCallback = std::move(callback);
+
+ Cancel(ConnectContext);
+ Cancel(ConnectTimeoutContext);
+ Cancel(ConnectDelayContext);
+
+ if (!Processor) {
+ CallCloseCallbackImpl();
+ } else {
+ if (!HasCommitsInflightImpl()) {
+ Processor->Cancel();
+ CallCloseCallbackImpl();
+ }
+ }
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::CallCloseCallbackImpl() {
+ if (CloseCallback) {
+ CloseCallback();
+ CloseCallback = {};
+ }
+ Aborting = true; // So abort call will have no effect.
+ if (ClientContext) {
+ ClientContext->Cancel();
+ ClientContext.reset();
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::StopReadingData() {
+ with_lock (Lock) {
+ DataReadingSuspended = true;
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::ResumeReadingData() {
+ with_lock (Lock) {
+ if (DataReadingSuspended) {
+ DataReadingSuspended = false;
+ ContinueReadingDataImpl();
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::WaitAllDecompressionTasks() {
+ Y_ASSERT(DecompressionTasksInflight >= 0);
+ while (DecompressionTasksInflight > 0) {
+ Sleep(TDuration::MilliSeconds(5)); // Perform active wait because this is aborting process and there are no decompression tasks here in normal situation.
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::DumpStatisticsToLog(TLogElement& log) {
+ with_lock (Lock) {
+ // cluster:topic:partition:stream-id:read-offset:committed-offset
+ for (auto&& [key, partitionStream] : PartitionStreams) {
+ if constexpr (UseMigrationProtocol) {
+ log << " "
+ << ClusterName
+ << ':' << partitionStream->GetTopicPath()
+ << ':' << partitionStream->GetPartitionId()
+ << ':' << partitionStream->GetPartitionStreamId()
+ << ':' << partitionStream->GetMaxReadOffset()
+ << ':' << partitionStream->GetMaxCommittedOffset();
+ } else {
+ log << " "
+ << "-"
+ << ':' << partitionStream->GetTopicPath()
+ << ':' << partitionStream->GetPartitionId()
+ << ':' << partitionStream->GetPartitionSessionId()
+ << ':' << partitionStream->GetMaxReadOffset()
+ << ':' << partitionStream->GetMaxCommittedOffset();
+ }
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::UpdateMemoryUsageStatisticsImpl() {
+ const TInstant now = TInstant::Now();
+ const ui64 delta = (now - UsageStatisticsLastUpdateTime).MilliSeconds();
+ UsageStatisticsLastUpdateTime = now;
+ const double percent = 100.0 / static_cast<double>(Settings.MaxMemoryUsageBytes_);
+
+ Settings.Counters_->TotalBytesInflightUsageByTime->Collect((DecompressedDataSize + CompressedDataSize) * percent, delta);
+ Settings.Counters_->UncompressedBytesInflightUsageByTime->Collect(DecompressedDataSize * percent, delta);
+ Settings.Counters_->CompressedBytesInflightUsageByTime->Collect(CompressedDataSize * percent, delta);
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::UpdateMemoryUsageStatistics() {
+ with_lock (Lock) {
+ UpdateMemoryUsageStatisticsImpl();
+ }
+}
+
+template<bool UseMigrationProtocol>
+bool TSingleClusterReadSessionImpl<UseMigrationProtocol>::GetRangesMode() const {
+ if constexpr (UseMigrationProtocol) {
+ return Settings.RangesMode_.GetOrElse(RangesMode);
+ } else {
+ return true;
+ }
+}
+
+template<bool UseMigrationProtocol>
+bool TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::AddMapping(const typename TCookie::TPtr& cookie) {
+ if (!Cookies.emplace(cookie->GetKey(), cookie).second) {
+ return false;
+ }
+ for (ui64 offset = cookie->OffsetRange.first; offset < cookie->OffsetRange.second; ++offset) {
+ if (!UncommittedOffsetToCookie.emplace(std::make_pair(cookie->PartitionStream->GetPartitionStreamId(), offset), cookie).second) {
+ return false;
+ }
+ }
+ PartitionStreamIdToCookie.emplace(cookie->PartitionStream->GetPartitionStreamId(), cookie);
+ return true;
+}
+
+template<bool UseMigrationProtocol>
+typename TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::TCookie::TPtr TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::CommitOffset(ui64 partitionStreamId, ui64 offset) {
+ auto cookieIt = UncommittedOffsetToCookie.find(std::make_pair(partitionStreamId, offset));
+ if (cookieIt != UncommittedOffsetToCookie.end()) {
+ typename TCookie::TPtr cookie;
+ if (!--cookieIt->second->UncommittedMessagesLeft) {
+ ++CommitInflight;
+ cookie = cookieIt->second;
+ }
+ UncommittedOffsetToCookie.erase(cookieIt);
+ return cookie;
+ } else {
+ ThrowFatalError(TStringBuilder() << "Invalid offset " << offset << ". Partition stream id: " << partitionStreamId << Endl);
+ }
+ // If offset wasn't found, there might be already hard released partition.
+ // This situation is OK.
+ return nullptr;
+}
+
+template<bool UseMigrationProtocol>
+typename TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::TCookie::TPtr TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::RetrieveCommittedCookie(const Ydb::PersQueue::V1::CommitCookie& cookieProto) {
+ typename TCookie::TPtr cookieInfo;
+ auto cookieIt = Cookies.find(typename TCookie::TKey(cookieProto.assign_id(), cookieProto.partition_cookie()));
+ if (cookieIt != Cookies.end()) {
+ --CommitInflight;
+ cookieInfo = cookieIt->second;
+ Cookies.erase(cookieIt);
+
+ auto [rangeBegin, rangeEnd] = PartitionStreamIdToCookie.equal_range(cookieInfo->PartitionStream->GetPartitionStreamId());
+ for (auto i = rangeBegin; i != rangeEnd; ++i) {
+ if (i->second == cookieInfo) {
+ PartitionStreamIdToCookie.erase(i);
+ break;
+ }
+ }
+ }
+ return cookieInfo;
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::RemoveMapping(ui64 partitionStreamId) {
+ auto [rangeBegin, rangeEnd] = PartitionStreamIdToCookie.equal_range(partitionStreamId);
+ for (auto i = rangeBegin; i != rangeEnd; ++i) {
+ typename TCookie::TPtr cookie = i->second;
+ Cookies.erase(cookie->GetKey());
+ for (ui64 offset = cookie->OffsetRange.first; offset < cookie->OffsetRange.second; ++offset) {
+ UncommittedOffsetToCookie.erase(std::make_pair(partitionStreamId, offset));
+ }
+ }
+ PartitionStreamIdToCookie.erase(rangeBegin, rangeEnd);
+}
+
+template<bool UseMigrationProtocol>
+void TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::ClearMapping() {
+ Cookies.clear();
+ UncommittedOffsetToCookie.clear();
+ PartitionStreamIdToCookie.clear();
+ CommitInflight = 0;
+}
+
+template<bool UseMigrationProtocol>
+bool TSingleClusterReadSessionImpl<UseMigrationProtocol>::TPartitionCookieMapping::HasUnacknowledgedCookies() const {
+ return CommitInflight != 0;
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TReadSessionEventInfo
+
+template<bool UseMigrationProtocol>
+TReadSessionEventInfo<UseMigrationProtocol>::TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> session,
+ TEvent event)
+ : PartitionStream(std::move(partitionStream))
+ , Event(std::move(event))
+ , Session(std::move(session))
+{
+}
+
+template<bool UseMigrationProtocol>
+TReadSessionEventInfo<UseMigrationProtocol>::TReadSessionEventInfo(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> session,
+ bool hasDataEvents)
+ : PartitionStream(std::move(partitionStream))
+ , HasDataEvents(hasDataEvents)
+ , EventsCount(1)
+ , Session(std::move(session))
+{
+}
+
+template<bool UseMigrationProtocol>
+bool TReadSessionEventInfo<UseMigrationProtocol>::IsEmpty() const {
+ return !PartitionStream || !PartitionStream->HasEvents();
+}
+
+template<bool UseMigrationProtocol>
+bool TReadSessionEventInfo<UseMigrationProtocol>::IsDataEvent() const {
+ return !IsEmpty() && PartitionStream->TopEvent().IsDataEvent();
+}
+
+template<bool UseMigrationProtocol>
+void TReadSessionEventInfo<UseMigrationProtocol>::OnUserRetrievedEvent() {
+ if (auto session = Session.lock()) {
+ session->OnUserRetrievedEvent(*Event);
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TReadSessionEventsQueue
+
+template <bool UseMigrationProtocol>
+TReadSessionEventsQueue<UseMigrationProtocol>::TReadSessionEventsQueue(
+ const TAReadSessionSettings<UseMigrationProtocol>& settings,
+ std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> session)
+ : TParent(settings)
+ , Session(std::move(session)) {
+ const auto& h = TParent::Settings.EventHandlers_;
+
+ if constexpr (UseMigrationProtocol) {
+ HasEventCallbacks = (h.CommonHandler_
+ || h.DataReceivedHandler_
+ || h.CommitAcknowledgementHandler_
+ || h.CreatePartitionStreamHandler_
+ || h.DestroyPartitionStreamHandler_
+ || h.PartitionStreamStatusHandler_
+ || h.PartitionStreamClosedHandler_
+ || h.SessionClosedHandler_);
+ } else {
+ HasEventCallbacks = (h.CommonHandler_
+ || h.DataReceivedHandler_
+ || h.CommitOffsetAcknowledgementHandler_
+ || h.StartPartitionSessionHandler_
+ || h.StopPartitionSessionHandler_
+ || h.PartitionSessionStatusHandler_
+ || h.PartitionSessionClosedHandler_
+ || h.SessionClosedHandler_);
+ }
+}
+
+template <bool UseMigrationProtocol>
+void TReadSessionEventsQueue<UseMigrationProtocol>::PushEvent(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> stream,
+ std::weak_ptr<IUserRetrievedEventCallback<UseMigrationProtocol>> /*session*/,
+ typename TAReadSessionEvent<UseMigrationProtocol>::TEvent event,
+ TDeferredActions<UseMigrationProtocol>& deferred)
+{
+ if (TParent::Closed) {
+ return;
+ }
+
+ with_lock (TParent::Mutex) {
+ using TClosedEvent = std::conditional_t<
+ UseMigrationProtocol,
+ NPersQueue::TReadSessionEvent::TPartitionStreamClosedEvent,
+ NTopic::TReadSessionEvent::TPartitionSessionClosedEvent
+ >;
+
+ if (std::holds_alternative<TClosedEvent>(event)) {
+ stream->DeleteNotReadyTail();
+ }
+
+ stream->InsertEvent(std::move(event));
+ Y_ASSERT(stream->HasEvents());
+
+ SignalReadyEventsImpl(stream.Get(), deferred);
+ }
+}
+
+template <bool UseMigrationProtocol>
+void TReadSessionEventsQueue<UseMigrationProtocol>::SignalEventImpl(
+ TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ TDeferredActions<UseMigrationProtocol>& deferred,
+ bool isDataEvent)
+{
+ if (TParent::Closed) {
+ return;
+ }
+
+ auto session = partitionStream->GetSession();
+
+ if (TParent::Events.empty()) {
+ TParent::Events.emplace(std::move(partitionStream), std::move(session), isDataEvent);
+ } else {
+ auto& event = TParent::Events.back();
+ if (event.HasDataEvents
+ && isDataEvent
+ && (event.PartitionStream == partitionStream)) {
+ ++event.EventsCount;
+ } else {
+ TParent::Events.emplace(std::move(partitionStream), std::move(session), isDataEvent);
+ }
+ }
+
+ SignalWaiterImpl(deferred);
+}
+
+template <bool UseMigrationProtocol>
+void TReadSessionEventsQueue<UseMigrationProtocol>::PushDataEvent(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ size_t batch,
+ size_t message,
+ typename TDataDecompressionInfo<UseMigrationProtocol>::TPtr parent,
+ std::atomic<bool>& ready)
+{
+ if (this->Closed) {
+ return;
+ }
+
+ with_lock (this->Mutex) {
+ partitionStream->InsertDataEvent(batch, message, parent, ready);
+ }
+}
+
+template <bool UseMigrationProtocol>
+typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent TReadSessionEventsQueue<UseMigrationProtocol>::GetDataEventImpl(
+ TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> stream,
+ size_t* maxByteSize) { // Assumes that we're under lock.
+
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TMessage> messages;
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TCompressedMessage> compressedMessages;
+
+ Y_VERIFY(!TParent::Events.empty());
+
+ auto& event = TParent::Events.front();
+
+ Y_VERIFY(event.PartitionStream == stream);
+ Y_VERIFY(event.EventsCount > 0);
+
+ for (; (event.EventsCount > 0) && (*maxByteSize > 0); --event.EventsCount) {
+ stream->TopEvent().GetDataEvent().TakeData(stream, &messages, &compressedMessages, maxByteSize);
+ stream->PopEvent();
+ }
+
+ if (event.EventsCount == 0) {
+ TParent::Events.pop();
+ }
+
+ Y_VERIFY(!messages.empty() || !compressedMessages.empty());
+
+ return {std::move(messages), std::move(compressedMessages), stream};
+}
+
+template <bool UseMigrationProtocol>
+void TReadSessionEventsQueue<UseMigrationProtocol>::SignalReadyEvents(
+ TPartitionStreamImpl<UseMigrationProtocol>* partitionStream) {
+ Y_ASSERT(partitionStream);
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (TReadSessionEventsQueue<UseMigrationProtocol>::Mutex) {
+ SignalReadyEventsImpl(partitionStream, deferred);
+ }
+}
+
+template <bool UseMigrationProtocol>
+void TReadSessionEventsQueue<UseMigrationProtocol>::SignalReadyEventsImpl(
+ TPartitionStreamImpl<UseMigrationProtocol>* partitionStream, TDeferredActions<UseMigrationProtocol>& deferred) {
+ partitionStream->SignalReadyEvents(this, deferred);
+ ApplyCallbacksToReadyEventsImpl(deferred);
+}
+
+template <bool UseMigrationProtocol>
+bool TReadSessionEventsQueue<UseMigrationProtocol>::ApplyCallbacksToReadyEventsImpl(
+ TDeferredActions<UseMigrationProtocol>& deferred) {
+ if (!HasEventCallbacks) {
+ return false;
+ }
+ bool applied = false;
+ while (HasCallbackForNextEventImpl()) {
+ size_t maxSize = std::numeric_limits<size_t>::max();
+ TReadSessionEventInfo<UseMigrationProtocol> eventInfo = GetEventImpl(&maxSize);
+ applied = true;
+ if (!ApplyHandler(eventInfo, deferred)) { // Close session event.
+ break;
+ }
+ }
+ return applied;
+}
+
+template <bool UseMigrationProtocol>
+struct THasCallbackForEventVisitor {
+ explicit THasCallbackForEventVisitor(const TAReadSessionSettings<UseMigrationProtocol>& settings)
+ : Settings(settings) {
+ }
+
+ template <typename TEv>
+ inline bool operator()(const TEv&);
+
+ const TAReadSessionSettings<UseMigrationProtocol>& Settings;
+};
+
+#define DEFINE_HANDLER(use_migration_protocol, type, handler) \
+ template <> \
+ template <> \
+ inline bool THasCallbackForEventVisitor<use_migration_protocol>::operator()(const type&) { \
+ return bool(Settings.EventHandlers_.handler); \
+ } \
+ /**/
+
+DEFINE_HANDLER(true, TReadSessionEvent::TDataReceivedEvent, DataReceivedHandler_);
+DEFINE_HANDLER(true, TReadSessionEvent::TCommitAcknowledgementEvent, CommitAcknowledgementHandler_);
+DEFINE_HANDLER(true, TReadSessionEvent::TCreatePartitionStreamEvent, CreatePartitionStreamHandler_);
+DEFINE_HANDLER(true, TReadSessionEvent::TDestroyPartitionStreamEvent, DestroyPartitionStreamHandler_);
+DEFINE_HANDLER(true, TReadSessionEvent::TPartitionStreamStatusEvent, PartitionStreamStatusHandler_);
+DEFINE_HANDLER(true, TReadSessionEvent::TPartitionStreamClosedEvent, PartitionStreamClosedHandler_);
+DEFINE_HANDLER(true, TSessionClosedEvent, SessionClosedHandler_);
+
+DEFINE_HANDLER(false, NTopic::TReadSessionEvent::TDataReceivedEvent, DataReceivedHandler_);
+DEFINE_HANDLER(false, NTopic::TReadSessionEvent::TCommitOffsetAcknowledgementEvent, CommitOffsetAcknowledgementHandler_);
+DEFINE_HANDLER(false, NTopic::TReadSessionEvent::TStartPartitionSessionEvent, StartPartitionSessionHandler_);
+DEFINE_HANDLER(false, NTopic::TReadSessionEvent::TStopPartitionSessionEvent, StopPartitionSessionHandler_);
+DEFINE_HANDLER(false, NTopic::TReadSessionEvent::TPartitionSessionStatusEvent, PartitionSessionStatusHandler_);
+DEFINE_HANDLER(false, NTopic::TReadSessionEvent::TPartitionSessionClosedEvent, PartitionSessionClosedHandler_);
+DEFINE_HANDLER(false, NTopic::TSessionClosedEvent, SessionClosedHandler_);
+
+#undef DEFINE_HANDLER
+
+
+template<bool UseMigrationProtocol>
+bool TReadSessionEventsQueue<UseMigrationProtocol>::HasCallbackForNextEventImpl() const {
+ if (!TParent::HasEventsImpl()) {
+ return false;
+ }
+ if (TParent::Settings.EventHandlers_.CommonHandler_) {
+ return true;
+ }
+
+ if (!TParent::Events.empty()) {
+ const TReadSessionEventInfo<UseMigrationProtocol>& topEvent = TParent::Events.front();
+ const typename TAReadSessionEvent<UseMigrationProtocol>::TEvent* event = nullptr;
+ if (topEvent.Event) {
+ event = &*topEvent.Event;
+ } else if (topEvent.PartitionStream && topEvent.PartitionStream->HasEvents()) {
+ const TRawPartitionStreamEvent<UseMigrationProtocol>& partitionStreamTopEvent = topEvent.PartitionStream->TopEvent();
+ if (partitionStreamTopEvent.IsDataEvent()) {
+ return bool(TParent::Settings.EventHandlers_.DataReceivedHandler_);
+ } else {
+ event = &partitionStreamTopEvent.GetEvent();
+ }
+ }
+
+ if (!event) {
+ return false;
+ }
+
+ THasCallbackForEventVisitor<UseMigrationProtocol> visitor(TParent::Settings);
+ return std::visit(visitor, *event);
+ } else if (TParent::CloseEvent) {
+ return bool(TParent::Settings.EventHandlers_.SessionClosedHandler_);
+ }
+ Y_ASSERT(false);
+ return false;
+}
+
+template<bool UseMigrationProtocol>
+void TReadSessionEventsQueue<UseMigrationProtocol>::ClearAllEvents() {
+ TDeferredActions<UseMigrationProtocol> deferred;
+ with_lock (TParent::Mutex) {
+ while (!TParent::Events.empty()) {
+ auto& event = TParent::Events.front();
+ if (event.PartitionStream && event.PartitionStream->HasEvents()) {
+ event.PartitionStream->PopEvent();
+ }
+ TParent::Events.pop();
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TDataDecompressionInfo
+
+template<bool UseMigrationProtocol>
+TDataDecompressionInfo<UseMigrationProtocol>::TDataDecompressionInfo(
+ TPartitionData<UseMigrationProtocol>&& msg,
+ std::weak_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session,
+ bool doDecompress,
+ i64 serverBytesSize
+)
+ : ServerMessage(std::move(msg))
+ , Session(std::move(session))
+ , DoDecompress(doDecompress)
+ , ServerBytesSize(serverBytesSize)
+{
+ for (const auto& batch : ServerMessage.batches()) {
+ for (const auto& messageData : batch.message_data()) {
+ CompressedDataSize += messageData.data().size();
+ }
+ }
+ SourceDataNotProcessed = CompressedDataSize;
+
+ BuildBatchesMeta();
+}
+
+template<bool UseMigrationProtocol>
+void TDataDecompressionInfo<UseMigrationProtocol>::BuildBatchesMeta() {
+ BatchesMeta.reserve(ServerMessage.batches_size());
+ for (const auto& batch : ServerMessage.batches()) {
+ // Extra fields.
+ typename TAWriteSessionMeta<UseMigrationProtocol>::TPtr meta = MakeIntrusive<TAWriteSessionMeta<UseMigrationProtocol>>();
+
+ if constexpr (UseMigrationProtocol) {
+ meta->Fields.reserve(batch.extra_fields_size());
+ for (const Ydb::PersQueue::V1::KeyValue& kv : batch.extra_fields()) {
+ meta->Fields.emplace(kv.key(), kv.value());
+ }
+ } else {
+ meta->Fields.reserve(batch.write_session_meta_size());
+ for (const auto& [key, value] : batch.write_session_meta()) {
+ meta->Fields.emplace(key, value);
+ }
+ }
+
+ BatchesMeta.emplace_back(std::move(meta));
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TDataDecompressionInfo<UseMigrationProtocol>::PutDecompressionError(std::exception_ptr error, size_t batch, size_t message) {
+ if (!DecompressionErrorsStructCreated) {
+ with_lock (DecompressionErrorsStructLock) {
+ DecompressionErrors.resize(ServerMessage.batches_size());
+ for (size_t batch = 0; batch < static_cast<size_t>(ServerMessage.batches_size()); ++batch) {
+ DecompressionErrors[batch].resize(static_cast<size_t>(ServerMessage.batches(batch).message_data_size()));
+ }
+
+ // Set barrier.
+ DecompressionErrorsStructCreated = true;
+ }
+ }
+ Y_ASSERT(batch < DecompressionErrors.size());
+ Y_ASSERT(message < DecompressionErrors[batch].size());
+ DecompressionErrors[batch][message] = std::move(error);
+}
+
+template<bool UseMigrationProtocol>
+std::exception_ptr TDataDecompressionInfo<UseMigrationProtocol>::GetDecompressionError(size_t batch, size_t message) {
+ if (!DecompressionErrorsStructCreated) {
+ return {};
+ }
+ Y_ASSERT(batch < DecompressionErrors.size());
+ Y_ASSERT(message < DecompressionErrors[batch].size());
+ return DecompressionErrors[batch][message];
+}
+
+template <bool UseMigrationProtocol>
+i64 TDataDecompressionInfo<UseMigrationProtocol>::StartDecompressionTasks(
+ const typename IAExecutor<UseMigrationProtocol>::TPtr& executor, i64 availableMemory,
+ double averageCompressionRatio, const TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>>& partitionStream,
+ TDeferredActions<UseMigrationProtocol>& deferred) {
+
+ constexpr size_t TASK_LIMIT = 512_KB;
+ std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session = Session.lock();
+ Y_ASSERT(session);
+ ReadyThresholds.emplace_back();
+ TDecompressionTask task(TDataDecompressionInfo::shared_from_this(), partitionStream, &ReadyThresholds.back());
+ i64 used = 0;
+ while (availableMemory > 0 && !AllDecompressionTasksStarted()) {
+ const auto& batch = ServerMessage.batches(CurrentDecompressingMessage.first);
+ if (CurrentDecompressingMessage.second < static_cast<size_t>(batch.message_data_size())) {
+ const auto& messageData = batch.message_data(CurrentDecompressingMessage.second);
+ const i64 size = static_cast<i64>(messageData.data().size());
+ const i64 estimatedDecompressedSize = messageData.uncompressed_size()
+ ? static_cast<i64>(messageData.uncompressed_size())
+ : static_cast<i64>(size * averageCompressionRatio);
+
+ Y_VERIFY(estimatedDecompressedSize >= 0);
+
+ task.Add(CurrentDecompressingMessage.first, CurrentDecompressingMessage.second, size, estimatedDecompressedSize);
+ session->GetEventsQueue()->PushDataEvent(partitionStream,
+ CurrentDecompressingMessage.first,
+ CurrentDecompressingMessage.second,
+ TDataDecompressionInfo::shared_from_this(),
+ ReadyThresholds.back().Ready);
+
+ used += estimatedDecompressedSize;
+ availableMemory -= estimatedDecompressedSize;
+ }
+ ++CurrentDecompressingMessage.second;
+ if (CurrentDecompressingMessage.second >= static_cast<size_t>(batch.message_data_size())) { // next batch
+ ++CurrentDecompressingMessage.first;
+ CurrentDecompressingMessage.second = 0;
+ }
+ if (task.AddedDataSize() >= TASK_LIMIT) {
+ session->OnCreateNewDecompressionTask();
+ deferred.DeferStartExecutorTask(executor, std::move(task));
+ ReadyThresholds.emplace_back();
+ task = TDecompressionTask(TDataDecompressionInfo::shared_from_this(), partitionStream, &ReadyThresholds.back());
+ }
+ }
+ if (task.AddedMessagesCount() > 0) {
+ session->OnCreateNewDecompressionTask();
+ deferred.DeferStartExecutorTask(executor, std::move(task));
+ } else {
+ ReadyThresholds.pop_back(); // Revert.
+ }
+ return used;
+}
+
+template<bool UseMigrationProtocol>
+bool TDataDecompressionInfo<UseMigrationProtocol>::TakeData(const TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>>& partitionStream,
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TMessage>* messages,
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TCompressedMessage>* compressedMessages,
+ size_t* maxByteSize)
+{
+ TMaybe<std::pair<size_t, size_t>> readyThreshold = GetReadyThreshold();
+ Y_ASSERT(readyThreshold);
+ auto& msg = GetServerMessage();
+ i64 minOffset = Max<i64>();
+ i64 maxOffset = 0;
+ const auto prevReadingMessage = CurrentReadingMessage;
+ while (HasMoreData() && *maxByteSize > 0 && CurrentReadingMessage <= *readyThreshold) {
+ auto& batch = *msg.mutable_batches(CurrentReadingMessage.first);
+ if (CurrentReadingMessage.second < static_cast<size_t>(batch.message_data_size())) {
+ const auto& meta = GetBatchMeta(CurrentReadingMessage.first);
+ const TInstant batchWriteTimestamp = [&batch](){
+ if constexpr (UseMigrationProtocol) {
+ return TInstant::MilliSeconds(batch.write_timestamp_ms());
+ } else {
+ return TInstant::MilliSeconds(
+ ::google::protobuf::util::TimeUtil::TimestampToMilliseconds(batch.written_at()));
+ }
+ }();
+ auto& messageData = *batch.mutable_message_data(CurrentReadingMessage.second);
+ minOffset = Min(minOffset, static_cast<i64>(messageData.offset()));
+ maxOffset = Max(maxOffset, static_cast<i64>(messageData.offset()));
+
+ if constexpr (UseMigrationProtocol) {
+ TReadSessionEvent::TDataReceivedEvent::TMessageInformation messageInfo(
+ messageData.offset(),
+ batch.source_id(),
+ messageData.seq_no(),
+ TInstant::MilliSeconds(messageData.create_timestamp_ms()),
+ batchWriteTimestamp,
+ batch.ip(),
+ meta,
+ messageData.uncompressed_size()
+ );
+ if (DoDecompress) {
+ messages->emplace_back(
+ messageData.data(),
+ GetDecompressionError(CurrentReadingMessage.first, CurrentReadingMessage.second),
+ messageInfo,
+ partitionStream,
+ messageData.partition_key(),
+ messageData.explicit_hash()
+ );
+ } else {
+ compressedMessages->emplace_back(
+ static_cast<ECodec>(messageData.codec()),
+ messageData.data(),
+ TVector<TReadSessionEvent::TDataReceivedEvent::TMessageInformation>{messageInfo},
+ partitionStream,
+ messageData.partition_key(),
+ messageData.explicit_hash()
+ );
+ }
+ } else {
+ NTopic::TReadSessionEvent::TDataReceivedEvent::TMessageInformation messageInfo(
+ messageData.offset(),
+ batch.producer_id(),
+ messageData.seq_no(),
+ TInstant::MilliSeconds(::google::protobuf::util::TimeUtil::TimestampToMilliseconds(messageData.created_at())),
+ batchWriteTimestamp,
+ meta,
+ messageData.uncompressed_size(),
+ messageData.message_group_id()
+ );
+ if (DoDecompress) {
+ messages->emplace_back(
+ messageData.data(),
+ GetDecompressionError(CurrentReadingMessage.first, CurrentReadingMessage.second),
+ messageInfo,
+ partitionStream
+ );
+ } else {
+ compressedMessages->emplace_back(
+ static_cast<NTopic::ECodec>(batch.codec()),
+ messageData.data(),
+ messageInfo,
+ partitionStream
+ );
+ }
+ }
+
+ *maxByteSize -= Min(*maxByteSize, messageData.data().size());
+
+ // Clear data to free internal session's memory.
+ messageData.clear_data();
+ }
+
+ ++CurrentReadingMessage.second;
+ if (CurrentReadingMessage.second >= static_cast<size_t>(batch.message_data_size())) {
+ CurrentReadingMessage.second = 0;
+ do {
+ ++CurrentReadingMessage.first;
+ } while (CurrentReadingMessage.first < static_cast<size_t>(msg.batches_size()) && msg.batches(CurrentReadingMessage.first).message_data_size() == 0);
+ }
+ }
+ partitionStream->GetLog().Write(TLOG_DEBUG, TStringBuilder() << "Take Data. Partition " << partitionStream->GetPartitionId()
+ << ". Read: {" << prevReadingMessage.first << ", " << prevReadingMessage.second << "} -> {"
+ << CurrentReadingMessage.first << ", " << CurrentReadingMessage.second << "} ("
+ << minOffset << "-" << maxOffset << ")");
+ return CurrentReadingMessage <= *readyThreshold;
+}
+
+template<bool UseMigrationProtocol>
+bool TDataDecompressionEvent<UseMigrationProtocol>::TakeData(TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TMessage>* messages,
+ TVector<typename TAReadSessionEvent<UseMigrationProtocol>::TDataReceivedEvent::TCompressedMessage>* compressedMessages,
+ size_t* maxByteSize) const
+{
+ auto& msg = Parent->GetServerMessage();
+ i64 minOffset = Max<i64>();
+ i64 maxOffset = 0;
+ auto& batch = *msg.mutable_batches(Batch);
+ const auto& meta = Parent->GetBatchMeta(Batch);
+
+ const TInstant batchWriteTimestamp = [&batch](){
+ if constexpr (UseMigrationProtocol) {
+ return TInstant::MilliSeconds(batch.write_timestamp_ms());
+ } else {
+ return TInstant::MilliSeconds(::google::protobuf::util::TimeUtil::TimestampToMilliseconds(batch.written_at()));
+ }
+ }();
+ auto& messageData = *batch.mutable_message_data(Message);
+
+ minOffset = Min(minOffset, static_cast<i64>(messageData.offset()));
+ maxOffset = Max(maxOffset, static_cast<i64>(messageData.offset()));
+
+ if constexpr (UseMigrationProtocol) {
+ TReadSessionEvent::TDataReceivedEvent::TMessageInformation messageInfo(messageData.offset(),
+ batch.source_id(),
+ messageData.seq_no(),
+ TInstant::MilliSeconds(messageData.create_timestamp_ms()),
+ batchWriteTimestamp,
+ batch.ip(),
+ meta,
+ messageData.uncompressed_size());
+
+ if (Parent->GetDoDecompress()) {
+ messages->emplace_back(messageData.data(),
+ Parent->GetDecompressionError(Batch, Message),
+ messageInfo,
+ partitionStream,
+ messageData.partition_key(),
+ messageData.explicit_hash());
+ } else {
+ compressedMessages->emplace_back(static_cast<ECodec>(messageData.codec()),
+ messageData.data(),
+ TVector<TReadSessionEvent::TDataReceivedEvent::TMessageInformation>{messageInfo},
+ partitionStream,
+ messageData.partition_key(),
+ messageData.explicit_hash());
+ }
+ } else {
+ NTopic::TReadSessionEvent::TDataReceivedEvent::TMessageInformation messageInfo(messageData.offset(),
+ batch.producer_id(),
+ messageData.seq_no(),
+ TInstant::MilliSeconds(::google::protobuf::util::TimeUtil::TimestampToMilliseconds(messageData.created_at())),
+ batchWriteTimestamp,
+ meta,
+ messageData.uncompressed_size(),
+ messageData.message_group_id());
+
+ if (Parent->GetDoDecompress()) {
+ messages->emplace_back(messageData.data(),
+ Parent->GetDecompressionError(Batch, Message),
+ messageInfo,
+ partitionStream);
+ } else {
+ compressedMessages->emplace_back(static_cast<NTopic::ECodec>(batch.codec()),
+ messageData.data(),
+ messageInfo,
+ partitionStream);
+ }
+ }
+
+ *maxByteSize -= Min(*maxByteSize, messageData.data().size());
+
+ // Clear data to free internal session's memory.
+ messageData.clear_data();
+
+ partitionStream->GetLog().Write(TLOG_DEBUG, TStringBuilder()
+ << "Take Data. Partition " << partitionStream->GetPartitionId()
+ << ". Read: {" << Batch << ", " << Message << "} ("
+ << minOffset << "-" << maxOffset << ")");
+
+ return false;
+}
+
+template<bool UseMigrationProtocol>
+bool TDataDecompressionInfo<UseMigrationProtocol>::HasReadyUnreadData() const {
+ TMaybe<std::pair<size_t, size_t>> threshold = GetReadyThreshold();
+ if (!threshold) {
+ return false;
+ }
+ return CurrentReadingMessage <= *threshold;
+}
+
+template <bool UseMigrationProtocol>
+void TDataDecompressionInfo<UseMigrationProtocol>::TDecompressionTask::Add(size_t batch, size_t message,
+ size_t sourceDataSize,
+ size_t estimatedDecompressedSize) {
+ if (Messages.empty() || Messages.back().Batch != batch) {
+ Messages.push_back({ batch, { message, message + 1 } });
+ }
+ Messages.back().MessageRange.second = message + 1;
+ SourceDataSize += sourceDataSize;
+ EstimatedDecompressedSize += estimatedDecompressedSize;
+ Ready->Batch = batch;
+ Ready->Message = message;
+}
+
+template <bool UseMigrationProtocol>
+TDataDecompressionInfo<UseMigrationProtocol>::TDecompressionTask::TDecompressionTask(
+ TDataDecompressionInfo::TPtr parent, TIntrusivePtr<TPartitionStreamImpl<UseMigrationProtocol>> partitionStream,
+ TReadyMessageThreshold* ready)
+ : Parent(std::move(parent))
+ , PartitionStream(std::move(partitionStream))
+ , Ready(ready) {
+}
+
+// Forward delcaration
+namespace NCompressionDetails {
+ extern TString Decompress(const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::MessageData& data);
+ extern TString Decompress(const Ydb::Topic::StreamReadMessage::ReadResponse::MessageData& data, Ydb::Topic::Codec codec);
+}
+
+template<bool UseMigrationProtocol>
+void TDataDecompressionInfo<UseMigrationProtocol>::TDecompressionTask::operator()() {
+ i64 minOffset = Max<i64>();
+ i64 maxOffset = 0;
+ const i64 partition_id = [this](){
+ if constexpr (UseMigrationProtocol) {
+ return Parent->ServerMessage.partition();
+ } else {
+ return Parent->ServerMessage.partition_session_id();
+ }
+ }();
+ i64 dataProcessed = 0;
+ size_t messagesProcessed = 0;
+ for (const TMessageRange& messages : Messages) {
+ auto& batch = *Parent->ServerMessage.mutable_batches(messages.Batch);
+ for (size_t i = messages.MessageRange.first; i < messages.MessageRange.second; ++i) {
+ auto& data = *batch.mutable_message_data(i);
+
+ ++messagesProcessed;
+ dataProcessed += static_cast<i64>(data.data().size());
+ minOffset = Min(minOffset, static_cast<i64>(data.offset()));
+ maxOffset = Max(maxOffset, static_cast<i64>(data.offset()));
+
+ try {
+
+ if constexpr (UseMigrationProtocol) {
+ if (Parent->DoDecompress
+ && data.codec() != Ydb::PersQueue::V1::CODEC_RAW
+ && data.codec() != Ydb::PersQueue::V1::CODEC_UNSPECIFIED
+ ) {
+ TString decompressed = NCompressionDetails::Decompress(data);
+ data.set_data(decompressed);
+ data.set_codec(Ydb::PersQueue::V1::CODEC_RAW);
+ }
+ } else {
+ if (Parent->DoDecompress
+ && static_cast<Ydb::Topic::Codec>(batch.codec()) != Ydb::Topic::CODEC_RAW
+ && static_cast<Ydb::Topic::Codec>(batch.codec()) != Ydb::Topic::CODEC_UNSPECIFIED
+ ) {
+ TString decompressed = NCompressionDetails::Decompress(data, static_cast<Ydb::Topic::Codec>(batch.codec()));
+ data.set_data(decompressed);
+ }
+ }
+
+ DecompressedSize += data.data().size();
+ } catch (...) {
+ Parent->PutDecompressionError(std::current_exception(), messages.Batch, i);
+ data.clear_data(); // Free memory, because we don't count it.
+
+ std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session = Parent->Session.lock();
+ if (session) {
+ session->GetLog() << TLOG_INFO << "Error decompressing data: " << CurrentExceptionMessage();
+ }
+ }
+ }
+ }
+ if (auto session = Parent->Session.lock()) {
+ session->GetLog().Write(TLOG_DEBUG, TStringBuilder() << "Decompression task done. Partition/PartitionSessionId: "
+ << partition_id << " (" << minOffset << "-"
+ << maxOffset << ")");
+ }
+ Y_ASSERT(dataProcessed == SourceDataSize);
+ std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session = Parent->Session.lock();
+
+ if (session) {
+ session->OnDataDecompressed(SourceDataSize, EstimatedDecompressedSize, DecompressedSize, messagesProcessed, Parent->ServerBytesSize);
+ }
+
+ Parent->SourceDataNotProcessed -= dataProcessed;
+ Ready->Ready = true;
+
+ if (session) {
+ session->GetEventsQueue()->SignalReadyEvents(PartitionStream.Get());
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// TDeferredActions
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferReadFromProcessor(const typename IProcessor<UseMigrationProtocol>::TPtr& processor,
+ TServerMessage<UseMigrationProtocol>* dst,
+ typename IProcessor<UseMigrationProtocol>::TReadCallback callback)
+{
+ Y_ASSERT(!Processor);
+ Y_ASSERT(!ReadDst);
+ Y_ASSERT(!ReadCallback);
+ Processor = processor;
+ ReadDst = dst;
+ ReadCallback = std::move(callback);
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferStartExecutorTask(const typename IAExecutor<UseMigrationProtocol>::TPtr& executor, typename IAExecutor<UseMigrationProtocol>::TFunction task) {
+ ExecutorsTasks.emplace_back(executor, std::move(task));
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferAbortSession(const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, TASessionClosedEvent<UseMigrationProtocol>&& closeEvent) {
+ ErrorHandler = errorHandler;
+ SessionClosedEvent.ConstructInPlace(std::move(closeEvent));
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferAbortSession(const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, EStatus statusCode, NYql::TIssues&& issues) {
+ DeferAbortSession(errorHandler, TASessionClosedEvent<UseMigrationProtocol>(statusCode, std::move(issues)));
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferAbortSession(const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, EStatus statusCode, const TString& message) {
+ NYql::TIssues issues;
+ issues.AddIssue(message);
+ DeferAbortSession(errorHandler, statusCode, std::move(issues));
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferAbortSession(const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, TPlainStatus&& status) {
+ DeferAbortSession(errorHandler, TASessionClosedEvent<UseMigrationProtocol>(std::move(status)));
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferReconnection(std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session, const typename IErrorHandler<UseMigrationProtocol>::TPtr& errorHandler, TPlainStatus&& status) {
+ Session = std::move(session);
+ ErrorHandler = errorHandler;
+ ReconnectionStatus = std::move(status);
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferStartSession(std::shared_ptr<TSingleClusterReadSessionImpl<UseMigrationProtocol>> session) {
+ Sessions.push_back(std::move(session));
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DeferSignalWaiter(TWaiter&& waiter) {
+ Waiters.emplace_back(std::move(waiter));
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::DoActions() {
+ Read();
+ StartExecutorTasks();
+ AbortSession();
+ Reconnect();
+ SignalWaiters();
+ StartSessions();
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::StartSessions() {
+ for (auto& session : Sessions) {
+ session->Start();
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::Read() {
+ if (ReadDst) {
+ Y_ASSERT(Processor);
+ Y_ASSERT(ReadCallback);
+ Processor->Read(ReadDst, std::move(ReadCallback));
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::StartExecutorTasks() {
+ for (auto&& [executor, task] : ExecutorsTasks) {
+ executor->Post(std::move(task));
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::AbortSession() {
+ if (SessionClosedEvent) {
+ Y_ASSERT(ErrorHandler);
+ ErrorHandler->AbortSession(std::move(*SessionClosedEvent));
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::Reconnect() {
+ if (Session) {
+ Y_ASSERT(ErrorHandler);
+ if (!Session->Reconnect(ReconnectionStatus)) {
+ ErrorHandler->AbortSession(std::move(ReconnectionStatus));
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TDeferredActions<UseMigrationProtocol>::SignalWaiters() {
+ for (auto& w : Waiters) {
+ w.Signal();
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TErrorHandler<UseMigrationProtocol>::AbortSession(TASessionClosedEvent<UseMigrationProtocol>&& closeEvent) {
+ if (auto session = Session.lock()) {
+ session->Abort(std::move(closeEvent));
+ }
+}
+
+#define HISTOGRAM_SETUP ::NMonitoring::ExplicitHistogram({0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100})
+
+template <typename TReaderCounters>
+void MakeCountersNotNull(TReaderCounters& counters) {
+ if (!counters.Errors) {
+ counters.Errors = MakeIntrusive<::NMonitoring::TCounterForPtr>(true);
+ }
+
+ if (!counters.CurrentSessionLifetimeMs) {
+ counters.CurrentSessionLifetimeMs = MakeIntrusive<::NMonitoring::TCounterForPtr>(false);
+ }
+
+ if (!counters.BytesRead) {
+ counters.BytesRead = MakeIntrusive<::NMonitoring::TCounterForPtr>(true);
+ }
+
+ if (!counters.MessagesRead) {
+ counters.MessagesRead = MakeIntrusive<::NMonitoring::TCounterForPtr>(true);
+ }
+
+ if (!counters.BytesReadCompressed) {
+ counters.BytesReadCompressed = MakeIntrusive<::NMonitoring::TCounterForPtr>(true);
+ }
+
+ if (!counters.BytesInflightUncompressed) {
+ counters.BytesInflightUncompressed = MakeIntrusive<::NMonitoring::TCounterForPtr>(false);
+ }
+
+ if (!counters.BytesInflightCompressed) {
+ counters.BytesInflightCompressed = MakeIntrusive<::NMonitoring::TCounterForPtr>(false);
+ }
+
+ if (!counters.BytesInflightTotal) {
+ counters.BytesInflightTotal = MakeIntrusive<::NMonitoring::TCounterForPtr>(false);
+ }
+
+ if (!counters.MessagesInflight) {
+ counters.MessagesInflight = MakeIntrusive<::NMonitoring::TCounterForPtr>(false);
+ }
+
+
+ if (!counters.TotalBytesInflightUsageByTime) {
+ counters.TotalBytesInflightUsageByTime = MakeIntrusive<::NMonitoring::THistogramCounter>(HISTOGRAM_SETUP);
+ }
+
+ if (!counters.UncompressedBytesInflightUsageByTime) {
+ counters.UncompressedBytesInflightUsageByTime = MakeIntrusive<::NMonitoring::THistogramCounter>(HISTOGRAM_SETUP);
+ }
+
+ if (!counters.CompressedBytesInflightUsageByTime) {
+ counters.CompressedBytesInflightUsageByTime = MakeIntrusive<::NMonitoring::THistogramCounter>(HISTOGRAM_SETUP);
+ }
+}
+
+#undef HISTOGRAM_SETUP
+
+template <typename TReaderCounters>
+bool HasNullCounters(TReaderCounters& counters) {
+ return !counters.Errors
+ || !counters.CurrentSessionLifetimeMs
+ || !counters.BytesRead
+ || !counters.MessagesRead
+ || !counters.BytesReadCompressed
+ || !counters.BytesInflightUncompressed
+ || !counters.BytesInflightCompressed
+ || !counters.BytesInflightTotal
+ || !counters.MessagesInflight
+ || !counters.TotalBytesInflightUsageByTime
+ || !counters.UncompressedBytesInflightUsageByTime
+ || !counters.CompressedBytesInflightUsageByTime;
+}
+
+} // namespace NYdb::NPersQueue
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session_messages.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session_messages.cpp
index 2f0fd93a8f..5e216cccc6 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session_messages.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session_messages.cpp
@@ -163,7 +163,7 @@ TReadSessionEvent::TDataReceivedEvent::TMessage::TMessage(const TString& data,
}
void TReadSessionEvent::TDataReceivedEvent::TMessage::Commit() {
- static_cast<TPartitionStreamImpl*>(PartitionStream.Get())->Commit(Information.Offset, Information.Offset + 1);
+ static_cast<TPartitionStreamImpl<true>*>(PartitionStream.Get())->Commit(Information.Offset, Information.Offset + 1);
}
ui64 TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetBlocksCount() const {
@@ -233,7 +233,7 @@ TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::TCompressedMessage(EC
{}
void TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::Commit() {
- static_cast<TPartitionStreamImpl*>(PartitionStream.Get())->Commit(
+ static_cast<TPartitionStreamImpl<true>*>(PartitionStream.Get())->Commit(
Information.front().Offset,
Information.back().Offset + 1
);
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.cpp
index ea771e701c..f069852bf8 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.cpp
@@ -8,8 +8,8 @@
namespace NYdb::NPersQueue {
-using NMonitoring::TDynamicCounterPtr;
-using TCounterPtr = NMonitoring::TDynamicCounters::TCounterPtr;
+using ::NMonitoring::TDynamicCounterPtr;
+using TCounterPtr = ::NMonitoring::TDynamicCounters::TCounterPtr;
const TDuration UPDATE_TOKEN_PERIOD = TDuration::Hours(1);
@@ -19,7 +19,7 @@ namespace NCompressionDetails {
}
#define HISTOGRAM_SETUP NMonitoring::ExplicitHistogram({0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100})
-TWriterCounters::TWriterCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters) {
+TWriterCounters::TWriterCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters) {
Errors = counters->GetCounter("errors", true);
CurrentSessionLifetimeMs = counters->GetCounter("currentSessionLifetimeMs", false);
BytesWritten = counters->GetCounter("bytesWritten", true);
@@ -65,7 +65,7 @@ TWriteSession::TWriteSession(
if (Settings.Counters_.Defined()) {
Counters = *Settings.Counters_;
} else {
- Counters = MakeIntrusive<TWriterCounters>(new NMonitoring::TDynamicCounters());
+ Counters = MakeIntrusive<TWriterCounters>(new ::NMonitoring::TDynamicCounters());
}
}
@@ -261,7 +261,7 @@ void TWriteSession::OnCdsResponse(
void TWriteSession::InitWriter() { // No Lock, very initial start - no race yet as well.
CompressionExecutor = Settings.CompressionExecutor_;
IExecutor::TPtr executor;
- executor = new TSyncExecutor();
+ executor = CreateSyncExecutor();
executor->Start();
Executor = std::move(executor);
@@ -1214,9 +1214,11 @@ void TWriteSession::AbortImpl() {
Cancel(ConnectContext);
Cancel(ConnectTimeoutContext);
Cancel(ConnectDelayContext);
- ///Cancel(ClientContext);
if (Processor)
Processor->Cancel();
+
+ Cancel(ClientContext);
+ ClientContext.reset(); // removes context from contexts set from underlying gRPC-client.
}
}
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.h b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.h
index 05824e111c..89616f2a2e 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.h
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.h
@@ -21,8 +21,9 @@ inline const TString& GetCodecId(const ECodec codec) {
return idByCodec[codec];
}
-class TWriteSessionEventsQueue : public TBaseSessionEventsQueue<TWriteSessionSettings, TWriteSessionEvent::TEvent> {
- using TParent = TBaseSessionEventsQueue<TWriteSessionSettings, TWriteSessionEvent::TEvent>;
+class TWriteSessionEventsQueue: public TBaseSessionEventsQueue<TWriteSessionSettings, TWriteSessionEvent::TEvent, TSessionClosedEvent, IExecutor> {
+ using TParent = TBaseSessionEventsQueue<TWriteSessionSettings, TWriteSessionEvent::TEvent, TSessionClosedEvent, IExecutor>;
+
public:
TWriteSessionEventsQueue(const TWriteSessionSettings& settings)
: TParent(settings)
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/persqueue.h b/ydb/public/sdk/cpp/client/ydb_persqueue_core/persqueue.h
index b1bb8ce38c..5aa2e95386 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/persqueue.h
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/persqueue.h
@@ -357,19 +357,19 @@ struct TWriterCounters : public TThrRefBase {
using TSelf = TWriterCounters;
using TPtr = TIntrusivePtr<TSelf>;
- explicit TWriterCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters);
+ explicit TWriterCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters);
- NMonitoring::TDynamicCounters::TCounterPtr Errors;
- NMonitoring::TDynamicCounters::TCounterPtr CurrentSessionLifetimeMs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Errors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CurrentSessionLifetimeMs;
- NMonitoring::TDynamicCounters::TCounterPtr BytesWritten;
- NMonitoring::TDynamicCounters::TCounterPtr MessagesWritten;
- NMonitoring::TDynamicCounters::TCounterPtr BytesWrittenCompressed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesWritten;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MessagesWritten;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesWrittenCompressed;
- NMonitoring::TDynamicCounters::TCounterPtr BytesInflightUncompressed;
- NMonitoring::TDynamicCounters::TCounterPtr BytesInflightCompressed;
- NMonitoring::TDynamicCounters::TCounterPtr BytesInflightTotal;
- NMonitoring::TDynamicCounters::TCounterPtr MessagesInflight;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightUncompressed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightCompressed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightTotal;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MessagesInflight;
//! Histograms reporting % usage of memory limit in time.
//! Provides a histogram looking like: 10% : 100ms, 20%: 300ms, ... 50%: 200ms, ... 100%: 50ms
@@ -378,11 +378,11 @@ struct TWriterCounters : public TThrRefBase {
//! mean that writer is close to overflow (or being overflown) for major periods of time
//! 3 histograms stand for:
//! Total memory usage:
- NMonitoring::THistogramPtr TotalBytesInflightUsageByTime;
+ ::NMonitoring::THistogramPtr TotalBytesInflightUsageByTime;
//! Memory usage by messages waiting for comression:
- NMonitoring::THistogramPtr UncompressedBytesInflightUsageByTime;
+ ::NMonitoring::THistogramPtr UncompressedBytesInflightUsageByTime;
//! Memory usage by compressed messages pending for write:
- NMonitoring::THistogramPtr CompressedBytesInflightUsageByTime;
+ ::NMonitoring::THistogramPtr CompressedBytesInflightUsageByTime;
};
struct TReaderCounters : public TThrRefBase {
@@ -390,19 +390,19 @@ struct TReaderCounters : public TThrRefBase {
using TPtr = TIntrusivePtr<TSelf>;
TReaderCounters() = default;
- explicit TReaderCounters(const TIntrusivePtr<NMonitoring::TDynamicCounters>& counters);
+ explicit TReaderCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters);
- NMonitoring::TDynamicCounters::TCounterPtr Errors;
- NMonitoring::TDynamicCounters::TCounterPtr CurrentSessionLifetimeMs;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Errors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CurrentSessionLifetimeMs;
- NMonitoring::TDynamicCounters::TCounterPtr BytesRead;
- NMonitoring::TDynamicCounters::TCounterPtr MessagesRead;
- NMonitoring::TDynamicCounters::TCounterPtr BytesReadCompressed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MessagesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesReadCompressed;
- NMonitoring::TDynamicCounters::TCounterPtr BytesInflightUncompressed;
- NMonitoring::TDynamicCounters::TCounterPtr BytesInflightCompressed;
- NMonitoring::TDynamicCounters::TCounterPtr BytesInflightTotal;
- NMonitoring::TDynamicCounters::TCounterPtr MessagesInflight;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightUncompressed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightCompressed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightTotal;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MessagesInflight;
//! Histograms reporting % usage of memory limit in time.
//! Provides a histogram looking like: 10% : 100ms, 20%: 300ms, ... 50%: 200ms, ... 100%: 50ms
@@ -411,11 +411,11 @@ struct TReaderCounters : public TThrRefBase {
//! mean that read session is close to overflow (or being overflown) for major periods of time.
//!
//! Total memory usage.
- NMonitoring::THistogramPtr TotalBytesInflightUsageByTime;
+ ::NMonitoring::THistogramPtr TotalBytesInflightUsageByTime;
//! Memory usage by messages waiting that are ready to be received by user.
- NMonitoring::THistogramPtr UncompressedBytesInflightUsageByTime;
+ ::NMonitoring::THistogramPtr UncompressedBytesInflightUsageByTime;
//! Memory usage by compressed messages pending for decompression.
- NMonitoring::THistogramPtr CompressedBytesInflightUsageByTime;
+ ::NMonitoring::THistogramPtr CompressedBytesInflightUsageByTime;
};
//! Partition stream.
@@ -948,9 +948,12 @@ private:
bool Started = false;
TAdaptiveLock StartLock;
};
+
IExecutor::TPtr CreateThreadPoolExecutorAdapter(std::shared_ptr<IThreadPool> threadPool); // Thread pool is expected to have been started.
IExecutor::TPtr CreateThreadPoolExecutor(size_t threads);
+IExecutor::TPtr CreateSyncExecutor();
+
//! Events for write session.
struct TWriteSessionEvent {
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt
index 3c4c7b5d3a..3b0fb0fa70 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.darwin.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut_utils)
+add_subdirectory(with_offset_ranges_mode_ut)
add_executable(ydb-public-sdk-cpp-client-ydb_persqueue_core-ut)
target_compile_options(ydb-public-sdk-cpp-client-ydb_persqueue_core-ut PRIVATE
@@ -44,7 +46,6 @@ target_sources(ydb-public-sdk-cpp-client-ydb_persqueue_core-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compression_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp
- ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.cpp
)
add_test(
NAME
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt
index 83e39b61d9..3921d064eb 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.linux.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut_utils)
+add_subdirectory(with_offset_ranges_mode_ut)
add_executable(ydb-public-sdk-cpp-client-ydb_persqueue_core-ut)
target_compile_options(ydb-public-sdk-cpp-client-ydb_persqueue_core-ut PRIVATE
@@ -48,7 +50,6 @@ target_sources(ydb-public-sdk-cpp-client-ydb_persqueue_core-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compression_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp
- ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.cpp
)
add_test(
NAME
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/basic_usage_ut.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/basic_usage_ut.cpp
index 2260d1acb7..a5cfc8f32f 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/basic_usage_ut.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/basic_usage_ut.cpp
@@ -1,4 +1,4 @@
-#include "ut_utils.h"
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h>
#include <library/cpp/testing/unittest/registar.h>
#include <library/cpp/threading/future/future.h>
@@ -133,6 +133,8 @@ Y_UNIT_TEST_SUITE(BasicUsage) {
TPersQueueYdbSdkTestSetup* setup, TWriteSessionSettings& writeSettings, ui64 count,
TMaybe<bool> shouldCaptureData = Nothing()
) {
+ std::shared_ptr<NYdb::NPersQueue::IReadSession> readSession;
+
auto& client = setup->GetPersQueueClient();
auto session = client.CreateSimpleBlockingWriteSession(writeSettings);
TString messageBase = "message-";
@@ -168,9 +170,9 @@ Y_UNIT_TEST_SUITE(BasicUsage) {
if (totalReceived == sentMessages.size())
checkedPromise.SetValue();
});
- auto readSession = client.CreateReadSession(readSettings);
+ readSession = client.CreateReadSession(readSettings);
checkedPromise.GetFuture().GetValueSync();
- readSession->Close(TDuration::Zero());
+ readSession->Close(TDuration::MilliSeconds(10));
}
Y_UNIT_TEST(WriteAndReadSomeMessagesWithAsyncCompression) {
@@ -184,7 +186,7 @@ Y_UNIT_TEST_SUITE(BasicUsage) {
auto setup = std::make_shared<TPersQueueYdbSdkTestSetup>(TEST_CASE_NAME);
TWriteSessionSettings writeSettings;
writeSettings.Path(setup->GetTestTopic()).MessageGroupId("src_id");
- IExecutor::TPtr executor = new TSyncExecutor();
+ IExecutor::TPtr executor = CreateSyncExecutor();
writeSettings.CompressionExecutor(executor);
// LOGBROKER-7189
//SimpleWriteAndValidateData(setup.get(), writeSettings, 100u, false);
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp
index 8a85c85eda..9fc0106996 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp
@@ -1,4 +1,4 @@
-#include "ut_utils.h"
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h>
namespace NYdb::NPersQueue::NTests {
@@ -102,4 +102,3 @@ Y_UNIT_TEST_SUITE(CompressExecutor) {
}
}
};
-
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compression_ut.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compression_ut.cpp
index 0603c709f6..5ebadf19ba 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compression_ut.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compression_ut.cpp
@@ -1,4 +1,4 @@
-#include "ut_utils.h"
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h>
namespace NYdb::NPersQueue::NTests {
@@ -48,7 +48,7 @@ Y_UNIT_TEST_SUITE(Compression) {
rr->add_supported_codecs(Ydb::PersQueue::V1::CODEC_GZIP);
rr->add_supported_codecs(Ydb::PersQueue::V1::CODEC_ZSTD);
rr->set_version(1);
-
+
Ydb::PersQueue::V1::AlterTopicResponse response;
grpc::ClientContext rcontext;
auto status = stub->AlterTopic(&rcontext, request, &response);
@@ -102,7 +102,7 @@ Y_UNIT_TEST_SUITE(Compression) {
++totalReceived;
}
}
- Cerr << Endl << "totalReceived: " << totalReceived << " wait: " << messages.size() << Endl << Endl;
+ Cerr << Endl << "totalReceived: " << totalReceived << " wait: " << messages.size() << Endl << Endl;
if (totalReceived == messages.size())
checkedPromise.SetValue();
}
@@ -112,7 +112,7 @@ Y_UNIT_TEST_SUITE(Compression) {
checkedPromise.GetFuture().GetValueSync();
}
- void WriteWithOneCodec(TPersQueueYdbSdkTestSetup& setup, ECodec codec) {
+ void WriteWithOneCodec(TPersQueueYdbSdkTestSetup& setup, ECodec codec) {
AlterTopic(setup); // add zstd support
auto messages = GetTestMessages();
@@ -123,17 +123,17 @@ Y_UNIT_TEST_SUITE(Compression) {
Y_UNIT_TEST(WriteRAW) {
TPersQueueYdbSdkTestSetup setup(TEST_CASE_NAME);
- WriteWithOneCodec(setup, ECodec::RAW);
+ WriteWithOneCodec(setup, ECodec::RAW);
}
Y_UNIT_TEST(WriteGZIP) {
TPersQueueYdbSdkTestSetup setup(TEST_CASE_NAME);
- WriteWithOneCodec(setup, ECodec::GZIP);
+ WriteWithOneCodec(setup, ECodec::GZIP);
}
Y_UNIT_TEST(WriteZSTD) {
TPersQueueYdbSdkTestSetup setup(TEST_CASE_NAME);
- WriteWithOneCodec(setup, ECodec::ZSTD);
+ WriteWithOneCodec(setup, ECodec::ZSTD);
}
Y_UNIT_TEST(WriteWithMixedCodecs) {
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/read_session_ut.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/read_session_ut.cpp
index 3ebfd50a65..0437f64720 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/read_session_ut.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/read_session_ut.cpp
@@ -1,4 +1,4 @@
-#include "ut_utils.h"
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h>
#define INCLUDE_YDB_INTERNAL_H
#include <ydb/public/sdk/cpp/client/impl/ydb_internal/logger/log.h>
@@ -450,7 +450,7 @@ public:
using IReadSessionConnectionProcessorFactory = ISessionConnectionProcessorFactory<Ydb::PersQueue::V1::MigrationStreamingReadClientMessage, Ydb::PersQueue::V1::MigrationStreamingReadServerMessage>;
using TMockProcessorFactory = ::TMockProcessorFactory<Ydb::PersQueue::V1::MigrationStreamingReadClientMessage, Ydb::PersQueue::V1::MigrationStreamingReadServerMessage>;
- struct TMockErrorHandler : public IErrorHandler {
+ struct TMockErrorHandler : public IErrorHandler<true> {
MOCK_METHOD(void, AbortSession, (TSessionClosedEvent&& closeEvent), (override));
};
@@ -482,9 +482,9 @@ public:
TReadSessionImplTestSetup();
~TReadSessionImplTestSetup() noexcept(false); // Performs extra validation and UNIT_ASSERTs
- TSingleClusterReadSessionImpl* GetSession();
+ TSingleClusterReadSessionImpl<true>* GetSession();
- std::shared_ptr<TReadSessionEventsQueue> GetEventsQueue();
+ std::shared_ptr<TReadSessionEventsQueue<true>> GetEventsQueue();
::IExecutor::TPtr GetDefaultExecutor();
void SuccessfulInit(bool flag = true);
@@ -498,14 +498,14 @@ public:
TReadSessionSettings Settings;
TString ClusterName = "cluster";
TLog Log = CreateLogBackend("cerr");
- std::shared_ptr<TReadSessionEventsQueue> EventsQueue;
+ std::shared_ptr<TReadSessionEventsQueue<true>> EventsQueue;
TIntrusivePtr<testing::StrictMock<TMockErrorHandler>> MockErrorHandler = MakeIntrusive<testing::StrictMock<TMockErrorHandler>>();
std::shared_ptr<TFakeContext> FakeContext = std::make_shared<TFakeContext>();
std::shared_ptr<TMockProcessorFactory> MockProcessorFactory = std::make_shared<TMockProcessorFactory>();
TIntrusivePtr<TMockReadSessionProcessor> MockProcessor = MakeIntrusive<TMockReadSessionProcessor>();
ui64 PartitionIdStart = 1;
ui64 PartitionIdStep = 1;
- TSingleClusterReadSessionImpl::TPtr Session;
+ typename TSingleClusterReadSessionImpl<true>::TPtr Session;
std::shared_ptr<TThreadPool> ThreadPool;
::IExecutor::TPtr DefaultExecutor;
};
@@ -579,7 +579,7 @@ TReadSessionImplTestSetup::TReadSessionImplTestSetup() {
.AppendTopics({"TestTopic"})
.ConsumerName("TestConsumer")
.RetryPolicy(NYdb::NPersQueue::IRetryPolicy::GetFixedIntervalPolicy(TDuration::MilliSeconds(10)))
- .Counters(MakeIntrusive<NYdb::NPersQueue::TReaderCounters>(MakeIntrusive<NMonitoring::TDynamicCounters>()));
+ .Counters(MakeIntrusive<NYdb::NPersQueue::TReaderCounters>(MakeIntrusive<::NMonitoring::TDynamicCounters>()));
Log.SetFormatter(GetPrefixLogFormatter(""));
@@ -609,7 +609,7 @@ TReadSessionImplTestSetup::~TReadSessionImplTestSetup() noexcept(false) {
return DefaultExecutor;
}
-TSingleClusterReadSessionImpl* TReadSessionImplTestSetup::GetSession() {
+TSingleClusterReadSessionImpl<true>* TReadSessionImplTestSetup::GetSession() {
if (!Session) {
if (!Settings.DecompressionExecutor_) {
Settings.DecompressionExecutor(GetDefaultExecutor());
@@ -617,7 +617,7 @@ TSingleClusterReadSessionImpl* TReadSessionImplTestSetup::GetSession() {
if (!Settings.EventHandlers_.HandlersExecutor_) {
Settings.EventHandlers_.HandlersExecutor(GetDefaultExecutor());
}
- Session = std::make_shared<TSingleClusterReadSessionImpl>(
+ Session = std::make_shared<TSingleClusterReadSessionImpl<true>>(
Settings,
"db",
"sessionid",
@@ -632,9 +632,9 @@ TSingleClusterReadSessionImpl* TReadSessionImplTestSetup::GetSession() {
return Session.get();
}
-std::shared_ptr<TReadSessionEventsQueue> TReadSessionImplTestSetup::GetEventsQueue() {
+std::shared_ptr<TReadSessionEventsQueue<true>> TReadSessionImplTestSetup::GetEventsQueue() {
if (!EventsQueue) {
- EventsQueue = std::make_shared<TReadSessionEventsQueue>(Settings, std::weak_ptr<IUserRetrievedEventCallback>());
+ EventsQueue = std::make_shared<TReadSessionEventsQueue<true>>(Settings, std::weak_ptr<IUserRetrievedEventCallback<true>>());
}
return EventsQueue;
}
@@ -1180,13 +1180,14 @@ Y_UNIT_TEST_SUITE(ReadSessionImplTest) {
.CompressMessage(i, TStringBuilder() << "message" << i)); // Callback will be called.
}
- for (ui64 i = 1; i <= 2; ++i) {
+ for (ui64 i = 1; i <= 2; ) {
TMaybe<TReadSessionEvent::TEvent> event = setup.EventsQueue->GetEvent(true);
UNIT_ASSERT(event);
UNIT_ASSERT_EVENT_TYPE(*event, TReadSessionEvent::TDataReceivedEvent);
auto& dataEvent = std::get<TReadSessionEvent::TDataReceivedEvent>(*event);
- UNIT_ASSERT_VALUES_EQUAL(dataEvent.GetMessages().size(), 1);
- UNIT_ASSERT_VALUES_EQUAL(dataEvent.GetMessages()[0].GetData(), TStringBuilder() << "message" << i);
+ for (ui32 j = 0; j < dataEvent.GetMessages().size(); ++j, ++i) {
+ UNIT_ASSERT_VALUES_EQUAL(dataEvent.GetMessages()[j].GetData(), TStringBuilder() << "message" << i);
+ }
}
setup.AssertNoEvents();
@@ -1588,13 +1589,15 @@ Y_UNIT_TEST_SUITE(ReadSessionImplTest) {
}
}));
- for (int i = 0; i < 2; ++i) {
+ for (int i = 0; i < 2; ) {
TMaybe<TReadSessionEvent::TEvent> event = setup.EventsQueue->GetEvent(true);
UNIT_ASSERT(event);
UNIT_ASSERT_EVENT_TYPE(*event, TReadSessionEvent::TDataReceivedEvent);
TReadSessionEvent::TDataReceivedEvent& dataEvent = std::get<TReadSessionEvent::TDataReceivedEvent>(*event);
Cerr << "got data event: " << dataEvent.DebugString() << "\n";
dataEvent.Commit();
+
+ i += dataEvent.GetMessagesCount();
}
UNIT_ASSERT(has1);
@@ -1661,11 +1664,13 @@ Y_UNIT_TEST_SUITE(ReadSessionImplTest) {
auto calledPromise = NThreading::NewPromise<void>();
int time = 0;
setup.Settings.EventHandlers_.DataReceivedHandler([&](TReadSessionEvent::TDataReceivedEvent& event) {
- ++time;
- UNIT_ASSERT_VALUES_EQUAL(event.GetMessages().size(), 1);
- UNIT_ASSERT_VALUES_EQUAL(event.GetMessages()[0].GetData(), TStringBuilder() << "message" << time);
- if (time == 2) {
- calledPromise.SetValue();
+ for (ui32 i = 0; i < event.GetMessages().size(); ++i) {
+ ++time;
+ UNIT_ASSERT_VALUES_EQUAL(event.GetMessages()[i].GetData(), TStringBuilder() << "message" << time);
+
+ if (time == 2) {
+ calledPromise.SetValue();
+ }
}
});
setup.SuccessfulInit();
@@ -1678,6 +1683,13 @@ Y_UNIT_TEST_SUITE(ReadSessionImplTest) {
.PartitionData(2)
.Batch("src_id")
.CompressMessage(2, "message2"));
+
+ //
+ // when the PartitionStreamClosed arrives the raw messages are deleted
+ // we give time to process the messages
+ //
+ Sleep(TDuration::Seconds(2));
+
setup.MockProcessor->AddServerResponse(TMockReadSessionProcessor::TServerReadInfo()
.ForcefulReleasePartitionStream());
TMaybe<TReadSessionEvent::TEvent> event = setup.EventsQueue->GetEvent(true);
@@ -1844,4 +1856,83 @@ Y_UNIT_TEST_SUITE(ReadSessionImplTest) {
Y_UNIT_TEST(SimpleDataHandlersWithGracefulReleaseWithCommit) {
SimpleDataHandlersImpl(true, true);
}
+
+ Y_UNIT_TEST(LOGBROKER_7702) {
+ using namespace NYdb::NPersQueue;
+
+ using TServiceEvent =
+ typename TAReadSessionEvent<true>::TPartitionStreamStatusEvent;
+
+#define UNIT_ASSERT_CONTROL_EVENT() \
+ { \
+ using TExpectedEvent = typename TAReadSessionEvent<true>::TPartitionStreamStatusEvent; \
+\
+ size_t maxByteSize = std::numeric_limits<size_t>::max();\
+ auto event = sessionQueue.GetEventImpl(&maxByteSize);\
+\
+ UNIT_ASSERT(std::holds_alternative<TExpectedEvent>(event.GetEvent()));\
+ }
+
+#define UNIT_ASSERT_DATA_EVENT(count) \
+ { \
+ using TExpectedEvent = typename TAReadSessionEvent<true>::TDataReceivedEvent; \
+\
+ size_t maxByteSize = std::numeric_limits<size_t>::max(); \
+ auto event = sessionQueue.GetEventImpl(&maxByteSize); \
+\
+ UNIT_ASSERT(std::holds_alternative<TExpectedEvent>(event.GetEvent())); \
+ UNIT_ASSERT_VALUES_EQUAL(std::get<TExpectedEvent>(event.GetEvent()).GetMessagesCount(), count); \
+ }
+
+ TAReadSessionSettings<true> settings;
+ std::shared_ptr<TSingleClusterReadSessionImpl<true>> session;
+ TReadSessionEventsQueue<true> sessionQueue{settings, session};
+
+ auto stream = MakeIntrusive<TPartitionStreamImpl<true>>(1ull,
+ "",
+ "",
+ 1ull,
+ 1ull,
+ 1ull,
+ 0ull,
+ session,
+ nullptr);
+
+ TPartitionData<true> message;
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage_DataBatch_Batch* batch =
+ message.mutable_batches()->Add();
+ Ydb::PersQueue::V1::MigrationStreamingReadServerMessage_DataBatch_MessageData* messageData =
+ batch->mutable_message_data()->Add();
+ *messageData->mutable_data() = "*";
+
+ auto data = std::make_shared<TDataDecompressionInfo<true>>(std::move(message),
+ session,
+ false,
+ 0);
+
+ std::atomic<bool> ready = true;
+
+ stream->InsertDataEvent(0, 0, data, ready);
+ stream->InsertEvent(TServiceEvent{stream, 0, 0, 0, {}});
+ stream->InsertDataEvent(0, 0, data, ready);
+ stream->InsertDataEvent(0, 0, data, ready);
+ stream->InsertEvent(TServiceEvent{stream, 0, 0, 0, {}});
+ stream->InsertEvent(TServiceEvent{stream, 0, 0, 0, {}});
+ stream->InsertDataEvent(0, 0, data, ready);
+
+ TDeferredActions<true> actions;
+
+ stream->SignalReadyEvents(&sessionQueue,
+ actions);
+
+ UNIT_ASSERT_DATA_EVENT(1);
+ UNIT_ASSERT_CONTROL_EVENT();
+ UNIT_ASSERT_DATA_EVENT(2);
+ UNIT_ASSERT_CONTROL_EVENT();
+ UNIT_ASSERT_CONTROL_EVENT();
+ UNIT_ASSERT_DATA_EVENT(1);
+
+#undef UNIT_ASSERT_CONTROL_EVENT
+#undef UNIT_ASSERT_DATA_EVENT
+ }
}
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp
index 50d050e973..2e98ba792c 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp
@@ -1,4 +1,4 @@
-#include "ut_utils.h"
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h>
#include <library/cpp/threading/future/future.h>
#include <library/cpp/testing/unittest/registar.h>
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt
index 9d80c1d532..95b05a2af5 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/CMakeLists.txt
@@ -27,4 +27,5 @@ target_link_libraries(ydb_persqueue_core-ut-ut_utils PUBLIC
target_sources(ydb_persqueue_core-ut-ut_utils PRIVATE
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/data_plane_helpers.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/test_server.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.cpp
)
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/test_server.h b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/test_server.h
index 40559602f6..e8f9910670 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/test_server.h
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/test_server.h
@@ -93,6 +93,10 @@ public:
AnnoyingClient->UpdateDC(name, local, enabled);
}
+ const NYdb::TDriver& GetDriver() const {
+ return CleverServer->GetDriver();
+ }
+
public:
TSimpleSharedPtr<TPortManager> PortManager;
ui16 Port;
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.cpp
index 6a853b6fc5..6a853b6fc5 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.cpp
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.h b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h
index 69d62dfa48..69d62dfa48 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.h
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.darwin.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.darwin.txt
index 133670b9ec..099d7fe3b3 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.darwin.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.darwin.txt
@@ -36,7 +36,6 @@ target_sources(with_offset_ranges_mode_ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/basic_usage_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp
- ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.cpp
)
add_test(
NAME
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.linux.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.linux.txt
index b1134e6c96..f46e606864 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.linux.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.linux.txt
@@ -40,7 +40,6 @@ target_sources(with_offset_ranges_mode_ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/basic_usage_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/compress_executor_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/retry_policy_ut.cpp
- ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils.cpp
)
add_test(
NAME
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/with_offset_ranges_mode_ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_public/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_public/CMakeLists.txt
index 69b83d531f..b05f102af3 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_public/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_public/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(codecs)
add_library(cpp-client-ydb_persqueue_public INTERFACE)
target_link_libraries(cpp-client-ydb_persqueue_public INTERFACE
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/CMakeLists.txt
index 00830fd9a3..ace9fc7214 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/CMakeLists.txt
@@ -14,6 +14,7 @@ target_link_libraries(client-ydb_persqueue_public-codecs PUBLIC
cpp-streams-zstd
public-issue-protos
api-grpc-draft
+ api-grpc
api-protos
)
target_sources(client-ydb_persqueue_public-codecs PRIVATE
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.cpp b/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.cpp
index 9c3bcbd25c..51c16f84f7 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.cpp
@@ -25,6 +25,21 @@ IInputStream* CreateDecompressorStream(TInputStreamVariant& inputStreamStorage,
}
}
+IInputStream* CreateDecompressorStream(TInputStreamVariant& inputStreamStorage, Ydb::Topic::Codec codec, IInputStream* origin) {
+ switch (codec) {
+ case Ydb::Topic::CODEC_GZIP:
+ return &inputStreamStorage.emplace<TZLibDecompress>(origin);
+ case Ydb::Topic::CODEC_LZOP:
+ throw yexception() << "LZO codec is disabled";
+ case Ydb::Topic::CODEC_ZSTD:
+ return &inputStreamStorage.emplace<TZstdDecompress>(origin);
+ default:
+ //case Ydb::Topic::CODEC_RAW:
+ //case Ydb::Topic::CODEC_UNSPECIFIED:
+ throw yexception() << "unsupported codec value : " << ui64(codec);
+ }
+}
+
TString Decompress(const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::MessageData& data) {
TMemoryInput input(data.data().data(), data.data().size());
TString result;
@@ -34,6 +49,14 @@ TString Decompress(const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage
return result;
}
+TString Decompress(const Ydb::Topic::StreamReadMessage::ReadResponse::MessageData& data, Ydb::Topic::Codec codec) {
+ TMemoryInput input(data.data().data(), data.data().size());
+ TString result;
+ TStringOutput resultOutput(result);
+ TInputStreamVariant inputStreamStorage;
+ TransferData(CreateDecompressorStream(inputStreamStorage, codec, &input), &resultOutput);
+ return result;
+}
class TZLibToStringCompressor: private TEmbedPolicy<TBufferOutput>, public TZLibCompress {
public:
diff --git a/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.h b/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.h
index e3fc717765..b18d14119e 100644
--- a/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.h
+++ b/ydb/public/sdk/cpp/client/ydb_persqueue_public/codecs/codecs.h
@@ -2,16 +2,17 @@
#include <util/stream/output.h>
#include <ydb/public/api/protos/ydb_persqueue_v1.pb.h>
#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/persqueue.h>
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
namespace NYdb::NPersQueue {
namespace NCompressionDetails {
extern TString Decompress(const Ydb::PersQueue::V1::MigrationStreamingReadServerMessage::DataBatch::MessageData& data);
+extern TString Decompress(const Ydb::Topic::StreamReadMessage::ReadResponse::MessageData& data, Ydb::Topic::Codec codec);
THolder<IOutputStream> CreateCoder(ECodec codec, TBuffer& result, int quality);
} // namespace NDecompressionDetails
} // namespace NYdb::NPersQueue
-
diff --git a/ydb/public/sdk/cpp/client/ydb_proto/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_proto/CMakeLists.txt
index c256d30ed8..6dd0b54f95 100644
--- a/ydb/public/sdk/cpp/client/ydb_proto/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_proto/CMakeLists.txt
@@ -11,6 +11,7 @@ add_library(cpp-client-ydb_proto)
target_link_libraries(cpp-client-ydb_proto PUBLIC
contrib-libs-cxxsupp
yutil
+ api-grpc
api-grpc-draft
api-protos
lib-operation_id-protos
diff --git a/ydb/public/sdk/cpp/client/ydb_proto/accessor.h b/ydb/public/sdk/cpp/client/ydb_proto/accessor.h
index 2c43474639..1b4214208e 100644
--- a/ydb/public/sdk/cpp/client/ydb_proto/accessor.h
+++ b/ydb/public/sdk/cpp/client/ydb_proto/accessor.h
@@ -13,6 +13,7 @@
#include <ydb/public/sdk/cpp/client/ydb_table/table.h>
#include <ydb/public/sdk/cpp/client/ydb_persqueue_public/persqueue.h>
#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+#include <ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.h>
namespace NYdb {
@@ -38,6 +39,7 @@ public:
static const Ydb::Table::DescribeTableResult& GetProto(const NTable::TTableDescription& tableDescription);
static const Ydb::PersQueue::V1::DescribeTopicResult& GetProto(const NYdb::NPersQueue::TDescribeTopicResult& topicDescription);
static const Ydb::Topic::DescribeTopicResult& GetProto(const NYdb::NTopic::TTopicDescription& topicDescription);
+ static const Ydb::Monitoring::SelfCheckResult& GetProto(const NYdb::NMonitoring::TSelfCheckResult& selfCheckResult);
static NTable::TQueryStats FromProto(const Ydb::TableStats::QueryStats& queryStats);
static NTable::TTableDescription FromProto(const Ydb::Table::CreateTableRequest& request);
@@ -50,6 +52,9 @@ public:
static Ydb::Table::ValueSinceUnixEpochModeSettings::Unit GetProto(NTable::TValueSinceUnixEpochModeSettings::EUnit value);
static NTable::TValueSinceUnixEpochModeSettings::EUnit FromProto(Ydb::Table::ValueSinceUnixEpochModeSettings::Unit value);
+ static Ydb::Topic::MeteringMode GetProto(NTopic::EMeteringMode mode);
+ static NTopic::EMeteringMode FromProto(Ydb::Topic::MeteringMode mode);
+
// exports & imports
template <typename TProtoSettings> static typename TProtoSettings::Scheme GetProto(ES3Scheme value);
template <typename TProtoSettings> static ES3Scheme FromProto(typename TProtoSettings::Scheme value);
diff --git a/ydb/public/sdk/cpp/client/ydb_result/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_result/CMakeLists.txt
index 489f65b347..a657e836a7 100644
--- a/ydb/public/sdk/cpp/client/ydb_result/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_result/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(cpp-client-ydb_result)
target_link_libraries(cpp-client-ydb_result PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_result/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_result/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/ydb_result/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_result/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/client/ydb_table/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_table/CMakeLists.txt
index 3f5a9aaa9b..29702d2e8b 100644
--- a/ydb/public/sdk/cpp/client/ydb_table/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_table/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(impl)
+add_subdirectory(query_stats)
add_library(cpp-client-ydb_table)
target_link_libraries(cpp-client-ydb_table PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_table/table.cpp b/ydb/public/sdk/cpp/client/ydb_table/table.cpp
index 3704de4a45..a79995ba17 100644
--- a/ydb/public/sdk/cpp/client/ydb_table/table.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_table/table.cpp
@@ -1376,7 +1376,7 @@ private:
const ui32 MaxActiveSessions_;
NSdkStats::TSessionCounter ActiveSessionsCounter_;
NSdkStats::TSessionCounter InPoolSessionsCounter_;
- NSdkStats::TAtomicCounter<NMonitoring::TRate> FakeSessionsCounter_;
+ NSdkStats::TAtomicCounter<::NMonitoring::TRate> FakeSessionsCounter_;
};
static TDuration RandomizeThreshold(TDuration duration) {
@@ -2609,7 +2609,7 @@ private:
static void CollectParams(
::google::protobuf::Map<TString, Ydb::TypedValue>* params,
- NSdkStats::TAtomicHistogram<NMonitoring::THistogram> histgoram)
+ NSdkStats::TAtomicHistogram<::NMonitoring::THistogram> histgoram)
{
if (params && histgoram.IsCollecting()) {
@@ -2623,7 +2623,7 @@ private:
static void CollectParams(
const ::google::protobuf::Map<TString, Ydb::TypedValue>& params,
- NSdkStats::TAtomicHistogram<NMonitoring::THistogram> histgoram)
+ NSdkStats::TAtomicHistogram<::NMonitoring::THistogram> histgoram)
{
if (histgoram.IsCollecting()) {
@@ -2635,13 +2635,13 @@ private:
}
}
- static void CollectQuerySize(const TString& query, NSdkStats::TAtomicHistogram<NMonitoring::THistogram>& querySizeHistogram) {
+ static void CollectQuerySize(const TString& query, NSdkStats::TAtomicHistogram<::NMonitoring::THistogram>& querySizeHistogram) {
if (querySizeHistogram.IsCollecting()) {
querySizeHistogram.Record(query.size());
}
}
- static void CollectQuerySize(const TDataQuery&, NSdkStats::TAtomicHistogram<NMonitoring::THistogram>&) {}
+ static void CollectQuerySize(const TDataQuery&, NSdkStats::TAtomicHistogram<::NMonitoring::THistogram>&) {}
template <typename TQueryType, typename TParamsType>
TAsyncDataQueryResult ExecuteDataQueryInternal(const TSession& session, const TQueryType& query,
@@ -2751,6 +2751,9 @@ private:
case TTxSettings::TS_STALE_RO:
proto->mutable_stale_read_only();
break;
+ case TTxSettings::TS_SNAPSHOT_RO:
+ proto->mutable_snapshot_read_only();
+ break;
default:
throw TContractViolation("Unexpected transaction mode.");
}
@@ -2788,12 +2791,12 @@ private:
const TCreateSessionSettings& settings);
public:
- NSdkStats::TAtomicCounter<NMonitoring::TRate> CacheMissCounter;
+ NSdkStats::TAtomicCounter<::NMonitoring::TRate> CacheMissCounter;
NSdkStats::TStatCollector::TClientRetryOperationStatCollector RetryOperationStatCollector;
- NSdkStats::TAtomicHistogram<NMonitoring::THistogram> QuerySizeHistogram;
- NSdkStats::TAtomicHistogram<NMonitoring::THistogram> ParamsSizeHistogram;
- NSdkStats::TAtomicCounter<NMonitoring::TRate> SessionRemovedDueBalancing;
- NSdkStats::TAtomicCounter<NMonitoring::TRate> RequestMigrated;
+ NSdkStats::TAtomicHistogram<::NMonitoring::THistogram> QuerySizeHistogram;
+ NSdkStats::TAtomicHistogram<::NMonitoring::THistogram> ParamsSizeHistogram;
+ NSdkStats::TAtomicCounter<::NMonitoring::TRate> SessionRemovedDueBalancing;
+ NSdkStats::TAtomicCounter<::NMonitoring::TRate> RequestMigrated;
private:
TSessionPoolImpl SessionPool_;
diff --git a/ydb/public/sdk/cpp/client/ydb_table/table.h b/ydb/public/sdk/cpp/client/ydb_table/table.h
index 27e59c98d6..54ece32d4c 100644
--- a/ydb/public/sdk/cpp/client/ydb_table/table.h
+++ b/ydb/public/sdk/cpp/client/ydb_table/table.h
@@ -1072,6 +1072,10 @@ public:
return TTxSettings(TS_STALE_RO);
}
+ static TTxSettings SnapshotRO() {
+ return TTxSettings(TS_SNAPSHOT_RO);
+ }
+
void Out(IOutputStream& out) const {
switch (Mode_) {
case TS_SERIALIZABLE_RW:
@@ -1083,6 +1087,9 @@ public:
case TS_STALE_RO:
out << "StaleRO";
break;
+ case TS_SNAPSHOT_RO:
+ out << "SnapshotRO";
+ break;
default:
out << "Unknown";
break;
@@ -1093,7 +1100,8 @@ private:
enum ETransactionMode {
TS_SERIALIZABLE_RW,
TS_ONLINE_RO,
- TS_STALE_RO
+ TS_STALE_RO,
+ TS_SNAPSHOT_RO
};
FLUENT_SETTING(TTxOnlineSettings, OnlineSettings);
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_topic/CMakeLists.txt
index 98ca02cc8d..6fc60fb0c0 100644
--- a/ydb/public/sdk/cpp/client/ydb_topic/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_topic/CMakeLists.txt
@@ -6,12 +6,15 @@
# original buildsystem will not be accepted.
+add_subdirectory(impl)
+add_subdirectory(ut)
add_library(cpp-client-ydb_topic)
target_link_libraries(cpp-client-ydb_topic PUBLIC
contrib-libs-cxxsupp
yutil
tools-enum_parser-enum_serialization_runtime
+ client-ydb_persqueue_public-codecs
library-cpp-retry
client-ydb_topic-impl
cpp-client-ydb_proto
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_topic/impl/CMakeLists.txt
index 24edb06472..e138e1085f 100644
--- a/ydb/public/sdk/cpp/client/ydb_topic/impl/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/CMakeLists.txt
@@ -19,7 +19,16 @@ target_link_libraries(client-ydb_topic-impl PUBLIC
impl-ydb_internal-make_request
client-ydb_common_client-impl
cpp-client-ydb_driver
+ client-ydb_persqueue_core-impl
+ cpp-client-ydb_proto
)
target_sources(client-ydb_topic-impl PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/impl/executor.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session_event.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/impl/counters.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/impl/deferred_commit.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/impl/event_handlers.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.cpp
${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp
)
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/counters.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/counters.cpp
new file mode 100644
index 0000000000..da51b921a2
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/counters.cpp
@@ -0,0 +1,29 @@
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+
+namespace NYdb::NTopic {
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReaderCounters
+
+TReaderCounters::TReaderCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters) {
+ Errors = counters->GetCounter("errors", true);
+ CurrentSessionLifetimeMs = counters->GetCounter("currentSessionLifetimeMs", false);
+ BytesRead = counters->GetCounter("bytesRead", true);
+ MessagesRead = counters->GetCounter("messagesRead", true);
+ BytesReadCompressed = counters->GetCounter("bytesReadCompressed", true);
+ BytesInflightUncompressed = counters->GetCounter("bytesInflightUncompressed", false);
+ BytesInflightCompressed = counters->GetCounter("bytesInflightCompressed", false);
+ BytesInflightTotal = counters->GetCounter("bytesInflightTotal", false);
+ MessagesInflight = counters->GetCounter("messagesInflight", false);
+
+#define HISTOGRAM_SETUP NMonitoring::ExplicitHistogram({0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100})
+
+ TotalBytesInflightUsageByTime = counters->GetHistogram("totalBytesInflightUsageByTime", HISTOGRAM_SETUP);
+ UncompressedBytesInflightUsageByTime = counters->GetHistogram("uncompressedBytesInflightUsageByTime", HISTOGRAM_SETUP);
+ CompressedBytesInflightUsageByTime = counters->GetHistogram("compressedBytesInflightUsageByTime", HISTOGRAM_SETUP);
+
+#undef HISTOGRAM_SETUP
+
+}
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/deferred_commit.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/deferred_commit.cpp
new file mode 100644
index 0000000000..c7c9316f6b
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/deferred_commit.cpp
@@ -0,0 +1,131 @@
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h>
+
+#include <library/cpp/containers/disjoint_interval_tree/disjoint_interval_tree.h>
+
+namespace NYdb::NTopic {
+
+std::pair<ui64, ui64> GetMessageOffsetRange(const TReadSessionEvent::TDataReceivedEvent& dataReceivedEvent, ui64 index);
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TDeferredCommit
+
+class TDeferredCommit::TImpl {
+public:
+
+ void Add(const TPartitionSession::TPtr& partitionStream, ui64 startOffset, ui64 endOffset);
+ void Add(const TPartitionSession::TPtr& partitionStream, ui64 offset);
+
+ void Add(const TReadSessionEvent::TDataReceivedEvent::TMessage& message);
+ void Add(const TReadSessionEvent::TDataReceivedEvent& dataReceivedEvent);
+
+ void Commit();
+
+private:
+ static void Add(const TPartitionSession::TPtr& partitionStream, TDisjointIntervalTree<ui64>& offsetSet, ui64 startOffset, ui64 endOffset);
+
+private:
+ // Partition stream -> offsets set.
+ THashMap<TPartitionSession::TPtr, TDisjointIntervalTree<ui64>> Offsets;
+};
+
+TDeferredCommit::TDeferredCommit() {
+}
+
+TDeferredCommit::TDeferredCommit(TDeferredCommit&&) = default;
+
+TDeferredCommit& TDeferredCommit::operator=(TDeferredCommit&&) = default;
+
+TDeferredCommit::~TDeferredCommit() {
+}
+
+#define GET_IMPL() \
+ if (!Impl) { \
+ Impl = MakeHolder<TImpl>(); \
+ } \
+ Impl
+
+void TDeferredCommit::Add(const TPartitionSession::TPtr& partitionStream, ui64 startOffset, ui64 endOffset) {
+ GET_IMPL()->Add(partitionStream, startOffset, endOffset);
+}
+
+void TDeferredCommit::Add(const TPartitionSession::TPtr& partitionStream, ui64 offset) {
+ GET_IMPL()->Add(partitionStream, offset);
+}
+
+void TDeferredCommit::Add(const TReadSessionEvent::TDataReceivedEvent::TMessage& message) {
+ GET_IMPL()->Add(message);
+}
+
+void TDeferredCommit::Add(const TReadSessionEvent::TDataReceivedEvent& dataReceivedEvent) {
+ GET_IMPL()->Add(dataReceivedEvent);
+}
+
+#undef GET_IMPL
+
+void TDeferredCommit::Commit() {
+ if (Impl) {
+ Impl->Commit();
+ }
+}
+
+void TDeferredCommit::TImpl::Add(const TReadSessionEvent::TDataReceivedEvent::TMessage& message) {
+ Y_ASSERT(message.GetPartitionSession());
+ Add(message.GetPartitionSession(), message.GetOffset());
+}
+
+void TDeferredCommit::TImpl::Add(const TPartitionSession::TPtr& partitionStream, TDisjointIntervalTree<ui64>& offsetSet, ui64 startOffset, ui64 endOffset) {
+ if (offsetSet.Intersects(startOffset, endOffset)) {
+ ThrowFatalError(TStringBuilder() << "Commit set already has some offsets from half-interval ["
+ << startOffset << "; " << endOffset
+ << ") for partition stream with id " << partitionStream->GetPartitionSessionId());
+ } else {
+ offsetSet.InsertInterval(startOffset, endOffset);
+ }
+}
+
+void TDeferredCommit::TImpl::Add(const TPartitionSession::TPtr& partitionStream, ui64 startOffset, ui64 endOffset) {
+ Y_ASSERT(partitionStream);
+ Add(partitionStream, Offsets[partitionStream], startOffset, endOffset);
+}
+
+void TDeferredCommit::TImpl::Add(const TPartitionSession::TPtr& partitionStream, ui64 offset) {
+ Y_ASSERT(partitionStream);
+ auto& offsetSet = Offsets[partitionStream];
+ if (offsetSet.Has(offset)) {
+ ThrowFatalError(TStringBuilder() << "Commit set already has offset " << offset
+ << " for partition stream with id " << partitionStream->GetPartitionSessionId());
+ } else {
+ offsetSet.Insert(offset);
+ }
+}
+
+void TDeferredCommit::TImpl::Add(const TReadSessionEvent::TDataReceivedEvent& dataReceivedEvent) {
+ const TPartitionSession::TPtr& partitionStream = dataReceivedEvent.GetPartitionSession();
+ Y_ASSERT(partitionStream);
+ auto& offsetSet = Offsets[partitionStream];
+ auto [startOffset, endOffset] = GetMessageOffsetRange(dataReceivedEvent, 0);
+ for (size_t i = 1; i < dataReceivedEvent.GetMessagesCount(); ++i) {
+ auto msgOffsetRange = GetMessageOffsetRange(dataReceivedEvent, i);
+ if (msgOffsetRange.first == endOffset) {
+ endOffset= msgOffsetRange.second;
+ } else {
+ Add(partitionStream, offsetSet, startOffset, endOffset);
+ startOffset = msgOffsetRange.first;
+ endOffset = msgOffsetRange.second;
+ }
+ }
+ Add(partitionStream, offsetSet, startOffset, endOffset);
+}
+
+void TDeferredCommit::TImpl::Commit() {
+ for (auto&& [partitionStream, offsetRanges] : Offsets) {
+ for (auto&& [startOffset, endOffset] : offsetRanges) {
+ static_cast<NPersQueue::TPartitionStreamImpl<false>*>(partitionStream.Get())->Commit(startOffset, endOffset);
+ }
+ }
+ Offsets.clear();
+}
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/event_handlers.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/event_handlers.cpp
new file mode 100644
index 0000000000..60ef8ba4b6
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/event_handlers.cpp
@@ -0,0 +1,142 @@
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+
+#include <library/cpp/containers/disjoint_interval_tree/disjoint_interval_tree.h>
+
+namespace NYdb::NTopic {
+
+std::pair<ui64, ui64> GetMessageOffsetRange(const TReadSessionEvent::TDataReceivedEvent& dataReceivedEvent, ui64 index);
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEventHandlers
+
+class TGracefulReleasingSimpleDataHandlers : public TThrRefBase {
+public:
+ explicit TGracefulReleasingSimpleDataHandlers(std::function<void(TReadSessionEvent::TDataReceivedEvent&)> dataHandler, bool commitAfterProcessing)
+ : DataHandler(std::move(dataHandler))
+ , CommitAfterProcessing(commitAfterProcessing)
+ {
+ }
+
+ void OnDataReceived(TReadSessionEvent::TDataReceivedEvent& event) {
+ Y_ASSERT(event.GetMessagesCount());
+ TDeferredCommit deferredCommit;
+ with_lock (Lock) {
+ auto& offsetSet = PartitionStreamToUncommittedOffsets[event.GetPartitionSession()->GetPartitionSessionId()];
+ // Messages could contain holes in offset, but later commit ack will tell us right border.
+ // So we can easily insert the whole interval with holes included.
+ // It will be removed from set by specifying proper right border.
+ auto firstMessageOffsets = GetMessageOffsetRange(event, 0);
+ auto lastMessageOffsets = GetMessageOffsetRange(event, event.GetMessagesCount() - 1);
+
+ offsetSet.InsertInterval(firstMessageOffsets.first, lastMessageOffsets.second);
+
+ if (CommitAfterProcessing) {
+ deferredCommit.Add(event);
+ }
+ }
+ DataHandler(event);
+ deferredCommit.Commit();
+ }
+
+ void OnCommitAcknowledgement(TReadSessionEvent::TCommitOffsetAcknowledgementEvent& event) {
+ with_lock (Lock) {
+ const ui64 partitionStreamId = event.GetPartitionSession()->GetPartitionSessionId();
+ auto& offsetSet = PartitionStreamToUncommittedOffsets[partitionStreamId];
+ if (offsetSet.EraseInterval(0, event.GetCommittedOffset() + 1)) { // Remove some offsets.
+ if (offsetSet.Empty()) { // No offsets left.
+ auto unconfirmedDestroyIt = UnconfirmedDestroys.find(partitionStreamId);
+ if (unconfirmedDestroyIt != UnconfirmedDestroys.end()) {
+ // Confirm and forget about this partition stream.
+ unconfirmedDestroyIt->second.Confirm();
+ UnconfirmedDestroys.erase(unconfirmedDestroyIt);
+ PartitionStreamToUncommittedOffsets.erase(partitionStreamId);
+ }
+ }
+ }
+ }
+ }
+
+ void OnCreatePartitionStream(TReadSessionEvent::TStartPartitionSessionEvent& event) {
+ with_lock (Lock) {
+ Y_VERIFY(PartitionStreamToUncommittedOffsets[event.GetPartitionSession()->GetPartitionSessionId()].Empty());
+ }
+ event.Confirm();
+ }
+
+ void OnDestroyPartitionStream(TReadSessionEvent::TStopPartitionSessionEvent& event) {
+ with_lock (Lock) {
+ const ui64 partitionStreamId = event.GetPartitionSession()->GetPartitionSessionId();
+ Y_VERIFY(UnconfirmedDestroys.find(partitionStreamId) == UnconfirmedDestroys.end());
+ if (PartitionStreamToUncommittedOffsets[partitionStreamId].Empty()) {
+ PartitionStreamToUncommittedOffsets.erase(partitionStreamId);
+ event.Confirm();
+ } else {
+ UnconfirmedDestroys.emplace(partitionStreamId, std::move(event));
+ }
+ }
+ }
+
+ void OnPartitionStreamClosed(TReadSessionEvent::TPartitionSessionClosedEvent& event) {
+ with_lock (Lock) {
+ const ui64 partitionStreamId = event.GetPartitionSession()->GetPartitionSessionId();
+ PartitionStreamToUncommittedOffsets.erase(partitionStreamId);
+ UnconfirmedDestroys.erase(partitionStreamId);
+ }
+ }
+
+private:
+ TAdaptiveLock Lock; // For the case when user gave us multithreaded executor.
+ const std::function<void(TReadSessionEvent::TDataReceivedEvent&)> DataHandler;
+ const bool CommitAfterProcessing;
+ THashMap<ui64, TDisjointIntervalTree<ui64>> PartitionStreamToUncommittedOffsets; // Partition stream id -> set of offsets.
+ THashMap<ui64, TReadSessionEvent::TStopPartitionSessionEvent> UnconfirmedDestroys; // Partition stream id -> destroy events.
+};
+
+TReadSessionSettings::TEventHandlers& TReadSessionSettings::TEventHandlers::SimpleDataHandlers(std::function<void(TReadSessionEvent::TDataReceivedEvent&)> dataHandler,
+ bool commitDataAfterProcessing,
+ bool gracefulReleaseAfterCommit) {
+ Y_ASSERT(dataHandler);
+
+ PartitionSessionStatusHandler([](TReadSessionEvent::TPartitionSessionStatusEvent&){});
+
+ if (gracefulReleaseAfterCommit) {
+ auto handlers = MakeIntrusive<TGracefulReleasingSimpleDataHandlers>(std::move(dataHandler), commitDataAfterProcessing);
+ DataReceivedHandler([handlers](TReadSessionEvent::TDataReceivedEvent& event) {
+ handlers->OnDataReceived(event);
+ });
+ StartPartitionSessionHandler([handlers](TReadSessionEvent::TStartPartitionSessionEvent& event) {
+ handlers->OnCreatePartitionStream(event);
+ });
+ StopPartitionSessionHandler([handlers](TReadSessionEvent::TStopPartitionSessionEvent& event) {
+ handlers->OnDestroyPartitionStream(event);
+ });
+ CommitOffsetAcknowledgementHandler([handlers](TReadSessionEvent::TCommitOffsetAcknowledgementEvent& event) {
+ handlers->OnCommitAcknowledgement(event);
+ });
+ PartitionSessionClosedHandler([handlers](TReadSessionEvent::TPartitionSessionClosedEvent& event) {
+ handlers->OnPartitionStreamClosed(event);
+ });
+ } else {
+ if (commitDataAfterProcessing) {
+ DataReceivedHandler([dataHandler = std::move(dataHandler)](TReadSessionEvent::TDataReceivedEvent& event) {
+ TDeferredCommit deferredCommit;
+ deferredCommit.Add(event);
+ dataHandler(event);
+ deferredCommit.Commit();
+ });
+ } else {
+ DataReceivedHandler(std::move(dataHandler));
+ }
+ StartPartitionSessionHandler([](TReadSessionEvent::TStartPartitionSessionEvent& event) {
+ event.Confirm();
+ });
+ StopPartitionSessionHandler([](TReadSessionEvent::TStopPartitionSessionEvent& event) {
+ event.Confirm();
+ });
+ CommitOffsetAcknowledgementHandler([](TReadSessionEvent::TCommitOffsetAcknowledgementEvent&){});
+ PartitionSessionClosedHandler([](TReadSessionEvent::TPartitionSessionClosedEvent&){});
+ }
+ return *this;
+}
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/executor.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/executor.cpp
new file mode 100644
index 0000000000..368df898ac
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/executor.cpp
@@ -0,0 +1,91 @@
+#include "executor.h"
+
+namespace NYdb::NTopic {
+
+void IAsyncExecutor::Post(TFunction&& f) {
+ PostImpl(std::move(f));
+}
+
+IAsyncExecutor::TPtr CreateDefaultExecutor() {
+ return CreateThreadPoolExecutor(1);
+}
+
+void TThreadPoolExecutor::PostImpl(TVector<TFunction>&& fs) {
+ for (auto& f : fs) {
+ ThreadPool->SafeAddFunc(std::move(f));
+ }
+}
+
+void TThreadPoolExecutor::PostImpl(TFunction&& f) {
+ ThreadPool->SafeAddFunc(std::move(f));
+}
+
+TSerialExecutor::TSerialExecutor(IAsyncExecutor::TPtr executor)
+ : Executor(executor)
+{
+ Y_VERIFY(executor);
+}
+
+void TSerialExecutor::PostImpl(TVector<TFunction>&& fs) {
+ for (auto& f : fs) {
+ PostImpl(std::move(f));
+ }
+}
+
+void TSerialExecutor::PostImpl(TFunction&& f) {
+ with_lock(Mutex) {
+ ExecutionQueue.push(std::move(f));
+ if (Busy) {
+ return;
+ }
+ PostNext();
+ }
+}
+
+void TSerialExecutor::PostNext() {
+ Y_VERIFY(!Busy);
+
+ if (ExecutionQueue.empty()) {
+ return;
+ }
+
+ auto weakThis = weak_from_this();
+ Executor->Post([weakThis, f = std::move(ExecutionQueue.front())]() {
+ if (auto sharedThis = weakThis.lock()) {
+ f();
+ with_lock(sharedThis->Mutex) {
+ sharedThis->Busy = false;
+ sharedThis->PostNext();
+ }
+ }
+ });
+ ExecutionQueue.pop();
+ Busy = true;
+}
+
+IExecutor::TPtr CreateThreadPoolExecutor(size_t threads) {
+ return MakeIntrusive<TThreadPoolExecutor>(threads);
+}
+
+IExecutor::TPtr CreateGenericExecutor() {
+ return CreateThreadPoolExecutor(1);
+}
+
+IExecutor::TPtr CreateThreadPoolExecutorAdapter(std::shared_ptr<IThreadPool> threadPool) {
+ return MakeIntrusive<TThreadPoolExecutor>(std::move(threadPool));
+}
+
+TThreadPoolExecutor::TThreadPoolExecutor(std::shared_ptr<IThreadPool> threadPool)
+ : ThreadPool(std::move(threadPool))
+{
+ IsFakeThreadPool = dynamic_cast<TFakeThreadPool*>(ThreadPool.get()) != nullptr;
+}
+
+TThreadPoolExecutor::TThreadPoolExecutor(size_t threadsCount)
+ : TThreadPoolExecutor(CreateThreadPool(threadsCount))
+{
+ Y_VERIFY(threadsCount > 0);
+ ThreadsCount = threadsCount;
+}
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/executor.h b/ydb/public/sdk/cpp/client/ydb_topic/impl/executor.h
new file mode 100644
index 0000000000..3bc99ad113
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/executor.h
@@ -0,0 +1,88 @@
+#pragma once
+
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+#include <ydb/public/sdk/cpp/client/ydb_common_client/impl/client.h>
+
+#include <util/generic/queue.h>
+#include <util/system/condvar.h>
+#include <util/thread/pool.h>
+
+
+namespace NYdb::NTopic {
+
+class IAsyncExecutor : public IExecutor {
+private:
+ virtual void PostImpl(TVector<std::function<void()>>&&) = 0;
+ virtual void PostImpl(std::function<void()>&&) = 0;
+
+public:
+ bool IsAsync() const override {
+ return true;
+ }
+ // Post Implementation MUST NOT run f before it returns
+ void Post(TFunction&& f) final;
+};
+
+IExecutor::TPtr CreateDefaultExecutor();
+
+
+class TThreadPoolExecutor : public IAsyncExecutor {
+private:
+ std::shared_ptr<IThreadPool> ThreadPool;
+
+public:
+ TThreadPoolExecutor(std::shared_ptr<IThreadPool> threadPool);
+ TThreadPoolExecutor(size_t threadsCount);
+ ~TThreadPoolExecutor() = default;
+
+ bool IsAsync() const override {
+ return !IsFakeThreadPool;
+ }
+
+ void DoStart() override {
+ if (ThreadsCount) {
+ ThreadPool->Start(ThreadsCount);
+ }
+ }
+
+private:
+ void PostImpl(TVector<TFunction>&& fs) override;
+ void PostImpl(TFunction&& f) override;
+
+private:
+ bool IsFakeThreadPool = false;
+ size_t ThreadsCount = 0;
+};
+
+class TSerialExecutor : public IAsyncExecutor, public std::enable_shared_from_this<TSerialExecutor> {
+private:
+ IAsyncExecutor::TPtr Executor; //!< Wrapped executor that is actually doing the job
+ bool Busy = false; //!< Set if some closure was scheduled for execution and did not finish yet
+ TMutex Mutex = {};
+ TQueue<TFunction> ExecutionQueue = {};
+
+public:
+ TSerialExecutor(IAsyncExecutor::TPtr executor);
+ ~TSerialExecutor() = default;
+
+private:
+ void PostImpl(TVector<TFunction>&& fs) override;
+ void PostImpl(TFunction&& f) override;
+ void PostNext();
+};
+
+class TSyncExecutor : public IExecutor {
+public:
+ void Post(TFunction&& f) final {
+ return f();
+ }
+ bool IsAsync() const final {
+ return false;
+ }
+ void DoStart() override {
+ }
+};
+
+IExecutor::TPtr CreateGenericExecutor();
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.cpp
new file mode 100644
index 0000000000..f01af91a29
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.cpp
@@ -0,0 +1,344 @@
+#include "read_session.h"
+
+#define INCLUDE_YDB_INTERNAL_H
+#include <ydb/public/sdk/cpp/client/impl/ydb_internal/logger/log.h>
+#undef INCLUDE_YDB_INTERNAL_H
+
+#include <util/generic/guid.h>
+
+namespace NYdb::NTopic {
+
+static const TString DRIVER_IS_STOPPING_DESCRIPTION = "Driver is stopping";
+
+void MakeCountersNotNull(TReaderCounters& counters);
+bool HasNullCounters(TReaderCounters& counters);
+
+TReadSession::TReadSession(const TReadSessionSettings& settings,
+ std::shared_ptr<TTopicClient::TImpl> client,
+ std::shared_ptr<TGRpcConnectionsImpl> connections,
+ TDbDriverStatePtr dbDriverState)
+ : Settings(settings)
+ , SessionId(CreateGuidAsString())
+ , Log(settings.Log_.GetOrElse(dbDriverState->Log))
+ , Client(std::move(client))
+ , Connections(std::move(connections))
+ , DbDriverState(std::move(dbDriverState))
+{
+ if (!Settings.RetryPolicy_) {
+ Settings.RetryPolicy_ = IRetryPolicy::GetDefaultPolicy();
+ }
+
+ MakeCountersIfNeeded();
+}
+
+TReadSession::~TReadSession() {
+ Abort(EStatus::ABORTED, "Aborted");
+ WaitAllDecompressionTasks();
+ ClearAllEvents();
+}
+
+void TReadSession::Start() {
+ ErrorHandler = MakeIntrusive<NPersQueue::TErrorHandler<false>>(weak_from_this());
+ EventsQueue = std::make_shared<NPersQueue::TReadSessionEventsQueue<false>>(Settings, weak_from_this());
+
+ if (!ValidateSettings()) {
+ return;
+ }
+
+ Log.Write(TLOG_INFO, GetLogPrefix() << "Starting read session");
+
+ NPersQueue::TDeferredActions<false> deferred;
+ with_lock (Lock) {
+ if (Aborting) {
+ return;
+ }
+ Topics = Settings.Topics_;
+ CreateClusterSessionsImpl(deferred);
+ }
+ ScheduleDumpCountersToLog();
+}
+
+void TReadSession::CreateClusterSessionsImpl(NPersQueue::TDeferredActions<false>& deferred) {
+ // Create cluster sessions.
+ Log.Write(
+ TLOG_DEBUG,
+ GetLogPrefix() << "Starting single session"
+ );
+ auto context = Client->CreateContext();
+ if (!context) {
+ AbortImpl(EStatus::ABORTED, DRIVER_IS_STOPPING_DESCRIPTION, deferred);
+ return;
+ }
+ Session = std::make_shared<NPersQueue::TSingleClusterReadSessionImpl<false>>(
+ Settings,
+ DbDriverState->Database,
+ SessionId,
+ "",
+ Log,
+ Client->CreateReadSessionConnectionProcessorFactory(),
+ EventsQueue,
+ ErrorHandler,
+ context,
+ 1, 1);
+
+ deferred.DeferStartSession(Session);
+}
+
+bool TReadSession::ValidateSettings() {
+ NYql::TIssues issues;
+ if (Settings.Topics_.empty()) {
+ issues.AddIssue("Empty topics list.");
+ }
+
+ if (Settings.ConsumerName_.empty()) {
+ issues.AddIssue("No consumer specified.");
+ }
+
+ if (Settings.MaxMemoryUsageBytes_ < 1_MB) {
+ issues.AddIssue("Too small max memory usage. Valid values start from 1 megabyte.");
+ }
+
+ if (issues) {
+ Abort(EStatus::BAD_REQUEST, NPersQueue::MakeIssueWithSubIssues("Invalid read session settings", issues));
+ return false;
+ } else {
+ return true;
+ }
+}
+
+NThreading::TFuture<void> TReadSession::WaitEvent() {
+ return EventsQueue->WaitEvent();
+}
+
+TVector<TReadSessionEvent::TEvent> TReadSession::GetEvents(bool block, TMaybe<size_t> maxEventsCount, size_t maxByteSize) {
+ return EventsQueue->GetEvents(block, maxEventsCount, maxByteSize);
+}
+
+TMaybe<TReadSessionEvent::TEvent> TReadSession::GetEvent(bool block, size_t maxByteSize) {
+ return EventsQueue->GetEvent(block, maxByteSize);
+}
+
+bool TReadSession::Close(TDuration timeout) {
+ Log.Write(TLOG_INFO, GetLogPrefix() << "Closing read session. Close timeout: " << timeout);
+ // Log final counters.
+ DumpCountersToLog();
+ with_lock (Lock) {
+ if (DumpCountersContext) {
+ DumpCountersContext->Cancel();
+ DumpCountersContext.reset();
+ }
+ }
+
+ NPersQueue::TSingleClusterReadSessionImpl<false>::TPtr session;
+ NThreading::TPromise<bool> promise = NThreading::NewPromise<bool>();
+ auto callback = [=]() mutable {
+ promise.TrySetValue(true);
+ };
+
+ NPersQueue::TDeferredActions<false> deferred;
+ with_lock (Lock) {
+ if (Closing || Aborting) {
+ return false;
+ }
+
+ if (!timeout) {
+ AbortImpl(EStatus::ABORTED, "Close with zero timeout", deferred);
+ return false;
+ }
+
+ Closing = true;
+ session = Session;
+ }
+ session->Close(callback);
+
+ callback(); // For the case when there are no subsessions yet.
+
+ auto timeoutCallback = [=](bool) mutable {
+ promise.TrySetValue(false);
+ };
+
+ auto timeoutContext = Connections->CreateContext();
+ if (!timeoutContext) {
+ AbortImpl(EStatus::ABORTED, DRIVER_IS_STOPPING_DESCRIPTION, deferred);
+ return false;
+ }
+ Connections->ScheduleCallback(timeout,
+ std::move(timeoutCallback),
+ timeoutContext);
+
+ // Wait.
+ NThreading::TFuture<bool> resultFuture = promise.GetFuture();
+ const bool result = resultFuture.GetValueSync();
+ if (result) {
+ NPersQueue::Cancel(timeoutContext);
+
+ NYql::TIssues issues;
+ issues.AddIssue("Session was gracefully closed");
+ EventsQueue->Close(TSessionClosedEvent(EStatus::SUCCESS, std::move(issues)), deferred);
+ } else {
+ ++*Settings.Counters_->Errors;
+ session->Abort();
+
+ NYql::TIssues issues;
+ issues.AddIssue(TStringBuilder() << "Session was closed after waiting " << timeout);
+ EventsQueue->Close(TSessionClosedEvent(EStatus::TIMEOUT, std::move(issues)), deferred);
+ }
+
+ with_lock (Lock) {
+ Aborting = true; // Set abort flag for doing nothing on destructor.
+ }
+ return result;
+}
+
+void TReadSession::WaitAllDecompressionTasks() {
+ if (Session) {
+ Session->WaitAllDecompressionTasks();
+ }
+}
+
+void TReadSession::ClearAllEvents() {
+ EventsQueue->ClearAllEvents();
+}
+
+TStringBuilder TReadSession::GetLogPrefix() const {
+ return TStringBuilder() << GetDatabaseLogPrefix(DbDriverState->Database) << "[" << SessionId << "] ";
+}
+
+static ELogPriority GetEventLogPriority(const TReadSessionEvent::TEvent& event) {
+ if (std::holds_alternative<TReadSessionEvent::TStartPartitionSessionEvent>(event)
+ || std::holds_alternative<TReadSessionEvent::TStopPartitionSessionEvent>(event)
+ || std::holds_alternative<TReadSessionEvent::TPartitionSessionClosedEvent>(event)
+ || std::holds_alternative<TSessionClosedEvent>(event))
+ { // Control event.
+ return TLOG_INFO;
+ } else {
+ return TLOG_DEBUG;
+ }
+}
+
+void TReadSession::OnUserRetrievedEvent(const TReadSessionEvent::TEvent& event) {
+ Log.Write(GetEventLogPriority(event), GetLogPrefix() << "Read session event " << DebugString(event));
+}
+
+void TReadSession::MakeCountersIfNeeded() {
+ if (!Settings.Counters_ || NPersQueue::HasNullCounters(*Settings.Counters_)) {
+ TReaderCounters::TPtr counters = MakeIntrusive<TReaderCounters>();
+ if (Settings.Counters_) {
+ *counters = *Settings.Counters_; // Copy all counters that have been set by user.
+ }
+ NPersQueue::MakeCountersNotNull(*counters);
+ Settings.Counters(counters);
+ }
+}
+
+void TReadSession::DumpCountersToLog(size_t timeNumber) {
+ const bool logCounters = timeNumber % 60 == 0; // Every 1 minute.
+ const bool dumpSessionsStatistics = timeNumber % 600 == 0; // Every 10 minutes.
+
+ *Settings.Counters_->CurrentSessionLifetimeMs = (TInstant::Now() - StartSessionTime).MilliSeconds();
+ NPersQueue::TSingleClusterReadSessionImpl<false>::TPtr session;
+ with_lock (Lock) {
+ if (Closing || Aborting) {
+ return;
+ }
+
+ session = Session;
+ }
+
+ {
+ TMaybe<TLogElement> log;
+ if (dumpSessionsStatistics) {
+ log.ConstructInPlace(&Log, TLOG_INFO);
+ (*log) << "Read/commit by partition streams (cluster:topic:partition:stream-id:read-offset:committed-offset):";
+ }
+ session->UpdateMemoryUsageStatistics();
+ if (dumpSessionsStatistics) {
+ session->DumpStatisticsToLog(*log);
+ }
+ }
+
+#define C(counter) \
+ << " " Y_STRINGIZE(counter) ": " \
+ << Settings.Counters_->counter->Val() \
+ /**/
+
+ if (logCounters) {
+ Log.Write(TLOG_INFO,
+ GetLogPrefix() << "Counters: {"
+ C(Errors)
+ C(CurrentSessionLifetimeMs)
+ C(BytesRead)
+ C(MessagesRead)
+ C(BytesReadCompressed)
+ C(BytesInflightUncompressed)
+ C(BytesInflightCompressed)
+ C(BytesInflightTotal)
+ C(MessagesInflight)
+ << " }"
+ );
+ }
+
+#undef C
+
+ ScheduleDumpCountersToLog(timeNumber + 1);
+}
+
+void TReadSession::ScheduleDumpCountersToLog(size_t timeNumber) {
+ with_lock(Lock) {
+ DumpCountersContext = Connections->CreateContext();
+ }
+ if (DumpCountersContext) {
+ auto callback = [self = weak_from_this(), timeNumber](bool ok) {
+ if (ok) {
+ if (auto sharedSelf = self.lock()) {
+ sharedSelf->DumpCountersToLog(timeNumber);
+ }
+ }
+ };
+ Connections->ScheduleCallback(TDuration::Seconds(1),
+ std::move(callback),
+ DumpCountersContext);
+ }
+}
+
+void TReadSession::AbortImpl(TSessionClosedEvent&& closeEvent, NPersQueue::TDeferredActions<false>& deferred) {
+ if (!Aborting) {
+ Aborting = true;
+ Log.Write(TLOG_NOTICE, GetLogPrefix() << "Aborting read session. Description: " << closeEvent.DebugString());
+ if (DumpCountersContext) {
+ DumpCountersContext->Cancel();
+ DumpCountersContext.reset();
+ }
+ Session->Abort();
+ EventsQueue->Close(std::move(closeEvent), deferred);
+ }
+}
+
+void TReadSession::AbortImpl(EStatus statusCode, NYql::TIssues&& issues, NPersQueue::TDeferredActions<false>& deferred) {
+ AbortImpl(TSessionClosedEvent(statusCode, std::move(issues)), deferred);
+}
+
+void TReadSession::AbortImpl(EStatus statusCode, const TString& message, NPersQueue::TDeferredActions<false>& deferred) {
+ NYql::TIssues issues;
+ issues.AddIssue(message);
+ AbortImpl(statusCode, std::move(issues), deferred);
+}
+
+void TReadSession::Abort(EStatus statusCode, NYql::TIssues&& issues) {
+ Abort(TSessionClosedEvent(statusCode, std::move(issues)));
+}
+
+void TReadSession::Abort(EStatus statusCode, const TString& message) {
+ NYql::TIssues issues;
+ issues.AddIssue(message);
+ Abort(statusCode, std::move(issues));
+}
+
+void TReadSession::Abort(TSessionClosedEvent&& closeEvent) {
+ NPersQueue::TDeferredActions<false> deferred;
+ with_lock (Lock) {
+ AbortImpl(std::move(closeEvent), deferred);
+ }
+}
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.h b/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.h
new file mode 100644
index 0000000000..bd7329f276
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session.h
@@ -0,0 +1,136 @@
+#pragma once
+
+#include "topic_impl.h"
+
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h>
+
+namespace NYdb::NTopic {
+
+class TDummyReadSession: public IReadSession, public std::enable_shared_from_this<TDummyReadSession> {
+public:
+ TDummyReadSession() = default;
+
+ inline TDummyReadSession(const TReadSessionSettings& settings) {
+ (void)settings;
+ }
+
+ inline NThreading::TFuture<void> WaitEvent() override {
+ Y_VERIFY(false);
+
+ NThreading::TPromise<void> promise = NThreading::NewPromise<void>();
+ return promise.GetFuture();
+ }
+
+ inline TVector<TReadSessionEvent::TEvent> GetEvents(bool block, TMaybe<size_t> maxEventsCount, size_t maxByteSize) override {
+ Y_VERIFY(false);
+
+ (void)block;
+ (void)maxEventsCount;
+ (void)maxByteSize;
+ return {};
+ }
+
+ inline TMaybe<TReadSessionEvent::TEvent> GetEvent(bool block, size_t maxByteSize) override {
+ Y_VERIFY(false);
+
+ (void)block;
+ (void)maxByteSize;
+ return {};
+ }
+
+ inline bool Close(TDuration timeout) override {
+ Y_VERIFY(false);
+
+ return !(bool)timeout;
+ }
+
+ inline TString GetSessionId() const override {
+ Y_VERIFY(false);
+
+ return "dummy_session_id";
+ }
+
+ inline TReaderCounters::TPtr GetCounters() const override {
+ Y_VERIFY(false);
+
+ return nullptr;
+ }
+};
+
+class TReadSession : public IReadSession,
+ public NPersQueue::IUserRetrievedEventCallback<false>,
+ public std::enable_shared_from_this<TReadSession> {
+public:
+ TReadSession(const TReadSessionSettings& settings,
+ std::shared_ptr<TTopicClient::TImpl> client,
+ std::shared_ptr<TGRpcConnectionsImpl> connections,
+ TDbDriverStatePtr dbDriverState);
+
+ ~TReadSession();
+
+ void Start();
+
+ NThreading::TFuture<void> WaitEvent() override;
+ TVector<TReadSessionEvent::TEvent> GetEvents(bool block, TMaybe<size_t> maxEventsCount, size_t maxByteSize) override;
+ TMaybe<TReadSessionEvent::TEvent> GetEvent(bool block, size_t maxByteSize) override;
+
+ bool Close(TDuration timeout) override;
+
+ inline TString GetSessionId() const override {
+ return SessionId;
+ }
+
+ inline TReaderCounters::TPtr GetCounters() const override {
+ return Settings.Counters_; // Always not nullptr.
+ }
+
+ void Abort(TSessionClosedEvent&& closeEvent);
+
+ void WaitAllDecompressionTasks();
+ void ClearAllEvents();
+
+private:
+ TStringBuilder GetLogPrefix() const;
+
+ // Start
+ bool ValidateSettings();
+
+ void CreateClusterSessionsImpl(NPersQueue::TDeferredActions<false>& deferred);
+
+ void OnUserRetrievedEvent(const TReadSessionEvent::TEvent& event) override;
+
+ void MakeCountersIfNeeded();
+ void DumpCountersToLog(size_t timeNumber = 0);
+ void ScheduleDumpCountersToLog(size_t timeNumber = 0);
+
+ // Shutdown.
+ void Abort(EStatus statusCode, NYql::TIssues&& issues);
+ void Abort(EStatus statusCode, const TString& message);
+
+ void AbortImpl(TSessionClosedEvent&& closeEvent, NPersQueue::TDeferredActions<false>& deferred);
+ void AbortImpl(EStatus statusCode, NYql::TIssues&& issues, NPersQueue::TDeferredActions<false>& deferred);
+ void AbortImpl(EStatus statusCode, const TString& message, NPersQueue::TDeferredActions<false>& deferred);
+
+private:
+ TReadSessionSettings Settings;
+ const TString SessionId;
+ const TInstant StartSessionTime = TInstant::Now();
+ TLog Log;
+ std::shared_ptr<TTopicClient::TImpl> Client;
+ std::shared_ptr<TGRpcConnectionsImpl> Connections;
+ NPersQueue::IErrorHandler<false>::TPtr ErrorHandler;
+ TDbDriverStatePtr DbDriverState;
+ TAdaptiveLock Lock;
+ std::shared_ptr<NPersQueue::TReadSessionEventsQueue<false>> EventsQueue;
+
+ NPersQueue::TSingleClusterReadSessionImpl<false>::TPtr Session;
+ TVector<TTopicReadSettings> Topics;
+
+ NGrpc::IQueueClientContextPtr DumpCountersContext;
+
+ // Exiting.
+ bool Aborting = false;
+ bool Closing = false;
+};
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session_event.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session_event.cpp
new file mode 100644
index 0000000000..adb43a2c0d
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/read_session_event.cpp
@@ -0,0 +1,392 @@
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h>
+
+namespace NYdb::NTopic {
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Helpers
+
+std::pair<ui64, ui64> GetMessageOffsetRange(const TReadSessionEvent::TDataReceivedEvent& dataReceivedEvent, ui64 index) {
+ if (dataReceivedEvent.HasCompressedMessages()) {
+ const auto& msg = dataReceivedEvent.GetCompressedMessages()[index];
+ return {msg.GetOffset(), msg.GetOffset() + 1};
+ }
+ const auto& msg = dataReceivedEvent.GetMessages()[index];
+ return {msg.GetOffset(), msg.GetOffset() + 1};
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TDataReceivedEvent::TMessageInformation
+
+TReadSessionEvent::TDataReceivedEvent::TMessageInformation::TMessageInformation(
+ ui64 offset,
+ TString producerId,
+ ui64 seqNo,
+ TInstant createTime,
+ TInstant writeTime,
+ TWriteSessionMeta::TPtr meta,
+ ui64 uncompressedSize,
+ TString messageGroupId
+)
+ : Offset(offset)
+ , ProducerId(producerId)
+ , SeqNo(seqNo)
+ , CreateTime(createTime)
+ , WriteTime(writeTime)
+ , Meta(meta)
+ , UncompressedSize(uncompressedSize)
+ , MessageGroupId(messageGroupId)
+{}
+
+static void DebugStringImpl(const TReadSessionEvent::TDataReceivedEvent::TMessageInformation& info, TStringBuilder& ret) {
+ ret << " Information: {"
+ << " Offset: " << info.Offset
+ << " ProducerId: \"" << info.ProducerId << "\""
+ << " SeqNo: " << info.SeqNo
+ << " CreateTime: " << info.CreateTime
+ << " WriteTime: " << info.WriteTime
+ << " UncompressedSize: " << info.UncompressedSize
+ << " MessageGroupId: \"" << info.MessageGroupId << "\"";
+ ret << " Meta: {";
+ bool firstKey = true;
+ for (const auto& [k, v] : info.Meta->Fields) {
+ ret << (firstKey ? " \"" : ", \"") << k << "\": \"" << v << "\"";
+ firstKey = false;
+ }
+ ret << " } }";
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TDataReceivedEvent::IMessage
+
+TReadSessionEvent::TDataReceivedEvent::IMessage::IMessage(const TString& data,
+ TPartitionSession::TPtr partitionSession)
+ : Data(data)
+ , PartitionSession(partitionSession)
+{}
+
+const TString& TReadSessionEvent::TDataReceivedEvent::IMessage::GetData() const {
+ return Data;
+}
+
+const TPartitionSession::TPtr& TReadSessionEvent::TDataReceivedEvent::IMessage::GetPartitionSession() const {
+ return PartitionSession;
+}
+
+TString TReadSessionEvent::TDataReceivedEvent::IMessage::DebugString(bool printData) const {
+ TStringBuilder ret;
+ DebugString(ret, printData);
+ return std::move(ret);
+}
+
+template <class TSerializeInformationFunc>
+static void DebugStringImpl(TStringBuilder& ret,
+ const TString& name,
+ const TReadSessionEvent::TDataReceivedEvent::IMessage& msg,
+ bool printData,
+ TSerializeInformationFunc serializeInformationFunc,
+ std::optional<ECodec> codec = std::nullopt)
+{
+ ret << name << " {";
+ try {
+ const TString& data = msg.GetData();
+ if (printData) {
+ ret << " Data: \"" << data << "\"";
+ } else {
+ ret << " Data: .." << data.size() << " bytes..";
+ }
+ } catch (...) {
+ ret << " DataDecompressionError: \"" << CurrentExceptionMessage() << "\"";
+ }
+ auto partitionSession = msg.GetPartitionSession();
+ ret << " Partition session id: " << partitionSession->GetPartitionSessionId()
+ << " Topic: \"" << partitionSession->GetTopicPath() << "\""
+ << " Partition: " << partitionSession->GetPartitionId();
+ if (codec) {
+ ret << " Codec: " << codec.value();
+ }
+ serializeInformationFunc(ret);
+ ret << " }";
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TDataReceivedEvent::TMessage
+
+TReadSessionEvent::TDataReceivedEvent::TMessage::TMessage(const TString& data,
+ std::exception_ptr decompressionException,
+ const TMessageInformation& information,
+ TPartitionSession::TPtr partitionSession)
+ : IMessage(data, partitionSession)
+ , DecompressionException(std::move(decompressionException))
+ , Information(information)
+{
+}
+
+const TString& TReadSessionEvent::TDataReceivedEvent::TMessage::GetData() const {
+ if (DecompressionException) {
+ std::rethrow_exception(DecompressionException);
+ }
+ return IMessage::GetData();
+}
+
+bool TReadSessionEvent::TDataReceivedEvent::TMessage::HasException() const {
+ return DecompressionException != nullptr;
+}
+
+ui64 TReadSessionEvent::TDataReceivedEvent::TMessage::GetOffset() const {
+ return Information.Offset;
+}
+
+const TString& TReadSessionEvent::TDataReceivedEvent::TMessage::GetProducerId() const {
+ return Information.ProducerId;
+}
+
+const TString& TReadSessionEvent::TDataReceivedEvent::TMessage::GetMessageGroupId() const {
+ return Information.MessageGroupId;
+}
+
+ui64 TReadSessionEvent::TDataReceivedEvent::TMessage::GetSeqNo() const {
+ return Information.SeqNo;
+}
+
+TInstant TReadSessionEvent::TDataReceivedEvent::TMessage::GetCreateTime() const {
+ return Information.CreateTime;
+}
+
+TInstant TReadSessionEvent::TDataReceivedEvent::TMessage::GetWriteTime() const {
+ return Information.WriteTime;
+}
+
+const TWriteSessionMeta::TPtr& TReadSessionEvent::TDataReceivedEvent::TMessage::GetMeta() const {
+ return Information.Meta;
+}
+
+void TReadSessionEvent::TDataReceivedEvent::TMessage::Commit() {
+ static_cast<NPersQueue::TPartitionStreamImpl<false>*>(PartitionSession.Get())
+ ->Commit(Information.Offset, Information.Offset + 1);
+}
+
+void TReadSessionEvent::TDataReceivedEvent::TMessage::DebugString(TStringBuilder& ret, bool printData) const {
+ DebugStringImpl(ret, "Message", *this, printData, [this](TStringBuilder& ret) {
+ DebugStringImpl(this->Information, ret);
+ });
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TDataReceivedEvent::TCompressedMessage
+
+TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::TCompressedMessage(ECodec codec,
+ const TString& data,
+ const TMessageInformation& information,
+ TPartitionSession::TPtr partitionSession)
+ : IMessage(data, partitionSession)
+ , Codec(codec)
+ , Information(information)
+{}
+
+
+ECodec TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetCodec() const {
+ return Codec;
+}
+
+ui64 TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetOffset() const {
+ return Information.Offset;
+}
+
+const TString& TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetProducerId() const {
+ return Information.ProducerId;
+}
+
+const TString& TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetMessageGroupId() const {
+ return Information.MessageGroupId;
+}
+
+ui64 TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetSeqNo() const {
+ return Information.SeqNo;
+}
+
+TInstant TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetCreateTime() const {
+ return Information.CreateTime;
+}
+
+TInstant TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetWriteTime() const {
+ return Information.WriteTime;
+}
+
+const TWriteSessionMeta::TPtr& TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetMeta() const {
+ return Information.Meta;
+}
+
+ui64 TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::GetUncompressedSize() const {
+ return Information.UncompressedSize;
+}
+
+void TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::Commit() {
+ static_cast<NPersQueue::TPartitionStreamImpl<false>*>(PartitionSession.Get())
+ ->Commit(Information.Offset, Information.Offset + 1);
+}
+
+void TReadSessionEvent::TDataReceivedEvent::TCompressedMessage::DebugString(TStringBuilder& ret, bool printData) const {
+ DebugStringImpl(
+ ret, "CompressedMessage", *this, printData,
+ [this](TStringBuilder& ret) { DebugStringImpl(this->Information, ret); }, Codec);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TDataReceivedEvent
+
+TReadSessionEvent::TDataReceivedEvent::TDataReceivedEvent(TVector<TMessage> messages,
+ TVector<TCompressedMessage> compressedMessages,
+ TPartitionSession::TPtr partitionSession)
+ : Messages(std::move(messages))
+ , CompressedMessages(std::move(compressedMessages))
+ , PartitionSession(std::move(partitionSession))
+{
+ for (size_t i = 0; i < GetMessagesCount(); ++i) {
+ auto [from, to] = GetMessageOffsetRange(*this, i);
+ if (OffsetRanges.empty() || OffsetRanges.back().second != from) {
+ OffsetRanges.emplace_back(from, to);
+ } else {
+ OffsetRanges.back().second = to;
+ }
+ }
+}
+
+void TReadSessionEvent::TDataReceivedEvent::Commit() {
+ for (auto [from, to] : OffsetRanges) {
+ static_cast<NPersQueue::TPartitionStreamImpl<false>*>(PartitionSession.Get())->Commit(from, to);
+ }
+}
+
+TString TReadSessionEvent::TDataReceivedEvent::DebugString(bool printData) const {
+ TStringBuilder ret;
+ ret << "DataReceived { PartitionSessionId: " << GetPartitionSession()->GetPartitionSessionId()
+ << " PartitionId: " << GetPartitionSession()->GetPartitionId();
+ for (const auto& message : Messages) {
+ ret << " ";
+ message.DebugString(ret, printData);
+ }
+ for (const auto& message : CompressedMessages) {
+ ret << " ";
+ message.DebugString(ret, printData);
+ }
+ ret << " }";
+ return std::move(ret);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TCommitOffsetAcknowledgementEvent
+
+TReadSessionEvent::TCommitOffsetAcknowledgementEvent::TCommitOffsetAcknowledgementEvent(TPartitionSession::TPtr partitionSession, ui64 committedOffset)
+ : PartitionSession(std::move(partitionSession))
+ , CommittedOffset(committedOffset)
+{
+}
+
+
+TString TReadSessionEvent::TCommitOffsetAcknowledgementEvent::DebugString() const {
+ return TStringBuilder() << "CommitAcknowledgement { PartitionSessionId: " << GetPartitionSession()->GetPartitionSessionId()
+ << " PartitionId: " << GetPartitionSession()->GetPartitionId()
+ << " CommittedOffset: " << GetCommittedOffset()
+ << " }";
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TStartPartitionSessionEvent
+
+TReadSessionEvent::TStartPartitionSessionEvent::TStartPartitionSessionEvent(TPartitionSession::TPtr partitionSession,
+ ui64 committedOffset, ui64 endOffset)
+ : PartitionSession(std::move(partitionSession))
+ , CommittedOffset(committedOffset)
+ , EndOffset(endOffset) {
+}
+
+void TReadSessionEvent::TStartPartitionSessionEvent::Confirm(TMaybe<ui64> readOffset, TMaybe<ui64> commitOffset) {
+ if (PartitionSession) {
+ static_cast<NPersQueue::TPartitionStreamImpl<false>*>(PartitionSession.Get())
+ ->ConfirmCreate(readOffset, commitOffset);
+ }
+}
+
+TString TReadSessionEvent::TStartPartitionSessionEvent::DebugString() const {
+ return TStringBuilder() << "CreatePartitionSession { PartitionSessionId: "
+ << GetPartitionSession()->GetPartitionSessionId()
+ << " TopicPath: " << GetPartitionSession()->GetTopicPath()
+ << " PartitionId: " << GetPartitionSession()->GetPartitionId()
+ << " CommittedOffset: " << GetCommittedOffset()
+ << " EndOffset: " << GetEndOffset() << " }";
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TStopPartitionSessionEvent
+
+TReadSessionEvent::TStopPartitionSessionEvent::TStopPartitionSessionEvent(TPartitionSession::TPtr partitionSession,
+ bool committedOffset)
+ : PartitionSession(std::move(partitionSession))
+ , CommittedOffset(committedOffset) {
+}
+
+void TReadSessionEvent::TStopPartitionSessionEvent::Confirm() {
+ if (PartitionSession) {
+ static_cast<NPersQueue::TPartitionStreamImpl<false>*>(PartitionSession.Get())->ConfirmDestroy();
+ }
+}
+
+TString TReadSessionEvent::TStopPartitionSessionEvent::DebugString() const {
+ return TStringBuilder() << "DestroyPartitionSession { PartitionSessionId: "
+ << GetPartitionSession()->GetPartitionSessionId()
+ << " PartitionId: " << GetPartitionSession()->GetPartitionId()
+ << " CommittedOffset: " << GetCommittedOffset() << " }";
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TPartitionSessionStatusEvent
+
+TReadSessionEvent::TPartitionSessionStatusEvent::TPartitionSessionStatusEvent(TPartitionSession::TPtr partitionSession,
+ ui64 committedOffset, ui64 readOffset,
+ ui64 endOffset,
+ TInstant writeTimeHighWatermark)
+ : PartitionSession(std::move(partitionSession))
+ , CommittedOffset(committedOffset)
+ , ReadOffset(readOffset)
+ , EndOffset(endOffset)
+ , WriteTimeHighWatermark(writeTimeHighWatermark) {
+}
+
+TString TReadSessionEvent::TPartitionSessionStatusEvent::DebugString() const {
+ return TStringBuilder() << "PartitionSessionStatus { PartitionSessionId: "
+ << GetPartitionSession()->GetPartitionSessionId()
+ << " PartitionId: " << GetPartitionSession()->GetPartitionId()
+ << " CommittedOffset: " << GetCommittedOffset() << " ReadOffset: " << GetReadOffset()
+ << " EndOffset: " << GetEndOffset()
+ << " WriteWatermark: " << GetWriteTimeHighWatermark() << " }";
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// NTopic::TReadSessionEvent::TPartitionSessionClosedEvent
+
+TReadSessionEvent::TPartitionSessionClosedEvent::TPartitionSessionClosedEvent(TPartitionSession::TPtr partitionSession, EReason reason)
+ : PartitionSession(std::move(partitionSession))
+ , Reason(reason)
+{
+}
+
+TString TReadSessionEvent::TPartitionSessionClosedEvent::DebugString() const {
+ return TStringBuilder() << "PartitionSessionClosed { PartitionSessionId: "
+ << GetPartitionSession()->GetPartitionSessionId()
+ << " PartitionId: " << GetPartitionSession()->GetPartitionId()
+ << " Reason: " << GetReason() << " }";
+}
+
+TString TSessionClosedEvent::DebugString() const {
+ return
+ TStringBuilder() << "SessionClosed { Status: " << GetStatus()
+ << " Issues: \"" << NPersQueue::IssuesSingleLineString(GetIssues())
+ << "\" }";
+}
+
+TString DebugString(const TReadSessionEvent::TEvent& event) {
+ return std::visit([](const auto& ev) { return ev.DebugString(); }, event);
+}
+
+} // namespace NYdb::NPersQueue
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp
index 473d473878..028271dadb 100644
--- a/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/topic.cpp
@@ -1,6 +1,8 @@
#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
#include <ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.h>
+#include <ydb/public/sdk/cpp/client/ydb_topic/impl/executor.h>
#include <ydb/public/sdk/cpp/client/impl/ydb_internal/table_helpers/helpers.h>
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h>
#include <ydb/library/persqueue/obfuscate/obfuscate.h>
@@ -32,6 +34,7 @@ TTopicDescription::TTopicDescription(Ydb::Topic::DescribeTopicResult&& result)
, RetentionStorageMb_(Proto_.retention_storage_mb() > 0 ? TMaybe<ui64>(Proto_.retention_storage_mb()) : Nothing())
, PartitionWriteSpeedBytesPerSecond_(Proto_.partition_write_speed_bytes_per_second())
, PartitionWriteBurstBytes_(Proto_.partition_write_burst_bytes())
+ , MeteringMode_(TProtoAccessor::FromProto(Proto_.metering_mode()))
{
Owner_ = Proto_.self().owner();
PermissionToSchemeEntry(Proto_.self().permissions(), &Permissions_);
@@ -51,6 +54,39 @@ TTopicDescription::TTopicDescription(Ydb::Topic::DescribeTopicResult&& result)
}
}
+TConsumer::TConsumer(const Ydb::Topic::Consumer& consumer)
+ : ConsumerName_(consumer.name())
+ , Important_(consumer.important())
+ , ReadFrom_(TInstant::Seconds(consumer.read_from().seconds()))
+{
+ for (const auto& codec : consumer.supported_codecs().codecs()) {
+ SupportedCodecs_.push_back((ECodec)codec);
+ }
+ for (const auto& pair : consumer.attributes()) {
+ Attributes_[pair.first] = pair.second;
+ }
+}
+
+const TString& TConsumer::GetConsumerName() const {
+ return ConsumerName_;
+}
+
+bool TConsumer::GetImportant() const {
+ return Important_;
+}
+
+const TInstant& TConsumer::GetReadFrom() const {
+ return ReadFrom_;
+}
+
+const TVector<ECodec>& TConsumer::GetSupportedCodecs() const {
+ return SupportedCodecs_;
+}
+
+const TMap<TString, TString>& TConsumer::GetAttributes() const {
+ return Attributes_;
+}
+
const TPartitioningSettings& TTopicDescription::GetPartitioningSettings() const {
return PartitioningSettings_;
}
@@ -83,6 +119,10 @@ ui64 TTopicDescription::GetPartitionWriteBurstBytes() const {
return PartitionWriteBurstBytes_;
}
+EMeteringMode TTopicDescription::GetMeteringMode() const {
+ return MeteringMode_;
+}
+
const TMap<TString, TString>& TTopicDescription::GetAttributes() const {
return Attributes_;
}
@@ -125,19 +165,6 @@ ui64 TPartitioningSettings::GetPartitionCountLimit() const {
return PartitionCountLimit_;
}
-TConsumer::TConsumer(const Ydb::Topic::Consumer& consumer)
- : ConsumerName_(consumer.name())
- , Important_(consumer.important())
- , ReadFrom_(TInstant::Seconds(consumer.read_from().seconds()))
-{
- for (const auto& codec : consumer.supported_codecs().codecs()) {
- SupportedCodecs_.push_back((ECodec)codec);
- }
- for (const auto& pair : consumer.attributes()) {
- Attributes_[pair.first] = pair.second;
- }
-}
-
TPartitionInfo::TPartitionInfo(const Ydb::Topic::DescribeTopicResult::PartitionInfo& partitionInfo)
: PartitionId_(partitionInfo.partition_id())
, Active_(partitionInfo.active())
@@ -169,4 +196,34 @@ TAsyncDescribeTopicResult TTopicClient::DescribeTopic(const TString& path, const
return Impl_->DescribeTopic(path, settings);
}
+IRetryPolicy::TPtr IRetryPolicy::GetDefaultPolicy() {
+ static IRetryPolicy::TPtr policy = GetExponentialBackoffPolicy();
+ return policy;
+}
+
+IRetryPolicy::TPtr IRetryPolicy::GetNoRetryPolicy() {
+ return ::IRetryPolicy<EStatus>::GetNoRetryPolicy();
+}
+
+IRetryPolicy::TPtr
+IRetryPolicy::GetExponentialBackoffPolicy(TDuration minDelay, TDuration minLongRetryDelay, TDuration maxDelay,
+ size_t maxRetries, TDuration maxTime, double scaleFactor,
+ std::function<ERetryErrorClass(EStatus)> customRetryClassFunction) {
+ return ::IRetryPolicy<EStatus>::GetExponentialBackoffPolicy(
+ customRetryClassFunction ? customRetryClassFunction : NYdb::NPersQueue::GetRetryErrorClass, minDelay,
+ minLongRetryDelay, maxDelay, maxRetries, maxTime, scaleFactor);
+}
+
+IRetryPolicy::TPtr
+IRetryPolicy::GetFixedIntervalPolicy(TDuration delay, TDuration longRetryDelay, size_t maxRetries, TDuration maxTime,
+ std::function<ERetryErrorClass(EStatus)> customRetryClassFunction) {
+ return ::IRetryPolicy<EStatus>::GetFixedIntervalPolicy(
+ customRetryClassFunction ? customRetryClassFunction : NYdb::NPersQueue::GetRetryErrorClass, delay,
+ longRetryDelay, maxRetries, maxTime);
+}
+
+std::shared_ptr<IReadSession> TTopicClient::CreateReadSession(const TReadSessionSettings& settings) {
+ return Impl_->CreateReadSession(settings);
+}
+
} // namespace NYdb::NTopic
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.cpp b/ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.cpp
new file mode 100644
index 0000000000..b18aab2530
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.cpp
@@ -0,0 +1,36 @@
+#include "topic_impl.h"
+
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/read_session.h>
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.h>
+
+#include "read_session.h"
+
+namespace NYdb::NTopic {
+
+std::shared_ptr<IReadSession> TTopicClient::TImpl::CreateReadSession(const TReadSessionSettings& settings) {
+ TMaybe<TReadSessionSettings> maybeSettings;
+ if (!settings.DecompressionExecutor_ || !settings.EventHandlers_.HandlersExecutor_) {
+ maybeSettings = settings;
+ with_lock (Lock) {
+ if (!settings.DecompressionExecutor_) {
+ maybeSettings->DecompressionExecutor(Settings.DefaultCompressionExecutor_);
+ }
+ if (!settings.EventHandlers_.HandlersExecutor_) {
+ maybeSettings->EventHandlers_.HandlersExecutor(Settings.DefaultHandlersExecutor_);
+ }
+ }
+ }
+ auto session = std::make_shared<TReadSession>(maybeSettings.GetOrElse(settings), shared_from_this(), Connections_, DbDriverState_);
+ session->Start();
+ return std::move(session);
+ // return std::make_shared<TDummyReadSession>(settings);
+}
+
+std::shared_ptr<TTopicClient::TImpl::IReadSessionConnectionProcessorFactory> TTopicClient::TImpl::CreateReadSessionConnectionProcessorFactory() {
+ using TService = Ydb::Topic::V1::TopicService;
+ using TRequest = Ydb::Topic::StreamReadMessage::FromClient;
+ using TResponse = Ydb::Topic::StreamReadMessage::FromServer;
+ return NPersQueue::CreateConnectionProcessorFactory<TService, TRequest, TResponse>(&TService::Stub::AsyncStreamRead, Connections_, DbDriverState_);
+}
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.h b/ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.h
index 524ca596c3..15589ab160 100644
--- a/ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.h
+++ b/ydb/public/sdk/cpp/client/ydb_topic/impl/topic_impl.h
@@ -5,8 +5,11 @@
#undef INCLUDE_YDB_INTERNAL_H
#include <ydb/public/sdk/cpp/client/ydb_common_client/impl/client.h>
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h>
+#include <ydb/public/sdk/cpp/client/ydb_topic/impl/executor.h>
+#include <ydb/public/sdk/cpp/client/ydb_proto/accessor.h>
-#include <ydb/public/api/grpc/draft/ydb_topic_v1.grpc.pb.h>
+#include <ydb/public/api/grpc/ydb_topic_v1.grpc.pb.h>
#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
namespace NYdb::NTopic {
@@ -68,6 +71,7 @@ public:
request.set_partition_write_speed_bytes_per_second(settings.PartitionWriteSpeedBytesPerSecond_);
request.set_partition_write_burst_bytes(settings.PartitionWriteBurstBytes_);
request.set_retention_storage_mb(settings.RetentionStorageMb_);
+ request.set_metering_mode(TProtoAccessor::GetProto(settings.MeteringMode_));
for (auto& pair : settings.Attributes_) {
(*request.mutable_attributes())[pair.first] = pair.second;
@@ -118,6 +122,9 @@ public:
if (settings.SetRetentionStorageMb_) {
request.set_set_retention_storage_mb(*settings.SetRetentionStorageMb_);
}
+ if (settings.SetMeteringMode_) {
+ request.set_set_metering_mode(TProtoAccessor::GetProto(*settings.SetMeteringMode_));
+ }
for (auto& pair : settings.AlterAttributes_) {
(*request.mutable_alter_attributes())[pair.first] = pair.second;
@@ -192,8 +199,22 @@ public:
return promise.GetFuture();
}
+ // Runtime API.
+ std::shared_ptr<IReadSession> CreateReadSession(const TReadSessionSettings& settings);
+
+ using IReadSessionConnectionProcessorFactory =
+ NYdb::NPersQueue::ISessionConnectionProcessorFactory<Ydb::Topic::StreamReadMessage::FromClient,
+ Ydb::Topic::StreamReadMessage::FromServer>;
+
+ std::shared_ptr<IReadSessionConnectionProcessorFactory> CreateReadSessionConnectionProcessorFactory();
+
+ NGrpc::IQueueClientContextPtr CreateContext() {
+ return Connections_->CreateContext();
+ }
+
private:
const TTopicClientSettings Settings;
+ TAdaptiveLock Lock;
};
} // namespace NYdb::NTopic
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/proto_accessor.cpp b/ydb/public/sdk/cpp/client/ydb_topic/proto_accessor.cpp
index b72ef3c262..b0e7353d25 100644
--- a/ydb/public/sdk/cpp/client/ydb_topic/proto_accessor.cpp
+++ b/ydb/public/sdk/cpp/client/ydb_topic/proto_accessor.cpp
@@ -4,5 +4,31 @@ namespace NYdb {
const Ydb::Topic::DescribeTopicResult& TProtoAccessor::GetProto(const NTopic::TTopicDescription& topicDescription) {
return topicDescription.GetProto();
}
+
+ Ydb::Topic::MeteringMode TProtoAccessor::GetProto(NTopic::EMeteringMode mode) {
+ switch (mode) {
+ case NTopic::EMeteringMode::Unspecified:
+ return Ydb::Topic::METERING_MODE_UNSPECIFIED;
+ case NTopic::EMeteringMode::RequestUnits:
+ return Ydb::Topic::METERING_MODE_REQUEST_UNITS;
+ case NTopic::EMeteringMode::ReservedCapacity:
+ return Ydb::Topic::METERING_MODE_RESERVED_CAPACITY;
+ case NTopic::EMeteringMode::Unknown:
+ return Ydb::Topic::METERING_MODE_UNSPECIFIED;
+ }
+ }
+
+ NTopic::EMeteringMode TProtoAccessor::FromProto(Ydb::Topic::MeteringMode mode) {
+ switch (mode) {
+ case Ydb::Topic::MeteringMode::METERING_MODE_UNSPECIFIED:
+ return NTopic::EMeteringMode::Unspecified;
+ case Ydb::Topic::MeteringMode::METERING_MODE_REQUEST_UNITS:
+ return NTopic::EMeteringMode::RequestUnits;
+ case Ydb::Topic::MeteringMode::METERING_MODE_RESERVED_CAPACITY:
+ return NTopic::EMeteringMode::ReservedCapacity;
+ default:
+ return NTopic::EMeteringMode::Unknown;
+ }
+ }
}// namespace NYdb
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/topic.h b/ydb/public/sdk/cpp/client/ydb_topic/topic.h
index fa1b659c10..db79186e70 100644
--- a/ydb/public/sdk/cpp/client/ydb_topic/topic.h
+++ b/ydb/public/sdk/cpp/client/ydb_topic/topic.h
@@ -1,6 +1,7 @@
#pragma once
-#include <ydb/public/api/grpc/draft/ydb_topic_v1.grpc.pb.h>
+#include <ydb/public/api/grpc/ydb_topic_v1.grpc.pb.h>
#include <ydb/public/sdk/cpp/client/ydb_driver/driver.h>
+#include <ydb/public/sdk/cpp/client/ydb_scheme/scheme.h>
#include <library/cpp/monlib/dynamic_counters/counters.h>
#include <library/cpp/logger/log.h>
@@ -35,6 +36,14 @@ enum class ECodec : ui32 {
CUSTOM = 10000,
};
+enum class EMeteringMode : ui32 {
+ Unspecified = 0,
+ ReservedCapacity = 1,
+ RequestUnits = 2,
+
+ Unknown = std::numeric_limits<int>::max(),
+};
+
class TConsumer {
public:
@@ -114,11 +123,14 @@ public:
const TVector<TConsumer>& GetConsumers() const;
+ EMeteringMode GetMeteringMode() const;
+
void SerializeTo(Ydb::Topic::CreateTopicRequest& request) const;
private:
const Ydb::Topic::DescribeTopicResult& GetProto() const;
+
const Ydb::Topic::DescribeTopicResult Proto_;
TVector<TPartitionInfo> Partitions_;
TVector<ECodec> SupportedCodecs_;
@@ -127,6 +139,7 @@ private:
TMaybe<ui64> RetentionStorageMb_;
ui64 PartitionWriteSpeedBytesPerSecond_;
ui64 PartitionWriteBurstBytes_;
+ EMeteringMode MeteringMode_;
TMap<TString, TString> Attributes_;
TVector<TConsumer> Consumers_;
@@ -159,7 +172,7 @@ public:
{ }
TAlterAttributesBuilderImpl& Alter(const TString& key, const TString& value) {
- AlterAttributes_[key] = value;
+ Parent_.AlterAttributes_[key] = value;
return *this;
}
@@ -175,7 +188,6 @@ public:
private:
TSettings& Parent_;
- THashMap<TString, TString> AlterAttributes_;
};
@@ -285,6 +297,7 @@ struct TCreateTopicSettings : public TOperationRequestSettings<TCreateTopicSetti
FLUENT_SETTING_VECTOR(ECodec, SupportedCodecs);
FLUENT_SETTING_DEFAULT(ui64, RetentionStorageMb, 0);
+ FLUENT_SETTING_DEFAULT(EMeteringMode, MeteringMode, EMeteringMode::Unspecified);
FLUENT_SETTING_DEFAULT(ui64, PartitionWriteSpeedBytesPerSecond, 0);
FLUENT_SETTING_DEFAULT(ui64, PartitionWriteBurstBytes, 0);
@@ -352,6 +365,8 @@ struct TAlterTopicSettings : public TOperationRequestSettings<TAlterTopicSetting
FLUENT_SETTING_OPTIONAL(ui64, SetPartitionWriteSpeedBytesPerSecond);
FLUENT_SETTING_OPTIONAL(ui64, SetPartitionWriteBurstBytes);
+ FLUENT_SETTING_OPTIONAL(EMeteringMode, SetMeteringMode);
+
FLUENT_SETTING_VECTOR(TConsumerSettings<TAlterTopicSettings>, AddConsumers);
FLUENT_SETTING_VECTOR(TString, DropConsumers);
FLUENT_SETTING_VECTOR(TAlterConsumerSettings, AlterConsumers);
@@ -405,10 +420,752 @@ struct TDropTopicSettings : public TOperationRequestSettings<TDropTopicSettings>
// Settings for describe resource request.
struct TDescribeTopicSettings : public TOperationRequestSettings<TDescribeTopicSettings> {};
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//! Session metainformation.
+struct TWriteSessionMeta: public TThrRefBase {
+ using TPtr = TIntrusivePtr<TWriteSessionMeta>;
+
+ //! User defined fields.
+ THashMap<TString, TString> Fields;
+};
+
+//! Event that is sent to client during session destruction.
+struct TSessionClosedEvent: public TStatus {
+ using TStatus::TStatus;
+
+ TString DebugString() const;
+};
+
+struct TReaderCounters: public TThrRefBase {
+ using TSelf = TReaderCounters;
+ using TPtr = TIntrusivePtr<TSelf>;
+
+ TReaderCounters() = default;
+ explicit TReaderCounters(const TIntrusivePtr<::NMonitoring::TDynamicCounters>& counters);
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr Errors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr CurrentSessionLifetimeMs;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MessagesRead;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesReadCompressed;
+
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightUncompressed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightCompressed;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflightTotal;
+ ::NMonitoring::TDynamicCounters::TCounterPtr MessagesInflight;
+
+ //! Histograms reporting % usage of memory limit in time.
+ //! Provides a histogram looking like: 10% : 100ms, 20%: 300ms, ... 50%: 200ms, ... 100%: 50ms
+ //! Which means < 10% memory usage was observed for 100ms during the period and 50% usage was observed for 200ms.
+ //! Used to monitor if the read session successfully deals with data flow provided. Larger values in higher buckets
+ //! mean that read session is close to overflow (or being overflown) for major periods of time.
+ //!
+ //! Total memory usage.
+ ::NMonitoring::THistogramPtr TotalBytesInflightUsageByTime;
+ //! Memory usage by messages waiting that are ready to be received by user.
+ ::NMonitoring::THistogramPtr UncompressedBytesInflightUsageByTime;
+ //! Memory usage by compressed messages pending for decompression.
+ ::NMonitoring::THistogramPtr CompressedBytesInflightUsageByTime;
+};
+
+//! Partition session.
+struct TPartitionSession: public TThrRefBase {
+ using TPtr = TIntrusivePtr<TPartitionSession>;
+
+public:
+ //! Request partition session status.
+ //! Result will come to TPartitionSessionStatusEvent.
+ virtual void RequestStatus() = 0;
+
+ //!
+ //! Properties.
+ //!
+
+ //! Unique identifier of partition session.
+ //! It is unique within one read session.
+ i64 GetPartitionSessionId() const {
+ return PartitionSessionId;
+ }
+
+ //! Topic path.
+ const TString& GetTopicPath() const {
+ return TopicPath;
+ }
+
+ //! Partition id.
+ i64 GetPartitionId() const {
+ return PartitionId;
+ }
+
+protected:
+ i64 PartitionSessionId;
+ TString TopicPath;
+ i64 PartitionId;
+};
+
+//! Events for read session.
+struct TReadSessionEvent {
+ //! Event with new data.
+ //! Contains batch of messages from single partition session.
+ struct TDataReceivedEvent {
+ struct TMessageInformation {
+ TMessageInformation(ui64 offset,
+ TString producerId,
+ ui64 seqNo,
+ TInstant createTime,
+ TInstant writeTime,
+ TWriteSessionMeta::TPtr meta,
+ ui64 uncompressedSize,
+ TString messageGroupId);
+ ui64 Offset;
+ TString ProducerId;
+ ui64 SeqNo;
+ TInstant CreateTime;
+ TInstant WriteTime;
+ TWriteSessionMeta::TPtr Meta;
+ ui64 UncompressedSize;
+ TString MessageGroupId;
+ };
+
+ class IMessage {
+ public:
+ IMessage(const TString& data, TPartitionSession::TPtr partitionSession);
+
+ virtual ~IMessage() = default;
+
+ virtual const TString& GetData() const;
+
+ //! Partition session. Same as in batch.
+ const TPartitionSession::TPtr& GetPartitionSession() const;
+
+ virtual void Commit() = 0;
+
+ TString DebugString(bool printData = false) const;
+ virtual void DebugString(TStringBuilder& ret, bool printData = false) const = 0;
+
+ protected:
+ TString Data;
+
+ TPartitionSession::TPtr PartitionSession;
+ };
+
+ //! Single message.
+ struct TMessage: public IMessage {
+ TMessage(const TString& data, std::exception_ptr decompressionException,
+ const TMessageInformation& information, TPartitionSession::TPtr partitionSession);
+
+ //! User data.
+ //! Throws decompressor exception if decompression failed.
+ const TString& GetData() const override;
+
+ bool HasException() const;
+
+ //! Message offset.
+ ui64 GetOffset() const;
+
+ //! Producer id.
+ const TString& GetProducerId() const;
+
+ //! Message group id.
+ const TString& GetMessageGroupId() const;
+
+ //! Sequence number.
+ ui64 GetSeqNo() const;
+
+ //! Message creation timestamp.
+ TInstant GetCreateTime() const;
+
+ //! Message write timestamp.
+ TInstant GetWriteTime() const;
+
+ //! Metainfo.
+ const TWriteSessionMeta::TPtr& GetMeta() const;
+
+ //! Commits single message.
+ void Commit() override;
+
+ using IMessage::DebugString;
+ void DebugString(TStringBuilder& ret, bool printData = false) const override;
+
+ private:
+ std::exception_ptr DecompressionException;
+ TMessageInformation Information;
+ };
+
+ struct TCompressedMessage: public IMessage {
+ TCompressedMessage(ECodec codec, const TString& data, const TMessageInformation& information,
+ TPartitionSession::TPtr partitionSession);
+
+ virtual ~TCompressedMessage() {
+ }
+
+ //! Message codec
+ ECodec GetCodec() const;
+
+ //! Message offset.
+ ui64 GetOffset() const;
+
+ //! Producer id
+ const TString& GetProducerId() const;
+
+ //! Message group id.
+ const TString& GetMessageGroupId() const;
+
+ //! Sequence number.
+ ui64 GetSeqNo() const;
+
+ //! Message creation timestamp.
+ TInstant GetCreateTime() const;
+
+ //! Message write timestamp.
+ TInstant GetWriteTime() const;
+
+ //! Metainfo.
+ const TWriteSessionMeta::TPtr& GetMeta() const;
+
+ //! Uncompressed size.
+ ui64 GetUncompressedSize() const;
+
+ //! Commits all offsets in compressed message.
+ void Commit() override;
+
+ using IMessage::DebugString;
+ void DebugString(TStringBuilder& ret, bool printData = false) const override;
+
+ private:
+ ECodec Codec;
+ TMessageInformation Information;
+ };
+
+ public:
+ TDataReceivedEvent(TVector<TMessage> messages, TVector<TCompressedMessage> compressedMessages,
+ TPartitionSession::TPtr partitionSession);
+
+ //! Partition session.
+ const TPartitionSession::TPtr& GetPartitionSession() const {
+ return PartitionSession;
+ }
+
+ bool HasCompressedMessages() const {
+ return !CompressedMessages.empty();
+ }
+
+ size_t GetMessagesCount() const {
+ return Messages.size() + CompressedMessages.size();
+ }
+
+ //! Get messages.
+ TVector<TMessage>& GetMessages() {
+ CheckMessagesFilled(false);
+ return Messages;
+ }
+
+ const TVector<TMessage>& GetMessages() const {
+ CheckMessagesFilled(false);
+ return Messages;
+ }
+
+ //! Get compressed messages.
+ TVector<TCompressedMessage>& GetCompressedMessages() {
+ CheckMessagesFilled(true);
+ return CompressedMessages;
+ }
+
+ const TVector<TCompressedMessage>& GetCompressedMessages() const {
+ CheckMessagesFilled(true);
+ return CompressedMessages;
+ }
+
+ //! Commits all messages in batch.
+ void Commit();
+
+ TString DebugString(bool printData = false) const;
+
+ private:
+ void CheckMessagesFilled(bool compressed) const {
+ Y_VERIFY(!Messages.empty() || !CompressedMessages.empty());
+ if (compressed && CompressedMessages.empty()) {
+ ythrow yexception() << "cannot get compressed messages, parameter decompress=true for read session";
+ }
+ if (!compressed && Messages.empty()) {
+ ythrow yexception() << "cannot get decompressed messages, parameter decompress=false for read session";
+ }
+ }
+
+ private:
+ TVector<TMessage> Messages;
+ TVector<TCompressedMessage> CompressedMessages;
+ TPartitionSession::TPtr PartitionSession;
+ std::vector<std::pair<ui64, ui64>> OffsetRanges;
+ };
+
+ //! Acknowledgement for commit request.
+ struct TCommitOffsetAcknowledgementEvent {
+ TCommitOffsetAcknowledgementEvent(TPartitionSession::TPtr partitionSession, ui64 committedOffset);
+
+ //! Partition session.
+ const TPartitionSession::TPtr& GetPartitionSession() const {
+ return PartitionSession;
+ }
+
+ //! Committed offset.
+ //! This means that from now the first available
+ //! message offset in current partition
+ //! for current consumer is this offset.
+ //! All messages before are committed and futher never be available.
+ ui64 GetCommittedOffset() const {
+ return CommittedOffset;
+ }
+
+ TString DebugString() const;
+
+ private:
+ TPartitionSession::TPtr PartitionSession;
+ ui64 CommittedOffset;
+ };
+
+ //! Server command for creating and starting partition session.
+ struct TStartPartitionSessionEvent {
+ explicit TStartPartitionSessionEvent(TPartitionSession::TPtr, ui64 committedOffset, ui64 endOffset);
+
+ const TPartitionSession::TPtr& GetPartitionSession() const {
+ return PartitionSession;
+ }
+
+ //! Current committed offset in partition session.
+ ui64 GetCommittedOffset() const {
+ return CommittedOffset;
+ }
+
+ //! Offset of first not existing message in partition session.
+ ui64 GetEndOffset() const {
+ return EndOffset;
+ }
+
+ //! Confirm partition session creation.
+ //! This signals that user is ready to receive data from this partition session.
+ //! If maybe is empty then no rewinding
+ void Confirm(TMaybe<ui64> readOffset = Nothing(), TMaybe<ui64> commitOffset = Nothing());
+
+ TString DebugString() const;
+
+ private:
+ TPartitionSession::TPtr PartitionSession;
+ ui64 CommittedOffset;
+ ui64 EndOffset;
+ };
+
+ //! Server command for stopping and destroying partition session.
+ //! Server can destroy partition session gracefully
+ //! for rebalancing among all topic clients.
+ struct TStopPartitionSessionEvent {
+ TStopPartitionSessionEvent(TPartitionSession::TPtr partitionSession, bool committedOffset);
+
+ const TPartitionSession::TPtr& GetPartitionSession() const {
+ return PartitionSession;
+ }
+
+ //! Last offset of the partition session that was committed.
+ ui64 GetCommittedOffset() const {
+ return CommittedOffset;
+ }
+
+ //! Confirm partition session destruction.
+ //! Confirm has no effect if TPartitionSessionClosedEvent for same partition session with is received.
+ void Confirm();
+
+ TString DebugString() const;
+
+ private:
+ TPartitionSession::TPtr PartitionSession;
+ ui64 CommittedOffset;
+ };
+
+ //! Status for partition session requested via TPartitionSession::RequestStatus()
+ struct TPartitionSessionStatusEvent {
+ TPartitionSessionStatusEvent(TPartitionSession::TPtr partitionSession, ui64 committedOffset, ui64 readOffset,
+ ui64 endOffset, TInstant writeTimeHighWatermark);
+
+ const TPartitionSession::TPtr& GetPartitionSession() const {
+ return PartitionSession;
+ }
+
+ //! Committed offset.
+ ui64 GetCommittedOffset() const {
+ return CommittedOffset;
+ }
+
+ //! Offset of next message (that is not yet read by session).
+ ui64 GetReadOffset() const {
+ return ReadOffset;
+ }
+
+ //! Offset of first not existing message in partition.
+ ui64 GetEndOffset() const {
+ return EndOffset;
+ }
+
+ //! Write time high watermark.
+ //! Write timestamp of next message written to this partition will be no less than this.
+ TInstant GetWriteTimeHighWatermark() const {
+ return WriteTimeHighWatermark;
+ }
+
+ TString DebugString() const;
+
+ private:
+ TPartitionSession::TPtr PartitionSession;
+ ui64 CommittedOffset = 0;
+ ui64 ReadOffset = 0;
+ ui64 EndOffset = 0;
+ TInstant WriteTimeHighWatermark;
+ };
+
+ //! Event that signals user about
+ //! partition session death.
+ //! This could be after graceful stop of partition session
+ //! or when connection with partition was lost.
+ struct TPartitionSessionClosedEvent {
+ enum class EReason {
+ StopConfirmedByUser,
+ Lost,
+ ConnectionLost,
+ };
+
+ public:
+ TPartitionSessionClosedEvent(TPartitionSession::TPtr partitionSession, EReason reason);
+
+ const TPartitionSession::TPtr& GetPartitionSession() const {
+ return PartitionSession;
+ }
+
+ EReason GetReason() const {
+ return Reason;
+ }
+
+ TString DebugString() const;
+
+ private:
+ TPartitionSession::TPtr PartitionSession;
+ EReason Reason;
+ };
+
+ using TEvent = std::variant<TDataReceivedEvent,
+ TCommitOffsetAcknowledgementEvent,
+ TStartPartitionSessionEvent,
+ TStopPartitionSessionEvent,
+ TPartitionSessionStatusEvent,
+ TPartitionSessionClosedEvent,
+ TSessionClosedEvent>;
+};
+
+//! Set of offsets to commit.
+//! Class that could store offsets in order to commit them later.
+//! This class is not thread safe.
+class TDeferredCommit {
+public:
+ //! Add message to set.
+ void Add(const TReadSessionEvent::TDataReceivedEvent::TMessage& message);
+
+ //! Add all messages from dataReceivedEvent to set.
+ void Add(const TReadSessionEvent::TDataReceivedEvent& dataReceivedEvent);
+
+ //! Add offsets range to set.
+ void Add(const TPartitionSession::TPtr& partitionSession, ui64 startOffset, ui64 endOffset);
+
+ //! Add offset to set.
+ void Add(const TPartitionSession::TPtr& partitionSession, ui64 offset);
+
+ //! Commit all added offsets.
+ void Commit();
+
+ TDeferredCommit();
+ TDeferredCommit(const TDeferredCommit&) = delete;
+ TDeferredCommit(TDeferredCommit&&);
+ TDeferredCommit& operator=(const TDeferredCommit&) = delete;
+ TDeferredCommit& operator=(TDeferredCommit&&);
+
+ ~TDeferredCommit();
+
+private:
+ class TImpl;
+ THolder<TImpl> Impl;
+};
+
+//! Event debug string.
+TString DebugString(const TReadSessionEvent::TEvent& event);
+
+//! Retry policy.
+//! Calculates delay before next retry.
+//! Has several default implementations:
+//! - exponential backoff policy;
+//! - retries with fixed interval;
+//! - no retries.
+
+struct IRetryPolicy: ::IRetryPolicy<EStatus> {
+ //!
+ //! Default implementations.
+ //!
+
+ static TPtr GetDefaultPolicy(); // Exponential backoff with infinite retry attempts.
+ static TPtr GetNoRetryPolicy(); // Denies all kind of retries.
+
+ //! Randomized exponential backoff policy.
+ static TPtr GetExponentialBackoffPolicy(
+ TDuration minDelay = TDuration::MilliSeconds(10),
+ // Delay for statuses that require waiting before retry (such as OVERLOADED).
+ TDuration minLongRetryDelay = TDuration::MilliSeconds(200), TDuration maxDelay = TDuration::Seconds(30),
+ size_t maxRetries = std::numeric_limits<size_t>::max(), TDuration maxTime = TDuration::Max(),
+ double scaleFactor = 2.0, std::function<ERetryErrorClass(EStatus)> customRetryClassFunction = {});
+
+ //! Randomized fixed interval policy.
+ static TPtr GetFixedIntervalPolicy(TDuration delay = TDuration::MilliSeconds(100),
+ // Delay for statuses that require waiting before retry (such as OVERLOADED).
+ TDuration longRetryDelay = TDuration::MilliSeconds(300),
+ size_t maxRetries = std::numeric_limits<size_t>::max(),
+ TDuration maxTime = TDuration::Max(),
+ std::function<ERetryErrorClass(EStatus)> customRetryClassFunction = {});
+};
+
+class IExecutor: public TThrRefBase {
+public:
+ using TPtr = TIntrusivePtr<IExecutor>;
+ using TFunction = std::function<void()>;
+
+ // Is executor asynchronous.
+ virtual bool IsAsync() const = 0;
+
+ // Post function to execute.
+ virtual void Post(TFunction&& f) = 0;
+
+ // Start method.
+ // This method is idempotent.
+ // It can be called many times. Only the first one has effect.
+ void Start() {
+ with_lock(StartLock) {
+ if (!Started) {
+ DoStart();
+ Started = true;
+ }
+ }
+ }
+
+private:
+ virtual void DoStart() = 0;
+
+private:
+ bool Started = false;
+ TAdaptiveLock StartLock;
+};
+IExecutor::TPtr CreateThreadPoolExecutorAdapter(
+ std::shared_ptr<IThreadPool> threadPool); // Thread pool is expected to have been started.
+IExecutor::TPtr CreateThreadPoolExecutor(size_t threads);
+
+using TSessionClosedHandler = std::function<void(const TSessionClosedEvent&)>;
+
+//! Read settings for single topic.
+struct TTopicReadSettings {
+ using TSelf = TTopicReadSettings;
+
+ TTopicReadSettings() = default;
+ TTopicReadSettings(const TTopicReadSettings&) = default;
+ TTopicReadSettings(TTopicReadSettings&&) = default;
+ TTopicReadSettings(const TString& path) {
+ Path(path);
+ }
+
+ TTopicReadSettings& operator=(const TTopicReadSettings&) = default;
+ TTopicReadSettings& operator=(TTopicReadSettings&&) = default;
+
+ //! Path of topic to read.
+ FLUENT_SETTING(TString, Path);
+
+ //! Start reading from this timestamp.
+ FLUENT_SETTING_OPTIONAL(TInstant, ReadFromTimestamp);
+
+ //! Partition ids to read.
+ //! 0-based.
+ FLUENT_SETTING_VECTOR(ui64, PartitionIds);
+
+ //! Max message time lag. All messages older that now - MaxLag will be ignored.
+ FLUENT_SETTING_OPTIONAL(TDuration, MaxLag);
+};
+
+//! Settings for read session.
+struct TReadSessionSettings: public TRequestSettings<TReadSessionSettings> {
+ using TSelf = TReadSessionSettings;
+
+ struct TEventHandlers {
+ using TSelf = TEventHandlers;
+
+ //! Set simple handler with data processing and also
+ //! set other handlers with default behaviour.
+ //! They automatically commit data after processing
+ //! and confirm partition session events.
+ //!
+ //! Sets the following handlers:
+ //! DataReceivedHandler: sets DataReceivedHandler to handler that calls dataHandler and (if
+ //! commitDataAfterProcessing is set) then calls Commit(). CommitAcknowledgementHandler to handler that does
+ //! nothing. CreatePartitionSessionHandler to handler that confirms event. StopPartitionSessionHandler to
+ //! handler that confirms event. PartitionSessionStatusHandler to handler that does nothing.
+ //! PartitionSessionClosedHandler to handler that does nothing.
+ //!
+ //! dataHandler: handler of data event.
+ //! commitDataAfterProcessing: automatically commit data after calling of dataHandler.
+ //! gracefulReleaseAfterCommit: wait for commit acknowledgements for all inflight data before confirming
+ //! partition session destroy.
+ TSelf& SimpleDataHandlers(std::function<void(TReadSessionEvent::TDataReceivedEvent&)> dataHandler,
+ bool commitDataAfterProcessing = false, bool gracefulStopAfterCommit = true);
+
+ //! Function to handle data events.
+ //! If this handler is set, data events will be handled by handler,
+ //! otherwise sent to TReadSession::GetEvent().
+ //! Default value is empty function (not set).
+ FLUENT_SETTING(std::function<void(TReadSessionEvent::TDataReceivedEvent&)>, DataReceivedHandler);
+
+ //! Function to handle commit ack events.
+ //! If this handler is set, commit ack events will be handled by handler,
+ //! otherwise sent to TReadSession::GetEvent().
+ //! Default value is empty function (not set).
+ FLUENT_SETTING(std::function<void(TReadSessionEvent::TCommitOffsetAcknowledgementEvent&)>,
+ CommitOffsetAcknowledgementHandler);
+
+ //! Function to handle start partition session events.
+ //! If this handler is set, create partition session events will be handled by handler,
+ //! otherwise sent to TReadSession::GetEvent().
+ //! Default value is empty function (not set).
+ FLUENT_SETTING(std::function<void(TReadSessionEvent::TStartPartitionSessionEvent&)>,
+ StartPartitionSessionHandler);
+
+ //! Function to handle stop partition session events.
+ //! If this handler is set, destroy partition session events will be handled by handler,
+ //! otherwise sent to TReadSession::GetEvent().
+ //! Default value is empty function (not set).
+ FLUENT_SETTING(std::function<void(TReadSessionEvent::TStopPartitionSessionEvent&)>,
+ StopPartitionSessionHandler);
+
+ //! Function to handle partition session status events.
+ //! If this handler is set, partition session status events will be handled by handler,
+ //! otherwise sent to TReadSession::GetEvent().
+ //! Default value is empty function (not set).
+ FLUENT_SETTING(std::function<void(TReadSessionEvent::TPartitionSessionStatusEvent&)>,
+ PartitionSessionStatusHandler);
+
+ //! Function to handle partition session closed events.
+ //! If this handler is set, partition session closed events will be handled by handler,
+ //! otherwise sent to TReadSession::GetEvent().
+ //! Default value is empty function (not set).
+ FLUENT_SETTING(std::function<void(TReadSessionEvent::TPartitionSessionClosedEvent&)>,
+ PartitionSessionClosedHandler);
+
+ //! Function to handle session closed events.
+ //! If this handler is set, close session events will be handled by handler
+ //! and then sent to TReadSession::GetEvent().
+ //! Default value is empty function (not set).
+ FLUENT_SETTING(TSessionClosedHandler, SessionClosedHandler);
+
+ //! Function to handle all event types.
+ //! If event with current type has no handler for this type of event,
+ //! this handler (if specified) will be used.
+ //! If this handler is not specified, event can be received with TReadSession::GetEvent() method.
+ FLUENT_SETTING(std::function<void(TReadSessionEvent::TEvent&)>, CommonHandler);
+
+ //! Executor for handlers.
+ //! If not set, default single threaded executor will be used.
+ FLUENT_SETTING(IExecutor::TPtr, HandlersExecutor);
+ };
+
+ //! Consumer.
+ FLUENT_SETTING(TString, ConsumerName);
+
+ //! Topics.
+ FLUENT_SETTING_VECTOR(TTopicReadSettings, Topics);
+
+ //! Maximum memory usage for read session.
+ FLUENT_SETTING_DEFAULT(size_t, MaxMemoryUsageBytes, 100_MB);
+
+ //! Max message time lag. All messages older that now - MaxLag will be ignored.
+ FLUENT_SETTING_OPTIONAL(TDuration, MaxLag);
+
+ //! Start reading from this timestamp.
+ FLUENT_SETTING_OPTIONAL(TInstant, ReadFromTimestamp);
+
+ //! Policy for reconnections.
+ //! IRetryPolicy::GetDefaultPolicy() if null (not set).
+ FLUENT_SETTING(IRetryPolicy::TPtr, RetryPolicy);
+
+ //! Event handlers.
+ //! See description in TEventHandlers class.
+ FLUENT_SETTING(TEventHandlers, EventHandlers);
+
+ //! Decompress messages
+ FLUENT_SETTING_DEFAULT(bool, Decompress, true);
+
+ //! Executor for decompression tasks.
+ //! If not set, default executor will be used.
+ FLUENT_SETTING(IExecutor::TPtr, DecompressionExecutor);
+
+ //! Counters.
+ //! If counters are not provided explicitly,
+ //! they will be created inside session (without link with parent counters).
+ FLUENT_SETTING(TReaderCounters::TPtr, Counters);
+
+ FLUENT_SETTING_DEFAULT(TDuration, ConnectTimeout, TDuration::Seconds(30));
+
+ //! Log.
+ FLUENT_SETTING_OPTIONAL(TLog, Log);
+};
+
+class IReadSession {
+public:
+ //! Main reader loop.
+ //! Wait for next reader event.
+ virtual NThreading::TFuture<void> WaitEvent() = 0;
+
+ //! Main reader loop.
+ //! Get read session events.
+ //! Blocks until event occurs if "block" is set.
+ //!
+ //! maxEventsCount: maximum events count in batch.
+ //! maxByteSize: total size limit of data messages in batch.
+ //! block: block until event occurs.
+ //!
+ //! If maxEventsCount is not specified,
+ //! read session chooses event batch size automatically.
+ virtual TVector<TReadSessionEvent::TEvent> GetEvents(bool block = false, TMaybe<size_t> maxEventsCount = Nothing(),
+ size_t maxByteSize = std::numeric_limits<size_t>::max()) = 0;
+
+ //! Get single event.
+ virtual TMaybe<TReadSessionEvent::TEvent> GetEvent(bool block = false,
+ size_t maxByteSize = std::numeric_limits<size_t>::max()) = 0;
+
+ //! Close read session.
+ //! Waits for all commit acknowledgments to arrive.
+ //! Force close after timeout.
+ //! This method is blocking.
+ //! When session is closed,
+ //! TSessionClosedEvent arrives.
+ virtual bool Close(TDuration timeout = TDuration::Max()) = 0;
+
+ //! Reader counters with different stats (see TReaderConuters).
+ virtual TReaderCounters::TPtr GetCounters() const = 0;
+
+ //! Get unique identifier of read session.
+ virtual TString GetSessionId() const = 0;
+
+ virtual ~IReadSession() = default;
+};
struct TTopicClientSettings : public TCommonClientSettingsBase<TTopicClientSettings> {
using TSelf = TTopicClientSettings;
+ //! Default executor for compression tasks.
+ FLUENT_SETTING_DEFAULT(IExecutor::TPtr, DefaultCompressionExecutor, CreateThreadPoolExecutor(2));
+
+ //! Default executor for callbacks.
+ FLUENT_SETTING_DEFAULT(IExecutor::TPtr, DefaultHandlersExecutor, CreateThreadPoolExecutor(1));
};
// Topic client.
@@ -430,6 +1187,9 @@ public:
// Describe settings of topic.
TAsyncDescribeTopicResult DescribeTopic(const TString& path, const TDescribeTopicSettings& = {});
+ //! Create read session.
+ std::shared_ptr<IReadSession> CreateReadSession(const TReadSessionSettings& settings);
+
private:
std::shared_ptr<TImpl> Impl_;
};
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..2f5c02c216
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.darwin.txt
@@ -0,0 +1,56 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(ydb-public-sdk-cpp-client-ydb_topic-ut)
+target_compile_options(ydb-public-sdk-cpp-client-ydb_topic-ut PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+)
+target_include_directories(ydb-public-sdk-cpp-client-ydb_topic-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic
+)
+target_link_libraries(ydb-public-sdk-cpp-client-ydb_topic-ut PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ library-cpp-cpuid_check
+ cpp-testing-unittest_main
+ cpp-client-ydb_topic
+ cpp-testing-gmock_in_unittest
+ ydb-core-testlib
+ public-lib-json_value
+ public-lib-yson_value
+ cpp-client-ydb_driver
+ cpp-client-ydb_persqueue_core
+ client-ydb_persqueue_core-impl
+ ydb_persqueue_core-ut-ut_utils
+ client-ydb_persqueue_public-codecs
+ client-ydb_topic-impl
+)
+target_link_options(ydb-public-sdk-cpp-client-ydb_topic-ut PRIVATE
+ -Wl,-no_deduplicate
+ -Wl,-sdk_version,10.15
+ -fPIC
+ -fPIC
+ -framework
+ CoreFoundation
+)
+target_sources(ydb-public-sdk-cpp-client-ydb_topic-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/ut/basic_usage_ut.cpp
+)
+add_test(
+ NAME
+ ydb-public-sdk-cpp-client-ydb_topic-ut
+ COMMAND
+ ydb-public-sdk-cpp-client-ydb_topic-ut
+ --print-before-suite
+ --print-before-test
+ --fork-tests
+ --print-times
+ --show-fails
+)
+vcs_info(ydb-public-sdk-cpp-client-ydb_topic-ut)
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt
new file mode 100644
index 0000000000..7e0aedf76e
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.linux.txt
@@ -0,0 +1,60 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(ydb-public-sdk-cpp-client-ydb_topic-ut)
+target_compile_options(ydb-public-sdk-cpp-client-ydb_topic-ut PRIVATE
+ -DUSE_CURRENT_UDF_ABI_VERSION
+)
+target_include_directories(ydb-public-sdk-cpp-client-ydb_topic-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic
+)
+target_link_libraries(ydb-public-sdk-cpp-client-ydb_topic-ut PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ cpp-malloc-tcmalloc
+ libs-tcmalloc-no_percpu_cache
+ library-cpp-cpuid_check
+ cpp-testing-unittest_main
+ cpp-client-ydb_topic
+ cpp-testing-gmock_in_unittest
+ ydb-core-testlib
+ public-lib-json_value
+ public-lib-yson_value
+ cpp-client-ydb_driver
+ cpp-client-ydb_persqueue_core
+ client-ydb_persqueue_core-impl
+ ydb_persqueue_core-ut-ut_utils
+ client-ydb_persqueue_public-codecs
+ client-ydb_topic-impl
+)
+target_link_options(ydb-public-sdk-cpp-client-ydb_topic-ut PRIVATE
+ -ldl
+ -lrt
+ -Wl,--no-as-needed
+ -fPIC
+ -fPIC
+ -lpthread
+ -lrt
+ -ldl
+)
+target_sources(ydb-public-sdk-cpp-client-ydb_topic-ut PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/client/ydb_topic/ut/basic_usage_ut.cpp
+)
+add_test(
+ NAME
+ ydb-public-sdk-cpp-client-ydb_topic-ut
+ COMMAND
+ ydb-public-sdk-cpp-client-ydb_topic-ut
+ --print-before-suite
+ --print-before-test
+ --fork-tests
+ --print-times
+ --show-fails
+)
+vcs_info(ydb-public-sdk-cpp-client-ydb_topic-ut)
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/ut/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/ydb/public/sdk/cpp/client/ydb_topic/ut/basic_usage_ut.cpp b/ydb/public/sdk/cpp/client/ydb_topic/ut/basic_usage_ut.cpp
new file mode 100644
index 0000000000..fec5f36088
--- /dev/null
+++ b/ydb/public/sdk/cpp/client/ydb_topic/ut/basic_usage_ut.cpp
@@ -0,0 +1,97 @@
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/persqueue.h>
+
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/common.h>
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/impl/write_session.h>
+
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/ut_utils.h>
+
+#include <library/cpp/testing/unittest/registar.h>
+#include <library/cpp/testing/unittest/tests_data.h>
+#include <library/cpp/threading/future/future.h>
+#include <library/cpp/threading/future/async.h>
+
+namespace NYdb::NTopic::NTests {
+
+Y_UNIT_TEST_SUITE(BasicUsage) {
+
+ Y_UNIT_TEST(WriteAndReadSomeMessagesWithSyncCompression) {
+
+ auto setup = std::make_shared<NPersQueue::NTests::TPersQueueYdbSdkTestSetup>(TEST_CASE_NAME);
+
+ NPersQueue::TWriteSessionSettings writeSettings;
+ writeSettings.Path(setup->GetTestTopic()).MessageGroupId("src_id");
+ writeSettings.Codec(NPersQueue::ECodec::RAW);
+ NPersQueue::IExecutor::TPtr executor = new NPersQueue::TSyncExecutor();
+ writeSettings.CompressionExecutor(executor);
+
+ ui64 count = 100u;
+ TMaybe<bool> shouldCaptureData = {true};
+
+ auto& client = setup->GetPersQueueClient();
+ auto session = client.CreateSimpleBlockingWriteSession(writeSettings);
+ TString messageBase = "message----";
+ TVector<TString> sentMessages;
+
+ for (auto i = 0u; i < count; i++) {
+ // sentMessages.emplace_back(messageBase * (i+1) + ToString(i));
+ sentMessages.emplace_back(messageBase * (200 * 1024));
+ auto res = session->Write(sentMessages.back());
+ UNIT_ASSERT(res);
+ }
+ {
+ auto sessionAdapter = NPersQueue::NTests::TSimpleWriteSessionTestAdapter(
+ dynamic_cast<NPersQueue::TSimpleBlockingWriteSession *>(session.get()));
+ if (shouldCaptureData.Defined()) {
+ TStringBuilder msg;
+ msg << "Session has captured " << sessionAdapter.GetAcquiredMessagesCount()
+ << " messages, capturing was expected: " << *shouldCaptureData << Endl;
+ UNIT_ASSERT_VALUES_EQUAL_C(sessionAdapter.GetAcquiredMessagesCount() > 0, *shouldCaptureData, msg.c_str());
+ }
+ }
+ session->Close();
+
+ std::shared_ptr<NYdb::NTopic::IReadSession> ReadSession;
+
+ // Create topic client.
+ NYdb::NTopic::TTopicClient topicClient(setup->GetDriver());
+
+ // Create read session.
+ NYdb::NTopic::TReadSessionSettings readSettings;
+ readSettings
+ .ConsumerName(setup->GetTestClient())
+ .MaxMemoryUsageBytes(1_MB)
+ .AppendTopics(setup->GetTestTopic());
+
+ Cerr << "Session was created" << Endl;
+
+ NThreading::TPromise<void> checkedPromise = NThreading::NewPromise<void>();
+ auto totalReceived = 0u;
+
+ auto f = checkedPromise.GetFuture();
+ TAtomic check = 1;
+ readSettings.EventHandlers_.SimpleDataHandlers(
+ // [checkedPromise = std::move(checkedPromise), &check, &sentMessages, &totalReceived]
+ [&]
+ (NYdb::NTopic::TReadSessionEvent::TDataReceivedEvent& ev) mutable {
+ Y_VERIFY_S(AtomicGet(check) != 0, "check is false");
+ auto& messages = ev.GetMessages();
+ for (size_t i = 0u; i < messages.size(); ++i) {
+ auto& message = messages[i];
+ UNIT_ASSERT_VALUES_EQUAL(message.GetData(), sentMessages[totalReceived]);
+ totalReceived++;
+ }
+ if (totalReceived == sentMessages.size())
+ checkedPromise.SetValue();
+ });
+
+ ReadSession = topicClient.CreateReadSession(readSettings);
+
+ f.GetValueSync();
+ ReadSession->Close(TDuration::MilliSeconds(10));
+ AtomicSet(check, 0);
+ }
+}
+
+}
diff --git a/ydb/public/sdk/cpp/client/ydb_types/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_types/CMakeLists.txt
index f808e219d1..6c77e0dfcc 100644
--- a/ydb/public/sdk/cpp/client/ydb_types/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_types/CMakeLists.txt
@@ -6,6 +6,11 @@
# original buildsystem will not be accepted.
+add_subdirectory(credentials)
+add_subdirectory(exceptions)
+add_subdirectory(fatal_error_handlers)
+add_subdirectory(operation)
+add_subdirectory(status)
add_library(cpp-client-ydb_types)
target_link_libraries(cpp-client-ydb_types PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_types/credentials/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_types/credentials/CMakeLists.txt
index 1bcfcc593b..e8098b93d0 100644
--- a/ydb/public/sdk/cpp/client/ydb_types/credentials/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_types/credentials/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(login)
add_library(client-ydb_types-credentials)
target_link_libraries(client-ydb_types-credentials PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_value/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_value/CMakeLists.txt
index 9fc0690491..b622bb115e 100644
--- a/ydb/public/sdk/cpp/client/ydb_value/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_value/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(cpp-client-ydb_value)
target_link_libraries(cpp-client-ydb_value PUBLIC
diff --git a/ydb/public/sdk/cpp/client/ydb_value/ut/CMakeLists.txt b/ydb/public/sdk/cpp/client/ydb_value/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/client/ydb_value/ut/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/client/ydb_value/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/examples/CMakeLists.txt b/ydb/public/sdk/cpp/examples/CMakeLists.txt
new file mode 100644
index 0000000000..44b40cc9ea
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(basic_example)
+add_subdirectory(bulk_upsert_simple)
+add_subdirectory(pagination)
+add_subdirectory(secondary_index)
+add_subdirectory(secondary_index_builtin)
+add_subdirectory(topic_reader)
+add_subdirectory(ttl)
diff --git a/ydb/public/sdk/cpp/examples/basic_example/CMakeLists.txt b/ydb/public/sdk/cpp/examples/basic_example/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/examples/basic_example/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/examples/basic_example/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/examples/bulk_upsert_simple/CMakeLists.txt b/ydb/public/sdk/cpp/examples/bulk_upsert_simple/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/examples/bulk_upsert_simple/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/examples/bulk_upsert_simple/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/examples/pagination/CMakeLists.txt b/ydb/public/sdk/cpp/examples/pagination/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/examples/pagination/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/examples/pagination/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/examples/secondary_index/CMakeLists.txt b/ydb/public/sdk/cpp/examples/secondary_index/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/examples/secondary_index/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/examples/secondary_index/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/examples/secondary_index_builtin/CMakeLists.txt b/ydb/public/sdk/cpp/examples/secondary_index_builtin/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/examples/secondary_index_builtin/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/examples/secondary_index_builtin/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/CMakeLists.txt b/ydb/public/sdk/cpp/examples/topic_reader/CMakeLists.txt
new file mode 100644
index 0000000000..7fb13037a8
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(eventloop)
+add_subdirectory(simple)
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.darwin.txt b/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..900ee09290
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.darwin.txt
@@ -0,0 +1,29 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(persqueue_reader_eventloop)
+target_link_libraries(persqueue_reader_eventloop PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ library-cpp-cpuid_check
+ cpp-client-ydb_topic
+ library-cpp-getopt
+)
+target_link_options(persqueue_reader_eventloop PRIVATE
+ -Wl,-no_deduplicate
+ -Wl,-sdk_version,10.15
+ -fPIC
+ -fPIC
+ -framework
+ CoreFoundation
+)
+target_sources(persqueue_reader_eventloop PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/examples/topic_reader/eventloop/main.cpp
+)
+vcs_info(persqueue_reader_eventloop)
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.linux.txt b/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.linux.txt
new file mode 100644
index 0000000000..04eb961985
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.linux.txt
@@ -0,0 +1,33 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(persqueue_reader_eventloop)
+target_link_libraries(persqueue_reader_eventloop PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ cpp-malloc-tcmalloc
+ libs-tcmalloc-no_percpu_cache
+ library-cpp-cpuid_check
+ cpp-client-ydb_topic
+ library-cpp-getopt
+)
+target_link_options(persqueue_reader_eventloop PRIVATE
+ -ldl
+ -lrt
+ -Wl,--no-as-needed
+ -fPIC
+ -fPIC
+ -lpthread
+ -lrt
+ -ldl
+)
+target_sources(persqueue_reader_eventloop PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/examples/topic_reader/eventloop/main.cpp
+)
+vcs_info(persqueue_reader_eventloop)
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.txt b/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/eventloop/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/eventloop/main.cpp b/ydb/public/sdk/cpp/examples/topic_reader/eventloop/main.cpp
new file mode 100644
index 0000000000..3b801149ff
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/eventloop/main.cpp
@@ -0,0 +1,114 @@
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+
+#include <library/cpp/getopt/last_getopt.h>
+
+#include <util/stream/output.h>
+#include <util/system/env.h>
+
+struct TOptions {
+ TString Endpoint;
+ TString Database;
+ TString TopicPath;
+ TString ConsumerName;
+ bool CommitAfterProcessing = false;
+ bool DisableClusterDiscovery = false;
+ bool UseSecureConnection = false;
+
+ TOptions(int argc, const char* argv[]) {
+ NLastGetopt::TOpts opts = NLastGetopt::TOpts::Default();
+ opts.AddHelpOption('h');
+ opts.AddLongOption('e', "endpoint", "YDB endpoint").Required().RequiredArgument("HOST:PORT")
+ .StoreResult(&Endpoint);
+ opts.AddLongOption('d', "database", "YDB database name").DefaultValue("/Root").RequiredArgument("PATH")
+ .StoreResult(&Database);
+ opts.AddLongOption('t', "topic-path", "Topic path for reading").Required().RequiredArgument("PATH")
+ .StoreResult(&TopicPath);
+ opts.AddLongOption('c', "consumer-name", "Consumer name").Required().RequiredArgument("CONSUMER")
+ .StoreResult(&ConsumerName);
+ opts.AddLongOption("commit-after-processing", "Commit data after processing")
+ .SetFlag(&CommitAfterProcessing).NoArgument();
+ opts.AddLongOption("secure-connection", "Use secure connection")
+ .SetFlag(&UseSecureConnection).NoArgument();
+ opts.SetFreeArgsNum(0);
+
+ NLastGetopt::TOptsParseResult res(&opts, argc, argv);
+ }
+};
+
+std::shared_ptr<NYdb::NTopic::IReadSession> ReadSession;
+
+void StopHandler(int) {
+ Cerr << "Stopping session" << Endl;
+ if (ReadSession) {
+ ReadSession->Close(TDuration::Seconds(3));
+ } else {
+ exit(1);
+ }
+}
+
+int main(int argc, const char* argv[]) {
+ signal(SIGINT, &StopHandler);
+ signal(SIGTERM, &StopHandler);
+
+ TOptions opts(argc, argv);
+
+ // Create driver instance.
+ auto driverConfig = NYdb::TDriverConfig()
+ .SetNetworkThreadsNum(2)
+ .SetEndpoint(opts.Endpoint)
+ .SetDatabase(opts.Database)
+ .SetAuthToken(GetEnv("YDB_TOKEN"))
+ .SetLog(CreateLogBackend("cerr"));
+
+ if (opts.UseSecureConnection) {
+ driverConfig.UseSecureConnection();
+ }
+
+ NYdb::TDriver driver(driverConfig);
+
+ // Create topic client.
+ NYdb::NTopic::TTopicClient topicClient(driver);
+
+ // Create read session.
+ NYdb::NTopic::TReadSessionSettings settings;
+ settings
+ .ConsumerName(opts.ConsumerName)
+ .AppendTopics(opts.TopicPath);
+
+ ReadSession = topicClient.CreateReadSession(settings);
+
+ Cerr << "Session was created" << Endl;
+
+ // [BEGIN read session process events]
+ // Event loop
+ while (true) {
+ auto future = ReadSession->WaitEvent();
+ // Wait for next event or ten seconds
+ future.Wait(TDuration::Seconds(10));
+ // future.Subscribe([](){
+ // Cerr << ...;
+ // });
+ // Get event
+ TMaybe<NYdb::NTopic::TReadSessionEvent::TEvent> event = ReadSession->GetEvent(true/*block - will block if no event received yet*/);
+ Cerr << "Got new read session event: " << DebugString(*event) << Endl;
+
+ if (auto* dataEvent = std::get_if<NYdb::NTopic::TReadSessionEvent::TDataReceivedEvent>(&*event)) {
+ for (const auto& message : dataEvent->GetMessages()) {
+ Cerr << "Data message: \"" << message.GetData() << "\"" << Endl;
+ }
+
+ if (opts.CommitAfterProcessing) {
+ dataEvent->Commit();
+ }
+ } else if (auto* startPartitionSessionEvent = std::get_if<NYdb::NTopic::TReadSessionEvent::TStartPartitionSessionEvent>(&*event)) {
+ startPartitionSessionEvent->Confirm();
+ } else if (auto* stopPartitionSessionEvent = std::get_if<NYdb::NTopic::TReadSessionEvent::TStopPartitionSessionEvent>(&*event)) {
+ stopPartitionSessionEvent->Confirm();
+ } else if (auto* closeSessionEvent = std::get_if<NYdb::NTopic::TSessionClosedEvent>(&*event)) {
+ break;
+ }
+ }
+ // [END read session process events]
+ // Stop the driver.
+ driver.Stop();
+}
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.darwin.txt b/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.darwin.txt
new file mode 100644
index 0000000000..9e544c49c2
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.darwin.txt
@@ -0,0 +1,29 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(simple_persqueue_reader)
+target_link_libraries(simple_persqueue_reader PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ library-cpp-cpuid_check
+ cpp-client-ydb_topic
+ library-cpp-getopt
+)
+target_link_options(simple_persqueue_reader PRIVATE
+ -Wl,-no_deduplicate
+ -Wl,-sdk_version,10.15
+ -fPIC
+ -fPIC
+ -framework
+ CoreFoundation
+)
+target_sources(simple_persqueue_reader PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/examples/topic_reader/simple/main.cpp
+)
+vcs_info(simple_persqueue_reader)
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.linux.txt b/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.linux.txt
new file mode 100644
index 0000000000..eef542bff2
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.linux.txt
@@ -0,0 +1,33 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+
+add_executable(simple_persqueue_reader)
+target_link_libraries(simple_persqueue_reader PUBLIC
+ contrib-libs-cxxsupp
+ yutil
+ cpp-malloc-tcmalloc
+ libs-tcmalloc-no_percpu_cache
+ library-cpp-cpuid_check
+ cpp-client-ydb_topic
+ library-cpp-getopt
+)
+target_link_options(simple_persqueue_reader PRIVATE
+ -ldl
+ -lrt
+ -Wl,--no-as-needed
+ -fPIC
+ -fPIC
+ -lpthread
+ -lrt
+ -ldl
+)
+target_sources(simple_persqueue_reader PRIVATE
+ ${CMAKE_SOURCE_DIR}/ydb/public/sdk/cpp/examples/topic_reader/simple/main.cpp
+)
+vcs_info(simple_persqueue_reader)
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.txt b/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.txt
new file mode 100644
index 0000000000..dbfe6fa2c4
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/simple/CMakeLists.txt
@@ -0,0 +1,13 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+if (APPLE)
+ include(CMakeLists.darwin.txt)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
+ include(CMakeLists.linux.txt)
+endif()
diff --git a/ydb/public/sdk/cpp/examples/topic_reader/simple/main.cpp b/ydb/public/sdk/cpp/examples/topic_reader/simple/main.cpp
new file mode 100644
index 0000000000..4e0d07d3c6
--- /dev/null
+++ b/ydb/public/sdk/cpp/examples/topic_reader/simple/main.cpp
@@ -0,0 +1,99 @@
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
+
+#include <library/cpp/getopt/last_getopt.h>
+
+#include <util/stream/output.h>
+#include <util/system/env.h>
+
+struct TOptions {
+ TString Endpoint;
+ TString Database;
+ TString TopicPath;
+ TString ConsumerName;
+ bool CommitAfterProcessing = false;
+ bool DisableClusterDiscovery = false;
+ bool UseSecureConnection = false;
+
+ TOptions(int argc, const char* argv[]) {
+ NLastGetopt::TOpts opts = NLastGetopt::TOpts::Default();
+ opts.AddHelpOption('h');
+ opts.AddLongOption('e', "endpoint", "YDB endpoint").Required().RequiredArgument("HOST:PORT")
+ .StoreResult(&Endpoint);
+ opts.AddLongOption('d', "database", "YDB database name").DefaultValue("/Root").RequiredArgument("PATH")
+ .StoreResult(&Database);
+ opts.AddLongOption('t', "topic-path", "Topic path for reading").Required().RequiredArgument("PATH")
+ .StoreResult(&TopicPath);
+ opts.AddLongOption('c', "consumer-name", "Consumer name").Required().RequiredArgument("CONSUMER")
+ .StoreResult(&ConsumerName);
+ opts.AddLongOption("commit-after-processing", "Commit data after processing")
+ .SetFlag(&CommitAfterProcessing).NoArgument();
+ opts.AddLongOption("secure-connection", "Use secure connection")
+ .SetFlag(&UseSecureConnection).NoArgument();
+ opts.SetFreeArgsNum(0);
+
+ NLastGetopt::TOptsParseResult res(&opts, argc, argv);
+ }
+};
+
+std::shared_ptr<NYdb::NTopic::IReadSession> ReadSession;
+
+void StopHandler(int) {
+ Cerr << "Stopping session" << Endl;
+ if (ReadSession) {
+ ReadSession->Close(TDuration::Seconds(3));
+ } else {
+ exit(1);
+ }
+}
+
+int main(int argc, const char* argv[]) {
+ signal(SIGINT, &StopHandler);
+ signal(SIGTERM, &StopHandler);
+
+ TOptions opts(argc, argv);
+
+ // Create driver instance.
+ auto driverConfig = NYdb::TDriverConfig()
+ .SetNetworkThreadsNum(2)
+ .SetEndpoint(opts.Endpoint)
+ .SetDatabase(opts.Database)
+ .SetAuthToken(GetEnv("YDB_TOKEN"))
+ .SetLog(CreateLogBackend("cerr"));
+
+ if (opts.UseSecureConnection) {
+ driverConfig.UseSecureConnection();
+ }
+
+ NYdb::TDriver driver(driverConfig);
+
+ // Create topic client.
+ NYdb::NTopic::TTopicClient topicClient(driver);
+
+ // [BEGIN Create read session]
+ // Create read session.
+ NYdb::NTopic::TReadSessionSettings settings;
+ settings
+ .ConsumerName(opts.ConsumerName)
+ .AppendTopics(opts.TopicPath);
+
+ // auto handlers = TEventHandlers::SimpleDataHandlers();
+
+ // settings.SetEventHandlers(handlers);
+
+ // settings.SetSimpleDataHandlers(
+ settings.EventHandlers_.SimpleDataHandlers(
+ [](NYdb::NTopic::TReadSessionEvent::TDataReceivedEvent& event) {
+ Cerr << "Data event " << DebugString(event);
+ }, opts.CommitAfterProcessing);
+
+ ReadSession = topicClient.CreateReadSession(settings);
+ // [END Create read session]
+
+ Cerr << "Session was created" << Endl;
+
+ // Wait SessionClosed event.
+ ReadSession->GetEvent(/*block = */true);
+
+ // Stop the driver.
+ driver.Stop();
+}
diff --git a/ydb/public/sdk/cpp/examples/ttl/CMakeLists.txt b/ydb/public/sdk/cpp/examples/ttl/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/public/sdk/cpp/examples/ttl/CMakeLists.txt
+++ b/ydb/public/sdk/cpp/examples/ttl/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/CMakeLists.txt b/ydb/services/CMakeLists.txt
new file mode 100644
index 0000000000..2afd815ffc
--- /dev/null
+++ b/ydb/services/CMakeLists.txt
@@ -0,0 +1,21 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(auth)
+add_subdirectory(cms)
+add_subdirectory(datastreams)
+add_subdirectory(discovery)
+add_subdirectory(kesus)
+add_subdirectory(lib)
+add_subdirectory(local_discovery)
+add_subdirectory(monitoring)
+add_subdirectory(persqueue_cluster_discovery)
+add_subdirectory(persqueue_v1)
+add_subdirectory(rate_limiter)
+add_subdirectory(ydb)
+add_subdirectory(yq)
diff --git a/ydb/services/auth/grpc_service.cpp b/ydb/services/auth/grpc_service.cpp
index 2729530449..8a2eac7acb 100644
--- a/ydb/services/auth/grpc_service.cpp
+++ b/ydb/services/auth/grpc_service.cpp
@@ -14,33 +14,6 @@ static TString GetSdkBuildInfo(NGrpc::IRequestContextBase* reqCtx) {
return TString{res[0]};
}
-TGRpcAuthService::TGRpcAuthService(NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{
-}
-
-void TGRpcAuthService::InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcAuthService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcAuthService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcAuthService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcAuthService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
#ifdef ADD_REQUEST
diff --git a/ydb/services/auth/grpc_service.h b/ydb/services/auth/grpc_service.h
index 706621df6d..09fa4b4e87 100644
--- a/ydb/services/auth/grpc_service.h
+++ b/ydb/services/auth/grpc_service.h
@@ -3,33 +3,19 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/ydb_auth_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
- class TGRpcAuthService : public NGrpc::TGrpcServiceBase<Ydb::Auth::V1::AuthService>
+ class TGRpcAuthService : public TGrpcServiceBase<Ydb::Auth::V1::AuthService>
{
public:
- TGRpcAuthService(NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
+ using TGrpcServiceBase<Ydb::Auth::V1::AuthService>::TGrpcServiceBase;
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/cms/CMakeLists.txt b/ydb/services/cms/CMakeLists.txt
index d70e564dd3..b32ca5c50e 100644
--- a/ydb/services/cms/CMakeLists.txt
+++ b/ydb/services/cms/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-services-cms)
target_link_libraries(ydb-services-cms PUBLIC
diff --git a/ydb/services/cms/grpc_service.cpp b/ydb/services/cms/grpc_service.cpp
index 737ae3e81d..728a578c48 100644
--- a/ydb/services/cms/grpc_service.cpp
+++ b/ydb/services/cms/grpc_service.cpp
@@ -7,34 +7,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcCmsService::TGRpcCmsService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{
-}
-
-void TGRpcCmsService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcCmsService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter)
-{
- Limiter_ = limiter;
-}
-
-bool TGRpcCmsService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcCmsService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcCmsService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
using namespace Ydb;
@@ -49,7 +21,7 @@ void TGRpcCmsService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
ActorSystem_->Send(GRpcRequestProxyId_, \
new TGrpcRequestOperationCall<Cms::NAME##Request, Cms::NAME##Response> \
- (ctx, &CB, TRequestAuxSettings{TRateLimiterMode::Rps, nullptr})); \
+ (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr})); \
}, &Cms::V1::CmsService::AsyncService::Request ## NAME, \
#NAME, logger, getCounterBlock("cms", #NAME))->Run();
diff --git a/ydb/services/cms/grpc_service.h b/ydb/services/cms/grpc_service.h
index 80f3bbe928..967eed68c9 100644
--- a/ydb/services/cms/grpc_service.h
+++ b/ydb/services/cms/grpc_service.h
@@ -3,34 +3,18 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/ydb_cms_v1.grpc.pb.h>
-
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
class TGRpcCmsService
- : public NGrpc::TGrpcServiceBase<Ydb::Cms::V1::CmsService>
+ : public TGrpcServiceBase<Ydb::Cms::V1::CmsService>
{
public:
- TGRpcCmsService(NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
-
- private:
+ using TGrpcServiceBase<Ydb::Cms::V1::CmsService>::TGrpcServiceBase;
+private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/cms/ut/CMakeLists.txt b/ydb/services/cms/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/cms/ut/CMakeLists.txt
+++ b/ydb/services/cms/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/datastreams/CMakeLists.txt b/ydb/services/datastreams/CMakeLists.txt
index 5cbec71234..2d53ba2318 100644
--- a/ydb/services/datastreams/CMakeLists.txt
+++ b/ydb/services/datastreams/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-services-datastreams)
target_link_libraries(ydb-services-datastreams PUBLIC
diff --git a/ydb/services/datastreams/datastreams_proxy.cpp b/ydb/services/datastreams/datastreams_proxy.cpp
index 582e899e42..95e1edadd0 100644
--- a/ydb/services/datastreams/datastreams_proxy.cpp
+++ b/ydb/services/datastreams/datastreams_proxy.cpp
@@ -10,6 +10,8 @@
#include <ydb/core/persqueue/partition.h>
#include <ydb/core/persqueue/write_meta.h>
+#include <ydb/public/api/protos/ydb_topic.pb.h>
+#include <ydb/services/lib/actors/pq_rl_helpers.h>
#include <ydb/services/lib/actors/pq_schema_actor.h>
#include <ydb/services/lib/sharding/sharding.h>
#include <ydb/services/persqueue_v1/actors/persqueue_utils.h>
@@ -27,7 +29,7 @@ using grpc::Status;
namespace NKikimr::NDataStreams::V1 {
const TString YDS_SERVICE_TYPE = "data-streams";
const i32 DEFAULT_STREAM_DAY_RETENTION = TDuration::Days(1).Hours();
- // const i32 DEFAULT_STREAM_WEEK_RETENTION = TDuration::Days(7).Hours();
+ const i32 DEFAULT_STREAM_WEEK_RETENTION = TDuration::Days(7).Hours();
using namespace NGRpcService;
using namespace NGRpcProxy::V1;
@@ -49,52 +51,6 @@ namespace NKikimr::NDataStreams::V1 {
static constexpr bool has_storage_megabytes(...) { return false; }
template <typename T>
static constexpr bool has_storage_megabytes(bool, decltype((std::declval<T>().retention_storage_megabytes()))* = 0) { return true; }
- template<class TRequest>
- bool ValidateRetentionLimits(const TRequest& req,
- const NKikimrSchemeOp::TPersQueueGroupDescription& groupConfig,
- TMaybe<bool> increase, TString& errorText) {
- if constexpr (has_storage_megabytes<TRequest>(true)) {
- if (req.has_retention_storage_megabytes()) {
- if (req.retention_storage_megabytes() * 1_MB < 50_GB) {
- errorText = TStringBuilder() << "Retention space should be greater than 50GB: "
- << req.retention_storage_megabytes();
- return false;
- } else {
- return true;
- }
- }
- if (!req.has_retention_period_hours() &&
- !req.has_retention_storage_megabytes()) {
- return true;
- }
- }
- if (req.retention_period_hours() <= 0 ||
- req.retention_period_hours() > DEFAULT_STREAM_DAY_RETENTION) {
- errorText = TStringBuilder() << "Retention period should be non negative and less than " <<
- DEFAULT_STREAM_DAY_RETENTION << " hours: " << req.retention_period_hours();
- return false;
- }
-
- if (increase.Defined()) {
- auto currentLifetime = TDuration::Seconds(groupConfig.GetPQTabletConfig().GetPartitionConfig().GetLifetimeSeconds());
- auto newLifetime = TDuration::Hours(req.retention_period_hours());
- if (*increase) {
- if (newLifetime <= currentLifetime) {
- errorText = TStringBuilder() << "Retention period is not greater than provided: "
- << currentLifetime.Hours() << " <= " << newLifetime.Hours();
- return false;
- }
- } else {
- if (newLifetime >= currentLifetime) {
- errorText = TStringBuilder() << "Retention period is not less than provided: "
- << currentLifetime.Hours() << " <= " << newLifetime.Hours();
- return false;
- }
- }
- }
-
- return true;
- }
template<class TRequest>
bool ValidateShardsCount(const TRequest& req, const NKikimrSchemeOp::TPersQueueGroupDescription& groupConfig, TString& errorText) {
@@ -106,25 +62,6 @@ namespace NKikimr::NDataStreams::V1 {
}
return true;
}
-
- template<class TRequest>
- bool ValidateWriteSpeedLimit(const TRequest& req, TString& errorText, const TActorContext& ctx) {
- THashSet<ui32> validLimits {0};
- if (AppData(ctx)->PQConfig.ValidWriteSpeedLimitsKbPerSecSize() == 0) {
- validLimits.insert(128);
- validLimits.insert(1_KB);
- } else {
- const auto& limits = AppData(ctx)->PQConfig.GetValidWriteSpeedLimitsKbPerSec();
- validLimits.insert(limits.begin(), limits.end());
- }
- if (validLimits.find(req.write_quota_kb_per_sec()) == validLimits.end()) {
- errorText = TStringBuilder() << "write_quota_kb_per_sec must have values from set {" << JoinSeq(",", validLimits) << ", got " << req.write_quota_kb_per_sec();
- return false;
- }
-
- return true;
- }
-
}
class TCreateStreamActor : public TPQGrpcSchemaBase<TCreateStreamActor, NKikimr::NGRpcService::TEvDataStreamsCreateStreamRequest> {
@@ -166,54 +103,68 @@ namespace NKikimr::NDataStreams::V1 {
{
NKikimrSchemeOp::TModifyScheme& modifyScheme(*proposal.Record.MutableTransaction()->MutableModifyScheme());
- Ydb::PersQueue::V1::TopicSettings topicSettings;
- topicSettings.set_partitions_count(GetProtoRequest()->shard_count());
+ Ydb::Topic::CreateTopicRequest topicRequest;
+ topicRequest.mutable_partitioning_settings()->set_min_active_partitions(GetProtoRequest()->shard_count());
switch (GetProtoRequest()->retention_case()) {
case Ydb::DataStreams::V1::CreateStreamRequest::RetentionCase::kRetentionPeriodHours:
- topicSettings.set_retention_period_ms(
- TDuration::Hours(GetProtoRequest()->retention_period_hours()).MilliSeconds());
+ topicRequest.mutable_retention_period()->set_seconds(
+ TDuration::Hours(GetProtoRequest()->retention_period_hours()).Seconds());
break;
case Ydb::DataStreams::V1::CreateStreamRequest::RetentionCase::kRetentionStorageMegabytes:
- topicSettings.set_retention_storage_bytes(
- GetProtoRequest()->retention_storage_megabytes() * 1_MB);
+ topicRequest.set_retention_storage_mb(
+ GetProtoRequest()->retention_storage_megabytes());
+ topicRequest.mutable_retention_period()->set_seconds(
+ TDuration::Hours(DEFAULT_STREAM_WEEK_RETENTION).Seconds());
break;
default:
- topicSettings.set_retention_period_ms(
- TDuration::Hours(DEFAULT_STREAM_DAY_RETENTION).MilliSeconds());
+ topicRequest.mutable_retention_period()->set_seconds(
+ TDuration::Hours(DEFAULT_STREAM_DAY_RETENTION).Seconds());
}
- topicSettings.set_supported_format(Ydb::PersQueue::V1::TopicSettings::FORMAT_BASE);
- topicSettings.add_supported_codecs(Ydb::PersQueue::V1::CODEC_RAW);
- topicSettings.set_max_partition_write_speed(
+ topicRequest.mutable_supported_codecs()->add_codecs(Ydb::Topic::CODEC_RAW);
+ topicRequest.set_partition_write_speed_bytes_per_second(
PartitionWriteSpeedInBytesPerSec(GetProtoRequest()->write_quota_kb_per_sec()));
- topicSettings.set_max_partition_write_burst(
+ topicRequest.set_partition_write_burst_bytes(
PartitionWriteSpeedInBytesPerSec(GetProtoRequest()->write_quota_kb_per_sec()));
- if (workingDir != proposal.Record.GetDatabaseName() && !proposal.Record.GetDatabaseName().empty()) {
- return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST,
- "streams can be created only at database root", ctx);
- }
-
- TString error;
- auto status = NKikimr::NGRpcProxy::V1::FillProposeRequestImpl(name, topicSettings, modifyScheme, ctx, false, error,
- workingDir, proposal.Record.GetDatabaseName());
- modifyScheme.SetWorkingDir(workingDir);
-
- if (!error.Empty()) {
- return ReplyWithError(status, Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
+ if (AppData(ctx)->PQConfig.GetBillingMeteringConfig().GetEnabled()) {
+ topicRequest.set_metering_mode(Ydb::Topic::METERING_MODE_RESERVED_CAPACITY);
+
+ if (GetProtoRequest()->has_stream_mode_details()) {
+ switch(GetProtoRequest()->stream_mode_details().stream_mode()) {
+ case Ydb::DataStreams::V1::StreamMode::PROVISIONED:
+ topicRequest.set_metering_mode(Ydb::Topic::METERING_MODE_RESERVED_CAPACITY);
+ break;
+ case Ydb::DataStreams::V1::StreamMode::ON_DEMAND:
+ topicRequest.set_metering_mode(Ydb::Topic::METERING_MODE_REQUEST_UNITS);
+ break;
+ default:
+ return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST,
+ "streams can't be created with unknown metering mode", ctx);
+ }
+ }
+ } else {
+ if (GetProtoRequest()->has_stream_mode_details()) {
+ return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST,
+ "streams can't be created with metering mode", ctx);
+ }
}
auto pqDescr = modifyScheme.MutableCreatePersQueueGroup();
- pqDescr->SetPartitionPerTablet(1);
if (GetProtoRequest()->retention_case() ==
Ydb::DataStreams::V1::CreateStreamRequest::RetentionCase::kRetentionStorageMegabytes) {
modifyScheme.MutableCreatePersQueueGroup()->MutablePQTabletConfig()->
- MutablePartitionConfig()->SetLifetimeSeconds(TDuration::Days(7).Seconds());
+ MutablePartitionConfig()->SetLifetimeSeconds(TDuration::Hours(DEFAULT_STREAM_WEEK_RETENTION).Seconds());
}
- if (!ValidateWriteSpeedLimit(*GetProtoRequest(), error, ctx) ||
- !ValidateRetentionLimits(*GetProtoRequest(), *pqDescr, Nothing(), error)) {
- return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST,
- error, ctx);
+ modifyScheme.SetWorkingDir(workingDir);
+
+ pqDescr->SetPartitionPerTablet(1);
+ TString error;
+ auto status = NKikimr::NGRpcProxy::V1::FillProposeRequestImpl(name, topicRequest, modifyScheme, ctx, error,
+ workingDir, proposal.Record.GetDatabaseName());
+
+ if (status != Ydb::StatusIds::SUCCESS) {
+ return ReplyWithError(status, Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
}
}
@@ -343,6 +294,57 @@ namespace NKikimr::NDataStreams::V1 {
//-----------------------------------------------------------------------------------------------------------
+ class TUpdateStreamModeActor : public TUpdateSchemeActor<TUpdateStreamModeActor, TEvDataStreamsUpdateStreamModeRequest> {
+ using TBase = TUpdateSchemeActor<TUpdateStreamModeActor, TEvDataStreamsUpdateStreamModeRequest>;
+ using TProtoRequest = typename TBase::TProtoRequest;
+ public:
+ TUpdateStreamModeActor(NKikimr::NGRpcService::IRequestOpCtx* request)
+ : TBase(request, GetRequest<TProtoRequest>(request)->stream_arn())
+ {
+ }
+
+ void Bootstrap(const TActorContext& ctx);
+ void ModifyPersqueueConfig(const TActorContext& ctx,
+ NKikimrSchemeOp::TPersQueueGroupDescription& groupConfig,
+ const NKikimrSchemeOp::TPersQueueGroupDescription& pqGroupDescription,
+ const NKikimrSchemeOp::TDirEntry& selfInfo);
+ };
+
+ void TUpdateStreamModeActor::Bootstrap(const TActorContext& ctx) {
+ TBase::Bootstrap(ctx);
+ SendDescribeProposeRequest(ctx);
+ Become(&TBase::StateWork);
+ }
+
+ void TUpdateStreamModeActor::ModifyPersqueueConfig(
+ const TActorContext& ctx,
+ NKikimrSchemeOp::TPersQueueGroupDescription& groupConfig,
+ const NKikimrSchemeOp::TPersQueueGroupDescription& pqGroupDescription,
+ const NKikimrSchemeOp::TDirEntry& selfInfo
+ ) {
+ Y_UNUSED(selfInfo);
+ Y_UNUSED(pqGroupDescription);
+ if (!AppData(ctx)->PQConfig.GetBillingMeteringConfig().GetEnabled()) {
+ return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST,
+ "streams can't be created with metering mode", ctx);
+ }
+
+ switch(GetProtoRequest()->stream_mode_details().stream_mode()) {
+ case Ydb::DataStreams::V1::StreamMode::PROVISIONED:
+ groupConfig.MutablePQTabletConfig()->SetMeteringMode(NKikimrPQ::TPQTabletConfig::METERING_MODE_RESERVED_CAPACITY);
+ break;
+ case Ydb::DataStreams::V1::StreamMode::ON_DEMAND:
+ groupConfig.MutablePQTabletConfig()->SetMeteringMode(NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS);
+ break;
+ default:
+ return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST,
+ "streams can't be created with unknown metering mode", ctx);
+ }
+ }
+
+
+ //-----------------------------------------------------------------------------------------------------------
+
class TUpdateStreamActor : public TUpdateSchemeActor<TUpdateStreamActor, TEvDataStreamsUpdateStreamRequest> {
using TBase = TUpdateSchemeActor<TUpdateStreamActor, TEvDataStreamsUpdateStreamRequest>;
using TProtoRequest = typename TBase::TProtoRequest;
@@ -375,9 +377,7 @@ namespace NKikimr::NDataStreams::V1 {
Y_UNUSED(selfInfo);
TString error;
- if (!ValidateShardsCount(*GetProtoRequest(), pqGroupDescription, error) ||
- !ValidateWriteSpeedLimit(*GetProtoRequest(), error, ctx) ||
- !ValidateRetentionLimits(*GetProtoRequest(), groupConfig, Nothing(), error))
+ if (!ValidateShardsCount(*GetProtoRequest(), pqGroupDescription, error))
{
return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
}
@@ -387,16 +387,47 @@ namespace NKikimr::NDataStreams::V1 {
case Ydb::DataStreams::V1::UpdateStreamRequest::RetentionCase::kRetentionPeriodHours:
groupConfig.MutablePQTabletConfig()->MutablePartitionConfig()->SetLifetimeSeconds(
TDuration::Hours(GetProtoRequest()->retention_period_hours()).Seconds());
+ groupConfig.MutablePQTabletConfig()->MutablePartitionConfig()->ClearStorageLimitBytes();
+
break;
case Ydb::DataStreams::V1::UpdateStreamRequest::RetentionCase::kRetentionStorageMegabytes:
+ groupConfig.MutablePQTabletConfig()->MutablePartitionConfig()->SetLifetimeSeconds(
+ TDuration::Hours(DEFAULT_STREAM_WEEK_RETENTION).Seconds());
groupConfig.MutablePQTabletConfig()->MutablePartitionConfig()->SetStorageLimitBytes(
GetProtoRequest()->retention_storage_megabytes() * 1_MB);
break;
default: {}
}
- groupConfig.MutablePQTabletConfig()->MutablePartitionConfig()->SetWriteSpeedInBytesPerSecond(
+ auto* pqConfig = groupConfig.MutablePQTabletConfig();
+
+ pqConfig->MutablePartitionConfig()->SetWriteSpeedInBytesPerSecond(
PartitionWriteSpeedInBytesPerSec(GetProtoRequest()->write_quota_kb_per_sec()));
+
+ if (GetProtoRequest()->has_stream_mode_details()) {
+ if (!AppData(ctx)->PQConfig.GetBillingMeteringConfig().GetEnabled()) {
+ return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST,
+ "streams can't be created with metering mode", ctx);
+ }
+
+ switch(GetProtoRequest()->stream_mode_details().stream_mode()) {
+ case Ydb::DataStreams::V1::StreamMode::PROVISIONED:
+ groupConfig.MutablePQTabletConfig()->SetMeteringMode(NKikimrPQ::TPQTabletConfig::METERING_MODE_RESERVED_CAPACITY);
+ break;
+ case Ydb::DataStreams::V1::StreamMode::ON_DEMAND:
+ groupConfig.MutablePQTabletConfig()->SetMeteringMode(NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS);
+ break;
+ default:
+ return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST,
+ "streams can't be created with unknown metering mode", ctx);
+ }
+ }
+
+ auto serviceTypes = GetSupportedClientServiceTypes(ctx);
+ auto status = CheckConfig(*pqConfig, serviceTypes, error, ctx);
+ if (status != Ydb::StatusIds::SUCCESS) {
+ return ReplyWithError(status, Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
+ }
}
//-----------------------------------------------------------------------------------------------------------
@@ -434,11 +465,18 @@ namespace NKikimr::NDataStreams::V1 {
Y_UNUSED(selfInfo);
TString error;
- if (!ValidateWriteSpeedLimit(*GetProtoRequest(), error, ctx)) {
- return ReplyWithError(Ydb::StatusIds::BAD_REQUEST, Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
+
+ auto* pqConfig = groupConfig.MutablePQTabletConfig();
+
+ pqConfig->MutablePartitionConfig()->SetWriteSpeedInBytesPerSecond(GetProtoRequest()->write_quota_kb_per_sec() * 1_KB);
+ pqConfig->MutablePartitionConfig()->SetBurstSize(GetProtoRequest()->write_quota_kb_per_sec() * 1_KB);
+
+ auto serviceTypes = GetSupportedClientServiceTypes(ctx);
+ auto status = CheckConfig(*pqConfig, serviceTypes, error, ctx);
+ if (status != Ydb::StatusIds::SUCCESS) {
+ return ReplyWithError(status, Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
}
- groupConfig.MutablePQTabletConfig()->MutablePartitionConfig()->SetWriteSpeedInBytesPerSecond(GetProtoRequest()->write_quota_kb_per_sec() * 1_KB);
- groupConfig.MutablePQTabletConfig()->MutablePartitionConfig()->SetBurstSize(GetProtoRequest()->write_quota_kb_per_sec() * 1_KB);
+
}
//-----------------------------------------------------------------------------------------------------------
@@ -471,12 +509,35 @@ namespace NKikimr::NDataStreams::V1 {
Y_UNUSED(selfInfo);
TString error;
- if (!ValidateRetentionLimits(*this->GetProtoRequest(), groupConfig, ShouldIncrease, error)) {
- return this->ReplyWithError(Ydb::StatusIds::BAD_REQUEST,
- Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
+ Ydb::StatusIds::StatusCode status = Ydb::StatusIds::SUCCESS;
+
+ auto* pqConfig = groupConfig.MutablePQTabletConfig();
+
+ ui32 currentLifetime = pqConfig->GetPartitionConfig().GetLifetimeSeconds();
+ ui32 newLifetime = TInstant::Hours(this->GetProtoRequest()->retention_period_hours()).Seconds();
+ if (ShouldIncrease) {
+ if (newLifetime <= currentLifetime) {
+ error = TStringBuilder() << "Retention period is not greater than provided: "
+ << currentLifetime << " <= " << newLifetime;
+ status = Ydb::StatusIds::BAD_REQUEST;
+ }
+ } else {
+ if (newLifetime >= currentLifetime) {
+ error = TStringBuilder() << "Retention period is not less than provided: "
+ << currentLifetime << " <= " << newLifetime;
+ status = Ydb::StatusIds::BAD_REQUEST;
+ }
+ }
+ if (status == Ydb::StatusIds::SUCCESS) {
+ pqConfig->MutablePartitionConfig()->SetLifetimeSeconds(newLifetime);
+
+ auto serviceTypes = GetSupportedClientServiceTypes(ctx);
+ status = CheckConfig(*pqConfig, serviceTypes, error, ctx);
+ }
+
+ if (status != Ydb::StatusIds::SUCCESS) {
+ return TBase::ReplyWithError(status, Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
}
- groupConfig.MutablePQTabletConfig()->MutablePartitionConfig()->SetLifetimeSeconds(
- TInstant::Hours(this->GetProtoRequest()->retention_period_hours()).Seconds());
}
private:
@@ -609,12 +670,23 @@ namespace NKikimr::NDataStreams::V1 {
ui32 retentionPeriodHours = TInstant::Seconds(pqConfig.GetPartitionConfig().GetLifetimeSeconds()).Hours();
description.set_retention_period_hours(retentionPeriodHours);
description.set_write_quota_kb_per_sec(writeSpeed);
+ if (pqConfig.GetPartitionConfig().HasStorageLimitBytes()) {
+ ui32 storageLimitMb = pqConfig.GetPartitionConfig().GetStorageLimitBytes() / 1_MB;
+ description.set_storage_limit_mb(storageLimitMb);
+ }
if (SelfInfo.GetCreateFinished()) {
description.set_stream_status(Ydb::DataStreams::V1::StreamDescription::ACTIVE);
} else {
description.set_stream_status(Ydb::DataStreams::V1::StreamDescription::CREATING);
}
+ if (AppData(ctx)->PQConfig.GetBillingMeteringConfig().GetEnabled()) {
+ description.mutable_stream_mode_details()->set_stream_mode(
+ pqConfig.GetMeteringMode() == NKikimrPQ::TPQTabletConfig::METERING_MODE_RESERVED_CAPACITY ? Ydb::DataStreams::V1::StreamMode::PROVISIONED
+ : Ydb::DataStreams::V1::StreamMode::ON_DEMAND
+ );
+ }
+
bool startShardFound = GetProtoRequest()->exclusive_start_shard_id().empty();
description.set_has_more_shards(false);
@@ -778,7 +850,14 @@ namespace NKikimr::NDataStreams::V1 {
void TListStreamsActor::Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev, const TActorContext& ctx) {
const NSchemeCache::TSchemeCacheNavigate* navigate = ev->Get()->Request.Get();
for (const auto& entry : navigate->ResultSet) {
- if (entry.Kind == NSchemeCache::TSchemeCacheNavigate::EKind::KindPath
+
+
+ if (entry.Kind == NSchemeCache::TSchemeCacheNavigate::EKind::KindTable) {
+ for (const auto& stream : entry.CdcStreams) {
+ TString childFullPath = JoinPath({JoinPath(entry.Path), stream.GetName()});
+ Topics.push_back(childFullPath);
+ }
+ } else if (entry.Kind == NSchemeCache::TSchemeCacheNavigate::EKind::KindPath
|| entry.Kind == NSchemeCache::TSchemeCacheNavigate::EKind::KindSubdomain)
{
Y_ENSURE(entry.ListNodeEntry, "ListNodeEntry is zero");
@@ -786,6 +865,7 @@ namespace NKikimr::NDataStreams::V1 {
TString childFullPath = JoinPath({JoinPath(entry.Path), child.Name});
switch (child.Kind) {
case NSchemeCache::TSchemeCacheNavigate::EKind::KindPath:
+ case NSchemeCache::TSchemeCacheNavigate::EKind::KindTable:
if (GetProtoRequest()->recurse()) {
SendNavigateRequest(ctx, childFullPath);
}
@@ -793,6 +873,7 @@ namespace NKikimr::NDataStreams::V1 {
case NSchemeCache::TSchemeCacheNavigate::EKind::KindTopic:
Topics.push_back(childFullPath);
break;
+
default:
break;
// ignore all other types
@@ -985,14 +1066,14 @@ namespace NKikimr::NDataStreams::V1 {
}
auto serviceTypes = GetSupportedClientServiceTypes(ctx);
TString error = AddReadRuleToConfig(pqConfig, readRule, serviceTypes, ctx);
- bool hasDuplicates = false;
- if (error.Empty()) {
- hasDuplicates = CheckReadRulesConfig(*pqConfig, serviceTypes, error, ctx);
- }
- if (!error.Empty()) {
- return ReplyWithError(hasDuplicates ? Ydb::StatusIds::ALREADY_EXISTS : Ydb::StatusIds::BAD_REQUEST,
- hasDuplicates ? Ydb::PersQueue::ErrorCode::OK : Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
+ auto status = error.empty() ? CheckConfig(*pqConfig, serviceTypes, error, ctx, Ydb::StatusIds::ALREADY_EXISTS)
+ : Ydb::StatusIds::BAD_REQUEST;
+ if (status != Ydb::StatusIds::SUCCESS) {
+ return ReplyWithError(status,
+ status == Ydb::StatusIds::ALREADY_EXISTS ? Ydb::PersQueue::ErrorCode::OK
+ : Ydb::PersQueue::ErrorCode::BAD_REQUEST,
+ error, ctx);
}
}
@@ -1203,10 +1284,12 @@ namespace NKikimr::NDataStreams::V1 {
//-----------------------------------------------------------------------------------
class TGetRecordsActor : public TPQGrpcSchemaBase<TGetRecordsActor, TEvDataStreamsGetRecordsRequest>
+ , private TRlHelpers
, public TCdcStreamCompatible
{
using TBase = TPQGrpcSchemaBase<TGetRecordsActor, TEvDataStreamsGetRecordsRequest>;
using TProtoRequest = typename TBase::TProtoRequest;
+ using EWakeupTag = TRlHelpers::EWakeupTag;
static constexpr ui32 READ_TIMEOUT_MS = 150;
static constexpr i32 MAX_LIMIT = 10000;
@@ -1221,25 +1304,28 @@ namespace NKikimr::NDataStreams::V1 {
void Handle(TEvPersQueue::TEvResponse::TPtr& ev, const TActorContext& ctx);
void Handle(TEvTabletPipe::TEvClientConnected::TPtr& ev, const TActorContext& ctx);
void Handle(TEvTabletPipe::TEvClientDestroyed::TPtr& ev, const TActorContext& ctx);
+ void Handle(TEvents::TEvWakeup::TPtr& ev, const TActorContext& ctx);
void Die(const TActorContext& ctx) override;
private:
void SendReadRequest(const TActorContext& ctx);
- void SendResponse(const TActorContext& ctx,
- const std::vector<Ydb::DataStreams::V1::Record>& records,
- ui64 millisBehindLatestMs);
+ void PrepareResponse(const std::vector<Ydb::DataStreams::V1::Record>& records, ui64 millisBehindLatestMs);
+ void SendResponse(const TActorContext& ctx);
+ ui64 GetPayloadSize() const;
TShardIterator ShardIterator;
TString StreamName;
ui64 TabletId;
i32 Limit;
TActorId PipeClient;
+ Ydb::DataStreams::V1::GetRecordsResult Result;
};
TGetRecordsActor::TGetRecordsActor(NKikimr::NGRpcService::IRequestOpCtx* request)
: TBase(request, TShardIterator(GetRequest<TProtoRequest>(request)->shard_iterator()).IsValid()
? TShardIterator(GetRequest<TProtoRequest>(request)->shard_iterator()).GetStreamName()
: "undefined")
+ , TRlHelpers(request, 8_KB, TDuration::Seconds(1))
, ShardIterator{GetRequest<TProtoRequest>(request)->shard_iterator()}
, StreamName{ShardIterator.IsValid() ? ShardIterator.GetStreamName() : "undefined"}
, TabletId{0}
@@ -1301,6 +1387,7 @@ namespace NKikimr::NDataStreams::V1 {
HFunc(TEvPersQueue::TEvResponse, Handle);
HFunc(TEvTabletPipe::TEvClientDestroyed, Handle);
HFunc(TEvTabletPipe::TEvClientConnected, Handle);
+ HFunc(TEvents::TEvWakeup, Handle);
default: TBase::StateWork(ev, ctx);
}
}
@@ -1325,6 +1412,8 @@ namespace NKikimr::NDataStreams::V1 {
}
if (response.Self->Info.GetPathType() == NKikimrSchemeOp::EPathTypePersQueueGroup) {
+ SetMeteringMode(response.PQGroupInfo->Description.GetPQTabletConfig().GetMeteringMode());
+
const auto& partitions = response.PQGroupInfo->Description.GetPartitions();
for (auto& partition : partitions) {
auto partitionId = partition.GetPartitionId();
@@ -1346,7 +1435,13 @@ namespace NKikimr::NDataStreams::V1 {
switch (record.GetErrorCode()) {
case NPersQueue::NErrorCode::READ_ERROR_TOO_SMALL_OFFSET:
case NPersQueue::NErrorCode::READ_ERROR_TOO_BIG_OFFSET:
- return SendResponse(ctx, {}, 0);
+ PrepareResponse({}, 0);
+ if (IsQuotaRequired()) {
+ Y_VERIFY(MaybeRequestQuota(1, EWakeupTag::RlAllowed, ctx));
+ } else {
+ SendResponse(ctx);
+ }
+ return;
default:
return ReplyWithError(ConvertPersQueueInternalCodeToStatus(record.GetErrorCode()),
Ydb::PersQueue::ErrorCode::ERROR,
@@ -1377,7 +1472,13 @@ namespace NKikimr::NDataStreams::V1 {
: 0;
}
- SendResponse(ctx, records, millisBehindLatestMs);
+ PrepareResponse(records, millisBehindLatestMs);
+ if (IsQuotaRequired()) {
+ const auto ru = 1 + CalcRuConsumption(GetPayloadSize());
+ Y_VERIFY(MaybeRequestQuota(ru, EWakeupTag::RlAllowed, ctx));
+ } else {
+ SendResponse(ctx);
+ }
}
void TGetRecordsActor::Handle(TEvTabletPipe::TEvClientConnected::TPtr& ev, const TActorContext& ctx) {
@@ -1392,12 +1493,20 @@ namespace NKikimr::NDataStreams::V1 {
TStringBuilder() << "Cannot connect to tablet " << ev->Get()->TabletId, ctx);
}
- void TGetRecordsActor::SendResponse(const TActorContext& ctx,
- const std::vector<Ydb::DataStreams::V1::Record>& records,
- ui64 millisBehindLatestMs) {
- Ydb::DataStreams::V1::GetRecordsResult result;
+ void TGetRecordsActor::Handle(TEvents::TEvWakeup::TPtr& ev, const TActorContext& ctx) {
+ switch (static_cast<EWakeupTag>(ev->Get()->Tag)) {
+ case EWakeupTag::RlAllowed:
+ return SendResponse(ctx);
+ case EWakeupTag::RlNoResource:
+ return ReplyWithResult(Ydb::StatusIds::OVERLOADED, ctx);
+ default:
+ return HandleWakeup(ev, ctx);
+ }
+ }
+
+ void TGetRecordsActor::PrepareResponse(const std::vector<Ydb::DataStreams::V1::Record>& records, ui64 millisBehindLatestMs) {
for (auto& r : records) {
- auto record = result.add_records();
+ auto record = Result.add_records();
*record = r;
}
@@ -1409,13 +1518,26 @@ namespace NKikimr::NDataStreams::V1 {
ShardIterator.GetStreamArn(),
ShardIterator.GetShardId(),
timestamp, seqNo, ShardIterator.GetKind());
- result.set_next_shard_iterator(shardIterator.Serialize());
- result.set_millis_behind_latest(millisBehindLatestMs);
+ Result.set_next_shard_iterator(shardIterator.Serialize());
+ Result.set_millis_behind_latest(millisBehindLatestMs);
+ }
- Request_->SendResult(result, Ydb::StatusIds::SUCCESS);
+ void TGetRecordsActor::SendResponse(const TActorContext& ctx) {
+ Request_->SendResult(Result, Ydb::StatusIds::SUCCESS);
Die(ctx);
}
+ ui64 TGetRecordsActor::GetPayloadSize() const {
+ ui64 result = 0;
+
+ for (const auto& record : Result.records()) {
+ result += record.data().size()
+ + record.partition_key().size();
+ }
+
+ return result;
+ }
+
void TGetRecordsActor::Die(const TActorContext& ctx) {
NTabletPipe::CloseClient(ctx, PipeClient);
TBase::Die(ctx);
@@ -1837,6 +1959,7 @@ DECLARE_RPC_NI(SubscribeToShard);
DECLARE_RPC_NI(DescribeLimits);
DECLARE_RPC(DescribeStreamSummary);
DECLARE_RPC(UpdateShardCount);
+DECLARE_RPC(UpdateStreamMode);
DECLARE_RPC(ListStreamConsumers);
DECLARE_RPC_NI(AddTagsToStream);
DECLARE_RPC_NI(DisableEnhancedMonitoring);
diff --git a/ydb/services/datastreams/datastreams_proxy.h b/ydb/services/datastreams/datastreams_proxy.h
index 72b9e1ae4b..7a3791a4d0 100644
--- a/ydb/services/datastreams/datastreams_proxy.h
+++ b/ydb/services/datastreams/datastreams_proxy.h
@@ -32,6 +32,7 @@ using TEvDataStreamsDescribeStreamSummaryRequest = TGrpcRequestOperationCall<Ydb
using TEvDataStreamsDecreaseStreamRetentionPeriodRequest = TGrpcRequestOperationCall<Ydb::DataStreams::V1::DecreaseStreamRetentionPeriodRequest, Ydb::DataStreams::V1::DecreaseStreamRetentionPeriodResponse>;
using TEvDataStreamsIncreaseStreamRetentionPeriodRequest = TGrpcRequestOperationCall<Ydb::DataStreams::V1::IncreaseStreamRetentionPeriodRequest, Ydb::DataStreams::V1::IncreaseStreamRetentionPeriodResponse>;
using TEvDataStreamsUpdateShardCountRequest = TGrpcRequestOperationCall<Ydb::DataStreams::V1::UpdateShardCountRequest, Ydb::DataStreams::V1::UpdateShardCountResponse>;
+using TEvDataStreamsUpdateStreamModeRequest = TGrpcRequestOperationCall<Ydb::DataStreams::V1::UpdateStreamModeRequest, Ydb::DataStreams::V1::UpdateStreamModeResponse>;
using TEvDataStreamsUpdateStreamRequest = TGrpcRequestOperationCall<Ydb::DataStreams::V1::UpdateStreamRequest, Ydb::DataStreams::V1::UpdateStreamResponse>;
using TEvDataStreamsSetWriteQuotaRequest = TGrpcRequestOperationCall<Ydb::DataStreams::V1::SetWriteQuotaRequest, Ydb::DataStreams::V1::SetWriteQuotaResponse>;
using TEvDataStreamsListStreamConsumersRequest = TGrpcRequestOperationCall<Ydb::DataStreams::V1::ListStreamConsumersRequest, Ydb::DataStreams::V1::ListStreamConsumersResponse>;
diff --git a/ydb/services/datastreams/datastreams_ut.cpp b/ydb/services/datastreams/datastreams_ut.cpp
index 8f47f8e576..b70cb4331f 100644
--- a/ydb/services/datastreams/datastreams_ut.cpp
+++ b/ydb/services/datastreams/datastreams_ut.cpp
@@ -4,6 +4,7 @@
#include <ydb/services/ydb/ydb_keys_ut.h>
#include <ydb/public/sdk/cpp/client/ydb_datastreams/datastreams.h>
+#include <ydb/public/sdk/cpp/client/ydb_topic/topic.h>
#include <ydb/public/sdk/cpp/client/ydb_persqueue_public/persqueue.h>
#include <ydb/public/sdk/cpp/client/ydb_types/status_codes.h>
#include <ydb/public/sdk/cpp/client/ydb_table/table.h>
@@ -46,6 +47,12 @@ public:
appConfig.MutablePQConfig()->SetCheckACL(false);
appConfig.MutablePQConfig()->SetRequireCredentialsInNewProtocol(false);
+ auto cst = appConfig.MutablePQConfig()->AddClientServiceType();
+ cst->SetName("data-transfer");
+ cst = appConfig.MutablePQConfig()->AddClientServiceType();
+ cst->SetName("data-transfer2");
+
+
appConfig.MutablePQConfig()->MutableQuotingConfig()->SetEnableQuoting(true);
appConfig.MutablePQConfig()->MutableQuotingConfig()->SetQuotaWaitDurationMs(300);
appConfig.MutablePQConfig()->MutableQuotingConfig()->SetPartitionReadQuotaIsTwiceWriteQuota(true);
@@ -56,6 +63,23 @@ public:
appConfig.MutablePQConfig()->AddNonChargeableUser(NON_CHARGEABLE_USER_X);
appConfig.MutablePQConfig()->AddNonChargeableUser(NON_CHARGEABLE_USER_Y);
+ appConfig.MutablePQConfig()->AddValidWriteSpeedLimitsKbPerSec(128);
+ appConfig.MutablePQConfig()->AddValidWriteSpeedLimitsKbPerSec(512);
+ appConfig.MutablePQConfig()->AddValidWriteSpeedLimitsKbPerSec(1_KB);
+
+ auto limit = appConfig.MutablePQConfig()->AddValidRetentionLimits();
+ limit->SetMinPeriodSeconds(0);
+ limit->SetMaxPeriodSeconds(TDuration::Days(1).Seconds());
+ limit->SetMinStorageMegabytes(0);
+ limit->SetMaxStorageMegabytes(0);
+
+ limit = appConfig.MutablePQConfig()->AddValidRetentionLimits();
+ limit->SetMinPeriodSeconds(0);
+ limit->SetMaxPeriodSeconds(TDuration::Days(7).Seconds());
+ limit->SetMinStorageMegabytes(50_KB);
+ limit->SetMaxStorageMegabytes(1_MB);
+
+
MeteringFile = MakeHolder<TTempFileHandle>("meteringData.txt");
appConfig.MutableMeteringConfig()->SetMeteringFilePath(MeteringFile->Name());
@@ -165,7 +189,45 @@ Y_UNIT_TEST_SUITE(DataStreams) {
Y_UNIT_TEST(TestControlPlaneAndMeteringData) {
TInsecureDatastreamsTestServer testServer;
const TString streamName = TStringBuilder() << "stream_" << Y_UNIT_TEST_NAME;
+ const TString streamName2 = TStringBuilder() << "tdir/stream_" << Y_UNIT_TEST_NAME;
+ const TString streamName3 = TStringBuilder() << "tdir/table/feed_" << Y_UNIT_TEST_NAME;
+ const TString tableName = "tdir/table";
+ const TString feedName = TStringBuilder() << "feed_" << Y_UNIT_TEST_NAME;
+
+ {
+ NYdb::NTopic::TTopicClient pqClient(*testServer.Driver);
+ auto result = pqClient.CreateTopic(streamName2).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ }
+
+ {
+ NYdb::NTable::TTableClient tableClient(*testServer.Driver);
+ tableClient.RetryOperationSync([&](TSession session)
+ {
+ NYdb::NTable::TTableBuilder builder;
+ builder.AddNonNullableColumn("key", NYdb::EPrimitiveType::String).SetPrimaryKeyColumn("key");
+
+ auto result = session.CreateTable("/Root/" + tableName, builder.Build()).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+
+ auto result2 = session.AlterTable("/Root/" + tableName, NYdb::NTable::TAlterTableSettings()
+ .AppendAddChangefeeds(NYdb::NTable::TChangefeedDescription(feedName,
+ NYdb::NTable::EChangefeedMode::Updates,
+ NYdb::NTable::EChangefeedFormat::Json))
+ ).ExtractValueSync();
+ Cerr << result2.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result2.IsTransportError(), false);
+ UNIT_ASSERT_VALUES_EQUAL(result2.GetStatus(), EStatus::SUCCESS);
+ return result2;
+ }
+ );
+ }
+
// Trying to delete stream that doesn't exist yet
+
{
auto result = testServer.DataStreamsClient->DeleteStream("testfolder/" + streamName).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
@@ -179,13 +241,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
if (result.GetStatus() != EStatus::SUCCESS) {
result.GetIssues().PrintTo(Cerr);
}
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->DescribeStream(streamName).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().stream_status(),
YDS_V1::StreamDescription::ACTIVE);
@@ -206,7 +269,8 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{
auto result = testServer.DataStreamsClient->DescribeStreamSummary(streamName).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description_summary().stream_status(),
YDS_V1::StreamDescription::ACTIVE);
@@ -216,16 +280,11 @@ Y_UNIT_TEST_SUITE(DataStreams) {
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description_summary().open_shard_count(), 3);
}
- {
- auto result = testServer.DataStreamsClient->CreateStream("testfolder/" + streamName).ExtractValueSync();
- UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
- }
{
auto result = testServer.DataStreamsClient->ListStreams().ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_names().size(), 1);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_names(0), streamName);
}
@@ -242,14 +301,26 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->UpdateShardCount(streamName,
NYDS_V1::TUpdateShardCountSettings().TargetShardCount(15)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ // list all streams, include cdc and recursive
+ {
+ auto result = testServer.DataStreamsClient->ListStreams(NYdb::NDataStreams::V1::TListStreamsSettings().Recurse(true)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ Cerr << result.GetResult() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_names().size(), 3);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_names(0), streamName);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_names(1), streamName2);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_names(2), streamName3);
}
// now when stream is created delete should work fine
{
auto result = testServer.DataStreamsClient->DeleteStream(streamName).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
// Describe should fail after delete
@@ -258,6 +329,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SCHEME_ERROR);
}
+
+ {
+ auto result = testServer.DataStreamsClient->CreateStream("testfolder/" + streamName).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ }
+
+
}
Y_UNIT_TEST(TestReservedResourcesMetering) {
@@ -266,9 +345,16 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(10)
- .RetentionPeriodHours(20)).ExtractValueSync();
+ .RetentionPeriodHours(20).StreamMode(NYdb::NDataStreams::V1::ESM_ON_DEMAND)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+ {
+ auto result = testServer.DataStreamsClient->UpdateStreamMode(streamName,
+ NYDS_V1::TUpdateStreamModeSettings().StreamMode(NYdb::NDataStreams::V1::ESM_PROVISIONED)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -281,7 +367,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->PutRecords(streamName, records).ExtractValueSync();
Cerr << result.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
sleep(1);
}
}
@@ -318,7 +404,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
UNIT_ASSERT(map.contains("tags"));
auto& tags = map.find("tags")->second.GetMap();
UNIT_ASSERT(tags.contains("reserved_throughput_bps"));
- UNIT_ASSERT(tags.contains("shard_enhanced_consumers_throughput"));
+ UNIT_ASSERT(tags.contains("reserved_consumers_count"));
UNIT_ASSERT(tags.contains("reserved_storage_bytes"));
},
[streamName](const NJson::TJsonValue::TMapType& map) {
@@ -346,13 +432,13 @@ Y_UNIT_TEST_SUITE(DataStreams) {
TInsecureDatastreamsTestServer testServer;
const TString streamName = TStringBuilder() << "stream_" << Y_UNIT_TEST_NAME;
const ui64 storageMb = 55_GB / 1_MB;
- const ui32 shardCount = 5;
+ const ui32 shardCount = 2;
{
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(shardCount)
.RetentionStorageMegabytes(storageMb)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -365,7 +451,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->PutRecords(streamName, records).ExtractValueSync();
Cerr << result.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
sleep(1);
}
}
@@ -388,16 +474,17 @@ Y_UNIT_TEST_SUITE(DataStreams) {
[storageMb](const NJson::TJsonValue::TMapType& map) {
UNIT_ASSERT(map.contains("usage"));
auto& usage = map.find("usage")->second.GetMap();
- UNIT_ASSERT_VALUES_EQUAL(usage.find("quantity")->second.GetUInteger(),
- storageMb);
UNIT_ASSERT_GT(usage.find("start")->second.GetUInteger(),
TInstant::Now().Seconds() - 10);
UNIT_ASSERT_GT(usage.find("finish")->second.GetUInteger(),
TInstant::Now().Seconds() - 9);
UNIT_ASSERT_VALUES_EQUAL(usage.find("unit")->second.GetString(),
"mbyte*second");
+ UNIT_ASSERT_VALUES_EQUAL(usage.find("quantity")->second.GetUInteger(),
+ storageMb);
+
});
- UNIT_ASSERT_VALUES_EQUAL(storageSchemaFound, 20);
+ UNIT_ASSERT_VALUES_EQUAL(storageSchemaFound, 8);
auto throughputSchemaFound =
CheckMeteringFile(testServer.MeteringFile.Get(), "/Root/" + streamName,
@@ -405,9 +492,12 @@ Y_UNIT_TEST_SUITE(DataStreams) {
[](const NJson::TJsonValue::TMapType& map) {
UNIT_ASSERT(map.contains("tags"));
auto& tags = map.find("tags")->second.GetMap();
- UNIT_ASSERT_VALUES_EQUAL(tags.size(), 1);
+ UNIT_ASSERT_VALUES_EQUAL(tags.size(), 2);
UNIT_ASSERT_VALUES_EQUAL(
tags.find("reserved_throughput_bps")->second.GetUInteger(), 1_MB);
+ UNIT_ASSERT_VALUES_EQUAL(
+ tags.find("reserved_consumers_count")->second.GetUInteger(), 0);
+
},
[streamName](const NJson::TJsonValue::TMapType& map) {
UNIT_ASSERT(map.contains("labels"));
@@ -429,7 +519,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
UNIT_ASSERT_VALUES_EQUAL(usage.find("unit")->second.GetString(),
"second");
});
- UNIT_ASSERT_VALUES_EQUAL(throughputSchemaFound, 20);
+ UNIT_ASSERT_VALUES_EQUAL(throughputSchemaFound, 8);
auto putUnitsSchemaFound =
CheckMeteringFile(testServer.MeteringFile.Get(), "/Root/" + streamName, "yds.events.puts.v1",
@@ -456,9 +546,156 @@ Y_UNIT_TEST_SUITE(DataStreams) {
UNIT_ASSERT_VALUES_EQUAL(usage.find("unit")->second.GetString(),
"put_events");
});
- UNIT_ASSERT_VALUES_EQUAL(putUnitsSchemaFound, 20);
+ UNIT_ASSERT_VALUES_EQUAL(putUnitsSchemaFound, 8);
+
+ NYdb::NPersQueue::TPersQueueClient pqClient(*testServer.Driver);
+ {
+ auto res = pqClient.DropTopic(streamName);
+ res.Wait();
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ }
+ }
+
+
+ Y_UNIT_TEST(TestReservedConsumersMetering) {
+ TInsecureDatastreamsTestServer testServer;
+ const TString streamName = TStringBuilder() << "stream_" << Y_UNIT_TEST_NAME;
+ const ui64 storageMb = 55_GB / 1_MB;
+ const ui32 shardCount = 1;
+ {
+ auto result = testServer.DataStreamsClient->CreateStream(streamName,
+ NYDS_V1::TCreateStreamSettings().ShardCount(shardCount)
+ .RetentionStorageMegabytes(storageMb)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ }
+
+
+ NYdb::NPersQueue::TPersQueueClient pqClient(*testServer.Driver);
+ std::vector<std::pair<TString, TString>> opts = {{"user1", ""}, {"user2", "data-transfer"}, {"user3", "data-streams"}, {"user4", "data-transfer2"}};
+ for (const auto& p : opts) {
+ NYdb::NPersQueue::TAddReadRuleSettings addReadRuleSettings;
+ addReadRuleSettings.ReadRule(NYdb::NPersQueue::TReadRuleSettings().ServiceType(p.second).ConsumerName(p.first));
+ auto res = pqClient.AddReadRule(streamName, addReadRuleSettings);
+ res.Wait();
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ }
+
+ {
+ for (int i = 0; i < 5; ++i) {
+ std::vector<NYDS_V1::TDataRecord> records;
+ for (ui32 i = 1; i <= 30; ++i) {
+ TString data = Sprintf("%04u", i);
+ records.push_back({data, data, ""});
+ }
+ auto result = testServer.DataStreamsClient->PutRecords(streamName, records).ExtractValueSync();
+ Cerr << result.GetResult().DebugString() << Endl;
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
+ sleep(1);
+ }
+ }
+
+ std::vector<TString> consumers = {"user1", "user2"};
+ for (auto& consumer : consumers) {
+ NYdb::NTopic::TTopicClient pqClient(*testServer.Driver);
+
+ auto session = pqClient.CreateReadSession(NYdb::NTopic::TReadSessionSettings()
+ .ConsumerName(consumer)
+ .AppendTopics(NYdb::NTopic::TTopicReadSettings().Path("/Root/" + streamName)));
+ ui32 readCount = 0;
+ while (readCount < 150) {
+ auto event = session->GetEvent(true);
+
+ if (auto* dataReceivedEvent = std::get_if<NYdb::NTopic::TReadSessionEvent::TDataReceivedEvent>(&*event)) {
+ readCount += dataReceivedEvent->GetMessages().size();
+ } else if (auto* createPartitionStreamEvent = std::get_if<NYdb::NTopic::TReadSessionEvent::TStartPartitionSessionEvent>(&*event)) {
+ createPartitionStreamEvent->Confirm();
+ } else if (auto* destroyPartitionStreamEvent = std::get_if<NYdb::NTopic::TReadSessionEvent::TStopPartitionSessionEvent>(&*event)) {
+ destroyPartitionStreamEvent->Confirm();
+ } else if (auto* closeSessionEvent = std::get_if<NYdb::NTopic::TSessionClosedEvent>(&*event)) {
+ break;
+ }
+ }
+ UNIT_ASSERT_VALUES_EQUAL(readCount, 150);
+ }
+
+ {
+ auto res = pqClient.DropTopic(streamName);
+ res.Wait();
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ }
+
+ auto storageSchemaFound =
+ CheckMeteringFile(testServer.MeteringFile.Get(), "/Root/" + streamName, "yds.storage.reserved.v1",
+ [](const NJson::TJsonValue::TMapType& map) {
+ UNIT_ASSERT(map.contains("tags"));
+ UNIT_ASSERT_VALUES_EQUAL(map.find("tags")->second.GetMap().size(), 0);
+ },
+ [streamName](const NJson::TJsonValue::TMapType& map) {
+ UNIT_ASSERT(map.contains("labels"));
+ auto& labels = map.find("labels")->second.GetMap();
+ UNIT_ASSERT_VALUES_EQUAL(labels.size(), 2);
+ UNIT_ASSERT_VALUES_EQUAL(
+ labels.find("datastreams_stream_name")->second.GetString(), streamName);
+ UNIT_ASSERT_VALUES_EQUAL(
+ labels.find("ydb_database")->second.GetString(), "root");
+ },
+ [/*storageMb*/](const NJson::TJsonValue::TMapType& map) {
+ UNIT_ASSERT(map.contains("usage"));
+ auto& usage = map.find("usage")->second.GetMap();
+ UNIT_ASSERT_GT(usage.find("start")->second.GetUInteger(),
+ TInstant::Now().Seconds() - 10);
+ UNIT_ASSERT_GT(usage.find("finish")->second.GetUInteger(),
+ TInstant::Now().Seconds() - 9);
+ UNIT_ASSERT_VALUES_EQUAL(usage.find("unit")->second.GetString(),
+ "mbyte*second");
+ // UNIT_ASSERT_VALUES_EQUAL(usage.find("quantity")->second.GetUInteger(),
+ // storageMb);
+
+ });
+ UNIT_ASSERT_VALUES_EQUAL(storageSchemaFound, 9);
+
+
+ ui32 s = 0;
+ auto throughputSchemaFound =
+ CheckMeteringFile(testServer.MeteringFile.Get(), "/Root/" + streamName,
+ "yds.throughput.reserved.v1",
+ [&s](const NJson::TJsonValue::TMapType& map) {
+ UNIT_ASSERT(map.contains("tags"));
+ auto& tags = map.find("tags")->second.GetMap();
+ UNIT_ASSERT_VALUES_EQUAL(tags.size(), 2);
+ UNIT_ASSERT_VALUES_EQUAL(
+ tags.find("reserved_throughput_bps")->second.GetUInteger(), 1_MB);
+ UNIT_ASSERT_VALUES_EQUAL(
+ tags.find("reserved_consumers_count")->second.GetUInteger(), ui32(s >= 1) + ui32(s >= 3) );
+ ++s;
+
+ },
+ [streamName](const NJson::TJsonValue::TMapType& map) {
+ UNIT_ASSERT(map.contains("labels"));
+ auto& labels = map.find("labels")->second.GetMap();
+ UNIT_ASSERT_VALUES_EQUAL(labels.size(), 2);
+ UNIT_ASSERT_VALUES_EQUAL(
+ labels.find("datastreams_stream_name")->second.GetString(), streamName);
+ UNIT_ASSERT_VALUES_EQUAL(
+ labels.find("ydb_database")->second.GetString(), "root");
+ },
+ [](const NJson::TJsonValue::TMapType& map) {
+ UNIT_ASSERT(map.contains("usage"));
+ auto& usage = map.find("usage")->second.GetMap();
+ UNIT_ASSERT(usage.find("quantity")->second.GetInteger() <= 1);
+ UNIT_ASSERT_GT(usage.find("start")->second.GetUInteger(),
+ TInstant::Now().Seconds() - 10);
+ UNIT_ASSERT_GT(usage.find("finish")->second.GetUInteger(),
+ TInstant::Now().Seconds() - 9);
+ UNIT_ASSERT_VALUES_EQUAL(usage.find("unit")->second.GetString(),
+ "second");
+ });
+ UNIT_ASSERT_VALUES_EQUAL(throughputSchemaFound, 9);
}
+
Y_UNIT_TEST(TestNonChargeableUser) {
TSecureDatastreamsTestServer testServer;
const TString streamName = TStringBuilder() << "stream_" << Y_UNIT_TEST_NAME;
@@ -492,7 +729,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = client.PutRecords(streamPath, records).ExtractValueSync();
Cerr << result.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -500,13 +737,13 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TUpdateStreamSettings().TargetShardCount(2)
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->DeleteStream(streamPath).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
auto putUnitsSchemaFound =
@@ -522,7 +759,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
UNIT_ASSERT(map.contains("tags"));
auto& tags = map.find("tags")->second.GetMap();
UNIT_ASSERT(tags.contains("reserved_throughput_bps"));
- UNIT_ASSERT(tags.contains("shard_enhanced_consumers_throughput"));
+ UNIT_ASSERT(tags.contains("reserved_consumers_count"));
UNIT_ASSERT(tags.contains("reserved_storage_bytes"));
},
[streamName](const NJson::TJsonValue::TMapType& map) {
@@ -554,6 +791,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TCreateStreamSettings().ShardCount(10)
.RetentionStorageMegabytes(40_GB / 1_MB)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
}
@@ -603,7 +841,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TCreateStreamSettings().ShardCount(10)
.RetentionStorageMegabytes(50_GB / 1_MB)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -623,7 +861,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{
auto result = testServer.DataStreamsClient->DescribeStream(streamName).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().stream_status(),
YDS_V1::StreamDescription::ACTIVE);
@@ -631,6 +869,11 @@ Y_UNIT_TEST_SUITE(DataStreams) {
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().write_quota_kb_per_sec(), 1_KB);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().retention_period_hours(),
TDuration::Days(7).Hours());
+ UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().storage_limit_mb(), 50_GB / 1_MB);
+ UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().stream_mode_details().stream_mode(),
+ Ydb::DataStreams::V1::StreamMode::PROVISIONED);
+
+
}
}
@@ -641,7 +884,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(10)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -665,7 +908,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
).ExtractValueSync();
Cerr << result.GetIssues().ToString() << "\n";
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
}
@@ -674,7 +917,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
for (int i = 0; i < 3; i++) {
auto result = testServer.DataStreamsClient->ListStreams(NYDS_V1::TListStreamsSettings().Limit(6).ExclusiveStartStreamName(startStream)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_names().size(), 6);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().has_more_streams(), true);
streams.insert(result.GetResult().stream_names().begin(), result.GetResult().stream_names().end());
@@ -684,7 +927,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{
auto result = testServer.DataStreamsClient->ListStreams(NYDS_V1::TListStreamsSettings().Limit(6).ExclusiveStartStreamName(startStream)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_names().size(), 2);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().has_more_streams(), false);
streams.insert(result.GetResult().stream_names().begin(), result.GetResult().stream_names().end());
@@ -700,13 +943,13 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(3)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->DeleteStream(streamName).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
}
@@ -717,14 +960,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(3)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->RegisterStreamConsumer(streamName, "user1",
NYDS_V1::TRegisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -737,7 +980,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->DeleteStream(streamName,
NYDS_V1::TDeleteStreamSettings().EnforceConsumerDeletion(true)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
}
@@ -749,14 +992,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(3)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->RegisterStreamConsumer(streamName, "user1",
NYDS_V1::TRegisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -770,14 +1013,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->DeregisterStreamConsumer(streamName, "user1",
NYDS_V1::TDeregisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->DeleteStream(streamName,
NYDS_V1::TDeleteStreamSettings().EnforceConsumerDeletion(false)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
}
@@ -788,21 +1031,22 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(10)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
for (ui32 i = 0; i < 2; ++i) {
auto result = testServer.DataStreamsClient->UpdateStream(streamName,
NYDS_V1::TUpdateStreamSettings().RetentionPeriodHours(5).TargetShardCount(20).WriteQuotaKbPerSec(128)
).ExtractValueSync();
+ Cerr << result.GetIssues().ToString() << "\n";
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->DescribeStream(streamName).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().shards_size(), 20);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().retention_period_hours(), 5);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().write_quota_kb_per_sec(), 128);
@@ -819,7 +1063,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TCreateStreamSettings().ShardCount(1).RetentionStorageMegabytes(50_GB / 1_MB))
.ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -829,13 +1073,13 @@ Y_UNIT_TEST_SUITE(DataStreams) {
.RetentionStorageMegabytes(55_GB / 1_MB)
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->DescribeStream(streamName).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().shards_size(), 10);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().retention_period_hours(),
TDuration::Days(7).Hours());
@@ -852,14 +1096,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->DescribeStream(streamName,
NYDS_V1::TDescribeStreamSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().stream_description().retention_period_hours(), 24);
}
@@ -876,7 +1120,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TDecreaseStreamRetentionPeriodSettings().RetentionPeriodHours(8)
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -892,7 +1136,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TIncreaseStreamRetentionPeriodSettings().RetentionPeriodHours(15)
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -905,7 +1149,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->PutRecords(streamName, records).ExtractValueSync();
Cerr << result.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
sleep(1);
}
}
@@ -919,9 +1163,12 @@ Y_UNIT_TEST_SUITE(DataStreams) {
[](const NJson::TJsonValue::TMapType& map) {
UNIT_ASSERT(map.contains("tags"));
auto& tags = map.find("tags")->second.GetMap();
- UNIT_ASSERT_VALUES_EQUAL(tags.size(), 1);
+ UNIT_ASSERT_VALUES_EQUAL(tags.size(), 2);
UNIT_ASSERT_VALUES_EQUAL(
tags.find("reserved_throughput_bps")->second.GetInteger(), 1_MB);
+ UNIT_ASSERT_VALUES_EQUAL(
+ tags.find("reserved_consumers_count")->second.GetInteger(), 0);
+
},
[](const NJson::TJsonValue::TMapType& map) {
UNIT_ASSERT(map.contains("usage"));
@@ -940,7 +1187,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream("/Root/" + streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(9)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
// describe stream
@@ -954,7 +1201,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
.ExclusiveStartShardId(exclusiveStartShardId)
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
auto& description = result.GetResult().stream_description();
UNIT_ASSERT_VALUES_EQUAL(description.shards().size(), 2);
UNIT_ASSERT_VALUES_EQUAL(description.has_more_shards(), true);
@@ -971,7 +1218,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
.ExclusiveStartShardId(exclusiveStartShardId)
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
auto &description = result.GetResult().stream_description();
UNIT_ASSERT_VALUES_EQUAL(description.shards().size(), 1);
UNIT_ASSERT_VALUES_EQUAL(description.has_more_shards(), false);
@@ -994,7 +1241,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(5)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
NYDS_V1::TDataStreamsClient client(*driver, TCommonClientSettings().AuthToken(""));
@@ -1004,7 +1251,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto putRecordResult =
client.PutRecord("/Root/" + streamName, {dataStr, dataStr, dataStr}).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(putRecordResult.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(putRecordResult.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(putRecordResult.GetStatus(), EStatus::SUCCESS, putRecordResult.GetIssues().ToString());
}
Y_UNIT_TEST(TestPutRecordsWithRead) {
@@ -1015,7 +1262,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(5)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
kikimr->GetRuntime()->SetLogPriority(NKikimrServices::PQ_READ_PROXY, NLog::EPriority::PRI_DEBUG);
kikimr->GetRuntime()->SetLogPriority(NKikimrServices::PQ_WRITE_PROXY, NLog::EPriority::PRI_DEBUG);
@@ -1028,7 +1275,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
Cerr << putRecordResult.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(putRecordResult.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(putRecordResult.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(putRecordResult.GetStatus(), EStatus::SUCCESS, putRecordResult.GetIssues().ToString());
{
std::vector<NYDS_V1::TDataRecord> records;
@@ -1039,7 +1286,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = client.PutRecords(streamName, records).ExtractValueSync();
Cerr << result.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
NYdb::NPersQueue::TPersQueueClient pqClient(*driver);
@@ -1047,7 +1294,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{
auto result = testServer.DataStreamsClient->RegisterStreamConsumer(streamName, "user1", NYDS_V1::TRegisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumer().consumer_name(), "user1");
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumer().consumer_status(),
YDS_V1::ConsumerDescription_ConsumerStatus_ACTIVE);
@@ -1093,7 +1340,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(5)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
kikimr->GetRuntime()->SetLogPriority(NKikimrServices::PQ_READ_PROXY, NLog::EPriority::PRI_DEBUG);
NYDS_V1::TDataStreamsClient client(*driver, TCommonClientSettings().AuthToken("user2@builtin"));
@@ -1111,7 +1358,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{{shortEnoughKey, shortEnoughKey, ""},
{shortEnoughKey, shortEnoughKey, ""}}).ExtractValueSync();
UNIT_ASSERT(result.IsSuccess());
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
// Test for too long data
TString longData = TString(1_MB + 1, '1');
@@ -1127,7 +1374,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{{shortEnoughData, shortEnoughKey, ""},
{"", shortEnoughKey, ""}}).ExtractValueSync();
UNIT_ASSERT(result.IsSuccess());
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
TString longExplicitHash = "340282366920938463463374607431768211456";
TString shortEnoughExplicitHash = "340282366920938463463374607431768211455";
@@ -1149,13 +1396,13 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{{"", shortEnoughKey, shortEnoughExplicitHash},
{"", shortEnoughKey, shortEnoughExplicitHash}}).ExtractValueSync();
UNIT_ASSERT(result.IsSuccess());
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
result = client.PutRecords(streamName,
{{"", shortEnoughKey, "0"},
{"", shortEnoughKey, "0"}}).ExtractValueSync();
UNIT_ASSERT(result.IsSuccess());
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
kikimr->GetRuntime()->SetLogPriority(NKikimrServices::PQ_READ_PROXY, NLog::EPriority::PRI_INFO);
kikimr->GetRuntime()->SetLogPriority(NKikimrServices::PERSQUEUE, NLog::EPriority::PRI_INFO);
@@ -1270,7 +1517,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
result = client.PutRecords(streamPath, records).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
Cerr << "PutRecordsResponse = " << result.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().failed_record_count(), 0);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records_size(), records.size());
@@ -1279,7 +1526,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
TString dataStr = "9876543210";
auto putRecordResult = client.PutRecord(streamPath, {dataStr, dataStr, ""}).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(putRecordResult.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(putRecordResult.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(putRecordResult.GetStatus(), EStatus::SUCCESS, putRecordResult.GetIssues().ToString());
Cerr << "PutRecord response = " << putRecordResult.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(putRecordResult.GetResult().shard_id(), "shard-000004");
UNIT_ASSERT_VALUES_EQUAL(putRecordResult.GetResult().sequence_number(), "7");
@@ -1297,7 +1544,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(5)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
kikimr->GetRuntime()->SetLogPriority(NKikimrServices::PQ_READ_PROXY, NLog::EPriority::PRI_DEBUG);
kikimr->GetRuntime()->SetLogPriority(NKikimrServices::PQ_WRITE_PROXY, NLog::EPriority::PRI_DEBUG);
@@ -1309,7 +1556,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
Cerr << putRecordResult.GetResult().DebugString() << Endl;
UNIT_ASSERT_VALUES_EQUAL(putRecordResult.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(putRecordResult.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(putRecordResult.GetStatus(), EStatus::SUCCESS, putRecordResult.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(putRecordResult.GetResult().sequence_number(), "0");
NYdb::NPersQueue::TPersQueueClient pqClient(*driver);
@@ -1317,7 +1564,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{
auto result = testServer.DataStreamsClient->RegisterStreamConsumer(streamName, "user1", NYDS_V1::TRegisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumer().consumer_name(), "user1");
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumer().consumer_status(),
YDS_V1::ConsumerDescription_ConsumerStatus_ACTIVE);
@@ -1359,7 +1606,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(5)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
// List stream consumers -> OK
@@ -1367,7 +1614,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->ListStreamConsumers(streamName,
NYDS_V1::TListStreamConsumersSettings().MaxResults(100)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumers().size(), 0);
}
@@ -1408,7 +1655,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->RegisterStreamConsumer(streamName, "user1",
NYDS_V1::TRegisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumer().consumer_name(), "user1");
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumer().consumer_status(),
YDS_V1::ConsumerDescription_ConsumerStatus_ACTIVE);
@@ -1419,7 +1666,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->RegisterStreamConsumer(streamName, "user2",
NYDS_V1::TRegisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumer().consumer_name(), "user2");
}
@@ -1428,7 +1675,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->ListStreamConsumers(streamName,
NYDS_V1::TListStreamConsumersSettings().MaxResults(100)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumers().size(), 2);
}
@@ -1437,7 +1684,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->DeregisterStreamConsumer(streamName, "user2",
NYDS_V1::TDeregisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
// List stream consumers -> OK, there's only 1 now
@@ -1445,7 +1692,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->ListStreamConsumers(streamName,
NYDS_V1::TListStreamConsumersSettings().MaxResults(100)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumers().size(), 1);
}
@@ -1454,7 +1701,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->RegisterStreamConsumer(streamName, "user2",
NYDS_V1::TRegisterStreamConsumerSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumer().consumer_name(), "user2");
}
@@ -1471,7 +1718,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->ListStreamConsumers(streamName,
NYDS_V1::TListStreamConsumersSettings().MaxResults(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumers().size(), 1);
UNIT_ASSERT_VALUES_UNEQUAL(result.GetResult().next_token().size(), 0);
@@ -1479,7 +1726,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
result = testServer.DataStreamsClient->ListStreamConsumers(streamName,
NYDS_V1::TListStreamConsumersSettings().NextToken(nextToken)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumers().size(), 1);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().next_token().size(), 0);
}
@@ -1489,7 +1736,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->ListStreamConsumers(streamName,
NYDS_V1::TListStreamConsumersSettings().MaxResults(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().consumers().size(), 1);
UNIT_ASSERT_VALUES_UNEQUAL(result.GetResult().next_token().size(), 0);
@@ -1537,7 +1784,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->DeleteStream(streamName,
NYDS_V1::TDeleteStreamSettings().EnforceConsumerDeletion(true)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
// List consumers of deleted stream -> get BAD_REQUEST
@@ -1556,7 +1803,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TCreateStreamSettings().ShardCount(5)
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -1577,7 +1824,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetShardIterator(streamName, "shard-000001",
YDS_V1::ShardIteratorType::LATEST).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -1593,7 +1840,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TGetShardIteratorSettings().StartingSequenceNumber("0")
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -1602,7 +1849,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TGetShardIteratorSettings().StartingSequenceNumber("0")
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -1611,7 +1858,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TGetShardIteratorSettings().StartingSequenceNumber("100")
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -1620,7 +1867,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TGetShardIteratorSettings().StartingSequenceNumber("001122")
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -1638,7 +1885,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TGetShardIteratorSettings().Timestamp(TInstant::Now().MilliSeconds() * 0.99)
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
NKikimrPQ::TYdsShardIterator protoShardIterator;
TString decoded;
@@ -1664,7 +1911,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
const ui32 recordsCount = 30;
@@ -1687,14 +1934,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetShardIterator(streamName, "shard-000000",
YDS_V1::ShardIteratorType::LATEST).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 0);
}
@@ -1702,14 +1949,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetShardIterator(streamName, "shard-000000",
YDS_V1::ShardIteratorType::TRIM_HORIZON).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), recordsCount);
}
@@ -1719,14 +1966,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TGetShardIteratorSettings().StartingSequenceNumber("0002")
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), recordsCount - 2);
}
@@ -1736,14 +1983,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TGetShardIteratorSettings().StartingSequenceNumber("0002")
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), recordsCount - 3);
}
@@ -1753,14 +2000,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TGetShardIteratorSettings().StartingSequenceNumber("99999")
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 0);
}
@@ -1768,7 +2015,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetShardIterator(streamName, "shard-000000",
YDS_V1::ShardIteratorType::LATEST).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
@@ -1783,7 +2030,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), recordsCount);
}
@@ -1797,7 +2044,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream("/Root/" + streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
std::string data;
@@ -1808,7 +2055,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TDataRecord dataRecord{{data.begin(), data.end()}, id, ""};
auto result = testServer.DataStreamsClient->PutRecord(streamName, dataRecord).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
NYDS_V1::TDataStreamsClient client(*driver, TCommonClientSettings().AuthToken("user2@builtin"));
@@ -1847,7 +2094,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
YDS_V1::ShardIteratorType::TRIM_HORIZON
).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
@@ -1855,7 +2102,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = client.GetRecords(shardIterator,
NYDS_V1::TGetRecordsSettings().Limit(2)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 1);
UNIT_ASSERT_VALUES_EQUAL(std::stoi(result.GetResult().records().begin()->sequence_number()), 0);
}
@@ -1868,7 +2115,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
std::vector<std::string> putData;
@@ -1887,7 +2134,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
NYDS_V1::TDataRecord dataRecord{{data.begin(), data.end()}, id, ""};
auto result = testServer.DataStreamsClient->PutRecord(streamName, dataRecord).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
Sleep(TDuration::Seconds(1));
}
@@ -1901,7 +2148,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
YDS_V1::ShardIteratorType::AT_SEQUENCE_NUMBER,
NYDS_V1::TGetShardIteratorSettings().StartingSequenceNumber(id)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
@@ -1909,7 +2156,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetRecords(shardIterator,
NYDS_V1::TGetRecordsSettings().Limit(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 1);
UNIT_ASSERT_VALUES_EQUAL(
std::stoi(result.GetResult().records().begin()->sequence_number()), i);
@@ -1926,7 +2173,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
const ui32 recordsCount = 24;
@@ -1945,7 +2192,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
timestamps.push_back(TInstant::Now().MilliSeconds());
auto result = testServer.DataStreamsClient->PutRecord(streamName, dataRecord).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
Sleep(TDuration::Seconds(1));
}
@@ -1959,7 +2206,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
YDS_V1::ShardIteratorType::AT_TIMESTAMP,
NYDS_V1::TGetShardIteratorSettings().Timestamp(timestamps[i])).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
@@ -1967,7 +2214,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetRecords(shardIterator,
NYDS_V1::TGetRecordsSettings().Limit(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 1);
UNIT_ASSERT_VALUES_EQUAL(std::stoi(result.GetResult().records().begin()->sequence_number()), i);
}
@@ -1982,7 +2229,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(5)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
const ui32 recordsCount = 30;
@@ -2005,14 +2252,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetShardIterator(streamName, "shard-000001",
YDS_V1::ShardIteratorType::LATEST).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 0);
}
@@ -2020,14 +2267,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetShardIterator(streamName, "shard-000002",
YDS_V1::ShardIteratorType::LATEST).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 0);
}
@@ -2035,14 +2282,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetShardIterator(streamName, "shard-000003",
YDS_V1::ShardIteratorType::LATEST).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 0);
}
@@ -2050,14 +2297,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->GetShardIterator(streamName, "shard-000002",
YDS_V1::ShardIteratorType::LATEST).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
shardIterator = result.GetResult().shard_iterator();
}
{
auto result = testServer.DataStreamsClient->GetRecords(shardIterator).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().records().size(), 0);
}
}
@@ -2069,14 +2316,14 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->CreateStream(streamName,
NYDS_V1::TCreateStreamSettings().ShardCount(1)).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
auto result = testServer.DataStreamsClient->ListShards(streamName, {},
NYDS_V1::TListShardsSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
}
{
@@ -2085,7 +2332,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->ListShards(streamName, filter,
NYDS_V1::TListShardsSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().shards().size(), 1);
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().shards().begin()->shard_id(), "shard-000000");
UNIT_ASSERT_VALUES_UNEQUAL(result.GetResult().shards().begin()->shard_id(), "shard-000001");
@@ -2097,7 +2344,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->ListShards(streamName, filter,
NYDS_V1::TListShardsSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().shards().size(), 1);
}
@@ -2108,7 +2355,7 @@ Y_UNIT_TEST_SUITE(DataStreams) {
auto result = testServer.DataStreamsClient->ListShards(streamName, filter,
NYDS_V1::TListShardsSettings()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
UNIT_ASSERT_VALUES_EQUAL(result.GetResult().shards().size(), 1);
}
@@ -2192,4 +2439,72 @@ Y_UNIT_TEST_SUITE(DataStreams) {
}
+ Y_UNIT_TEST(TestInvalidRetentionCombinations) {
+ TInsecureDatastreamsTestServer testServer;
+ const TString streamName = TStringBuilder() << "stream_" << Y_UNIT_TEST_NAME;
+ const ui32 shardCount = 5;
+ {
+ auto result = testServer.DataStreamsClient->CreateStream(streamName,
+ NYDS_V1::TCreateStreamSettings().ShardCount(shardCount)
+ .RetentionStorageMegabytes(10)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
+ }
+
+/* { //TODO: datastreams api uses only one retention parameter
+ auto result = testServer.DataStreamsClient->CreateStream(streamName,
+ NYDS_V1::TCreateStreamSettings().ShardCount(shardCount)
+ .RetentionStorageMegabytes(55_KB).RetentionPeriodHours(8 * 24)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
+ }*/
+
+ {
+ auto result = testServer.DataStreamsClient->CreateStream(streamName,
+ NYDS_V1::TCreateStreamSettings().ShardCount(shardCount)
+ .RetentionPeriodHours(6 * 24)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
+ }
+
+ {
+ auto result = testServer.DataStreamsClient->CreateStream(streamName,
+ NYDS_V1::TCreateStreamSettings().ShardCount(shardCount).WriteQuotaKbPerSec(127)
+ .RetentionPeriodHours(24)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
+ }
+
+ {
+ auto result = testServer.DataStreamsClient->CreateStream(streamName,
+ NYDS_V1::TCreateStreamSettings().ShardCount(shardCount).WriteQuotaKbPerSec(1025)
+ .RetentionPeriodHours(24)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::BAD_REQUEST);
+ }
+
+ {
+ auto result = testServer.DataStreamsClient->CreateStream(streamName + "b",
+ NYDS_V1::TCreateStreamSettings().ShardCount(shardCount)
+ .RetentionStorageMegabytes(55_KB)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ }
+
+
+ {
+ auto result = testServer.DataStreamsClient->CreateStream(streamName + "a",
+ NYDS_V1::TCreateStreamSettings().ShardCount(shardCount)
+ .RetentionPeriodHours(24)).ExtractValueSync();
+ UNIT_ASSERT_VALUES_EQUAL(result.IsTransportError(), false);
+ Cerr << result.GetIssues().ToString() << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
+ }
+ }
}
diff --git a/ydb/services/datastreams/grpc_service.cpp b/ydb/services/datastreams/grpc_service.cpp
index 564796ff94..d16040ef59 100644
--- a/ydb/services/datastreams/grpc_service.cpp
+++ b/ydb/services/datastreams/grpc_service.cpp
@@ -37,36 +37,6 @@ void YdsProcessAttr(const TSchemeBoardEvents::TDescribeSchemeResult& schemeData,
namespace NKikimr::NGRpcService {
-TGRpcDataStreamsService::TGRpcDataStreamsService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{
-}
-
-void TGRpcDataStreamsService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger)
-{
- CQ_ = cq;
-
- SetupIncomingRequests(logger);
-}
-
-void TGRpcDataStreamsService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter *limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcDataStreamsService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcDataStreamsService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
-
void TGRpcDataStreamsService::SetupIncomingRequests(NGrpc::TLoggerPtr logger)
{
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
@@ -76,47 +46,48 @@ void TGRpcDataStreamsService::SetupIncomingRequests(NGrpc::TLoggerPtr logger)
#ifdef ADD_REQUEST
#error ADD_REQUEST macro already defined
#endif
-#define ADD_REQUEST(NAME, CB, ATTR) \
+#define ADD_REQUEST(NAME, CB, ATTR, LIMIT_TYPE) \
MakeIntrusive<TGRpcRequest<Ydb::DataStreams::V1::NAME##Request, Ydb::DataStreams::V1::NAME##Response, TGRpcDataStreamsService>> \
- (this, &Service_, CQ_, \
- [this](NGrpc::IRequestContextBase *ctx) { \
- NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
- ActorSystem_->Send(GRpcRequestProxyId_, \
- new TGrpcRequestOperationCall<Ydb::DataStreams::V1::NAME##Request, Ydb::DataStreams::V1::NAME##Response> \
- (ctx, CB, TRequestAuxSettings{TRateLimiterMode::Off, ATTR})); \
- }, &Ydb::DataStreams::V1::DataStreamsService::AsyncService::Request ## NAME, \
+ (this, &Service_, CQ_, \
+ [this](NGrpc::IRequestContextBase *ctx) { \
+ NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
+ ActorSystem_->Send(GRpcRequestProxyId_, \
+ new TGrpcRequestOperationCall<Ydb::DataStreams::V1::NAME##Request, Ydb::DataStreams::V1::NAME##Response> \
+ (ctx, CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::LIMIT_TYPE), ATTR})); \
+ }, &Ydb::DataStreams::V1::DataStreamsService::AsyncService::Request ## NAME, \
#NAME, logger, getCounterBlock("data_streams", #NAME))->Run();
- ADD_REQUEST(DescribeStream, DoDataStreamsDescribeStreamRequest, nullptr)
- ADD_REQUEST(CreateStream, DoDataStreamsCreateStreamRequest, nullptr)
- ADD_REQUEST(ListStreams, DoDataStreamsListStreamsRequest, nullptr)
- ADD_REQUEST(DeleteStream, DoDataStreamsDeleteStreamRequest, nullptr)
- ADD_REQUEST(ListShards, DoDataStreamsListShardsRequest, nullptr)
- ADD_REQUEST(PutRecord, DoDataStreamsPutRecordRequest, YdsProcessAttr)
- ADD_REQUEST(PutRecords, DoDataStreamsPutRecordsRequest, YdsProcessAttr)
- ADD_REQUEST(GetRecords, DoDataStreamsGetRecordsRequest, nullptr)
- ADD_REQUEST(GetShardIterator, DoDataStreamsGetShardIteratorRequest, nullptr)
- ADD_REQUEST(SubscribeToShard, DoDataStreamsSubscribeToShardRequest, nullptr)
- ADD_REQUEST(DescribeLimits, DoDataStreamsDescribeLimitsRequest, nullptr)
- ADD_REQUEST(DescribeStreamSummary, DoDataStreamsDescribeStreamSummaryRequest, nullptr)
- ADD_REQUEST(DecreaseStreamRetentionPeriod, DoDataStreamsDecreaseStreamRetentionPeriodRequest, nullptr)
- ADD_REQUEST(IncreaseStreamRetentionPeriod, DoDataStreamsIncreaseStreamRetentionPeriodRequest, nullptr)
- ADD_REQUEST(UpdateShardCount, DoDataStreamsUpdateShardCountRequest, nullptr)
- ADD_REQUEST(RegisterStreamConsumer, DoDataStreamsRegisterStreamConsumerRequest, nullptr)
- ADD_REQUEST(DeregisterStreamConsumer, DoDataStreamsDeregisterStreamConsumerRequest, nullptr)
- ADD_REQUEST(DescribeStreamConsumer, DoDataStreamsDescribeStreamConsumerRequest, nullptr)
- ADD_REQUEST(ListStreamConsumers, DoDataStreamsListStreamConsumersRequest, nullptr)
- ADD_REQUEST(AddTagsToStream, DoDataStreamsAddTagsToStreamRequest, nullptr)
- ADD_REQUEST(DisableEnhancedMonitoring, DoDataStreamsDisableEnhancedMonitoringRequest, nullptr)
- ADD_REQUEST(EnableEnhancedMonitoring, DoDataStreamsEnableEnhancedMonitoringRequest, nullptr)
- ADD_REQUEST(ListTagsForStream, DoDataStreamsListTagsForStreamRequest, nullptr)
- ADD_REQUEST(MergeShards, DoDataStreamsMergeShardsRequest, nullptr)
- ADD_REQUEST(RemoveTagsFromStream, DoDataStreamsRemoveTagsFromStreamRequest, nullptr)
- ADD_REQUEST(SplitShard, DoDataStreamsSplitShardRequest, nullptr)
- ADD_REQUEST(StartStreamEncryption, DoDataStreamsStartStreamEncryptionRequest, nullptr)
- ADD_REQUEST(StopStreamEncryption, DoDataStreamsStopStreamEncryptionRequest, nullptr)
- ADD_REQUEST(UpdateStream, DoDataStreamsUpdateStreamRequest, nullptr)
- ADD_REQUEST(SetWriteQuota, DoDataStreamsSetWriteQuotaRequest, nullptr)
+ ADD_REQUEST(DescribeStream, DoDataStreamsDescribeStreamRequest, nullptr, Off)
+ ADD_REQUEST(CreateStream, DoDataStreamsCreateStreamRequest, nullptr, Off)
+ ADD_REQUEST(ListStreams, DoDataStreamsListStreamsRequest, nullptr, Off)
+ ADD_REQUEST(DeleteStream, DoDataStreamsDeleteStreamRequest, nullptr, Off)
+ ADD_REQUEST(ListShards, DoDataStreamsListShardsRequest, nullptr, Off)
+ ADD_REQUEST(PutRecord, DoDataStreamsPutRecordRequest, YdsProcessAttr, RuManual)
+ ADD_REQUEST(PutRecords, DoDataStreamsPutRecordsRequest, YdsProcessAttr, RuManual)
+ ADD_REQUEST(GetRecords, DoDataStreamsGetRecordsRequest, nullptr, RuManual)
+ ADD_REQUEST(GetShardIterator, DoDataStreamsGetShardIteratorRequest, nullptr, Off)
+ ADD_REQUEST(SubscribeToShard, DoDataStreamsSubscribeToShardRequest, nullptr, Off)
+ ADD_REQUEST(DescribeLimits, DoDataStreamsDescribeLimitsRequest, nullptr, Off)
+ ADD_REQUEST(DescribeStreamSummary, DoDataStreamsDescribeStreamSummaryRequest, nullptr, Off)
+ ADD_REQUEST(DecreaseStreamRetentionPeriod, DoDataStreamsDecreaseStreamRetentionPeriodRequest, nullptr, Off)
+ ADD_REQUEST(IncreaseStreamRetentionPeriod, DoDataStreamsIncreaseStreamRetentionPeriodRequest, nullptr, Off)
+ ADD_REQUEST(UpdateShardCount, DoDataStreamsUpdateShardCountRequest, nullptr, Off)
+ ADD_REQUEST(UpdateStreamMode, DoDataStreamsUpdateStreamModeRequest, nullptr, Off)
+ ADD_REQUEST(RegisterStreamConsumer, DoDataStreamsRegisterStreamConsumerRequest, nullptr, Off)
+ ADD_REQUEST(DeregisterStreamConsumer, DoDataStreamsDeregisterStreamConsumerRequest, nullptr, Off)
+ ADD_REQUEST(DescribeStreamConsumer, DoDataStreamsDescribeStreamConsumerRequest, nullptr, Off)
+ ADD_REQUEST(ListStreamConsumers, DoDataStreamsListStreamConsumersRequest, nullptr, Off)
+ ADD_REQUEST(AddTagsToStream, DoDataStreamsAddTagsToStreamRequest, nullptr, Off)
+ ADD_REQUEST(DisableEnhancedMonitoring, DoDataStreamsDisableEnhancedMonitoringRequest, nullptr, Off)
+ ADD_REQUEST(EnableEnhancedMonitoring, DoDataStreamsEnableEnhancedMonitoringRequest, nullptr, Off)
+ ADD_REQUEST(ListTagsForStream, DoDataStreamsListTagsForStreamRequest, nullptr, Off)
+ ADD_REQUEST(MergeShards, DoDataStreamsMergeShardsRequest, nullptr, Off)
+ ADD_REQUEST(RemoveTagsFromStream, DoDataStreamsRemoveTagsFromStreamRequest, nullptr, Off)
+ ADD_REQUEST(SplitShard, DoDataStreamsSplitShardRequest, nullptr, Off)
+ ADD_REQUEST(StartStreamEncryption, DoDataStreamsStartStreamEncryptionRequest, nullptr, Off)
+ ADD_REQUEST(StopStreamEncryption, DoDataStreamsStopStreamEncryptionRequest, nullptr, Off)
+ ADD_REQUEST(UpdateStream, DoDataStreamsUpdateStreamRequest, nullptr, Off)
+ ADD_REQUEST(SetWriteQuota, DoDataStreamsSetWriteQuotaRequest, nullptr, Off)
#undef ADD_REQUEST
}
diff --git a/ydb/services/datastreams/grpc_service.h b/ydb/services/datastreams/grpc_service.h
index 044aacb8a1..0dbab48993 100644
--- a/ydb/services/datastreams/grpc_service.h
+++ b/ydb/services/datastreams/grpc_service.h
@@ -3,31 +3,16 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/draft/ydb_datastreams_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr::NGRpcService {
- class TGRpcDataStreamsService : public NGrpc::TGrpcServiceBase<Ydb::DataStreams::V1::DataStreamsService>
+ class TGRpcDataStreamsService : public TGrpcServiceBase<Ydb::DataStreams::V1::DataStreamsService>
{
public:
- TGRpcDataStreamsService(NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
-
+ using TGrpcServiceBase<Ydb::DataStreams::V1::DataStreamsService>::TGrpcServiceBase;
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
}
diff --git a/ydb/services/datastreams/put_records_actor.h b/ydb/services/datastreams/put_records_actor.h
index cc8e201b95..c8bb8ca970 100644
--- a/ydb/services/datastreams/put_records_actor.h
+++ b/ydb/services/datastreams/put_records_actor.h
@@ -8,6 +8,7 @@
#include <ydb/core/protos/msgbus_pq.pb.h>
#include <ydb/core/protos/grpc_pq_old.pb.h>
+#include <ydb/services/lib/actors/pq_rl_helpers.h>
#include <ydb/services/lib/actors/pq_schema_actor.h>
#include <ydb/services/lib/sharding/sharding.h>
@@ -212,7 +213,10 @@ namespace NKikimr::NDataStreams::V1 {
}
template<class TDerived, class TProto>
- class TPutRecordsActorBase : public NGRpcProxy::V1::TPQGrpcSchemaBase<TPutRecordsActorBase<TDerived, TProto>, TProto> {
+ class TPutRecordsActorBase
+ : public NGRpcProxy::V1::TPQGrpcSchemaBase<TPutRecordsActorBase<TDerived, TProto>, TProto>
+ , private NGRpcProxy::V1::TRlHelpers
+ {
using TBase = NGRpcProxy::V1::TPQGrpcSchemaBase<TPutRecordsActorBase<TDerived, TProto>, TProto>;
public:
@@ -224,7 +228,9 @@ namespace NKikimr::NDataStreams::V1 {
void HandleCacheNavigateResponse(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev, const TActorContext& ctx);
protected:
+ void Write(const TActorContext& ctx);
void AddRecord(THashMap<ui32, TVector<TPutRecordsItem>>& items, ui32 totalShardsCount, int index);
+ ui64 GetPayloadSize() const;
private:
struct TPartitionTask {
@@ -232,6 +238,7 @@ namespace NKikimr::NDataStreams::V1 {
std::vector<ui32> RecordIndexes;
};
+ TIntrusiveConstPtr<NSchemeCache::TSchemeCacheNavigate::TPQGroupInfo> PQGroupInfo;
THashMap<ui32, TPartitionTask> PartitionToActor;
Ydb::DataStreams::V1::PutRecordsResult PutRecordsResult;
@@ -247,6 +254,7 @@ namespace NKikimr::NDataStreams::V1 {
STFUNC(StateFunc) {
switch (ev->GetTypeRewrite()) {
HFunc(NDataStreams::V1::TEvDataStreams::TEvPartitionActorResult, Handle);
+ HFunc(TEvents::TEvWakeup, Handle);
default: TBase::StateWork(ev, ctx);
};
}
@@ -255,6 +263,7 @@ namespace NKikimr::NDataStreams::V1 {
template<class TDerived, class TProto>
TPutRecordsActorBase<TDerived, TProto>::TPutRecordsActorBase(NGRpcService::IRequestOpCtx* request)
: TBase(request, dynamic_cast<const typename TProto::TRequest*>(request->GetRequest())->stream_name())
+ , TRlHelpers(request, 4_KB, TDuration::Seconds(1))
, Ip(request->GetPeerName())
{
Y_ENSURE(request);
@@ -321,8 +330,21 @@ namespace NKikimr::NDataStreams::V1 {
}
}
+ PQGroupInfo = topicInfo->PQGroupInfo;
+ SetMeteringMode(PQGroupInfo->Description.GetPQTabletConfig().GetMeteringMode());
+
+ if (IsQuotaRequired()) {
+ const auto ru = 1 + CalcRuConsumption(GetPayloadSize());
+ Y_VERIFY(MaybeRequestQuota(ru, EWakeupTag::RlAllowed, ctx));
+ } else {
+ Write(ctx);
+ }
+ }
+
+ template<class TDerived, class TProto>
+ void TPutRecordsActorBase<TDerived, TProto>::Write(const TActorContext& ctx) {
THashMap<ui32, TVector<TPutRecordsItem>> items;
- const auto& pqDescription = topicInfo->PQGroupInfo->Description;
+ const auto& pqDescription = PQGroupInfo->Description;
ui32 totalShardsCount = pqDescription.GetPartitions().size();
for (int i = 0; i < static_cast<TDerived*>(this)->GetPutRecordsRequest().records_size(); ++i) {
PutRecordsResult.add_records();
@@ -380,6 +402,22 @@ namespace NKikimr::NDataStreams::V1 {
}
template<class TDerived, class TProto>
+ void TPutRecordsActorBase<TDerived, TProto>::Handle(TEvents::TEvWakeup::TPtr& ev, const TActorContext& ctx) {
+ switch (static_cast<EWakeupTag>(ev->Get()->Tag)) {
+ case EWakeupTag::RlAllowed:
+ return Write(ctx);
+ case EWakeupTag::RlNoResource:
+ PutRecordsResult.set_failed_record_count(static_cast<TDerived*>(this)->GetPutRecordsRequest().records_size());
+ for (int i = 0; i < PutRecordsResult.failed_record_count(); ++i) {
+ PutRecordsResult.add_records()->set_error_code("ThrottlingException");
+ }
+ this->CheckFinish(ctx);
+ default:
+ return this->HandleWakeup(ev, ctx);
+ }
+ }
+
+ template<class TDerived, class TProto>
void TPutRecordsActorBase<TDerived, TProto>::AddRecord(THashMap<ui32, TVector<TPutRecordsItem>>& items, ui32 totalShardsCount, int index) {
const auto& record = static_cast<TDerived*>(this)->GetPutRecordsRequest().records(index);
ui32 shard = 0;
@@ -394,6 +432,19 @@ namespace NKikimr::NDataStreams::V1 {
PartitionToActor[shard].RecordIndexes.push_back(index);
}
+ template<class TDerived, class TProto>
+ ui64 TPutRecordsActorBase<TDerived, TProto>::GetPayloadSize() const {
+ ui64 result = 0;
+
+ for (const auto& record : static_cast<const TDerived*>(this)->GetPutRecordsRequest().records()) {
+ result += record.data().size()
+ + record.explicit_hash_key().size()
+ + record.partition_key().size();
+ }
+
+ return result;
+ }
+
class TPutRecordsActor : public TPutRecordsActorBase<TPutRecordsActor, NKikimr::NGRpcService::TEvDataStreamsPutRecordsRequest> {
public:
using TBase = TPutRecordsActorBase<TPutRecordsActor, NKikimr::NGRpcService::TEvDataStreamsPutRecordsRequest>;
@@ -451,7 +502,9 @@ namespace NKikimr::NDataStreams::V1 {
result.set_encryption_type(Ydb::DataStreams::V1::EncryptionType::NONE);
return ReplyWithResult(Ydb::StatusIds::SUCCESS, result, ctx);
} else {
- if (putRecordsResult.records(0).error_code() == "ProvisionedThroughputExceededException") {
+ if (putRecordsResult.records(0).error_code() == "ProvisionedThroughputExceededException"
+ || putRecordsResult.records(0).error_code() == "ThrottlingException")
+ {
return ReplyWithResult(Ydb::StatusIds::OVERLOADED, ctx);
}
//TODO: other codes - access denied and so on
diff --git a/ydb/services/datastreams/ut/CMakeLists.darwin.txt b/ydb/services/datastreams/ut/CMakeLists.darwin.txt
index 406962a3ca..cf5139a299 100644
--- a/ydb/services/datastreams/ut/CMakeLists.darwin.txt
+++ b/ydb/services/datastreams/ut/CMakeLists.darwin.txt
@@ -24,6 +24,7 @@ target_link_libraries(ydb-services-datastreams-ut PUBLIC
cpp-grpc-client
library-cpp-svnversion
ydb-core-testlib
+ cpp-client-ydb_topic
)
target_link_options(ydb-services-datastreams-ut PRIVATE
-Wl,-no_deduplicate
diff --git a/ydb/services/datastreams/ut/CMakeLists.linux.txt b/ydb/services/datastreams/ut/CMakeLists.linux.txt
index cb7b1ba80e..a946cf9c7b 100644
--- a/ydb/services/datastreams/ut/CMakeLists.linux.txt
+++ b/ydb/services/datastreams/ut/CMakeLists.linux.txt
@@ -26,6 +26,7 @@ target_link_libraries(ydb-services-datastreams-ut PUBLIC
cpp-grpc-client
library-cpp-svnversion
ydb-core-testlib
+ cpp-client-ydb_topic
)
target_link_options(ydb-services-datastreams-ut PRIVATE
-ldl
diff --git a/ydb/services/datastreams/ut/CMakeLists.txt b/ydb/services/datastreams/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/datastreams/ut/CMakeLists.txt
+++ b/ydb/services/datastreams/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/discovery/grpc_service.cpp b/ydb/services/discovery/grpc_service.cpp
index fdc95d95ce..2ffebc9ff3 100644
--- a/ydb/services/discovery/grpc_service.cpp
+++ b/ydb/services/discovery/grpc_service.cpp
@@ -16,34 +16,7 @@ static TString GetSdkBuildInfo(NGrpc::IRequestContextBase* reqCtx) {
return TString{res[0]};
}
-TGRpcDiscoveryService::TGRpcDiscoveryService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
- {
- }
-
- void TGRpcDiscoveryService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
- }
-
- void TGRpcDiscoveryService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter *limiter) {
- Limiter_ = limiter;
- }
-
- bool TGRpcDiscoveryService::IncRequest() {
- return Limiter_->Inc();
- }
-
- void TGRpcDiscoveryService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
- }
-
- void TGRpcDiscoveryService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
+void TGRpcDiscoveryService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
using namespace Ydb;
#ifdef ADD_REQUEST
@@ -56,7 +29,7 @@ TGRpcDiscoveryService::TGRpcDiscoveryService(NActors::TActorSystem *system,
NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer(), GetSdkBuildInfo(ctx)); \
ActorSystem_->Send(GRpcRequestProxyId_, \
new TGrpcRequestOperationCall<Discovery::NAME##Request, Discovery::NAME##Response> \
- (ctx, &CB, TRequestAuxSettings{TRateLimiterMode::Rps, nullptr})); \
+ (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr})); \
}, &Ydb::Discovery::V1::DiscoveryService::AsyncService::Request ## NAME, \
#NAME, logger, getCounterBlock("discovery", #NAME))->Run();
diff --git a/ydb/services/discovery/grpc_service.h b/ydb/services/discovery/grpc_service.h
index c6cb25f0fd..697f6e1c07 100644
--- a/ydb/services/discovery/grpc_service.h
+++ b/ydb/services/discovery/grpc_service.h
@@ -6,32 +6,21 @@
#include <library/cpp/grpc/server/grpc_server.h>
+#include <ydb/core/grpc_services/base/base_service.h>
+
+
namespace NKikimr {
namespace NGRpcService {
class TGRpcDiscoveryService
- : public NGrpc::TGrpcServiceBase<Ydb::Discovery::V1::DiscoveryService>
+ : public TGrpcServiceBase<Ydb::Discovery::V1::DiscoveryService>
{
- public:
- TGRpcDiscoveryService(NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
+ public:
+ using TGrpcServiceBase<Ydb::Discovery::V1::DiscoveryService>::TGrpcServiceBase;
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/kesus/grpc_service.cpp b/ydb/services/kesus/grpc_service.cpp
index e297e00fe0..2ee2515df8 100644
--- a/ydb/services/kesus/grpc_service.cpp
+++ b/ydb/services/kesus/grpc_service.cpp
@@ -607,39 +607,9 @@ private:
////////////////////////////////////////////////////////////////////////////////
-TKesusGRpcService::TKesusGRpcService(
- NActors::TActorSystem* actorSystem,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id)
- : ActorSystem(actorSystem)
- , Counters(counters)
- , GRpcRequestProxyId(id)
-{}
-
-TKesusGRpcService::~TKesusGRpcService() {
- // empty
-}
-
-void TKesusGRpcService::InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) {
- CQ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TKesusGRpcService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter = limiter;
-}
-
-bool TKesusGRpcService::IncRequest() {
- return Limiter->Inc();
-}
-
-void TKesusGRpcService::DecRequest() {
- Limiter->Dec();
- Y_ASSERT(Limiter->GetCurrentInFlight() >= 0);
-}
-
void TKesusGRpcService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
- auto getCounterBlock = NGRpcService::CreateCounterCb(Counters, ActorSystem);
+ auto getCounterBlock = NGRpcService::CreateCounterCb(Counters_, ActorSystem_);
+ using NGRpcService::TRateLimiterMode;
#ifdef ADD_REQUEST
#error ADD_REQUEST macro is already defined
@@ -649,12 +619,12 @@ void TKesusGRpcService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
MakeIntrusive<NGRpcService::TGRpcRequest<Ydb::Coordination::IN, Ydb::Coordination::OUT, TKesusGRpcService>>( \
this, \
&Service_, \
- CQ, \
+ CQ_, \
[this](NGrpc::IRequestContextBase* reqCtx) { \
- NGRpcService::ReportGrpcReqToMon(*ActorSystem, reqCtx->GetPeer()); \
- ActorSystem->Send(GRpcRequestProxyId, \
+ NGRpcService::ReportGrpcReqToMon(*ActorSystem_, reqCtx->GetPeer()); \
+ ActorSystem_->Send(GRpcRequestProxyId_, \
new NGRpcService::TGrpcRequestOperationCall<Ydb::Coordination::IN, Ydb::Coordination::OUT> \
- (reqCtx, &CB, NGRpcService::TRequestAuxSettings{NGRpcService::TRateLimiterMode::Rps, nullptr})); \
+ (reqCtx, &CB, NGRpcService::TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr})); \
}, \
&Ydb::Coordination::V1::CoordinationService::AsyncService::Request ## NAME, \
"Coordination/" #NAME, \
@@ -671,13 +641,13 @@ void TKesusGRpcService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
TGRpcSessionActor::TGRpcRequest::Start(
this,
this->GetService(),
- CQ,
+ CQ_,
&Ydb::Coordination::V1::CoordinationService::AsyncService::RequestSession,
[this](TIntrusivePtr<TGRpcSessionActor::IContext> context) {
- NGRpcService::ReportGrpcReqToMon(*ActorSystem, context->GetPeerName());
- ActorSystem->Send(GRpcRequestProxyId, new NGRpcService::TEvCoordinationSessionRequest(context));
+ NGRpcService::ReportGrpcReqToMon(*ActorSystem_, context->GetPeerName());
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvCoordinationSessionRequest(context));
},
- *ActorSystem,
+ *ActorSystem_,
"Coordination/Session",
getCounterBlock("coordination", "Session", true, true),
/* TODO: limiter */ nullptr);
diff --git a/ydb/services/kesus/grpc_service.h b/ydb/services/kesus/grpc_service.h
index b5f597b7d9..ab7ae0645e 100644
--- a/ydb/services/kesus/grpc_service.h
+++ b/ydb/services/kesus/grpc_service.h
@@ -8,38 +8,23 @@
#include <util/generic/hash_set.h>
+#include <ydb/core/grpc_services/base/base_service.h>
+
+
namespace NKikimr {
namespace NKesus {
class TKesusGRpcService
- : public NGrpc::TGrpcServiceBase<Ydb::Coordination::V1::CoordinationService>
+ : public ::NKikimr::NGRpcService::TGrpcServiceBase<Ydb::Coordination::V1::CoordinationService>
{
class TContextBase;
class TSessionContext;
public:
- TKesusGRpcService(
- NActors::TActorSystem* actorSystem,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
- ~TKesusGRpcService();
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
+ using ::NKikimr::NGRpcService::TGrpcServiceBase<Ydb::Coordination::V1::CoordinationService>::TGrpcServiceBase;
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
-private:
- NActors::TActorSystem* ActorSystem;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
- NActors::TActorId GRpcRequestProxyId;
-
- grpc::ServerCompletionQueue* CQ = nullptr;
- NGrpc::TGlobalLimiter* Limiter = nullptr;
};
}
diff --git a/ydb/services/lib/CMakeLists.txt b/ydb/services/lib/CMakeLists.txt
new file mode 100644
index 0000000000..da7bde9e83
--- /dev/null
+++ b/ydb/services/lib/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+# This file was gererated by the build system used internally in the Yandex monorepo.
+# Only simple modifications are allowed (adding source-files to targets, adding simple properties
+# like target_include_directories). These modifications will be ported to original
+# ya.make files by maintainers. Any complex modifications which can't be ported back to the
+# original buildsystem will not be accepted.
+
+
+add_subdirectory(actors)
+add_subdirectory(sharding)
diff --git a/ydb/services/lib/actors/CMakeLists.txt b/ydb/services/lib/actors/CMakeLists.txt
index b40f8dc52a..893dd07437 100644
--- a/ydb/services/lib/actors/CMakeLists.txt
+++ b/ydb/services/lib/actors/CMakeLists.txt
@@ -12,8 +12,12 @@ target_link_libraries(services-lib-actors PUBLIC
contrib-libs-cxxsupp
yutil
cpp-grpc-server
+ cpp-digest-md5
ydb-core-grpc_services
+ core-grpc_services-base
+ ydb-core-metering
ydb-core-mind
+ ydb-core-protos
library-persqueue-obfuscate
library-persqueue-topic_parser
api-grpc
@@ -23,4 +27,5 @@ target_link_libraries(services-lib-actors PUBLIC
)
target_sources(services-lib-actors PRIVATE
${CMAKE_SOURCE_DIR}/ydb/services/lib/actors/pq_schema_actor.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/services/lib/actors/pq_rl_helpers.cpp
)
diff --git a/ydb/services/lib/actors/pq_rl_helpers.cpp b/ydb/services/lib/actors/pq_rl_helpers.cpp
new file mode 100644
index 0000000000..8a7e8bf5ab
--- /dev/null
+++ b/ydb/services/lib/actors/pq_rl_helpers.cpp
@@ -0,0 +1,70 @@
+#include "pq_rl_helpers.h"
+
+#include <ydb/core/grpc_services/base/base.h>
+
+namespace NKikimr::NGRpcProxy::V1 {
+
+TRlHelpers::TRlHelpers(NGRpcService::IRequestCtxBase* reqCtx, ui64 blockSize, const TDuration& waitDuration)
+ : TStreamRequestUnitsCalculator(blockSize)
+ , Request(reqCtx)
+ , WaitDuration(waitDuration)
+{
+ Y_VERIFY(Request);
+}
+
+bool TRlHelpers::IsQuotaRequired() const {
+ Y_VERIFY(MeteringMode.Defined());
+ return MeteringMode == NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS && Request->GetRlPath();
+}
+
+bool TRlHelpers::MaybeRequestQuota(ui64 amount, EWakeupTag tag, const TActorContext& ctx) {
+ if (RlActor) {
+ return false;
+ }
+
+ const auto selfId = ctx.SelfID;
+ const auto as = ctx.ActorSystem();
+
+ auto onSendAllowed = [selfId, as, tag]() {
+ as->Send(selfId, new TEvents::TEvWakeup(tag));
+ };
+
+ auto onSendTimeout = [selfId, as]() {
+ as->Send(selfId, new TEvents::TEvWakeup(EWakeupTag::RlNoResource));
+ };
+
+ RlActor = NRpcService::RateLimiterAcquireUseSameMailbox(
+ *Request, amount, WaitDuration,
+ std::move(onSendAllowed), std::move(onSendTimeout), ctx);
+ return true;
+}
+
+void TRlHelpers::OnWakeup(EWakeupTag tag) {
+ switch (tag) {
+ case EWakeupTag::RlInit:
+ case EWakeupTag::RlAllowed:
+ case EWakeupTag::RlNoResource:
+ RlActor = {};
+ break;
+ default:
+ break;
+ }
+}
+
+const TMaybe<NKikimrPQ::TPQTabletConfig::EMeteringMode>& TRlHelpers::GetMeteringMode() const {
+ return MeteringMode;
+}
+
+void TRlHelpers::SetMeteringMode(NKikimrPQ::TPQTabletConfig::EMeteringMode mode) {
+ MeteringMode = mode;
+}
+
+ui64 TRlHelpers::CalcRuConsumption(ui64 payloadSize) {
+ if (!IsQuotaRequired()) {
+ return 0;
+ }
+
+ return CalcConsumption(payloadSize);
+}
+
+}
diff --git a/ydb/services/lib/actors/pq_rl_helpers.h b/ydb/services/lib/actors/pq_rl_helpers.h
new file mode 100644
index 0000000000..cf00203399
--- /dev/null
+++ b/ydb/services/lib/actors/pq_rl_helpers.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#include <ydb/core/grpc_services/local_rate_limiter.h>
+#include <ydb/core/metering/stream_ru_calculator.h>
+#include <ydb/core/protos/pqconfig.pb.h>
+
+#include <util/datetime/base.h>
+
+namespace NKikimr::NGRpcProxy::V1 {
+
+class TRlHelpers: public NMetering::TStreamRequestUnitsCalculator {
+public:
+ explicit TRlHelpers(NGRpcService::IRequestCtxBase* reqCtx, ui64 blockSize, const TDuration& waitDuration);
+
+protected:
+ enum EWakeupTag: ui64 {
+ RlInit = 0,
+ RlAllowed = 1,
+ RlNoResource = 2,
+ RecheckAcl = 3,
+ };
+
+ bool IsQuotaRequired() const;
+ bool MaybeRequestQuota(ui64 amount, EWakeupTag tag, const TActorContext& ctx);
+ void OnWakeup(EWakeupTag tag);
+
+ const TMaybe<NKikimrPQ::TPQTabletConfig::EMeteringMode>& GetMeteringMode() const;
+ void SetMeteringMode(NKikimrPQ::TPQTabletConfig::EMeteringMode mode);
+
+ ui64 CalcRuConsumption(ui64 payloadSize);
+
+private:
+ NGRpcService::IRequestCtxBase* const Request;
+ const TDuration WaitDuration;
+
+ TActorId RlActor;
+ TMaybe<NKikimrPQ::TPQTabletConfig::EMeteringMode> MeteringMode;
+};
+
+}
diff --git a/ydb/services/lib/actors/pq_schema_actor.cpp b/ydb/services/lib/actors/pq_schema_actor.cpp
index 307b555fdd..79cd4af5aa 100644
--- a/ydb/services/lib/actors/pq_schema_actor.cpp
+++ b/ydb/services/lib/actors/pq_schema_actor.cpp
@@ -9,6 +9,8 @@
#include <util/string/vector.h>
+#include <library/cpp/digest/md5/md5.h>
+
namespace NKikimr::NGRpcProxy::V1 {
constexpr TStringBuf GRPCS_ENDPOINT_PREFIX = "grpcs://";
@@ -24,12 +26,23 @@ namespace NKikimr::NGRpcProxy::V1 {
ui32 count = pqConfig.GetDefaultClientServiceType().GetMaxReadRulesCountPerTopic();
if (count == 0) count = Max<ui32>();
TString name = pqConfig.GetDefaultClientServiceType().GetName();
- serviceTypes.insert({name, {name, count}});
+ TVector<TString> passwordHashes;
+ for (auto ph : pqConfig.GetDefaultClientServiceType().GetPasswordHashes()) {
+ passwordHashes.push_back(ph);
+ }
+
+ serviceTypes.insert({name, {name, count, passwordHashes}});
+
for (const auto& serviceType : pqConfig.GetClientServiceType()) {
ui32 count = serviceType.GetMaxReadRulesCountPerTopic();
if (count == 0) count = Max<ui32>();
TString name = serviceType.GetName();
- serviceTypes.insert({name, {name, count}});
+ TVector<TString> passwordHashes;
+ for (auto ph : serviceType.GetPasswordHashes()) {
+ passwordHashes.push_back(ph);
+ }
+
+ serviceTypes.insert({name, {name, count, passwordHashes}});
}
return serviceTypes;
}
@@ -98,8 +111,12 @@ namespace NKikimr::NGRpcProxy::V1 {
ct->AddCodecs(to_lower(Ydb::PersQueue::V1::Codec_Name((Ydb::PersQueue::V1::Codec)codec)).substr(6));
}
- if (rr.important())
+ if (rr.important()) {
+ if (AppData(ctx)->PQConfig.GetTopicsAreFirstClassCitizen()) {
+ return TStringBuilder() << "important flag is forbiden for consumer " << rr.consumer_name();
+ }
config->MutablePartitionConfig()->AddImportantClientId(consumerName);
+ }
if (!rr.service_type().empty()) {
if (!supportedClientServiceTypes.contains(rr.service_type())) {
@@ -138,6 +155,7 @@ namespace NKikimr::NGRpcProxy::V1 {
NKikimrPQ::TPQTabletConfig* config,
const Ydb::Topic::Consumer& rr,
const TClientServiceTypes& supportedClientServiceTypes,
+ const bool checkServiceType,
const TActorContext& ctx
) {
auto consumerName = NPersQueue::ConvertNewConsumerName(rr.name(), ctx);
@@ -162,12 +180,15 @@ namespace NKikimr::NGRpcProxy::V1 {
config->AddReadFromTimestampsMs(rr.read_from().seconds() * 1000);
config->AddConsumerFormatVersions(0);
- TString service_type;
+ TString serviceType;
const auto& pqConfig = AppData(ctx)->PQConfig;
- if (!pqConfig.GetDisallowDefaultClientServiceType()) {
- const auto& defaultCientServiceType = pqConfig.GetDefaultClientServiceType().GetName();
- service_type = defaultCientServiceType;
- }
+
+ const auto& defaultClientServiceType = pqConfig.GetDefaultClientServiceType().GetName();
+ serviceType = defaultClientServiceType;
+
+ TString passwordHash = "";
+ bool hasPassword = false;
+
ui32 version = 0;
for (auto& pair : rr.attributes()) {
if (pair.first == "_version") {
@@ -183,14 +204,40 @@ namespace NKikimr::NGRpcProxy::V1 {
return TStringBuilder() << "Unknown _service_type '" << pair.second
<< "' for consumer '" << rr.name() << "'";
}
- service_type = pair.second;
+ serviceType = pair.second;
}
+ } else if (pair.first == "_service_type_password") {
+ passwordHash = MD5::Data(pair.second);
+ passwordHash.to_lower();
+ hasPassword = true;
}
}
- if (service_type.empty()) {
+ if (serviceType.empty()) {
return TStringBuilder() << "service type cannot be empty for consumer '" << rr.name() << "'";
}
- config->AddReadRuleServiceTypes(service_type);
+
+ Y_VERIFY(supportedClientServiceTypes.find(serviceType) != supportedClientServiceTypes.end());
+
+ const NKikimr::NGRpcProxy::V1::TClientServiceType& clientServiceType = supportedClientServiceTypes.find(serviceType)->second;
+
+ if (checkServiceType) {
+ bool found = clientServiceType.PasswordHashes.empty() && !hasPassword;
+ for (auto ph : clientServiceType.PasswordHashes) {
+ if (ph == passwordHash) {
+ found = true;
+ }
+ }
+ if (!found) {
+ if (hasPassword) {
+ return "incorrect client service type password";
+ }
+ if (AppData(ctx)->PQConfig.GetForceClientServiceTypePasswordCheck()) { // no password and check is required
+ return "no client service type password provided";
+ }
+ }
+ }
+
+ config->AddReadRuleServiceTypes(serviceType);
config->AddReadRuleVersions(version);
auto ct = config->AddConsumerCodecs();
@@ -203,8 +250,12 @@ namespace NKikimr::NGRpcProxy::V1 {
ct->AddCodecs(Ydb::Topic::Codec_IsValid(codec) ? LegacySubstr(to_lower(Ydb::Topic::Codec_Name((Ydb::Topic::Codec)codec)), 6) : "CUSTOM");
}
- if (rr.important())
+ if (rr.important()) {
+ if (AppData(ctx)->PQConfig.GetTopicsAreFirstClassCitizen()) {
+ return TStringBuilder() << "important flag is forbiden for consumer " << rr.name();
+ }
config->MutablePartitionConfig()->AddImportantClientId(consumerName);
+ }
return "";
}
@@ -322,6 +373,66 @@ namespace NKikimr::NGRpcProxy::V1 {
return false;
}
+ Ydb::StatusIds::StatusCode CheckConfig(const NKikimrPQ::TPQTabletConfig& config,
+ const TClientServiceTypes& supportedClientServiceTypes,
+ TString& error, const TActorContext& ctx, const Ydb::StatusIds::StatusCode dubsStatus)
+ {
+ ui32 speed = config.GetPartitionConfig().GetWriteSpeedInBytesPerSecond();
+ ui32 burst = config.GetPartitionConfig().GetBurstSize();
+
+ std::set<ui32> validLimits {};
+ if (AppData(ctx)->PQConfig.ValidWriteSpeedLimitsKbPerSecSize() == 0) {
+ validLimits.insert(speed);
+ } else {
+ const auto& limits = AppData()->PQConfig.GetValidWriteSpeedLimitsKbPerSec();
+ for (auto& limit : limits) {
+ validLimits.insert(limit * 1_KB);
+ }
+ }
+ if (validLimits.find(speed) == validLimits.end()) {
+ error = TStringBuilder() << "write_speed per second in partition must have values from set {" << JoinSeq(",", validLimits) << "}, got " << speed;
+ return Ydb::StatusIds::BAD_REQUEST;
+ }
+
+ if (burst > speed * 2 && burst > 1_MB) {
+ error = TStringBuilder()
+ << "Invalid write burst in partition specified: " << burst
+ << " vs " << Max(speed * 2, (ui32)1_MB);
+ return Ydb::StatusIds::BAD_REQUEST;
+ }
+
+ ui32 lifeTimeSeconds = config.GetPartitionConfig().GetLifetimeSeconds();
+ ui64 storageBytes = config.GetPartitionConfig().GetStorageLimitBytes();
+
+
+
+ auto retentionLimits = AppData()->PQConfig.GetValidRetentionLimits();
+ if (retentionLimits.size() == 0) {
+ auto* limit = retentionLimits.Add();
+ limit->SetMinPeriodSeconds(lifeTimeSeconds);
+ limit->SetMaxPeriodSeconds(lifeTimeSeconds);
+ limit->SetMinStorageMegabytes(storageBytes / 1_MB);
+ limit->SetMaxStorageMegabytes(storageBytes / 1_MB + 1);
+ }
+
+ TStringBuilder errStr;
+ errStr << "retention seconds and storage bytes must fit one of:";
+ bool found = false;
+ for (auto& limit : retentionLimits) {
+ errStr << " { seconds : [" << limit.GetMinPeriodSeconds() << ", " << limit.GetMaxPeriodSeconds() << "], "
+ << " storage : [" << limit.GetMinStorageMegabytes() * 1_MB << ", " << limit.GetMaxStorageMegabytes() * 1_MB << "]},";
+ found = found || (lifeTimeSeconds >= limit.GetMinPeriodSeconds() && lifeTimeSeconds <= limit.GetMaxPeriodSeconds() &&
+ storageBytes >= limit.GetMinStorageMegabytes() * 1_MB && storageBytes <= limit.GetMaxStorageMegabytes() * 1_MB);
+ }
+ if (!found) {
+ error = errStr << " provided values: seconds " << lifeTimeSeconds << ", storage " << storageBytes;
+ return Ydb::StatusIds::BAD_REQUEST;
+ }
+
+ bool hasDuplicates = CheckReadRulesConfig(config, supportedClientServiceTypes, error, ctx);
+ return error.empty() ? Ydb::StatusIds::SUCCESS : (hasDuplicates ? dubsStatus : Ydb::StatusIds::BAD_REQUEST);
+ }
+
NYql::TIssue FillIssue(const TString &errorReason, const Ydb::PersQueue::ErrorCode::ErrorCode errorCode) {
NYql::TIssue res(NYql::TPosition(), errorReason);
res.SetCode(errorCode, NYql::ESeverity::TSeverityIds_ESeverityId_S_ERROR);
@@ -375,11 +486,15 @@ namespace NKikimr::NGRpcProxy::V1 {
} else if (pair.first == "_federation_account") {
config->SetFederationAccount(pair.second);
} else if (pair.first == "_abc_id") {
- try {
- config->SetAbcId(FromString<ui32>(pair.second));
- } catch(...) {
- error = TStringBuilder() << "Attribute abc_id is " << pair.second << ", which is not integer";
- return Ydb::StatusIds::BAD_REQUEST;
+ if (pair.second.empty()) {
+ config->SetAbcId(0);
+ } else {
+ try {
+ config->SetAbcId(FromString<ui32>(pair.second));
+ } catch(...) {
+ error = TStringBuilder() << "Attribute abc_id is " << pair.second << ", which is not integer";
+ return Ydb::StatusIds::BAD_REQUEST;
+ }
}
} else if (pair.first == "_max_partition_storage_size") {
if (pair.second.empty()) {
@@ -475,7 +590,7 @@ namespace NKikimr::NGRpcProxy::V1 {
config->SetRequireAuthWrite(true);
config->SetRequireAuthRead(true);
if (!alter)
- pqDescr->SetPartitionPerTablet(2);
+ pqDescr->SetPartitionPerTablet(1);
auto res = ProcessAttributes(settings.attributes(), pqDescr, error, alter);
if (res != Ydb::StatusIds::SUCCESS) {
@@ -502,8 +617,8 @@ namespace NKikimr::NGRpcProxy::V1 {
config->SetIdent(converter->GetLegacyProducer());
}
- config->SetTopicName(name);
- config->SetTopicPath(topicPath);
+ //config->SetTopicName(name);
+ //config->SetTopicPath(topicPath);
//Sets legacy 'logtype'.
@@ -731,11 +846,43 @@ namespace NKikimr::NGRpcProxy::V1 {
}
}
- CheckReadRulesConfig(*config, supportedClientServiceTypes, error, ctx);
- return error.empty() ? Ydb::StatusIds::SUCCESS : Ydb::StatusIds::BAD_REQUEST;
+ return CheckConfig(*config, supportedClientServiceTypes, error, ctx, Ydb::StatusIds::BAD_REQUEST);
}
+ static bool FillMeteringMode(Ydb::Topic::MeteringMode mode, NKikimrPQ::TPQTabletConfig& config,
+ bool meteringEnabled, bool isAlter, Ydb::StatusIds::StatusCode& code, TString& error)
+ {
+ if (meteringEnabled) {
+ switch (mode) {
+ case Ydb::Topic::METERING_MODE_UNSPECIFIED:
+ if (!isAlter) {
+ config.SetMeteringMode(NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS);
+ }
+ break;
+ case Ydb::Topic::METERING_MODE_REQUEST_UNITS:
+ config.SetMeteringMode(NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS);
+ break;
+ case Ydb::Topic::METERING_MODE_RESERVED_CAPACITY:
+ config.SetMeteringMode(NKikimrPQ::TPQTabletConfig::METERING_MODE_RESERVED_CAPACITY);
+ break;
+ default:
+ code = Ydb::StatusIds::BAD_REQUEST;
+ error = "Unknown metering mode";
+ return false;
+ }
+ } else {
+ switch (mode) {
+ case Ydb::Topic::METERING_MODE_UNSPECIFIED:
+ break;
+ default:
+ code = Ydb::StatusIds::PRECONDITION_FAILED;
+ error = "Metering mode can only be specified in a serverless database";
+ return false;
+ }
+ }
+ return true;
+ }
Ydb::StatusIds::StatusCode FillProposeRequestImpl(
const TString& name, const Ydb::Topic::CreateTopicRequest& request,
@@ -765,7 +912,7 @@ namespace NKikimr::NGRpcProxy::V1 {
config->SetRequireAuthWrite(true);
config->SetRequireAuthRead(true);
- pqDescr->SetPartitionPerTablet(2);
+ pqDescr->SetPartitionPerTablet(1);
partConfig->SetMaxCountInPartition(Max<i32>());
@@ -797,8 +944,8 @@ namespace NKikimr::NGRpcProxy::V1 {
config->SetIdent(converter->GetLegacyProducer());
}
- config->SetTopicName(name);
- config->SetTopicPath(topicPath);
+// config->SetTopicName(name);
+// config->SetTopicPath(topicPath);
//Sets legacy 'logtype'.
@@ -861,28 +1008,38 @@ namespace NKikimr::NGRpcProxy::V1 {
}
}
+ Ydb::StatusIds::StatusCode code;
+ if (!FillMeteringMode(request.metering_mode(), *config, pqConfig.GetBillingMeteringConfig().GetEnabled(), false, code, error)) {
+ return code;
+ }
+
const auto& supportedClientServiceTypes = GetSupportedClientServiceTypes(ctx);
for (const auto& rr : request.consumers()) {
- error = AddReadRuleToConfig(config, rr, supportedClientServiceTypes, ctx);
+ error = AddReadRuleToConfig(config, rr, supportedClientServiceTypes, true, ctx);
if (!error.Empty()) {
return Ydb::StatusIds::BAD_REQUEST;
}
}
- CheckReadRulesConfig(*config, supportedClientServiceTypes, error, ctx);
- return error.empty() ? Ydb::StatusIds::SUCCESS : Ydb::StatusIds::BAD_REQUEST;
+ return CheckConfig(*config, supportedClientServiceTypes, error, ctx, Ydb::StatusIds::BAD_REQUEST);
}
-
-
Ydb::StatusIds::StatusCode FillProposeRequestImpl(
const Ydb::Topic::AlterTopicRequest& request,
NKikimrSchemeOp::TPersQueueGroupDescription& pqDescr, const TActorContext& ctx,
- TString& error
+ TString& error, bool isCdcStream
) {
+ #define CHECK_CDC if (isCdcStream) {\
+ error = "Full alter of cdc stream is forbidden";\
+ return Ydb::StatusIds::BAD_REQUEST;\
+ }
+
+ const auto& pqConfig = AppData(ctx)->PQConfig;
+
if (request.has_alter_partitioning_settings() && request.alter_partitioning_settings().has_set_min_active_partitions()) {
+ CHECK_CDC;
auto parts = request.alter_partitioning_settings().set_min_active_partitions();
if (parts == 0) parts = 1;
pqDescr.SetTotalGroupCount(parts);
@@ -892,14 +1049,17 @@ namespace NKikimr::NGRpcProxy::V1 {
auto config = pqDescr.MutablePQTabletConfig();
auto partConfig = config->MutablePartitionConfig();
+ if (request.alter_attributes().size()) {
+ CHECK_CDC;
+ }
+
auto res = ProcessAttributes(request.alter_attributes(), &pqDescr, error, true);
if (res != Ydb::StatusIds::SUCCESS) {
return res;
}
- bool local = true; //todo: check locality
-
if (request.has_set_retention_period()) {
+ CHECK_CDC;
if (request.set_retention_period().seconds() < 0) {
error = TStringBuilder() << "retention_period must be not negative, provided " <<
request.set_retention_period().DebugString();
@@ -914,13 +1074,16 @@ namespace NKikimr::NGRpcProxy::V1 {
if (request.has_set_retention_storage_mb()) {
+ CHECK_CDC;
partConfig->ClearStorageLimitBytes();
if (request.set_retention_storage_mb())
partConfig->SetStorageLimitBytes(request.set_retention_storage_mb() * 1024 * 1024);
}
- if (local) {
+ bool local = true; //todo: check locality
+ if (local || pqConfig.GetTopicsAreFirstClassCitizen()) {
if (request.has_set_partition_write_speed_bytes_per_second()) {
+ CHECK_CDC;
auto partSpeed = request.set_partition_write_speed_bytes_per_second();
if (partSpeed == 0) {
partSpeed = DEFAULT_PARTITION_SPEED;
@@ -929,6 +1092,7 @@ namespace NKikimr::NGRpcProxy::V1 {
}
if (request.has_set_partition_write_burst_bytes()) {
+ CHECK_CDC;
const auto& burstSpeed = request.set_partition_write_burst_bytes();
if (burstSpeed == 0) {
partConfig->SetBurstSize(partConfig->GetWriteSpeedInBytesPerSecond());
@@ -939,6 +1103,7 @@ namespace NKikimr::NGRpcProxy::V1 {
}
if (request.has_set_supported_codecs()) {
+ CHECK_CDC;
config->ClearCodecs();
auto ct = config->MutableCodecs();
for(const auto& codec : request.set_supported_codecs().codecs()) {
@@ -957,11 +1122,15 @@ namespace NKikimr::NGRpcProxy::V1 {
}
}
+ Ydb::StatusIds::StatusCode code;
+ if (!FillMeteringMode(request.set_metering_mode(), *config, pqConfig.GetBillingMeteringConfig().GetEnabled(), true, code, error)) {
+ return code;
+ }
const auto& supportedClientServiceTypes = GetSupportedClientServiceTypes(ctx);
- std::vector<Ydb::Topic::Consumer> consumers;
+ std::vector<std::pair<bool, Ydb::Topic::Consumer>> consumers;
i32 dropped = 0;
@@ -984,8 +1153,8 @@ namespace NKikimr::NGRpcProxy::V1 {
break;
}
}
- consumers.push_back(Ydb::Topic::Consumer{});
- auto& consumer = consumers.back();
+ consumers.push_back({false, Ydb::Topic::Consumer{}}); // do not check service type for presented consumers
+ auto& consumer = consumers.back().second;
consumer.set_name(name);
consumer.set_important(important);
consumer.mutable_read_from()->set_seconds(config->GetReadFromTimestampsMs(i) / 1000);
@@ -997,7 +1166,7 @@ namespace NKikimr::NGRpcProxy::V1 {
}
for (auto& cons : request.add_consumers()) {
- consumers.push_back(cons);
+ consumers.push_back({true, cons}); // check service type for added consumers is true
}
if (dropped != request.drop_consumers_size()) {
@@ -1010,9 +1179,10 @@ namespace NKikimr::NGRpcProxy::V1 {
auto oldName = NPersQueue::ConvertOldConsumerName(name, ctx);
bool found = false;
for (auto& consumer : consumers) {
- if (consumer.name() == name || consumer.name() == oldName) {
+ if (consumer.second.name() == name || consumer.second.name() == oldName) {
found = true;
- ProcessAlterConsumer(consumer, alter);
+ ProcessAlterConsumer(consumer.second, alter);
+ consumer.first = true; // check service type
break;
}
}
@@ -1032,14 +1202,13 @@ namespace NKikimr::NGRpcProxy::V1 {
config->ClearReadRuleVersions();
for (const auto& rr : consumers) {
- error = AddReadRuleToConfig(config, rr, supportedClientServiceTypes, ctx);
+ error = AddReadRuleToConfig(config, rr.second, supportedClientServiceTypes, rr.first, ctx);
if (!error.Empty()) {
return Ydb::StatusIds::BAD_REQUEST;
}
}
- bool hasDuplicates = CheckReadRulesConfig(*config, supportedClientServiceTypes, error, ctx);
- return error.empty() ? Ydb::StatusIds::SUCCESS : (hasDuplicates ? Ydb::StatusIds::ALREADY_EXISTS : Ydb::StatusIds::BAD_REQUEST);
+ return CheckConfig(*config, supportedClientServiceTypes, error, ctx, Ydb::StatusIds::ALREADY_EXISTS);
}
diff --git a/ydb/services/lib/actors/pq_schema_actor.h b/ydb/services/lib/actors/pq_schema_actor.h
index 337c125bce..b3da17970f 100644
--- a/ydb/services/lib/actors/pq_schema_actor.h
+++ b/ydb/services/lib/actors/pq_schema_actor.h
@@ -33,25 +33,30 @@ namespace NKikimr::NGRpcProxy::V1 {
const TString& path,
const TString& database = TString(),
const TString& localDc = TString()
+
);
Ydb::StatusIds::StatusCode FillProposeRequestImpl(
const Ydb::Topic::AlterTopicRequest& request,
NKikimrSchemeOp::TPersQueueGroupDescription& pqDescr,
const TActorContext& ctx,
- TString& error
+ TString& error,
+ bool isCdcStream
);
struct TClientServiceType {
TString Name;
ui32 MaxCount;
+ TVector<TString> PasswordHashes;
};
typedef std::map<TString, TClientServiceType> TClientServiceTypes;
TClientServiceTypes GetSupportedClientServiceTypes(const TActorContext& ctx);
// Returns true if have duplicated read rules
- bool CheckReadRulesConfig(const NKikimrPQ::TPQTabletConfig& config, const TClientServiceTypes& supportedReadRuleServiceTypes, TString& error, const TActorContext& ctx);
+ Ydb::StatusIds::StatusCode CheckConfig(const NKikimrPQ::TPQTabletConfig& config, const TClientServiceTypes& supportedReadRuleServiceTypes,
+ TString& error, const TActorContext& ctx,
+ const Ydb::StatusIds::StatusCode dubsStatus = Ydb::StatusIds::BAD_REQUEST);
TString AddReadRuleToConfig(
NKikimrPQ::TPQTabletConfig *config,
@@ -106,6 +111,10 @@ namespace NKikimr::NGRpcProxy::V1 {
return path;
}
+ const TMaybe<TString>& GetCdcStreamName() const {
+ return CdcStreamName;
+ }
+
protected:
// TDerived must implement FillProposeRequest(TEvProposeTransaction&, const TActorContext& ctx, TString workingDir, TString name);
void SendProposeRequest(const NActors::TActorContext &ctx) {
@@ -200,6 +209,11 @@ namespace NKikimr::NGRpcProxy::V1 {
if (static_cast<TDerived*>(this)->IsCdcStreamCompatible()) {
Y_VERIFY(response.ListNodeEntry->Children.size() == 1);
PrivateTopicName = response.ListNodeEntry->Children.at(0).Name;
+
+ if (response.Self) {
+ CdcStreamName = response.Self->Info.GetName();
+ }
+
return SendDescribeProposeRequest(ctx);
}
}
@@ -302,6 +316,7 @@ namespace NKikimr::NGRpcProxy::V1 {
bool IsDead = false;
const TString TopicPath;
TMaybe<TString> PrivateTopicName;
+ TMaybe<TString> CdcStreamName;
};
//-----------------------------------------------------------------------------------
diff --git a/ydb/services/lib/actors/type_definitions.h b/ydb/services/lib/actors/type_definitions.h
index e13e5ff9d8..89e0168a71 100644
--- a/ydb/services/lib/actors/type_definitions.h
+++ b/ydb/services/lib/actors/type_definitions.h
@@ -14,8 +14,10 @@ namespace NKikimr::NGRpcProxy {
TString CloudId;
TString DbId;
TString FolderId;
+ NKikimrPQ::TPQTabletConfig::EMeteringMode MeteringMode;
NPersQueue::TDiscoveryConverterPtr DiscoveryConverter;
NPersQueue::TTopicConverterPtr FullConverter;
+ TMaybe<TString> CdcStreamPath;
TVector<ui32> Groups;
TMap<ui64, ui64> Partitions;
@@ -33,6 +35,7 @@ namespace NKikimr::NGRpcProxy {
TString CloudId;
TString DbId;
TString FolderId;
+ NKikimrPQ::TPQTabletConfig::EMeteringMode MeteringMode;
};
using TTopicInitInfoMap = THashMap<TString, TTopicInitInfo>;
diff --git a/ydb/services/local_discovery/grpc_service.cpp b/ydb/services/local_discovery/grpc_service.cpp
index 9bb1257547..d2c091c330 100644
--- a/ydb/services/local_discovery/grpc_service.cpp
+++ b/ydb/services/local_discovery/grpc_service.cpp
@@ -49,7 +49,7 @@ static TString GetSdkBuildInfo(NGrpc::IRequestContextBase* reqCtx) {
TGRpcLocalDiscoveryService::TGRpcLocalDiscoveryService(const NKikimrConfig::TGRpcConfig& grpcConfig,
NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
NActors::TActorId id)
: GrpcConfig(grpcConfig)
, ActorSystem_(system)
diff --git a/ydb/services/local_discovery/grpc_service.h b/ydb/services/local_discovery/grpc_service.h
index 7dd7add0bc..f58e81811c 100644
--- a/ydb/services/local_discovery/grpc_service.h
+++ b/ydb/services/local_discovery/grpc_service.h
@@ -6,6 +6,7 @@
#include <ydb/public/api/grpc/ydb_discovery_v1.grpc.pb.h>
#include <library/cpp/grpc/server/grpc_server.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
@@ -19,7 +20,7 @@ class TGRpcLocalDiscoveryService
public:
TGRpcLocalDiscoveryService(const NKikimrConfig::TGRpcConfig& grpcConfig,
NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
NActors::TActorId id);
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
@@ -36,7 +37,7 @@ private:
NActors::TActorSystem* ActorSystem_;
grpc::ServerCompletionQueue* CQ_ = nullptr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters_;
NActors::TActorId GRpcRequestProxyId_;
NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
diff --git a/ydb/services/monitoring/grpc_service.cpp b/ydb/services/monitoring/grpc_service.cpp
index 0c92b9f0fb..cd25b10ae3 100644
--- a/ydb/services/monitoring/grpc_service.cpp
+++ b/ydb/services/monitoring/grpc_service.cpp
@@ -17,33 +17,6 @@ static TString GetSdkBuildInfo(NGrpc::IRequestContextBase* reqCtx) {
return TString{res[0]};
}
-TGRpcMonitoringService::TGRpcMonitoringService(NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{
-}
-
-void TGRpcMonitoringService::InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcMonitoringService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcMonitoringService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcMonitoringService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcMonitoringService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
using namespace Ydb;
diff --git a/ydb/services/monitoring/grpc_service.h b/ydb/services/monitoring/grpc_service.h
index 3c324424fd..93dfce7a1b 100644
--- a/ydb/services/monitoring/grpc_service.h
+++ b/ydb/services/monitoring/grpc_service.h
@@ -5,32 +5,17 @@
#include <ydb/public/api/grpc/ydb_monitoring_v1.grpc.pb.h>
#include <library/cpp/grpc/server/grpc_server.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
- class TGRpcMonitoringService : public NGrpc::TGrpcServiceBase<Ydb::Monitoring::V1::MonitoringService>
+ class TGRpcMonitoringService : public TGrpcServiceBase<Ydb::Monitoring::V1::MonitoringService>
{
public:
- TGRpcMonitoringService(NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
-
- private:
+ using TGrpcServiceBase<Ydb::Monitoring::V1::MonitoringService>::TGrpcServiceBase;
+ private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/persqueue_cluster_discovery/CMakeLists.txt b/ydb/services/persqueue_cluster_discovery/CMakeLists.txt
index 5bb346dd28..b39314d234 100644
--- a/ydb/services/persqueue_cluster_discovery/CMakeLists.txt
+++ b/ydb/services/persqueue_cluster_discovery/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(cluster_ordering)
+add_subdirectory(ut)
add_library(ydb-services-persqueue_cluster_discovery)
target_link_libraries(ydb-services-persqueue_cluster_discovery PUBLIC
diff --git a/ydb/services/persqueue_cluster_discovery/cluster_discovery_service.cpp b/ydb/services/persqueue_cluster_discovery/cluster_discovery_service.cpp
index aabd11d4ca..23bf9636db 100644
--- a/ydb/services/persqueue_cluster_discovery/cluster_discovery_service.cpp
+++ b/ydb/services/persqueue_cluster_discovery/cluster_discovery_service.cpp
@@ -25,7 +25,7 @@ inline auto& Ctx() {
class TClusterDiscoveryServiceActor: public TActorBootstrapped<TClusterDiscoveryServiceActor> {
public:
- TClusterDiscoveryServiceActor(TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
+ TClusterDiscoveryServiceActor(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters)
: RawCounters(counters)
, Counters(BuildCounters())
{
@@ -290,11 +290,11 @@ private:
size_t NetClassifierUpdatesCount = 0;
size_t ClustersListUpdatesCount = 0;
- TIntrusivePtr<NMonitoring::TDynamicCounters> RawCounters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> RawCounters;
TClusterDiscoveryCounters::TPtr Counters;
};
-NActors::IActor* CreateClusterDiscoveryService(TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+NActors::IActor* CreateClusterDiscoveryService(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
return new TClusterDiscoveryServiceActor(counters);
}
diff --git a/ydb/services/persqueue_cluster_discovery/cluster_discovery_service.h b/ydb/services/persqueue_cluster_discovery/cluster_discovery_service.h
index fec5708c15..97441fd88b 100644
--- a/ydb/services/persqueue_cluster_discovery/cluster_discovery_service.h
+++ b/ydb/services/persqueue_cluster_discovery/cluster_discovery_service.h
@@ -17,6 +17,6 @@ namespace NKikimr::NPQ::NClusterDiscovery {
return TActorId(0, TStringBuf(x, TActorId::MaxServiceIDLength));
}
- NActors::IActor* CreateClusterDiscoveryService(TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+ NActors::IActor* CreateClusterDiscoveryService(TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
} // namespace NKikimr::NPQ::NClusterDiscovery
diff --git a/ydb/services/persqueue_cluster_discovery/grpc_service.cpp b/ydb/services/persqueue_cluster_discovery/grpc_service.cpp
index 086d162443..19f59e7d0b 100644
--- a/ydb/services/persqueue_cluster_discovery/grpc_service.cpp
+++ b/ydb/services/persqueue_cluster_discovery/grpc_service.cpp
@@ -14,7 +14,7 @@
namespace NKikimr::NGRpcService {
TGRpcPQClusterDiscoveryService::TGRpcPQClusterDiscoveryService(
- NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id,
+ NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NActors::TActorId id,
const TMaybe<ui64>& requestsInflightLimit
)
: ActorSystem_(system)
diff --git a/ydb/services/persqueue_cluster_discovery/grpc_service.h b/ydb/services/persqueue_cluster_discovery/grpc_service.h
index 7bc17ba2f5..421f5c0494 100644
--- a/ydb/services/persqueue_cluster_discovery/grpc_service.h
+++ b/ydb/services/persqueue_cluster_discovery/grpc_service.h
@@ -9,7 +9,7 @@ namespace NKikimr::NGRpcService {
class TGRpcPQClusterDiscoveryService
: public NGrpc::TGrpcServiceBase<Ydb::PersQueue::V1::ClusterDiscoveryService> {
public:
- TGRpcPQClusterDiscoveryService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TGRpcPQClusterDiscoveryService(NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
NActors::TActorId id, const TMaybe<ui64>& requestsInflightLimit = Nothing());
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
@@ -25,7 +25,7 @@ private:
NActors::TActorSystem* ActorSystem_;
grpc::ServerCompletionQueue* CQ_ = nullptr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters_;
NActors::TActorId GRpcRequestProxyId_;
THolder<NGrpc::TGlobalLimiter> Limiter;
};
diff --git a/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.txt b/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.txt
+++ b/ydb/services/persqueue_cluster_discovery/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/persqueue_v1/CMakeLists.txt b/ydb/services/persqueue_v1/CMakeLists.txt
index 33f80d3e64..08b555ef5c 100644
--- a/ydb/services/persqueue_v1/CMakeLists.txt
+++ b/ydb/services/persqueue_v1/CMakeLists.txt
@@ -6,6 +6,8 @@
# original buildsystem will not be accepted.
+add_subdirectory(actors)
+add_subdirectory(ut)
add_library(ydb-services-persqueue_v1)
target_link_libraries(ydb-services-persqueue_v1 PUBLIC
@@ -26,6 +28,7 @@ target_link_libraries(ydb-services-persqueue_v1 PUBLIC
library-persqueue-obfuscate
library-persqueue-tests
library-persqueue-topic_parser
+ api-grpc
api-grpc-draft
api-protos
services-lib-actors
diff --git a/ydb/services/persqueue_v1/actors/CMakeLists.txt b/ydb/services/persqueue_v1/actors/CMakeLists.txt
index ad515668d8..39e69eccf9 100644
--- a/ydb/services/persqueue_v1/actors/CMakeLists.txt
+++ b/ydb/services/persqueue_v1/actors/CMakeLists.txt
@@ -32,6 +32,5 @@ target_sources(services-persqueue_v1-actors PRIVATE
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/actors/partition_actor.cpp
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/actors/read_info_actor.cpp
- ${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/actors/write_session_actor.cpp
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/actors/schema_actors.cpp
)
diff --git a/ydb/services/persqueue_v1/actors/events.h b/ydb/services/persqueue_v1/actors/events.h
index 29b45676bf..f3d685fd43 100644
--- a/ydb/services/persqueue_v1/actors/events.h
+++ b/ydb/services/persqueue_v1/actors/events.h
@@ -27,7 +27,9 @@ using namespace Ydb;
struct TEvPQProxy {
enum EEv {
EvWriteInit = EventSpaceBegin(TKikimrEvents::ES_PQ_PROXY_NEW), // TODO: Replace 'NEW' with version or something
+ EvTopicWriteInit,
EvWrite,
+ EvTopicWrite,
EvDone,
EvReadInit,
EvMigrationReadInit,
@@ -58,6 +60,7 @@ struct TEvPQProxy {
EvDeadlineExceeded,
EvGetStatus,
EvUpdateToken,
+ EvTopicUpdateToken,
EvCommitRange,
EvEnd
};
@@ -123,8 +126,6 @@ struct TEvPQProxy {
const TString SelectQ, UpdateQ, DeleteQ;
};
-
-
struct TEvWriteInit : public NActors::TEventLocal<TEvWriteInit, EvWriteInit> {
TEvWriteInit(PersQueue::V1::StreamingWriteClientMessage&& req, const TString& peerName)
: Request(std::move(req))
@@ -135,6 +136,16 @@ struct TEvPQProxy {
TString PeerName;
};
+ struct TEvTopicWriteInit : public NActors::TEventLocal<TEvTopicWriteInit, EvTopicWriteInit> {
+ TEvTopicWriteInit(Topic::StreamWriteMessage::FromClient&& req, const TString& peerName)
+ : Request(std::move(req))
+ , PeerName(peerName)
+ { }
+
+ Topic::StreamWriteMessage::FromClient Request;
+ TString PeerName;
+ };
+
struct TEvWrite : public NActors::TEventLocal<TEvWrite, EvWrite> {
explicit TEvWrite(PersQueue::V1::StreamingWriteClientMessage&& req)
: Request(std::move(req))
@@ -143,6 +154,14 @@ struct TEvPQProxy {
PersQueue::V1::StreamingWriteClientMessage Request;
};
+ struct TEvTopicWrite : public NActors::TEventLocal<TEvTopicWrite, EvTopicWrite> {
+ explicit TEvTopicWrite(Topic::StreamWriteMessage::FromClient&& req)
+ : Request(std::move(req))
+ { }
+
+ Topic::StreamWriteMessage::FromClient Request;
+ };
+
struct TEvDone : public NActors::TEventLocal<TEvDone, EvDone> {
TEvDone()
{ }
@@ -177,6 +196,14 @@ struct TEvPQProxy {
, ReadTimestampMs(readTimestampMs)
{ }
+ explicit TEvRead(ui64 maxSize)
+ : Guid(CreateGuidAsString())
+ , MaxCount(0)
+ , MaxSize(maxSize)
+ , MaxTimeLagMs(0)
+ , ReadTimestampMs(0) {
+ }
+
const TString Guid;
ui64 MaxCount;
ui64 MaxSize;
@@ -192,6 +219,14 @@ struct TEvPQProxy {
PersQueue::V1::StreamingWriteClientMessage Request;
};
+ struct TEvTopicUpdateToken : public NActors::TEventLocal<TEvTopicUpdateToken, EvTopicUpdateToken> {
+ explicit TEvTopicUpdateToken(Topic::StreamWriteMessage::FromClient&& req)
+ : Request(std::move(req))
+ { }
+
+ Topic::StreamWriteMessage::FromClient Request;
+ };
+
struct TEvCloseSession : public NActors::TEventLocal<TEvCloseSession, EvCloseSession> {
TEvCloseSession(const TString& reason, const PersQueue::ErrorCode::ErrorCode errorCode)
: Reason(reason)
@@ -287,15 +322,15 @@ struct TEvPQProxy {
};
struct TEvStartRead : public NActors::TEventLocal<TEvStartRead, EvStartRead> {
- TEvStartRead(const TPartitionId& partition, ui64 readOffset, ui64 commitOffset, bool verifyReadOffset)
- : Partition(partition)
+ TEvStartRead(ui64 id, ui64 readOffset, ui64 commitOffset, bool verifyReadOffset)
+ : AssignId(id)
, ReadOffset(readOffset)
, CommitOffset(commitOffset)
, VerifyReadOffset(verifyReadOffset)
, Generation(0)
{ }
- const TPartitionId Partition;
+ const ui64 AssignId;
ui64 ReadOffset;
ui64 CommitOffset;
bool VerifyReadOffset;
@@ -303,19 +338,19 @@ struct TEvPQProxy {
};
struct TEvReleased : public NActors::TEventLocal<TEvReleased, EvReleased> {
- TEvReleased(const TPartitionId& partition)
- : Partition(partition)
+ TEvReleased(ui64 id)
+ : AssignId(id)
{ }
- const TPartitionId Partition;
+ const ui64 AssignId;
};
struct TEvGetStatus : public NActors::TEventLocal<TEvGetStatus, EvGetStatus> {
- TEvGetStatus(const TPartitionId& partition)
- : Partition(partition)
+ TEvGetStatus(ui64 id)
+ : AssignId(id)
{ }
- const TPartitionId Partition;
+ const ui64 AssignId;
};
diff --git a/ydb/services/persqueue_v1/actors/partition_actor.cpp b/ydb/services/persqueue_v1/actors/partition_actor.cpp
index 23a960b27a..7267c41839 100644
--- a/ydb/services/persqueue_v1/actors/partition_actor.cpp
+++ b/ydb/services/persqueue_v1/actors/partition_actor.cpp
@@ -9,7 +9,7 @@
#include <ydb/public/api/protos/ydb_topic.pb.h>
#include <ydb/public/lib/base/msgbus_status.h>
-#include <contrib/libs/protobuf_std/src/google/protobuf/util/time_util.h>
+#include <google/protobuf/util/time_util.h>
#include <util/charset/utf8.h>
@@ -303,6 +303,13 @@ void SetBatchExtraField(Topic::StreamReadMessage::ReadResponse::Batch* batch, TS
(*batch->mutable_write_session_meta())[key] = std::move(value);
}
+i32 GetDataChunkCodec(const NKikimrPQClient::TDataChunk& proto) {
+ if (proto.HasCodec()) {
+ return proto.GetCodec() + 1;
+ }
+ return 0;
+}
+
template<typename TReadResponse>
bool FillBatchedData(
TReadResponse* data, const NKikimrClient::TCmdReadResult& res,
@@ -326,6 +333,8 @@ bool FillBatchedData(
bool hasOffset = false;
bool hasData = false;
+ i32 batchCodec = 0; // UNSPECIFIED
+
typename TReadResponse::Batch* currentBatch = nullptr;
for (ui32 i = 0; i < res.ResultSize(); ++i) {
const auto& r = res.GetResult(i);
@@ -348,15 +357,19 @@ bool FillBatchedData(
sourceId = NPQ::NSourceIdEncoding::Decode(r.GetSourceId());
}
- if (!currentBatch
- || GetBatchWriteTimestampMS(currentBatch) != static_cast<i64>(r.GetWriteTimestampMS())
- || GetBatchSourceId(currentBatch) != sourceId) {
+ if (!currentBatch || GetBatchWriteTimestampMS(currentBatch) != static_cast<i64>(r.GetWriteTimestampMS()) ||
+ GetBatchSourceId(currentBatch) != sourceId ||
+ (!UseMigrationProtocol && GetDataChunkCodec(proto) != batchCodec)) {
// If write time and source id are the same, the rest fields will be the same too.
currentBatch = partitionData->add_batches();
i64 write_ts = static_cast<i64>(r.GetWriteTimestampMS());
Y_VERIFY(write_ts >= 0);
SetBatchWriteTimestampMS(currentBatch, write_ts);
SetBatchSourceId(currentBatch, std::move(sourceId));
+ batchCodec = GetDataChunkCodec(proto);
+ if constexpr (!UseMigrationProtocol) {
+ currentBatch->set_codec(batchCodec);
+ }
if (proto.HasMeta()) {
const auto& header = proto.GetMeta();
@@ -380,9 +393,12 @@ bool FillBatchedData(
SetBatchExtraField(currentBatch, kv.GetKey(), kv.GetValue());
}
}
- if constexpr (UseMigrationProtocol) {
- if (proto.HasIp() && IsUtf(proto.GetIp())) {
+
+ if (proto.HasIp() && IsUtf(proto.GetIp())) {
+ if constexpr (UseMigrationProtocol) {
currentBatch->set_ip(proto.GetIp());
+ } else {
+ SetBatchExtraField(currentBatch, "_ip", proto.GetIp());
}
}
}
@@ -406,7 +422,7 @@ bool FillBatchedData(
*message->mutable_created_at() =
::google::protobuf::util::TimeUtil::MillisecondsToTimestamp(r.GetCreateTimestampMS());
- message->set_message_group_id(r.GetPartitionKey());
+ message->set_message_group_id(GetBatchSourceId(currentBatch));
}
hasData = true;
}
diff --git a/ydb/services/persqueue_v1/actors/read_info_actor.cpp b/ydb/services/persqueue_v1/actors/read_info_actor.cpp
index 12c63873f0..1147c9f989 100644
--- a/ydb/services/persqueue_v1/actors/read_info_actor.cpp
+++ b/ydb/services/persqueue_v1/actors/read_info_actor.cpp
@@ -16,7 +16,7 @@ using namespace PersQueue::V1;
TReadInfoActor::TReadInfoActor(
TEvPQReadInfoRequest* request, const NPersQueue::TTopicsListController& topicsHandler,
const TActorId& schemeCache, const TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters
)
: TBase(request)
, SchemeCache(schemeCache)
diff --git a/ydb/services/persqueue_v1/actors/read_info_actor.h b/ydb/services/persqueue_v1/actors/read_info_actor.h
index 3ea8360d48..d2b94d6f28 100644
--- a/ydb/services/persqueue_v1/actors/read_info_actor.h
+++ b/ydb/services/persqueue_v1/actors/read_info_actor.h
@@ -17,7 +17,7 @@ public:
TReadInfoActor(
NKikimr::NGRpcService::TEvPQReadInfoRequest* request, const NPersQueue::TTopicsListController& topicsHandler,
const NActors::TActorId& schemeCache, const NActors::TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters
);
~TReadInfoActor();
@@ -62,7 +62,7 @@ private:
TTopicInitInfoMap TopicAndTablets;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TString ClientId;
NPersQueue::TTopicsListController TopicsHandler;
diff --git a/ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp b/ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp
index fb746602cd..34e6522250 100644
--- a/ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp
+++ b/ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp
@@ -12,7 +12,7 @@ namespace NKikimr::NGRpcProxy::V1 {
TReadInitAndAuthActor::TReadInitAndAuthActor(
const TActorContext& ctx, const TActorId& parentId, const TString& clientId, const ui64 cookie,
const TString& session, const NActors::TActorId& metaCache, const NActors::TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, TIntrusivePtr<NACLib::TUserToken> token,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, TIntrusivePtr<NACLib::TUserToken> token,
const NPersQueue::TTopicsToConverter& topics, const TString& localCluster
)
: ParentId(parentId)
@@ -57,6 +57,10 @@ void TReadInitAndAuthActor::Die(const TActorContext& ctx) {
for (auto& [_, holder] : Topics) {
if (holder.PipeClient)
NTabletPipe::CloseClient(ctx, holder.PipeClient);
+
+ // In case of cdc, primary path (actual cdc stream path) was overwritten, so restore previous value
+ if (holder.CdcStreamPath)
+ holder.DiscoveryConverter->RestorePrimaryPath();
}
LOG_DEBUG_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " auth is DEAD");
@@ -93,6 +97,7 @@ bool TReadInitAndAuthActor::ProcessTopicSchemeCacheResponse(
topicsIter->second.CloudId = pqDescr.GetPQTabletConfig().GetYcCloudId();
topicsIter->second.DbId = pqDescr.GetPQTabletConfig().GetYdbDatabaseId();
topicsIter->second.FolderId = pqDescr.GetPQTabletConfig().GetYcFolderId();
+ topicsIter->second.MeteringMode = pqDescr.GetPQTabletConfig().GetMeteringMode();
if (!topicsIter->second.DiscoveryConverter->IsValid()) {
TString errorReason = Sprintf("Internal server error with topic '%s', Marker# PQ503",
topicsIter->second.DiscoveryConverter->GetPrintableString().c_str());
@@ -100,7 +105,9 @@ bool TReadInitAndAuthActor::ProcessTopicSchemeCacheResponse(
return false;
}
topicsIter->second.FullConverter = topicsIter->second.DiscoveryConverter->UpgradeToFullConverter(
- pqDescr.GetPQTabletConfig(), AppData(ctx)->PQConfig.GetTestDatabaseRoot()
+ pqDescr.GetPQTabletConfig(),
+ AppData(ctx)->PQConfig.GetTestDatabaseRoot(),
+ topicsIter->second.CdcStreamPath
);
Y_VERIFY(topicsIter->second.FullConverter->IsValid());
return CheckTopicACL(entry, topicsIter->first, ctx);
@@ -122,7 +129,10 @@ void TReadInitAndAuthActor::HandleTopicsDescribeResponse(TEvDescribeTopicsRespon
Y_VERIFY(entry.ListNodeEntry->Children.size() == 1);
const auto& topic = entry.ListNodeEntry->Children.at(0);
+ // primary path used to re-describe
it->second.DiscoveryConverter->SetPrimaryPath(JoinPath(ChildPath(entry.Path, topic.Name)));
+ it->second.CdcStreamPath = CanonizePath(entry.Path);
+
// Topics[it->second.DiscoveryConverter->GetInternalName()] = it->second;
// Topics.erase(it);
@@ -185,6 +195,7 @@ bool TReadInitAndAuthActor::CheckTopicACL(
break;
}
}
+ //TODO : add here checking of client-service-type password. Provide it via API-call.
if (!found) {
CloseSession(
TStringBuilder() << "no read rule provided for consumer '" << ClientPath << "' in topic '" << topic << "' in current cluster '" << LocalCluster,
@@ -251,7 +262,7 @@ void TReadInitAndAuthActor::FinishInitialization(const TActorContext& ctx) {
TTopicInitInfoMap res;
for (auto& [name, holder] : Topics) {
res.insert(std::make_pair(name, TTopicInitInfo{
- holder.FullConverter, holder.TabletID, holder.CloudId, holder.DbId, holder.FolderId
+ holder.FullConverter, holder.TabletID, holder.CloudId, holder.DbId, holder.FolderId, holder.MeteringMode
}));
}
ctx.Send(ParentId, new TEvPQProxy::TEvAuthResultOk(std::move(res)));
diff --git a/ydb/services/persqueue_v1/actors/read_init_auth_actor.h b/ydb/services/persqueue_v1/actors/read_init_auth_actor.h
index 4e21ae8b2c..2891c8ff1f 100644
--- a/ydb/services/persqueue_v1/actors/read_init_auth_actor.h
+++ b/ydb/services/persqueue_v1/actors/read_init_auth_actor.h
@@ -21,7 +21,7 @@ class TReadInitAndAuthActor : public NActors::TActorBootstrapped<TReadInitAndAut
public:
TReadInitAndAuthActor(const TActorContext& ctx, const TActorId& parentId, const TString& clientId, const ui64 cookie,
const TString& session, const NActors::TActorId& schemeCache, const NActors::TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, TIntrusivePtr<NACLib::TUserToken> token,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, TIntrusivePtr<NACLib::TUserToken> token,
const NPersQueue::TTopicsToConverter& topics, const TString& localCluster);
~TReadInitAndAuthActor();
@@ -76,7 +76,7 @@ private:
THashMap<TString, TTopicHolder> Topics; // topic -> info
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
bool DoCheckACL;
TString LocalCluster;
diff --git a/ydb/services/persqueue_v1/actors/read_session_actor.h b/ydb/services/persqueue_v1/actors/read_session_actor.h
index 7d9b50dc8a..d9e048394d 100644
--- a/ydb/services/persqueue_v1/actors/read_session_actor.h
+++ b/ydb/services/persqueue_v1/actors/read_session_actor.h
@@ -1,9 +1,8 @@
#pragma once
#include "events.h"
-#include "persqueue_utils.h"
-
#include "partition_actor.h"
+#include "persqueue_utils.h"
#include <library/cpp/actors/core/actor_bootstrapped.h>
#include <library/cpp/containers/disjoint_interval_tree/disjoint_interval_tree.h>
@@ -11,6 +10,7 @@
#include <ydb/core/base/tablet_pipe.h>
#include <ydb/core/grpc_services/grpc_request_proxy.h>
#include <ydb/core/persqueue/events/global.h>
+#include <ydb/services/lib/actors/pq_rl_helpers.h>
#include <util/generic/guid.h>
#include <util/system/compiler.h>
@@ -90,6 +90,10 @@ struct TFormedReadResponse: public TSimpleRefCount<TFormedReadResponse<TServerMe
i64 ByteSize = 0;
ui64 RequestedBytes = 0;
+ bool HasMessages = false;
+ i64 ByteSizeBeforeFiltering = 0;
+ ui64 RequiredQuota = 0;
+
//returns byteSize diff
i64 ApplyResponse(TServerMessage&& resp);
@@ -108,7 +112,10 @@ struct TFormedReadResponse: public TSimpleRefCount<TFormedReadResponse<TServerMe
template<bool UseMigrationProtocol>
-class TReadSessionActor : public TActorBootstrapped<TReadSessionActor<UseMigrationProtocol>> {
+class TReadSessionActor
+ : public TActorBootstrapped<TReadSessionActor<UseMigrationProtocol>>
+ , private TRlHelpers
+{
using TClientMessage = typename std::conditional_t<UseMigrationProtocol, PersQueue::V1::MigrationStreamingReadClientMessage, Topic::StreamReadMessage::FromClient>;
using TServerMessage = typename std::conditional_t<UseMigrationProtocol, PersQueue::V1::MigrationStreamingReadServerMessage, Topic::StreamReadMessage::FromServer>;
@@ -132,13 +139,14 @@ private:
static constexpr ui32 MAX_INFLY_READS = 10;
static constexpr ui64 MAX_READ_SIZE = 100 << 20; //100mb;
+ static constexpr ui64 READ_BLOCK_SIZE = 8_KB; // metering
static constexpr double LAG_GROW_MULTIPLIER = 1.2; //assume that 20% more data arrived to partitions
public:
TReadSessionActor(TEvStreamPQReadRequest* request, const ui64 cookie,
const NActors::TActorId& schemeCache, const NActors::TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const TMaybe<TString> clientDC,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const TMaybe<TString> clientDC,
const NPersQueue::TTopicsListController& topicsHandler);
~TReadSessionActor();
@@ -152,7 +160,7 @@ public:
private:
STFUNC(StateFunc) {
switch (ev->GetTypeRewrite()) {
- CFunc(NActors::TEvents::TSystem::Wakeup, HandleWakeup)
+ HFunc(TEvents::TEvWakeup, Handle);
HFunc(IContext::TEvReadFinished, Handle);
HFunc(IContext::TEvWriteFinished, Handle);
@@ -194,6 +202,7 @@ private:
};
}
+ ui64 PrepareResponse(typename TFormedReadResponse<TServerMessage>::TPtr formedResponse); // returns estimated response's size
bool WriteResponse(TServerMessage&& response, bool finish = false);
void Handle(typename IContext::TEvReadFinished::TPtr& ev, const TActorContext &ctx);
@@ -231,9 +240,11 @@ private:
[[nodiscard]] bool ProcessBalancerDead(const ui64 tabletId, const NActors::TActorContext& ctx); // returns false if actor died
void HandlePoison(TEvPQProxy::TEvDieCommand::TPtr& ev, const NActors::TActorContext& ctx);
- void HandleWakeup(const NActors::TActorContext& ctx);
+ void Handle(TEvents::TEvWakeup::TPtr& ev, const TActorContext& ctx);
void Handle(TEvPQProxy::TEvAuthResultOk::TPtr& ev, const NActors::TActorContext& ctx);
+ void RecheckACL(const TActorContext& ctx);
+ void InitSession(const TActorContext& ctx);
void CloseSession(const TString& errorReason, const PersQueue::ErrorCode::ErrorCode errorCode,
const NActors::TActorContext& ctx);
@@ -280,7 +291,6 @@ private:
TString PeerName;
bool CommitsDisabled;
- bool BalancersInitStarted;
bool InitDone;
bool RangesMode = false;
@@ -289,6 +299,7 @@ private:
ui32 MaxReadSize;
i64 MaxTimeLagMs;
i64 ReadTimestampMs;
+ i64 ReadSizeBudget;
TString Auth;
@@ -315,6 +326,8 @@ private:
THashMap<TActorId, typename TFormedReadResponse<TServerMessage>::TPtr> PartitionToReadResponse; // Partition actor -> TFormedReadResponse answer that has this partition.
// PartitionsTookPartInRead in formed read response contain this actor id.
+ typename TFormedReadResponse<TServerMessage>::TPtr PendingQuota; // response that currenly pending quota
+ std::deque<typename TFormedReadResponse<TServerMessage>::TPtr> WaitingQuota; // responses that will be quoted next
struct TControlMessages {
TVector<TServerMessage> ControlMessages;
@@ -335,14 +348,14 @@ private:
TMap<ui64, TCommitInfo> Commits; //readid->TCommitInfo
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
- NMonitoring::TDynamicCounters::TCounterPtr SessionsCreated;
- NMonitoring::TDynamicCounters::TCounterPtr SessionsActive;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SessionsCreated;
+ ::NMonitoring::TDynamicCounters::TCounterPtr SessionsActive;
- NMonitoring::TDynamicCounters::TCounterPtr Errors;
- NMonitoring::TDynamicCounters::TCounterPtr PipeReconnects;
- NMonitoring::TDynamicCounters::TCounterPtr BytesInflight;
+ ::NMonitoring::TDynamicCounters::TCounterPtr Errors;
+ ::NMonitoring::TDynamicCounters::TCounterPtr PipeReconnects;
+ ::NMonitoring::TDynamicCounters::TCounterPtr BytesInflight;
ui64 BytesInflight_;
ui64 RequestedBytes;
ui32 ReadsInfly;
diff --git a/ydb/services/persqueue_v1/actors/read_session_actor.ipp b/ydb/services/persqueue_v1/actors/read_session_actor.ipp
index a190bc6340..4a5da33c3a 100644
--- a/ydb/services/persqueue_v1/actors/read_session_actor.ipp
+++ b/ydb/services/persqueue_v1/actors/read_session_actor.ipp
@@ -9,7 +9,7 @@
#include <library/cpp/protobuf/util/repeated_field_utils.h>
-#include <contrib/libs/protobuf_std/src/google/protobuf/util/time_util.h>
+#include <google/protobuf/util/time_util.h>
#include <util/string/join.h>
#include <util/string/strip.h>
@@ -30,13 +30,14 @@ using namespace PersQueue::V1;
//TODO: add here tracking of bytes in/out
-template<bool UseMigrationProtocol>
-TReadSessionActor<UseMigrationProtocol>::TReadSessionActor(
- TEvStreamPQReadRequest* request, const ui64 cookie, const TActorId& schemeCache, const TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const TMaybe<TString> clientDC,
- const NPersQueue::TTopicsListController& topicsHandler
-)
- : Request(request)
+template <bool UseMigrationProtocol>
+TReadSessionActor<UseMigrationProtocol>::TReadSessionActor(TEvStreamPQReadRequest* request, const ui64 cookie,
+ const TActorId& schemeCache, const TActorId& newSchemeCache,
+ TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ const TMaybe<TString> clientDC,
+ const NPersQueue::TTopicsListController& topicsHandler)
+ : TRlHelpers(request, READ_BLOCK_SIZE, TDuration::Minutes(1))
+ , Request(request)
, ClientDC(clientDC ? *clientDC : "other")
, StartTimestamp(TInstant::Now())
, SchemeCache(schemeCache)
@@ -46,12 +47,12 @@ TReadSessionActor<UseMigrationProtocol>::TReadSessionActor(
, ClientPath()
, Session()
, CommitsDisabled(false)
- , BalancersInitStarted(false)
, InitDone(false)
, MaxReadMessagesCount(0)
, MaxReadSize(0)
, MaxTimeLagMs(0)
, ReadTimestampMs(0)
+ , ReadSizeBudget(0)
, ForceACLCheck(false)
, RequestNotChecked(true)
, LastACLCheckTimestamp(TInstant::Zero())
@@ -62,12 +63,10 @@ TReadSessionActor<UseMigrationProtocol>::TReadSessionActor(
, BytesInflight_(0)
, RequestedBytes(0)
, ReadsInfly(0)
- , TopicsHandler(topicsHandler)
-{
+ , TopicsHandler(topicsHandler) {
Y_ASSERT(Request);
}
-
template<bool UseMigrationProtocol>
TReadSessionActor<UseMigrationProtocol>::~TReadSessionActor() = default;
@@ -121,39 +120,15 @@ void TReadSessionActor<UseMigrationProtocol>::Handle(typename IContext::TEvReadF
ctx.Send(ctx.SelfID, new TEvPQProxy::TEvDone());
return;
}
- auto converterFactory = TopicsHandler.GetConverterFactory();
- auto MakePartitionId = [&](auto& request) {
- const ui64 id = [&request](){
- if constexpr (UseMigrationProtocol) {
- return request.assign_id();
- } else {
- return request.partition_session_id();
- }
- }();
- Y_VERIFY(Partitions.find(id) != Partitions.end());
-
- const auto& info = Partitions.at(id);
- auto topic = info.Topic->GetFederationPath();
- const auto& cluster = info.Topic->GetCluster();
- ui64 partition = info.Partition.Partition;
-
- auto converter = converterFactory->MakeDiscoveryConverter(
- std::move(topic), {}, cluster, Request->GetDatabaseName().GetOrElse(TString())
- );
- return TPartitionId{converter, partition, id};
+ auto GetAssignId = [](auto& request) {
+ if constexpr (UseMigrationProtocol) {
+ return request.assign_id();
+ } else {
+ return request.partition_session_id();
+ }
};
-
-#define GET_PART_ID_OR_EXIT(request) \
-auto partId = MakePartitionId(request); \
-if (!partId.DiscoveryConverter->IsValid()) { \
- CloseSession(TStringBuilder() << "Invalid topic in request: " << partId.DiscoveryConverter->GetOriginalTopic() \
- << ", reason: " << partId.DiscoveryConverter->GetReason(), \
- PersQueue::ErrorCode::BAD_REQUEST, ctx); \
- return; \
-}
-
if constexpr (UseMigrationProtocol) {
switch (request.request_case()) {
case TClientMessage::kInitRequest: {
@@ -161,9 +136,7 @@ if (!partId.DiscoveryConverter->IsValid()) { \
break;
}
case TClientMessage::kStatus: {
- //const auto& req = request.status();
- GET_PART_ID_OR_EXIT(request.status());
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvGetStatus(partId));
+ ctx.Send(ctx.SelfID, new TEvPQProxy::TEvGetStatus(GetAssignId(request.status())));
if (!Request->GetStreamCtx()->Read()) {
LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc read failed at start");
Die(ctx);
@@ -177,8 +150,7 @@ if (!partId.DiscoveryConverter->IsValid()) { \
break;
}
case TClientMessage::kReleased: {
- GET_PART_ID_OR_EXIT(request.released());
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvReleased(partId));
+ ctx.Send(ctx.SelfID, new TEvPQProxy::TEvReleased(GetAssignId(request.released())));
if (!Request->GetStreamCtx()->Read()) {
LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc read failed at start");
Die(ctx);
@@ -194,8 +166,7 @@ if (!partId.DiscoveryConverter->IsValid()) { \
const ui64 commitOffset = req.commit_offset();
const bool verifyReadOffset = req.verify_read_offset();
- GET_PART_ID_OR_EXIT(request.start_read());
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvStartRead(partId, readOffset, commitOffset, verifyReadOffset));
+ ctx.Send(ctx.SelfID, new TEvPQProxy::TEvStartRead(GetAssignId(request.start_read()), readOffset, commitOffset, verifyReadOffset));
if (!Request->GetStreamCtx()->Read()) {
LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc read failed at start");
Die(ctx);
@@ -254,12 +225,11 @@ if (!partId.DiscoveryConverter->IsValid()) { \
break;
}
case TClientMessage::kReadRequest: {
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvRead()); // Proto read message have no parameters
+ ctx.Send(ctx.SelfID, new TEvPQProxy::TEvRead(request.read_request().bytes_size()));
break;
}
case TClientMessage::kPartitionSessionStatusRequest: {
- GET_PART_ID_OR_EXIT(request.partition_session_status_request());
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvGetStatus(partId));
+ ctx.Send(ctx.SelfID, new TEvPQProxy::TEvGetStatus(GetAssignId(request.partition_session_status_request())));
if (!Request->GetStreamCtx()->Read()) {
LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc read failed at start");
Die(ctx);
@@ -269,8 +239,7 @@ if (!partId.DiscoveryConverter->IsValid()) { \
}
case TClientMessage::kStopPartitionSessionResponse: {
- GET_PART_ID_OR_EXIT(request.stop_partition_session_response());
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvReleased(partId));
+ ctx.Send(ctx.SelfID, new TEvPQProxy::TEvReleased(GetAssignId(request.stop_partition_session_response())));
if (!Request->GetStreamCtx()->Read()) {
LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc read failed at start");
Die(ctx);
@@ -285,8 +254,7 @@ if (!partId.DiscoveryConverter->IsValid()) { \
const ui64 readOffset = req.read_offset();
const ui64 commitOffset = req.commit_offset();
- GET_PART_ID_OR_EXIT(req);
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvStartRead(partId, readOffset, commitOffset, req.has_read_offset()));
+ ctx.Send(ctx.SelfID, new TEvPQProxy::TEvStartRead(GetAssignId(req), readOffset, commitOffset, req.has_read_offset()));
if (!Request->GetStreamCtx()->Read()) {
LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc read failed at start");
Die(ctx);
@@ -338,8 +306,6 @@ if (!partId.DiscoveryConverter->IsValid()) { \
}
}
-#undef GET_PART_ID_OR_EXIT
-
template<bool UseMigrationProtocol>
void TReadSessionActor<UseMigrationProtocol>::Handle(typename IContext::TEvWriteFinished::TPtr& ev, const TActorContext& ctx) {
@@ -465,19 +431,15 @@ template<bool UseMigrationProtocol>
void TReadSessionActor<UseMigrationProtocol>::Handle(TEvPQProxy::TEvStartRead::TPtr& ev, const TActorContext& ctx) {
RequestNotChecked = true;
- auto it = Partitions.find(ev->Get()->Partition.AssignId);
- if (it == Partitions.end()) {
- return;
- }
-
+ auto it = Partitions.find(ev->Get()->AssignId);
if (it == Partitions.end() || it->second.Releasing) {
//do nothing - already released partition
- LOG_WARN_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " got NOTACTUAL StartRead from client for " << ev->Get()->Partition
+ LOG_WARN_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " got NOTACTUAL StartRead from client for partition with assign id " << ev->Get()->AssignId
<< " at offset " << ev->Get()->ReadOffset);
return;
}
LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " got StartRead from client for "
- << ev->Get()->Partition <<
+ << it->second.Partition <<
" at readOffset " << ev->Get()->ReadOffset <<
" commitOffset " << ev->Get()->CommitOffset);
@@ -490,7 +452,7 @@ template<bool UseMigrationProtocol>
void TReadSessionActor<UseMigrationProtocol>::Handle(TEvPQProxy::TEvReleased::TPtr& ev, const TActorContext& ctx) {
RequestNotChecked = true;
- auto it = Partitions.find(ev->Get()->Partition.AssignId);
+ auto it = Partitions.find(ev->Get()->AssignId);
if (it == Partitions.end()) {
return;
}
@@ -500,19 +462,19 @@ void TReadSessionActor<UseMigrationProtocol>::Handle(TEvPQProxy::TEvReleased::TP
}
Y_VERIFY(it->second.LockSent);
- LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " got Released from client for " << ev->Get()->Partition);
+ LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " got Released from client for partition " << it->second.Partition);
ReleasePartition(it, true, ctx);
}
template<bool UseMigrationProtocol>
void TReadSessionActor<UseMigrationProtocol>::Handle(TEvPQProxy::TEvGetStatus::TPtr& ev, const TActorContext& ctx) {
- auto it = Partitions.find(ev->Get()->Partition.AssignId);
+ auto it = Partitions.find(ev->Get()->AssignId);
if (it == Partitions.end() || it->second.Releasing) {
// Ignore request - client asking status after releasing of partition.
return;
}
- ctx.Send(it->second.Actor, new TEvPQProxy::TEvGetStatus(ev->Get()->Partition));
+ ctx.Send(it->second.Actor, new TEvPQProxy::TEvGetStatus(ev->Get()->AssignId));
}
template<bool UseMigrationProtocol>
@@ -661,7 +623,7 @@ void TReadSessionActor<UseMigrationProtocol>::Handle(typename TEvReadInit::TPtr&
if (AppData(ctx)->PQConfig.GetTopicsAreFirstClassCitizen()) {
ClientPath = init.consumer();
} else {
- ClientPath = NPersQueue::NormalizeFullPath(NPersQueue::MakeConsumerPath(init.consumer()));
+ ClientPath = NPersQueue::StripLeadSlash(NPersQueue::MakeConsumerPath(init.consumer()));
}
TStringBuilder session;
@@ -682,8 +644,6 @@ void TReadSessionActor<UseMigrationProtocol>::Handle(typename TEvReadInit::TPtr&
MaxReadSize = NormalizeMaxReadSize(0);
MaxTimeLagMs = 0; // max_lag per topic only
ReadTimestampMs = 0; // read_from per topic only
- // MaxTimeLagMs = ::google::protobuf::util::TimeUtil::DurationToMilliseconds(init.max_lag());
- // ReadTimestampMs = ::google::protobuf::util::TimeUtil::TimestampToMilliseconds(init.read_from());
ReadOnlyLocal = true;
}
if (MaxTimeLagMs < 0) {
@@ -939,26 +899,6 @@ void TReadSessionActor<UseMigrationProtocol>::Handle(TEvPQProxy::TEvAuthResultOk
SLIBigLatency.Inc();
}
- TServerMessage result;
- result.set_status(Ydb::StatusIds::SUCCESS);
-
- result.mutable_init_response()->set_session_id(Session);
- if (!WriteResponse(std::move(result))) {
- LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc write failed");
- Die(ctx);
- return;
- }
-
- if (!Request->GetStreamCtx()->Read()) {
- LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc read failed at start");
- Die(ctx);
- return;
- }
-
-
- Y_VERIFY(!BalancersInitStarted);
- BalancersInitStarted = true;
-
for (auto& [name, t] : ev->Get()->TopicAndTablets) { // ToDo - return something from Init and Auth Actor (Full Path - ?)
auto internalName = t.TopicNameConverter->GetInternalName();
auto topicGrIter = TopicGroups.find(name);
@@ -985,42 +925,80 @@ void TReadSessionActor<UseMigrationProtocol>::Handle(TEvPQProxy::TEvAuthResultOk
topicHolder.CloudId = t.CloudId;
topicHolder.DbId = t.DbId;
topicHolder.FolderId = t.FolderId;
+ topicHolder.MeteringMode = t.MeteringMode;
FullPathToConverter[t.TopicNameConverter->GetPrimaryPath()] = t.TopicNameConverter;
FullPathToConverter[t.TopicNameConverter->GetSecondaryPath()] = t.TopicNameConverter;
- }
-
- for (auto& t : Topics) {
- NTabletPipe::TClientConfig clientConfig;
- clientConfig.CheckAliveness = false;
-
- clientConfig.RetryPolicy = RetryPolicyForPipes;
- t.second.PipeClient = ctx.RegisterWithSameMailbox(NTabletPipe::CreateClient(ctx.SelfID, t.second.TabletID, clientConfig));
-
- Y_VERIFY(t.second.FullConverter);
- auto it = TopicGroups.find(t.second.FullConverter->GetInternalName());
- if (it != TopicGroups.end()) {
- t.second.Groups = it->second;
+ if (!GetMeteringMode()) {
+ SetMeteringMode(t.MeteringMode);
+ } else if (*GetMeteringMode() != t.MeteringMode) {
+ return CloseSession("Cannot read from topics with different metering modes",
+ PersQueue::ErrorCode::BAD_REQUEST, ctx);
}
}
- RegisterSessions(ctx);
-
- ctx.Schedule(CHECK_ACL_DELAY, new TEvents::TEvWakeup());
+ if (IsQuotaRequired()) {
+ Y_VERIFY(MaybeRequestQuota(1, EWakeupTag::RlInit, ctx));
+ } else {
+ InitSession(ctx);
+ }
} else {
for (auto& [name, t] : ev->Get()->TopicAndTablets) {
- if (Topics.find(t.TopicNameConverter->GetInternalName()) == Topics.end()) {
- CloseSession(
+ auto it = Topics.find(t.TopicNameConverter->GetInternalName());
+ if (it == Topics.end()) {
+ return CloseSession(
TStringBuilder() << "list of topics changed - new topic '"
<< t.TopicNameConverter->GetPrintableString() << "' found",
PersQueue::ErrorCode::BAD_REQUEST, ctx
);
- return;
+ }
+ if (t.MeteringMode != *GetMeteringMode()) {
+ return CloseSession(
+ TStringBuilder() << "Metering mode of topic: " << name << " has been changed",
+ PersQueue::ErrorCode::OVERLOAD, ctx
+ );
}
}
}
}
+template<bool UseMigrationProtocol>
+void TReadSessionActor<UseMigrationProtocol>::InitSession(const TActorContext& ctx) {
+ TServerMessage result;
+ result.set_status(Ydb::StatusIds::SUCCESS);
+
+ result.mutable_init_response()->set_session_id(Session);
+ if (!WriteResponse(std::move(result))) {
+ LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc write failed");
+ Die(ctx);
+ return;
+ }
+
+ if (!Request->GetStreamCtx()->Read()) {
+ LOG_INFO_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " grpc read failed at start");
+ Die(ctx);
+ return;
+ }
+
+ for (auto& t : Topics) {
+ NTabletPipe::TClientConfig clientConfig;
+
+ clientConfig.CheckAliveness = false;
+
+ clientConfig.RetryPolicy = RetryPolicyForPipes;
+ t.second.PipeClient = ctx.RegisterWithSameMailbox(NTabletPipe::CreateClient(ctx.SelfID, t.second.TabletID, clientConfig));
+
+ Y_VERIFY(t.second.FullConverter);
+ auto it = TopicGroups.find(t.second.FullConverter->GetInternalName());
+ if (it != TopicGroups.end()) {
+ t.second.Groups = it->second;
+ }
+ }
+
+ RegisterSessions(ctx);
+
+ ctx.Schedule(CHECK_ACL_DELAY, new TEvents::TEvWakeup(EWakeupTag::RecheckAcl));
+}
template<bool UseMigrationProtocol>
void TReadSessionActor<UseMigrationProtocol>::Handle(TEvPersQueue::TEvLockPartition::TPtr& ev, const TActorContext& ctx) {
@@ -1430,11 +1408,20 @@ void TReadSessionActor<UseMigrationProtocol>::ReleasePartition(const typename TH
DropPartition(it, ctx); //partition will be dropped
if (formedResponseToAnswer) {
- ProcessAnswer(ctx, formedResponseToAnswer); // returns false if actor died
+ if (const auto ru = CalcRuConsumption(PrepareResponse(formedResponseToAnswer))) {
+ formedResponseToAnswer->RequiredQuota = ru;
+ if (MaybeRequestQuota(ru, EWakeupTag::RlAllowed, ctx)) {
+ Y_VERIFY(!PendingQuota);
+ PendingQuota = formedResponseToAnswer;
+ } else {
+ WaitingQuota.push_back(formedResponseToAnswer);
+ }
+ } else {
+ ProcessAnswer(ctx, formedResponseToAnswer); // returns false if actor died
+ }
}
}
-
template<bool UseMigrationProtocol>
bool TReadSessionActor<UseMigrationProtocol>::ProcessBalancerDead(const ui64 tablet, const TActorContext& ctx) {
for (auto& t : Topics) {
@@ -1531,7 +1518,11 @@ void TReadSessionActor<UseMigrationProtocol>::Handle(TEvPQProxy::TEvRead::TPtr&
LOG_DEBUG_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " got read request with guid: " << event->Guid);
- Reads.emplace_back(event.Release());
+ if constexpr (UseMigrationProtocol) {
+ Reads.emplace_back(event.Release());
+ } else {
+ ReadSizeBudget += event->MaxSize;
+ }
ProcessReads(ctx);
}
@@ -1608,7 +1599,17 @@ void TReadSessionActor<UseMigrationProtocol>::Handle(typename TEvReadResponse::T
}
if (formedResponse->RequestsInfly == 0) {
- ProcessAnswer(ctx, formedResponse);
+ if (const auto ru = CalcRuConsumption(PrepareResponse(formedResponse))) {
+ formedResponse->RequiredQuota = ru;
+ if (MaybeRequestQuota(ru, EWakeupTag::RlAllowed, ctx)) {
+ Y_VERIFY(!PendingQuota);
+ PendingQuota = formedResponse;
+ } else {
+ WaitingQuota.push_back(formedResponse);
+ }
+ } else {
+ ProcessAnswer(ctx, formedResponse);
+ }
}
}
@@ -1625,6 +1626,19 @@ bool TReadSessionActor<UseMigrationProtocol>::WriteResponse(TServerMessage&& res
}
template<bool UseMigrationProtocol>
+ui64 TReadSessionActor<UseMigrationProtocol>::PrepareResponse(typename TFormedReadResponse<TServerMessage>::TPtr formedResponse) {
+ formedResponse->ByteSizeBeforeFiltering = formedResponse->Response.ByteSize();
+
+ if constexpr(UseMigrationProtocol) {
+ formedResponse->HasMessages = RemoveEmptyMessages(*formedResponse->Response.mutable_data_batch());
+ } else {
+ formedResponse->HasMessages = RemoveEmptyMessages(*formedResponse->Response.mutable_read_response());
+ }
+
+ return formedResponse->HasMessages ? formedResponse->Response.ByteSize() : 0;
+}
+
+template<bool UseMigrationProtocol>
void TReadSessionActor<UseMigrationProtocol>::ProcessAnswer(const TActorContext& ctx, typename TFormedReadResponse<TServerMessage>::TPtr formedResponse) {
ui32 readDurationMs = (ctx.Now() - formedResponse->Start - formedResponse->WaitQuotaTime).MilliSeconds();
if (formedResponse->FromDisk) {
@@ -1637,15 +1651,13 @@ void TReadSessionActor<UseMigrationProtocol>::ProcessAnswer(const TActorContext&
}
Y_VERIFY(formedResponse->RequestsInfly == 0);
- const ui64 diff = formedResponse->Response.ByteSize();
- bool hasMessages;
- if constexpr(UseMigrationProtocol) {
- hasMessages = RemoveEmptyMessages(*formedResponse->Response.mutable_data_batch());
- } else {
- hasMessages = RemoveEmptyMessages(*formedResponse->Response.mutable_read_response());
+ const ui64 diff = formedResponse->ByteSizeBeforeFiltering;
+ ui64 sizeEstimation = formedResponse->HasMessages ? formedResponse->Response.ByteSize() : 0;
+ if constexpr (!UseMigrationProtocol) {
+ formedResponse->Response.mutable_read_response()->set_bytes_size(sizeEstimation);
}
- if (hasMessages) {
+ if (formedResponse->HasMessages) {
LOG_DEBUG_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX << " response to read " << formedResponse->Guid);
if (!WriteResponse(std::move(formedResponse->Response))) {
@@ -1683,20 +1695,21 @@ void TReadSessionActor<UseMigrationProtocol>::ProcessAnswer(const TActorContext&
RequestedBytes -= formedResponse->RequestedBytes;
ReadsInfly--;
+ if constexpr (!UseMigrationProtocol) {
+ ReadSizeBudget += formedResponse->RequestedBytes;
+ ReadSizeBudget -= sizeEstimation;
+ }
// Bring back available partitions.
// If some partition was removed from partitions container, it is not bad because it will be checked during read processing.
AvailablePartitions.insert(formedResponse->PartitionsBecameAvailable.begin(), formedResponse->PartitionsBecameAvailable.end());
- if (!hasMessages) {
- // process new read
- TClientMessage req;
- if constexpr(UseMigrationProtocol) {
- req.mutable_read();
- } else {
- req.mutable_read_request();
+ if constexpr (UseMigrationProtocol) {
+ if (!formedResponse->HasMessages) {
+ // process new read
+ // Start new reading request with the same guid
+ Reads.emplace_back(new TEvPQProxy::TEvRead(formedResponse->Guid));
}
- Reads.emplace_back(new TEvPQProxy::TEvRead(formedResponse->Guid)); // Start new reading request with the same guid
}
ProcessReads(ctx); // returns false if actor died
@@ -1727,12 +1740,27 @@ ui32 TReadSessionActor<UseMigrationProtocol>::NormalizeMaxReadSize(ui32 sourceVa
template<bool UseMigrationProtocol>
void TReadSessionActor<UseMigrationProtocol>::ProcessReads(const TActorContext& ctx) {
- while (!Reads.empty() && BytesInflight_ + RequestedBytes < MAX_INFLY_BYTES && ReadsInfly < MAX_INFLY_READS) {
+ auto ShouldContinueReads = [this]() {
+ if constexpr (UseMigrationProtocol) {
+ return !Reads.empty() && ReadsInfly < MAX_INFLY_READS;
+ } else {
+ return ReadSizeBudget > 0;
+ }
+ };
+
+ while (ShouldContinueReads() && BytesInflight_ + RequestedBytes < MAX_INFLY_BYTES) {
ui32 count = MaxReadMessagesCount;
ui64 size = MaxReadSize;
ui32 partitionsAsked = 0;
- typename TFormedReadResponse<TServerMessage>::TPtr formedResponse = new TFormedReadResponse<TServerMessage>(Reads.front()->Guid, ctx.Now());
+ TString guid;
+ if constexpr (UseMigrationProtocol) {
+ guid = Reads.front()->Guid;
+ } else {
+ guid = CreateGuidAsString();
+ }
+ typename TFormedReadResponse<TServerMessage>::TPtr formedResponse =
+ new TFormedReadResponse<TServerMessage>(guid, ctx.Now());
while (!AvailablePartitions.empty()) {
auto part = *AvailablePartitions.begin();
AvailablePartitions.erase(AvailablePartitions.begin());
@@ -1746,7 +1774,10 @@ void TReadSessionActor<UseMigrationProtocol>::ProcessReads(const TActorContext&
const ui32 ccount = Min<ui32>(part.MsgLag * LAG_GROW_MULTIPLIER, count);
count -= ccount;
- const ui64 csize = (ui64)Min<double>(part.SizeLag * LAG_GROW_MULTIPLIER, size);
+ ui64 csize = (ui64)Min<double>(part.SizeLag * LAG_GROW_MULTIPLIER, size);
+ if constexpr (!UseMigrationProtocol) {
+ csize = Min<i64>(csize, ReadSizeBudget);
+ }
size -= csize;
Y_VERIFY(csize < Max<i32>());
@@ -1765,9 +1796,9 @@ void TReadSessionActor<UseMigrationProtocol>::ProcessReads(const TActorContext&
auto lags_it = MaxLagByTopic.find(it->second.Topic->GetInternalName());
Y_VERIFY(lags_it != MaxLagByTopic.end());
- ui32 maxLag = Max(MaxTimeLagMs, lags_it->second);
+ ui32 maxLag = lags_it->second;
- TAutoPtr<TEvPQProxy::TEvRead> read = new TEvPQProxy::TEvRead(Reads.front()->Guid, ccount, csize, maxLag, readTimestampMs);
+ TAutoPtr<TEvPQProxy::TEvRead> read = new TEvPQProxy::TEvRead(guid, ccount, csize, maxLag, readTimestampMs);
LOG_DEBUG_S(ctx, NKikimrServices::PQ_READ_PROXY, PQ_LOG_PREFIX
<< " performing read request with guid " << read->Guid
@@ -1786,14 +1817,22 @@ void TReadSessionActor<UseMigrationProtocol>::ProcessReads(const TActorContext&
RequestedBytes += csize;
formedResponse->RequestedBytes += csize;
+ ReadSizeBudget -= csize;
ctx.Send(it->second.Actor, read.Release());
const auto insertResult = PartitionToReadResponse.insert(std::make_pair(it->second.Actor, formedResponse));
Y_VERIFY(insertResult.second);
+ // TODO (ildar-khisam@): Gather data from all partitions;
+ // For now send messages only from single partition
+ if constexpr (!UseMigrationProtocol) {
+ break;
+ }
+
if (count == 0 || size == 0)
break;
}
+
if (partitionsAsked == 0)
break;
ReadsTotal.Inc();
@@ -1807,7 +1846,9 @@ void TReadSessionActor<UseMigrationProtocol>::ProcessReads(const TActorContext&
if (BytesInflight) {
(*BytesInflight) += diff;
}
- Reads.pop_front();
+ if constexpr (UseMigrationProtocol) {
+ Reads.pop_front();
+ }
}
}
@@ -1839,8 +1880,43 @@ void TReadSessionActor<UseMigrationProtocol>::HandlePoison(TEvPQProxy::TEvDieCom
template<bool UseMigrationProtocol>
-void TReadSessionActor<UseMigrationProtocol>::HandleWakeup(const TActorContext& ctx) {
- ctx.Schedule(CHECK_ACL_DELAY, new TEvents::TEvWakeup());
+void TReadSessionActor<UseMigrationProtocol>::Handle(TEvents::TEvWakeup::TPtr& ev, const TActorContext& ctx) {
+ const auto tag = static_cast<EWakeupTag>(ev->Get()->Tag);
+ OnWakeup(tag);
+
+ switch (tag) {
+ case EWakeupTag::RlInit:
+ return InitSession(ctx);
+
+ case EWakeupTag::RecheckAcl:
+ return RecheckACL(ctx);
+
+ case EWakeupTag::RlAllowed:
+ ProcessAnswer(ctx, PendingQuota);
+ if (!WaitingQuota.empty()) {
+ PendingQuota = WaitingQuota.front();
+ WaitingQuota.pop_front();
+ } else {
+ PendingQuota = nullptr;
+ }
+ if (PendingQuota) {
+ Y_VERIFY(MaybeRequestQuota(PendingQuota->RequiredQuota, EWakeupTag::RlAllowed, ctx));
+ }
+ break;
+
+ case EWakeupTag::RlNoResource:
+ if (PendingQuota) {
+ Y_VERIFY(MaybeRequestQuota(PendingQuota->RequiredQuota, EWakeupTag::RlAllowed, ctx));
+ } else {
+ return CloseSession("Throughput limit exceeded", PersQueue::ErrorCode::OVERLOAD, ctx);
+ }
+ break;
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TReadSessionActor<UseMigrationProtocol>::RecheckACL(const TActorContext& ctx) {
+ ctx.Schedule(CHECK_ACL_DELAY, new TEvents::TEvWakeup(EWakeupTag::RecheckAcl));
if (Token && !AuthInitActor && (ForceACLCheck || (ctx.Now() - LastACLCheckTimestamp > TDuration::Seconds(AppData(ctx)->PQConfig.GetACLRetryTimeoutSec()) && RequestNotChecked))) {
ForceACLCheck = false;
RequestNotChecked = false;
diff --git a/ydb/services/persqueue_v1/actors/schema_actors.cpp b/ydb/services/persqueue_v1/actors/schema_actors.cpp
index 94955b96c7..fe23b799d0 100644
--- a/ydb/services/persqueue_v1/actors/schema_actors.cpp
+++ b/ydb/services/persqueue_v1/actors/schema_actors.cpp
@@ -69,12 +69,13 @@ void TPQDescribeTopicActor::HandleCacheNavigateResponse(TEvTxProxySchemeCache::T
Ydb::PersQueue::V1::DescribeTopicResult result;
- auto settings = result.mutable_settings();
Ydb::Scheme::Entry *selfEntry = result.mutable_self();
- const auto& selfInfo = response.Self->Info;
- selfEntry->set_name(path + "/" + selfInfo.GetName());
- selfEntry->set_type(static_cast<Ydb::Scheme::Entry::Type>(selfInfo.GetPathType()));
- ConvertDirectoryEntry(selfInfo, selfEntry, true);
+ ConvertDirectoryEntry(response.Self->Info, selfEntry, true);
+ if (const auto& name = GetCdcStreamName()) {
+ selfEntry->set_name(*name);
+ }
+
+ auto settings = result.mutable_settings();
if (response.PQGroupInfo) {
const auto &pqDescr = response.PQGroupInfo->Description;
settings->set_partitions_count(pqDescr.GetTotalGroupCount());
@@ -114,7 +115,7 @@ void TPQDescribeTopicActor::HandleCacheNavigateResponse(TEvTxProxySchemeCache::T
settings->set_message_group_seqno_retention_period_ms(partConfig.GetSourceIdLifetimeSeconds() * 1000);
settings->set_max_partition_message_groups_seqno_stored(partConfig.GetSourceIdMaxCounts());
- if (local) {
+ if (local || AppData(ctx)->PQConfig.GetTopicsAreFirstClassCitizen()) {
settings->set_max_partition_write_speed(partConfig.GetWriteSpeedInBytesPerSecond());
settings->set_max_partition_write_burst(partConfig.GetBurstSize());
}
@@ -237,14 +238,13 @@ void TAddReadRuleActor::ModifyPersqueueConfig(
}
auto serviceTypes = GetSupportedClientServiceTypes(ctx);
TString error = AddReadRuleToConfig(pqConfig, rule, serviceTypes, ctx);
- bool hasDuplicates = false;
- if (error.Empty()) {
- hasDuplicates = CheckReadRulesConfig(*pqConfig, serviceTypes, error, ctx);
- }
-
- if (!error.Empty()) {
- return ReplyWithError(hasDuplicates ? Ydb::StatusIds::ALREADY_EXISTS : Ydb::StatusIds::BAD_REQUEST,
- hasDuplicates ? Ydb::PersQueue::ErrorCode::OK : Ydb::PersQueue::ErrorCode::BAD_REQUEST, error, ctx);
+ auto status = error.empty() ? CheckConfig(*pqConfig, serviceTypes, error, ctx, Ydb::StatusIds::ALREADY_EXISTS)
+ : Ydb::StatusIds::BAD_REQUEST;
+ if (status != Ydb::StatusIds::SUCCESS) {
+ return ReplyWithError(status,
+ status == Ydb::StatusIds::ALREADY_EXISTS ? Ydb::PersQueue::ErrorCode::OK
+ : Ydb::PersQueue::ErrorCode::BAD_REQUEST,
+ error, ctx);
}
}
@@ -365,8 +365,10 @@ void TCreateTopicActor::FillProposeRequest(TEvTxUserProxy::TEvProposeTransaction
{
TString error;
+
auto status = FillProposeRequestImpl(name, *GetProtoRequest(), modifyScheme, ctx, error,
workingDir, proposal.Record.GetDatabaseName(), LocalCluster);
+
if (!error.empty()) {
Request_->RaiseIssue(FillIssue(error, Ydb::PersQueue::ErrorCode::BAD_REQUEST));
return ReplyWithResult(status, ctx);
@@ -426,7 +428,8 @@ void TAlterTopicActor::ModifyPersqueueConfig(
Y_UNUSED(selfInfo);
TString error;
Y_UNUSED(selfInfo);
- auto status = FillProposeRequestImpl(*GetProtoRequest(), groupConfig, ctx, error);
+
+ auto status = FillProposeRequestImpl(*GetProtoRequest(), groupConfig, ctx, error, GetCdcStreamName().Defined());
if (!error.empty()) {
Request_->RaiseIssue(FillIssue(error, Ydb::PersQueue::ErrorCode::BAD_REQUEST));
return ReplyWithResult(status, ctx);
@@ -459,10 +462,11 @@ void TDescribeTopicActor::HandleCacheNavigateResponse(TEvTxProxySchemeCache::TEv
Ydb::Topic::DescribeTopicResult result;
Ydb::Scheme::Entry *selfEntry = result.mutable_self();
- const auto& selfInfo = response.Self->Info;
- selfEntry->set_name(path + "/" + selfInfo.GetName());
- selfEntry->set_type(Ydb::Scheme::Entry::TOPIC);
- ConvertDirectoryEntry(selfInfo, selfEntry, true);
+ ConvertDirectoryEntry(response.Self->Info, selfEntry, true);
+ if (const auto& name = GetCdcStreamName()) {
+ selfEntry->set_name(*name);
+ }
+
if (response.PQGroupInfo) {
const auto &pqDescr = response.PQGroupInfo->Description;
result.mutable_partitioning_settings()->set_min_active_partitions(pqDescr.GetTotalGroupCount());
@@ -504,7 +508,9 @@ void TDescribeTopicActor::HandleCacheNavigateResponse(TEvTxProxySchemeCache::TEv
(*result.mutable_attributes())["_message_group_seqno_retention_period_ms"] = TStringBuilder() << (partConfig.GetSourceIdLifetimeSeconds() * 1000);
(*result.mutable_attributes())["__max_partition_message_groups_seqno_stored"] = TStringBuilder() << partConfig.GetSourceIdMaxCounts();
- if (local) {
+ const auto& pqConfig = AppData(ctx)->PQConfig;
+
+ if (local || pqConfig.GetTopicsAreFirstClassCitizen()) {
result.set_partition_write_speed_bytes_per_second(partConfig.GetWriteSpeedInBytesPerSecond());
result.set_partition_write_burst_bytes(partConfig.GetBurstSize());
}
@@ -513,7 +519,19 @@ void TDescribeTopicActor::HandleCacheNavigateResponse(TEvTxProxySchemeCache::TEv
result.mutable_supported_codecs()->add_codecs((Ydb::Topic::Codec)(codec + 1));
}
- const auto& pqConfig = AppData(ctx)->PQConfig;
+ if (pqConfig.GetBillingMeteringConfig().GetEnabled()) {
+ switch (config.GetMeteringMode()) {
+ case NKikimrPQ::TPQTabletConfig::METERING_MODE_RESERVED_CAPACITY:
+ result.set_metering_mode(Ydb::Topic::METERING_MODE_RESERVED_CAPACITY);
+ break;
+ case NKikimrPQ::TPQTabletConfig::METERING_MODE_REQUEST_UNITS:
+ result.set_metering_mode(Ydb::Topic::METERING_MODE_REQUEST_UNITS);
+ break;
+ default:
+ break;
+ }
+ }
+
for (ui32 i = 0; i < config.ReadRulesSize(); ++i) {
auto rr = result.add_consumers();
auto consumerName = NPersQueue::ConvertOldConsumerName(config.GetReadRules(i), ctx);
diff --git a/ydb/services/persqueue_v1/actors/schema_actors.h b/ydb/services/persqueue_v1/actors/schema_actors.h
index 4a4a12b3e7..40dbe350a0 100644
--- a/ydb/services/persqueue_v1/actors/schema_actors.h
+++ b/ydb/services/persqueue_v1/actors/schema_actors.h
@@ -42,7 +42,7 @@ public:
class TPQDescribeTopicActor : public TPQGrpcSchemaBase<TPQDescribeTopicActor, NKikimr::NGRpcService::TEvPQDescribeTopicRequest>
- , public TCdcStreamCompatible
+ , public TCdcStreamCompatible
{
using TBase = TPQGrpcSchemaBase<TPQDescribeTopicActor, TEvPQDescribeTopicRequest>;
@@ -164,7 +164,7 @@ private:
class TAlterTopicActor : public TUpdateSchemeActor<TAlterTopicActor, TEvAlterTopicRequest>
- , public TCdcStreamCompatible
+ , public TCdcStreamCompatible
{
using TBase = TUpdateSchemeActor<TAlterTopicActor, TEvAlterTopicRequest>;
diff --git a/ydb/services/persqueue_v1/actors/write_session_actor.h b/ydb/services/persqueue_v1/actors/write_session_actor.h
index a7bae1f74e..99b026acee 100644
--- a/ydb/services/persqueue_v1/actors/write_session_actor.h
+++ b/ydb/services/persqueue_v1/actors/write_session_actor.h
@@ -9,12 +9,11 @@
#include <ydb/core/client/server/msgbus_server_pq_metacache.h>
#include <ydb/core/grpc_services/grpc_request_proxy.h>
#include <ydb/core/kqp/kqp.h>
-
#include <ydb/core/persqueue/events/global.h>
#include <ydb/core/persqueue/writer/source_id_encoding.h>
#include <ydb/core/persqueue/writer/writer.h>
-
#include <ydb/core/protos/grpc_pq_old.pb.h>
+#include <ydb/services/lib/actors/pq_rl_helpers.h>
namespace NKikimr::NGRpcProxy::V1 {
@@ -23,20 +22,71 @@ inline TActorId GetPQWriteServiceActorID() {
return TActorId(0, "PQWriteSvc");
}
-class TWriteSessionActor : public NActors::TActorBootstrapped<TWriteSessionActor> {
- using IContext = NGRpcServer::IGRpcStreamingContext<PersQueue::V1::StreamingWriteClientMessage, PersQueue::V1::StreamingWriteServerMessage>;
+template<bool UseMigrationProtocol>
+class TWriteSessionActor
+ : public NActors::TActorBootstrapped<TWriteSessionActor<UseMigrationProtocol>>
+ , private TRlHelpers
+{
+ using TSelf = TWriteSessionActor<UseMigrationProtocol>;
+ using TClientMessage = std::conditional_t<UseMigrationProtocol, PersQueue::V1::StreamingWriteClientMessage,
+ Topic::StreamWriteMessage::FromClient>;
+ using TServerMessage = std::conditional_t<UseMigrationProtocol, PersQueue::V1::StreamingWriteServerMessage,
+ Topic::StreamWriteMessage::FromServer>;
+
+ using TInitRequest =
+ std::conditional_t<UseMigrationProtocol, PersQueue::V1::StreamingWriteClientMessage::InitRequest,
+ Topic::StreamWriteMessage::InitRequest>;
+
+ using TEvWriteInit =
+ std::conditional_t<UseMigrationProtocol, TEvPQProxy::TEvWriteInit, TEvPQProxy::TEvTopicWriteInit>;
+ using TEvWrite = std::conditional_t<UseMigrationProtocol, TEvPQProxy::TEvWrite, TEvPQProxy::TEvTopicWrite>;
+ using TEvUpdateToken =
+ std::conditional_t<UseMigrationProtocol, TEvPQProxy::TEvUpdateToken, TEvPQProxy::TEvTopicUpdateToken>;
+ using TEvStreamWriteRequest =
+ std::conditional_t<UseMigrationProtocol, NKikimr::NGRpcService::TEvStreamPQWriteRequest,
+ NKikimr::NGRpcService::TEvStreamTopicWriteRequest>;
+
+ using IContext = NGRpcServer::IGRpcStreamingContext<TClientMessage, TServerMessage>;
+
using TEvDescribeTopicsResponse = NMsgBusProxy::NPqMetaCacheV2::TEvPqNewMetaCache::TEvDescribeTopicsResponse;
using TEvDescribeTopicsRequest = NMsgBusProxy::NPqMetaCacheV2::TEvPqNewMetaCache::TEvDescribeTopicsRequest;
+ struct TWriteRequestInfo: public TSimpleRefCount<TWriteRequestInfo> {
+ using TPtr = TIntrusivePtr<TWriteRequestInfo>;
+
+ explicit TWriteRequestInfo(ui64 cookie)
+ : PartitionWriteRequest(new NPQ::TEvPartitionWriter::TEvWriteRequest(cookie))
+ , Cookie(cookie)
+ , ByteSize(0)
+ , RequiredQuota(0)
+ {
+ }
+
+ // Source requests from user (grpc session object)
+ std::deque<THolder<TEvWrite>> UserWriteRequests;
+
+ // Partition write request
+ THolder<NPQ::TEvPartitionWriter::TEvWriteRequest> PartitionWriteRequest;
+
+ // Formed write request's cookie
+ ui64 Cookie;
+
+ // Formed write request's size
+ ui64 ByteSize;
+
+ // Quota in term of RUs
+ ui64 RequiredQuota;
+ };
+
// Codec ID size in bytes
static constexpr ui32 CODEC_ID_SIZE = 1;
public:
- TWriteSessionActor(NKikimr::NGRpcService::TEvStreamPQWriteRequest* request, const ui64 cookie,
+ TWriteSessionActor(TEvStreamWriteRequest* request, const ui64 cookie,
const NActors::TActorId& schemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const TMaybe<TString> clientDC,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const TMaybe<TString> clientDC,
const NPersQueue::TTopicsListController& topicsController);
- ~TWriteSessionActor();
+ ~TWriteSessionActor() = default;
void Bootstrap(const NActors::TActorContext& ctx);
@@ -46,7 +96,7 @@ public:
private:
STFUNC(StateFunc) {
switch (ev->GetTypeRewrite()) {
- CFunc(NActors::TEvents::TSystem::Wakeup, HandleWakeup);
+ HFunc(TEvents::TEvWakeup, Handle);
HFunc(IContext::TEvReadFinished, Handle);
HFunc(IContext::TEvWriteFinished, Handle);
@@ -54,9 +104,9 @@ private:
HFunc(NGRpcService::TGRpcRequestProxy::TEvRefreshTokenResponse, Handle);
HFunc(TEvPQProxy::TEvDieCommand, HandlePoison)
- HFunc(TEvPQProxy::TEvWriteInit, Handle)
- HFunc(TEvPQProxy::TEvWrite, Handle)
- HFunc(TEvPQProxy::TEvUpdateToken, Handle)
+ HFunc(TEvWriteInit, Handle)
+ HFunc(TEvWrite, Handle)
+ HFunc(TEvUpdateToken, Handle)
HFunc(TEvPQProxy::TEvDone, Handle)
HFunc(TEvPersQueue::TEvGetPartitionIdForWriteResponse, Handle)
@@ -71,6 +121,7 @@ private:
HFunc(NKqp::TEvKqp::TEvQueryResponse, Handle);
HFunc(NKqp::TEvKqp::TEvProcessResponse, Handle);
+ HFunc(NKqp::TEvKqp::TEvCreateSessionResponse, Handle);
default:
break;
@@ -78,8 +129,8 @@ private:
}
- void Handle(IContext::TEvReadFinished::TPtr& ev, const TActorContext &ctx);
- void Handle(IContext::TEvWriteFinished::TPtr& ev, const TActorContext &ctx);
+ void Handle(typename IContext::TEvReadFinished::TPtr& ev, const TActorContext &ctx);
+ void Handle(typename IContext::TEvWriteFinished::TPtr& ev, const TActorContext &ctx);
void HandleDone(const TActorContext &ctx);
void Handle(NGRpcService::TGRpcRequestProxy::TEvRefreshTokenResponse::TPtr& ev, const TActorContext &ctx);
@@ -87,13 +138,16 @@ private:
void Handle(NKqp::TEvKqp::TEvQueryResponse::TPtr &ev, const TActorContext &ctx);
void Handle(NKqp::TEvKqp::TEvProcessResponse::TPtr &ev, const TActorContext &ctx);
+ void Handle(NKqp::TEvKqp::TEvCreateSessionResponse::TPtr &ev, const NActors::TActorContext& ctx);
+ void TryCloseSession(const TActorContext& ctx);
void CheckACL(const TActorContext& ctx);
+ void RecheckACL(const TActorContext& ctx);
// Requests fresh ACL from 'SchemeCache'
void InitCheckSchema(const TActorContext& ctx, bool needWaitSchema = false);
- void Handle(TEvPQProxy::TEvWriteInit::TPtr& ev, const NActors::TActorContext& ctx);
- void Handle(TEvPQProxy::TEvWrite::TPtr& ev, const NActors::TActorContext& ctx);
- void Handle(TEvPQProxy::TEvUpdateToken::TPtr& ev, const NActors::TActorContext& ctx);
+ void Handle(typename TEvWriteInit::TPtr& ev, const NActors::TActorContext& ctx);
+ void Handle(typename TEvWrite::TPtr& ev, const NActors::TActorContext& ctx);
+ void Handle(typename TEvUpdateToken::TPtr& ev, const NActors::TActorContext& ctx);
void Handle(TEvPQProxy::TEvDone::TPtr& ev, const NActors::TActorContext& ctx);
void Handle(TEvTxProxySchemeCache::TEvNavigateKeySetResult::TPtr& ev, const TActorContext& ctx);
void Handle(TEvDescribeTopicsResponse::TPtr& ev, const TActorContext& ctx);
@@ -120,31 +174,31 @@ private:
void Handle(TEvPersQueue::TEvGetPartitionIdForWriteResponse::TPtr& ev, const NActors::TActorContext& ctx);
void HandlePoison(TEvPQProxy::TEvDieCommand::TPtr& ev, const NActors::TActorContext& ctx);
- void HandleWakeup(const NActors::TActorContext& ctx);
+ void Handle(TEvents::TEvWakeup::TPtr& ev, const TActorContext& ctx);
void CloseSession(const TString& errorReason, const PersQueue::ErrorCode::ErrorCode errorCode, const NActors::TActorContext& ctx);
void CheckFinish(const NActors::TActorContext& ctx);
- void GenerateNextWriteRequest(const NActors::TActorContext& ctx);
+ void PrepareRequest(THolder<TEvWrite>&& ev, const TActorContext& ctx);
+ void SendRequest(typename TWriteRequestInfo::TPtr&& request, const TActorContext& ctx);
void SetupCounters();
void SetupCounters(const TString& cloudId, const TString& dbId, const TString& folderId);
private:
- std::unique_ptr<NKikimr::NGRpcService::TEvStreamPQWriteRequest> Request;
+ std::unique_ptr<TEvStreamWriteRequest> Request;
enum EState {
ES_CREATED = 1,
- ES_WAIT_SCHEME_1 = 2,
- ES_WAIT_SCHEME_2 = 3,
+ ES_WAIT_SCHEME = 2,
+ ES_WAIT_SESSION = 3,
ES_WAIT_TABLE_REQUEST_1 = 4,
ES_WAIT_NEXT_PARTITION = 5,
ES_WAIT_TABLE_REQUEST_2 = 6,
- ES_WAIT_TABLE_REQUEST_3 = 7,
- ES_WAIT_WRITER_INIT = 8,
- ES_INITED = 9
- //TODO: filter
+ ES_WAIT_WRITER_INIT = 7,
+ ES_INITED = 8,
+ ES_DYING = 9
};
EState State;
@@ -163,43 +217,29 @@ private:
// 'SourceId' is called 'MessageGroupId' since gRPC data plane API v1
TString SourceId; // TODO: Replace with 'MessageGroupId' everywhere
NPQ::NSourceIdEncoding::TEncodedSourceId EncodedSourceId;
- ui32 CompatibleHash;
TString OwnerCookie;
TString UserAgent;
- ui32 NumReserveBytesRequests;
-
THolder<TAclWrapper> ACL;
- struct TWriteRequestBatchInfo: public TSimpleRefCount<TWriteRequestBatchInfo> {
- using TPtr = TIntrusivePtr<TWriteRequestBatchInfo>;
-
- // Source requests from user (grpc session object)
- std::deque<THolder<TEvPQProxy::TEvWrite>> UserWriteRequests;
-
- // Formed write request's size
- ui64 ByteSize = 0;
-
- // Formed write request's cookie
- ui64 Cookie = 0;
- };
-
- // Nonprocessed source client requests
- std::deque<THolder<TEvPQProxy::TEvWrite>> Writes;
-
- // Formed, but not sent, batch requests to partition actor
- std::deque<TWriteRequestBatchInfo::TPtr> FormedWrites;
-
- // Requests that is already sent to partition actor
- std::deque<TWriteRequestBatchInfo::TPtr> SentMessages;
+ // Future batch request to partition actor
+ typename TWriteRequestInfo::TPtr PendingRequest;
+ // Request that is waiting for quota
+ typename TWriteRequestInfo::TPtr PendingQuotaRequest;
+ // Quoted, but not sent requests
+ std::deque<typename TWriteRequestInfo::TPtr> QuotedRequests;
+ // Requests that is sent to partition actor, but not accepted
+ std::deque<typename TWriteRequestInfo::TPtr> SentRequests;
+ // Accepted requests
+ std::deque<typename TWriteRequestInfo::TPtr> AcceptedRequests;
bool WritesDone;
THashMap<ui32, ui64> PartitionToTablet;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
NKikimr::NPQ::TMultiCounter BytesInflight;
NKikimr::NPQ::TMultiCounter BytesInflightTotal;
@@ -208,17 +248,20 @@ private:
ui64 BytesInflightTotal_;
bool NextRequestInited;
+ ui64 NextRequestCookie;
+
+ ui64 PayloadBytes;
NKikimr::NPQ::TMultiCounter SessionsCreated;
NKikimr::NPQ::TMultiCounter SessionsActive;
NKikimr::NPQ::TMultiCounter Errors;
- ui64 NextRequestCookie;
-
TIntrusivePtr<NACLib::TUserToken> Token;
TString Auth;
- // Got 'update_token_request', authentication or authorization in progress or 'update_token_response' is not sent yet. Only single 'update_token_request' is allowed inflight
+ // Got 'update_token_request', authentication or authorization in progress,
+ // or 'update_token_response' is not sent yet.
+ // Only single 'update_token_request' is allowed inflight.
bool UpdateTokenInProgress;
bool UpdateTokenAuthenticated;
bool ACLCheckInProgress;
@@ -238,6 +281,8 @@ private:
TString ClientDC;
TString SelectSourceIdQuery;
TString UpdateSourceIdQuery;
+ TString TxId;
+ TString KqpSessionId;
ui32 SelectSrcIdsInflight = 0;
ui64 MaxSrcIdAccessTime = 0;
@@ -252,7 +297,13 @@ private:
NKikimr::NPQ::TPercentileCounter InitLatency;
NKikimr::NPQ::TMultiCounter SLIBigLatency;
- PersQueue::V1::StreamingWriteClientMessage::InitRequest InitRequest;
+ TInitRequest InitRequest;
};
}
+
+/////////////////////////////////////////
+// Implementation
+#define WRITE_SESSION_ACTOR_IMPL
+#include "write_session_actor.ipp"
+#undef WRITE_SESSION_ACTOR_IMPL
diff --git a/ydb/services/persqueue_v1/actors/write_session_actor.cpp b/ydb/services/persqueue_v1/actors/write_session_actor.ipp
index badfbdcd3e..771a94cf4f 100644
--- a/ydb/services/persqueue_v1/actors/write_session_actor.cpp
+++ b/ydb/services/persqueue_v1/actors/write_session_actor.ipp
@@ -1,17 +1,20 @@
-#include "write_session_actor.h"
+#ifndef WRITE_SESSION_ACTOR_IMPL
+#error "Do not include this file directly"
+#endif
+
#include <ydb/library/persqueue/topic_parser/counters.h>
#include "codecs.h"
#include <ydb/core/persqueue/pq_database.h>
#include <ydb/core/persqueue/write_meta.h>
-#include <ydb/core/persqueue/writer/source_id_encoding.h>
#include <ydb/core/protos/services.pb.h>
#include <ydb/public/lib/deprecated/kicli/kicli.h>
#include <ydb/library/persqueue/topic_parser/topic_parser.h>
#include <ydb/services/lib/sharding/sharding.h>
#include <library/cpp/actors/core/log.h>
#include <library/cpp/digest/md5/md5.h>
+#include <google/protobuf/util/time_util.h>
#include <util/string/hex.h>
#include <util/string/vector.h>
#include <util/string/escape.h>
@@ -26,19 +29,44 @@ namespace NKikimr {
using namespace NSchemeCache;
using namespace NPQ;
-Ydb::PersQueue::V1::Codec CodecByName(const TString& codec) {
- static const THashMap<TString, Ydb::PersQueue::V1::Codec> codecsByName = {
- { "raw", Ydb::PersQueue::V1::CODEC_RAW },
- { "gzip", Ydb::PersQueue::V1::CODEC_GZIP },
- { "lzop", Ydb::PersQueue::V1::CODEC_LZOP },
- { "zstd", Ydb::PersQueue::V1::CODEC_ZSTD },
- };
+template <bool UseMigrationProtocol>
+using ECodec = std::conditional_t<UseMigrationProtocol, Ydb::PersQueue::V1::Codec, i32>;
+
+template <bool UseMigrationProtocol>
+ECodec<UseMigrationProtocol> CodecByName(const TString& codec) {
+ THashMap<TString, ECodec<UseMigrationProtocol>> codecsByName;
+ if constexpr (UseMigrationProtocol) {
+ codecsByName = {
+ { "raw", Ydb::PersQueue::V1::CODEC_RAW },
+ { "gzip", Ydb::PersQueue::V1::CODEC_GZIP },
+ { "lzop", Ydb::PersQueue::V1::CODEC_LZOP },
+ { "zstd", Ydb::PersQueue::V1::CODEC_ZSTD },
+ };
+ }
+ if constexpr (!UseMigrationProtocol) {
+ codecsByName = {
+ { "raw", (i32)Ydb::Topic::CODEC_RAW },
+ { "gzip", (i32)Ydb::Topic::CODEC_GZIP },
+ { "lzop", (i32)Ydb::Topic::CODEC_LZOP },
+ { "zstd", (i32)Ydb::Topic::CODEC_ZSTD },
+ };
+ }
+
auto codecIt = codecsByName.find(codec);
- return codecIt != codecsByName.end() ? codecIt->second : Ydb::PersQueue::V1::CODEC_UNSPECIFIED;
+ if (codecIt == codecsByName.end()) {
+ if constexpr (UseMigrationProtocol) {
+ return Ydb::PersQueue::V1::CODEC_UNSPECIFIED;
+ }
+ if constexpr (!UseMigrationProtocol) {
+ return (i32)Ydb::Topic::CODEC_UNSPECIFIED;
+ }
+ Y_FAIL("Unsupported codec enum");
+ }
+ return codecIt->second;
}
template <>
-void FillExtraFieldsForDataChunk(
+inline void FillExtraFieldsForDataChunk(
const Ydb::PersQueue::V1::StreamingWriteClientMessage::InitRequest& init,
NKikimrPQClient::TDataChunk& data,
TString& server,
@@ -64,7 +92,33 @@ void FillExtraFieldsForDataChunk(
}
template <>
-void FillChunkDataFromReq(
+inline void FillExtraFieldsForDataChunk(
+ const Ydb::Topic::StreamWriteMessage::InitRequest& init,
+ NKikimrPQClient::TDataChunk& data,
+ TString& server,
+ TString& ident,
+ TString& logType,
+ TString& file
+) {
+ for (const auto& item : init.write_session_meta()) {
+ if (item.first == "server") {
+ server = item.second;
+ } else if (item.first == "ident") {
+ ident = item.second;
+ } else if (item.first == "logtype") {
+ logType = item.second;
+ } else if (item.first == "file") {
+ file = item.second;
+ } else {
+ auto res = data.MutableExtraFields()->AddItems();
+ res->SetKey(item.first);
+ res->SetValue(item.second);
+ }
+ }
+}
+
+template <>
+inline void FillChunkDataFromReq(
NKikimrPQClient::TDataChunk& proto,
const Ydb::PersQueue::V1::StreamingWriteClientMessage::WriteRequest& writeRequest,
const i32 messageIndex
@@ -75,6 +129,22 @@ void FillChunkDataFromReq(
proto.SetData(writeRequest.blocks_data(messageIndex));
}
+template <>
+inline void FillChunkDataFromReq(
+ NKikimrPQClient::TDataChunk& proto,
+ const Ydb::Topic::StreamWriteMessage::WriteRequest& writeRequest,
+ const i32 messageIndex
+) {
+ const auto& msg = writeRequest.messages(messageIndex);
+ proto.SetSeqNo(msg.seq_no());
+ proto.SetCreateTime(::google::protobuf::util::TimeUtil::TimestampToMilliseconds(msg.created_at()));
+ // TODO (ildar-khisam@): refactor codec enum convert
+ if (writeRequest.codec() > 0) {
+ proto.SetCodec(writeRequest.codec() - 1);
+ }
+ proto.SetData(msg.data());
+}
+
namespace NGRpcProxy {
namespace V1 {
@@ -85,16 +155,21 @@ static const ui32 MAX_RESERVE_REQUESTS_INFLIGHT = 5;
static const ui32 MAX_BYTES_INFLIGHT = 1_MB;
static const TDuration SOURCEID_UPDATE_PERIOD = TDuration::Hours(1);
+// metering
+static const ui64 WRITE_BLOCK_SIZE = 4_KB;
+
//TODO: add here tracking of bytes in/out
-TWriteSessionActor::TWriteSessionActor(
- NKikimr::NGRpcService::TEvStreamPQWriteRequest* request, const ui64 cookie,
+template<bool UseMigrationProtocol>
+TWriteSessionActor<UseMigrationProtocol>::TWriteSessionActor(
+ TEvStreamWriteRequest* request, const ui64 cookie,
const NActors::TActorId& schemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const TMaybe<TString> clientDC,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const TMaybe<TString> clientDC,
const NPersQueue::TTopicsListController& topicsController
)
- : Request(request)
+ : TRlHelpers(request, WRITE_BLOCK_SIZE, TDuration::Minutes(1))
+ , Request(request)
, State(ES_CREATED)
, SchemeCache(schemeCache)
, PeerName("")
@@ -102,7 +177,6 @@ TWriteSessionActor::TWriteSessionActor(
, TopicsController(topicsController)
, Partition(0)
, PreferedPartition(Max<ui32>())
- , NumReserveBytesRequests(0)
, WritesDone(false)
, Counters(counters)
, BytesInflight_(0)
@@ -126,10 +200,8 @@ TWriteSessionActor::TWriteSessionActor(
Y_ASSERT(Request);
}
-
-TWriteSessionActor::~TWriteSessionActor() = default;
-
-void TWriteSessionActor::Bootstrap(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Bootstrap(const TActorContext& ctx) {
Y_VERIFY(Request);
SelectSourceIdQuery = GetSourceIdSelectQueryFromPath(AppData(ctx)->PQConfig.GetSourceIdTablePath());
@@ -141,33 +213,35 @@ void TWriteSessionActor::Bootstrap(const TActorContext& ctx) {
Die(ctx);
return;
}
- Become(&TThis::StateFunc);
+ TSelf::Become(&TSelf::TThis::StateFunc);
StartTime = ctx.Now();
}
-
-void TWriteSessionActor::HandleDone(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::HandleDone(const TActorContext& ctx) {
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "session v1 cookie: " << Cookie << " sessionId: " << OwnerCookie << " grpc closed");
Die(ctx);
}
-TString WriteRequestToLog(const Ydb::PersQueue::V1::StreamingWriteClientMessage& proto) {
+template<typename TClientMessage>
+TString WriteRequestToLog(const TClientMessage& proto) {
switch (proto.client_message_case()) {
- case StreamingWriteClientMessage::kInitRequest:
+ case TClientMessage::kInitRequest:
return proto.ShortDebugString();
break;
- case StreamingWriteClientMessage::kWriteRequest:
+ case TClientMessage::kWriteRequest:
return " write_request[data omitted]";
break;
- case StreamingWriteClientMessage::kUpdateTokenRequest:
+ case TClientMessage::kUpdateTokenRequest:
return " update_token_request [content omitted]";
default:
return TString();
}
}
-void TWriteSessionActor::Handle(IContext::TEvReadFinished::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(typename IContext::TEvReadFinished::TPtr& ev, const TActorContext& ctx) {
LOG_DEBUG_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "session v1 cookie: " << Cookie << " sessionId: " << OwnerCookie << " grpc read done: success: " << ev->Get()->Success << " data: " << WriteRequestToLog(ev->Get()->Record));
if (!ev->Get()->Success) {
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "session v1 cookie: " << Cookie << " sessionId: " << OwnerCookie << " grpc read failed");
@@ -175,34 +249,38 @@ void TWriteSessionActor::Handle(IContext::TEvReadFinished::TPtr& ev, const TActo
return;
}
- switch(ev->Get()->Record.client_message_case()) {
- case StreamingWriteClientMessage::kInitRequest:
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvWriteInit(std::move(ev->Get()->Record), Request->GetStreamCtx()->GetPeerName()));
+ auto& req = ev->Get()->Record;
+
+ switch(req.client_message_case()) {
+ case TClientMessage::kInitRequest:
+ ctx.Send(ctx.SelfID, new TEvWriteInit(std::move(req), Request->GetStreamCtx()->GetPeerName()));
break;
- case StreamingWriteClientMessage::kWriteRequest:
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvWrite(std::move(ev->Get()->Record)));
+ case TClientMessage::kWriteRequest:
+ ctx.Send(ctx.SelfID, new TEvWrite(std::move(req)));
break;
- case StreamingWriteClientMessage::kUpdateTokenRequest: {
- ctx.Send(ctx.SelfID, new TEvPQProxy::TEvUpdateToken(std::move(ev->Get()->Record)));
+ case TClientMessage::kUpdateTokenRequest: {
+ ctx.Send(ctx.SelfID, new TEvUpdateToken(std::move(req)));
break;
}
- case StreamingWriteClientMessage::CLIENT_MESSAGE_NOT_SET: {
+ case TClientMessage::CLIENT_MESSAGE_NOT_SET: {
CloseSession("'client_message' is not set", PersQueue::ErrorCode::BAD_REQUEST, ctx);
return;
}
}
}
-
-void TWriteSessionActor::Handle(IContext::TEvWriteFinished::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(typename IContext::TEvWriteFinished::TPtr& ev, const TActorContext& ctx) {
if (!ev->Get()->Success) {
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "session v1 cookie: " << Cookie << " sessionId: " << OwnerCookie << " grpc write failed");
Die(ctx);
}
}
-
-void TWriteSessionActor::Die(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Die(const TActorContext& ctx) {
+ if (State == ES_DYING)
+ return;
if (Writer)
ctx.Send(Writer, new TEvents::TEvPoisonPill());
@@ -216,28 +294,49 @@ void TWriteSessionActor::Die(const TActorContext& ctx) {
ctx.Send(GetPQWriteServiceActorID(), new TEvPQProxy::TEvSessionDead(Cookie));
+ if (State == ES_WAIT_SESSION) { // final die will be done later, on session discover
+ State = ES_DYING;
+ return;
+ }
+
+ State = ES_DYING;
+
+ TryCloseSession(ctx);
TActorBootstrapped<TWriteSessionActor>::Die(ctx);
}
-void TWriteSessionActor::CheckFinish(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::TryCloseSession(const TActorContext& ctx) {
+ if (KqpSessionId) {
+ auto ev = MakeHolder<NKqp::TEvKqp::TEvCloseSessionRequest>();
+ ev->Record.MutableRequest()->SetSessionId(KqpSessionId);
+ ctx.Send(NKqp::MakeKqpProxyID(ctx.SelfID.NodeId()), ev.Release());
+ KqpSessionId = "";
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::CheckFinish(const TActorContext& ctx) {
if (!WritesDone)
return;
if (State != ES_INITED) {
CloseSession("out of order Writes done before initialization", PersQueue::ErrorCode::BAD_REQUEST, ctx);
return;
}
- if (Writes.empty() && FormedWrites.empty() && SentMessages.empty()) {
+ if (!PendingRequest && !PendingQuotaRequest && QuotedRequests.empty() && SentRequests.empty() & AcceptedRequests.empty()) {
CloseSession("", PersQueue::ErrorCode::OK, ctx);
return;
}
}
-void TWriteSessionActor::Handle(TEvPQProxy::TEvDone::TPtr&, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(TEvPQProxy::TEvDone::TPtr&, const TActorContext& ctx) {
WritesDone = true;
CheckFinish(ctx);
}
-void TWriteSessionActor::CheckACL(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::CheckACL(const TActorContext& ctx) {
//Y_VERIFY(ACLCheckInProgress);
NACLib::EAccessRights rights = NACLib::EAccessRights::UpdateRow;
@@ -251,7 +350,7 @@ void TWriteSessionActor::CheckACL(const TActorContext& ctx) {
}
if (UpdateTokenInProgress && UpdateTokenAuthenticated) {
UpdateTokenInProgress = false;
- StreamingWriteServerMessage serverMessage;
+ TServerMessage serverMessage;
serverMessage.set_status(Ydb::StatusIds::SUCCESS);
serverMessage.mutable_update_token_response();
if (!Request->GetStreamCtx()->Write(std::move(serverMessage))) {
@@ -267,8 +366,9 @@ void TWriteSessionActor::CheckACL(const TActorContext& ctx) {
}
}
-void TWriteSessionActor::Handle(TEvPQProxy::TEvWriteInit::TPtr& ev, const TActorContext& ctx) {
- THolder<TEvPQProxy::TEvWriteInit> event(ev->Release());
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(typename TEvWriteInit::TPtr& ev, const TActorContext& ctx) {
+ THolder<TEvWriteInit> event(ev->Release());
if (State != ES_CREATED) {
//answer error
@@ -277,15 +377,35 @@ void TWriteSessionActor::Handle(TEvPQProxy::TEvWriteInit::TPtr& ev, const TActor
}
InitRequest = event->Request.init_request();
- if (InitRequest.topic().empty() || InitRequest.message_group_id().empty()) {
- CloseSession("no topic or message_group_id in init request", PersQueue::ErrorCode::BAD_REQUEST, ctx);
+ TString topic_path = [this]() {
+ if constexpr (UseMigrationProtocol) {
+ return InitRequest.topic();
+ } else {
+ return InitRequest.path();
+ }
+ }();
+ if (topic_path.empty()) {
+ CloseSession("no topic in init request", PersQueue::ErrorCode::BAD_REQUEST, ctx);
return;
}
- DiscoveryConverter = TopicsController.GetWriteTopicConverter(InitRequest.topic(), Request->GetDatabaseName().GetOrElse("/Root"));
+ if constexpr (UseMigrationProtocol) {
+ if (InitRequest.message_group_id().empty()) {
+ CloseSession("no message_group_id in init request", PersQueue::ErrorCode::BAD_REQUEST, ctx);
+ return;
+ }
+ } else {
+ // TODO (ildar-khisam@): support other cases of producer_id / message_group_id / partition_id settings
+ if (InitRequest.message_group_id() != InitRequest.producer_id() || InitRequest.producer_id().empty()) {
+ CloseSession("only (producer_id == message_group_id) case is supported for now", PersQueue::ErrorCode::BAD_REQUEST, ctx);
+ return;
+ }
+ }
+
+ DiscoveryConverter = TopicsController.GetWriteTopicConverter(topic_path, Request->GetDatabaseName().GetOrElse("/Root"));
if (!DiscoveryConverter->IsValid()) {
CloseSession(
- TStringBuilder() << "topic " << InitRequest.topic() << " could not be recognized: " << DiscoveryConverter->GetReason(),
+ TStringBuilder() << "topic " << topic_path << " could not be recognized: " << DiscoveryConverter->GetReason(),
PersQueue::ErrorCode::BAD_REQUEST, ctx
);
return;
@@ -294,6 +414,13 @@ void TWriteSessionActor::Handle(TEvPQProxy::TEvWriteInit::TPtr& ev, const TActor
PeerName = event->PeerName;
SourceId = InitRequest.message_group_id();
+ // SourceId = [this]() {
+ // if constexpr (UseMigrationProtocol) {
+ // return InitRequest.message_group_id();
+ // } else {
+ // return InitRequest.message_group_id().empty() ? InitRequest.producer_id() : InitRequest.message_group_id();
+ // }
+ // }();
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "session request cookie: " << Cookie << " " << InitRequest << " from " << PeerName);
//TODO: get user agent from headers
@@ -310,23 +437,26 @@ void TWriteSessionActor::Handle(TEvPQProxy::TEvWriteInit::TPtr& ev, const TActor
InitCheckSchema(ctx, true);
- PreferedPartition = InitRequest.partition_group_id() > 0 ? InitRequest.partition_group_id() - 1 : Max<ui32>();
-
- const auto& preferredCluster = InitRequest.preferred_cluster();
- if (!preferredCluster.empty()) {
- Send(GetPQWriteServiceActorID(), new TEvPQProxy::TEvSessionSetPreferredCluster(Cookie, preferredCluster));
+ PreferedPartition = Max<ui32>();
+ if constexpr (UseMigrationProtocol) {
+ if (InitRequest.partition_group_id() > 0) {
+ PreferedPartition = InitRequest.partition_group_id() - 1;
+ }
+ const auto& preferredCluster = InitRequest.preferred_cluster();
+ if (!preferredCluster.empty()) {
+ this->Send(GetPQWriteServiceActorID(), new TEvPQProxy::TEvSessionSetPreferredCluster(Cookie, preferredCluster));
+ }
+ } else {
+ if (InitRequest.has_partition_id()) {
+ PreferedPartition = InitRequest.partition_id();
+ }
}
}
-void TWriteSessionActor::InitAfterDiscovery(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::InitAfterDiscovery(const TActorContext& ctx) {
try {
- // "Bad" hash - in legacy mode calculated from full name ("rt3...", not short name);
- // Here we had a bug for all the time being and now have to keep compatibility was invalid hashes
- // Generally GetTopicForSrcIdHash for encoding. Do not copy-paste this line;
- EncodedSourceId = NSourceIdEncoding::EncodeSrcId(FullConverter->GetTopicForSrcId(), SourceId);
-
- // Good hash and proper way of calcultion;
- CompatibleHash = NSourceIdEncoding::EncodeSrcId(FullConverter->GetTopicForSrcIdHash(), SourceId).Hash;
+ EncodedSourceId = NSourceIdEncoding::EncodeSrcId(FullConverter->GetTopicForSrcIdHash(), SourceId);
} catch (yexception& e) {
CloseSession(TStringBuilder() << "incorrect sourceId \"" << SourceId << "\": " << e.what(), PersQueue::ErrorCode::BAD_REQUEST, ctx);
return;
@@ -343,7 +473,8 @@ void TWriteSessionActor::InitAfterDiscovery(const TActorContext& ctx) {
}
-void TWriteSessionActor::SetupCounters()
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::SetupCounters()
{
if (SessionsCreated) {
return;
@@ -363,7 +494,8 @@ void TWriteSessionActor::SetupCounters()
SessionsActive.Inc();
}
-void TWriteSessionActor::SetupCounters(const TString& cloudId, const TString& dbId, const TString& folderId)
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::SetupCounters(const TString& cloudId, const TString& dbId, const TString& folderId)
{
if (SessionsCreated) {
return;
@@ -383,7 +515,8 @@ void TWriteSessionActor::SetupCounters(const TString& cloudId, const TString& db
SessionsActive.Inc();
}
-void TWriteSessionActor::InitCheckSchema(const TActorContext& ctx, bool needWaitSchema) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::InitCheckSchema(const TActorContext& ctx, bool needWaitSchema) {
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "init check schema");
if (!needWaitSchema) {
@@ -391,11 +524,12 @@ void TWriteSessionActor::InitCheckSchema(const TActorContext& ctx, bool needWait
}
ctx.Send(SchemeCache, new TEvDescribeTopicsRequest({DiscoveryConverter}));
if (needWaitSchema) {
- State = ES_WAIT_SCHEME_2;
+ State = ES_WAIT_SCHEME;
}
}
-void TWriteSessionActor::Handle(TEvDescribeTopicsResponse::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(TEvDescribeTopicsResponse::TPtr& ev, const TActorContext& ctx) {
auto& res = ev->Get()->Result;
Y_VERIFY(res->ResultSet.size() == 1);
@@ -407,7 +541,7 @@ void TWriteSessionActor::Handle(TEvDescribeTopicsResponse::TPtr& ev, const TActo
return;
}
Y_VERIFY(entry.PQGroupInfo); // checked at ProcessMetaCacheTopicResponse()
- auto& description = entry.PQGroupInfo->Description;
+ const auto& description = entry.PQGroupInfo->Description;
Y_VERIFY(description.PartitionsSize() > 0);
Y_VERIFY(description.HasPQTabletConfig());
InitialPQTabletConfig = description.GetPQTabletConfig();
@@ -439,6 +573,13 @@ void TWriteSessionActor::Handle(TEvDescribeTopicsResponse::TPtr& ev, const TActo
ACL.Reset(new TAclWrapper(entry.SecurityObject));
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "session v1 cookie: " << Cookie << " sessionId: " << OwnerCookie << " describe result for acl check");
+ const auto meteringMode = description.GetPQTabletConfig().GetMeteringMode();
+ if (meteringMode != GetMeteringMode().GetOrElse(meteringMode)) {
+ return CloseSession("Metering mode has been changed", PersQueue::ErrorCode::OVERLOAD, ctx);
+ }
+
+ SetMeteringMode(meteringMode);
+
if (Request->GetInternalToken().empty()) { // session without auth
if (AppData(ctx)->PQConfig.GetRequireCredentialsInNewProtocol()) {
Request->ReplyUnauthenticated("Unauthenticated access is forbidden, please provide credentials");
@@ -451,13 +592,18 @@ void TWriteSessionActor::Handle(TEvDescribeTopicsResponse::TPtr& ev, const TActo
} else {
Y_VERIFY(Request->GetYdbToken());
Auth = *Request->GetYdbToken();
-
Token = new NACLib::TUserToken(Request->GetInternalToken());
- CheckACL(ctx);
+
+ if (FirstACLCheck && IsQuotaRequired()) {
+ Y_VERIFY(MaybeRequestQuota(1, EWakeupTag::RlInit, ctx));
+ } else {
+ CheckACL(ctx);
+ }
}
}
-void TWriteSessionActor::DiscoverPartition(const NActors::TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::DiscoverPartition(const NActors::TActorContext& ctx) {
if (AppData(ctx)->PQConfig.GetTopicsAreFirstClassCitizen()) { // ToDo[migration] - separate flag for having config tables
auto partitionId = PreferedPartition < Max<ui32>() ? PreferedPartition
@@ -465,21 +611,54 @@ void TWriteSessionActor::DiscoverPartition(const NActors::TActorContext& ctx) {
ProceedPartition(partitionId, ctx);
return;
}
- SendSelectPartitionRequest(CompatibleHash, FullConverter->GetClientsideName(), ctx);
- SendSelectPartitionRequest(EncodedSourceId.Hash, FullConverter->GetClientsideName(), ctx);
+
+ auto ev = MakeHolder<NKqp::TEvKqp::TEvCreateSessionRequest>();
+ ev->Record.MutableRequest()->SetDatabase(NKikimr::NPQ::GetDatabaseFromConfig(AppData(ctx)->PQConfig));
+ ctx.Send(NKqp::MakeKqpProxyID(ctx.SelfID.NodeId()), ev.Release());
+
+ State = ES_WAIT_SESSION;
+}
+
+
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(NKqp::TEvKqp::TEvCreateSessionResponse::TPtr &ev, const NActors::TActorContext& ctx)
+{
+ Y_VERIFY(State == ES_WAIT_SESSION || State == ES_DYING);
+ const auto& record = ev->Get()->Record;
+ KqpSessionId = record.GetResponse().GetSessionId();
+
+ if (State == ES_DYING) {
+ TryCloseSession(ctx);
+ TActorBootstrapped<TWriteSessionActor>::Die(ctx);
+ return;
+ }
+
State = ES_WAIT_TABLE_REQUEST_1;
+
+ if (record.GetYdbStatus() != Ydb::StatusIds::SUCCESS) {
+ TStringBuilder errorReason;
+ errorReason << "kqp error Marker# PQ53 : " << record;
+
+ CloseSession(errorReason, PersQueue::ErrorCode::ERROR, ctx);
+ return;
+ }
+
+ Y_VERIFY(!KqpSessionId.empty());
+
+ SendSelectPartitionRequest(EncodedSourceId.Hash, FullConverter->GetClientsideName(), ctx);
}
-void TWriteSessionActor::SendSelectPartitionRequest(ui32 hash, const TString& topic, const NActors::TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::SendSelectPartitionRequest(ui32 hash, const TString& topic, const NActors::TActorContext& ctx) {
//read from DS
auto ev = MakeHolder<NKqp::TEvKqp::TEvQueryRequest>();
ev->Record.MutableRequest()->SetAction(NKikimrKqp::QUERY_ACTION_EXECUTE);
ev->Record.MutableRequest()->SetType(NKikimrKqp::QUERY_TYPE_SQL_DML);
- ev->Record.MutableRequest()->SetKeepSession(false);
ev->Record.MutableRequest()->SetQuery(SelectSourceIdQuery);
ev->Record.MutableRequest()->SetDatabase(NKikimr::NPQ::GetDatabaseFromConfig(AppData(ctx)->PQConfig));
// fill tx settings: set commit tx flag & begin new serializable tx.
- ev->Record.MutableRequest()->MutableTxControl()->set_commit_tx(true);
+ ev->Record.MutableRequest()->SetSessionId(KqpSessionId);
+ ev->Record.MutableRequest()->MutableTxControl()->set_commit_tx(false);
ev->Record.MutableRequest()->MutableTxControl()->mutable_begin_tx()->mutable_serializable_read_write();
// keep compiled query in cache.
ev->Record.MutableRequest()->MutableQueryCachePolicy()->set_keep_in_cache(true);
@@ -494,14 +673,15 @@ void TWriteSessionActor::SendSelectPartitionRequest(ui32 hash, const TString& to
SelectSrcIdsInflight++;
}
-
-void TWriteSessionActor::UpdatePartition(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::UpdatePartition(const TActorContext& ctx) {
Y_VERIFY(State == ES_WAIT_TABLE_REQUEST_1 || State == ES_WAIT_NEXT_PARTITION);
SendUpdateSrcIdsRequests(ctx);
State = ES_WAIT_TABLE_REQUEST_2;
}
-void TWriteSessionActor::RequestNextPartition(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::RequestNextPartition(const TActorContext& ctx) {
Y_VERIFY(State == ES_WAIT_TABLE_REQUEST_1);
State = ES_WAIT_NEXT_PARTITION;
THolder<TEvPersQueue::TEvGetPartitionIdForWrite> x(new TEvPersQueue::TEvGetPartitionIdForWrite);
@@ -520,13 +700,15 @@ void TWriteSessionActor::RequestNextPartition(const TActorContext& ctx) {
NTabletPipe::SendData(ctx, PipeToBalancer, x.Release());
}
-void TWriteSessionActor::Handle(TEvPersQueue::TEvGetPartitionIdForWriteResponse::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(TEvPersQueue::TEvGetPartitionIdForWriteResponse::TPtr& ev, const TActorContext& ctx) {
Y_VERIFY(State == ES_WAIT_NEXT_PARTITION);
Partition = ev->Get()->Record.GetPartitionId();
UpdatePartition(ctx);
}
-void TWriteSessionActor::Handle(NKqp::TEvKqp::TEvQueryResponse::TPtr &ev, const TActorContext &ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(NKqp::TEvKqp::TEvQueryResponse::TPtr &ev, const TActorContext &ctx) {
auto& record = ev->Get()->Record.GetRef();
if (record.GetYdbStatus() == Ydb::StatusIds::ABORTED) {
@@ -538,7 +720,7 @@ void TWriteSessionActor::Handle(NKqp::TEvKqp::TEvQueryResponse::TPtr &ev, const
if (record.GetYdbStatus() != Ydb::StatusIds::SUCCESS) {
TStringBuilder errorReason;
- errorReason << "internal error in kqp Marker# PQ50 : " << record;
+ errorReason << "kqp error Marker# PQ50 : " << record;
if (State == EState::ES_INITED) {
LOG_WARN_S(ctx, NKikimrServices::PQ_WRITE_PROXY, errorReason);
SourceIdUpdatesInflight--;
@@ -552,6 +734,9 @@ void TWriteSessionActor::Handle(NKqp::TEvKqp::TEvQueryResponse::TPtr &ev, const
SelectSrcIdsInflight--;
auto& t = record.GetResponse().GetResults(0).GetValue().GetStruct(0);
+ TxId = record.GetResponse().GetTxMeta().id();
+ Y_VERIFY(!TxId.empty());
+
if (t.ListSize() != 0) {
auto& tt = t.GetList(0).GetStruct(0);
if (tt.HasOptional() && tt.GetOptional().HasUint32()) { //already got partition
@@ -577,11 +762,11 @@ void TWriteSessionActor::Handle(NKqp::TEvKqp::TEvQueryResponse::TPtr &ev, const
}
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "session v1 cookie: " << Cookie << " sessionId: " << OwnerCookie << " messageGroupId "
- << SourceId << " escaped " << EncodedSourceId.EscapedSourceId << " hash " << CompatibleHash << " partition " << Partition << " partitions "
- << PartitionToTablet.size() << "(" << CompatibleHash % PartitionToTablet.size() << ") create " << SourceIdCreateTime << " result " << t);
+ << SourceId << " escaped " << EncodedSourceId.EscapedSourceId << " partition " << Partition << " partitions "
+ << PartitionToTablet.size() << "(" << EncodedSourceId.Hash % PartitionToTablet.size() << ") create " << SourceIdCreateTime << " result " << t);
if (!PartitionFound && (PreferedPartition < Max<ui32>() || !AppData(ctx)->PQConfig.GetRoundRobinPartitionMapping())) {
- Partition = PreferedPartition < Max<ui32>() ? PreferedPartition : CompatibleHash % PartitionToTablet.size(); //choose partition default value
+ Partition = PreferedPartition < Max<ui32>() ? PreferedPartition : EncodedSourceId.Hash % PartitionToTablet.size(); //choose partition default value
PartitionFound = true;
}
@@ -592,9 +777,11 @@ void TWriteSessionActor::Handle(NKqp::TEvKqp::TEvQueryResponse::TPtr &ev, const
}
return;
} else if (State == EState::ES_WAIT_TABLE_REQUEST_2) {
+
SourceIdUpdatesInflight--;
if (!SourceIdUpdatesInflight) {
LastSourceIdUpdate = ctx.Now();
+ TryCloseSession(ctx);
ProceedPartition(Partition, ctx);
}
} else if (State == EState::ES_INITED) {
@@ -607,7 +794,8 @@ void TWriteSessionActor::Handle(NKqp::TEvKqp::TEvQueryResponse::TPtr &ev, const
}
}
-THolder<NKqp::TEvKqp::TEvQueryRequest> TWriteSessionActor::MakeUpdateSourceIdMetadataRequest(
+template<bool UseMigrationProtocol>
+THolder<NKqp::TEvKqp::TEvQueryRequest> TWriteSessionActor<UseMigrationProtocol>::MakeUpdateSourceIdMetadataRequest(
ui32 hash, const TString& topic, const NActors::TActorContext& ctx
) {
@@ -617,10 +805,17 @@ THolder<NKqp::TEvKqp::TEvQueryRequest> TWriteSessionActor::MakeUpdateSourceIdMet
ev->Record.MutableRequest()->SetType(NKikimrKqp::QUERY_TYPE_SQL_DML);
ev->Record.MutableRequest()->SetQuery(UpdateSourceIdQuery);
ev->Record.MutableRequest()->SetDatabase(NKikimr::NPQ::GetDatabaseFromConfig(AppData(ctx)->PQConfig));
- ev->Record.MutableRequest()->SetKeepSession(false);
// fill tx settings: set commit tx flag & begin new serializable tx.
ev->Record.MutableRequest()->MutableTxControl()->set_commit_tx(true);
- ev->Record.MutableRequest()->MutableTxControl()->mutable_begin_tx()->mutable_serializable_read_write();
+ if (KqpSessionId) {
+ ev->Record.MutableRequest()->SetSessionId(KqpSessionId);
+ }
+ if (TxId) {
+ ev->Record.MutableRequest()->MutableTxControl()->set_tx_id(TxId);
+ TxId = "";
+ } else {
+ ev->Record.MutableRequest()->MutableTxControl()->mutable_begin_tx()->mutable_serializable_read_write();
+ }
// keep compiled query in cache.
ev->Record.MutableRequest()->MutableQueryCachePolicy()->set_keep_in_cache(true);
@@ -637,13 +832,8 @@ THolder<NKqp::TEvKqp::TEvQueryRequest> TWriteSessionActor::MakeUpdateSourceIdMet
return ev;
}
-void TWriteSessionActor::SendUpdateSrcIdsRequests(const TActorContext& ctx) {
- {
- //full legacy name (rt3.dc--acc--topic)
- auto ev = MakeUpdateSourceIdMetadataRequest(CompatibleHash, FullConverter->GetClientsideName(), ctx);
- SourceIdUpdatesInflight++;
- ctx.Send(NKqp::MakeKqpProxyID(ctx.SelfID.NodeId()), ev.Release());
- }
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::SendUpdateSrcIdsRequests(const TActorContext& ctx) {
{
auto ev = MakeUpdateSourceIdMetadataRequest(EncodedSourceId.Hash, FullConverter->GetClientsideName(), ctx);
SourceIdUpdatesInflight++;
@@ -651,7 +841,8 @@ void TWriteSessionActor::SendUpdateSrcIdsRequests(const TActorContext& ctx) {
}
}
-void TWriteSessionActor::Handle(NKqp::TEvKqp::TEvProcessResponse::TPtr &ev, const TActorContext &ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(NKqp::TEvKqp::TEvProcessResponse::TPtr &ev, const TActorContext &ctx) {
auto& record = ev->Get()->Record;
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "session cookie: " << Cookie << " sessionId: " << OwnerCookie << " sourceID "
@@ -660,8 +851,8 @@ void TWriteSessionActor::Handle(NKqp::TEvKqp::TEvProcessResponse::TPtr &ev, cons
CloseSession("Internal error on discovering partition", PersQueue::ErrorCode::ERROR, ctx);
}
-
-void TWriteSessionActor::ProceedPartition(const ui32 partition, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::ProceedPartition(const ui32 partition, const TActorContext& ctx) {
Partition = partition;
auto it = PartitionToTablet.find(Partition);
@@ -692,7 +883,8 @@ void TWriteSessionActor::ProceedPartition(const ui32 partition, const TActorCont
}
}
-void TWriteSessionActor::CloseSession(const TString& errorReason, const PersQueue::ErrorCode::ErrorCode errorCode, const NActors::TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::CloseSession(const TString& errorReason, const PersQueue::ErrorCode::ErrorCode errorCode, const NActors::TActorContext& ctx) {
if (errorCode != PersQueue::ErrorCode::OK) {
@@ -706,7 +898,7 @@ void TWriteSessionActor::CloseSession(const TString& errorReason, const PersQueu
++(*GetServiceCounters(Counters, "pqproxy|writeSession")->GetCounter("Errors", true));
}
- StreamingWriteServerMessage result;
+ TServerMessage result;
result.set_status(ConvertPersQueueInternalCodeToStatus(errorCode));
FillIssue(result.add_issues(), errorCode, errorReason);
@@ -724,7 +916,8 @@ void TWriteSessionActor::CloseSession(const TString& errorReason, const PersQueu
Die(ctx);
}
-void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvInitResult::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(NPQ::TEvPartitionWriter::TEvInitResult::TPtr& ev, const TActorContext& ctx) {
if (State != ES_WAIT_WRITER_INIT) {
return CloseSession("got init result but not wait for it", PersQueue::ErrorCode::ERROR, ctx);
}
@@ -742,18 +935,30 @@ void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvInitResult::TPtr& ev
OwnerCookie = result.GetResult().OwnerCookie;
const auto& maxSeqNo = result.GetResult().SourceIdInfo.GetSeqNo();
- StreamingWriteServerMessage response;
+ TServerMessage response;
response.set_status(Ydb::StatusIds::SUCCESS);
auto init = response.mutable_init_response();
- init->set_session_id(EscapeC(OwnerCookie));
- init->set_last_sequence_number(maxSeqNo);
- init->set_partition_id(Partition);
- init->set_topic(FullConverter->GetFederationPath());
- init->set_cluster(FullConverter->GetCluster());
- init->set_block_format_version(0);
- if (InitialPQTabletConfig.HasCodecs()) {
- for (const auto& codecName : InitialPQTabletConfig.GetCodecs().GetCodecs()) {
- init->add_supported_codecs(CodecByName(codecName));
+
+ if constexpr (UseMigrationProtocol) {
+ init->set_session_id(EscapeC(OwnerCookie));
+ init->set_last_sequence_number(maxSeqNo);
+ init->set_partition_id(Partition);
+ init->set_topic(FullConverter->GetFederationPath());
+ init->set_cluster(FullConverter->GetCluster());
+ init->set_block_format_version(0);
+ if (InitialPQTabletConfig.HasCodecs()) {
+ for (const auto& codecName : InitialPQTabletConfig.GetCodecs().GetCodecs()) {
+ init->add_supported_codecs(CodecByName<UseMigrationProtocol>(codecName));
+ }
+ }
+ } else {
+ init->set_session_id(EscapeC(OwnerCookie));
+ init->set_last_seq_no(maxSeqNo);
+ init->set_partition_id(Partition);
+ if (InitialPQTabletConfig.HasCodecs()) {
+ for (const auto& codecName : InitialPQTabletConfig.GetCodecs().GetCodecs()) {
+ init->mutable_supported_codecs()->add_codecs(CodecByName<UseMigrationProtocol>(codecName));
+ }
}
}
@@ -768,7 +973,7 @@ void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvInitResult::TPtr& ev
State = ES_INITED;
- ctx.Schedule(CHECK_ACL_DELAY, new TEvents::TEvWakeup());
+ ctx.Schedule(CHECK_ACL_DELAY, new TEvents::TEvWakeup(EWakeupTag::RecheckAcl));
//init completed; wait for first data chunk
NextRequestInited = true;
@@ -779,23 +984,24 @@ void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvInitResult::TPtr& ev
}
}
-void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvWriteAccepted::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(NPQ::TEvPartitionWriter::TEvWriteAccepted::TPtr& ev, const TActorContext& ctx) {
if (State != ES_INITED) {
return CloseSession("got write permission but not wait for it", PersQueue::ErrorCode::ERROR, ctx);
}
- Y_VERIFY(!FormedWrites.empty());
- TWriteRequestBatchInfo::TPtr writeRequest = std::move(FormedWrites.front());
+ Y_VERIFY(!SentRequests.empty());
+ auto writeRequest = std::move(SentRequests.front());
if (ev->Get()->Cookie != writeRequest->Cookie) {
return CloseSession("out of order reserve bytes response from server, may be previous is lost", PersQueue::ErrorCode::ERROR, ctx);
}
- FormedWrites.pop_front();
+ SentRequests.pop_front();
ui64 diff = writeRequest->ByteSize;
- SentMessages.emplace_back(std::move(writeRequest));
+ AcceptedRequests.emplace_back(std::move(writeRequest));
BytesInflight_ -= diff;
BytesInflight.Dec(diff);
@@ -809,12 +1015,16 @@ void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvWriteAccepted::TPtr&
}
}
- --NumReserveBytesRequests;
- if (!Writes.empty())
- GenerateNextWriteRequest(ctx);
+ if (!IsQuotaRequired() && PendingRequest) {
+ SendRequest(std::move(PendingRequest), ctx);
+ } else if (!QuotedRequests.empty()) {
+ SendRequest(std::move(QuotedRequests.front()), ctx);
+ QuotedRequests.pop_front();
+ }
}
-void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvWriteResponse::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(NPQ::TEvPartitionWriter::TEvWriteResponse::TPtr& ev, const TActorContext& ctx) {
if (State != ES_INITED) {
return CloseSession("got write response but not wait for it", PersQueue::ErrorCode::ERROR, ctx);
}
@@ -831,19 +1041,19 @@ void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvWriteResponse::TPtr&
const auto& resp = result.Record.GetPartitionResponse();
- if (SentMessages.empty()) {
+ if (AcceptedRequests.empty()) {
CloseSession("got too many replies from server, internal error", PersQueue::ErrorCode::ERROR, ctx);
return;
}
- TWriteRequestBatchInfo::TPtr writeRequest = std::move(SentMessages.front());
- SentMessages.pop_front();
+ auto writeRequest = std::move(AcceptedRequests.front());
+ AcceptedRequests.pop_front();
if (resp.GetCookie() != writeRequest->Cookie) {
return CloseSession("out of order write response from server, may be previous is lost", PersQueue::ErrorCode::ERROR, ctx);
}
- auto addAck = [](const TPersQueuePartitionResponse::TCmdWriteResult& res, StreamingWriteServerMessage::BatchWriteResponse* batchWriteResponse,
+ auto addAckMigration = [](const TPersQueuePartitionResponse::TCmdWriteResult& res, StreamingWriteServerMessage::BatchWriteResponse* batchWriteResponse,
StreamingWriteServerMessage::WriteStatistics* stat) {
batchWriteResponse->add_sequence_numbers(res.GetSeqNo());
batchWriteResponse->add_offsets(res.GetOffset());
@@ -858,28 +1068,84 @@ void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvWriteResponse::TPtr&
Max((i64)res.GetWriteTimeMs(), stat->persist_duration_ms()));
};
+ auto addAck = [](const TPersQueuePartitionResponse::TCmdWriteResult& res, Topic::StreamWriteMessage::WriteResponse* writeResponse,
+ Topic::StreamWriteMessage::WriteResponse::WriteStatistics* stat) {
+ auto ack = writeResponse->add_acks();
+ // TODO (ildar-khisam@): validate res before filling ack fields
+ ack->set_seq_no(res.GetSeqNo());
+ if (res.GetAlreadyWritten()) {
+ ack->mutable_skipped()->set_reason(Topic::StreamWriteMessage::WriteResponse::WriteAck::Skipped::REASON_ALREADY_WRITTEN);
+ } else {
+ ack->mutable_written()->set_offset(res.GetOffset());
+ }
+
+ using ::google::protobuf::Duration;
+ using ::google::protobuf::util::TimeUtil;
+
+ auto persisting_time_ms = Max<i64>(res.GetWriteTimeMs(), TimeUtil::DurationToMilliseconds(stat->persisting_time()));
+ *stat->mutable_persisting_time() = TimeUtil::MillisecondsToDuration(persisting_time_ms);
+
+ auto min_queue_wait_time_ms = (stat->min_queue_wait_time() == Duration())
+ ? (i64)res.GetTotalTimeInPartitionQueueMs()
+ : Min<i64>(res.GetTotalTimeInPartitionQueueMs(), TimeUtil::DurationToMilliseconds(stat->min_queue_wait_time()));
+ *stat->mutable_min_queue_wait_time() = TimeUtil::MillisecondsToDuration(min_queue_wait_time_ms);
+
+ auto max_queue_wait_time_ms = Max<i64>(res.GetTotalTimeInPartitionQueueMs(), TimeUtil::DurationToMilliseconds(stat->max_queue_wait_time()));
+ *stat->mutable_max_queue_wait_time() = TimeUtil::MillisecondsToDuration(max_queue_wait_time_ms);
+
+ auto partition_quota_wait_time_ms = Max<i64>(res.GetPartitionQuotedTimeMs(), TimeUtil::DurationToMilliseconds(stat->partition_quota_wait_time()));
+ *stat->mutable_partition_quota_wait_time() = TimeUtil::MillisecondsToDuration(partition_quota_wait_time_ms);
+
+ auto topic_quota_wait_time_ms = Max<i64>(res.GetTopicQuotedTimeMs(), TimeUtil::DurationToMilliseconds(stat->topic_quota_wait_time()));
+ *stat->mutable_topic_quota_wait_time() = TimeUtil::MillisecondsToDuration(topic_quota_wait_time_ms);
+ };
+
ui32 partitionCmdWriteResultIndex = 0;
// TODO: Send single batch write response for all user write requests up to some max size/count
for (const auto& userWriteRequest : writeRequest->UserWriteRequests) {
- StreamingWriteServerMessage result;
+ TServerMessage result;
result.set_status(Ydb::StatusIds::SUCCESS);
- auto batchWriteResponse = result.mutable_batch_write_response();
- batchWriteResponse->set_partition_id(Partition);
- for (size_t messageIndex = 0, endIndex = userWriteRequest->Request.write_request().sequence_numbers_size(); messageIndex != endIndex; ++messageIndex) {
- if (partitionCmdWriteResultIndex == resp.CmdWriteResultSize()) {
- CloseSession("too less responses from server", PersQueue::ErrorCode::ERROR, ctx);
- return;
+ if constexpr (UseMigrationProtocol) {
+ auto batchWriteResponse = result.mutable_batch_write_response();
+ batchWriteResponse->set_partition_id(Partition);
+
+ for (size_t messageIndex = 0, endIndex = userWriteRequest->Request.write_request().sequence_numbers_size(); messageIndex != endIndex; ++messageIndex) {
+ if (partitionCmdWriteResultIndex == resp.CmdWriteResultSize()) {
+ CloseSession("too less responses from server", PersQueue::ErrorCode::ERROR, ctx);
+ return;
+ }
+ const auto& partitionCmdWriteResult = resp.GetCmdWriteResult(partitionCmdWriteResultIndex);
+ const auto writtenSequenceNumber = userWriteRequest->Request.write_request().sequence_numbers(messageIndex);
+ if (partitionCmdWriteResult.GetSeqNo() != writtenSequenceNumber) {
+ CloseSession(TStringBuilder() << "Expected partition " << Partition << " write result for message with sequence number " << writtenSequenceNumber << " but got for " << partitionCmdWriteResult.GetSeqNo(), PersQueue::ErrorCode::ERROR, ctx);
+ return;
+ }
+
+ addAckMigration(partitionCmdWriteResult, batchWriteResponse, batchWriteResponse->mutable_write_statistics());
+ ++partitionCmdWriteResultIndex;
}
- const auto& partitionCmdWriteResult = resp.GetCmdWriteResult(partitionCmdWriteResultIndex);
- const auto writtenSequenceNumber = userWriteRequest->Request.write_request().sequence_numbers(messageIndex);
- if (partitionCmdWriteResult.GetSeqNo() != writtenSequenceNumber) {
- CloseSession(TStringBuilder() << "Expected partition " << Partition << " write result for message with sequence number " << writtenSequenceNumber << " but got for " << partitionCmdWriteResult.GetSeqNo(), PersQueue::ErrorCode::ERROR, ctx);
- return;
+
+ } else {
+ auto batchWriteResponse = result.mutable_write_response();
+ batchWriteResponse->set_partition_id(Partition);
+
+ for (size_t messageIndex = 0, endIndex = userWriteRequest->Request.write_request().messages_size(); messageIndex != endIndex; ++messageIndex) {
+ if (partitionCmdWriteResultIndex == resp.CmdWriteResultSize()) {
+ CloseSession("too less responses from server", PersQueue::ErrorCode::ERROR, ctx);
+ return;
+ }
+ const auto& partitionCmdWriteResult = resp.GetCmdWriteResult(partitionCmdWriteResultIndex);
+ const auto writtenSequenceNumber = userWriteRequest->Request.write_request().messages(messageIndex).seq_no();
+ if (partitionCmdWriteResult.GetSeqNo() != writtenSequenceNumber) {
+ CloseSession(TStringBuilder() << "Expected partition " << Partition << " write result for message with sequence number " << writtenSequenceNumber << " but got for " << partitionCmdWriteResult.GetSeqNo(), PersQueue::ErrorCode::ERROR, ctx);
+ return;
+ }
+
+ addAck(partitionCmdWriteResult, batchWriteResponse, batchWriteResponse->mutable_write_statistics());
+ ++partitionCmdWriteResultIndex;
}
- addAck(partitionCmdWriteResult, batchWriteResponse, batchWriteResponse->mutable_write_statistics());
- ++partitionCmdWriteResultIndex;
}
if (!Request->GetStreamCtx()->Write(std::move(result))) {
@@ -898,11 +1164,13 @@ void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvWriteResponse::TPtr&
CheckFinish(ctx);
}
-void TWriteSessionActor::Handle(NPQ::TEvPartitionWriter::TEvDisconnected::TPtr&, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(NPQ::TEvPartitionWriter::TEvDisconnected::TPtr&, const TActorContext& ctx) {
CloseSession("pipe to partition's tablet is dead", PersQueue::ErrorCode::ERROR, ctx);
}
-void TWriteSessionActor::Handle(TEvTabletPipe::TEvClientConnected::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(TEvTabletPipe::TEvClientConnected::TPtr& ev, const TActorContext& ctx) {
TEvTabletPipe::TEvClientConnected *msg = ev->Get();
//TODO: add here retries for connecting to PQRB
if (msg->Status != NKikimrProto::OK) {
@@ -911,22 +1179,22 @@ void TWriteSessionActor::Handle(TEvTabletPipe::TEvClientConnected::TPtr& ev, con
}
}
-void TWriteSessionActor::Handle(TEvTabletPipe::TEvClientDestroyed::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(TEvTabletPipe::TEvClientDestroyed::TPtr& ev, const TActorContext& ctx) {
//TODO: add here retries for connecting to PQRB
CloseSession(TStringBuilder() << "pipe to tablet is dead " << ev->Get()->TabletId, PersQueue::ErrorCode::ERROR, ctx);
}
-void TWriteSessionActor::GenerateNextWriteRequest(const TActorContext& ctx) {
- TWriteRequestBatchInfo::TPtr writeRequest = new TWriteRequestBatchInfo();
-
- auto ev = MakeHolder<NPQ::TEvPartitionWriter::TEvWriteRequest>(++NextRequestCookie);
- NKikimrClient::TPersQueueRequest& request = ev->Record;
-
- writeRequest->UserWriteRequests = std::move(Writes);
- Writes.clear();
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::PrepareRequest(THolder<TEvWrite>&& ev, const TActorContext& ctx) {
+ if (!PendingRequest) {
+ PendingRequest = new TWriteRequestInfo(++NextRequestCookie);
+ }
+
+ auto& request = PendingRequest->PartitionWriteRequest->Record;
+ ui64 payloadSize = 0;
- i64 diff = 0;
- auto addData = [&](const StreamingWriteClientMessage::WriteRequest& writeRequest, const i32 messageIndex) {
+ auto addDataMigration = [&](const StreamingWriteClientMessage::WriteRequest& writeRequest, const i32 messageIndex) {
auto w = request.MutablePartitionRequest()->AddCmdWrite();
w->SetData(GetSerializedData(InitMeta, writeRequest, messageIndex));
w->SetSeqNo(writeRequest.sequence_numbers(messageIndex));
@@ -934,33 +1202,71 @@ void TWriteSessionActor::GenerateNextWriteRequest(const TActorContext& ctx) {
w->SetCreateTimeMS(writeRequest.created_at_ms(messageIndex));
w->SetUncompressedSize(writeRequest.blocks_uncompressed_sizes(messageIndex));
w->SetClientDC(ClientDC);
+ w->SetIgnoreQuotaDeadline(true);
+ payloadSize += w->GetData().size() + w->GetSourceId().size();
+ };
+
+ auto addData = [&](const Topic::StreamWriteMessage::WriteRequest& writeRequest, const i32 messageIndex) {
+ auto w = request.MutablePartitionRequest()->AddCmdWrite();
+ w->SetData(GetSerializedData(InitMeta, writeRequest, messageIndex));
+ w->SetSeqNo(writeRequest.messages(messageIndex).seq_no());
+ w->SetSourceId(NPQ::NSourceIdEncoding::EncodeSimple(SourceId));
+ w->SetCreateTimeMS(::google::protobuf::util::TimeUtil::TimestampToMilliseconds(writeRequest.messages(messageIndex).created_at()));
+ w->SetUncompressedSize(writeRequest.messages(messageIndex).uncompressed_size());
+ w->SetClientDC(ClientDC);
+ w->SetIgnoreQuotaDeadline(true);
+ payloadSize += w->GetData().size() + w->GetSourceId().size();
};
- for (const auto& write : writeRequest->UserWriteRequests) {
- diff -= write->Request.ByteSize();
- const auto& writeRequest = write->Request.write_request();
+ const auto& writeRequest = ev->Request.write_request();
+ if constexpr (UseMigrationProtocol) {
for (i32 messageIndex = 0; messageIndex != writeRequest.sequence_numbers_size(); ++messageIndex) {
+ addDataMigration(writeRequest, messageIndex);
+ }
+ } else {
+ for (i32 messageIndex = 0; messageIndex != writeRequest.messages_size(); ++messageIndex) {
addData(writeRequest, messageIndex);
}
}
- writeRequest->Cookie = request.GetPartitionRequest().GetCookie();
+ PendingRequest->UserWriteRequests.push_back(std::move(ev));
+ PendingRequest->ByteSize = request.ByteSize();
+
+ if (const auto ru = CalcRuConsumption(payloadSize)) {
+ PendingRequest->RequiredQuota += ru;
+ if (MaybeRequestQuota(PendingRequest->RequiredQuota, EWakeupTag::RlAllowed, ctx)) {
+ Y_VERIFY(!PendingQuotaRequest);
+ PendingQuotaRequest = std::move(PendingRequest);
+ }
+ } else {
+ if (SentRequests.size() < MAX_RESERVE_REQUESTS_INFLIGHT) {
+ SendRequest(std::move(PendingRequest), ctx);
+ }
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::SendRequest(typename TWriteRequestInfo::TPtr&& request, const TActorContext& ctx) {
+ Y_VERIFY(request->PartitionWriteRequest);
+
+ i64 diff = 0;
+ for (const auto& w : request->UserWriteRequests) {
+ diff -= w->Request.ByteSize();
+ }
Y_VERIFY(-diff <= (i64)BytesInflight_);
- diff += request.ByteSize();
+ diff += request->PartitionWriteRequest->Record.ByteSize();
BytesInflight_ += diff;
BytesInflightTotal_ += diff;
BytesInflight.Inc(diff);
BytesInflightTotal.Inc(diff);
- writeRequest->ByteSize = request.ByteSize();
- FormedWrites.push_back(writeRequest);
-
- ctx.Send(Writer, std::move(ev));
- ++NumReserveBytesRequests;
+ ctx.Send(Writer, std::move(request->PartitionWriteRequest));
+ SentRequests.push_back(std::move(request));
}
-void TWriteSessionActor::Handle(TEvPQProxy::TEvUpdateToken::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(typename TEvUpdateToken::TPtr& ev, const TActorContext& ctx) {
if (State != ES_INITED) {
CloseSession("got 'update_token_request' but write session is not initialized", PersQueue::ErrorCode::BAD_REQUEST, ctx);
return;
@@ -973,7 +1279,7 @@ void TWriteSessionActor::Handle(TEvPQProxy::TEvUpdateToken::TPtr& ev, const TAct
const auto& token = ev->Get()->Request.update_token_request().token();
if (token == Auth || (token.empty() && !AppData(ctx)->PQConfig.GetRequireCredentialsInNewProtocol())) {
// Got same token or empty token with no non-empty token requirement, do not trigger any checks
- StreamingWriteServerMessage serverMessage;
+ TServerMessage serverMessage;
serverMessage.set_status(Ydb::StatusIds::SUCCESS);
serverMessage.mutable_update_token_response();
if (!Request->GetStreamCtx()->Write(std::move(serverMessage))) {
@@ -1002,7 +1308,8 @@ void TWriteSessionActor::Handle(TEvPQProxy::TEvUpdateToken::TPtr& ev, const TAct
}
}
-void TWriteSessionActor::Handle(NGRpcService::TGRpcRequestProxy::TEvRefreshTokenResponse::TPtr &ev , const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(NGRpcService::TGRpcRequestProxy::TEvRefreshTokenResponse::TPtr &ev , const TActorContext& ctx) {
Y_UNUSED(ctx);
LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "updating token");
@@ -1019,7 +1326,8 @@ void TWriteSessionActor::Handle(NGRpcService::TGRpcRequestProxy::TEvRefreshToken
}
}
-void TWriteSessionActor::Handle(TEvPQProxy::TEvWrite::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(typename TEvWrite::TPtr& ev, const TActorContext& ctx) {
RequestNotChecked = true;
@@ -1030,6 +1338,8 @@ void TWriteSessionActor::Handle(TEvPQProxy::TEvWrite::TPtr& ev, const TActorCont
}
const auto& writeRequest = ev->Get()->Request.write_request();
+
+ if constexpr (UseMigrationProtocol) {
if (!AllEqual(writeRequest.sequence_numbers_size(), writeRequest.created_at_ms_size(), writeRequest.sent_at_ms_size(), writeRequest.message_sizes_size())) {
CloseSession(TStringBuilder() << "messages meta repeated fields do not have same size, 'sequence_numbers' size is " << writeRequest.sequence_numbers_size()
<< ", 'message_sizes' size is " << writeRequest.message_sizes_size() << ", 'created_at_ms' size is " << writeRequest.created_at_ms_size()
@@ -1092,10 +1402,42 @@ void TWriteSessionActor::Handle(TEvPQProxy::TEvWrite::TPtr& ev, const TActorCont
}
}
- THolder<TEvPQProxy::TEvWrite> event(ev->Release());
- Writes.push_back(std::move(event));
+ } else {
+ const i32 messageCount = writeRequest.messages_size();
+ if (messageCount == 0) {
+ CloseSession(TStringBuilder() << "messages meta repeated fields are empty, write request contains no messages", PersQueue::ErrorCode::BAD_REQUEST, ctx);
+ return;
+ }
+ auto dataCheck = [&](const Topic::StreamWriteMessage::WriteRequest& data, const i32 messageIndex) -> bool {
+ if (data.messages(messageIndex).seq_no() <= 0) {
+ CloseSession(TStringBuilder() << "bad write request - sequence number must be greater than 0. Value at position " << messageIndex << " has seq_no " << data.messages(messageIndex).seq_no(), PersQueue::ErrorCode::BAD_REQUEST, ctx);
+ return false;
+ }
+
+ if (messageIndex > 0 && data.messages(messageIndex).seq_no() <= data.messages(messageIndex - 1).seq_no()) {
+ CloseSession(TStringBuilder() << "bad write request - sequence numbers are unsorted. Value " << data.messages(messageIndex).seq_no() << " at position " << messageIndex
+ << " is less than or equal to value " << data.messages(messageIndex - 1).seq_no() << " at position " << (messageIndex - 1), PersQueue::ErrorCode::BAD_REQUEST, ctx);
+ return false;
+ }
+
+ const ui32 codecID = data.codec();
+ TString error = "unspecified (id 0)";
+ if (codecID == 0 || !ValidateWriteWithCodec(InitialPQTabletConfig, codecID - 1, error)) {
+ CloseSession(TStringBuilder() << "bad write request - codec is invalid: " << error, PersQueue::ErrorCode::BAD_REQUEST, ctx);
+ return false;
+ }
+
+ return true;
+ };
+ for (i32 messageIndex = 0; messageIndex != messageCount; ++messageIndex) {
+ if (!dataCheck(writeRequest, messageIndex)) {
+ return;
+ }
+ }
+
+ }
- ui64 diff = Writes.back()->Request.ByteSize();
+ ui64 diff = ev->Get()->Request.ByteSize();
BytesInflight_ += diff;
BytesInflightTotal_ += diff;
BytesInflight.Inc(diff);
@@ -1113,30 +1455,72 @@ void TWriteSessionActor::Handle(TEvPQProxy::TEvWrite::TPtr& ev, const TActorCont
NextRequestInited = false;
}
- if (NumReserveBytesRequests < MAX_RESERVE_REQUESTS_INFLIGHT) {
- GenerateNextWriteRequest(ctx);
- }
+ PrepareRequest(THolder<TEvWrite>(ev->Release()), ctx);
}
-void TWriteSessionActor::HandlePoison(TEvPQProxy::TEvDieCommand::TPtr& ev, const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::HandlePoison(TEvPQProxy::TEvDieCommand::TPtr& ev, const TActorContext& ctx) {
CloseSession(ev->Get()->Reason, ev->Get()->ErrorCode, ctx);
}
-void TWriteSessionActor::LogSession(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::LogSession(const TActorContext& ctx) {
+ TString topic_path = [this]() {
+ if constexpr (UseMigrationProtocol) {
+ return InitRequest.topic();
+ } else {
+ return InitRequest.path();
+ }
+ }();
LOG_INFO_S(
ctx, NKikimrServices::PQ_WRITE_PROXY,
"write session: cookie=" << Cookie << " sessionId=" << OwnerCookie << " userAgent=\"" << UserAgent
<< "\" ip=" << PeerName << " proto=v1 "
- << " topic=" << InitRequest.topic()
+ << " topic=" << topic_path
<< " durationSec=" << (ctx.Now() - StartTime).Seconds()
);
LogSessionDeadline = ctx.Now() + TDuration::Hours(1) + TDuration::Seconds(rand() % 60);
}
-void TWriteSessionActor::HandleWakeup(const TActorContext& ctx) {
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::Handle(TEvents::TEvWakeup::TPtr& ev, const TActorContext& ctx) {
+ const auto tag = static_cast<EWakeupTag>(ev->Get()->Tag);
+ OnWakeup(tag);
+
+ switch (tag) {
+ case EWakeupTag::RlInit:
+ return CheckACL(ctx);
+
+ case EWakeupTag::RecheckAcl:
+ return RecheckACL(ctx);
+
+ case EWakeupTag::RlAllowed:
+ if (SentRequests.size() < MAX_RESERVE_REQUESTS_INFLIGHT) {
+ SendRequest(std::move(PendingQuotaRequest), ctx);
+ } else {
+ QuotedRequests.push_back(std::move(PendingQuotaRequest));
+ }
+
+ if (PendingQuotaRequest = std::move(PendingRequest)) {
+ Y_VERIFY(MaybeRequestQuota(PendingQuotaRequest->RequiredQuota, EWakeupTag::RlAllowed, ctx));
+ }
+ break;
+
+ case EWakeupTag::RlNoResource:
+ if (PendingQuotaRequest) {
+ Y_VERIFY(MaybeRequestQuota(PendingQuotaRequest->RequiredQuota, EWakeupTag::RlAllowed, ctx));
+ } else {
+ return CloseSession("Throughput limit exceeded", PersQueue::ErrorCode::OVERLOAD, ctx);
+ }
+ break;
+ }
+}
+
+template<bool UseMigrationProtocol>
+void TWriteSessionActor<UseMigrationProtocol>::RecheckACL(const TActorContext& ctx) {
Y_VERIFY(State == ES_INITED);
- ctx.Schedule(CHECK_ACL_DELAY, new TEvents::TEvWakeup());
+ ctx.Schedule(CHECK_ACL_DELAY, new TEvents::TEvWakeup(EWakeupTag::RecheckAcl));
if (Token && !ACLCheckInProgress && RequestNotChecked && (ctx.Now() - LastACLCheckTimestamp > TDuration::Seconds(AppData(ctx)->PQConfig.GetACLRetryTimeoutSec()))) {
RequestNotChecked = false;
InitCheckSchema(ctx);
diff --git a/ydb/services/persqueue_v1/grpc_pq_read.cpp b/ydb/services/persqueue_v1/grpc_pq_read.cpp
index bac9b05463..33b0723c30 100644
--- a/ydb/services/persqueue_v1/grpc_pq_read.cpp
+++ b/ydb/services/persqueue_v1/grpc_pq_read.cpp
@@ -23,14 +23,14 @@ using namespace PersQueue::V1;
IActor* CreatePQReadService(const TActorId& schemeCache, const TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const ui32 maxSessions) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const ui32 maxSessions) {
return new TPQReadService(schemeCache, newSchemeCache, counters, maxSessions);
}
TPQReadService::TPQReadService(const TActorId& schemeCache, const TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const ui32 maxSessions)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const ui32 maxSessions)
: SchemeCache(schemeCache)
, NewSchemeCache(newSchemeCache)
, Counters(counters)
diff --git a/ydb/services/persqueue_v1/grpc_pq_read.h b/ydb/services/persqueue_v1/grpc_pq_read.h
index 812f8a774d..9ab9c57d92 100644
--- a/ydb/services/persqueue_v1/grpc_pq_read.h
+++ b/ydb/services/persqueue_v1/grpc_pq_read.h
@@ -21,12 +21,12 @@ namespace V1 {
IActor* CreatePQReadService(const NActors::TActorId& schemeCache, const NActors::TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const ui32 maxSessions);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const ui32 maxSessions);
class TPQReadService : public NActors::TActorBootstrapped<TPQReadService> {
public:
TPQReadService(const NActors::TActorId& schemeCache, const NActors::TActorId& newSchemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const ui32 maxSessions);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const ui32 maxSessions);
~TPQReadService()
{}
@@ -70,7 +70,7 @@ private:
THashMap<ui64, TActorId> Sessions;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
ui32 MaxSessions;
TVector<TString> Clusters;
diff --git a/ydb/services/persqueue_v1/grpc_pq_schema.cpp b/ydb/services/persqueue_v1/grpc_pq_schema.cpp
index 026620baf6..1c52b7149b 100644
--- a/ydb/services/persqueue_v1/grpc_pq_schema.cpp
+++ b/ydb/services/persqueue_v1/grpc_pq_schema.cpp
@@ -23,14 +23,14 @@ namespace NKikimr::NGRpcProxy::V1 {
using namespace PersQueue::V1;
-IActor* CreatePQSchemaService(const TActorId& schemeCache, TIntrusivePtr<NMonitoring::TDynamicCounters> counters) {
+IActor* CreatePQSchemaService(const TActorId& schemeCache, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters) {
return new TPQSchemaService(schemeCache, counters);
}
TPQSchemaService::TPQSchemaService(const TActorId& schemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters)
: SchemeCache(schemeCache)
, Counters(counters)
, LocalCluster("")
diff --git a/ydb/services/persqueue_v1/grpc_pq_schema.h b/ydb/services/persqueue_v1/grpc_pq_schema.h
index 107e3e44eb..899cef430e 100644
--- a/ydb/services/persqueue_v1/grpc_pq_schema.h
+++ b/ydb/services/persqueue_v1/grpc_pq_schema.h
@@ -18,11 +18,11 @@ inline TActorId GetPQSchemaServiceActorID() {
return TActorId(0, "PQSchmSvc");
}
-IActor* CreatePQSchemaService(const NActors::TActorId& schemeCache, TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+IActor* CreatePQSchemaService(const NActors::TActorId& schemeCache, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
class TPQSchemaService : public NActors::TActorBootstrapped<TPQSchemaService> {
public:
- TPQSchemaService(const NActors::TActorId& schemeCache, TIntrusivePtr<NMonitoring::TDynamicCounters> counters);
+ TPQSchemaService(const NActors::TActorId& schemeCache, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters);
void Bootstrap(const TActorContext& ctx);
@@ -62,7 +62,7 @@ private:
NActors::TActorId SchemeCache;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
TVector<TString> Clusters;
TString LocalCluster;
diff --git a/ydb/services/persqueue_v1/grpc_pq_write.cpp b/ydb/services/persqueue_v1/grpc_pq_write.cpp
index 506db61873..3605b51421 100644
--- a/ydb/services/persqueue_v1/grpc_pq_write.cpp
+++ b/ydb/services/persqueue_v1/grpc_pq_write.cpp
@@ -18,14 +18,14 @@ using namespace PersQueue::V1;
///////////////////////////////////////////////////////////////////////////////
IActor* CreatePQWriteService(const TActorId& schemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const ui32 maxSessions) {
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const ui32 maxSessions) {
return new TPQWriteService(schemeCache, counters, maxSessions);
}
TPQWriteService::TPQWriteService(const TActorId& schemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const ui32 maxSessions)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const ui32 maxSessions)
: SchemeCache(schemeCache)
, Counters(counters)
, MaxSessions(maxSessions)
@@ -153,73 +153,22 @@ void TPQWriteService::Handle(TEvPQProxy::TEvSessionDead::TPtr& ev, const TActorC
}
-StreamingWriteServerMessage FillWriteResponse(const TString& errorReason, const PersQueue::ErrorCode::ErrorCode code) {
- StreamingWriteServerMessage res;
- FillIssue(res.add_issues(), code, errorReason);
- res.set_status(ConvertPersQueueInternalCodeToStatus(code));
- return res;
+void TPQWriteService::Handle(NKikimr::NGRpcService::TEvStreamTopicWriteRequest::TPtr& ev, const TActorContext& ctx) {
+ HandleWriteRequest<NKikimr::NGRpcService::TEvStreamTopicWriteRequest>(ev, ctx);
}
void TPQWriteService::Handle(NKikimr::NGRpcService::TEvStreamPQWriteRequest::TPtr& ev, const TActorContext& ctx) {
-
- LOG_DEBUG_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new grpc connection");
-
- if (TooMuchSessions()) {
- LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new grpc connection failed - too much sessions");
- ev->Get()->GetStreamCtx()->Attach(ctx.SelfID);
- ev->Get()->GetStreamCtx()->WriteAndFinish(FillWriteResponse("proxy overloaded", PersQueue::ErrorCode::OVERLOAD), grpc::Status::OK); //CANCELLED
- return;
- }
-
- TString localCluster = AvailableLocalCluster(ctx);
-
- if (HaveClusters && localCluster.empty()) {
- ev->Get()->GetStreamCtx()->Attach(ctx.SelfID);
- if (LocalCluster) {
- LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new grpc connection failed - cluster disabled");
- ev->Get()->GetStreamCtx()->WriteAndFinish(FillWriteResponse("cluster disabled", PersQueue::ErrorCode::CLUSTER_DISABLED), grpc::Status::OK); //CANCELLED
- } else {
- LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new grpc connection failed - initializing");
- ev->Get()->GetStreamCtx()->WriteAndFinish(FillWriteResponse("initializing", PersQueue::ErrorCode::INITIALIZING), grpc::Status::OK); //CANCELLED
- }
- return;
- } else {
- if (ConverterFactory == nullptr) {
- ConverterFactory = std::make_shared<NPersQueue::TTopicNamesConverterFactory>(
- AppData(ctx)->PQConfig, localCluster
- );
- }
- TopicsHandler = std::make_unique<NPersQueue::TTopicsListController>(
- ConverterFactory, TVector<TString>{}
- );
- const ui64 cookie = NextCookie();
-
- LOG_DEBUG_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new session created cookie " << cookie);
-
- auto ip = ev->Get()->GetStreamCtx()->GetPeerName();
- TActorId worker = ctx.Register(new TWriteSessionActor(
- ev->Release().Release(), cookie, SchemeCache, Counters,
- DatacenterClassifier ? DatacenterClassifier->ClassifyAddress(NAddressClassifier::ExtractAddress(ip)) : "unknown",
- *TopicsHandler
- ));
-
- Sessions[cookie] = worker;
- }
+ HandleWriteRequest<NKikimr::NGRpcService::TEvStreamPQWriteRequest>(ev, ctx);
}
bool TPQWriteService::TooMuchSessions() {
return Sessions.size() >= MaxSessions;
}
-
TString TPQWriteService::AvailableLocalCluster(const TActorContext&) const {
return HaveClusters && Enabled ? *LocalCluster : "";
}
-
-
-
-
///////////////////////////////////////////////////////////////////////////////
}
@@ -228,6 +177,9 @@ TString TPQWriteService::AvailableLocalCluster(const TActorContext&) const {
void NKikimr::NGRpcService::TGRpcRequestProxy::Handle(NKikimr::NGRpcService::TEvStreamPQWriteRequest::TPtr& ev, const TActorContext& ctx) {
+ ctx.Send(NKikimr::NGRpcProxy::V1::GetPQWriteServiceActorID(), ev->Release().Release());
+}
+void NKikimr::NGRpcService::TGRpcRequestProxy::Handle(NKikimr::NGRpcService::TEvStreamTopicWriteRequest::TPtr& ev, const TActorContext& ctx) {
ctx.Send(NKikimr::NGRpcProxy::V1::GetPQWriteServiceActorID(), ev->Release().Release());
}
diff --git a/ydb/services/persqueue_v1/grpc_pq_write.h b/ydb/services/persqueue_v1/grpc_pq_write.h
index 4107cdae13..420a19ceab 100644
--- a/ydb/services/persqueue_v1/grpc_pq_write.h
+++ b/ydb/services/persqueue_v1/grpc_pq_write.h
@@ -17,12 +17,12 @@ namespace NGRpcProxy {
namespace V1 {
IActor* CreatePQWriteService(const NActors::TActorId& schemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const ui32 maxSessions);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const ui32 maxSessions);
class TPQWriteService : public NActors::TActorBootstrapped<TPQWriteService> {
public:
TPQWriteService(const NActors::TActorId& schemeCache,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const ui32 maxSessions);
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const ui32 maxSessions);
~TPQWriteService()
{}
@@ -38,6 +38,7 @@ private:
STFUNC(StateFunc) {
switch (ev->GetTypeRewrite()) {
HFunc(NKikimr::NGRpcService::TEvStreamPQWriteRequest, Handle);
+ HFunc(NKikimr::NGRpcService::TEvStreamTopicWriteRequest, Handle);
HFunc(NPQ::NClusterTracker::TEvClusterTracker::TEvClustersUpdate, Handle);
HFunc(TEvPQProxy::TEvSessionDead, Handle);
HFunc(TEvPQProxy::TEvSessionSetPreferredCluster, Handle);
@@ -46,14 +47,19 @@ private:
}
}
+ template <typename WriteRequest>
+ void HandleWriteRequest(typename WriteRequest::TPtr& ev, const TActorContext& ctx);
+
private:
void Handle(NKikimr::NGRpcService::TEvStreamPQWriteRequest::TPtr& ev, const TActorContext& ctx);
+ void Handle(NKikimr::NGRpcService::TEvStreamTopicWriteRequest::TPtr& ev, const TActorContext& ctx);
void Handle(NPQ::NClusterTracker::TEvClusterTracker::TEvClustersUpdate::TPtr& ev, const TActorContext& ctx);
void Handle(NNetClassifier::TEvNetClassifier::TEvClassifierUpdate::TPtr& ev, const TActorContext& ctx);
void Handle(TEvPQProxy::TEvSessionSetPreferredCluster::TPtr& ev, const TActorContext& ctx);
void Handle(TEvPQProxy::TEvSessionDead::TPtr& ev, const TActorContext& ctx);
+private:
NActors::TActorId SchemeCache;
TAtomic LastCookie = 0;
@@ -65,7 +71,7 @@ private:
// Cluster enabled at time if cluster is currently enabled
THashMap<TString, TInstant> ClustersEnabledAt;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
ui32 MaxSessions;
TMaybe<TString> LocalCluster;
@@ -80,6 +86,71 @@ private:
std::unique_ptr<NPersQueue::TTopicsListController> TopicsHandler;
};
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// template methods implementation
+
+template <bool UseMigrationProtocol>
+auto FillWriteResponse(const TString& errorReason, const PersQueue::ErrorCode::ErrorCode code) {
+ using ServerMessage = typename std::conditional<UseMigrationProtocol,
+ PersQueue::V1::StreamingWriteServerMessage,
+ Topic::StreamWriteMessage::FromServer>::type;
+ ServerMessage res;
+ FillIssue(res.add_issues(), code, errorReason);
+ res.set_status(ConvertPersQueueInternalCodeToStatus(code));
+ return res;
+}
+
+template <typename WriteRequest>
+void TPQWriteService::HandleWriteRequest(typename WriteRequest::TPtr& ev, const TActorContext& ctx) {
+ constexpr bool UseMigrationProtocol = std::is_same_v<WriteRequest, NGRpcService::TEvStreamPQWriteRequest>;
+
+ LOG_DEBUG_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new grpc connection");
+
+ if (TooMuchSessions()) {
+ LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new grpc connection failed - too much sessions");
+ ev->Get()->GetStreamCtx()->Attach(ctx.SelfID);
+ ev->Get()->GetStreamCtx()->WriteAndFinish(
+ FillWriteResponse<UseMigrationProtocol>("proxy overloaded", PersQueue::ErrorCode::OVERLOAD),
+ grpc::Status::OK); // CANCELLED
+ return;
+ }
+
+ TString localCluster = AvailableLocalCluster(ctx);
+
+ if (HaveClusters && localCluster.empty()) {
+ ev->Get()->GetStreamCtx()->Attach(ctx.SelfID);
+ if (LocalCluster) {
+ LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new grpc connection failed - cluster disabled");
+ ev->Get()->GetStreamCtx()->WriteAndFinish(FillWriteResponse<UseMigrationProtocol>("cluster disabled", PersQueue::ErrorCode::CLUSTER_DISABLED), grpc::Status::OK); //CANCELLED
+ } else {
+ LOG_INFO_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new grpc connection failed - initializing");
+ ev->Get()->GetStreamCtx()->WriteAndFinish(FillWriteResponse<UseMigrationProtocol>("initializing", PersQueue::ErrorCode::INITIALIZING), grpc::Status::OK); //CANCELLED
+ }
+ return;
+ } else {
+ if (ConverterFactory == nullptr) {
+ ConverterFactory = std::make_shared<NPersQueue::TTopicNamesConverterFactory>(
+ AppData(ctx)->PQConfig, localCluster
+ );
+ }
+ TopicsHandler = std::make_unique<NPersQueue::TTopicsListController>(
+ ConverterFactory, TVector<TString>{}
+ );
+ const ui64 cookie = NextCookie();
+
+ LOG_DEBUG_S(ctx, NKikimrServices::PQ_WRITE_PROXY, "new session created cookie " << cookie);
+
+ auto ip = ev->Get()->GetStreamCtx()->GetPeerName();
+ TActorId worker = ctx.Register(new TWriteSessionActor<UseMigrationProtocol>(
+ ev->Release().Release(), cookie, SchemeCache, Counters,
+ DatacenterClassifier ? DatacenterClassifier->ClassifyAddress(NAddressClassifier::ExtractAddress(ip)) : "unknown",
+ *TopicsHandler
+ ));
+
+ Sessions[cookie] = worker;
+ }
+}
+
}
}
diff --git a/ydb/services/persqueue_v1/persqueue.cpp b/ydb/services/persqueue_v1/persqueue.cpp
index 4dbb06ae67..9a319d9d78 100644
--- a/ydb/services/persqueue_v1/persqueue.cpp
+++ b/ydb/services/persqueue_v1/persqueue.cpp
@@ -17,58 +17,44 @@ namespace V1 {
static const ui32 PersQueueWriteSessionsMaxCount = 1000000;
static const ui32 PersQueueReadSessionsMaxCount = 100000;
-TGRpcPersQueueService::TGRpcPersQueueService(NActors::TActorSystem *system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const NActors::TActorId& schemeCache,const NActors::TActorId& grpcRequestProxy)
- : ActorSystem(system)
- , Counters(counters)
+TGRpcPersQueueService::TGRpcPersQueueService(NActors::TActorSystem *system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const NActors::TActorId& schemeCache,const NActors::TActorId& grpcRequestProxy, bool rlAllowed)
+ : TGrpcServiceBase<Ydb::PersQueue::V1::PersQueueService>(system, counters, grpcRequestProxy, rlAllowed)
, SchemeCache(schemeCache)
- , GRpcRequestProxy(grpcRequestProxy)
{ }
void TGRpcPersQueueService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ = cq;
+ CQ_ = cq;
InitNewSchemeCacheActor();
- if (ActorSystem->AppData<TAppData>()->PQConfig.GetEnabled()) {
+ if (ActorSystem_->AppData<TAppData>()->PQConfig.GetEnabled()) {
- IActor* writeSvc = NGRpcProxy::V1::CreatePQWriteService(SchemeCache, Counters, PersQueueWriteSessionsMaxCount);
- TActorId actorId = ActorSystem->Register(writeSvc, TMailboxType::HTSwap, ActorSystem->AppData<TAppData>()->UserPoolId);
- ActorSystem->RegisterLocalService(NGRpcProxy::V1::GetPQWriteServiceActorID(), actorId);
+ IActor* writeSvc = NGRpcProxy::V1::CreatePQWriteService(SchemeCache, Counters_, PersQueueWriteSessionsMaxCount);
+ TActorId actorId = ActorSystem_->Register(writeSvc, TMailboxType::HTSwap, ActorSystem_->AppData<TAppData>()->UserPoolId);
+ ActorSystem_->RegisterLocalService(NGRpcProxy::V1::GetPQWriteServiceActorID(), actorId);
- IActor* readSvc = NGRpcProxy::V1::CreatePQReadService(SchemeCache, NewSchemeCache, Counters, PersQueueReadSessionsMaxCount);
- actorId = ActorSystem->Register(readSvc, TMailboxType::HTSwap, ActorSystem->AppData<TAppData>()->UserPoolId);
- ActorSystem->RegisterLocalService(NGRpcProxy::V1::GetPQReadServiceActorID(), actorId);
+ IActor* readSvc = NGRpcProxy::V1::CreatePQReadService(SchemeCache, NewSchemeCache, Counters_, PersQueueReadSessionsMaxCount);
+ actorId = ActorSystem_->Register(readSvc, TMailboxType::HTSwap, ActorSystem_->AppData<TAppData>()->UserPoolId);
+ ActorSystem_->RegisterLocalService(NGRpcProxy::V1::GetPQReadServiceActorID(), actorId);
- IActor* schemaSvc = NGRpcProxy::V1::CreatePQSchemaService(SchemeCache, Counters);
- actorId = ActorSystem->Register(schemaSvc, TMailboxType::HTSwap, ActorSystem->AppData<TAppData>()->UserPoolId);
- ActorSystem->RegisterLocalService(NGRpcProxy::V1::GetPQSchemaServiceActorID(), actorId);
+ IActor* schemaSvc = NGRpcProxy::V1::CreatePQSchemaService(SchemeCache, Counters_);
+ actorId = ActorSystem_->Register(schemaSvc, TMailboxType::HTSwap, ActorSystem_->AppData<TAppData>()->UserPoolId);
+ ActorSystem_->RegisterLocalService(NGRpcProxy::V1::GetPQSchemaServiceActorID(), actorId);
SetupIncomingRequests(std::move(logger));
}
}
-void TGRpcPersQueueService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter = limiter;
-}
-
-bool TGRpcPersQueueService::IncRequest() {
- return Limiter->Inc();
-}
-
-void TGRpcPersQueueService::DecRequest() {
- Limiter->Dec();
-}
-
void TGRpcPersQueueService::InitNewSchemeCacheActor() {
- auto appData = ActorSystem->AppData<TAppData>();
- auto cacheCounters = GetServiceCounters(Counters, "pqproxy|schemecache");
+ auto appData = ActorSystem_->AppData<TAppData>();
+ auto cacheCounters = GetServiceCounters(Counters_, "pqproxy|schemecache");
auto cacheConfig = MakeIntrusive<NSchemeCache::TSchemeCacheConfig>(appData, cacheCounters);
- NewSchemeCache = ActorSystem->Register(CreateSchemeBoardSchemeCache(cacheConfig.Get()),
- TMailboxType::HTSwap, ActorSystem->AppData<TAppData>()->UserPoolId);
+ NewSchemeCache = ActorSystem_->Register(CreateSchemeBoardSchemeCache(cacheConfig.Get()),
+ TMailboxType::HTSwap, ActorSystem_->AppData<TAppData>()->UserPoolId);
}
void TGRpcPersQueueService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
- auto getCounterBlock = NKikimr::NGRpcService::CreateCounterCb(Counters, ActorSystem);
+ auto getCounterBlock = NKikimr::NGRpcService::CreateCounterCb(Counters_, ActorSystem_);
{
using TBiRequest = Ydb::PersQueue::V1::StreamingWriteClientMessage;
@@ -82,11 +68,11 @@ void TGRpcPersQueueService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NKikimrServices::GRPC_SERVER>;
- TStreamGRpcRequest::Start(this, this->GetService(), CQ, &Ydb::PersQueue::V1::PersQueueService::AsyncService::RequestStreamingWrite,
+ TStreamGRpcRequest::Start(this, this->GetService(), CQ_, &Ydb::PersQueue::V1::PersQueueService::AsyncService::RequestStreamingWrite,
[this](TIntrusivePtr<TStreamGRpcRequest::IContext> context) {
- ActorSystem->Send(GRpcRequestProxy, new NKikimr::NGRpcService::TEvStreamPQWriteRequest(context));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NKikimr::NGRpcService::TEvStreamPQWriteRequest(context));
},
- *ActorSystem, "PersQueueService/CreateWriteSession", getCounterBlock("persistent_queue", "WriteSession", true, true), nullptr
+ *ActorSystem_, "PersQueueService/CreateWriteSession", getCounterBlock("persistent_queue", "WriteSession", true, true), nullptr
);
}
@@ -102,11 +88,11 @@ void TGRpcPersQueueService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NKikimrServices::GRPC_SERVER>;
- TStreamGRpcRequest::Start(this, this->GetService(), CQ, &Ydb::PersQueue::V1::PersQueueService::AsyncService::RequestMigrationStreamingRead,
+ TStreamGRpcRequest::Start(this, this->GetService(), CQ_, &Ydb::PersQueue::V1::PersQueueService::AsyncService::RequestMigrationStreamingRead,
[this](TIntrusivePtr<TStreamGRpcRequest::IContext> context) {
- ActorSystem->Send(GRpcRequestProxy, new NKikimr::NGRpcService::TEvStreamPQMigrationReadRequest(context));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NKikimr::NGRpcService::TEvStreamPQMigrationReadRequest(context));
},
- *ActorSystem, "PersQueueService/CreateMigrationReadSession", getCounterBlock("persistent_queue", "MigrationReadSession", true, true), nullptr
+ *ActorSystem_, "PersQueueService/CreateMigrationReadSession", getCounterBlock("persistent_queue", "MigrationReadSession", true, true), nullptr
);
}
@@ -114,35 +100,35 @@ void TGRpcPersQueueService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
#error ADD_REQUEST macro already defined
#endif
#define ADD_REQUEST(NAME, SVC, IN, OUT, ACTION) \
- MakeIntrusive<TGRpcRequest<Ydb::PersQueue::V1::IN, Ydb::PersQueue::V1::OUT, NGRpcService::V1::TGRpcPersQueueService>>(this, this->GetService(), CQ, \
+ MakeIntrusive<TGRpcRequest<Ydb::PersQueue::V1::IN, Ydb::PersQueue::V1::OUT, NGRpcService::V1::TGRpcPersQueueService>>(this, this->GetService(), CQ_, \
[this](NGrpc::IRequestContextBase *ctx) { \
- NGRpcService::ReportGrpcReqToMon(*ActorSystem, ctx->GetPeer()); \
+ NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
ACTION; \
}, &Ydb::PersQueue::V1::SVC::AsyncService::Request ## NAME, \
"PersQueueService/"#NAME, logger, getCounterBlock("persistent_queue", #NAME))->Run();
ADD_REQUEST(GetReadSessionsInfo, PersQueueService, ReadInfoRequest, ReadInfoResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvPQReadInfoRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvPQReadInfoRequest(ctx));
})
ADD_REQUEST(DropTopic, PersQueueService, DropTopicRequest, DropTopicResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvPQDropTopicRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvPQDropTopicRequest(ctx));
})
ADD_REQUEST(CreateTopic, PersQueueService, CreateTopicRequest, CreateTopicResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvPQCreateTopicRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvPQCreateTopicRequest(ctx));
})
ADD_REQUEST(AlterTopic, PersQueueService, AlterTopicRequest, AlterTopicResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvPQAlterTopicRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvPQAlterTopicRequest(ctx));
})
ADD_REQUEST(DescribeTopic, PersQueueService, DescribeTopicRequest, DescribeTopicResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvPQDescribeTopicRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvPQDescribeTopicRequest(ctx));
})
ADD_REQUEST(AddReadRule, PersQueueService, AddReadRuleRequest, AddReadRuleResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvPQAddReadRuleRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvPQAddReadRuleRequest(ctx));
})
ADD_REQUEST(RemoveReadRule, PersQueueService, RemoveReadRuleRequest, RemoveReadRuleResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvPQRemoveReadRuleRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvPQRemoveReadRuleRequest(ctx));
})
#undef ADD_REQUEST
diff --git a/ydb/services/persqueue_v1/persqueue.h b/ydb/services/persqueue_v1/persqueue.h
index df06fd133f..cabcaa18f0 100644
--- a/ydb/services/persqueue_v1/persqueue.h
+++ b/ydb/services/persqueue_v1/persqueue.h
@@ -3,11 +3,9 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <ydb/public/api/grpc/draft/ydb_persqueue_v1.grpc.pb.h>
-#include <ydb/public/api/grpc/draft/ydb_topic_v1.grpc.pb.h>
-
#include <library/cpp/grpc/server/grpc_server.h>
-
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
@@ -15,33 +13,24 @@ namespace NGRpcService {
namespace V1 {
class TGRpcPersQueueService
- : public NGrpc::TGrpcServiceBase<Ydb::PersQueue::V1::PersQueueService>
+ : public TGrpcServiceBase<Ydb::PersQueue::V1::PersQueueService>
{
public:
- TGRpcPersQueueService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const NActors::TActorId& schemeCache, const NActors::TActorId& grpcRequestProxy);
+ TGRpcPersQueueService(NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const NActors::TActorId& schemeCache, const NActors::TActorId& grpcRequestProxy, bool rlAllowed);
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
void StopService() noexcept override;
using NGrpc::TGrpcServiceBase<Ydb::PersQueue::V1::PersQueueService>::GetService;
- bool IncRequest();
- void DecRequest();
private:
- void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
+ void SetupIncomingRequests(NGrpc::TLoggerPtr logger) override;
void InitNewSchemeCacheActor();
- NActors::TActorSystem* ActorSystem;
- grpc::ServerCompletionQueue* CQ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
- NGrpc::TGlobalLimiter* Limiter = nullptr;
NActors::TActorId SchemeCache;
NActors::TActorId NewSchemeCache;
- NActors::TActorId GRpcRequestProxy;
};
} // namespace V1
diff --git a/ydb/services/persqueue_v1/persqueue_common_ut.cpp b/ydb/services/persqueue_v1/persqueue_common_ut.cpp
index a28ed47235..c3b3a2a616 100644
--- a/ydb/services/persqueue_v1/persqueue_common_ut.cpp
+++ b/ydb/services/persqueue_v1/persqueue_common_ut.cpp
@@ -277,38 +277,42 @@ Y_UNIT_TEST_SUITE(TPersQueueCommonTest) {
serverMessage.server_message_case(), serverMessage);
}
- void TestWriteWithRateLimiter(TPersQueueV1TestServerWithRateLimiter& server) {
+ void TestWriteWithRateLimiter(TPersQueueV1TestServerWithRateLimiter& server, const TDuration& minTime) {
const std::vector<TString> differentTopicPathsTypes = {
"account1/topic", // without folder
"account2/folder/topic", // with folder
"account3/folder1/folder2/topic", // complex
};
- const TString data = TString("12345") * 100;
+ const TString data = TString("1234567890") * 120000; // 1200000 bytes
for (const TString &topicPath : differentTopicPathsTypes) {
- server.CreateTopicWithQuota(topicPath);
-
+ server.CreateTopicWithQuota(topicPath, true, 10000000);
auto driver = server.Server->AnnoyingClient->GetDriver();
+ auto start = TInstant::Now();
- {
- auto writer = CreateSimpleWriter(*driver, server.TenantModeEnabled() ? "/Root/PQ/" + topicPath : topicPath, "123");
+ for (ui32 i = 0; i < 7; ++i) {
+ auto writer = CreateSimpleWriter(*driver, server.TenantModeEnabled() ? "/Root/PQ/" + topicPath : topicPath, TStringBuilder() << "123" << i, {}, "raw");
writer->Write(data);
bool res = writer->Close(TDuration::Seconds(10));
UNIT_ASSERT(res);
}
+
+ Cerr << "DURATION " << (TInstant::Now() - start) << "\n";
+ UNIT_ASSERT(TInstant::Now() - start > minTime);
}
}
Y_UNIT_TEST(TestWriteWithRateLimiterWithBlobsRateLimit) {
TPersQueueV1TestServerWithRateLimiter server;
server.InitAll(NKikimrPQ::TPQConfig::TQuotingConfig::WRITTEN_BLOB_SIZE);
- server.EnablePQLogs({NKikimrServices::PERSQUEUE}, NLog::EPriority::PRI_INFO);
- TestWriteWithRateLimiter(server);
+ server.EnablePQLogs({NKikimrServices::PERSQUEUE}, NLog::EPriority::PRI_DEBUG);
+ TestWriteWithRateLimiter(server, TDuration::MilliSeconds(5200));
}
Y_UNIT_TEST(TestWriteWithRateLimiterWithUserPayloadRateLimit) {
TPersQueueV1TestServerWithRateLimiter server;
server.InitAll(NKikimrPQ::TPQConfig::TQuotingConfig::USER_PAYLOAD_SIZE);
- TestWriteWithRateLimiter(server);
+ server.EnablePQLogs({NKikimrServices::PERSQUEUE}, NLog::EPriority::PRI_DEBUG);
+ TestWriteWithRateLimiter(server, TDuration::MilliSeconds(2500));
}
void TestRateLimiterLimitsWrite(TPersQueueV1TestServerWithRateLimiter& server) {
@@ -321,7 +325,7 @@ Y_UNIT_TEST_SUITE(TPersQueueCommonTest) {
// Warm up write
{
- auto writer = CreateSimpleWriter(*driver, server.TenantModeEnabled() ? "/Root/PQ/" + topicPath : topicPath, "123");
+ auto writer = CreateSimpleWriter(*driver, server.TenantModeEnabled() ? "/Root/PQ/" + topicPath : topicPath, "123", {}, "raw");
writer->Write(data);
bool res = writer->Close(TDuration::Seconds(10));
@@ -334,7 +338,7 @@ Y_UNIT_TEST_SUITE(TPersQueueCommonTest) {
{
- auto writer = CreateSimpleWriter(*driver, server.TenantModeEnabled() ? "/Root/PQ/" + topicPath : topicPath, "123");
+ auto writer = CreateSimpleWriter(*driver, server.TenantModeEnabled() ? "/Root/PQ/" + topicPath : topicPath, "123", {}, "raw");
writer->Write(data);
bool res = writer->Close(TDuration::Seconds(10));
@@ -342,7 +346,7 @@ Y_UNIT_TEST_SUITE(TPersQueueCommonTest) {
}
{
- auto writer = CreateSimpleWriter(*driver, server.TenantModeEnabled() ? "/Root/PQ/" + topicPath : topicPath, "123");
+ auto writer = CreateSimpleWriter(*driver, server.TenantModeEnabled() ? "/Root/PQ/" + topicPath : topicPath, "123", {}, "raw");
writer->Write(data);
bool res = writer->Close(TDuration::Seconds(10));
@@ -361,6 +365,22 @@ Y_UNIT_TEST_SUITE(TPersQueueCommonTest) {
}
}
+
+ Y_UNIT_TEST(TestLimiterLimitsWithBlobsRateLimit) {
+ TPersQueueV1TestServerWithRateLimiter server;
+ server.InitAll(NKikimrPQ::TPQConfig::TQuotingConfig::WRITTEN_BLOB_SIZE);
+ server.EnablePQLogs({NKikimrServices::PERSQUEUE}, NLog::EPriority::PRI_DEBUG);
+ TestRateLimiterLimitsWrite(server);
+ }
+
+ Y_UNIT_TEST(TestLimiterLimitsWithUserPayloadRateLimit) {
+ TPersQueueV1TestServerWithRateLimiter server;
+ server.InitAll(NKikimrPQ::TPQConfig::TQuotingConfig::USER_PAYLOAD_SIZE);
+ server.EnablePQLogs({NKikimrServices::PERSQUEUE}, NLog::EPriority::PRI_DEBUG);
+
+ TestRateLimiterLimitsWrite(server);
+ }
+
}
}
diff --git a/ydb/services/persqueue_v1/persqueue_compat_ut.cpp b/ydb/services/persqueue_v1/persqueue_compat_ut.cpp
index 93e2bf4f1e..b396f149c2 100644
--- a/ydb/services/persqueue_v1/persqueue_compat_ut.cpp
+++ b/ydb/services/persqueue_v1/persqueue_compat_ut.cpp
@@ -39,7 +39,7 @@ public:
);
Server->AnnoyingClient->CreateTopicNoLegacy(
- "/Root/LbCommunal/account/.topic2/mirrored-from-dc2", 1, true, false, {}, {}, "account"
+ "/Root/LbCommunal/account/topic2-mirrored-from-dc2", 1, true, false, {}, {}, "account"
);
Server->AnnoyingClient->CreateConsumer("test-consumer");
InitPQLib();
@@ -148,6 +148,7 @@ Y_UNIT_TEST_SUITE(TPQCompatTest) {
Y_UNIT_TEST(BadTopics) {
TPQv1CompatTestBase testServer;
testServer.CreateTopic("/Root/PQ/some-topic", "", true, true);
+ testServer.CreateTopic("/Root/PQ/some-topic-mirrored-from-dc2", "", false, true);
testServer.CreateTopic("/Root/PQ/.some-topic/mirrored-from-dc2", "", false, true);
//Bad dc
@@ -162,19 +163,22 @@ Y_UNIT_TEST_SUITE(TPQCompatTest) {
// Local topic with client write disabled
testServer.CreateTopic("/Root/LbCommunal/some-topic", "account", false, true);
- // Non-local topic with client write disabled
+ // Non-local topic with client write enabled
+ testServer.CreateTopic("/Root/LbCommunal/some-topic-mirrored-from-dc2", "account", true, true);
testServer.CreateTopic("/Root/LbCommunal/.some-topic/mirrored-from-dc2", "account", true, true);
// No account
testServer.CreateTopic("/Root/LbCommunal/some-topic", "", true, true);
// Mirrored-from local
testServer.CreateTopic("/Root/LbCommunal/.some-topic/mirrored-from-dc1", "account", false, true);
+ testServer.CreateTopic("/Root/LbCommunal/some-topic-mirrored-from-dc1", "account", false, true);
// Bad mirrored names
testServer.CreateTopic("/Root/LbCommunal/.some-topic/some-topic", "account", false, true);
// Mirrored-from non-existing
testServer.CreateTopic("/Root/LbCommunal/.some-topic/mirrored-from-dc777", "account", false, true);
+ testServer.CreateTopic("/Root/LbCommunal/some-topic-mirrored-from-dc777", "account", false, true);
// Just to verify it even creates anything at all
- testServer.CreateTopic("/Root/LbCommunal/.some-topic/mirrored-from-dc2", "account", false, false);
+ testServer.CreateTopic("/Root/LbCommunal/account/some-topic-mirrored-from-dc2", "account", false, false);
}
}
diff --git a/ydb/services/persqueue_v1/persqueue_new_schemecache_ut.cpp b/ydb/services/persqueue_v1/persqueue_new_schemecache_ut.cpp
index 1dfaa8a31e..fe04c78c36 100644
--- a/ydb/services/persqueue_v1/persqueue_new_schemecache_ut.cpp
+++ b/ydb/services/persqueue_v1/persqueue_new_schemecache_ut.cpp
@@ -620,7 +620,7 @@ namespace NKikimr::NPersQueueTests {
auto* rr = addRuleRequest.mutable_read_rule();
rr->set_consumer_name("goodUser");
rr->set_version(0);
- rr->set_important(true);
+ rr->set_important(false);
rr->set_supported_format(TopicSettings::FORMAT_BASE);
rr->add_supported_codecs(CODEC_GZIP);
auto status = stub->AddReadRule(&grpcContext, addRuleRequest, &addRuleResponse);
@@ -694,7 +694,7 @@ namespace NKikimr::NPersQueueTests {
auto* rr = addRuleRequest.mutable_read_rule();
rr->set_consumer_name("goodUser");
rr->set_version(0);
- rr->set_important(true);
+ rr->set_important(false);
rr->set_supported_format(TopicSettings::FORMAT_BASE);
rr->add_supported_codecs(CODEC_GZIP);
auto status = stub->AddReadRule(&grpcContext, addRuleRequest, &addRuleResponse);
diff --git a/ydb/services/persqueue_v1/persqueue_ut.cpp b/ydb/services/persqueue_v1/persqueue_ut.cpp
index eb86b28ce0..d334982ad1 100644
--- a/ydb/services/persqueue_v1/persqueue_ut.cpp
+++ b/ydb/services/persqueue_v1/persqueue_ut.cpp
@@ -4,6 +4,7 @@
#include <ydb/services/persqueue_v1/ut/rate_limiter_test_setup.h>
#include <ydb/services/persqueue_v1/ut/test_utils.h>
#include <ydb/services/persqueue_v1/ut/persqueue_test_fixture.h>
+#include <ydb/services/persqueue_v1/ut/functions_executor_wrapper.h>
#include <ydb/core/base/appdata.h>
#include <ydb/core/mon/sync_http_mon.h>
@@ -20,6 +21,7 @@
#include <library/cpp/testing/unittest/tests_data.h>
#include <library/cpp/testing/unittest/registar.h>
+#include <library/cpp/digest/md5/md5.h>
#include <library/cpp/json/json_reader.h>
#include <library/cpp/monlib/dynamic_counters/encode.h>
#include <google/protobuf/text_format.h>
@@ -34,7 +36,7 @@
#include <ydb/public/api/grpc/draft/ydb_persqueue_v1.grpc.pb.h>
#include <ydb/public/api/protos/persqueue_error_codes_v1.pb.h>
-#include <ydb/public/api/grpc/draft/ydb_topic_v1.grpc.pb.h>
+#include <ydb/public/api/grpc/ydb_topic_v1.grpc.pb.h>
#include <ydb/public/sdk/cpp/client/ydb_persqueue_public/persqueue.h>
#include <ydb/public/sdk/cpp/client/ydb_persqueue_core/ut/ut_utils/data_plane_helpers.h>
@@ -242,6 +244,18 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
UNIT_ASSERT(resp.assigned().partition() == 0);
assignId = resp.assigned().assign_id();
+
+ req.Clear();
+ req.mutable_start_read()->mutable_topic()->set_path("acc/topic1");
+ req.mutable_start_read()->set_cluster("dc1");
+ req.mutable_start_read()->set_partition(0);
+ req.mutable_start_read()->set_assign_id(354235); // invalid id should receive no reaction
+
+ req.mutable_start_read()->set_read_offset(10);
+ UNIT_ASSERT_C(readStream->Write(req), "write fail");
+
+ Sleep(TDuration::MilliSeconds(100));
+
req.Clear();
req.mutable_start_read()->mutable_topic()->set_path("acc/topic1");
req.mutable_start_read()->set_cluster("dc1");
@@ -409,6 +423,16 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
UNIT_ASSERT((partition_ids == TVector<i64>{0, 1}));
assignId = resp.start_partition_session_request().partition_session().partition_session_id();
+
+ req.Clear();
+
+ // invalid id should receive no reaction
+ req.mutable_start_partition_session_response()->set_partition_session_id(1124134);
+
+ UNIT_ASSERT_C(readStream->Write(req), "write fail");
+
+ Sleep(TDuration::MilliSeconds(100));
+
req.Clear();
req.mutable_start_partition_session_response()->set_partition_session_id(assignId);
@@ -638,6 +662,351 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
}
}
+ Y_UNIT_TEST(TopicServiceReadBudget) {
+ TPersQueueV1TestServer server;
+ SET_LOCALS;
+ MAKE_INSECURE_STUB(Ydb::Topic::V1::TopicService);
+ server.EnablePQLogs({NKikimrServices::PQ_METACACHE, NKikimrServices::PQ_READ_PROXY});
+ server.EnablePQLogs({NKikimrServices::KQP_PROXY}, NLog::EPriority::PRI_EMERG);
+ server.EnablePQLogs({NKikimrServices::FLAT_TX_SCHEMESHARD}, NLog::EPriority::PRI_ERROR);
+
+ auto readStream = StubP_ -> StreamRead(&rcontext);
+ UNIT_ASSERT(readStream);
+
+ auto driver = pqClient -> GetDriver();
+ auto writer = CreateSimpleWriter(*driver, "acc/topic1", "source", /*partitionGroup=*/{}, /*codec=*/{"raw"});
+
+ Ydb::Topic::StreamReadMessage::FromClient req;
+ Ydb::Topic::StreamReadMessage::FromServer resp;
+
+ auto WriteSome = [&](ui64 size) {
+ TString data(size, 'x');
+ UNIT_ASSERT(writer->Write(data));
+ };
+
+ i64 budget = 0;
+ auto AwaitExpected = [&](int count) {
+ while (count > 0) {
+ UNIT_ASSERT(readStream->Read(&resp));
+ Cerr << "Got read response " << resp << "\n";
+ UNIT_ASSERT_C(resp.server_message_case() == Ydb::Topic::StreamReadMessage::FromServer::kReadResponse,
+ resp);
+ UNIT_ASSERT(resp.read_response().partition_data_size() == 1);
+ UNIT_ASSERT(resp.read_response().partition_data(0).batches_size() == 1);
+ int got = resp.read_response().partition_data(0).batches(0).message_data_size();
+ Cerr << "TAGX got response with size " << resp.read_response().bytes_size() << " with " << got << ", awaited for " << count << " more\n";
+ budget -= resp.read_response().bytes_size();
+ Cerr << "TAGX Budget deced, now " << budget << "\n";
+ UNIT_ASSERT(got >= 1 && got <= count);
+ count -= got;
+ }
+ };
+
+ // init read session
+ {
+ req.mutable_init_request()->add_topics_read_settings()->set_path("acc/topic1");
+ req.mutable_init_request()->set_consumer("user");
+
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ UNIT_ASSERT(readStream->Read(&resp));
+ Cerr << "===Got response: " << resp.ShortDebugString() << Endl;
+ UNIT_ASSERT(resp.server_message_case() == Ydb::Topic::StreamReadMessage::FromServer::kInitResponse);
+ }
+
+ WriteSome(10_KB);
+
+ req.Clear();
+ req.mutable_read_request()->set_bytes_size(50_KB);
+ budget += 50_KB;
+ Cerr << "TAGX Budget inced with 50k, now " << budget << "\n";
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+
+ // await and confirm CreatePartitionStreamRequest from server
+ i64 assignId = 0;
+ {
+ // lock partition
+ UNIT_ASSERT(readStream->Read(&resp));
+ UNIT_ASSERT(resp.server_message_case() ==
+ Ydb::Topic::StreamReadMessage::FromServer::kStartPartitionSessionRequest);
+ UNIT_ASSERT_VALUES_EQUAL(resp.start_partition_session_request().partition_session().path(), "acc/topic1");
+ UNIT_ASSERT(resp.start_partition_session_request().partition_session().partition_id() == 0);
+
+ assignId = resp.start_partition_session_request().partition_session().partition_session_id();
+ req.Clear();
+ req.mutable_start_partition_session_response()->set_partition_session_id(assignId);
+
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ }
+
+ AwaitExpected(1);
+
+ for (int i = 0; i < 3; ++i) {
+ WriteSome(10_KB);
+ }
+
+ AwaitExpected(3);
+
+ for (int i = 0; i < 6; ++i) {
+ WriteSome(10_KB);
+ }
+
+ AwaitExpected(1);
+
+ req.Clear();
+ req.mutable_read_request()->set_bytes_size(25_KB);
+ budget += 25_KB;
+ Cerr << "TAGX Budget inced with 25k, now " << budget << "\n";
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+
+ AwaitExpected(3); //why 3? 2!
+
+ req.Clear();
+ req.mutable_read_request()->set_bytes_size(7_KB);
+ budget += 7_KB;
+ Cerr << "TAGX Budget inced with 7k, now " << budget << "\n";
+
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+
+ AwaitExpected(1);
+
+ req.Clear();
+ req.mutable_read_request()->set_bytes_size(14_KB);
+ budget += 14_KB;
+ Cerr << "TAGX Budget inced with 14k, now " << budget << "\n";
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+
+ AwaitExpected(1);
+
+ UNIT_ASSERT(writer->Close(TDuration::Seconds(10)));
+ } // Y_UNIT_TEST(TopicServiceReadBudget)
+
+ Y_UNIT_TEST(TopicServiceSimpleHappyWrites) {
+ NPersQueue::TTestServer server;
+ server.EnableLogs({NKikimrServices::PQ_READ_PROXY, NKikimrServices::BLACKBOX_VALIDATOR });
+ TString topic3 = "acc/topic3";
+
+ std::shared_ptr<grpc::Channel> Channel_;
+ std::unique_ptr<Ydb::Topic::V1::TopicService::Stub> TopicStubP_;
+
+ {
+ Channel_ = grpc::CreateChannel("localhost:" + ToString(server.GrpcPort), grpc::InsecureChannelCredentials());
+ TopicStubP_ = Ydb::Topic::V1::TopicService::NewStub(Channel_);
+ }
+
+ {
+ Ydb::Topic::CreateTopicRequest request;
+ Ydb::Topic::CreateTopicResponse response;
+ request.set_path(TStringBuilder() << "/Root/PQ/rt3.dc1--acc--topic3");
+
+ request.mutable_partitioning_settings()->set_min_active_partitions(2);
+ request.mutable_retention_period()->set_seconds(TDuration::Days(1).Seconds());
+ (*request.mutable_attributes())["_max_partition_storage_size"] = "1000";
+ request.set_partition_write_speed_bytes_per_second(1000);
+ request.set_partition_write_burst_bytes(1000);
+
+ request.mutable_supported_codecs()->add_codecs(Ydb::Topic::CODEC_RAW);
+ request.mutable_supported_codecs()->add_codecs(Ydb::Topic::CODEC_CUSTOM + 42);
+
+ auto consumer = request.add_consumers();
+ consumer->set_name("first-consumer");
+ consumer->set_important(false);
+ grpc::ClientContext rcontext;
+
+ auto status = TopicStubP_->CreateTopic(&rcontext, request, &response);
+
+ UNIT_ASSERT(status.ok());
+ Ydb::Topic::CreateTopicResult res;
+ response.operation().result().UnpackTo(&res);
+ Cerr << response << "\n" << res << "\n";
+ UNIT_ASSERT_VALUES_EQUAL(response.operation().status(), Ydb::StatusIds::SUCCESS);
+
+ server.AnnoyingClient->WaitTopicInit(topic3);
+ server.AnnoyingClient->AddTopic(topic3);
+ }
+
+ grpc::ClientContext rcontextWrite1;
+ auto writeStream1 = TopicStubP_->StreamWrite(&rcontextWrite1);
+ UNIT_ASSERT(writeStream1);
+
+ grpc::ClientContext rcontextWrite2;
+ auto writeStream2 = TopicStubP_->StreamWrite(&rcontextWrite2);
+ UNIT_ASSERT(writeStream2);
+
+ grpc::ClientContext rcontext;
+ auto readStream = TopicStubP_ -> StreamRead(&rcontext);
+ UNIT_ASSERT(readStream);
+
+ // init write session 1
+ {
+ Ydb::Topic::StreamWriteMessage::FromClient req;
+ Ydb::Topic::StreamWriteMessage::FromServer resp;
+
+ req.mutable_init_request()->set_path("acc/topic3");
+
+ req.mutable_init_request()->set_producer_id("A");
+ req.mutable_init_request()->set_message_group_id("A");
+
+ if (!writeStream1->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ UNIT_ASSERT(writeStream1->Read(&resp));
+ Cerr << "===Got response: " << resp.ShortDebugString() << Endl;
+ UNIT_ASSERT(resp.server_message_case() == Ydb::Topic::StreamWriteMessage::FromServer::kInitResponse);
+ //send some reads
+ req.Clear();
+
+ auto* write = req.mutable_write_request();
+ write->set_codec(Ydb::Topic::CODEC_RAW);
+
+ for (ui32 i = 0; i < 10; ++i) {
+ auto* msg = write->add_messages();
+ msg->set_seq_no(i + 1);
+ msg->set_data(TString("x") * (i + 1));
+ *msg->mutable_created_at() = ::google::protobuf::util::TimeUtil::MillisecondsToTimestamp(TInstant::Now().MilliSeconds());
+ msg->set_uncompressed_size(msg->data().size());
+ }
+ if (!writeStream1->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ UNIT_ASSERT(writeStream1->Read(&resp));
+ Cerr << "===Got response: " << resp.ShortDebugString() << Endl;
+ UNIT_ASSERT(resp.server_message_case() == Ydb::Topic::StreamWriteMessage::FromServer::kWriteResponse);
+ }
+
+ // init write session 2
+ {
+ Ydb::Topic::StreamWriteMessage::FromClient req;
+ Ydb::Topic::StreamWriteMessage::FromServer resp;
+
+ req.mutable_init_request()->set_path("acc/topic3");
+
+ req.mutable_init_request()->set_producer_id("B");
+ req.mutable_init_request()->set_message_group_id("B");
+
+ if (!writeStream2->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ UNIT_ASSERT(writeStream2->Read(&resp));
+ Cerr << "===Got response: " << resp.ShortDebugString() << Endl;
+ UNIT_ASSERT(resp.server_message_case() == Ydb::Topic::StreamWriteMessage::FromServer::kInitResponse);
+ //send some reads
+ req.Clear();
+
+ auto* write = req.mutable_write_request();
+ write->set_codec(Ydb::Topic::CODEC_CUSTOM + 42);
+
+ for (ui32 i = 0; i < 10; ++i) {
+ auto* msg = write->add_messages();
+ msg->set_seq_no(i + 1);
+ msg->set_data(TString("y") * (i + 1));
+ *msg->mutable_created_at() = ::google::protobuf::util::TimeUtil::MillisecondsToTimestamp(TInstant::Now().MilliSeconds());
+ msg->set_uncompressed_size(msg->data().size());
+ }
+ if (!writeStream2->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ UNIT_ASSERT(writeStream2->Read(&resp));
+ Cerr << "===Got response: " << resp.ShortDebugString() << Endl;
+ UNIT_ASSERT(resp.server_message_case() == Ydb::Topic::StreamWriteMessage::FromServer::kWriteResponse);
+ }
+
+ // init 1st read session
+ {
+ Ydb::Topic::StreamReadMessage::FromClient req;
+ Ydb::Topic::StreamReadMessage::FromServer resp;
+
+ req.mutable_init_request()->add_topics_read_settings()->set_path("acc/topic3");
+
+ req.mutable_init_request()->set_consumer("user");
+
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ UNIT_ASSERT(readStream->Read(&resp));
+ Cerr << "===Got response: " << resp.ShortDebugString() << Endl;
+ UNIT_ASSERT(resp.server_message_case() == Ydb::Topic::StreamReadMessage::FromServer::kInitResponse);
+ //send some reads
+ req.Clear();
+ req.mutable_read_request()->set_bytes_size(256);
+ for (ui32 i = 0; i < 10; ++i) {
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ }
+ }
+
+ // await both CreatePartitionStreamRequest from Server
+ // confirm both
+ ui64 assignId = 0;
+ {
+ Ydb::Topic::StreamReadMessage::FromClient req;
+ Ydb::Topic::StreamReadMessage::FromServer resp;
+
+ TVector<i64> partition_ids;
+ //lock partition
+ UNIT_ASSERT(readStream->Read(&resp));
+ UNIT_ASSERT(resp.server_message_case() == Ydb::Topic::StreamReadMessage::FromServer::kStartPartitionSessionRequest);
+ UNIT_ASSERT(resp.start_partition_session_request().partition_session().path() == "acc/topic3");
+ partition_ids.push_back(resp.start_partition_session_request().partition_session().partition_id());
+
+ assignId = resp.start_partition_session_request().partition_session().partition_session_id();
+ req.Clear();
+ req.mutable_start_partition_session_response()->set_partition_session_id(assignId);
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+
+ resp.Clear();
+ UNIT_ASSERT(readStream->Read(&resp));
+ UNIT_ASSERT(resp.server_message_case() == Ydb::Topic::StreamReadMessage::FromServer::kStartPartitionSessionRequest);
+ UNIT_ASSERT(resp.start_partition_session_request().partition_session().path() == "acc/topic3");
+ partition_ids.push_back(resp.start_partition_session_request().partition_session().partition_id());
+
+ std::sort(partition_ids.begin(), partition_ids.end());
+ UNIT_ASSERT((partition_ids == TVector<i64>{0, 1}));
+
+ assignId = resp.start_partition_session_request().partition_session().partition_session_id();
+
+ req.Clear();
+
+ // invalid id should receive no reaction
+ req.mutable_start_partition_session_response()->set_partition_session_id(1124134);
+
+ UNIT_ASSERT_C(readStream->Write(req), "write fail");
+
+ Sleep(TDuration::MilliSeconds(100));
+
+ req.Clear();
+ req.mutable_start_partition_session_response()->set_partition_session_id(assignId);
+
+ if (!readStream->Write(req)) {
+ ythrow yexception() << "write fail";
+ }
+ }
+
+ Ydb::Topic::StreamReadMessage::FromServer resp;
+ UNIT_ASSERT(readStream->Read(&resp));
+ Cerr << "Got read response " << resp << "\n";
+ UNIT_ASSERT_C(resp.server_message_case() == Ydb::Topic::StreamReadMessage::FromServer::kReadResponse, resp);
+
+ // second partition data goes to separate response - remove when reads return data from many partitions
+ UNIT_ASSERT(readStream->Read(&resp));
+ Cerr << "Got read response " << resp << "\n";
+ UNIT_ASSERT_C(resp.server_message_case() == Ydb::Topic::StreamReadMessage::FromServer::kReadResponse, resp);
+ }
+
void SetupWriteSessionImpl(bool rr) {
NPersQueue::TTestServer server{PQSettings(0, 2, rr), false};
server.ServerSettings.SetEnableSystemViews(false);
@@ -1652,18 +2021,114 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
}
}
- Y_UNIT_TEST(CheckKillBalancer) {
+ Y_UNIT_TEST(EventBatching) {
NPersQueue::TTestServer server;
server.EnableLogs({ NKikimrServices::PQ_WRITE_PROXY, NKikimrServices::PQ_READ_PROXY});
PrepareForGrpc(server);
- TPQDataWriter writer("source1", server);
+ auto driver = server.AnnoyingClient->GetDriver();
+ auto decompressor = CreateSyncExecutorWrapper();
+
+ NYdb::NPersQueue::TReadSessionSettings settings;
+ settings.ConsumerName("shared/user").AppendTopics(SHORT_TOPIC_NAME).ReadOriginal({"dc1"});
+ settings.DecompressionExecutor(decompressor);
+ auto reader = CreateReader(*driver, settings);
+
+ for (ui32 i = 0; i < 2; ++i) {
+ auto msg = reader->GetEvent(true, 1);
+ UNIT_ASSERT(msg);
+
+ auto ev = std::get_if<NYdb::NPersQueue::TReadSessionEvent::TCreatePartitionStreamEvent>(&*msg);
+ UNIT_ASSERT(ev);
+
+ ev->Confirm();
+ }
+
+ auto writeDataAndWaitForDecompressionTasks = [&](const TString &message,
+ const TString &sourceId,
+ ui32 partitionId,
+ size_t tasksCount) {
+ //
+ // write data
+ //
+ auto writer = CreateSimpleWriter(*driver, SHORT_TOPIC_NAME, sourceId, partitionId, "raw");
+ writer->Write(message, 1);
+
+ writer->Close(TDuration::Seconds(10));
+ //
+ // wait for decompression tasks
+ //
+ while (decompressor->GetFuncsCount() < tasksCount) {
+ Sleep(TDuration::Seconds(1));
+ }
+ };
+
+ //
+ // stream #1: [0-, 2-]
+ // stream #2: [1-, 3-]
+ // session : []
+ //
+ writeDataAndWaitForDecompressionTasks("111", "source_id_0", 1, 1); // 0
+ writeDataAndWaitForDecompressionTasks("333", "source_id_1", 2, 2); // 1
+ writeDataAndWaitForDecompressionTasks("222", "source_id_2", 1, 3); // 2
+ writeDataAndWaitForDecompressionTasks("444", "source_id_3", 2, 4); // 3
+
+ //
+ // stream #1: [0+, 2+]
+ // stream #2: [1+, 3+]
+ // session : [(#1: 1), (#2: 1), (#1, 1)]
+ //
+ decompressor->StartFuncs({0, 3, 1, 2});
+
+ auto messages = reader->GetEvents(true);
+ UNIT_ASSERT_VALUES_EQUAL(messages.size(), 3);
+
+ {
+ auto ev = std::get_if<NYdb::NPersQueue::TReadSessionEvent::TDataReceivedEvent>(&messages[0]);
+ UNIT_ASSERT(ev);
+ UNIT_ASSERT_VALUES_EQUAL(ev->GetMessages().size(), 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(ev->GetMessages()[0].GetData(), "111");
+ }
+
+ {
+ auto ev = std::get_if<NYdb::NPersQueue::TReadSessionEvent::TDataReceivedEvent>(&messages[1]);
+ UNIT_ASSERT(ev);
+ UNIT_ASSERT_VALUES_EQUAL(ev->GetMessages().size(), 2);
+
+ UNIT_ASSERT_VALUES_EQUAL(ev->GetMessages()[0].GetData(), "333");
+ UNIT_ASSERT_VALUES_EQUAL(ev->GetMessages()[1].GetData(), "444");
+ }
+
+ {
+ auto ev = std::get_if<NYdb::NPersQueue::TReadSessionEvent::TDataReceivedEvent>(&messages[2]);
+ UNIT_ASSERT(ev);
+ UNIT_ASSERT_VALUES_EQUAL(ev->GetMessages().size(), 1);
+
+ UNIT_ASSERT_VALUES_EQUAL(ev->GetMessages()[0].GetData(), "222");
+ }
+
+ //
+ // stream #1: []
+ // stream #2: []
+ // session : []
+ //
+ auto msg = reader->GetEvent(false);
+ UNIT_ASSERT(!msg);
+ }
+
+ Y_UNIT_TEST(CheckKillBalancer) {
+ NPersQueue::TTestServer server;
+ server.EnableLogs({ NKikimrServices::PQ_WRITE_PROXY, NKikimrServices::PQ_READ_PROXY});
+ PrepareForGrpc(server);
auto driver = server.AnnoyingClient->GetDriver();
+ auto decompressor = CreateThreadPoolExecutorWrapper(2);
NYdb::NPersQueue::TReadSessionSettings settings;
settings.ConsumerName("shared/user").AppendTopics(SHORT_TOPIC_NAME).ReadOriginal({"dc1"});
+ settings.DecompressionExecutor(decompressor);
auto reader = CreateReader(*driver, settings);
@@ -1681,18 +2146,31 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
}
+ for (ui32 i = 0; i < 10; ++i) {
+ auto writer = CreateSimpleWriter(*driver, SHORT_TOPIC_NAME, TStringBuilder() << "source" << i);
+ bool res = writer->Write("valuevaluevalue", 1);
+ UNIT_ASSERT(res);
+ res = writer->Close(TDuration::Seconds(10));
+ UNIT_ASSERT(res);
+ }
- server.AnnoyingClient->RestartBalancerTablet(server.CleverServer->GetRuntime(), "rt3.dc1--topic1");
- Cerr << "Balancer killed\n";
- ui32 createEv = 0, destroyEv = 0;
- for (ui32 i = 0; i < 4; ++i) {
+ ui32 createEv = 0, destroyEv = 0, dataEv = 0;
+ std::vector<ui32> gotDestroy{0, 0};
+
+ auto doRead = [&]() {
auto msg = reader->GetEvent(true, 1);
UNIT_ASSERT(msg);
Cerr << "Got message: " << NYdb::NPersQueue::DebugString(*msg) << "\n";
+
+ if (std::get_if<NYdb::NPersQueue::TReadSessionEvent::TDataReceivedEvent>(&*msg)) {
+ ++dataEv;
+ return;
+ }
+
auto ev1 = std::get_if<NYdb::NPersQueue::TReadSessionEvent::TPartitionStreamClosedEvent>(&*msg);
auto ev2 = std::get_if<NYdb::NPersQueue::TReadSessionEvent::TCreatePartitionStreamEvent>(&*msg);
@@ -1700,15 +2178,47 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
if (ev1) {
++destroyEv;
+ UNIT_ASSERT(ev1->GetPartitionStream()->GetPartitionId() < 2);
+ gotDestroy[ev1->GetPartitionStream()->GetPartitionId()]++;
}
if (ev2) {
- ev2->Confirm();
+ ev2->Confirm(ev2->GetEndOffset());
++createEv;
+ UNIT_ASSERT(ev2->GetPartitionStream()->GetPartitionId() < 2);
+ UNIT_ASSERT_VALUES_EQUAL(gotDestroy[ev2->GetPartitionStream()->GetPartitionId()], 1);
}
+ };
+
+ decompressor->StartFuncs({0, 1, 2, 3, 4});
+
+ for (ui32 i = 0; i < 5; ++i) {
+ doRead();
}
- UNIT_ASSERT(createEv == 2);
- UNIT_ASSERT(destroyEv == 2);
+
+ UNIT_ASSERT_VALUES_EQUAL(dataEv, 5);
+
+ server.AnnoyingClient->RestartBalancerTablet(server.CleverServer->GetRuntime(), "rt3.dc1--topic1");
+ Cerr << "Balancer killed\n";
+
+ Sleep(TDuration::Seconds(5));
+
+ for (ui32 i = 0; i < 4; ++i) {
+ doRead();
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(createEv, 2);
+ UNIT_ASSERT_VALUES_EQUAL(destroyEv, 2);
+
+ UNIT_ASSERT_VALUES_EQUAL(dataEv, 5);
+
+ decompressor->StartFuncs({5, 6, 7, 8, 9});
+
+ Sleep(TDuration::Seconds(5));
+
+ auto msg = reader->GetEvent(false, 1);
+
+ UNIT_ASSERT(!msg);
UNIT_ASSERT(!reader->WaitEvent().Wait(TDuration::Seconds(1)));
}
@@ -3106,7 +3616,6 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
}
SourceIdMaxCounts: 6000000
}
- TopicName: "rt3.dc1--acc--topic3"
Version: 6
LocalDC: true
RequireAuthWrite: true
@@ -3129,8 +3638,8 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
Codecs: "lzop"
Codecs: "CUSTOM"
}
- ReadRuleServiceTypes: "data-transfer"
- ReadRuleServiceTypes: "data-transfer"
+ ReadRuleServiceTypes: "data-streams"
+ ReadRuleServiceTypes: "data-streams"
FormatVersion: 0
Codecs {
Ids: 2
@@ -3331,7 +3840,71 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
res.Wait();
Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
}
+ }
+
+ Y_UNIT_TEST(SchemeOperationFirstClassCitizen) {
+ TServerSettings settings = PQSettings(0);
+ settings.PQConfig.SetTopicsAreFirstClassCitizen(true);
+ NPersQueue::TTestServer server(settings);
+ server.EnableLogs({NKikimrServices::PQ_READ_PROXY, NKikimrServices::BLACKBOX_VALIDATOR });
+
+ TString topic1 = "/Root/PQ/topic1";
+ server.AnnoyingClient->CreateTopicNoLegacy(topic1, 1);
+ {
+ NYdb::TDriverConfig driverCfg;
+ driverCfg.SetEndpoint(TStringBuilder() << "localhost:" << server.GrpcPort);
+ std::shared_ptr<NYdb::TDriver> ydbDriver(new NYdb::TDriver(driverCfg));
+ auto topicClient = NYdb::NTopic::TTopicClient(*ydbDriver);
+
+ auto res = topicClient.DescribeTopic(topic1);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+
+ auto res2 = NYdb::TProtoAccessor::GetProto(res.GetValue().GetTopicDescription());
+ Cerr << res2 << "\n";
+ {
+ NYdb::NTopic::TAlterTopicSettings settings;
+ settings.SetPartitionWriteSpeedBytesPerSecond(4_MB);
+ settings.SetPartitionWriteBurstBytes(4_MB);
+
+ auto res = topicClient.AlterTopic(topic1, settings);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ }
+
+ {
+ auto res = topicClient.DescribeTopic(topic1);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ UNIT_ASSERT_VALUES_EQUAL(res.GetValue().GetTopicDescription().GetPartitionWriteSpeedBytesPerSecond(), 4_MB);
+ auto res2 = NYdb::TProtoAccessor::GetProto(res.GetValue().GetTopicDescription());
+ Cerr << res2 << "\n";
+ }
+ {
+ NYdb::NTopic::TAlterTopicSettings settings;
+ settings.SetPartitionWriteSpeedBytesPerSecond(8_MB);
+ settings.SetPartitionWriteBurstBytes(8_MB);
+
+ auto res = topicClient.AlterTopic(topic1, settings);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ }
+
+ {
+ auto res = topicClient.DescribeTopic(topic1);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ UNIT_ASSERT_VALUES_EQUAL(res.GetValue().GetTopicDescription().GetPartitionWriteSpeedBytesPerSecond(), 8_MB);
+ auto res2 = NYdb::TProtoAccessor::GetProto(res.GetValue().GetTopicDescription());
+ Cerr << res2 << "\n";
+ }
+ }
}
@@ -3479,7 +4052,7 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
UNIT_ASSERT_VALUES_EQUAL(response.operation().status(), Ydb::StatusIds::SUCCESS);
}
checkDescribe({
- {"acc/consumer1", "data-transfer"},
+ {"acc/consumer1", "data-streams"},
{"acc/consumer2", "MyGreatType"}
});
{
@@ -3518,7 +4091,7 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
UNIT_ASSERT_VALUES_EQUAL(response.operation().status(), Ydb::StatusIds::SUCCESS);
}
checkDescribe({
- {"acc/consumer1", "data-transfer"},
+ {"acc/consumer1", "data-streams"},
{"acc/consumer2", "AnotherType"},
{"acc/consumer3", "SecondType"}
});
@@ -3548,7 +4121,7 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
UNIT_ASSERT_VALUES_EQUAL(response.operation().status(), Ydb::StatusIds::BAD_REQUEST);
}
checkDescribe({
- {"acc/consumer1", "data-transfer"},
+ {"acc/consumer1", "data-streams"},
{"acc/consumer2", "AnotherType"},
{"acc/consumer3", "SecondType"}
});
@@ -4090,6 +4663,208 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
}
}
+
+ void TestReadRuleServiceTypePasswordImpl(bool forcePassword)
+ {
+ TServerSettings settings = PQSettings(0);
+ {
+ settings.PQConfig.SetDisallowDefaultClientServiceType(false);
+ settings.PQConfig.SetForceClientServiceTypePasswordCheck(forcePassword);
+ settings.PQConfig.MutableDefaultClientServiceType()->SetName("default_type");
+ settings.PQConfig.SetTopicsAreFirstClassCitizen(true);
+ auto type = settings.PQConfig.AddClientServiceType();
+ type->SetName("MyGreatType");
+ TString passwordHash = MD5::Data("password");
+ passwordHash.to_lower();
+ type->AddPasswordHashes(passwordHash);
+ }
+
+ NPersQueue::TTestServer server(settings);
+
+ {
+ NYdb::TDriverConfig driverCfg;
+ driverCfg.SetEndpoint(TStringBuilder() << "localhost:" << server.GrpcPort);
+ std::shared_ptr<NYdb::TDriver> ydbDriver(new NYdb::TDriver(driverCfg));
+ auto topicClient = NYdb::NTopic::TTopicClient(*ydbDriver);
+
+ {
+ NYdb::NTopic::TCreateTopicSettings settings;
+
+ NYdb::NTopic::TConsumerSettings<NYdb::NTopic::TCreateTopicSettings> consumerSettings(settings, "consumer");
+ consumerSettings.AddAttribute("_service_type", "MyGreatType");
+ if (!forcePassword)
+ consumerSettings.AddAttribute("_service_type_password", "aaa");
+
+ settings.PartitioningSettings(1,1).AppendConsumers(consumerSettings);
+
+ auto res = topicClient.CreateTopic("/Root/PQ/ttt", settings);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(!res.GetValue().IsSuccess());
+ }
+ {
+ NYdb::NTopic::TCreateTopicSettings settings;
+ settings.PartitioningSettings(1,1)
+ .BeginAddConsumer("consumer").AddAttribute("_service_type", "MyGreatType")
+ .AddAttribute("_service_type_password", "password")
+ .EndAddConsumer();
+ auto res = topicClient.CreateTopic("/Root/PQ/ttt", settings);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ }
+
+ {
+ NYdb::NTopic::TAlterTopicSettings settings;
+
+ NYdb::NTopic::TAlterConsumerSettings consumerSettings(settings, "consumer");
+
+ if (!forcePassword) {
+ consumerSettings.BeginAlterAttributes().Add("_service_type_password", "aaa");
+ }
+
+ settings
+ .BeginAddConsumer("consumer2")
+ .EndAddConsumer()
+ .AppendAlterConsumers(consumerSettings);
+ auto res = topicClient.AlterTopic("/Root/PQ/ttt", settings);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(!res.GetValue().IsSuccess());
+ }
+ {
+ NYdb::NTopic::TAlterTopicSettings settings;
+ settings
+ .BeginAddConsumer("consumer2")
+ .EndAddConsumer()
+ .BeginAlterConsumer("consumer").BeginAlterAttributes().Alter("_service_type_password", "password")
+ .EndAlterAttributes()
+ .EndAlterConsumer();
+ auto res = topicClient.AlterTopic("/Root/PQ/ttt", settings);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ }
+
+ {
+ NYdb::NTopic::TAlterTopicSettings settings;
+ settings.AppendDropConsumers("consumer");
+ auto res = topicClient.AlterTopic("/Root/PQ/ttt", settings);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(res.GetValue().IsSuccess());
+ }
+
+ { // check that important consumer is forbidden
+ NYdb::NTopic::TAlterTopicSettings settings;
+ settings
+ .BeginAddConsumer("consumer2").Important(true)
+ .EndAddConsumer();
+ auto res = topicClient.AlterTopic("/Root/PQ/ttt", settings);
+ res.Wait();
+ Cerr << res.GetValue().IsSuccess() << " " << res.GetValue().GetIssues().ToString() << "\n";
+ UNIT_ASSERT(!res.GetValue().IsSuccess());
+ }
+ }
+ }
+ Y_UNIT_TEST(TestReadRuleServiceTypePassword) {
+ TestReadRuleServiceTypePasswordImpl(false);
+ TestReadRuleServiceTypePasswordImpl(true);
+ }
+
+ void CreateTopicWithMeteringMode(bool meteringEnabled) {
+ TServerSettings serverSettings = PQSettings(0);
+ serverSettings.PQConfig.SetTopicsAreFirstClassCitizen(true);
+ serverSettings.PQConfig.MutableBillingMeteringConfig()->SetEnabled(meteringEnabled);
+ NPersQueue::TTestServer server(serverSettings);
+
+ using namespace NYdb::NTopic;
+ auto client = TTopicClient(server.GetDriver());
+
+ for (const auto mode : {EMeteringMode::RequestUnits, EMeteringMode::ReservedCapacity}) {
+ const TString path = TStringBuilder() << "/Root/PQ/Topic" << mode;
+
+ auto res = client.CreateTopic(path, TCreateTopicSettings()
+ .MeteringMode(mode)
+ ).ExtractValueSync();
+
+ if (!meteringEnabled) {
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::PRECONDITION_FAILED);
+ continue;
+ }
+
+ UNIT_ASSERT_C(res.IsSuccess(), res.GetIssues().ToString());
+ auto desc = client.DescribeTopic(path).ExtractValueSync();
+ UNIT_ASSERT_C(desc.IsSuccess(), desc.GetIssues().ToString());
+ UNIT_ASSERT_VALUES_EQUAL(desc.GetTopicDescription().GetMeteringMode(), mode);
+ }
+ }
+
+ Y_UNIT_TEST(CreateTopicWithMeteringMode) {
+ CreateTopicWithMeteringMode(false);
+ CreateTopicWithMeteringMode(true);
+ }
+
+ void SetMeteringMode(bool meteringEnabled) {
+ TServerSettings serverSettings = PQSettings(0);
+ serverSettings.PQConfig.SetTopicsAreFirstClassCitizen(true);
+ serverSettings.PQConfig.MutableBillingMeteringConfig()->SetEnabled(meteringEnabled);
+ NPersQueue::TTestServer server(serverSettings);
+
+ using namespace NYdb::NTopic;
+ auto client = TTopicClient(server.GetDriver());
+
+ {
+ auto res = client.CreateTopic("/Root/PQ/ttt").ExtractValueSync();
+ UNIT_ASSERT_C(res.IsSuccess(), res.GetIssues().ToString());
+ }
+
+ for (const auto mode : {EMeteringMode::RequestUnits, EMeteringMode::ReservedCapacity}) {
+ auto res = client.AlterTopic("/Root/PQ/ttt", TAlterTopicSettings()
+ .SetMeteringMode(mode)
+ ).ExtractValueSync();
+
+ if (!meteringEnabled) {
+ UNIT_ASSERT_VALUES_EQUAL(res.GetStatus(), NYdb::EStatus::PRECONDITION_FAILED);
+ continue;
+ }
+
+ UNIT_ASSERT_C(res.IsSuccess(), res.GetIssues().ToString());
+ auto desc = client.DescribeTopic("/Root/PQ/ttt").ExtractValueSync();
+ UNIT_ASSERT_C(desc.IsSuccess(), desc.GetIssues().ToString());
+ UNIT_ASSERT_VALUES_EQUAL(desc.GetTopicDescription().GetMeteringMode(), mode);
+ }
+ }
+
+ Y_UNIT_TEST(SetMeteringMode) {
+ SetMeteringMode(false);
+ SetMeteringMode(true);
+ }
+
+ void DefaultMeteringMode(bool meteringEnabled) {
+ TServerSettings serverSettings = PQSettings(0);
+ serverSettings.PQConfig.SetTopicsAreFirstClassCitizen(true);
+ serverSettings.PQConfig.MutableBillingMeteringConfig()->SetEnabled(meteringEnabled);
+ NPersQueue::TTestServer server(serverSettings);
+
+ using namespace NYdb::NTopic;
+ auto client = TTopicClient(server.GetDriver());
+
+ auto res = client.CreateTopic("/Root/PQ/ttt").ExtractValueSync();
+ UNIT_ASSERT_C(res.IsSuccess(), res.GetIssues().ToString());
+
+ auto desc = client.DescribeTopic("/Root/PQ/ttt").ExtractValueSync();
+ UNIT_ASSERT_C(desc.IsSuccess(), desc.GetIssues().ToString());
+ UNIT_ASSERT_VALUES_EQUAL(desc.GetTopicDescription().GetMeteringMode(), (meteringEnabled
+ ? EMeteringMode::RequestUnits
+ : EMeteringMode::Unspecified));
+ }
+
+ Y_UNIT_TEST(DefaultMeteringMode) {
+ DefaultMeteringMode(false);
+ DefaultMeteringMode(true);
+ }
+
Y_UNIT_TEST(TClusterTrackerTest) {
APITestSetup setup{TEST_CASE_NAME};
setup.GetPQConfig().SetClustersUpdateTimeoutSec(0);
@@ -4235,12 +5010,12 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
server.AnnoyingClient->CreateTopic(legacyName, 100);
runTest(legacyName, shortLegacyName, topicName, srcId1, 5, 100);
- runTest(legacyName, legacyName, topicName, srcId2, 6, 100);
+ runTest(legacyName, shortLegacyName, topicName, srcId2, 6, 100);
runTest("", "", topicName, srcId1, 5, 100);
runTest("", "", topicName, srcId2, 6, 100);
ui64 time = (TInstant::Now() + TDuration::Hours(4)).MilliSeconds();
- runTest(legacyName, legacyName, topicName, srcId2, 7, time);
+ runTest(legacyName, shortLegacyName, topicName, srcId2, 7, time);
}
Y_UNIT_TEST(TestReadPartitionStatus) {
@@ -4320,77 +5095,5 @@ Y_UNIT_TEST_SUITE(TPersQueueTest) {
}
}
-
-
- Y_UNIT_TEST(RetentionBorderReading) {
- NPersQueue::TTestServer server;
-
- server.EnableLogs({ NKikimrServices::PQ_WRITE_PROXY});
-
- std::shared_ptr<grpc::Channel> Channel_;
- std::unique_ptr<Ydb::PersQueue::V1::PersQueueService::Stub> StubP_;
-
- {
- Channel_ = grpc::CreateChannel("localhost:" + ToString(server.GrpcPort), grpc::InsecureChannelCredentials());
- StubP_ = Ydb::PersQueue::V1::PersQueueService::NewStub(Channel_);
- }
-
- do {
- CreateTopicRequest request;
- CreateTopicResponse response;
- request.set_path("/Root/PQ/rt3.dc1--topic");
- auto props = request.mutable_settings();
- props->set_partitions_count(1);
- props->set_supported_format(Ydb::PersQueue::V1::TopicSettings::FORMAT_BASE);
- props->set_retention_period_ms(TDuration::Days(1).MilliSeconds());
- props->set_max_partition_storage_size(2000000000);
- props->set_retention_storage_bytes(30000000);
-
- props->set_max_partition_write_speed(10000000);
- props->set_max_partition_write_burst(10000000);
- (*props->mutable_attributes())["_allow_unauthenticated_read"] = "true";
-
- grpc::ClientContext rcontext;
-
- auto status = StubP_->CreateTopic(&rcontext, request, &response);
-
- UNIT_ASSERT(status.ok());
- CreateTopicResult res;
- response.operation().result().UnpackTo(&res);
- Cerr << response << "\n" << res << "\n";
- if (response.operation().status() == Ydb::StatusIds::UNAVAILABLE) {
- Sleep(TDuration::Seconds(1));
- continue;
- }
- Cerr << response.operation() << "\n";
- UNIT_ASSERT_VALUES_EQUAL(response.operation().status(), Ydb::StatusIds::SUCCESS);
- break;
- } while (true);
-
- Cerr << "Topic created\n";
- server.AnnoyingClient->AddTopic("rt3.dc1--topic");
- while (server.AnnoyingClient->TopicCreated("rt3.dc1--topic") == 0) Sleep(TDuration::Seconds(1));
- Cerr << "Topic really created\n";
-
- auto driver = server.AnnoyingClient->GetDriver();
-
- auto writer = CreateSimpleWriter(*driver, "topic", "source1", {}, TString("raw"));
- bool res = writer->Write(TString(15 * 1024 * 1024, 'a'), 1);
- UNIT_ASSERT(res);
- writer->Close();
-
- writer = CreateSimpleWriter(*driver, "topic", "source", {}, TString("raw"));
- for (int i = 1; i < 500; ++i) {
- bool res = writer->Write(TString((i % 30) * 1024 * 1024 + 10, 'a'), i);
- UNIT_ASSERT(res);
- }
- Cerr << "ALL WRITTEN TO WRITER\n";
- for (int i = 1; i < 300; ++i) {
- auto info = server.AnnoyingClient->ReadFromPQ({"rt3.dc1--topic", 0, 0, 2, "user", (TInstant::Now()).MilliSeconds() - 300}, 0, "", NMsgBusProxy::MSTATUS_OK);
- UNIT_ASSERT(info.Values.size() >= 1);
- }
- writer->Close();
- }
-
}
}
diff --git a/ydb/services/persqueue_v1/topic.cpp b/ydb/services/persqueue_v1/topic.cpp
index 1b9d954467..c56e81faad 100644
--- a/ydb/services/persqueue_v1/topic.cpp
+++ b/ydb/services/persqueue_v1/topic.cpp
@@ -17,58 +17,44 @@ namespace V1 {
static const ui32 TopicWriteSessionsMaxCount = 1000000;
static const ui32 TopicReadSessionsMaxCount = 100000;
-TGRpcTopicService::TGRpcTopicService(NActors::TActorSystem *system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const NActors::TActorId& schemeCache,const NActors::TActorId& grpcRequestProxy)
- : ActorSystem(system)
- , Counters(counters)
+TGRpcTopicService::TGRpcTopicService(NActors::TActorSystem *system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const NActors::TActorId& schemeCache,const NActors::TActorId& grpcRequestProxy, bool rlAllowed)
+ : TGrpcServiceBase<Ydb::Topic::V1::TopicService>(system, counters, grpcRequestProxy, rlAllowed)
, SchemeCache(schemeCache)
- , GRpcRequestProxy(grpcRequestProxy)
{ }
void TGRpcTopicService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ = cq;
+ CQ_ = cq;
InitNewSchemeCacheActor();
- if (ActorSystem->AppData<TAppData>()->PQConfig.GetEnabled()) {
+ if (ActorSystem_->AppData<TAppData>()->PQConfig.GetEnabled()) {
- IActor* writeSvc = NGRpcProxy::V1::CreatePQWriteService(SchemeCache, Counters, TopicWriteSessionsMaxCount);
- TActorId actorId = ActorSystem->Register(writeSvc, TMailboxType::HTSwap, ActorSystem->AppData<TAppData>()->UserPoolId);
- ActorSystem->RegisterLocalService(NGRpcProxy::V1::GetPQWriteServiceActorID(), actorId);
+ IActor* writeSvc = NGRpcProxy::V1::CreatePQWriteService(SchemeCache, Counters_, TopicWriteSessionsMaxCount);
+ TActorId actorId = ActorSystem_->Register(writeSvc, TMailboxType::HTSwap, ActorSystem_->AppData<TAppData>()->UserPoolId);
+ ActorSystem_->RegisterLocalService(NGRpcProxy::V1::GetPQWriteServiceActorID(), actorId);
- IActor* readSvc = NGRpcProxy::V1::CreatePQReadService(SchemeCache, NewSchemeCache, Counters, TopicReadSessionsMaxCount);
- actorId = ActorSystem->Register(readSvc, TMailboxType::HTSwap, ActorSystem->AppData<TAppData>()->UserPoolId);
- ActorSystem->RegisterLocalService(NGRpcProxy::V1::GetPQReadServiceActorID(), actorId);
+ IActor* readSvc = NGRpcProxy::V1::CreatePQReadService(SchemeCache, NewSchemeCache, Counters_, TopicReadSessionsMaxCount);
+ actorId = ActorSystem_->Register(readSvc, TMailboxType::HTSwap, ActorSystem_->AppData<TAppData>()->UserPoolId);
+ ActorSystem_->RegisterLocalService(NGRpcProxy::V1::GetPQReadServiceActorID(), actorId);
- IActor* schemaSvc = NGRpcProxy::V1::CreatePQSchemaService(SchemeCache, Counters);
- actorId = ActorSystem->Register(schemaSvc, TMailboxType::HTSwap, ActorSystem->AppData<TAppData>()->UserPoolId);
- ActorSystem->RegisterLocalService(NGRpcProxy::V1::GetPQSchemaServiceActorID(), actorId);
+ IActor* schemaSvc = NGRpcProxy::V1::CreatePQSchemaService(SchemeCache, Counters_);
+ actorId = ActorSystem_->Register(schemaSvc, TMailboxType::HTSwap, ActorSystem_->AppData<TAppData>()->UserPoolId);
+ ActorSystem_->RegisterLocalService(NGRpcProxy::V1::GetPQSchemaServiceActorID(), actorId);
SetupIncomingRequests(std::move(logger));
}
}
-void TGRpcTopicService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter = limiter;
-}
-
-bool TGRpcTopicService::IncRequest() {
- return Limiter->Inc();
-}
-
-void TGRpcTopicService::DecRequest() {
- Limiter->Dec();
-}
-
void TGRpcTopicService::InitNewSchemeCacheActor() {
- auto appData = ActorSystem->AppData<TAppData>();
- auto cacheCounters = GetServiceCounters(Counters, "pqproxy|schemecache");
+ auto appData = ActorSystem_->AppData<TAppData>();
+ auto cacheCounters = GetServiceCounters(Counters_, "pqproxy|schemecache");
auto cacheConfig = MakeIntrusive<NSchemeCache::TSchemeCacheConfig>(appData, cacheCounters);
- NewSchemeCache = ActorSystem->Register(CreateSchemeBoardSchemeCache(cacheConfig.Get()),
- TMailboxType::HTSwap, ActorSystem->AppData<TAppData>()->UserPoolId);
+ NewSchemeCache = ActorSystem_->Register(CreateSchemeBoardSchemeCache(cacheConfig.Get()),
+ TMailboxType::HTSwap, ActorSystem_->AppData<TAppData>()->UserPoolId);
}
void TGRpcTopicService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
- auto getCounterBlock = NKikimr::NGRpcService::CreateCounterCb(Counters, ActorSystem);
+ auto getCounterBlock = NKikimr::NGRpcService::CreateCounterCb(Counters_, ActorSystem_);
{
using TBiRequest = Ydb::Topic::StreamWriteMessage::FromClient;
@@ -82,11 +68,11 @@ void TGRpcTopicService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NKikimrServices::GRPC_SERVER>;
- TStreamGRpcRequest::Start(this, this->GetService(), CQ, &Ydb::Topic::V1::TopicService::AsyncService::RequestStreamWrite,
+ TStreamGRpcRequest::Start(this, this->GetService(), CQ_, &Ydb::Topic::V1::TopicService::AsyncService::RequestStreamWrite,
[this](TIntrusivePtr<TStreamGRpcRequest::IContext> context) {
- ActorSystem->Send(GRpcRequestProxy, new NKikimr::NGRpcService::TEvStreamTopicWriteRequest(context));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NKikimr::NGRpcService::TEvStreamTopicWriteRequest(context, IsRlAllowed()));
},
- *ActorSystem, "TopicService/StreamWrite", getCounterBlock("topic", "StreamWrite", true, true), nullptr
+ *ActorSystem_, "TopicService/StreamWrite", getCounterBlock("topic", "StreamWrite", true, true), nullptr
);
}
@@ -102,11 +88,11 @@ void TGRpcTopicService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NKikimrServices::GRPC_SERVER>;
- TStreamGRpcRequest::Start(this, this->GetService(), CQ, &Ydb::Topic::V1::TopicService::AsyncService::RequestStreamRead,
+ TStreamGRpcRequest::Start(this, this->GetService(), CQ_, &Ydb::Topic::V1::TopicService::AsyncService::RequestStreamRead,
[this](TIntrusivePtr<TStreamGRpcRequest::IContext> context) {
- ActorSystem->Send(GRpcRequestProxy, new NKikimr::NGRpcService::TEvStreamTopicReadRequest(context));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NKikimr::NGRpcService::TEvStreamTopicReadRequest(context, IsRlAllowed()));
},
- *ActorSystem, "TopicService/StreamRead", getCounterBlock("topic", "StreamRead", true, true), nullptr
+ *ActorSystem_, "TopicService/StreamRead", getCounterBlock("topic", "StreamRead", true, true), nullptr
);
}
@@ -114,24 +100,24 @@ void TGRpcTopicService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
#error ADD_REQUEST macro already defined
#endif
#define ADD_REQUEST(NAME, SVC, IN, OUT, ACTION) \
- MakeIntrusive<TGRpcRequest<Ydb::Topic::IN, Ydb::Topic::OUT, NGRpcService::V1::TGRpcTopicService>>(this, this->GetService(), CQ, \
+ MakeIntrusive<TGRpcRequest<Ydb::Topic::IN, Ydb::Topic::OUT, NGRpcService::V1::TGRpcTopicService>>(this, this->GetService(), CQ_, \
[this](NGrpc::IRequestContextBase *ctx) { \
- NGRpcService::ReportGrpcReqToMon(*ActorSystem, ctx->GetPeer()); \
+ NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
ACTION; \
}, &Ydb::Topic::V1::SVC::AsyncService::Request ## NAME, \
"TopicService/"#NAME, logger, getCounterBlock("topic", #NAME))->Run();
ADD_REQUEST(DropTopic, TopicService, DropTopicRequest, DropTopicResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvDropTopicRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvDropTopicRequest(ctx, IsRlAllowed()));
})
ADD_REQUEST(CreateTopic, TopicService, CreateTopicRequest, CreateTopicResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvCreateTopicRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvCreateTopicRequest(ctx, IsRlAllowed()));
})
ADD_REQUEST(AlterTopic, TopicService, AlterTopicRequest, AlterTopicResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvAlterTopicRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvAlterTopicRequest(ctx, IsRlAllowed()));
})
ADD_REQUEST(DescribeTopic, TopicService, DescribeTopicRequest, DescribeTopicResponse, {
- ActorSystem->Send(GRpcRequestProxy, new NGRpcService::TEvDescribeTopicRequest(ctx));
+ ActorSystem_->Send(GRpcRequestProxyId_, new NGRpcService::TEvDescribeTopicRequest(ctx, IsRlAllowed()));
})
#undef ADD_REQUEST
diff --git a/ydb/services/persqueue_v1/topic.h b/ydb/services/persqueue_v1/topic.h
index 7f516844b2..a75f1b8375 100644
--- a/ydb/services/persqueue_v1/topic.h
+++ b/ydb/services/persqueue_v1/topic.h
@@ -2,10 +2,12 @@
#include <library/cpp/actors/core/actorsystem.h>
-#include <ydb/public/api/grpc/draft/ydb_topic_v1.grpc.pb.h>
+#include <ydb/public/api/grpc/ydb_topic_v1.grpc.pb.h>
#include <library/cpp/grpc/server/grpc_server.h>
+#include <ydb/core/grpc_services/base/base_service.h>
+
namespace NKikimr {
@@ -13,33 +15,24 @@ namespace NGRpcService {
namespace V1 {
class TGRpcTopicService
- : public NGrpc::TGrpcServiceBase<Ydb::Topic::V1::TopicService>
+ : public TGrpcServiceBase<Ydb::Topic::V1::TopicService>
{
public:
- TGRpcTopicService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, const NActors::TActorId& schemeCache, const NActors::TActorId& grpcRequestProxy);
+ TGRpcTopicService(NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, const NActors::TActorId& schemeCache, const NActors::TActorId& grpcRequestProxy, bool rlAllowed);
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
void StopService() noexcept override;
using NGrpc::TGrpcServiceBase<Ydb::Topic::V1::TopicService>::GetService;
- bool IncRequest();
- void DecRequest();
private:
- void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
+ void SetupIncomingRequests(NGrpc::TLoggerPtr logger) override;
void InitNewSchemeCacheActor();
- NActors::TActorSystem* ActorSystem;
- grpc::ServerCompletionQueue* CQ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
- NGrpc::TGlobalLimiter* Limiter = nullptr;
NActors::TActorId SchemeCache;
NActors::TActorId NewSchemeCache;
- NActors::TActorId GRpcRequestProxy;
};
} // namespace V1
diff --git a/ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt b/ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt
index 5f8c3c4d4c..774adc10d7 100644
--- a/ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt
+++ b/ydb/services/persqueue_v1/ut/CMakeLists.darwin.txt
@@ -6,10 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(new_schemecache_ut)
add_executable(ydb-services-persqueue_v1-ut)
target_compile_options(ydb-services-persqueue_v1-ut PRIVATE
- -DACTORLIB_HUGE_PB_SIZE
-DUSE_CURRENT_UDF_ABI_VERSION
)
target_include_directories(ydb-services-persqueue_v1-ut PRIVATE
@@ -23,6 +23,7 @@ target_link_libraries(ydb-services-persqueue_v1-ut PUBLIC
ydb-services-persqueue_v1
library-cpp-getopt
library-cpp-svnversion
+ cpp-digest-md5
ydb-core-testlib
ydb-library-aclib
library-persqueue-topic_parser
@@ -46,6 +47,7 @@ target_sources(ydb-services-persqueue_v1-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/persqueue_common_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/persqueue_compat_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/ut/rate_limiter_test_setup.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/ut/functions_executor_wrapper.cpp
)
add_test(
NAME
diff --git a/ydb/services/persqueue_v1/ut/CMakeLists.linux.txt b/ydb/services/persqueue_v1/ut/CMakeLists.linux.txt
index c082f4e70d..0becc47bd6 100644
--- a/ydb/services/persqueue_v1/ut/CMakeLists.linux.txt
+++ b/ydb/services/persqueue_v1/ut/CMakeLists.linux.txt
@@ -6,10 +6,10 @@
# original buildsystem will not be accepted.
+add_subdirectory(new_schemecache_ut)
add_executable(ydb-services-persqueue_v1-ut)
target_compile_options(ydb-services-persqueue_v1-ut PRIVATE
- -DACTORLIB_HUGE_PB_SIZE
-DUSE_CURRENT_UDF_ABI_VERSION
)
target_include_directories(ydb-services-persqueue_v1-ut PRIVATE
@@ -25,6 +25,7 @@ target_link_libraries(ydb-services-persqueue_v1-ut PUBLIC
ydb-services-persqueue_v1
library-cpp-getopt
library-cpp-svnversion
+ cpp-digest-md5
ydb-core-testlib
ydb-library-aclib
library-persqueue-topic_parser
@@ -50,6 +51,7 @@ target_sources(ydb-services-persqueue_v1-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/persqueue_common_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/persqueue_compat_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/ut/rate_limiter_test_setup.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/services/persqueue_v1/ut/functions_executor_wrapper.cpp
)
add_test(
NAME
diff --git a/ydb/services/persqueue_v1/ut/CMakeLists.txt b/ydb/services/persqueue_v1/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/persqueue_v1/ut/CMakeLists.txt
+++ b/ydb/services/persqueue_v1/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/persqueue_v1/ut/functions_executor_wrapper.cpp b/ydb/services/persqueue_v1/ut/functions_executor_wrapper.cpp
new file mode 100644
index 0000000000..f817751350
--- /dev/null
+++ b/ydb/services/persqueue_v1/ut/functions_executor_wrapper.cpp
@@ -0,0 +1,56 @@
+#include "functions_executor_wrapper.h"
+
+namespace NKikimr::NPersQueueTests {
+
+FunctionExecutorWrapper::FunctionExecutorWrapper(TExecutorPtr executor) :
+ Executor{std::move(executor)}
+{
+}
+
+bool FunctionExecutorWrapper::IsAsync() const
+{
+ return Executor->IsAsync();
+}
+
+void FunctionExecutorWrapper::Post(TFunction &&f)
+{
+ with_lock (Mutex) {
+ Funcs.push_back(std::move(f));
+ }
+}
+
+void FunctionExecutorWrapper::DoStart()
+{
+ Executor->Start();
+}
+
+void FunctionExecutorWrapper::StartFuncs(const std::vector<size_t>& indicies)
+{
+ with_lock (Mutex) {
+ for (auto index : indicies) {
+ Y_VERIFY(index < Funcs.size());
+ Y_VERIFY(Funcs[index]);
+
+ Executor->Post(std::move(Funcs[index]));
+ }
+ }
+}
+
+size_t FunctionExecutorWrapper::GetFuncsCount() const
+{
+ with_lock (Mutex) {
+ return Funcs.size();
+ }
+}
+
+TIntrusivePtr<FunctionExecutorWrapper> CreateThreadPoolExecutorWrapper(size_t threads)
+{
+ return MakeIntrusive<FunctionExecutorWrapper>(NYdb::NPersQueue::CreateThreadPoolExecutor(threads));
+}
+
+TIntrusivePtr<FunctionExecutorWrapper> CreateSyncExecutorWrapper()
+{
+ return MakeIntrusive<FunctionExecutorWrapper>(NYdb::NPersQueue::CreateSyncExecutor());
+}
+
+}
diff --git a/ydb/services/persqueue_v1/ut/functions_executor_wrapper.h b/ydb/services/persqueue_v1/ut/functions_executor_wrapper.h
new file mode 100644
index 0000000000..c895ee15d5
--- /dev/null
+++ b/ydb/services/persqueue_v1/ut/functions_executor_wrapper.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <ydb/public/sdk/cpp/client/ydb_persqueue_public/persqueue.h>
+#include <util/system/mutex.h>
+
+#include <vector>
+
+namespace NKikimr::NPersQueueTests {
+
+class FunctionExecutorWrapper : public NYdb::NPersQueue::IExecutor {
+public:
+ using TExecutorPtr = NYdb::NPersQueue::IExecutor::TPtr;
+
+ explicit FunctionExecutorWrapper(TExecutorPtr executor);
+
+ bool IsAsync() const override;
+ void Post(TFunction&& f) override;
+
+ void StartFuncs(const std::vector<size_t>& indicies);
+
+ size_t GetFuncsCount() const;
+
+private:
+ void DoStart() override;
+
+ TExecutorPtr Executor;
+ TMutex Mutex;
+ std::vector<TFunction> Funcs;
+};
+
+TIntrusivePtr<FunctionExecutorWrapper> CreateThreadPoolExecutorWrapper(size_t threads);
+TIntrusivePtr<FunctionExecutorWrapper> CreateSyncExecutorWrapper();
+
+}
diff --git a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt
index 33e59c6362..9b03806b7c 100644
--- a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt
+++ b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.darwin.txt
@@ -9,7 +9,6 @@
add_executable(ydb-services-persqueue_v1-ut-new_schemecache_ut)
target_compile_options(ydb-services-persqueue_v1-ut-new_schemecache_ut PRIVATE
- -DACTORLIB_HUGE_PB_SIZE
-DUSE_CURRENT_UDF_ABI_VERSION
)
target_include_directories(ydb-services-persqueue_v1-ut-new_schemecache_ut PRIVATE
diff --git a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt
index aef458b518..719d5b4e45 100644
--- a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt
+++ b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.linux.txt
@@ -9,7 +9,6 @@
add_executable(ydb-services-persqueue_v1-ut-new_schemecache_ut)
target_compile_options(ydb-services-persqueue_v1-ut-new_schemecache_ut PRIVATE
- -DACTORLIB_HUGE_PB_SIZE
-DUSE_CURRENT_UDF_ABI_VERSION
)
target_include_directories(ydb-services-persqueue_v1-ut-new_schemecache_ut PRIVATE
diff --git a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.txt b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.txt
+++ b/ydb/services/persqueue_v1/ut/new_schemecache_ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/rate_limiter/CMakeLists.txt b/ydb/services/rate_limiter/CMakeLists.txt
index 056d915b57..b3abfd0ff3 100644
--- a/ydb/services/rate_limiter/CMakeLists.txt
+++ b/ydb/services/rate_limiter/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut)
add_library(ydb-services-rate_limiter)
target_link_libraries(ydb-services-rate_limiter PUBLIC
diff --git a/ydb/services/rate_limiter/grpc_service.cpp b/ydb/services/rate_limiter/grpc_service.cpp
index 2040c78463..9293510f9c 100644
--- a/ydb/services/rate_limiter/grpc_service.cpp
+++ b/ydb/services/rate_limiter/grpc_service.cpp
@@ -6,7 +6,7 @@
namespace NKikimr::NQuoter {
-TRateLimiterGRpcService::TRateLimiterGRpcService(NActors::TActorSystem* actorSystem, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId grpcRequestProxyId)
+TRateLimiterGRpcService::TRateLimiterGRpcService(NActors::TActorSystem* actorSystem, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NActors::TActorId grpcRequestProxyId)
: ActorSystem(actorSystem)
, Counters(std::move(counters))
, GRpcRequestProxyId(grpcRequestProxyId)
diff --git a/ydb/services/rate_limiter/grpc_service.h b/ydb/services/rate_limiter/grpc_service.h
index 82ab6f91f5..b741e7473d 100644
--- a/ydb/services/rate_limiter/grpc_service.h
+++ b/ydb/services/rate_limiter/grpc_service.h
@@ -10,7 +10,7 @@ class TRateLimiterGRpcService
: public NGrpc::TGrpcServiceBase<Ydb::RateLimiter::V1::RateLimiterService>
{
public:
- TRateLimiterGRpcService(NActors::TActorSystem* actorSystem, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId grpcRequestProxyId);
+ TRateLimiterGRpcService(NActors::TActorSystem* actorSystem, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NActors::TActorId grpcRequestProxyId);
~TRateLimiterGRpcService();
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
@@ -24,7 +24,7 @@ private:
private:
NActors::TActorSystem* ActorSystem = nullptr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters;
NActors::TActorId GRpcRequestProxyId;
grpc::ServerCompletionQueue* CQ = nullptr;
diff --git a/ydb/services/rate_limiter/ut/CMakeLists.txt b/ydb/services/rate_limiter/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/rate_limiter/ut/CMakeLists.txt
+++ b/ydb/services/rate_limiter/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/ydb/CMakeLists.txt b/ydb/services/ydb/CMakeLists.txt
index a1639466ba..c2b0781a3a 100644
--- a/ydb/services/ydb/CMakeLists.txt
+++ b/ydb/services/ydb/CMakeLists.txt
@@ -6,6 +6,9 @@
# original buildsystem will not be accepted.
+add_subdirectory(index_ut)
+add_subdirectory(sdk_credprovider_ut)
+add_subdirectory(ut)
add_library(ydb-services-ydb)
target_link_libraries(ydb-services-ydb PUBLIC
diff --git a/ydb/services/ydb/index_ut/CMakeLists.txt b/ydb/services/ydb/index_ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/ydb/index_ut/CMakeLists.txt
+++ b/ydb/services/ydb/index_ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.txt b/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.txt
+++ b/ydb/services/ydb/sdk_credprovider_ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/ydb/ut/CMakeLists.darwin.txt b/ydb/services/ydb/ut/CMakeLists.darwin.txt
index a4ab549a77..c79c299ace 100644
--- a/ydb/services/ydb/ut/CMakeLists.darwin.txt
+++ b/ydb/services/ydb/ut/CMakeLists.darwin.txt
@@ -37,6 +37,7 @@ target_link_libraries(ydb-services-ydb-ut PUBLIC
cpp-client-ydb_extension
cpp-client-ydb_operation
cpp-client-ydb_scheme
+ cpp-client-ydb_monitoring
)
target_link_options(ydb-services-ydb-ut PRIVATE
-Wl,-no_deduplicate
@@ -61,6 +62,7 @@ target_sources(ydb-services-ydb-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ydb_long_tx_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ydb_logstore_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ydb_olapstore_ut.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/services/ydb/ydb_monitoring_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ut/json_udf.cpp
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ut/re2_udf.cpp
)
diff --git a/ydb/services/ydb/ut/CMakeLists.linux.txt b/ydb/services/ydb/ut/CMakeLists.linux.txt
index ee3e483c54..1973850278 100644
--- a/ydb/services/ydb/ut/CMakeLists.linux.txt
+++ b/ydb/services/ydb/ut/CMakeLists.linux.txt
@@ -39,6 +39,7 @@ target_link_libraries(ydb-services-ydb-ut PUBLIC
cpp-client-ydb_extension
cpp-client-ydb_operation
cpp-client-ydb_scheme
+ cpp-client-ydb_monitoring
)
target_link_options(ydb-services-ydb-ut PRIVATE
-ldl
@@ -65,6 +66,7 @@ target_sources(ydb-services-ydb-ut PRIVATE
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ydb_long_tx_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ydb_logstore_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ydb_olapstore_ut.cpp
+ ${CMAKE_SOURCE_DIR}/ydb/services/ydb/ydb_monitoring_ut.cpp
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ut/json_udf.cpp
${CMAKE_SOURCE_DIR}/ydb/services/ydb/ut/re2_udf.cpp
)
diff --git a/ydb/services/ydb/ut/CMakeLists.txt b/ydb/services/ydb/ut/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/ydb/ut/CMakeLists.txt
+++ b/ydb/services/ydb/ut/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/services/ydb/ydb_bulk_upsert_ut.cpp b/ydb/services/ydb/ydb_bulk_upsert_ut.cpp
index 7baa87871d..1b7655e158 100644
--- a/ydb/services/ydb/ydb_bulk_upsert_ut.cpp
+++ b/ydb/services/ydb/ydb_bulk_upsert_ut.cpp
@@ -230,7 +230,7 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsert) {
TString tableName = "/Root/TestNotNullColumns";
- {
+ { /* create table with disabled not null data column */
auto tableBuilder = client.GetTableBuilder();
tableBuilder
.AddNonNullableColumn("Key", EPrimitiveType::Uint64)
@@ -238,6 +238,19 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsert) {
.SetPrimaryKeyColumns({"Key"});
auto result = session.CreateTable(tableName, tableBuilder.Build()).ExtractValueSync();
+ Cerr << result.GetIssues().ToString() << Endl;
+ UNIT_ASSERT_EQUAL(result.IsTransportError(), false);
+ UNIT_ASSERT_EQUAL(result.GetStatus(), EStatus::PRECONDITION_FAILED);
+ }
+
+ { /* create table with not null primary key column */
+ auto tableBuilder = client.GetTableBuilder();
+ tableBuilder
+ .AddNonNullableColumn("Key", EPrimitiveType::Uint64)
+ .AddNullableColumn("Value", EPrimitiveType::Uint64)
+ .SetPrimaryKeyColumns({"Key"});
+ auto result = session.CreateTable(tableName, tableBuilder.Build()).ExtractValueSync();
+
Cerr << result.GetIssues().ToString();
UNIT_ASSERT_EQUAL(result.IsTransportError(), false);
UNIT_ASSERT_EQUAL(result.GetStatus(), EStatus::SUCCESS);
@@ -274,21 +287,6 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsert) {
UNIT_ASSERT_EQUAL(res.GetStatus(), EStatus::SCHEME_ERROR);
}
- { /* missing not null value column */
- TValueBuilder rows;
- rows.BeginList();
- rows.AddListItem()
- .BeginStruct()
- .AddMember("Key").Uint64(2)
- .EndStruct();
- rows.EndList();
-
- auto res = client.BulkUpsert(tableName, rows.Build()).GetValueSync();
- Cerr << res.GetIssues().ToString();
- UNIT_ASSERT_STRING_CONTAINS(res.GetIssues().ToString(), "Missing not null columns: Value");
- UNIT_ASSERT_EQUAL(res.GetStatus(), EStatus::SCHEME_ERROR);
- }
-
{ /* set null to not null primary key column */
TValueBuilder rows;
rows.BeginList();
@@ -305,22 +303,6 @@ Y_UNIT_TEST_SUITE(YdbTableBulkUpsert) {
UNIT_ASSERT_EQUAL(res.GetStatus(), EStatus::BAD_REQUEST);
}
- { /* set null to not null value column */
- TValueBuilder rows;
- rows.BeginList();
- rows.AddListItem()
- .BeginStruct()
- .AddMember("Key").Uint64(2)
- .AddMember("Value").EmptyOptional(EPrimitiveType::Uint64)
- .EndStruct();
- rows.EndList();
-
- auto res = client.BulkUpsert(tableName, rows.Build()).GetValueSync();
- Cerr << res.GetIssues().ToString();
- UNIT_ASSERT_STRING_CONTAINS(res.GetIssues().ToString(), "Received NULL value for not null column");
- UNIT_ASSERT_EQUAL(res.GetStatus(), EStatus::BAD_REQUEST);
- }
-
{
auto result = session.DropTable(tableName).ExtractValueSync();
diff --git a/ydb/services/ydb/ydb_clickhouse_internal.cpp b/ydb/services/ydb/ydb_clickhouse_internal.cpp
index d0836fc7d8..30f3615ca0 100644
--- a/ydb/services/ydb/ydb_clickhouse_internal.cpp
+++ b/ydb/services/ydb/ydb_clickhouse_internal.cpp
@@ -8,31 +8,13 @@ namespace NKikimr {
namespace NGRpcService {
TGRpcYdbClickhouseInternalService::TGRpcYdbClickhouseInternalService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
TIntrusivePtr<TInFlightLimiterRegistry> inFlightLimiterRegistry,
- NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
+ NActors::TActorId id,
+ bool rlAllowed)
+ : TGrpcServiceBase<Ydb::ClickhouseInternal::V1::ClickhouseInternalService>(system, counters, id, rlAllowed)
, LimiterRegistry_(inFlightLimiterRegistry)
- , GRpcRequestProxyId_(id) {}
-
-void TGRpcYdbClickhouseInternalService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbClickhouseInternalService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbClickhouseInternalService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbClickhouseInternalService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
+{}
void TGRpcYdbClickhouseInternalService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
@@ -47,7 +29,7 @@ void TGRpcYdbClickhouseInternalService::SetupIncomingRequests(NGrpc::TLoggerPtr
NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
ActorSystem_->Send(GRpcRequestProxyId_, \
new NGRpcService::TGrpcRequestOperationCall<Ydb::ClickhouseInternal::IN, Ydb::ClickhouseInternal::OUT> \
- (ctx, &CB, NGRpcService::TRequestAuxSettings{NGRpcService::TRateLimiterMode::Rps, nullptr})); \
+ (ctx, &CB, NGRpcService::TRequestAuxSettings{RLSWITCH(NGRpcService::TRateLimiterMode::Rps), nullptr})); \
}, &Ydb::ClickhouseInternal::V1::ClickhouseInternalService::AsyncService::Request ## NAME, \
#NAME, logger, getCounterBlock("clickhouse_internal", #NAME), getLimiter("ClickhouseInternal", #NAME, DEFAULT_MAX_IN_FLIGHT))->Run();
diff --git a/ydb/services/ydb/ydb_clickhouse_internal.h b/ydb/services/ydb/ydb_clickhouse_internal.h
index a0ff8863d1..d57b776bd6 100644
--- a/ydb/services/ydb/ydb_clickhouse_internal.h
+++ b/ydb/services/ydb/ydb_clickhouse_internal.h
@@ -7,34 +7,26 @@
#include <library/cpp/actors/core/actorsystem.h>
+#include <ydb/core/grpc_services/base/base_service.h>
+
+
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbClickhouseInternalService
- : public NGrpc::TGrpcServiceBase<Ydb::ClickhouseInternal::V1::ClickhouseInternalService>
+ : public TGrpcServiceBase<Ydb::ClickhouseInternal::V1::ClickhouseInternalService>
{
private:
constexpr static i64 DEFAULT_MAX_IN_FLIGHT = 200;
public:
- TGRpcYdbClickhouseInternalService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- TIntrusivePtr<NGRpcService::TInFlightLimiterRegistry> inFlightLimiterRegistry, NActors::TActorId id);
+ TGRpcYdbClickhouseInternalService(NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
+ TIntrusivePtr<NGRpcService::TInFlightLimiterRegistry> inFlightLimiterRegistry, NActors::TActorId id, bool rlAllowed);
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
TIntrusivePtr<NGRpcService::TInFlightLimiterRegistry> LimiterRegistry_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_dummy.cpp b/ydb/services/ydb/ydb_dummy.cpp
index c628b0b3e4..72cd7638f2 100644
--- a/ydb/services/ydb/ydb_dummy.cpp
+++ b/ydb/services/ydb/ydb_dummy.cpp
@@ -112,7 +112,7 @@ private:
TEvBiStreamPingRequest::TResponse Resp_;
};
-TGRpcYdbDummyService::TGRpcYdbDummyService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId proxyActorId)
+TGRpcYdbDummyService::TGRpcYdbDummyService(NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NActors::TActorId proxyActorId)
: ActorSystem_(system)
, Counters_(counters)
, GRpcRequestProxyId_(proxyActorId)
diff --git a/ydb/services/ydb/ydb_dummy.h b/ydb/services/ydb/ydb_dummy.h
index 7e3e74c506..fd80f86849 100644
--- a/ydb/services/ydb/ydb_dummy.h
+++ b/ydb/services/ydb/ydb_dummy.h
@@ -12,7 +12,7 @@ class TGRpcYdbDummyService
: public NGrpc::TGrpcServiceBase<Draft::Dummy::DummyService>
{
public:
- TGRpcYdbDummyService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId proxyActorId);
+ TGRpcYdbDummyService(NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NActors::TActorId proxyActorId);
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
@@ -26,7 +26,7 @@ private:
NActors::TActorSystem* ActorSystem_;
grpc::ServerCompletionQueue* CQ_ = nullptr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters_;
NActors::TActorId GRpcRequestProxyId_;
NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
diff --git a/ydb/services/ydb/ydb_experimental.cpp b/ydb/services/ydb/ydb_experimental.cpp
index 1ca0009770..c5904aef47 100644
--- a/ydb/services/ydb/ydb_experimental.cpp
+++ b/ydb/services/ydb/ydb_experimental.cpp
@@ -7,30 +7,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcYdbExperimentalService::TGRpcYdbExperimentalService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id) {}
-
-void TGRpcYdbExperimentalService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbExperimentalService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbExperimentalService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbExperimentalService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbExperimentalService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
diff --git a/ydb/services/ydb/ydb_experimental.h b/ydb/services/ydb/ydb_experimental.h
index c312a18cac..e13f11a790 100644
--- a/ydb/services/ydb/ydb_experimental.h
+++ b/ydb/services/ydb/ydb_experimental.h
@@ -5,31 +5,19 @@
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/draft/ydb_experimental_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbExperimentalService
- : public NGrpc::TGrpcServiceBase<Ydb::Experimental::V1::ExperimentalService>
+ : public TGrpcServiceBase<Ydb::Experimental::V1::ExperimentalService>
{
public:
- TGRpcYdbExperimentalService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
+ using TGrpcServiceBase<Ydb::Experimental::V1::ExperimentalService>::TGrpcServiceBase;
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_export.cpp b/ydb/services/ydb/ydb_export.cpp
index 4a180db6be..5b279782db 100644
--- a/ydb/services/ydb/ydb_export.cpp
+++ b/ydb/services/ydb/ydb_export.cpp
@@ -7,30 +7,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcYdbExportService::TGRpcYdbExportService(NActors::TActorSystem *system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{ }
-
-void TGRpcYdbExportService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbExportService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbExportService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbExportService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbExportService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
diff --git a/ydb/services/ydb/ydb_export.h b/ydb/services/ydb/ydb_export.h
index 6049462ca2..44258ec94d 100644
--- a/ydb/services/ydb/ydb_export.h
+++ b/ydb/services/ydb/ydb_export.h
@@ -3,30 +3,19 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/ydb_export_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbExportService
- : public NGrpc::TGrpcServiceBase<Ydb::Export::V1::ExportService>
+ : public TGrpcServiceBase<Ydb::Export::V1::ExportService>
{
public:
- TGRpcYdbExportService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
+ using TGrpcServiceBase<Ydb::Export::V1::ExportService>::TGrpcServiceBase;
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_import.cpp b/ydb/services/ydb/ydb_import.cpp
index ba7f928915..300747d7cc 100644
--- a/ydb/services/ydb/ydb_import.cpp
+++ b/ydb/services/ydb/ydb_import.cpp
@@ -7,30 +7,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcYdbImportService::TGRpcYdbImportService(NActors::TActorSystem *system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{ }
-
-void TGRpcYdbImportService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbImportService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbImportService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbImportService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbImportService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
diff --git a/ydb/services/ydb/ydb_import.h b/ydb/services/ydb/ydb_import.h
index a7db52853a..bc05afffce 100644
--- a/ydb/services/ydb/ydb_import.h
+++ b/ydb/services/ydb/ydb_import.h
@@ -3,30 +3,20 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/ydb_import_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
+
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbImportService
- : public NGrpc::TGrpcServiceBase<Ydb::Import::V1::ImportService>
+ : public TGrpcServiceBase<Ydb::Import::V1::ImportService>
{
public:
- TGRpcYdbImportService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
+ using TGrpcServiceBase<Ydb::Import::V1::ImportService>::TGrpcServiceBase;
- bool IncRequest();
- void DecRequest();
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_index_table_ut.cpp b/ydb/services/ydb/ydb_index_table_ut.cpp
index e069859e53..4459e00158 100644
--- a/ydb/services/ydb/ydb_index_table_ut.cpp
+++ b/ydb/services/ydb/ydb_index_table_ut.cpp
@@ -43,110 +43,6 @@ void CreateTestTableWithIndex(NYdb::NTable::TTableClient& client) {
}
Y_UNIT_TEST_SUITE(YdbIndexTable) {
- Y_UNIT_TEST(FastSplitIndex) {
- TKikimrWithGrpcAndRootSchema server;
-
- NYdb::TDriver driver(TDriverConfig().SetEndpoint(TStringBuilder() << "localhost:" << server.GetPort()));
- NYdb::NTable::TTableClient client(driver);
- NFlatTests::TFlatMsgBusClient oldClient(server.ServerSettings->Port);
-
- CreateTestTableWithIndex(client);
-
- size_t shardsBefore = oldClient.GetTablePartitions("/Root/Foo/TimestampIndex/indexImplTable").size();
- Cerr << "Index table has " << shardsBefore << " shards" << Endl;
- UNIT_ASSERT_VALUES_EQUAL(shardsBefore, 1);
-
- NDataShard::gDbStatsReportInterval = TDuration::Seconds(0);
- server.Server_->GetRuntime()->SetLogPriority(NKikimrServices::FLAT_TX_SCHEMESHARD, NActors::NLog::PRI_NOTICE);
-
- // Set low CPU usage threshold for robustness
- TAtomic unused;
- server.Server_->GetRuntime()->GetAppData().Icb->SetValue("SchemeShard_FastSplitCpuPercentageThreshold", 1, unused);
- server.Server_->GetRuntime()->GetAppData().Icb->SetValue("DataShardControls.CpuUsageReportThreshlodPercent", 1, unused);
- server.Server_->GetRuntime()->GetAppData().Icb->SetValue("DataShardControls.CpuUsageReportIntervalSeconds", 3, unused);
-
- TString query =
- "DECLARE $name_hash AS Uint32;\n"
- "DECLARE $name AS Utf8;\n"
- "DECLARE $version AS Uint32;\n"
- "DECLARE $timestamp AS Int64;\n\n"
- "UPSERT INTO `/Root/Foo` (NameHash, Name, Version, Timestamp) "
- " VALUES ($name_hash, $name, $version, $timestamp);";
-
- TAtomic enough = 0;
- auto threadFunc = [&client, &query, &enough](TString namePrefix) {
- auto sessionResult = client.CreateSession().ExtractValueSync();
- UNIT_ASSERT_VALUES_EQUAL(sessionResult.GetStatus(), EStatus::SUCCESS);
- auto session = sessionResult.GetSession();
-
- for (int key = 0 ; key < 2000 && !AtomicGet(enough); ++key) {
- TString name = namePrefix + ToString(key);
-
- auto paramsBuilder = client.GetParamsBuilder();
- auto params = paramsBuilder
- .AddParam("$name_hash")
- .Uint32(MurmurHash<ui32>(name.data(), name.size()))
- .Build()
- .AddParam("$name")
- .Utf8(name)
- .Build()
- .AddParam("$version")
- .Uint32(key%5)
- .Build()
- .AddParam("$timestamp")
- .Int64(key%10)
- .Build()
- .Build();
-
- auto result = session.ExecuteDataQuery(
- query,
- TTxControl::BeginTx().CommitTx(), std::move(params)).ExtractValueSync();
-
- if (!result.IsSuccess() && result.GetStatus() != NYdb::EStatus::OVERLOADED) {
- TString err = result.GetIssues().ToString();
- Cerr << result.GetStatus() << ": " << err << Endl;
- }
- UNIT_ASSERT_EQUAL(result.IsTransportError(), false);
- }
- };
-
- IThreadFactory* pool = SystemThreadFactory();
-
- TAtomic finished = 0;
- TVector<TAutoPtr<IThreadFactory::IThread>> threads;
- threads.resize(10);
- for (size_t i = 0; i < threads.size(); i++) {
- TString namePrefix;
- namePrefix.append(5000, 'a' + i);
- threads[i] = pool->Run([threadFunc, namePrefix, &finished]() {
- threadFunc(namePrefix);
- AtomicIncrement(finished);
- });
- }
-
- // Wait for split to happen
- while (AtomicGet(finished) < (i64)threads.size()) {
- size_t shardsAfter = oldClient.GetTablePartitions("/Root/Foo/TimestampIndex/indexImplTable").size();
- if (shardsAfter > shardsBefore) {
- AtomicSet(enough, 1);
- break;
- }
- Sleep(TDuration::Seconds(5));
- }
-
- for (size_t i = 0; i < threads.size(); i++) {
- threads[i]->Join();
- }
-
- int retries = 5;
- size_t shardsAfter = 0;
- for (;retries > 0 && shardsAfter <= shardsBefore; --retries, Sleep(TDuration::Seconds(1))) {
- shardsAfter = oldClient.GetTablePartitions("/Root/Foo/TimestampIndex/indexImplTable").size();
- }
- Cerr << "Index table has " << shardsAfter << " shards" << Endl;
- UNIT_ASSERT_C(shardsAfter > shardsBefore, "Index table didn't split!!11 O_O");
- }
-
Y_UNIT_TEST(AlterIndexImplBySuperUser) {
TKikimrWithGrpcAndRootSchema server;
diff --git a/ydb/services/ydb/ydb_logstore.cpp b/ydb/services/ydb/ydb_logstore.cpp
index a036a6ee34..9b07a408fc 100644
--- a/ydb/services/ydb/ydb_logstore.cpp
+++ b/ydb/services/ydb/ydb_logstore.cpp
@@ -7,31 +7,6 @@
namespace NKikimr::NGRpcService {
-TGRpcYdbLogStoreService::TGRpcYdbLogStoreService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id) {}
-
-void TGRpcYdbLogStoreService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbLogStoreService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbLogStoreService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbLogStoreService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbLogStoreService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
using namespace Ydb;
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
diff --git a/ydb/services/ydb/ydb_logstore.h b/ydb/services/ydb/ydb_logstore.h
index 17b954463a..460c9683a0 100644
--- a/ydb/services/ydb/ydb_logstore.h
+++ b/ydb/services/ydb/ydb_logstore.h
@@ -5,29 +5,17 @@
#include <library/cpp/grpc/server/grpc_server.h>
#include <library/cpp/actors/core/actorsystem.h>
+#include <ydb/core/grpc_services/base/base_service.h>
+
namespace NKikimr::NGRpcService {
class TGRpcYdbLogStoreService
- : public NGrpc::TGrpcServiceBase<Ydb::LogStore::V1::LogStoreService>
+ : public TGrpcServiceBase<Ydb::LogStore::V1::LogStoreService>
{
public:
- TGRpcYdbLogStoreService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
+ using TGrpcServiceBase<Ydb::LogStore::V1::LogStoreService>::TGrpcServiceBase;
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
}
diff --git a/ydb/services/ydb/ydb_long_tx.cpp b/ydb/services/ydb/ydb_long_tx.cpp
index 0ae6bcfb74..9f7d6fe355 100644
--- a/ydb/services/ydb/ydb_long_tx.cpp
+++ b/ydb/services/ydb/ydb_long_tx.cpp
@@ -7,33 +7,6 @@
namespace NKikimr {
namespace NGRpcService {
-
-TGRpcYdbLongTxService::TGRpcYdbLongTxService(NActors::TActorSystem* system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{}
-
-void TGRpcYdbLongTxService::InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbLongTxService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbLongTxService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbLongTxService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbLongTxService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
diff --git a/ydb/services/ydb/ydb_long_tx.h b/ydb/services/ydb/ydb_long_tx.h
index 1788da91c5..75ffe47800 100644
--- a/ydb/services/ydb/ydb_long_tx.h
+++ b/ydb/services/ydb/ydb_long_tx.h
@@ -3,31 +3,18 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/draft/ydb_long_tx_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbLongTxService
- : public NGrpc::TGrpcServiceBase<Ydb::LongTx::V1::LongTxService>
+ : public TGrpcServiceBase<Ydb::LongTx::V1::LongTxService>
{
public:
- TGRpcYdbLongTxService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
+ using TGrpcServiceBase<Ydb::LongTx::V1::LongTxService>::TGrpcServiceBase;
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_monitoring_ut.cpp b/ydb/services/ydb/ydb_monitoring_ut.cpp
new file mode 100644
index 0000000000..773c161e5d
--- /dev/null
+++ b/ydb/services/ydb/ydb_monitoring_ut.cpp
@@ -0,0 +1,27 @@
+#include "ydb_common_ut.h"
+
+#include <ydb/public/api/grpc/ydb_monitoring_v1.grpc.pb.h>
+#include <ydb/public/sdk/cpp/client/ydb_result/result.h>
+#include <ydb/public/sdk/cpp/client/ydb_monitoring/monitoring.h>
+#include <ydb/public/sdk/cpp/client/ydb_proto/accessor.h>
+
+#include <ydb/library/yql/public/issue/yql_issue.h>
+#include <ydb/library/yql/public/issue/yql_issue_message.h>
+
+using namespace NYdb;
+
+Y_UNIT_TEST_SUITE(YdbMonitoring) {
+ Y_UNIT_TEST(SelfCheck) {
+ TKikimrWithGrpcAndRootSchema server;
+ ui16 grpc = server.GetPort();
+ TString location = TStringBuilder() << "localhost:" << grpc;
+ auto connection = NYdb::TDriver(
+ TDriverConfig()
+ .SetEndpoint(location));
+ auto client = NYdb::NMonitoring::TMonitoringClient(connection);
+ auto result = client.SelfCheck().GetValueSync();
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
+ const auto& proto = NYdb::TProtoAccessor::GetProto(result);
+ Cerr << proto.DebugString() << Endl;
+ }
+}
diff --git a/ydb/services/ydb/ydb_operation.cpp b/ydb/services/ydb/ydb_operation.cpp
index 4d7d63a433..f202a0b8c8 100644
--- a/ydb/services/ydb/ydb_operation.cpp
+++ b/ydb/services/ydb/ydb_operation.cpp
@@ -8,30 +8,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcOperationService::TGRpcOperationService(NActors::TActorSystem *system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{ }
-
-void TGRpcOperationService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcOperationService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter *limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcOperationService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcOperationService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcOperationService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
using namespace Ydb;
@@ -46,7 +22,7 @@ void TGRpcOperationService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
ActorSystem_->Send(GRpcRequestProxyId_, \
new TCALL<Operations::NAME##Request, Operations::NAME##Response> \
- (ctx, &CB, TRequestAuxSettings{TRateLimiterMode::Rps, nullptr})); \
+ (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr})); \
}, &Operation::V1::OperationService::AsyncService::Request ## NAME, \
#NAME, logger, getCounterBlock("operation", #NAME))->Run();
diff --git a/ydb/services/ydb/ydb_operation.h b/ydb/services/ydb/ydb_operation.h
index 9f7e8646b1..2e3959997a 100644
--- a/ydb/services/ydb/ydb_operation.h
+++ b/ydb/services/ydb/ydb_operation.h
@@ -3,30 +3,18 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <ydb/public/api/grpc/ydb_operation_v1.grpc.pb.h>
#include <library/cpp/grpc/server/grpc_server.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
class TGRpcOperationService
- : public NGrpc::TGrpcServiceBase<Ydb::Operation::V1::OperationService>
+ : public TGrpcServiceBase<Ydb::Operation::V1::OperationService>
{
public:
- TGRpcOperationService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
+ using TGrpcServiceBase<Ydb::Operation::V1::OperationService>::TGrpcServiceBase;
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_s3_internal.cpp b/ydb/services/ydb/ydb_s3_internal.cpp
index 5dca2c2fd9..3dcada013e 100644
--- a/ydb/services/ydb/ydb_s3_internal.cpp
+++ b/ydb/services/ydb/ydb_s3_internal.cpp
@@ -7,30 +7,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcYdbS3InternalService::TGRpcYdbS3InternalService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id) {}
-
-void TGRpcYdbS3InternalService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbS3InternalService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbS3InternalService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbS3InternalService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbS3InternalService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
diff --git a/ydb/services/ydb/ydb_s3_internal.h b/ydb/services/ydb/ydb_s3_internal.h
index e947a9b131..9306ed09f1 100644
--- a/ydb/services/ydb/ydb_s3_internal.h
+++ b/ydb/services/ydb/ydb_s3_internal.h
@@ -3,31 +3,19 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/draft/ydb_s3_internal_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbS3InternalService
- : public NGrpc::TGrpcServiceBase<Ydb::S3Internal::V1::S3InternalService>
+ : public TGrpcServiceBase<Ydb::S3Internal::V1::S3InternalService>
{
public:
- TGRpcYdbS3InternalService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
+ using TGrpcServiceBase<Ydb::S3Internal::V1::S3InternalService>::TGrpcServiceBase;
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_scheme.cpp b/ydb/services/ydb/ydb_scheme.cpp
index ac339f54ab..0bc6bc45b2 100644
--- a/ydb/services/ydb/ydb_scheme.cpp
+++ b/ydb/services/ydb/ydb_scheme.cpp
@@ -8,30 +8,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcYdbSchemeService::TGRpcYdbSchemeService(NActors::TActorSystem *system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{ }
-
-void TGRpcYdbSchemeService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbSchemeService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbSchemeService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbSchemeService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbSchemeService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
@@ -45,7 +21,7 @@ void TGRpcYdbSchemeService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
ActorSystem_->Send(GRpcRequestProxyId_, \
new TGrpcRequestOperationCall<Ydb::Scheme::NAME##Request, Ydb::Scheme::NAME##Response> \
- (ctx, &CB, TRequestAuxSettings{TRateLimiterMode::Rps, nullptr})); \
+ (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr})); \
}, &Ydb::Scheme::V1::SchemeService::AsyncService::Request ## NAME, \
#NAME, logger, getCounterBlock("scheme", #NAME))->Run();
diff --git a/ydb/services/ydb/ydb_scheme.h b/ydb/services/ydb/ydb_scheme.h
index a510e5f592..9356c35e81 100644
--- a/ydb/services/ydb/ydb_scheme.h
+++ b/ydb/services/ydb/ydb_scheme.h
@@ -3,30 +3,20 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/ydb_scheme_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbSchemeService
- : public NGrpc::TGrpcServiceBase<Ydb::Scheme::V1::SchemeService>
+ : public TGrpcServiceBase<Ydb::Scheme::V1::SchemeService>
{
public:
- TGRpcYdbSchemeService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id);
+ using TGrpcServiceBase<Ydb::Scheme::V1::SchemeService>::TGrpcServiceBase;
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
-
- bool IncRequest();
- void DecRequest();
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_scripting.cpp b/ydb/services/ydb/ydb_scripting.cpp
index 3596b17fd9..7562d31cc1 100644
--- a/ydb/services/ydb/ydb_scripting.cpp
+++ b/ydb/services/ydb/ydb_scripting.cpp
@@ -8,30 +8,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcYdbScriptingService::TGRpcYdbScriptingService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id) {}
-
-void TGRpcYdbScriptingService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbScriptingService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbScriptingService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbScriptingService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbScriptingService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
using Ydb::Scripting::ExecuteYqlRequest;
using Ydb::Scripting::ExecuteYqlResponse;
@@ -55,19 +31,19 @@ void TGRpcYdbScriptingService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
ADD_REQUEST(ExecuteYql, ExecuteYqlRequest, ExecuteYqlResponse, {
ActorSystem_->Send(GRpcRequestProxyId_,
new TGrpcRequestOperationCall<ExecuteYqlRequest, ExecuteYqlResponse>
- (ctx, &DoExecuteYqlScript, TRequestAuxSettings{TRateLimiterMode::Ru, nullptr}));
+ (ctx, &DoExecuteYqlScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Ru), nullptr}));
})
ADD_REQUEST(StreamExecuteYql, ExecuteYqlRequest, ExecuteYqlPartialResponse, {
ActorSystem_->Send(GRpcRequestProxyId_,
new TGrpcRequestNoOperationCall<ExecuteYqlRequest, ExecuteYqlPartialResponse>
- (ctx, &DoStreamExecuteYqlScript, TRequestAuxSettings{TRateLimiterMode::Rps, nullptr}));
+ (ctx, &DoStreamExecuteYqlScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr}));
})
ADD_REQUEST(ExplainYql, ExplainYqlRequest, ExplainYqlResponse, {
ActorSystem_->Send(GRpcRequestProxyId_,
new TGrpcRequestOperationCall<ExplainYqlRequest, ExplainYqlResponse>
- (ctx, &DoExplainYqlScript, TRequestAuxSettings{TRateLimiterMode::Rps, nullptr}));
+ (ctx, &DoExplainYqlScript, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::Rps), nullptr}));
})
#undef ADD_REQUEST
}
diff --git a/ydb/services/ydb/ydb_scripting.h b/ydb/services/ydb/ydb_scripting.h
index 9566cadeee..67de75c14c 100644
--- a/ydb/services/ydb/ydb_scripting.h
+++ b/ydb/services/ydb/ydb_scripting.h
@@ -3,31 +3,20 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/ydb_scripting_v1.grpc.pb.h>
+#include <ydb/core/grpc_services/base/base_service.h>
+
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbScriptingService
- : public NGrpc::TGrpcServiceBase<Ydb::Scripting::V1::ScriptingService>
+ : public TGrpcServiceBase<Ydb::Scripting::V1::ScriptingService>
{
public:
- TGRpcYdbScriptingService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
+ using TGrpcServiceBase<Ydb::Scripting::V1::ScriptingService>::TGrpcServiceBase;
- bool IncRequest();
- void DecRequest();
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_table.cpp b/ydb/services/ydb/ydb_table.cpp
index cf136b19bc..35d55fa4b9 100644
--- a/ydb/services/ydb/ydb_table.cpp
+++ b/ydb/services/ydb/ydb_table.cpp
@@ -7,30 +7,6 @@
namespace NKikimr {
namespace NGRpcService {
-TGRpcYdbTableService::TGRpcYdbTableService(NActors::TActorSystem *system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
- : ActorSystem_(system)
- , Counters_(counters)
- , GRpcRequestProxyId_(id)
-{ }
-
-void TGRpcYdbTableService::InitService(grpc::ServerCompletionQueue *cq, NGrpc::TLoggerPtr logger) {
- CQ_ = cq;
- SetupIncomingRequests(std::move(logger));
-}
-
-void TGRpcYdbTableService::SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) {
- Limiter_ = limiter;
-}
-
-bool TGRpcYdbTableService::IncRequest() {
- return Limiter_->Inc();
-}
-
-void TGRpcYdbTableService::DecRequest() {
- Limiter_->Dec();
- Y_ASSERT(Limiter_->GetCurrentInFlight() >= 0);
-}
-
void TGRpcYdbTableService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
auto getCounterBlock = CreateCounterCb(Counters_, ActorSystem_);
#ifdef ADD_REQUEST_LIMIT
@@ -48,9 +24,9 @@ void TGRpcYdbTableService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
ActorSystem_->Send(GRpcRequestProxyId_, \
new TGrpcRequestOperationCall<Ydb::Table::NAME##Request, Ydb::Table::NAME##Response> \
- (ctx, &CB, TRequestAuxSettings{TRateLimiterMode::LIMIT_TYPE, nullptr})); \
+ (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::LIMIT_TYPE), nullptr})); \
}, &Ydb::Table::V1::TableService::AsyncService::Request ## NAME, \
- #NAME, logger, getCounterBlock("scheme", #NAME))->Run();
+ #NAME, logger, getCounterBlock("table", #NAME))->Run();
#define ADD_STREAM_REQUEST_LIMIT(NAME, IN, OUT, CB, LIMIT_TYPE) \
MakeIntrusive<TGRpcRequest<Ydb::Table::IN, Ydb::Table::OUT, TGRpcYdbTableService>> \
@@ -59,9 +35,9 @@ void TGRpcYdbTableService::SetupIncomingRequests(NGrpc::TLoggerPtr logger) {
NGRpcService::ReportGrpcReqToMon(*ActorSystem_, ctx->GetPeer()); \
ActorSystem_->Send(GRpcRequestProxyId_, \
new TGrpcRequestNoOperationCall<Ydb::Table::IN, Ydb::Table::OUT> \
- (ctx, &CB, TRequestAuxSettings{TRateLimiterMode::LIMIT_TYPE, nullptr})); \
+ (ctx, &CB, TRequestAuxSettings{RLSWITCH(TRateLimiterMode::LIMIT_TYPE), nullptr})); \
}, &Ydb::Table::V1::TableService::AsyncService::Request ## NAME, \
- #NAME, logger, getCounterBlock("scheme", #NAME))->Run();
+ #NAME, logger, getCounterBlock("table", #NAME))->Run();
ADD_REQUEST_LIMIT(CreateSession, DoCreateSessionRequest, Rps)
ADD_REQUEST_LIMIT(KeepAlive, DoKeepAliveRequest, Rps)
diff --git a/ydb/services/ydb/ydb_table.h b/ydb/services/ydb/ydb_table.h
index 77756bf023..38f9ea77c0 100644
--- a/ydb/services/ydb/ydb_table.h
+++ b/ydb/services/ydb/ydb_table.h
@@ -3,32 +3,19 @@
#include <library/cpp/actors/core/actorsystem.h>
#include <library/cpp/grpc/server/grpc_server.h>
#include <ydb/public/api/grpc/ydb_table_v1.grpc.pb.h>
-
+#include <ydb/core/grpc_services/base/base_service.h>
namespace NKikimr {
namespace NGRpcService {
class TGRpcYdbTableService
- : public NGrpc::TGrpcServiceBase<Ydb::Table::V1::TableService>
+ : public TGrpcServiceBase<Ydb::Table::V1::TableService>
{
public:
- TGRpcYdbTableService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
- NActors::TActorId id);
-
- void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
- void SetGlobalLimiterHandle(NGrpc::TGlobalLimiter* limiter) override;
+ using TGrpcServiceBase<Ydb::Table::V1::TableService>::TGrpcServiceBase;
- bool IncRequest();
- void DecRequest();
private:
void SetupIncomingRequests(NGrpc::TLoggerPtr logger);
-
- NActors::TActorSystem* ActorSystem_;
- grpc::ServerCompletionQueue* CQ_ = nullptr;
-
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
- NActors::TActorId GRpcRequestProxyId_;
- NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
} // namespace NGRpcService
diff --git a/ydb/services/ydb/ydb_ut.cpp b/ydb/services/ydb/ydb_ut.cpp
index 8e02cd5ec6..65d0827b65 100644
--- a/ydb/services/ydb/ydb_ut.cpp
+++ b/ydb/services/ydb/ydb_ut.cpp
@@ -5357,7 +5357,7 @@ Y_UNIT_TEST(LocksFromAnotherTenants) {
TString query = Sprintf("UPSERT INTO `Root/%s/table` (Key, Value) SELECT Key, Value FROM `Root/%s/table`;", second_tenant_name.c_str(), first_tenant_name.c_str());
auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx()).ExtractValueSync();
UNIT_ASSERT_EQUAL(result.IsTransportError(), false);
- UNIT_ASSERT_EQUAL_C(result.GetStatus(), EStatus::GENERIC_ERROR,
+ UNIT_ASSERT_EQUAL_C(result.GetStatus(), EStatus::CANCELLED,
"Status: " << result.GetStatus()
<< " Issues: " << result.GetIssues().ToString());
}
diff --git a/ydb/services/yq/CMakeLists.txt b/ydb/services/yq/CMakeLists.txt
index aa8ee40141..c389dcb29d 100644
--- a/ydb/services/yq/CMakeLists.txt
+++ b/ydb/services/yq/CMakeLists.txt
@@ -6,6 +6,7 @@
# original buildsystem will not be accepted.
+add_subdirectory(ut_integration)
add_library(ydb-services-yq)
target_link_libraries(ydb-services-yq PUBLIC
diff --git a/ydb/services/yq/grpc_service.cpp b/ydb/services/yq/grpc_service.cpp
index 188e39d13b..a7505e18d0 100644
--- a/ydb/services/yq/grpc_service.cpp
+++ b/ydb/services/yq/grpc_service.cpp
@@ -9,7 +9,7 @@
namespace NKikimr::NGRpcService {
TGRpcYandexQueryService::TGRpcYandexQueryService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
: ActorSystem_(system)
, Counters_(counters)
, GRpcRequestProxyId_(id) {}
diff --git a/ydb/services/yq/grpc_service.h b/ydb/services/yq/grpc_service.h
index 6cb8d70c64..33a99190a6 100644
--- a/ydb/services/yq/grpc_service.h
+++ b/ydb/services/yq/grpc_service.h
@@ -13,7 +13,7 @@ class TGRpcYandexQueryService
: public NGrpc::TGrpcServiceBase<YandexQuery::V1::YandexQueryService>
{
public:
- TGRpcYandexQueryService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TGRpcYandexQueryService(NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
NActors::TActorId id);
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
@@ -27,7 +27,7 @@ private:
NActors::TActorSystem* ActorSystem_;
grpc::ServerCompletionQueue* CQ_ = nullptr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters_;
NActors::TActorId GRpcRequestProxyId_;
NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
diff --git a/ydb/services/yq/private_grpc.cpp b/ydb/services/yq/private_grpc.cpp
index c4c076b482..da64eddbbb 100644
--- a/ydb/services/yq/private_grpc.cpp
+++ b/ydb/services/yq/private_grpc.cpp
@@ -9,7 +9,7 @@ namespace NKikimr {
namespace NGRpcService {
TGRpcYqPrivateTaskService::TGRpcYqPrivateTaskService(NActors::TActorSystem *system,
- TIntrusivePtr<NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> counters, NActors::TActorId id)
: ActorSystem_(system)
, Counters_(counters)
, GRpcRequestProxyId_(id) {}
diff --git a/ydb/services/yq/private_grpc.h b/ydb/services/yq/private_grpc.h
index f5107a7c10..7b81550660 100644
--- a/ydb/services/yq/private_grpc.h
+++ b/ydb/services/yq/private_grpc.h
@@ -11,7 +11,7 @@ class TGRpcYqPrivateTaskService
: public NGrpc::TGrpcServiceBase<Yq::Private::V1::YqPrivateTaskService>
{
public:
- TGRpcYqPrivateTaskService(NActors::TActorSystem* system, TIntrusivePtr<NMonitoring::TDynamicCounters> counters,
+ TGRpcYqPrivateTaskService(NActors::TActorSystem* system, TIntrusivePtr<::NMonitoring::TDynamicCounters> counters,
NActors::TActorId id);
void InitService(grpc::ServerCompletionQueue* cq, NGrpc::TLoggerPtr logger) override;
@@ -25,7 +25,7 @@ private:
NActors::TActorSystem* ActorSystem_;
grpc::ServerCompletionQueue* CQ_ = nullptr;
- TIntrusivePtr<NMonitoring::TDynamicCounters> Counters_;
+ TIntrusivePtr<::NMonitoring::TDynamicCounters> Counters_;
NActors::TActorId GRpcRequestProxyId_;
NGrpc::TGlobalLimiter* Limiter_ = nullptr;
};
diff --git a/ydb/services/yq/ut_integration/CMakeLists.txt b/ydb/services/yq/ut_integration/CMakeLists.txt
index fc7b1ee73c..dbfe6fa2c4 100644
--- a/ydb/services/yq/ut_integration/CMakeLists.txt
+++ b/ydb/services/yq/ut_integration/CMakeLists.txt
@@ -8,6 +8,6 @@
if (APPLE)
include(CMakeLists.darwin.txt)
-elseif (UNIX AND NOT APPLE)
+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE)
include(CMakeLists.linux.txt)
endif()
diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan
index a0685b27cd..335217c5ae 100644
--- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan
+++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan
@@ -73,8 +73,6 @@
"PlanNodeId": 1,
"Operators": [
{
- "GroupBy": "0",
- "Aggregation": "Inc(state)",
"Name": "Aggregate"
},
{
@@ -95,11 +93,14 @@
],
"Operators": [
{
+ "Name": "Aggregate"
+ },
+ {
"Name": "Limit",
"Limit": "1001"
}
],
- "Node Type": "Limit"
+ "Node Type": "Aggregate-Limit"
}
],
"Node Type": "Precompute_0_0",
@@ -189,8 +190,6 @@
"PlanNodeId": 1,
"Operators": [
{
- "GroupBy": "0",
- "Aggregation": "Inc(state)",
"Name": "Aggregate"
},
{
@@ -211,11 +210,14 @@
],
"Operators": [
{
+ "Name": "Aggregate"
+ },
+ {
"Name": "Limit",
"Limit": "1001"
}
],
- "Node Type": "Limit"
+ "Node Type": "Aggregate-Limit"
}
],
"Node Type": "Precompute_0_0",
diff --git a/ydb/tests/functional/rename/test.py b/ydb/tests/functional/rename/test.py
index 01f5e421b8..751d1382ad 100644
--- a/ydb/tests/functional/rename/test.py
+++ b/ydb/tests/functional/rename/test.py
@@ -141,6 +141,7 @@ class Simple:
upsert_table_template = (
"""
+ PRAGMA Kikimr.UseNewEngine="True";
DECLARE $key AS Uint64;
DECLARE $value AS Utf8;
@@ -152,6 +153,7 @@ class Simple:
select_table_template = (
"""
+ PRAGMA Kikimr.UseNewEngine="True";
DECLARE $key AS Uint64;
SELECT value FROM `{table}` WHERE id = $key;
"""
@@ -159,6 +161,7 @@ class Simple:
select_index_table_template = (
"""
+ PRAGMA Kikimr.UseNewEngine="True";
DECLARE $value AS Utf8;
SELECT id FROM `{table}` VIEW `value_index` WHERE value = $value;
"""
diff --git a/ydb/tests/functional/serverless/test.py b/ydb/tests/functional/serverless/test.py
index 55e6b5d4e2..9d7462ce87 100644
--- a/ydb/tests/functional/serverless/test.py
+++ b/ydb/tests/functional/serverless/test.py
@@ -63,6 +63,7 @@ def test_create_table(ydb_hostel_db, ydb_serverless_db, ydb_endpoint, metering_f
def write_some_data(session, path):
session.transaction().execute(
"""
+ PRAGMA Kikimr.UseNewEngine="True";
UPSERT INTO `{}` (id, value_string, value_num)
VALUES (1u, "Ok", 0u),
(2u, "Also_Ok", 0u),
@@ -118,6 +119,7 @@ def test_turn_on_serverless_storage_billing(ydb_hostel_db, ydb_serverless_db, yd
def write_some_data(session, path):
session.transaction().execute(
"""
+ PRAGMA Kikimr.UseNewEngine="True";
UPSERT INTO `{}` (id, value_string, value_num)
VALUES (1u, "Ok", 0u),
(2u, "Also_Ok", 0u),
@@ -302,6 +304,7 @@ def test_database_with_disk_quotas(ydb_hostel_db, ydb_disk_quoted_serverless_db,
try:
with (yield async_session()) as session:
query = yield session.async_prepare('''\
+ PRAGMA Kikimr.UseNewEngine="True";
DECLARE $key AS Uint64;
DECLARE $value AS Utf8;
@@ -325,6 +328,7 @@ def test_database_with_disk_quotas(ydb_hostel_db, ydb_disk_quoted_serverless_db,
def async_erase_key(path, key):
with (yield async_session()) as session:
query = yield session.async_prepare('''\
+ PRAGMA Kikimr.UseNewEngine="True";
DECLARE $key AS Uint64;
DELETE FROM `{path}` WHERE id = $key;
diff --git a/ydb/tests/functional/sqs/common/test_account_actions.py b/ydb/tests/functional/sqs/common/test_account_actions.py
index 74e1a4595d..539192febb 100644
--- a/ydb/tests/functional/sqs/common/test_account_actions.py
+++ b/ydb/tests/functional/sqs/common/test_account_actions.py
@@ -1,12 +1,17 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+
+import pytest
from hamcrest import assert_that, not_none, has_item, is_not
from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, get_test_with_sqs_installation_by_path, get_test_with_sqs_tenant_installation
+from ydb.tests.library.sqs.test_base import TABLES_FORMAT_PARAMS
class AccountActionsTest(KikimrSqsTestBase):
- def test_manage_account(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_manage_account(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
user_name = 'pupkin'
create_user_result = self._sqs_api.create_user(user_name)
assert_that(
diff --git a/ydb/tests/functional/sqs/common/test_counters.py b/ydb/tests/functional/sqs/common/test_counters.py
index 80149eac96..aebfd1b14f 100644
--- a/ydb/tests/functional/sqs/common/test_counters.py
+++ b/ydb/tests/functional/sqs/common/test_counters.py
@@ -6,7 +6,7 @@ import time
import pytest
from hamcrest import assert_that, equal_to, none, not_, greater_than, raises
-from ydb.tests.library.sqs.test_base import KikimrSqsTestBase
+from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, TABLES_FORMAT_PARAMS
class TestSqsCountersFeatures(KikimrSqsTestBase):
@@ -26,7 +26,9 @@ class TestSqsCountersFeatures(KikimrSqsTestBase):
self._execute_yql_query('UPSERT INTO `{}` (State, ShowDetailedCountersDeadline) VALUES (0, {})'
.format(attributes_path, deadline))
- def test_creates_counter(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_creates_counter(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name)
self._sqs_api.get_queue_attributes(queue_url) # Ensure that counters structure is initialized.
@@ -117,7 +119,9 @@ class TestSqsCountersFeatures(KikimrSqsTestBase):
assert_that(counter, equal_to(0))
break
- def test_removes_user_counters_after_user_deletion(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_removes_user_counters_after_user_deletion(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
self._sqs_api.list_queues() # init user's structure in server
counter_labels = {
'subsystem': 'core',
@@ -202,7 +206,9 @@ class TestSqsCountersFeatures(KikimrSqsTestBase):
assert_that(queue_counter, not_(none()))
break
- def test_updates_status_code_counters_when_parsing_errors_occur(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_updates_status_code_counters_when_parsing_errors_occur(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
self._sqs_api.list_queues() # init user's structure in server
counter_labels = {
'subsystem': 'core',
@@ -238,7 +244,9 @@ class TestSqsCountersExportDelay(KikimrSqsTestBase):
config_generator.yaml_config['sqs_config']['queue_counters_export_delay_ms'] = 2000
return config_generator
- def test_export_delay(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_export_delay(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
counter_labels = {
'subsystem': 'core',
'user': self._username,
diff --git a/ydb/tests/functional/sqs/common/test_format_without_version.py b/ydb/tests/functional/sqs/common/test_format_without_version.py
new file mode 100644
index 0000000000..718ff3e837
--- /dev/null
+++ b/ydb/tests/functional/sqs/common/test_format_without_version.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import pytest
+import uuid
+import time
+
+from hamcrest import assert_that, equal_to
+
+from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, get_test_with_sqs_installation_by_path, get_test_with_sqs_tenant_installation, IS_FIFO_PARAMS
+from ydb.tests.library.sqs.tables import create_queue_tables
+from ydb.tests.library.common.types import TabletTypes
+
+from ydb.tests.library.sqs.matchers import ReadResponseMatcher
+
+
+class QueueWithoutVersionTest(KikimrSqsTestBase):
+ used_tablets = []
+
+ def chose_tablet(self):
+ response = self.cluster.client.tablet_state(TabletTypes.FLAT_DATASHARD)
+ for info in response.TabletStateInfo:
+ if info.TabletId not in self.used_tablets:
+ self.used_tablets.append(info.TabletId)
+ return info.TabletId
+ assert(False)
+
+ def get_table_path(self, table=None):
+ table_path = f'{self.sqs_root}/{self._username}/{self.queue_name}'
+ if table is not None:
+ table_path += f'/{table}'
+ return table_path
+
+ def init_queue(self, is_fifo):
+ self._init_with_params(is_fifo)
+ queue_tables_path = self.get_table_path()
+ session = self._driver.table_client.session().create()
+
+ now = int(1000*time.time())
+ shards = 1 if is_fifo else 2
+ tablet_id = self.chose_tablet()
+ create_queue_tables(queue_tables_path, is_fifo, self._driver, session, shards)
+
+ queues_table = self.sqs_root + '/.Queues'
+ self._execute_yql_query(
+ f'''UPSERT INTO `{queues_table}`
+ (Account, QueueName, QueueId, QueueState, FifoQueue, DeadLetterQueue, Shards, MasterTabletId, CreatedTimestamp, FolderId, DlqName, Partitions)
+ VALUES
+ ("{self._username}", "{self.queue_name}", "{uuid.uuid1()}", 1, {is_fifo}, false, {shards}, {tablet_id}, {now}, "", "", 1);'''
+ )
+
+ for shard in range(shards):
+ self._execute_yql_query(
+ f'''UPSERT INTO `{self.get_table_path("State")}`
+ (State, MessageCount, InflyCount, ReadOffset, WriteOffset, CreatedTimestamp, LastModifiedTimestamp, CleanupTimestamp, RetentionBoundary)
+ VALUES({shard}, 0, 0, 0, 0, {now}, {now}, {now}, {now});'''
+ )
+
+ self._execute_yql_query(
+ f'''UPSERT INTO `{self.get_table_path("Attributes")}`
+ (State, MessageRetentionPeriod, VisibilityTimeout, MaximumMessageSize, FifoQueue, ContentBasedDeduplication, ReceiveMessageWaitTime, DelaySeconds, MaxReceiveCount)
+ VALUES (0, 345600000, 30000, 262144, {is_fifo}, false, 0, 0, 0);'''
+ )
+
+ @pytest.mark.parametrize(**IS_FIFO_PARAMS)
+ def test_common(self, is_fifo):
+ self.init_queue(is_fifo)
+
+ created_queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=is_fifo)
+ got_queue_url = self._sqs_api.get_queue_url(self.queue_name)
+ assert_that(got_queue_url, equal_to(created_queue_url.decode('utf-8')))
+
+ self.seq_no += 1
+ message_id = self._send_message_and_assert(
+ created_queue_url,
+ self._msg_body_template,
+ seq_no=self.seq_no if is_fifo else None,
+ group_id='group' if is_fifo else None
+ )
+ self._read_messages_and_assert(
+ created_queue_url,
+ messages_count=1,
+ visibility_timeout=1000,
+ matcher=ReadResponseMatcher().with_message_ids([message_id, ])
+ )
+
+ self._sqs_api.get_queue_url(self.queue_name)
+ self._sqs_api.get_queue_attributes(created_queue_url)
+ self._sqs_api.set_queue_attributes(created_queue_url, {'MaximumMessageSize': '1024'})
+
+
+class TestQueueWithoutVersionWithTenant(get_test_with_sqs_tenant_installation(QueueWithoutVersionTest)):
+ pass
+
+
+class TestQueueWithoutVersionWithPath(get_test_with_sqs_installation_by_path(QueueWithoutVersionTest)):
+ pass
diff --git a/ydb/tests/functional/sqs/common/test_queues_managing.py b/ydb/tests/functional/sqs/common/test_queues_managing.py
index 75d265ed0e..198d38c2c5 100644
--- a/ydb/tests/functional/sqs/common/test_queues_managing.py
+++ b/ydb/tests/functional/sqs/common/test_queues_managing.py
@@ -50,7 +50,9 @@ class QueuesManagingTest(KikimrSqsTestBase):
if is_fifo:
assert_that(created_attributes.get('ContentBasedDeduplication'), 'true')
- def test_create_fifo_queue_wo_postfix(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_create_fifo_queue_wo_postfix(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
def call_create():
self.called = True
self._sqs_api.create_queue(self.queue_name, is_fifo=True)
@@ -63,7 +65,9 @@ class QueuesManagingTest(KikimrSqsTestBase):
)
)
- def test_create_queue_generates_event(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_create_queue_generates_event(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
pytest.skip("Outdated")
self._create_queue_and_assert(self.queue_name, is_fifo=False)
table_path = '{}/.Queues'.format(self.sqs_root)
@@ -72,7 +76,9 @@ class QueuesManagingTest(KikimrSqsTestBase):
table_path = '{}/.Events'.format(self.sqs_root)
assert_that(self._get_table_lines_count(table_path), equal_to(1))
- def test_remove_queue_generates_event(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_remove_queue_generates_event(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
pytest.skip("Outdated")
queue_url = self._create_queue_and_assert(self.queue_name)
table_path = '{}/.Events'.format(self.sqs_root)
@@ -82,7 +88,9 @@ class QueuesManagingTest(KikimrSqsTestBase):
self._sqs_api.delete_queue(queue_url)
assert_that(self._get_table_lines_count(table_path), greater_than(lines_count))
- def test_create_queue_with_invalid_name(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_create_queue_with_invalid_name(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
def call_create():
self._sqs_api.create_queue('invalid_queue_name!')
@@ -95,8 +103,16 @@ class QueuesManagingTest(KikimrSqsTestBase):
)
@pytest.mark.parametrize(**IS_FIFO_PARAMS)
- def test_delete_queue(self, is_fifo):
- self._init_with_params(is_fifo)
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_delete_queue(self, is_fifo, tables_format):
+ self._init_with_params(is_fifo, tables_format)
+
+ another_queue_std_name = self.queue_name.replace('.', '_') + '_another_std'
+ another_queue_fifo_name = self.queue_name.replace('.', '_') + '_another.fifo'
+ another_queue_std = self._create_queue_and_assert(another_queue_std_name, is_fifo=False)
+ another_queue_fifo = self._create_queue_and_assert(another_queue_fifo_name, is_fifo=True)
+ self._sqs_api.send_message(another_queue_std, 'some message for std')
+ self._sqs_api.send_message(another_queue_fifo, 'some message for fifo', group_id='group', deduplication_id='123')
created_queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=is_fifo)
self._sqs_api.list_queues()
@@ -112,6 +128,13 @@ class QueuesManagingTest(KikimrSqsTestBase):
sends = self._get_counter_value(counters, send_message_labels)
assert_that(sends, equal_to(1))
+ def get_queue_id_number(queue_name):
+ query = f'SELECT * FROM `{self.sqs_root}/.Queues` WHERE Account="{self._username}" AND QueueName="{queue_name}"'
+ result = self._execute_yql_query(query)
+ return result[0].rows[0]['Version']
+
+ queue_id_number = get_queue_id_number(self.queue_name)
+
delete_result = self._sqs_api.delete_queue(created_queue_url)
assert_that(
delete_result, not_none()
@@ -138,7 +161,39 @@ class QueuesManagingTest(KikimrSqsTestBase):
)
)
- def test_delete_queue_batch(self):
+ def get_rows_count(table, queue_id_number=None):
+ query = f'SELECT * FROM `{self.sqs_root}/{table}`'
+ if queue_id_number is not None:
+ query += f' WHERE QueueIdNumber = {queue_id_number}'
+ result = self._execute_yql_query(query)
+ return len(result[0].rows)
+
+ def row_count_must_be(table, queue_id_number, count):
+ rows = get_rows_count(table, queue_id_number)
+ assert rows == count, f'in table `{table}` for queue_id_number={queue_id_number} rows {rows}, expected {count}'
+
+ queues_to_remove = None
+ for i in range(90):
+ queues_to_remove = get_rows_count('.RemovedQueues')
+ if queues_to_remove == 0:
+ break
+ time.sleep(1)
+ assert queues_to_remove == 0, f'queues to remove count {queues_to_remove}'
+
+ if tables_format == 1:
+ another_queue_id_number = get_queue_id_number(another_queue_fifo_name if is_fifo else another_queue_std_name)
+
+ common_dir = '.FIFO' if is_fifo else '.STD'
+ row_count_must_be(common_dir + '/Attributes', queue_id_number, 0)
+ row_count_must_be(common_dir + '/State', queue_id_number, 0)
+ row_count_must_be(common_dir + '/Messages', queue_id_number, 0)
+ row_count_must_be(common_dir + '/Attributes', another_queue_id_number, 1)
+ row_count_must_be(common_dir + '/State', another_queue_id_number, 1 if is_fifo else 2)
+ row_count_must_be(common_dir + '/Messages', another_queue_id_number, 1)
+
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_delete_queue_batch(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
existing_queues = self._sqs_api.list_queues()
assert_that(
existing_queues, empty()
@@ -204,7 +259,9 @@ class QueuesManagingTest(KikimrSqsTestBase):
message_ids = self._send_messages(created_queue_url, 1, self._msg_body_template, is_fifo=is_fifo, group_id=group_id)
self._read_messages_and_assert(created_queue_url, 1, matcher=ReadResponseMatcher().with_message_ids(message_ids))
- def test_purge_queue_batch(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_purge_queue_batch(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
created_queue_url1 = self._create_queue_and_assert(self.queue_name)
created_queue_url2 = self._create_queue_and_assert(self.queue_name + '1')
created_queue_url3 = to_bytes(created_queue_url2) + to_bytes('_nonexistent_queue_url')
@@ -260,7 +317,7 @@ class QueuesManagingTest(KikimrSqsTestBase):
master_is_updated = True
break
except RuntimeError as ex:
- assert str(ex).find('master session error') != -1
+ assert str(ex).find('master session error') != -1 or str(ex).find('failed because of an unknown error, exception or failure') != -1
time.sleep(0.5) # wait master update time
assert_that(master_is_updated)
@@ -270,7 +327,9 @@ class QueuesManagingTest(KikimrSqsTestBase):
created_queue_url, 10, ReadResponseMatcher().with_message_ids([msg_id, ])
)
- def test_ya_count_queues(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_ya_count_queues(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
assert_that(self._sqs_api.private_count_queues(), equal_to('0'))
q_url = self._create_queue_and_assert('new_q')
self._create_queue_and_assert('new_q_2')
@@ -283,7 +342,9 @@ class QueuesManagingTest(KikimrSqsTestBase):
time.sleep(2.1)
assert_that(self._sqs_api.private_count_queues(), equal_to('1'))
- def test_queues_count_over_limit(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_queues_count_over_limit(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
urls = []
for i in range(10):
urls.append(self._create_queue_and_assert('queue_{}'.format(i), shards=1, retries=1))
diff --git a/ydb/tests/functional/sqs/merge_split_common_table/__init__.py b/ydb/tests/functional/sqs/merge_split_common_table/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/ydb/tests/functional/sqs/merge_split_common_table/__init__.py
diff --git a/ydb/tests/functional/sqs/merge_split_common_table/fifo/test.py b/ydb/tests/functional/sqs/merge_split_common_table/fifo/test.py
new file mode 100644
index 0000000000..a1a9d72039
--- /dev/null
+++ b/ydb/tests/functional/sqs/merge_split_common_table/fifo/test.py
@@ -0,0 +1,6 @@
+from ydb.tests.functional.sqs.merge_split_common_table.test import TestSqsSplitMergeTables
+
+
+class TestSqsSplitMergeFifoTables(TestSqsSplitMergeTables):
+ def test_fifo_merge_split(self):
+ self.run_test(is_fifo=True)
diff --git a/ydb/tests/functional/sqs/merge_split_common_table/std/test.py b/ydb/tests/functional/sqs/merge_split_common_table/std/test.py
new file mode 100644
index 0000000000..3bbedf0df9
--- /dev/null
+++ b/ydb/tests/functional/sqs/merge_split_common_table/std/test.py
@@ -0,0 +1,6 @@
+from ydb.tests.functional.sqs.merge_split_common_table.test import TestSqsSplitMergeTables
+
+
+class TestSqsSplitMergeStdTables(TestSqsSplitMergeTables):
+ def test_std_merge_split(self):
+ self.run_test(is_fifo=False)
diff --git a/ydb/tests/functional/sqs/merge_split_common_table/test.py b/ydb/tests/functional/sqs/merge_split_common_table/test.py
new file mode 100644
index 0000000000..0fe0beefc7
--- /dev/null
+++ b/ydb/tests/functional/sqs/merge_split_common_table/test.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import logging
+import time
+
+import ydb
+import random
+import string
+
+from ydb.tests.library.common.types import Erasure
+from ydb.tests.library.sqs.test_base import KikimrSqsTestBase
+
+
+def random_string(length):
+ return ''.join([random.choice(string.ascii_lowercase) for _ in range(length)])
+
+
+class TestSqsSplitMergeTables(KikimrSqsTestBase):
+ erasure = Erasure.BLOCK_4_2
+ use_in_memory_pdisks = False
+
+ @classmethod
+ def _setup_config_generator(cls):
+ config_generator = super(TestSqsSplitMergeTables, cls)._setup_config_generator()
+ config_generator.yaml_config['sqs_config']['masters_describer_update_time_ms'] = 1000
+ config_generator.yaml_config['sqs_config']['background_metrics_update_time_ms'] = 1000
+ return config_generator
+
+ def get_leaders_per_nodes(self):
+ nodes = len(self.cluster.nodes)
+ leaders = []
+ for node_index in range(nodes):
+ counters = self._get_counters(node_index, 'utils', counters_format='json')
+ labels = {
+ 'activity': 'SQS_QUEUE_LEADER_ACTOR',
+ 'sensor': 'ActorsAliveByActivity'
+ }
+ leader_actors = self._get_counter(counters, labels)
+ leaders.append(leader_actors['value'] if leader_actors else 0)
+ return leaders
+
+ def wait_leader_started(self, queues_count):
+ while True:
+ leaders_per_node = self.get_leaders_per_nodes()
+ logging.debug(f'wait all leaders {sum(leaders_per_node)} vs {queues_count} : {leaders_per_node}')
+ if sum(leaders_per_node) == queues_count:
+ return
+ time.sleep(1)
+
+ def alter_table(self, table_path):
+ logging.info(f'alter table {table_path}...')
+ settings = ydb.RetrySettings()
+ settings.max_retries = 1
+ session = ydb.retry_operation_sync(lambda: self._driver.table_client.session().create(), retry_settings=settings)
+
+ self.__column_to_force_split = 'column_for_tests'
+ ydb.retry_operation_sync(lambda: session.alter_table(
+ table_path,
+ alter_partitioning_settings=ydb.PartitioningSettings()
+ .with_min_partitions_count(1)
+ .with_partition_size_mb(1)
+ .with_partitioning_by_size(ydb.FeatureFlag.ENABLED)
+ .with_partitioning_by_load(ydb.FeatureFlag.ENABLED),
+ add_columns=(
+ ydb.Column(
+ self.__column_to_force_split,
+ ydb.OptionalType(ydb.PrimitiveType.String),
+ ),
+ ),
+ ))
+
+ def force_split(self, table_path):
+ logging.info(f'force split {table_path}...')
+ settings = ydb.RetrySettings()
+ settings.max_retries = 1
+ session = ydb.retry_operation_sync(lambda: self._driver.table_client.session().create(), retry_settings=settings)
+ session.transaction().execute(f'update `{table_path}` SET {self.__column_to_force_split}="{random_string(5*1024*1024)}"', commit_tx=True)
+
+ def get_nodes_with_leaders(self):
+ leaders_per_node = self.get_leaders_per_nodes()
+ return len(list(filter(bool, leaders_per_node)))
+
+ def send_messages(self, is_fifo, queue_urls, messages_count=1, message_length=16):
+ logging.info('starting to send messages...')
+ group_id = 'group' if is_fifo else None
+ for i in range(messages_count):
+ for queue_url in queue_urls:
+ self.seq_no += 1
+ self._send_message_and_assert(queue_url, random_string(message_length), seq_no=self.seq_no if is_fifo else None, group_id=group_id)
+ logging.info('messages have been sent.')
+
+ def get_partitions(self, table_path):
+ session = ydb.retry_operation_sync(lambda: self._driver.table_client.session().create())
+ response = session.describe_table(
+ table_path,
+ ydb.DescribeTableSettings().with_include_table_stats(True)
+ )
+ return response.table_stats.partitions
+
+ def run_test(self, is_fifo):
+ self._init_with_params(is_fifo, tables_format=1)
+ balancing_table_path = '/Root/SQS/.' + ('FIFO' if is_fifo else 'STD') + '/Messages'
+ queues_count = 10
+ queue_urls = []
+ partitions = self.get_partitions(balancing_table_path)
+ assert partitions > 1, 'incorrect initial partitions count'
+
+ for index in range(queues_count):
+ queue_name = f'q_{index}_{self.queue_name}'
+ queue_urls.append(self._create_queue_and_assert(queue_name, is_fifo=is_fifo))
+ self.wait_leader_started(queues_count)
+ logging.info('all leaders started.')
+ assert self.get_nodes_with_leaders() > 1
+
+ self.send_messages(is_fifo, queue_urls)
+ logging.info('messages have been sent #1')
+
+ self.alter_table(balancing_table_path)
+
+ while True:
+ self.send_messages(is_fifo, queue_urls)
+ leaders_per_node = self.get_leaders_per_nodes()
+ nodes_with_leaders = len(list(filter(bool, leaders_per_node)))
+ cur_partitions = self.get_partitions(balancing_table_path)
+ logging.debug(f'wait merge... partitions={cur_partitions}, nodes_with_leaders={nodes_with_leaders} all_leaders={sum(leaders_per_node)} : {leaders_per_node}')
+ if cur_partitions < partitions and nodes_with_leaders <= cur_partitions and sum(leaders_per_node) == queues_count:
+ break
+ time.sleep(5)
+
+ partitions = self.get_partitions(balancing_table_path)
+ nodes_with_leaders = self.get_nodes_with_leaders()
+ logging.info(f'all leaders on {nodes_with_leaders} node, partitions {partitions}')
+
+ self.force_split(balancing_table_path)
+
+ while True:
+ self.send_messages(is_fifo, queue_urls)
+ leaders_per_node = self.get_leaders_per_nodes()
+ cur_nodes_with_leaders = len(list(filter(bool, leaders_per_node)))
+ cur_partitions = self.get_partitions(balancing_table_path)
+ logging.info(f'wait split... partitions={cur_partitions}, nodes_with_leaders={cur_nodes_with_leaders} all_leaders={sum(leaders_per_node)} : {leaders_per_node}')
+ if cur_partitions > partitions and cur_nodes_with_leaders > nodes_with_leaders and sum(leaders_per_node) == queues_count:
+ break
+ logging.info(f'test finished. Leaders per node : {leaders_per_node}')
diff --git a/ydb/tests/functional/sqs/messaging/test_fifo_messaging.py b/ydb/tests/functional/sqs/messaging/test_fifo_messaging.py
index 5d22717c00..dbc269bc0a 100644
--- a/ydb/tests/functional/sqs/messaging/test_fifo_messaging.py
+++ b/ydb/tests/functional/sqs/messaging/test_fifo_messaging.py
@@ -8,7 +8,8 @@ from hamcrest import assert_that, equal_to, not_none, greater_than, less_than_or
from ydb.tests.library.sqs.matchers import ReadResponseMatcher, extract_message_ids
-from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, get_test_with_sqs_installation_by_path, get_test_with_sqs_tenant_installation, VISIBILITY_CHANGE_METHOD_PARAMS
+from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, get_test_with_sqs_installation_by_path, get_test_with_sqs_tenant_installation
+from ydb.tests.library.sqs.test_base import VISIBILITY_CHANGE_METHOD_PARAMS, TABLES_FORMAT_PARAMS
class SqsFifoMicroBatchTest(KikimrSqsTestBase):
@@ -18,8 +19,9 @@ class SqsFifoMicroBatchTest(KikimrSqsTestBase):
config_generator.yaml_config['sqs_config']['group_selection_batch_size'] = 2
return config_generator
- def test_micro_batch_read(self):
- self.queue_name = self.queue_name + '.fifo'
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_micro_batch_read(self, tables_format):
+ self._init_with_params(is_fifo=True, tables_format=tables_format)
created_queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
seq_no = 0
max_number_of_messages = 3
@@ -85,7 +87,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
}
assert_that(self._get_counter_value(counters, delete_counter_labels, 0), equal_to(1))
- def test_write_and_read_to_different_groups(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_write_and_read_to_different_groups(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
seq_no = 1
self._create_queue_and_assert(self.queue_name, is_fifo=True)
message_ids = []
@@ -104,7 +108,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
sorted(received_message_ids), equal_to(sorted(message_ids))
)
- def test_can_read_from_different_groups(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_can_read_from_different_groups(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
seq_no = 1
self._create_queue_and_assert(self.queue_name, is_fifo=True)
message_ids = []
@@ -134,7 +140,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
self.queue_url, 10, visibility_timeout=1000, matcher=ReadResponseMatcher().with_n_messages(0)
)
- def test_send_and_read_multiple_messages(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_send_and_read_multiple_messages(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
first_message_id = self._send_message_and_assert(
queue_url, self._msg_body_template.format('0'), seq_no=1, group_id='group'
@@ -148,7 +156,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
matcher=ReadResponseMatcher().with_message_ids([first_message_id, ])
)
- def test_read_dont_stall(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_read_dont_stall(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
pack_size = 5
first_pack_ids = self._send_messages(
@@ -176,7 +186,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
matcher=ReadResponseMatcher().with_message_ids(third_pack_ids[:1])
)
- def test_visibility_timeout_works(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_visibility_timeout_works(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
self._create_queue_send_x_messages_read_y_messages(
self.queue_name, send_count=5, read_count=1, visibility_timeout=10,
msg_body_template=self._msg_body_template, is_fifo=True, group_id='1'
@@ -193,7 +205,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
)
)
- def test_delete_message_works(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_delete_message_works(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
self._create_queue_send_x_messages_read_y_messages(
self.queue_name, send_count=10, read_count=1, visibility_timeout=1,
msg_body_template=self._msg_body_template, is_fifo=True
@@ -230,7 +244,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
raises(RuntimeError, pattern='InternalFailure')
)
- def test_write_read_delete_many_groups(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_write_read_delete_many_groups(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
message_ids = {}
for i in range(10):
@@ -258,7 +274,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
)
self._read_messages_and_assert(queue_url, 10, matcher=matcher, visibility_timeout=1000)
- def test_queue_attributes(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_queue_attributes(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
attributes = self._sqs_api.get_queue_attributes(queue_url)
assert_that(attributes, has_items(
@@ -280,7 +298,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
attributes = self._sqs_api.get_queue_attributes(queue_url)
assert_that(attributes['VisibilityTimeout'], equal_to('2'))
- def test_validates_group_id(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_validates_group_id(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
def send_caller(group_id):
@@ -299,7 +319,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
check('')
check(None) # without
- def test_validates_deduplication_id(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_validates_deduplication_id(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
def send_caller(deduplication_id):
@@ -318,7 +340,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
check('')
check(None) # without
- def test_validates_receive_attempt_id(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_validates_receive_attempt_id(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
def receive_caller(receive_request_attempt_id):
@@ -336,7 +360,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
check('ยง')
@pytest.mark.parametrize('content_based', [True, False], ids=['content_based', 'by_deduplication_id'])
- def test_deduplication(self, content_based):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_deduplication(self, content_based, tables_format):
+ self._init_with_params(tables_format=tables_format)
attributes = {}
if content_based:
attributes['ContentBasedDeduplication'] = 'true'
@@ -377,7 +403,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
self._read_messages_and_assert(queue_url, 10, visibility_timeout=1000, matcher=ReadResponseMatcher().with_n_messages(2), wait_timeout=3)
@pytest.mark.parametrize('after_crutch_batch', [False, True], ids=['standard_mode', 'after_crutch_batch'])
- def test_receive_attempt_reloads_same_messages(self, after_crutch_batch):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_receive_attempt_reloads_same_messages(self, after_crutch_batch, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
groups_selection_batch_size = self.config_generator.yaml_config['sqs_config']['group_selection_batch_size']
@@ -414,7 +442,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
assert_that(len(message_set_1 & message_set_3), equal_to(0))
@pytest.mark.parametrize(**VISIBILITY_CHANGE_METHOD_PARAMS)
- def test_visibility_change_disables_receive_attempt_id(self, delete_message):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_visibility_change_disables_receive_attempt_id(self, delete_message, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
groups_count = 5
for group_number in range(groups_count):
@@ -438,7 +468,9 @@ class SqsFifoMessagingTest(KikimrSqsTestBase):
message_set_2 = set([res['MessageId'] for res in read_result_2])
assert_that(len(message_set_1 & message_set_2), equal_to(0))
- def test_crutch_groups_selection_algorithm_selects_second_group_batch(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_crutch_groups_selection_algorithm_selects_second_group_batch(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=True)
groups_selection_batch_size = self.config_generator.yaml_config['sqs_config']['group_selection_batch_size']
groups_count = groups_selection_batch_size + 50
diff --git a/ydb/tests/functional/sqs/messaging/test_generic_messaging.py b/ydb/tests/functional/sqs/messaging/test_generic_messaging.py
index 05a6db6b32..a597c8d285 100644
--- a/ydb/tests/functional/sqs/messaging/test_generic_messaging.py
+++ b/ydb/tests/functional/sqs/messaging/test_generic_messaging.py
@@ -976,7 +976,9 @@ class SqsGenericMessagingTest(KikimrSqsTestBase):
attributes = self._sqs_api.get_queue_attributes(queue_url, ['MaximumMessageSize'])
assert_that(int(attributes['MaximumMessageSize']), equal_to(256 * 1024))
- def test_queue_attributes_batch(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_queue_attributes_batch(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
# Create > 10 queues to check that private commands for UI will work
queue_urls = [self._create_queue_and_assert("{}-{}".format(self.queue_name, i)) for i in range(10)]
created_queue_url2 = self._create_queue_and_assert(self.queue_name + '1.fifo', is_fifo=True)
diff --git a/ydb/tests/functional/sqs/multinode/test_multinode_cluster.py b/ydb/tests/functional/sqs/multinode/test_multinode_cluster.py
index e06dceed88..1dbe9bff74 100644
--- a/ydb/tests/functional/sqs/multinode/test_multinode_cluster.py
+++ b/ydb/tests/functional/sqs/multinode/test_multinode_cluster.py
@@ -11,7 +11,7 @@ from ydb.tests.library.common.types import Erasure
from ydb.tests.library.sqs.matchers import ReadResponseMatcher
-from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, STOP_NODE_PARAMS, IS_FIFO_PARAMS
+from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, STOP_NODE_PARAMS, IS_FIFO_PARAMS, TABLES_FORMAT_PARAMS
class TestSqsMultinodeCluster(KikimrSqsTestBase):
@@ -26,9 +26,9 @@ class TestSqsMultinodeCluster(KikimrSqsTestBase):
return config_generator
@pytest.mark.parametrize(**IS_FIFO_PARAMS)
- def test_sqs_writes_through_proxy_on_each_node(self, is_fifo):
- if is_fifo:
- self.queue_name = self.queue_name + '.fifo'
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_sqs_writes_through_proxy_on_each_node(self, is_fifo, tables_format):
+ self._init_with_params(is_fifo, tables_format)
self._create_queue_and_assert(self.queue_name, is_fifo=is_fifo)
message_ids = []
for i in range(self.cluster_nodes_count * 3):
@@ -59,8 +59,7 @@ class TestSqsMultinodeCluster(KikimrSqsTestBase):
@pytest.mark.parametrize(**IS_FIFO_PARAMS)
@pytest.mark.parametrize(**STOP_NODE_PARAMS)
def test_has_messages_counters(self, is_fifo, stop_node):
- if is_fifo:
- self.queue_name = self.queue_name + '.fifo'
+ self._init_with_params(is_fifo)
self._create_queue_and_assert(self.queue_name, is_fifo=is_fifo)
node_index = self._get_queue_master_node_index()
logging.debug('Master node for queue "{}" is {}'.format(self.queue_name, node_index))
@@ -144,7 +143,9 @@ class TestSqsMultinodeCluster(KikimrSqsTestBase):
check_master_node_counters(new_node_index)
@pytest.mark.parametrize(**STOP_NODE_PARAMS)
- def test_reassign_master(self, stop_node):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_reassign_master(self, stop_node, tables_format):
+ self._init_with_params(tables_format=tables_format)
self._create_queue_and_assert(self.queue_name)
node_index = self._get_queue_master_node_index()
proxy_node_index = self._other_node(node_index)
diff --git a/ydb/tests/functional/sqs/multinode/test_recompiles_requests.py b/ydb/tests/functional/sqs/multinode/test_recompiles_requests.py
index ac721a57f5..fe7eada741 100644
--- a/ydb/tests/functional/sqs/multinode/test_recompiles_requests.py
+++ b/ydb/tests/functional/sqs/multinode/test_recompiles_requests.py
@@ -5,7 +5,7 @@ from hamcrest import assert_that, not_none
from ydb.tests.library.common.types import Erasure
-from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, IS_FIFO_PARAMS
+from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, IS_FIFO_PARAMS, TABLES_FORMAT_PARAMS
class TestSqsRecompilesRequestsForOtherQueue(KikimrSqsTestBase):
@@ -18,9 +18,9 @@ class TestSqsRecompilesRequestsForOtherQueue(KikimrSqsTestBase):
return config_generator
@pytest.mark.parametrize(**IS_FIFO_PARAMS)
- def test_recompiles_queries(self, is_fifo):
- if is_fifo:
- self.queue_name = self.queue_name + '.fifo'
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_recompiles_queries(self, is_fifo, tables_format):
+ self._init_with_params(is_fifo, tables_format)
queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=is_fifo)
def send(node_index):
diff --git a/ydb/tests/functional/sqs/with_quotas/test_quoting.py b/ydb/tests/functional/sqs/with_quotas/test_quoting.py
index f750f28d3d..60d08cc378 100644
--- a/ydb/tests/functional/sqs/with_quotas/test_quoting.py
+++ b/ydb/tests/functional/sqs/with_quotas/test_quoting.py
@@ -8,7 +8,7 @@ from hamcrest import assert_that, raises, greater_than, contains_string, equal_t
from ydb.tests.library.sqs.requests_client import SqsSendMessageParams
-from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, IS_FIFO_PARAMS
+from ydb.tests.library.sqs.test_base import KikimrSqsTestBase, IS_FIFO_PARAMS, TABLES_FORMAT_PARAMS
from ydb import issues as ydb_issues
@@ -31,9 +31,9 @@ class TestSqsQuotingWithKesus(KikimrSqsTestBase):
self._sqs_api.delete_user(self._username)
@pytest.mark.parametrize(**IS_FIFO_PARAMS)
- def test_properly_creates_and_deletes_queue(self, is_fifo):
- if is_fifo:
- self.queue_name = self.queue_name + '.fifo'
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_properly_creates_and_deletes_queue(self, is_fifo, tables_format):
+ self._init_with_params(is_fifo, tables_format)
created_queue_url = self._create_queue_and_assert(self.queue_name, is_fifo=is_fifo)
self._sqs_api.delete_queue(created_queue_url)
@@ -91,9 +91,9 @@ class TestSqsQuotingWithLocalRateLimiter(KikimrSqsTestBase):
self._sqs_api.delete_user(self._username)
@pytest.mark.parametrize(**IS_FIFO_PARAMS)
- def test_does_actions_with_queue(self, is_fifo):
- if is_fifo:
- self.queue_name = self.queue_name + '.fifo'
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_does_actions_with_queue(self, is_fifo, tables_format):
+ self._init_with_params(is_fifo, tables_format)
self._create_queue_send_x_messages_read_y_messages(self.queue_name,
send_count=1,
read_count=1,
@@ -115,7 +115,9 @@ class TestSqsQuotingWithLocalRateLimiter(KikimrSqsTestBase):
throttling_times += 1
return throttling_times
- def test_send_message_rate(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_send_message_rate(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
self._create_queue_and_assert(self.queue_name)
counters = self._get_sqs_counters()
@@ -144,7 +146,9 @@ class TestSqsQuotingWithLocalRateLimiter(KikimrSqsTestBase):
throttling_counter_value = self._get_counter_value(counters, throttling_counter_labels, 0)
assert_that(throttling_counter_value - prev_throttling_counter_value, equal_to(throttling_times))
- def test_create_queue_rate(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_create_queue_rate(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
queue_urls = []
def call_create_queue(i):
@@ -168,7 +172,9 @@ class TestSqsQuotingWithLocalRateLimiter(KikimrSqsTestBase):
len(delete_queue_batch_result['DeleteQueueBatchResultEntry']), equal_to(6) # no errors, all items are results
)
- def test_other_requests_rate(self):
+ @pytest.mark.parametrize(**TABLES_FORMAT_PARAMS)
+ def test_other_requests_rate(self, tables_format):
+ self._init_with_params(tables_format=tables_format)
self._create_queue_and_assert(self.queue_name)
def call(i):
diff --git a/ydb/tests/library/harness/resources/default_yaml.yml b/ydb/tests/library/harness/resources/default_yaml.yml
index aba91b93a5..49464413cb 100644
--- a/ydb/tests/library/harness/resources/default_yaml.yml
+++ b/ydb/tests/library/harness/resources/default_yaml.yml
@@ -153,6 +153,7 @@ grpc_config:
- "export"
- "import"
- "yq"
+ - "keyvalue"
feature_flags:
enable_persistent_query_stats: true
enable_scheme_transactions_at_scheme_shard: true
diff --git a/ydb/tests/library/sqs/tables.py b/ydb/tests/library/sqs/tables.py
index 0381e810fa..2f7eef4961 100644
--- a/ydb/tests/library/sqs/tables.py
+++ b/ydb/tests/library/sqs/tables.py
@@ -11,37 +11,46 @@ class QueueType(Enum):
FIFO = 2
-def get_prefix_path(root, queue_type=None):
- subdir = ('.{}/'.format(queue_type.name)) if queue_type else ''
+def get_prefix_path(root, queue_type=None, common_table=True):
+ subdir = ('.{}/'.format(queue_type.name)) if queue_type and common_table else ''
return '{}/{}'.format(root, subdir)
-def get_table_path(root, table_name, queue_type=None):
- return '{}/{}'.format(get_prefix_path(root, queue_type), table_name)
+def get_table_path(root, table_name, queue_type=None, common_table=True):
+ return '{}/{}'.format(get_prefix_path(root, queue_type, common_table), table_name)
-def _create_table(root, session, table_name, columns, keys_count, queue_type=None):
- table_path = get_table_path(root, table_name, queue_type)
+def _create_table(root, session, table_name, columns, keys_count, common_table=True, queue_type=None):
+ table_path = get_table_path(root, table_name, queue_type, common_table)
keys = [name for name, _ in columns[:keys_count]]
columns = [ydb.Column(name, ydb.OptionalType(column_type)) for name, column_type in columns]
- ydb.retry_operation_sync(lambda: session.create_table(
- table_path,
- ydb.TableDescription()
- .with_primary_keys(*keys)
- .with_columns(*columns)
- .with_profile(
- ydb.TableProfile()
- .with_partitioning_policy(
- ydb.PartitioningPolicy()
- .with_auto_partitioning(
- ydb.AutoPartitioningPolicy.AUTO_SPLIT
- )
+
+ if queue_type and common_table:
+ ydb.retry_operation_sync(lambda: session.create_table(
+ table_path,
+ ydb.TableDescription()
+ .with_primary_keys(*keys)
+ .with_columns(*columns)
+ .with_uniform_partitions(10)
+ .with_partitioning_settings(
+ ydb.PartitioningSettings()
+ .with_min_partitions_count(10)
+ .with_partitioning_by_size(ydb.FeatureFlag.ENABLED)
+ .with_partitioning_by_load(ydb.FeatureFlag.ENABLED)
)
- )
- ))
+ ))
+ else:
+ ydb.retry_operation_sync(lambda: session.create_table(
+ table_path,
+ ydb.TableDescription()
+ .with_primary_keys(*keys)
+ .with_columns(*columns)
+ ))
-def get_table_keys_for_queue(with_shard=False):
+def get_table_keys_for_queue(common_table, with_shard=False):
+ if not common_table:
+ return []
if with_shard:
columns = [
('QueueIdNumberAndShardHash', ydb.PrimitiveType.Uint64),
@@ -113,8 +122,30 @@ def create_settings_table(root, session):
_create_table(root, session, '.Settings', columns, keys_count=2)
-def create_attibutes_table(root, session, queue_type):
- queue_keys = get_table_keys_for_queue()
+def create_removed_queues_table(root, session):
+ columns = [
+ ('RemoveTimestamp', ydb.PrimitiveType.Uint64),
+ ('QueueIdNumber', ydb.PrimitiveType.Uint64),
+ ('Account', ydb.PrimitiveType.Utf8),
+ ('QueueName', ydb.PrimitiveType.Utf8),
+ ('FifoQueue', ydb.PrimitiveType.Bool),
+ ('Shards', ydb.PrimitiveType.Uint32),
+ ('CustomQueueName', ydb.PrimitiveType.Utf8),
+ ('FolderId', ydb.PrimitiveType.Utf8),
+ ('TablesFormat', ydb.PrimitiveType.Uint32),
+ ('StartProcessTimestamp', ydb.PrimitiveType.Uint64),
+ ('NodeProcess', ydb.PrimitiveType.Uint32),
+ ]
+ _create_table(root, session, '.RemovedQueues', columns, keys_count=2)
+
+
+def create_attibutes_table(root, session, queue_type, common_table=True):
+ queue_keys = []
+ if common_table:
+ queue_keys = get_table_keys_for_queue(common_table)
+ else:
+ queue_keys.append(('State', ydb.PrimitiveType.Uint64))
+
columns = queue_keys + [
('ContentBasedDeduplication', ydb.PrimitiveType.Bool),
('DelaySeconds', ydb.PrimitiveType.Uint64),
@@ -128,16 +159,20 @@ def create_attibutes_table(root, session, queue_type):
('MaxReceiveCount', ydb.PrimitiveType.Uint64),
('ShowDetailedCountersDeadline', ydb.PrimitiveType.Uint64),
]
- _create_table(root, session, 'Attributes', columns, len(queue_keys), queue_type)
+ _create_table(root, session, 'Attributes', columns, len(queue_keys), common_table, queue_type)
-def create_state_table(root, session, queue_type):
- queue_keys = columns = [
- ('QueueIdNumberHash', ydb.PrimitiveType.Uint64),
- ('QueueIdNumber', ydb.PrimitiveType.Uint64),
- ]
- if queue_type == QueueType.STD:
- queue_keys.append(('Shard', ydb.PrimitiveType.Uint32))
+def create_state_table(root, session, queue_type, common_table=True):
+ queue_keys = []
+ if common_table:
+ queue_keys = [
+ ('QueueIdNumberHash', ydb.PrimitiveType.Uint64),
+ ('QueueIdNumber', ydb.PrimitiveType.Uint64),
+ ]
+ if queue_type == QueueType.STD:
+ queue_keys.append(('Shard', ydb.PrimitiveType.Uint32))
+ else:
+ queue_keys.append(('State', ydb.PrimitiveType.Uint64))
columns = queue_keys + [
('CleanupTimestamp', ydb.PrimitiveType.Uint64),
@@ -151,12 +186,12 @@ def create_state_table(root, session, queue_type):
('CleanupVersion', ydb.PrimitiveType.Uint64),
('InflyVersion', ydb.PrimitiveType.Uint64),
]
- _create_table(root, session, 'State', columns, len(queue_keys), queue_type)
+ _create_table(root, session, 'State', columns, len(queue_keys), common_table, queue_type)
-def create_infly_table(root, session):
+def create_infly_table(root, session, common_table=True):
queue_type = QueueType.STD
- queue_keys = get_table_keys_for_queue(with_shard=(queue_type == QueueType.STD))
+ queue_keys = get_table_keys_for_queue(common_table, with_shard=(queue_type == QueueType.STD))
columns = queue_keys + [
('Offset', ydb.PrimitiveType.Uint64),
('RandomId', ydb.PrimitiveType.Uint64),
@@ -168,12 +203,12 @@ def create_infly_table(root, session):
('VisibilityDeadline', ydb.PrimitiveType.Uint64),
('DelayDeadline', ydb.PrimitiveType.Uint64),
]
- _create_table(root, session, 'Infly', columns, len(queue_keys) + 1, queue_type)
+ _create_table(root, session, 'Infly', columns, len(queue_keys) + 1, common_table, queue_type)
-def create_message_data_table(root, session):
+def create_message_data_table(root, session, common_table=True):
queue_type = QueueType.STD
- queue_keys = get_table_keys_for_queue(with_shard=(queue_type == QueueType.STD))
+ queue_keys = get_table_keys_for_queue(common_table, with_shard=(queue_type == QueueType.STD))
columns = queue_keys + [
('RandomId', ydb.PrimitiveType.Uint64),
('Offset', ydb.PrimitiveType.Uint64),
@@ -182,11 +217,11 @@ def create_message_data_table(root, session):
('MessageId', ydb.PrimitiveType.String),
('SenderId', ydb.PrimitiveType.String),
]
- _create_table(root, session, 'MessageData', columns, len(queue_keys) + 2, queue_type)
+ _create_table(root, session, 'MessageData', columns, len(queue_keys) + 2, common_table, queue_type)
-def create_message_table(root, session, queue_type):
- queue_keys = get_table_keys_for_queue(with_shard=(queue_type == QueueType.STD))
+def create_message_table(root, session, queue_type, common_table=True):
+ queue_keys = get_table_keys_for_queue(common_table, with_shard=(queue_type == QueueType.STD))
columns = queue_keys + [
('Offset', ydb.PrimitiveType.Uint64),
('RandomId', ydb.PrimitiveType.Uint64),
@@ -205,11 +240,11 @@ def create_message_table(root, session, queue_type):
('FirstReceiveTimestamp', ydb.PrimitiveType.Uint64),
('SentTimestamp', ydb.PrimitiveType.Uint64),
]
- _create_table(root, session, 'Messages', columns, len(queue_keys) + 1, queue_type)
+ _create_table(root, session, 'Messages', columns, len(queue_keys) + 1, common_table, queue_type)
-def create_sent_timestamp_idx_table(root, session, queue_type):
- queue_keys = get_table_keys_for_queue(with_shard=(queue_type == QueueType.STD))
+def create_sent_timestamp_idx_table(root, session, queue_type, common_table=True):
+ queue_keys = get_table_keys_for_queue(common_table, with_shard=(queue_type == QueueType.STD))
columns = queue_keys + [
('SentTimestamp', ydb.PrimitiveType.Uint64),
('Offset', ydb.PrimitiveType.Uint64),
@@ -218,12 +253,12 @@ def create_sent_timestamp_idx_table(root, session, queue_type):
]
if queue_type == QueueType.FIFO:
columns.append(('GroupId', ydb.PrimitiveType.String))
- _create_table(root, session, 'SentTimestampIdx', columns, len(queue_keys) + 2, queue_type)
+ _create_table(root, session, 'SentTimestampIdx', columns, len(queue_keys) + 2, common_table, queue_type)
-def create_data_table(root, session):
+def create_data_table(root, session, common_table=True):
queue_type = QueueType.FIFO
- queue_keys = get_table_keys_for_queue()
+ queue_keys = get_table_keys_for_queue(common_table)
columns = queue_keys + [
("RandomId", ydb.PrimitiveType.Uint64),
("Offset", ydb.PrimitiveType.Uint64),
@@ -233,24 +268,24 @@ def create_data_table(root, session):
("Data", ydb.PrimitiveType.String),
("MessageId", ydb.PrimitiveType.String),
]
- _create_table(root, session, 'Data', columns, len(queue_keys) + 2, queue_type)
+ _create_table(root, session, 'Data', columns, len(queue_keys) + 2, common_table, queue_type)
-def create_deduplication_table(root, session):
+def create_deduplication_table(root, session, common_table=True):
queue_type = QueueType.FIFO
- queue_keys = get_table_keys_for_queue()
+ queue_keys = get_table_keys_for_queue(common_table)
columns = queue_keys + [
("DedupId", ydb.PrimitiveType.String),
("Deadline", ydb.PrimitiveType.Uint64),
("Offset", ydb.PrimitiveType.Uint64),
("MessageId", ydb.PrimitiveType.String),
]
- _create_table(root, session, 'Deduplication', columns, len(queue_keys) + 1, queue_type)
+ _create_table(root, session, 'Deduplication', columns, len(queue_keys) + 1, common_table, queue_type)
-def create_groups_table(root, session):
+def create_groups_table(root, session, common_table=True):
queue_type = QueueType.FIFO
- queue_keys = get_table_keys_for_queue()
+ queue_keys = get_table_keys_for_queue(common_table)
columns = queue_keys + [
("GroupId", ydb.PrimitiveType.String),
("VisibilityDeadline", ydb.PrimitiveType.Uint64),
@@ -260,17 +295,17 @@ def create_groups_table(root, session):
("ReceiveAttemptId", ydb.PrimitiveType.Utf8),
("LockTimestamp", ydb.PrimitiveType.Uint64),
]
- _create_table(root, session, 'Groups', columns, len(queue_keys) + 1, queue_type)
+ _create_table(root, session, 'Groups', columns, len(queue_keys) + 1, common_table, queue_type)
-def create_reads_table(root, session):
+def create_reads_table(root, session, common_table=True):
queue_type = QueueType.FIFO
- queue_keys = get_table_keys_for_queue()
+ queue_keys = get_table_keys_for_queue(common_table)
columns = queue_keys + [
("ReceiveAttemptId", ydb.PrimitiveType.Utf8),
("Deadline", ydb.PrimitiveType.Uint64),
]
- _create_table(root, session, 'Reads', columns, len(queue_keys) + 1, queue_type)
+ _create_table(root, session, 'Reads', columns, len(queue_keys) + 1, common_table, queue_type)
def create_all_tables(root, driver, session):
@@ -278,6 +313,7 @@ def create_all_tables(root, driver, session):
create_queues_table(root, session)
create_events_table(root, session)
create_settings_table(root, session)
+ create_removed_queues_table(root, session)
for queue_type in [QueueType.STD, QueueType.FIFO]:
create_sent_timestamp_idx_table(root, session, queue_type)
@@ -294,3 +330,24 @@ def create_all_tables(root, driver, session):
create_groups_table(root, session)
create_deduplication_table(root, session)
create_data_table(root, session)
+
+
+def create_queue_tables(path, if_fifo, driver, session, shards=None):
+ queue_type = QueueType.FIFO if if_fifo else QueueType.STD
+ create_state_table(path, session, queue_type, common_table=False)
+ create_attibutes_table(path, session, queue_type, common_table=False)
+
+ if queue_type == QueueType.STD:
+ for shard in range(shards):
+ shard_path = f'{path}/{shard}'
+ create_infly_table(shard_path, session, common_table=False)
+ create_message_data_table(shard_path, session, common_table=False)
+ create_sent_timestamp_idx_table(shard_path, session, queue_type, common_table=False)
+ create_message_table(shard_path, session, queue_type, common_table=False)
+ else:
+ create_reads_table(path, session, common_table=False)
+ create_groups_table(path, session, common_table=False)
+ create_deduplication_table(path, session, common_table=False)
+ create_data_table(path, session, common_table=False)
+ create_sent_timestamp_idx_table(path, session, queue_type, common_table=False)
+ create_message_table(path, session, queue_type, common_table=False)
diff --git a/ydb/tests/library/sqs/test_base.py b/ydb/tests/library/sqs/test_base.py
index ba292399e5..9468280880 100644
--- a/ydb/tests/library/sqs/test_base.py
+++ b/ydb/tests/library/sqs/test_base.py
@@ -163,6 +163,9 @@ class KikimrSqsTestBase(object):
cls.sqs_port = cls.sqs_ports[0]
cls.server_fqdn = get_fqdn()
+ def _before_test_start(self):
+ pass
+
def setup_method(self, method=None):
logging.debug('Test started: {}'.format(str(method.__name__)))
logging.debug("Kikimr logs dir: {}".format(self.cluster.slots[1].cwd if self.slot_count else self.cluster.nodes[1].cwd))
@@ -180,11 +183,18 @@ class KikimrSqsTestBase(object):
grpc_port = self.cluster.slots[1].grpc_port if self.slot_count else self.cluster.nodes[1].grpc_port
self._sqs_server_opts = ['-s', 'localhost', '-p', str(grpc_port)]
test_name = str(method.__name__)[5:]
- self._username = 'U_' + test_name
- self.queue_name = 'Q_{}_{}'.format(test_name, str(uuid.uuid1()))
- max_queue_name_length = 80 - len('.fifo')
- if len(self.queue_name) > max_queue_name_length:
- self.queue_name = self.queue_name[:max_queue_name_length]
+
+ def create_unique_name(user=False):
+ max_length = 80 - (0 if user else len('.fifo'))
+ name = '{subject}_{test}_{uid}'.format(
+ subject=('U' if user else 'Q'),
+ test=test_name[:60],
+ uid=uuid.uuid1()
+ )
+ return name[:max_length]
+
+ self._username = create_unique_name(user=True)
+ self.queue_name = create_unique_name()
self._msg_body_template = self._username + '-{}'
self._setup_user(self._username)
self._sqs_apis = []
@@ -221,6 +231,8 @@ class KikimrSqsTestBase(object):
self.seq_no = 0
+ self._before_test_start()
+
def teardown_method(self, method=None):
self.check_no_queues_table(self._username)
self._driver.stop()
@@ -259,7 +271,7 @@ class KikimrSqsTestBase(object):
config_generator = KikimrConfigGenerator(
erasure=cls.erasure,
use_in_memory_pdisks=cls.use_in_memory_pdisks,
- additional_log_configs={'SQS': LogLevels.INFO},
+ additional_log_configs={'SQS': LogLevels.DEBUG},
enable_sqs=True,
)
config_generator.yaml_config['sqs_config']['root'] = cls.sqs_root
@@ -703,50 +715,30 @@ class KikimrSqsTestBase(object):
if queue_name is None:
queue_name = self.queue_name
is_fifo = queue_name.endswith('.fifo')
-
queue_version = self._get_queue_version_number(self._username, queue_name)
+ tables_format = self.tables_format_per_user.get(self._username, 0)
- if is_fifo:
- self._check_fifo_queue_is_empty(queue_name, queue_version)
- else:
- self._check_std_queue_is_empty(queue_name, queue_version)
+ self.__check_queue_tables_are_empty(queue_name, is_fifo, queue_version, tables_format)
- def _get_table_lines_count(self, table_path):
- data_result_sets = self._execute_yql_query('SELECT COUNT(*) AS count FROM `{}`;'.format(table_path))
+ def _get_table_lines_count(self, table_path, condition=None):
+ query = 'SELECT COUNT(*) AS count FROM `{}` {};'.format(table_path, condition if condition else '')
+ data_result_sets = self._execute_yql_query(query)
assert_that(len(data_result_sets), equal_to(1))
assert_that(len(data_result_sets[0].rows), equal_to(1))
logging.debug('Received count result for table {}: {}'.format(table_path, data_result_sets[0].rows[0]))
return data_result_sets[0].rows[0]['count']
- def _check_std_queue_is_empty(self, queue_name, queue_version):
- shards = self._get_queue_shards_count(self._username, queue_name, queue_version)
- assert_that(shards, not_(equal_to(0)))
- for shard in range(shards):
- self._check_std_queue_shard_is_empty(queue_name, queue_version, shard)
-
- def _check_std_queue_shard_is_empty(self, queue_name, queue_version, shard):
- def get_table_path(table_name):
- return self._smart_make_table_path(self._username, queue_name, queue_version, shard, table_name)
-
- def get_lines_count(table_name):
- return self._get_table_lines_count(get_table_path(table_name))
-
- assert_that(get_lines_count('Infly'), equal_to(0))
- assert_that(get_lines_count('MessageData'), equal_to(0))
- assert_that(get_lines_count('Messages'), equal_to(0))
- assert_that(get_lines_count('SentTimestampIdx'), equal_to(0))
-
- def _check_fifo_queue_is_empty(self, queue_name, queue_version):
- def get_table_path(table_name):
- return self._smart_make_table_path(self._username, queue_name, queue_version, None, table_name)
-
- def get_lines_count(table_name):
- return self._get_table_lines_count(get_table_path(table_name))
-
- assert_that(get_lines_count('Data'), equal_to(0))
- assert_that(get_lines_count('Groups'), equal_to(0))
- assert_that(get_lines_count('Messages'), equal_to(0))
- assert_that(get_lines_count('SentTimestampIdx'), equal_to(0))
+ def __check_queue_tables_are_empty(self, queue_name, is_fifo, queue_version, tables_format):
+ shards = [None] if is_fifo else range(self._get_queue_shards_count(self._username, queue_name, queue_version))
+ rows_condition = f' WHERE QueueIdNumber = {queue_version}' if tables_format == 1 else None
+
+ table_names = ['Messages', 'SentTimestampIdx']
+ table_names += ['Data', 'Groups'] if is_fifo else ['Infly', 'MessageData']
+ for shard in shards:
+ for table_name in table_names:
+ table_path = self._smart_make_table_path(self._username, queue_name, queue_version, shard, table_name)
+ rows_count = self._get_table_lines_count(table_path, rows_condition)
+ assert_that(rows_count, equal_to(0))
def _break_queue(self, username, queuename, is_fifo):
version = self._get_queue_version_number(username, queuename)