oai-statsig-python-core 0.37.0rc1__tar.gz → 0.37.0rc2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/Cargo.lock +5 -5
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/Cargo.toml +1 -1
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/PKG-INFO +1 -1
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/Cargo.toml +1 -1
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_fetch_tests.rs +47 -116
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/interned_store/mmap_artifact.rs +26 -41
- oai_statsig_python_core-0.37.0rc2/statsig-rust/src/interned_values/interned_store/mmap_manifest/virtiofs/tests.rs +107 -0
- oai_statsig_python_core-0.37.0rc2/statsig-rust/src/interned_values/interned_store/mmap_manifest/virtiofs.rs +108 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/interned_store/mmap_manifest.rs +45 -82
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/interned_store/mmap_writer.rs +1 -1
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/interned_store.rs +11 -27
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/json_hydration_preparation_tests.rs +3 -0
- oai_statsig_python_core-0.37.0rc2/statsig-rust/src/specs_adapter/__tests__/realistic_json_hydration_benchmark.rs +384 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/__init__.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/_frozen_json.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/data_store.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/error_boundary.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/observability_client.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/persistent_storage.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/py.typed +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/requirements.txt +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/statsig.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/statsig_python_core.pyi +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/statsig_types.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/py_src/statsig_python_core/typed_config.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/pyproject.toml +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/Cargo.toml +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/README.md +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/build.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/src/lib.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/src/mock_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/src/protos/statsig_forward_proxy.proto +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/src/statsig_forward_proxy.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/src/statsig_grpc_client.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-grpc/src/statsig_grpc_err.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/.github/workflows/CI.yml +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/.gitignore +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/Cargo.toml +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/README.md +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/benchmarks/dynamic_config_value_cache_benchmark.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/benchmarks/native_context_allocations.c +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/benchmarks/native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/benchmarks/summarize_native_context_allocations.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/benchmarks/user_creation_benchmark.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/benchmarks/user_memory_benchmark.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/benchmarks/wrapper_native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/requirements-typing.txt +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/bin/stub_gen.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/data_store_base_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/event_logging_adapter_base_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/interned_store_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/lib.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/observability_client_base_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/output_logger_provider_base_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/pyo_utils.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/raw_evaluation_compat_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/safe_gil.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/statsig_base_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/statsig_metadata_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/statsig_options_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/statsig_persistent_storage_override_adapter_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/statsig_types_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/statsig_user_context_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/statsig_user_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/typed_config_py/tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/typed_config_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/unit_id_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/src/valid_primitives_py.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/event_listener_reentrancy_subprocess.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/fork_callback_runner.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/fork_runner.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/mock_output_logger.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/mock_scrapi.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/packaged_config_fixture.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/profile_util.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/shutdown_sub_proc.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_bulk_evaluate_gcir_parity.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_data_store.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_error_boundary.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_evaluation_cache.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_evaluation_cache_integration.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_evaluation_cache_pyo3.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_event_logging_adapter.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_experiment_group_targeting_exposures.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_experiment_serialization.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_exposure_logging.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_feature_gate_parts.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_feature_gate_serialization.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_fork_callback.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_forking.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_frozen_json.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_get_dynamic_config.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_id_list_updates.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_initialize_with_details.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_interned_store_preload.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_layer_param_exposure_sampling.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_layer_serialization.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_native_context_allocations.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_native_context_benchmark.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_native_user_context.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_observability_client.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_output_logger_gc.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_output_logger_provider.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_override_adapter.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_partial_rollout_boost.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_performance.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_sdk_event_emitter.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_sec_expo_as_primary.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_shared_statsig.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_shutdown.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_state_read_primary_attempts.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_statsig.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_statsig_options.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_statsig_user.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_statsig_user_json_serialization.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_statsig_user_none_fields.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_statsig_user_pickle.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_typed_config.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_typed_config_native.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/test_user_exposure_e2e.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/tests/utils.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-pyo3/typing_tests/typed_config.py +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/benches/evaluation/case_sensitive_target_bench.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/build.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/resources/ip_supalite.table +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/resources/ua_parser_regex.yaml +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/resources/ua_parser_regex_lite.yaml +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/__tests__/interned_string_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/__tests__/spec_store_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/__tests__/state_read_initialization_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/__tests__/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/__tests__/user_value_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/compression/compression_helper.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/compression/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/console_capture/console_capture_handler.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/console_capture/console_capture_instances.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/console_capture/console_capture_options.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/console_capture/console_log_line_levels.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/console_capture/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/data_store_interface.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/dcs_str.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/__tests__/array_optimization_bench.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/__tests__/array_optimization_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/__tests__/case_sensitive_target_spellings_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/__tests__/dynamic_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/__tests__/rkyv_value_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/cmab_evaluator.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/comparisons/compare_arrays.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/comparisons/compare_case_sensitive_strings_in_array.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/comparisons/compare_numbers.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/comparisons/compare_str_with_regex.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/comparisons/compare_strings_in_array.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/comparisons/compare_time.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/comparisons/compare_versions.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/comparisons/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/country_lookup.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/dynamic_returnable.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/dynamic_string.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/dynamic_value.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluation_data.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluation_details.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluation_types.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluation_types_initialize_v2.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluation_types_v2.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluator.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluator_context.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluator_result.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/get_unit_id.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/rkyv_value.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/secondary_exposure_key.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/first_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_helpers.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_tokenizer_performance.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_browser.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/__tests__/test_ua_parser_os.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/tokenizer.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/statsig_uaparser/window_iter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/third_party_ua_parser.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation/user_agent_parsing/ua_parser.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/evaluation_fixture_client.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_emitter/statsig_event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/delayed_exposure_store.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_logger.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_logger_constants.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_logger_ops_stats.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/batch.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queue.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queued_config_expo.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queued_event.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queued_experiment_expo.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queued_expo.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queued_gate_expo.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queued_layer_param_expo.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queued_passthrough.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/event_queue/queued_secondary_expo.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/exposure_sampling.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/exposure_utils.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/flush_interval.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/flush_type.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/sec_expo_as_primary_experiment.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/statsig_event.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging/statsig_event_internal.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging_adapter/event_logging_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging_adapter/log_event_payload.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging_adapter/statsig_http_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/event_logging_adapter/statsig_local_file_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/dynamic_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/evaluation_plan.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/feature_gates_processor.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/gcir_formatter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/gcir_options.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/gcir_process_iter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/layer_configs_processor.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/param_stores_processor.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/secondary_exposure_hashing.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/stringify_sec_exposures.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/target_app_id_utils.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/gcir/timing.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/global_configs.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/hashing/ahash.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/hashing/djb2.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/hashing/hash_util.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/hashing/memo_sha_256.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/hashing/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/compact_id_list_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/id_list_cursor_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/id_list_download_concurrency_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/id_list_propagation_state_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/id_list_propagation_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/id_list_range_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/id_list_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/id_lists_refresh_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/state_read_retry_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/__tests__/statsig_http_id_lists_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/id_list.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/id_list_ids.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/id_list_propagation.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/id_lists_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/id_lists_memory_benchmark.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/id_lists_adapter/statsig_http_id_lists_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/init_details.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/initialize_evaluations_response.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/initialize_response.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/initialize_v2_response.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/instance_registry.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_string.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/__tests__/interned_store_eval_value_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/__tests__/interned_store_mmap_v2_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/__tests__/interned_store_preload_remote_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/__tests__/interned_store_returnable_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/__tests__/interned_store_string_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/__tests__/mutable_store_metadata_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/interned_store/mmap_reader/materialize.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/interned_store/mmap_reader/memory.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/interned_store/mmap_reader.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/mmap_data_v2/evaluator_value.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/mmap_data_v2/spec.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/mmap_data_v2/spec_content_hash.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/mmap_data_v2.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/mmap_sync.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/interned_values/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/lib.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/logging_utils.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/macros.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/http2_test_helpers.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/net_provider_reqwest_http2_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/net_provider_reqwest_shared_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/network_client_http2_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/network_client_latency_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/network_client_request_body_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/response_data_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/__tests__/retry_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/http2.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/http_types.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/network_client.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/network_error.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/providers/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/providers/net_provider_global.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/providers/net_provider_noop.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/providers/net_provider_reqwest.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/proxy_config.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/retry.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/networking/statsig_url.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/observability/console_capture_observer.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/observability/diagnostics_observer.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/observability/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/observability/observability_client_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/observability/ops_stats.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/observability/sdk_errors_observer.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/output_logger.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/output_policy.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/override_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/override_adapter/override_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/override_adapter/statsig_local_override_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/persistent_storage/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/persistent_storage/__tests__/sticky_values_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/persistent_storage/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/persistent_storage/persistent_storage_trait.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/persistent_storage/persistent_values_manager.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/scoped_evaluation_request.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/scoped_id_list_membership_service.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/scoped_snapshot_registry.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/sdk_diagnostics/diagnostics.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/sdk_diagnostics/diagnostics_utils.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/sdk_diagnostics/marker.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/sdk_diagnostics/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/sdk_event_emitter/event_emitter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/sdk_event_emitter/event_emitter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/sdk_event_emitter/event_types.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/sdk_event_emitter/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/snapshot_evaluation_session.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/spec_store.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/config_spec_background_sync_metrics_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/hydration_phase_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/hydration_telemetry_context_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/json_hydration_discovery_filter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/json_raw_config_handoff_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/protobuf_hydration_budget_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/remote_config_full_inline_reuse_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/remote_config_inline_probe_edge_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/remote_config_value_hydrator_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/response_metrics_reuse_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/__tests__/state_read_retry_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/config_spec_background_sync_metrics.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/download.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/errors.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/json.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/metadata.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/protobuf.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/telemetry.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/remote_config_value_hydrator/verified_values.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/response_format.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/scoped_source_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/specs_adapter_trait.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/statsig_bootstrap_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/statsig_customized_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/statsig_data_store_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/statsig_grpc_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/statsig_http_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_adapter/statsig_local_file_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/__tests__/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/__tests__/proto_specs_syncing_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/__tests__/proto_specs_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/__tests__/proto_specs_unknown_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/__tests__/proto_specs_vs_json_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/__tests__/proto_stream_reader_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/cmab_types.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/explicit_params.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/param_store_types.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/parse_options.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/proto_compression.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/proto_specs/parser.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/proto_specs.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/proto_stream_reader.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/spec_types.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/specs_hash_map.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/specs_response/statsig_config_specs.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig/typed_config_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_core_api_options.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_err.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_global.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_metadata.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_options.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_runtime.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_type_factories.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_types.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/statsig_types_raw.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/typed_config/tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/typed_config.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/fast_statsig_user.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/into_optional.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/prepared_user.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/random_user_id.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/statsig_user.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/statsig_user_builder.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/statsig_user_internal.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/statsig_user_loggable.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/unit_id.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/user_data.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/user/user_value.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/utils/random.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/src/value_parsing.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/check_gate_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/customized_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/big_number_dcs.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/check_gate_perf_dcs.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/company_id_list +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/dcs_error.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/dcs_missing_gates.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/dcs_non_case_sensitive.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/dcs_user_agent_versions.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/dcs_with_analytical_exposure_sampling.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/dcs_with_checksum.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/dcs_with_sampling.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/dcs_with_sdk_configs.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/demo_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/demo_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/eval_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/eval_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/experiment_group_condition.pb.br +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/get_id_lists.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/perf_proj_dcs.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/perf_proj_dcs.pb.br +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/shared_dict_dict_only.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/shared_dict_original_dcs.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/shared_dict_response_uncompressed.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/shared_dict_response_with_dict.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/shared_dict_response_without_dict.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/test_must_pass_user_agents.txt +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/test_user_agents.txt +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/ua_string_cases.json +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data/unknown_enum.pb.br +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data_store_bytes_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data_store_json_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data_store_json_only_no_bytes_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/data_store_proto_bytes_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/delayed_exposure_bench.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/direct_gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/dynamic_string_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/dynamic_value_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/evaluation_details_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/evaluator_value_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/event_logger_constants_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/event_logger_failing_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/event_logger_flush_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/event_logger_high_qps_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/event_logger_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/expected_evaluation_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/exposure_sampling_key_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/exposure_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/flushing_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/fork_lifecycle.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/fork_pid_change.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/fork_random.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/gate_inversion_eval_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/gcir_plan_expansion_bench.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/gcir_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/global_configs_test.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/grpc_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/hash_util_evaluation_hash_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/http_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/hydration_cohort_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/id_list_storage_api_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/initialize_timeout_test.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/instance_registry_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/interner_contention_bench.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/json_remote_value_mmap_reuse_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/json_remote_value_reuse_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/layer_serialization_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/list_methods_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/nested_gate_sampling_memo_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/network_client_streaming_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/network_client_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/observability_client_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/output_logger_reentrancy_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/output_logger_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/override_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/perf_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/proto_specs_usage_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/protobuf_copy_bench.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/remote_config_preload_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/remote_config_value_hydration_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/spec_store_lock_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/spec_types_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_disable_network_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_environment_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_event_emitter_usage_test.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_global_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_local_file_event_logging_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_local_file_specs_adapter_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_options_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_shared_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_user_builder_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_user_field_accessor_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_user_internal_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_user_loggable_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/statsig_user_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/substring_search_bench.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/syncing_network_failure_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/typed_getters_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/typed_packaged_fallback_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/typed_packaged_initialization_race_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/ua_parser_util_test.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/user_agent_tests_first_party.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/user_json_tests.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/env_var_guard.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/fork_runtime.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/helpers.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/mock_data_store.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/mock_event_logging_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/mock_log_provider.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/mock_observability_client.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/mock_scrapi.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/mock_specs_adapter.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/mock_specs_listener.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/utils/mod.rs +0 -0
- {oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/tests/verified_remote_value_reuse_tests.rs +0 -0
|
@@ -1853,7 +1853,7 @@ dependencies = [
|
|
|
1853
1853
|
|
|
1854
1854
|
[[package]]
|
|
1855
1855
|
name = "oai-statsig-grpc"
|
|
1856
|
-
version = "0.37.0-rc.
|
|
1856
|
+
version = "0.37.0-rc.2"
|
|
1857
1857
|
dependencies = [
|
|
1858
1858
|
"async-trait",
|
|
1859
1859
|
"chrono",
|
|
@@ -1869,7 +1869,7 @@ dependencies = [
|
|
|
1869
1869
|
|
|
1870
1870
|
[[package]]
|
|
1871
1871
|
name = "oai-statsig-rust"
|
|
1872
|
-
version = "0.37.0-rc.
|
|
1872
|
+
version = "0.37.0-rc.2"
|
|
1873
1873
|
dependencies = [
|
|
1874
1874
|
"ahash",
|
|
1875
1875
|
"arc-swap",
|
|
@@ -3102,7 +3102,7 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
|
|
3102
3102
|
|
|
3103
3103
|
[[package]]
|
|
3104
3104
|
name = "statsig-node"
|
|
3105
|
-
version = "0.37.0-rc.
|
|
3105
|
+
version = "0.37.0-rc.2"
|
|
3106
3106
|
dependencies = [
|
|
3107
3107
|
"async-trait",
|
|
3108
3108
|
"napi",
|
|
@@ -3117,7 +3117,7 @@ dependencies = [
|
|
|
3117
3117
|
|
|
3118
3118
|
[[package]]
|
|
3119
3119
|
name = "statsig-pyo3"
|
|
3120
|
-
version = "0.37.0-rc.
|
|
3120
|
+
version = "0.37.0-rc.2"
|
|
3121
3121
|
dependencies = [
|
|
3122
3122
|
"async-trait",
|
|
3123
3123
|
"lazy_static",
|
|
@@ -3132,7 +3132,7 @@ dependencies = [
|
|
|
3132
3132
|
|
|
3133
3133
|
[[package]]
|
|
3134
3134
|
name = "statsig_ffi"
|
|
3135
|
-
version = "0.37.0-rc.
|
|
3135
|
+
version = "0.37.0-rc.2"
|
|
3136
3136
|
dependencies = [
|
|
3137
3137
|
"async-trait",
|
|
3138
3138
|
"cbindgen",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: oai_statsig_python_core
|
|
3
|
-
Version: 0.37.
|
|
3
|
+
Version: 0.37.0rc2
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
{oai_statsig_python_core-0.37.0rc1 → oai_statsig_python_core-0.37.0rc2}/statsig-rust/Cargo.toml
RENAMED
|
@@ -47,7 +47,7 @@ serde_json = { version = "1.0.151", features = [
|
|
|
47
47
|
] }
|
|
48
48
|
serde_with = "3.23.0"
|
|
49
49
|
sha2 = "0.11.0"
|
|
50
|
-
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.37.0-rc.
|
|
50
|
+
oai-statsig-grpc = { path = "../statsig-grpc", version = "0.37.0-rc.2", optional = true }
|
|
51
51
|
simple_logger = { version = "5.2.0" }
|
|
52
52
|
tempfile = "3.27.0"
|
|
53
53
|
tokio = { version = "1.53.1", features = ["full"] }
|
|
@@ -7,11 +7,9 @@ use crate::{
|
|
|
7
7
|
interned_values::{
|
|
8
8
|
InternedStore, MmapArtifactState, MmapPreloadOptions, MmapSyncCursor, MmapWriteOutcome,
|
|
9
9
|
interned_store::{
|
|
10
|
-
|
|
11
|
-
legacy_mmap_v1_path_for_sdk_key, mmap_lock_path_for_sdk_key,
|
|
10
|
+
acquire_mmap_write_lock_for_test, mmap_lock_path_for_sdk_key,
|
|
12
11
|
mmap_manifest_path_for_sdk_key, mmap_v2_path_for_sdk_key, validate_mmap_v2_for_test,
|
|
13
12
|
write_mmap_manifest_for_test, write_mmap_v2_for_test,
|
|
14
|
-
write_mmap_v2_only_manifest_for_test,
|
|
15
13
|
},
|
|
16
14
|
mmap_data_v2::{ArchivedMmapDataV2, MmapDataV2},
|
|
17
15
|
},
|
|
@@ -68,7 +66,6 @@ const MMAP_CONCURRENT_SAME_KEY: &str = "interned-store-concurrent-same-key";
|
|
|
68
66
|
const EVAL_PROJ_JSON: &str = include_str!("../../../tests/data/eval_proj_dcs.json");
|
|
69
67
|
const EVAL_PROJ_PROTO: &[u8] = include_bytes!("../../../tests/data/eval_proj_dcs.pb.br");
|
|
70
68
|
const BIG_NUMBER_JSON: &str = include_str!("../../../tests/data/big_number_dcs.json");
|
|
71
|
-
const LEGACY_V1_TEST_BYTES: &[u8] = b"legacy v1 artifact";
|
|
72
69
|
const DOWNLOAD_PATH_PREFIX: &str = "/v1/dynamic_config_value/";
|
|
73
70
|
|
|
74
71
|
fn config_json_with_cursor(lcut: u64, checksum: Option<&str>) -> String {
|
|
@@ -182,8 +179,6 @@ fn query_params(request: &Request) -> HashMap<String, String> {
|
|
|
182
179
|
#[tokio::test]
|
|
183
180
|
async fn fetch_and_write_mmap_uses_header_auth_and_authoritative_storage_key() {
|
|
184
181
|
let server = MockServer::start().await;
|
|
185
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(MMAP_FETCH_SDK_KEY);
|
|
186
|
-
let _ = fs::remove_file(&v1_path);
|
|
187
182
|
Mock::given(method("GET"))
|
|
188
183
|
.and(path("/v2/download_config_specs"))
|
|
189
184
|
.and(header("statsig-api-key", MMAP_FETCH_SDK_KEY))
|
|
@@ -208,7 +203,6 @@ async fn fetch_and_write_mmap_uses_header_auth_and_authoritative_storage_key() {
|
|
|
208
203
|
"{}_v2_interned_store.mmap",
|
|
209
204
|
hashing::djb2(MMAP_FETCH_SDK_KEY)
|
|
210
205
|
);
|
|
211
|
-
assert!(!v1_path.exists());
|
|
212
206
|
assert_eq!(
|
|
213
207
|
v2_path.file_name().and_then(|name| name.to_str()),
|
|
214
208
|
Some(expected_v2_filename.as_str())
|
|
@@ -1033,7 +1027,7 @@ rusty_fork_test! {
|
|
|
1033
1027
|
|
|
1034
1028
|
#[cfg(unix)]
|
|
1035
1029
|
#[tokio::test]
|
|
1036
|
-
async fn
|
|
1030
|
+
async fn fetch_and_write_mmap_atomically_replaces_v2() {
|
|
1037
1031
|
let server = MockServer::start().await;
|
|
1038
1032
|
Mock::given(method("GET"))
|
|
1039
1033
|
.and(path("/v2/download_config_specs"))
|
|
@@ -1045,12 +1039,9 @@ async fn fetch_and_write_mmap_replaces_v2_and_leaves_v1_untouched() {
|
|
|
1045
1039
|
.mount(&server)
|
|
1046
1040
|
.await;
|
|
1047
1041
|
|
|
1048
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(MMAP_REPLACE_SDK_KEY);
|
|
1049
1042
|
let v2_path = mmap_v2_path_for_sdk_key(MMAP_REPLACE_SDK_KEY);
|
|
1050
|
-
fs::create_dir_all(
|
|
1051
|
-
fs::write(&v1_path, b"previous v1 artifact").unwrap();
|
|
1043
|
+
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1052
1044
|
fs::write(&v2_path, b"previous v2 artifact").unwrap();
|
|
1053
|
-
let mut previous_v1_artifact = File::open(&v1_path).unwrap();
|
|
1054
1045
|
let mut previous_v2_artifact = File::open(&v2_path).unwrap();
|
|
1055
1046
|
|
|
1056
1047
|
InternedStore::fetch_and_write_mmap_with_specs_url(
|
|
@@ -1060,18 +1051,12 @@ async fn fetch_and_write_mmap_replaces_v2_and_leaves_v1_untouched() {
|
|
|
1060
1051
|
.await
|
|
1061
1052
|
.unwrap();
|
|
1062
1053
|
|
|
1063
|
-
let mut previous_v1_contents = Vec::new();
|
|
1064
|
-
previous_v1_artifact
|
|
1065
|
-
.read_to_end(&mut previous_v1_contents)
|
|
1066
|
-
.unwrap();
|
|
1067
|
-
assert_eq!(previous_v1_contents, b"previous v1 artifact");
|
|
1068
1054
|
let mut previous_v2_contents = Vec::new();
|
|
1069
1055
|
previous_v2_artifact
|
|
1070
1056
|
.read_to_end(&mut previous_v2_contents)
|
|
1071
1057
|
.unwrap();
|
|
1072
1058
|
assert_eq!(previous_v2_contents, b"previous v2 artifact");
|
|
1073
1059
|
|
|
1074
|
-
assert_eq!(fs::read(&v1_path).unwrap(), b"previous v1 artifact");
|
|
1075
1060
|
let published_v2 = fs::read(&v2_path).unwrap();
|
|
1076
1061
|
assert_ne!(published_v2, b"previous v2 artifact");
|
|
1077
1062
|
rkyv::access::<ArchivedMmapDataV2, rkyv::rancor::Error>(&published_v2).unwrap();
|
|
@@ -1187,10 +1172,6 @@ async fn uid_10001_can_preload_artifact_written_by_uid_1000() {
|
|
|
1187
1172
|
|
|
1188
1173
|
#[test]
|
|
1189
1174
|
fn mmap_paths_are_scoped_by_sdk_key() {
|
|
1190
|
-
assert_ne!(
|
|
1191
|
-
legacy_mmap_v1_path_for_sdk_key(MMAP_FETCH_SDK_KEY),
|
|
1192
|
-
legacy_mmap_v1_path_for_sdk_key(OTHER_MMAP_FETCH_SDK_KEY)
|
|
1193
|
-
);
|
|
1194
1175
|
assert_ne!(
|
|
1195
1176
|
mmap_v2_path_for_sdk_key(MMAP_FETCH_SDK_KEY),
|
|
1196
1177
|
mmap_v2_path_for_sdk_key(OTHER_MMAP_FETCH_SDK_KEY)
|
|
@@ -1206,9 +1187,14 @@ fn mmap_paths_are_scoped_by_sdk_key() {
|
|
|
1206
1187
|
}
|
|
1207
1188
|
|
|
1208
1189
|
#[test]
|
|
1209
|
-
fn
|
|
1210
|
-
let sdk_key = "interned-store-inspect-
|
|
1190
|
+
fn inspect_mmap_artifact_ignores_retired_v1_artifacts() {
|
|
1191
|
+
let sdk_key = "interned-store-inspect-retired-v1";
|
|
1211
1192
|
remove_mmap_artifacts(sdk_key);
|
|
1193
|
+
let retired_path = std::env::temp_dir()
|
|
1194
|
+
.join("statsig-interned-store")
|
|
1195
|
+
.join(format!("{}_v1_interned_store.mmap", hashing::djb2(sdk_key)));
|
|
1196
|
+
fs::create_dir_all(retired_path.parent().unwrap()).unwrap();
|
|
1197
|
+
fs::write(&retired_path, b"retired artifact is ignored").unwrap();
|
|
1212
1198
|
|
|
1213
1199
|
let missing = InternedStore::inspect_mmap_artifact(sdk_key).unwrap();
|
|
1214
1200
|
assert_eq!(missing.state, MmapArtifactState::Missing);
|
|
@@ -1219,21 +1205,8 @@ fn inspect_mmap_artifact_reports_missing_and_legacy_v1() {
|
|
|
1219
1205
|
assert_eq!(missing.manifest_bytes, None);
|
|
1220
1206
|
assert_eq!(missing.total_linked_bytes, 0);
|
|
1221
1207
|
assert_eq!(missing.linked_file_count, 0);
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
fs::create_dir_all(v1_path.parent().unwrap()).unwrap();
|
|
1225
|
-
fs::write(&v1_path, LEGACY_V1_TEST_BYTES).unwrap();
|
|
1226
|
-
|
|
1227
|
-
let legacy = InternedStore::inspect_mmap_artifact(sdk_key).unwrap();
|
|
1228
|
-
assert_eq!(legacy.state, MmapArtifactState::LegacyV1);
|
|
1229
|
-
assert_eq!(legacy.state.as_str(), "legacy_v1");
|
|
1230
|
-
assert_eq!(legacy.format_version, Some(LEGACY_MMAP_FORMAT_VERSION));
|
|
1231
|
-
assert_eq!(legacy.v1_bytes, Some(LEGACY_V1_TEST_BYTES.len() as u64));
|
|
1232
|
-
assert_eq!(legacy.v2_bytes, None);
|
|
1233
|
-
assert_eq!(legacy.manifest_bytes, None);
|
|
1234
|
-
assert_eq!(legacy.total_linked_bytes, LEGACY_V1_TEST_BYTES.len() as u64);
|
|
1235
|
-
assert_eq!(legacy.linked_file_count, 1);
|
|
1236
|
-
assert!(legacy.newest_linked_modified_unix_seconds.is_some());
|
|
1208
|
+
assert_eq!(missing.newest_linked_modified_unix_seconds, None);
|
|
1209
|
+
fs::remove_file(retired_path).unwrap();
|
|
1237
1210
|
}
|
|
1238
1211
|
|
|
1239
1212
|
#[test]
|
|
@@ -1244,7 +1217,7 @@ fn inspect_mmap_artifact_reports_committed_and_incomplete_v2() {
|
|
|
1244
1217
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1245
1218
|
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1246
1219
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1247
|
-
|
|
1220
|
+
write_mmap_manifest_for_test(&manifest_path, &v2_path).unwrap();
|
|
1248
1221
|
|
|
1249
1222
|
let committed = InternedStore::inspect_mmap_artifact(sdk_key).unwrap();
|
|
1250
1223
|
let v2_bytes = fs::metadata(&v2_path).unwrap().len();
|
|
@@ -1283,39 +1256,25 @@ fn inspect_mmap_artifact_reports_committed_and_incomplete_v2() {
|
|
|
1283
1256
|
}
|
|
1284
1257
|
|
|
1285
1258
|
#[test]
|
|
1286
|
-
fn
|
|
1287
|
-
let sdk_key = "interned-store-inspect-
|
|
1259
|
+
fn inspect_mmap_artifact_reports_invalid_manifest() {
|
|
1260
|
+
let sdk_key = "interned-store-inspect-invalid-manifest";
|
|
1288
1261
|
remove_mmap_artifacts(sdk_key);
|
|
1289
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(sdk_key);
|
|
1290
1262
|
let v2_path = mmap_v2_path_for_sdk_key(sdk_key);
|
|
1291
1263
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1292
|
-
fs::create_dir_all(
|
|
1293
|
-
fs::write(&v1_path, LEGACY_V1_TEST_BYTES).unwrap();
|
|
1264
|
+
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1294
1265
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
let replacement = tempfile::NamedTempFile::new_in(v2_path.parent().unwrap()).unwrap();
|
|
1298
|
-
fs::write(replacement.path(), b"replacement v2 generation").unwrap();
|
|
1299
|
-
replacement.persist(&v2_path).unwrap();
|
|
1300
|
-
|
|
1301
|
-
let fallback = InternedStore::inspect_mmap_artifact(sdk_key).unwrap();
|
|
1302
|
-
assert_eq!(fallback.state, MmapArtifactState::FallbackV1);
|
|
1303
|
-
assert_eq!(fallback.state.as_str(), "fallback_v1");
|
|
1304
|
-
assert_eq!(fallback.format_version, Some(LEGACY_MMAP_FORMAT_VERSION));
|
|
1305
|
-
assert_eq!(fallback.v1_bytes, Some(LEGACY_V1_TEST_BYTES.len() as u64));
|
|
1306
|
-
assert_eq!(
|
|
1307
|
-
fallback.v2_bytes,
|
|
1308
|
-
Some(b"replacement v2 generation".len() as u64)
|
|
1309
|
-
);
|
|
1310
|
-
assert!(fallback.manifest_bytes.is_some());
|
|
1311
|
-
assert_eq!(fallback.linked_file_count, 3);
|
|
1266
|
+
fs::write(&manifest_path, b"invalid manifest").unwrap();
|
|
1312
1267
|
|
|
1313
|
-
fs::remove_file(v1_path).unwrap();
|
|
1314
1268
|
let invalid = InternedStore::inspect_mmap_artifact(sdk_key).unwrap();
|
|
1315
1269
|
assert_eq!(invalid.state, MmapArtifactState::Invalid);
|
|
1316
1270
|
assert_eq!(invalid.state.as_str(), "invalid");
|
|
1317
1271
|
assert_eq!(invalid.format_version, None);
|
|
1318
1272
|
assert_eq!(invalid.v1_bytes, None);
|
|
1273
|
+
assert_eq!(invalid.v2_bytes, Some(fs::metadata(v2_path).unwrap().len()));
|
|
1274
|
+
assert_eq!(
|
|
1275
|
+
invalid.manifest_bytes,
|
|
1276
|
+
Some(b"invalid manifest".len() as u64)
|
|
1277
|
+
);
|
|
1319
1278
|
assert_eq!(invalid.linked_file_count, 2);
|
|
1320
1279
|
}
|
|
1321
1280
|
|
|
@@ -1353,7 +1312,6 @@ fn sdk_key_write_lock_rejects_a_second_file_handle() {
|
|
|
1353
1312
|
|
|
1354
1313
|
fn remove_mmap_artifacts(sdk_key: &str) {
|
|
1355
1314
|
for path in [
|
|
1356
|
-
legacy_mmap_v1_path_for_sdk_key(sdk_key),
|
|
1357
1315
|
mmap_v2_path_for_sdk_key(sdk_key),
|
|
1358
1316
|
mmap_manifest_path_for_sdk_key(sdk_key),
|
|
1359
1317
|
mmap_lock_path_for_sdk_key(sdk_key),
|
|
@@ -1366,15 +1324,13 @@ fn remove_mmap_artifacts(sdk_key: &str) {
|
|
|
1366
1324
|
#[test]
|
|
1367
1325
|
fn committed_v2_validation_keeps_the_validated_file_handle() {
|
|
1368
1326
|
let sdk_key = "interned-store-open-handle";
|
|
1369
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(sdk_key);
|
|
1370
1327
|
let v2_path = mmap_v2_path_for_sdk_key(sdk_key);
|
|
1371
1328
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1372
|
-
fs::create_dir_all(
|
|
1373
|
-
fs::write(&v1_path, b"paired v1 generation").unwrap();
|
|
1329
|
+
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1374
1330
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1375
|
-
write_mmap_manifest_for_test(&manifest_path, &
|
|
1331
|
+
write_mmap_manifest_for_test(&manifest_path, &v2_path).unwrap();
|
|
1376
1332
|
|
|
1377
|
-
let validated = open_committed_mmap_v2_for_test(&manifest_path, &
|
|
1333
|
+
let validated = open_committed_mmap_v2_for_test(&manifest_path, &v2_path)
|
|
1378
1334
|
.unwrap()
|
|
1379
1335
|
.unwrap();
|
|
1380
1336
|
let replacement = tempfile::NamedTempFile::new_in(v2_path.parent().unwrap()).unwrap();
|
|
@@ -1388,15 +1344,18 @@ fn committed_v2_validation_keeps_the_validated_file_handle() {
|
|
|
1388
1344
|
|
|
1389
1345
|
rusty_fork_test! {
|
|
1390
1346
|
#[test]
|
|
1391
|
-
fn
|
|
1392
|
-
let sdk_key = "interned-store-
|
|
1393
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(sdk_key);
|
|
1347
|
+
fn preload_mmap_ignores_retired_manifest_metadata() {
|
|
1348
|
+
let sdk_key = "interned-store-retired-manifest-metadata";
|
|
1394
1349
|
let v2_path = mmap_v2_path_for_sdk_key(sdk_key);
|
|
1395
1350
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1396
|
-
fs::create_dir_all(
|
|
1397
|
-
fs::write(&v1_path, b"malformed v1 that must not be read").unwrap();
|
|
1351
|
+
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1398
1352
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1399
|
-
write_mmap_manifest_for_test(&manifest_path, &
|
|
1353
|
+
write_mmap_manifest_for_test(&manifest_path, &v2_path).unwrap();
|
|
1354
|
+
let mut manifest: serde_json::Value =
|
|
1355
|
+
serde_json::from_slice(&fs::read(&manifest_path).unwrap()).unwrap();
|
|
1356
|
+
// Old paired manifests remain readable without a V1 artifact.
|
|
1357
|
+
manifest["v1"] = manifest["v2"].clone();
|
|
1358
|
+
fs::write(&manifest_path, serde_json::to_vec(&manifest).unwrap()).unwrap();
|
|
1400
1359
|
|
|
1401
1360
|
InternedStore::preload_mmap(sdk_key).unwrap();
|
|
1402
1361
|
let specs: SpecsResponseFull = serde_json::from_str(EVAL_PROJ_JSON).unwrap();
|
|
@@ -1406,15 +1365,13 @@ rusty_fork_test! {
|
|
|
1406
1365
|
}
|
|
1407
1366
|
|
|
1408
1367
|
#[test]
|
|
1409
|
-
fn
|
|
1368
|
+
fn preload_mmap_accepts_committed_v2_manifest() {
|
|
1410
1369
|
let sdk_key = "interned-store-v2-only-manifest";
|
|
1411
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(sdk_key);
|
|
1412
1370
|
let v2_path = mmap_v2_path_for_sdk_key(sdk_key);
|
|
1413
1371
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1414
1372
|
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1415
|
-
let _ = fs::remove_file(v1_path);
|
|
1416
1373
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1417
|
-
|
|
1374
|
+
write_mmap_manifest_for_test(&manifest_path, &v2_path).unwrap();
|
|
1418
1375
|
|
|
1419
1376
|
let report = InternedStore::preload_mmap_with_options(
|
|
1420
1377
|
sdk_key,
|
|
@@ -1430,20 +1387,16 @@ rusty_fork_test! {
|
|
|
1430
1387
|
}
|
|
1431
1388
|
|
|
1432
1389
|
#[test]
|
|
1433
|
-
fn
|
|
1434
|
-
let required_key = "interned-store-multi-
|
|
1390
|
+
fn preload_mmap_multi_rejects_a_missing_required_key() {
|
|
1391
|
+
let required_key = "interned-store-multi-missing-required";
|
|
1435
1392
|
let optional_key = "interned-store-multi-committed-optional";
|
|
1436
1393
|
remove_mmap_artifacts(required_key);
|
|
1437
1394
|
remove_mmap_artifacts(optional_key);
|
|
1438
1395
|
|
|
1439
|
-
let required_v1_path = legacy_mmap_v1_path_for_sdk_key(required_key);
|
|
1440
|
-
fs::create_dir_all(required_v1_path.parent().unwrap()).unwrap();
|
|
1441
|
-
fs::write(&required_v1_path, b"legacy artifact must not be preloaded").unwrap();
|
|
1442
|
-
|
|
1443
1396
|
let optional_v2_path = mmap_v2_path_for_sdk_key(optional_key);
|
|
1444
1397
|
let optional_manifest_path = mmap_manifest_path_for_sdk_key(optional_key);
|
|
1445
1398
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &optional_v2_path).unwrap();
|
|
1446
|
-
|
|
1399
|
+
write_mmap_manifest_for_test(&optional_manifest_path, &optional_v2_path)
|
|
1447
1400
|
.unwrap();
|
|
1448
1401
|
|
|
1449
1402
|
assert!(matches!(
|
|
@@ -1461,7 +1414,7 @@ rusty_fork_test! {
|
|
|
1461
1414
|
let manifest_path = mmap_manifest_path_for_sdk_key(required_key);
|
|
1462
1415
|
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1463
1416
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1464
|
-
|
|
1417
|
+
write_mmap_manifest_for_test(&manifest_path, &v2_path).unwrap();
|
|
1465
1418
|
let _ = fs::remove_file(mmap_manifest_path_for_sdk_key(optional_key));
|
|
1466
1419
|
|
|
1467
1420
|
let report =
|
|
@@ -1475,15 +1428,13 @@ rusty_fork_test! {
|
|
|
1475
1428
|
}
|
|
1476
1429
|
|
|
1477
1430
|
#[test]
|
|
1478
|
-
fn
|
|
1431
|
+
fn preload_mmap_retries_during_refresh() {
|
|
1479
1432
|
let sdk_key = "interned-store-v2-only-refresh";
|
|
1480
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(sdk_key);
|
|
1481
1433
|
let v2_path = mmap_v2_path_for_sdk_key(sdk_key);
|
|
1482
1434
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1483
|
-
fs::create_dir_all(
|
|
1484
|
-
fs::write(&v1_path, b"stale v1 generation").unwrap();
|
|
1435
|
+
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1485
1436
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1486
|
-
|
|
1437
|
+
write_mmap_manifest_for_test(&manifest_path, &v2_path).unwrap();
|
|
1487
1438
|
|
|
1488
1439
|
let replacement = tempfile::NamedTempFile::new_in(v2_path.parent().unwrap()).unwrap();
|
|
1489
1440
|
fs::write(replacement.path(), b"next v2 generation").unwrap();
|
|
@@ -1496,26 +1447,6 @@ rusty_fork_test! {
|
|
|
1496
1447
|
));
|
|
1497
1448
|
}
|
|
1498
1449
|
|
|
1499
|
-
#[test]
|
|
1500
|
-
fn preload_mmap_rejects_v2_when_paired_v1_was_replaced() {
|
|
1501
|
-
let sdk_key = "interned-store-v1-only-refresh";
|
|
1502
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(sdk_key);
|
|
1503
|
-
let v2_path = mmap_v2_path_for_sdk_key(sdk_key);
|
|
1504
|
-
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1505
|
-
fs::create_dir_all(v1_path.parent().unwrap()).unwrap();
|
|
1506
|
-
fs::write(&v1_path, b"old v1 generation").unwrap();
|
|
1507
|
-
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1508
|
-
write_mmap_manifest_for_test(&manifest_path, &v1_path, &v2_path).unwrap();
|
|
1509
|
-
|
|
1510
|
-
fs::write(&v1_path, b"replacement v1 generation").unwrap();
|
|
1511
|
-
|
|
1512
|
-
assert!(matches!(
|
|
1513
|
-
InternedStore::preload_mmap(sdk_key),
|
|
1514
|
-
Err(StatsigErr::InvalidOperation(message))
|
|
1515
|
-
if message == "No committed interned mmap V2 artifact was found"
|
|
1516
|
-
));
|
|
1517
|
-
}
|
|
1518
|
-
|
|
1519
1450
|
#[cfg(target_os = "linux")]
|
|
1520
1451
|
#[test]
|
|
1521
1452
|
fn mmap_reader_memory_snapshot_tracks_deleted_loaded_generation() {
|
|
@@ -1525,7 +1456,7 @@ rusty_fork_test! {
|
|
|
1525
1456
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1526
1457
|
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1527
1458
|
write_mmap_v2_for_test(EVAL_PROJ_JSON.as_bytes(), &v2_path).unwrap();
|
|
1528
|
-
|
|
1459
|
+
write_mmap_manifest_for_test(&manifest_path, &v2_path).unwrap();
|
|
1529
1460
|
let expected_mapped_bytes = fs::metadata(&v2_path).unwrap().len();
|
|
1530
1461
|
|
|
1531
1462
|
InternedStore::preload_mmap(sdk_key).unwrap();
|
|
@@ -1560,7 +1491,7 @@ rusty_fork_test! {
|
|
|
1560
1491
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1561
1492
|
fs::create_dir_all(v2_path.parent().unwrap()).unwrap();
|
|
1562
1493
|
fs::write(&v2_path, b"malformed v2").unwrap();
|
|
1563
|
-
|
|
1494
|
+
write_mmap_manifest_for_test(&manifest_path, &v2_path).unwrap();
|
|
1564
1495
|
|
|
1565
1496
|
assert!(matches!(
|
|
1566
1497
|
InternedStore::preload_mmap(sdk_key),
|
|
@@ -1576,7 +1507,7 @@ fn preload_mmap_rejects_malformed_archive() {
|
|
|
1576
1507
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
1577
1508
|
fs::create_dir_all(path.parent().unwrap()).unwrap();
|
|
1578
1509
|
fs::write(&path, b"not an rkyv archive").unwrap();
|
|
1579
|
-
|
|
1510
|
+
write_mmap_manifest_for_test(&manifest_path, &path).unwrap();
|
|
1580
1511
|
|
|
1581
1512
|
assert!(matches!(
|
|
1582
1513
|
InternedStore::preload_mmap(sdk_key),
|
|
@@ -1597,7 +1528,7 @@ fn preload_mmap_rejects_unsupported_format_version() {
|
|
|
1597
1528
|
};
|
|
1598
1529
|
let archived = rkyv::to_bytes::<rkyv::rancor::Error>(&mmap_data).unwrap();
|
|
1599
1530
|
fs::write(&path, archived).unwrap();
|
|
1600
|
-
|
|
1531
|
+
write_mmap_manifest_for_test(&manifest_path, &path).unwrap();
|
|
1601
1532
|
|
|
1602
1533
|
assert!(matches!(
|
|
1603
1534
|
InternedStore::preload_mmap(sdk_key),
|
|
@@ -3,7 +3,7 @@ use std::{fs::Metadata, path::Path, time::UNIX_EPOCH};
|
|
|
3
3
|
use crate::StatsigErr;
|
|
4
4
|
|
|
5
5
|
use super::{
|
|
6
|
-
InternedStore,
|
|
6
|
+
InternedStore,
|
|
7
7
|
mmap_manifest::{MmapV2Publication, inspect_mmap_v2_publication},
|
|
8
8
|
mmap_manifest_path_for_sdk_key, mmap_v2_path_for_sdk_key,
|
|
9
9
|
};
|
|
@@ -11,24 +11,24 @@ use super::{
|
|
|
11
11
|
/// Describes the interned mmap artifacts linked at the SDK-owned location.
|
|
12
12
|
///
|
|
13
13
|
/// This intentionally omits the SDK key, filesystem path, and platform-specific
|
|
14
|
-
/// file identity used to validate publication.
|
|
15
|
-
/// the V2-only reader rejects them.
|
|
14
|
+
/// file identity used to validate publication.
|
|
16
15
|
#[non_exhaustive]
|
|
17
16
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
|
18
17
|
pub enum MmapArtifactState {
|
|
19
|
-
/// No
|
|
18
|
+
/// No V2 publication is linked at the SDK-owned location.
|
|
20
19
|
Missing,
|
|
21
|
-
///
|
|
20
|
+
/// Retained for source compatibility. Artifact inspection no longer returns
|
|
21
|
+
/// this state because V1 artifacts are unsupported.
|
|
22
22
|
LegacyV1,
|
|
23
|
-
///
|
|
24
|
-
///
|
|
23
|
+
/// Retained for source compatibility. Artifact inspection no longer returns
|
|
24
|
+
/// this state because V1 artifacts are unsupported.
|
|
25
25
|
FallbackV1,
|
|
26
26
|
/// The V2 artifact and manifest identities match.
|
|
27
27
|
CommittedV2,
|
|
28
|
-
///
|
|
29
|
-
/// readers must retry
|
|
28
|
+
/// The V2 artifact and manifest do not form a committed identity, so
|
|
29
|
+
/// readers must retry.
|
|
30
30
|
IncompleteV2,
|
|
31
|
-
/// V2 publication validation failed
|
|
31
|
+
/// V2 publication validation failed.
|
|
32
32
|
Invalid,
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -48,21 +48,22 @@ impl MmapArtifactState {
|
|
|
48
48
|
|
|
49
49
|
/// Safe metadata for an SDK-owned interned mmap artifact.
|
|
50
50
|
///
|
|
51
|
-
/// Byte counts cover only currently linked
|
|
51
|
+
/// Byte counts cover only currently linked V2 and manifest files. They do
|
|
52
52
|
/// not include unlinked generations that remain mapped by readers or transient
|
|
53
53
|
/// writer files. State and format reflect a reader-selectable publication
|
|
54
54
|
/// observed during inspection. Linked file sizes and modification times are
|
|
55
55
|
/// best-effort and may span a concurrent atomic publication. Filesystem
|
|
56
56
|
/// capacity is best-effort and is omitted on unsupported platforms or when the
|
|
57
|
-
/// backing filesystem cannot be inspected.
|
|
58
|
-
/// selectable by the V2-only reader.
|
|
57
|
+
/// backing filesystem cannot be inspected.
|
|
59
58
|
#[non_exhaustive]
|
|
60
59
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
61
60
|
pub struct MmapArtifactSnapshot {
|
|
62
61
|
pub state: MmapArtifactState,
|
|
63
|
-
/// Format of the
|
|
62
|
+
/// Format of the committed artifact. Unavailable or
|
|
64
63
|
/// invalid artifacts report `None`.
|
|
65
64
|
pub format_version: Option<u32>,
|
|
65
|
+
/// Retained for source compatibility. Always `None`; V1 artifacts are no
|
|
66
|
+
/// longer inspected or included in linked file totals.
|
|
66
67
|
pub v1_bytes: Option<u64>,
|
|
67
68
|
pub v2_bytes: Option<u64>,
|
|
68
69
|
pub manifest_bytes: Option<u64>,
|
|
@@ -80,22 +81,15 @@ impl InternedStore {
|
|
|
80
81
|
///
|
|
81
82
|
/// V2 state uses the same committed-manifest identity validation as
|
|
82
83
|
/// `preload_mmap`. The snapshot is informational and does not map or parse
|
|
83
|
-
///
|
|
84
|
+
/// the archived config payload.
|
|
84
85
|
pub fn inspect_mmap_artifact(sdk_key: &str) -> Result<MmapArtifactSnapshot, StatsigErr> {
|
|
85
|
-
let v1_path = legacy_mmap_v1_path_for_sdk_key(sdk_key);
|
|
86
86
|
let v2_path = mmap_v2_path_for_sdk_key(sdk_key);
|
|
87
87
|
let manifest_path = mmap_manifest_path_for_sdk_key(sdk_key);
|
|
88
88
|
|
|
89
|
-
let publication = inspect_mmap_v2_publication(&manifest_path, &
|
|
90
|
-
let v1_metadata = metadata_if_linked(&v1_path)?;
|
|
89
|
+
let publication = inspect_mmap_v2_publication(&manifest_path, &v2_path)?;
|
|
91
90
|
let manifest_metadata = metadata_if_linked(&manifest_path)?;
|
|
92
91
|
|
|
93
92
|
let (state, format_version, committed_v2_metadata) = match publication {
|
|
94
|
-
MmapV2Publication::Absent if v1_metadata.is_some() => (
|
|
95
|
-
MmapArtifactState::LegacyV1,
|
|
96
|
-
Some(LEGACY_MMAP_FORMAT_VERSION),
|
|
97
|
-
None,
|
|
98
|
-
),
|
|
99
93
|
MmapV2Publication::Absent => (MmapArtifactState::Missing, None, None),
|
|
100
94
|
MmapV2Publication::Committed(file) => {
|
|
101
95
|
let metadata = file
|
|
@@ -108,11 +102,6 @@ impl InternedStore {
|
|
|
108
102
|
)
|
|
109
103
|
}
|
|
110
104
|
MmapV2Publication::Incomplete => (MmapArtifactState::IncompleteV2, None, None),
|
|
111
|
-
MmapV2Publication::Invalid(_) if v1_metadata.is_some() => (
|
|
112
|
-
MmapArtifactState::FallbackV1,
|
|
113
|
-
Some(LEGACY_MMAP_FORMAT_VERSION),
|
|
114
|
-
None,
|
|
115
|
-
),
|
|
116
105
|
MmapV2Publication::Invalid(_) => (MmapArtifactState::Invalid, None, None),
|
|
117
106
|
};
|
|
118
107
|
|
|
@@ -120,26 +109,22 @@ impl InternedStore {
|
|
|
120
109
|
Some(metadata) => Some(metadata),
|
|
121
110
|
None => metadata_if_linked(&v2_path)?,
|
|
122
111
|
};
|
|
123
|
-
let v1_bytes = v1_metadata.as_ref().map(Metadata::len);
|
|
124
112
|
let v2_bytes = v2_metadata.as_ref().map(Metadata::len);
|
|
125
113
|
let manifest_bytes = manifest_metadata.as_ref().map(Metadata::len);
|
|
126
|
-
let total_linked_bytes = [
|
|
114
|
+
let total_linked_bytes = [v2_bytes, manifest_bytes]
|
|
127
115
|
.into_iter()
|
|
128
116
|
.flatten()
|
|
129
117
|
.fold(0_u64, u64::saturating_add);
|
|
130
|
-
let linked_file_count = [
|
|
118
|
+
let linked_file_count = [v2_bytes, manifest_bytes]
|
|
131
119
|
.into_iter()
|
|
132
120
|
.filter(Option::is_some)
|
|
133
121
|
.count() as u64;
|
|
134
|
-
let newest_linked_modified_unix_seconds =
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
.flatten()
|
|
141
|
-
.filter_map(modified_unix_seconds)
|
|
142
|
-
.max();
|
|
122
|
+
let newest_linked_modified_unix_seconds =
|
|
123
|
+
[v2_metadata.as_ref(), manifest_metadata.as_ref()]
|
|
124
|
+
.into_iter()
|
|
125
|
+
.flatten()
|
|
126
|
+
.filter_map(modified_unix_seconds)
|
|
127
|
+
.max();
|
|
143
128
|
let (filesystem_capacity_bytes, filesystem_available_bytes) = manifest_path
|
|
144
129
|
.parent()
|
|
145
130
|
.map(filesystem_space)
|
|
@@ -148,7 +133,7 @@ impl InternedStore {
|
|
|
148
133
|
Ok(MmapArtifactSnapshot {
|
|
149
134
|
state,
|
|
150
135
|
format_version,
|
|
151
|
-
v1_bytes,
|
|
136
|
+
v1_bytes: None,
|
|
152
137
|
v2_bytes,
|
|
153
138
|
manifest_bytes,
|
|
154
139
|
total_linked_bytes,
|