mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Merge pull request #34558 from ucasfl/storage-log
try fix data race in StorageLog
This commit is contained in:
commit
ae1da31d19
@ -732,8 +732,21 @@ void StorageLog::rename(const String & new_path_to_table_data, const StorageID &
|
|||||||
renameInMemory(new_table_id);
|
renameInMemory(new_table_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StorageLog::truncate(const ASTPtr &, const StorageMetadataPtr &, ContextPtr, TableExclusiveLockHolder &)
|
static std::chrono::seconds getLockTimeout(ContextPtr context)
|
||||||
{
|
{
|
||||||
|
const Settings & settings = context->getSettingsRef();
|
||||||
|
Int64 lock_timeout = settings.lock_acquire_timeout.totalSeconds();
|
||||||
|
if (settings.max_execution_time.totalSeconds() != 0 && settings.max_execution_time.totalSeconds() < lock_timeout)
|
||||||
|
lock_timeout = settings.max_execution_time.totalSeconds();
|
||||||
|
return std::chrono::seconds{lock_timeout};
|
||||||
|
}
|
||||||
|
|
||||||
|
void StorageLog::truncate(const ASTPtr &, const StorageMetadataPtr &, ContextPtr context, TableExclusiveLockHolder &)
|
||||||
|
{
|
||||||
|
WriteLock lock{rwlock, getLockTimeout(context)};
|
||||||
|
if (!lock)
|
||||||
|
throw Exception("Lock timeout exceeded", ErrorCodes::TIMEOUT_EXCEEDED);
|
||||||
|
|
||||||
disk->clearDirectory(table_path);
|
disk->clearDirectory(table_path);
|
||||||
|
|
||||||
for (auto & data_file : data_files)
|
for (auto & data_file : data_files)
|
||||||
@ -750,16 +763,6 @@ void StorageLog::truncate(const ASTPtr &, const StorageMetadataPtr &, ContextPtr
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static std::chrono::seconds getLockTimeout(ContextPtr context)
|
|
||||||
{
|
|
||||||
const Settings & settings = context->getSettingsRef();
|
|
||||||
Int64 lock_timeout = settings.lock_acquire_timeout.totalSeconds();
|
|
||||||
if (settings.max_execution_time.totalSeconds() != 0 && settings.max_execution_time.totalSeconds() < lock_timeout)
|
|
||||||
lock_timeout = settings.max_execution_time.totalSeconds();
|
|
||||||
return std::chrono::seconds{lock_timeout};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Pipe StorageLog::read(
|
Pipe StorageLog::read(
|
||||||
const Names & column_names,
|
const Names & column_names,
|
||||||
const StorageMetadataPtr & metadata_snapshot,
|
const StorageMetadataPtr & metadata_snapshot,
|
||||||
|
Loading…
Reference in New Issue
Block a user