Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
13f4abe
Merge branch 'master' into iceberg-puffin-deletion-vectors-read-2
ianton-ru Aug 5, 2026
9b31333
Fix build
ianton-ru Aug 7, 2026
088cf75
Fix Iceberg trivial count to sum required record_count.
ianton-ru Aug 7, 2026
69ab136
Remove isEtagUsableAsCacheKey, this method useless in backport
ianton-ru Aug 7, 2026
0924819
Fix settings history
ianton-ru Aug 7, 2026
88ea25b
Merge branch 'antalya-26.6' into feature/antalya-26.6/iceberg-puffin-…
ianton-ru Aug 7, 2026
13a7278
Reuse the `Puffin` format reader instead of a separate `PuffinFile` p…
ianton-ru Aug 7, 2026
1a9caaa
Restore `PuffinFilesRead` accounting on seekable footer parse.
ianton-ru Aug 10, 2026
85cac8e
Reject Iceberg DELETE/UPDATE when the snapshot has deletion vectors.
ianton-ru Aug 12, 2026
9d396ae
Cap non-seekable Puffin buffering with the absolute size limit.
ianton-ru Aug 12, 2026
3d7645f
Validate SQL Puffin roaring bitmaps after readSafe.
ianton-ru Aug 12, 2026
955b6a5
Fail closed trivial Iceberg count on cross-manifest row overflow.
ianton-ru Aug 12, 2026
45b383e
Treat zero-sized Puffin cache like use_puffin_files_cache=0.
ianton-ru Aug 12, 2026
da13047
Fix puffin_files_cache_max_entries docs: zero means unlimited.
ianton-ru Aug 12, 2026
ee53ef0
Fix version in settings history
ianton-ru Aug 12, 2026
1036173
Fix SYSTEM DROP PUFFIN FILES CACHE privilege alias.
ianton-ru Aug 12, 2026
83b40a9
Count PuffinFilesRead on SQL deletion-vector blob reads.
ianton-ru Aug 12, 2026
0da72d1
Tolerate Parquet FileMetaData.num_rows mismatch in global offsets.
ianton-ru Aug 12, 2026
9929d10
Clarify PositionDeleteKindPresence is not used by totalRows.
ianton-ru Aug 12, 2026
64fd335
Remove dead empty-etag fallback after Puffin cache key creation.
ianton-ru Aug 12, 2026
4289367
Make Puffin cache waiter metrics gtest deterministic.
ianton-ru Aug 12, 2026
dbc6e40
Move ClusterFunctionReadTaskResponse protocol tests to their own file.
ianton-ru Aug 12, 2026
20bb262
Fail closed when schema_transform cannot be sent on old protocol.
ianton-ru Aug 12, 2026
43d86a3
Allow mixed blob types in Puffin footers for deletion-vector reads.
ianton-ru Aug 12, 2026
5aceb8c
Include object-storage description in Puffin cache identity.
ianton-ru Aug 12, 2026
1095d34
Fail closed when iceberg_info cannot be sent on old protocol.
ianton-ru Aug 12, 2026
7c74abc
Reject deletion-vector-v1 blobs unless snapshot and sequence are -1.
ianton-ru Aug 12, 2026
a5867ff
Do not cache count-from-files results under row filters.
ianton-ru Aug 12, 2026
d275f3e
Reject oversized Puffin DV cardinality before blob allocate.
ianton-ru Aug 12, 2026
c425bd2
Fix use_puffin_files_cache settings history previous_value.
ianton-ru Aug 12, 2026
3be5b0c
Merge branch 'antalya-26.6' into feature/antalya-26.6/iceberg-puffin-…
ianton-ru Aug 12, 2026
c04e775
fix(Parsers): extend magic_enum range for ASTSystemQuery::Type
CheSema Jul 10, 2026
ecf1a5c
Reject Iceberg DELETE/UPDATE mutations on format version 3+.
ianton-ru Aug 13, 2026
f73c24a
Allow need_only_count for Iceberg deletion vectors and position deletes.
ianton-ru Aug 13, 2026
a930aba
Cache parsed Puffin footers by storage identity, path, and etag.
ianton-ru Aug 13, 2026
e4a00de
Charge Puffin cache keys and cell overhead in entry weight.
ianton-ru Aug 13, 2026
f01a2d2
Simplify Puffin footer sharing to a small in-cache memo.
ianton-ru Aug 13, 2026
5a80deb
Honor puffin_files_cache_size for the footer memo.
ianton-ru Aug 13, 2026
c6e46a6
Force error log level in 04671 Iceberg v3 mutations test.
ianton-ru Aug 14, 2026
062c8e0
Avoid iceberg count-only shortcut in 04337 reserved field-id test.
ianton-ru Aug 14, 2026
5a7c982
Merge antalya-26.6
ianton-ru Aug 14, 2026
bbd3099
Reuse Puffin format DV decode helpers from Iceberg reader.
ianton-ru Aug 14, 2026
5e7487f
Reject deletion-vector-v1 blobs with non-empty fields.
ianton-ru Aug 14, 2026
cfec740
Preserve applied_filter on deletion-vector count-only path.
ianton-ru Aug 14, 2026
47e8312
Restore Iceberg snapshot-summary trivial COUNT shortcut.
ianton-ru Aug 14, 2026
2926b78
Keep unbucketed ParquetV3 need_only_count on FileMetaData.num_rows.
ianton-ru Aug 14, 2026
4abbc8c
Drop unreachable deletion-vector scan from Iceberg mutations.
ianton-ru Aug 14, 2026
c0f187d
Drop dead _headers check from object-storage count cache.
ianton-ru Aug 14, 2026
7234aaf
Evict Puffin footer memo entries one-by-one under budget pressure.
ianton-ru Aug 14, 2026
92f7952
Document that icebergCluster loads deletion vectors on the initiator.
ianton-ru Aug 14, 2026
fb4f65e
Allow Iceberg `_pos` in deletion-vector-v1 fields.
ianton-ru Aug 14, 2026
0736e28
Document that Puffin accepts Iceberg `_pos` in deletion-vector-v1 fie…
ianton-ru Aug 14, 2026
ff965f0
Share Puffin DV footer and read-limit checks with the Iceberg loader.
ianton-ru Aug 14, 2026
61c3ec7
Remove unused PositionDeleteKindPresence helper.
ianton-ru Aug 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions docs/en/engines/table-engines/integrations/iceberg.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,19 @@ ClickHouse supports reading Iceberg tables that use the following deletion metho

- [Position deletes](https://iceberg.apache.org/spec/#position-delete-files)
- [Equality deletes](https://iceberg.apache.org/spec/#equality-delete-files) (supported from version 25.8+)
- [Deletion vectors](https://iceberg.apache.org/spec/#deletion-vectors) stored in Puffin files (Iceberg v3, read-only)

The following deletion method is **not supported**:
- [Deletion vectors](https://iceberg.apache.org/spec/#deletion-vectors) (introduced in v3)
The following limitations apply to deletion vectors:

- Only `deletion-vector-v1` Puffin blobs are supported
- Data files must be in Parquet format
- Column-scoped deletion vectors (user column ids in puffin `fields`) are not supported. Writers may set `fields` to `[]` or to the Iceberg reserved `_pos` id (`2147483645`) for file-scoped deletion vectors.
- Writing deletion vectors is not supported
- `DELETE` / `UPDATE` mutations on Iceberg format version 3+ tables are rejected (writers must not add position-delete files)

Parsed deletion vectors can be cached in memory when `use_puffin_files_cache` is enabled and the puffin file has a non-empty `etag`. Empty deletion vectors are cached as well, so repeated reads do not re-fetch the puffin file. Parsed footers for coalesced multi-DV Puffin files are memoized with that cache (same identity: storage, path, `etag`) so slices share one footer parse; the memo shares `puffin_files_cache_size` / max-entry limits and is dropped when the cache is disabled (`puffin_files_cache_size=0`) or cleared. The cache can be cleared with `SYSTEM DROP PUFFIN FILES CACHE`.

For [`icebergCluster`](/sql-reference/table-functions/icebergCluster.md) (and `object_storage_cluster`), the initiator loads and materializes each data file's deletion vector while distributing tasks, then sends the resulting row bitmap to workers with the task. Workers apply the bitmap; they do not re-read the Puffin blob for that path. On wide v3 tables this can make the initiator a serialization point for deletion-vector I/O and decode.

### Basic usage {#basic-usage}
```sql
Expand Down
4 changes: 4 additions & 0 deletions docs/en/sql-reference/statements/system.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ Clears the per-URL Confluent Schema Registry caches used by the `AvroConfluent`

Clears the parquet metadata cache.

## SYSTEM DROP PUFFIN FILES CACHE {#drop-puffin-files-cache}

Clears the Puffin files cache used for parsed Iceberg puffin file content such as deletion vectors.

## SYSTEM CLEAR|DROP TEXT INDEX CACHES {#drop-text-index-caches}

Clears the text index's header, dictionary and postings caches.
Expand Down
23 changes: 18 additions & 5 deletions docs/en/sql-reference/table-functions/iceberg.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,23 @@ ClickHouse supports time travel for Iceberg tables, allowing you to query histor

## Processing of tables with deleted rows {#deleted-rows}

Currently, only Iceberg tables with [position deletes](https://iceberg.apache.org/spec/#position-delete-files) are supported.
ClickHouse supports reading Iceberg tables that use the following deletion methods:

The following deletion methods are **not supported**:
- [Equality deletes](https://iceberg.apache.org/spec/#equality-delete-files)
- [Deletion vectors](https://iceberg.apache.org/spec/#deletion-vectors) (introduced in v3)
- [Position deletes](https://iceberg.apache.org/spec/#position-delete-files)
- [Equality deletes](https://iceberg.apache.org/spec/#equality-delete-files) (supported from version 25.8+)
- [Deletion vectors](https://iceberg.apache.org/spec/#deletion-vectors) stored in Puffin files (Iceberg v3, read-only)

The following limitations apply to deletion vectors:

- Only `deletion-vector-v1` Puffin blobs are supported
- Data files must be in Parquet format
- Column-scoped deletion vectors (user column ids in puffin `fields`) are not supported. Writers may set `fields` to `[]` or to the Iceberg reserved `_pos` id (`2147483645`) for file-scoped deletion vectors.
- Writing deletion vectors is not supported
- `DELETE` / `UPDATE` mutations on Iceberg format version 3+ tables are rejected (writers must not add position-delete files)

Parsed deletion vectors can be cached in memory when `use_puffin_files_cache` is enabled and the puffin file has a non-empty `etag`. Empty deletion vectors are cached as well, so repeated reads do not re-fetch the puffin file. Parsed footers for coalesced multi-DV Puffin files are memoized with that cache (same identity: storage, path, `etag`) so slices share one footer parse; the memo shares `puffin_files_cache_size` / max-entry limits and is dropped when the cache is disabled (`puffin_files_cache_size=0`) or cleared. The cache can be cleared with `SYSTEM DROP PUFFIN FILES CACHE`.

For [`icebergCluster`](/sql-reference/table-functions/icebergCluster.md) (and `object_storage_cluster`), the initiator loads and materializes each data file's deletion vector while distributing tasks, then sends the resulting row bitmap to workers with the task. Workers apply the bitmap; they do not re-read the Puffin blob for that path. On wide v3 tables this can make the initiator a serialization point for deletion-vector I/O and decode.

### Basic usage {#basic-usage}

Expand Down Expand Up @@ -384,8 +396,9 @@ y: 993

### DELETE {#iceberg-writes-delete}

Deleting extra rows in the merge-on-read format is also supported in ClickHouse.
Deleting extra rows in the merge-on-read format is also supported in ClickHouse for Iceberg format version 2.
This query will create a new snapshot with position delete files.
Mutations on format version 3+ tables are rejected until ClickHouse can write deletion vectors (Iceberg v3 writers must not add new position-delete files).

### Example {#example-iceberg-writes-delete}

Expand Down
6 changes: 6 additions & 0 deletions docs/en/sql-reference/table-functions/icebergCluster.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ This is an extension to the [iceberg](/sql-reference/table-functions/iceberg.md)

Allows processing files from Apache [Iceberg](https://iceberg.apache.org/) in parallel from many nodes in a specified cluster. On initiator it creates a connection to all nodes in the cluster and dispatches each file dynamically. On the worker node it asks the initiator about the next task to process and processes it. This is repeated until all tasks are finished.

## Deletion vectors on cluster reads {#deletion-vectors-cluster}

Iceberg v3 [deletion vectors](https://iceberg.apache.org/spec/#deletion-vectors) are loaded on the **initiator** while it distributes tasks: for each data file the initiator reads the Puffin blob, validates it, materializes deleted row positions, and attaches the bitmap to the task sent to workers. Workers apply that bitmap when reading Parquet; they do not fetch or parse the Puffin file again for that path. See [Processing of tables with deleted rows](/sql-reference/table-functions/iceberg.md#deleted-rows) for format limits and caching.

On wide tables with many deletion vectors, initiator-side decode and per-task bitmap serialization can become a bottleneck even when Parquet reads are well parallelized across the cluster.

## Syntax {#syntax}

```sql
Expand Down
10 changes: 7 additions & 3 deletions docs/reference/formats/Puffin/Puffin.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
description: 'Documentation for the Puffin format'
input_format: true
output_format: false
keywords: ['Puffin']
sidebar_label: 'Puffin'
sidebar_position: 1
slug: /interfaces/formats/Puffin
title: 'Puffin'
doc_type: 'reference'
Expand All @@ -10,16 +14,16 @@ doc_type: 'reference'

Input format for reading [Apache Iceberg Puffin](https://iceberg.apache.org/puffin-spec/) files.

The format exposes deleted row positions from `deletion-vector-v1` blobs. It is the only supported blob type: a file containing any other blob type (for example `apache-datasketches-theta-v1`) is rejected.
The format exposes deleted row positions from `deletion-vector-v1` blobs. Other blob types (for example `apache-datasketches-theta-v1`) are skipped.
If a puffin file contains multiple `deletion-vector-v1` blobs, the format outputs one row per such blob.

Fixed output columns:
- `referenced_data_file` (`String`) - location of the data file the deletion vector applies to (`referenced-data-file` blob property)
- `deleted_rows` (`Array(UInt64)`) - 64-bit row positions deleted according to the deletion vector roaring bitmap

Deletion vectors whose declared `cardinality` exceeds an absolute materialization ceiling are rejected when `deleted_rows` is requested. Footer `deletion-vector-v1` properties (including that `cardinality` parses as an unsigned integer) are always validated. Selecting only `referenced_data_file` skips on-disk payload I/O and therefore also skips envelope, CRC, roaring deserialize, and the materialization ceiling — intentionally, so a path-only projection does not read up to the blob-size cap.
Deletion vectors whose declared `cardinality` exceeds an absolute materialization ceiling are rejected when `deleted_rows` is requested, **before** envelope peek or full blob allocation (same fail-closed order as the Iceberg deletion-vector reader). Footer `deletion-vector-v1` properties are always validated: `cardinality` must parse as an unsigned integer, `snapshot-id` / `sequence-number` must be `-1`, and `fields` must be either empty or the singleton Iceberg reserved `_pos` id (`2147483645`) that Spark writes for file-scoped DVs — other `fields` lists (column-scoped DVs) are rejected. Selecting only `referenced_data_file` skips on-disk payload I/O and therefore also skips envelope, CRC, roaring deserialize, and the materialization ceiling — intentionally, so a path-only projection does not read up to the blob-size cap.

On-disk `deletion-vector-v1` blob length is bounded by an absolute ceiling (aligned with Iceberg's 2 GiB content-size check). When `deleted_rows` is requested, the reader peeks the envelope header (combined length and magic) before allocating the full payload; CRC is verified after the bounded read.
On-disk `deletion-vector-v1` blob length is bounded by an absolute ceiling (aligned with Iceberg's 2 GiB content-size check). When `deleted_rows` is requested and cardinality is within the materialization ceiling, the reader peeks the envelope header (combined length and magic) before allocating the full payload; CRC is verified after the bounded read.

LZ4-compressed and uncompressed puffin footers are supported. Footer payload size (and declared LZ4 content size) is bounded by a compression ratio where applicable and an absolute ceiling; oversized footers are rejected before allocation.

Expand Down
8 changes: 5 additions & 3 deletions docs/reference/formats/Puffin/PuffinMetadata.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
description: 'Documentation for the PuffinMetadata format'
input_format: true
output_format: false
keywords: ['PuffinMetadata']
sidebar_label: 'PuffinMetadata'
sidebar_position: 2
slug: /interfaces/formats/PuffinMetadata
title: 'PuffinMetadata'
doc_type: 'reference'
Expand All @@ -9,9 +13,7 @@ doc_type: 'reference'
## Description {#description}

Special input format for reading [Apache Iceberg Puffin](https://iceberg.apache.org/puffin-spec/) file footer metadata.
It outputs one row per blob entry from the footer `BlobMetadata` list.

`deletion-vector-v1` is the only supported blob type: a file containing any other blob type (for example `apache-datasketches-theta-v1`) is rejected.
It outputs one row per blob entry from the footer `BlobMetadata` list, including non-deletion-vector types (for example `apache-datasketches-theta-v1`). Full deletion-vector property validation applies only to `deletion-vector-v1` entries.

Fixed output columns:
- `blob_type` (`String`) - blob type, for example `deletion-vector-v1`
Expand Down
15 changes: 15 additions & 0 deletions programs/local/LocalServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@ namespace ServerSetting
extern const ServerSettingsUInt64 parquet_metadata_cache_size;
extern const ServerSettingsUInt64 parquet_metadata_cache_max_entries;
extern const ServerSettingsDouble parquet_metadata_cache_size_ratio;
extern const ServerSettingsString puffin_files_cache_policy;
extern const ServerSettingsUInt64 puffin_files_cache_size;
extern const ServerSettingsUInt64 puffin_files_cache_max_entries;
extern const ServerSettingsDouble puffin_files_cache_size_ratio;
extern const ServerSettingsUInt64 max_active_parts_loading_thread_pool_size;
extern const ServerSettingsUInt64 max_io_thread_pool_free_size;
extern const ServerSettingsUInt64 max_io_thread_pool_size;
Expand Down Expand Up @@ -1546,6 +1550,17 @@ void LocalServer::processConfig()
global_context->setParquetMetadataCache(parquet_metadata_cache_policy, parquet_metadata_cache_size, parquet_metadata_cache_max_entries, parquet_metadata_cache_size_ratio);
#endif

String puffin_files_cache_policy = server_settings[ServerSetting::puffin_files_cache_policy];
size_t puffin_files_cache_size = server_settings[ServerSetting::puffin_files_cache_size];
size_t puffin_files_cache_max_entries = server_settings[ServerSetting::puffin_files_cache_max_entries];
double puffin_files_cache_size_ratio = server_settings[ServerSetting::puffin_files_cache_size_ratio];
if (puffin_files_cache_size > max_cache_size)
{
puffin_files_cache_size = max_cache_size;
LOG_INFO(log, "Lowered Puffin files cache size to {} because the system has limited RAM", formatReadableSizeWithBinarySuffix(puffin_files_cache_size));
}
global_context->setPuffinFilesCache(puffin_files_cache_policy, puffin_files_cache_size, puffin_files_cache_max_entries, puffin_files_cache_size_ratio);

Names allowed_disks_table_engines;
splitInto<','>(allowed_disks_table_engines, server_settings[ServerSetting::allowed_disks_for_table_engines].value);
global_context->setAllowedDisksForTableEngines(std::unordered_set<String>(allowed_disks_table_engines.begin(), allowed_disks_table_engines.end()));
Expand Down
15 changes: 15 additions & 0 deletions programs/server/Server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,10 @@ namespace ServerSetting
extern const ServerSettingsUInt64 parquet_metadata_cache_size;
extern const ServerSettingsUInt64 parquet_metadata_cache_max_entries;
extern const ServerSettingsDouble parquet_metadata_cache_size_ratio;
extern const ServerSettingsString puffin_files_cache_policy;
extern const ServerSettingsUInt64 puffin_files_cache_size;
extern const ServerSettingsUInt64 puffin_files_cache_max_entries;
extern const ServerSettingsDouble puffin_files_cache_size_ratio;
extern const ServerSettingsUInt64 io_thread_pool_queue_size;
extern const ServerSettingsBool jemalloc_enable_global_profiler;
extern const ServerSettingsBool jemalloc_collect_global_profile_samples_in_trace_log;
Expand Down Expand Up @@ -2302,6 +2306,16 @@ try
}
global_context->setParquetMetadataCache(parquet_metadata_cache_policy, parquet_metadata_cache_size, parquet_metadata_cache_max_entries, parquet_metadata_cache_size_ratio);
#endif
String puffin_files_cache_policy = server_settings[ServerSetting::puffin_files_cache_policy];
size_t puffin_files_cache_size = server_settings[ServerSetting::puffin_files_cache_size];
size_t puffin_files_cache_max_entries = server_settings[ServerSetting::puffin_files_cache_max_entries];
double puffin_files_cache_size_ratio = server_settings[ServerSetting::puffin_files_cache_size_ratio];
if (puffin_files_cache_size > max_cache_size)
{
puffin_files_cache_size = max_cache_size;
LOG_INFO(log, "Lowered Puffin files cache size to {} because the system has limited RAM", formatReadableSizeWithBinarySuffix(puffin_files_cache_size));
}
global_context->setPuffinFilesCache(puffin_files_cache_policy, puffin_files_cache_size, puffin_files_cache_max_entries, puffin_files_cache_size_ratio);

Names allowed_disks_table_engines;
splitInto<','>(allowed_disks_table_engines, server_settings[ServerSetting::allowed_disks_for_table_engines].value);
Expand Down Expand Up @@ -2731,6 +2745,7 @@ try
#if USE_PARQUET
global_context->updateParquetMetadataCacheConfiguration(config(), max_cache_size_in_bytes);
#endif
global_context->updatePuffinFilesCacheConfiguration(config(), max_cache_size_in_bytes);
}

#if USE_SSL
Expand Down
1 change: 1 addition & 0 deletions src/Access/Common/AccessType.h
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ enum class AccessType : uint8_t
M(SYSTEM_DROP_ICEBERG_METADATA_CACHE, "SYSTEM CLEAR ICEBERG_METADATA_CACHE, SYSTEM DROP ICEBERG_METADATA_CACHE", GLOBAL, SYSTEM_DROP_CACHE) \
M(SYSTEM_DROP_AVRO_SCHEMA_CACHE, "SYSTEM CLEAR AVRO SCHEMA CACHE, SYSTEM DROP AVRO SCHEMA CACHE, DROP AVRO SCHEMA CACHE", GLOBAL, SYSTEM_DROP_CACHE) \
M(SYSTEM_DROP_PARQUET_METADATA_CACHE, "SYSTEM DROP PARQUET_METADATA_CACHE", GLOBAL, SYSTEM_DROP_CACHE) \
M(SYSTEM_DROP_PUFFIN_FILES_CACHE, "SYSTEM DROP PUFFIN_FILES_CACHE", GLOBAL, SYSTEM_DROP_CACHE) \
M(SYSTEM_PREWARM_PRIMARY_INDEX_CACHE, "SYSTEM PREWARM PRIMARY INDEX, PREWARM PRIMARY INDEX CACHE, PREWARM PRIMARY INDEX", GLOBAL, SYSTEM_DROP_CACHE) \
M(SYSTEM_DROP_PRIMARY_INDEX_CACHE, "SYSTEM CLEAR PRIMARY INDEX CACHE, SYSTEM DROP PRIMARY INDEX, DROP PRIMARY INDEX CACHE, DROP PRIMARY INDEX", GLOBAL, SYSTEM_DROP_CACHE) \
M(SYSTEM_DROP_UNCOMPRESSED_CACHE, "SYSTEM CLEAR UNCOMPRESSED CACHE, SYSTEM DROP UNCOMPRESSED, DROP UNCOMPRESSED CACHE, DROP UNCOMPRESSED", GLOBAL, SYSTEM_DROP_CACHE) \
Expand Down
Loading
Loading