deltacat 1.1.4__tar.gz → 1.1.6__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.
- {deltacat-1.1.4 → deltacat-1.1.6}/PKG-INFO +1 -1
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/__init__.py +1 -1
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/aws/constants.py +3 -1
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/aws/s3u.py +71 -24
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/compaction_session.py +24 -5
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/utils/task_options.py +8 -1
- deltacat-1.1.6/deltacat/tests/aws/test_s3u.py +124 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compact_partition_rebase_then_incremental_test_cases.py +30 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compact_partition_test_cases.py +62 -1
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/test_compact_partition_incremental.py +34 -9
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py +6 -1
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/test_util_common.py +4 -4
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/test_util_create_table_deltas_repo.py +18 -7
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/daft.py +2 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat.egg-info/PKG-INFO +1 -1
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat.egg-info/requires.txt +1 -1
- {deltacat-1.1.4 → deltacat-1.1.6}/setup.py +1 -1
- deltacat-1.1.4/deltacat/tests/aws/test_s3u.py +0 -12
- {deltacat-1.1.4 → deltacat-1.1.6}/MANIFEST.in +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/README.md +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/aws/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/aws/clients.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/aws/redshift/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/aws/redshift/model/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/aws/redshift/model/manifest.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/benchmarking/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/benchmarking/benchmark_parquet_reads.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/benchmarking/conftest.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/catalog/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/catalog/default_catalog_impl/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/catalog/delegate.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/catalog/interface.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/catalog/model/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/catalog/model/catalog.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/catalog/model/table_definition.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/compaction_session.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/compact_partition_params.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/compaction_session_audit_info.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/compactor_version.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/dedupe_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/delta_annotated.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/delta_file_envelope.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/delta_file_locator.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/hash_bucket_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/materialize_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/primary_key_index.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/pyarrow_write_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/repartition_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/round_completion_info.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/model/table_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/repartition_session.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/steps/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/steps/dedupe.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/steps/hash_bucket.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/steps/materialize.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/steps/repartition.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/utils/io.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/utils/primary_key_index.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/utils/round_completion_file.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/utils/sort_key.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor/utils/system_columns.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/constants.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/deletes/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/deletes/delete_file_envelope.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/deletes/delete_strategy.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/deletes/delete_strategy_equality_delete.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/deletes/model.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/deletes/utils.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/model/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/model/hash_bucket_input.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/model/hash_bucket_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/model/merge_file_group.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/model/merge_input.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/model/merge_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/steps/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/steps/hash_bucket.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/steps/merge.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/utils/content_type_params.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/utils/dedupe.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/utils/delta.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/utils/io.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/utils/merge.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/compactor_v2/utils/primary_key_index.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/merge_on_read/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/merge_on_read/daft.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/merge_on_read/model/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/merge_on_read/model/merge_on_read_params.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/merge_on_read/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/merge_on_read/utils/delta.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/config/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/meta_stats.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/model/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/model/partition_stats_dict.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/model/stats_cluster_size_estimator.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/stats.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/utils/constants.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/utils/io.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/utils/pyarrow_memory_estimation_function.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/metastats/utils/ray_utils.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/basic.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/models/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/models/delta_column_stats.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/models/delta_stats.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/models/delta_stats_cache_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/models/manifest_entry_stats.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/models/stats_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/types.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/utils/intervals.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/utils/io.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/compute/stats/utils/manifest_stats_file.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/constants.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/exceptions.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/aws/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/aws/redshift/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/aws/redshift/redshift_datasource.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/dataset.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/file_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/memcached_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/ray_plasma_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/read_api.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/redis_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/io/s3_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/logs.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/interface.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/delete_parameters.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/delta.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/list_result.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/locator.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/namespace.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/partition.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/sort_key.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/stream.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/table.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/table_version.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/storage/model/types.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/aws/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/aws/test_clients.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/catalog/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/catalog/test_default_catalog_impl.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor/steps/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor/steps/test_repartition.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor/utils/test_io.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor_v2/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor_v2/test_compaction_session.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor_v2/test_hashlib.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor_v2/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/compactor_v2/utils/test_task_options.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/test_compact_partition_params.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/compute/test_util_constant.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/io/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/io/test_cloudpickle_bug_fix.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/io/test_file_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/io/test_memcached_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/io/test_ray_plasma_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/io/test_redis_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/io/test_s3_object_store.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/local_deltacat_storage/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/stats/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/stats/test_intervals.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/test_logs.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/test_utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/test_utils/constants.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/test_utils/pyarrow.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/test_utils/storage.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/test_utils/utils.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/data/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/test_cloudpickle.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/test_daft.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/test_metrics.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/test_placement.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/test_pyarrow.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/test_record_batch_tables.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/tests/utils/test_resources.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/types/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/types/media.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/types/partial_download.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/types/tables.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/arguments.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/cloudpickle.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/common.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/metrics.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/numpy.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/pandas.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/performance.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/placement.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/pyarrow.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/ray_utils/__init__.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/ray_utils/collections.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/ray_utils/concurrency.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/ray_utils/dataset.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/ray_utils/performance.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/ray_utils/runtime.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/resources.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/s3fs.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat/utils/schema.py +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat.egg-info/SOURCES.txt +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat.egg-info/dependency_links.txt +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/deltacat.egg-info/top_level.txt +0 -0
- {deltacat-1.1.4 → deltacat-1.1.6}/setup.cfg +0 -0
@@ -1,8 +1,10 @@
|
|
1
|
-
from typing import List
|
1
|
+
from typing import List, Set
|
2
2
|
|
3
3
|
from deltacat.utils.common import env_integer, env_string
|
4
4
|
|
5
5
|
DAFT_MAX_S3_CONNECTIONS_PER_FILE = env_integer("DAFT_MAX_S3_CONNECTIONS_PER_FILE", 8)
|
6
6
|
BOTO_MAX_RETRIES = env_integer("BOTO_MAX_RETRIES", 5)
|
7
7
|
TIMEOUT_ERROR_CODES: List[str] = ["ReadTimeoutError", "ConnectTimeoutError"]
|
8
|
+
RETRYABLE_PUT_OBJECT_ERROR_CODES: Set[str] = {"Throttling", "SlowDown"}
|
8
9
|
AWS_REGION = env_string("AWS_REGION", "us-east-1")
|
10
|
+
RETRY_STOP_AFTER_DELAY = env_integer("RETRY_STOP_AFTER_DELAY", 10 * 60)
|
@@ -4,14 +4,18 @@ from functools import partial
|
|
4
4
|
from typing import Any, Callable, Dict, Generator, List, Optional, Union
|
5
5
|
from uuid import uuid4
|
6
6
|
from botocore.config import Config
|
7
|
-
from deltacat.aws.constants import
|
7
|
+
from deltacat.aws.constants import (
|
8
|
+
BOTO_MAX_RETRIES,
|
9
|
+
RETRY_STOP_AFTER_DELAY,
|
10
|
+
RETRYABLE_PUT_OBJECT_ERROR_CODES,
|
11
|
+
)
|
8
12
|
|
9
13
|
import pyarrow as pa
|
10
14
|
import ray
|
11
15
|
import s3fs
|
12
16
|
from boto3.resources.base import ServiceResource
|
13
17
|
from botocore.client import BaseClient
|
14
|
-
from botocore.exceptions import ClientError
|
18
|
+
from botocore.exceptions import ClientError, NoCredentialsError
|
15
19
|
from ray.data.block import Block, BlockAccessor, BlockMetadata
|
16
20
|
from ray.data.datasource import BlockWritePathProvider
|
17
21
|
from ray.types import ObjectRef
|
@@ -315,7 +319,6 @@ def upload_sliced_table(
|
|
315
319
|
**s3_client_kwargs,
|
316
320
|
)
|
317
321
|
manifest_entries.extend(slice_entries)
|
318
|
-
|
319
322
|
return manifest_entries
|
320
323
|
|
321
324
|
|
@@ -504,41 +507,85 @@ def download_manifest_entries_distributed(
|
|
504
507
|
|
505
508
|
def upload(s3_url: str, body, **s3_client_kwargs) -> Dict[str, Any]:
|
506
509
|
|
507
|
-
# TODO (pdames): add tenacity retrying
|
508
510
|
parsed_s3_url = parse_s3_url(s3_url)
|
509
511
|
s3 = s3_client_cache(None, **s3_client_kwargs)
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
512
|
+
retrying = Retrying(
|
513
|
+
wait=wait_random_exponential(multiplier=1, max=15),
|
514
|
+
stop=stop_after_delay(RETRY_STOP_AFTER_DELAY),
|
515
|
+
retry=retry_if_exception_type(RetryableError),
|
516
|
+
)
|
517
|
+
return retrying(
|
518
|
+
_put_object,
|
519
|
+
s3,
|
520
|
+
body,
|
521
|
+
parsed_s3_url.bucket,
|
522
|
+
parsed_s3_url.key,
|
514
523
|
)
|
515
524
|
|
516
525
|
|
526
|
+
def _put_object(
|
527
|
+
s3_client, body: Any, bucket: str, key: str, **s3_put_object_kwargs
|
528
|
+
) -> Dict[str, Any]:
|
529
|
+
try:
|
530
|
+
return s3_client.put_object(
|
531
|
+
Body=body, Bucket=bucket, Key=key, **s3_put_object_kwargs
|
532
|
+
)
|
533
|
+
except ClientError as e:
|
534
|
+
if e.response["Error"]["Code"] in RETRYABLE_PUT_OBJECT_ERROR_CODES:
|
535
|
+
raise RetryableError(
|
536
|
+
f"Retry upload for: {bucket}/{key} after receiving {e.response['Error']['Code']}"
|
537
|
+
) from e
|
538
|
+
raise NonRetryableError(f"Failed table upload to: {bucket}/{key}") from e
|
539
|
+
except NoCredentialsError as e:
|
540
|
+
raise RetryableError(
|
541
|
+
f"Failed to fetch credentials when putting object into: {bucket}/{key}"
|
542
|
+
) from e
|
543
|
+
except BaseException as e:
|
544
|
+
logger.error(
|
545
|
+
f"Upload has failed for {bucket}/{key}. Error: {e}",
|
546
|
+
exc_info=True,
|
547
|
+
)
|
548
|
+
raise NonRetryableError(f"Failed table upload to: {bucket}/{key}") from e
|
549
|
+
|
550
|
+
|
517
551
|
def download(
|
518
552
|
s3_url: str, fail_if_not_found: bool = True, **s3_client_kwargs
|
519
553
|
) -> Optional[Dict[str, Any]]:
|
520
554
|
|
521
|
-
# TODO (pdames): add tenacity retrying
|
522
555
|
parsed_s3_url = parse_s3_url(s3_url)
|
523
556
|
s3 = s3_client_cache(None, **s3_client_kwargs)
|
557
|
+
retrying = Retrying(
|
558
|
+
wait=wait_random_exponential(multiplier=1, max=15),
|
559
|
+
stop=stop_after_delay(RETRY_STOP_AFTER_DELAY),
|
560
|
+
retry=retry_if_exception_type(RetryableError),
|
561
|
+
)
|
562
|
+
return retrying(
|
563
|
+
_get_object,
|
564
|
+
s3,
|
565
|
+
parsed_s3_url.bucket,
|
566
|
+
parsed_s3_url.key,
|
567
|
+
fail_if_not_found=fail_if_not_found,
|
568
|
+
)
|
569
|
+
|
570
|
+
|
571
|
+
def _get_object(s3_client, bucket: str, key: str, fail_if_not_found: bool = True):
|
524
572
|
try:
|
525
|
-
return
|
526
|
-
Bucket=
|
527
|
-
Key=
|
573
|
+
return s3_client.get_object(
|
574
|
+
Bucket=bucket,
|
575
|
+
Key=key,
|
528
576
|
)
|
529
577
|
except ClientError as e:
|
530
|
-
if
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
logger.info(f"file not found: {s3_url}")
|
578
|
+
if e.response["Error"]["Code"] == "NoSuchKey":
|
579
|
+
if fail_if_not_found:
|
580
|
+
raise NonRetryableError(
|
581
|
+
f"Failed get object from: {bucket}/{key}"
|
582
|
+
) from e
|
583
|
+
logger.info(f"file not found: {bucket}/{key}")
|
584
|
+
except NoCredentialsError as e:
|
585
|
+
raise RetryableError(
|
586
|
+
f"Failed to fetch credentials when getting object from: {bucket}/{key}"
|
587
|
+
) from e
|
588
|
+
|
542
589
|
return None
|
543
590
|
|
544
591
|
|
@@ -17,7 +17,11 @@ from deltacat.compute.compactor_v2.model.merge_input import MergeInput
|
|
17
17
|
from deltacat.aws import s3u as s3_utils
|
18
18
|
import deltacat
|
19
19
|
from deltacat import logs
|
20
|
-
from deltacat.compute.compactor import
|
20
|
+
from deltacat.compute.compactor import (
|
21
|
+
HighWatermark,
|
22
|
+
PyArrowWriteResult,
|
23
|
+
RoundCompletionInfo,
|
24
|
+
)
|
21
25
|
from deltacat.compute.compactor_v2.model.merge_result import MergeResult
|
22
26
|
from deltacat.compute.compactor_v2.model.hash_bucket_result import HashBucketResult
|
23
27
|
from deltacat.compute.compactor.model.materialize_result import MaterializeResult
|
@@ -37,6 +41,7 @@ from deltacat.compute.compactor_v2.deletes.utils import prepare_deletes
|
|
37
41
|
from deltacat.storage import (
|
38
42
|
Delta,
|
39
43
|
DeltaLocator,
|
44
|
+
Manifest,
|
40
45
|
Partition,
|
41
46
|
)
|
42
47
|
from deltacat.compute.compactor.model.compact_partition_params import (
|
@@ -96,7 +101,7 @@ def compact_partition(params: CompactPartitionParams, **kwargs) -> Optional[str]
|
|
96
101
|
round_completion_file_s3_url = None
|
97
102
|
if new_partition:
|
98
103
|
logger.info(f"Committing compacted partition to: {new_partition.locator}")
|
99
|
-
partition = params.deltacat_storage.commit_partition(
|
104
|
+
partition: Partition = params.deltacat_storage.commit_partition(
|
100
105
|
new_partition, **params.deltacat_storage_kwargs
|
101
106
|
)
|
102
107
|
logger.info(f"Committed compacted partition: {partition}")
|
@@ -150,9 +155,9 @@ def _execute_compaction(
|
|
150
155
|
compaction_audit.set_total_cluster_memory_bytes(cluster_memory)
|
151
156
|
|
152
157
|
# read the results from any previously completed compaction round
|
153
|
-
round_completion_info = None
|
154
|
-
high_watermark = None
|
155
|
-
previous_compacted_delta_manifest = None
|
158
|
+
round_completion_info: Optional[RoundCompletionInfo] = None
|
159
|
+
high_watermark: Optional[HighWatermark] = None
|
160
|
+
previous_compacted_delta_manifest: Optional[Manifest] = None
|
156
161
|
|
157
162
|
if not params.rebase_source_partition_locator:
|
158
163
|
round_completion_info = rcf.read_round_completion_file(
|
@@ -271,6 +276,7 @@ def _execute_compaction(
|
|
271
276
|
total_hb_record_count = np.int64(0)
|
272
277
|
telemetry_time_hb = 0
|
273
278
|
if params.hash_bucket_count == 1:
|
279
|
+
logger.info("Hash bucket count set to 1. Running local merge")
|
274
280
|
merge_start = time.monotonic()
|
275
281
|
local_merge_input = generate_local_merge_input(
|
276
282
|
params,
|
@@ -634,6 +640,19 @@ def _execute_compaction(
|
|
634
640
|
f"partition-{params.source_partition_locator.partition_values},"
|
635
641
|
f"compacted at: {params.last_stream_position_to_compact},"
|
636
642
|
)
|
643
|
+
is_inplace_compacted: bool = (
|
644
|
+
params.source_partition_locator.partition_values
|
645
|
+
== params.destination_partition_locator.partition_values
|
646
|
+
and params.source_partition_locator.stream_id
|
647
|
+
== params.destination_partition_locator.stream_id
|
648
|
+
)
|
649
|
+
if is_inplace_compacted:
|
650
|
+
logger.info(
|
651
|
+
"Overriding round completion file source partition locator as in-place compacted. "
|
652
|
+
+ f"Got compacted partition partition_id of {compacted_partition.locator.partition_id} "
|
653
|
+
f"and rcf source partition_id of {rcf_source_partition_locator.partition_id}."
|
654
|
+
)
|
655
|
+
rcf_source_partition_locator = compacted_partition.locator
|
637
656
|
return (
|
638
657
|
compacted_partition,
|
639
658
|
new_round_completion_info,
|
@@ -20,6 +20,8 @@ from deltacat.compute.compactor_v2.utils.primary_key_index import (
|
|
20
20
|
from deltacat.compute.compactor_v2.constants import (
|
21
21
|
PARQUET_TO_PYARROW_INFLATION,
|
22
22
|
)
|
23
|
+
from daft.exceptions import DaftTransientError
|
24
|
+
|
23
25
|
|
24
26
|
logger = logs.configure_deltacat_logger(logging.getLogger(__name__))
|
25
27
|
|
@@ -62,7 +64,11 @@ def get_task_options(
|
|
62
64
|
cpu: float, memory: float, ray_custom_resources: Optional[Dict] = None
|
63
65
|
) -> Dict:
|
64
66
|
|
65
|
-
|
67
|
+
# NOTE: With DEFAULT scheduling strategy in Ray 2.20.0, autoscaler does
|
68
|
+
# not spin up enough nodes fast and hence we see only approximately
|
69
|
+
# 20 tasks get scheduled out of 100 tasks in queue.
|
70
|
+
# https://docs.ray.io/en/latest/ray-core/scheduling/index.html
|
71
|
+
task_opts = {"num_cpus": cpu, "memory": memory, "scheduling_strategy": "SPREAD"}
|
66
72
|
|
67
73
|
if ray_custom_resources:
|
68
74
|
task_opts["resources"] = ray_custom_resources
|
@@ -76,6 +82,7 @@ def get_task_options(
|
|
76
82
|
botocore.exceptions.HTTPClientError,
|
77
83
|
ConnectionError,
|
78
84
|
TimeoutError,
|
85
|
+
DaftTransientError,
|
79
86
|
]
|
80
87
|
|
81
88
|
return task_opts
|
@@ -0,0 +1,124 @@
|
|
1
|
+
import unittest
|
2
|
+
from deltacat.aws.s3u import UuidBlockWritePathProvider, CapturedBlockWritePaths
|
3
|
+
|
4
|
+
|
5
|
+
import os
|
6
|
+
from unittest import mock
|
7
|
+
from unittest.mock import patch
|
8
|
+
|
9
|
+
import boto3
|
10
|
+
import pytest
|
11
|
+
from boto3.resources.base import ServiceResource
|
12
|
+
from botocore.exceptions import ClientError, NoCredentialsError
|
13
|
+
from deltacat.exceptions import NonRetryableError
|
14
|
+
from moto import mock_s3
|
15
|
+
from tenacity import RetryError
|
16
|
+
|
17
|
+
from deltacat.aws import s3u
|
18
|
+
|
19
|
+
|
20
|
+
class TestUuidBlockWritePathProvider(unittest.TestCase):
|
21
|
+
def test_uuid_block_write_provider_sanity(self):
|
22
|
+
capture_object = CapturedBlockWritePaths()
|
23
|
+
provider = UuidBlockWritePathProvider(capture_object=capture_object)
|
24
|
+
|
25
|
+
result = provider("base_path")
|
26
|
+
|
27
|
+
self.assertRegex(result, r"^base_path/[\w-]{36}$")
|
28
|
+
|
29
|
+
|
30
|
+
class TestDownloadUpload(unittest.TestCase):
|
31
|
+
TEST_S3_BUCKET_NAME = "TEST_S3_BUCKET"
|
32
|
+
TEST_S3_KEY = "TEST_S3_KEY"
|
33
|
+
|
34
|
+
@pytest.fixture(autouse=True)
|
35
|
+
def mock_aws_credential(self):
|
36
|
+
os.environ["AWS_ACCESS_KEY_ID"] = "testing"
|
37
|
+
os.environ["AWS_SECRET_ACCESS_ID"] = "testing"
|
38
|
+
os.environ["AWS_SECURITY_TOKEN"] = "testing"
|
39
|
+
os.environ["AWS_SESSION_TOKEN"] = "testing"
|
40
|
+
os.environ["AWS_DEFAULT_REGION"] = "us-east-1"
|
41
|
+
yield
|
42
|
+
|
43
|
+
@pytest.fixture(autouse=True)
|
44
|
+
def setup_s3_resource(self):
|
45
|
+
with mock_s3():
|
46
|
+
yield boto3.resource("s3")
|
47
|
+
|
48
|
+
@pytest.fixture(autouse=True)
|
49
|
+
def setup_test_s3_bucket(self, setup_s3_resource: ServiceResource):
|
50
|
+
setup_s3_resource.create_bucket(
|
51
|
+
ACL="authenticated-read",
|
52
|
+
Bucket=self.TEST_S3_BUCKET_NAME,
|
53
|
+
)
|
54
|
+
yield
|
55
|
+
|
56
|
+
def test_sanity(self):
|
57
|
+
uri = f"s3://{self.TEST_S3_BUCKET_NAME}/{self.TEST_S3_KEY}"
|
58
|
+
body = "test-body"
|
59
|
+
uploaded_file = s3u.upload(uri, body)
|
60
|
+
assert uploaded_file is not None
|
61
|
+
assert uploaded_file["ResponseMetadata"]["HTTPStatusCode"] == 200
|
62
|
+
downloaded_file = s3u.download(uri)
|
63
|
+
downloaded_body = downloaded_file["Body"].read().decode("utf-8")
|
64
|
+
assert downloaded_file["ResponseMetadata"]["HTTPStatusCode"] == 200
|
65
|
+
assert downloaded_body == body
|
66
|
+
|
67
|
+
@patch("deltacat.aws.s3u.RETRY_STOP_AFTER_DELAY", 1)
|
68
|
+
@patch("deltacat.aws.s3u.s3_client_cache")
|
69
|
+
def test_upload_throttled(self, mock_s3_client_cache):
|
70
|
+
uri = f"s3://{self.TEST_S3_BUCKET_NAME}/{self.TEST_S3_KEY}"
|
71
|
+
body = "test-body"
|
72
|
+
throttling_err = ClientError({"Error": {"Code": "Throttling"}}, "put_object")
|
73
|
+
mock_s3_client_cache.return_value = mock_s3 = mock.MagicMock()
|
74
|
+
mock_s3.put_object.side_effect = throttling_err
|
75
|
+
with pytest.raises(RetryError):
|
76
|
+
s3u.upload(uri, body)
|
77
|
+
|
78
|
+
slowdown_err = ClientError({"Error": {"Code": "SlowDown"}}, "put_object")
|
79
|
+
mock_s3.put_object.side_effect = slowdown_err
|
80
|
+
with pytest.raises(RetryError):
|
81
|
+
s3u.upload(uri, body)
|
82
|
+
|
83
|
+
no_credentials_err = NoCredentialsError()
|
84
|
+
mock_s3.put_object.side_effect = no_credentials_err
|
85
|
+
with pytest.raises(RetryError):
|
86
|
+
s3u.upload(uri, body)
|
87
|
+
|
88
|
+
assert mock_s3.put_object.call_count > 3
|
89
|
+
|
90
|
+
@patch("deltacat.aws.s3u.s3_client_cache")
|
91
|
+
def test_upload_unexpected_error_code(self, mock_s3_client_cache):
|
92
|
+
uri = f"s3://{self.TEST_S3_BUCKET_NAME}/{self.TEST_S3_KEY}"
|
93
|
+
body = "test-body"
|
94
|
+
err = ClientError({"Error": {"Code": "UnexpectedError"}}, "put_object")
|
95
|
+
mock_s3_client_cache.return_value = mock_s3 = mock.MagicMock()
|
96
|
+
mock_s3.put_object.side_effect = err
|
97
|
+
file = None
|
98
|
+
with pytest.raises(NonRetryableError):
|
99
|
+
s3u.upload(uri, body)
|
100
|
+
assert file is None
|
101
|
+
assert mock_s3.put_object.call_count == 1
|
102
|
+
|
103
|
+
@patch("deltacat.aws.s3u.RETRY_STOP_AFTER_DELAY", 1)
|
104
|
+
@patch("deltacat.aws.s3u.s3_client_cache")
|
105
|
+
def test_download_throttled(self, mock_s3_client_cache):
|
106
|
+
uri = f"s3://{self.TEST_S3_BUCKET_NAME}/{self.TEST_S3_KEY}"
|
107
|
+
no_credentials_err = NoCredentialsError()
|
108
|
+
mock_s3_client_cache.return_value = mock_s3 = mock.MagicMock()
|
109
|
+
mock_s3.get_object.side_effect = no_credentials_err
|
110
|
+
file = None
|
111
|
+
with pytest.raises(RetryError):
|
112
|
+
file = s3u.download(uri)
|
113
|
+
assert file is None
|
114
|
+
assert mock_s3.get_object.call_count > 1
|
115
|
+
|
116
|
+
def test_download_not_exists(self):
|
117
|
+
uri = f"s3://{self.TEST_S3_BUCKET_NAME}/key-not-exists"
|
118
|
+
file = None
|
119
|
+
with pytest.raises(NonRetryableError):
|
120
|
+
file = s3u.download(uri)
|
121
|
+
assert file is None
|
122
|
+
|
123
|
+
file = s3u.download(uri, fail_if_not_found=False)
|
124
|
+
assert file is None
|
@@ -107,6 +107,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
107
107
|
names=["pk_col_1", "sk_col_1", "sk_col_2", "col_1"],
|
108
108
|
),
|
109
109
|
expected_terminal_exception=None,
|
110
|
+
expected_terminal_exception_message=None,
|
110
111
|
do_create_placement_group=False,
|
111
112
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
112
113
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -186,6 +187,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
186
187
|
names=["pk_col_1", "pk_col_2", "sk_col_1", "col_1"],
|
187
188
|
),
|
188
189
|
expected_terminal_exception=None,
|
190
|
+
expected_terminal_exception_message=None,
|
189
191
|
do_create_placement_group=False,
|
190
192
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
191
193
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -234,6 +236,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
234
236
|
names=["pk_col_1", "col_1"],
|
235
237
|
),
|
236
238
|
expected_terminal_exception=None,
|
239
|
+
expected_terminal_exception_message=None,
|
237
240
|
do_create_placement_group=False,
|
238
241
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
239
242
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -282,6 +285,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
282
285
|
names=["pk_col_1", "col_1"],
|
283
286
|
),
|
284
287
|
expected_terminal_exception=None,
|
288
|
+
expected_terminal_exception_message=None,
|
285
289
|
do_create_placement_group=False,
|
286
290
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
287
291
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -336,6 +340,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
336
340
|
names=["pk_col_1", "sk_col_1", "col_1"],
|
337
341
|
),
|
338
342
|
expected_terminal_exception=None,
|
343
|
+
expected_terminal_exception_message=None,
|
339
344
|
do_create_placement_group=False,
|
340
345
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
341
346
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -395,6 +400,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
395
400
|
names=["pk_col_1", "sk_col_1", "sk_col_2", "col_1"],
|
396
401
|
),
|
397
402
|
expected_terminal_exception=None,
|
403
|
+
expected_terminal_exception_message=None,
|
398
404
|
do_create_placement_group=False,
|
399
405
|
records_per_compacted_file=10,
|
400
406
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT + 10,
|
@@ -445,6 +451,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
445
451
|
names=["sk_col_1", "col_1"],
|
446
452
|
),
|
447
453
|
expected_terminal_exception=None,
|
454
|
+
expected_terminal_exception_message=None,
|
448
455
|
do_create_placement_group=False,
|
449
456
|
records_per_compacted_file=10,
|
450
457
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -500,6 +507,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
500
507
|
names=["pk_col_1", "col_1"],
|
501
508
|
),
|
502
509
|
expected_terminal_exception=None,
|
510
|
+
expected_terminal_exception_message=None,
|
503
511
|
do_create_placement_group=False,
|
504
512
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
505
513
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -559,6 +567,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
559
567
|
names=["pk_col_1", "sk_col_1", "sk_col_2", "col_1"],
|
560
568
|
),
|
561
569
|
expected_terminal_exception=None,
|
570
|
+
expected_terminal_exception_message=None,
|
562
571
|
do_create_placement_group=False,
|
563
572
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
564
573
|
hash_bucket_count=1,
|
@@ -613,6 +622,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
613
622
|
names=["pk_col_1", "sk_col_1", "col_1"],
|
614
623
|
),
|
615
624
|
expected_terminal_exception=None,
|
625
|
+
expected_terminal_exception_message=None,
|
616
626
|
do_create_placement_group=False,
|
617
627
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
618
628
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -658,6 +668,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
658
668
|
names=["pk_col_1", "sk_col_1", "sk_col_2", "col_1"],
|
659
669
|
),
|
660
670
|
expected_terminal_exception=None,
|
671
|
+
expected_terminal_exception_message=None,
|
661
672
|
do_create_placement_group=False,
|
662
673
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
663
674
|
hash_bucket_count=3,
|
@@ -717,6 +728,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
717
728
|
names=["pk_col_1", "sk_col_1", "sk_col_2", "col_1"],
|
718
729
|
),
|
719
730
|
expected_terminal_exception=None,
|
731
|
+
expected_terminal_exception_message=None,
|
720
732
|
do_create_placement_group=False,
|
721
733
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
722
734
|
hash_bucket_count=1,
|
@@ -762,6 +774,7 @@ REBASE_THEN_INCREMENTAL_TEST_CASES = {
|
|
762
774
|
names=["pk_col_1", "sk_col_1", "sk_col_2", "col_1"],
|
763
775
|
),
|
764
776
|
expected_terminal_exception=None,
|
777
|
+
expected_terminal_exception_message=None,
|
765
778
|
do_create_placement_group=False,
|
766
779
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
767
780
|
hash_bucket_count=1,
|
@@ -861,6 +874,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
861
874
|
names=["pk_col_1", "col_1"],
|
862
875
|
),
|
863
876
|
expected_terminal_exception=None,
|
877
|
+
expected_terminal_exception_message=None,
|
864
878
|
do_create_placement_group=False,
|
865
879
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
866
880
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -911,6 +925,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
911
925
|
names=["pk_col_1", "pk_col_2", "col_1"],
|
912
926
|
),
|
913
927
|
expected_terminal_exception=None,
|
928
|
+
expected_terminal_exception_message=None,
|
914
929
|
do_create_placement_group=False,
|
915
930
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
916
931
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -967,6 +982,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
967
982
|
),
|
968
983
|
),
|
969
984
|
expected_terminal_exception=None,
|
985
|
+
expected_terminal_exception_message=None,
|
970
986
|
do_create_placement_group=False,
|
971
987
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
972
988
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1019,6 +1035,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1019
1035
|
),
|
1020
1036
|
),
|
1021
1037
|
expected_terminal_exception=None,
|
1038
|
+
expected_terminal_exception_message=None,
|
1022
1039
|
do_create_placement_group=True,
|
1023
1040
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1024
1041
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1099,6 +1116,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1099
1116
|
names=["pk_col_1", "col_1"],
|
1100
1117
|
),
|
1101
1118
|
expected_terminal_exception=None,
|
1119
|
+
expected_terminal_exception_message=None,
|
1102
1120
|
do_create_placement_group=True,
|
1103
1121
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1104
1122
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1168,6 +1186,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1168
1186
|
names=["pk_col_1", "col_1"],
|
1169
1187
|
),
|
1170
1188
|
expected_terminal_exception=None,
|
1189
|
+
expected_terminal_exception_message=None,
|
1171
1190
|
do_create_placement_group=True,
|
1172
1191
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1173
1192
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1231,6 +1250,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1231
1250
|
),
|
1232
1251
|
),
|
1233
1252
|
expected_terminal_exception=None,
|
1253
|
+
expected_terminal_exception_message=None,
|
1234
1254
|
do_create_placement_group=True,
|
1235
1255
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1236
1256
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1321,6 +1341,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1321
1341
|
names=["pk_col_1", "col_1"],
|
1322
1342
|
),
|
1323
1343
|
expected_terminal_exception=None,
|
1344
|
+
expected_terminal_exception_message=None,
|
1324
1345
|
do_create_placement_group=True,
|
1325
1346
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1326
1347
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1384,6 +1405,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1384
1405
|
),
|
1385
1406
|
),
|
1386
1407
|
expected_terminal_exception=None,
|
1408
|
+
expected_terminal_exception_message=None,
|
1387
1409
|
do_create_placement_group=True,
|
1388
1410
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1389
1411
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1453,6 +1475,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1453
1475
|
names=["pk_col_1", "col_1"],
|
1454
1476
|
),
|
1455
1477
|
expected_terminal_exception=None,
|
1478
|
+
expected_terminal_exception_message=None,
|
1456
1479
|
do_create_placement_group=True,
|
1457
1480
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1458
1481
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1516,6 +1539,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1516
1539
|
),
|
1517
1540
|
),
|
1518
1541
|
expected_terminal_exception=AssertionError,
|
1542
|
+
expected_terminal_exception_message="Delete type deltas are required to have delete parameters defined",
|
1519
1543
|
do_create_placement_group=True,
|
1520
1544
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1521
1545
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1580,6 +1604,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1580
1604
|
names=["pk_col_1", "col_1"],
|
1581
1605
|
),
|
1582
1606
|
expected_terminal_exception=None,
|
1607
|
+
expected_terminal_exception_message=None,
|
1583
1608
|
do_create_placement_group=True,
|
1584
1609
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1585
1610
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1638,6 +1663,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1638
1663
|
names=["pk_col_1", "col_1"],
|
1639
1664
|
),
|
1640
1665
|
expected_terminal_exception=None,
|
1666
|
+
expected_terminal_exception_message=None,
|
1641
1667
|
do_create_placement_group=True,
|
1642
1668
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1643
1669
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1706,6 +1732,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1706
1732
|
names=["pk_col_1", "col_1"],
|
1707
1733
|
),
|
1708
1734
|
expected_terminal_exception=None,
|
1735
|
+
expected_terminal_exception_message=None,
|
1709
1736
|
do_create_placement_group=True,
|
1710
1737
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1711
1738
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1795,6 +1822,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1795
1822
|
names=["pk_col_1", "sk_col_1", "sk_col_2", "col_1"],
|
1796
1823
|
),
|
1797
1824
|
expected_terminal_exception=None,
|
1825
|
+
expected_terminal_exception_message=None,
|
1798
1826
|
do_create_placement_group=False,
|
1799
1827
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1800
1828
|
hash_bucket_count=1,
|
@@ -1865,6 +1893,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1865
1893
|
names=["sk_col_1", "col_1"],
|
1866
1894
|
),
|
1867
1895
|
expected_terminal_exception=None,
|
1896
|
+
expected_terminal_exception_message=None,
|
1868
1897
|
do_create_placement_group=False,
|
1869
1898
|
records_per_compacted_file=10,
|
1870
1899
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|
@@ -1913,6 +1942,7 @@ REBASE_THEN_INCREMENTAL_DELETE_DELTA_TYPE_TEST_CASES = {
|
|
1913
1942
|
names=["pk_col_1", "col_1"],
|
1914
1943
|
),
|
1915
1944
|
expected_terminal_exception=None,
|
1945
|
+
expected_terminal_exception_message=None,
|
1916
1946
|
do_create_placement_group=False,
|
1917
1947
|
records_per_compacted_file=DEFAULT_MAX_RECORDS_PER_FILE,
|
1918
1948
|
hash_bucket_count=DEFAULT_HASH_BUCKET_COUNT,
|