supertable 2.2.1__tar.gz → 2.2.2__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.
- {supertable-2.2.1/supertable.egg-info → supertable-2.2.2}/PKG-INFO +1 -1
- {supertable-2.2.1 → supertable-2.2.2}/pyproject.toml +1 -1
- {supertable-2.2.1 → supertable-2.2.2}/setup.py +1 -1
- {supertable-2.2.1 → supertable-2.2.2}/supertable/__init__.py +1 -1
- {supertable-2.2.1 → supertable-2.2.2}/supertable/data_writer.py +37 -20
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/defaults.py +1 -1
- {supertable-2.2.1 → supertable-2.2.2}/supertable/processing.py +280 -171
- {supertable-2.2.1 → supertable-2.2.2}/supertable/simple_table.py +29 -18
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_newer_than.py +1 -1
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_process_delete_only.py +2 -2
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_small_file_compaction.py +2 -2
- supertable-2.2.2/supertable/utils/profiler.py +116 -0
- {supertable-2.2.1 → supertable-2.2.2/supertable.egg-info}/PKG-INFO +1 -1
- {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/SOURCES.txt +1 -0
- {supertable-2.2.1 → supertable-2.2.2}/LICENSE +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/README.md +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/requirements.txt +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/setup.cfg +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/admin.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/chain.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/consumers.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/crypto.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/events.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/export.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/logger.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/middleware.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/reader.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/retention.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_chain.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_crypto.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_emit.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_events.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/tests/test_retention.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/writer_parquet.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/audit/writer_redis.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/config/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/config/defaults.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/config/homedir.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/config/settings.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/config/tests/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/config/tests/test_defaults.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/config/tests/test_homedir.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/config/tests/test_settings.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/data_classes.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/data_reader.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/__main__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/check_filter_builder.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/controller.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/data_writer_helpers.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/defaults.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/dummy_data.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/read_parquet_header.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s01_01_01_create_super_table.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s01_01_02_enable_mirroring_formats.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s01_02_create_roles.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s01_03_create_users.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_01_write_dummy_data.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_02_write_single_data.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_03_01_write_staging.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_03_02_create_pipe.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_04_01_write_monitoring_simple.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_04_02_write_monitoring_parallel.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s02_05_write_tombstone.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_01_read_data_error.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_02_01_read_super_data_ok.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_02_02_read_table_data_ok.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_03_read_meta.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_04_read_staging.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_06_01_read_roles.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_06_02_read_user.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_07_01_estimate_read.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_07_02_estimate_files.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s03_08_read_snapshot_history.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s04_01_03_delete_pipe.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s05_01_delete_table.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/quickstart/s05_02_delete_super_table.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/core.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/generate.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/load.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/demo/webshop/topup.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/data_estimator.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/duckdb_lite.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/duckdb_pro.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/engine_common.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/engine_enum.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/executor.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/plan_stats.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/spark_thrift.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/tests/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/tests/conftest.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/tests/test_dedup_read.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/engine/tests/test_engine.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/errors.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/gc/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/gc/cleaner.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/gc/daemon.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/gc/queue.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/benchmarks/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/benchmarks/benchmark_locking.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/benchmarks/measure_lock_speed.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/benchmarks/measure_lock_time.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/file_lock.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/redis_lock.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/tests/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/tests/test_file_lock.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/locking/tests/test_redis_lock.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/logging.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/meta_reader.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/mirror_delta.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/mirror_formats.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/mirror_iceberg.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/mirroring/mirror_parquet.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/monitoring/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/monitoring/partitions.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/monitoring_writer.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/plan_extender.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/query_plan_manager.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/access_control.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/filter_builder.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/permissions.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/role_manager.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/row_column_security.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/tests/test_filter_builder.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/tests/test_rbac.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/tests/test_rbac_per_table.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/rbac/user_manager.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/redis_catalog.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/redis_connector.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/redis_infra.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/redis_keys.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/staging_area.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/azure_storage.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/gcp_storage.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/local_storage.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/minio_storage.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/s3_storage.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/storage_factory.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/storage_interface.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/storage/tests/test_storage.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/super_pipe.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/super_table.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_align_to_schema_fix.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_create_if_missing.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_reader.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_reader_preflight.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_writer.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_writer_compact.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_writer_comprehensive.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_data_writer_tombstones.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_dedup_on_read_write.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_errors.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_gc_cleaner.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_gc_daemon.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_gc_queue.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_meta_reader.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_monitoring_partitions.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_monitoring_sink_guard.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_processing.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_processing_compact_resources.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_query_sql.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_redis_key_prefix.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_simple_table.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_super_table.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/tests/test_supertable_all.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/__init__.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/helper.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/sql_parser.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/tests/test_sql_parser_columns.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable/utils/timer.py +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/dependency_links.txt +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/entry_points.txt +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/requires.txt +0 -0
- {supertable-2.2.1 → supertable-2.2.2}/supertable.egg-info/top_level.txt +0 -0
|
@@ -19,7 +19,7 @@ long_description = readme.read_text(encoding="utf-8") if readme.exists() else ""
|
|
|
19
19
|
|
|
20
20
|
setup(
|
|
21
21
|
name="supertable",
|
|
22
|
-
version="2.2.
|
|
22
|
+
version="2.2.2",
|
|
23
23
|
description="SuperTable — versioned data lake library for SQL analytics on Parquet + Redis.",
|
|
24
24
|
long_description=long_description,
|
|
25
25
|
long_description_content_type="text/markdown",
|
|
@@ -25,7 +25,7 @@ See the ``supertable.demo`` package for runnable end-to-end demos and the
|
|
|
25
25
|
project documentation for the full API surface.
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
|
-
__version__ = "2.2.
|
|
28
|
+
__version__ = "2.2.2"
|
|
29
29
|
|
|
30
30
|
# Re-export the core public surface so users can do ``from supertable import …``
|
|
31
31
|
# instead of remembering submodule paths.
|
|
@@ -20,6 +20,7 @@ from supertable.super_table import SuperTable
|
|
|
20
20
|
from supertable import redis_keys as RK
|
|
21
21
|
from supertable.simple_table import SimpleTable
|
|
22
22
|
from supertable.utils.timer import Timer
|
|
23
|
+
from supertable.utils.profiler import Profiler
|
|
23
24
|
from supertable.processing import (
|
|
24
25
|
process_overlapping_files,
|
|
25
26
|
process_delete_only,
|
|
@@ -277,7 +278,11 @@ class DataWriter:
|
|
|
277
278
|
|
|
278
279
|
t0 = time.time()
|
|
279
280
|
t_last = t0
|
|
280
|
-
|
|
281
|
+
profiler = Profiler()
|
|
282
|
+
# Convenience view: top-level stages still indexed by the original
|
|
283
|
+
# short names ("lock", "snapshot", "overlap", ...) so the existing
|
|
284
|
+
# log line keeps working unchanged.
|
|
285
|
+
timings = profiler.timings
|
|
281
286
|
|
|
282
287
|
def mark(stage: str):
|
|
283
288
|
nonlocal t_last
|
|
@@ -338,6 +343,7 @@ class DataWriter:
|
|
|
338
343
|
overlapping_files = find_overlapping_files(
|
|
339
344
|
last_simple_table, dataframe, overwrite_columns, locking=None,
|
|
340
345
|
table_config=table_config,
|
|
346
|
+
profiler=profiler,
|
|
341
347
|
)
|
|
342
348
|
mark("overlap")
|
|
343
349
|
|
|
@@ -354,6 +360,7 @@ class DataWriter:
|
|
|
354
360
|
overwrite_columns=overwrite_columns,
|
|
355
361
|
newer_than_col=newer_than,
|
|
356
362
|
file_cache=file_cache,
|
|
363
|
+
profiler=profiler,
|
|
357
364
|
)
|
|
358
365
|
skipped = pre_filter_count - dataframe.height
|
|
359
366
|
if skipped > 0:
|
|
@@ -385,6 +392,8 @@ class DataWriter:
|
|
|
385
392
|
"skipped_stale": skipped,
|
|
386
393
|
"lineage": _safe_json(lineage or {}),
|
|
387
394
|
"duration": round(time.time() - t0, 6),
|
|
395
|
+
"timings": profiler.emit_timings(),
|
|
396
|
+
"counts": profiler.emit_counts(),
|
|
388
397
|
}
|
|
389
398
|
# Don't return here — fall through to finally (lock release)
|
|
390
399
|
# and the post-finally monitoring block. Returning inside the
|
|
@@ -431,6 +440,7 @@ class DataWriter:
|
|
|
431
440
|
data_dir=simple_table.data_dir,
|
|
432
441
|
compression_level=compression_level,
|
|
433
442
|
table_config=table_config,
|
|
443
|
+
profiler=profiler,
|
|
434
444
|
)
|
|
435
445
|
new_resources = compact_resources
|
|
436
446
|
sunset_files = compact_sunset
|
|
@@ -474,6 +484,7 @@ class DataWriter:
|
|
|
474
484
|
simple_table.data_dir,
|
|
475
485
|
compression_level,
|
|
476
486
|
file_cache=file_cache,
|
|
487
|
+
profiler=profiler,
|
|
477
488
|
)
|
|
478
489
|
else:
|
|
479
490
|
inserted, deleted, total_rows, total_columns, new_resources, sunset_files = process_overlapping_files(
|
|
@@ -484,6 +495,7 @@ class DataWriter:
|
|
|
484
495
|
compression_level,
|
|
485
496
|
file_cache=file_cache,
|
|
486
497
|
table_config=table_config,
|
|
498
|
+
profiler=profiler,
|
|
487
499
|
)
|
|
488
500
|
mark("process")
|
|
489
501
|
|
|
@@ -514,6 +526,7 @@ class DataWriter:
|
|
|
514
526
|
last_snapshot=last_simple_table,
|
|
515
527
|
last_snapshot_path=last_simple_table_path,
|
|
516
528
|
lineage=eff_lineage,
|
|
529
|
+
profiler=profiler,
|
|
517
530
|
)
|
|
518
531
|
mark("update_simple")
|
|
519
532
|
|
|
@@ -534,26 +547,28 @@ class DataWriter:
|
|
|
534
547
|
],
|
|
535
548
|
}
|
|
536
549
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
self.
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
self.
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
550
|
+
with profiler.span("redis.set_leaf"):
|
|
551
|
+
try:
|
|
552
|
+
self.catalog.set_leaf_payload_cas(
|
|
553
|
+
self.super_table.organization,
|
|
554
|
+
self.super_table.super_name,
|
|
555
|
+
simple_name,
|
|
556
|
+
payload,
|
|
557
|
+
new_snapshot_path,
|
|
558
|
+
now_ms=now_ms,
|
|
559
|
+
)
|
|
560
|
+
except Exception:
|
|
561
|
+
# Backward compatible fallback.
|
|
562
|
+
self.catalog.set_leaf_path_cas(
|
|
563
|
+
self.super_table.organization,
|
|
564
|
+
self.super_table.super_name,
|
|
565
|
+
simple_name,
|
|
566
|
+
new_snapshot_path,
|
|
567
|
+
now_ms=now_ms,
|
|
568
|
+
)
|
|
555
569
|
|
|
556
|
-
|
|
570
|
+
with profiler.span("redis.bump_root"):
|
|
571
|
+
self.catalog.bump_root(self.super_table.organization, self.super_table.super_name, now_ms=now_ms)
|
|
557
572
|
mark("bump_root")
|
|
558
573
|
|
|
559
574
|
# --- Enqueue deferred deletions (post-CAS, post-bump) ----------
|
|
@@ -649,6 +664,8 @@ class DataWriter:
|
|
|
649
664
|
"skipped_stale": 0,
|
|
650
665
|
"lineage": _safe_json(lineage or {}),
|
|
651
666
|
"duration": round(time.time() - t0, 6),
|
|
667
|
+
"timings": profiler.emit_timings(),
|
|
668
|
+
"counts": profiler.emit_counts(),
|
|
652
669
|
}
|
|
653
670
|
mark("prepare_monitor")
|
|
654
671
|
|