Merge branch 'master' into revert-34211-revert-34153-add_func_tests_over_s3

This commit is contained in:
alesapin 2022-02-03 16:20:06 +03:00
commit 2a9bc7cba8
56 changed files with 668 additions and 170 deletions

38
.github/workflows/tags_stable.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: TagsStableWorkflow
# - Gets artifacts from S3
# - Sends it to JFROG Artifactory
# - Adds them to the release assets
on: # yamllint disable-line rule:truthy
push:
tags:
- 'v*-stable'
- 'v*-lts'
jobs:
UpdateVersions:
runs-on: [self-hosted, style-checker]
steps:
- name: Get tag name
run: echo "GITHUB_TAG=${GITHUB_REF#refs/tags/}" >> "$GITHUB_ENV"
- name: Check out repository code
uses: actions/checkout@v2
with:
ref: master
- name: Generate versions
run: |
git fetch --tags
./utils/list-versions/list-versions.sh > ./utils/list-versions/version_date.tsv
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
commit-message: Update version_date.tsv after ${{ env.GITHUB_TAG }}
branch: auto/${{ env.GITHUB_TAG }}
delete-branch: true
title: Update version_date.tsv after ${{ env.GITHUB_TAG }}
body: |
Update version_date.tsv after ${{ env.GITHUB_TAG }}
Changelog category (leave one):
- Not for changelog (changelog entry is not required)

View File

@ -67,7 +67,7 @@ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git" AND NOT EXISTS "${ClickHouse_SOURC
message (FATAL_ERROR "Submodules are not initialized. Run\n\tgit submodule update --init --recursive")
endif ()
include (cmake/find/ccache.cmake)
include (cmake/ccache.cmake)
# Take care to add prlimit in command line before ccache, or else ccache thinks that
# prlimit is compiler, and clang++ is its input file, and refuses to work with

View File

@ -22,9 +22,10 @@ The following versions of ClickHouse server are currently being supported with s
| 21.7 | :x: |
| 21.8 | ✅ |
| 21.9 | :x: |
| 21.10 | |
| 21.10 | :x: |
| 21.11 | ✅ |
| 21.12 | ✅ |
| 22.1 | ✅ |
## Reporting a Vulnerability

View File

@ -22,7 +22,7 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
include (cmake/find/cxx.cmake)
include (cmake/cxx.cmake)
target_link_libraries(global-group INTERFACE
$<TARGET_PROPERTY:global-libs,INTERFACE_LINK_LIBRARIES>

View File

@ -22,8 +22,8 @@ set(CMAKE_C_STANDARD_LIBRARIES ${DEFAULT_LIBS})
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
include (cmake/find/unwind.cmake)
include (cmake/find/cxx.cmake)
include (cmake/unwind.cmake)
include (cmake/cxx.cmake)
target_link_libraries(global-group INTERFACE
$<TARGET_PROPERTY:global-libs,INTERFACE_LINK_LIBRARIES>

View File

@ -42,8 +42,8 @@ if (NOT OS_ANDROID)
add_subdirectory(base/harmful)
endif ()
include (cmake/find/unwind.cmake)
include (cmake/find/cxx.cmake)
include (cmake/unwind.cmake)
include (cmake/cxx.cmake)
target_link_libraries(global-group INTERFACE
-Wl,--start-group

View File

@ -29,12 +29,6 @@ if (OS_FREEBSD)
message (FATAL_ERROR "Using internal parquet library on FreeBSD is not supported")
endif()
if(USE_STATIC_LIBRARIES)
set(FLATBUFFERS_LIBRARY flatbuffers)
else()
set(FLATBUFFERS_LIBRARY flatbuffers_shared)
endif()
set (CMAKE_CXX_STANDARD 17)
set(ARROW_VERSION "6.0.1")
@ -95,9 +89,16 @@ set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "Skip flatbuffers tests")
add_subdirectory(${FLATBUFFERS_SRC_DIR} "${FLATBUFFERS_BINARY_DIR}")
message(STATUS "FLATBUFFERS_LIBRARY: ${FLATBUFFERS_LIBRARY}")
add_library(_flatbuffers INTERFACE)
if(USE_STATIC_LIBRARIES)
target_link_libraries(_flatbuffers INTERFACE flatbuffers)
else()
target_link_libraries(_flatbuffers INTERFACE flatbuffers_shared)
endif()
target_include_directories(_flatbuffers INTERFACE ${FLATBUFFERS_INCLUDE_DIR})
# === hdfs
# NOTE: cannot use ch_contrib::hdfs since it's INCLUDE_DIRECTORIES does not includes trailing "hdfs/"
set(HDFS_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/libhdfs3/include/hdfs/")
# arrow-cmake cmake file calling orc cmake subroutine which detects certain compiler features.
@ -123,8 +124,6 @@ configure_file("${ORC_SOURCE_SRC_DIR}/Adaptor.hh.in" "${ORC_BUILD_INCLUDE_DIR}/A
# ARROW_ORC + adapters/orc/CMakefiles
set(ORC_SRCS
"${ARROW_SRC_DIR}/arrow/adapters/orc/adapter.cc"
"${ARROW_SRC_DIR}/arrow/adapters/orc/adapter_util.cc"
"${ORC_SOURCE_SRC_DIR}/Exceptions.cc"
"${ORC_SOURCE_SRC_DIR}/OrcFile.cc"
"${ORC_SOURCE_SRC_DIR}/Reader.cc"
@ -151,6 +150,22 @@ set(ORC_SRCS
"${ORC_ADDITION_SOURCE_DIR}/orc_proto.pb.cc"
)
add_library(_orc ${ORC_SRCS})
target_link_libraries(_orc PRIVATE
ch_contrib::protobuf
ch_contrib::lz4
ch_contrib::snappy
ch_contrib::zlib
ch_contrib::zstd)
target_include_directories(_orc SYSTEM BEFORE PUBLIC ${ORC_INCLUDE_DIR})
target_include_directories(_orc SYSTEM BEFORE PUBLIC ${ORC_BUILD_INCLUDE_DIR})
target_include_directories(_orc SYSTEM PRIVATE
${ORC_SOURCE_SRC_DIR}
${ORC_SOURCE_WRAP_DIR}
${ORC_BUILD_SRC_DIR}
${ORC_ADDITION_SOURCE_DIR}
${ARROW_SRC_DIR})
# === arrow
@ -336,7 +351,8 @@ set(ARROW_SRCS
"${LIBRARY_DIR}/ipc/reader.cc"
"${LIBRARY_DIR}/ipc/writer.cc"
${ORC_SRCS}
"${ARROW_SRC_DIR}/arrow/adapters/orc/adapter.cc"
"${ARROW_SRC_DIR}/arrow/adapters/orc/adapter_util.cc"
)
add_definitions(-DARROW_WITH_LZ4)
@ -356,30 +372,27 @@ endif ()
add_library(_arrow ${ARROW_SRCS})
# Arrow dependencies
add_dependencies(_arrow ${FLATBUFFERS_LIBRARY})
target_link_libraries(_arrow PRIVATE
boost::filesystem
target_link_libraries(_arrow PRIVATE ${FLATBUFFERS_LIBRARY} boost::filesystem)
_flatbuffers
ch_contrib::double_conversion
ch_contrib::lz4
ch_contrib::snappy
ch_contrib::zlib
ch_contrib::zstd
ch_contrib::zstd
)
target_link_libraries(_arrow PUBLIC _orc)
add_dependencies(_arrow protoc)
target_include_directories(_arrow SYSTEM BEFORE PUBLIC ${ARROW_SRC_DIR})
target_include_directories(_arrow SYSTEM BEFORE PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/cpp/src")
target_link_libraries(_arrow PRIVATE ch_contrib::double_conversion)
target_link_libraries(_arrow PRIVATE ch_contrib::protobuf)
target_link_libraries(_arrow PRIVATE ch_contrib::lz4)
target_link_libraries(_arrow PRIVATE ch_contrib::snappy)
target_link_libraries(_arrow PRIVATE ch_contrib::zlib)
target_link_libraries(_arrow PRIVATE ch_contrib::zstd)
target_include_directories(_arrow SYSTEM BEFORE PUBLIC ${ORC_INCLUDE_DIR})
target_include_directories(_arrow SYSTEM BEFORE PUBLIC ${ORC_BUILD_INCLUDE_DIR})
target_include_directories(_arrow SYSTEM PRIVATE ${ORC_SOURCE_SRC_DIR})
target_include_directories(_arrow SYSTEM PRIVATE ${ORC_SOURCE_WRAP_DIR})
target_include_directories(_arrow SYSTEM PRIVATE ${ORC_BUILD_SRC_DIR})
target_include_directories(_arrow SYSTEM PRIVATE ${ORC_ADDITION_SOURCE_DIR})
target_include_directories(_arrow SYSTEM PRIVATE ${ARROW_SRC_DIR})
target_include_directories(_arrow SYSTEM PRIVATE ${FLATBUFFERS_INCLUDE_DIR})
target_include_directories(_arrow SYSTEM PRIVATE ${HDFS_INCLUDE_DIR})
# === parquet

View File

@ -72,11 +72,6 @@ else()
if(WITH_ZSTD)
add_definitions(-DZSTD)
include_directories(${ZSTD_INCLUDE_DIR})
include_directories("${ZSTD_INCLUDE_DIR}/common")
include_directories("${ZSTD_INCLUDE_DIR}/dictBuilder")
include_directories("${ZSTD_INCLUDE_DIR}/deprecated")
list(APPEND THIRDPARTY_LIBS ch_contrib::zstd)
endif()
endif()

View File

@ -22,7 +22,7 @@ cmake .. \
1. ClickHouse's source CMake files (located in the root directory and in `/src`).
2. Arch-dependent CMake files (located in `/cmake/*os_name*`).
3. Libraries finders (search for contrib libraries, located in `/cmake/find`).
3. Libraries finders (search for contrib libraries, located in `/contrib/*/CMakeLists.txt`).
3. Contrib build CMake files (used instead of libraries' own CMake files, located in `/cmake/modules`)
## List of CMake flags

View File

@ -8,4 +8,4 @@ sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
sudo service clickhouse-server start
clickhouse-client
clickhouse-client # or "clickhouse-client --password" if you set up a password.

View File

@ -4,4 +4,4 @@ sudo yum-config-manager --add-repo https://repo.clickhouse.com/rpm/clickhouse.re
sudo yum install clickhouse-server clickhouse-client
sudo /etc/init.d/clickhouse-server start
clickhouse-client
clickhouse-client # or "clickhouse-client --password" if you set up a password.

View File

@ -90,7 +90,10 @@ def concatenate(lang, docs_path, single_page_file, nav):
line)
# If failed to replace the relative link, print to log
if '../' in line:
# But with some exceptions:
# - "../src/" -- for cmake-in-clickhouse.md (link to sources)
# - "../usr/share" -- changelog entry that has "../usr/share/zoneinfo"
if '../' in line and (not '../usr/share' in line) and (not '../src/' in line):
logging.info('Failed to resolve relative link:')
logging.info(path)
logging.info(line)

View File

@ -286,7 +286,7 @@ bool Client::executeMultiQuery(const String & all_queries_text)
// , where the inline data is delimited by semicolon and not by a
// newline.
auto * insert_ast = parsed_query->as<ASTInsertQuery>();
if (insert_ast && insert_ast->data)
if (insert_ast && isSyncInsertWithData(*insert_ast, global_context))
{
this_query_end = insert_ast->end;
adjustQueryEnd(this_query_end, all_queries_end, global_context->getSettingsRef().max_parser_depth);

View File

@ -0,0 +1,44 @@
#include <Access/CachedAccessChecking.h>
#include <Access/ContextAccess.h>
namespace DB
{
CachedAccessChecking::CachedAccessChecking(const std::shared_ptr<const ContextAccess> & access_, AccessFlags access_flags_)
: CachedAccessChecking(access_, AccessRightsElement{access_flags_})
{
}
CachedAccessChecking::CachedAccessChecking(const std::shared_ptr<const ContextAccess> & access_, const AccessRightsElement & element_)
: access(access_), element(element_)
{
}
CachedAccessChecking::~CachedAccessChecking() = default;
bool CachedAccessChecking::checkAccess(bool throw_if_denied)
{
if (checked)
return result;
if (throw_if_denied)
{
try
{
access->checkAccess(element);
result = true;
}
catch (...)
{
result = false;
throw;
}
}
else
{
result = access->isGranted(element);
}
checked = true;
return result;
}
}

View File

@ -0,0 +1,29 @@
#pragma once
#include <Access/Common/AccessRightsElement.h>
#include <memory>
namespace DB
{
class ContextAccess;
/// Checks if the current user has a specified access type granted,
/// and if it's checked another time later, it will just return the first result.
class CachedAccessChecking
{
public:
CachedAccessChecking(const std::shared_ptr<const ContextAccess> & access_, AccessFlags access_flags_);
CachedAccessChecking(const std::shared_ptr<const ContextAccess> & access_, const AccessRightsElement & element_);
~CachedAccessChecking();
bool checkAccess(bool throw_if_denied = true);
private:
const std::shared_ptr<const ContextAccess> access;
const AccessRightsElement element;
bool checked = false;
bool result = false;
};
}

View File

@ -475,11 +475,6 @@ if (TARGET ch_contrib::sqlite)
dbms_target_link_libraries(PUBLIC ch_contrib::sqlite)
endif()
if (USE_CASSANDRA)
dbms_target_link_libraries(PUBLIC ${CASSANDRA_LIBRARY})
dbms_target_include_directories (SYSTEM BEFORE PUBLIC ${CASS_INCLUDE_DIR})
endif()
if (TARGET ch_contrib::msgpack)
target_link_libraries (clickhouse_common_io PUBLIC ch_contrib::msgpack)
endif()

View File

@ -573,6 +573,18 @@ void ClientBase::updateSuggest(const ASTCreateQuery & ast_create)
suggest->addWords(std::move(new_words));
}
bool ClientBase::isSyncInsertWithData(const ASTInsertQuery & insert_query, const ContextPtr & context)
{
if (!insert_query.data)
return false;
auto settings = context->getSettings();
if (insert_query.settings_ast)
settings.applyChanges(insert_query.settings_ast->as<ASTSetQuery>()->changes);
return !settings.async_insert;
}
void ClientBase::processTextAsSingleQuery(const String & full_query)
{
/// Some parts of a query (result output and formatting) are executed
@ -597,10 +609,12 @@ void ClientBase::processTextAsSingleQuery(const String & full_query)
updateSuggest(*create);
}
// An INSERT query may have the data that follow query text. Remove the
/// Send part of query without data, because data will be sent separately.
auto * insert = parsed_query->as<ASTInsertQuery>();
if (insert && insert->data)
/// An INSERT query may have the data that follows query text.
/// Send part of the query without data, because data will be sent separately.
/// But for asynchronous inserts we don't extract data, because it's needed
/// to be done on server side in that case (for coalescing the data from multiple inserts on server side).
const auto * insert = parsed_query->as<ASTInsertQuery>();
if (insert && isSyncInsertWithData(*insert, global_context))
query_to_execute = full_query.substr(0, insert->data - full_query.data());
else
query_to_execute = full_query;
@ -1303,8 +1317,10 @@ void ClientBase::processParsedSingleQuery(const String & full_query, const Strin
if (insert && insert->select)
insert->tryFindInputFunction(input_function);
bool is_async_insert = global_context->getSettings().async_insert && insert && insert->hasInlinedData();
/// INSERT query for which data transfer is needed (not an INSERT SELECT or input()) is processed separately.
if (insert && (!insert->select || input_function) && !insert->watch)
if (insert && (!insert->select || input_function) && !insert->watch && !is_async_insert)
{
if (input_function && insert->format.empty())
throw Exception("FORMAT must be specified for function input()", ErrorCodes::INVALID_USAGE_OF_INPUT);
@ -1434,17 +1450,17 @@ MultiQueryProcessingStage ClientBase::analyzeMultiQueryText(
// row input formats (e.g. TSV) can't tell when the input stops,
// unlike VALUES.
auto * insert_ast = parsed_query->as<ASTInsertQuery>();
const char * query_to_execute_end = this_query_end;
if (insert_ast && insert_ast->data)
{
this_query_end = find_first_symbols<'\n'>(insert_ast->data, all_queries_end);
insert_ast->end = this_query_end;
query_to_execute = all_queries_text.substr(this_query_begin - all_queries_text.data(), insert_ast->data - this_query_begin);
}
else
{
query_to_execute = all_queries_text.substr(this_query_begin - all_queries_text.data(), this_query_end - this_query_begin);
query_to_execute_end = isSyncInsertWithData(*insert_ast, global_context) ? insert_ast->data : this_query_end;
}
query_to_execute = all_queries_text.substr(this_query_begin - all_queries_text.data(), query_to_execute_end - this_query_begin);
// Try to include the trailing comment with test hints. It is just
// a guess for now, because we don't yet know where the query ends
// if it is an INSERT query with inline data. We will do it again

View File

@ -139,6 +139,8 @@ private:
void updateSuggest(const ASTCreateQuery & ast_create);
protected:
static bool isSyncInsertWithData(const ASTInsertQuery & insert_query, const ContextPtr & context);
bool is_interactive = false; /// Use either interactive line editing interface or batch mode.
bool is_multiquery = false;
bool delayed_interactive = false;

View File

@ -80,6 +80,7 @@
M(SyncDrainedConnections, "Number of connections drained synchronously.") \
M(ActiveSyncDrainedConnections, "Number of active connections drained synchronously.") \
M(AsynchronousReadWait, "Number of threads waiting for asynchronous read.") \
M(PendingAsyncInsert, "Number of asynchronous inserts that are waiting for flush.") \
namespace CurrentMetrics
{

View File

@ -8,6 +8,7 @@
M(Query, "Number of queries to be interpreted and potentially executed. Does not include queries that failed to parse or were rejected due to AST size limits, quota limits or limits on the number of simultaneously running queries. May include internal queries initiated by ClickHouse itself. Does not count subqueries.") \
M(SelectQuery, "Same as Query, but only for SELECT queries.") \
M(InsertQuery, "Same as Query, but only for INSERT queries.") \
M(AsyncInsertQuery, "Same as InsertQuery, but only for asynchronous INSERT queries.") \
M(FailedQuery, "Number of failed queries.") \
M(FailedSelectQuery, "Same as FailedQuery, but only for SELECT queries.") \
M(FailedInsertQuery, "Same as FailedQuery, but only for INSERT queries.") \

View File

@ -243,7 +243,7 @@ void ProgressIndication::writeProgress()
if (width_of_progress_bar > 0)
{
size_t bar_width = UnicodeBar::getWidth(current_count, 0, max_count, width_of_progress_bar);
double bar_width = UnicodeBar::getWidth(current_count, 0, max_count, width_of_progress_bar);
std::string bar = UnicodeBar::render(bar_width);
/// Render profiling_msg at left on top of the progress bar.

View File

@ -170,6 +170,7 @@ class IColumn;
M(Bool, force_index_by_date, false, "Throw an exception if there is a partition key in a table, and it is not used.", 0) \
M(Bool, force_primary_key, false, "Throw an exception if there is primary key in a table, and it is not used.", 0) \
M(Bool, use_skip_indexes, true, "Use data skipping indexes during query execution.", 0) \
M(Bool, use_skip_indexes_if_final, false, "If query has FINAL, then skipping data based on indexes may produce incorrect result, hence disabled by default.", 0) \
M(String, force_data_skipping_indices, "", "Comma separated list of strings or literals with the name of the data skipping indices that should be used during query execution, otherwise an exception will be thrown.", 0) \
\
M(Float, max_streams_to_max_threads_ratio, 1, "Allows you to use more sources than the number of threads - to more evenly distribute work across threads. It is assumed that this is a temporary solution, since it will be possible in the future to make the number of sources equal to the number of threads, but for each source to dynamically select available work for itself.", 0) \

View File

@ -4,6 +4,8 @@
#include <Parsers/Access/ASTShowGrantsQuery.h>
#include <Parsers/formatAST.h>
#include <Access/AccessControl.h>
#include <Access/CachedAccessChecking.h>
#include <Access/ContextAccess.h>
#include <Access/Role.h>
#include <Access/RolesOrUsersSet.h>
#include <Access/User.h>
@ -135,15 +137,25 @@ QueryPipeline InterpreterShowGrantsQuery::executeImpl()
std::vector<AccessEntityPtr> InterpreterShowGrantsQuery::getEntities() const
{
const auto & show_query = query_ptr->as<ASTShowGrantsQuery &>();
const auto & access = getContext()->getAccess();
const auto & access_control = getContext()->getAccessControl();
const auto & show_query = query_ptr->as<ASTShowGrantsQuery &>();
auto ids = RolesOrUsersSet{*show_query.for_roles, access_control, getContext()->getUserID()}.getMatchingIDs(access_control);
CachedAccessChecking show_users(access, AccessType::SHOW_USERS);
CachedAccessChecking show_roles(access, AccessType::SHOW_ROLES);
bool throw_if_access_denied = !show_query.for_roles->all;
std::vector<AccessEntityPtr> entities;
for (const auto & id : ids)
{
auto entity = access_control.tryRead(id);
if (entity)
if (!entity)
continue;
if ((id == access->getUserID() /* Any user can see his own grants */)
|| (entity->isTypeOf<User>() && show_users.checkAccess(throw_if_access_denied))
|| (entity->isTypeOf<Role>() && show_roles.checkAccess(throw_if_access_denied)))
entities.push_back(entity);
}

View File

@ -24,6 +24,16 @@
#include <base/logger_useful.h>
namespace CurrentMetrics
{
extern const Metric PendingAsyncInsert;
}
namespace ProfileEvents
{
extern const Event AsyncInsertQuery;
}
namespace DB
{
@ -223,6 +233,9 @@ void AsynchronousInsertQueue::pushImpl(InsertData::EntryPtr entry, QueueIterator
if (data->size > max_data_size)
scheduleDataProcessingJob(it->first, std::move(data), getContext());
CurrentMetrics::add(CurrentMetrics::PendingAsyncInsert);
ProfileEvents::increment(ProfileEvents::AsyncInsertQuery);
}
void AsynchronousInsertQueue::waitForProcessingQuery(const String & query_id, const Milliseconds & timeout)
@ -437,6 +450,8 @@ try
for (const auto & entry : data->entries)
if (!entry->isFinished())
entry->finish();
CurrentMetrics::sub(CurrentMetrics::PendingAsyncInsert, data->entries.size());
}
catch (const Exception & e)
{

View File

@ -912,6 +912,11 @@ MergeTreeDataSelectAnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
parts_before_pk = parts.size();
auto reader_settings = getMergeTreeReaderSettings(context);
bool use_skip_indexes = context->getSettings().use_skip_indexes;
if (select.final() && !context->getSettings().use_skip_indexes_if_final)
use_skip_indexes = false;
result.parts_with_ranges = MergeTreeDataSelectExecutor::filterPartsByPrimaryKeyAndSkipIndexes(
std::move(parts),
metadata_snapshot,
@ -922,7 +927,7 @@ MergeTreeDataSelectAnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
log,
num_streams,
result.index_stats,
context->getSettings().use_skip_indexes);
use_skip_indexes);
}
catch (...)
{

View File

@ -1392,6 +1392,12 @@ void TCPHandler::receiveQuery()
if (is_interserver_mode)
{
ClientInfo original_session_client_info = session->getClientInfo();
/// Cleanup fields that should not be reused from previous query.
original_session_client_info.current_user.clear();
original_session_client_info.current_query_id.clear();
original_session_client_info.current_address = {};
session = std::make_unique<Session>(server.context(), ClientInfo::Interface::TCP_INTERSERVER);
session->getClientInfo() = original_session_client_info;
}

View File

@ -1199,15 +1199,31 @@ bool ReplicatedMergeTreeQueue::shouldExecuteLogEntry(
return false;
}
if (merge_strategy_picker.shouldMergeOnSingleReplica(entry))
bool should_execute_on_single_replica = merge_strategy_picker.shouldMergeOnSingleReplica(entry);
if (!should_execute_on_single_replica)
{
/// Separate check. If we use only s3, check remote_fs_execute_merges_on_single_replica_time_threshold as well.
auto disks = storage.getDisks();
bool only_s3_storage = true;
for (const auto & disk : disks)
if (disk->getType() != DB::DiskType::S3)
only_s3_storage = false;
if (!disks.empty() && only_s3_storage)
should_execute_on_single_replica = merge_strategy_picker.shouldMergeOnSingleReplicaShared(entry);
}
if (should_execute_on_single_replica)
{
auto replica_to_execute_merge = merge_strategy_picker.pickReplicaToExecuteMerge(entry);
if (replica_to_execute_merge && !merge_strategy_picker.isMergeFinishedByReplica(replica_to_execute_merge.value(), entry))
{
String reason = "Not executing merge for the part " + entry.new_part_name
+ ", waiting for " + replica_to_execute_merge.value() + " to execute merge.";
out_postpone_reason = reason;
out_postpone_reason = fmt::format(
"Not executing merge for the part {}, waiting for {} to execute merge.",
entry.new_part_name, replica_to_execute_merge.value());
LOG_DEBUG(log, fmt::runtime(out_postpone_reason));
return false;
}
}

View File

@ -87,6 +87,17 @@ def get_query_user_info(node, query_pattern):
type = 'QueryFinish'
""".format(query_pattern)).strip().split('\t')
# @return -- [user, initial_user]
def get_query_user_info_by_id(node, query_id):
node.query("SYSTEM FLUSH LOGS")
return node.query("""
SELECT user, initial_user
FROM system.query_log
WHERE
query_id = '{}' AND
type = 'QueryFinish'
""".format(query_id)).strip().split('\t')
# @return -- settings
def get_query_setting_on_shard(node, query_pattern, setting):
node.query("SYSTEM FLUSH LOGS")
@ -183,6 +194,7 @@ def test_secure_insert_buffer_async():
# previous connection that was instantiated with "ro" user (using
# interserver secret)
assert not n1.contains_in_log('{' + query_id + '} <Trace> Connection (n2:9000): Connecting.')
assert get_query_user_info_by_id(n1, query_id) == ['default', 'default']
# And before the bug was fixed this query will fail with the following error:
#
@ -191,6 +203,18 @@ def test_secure_insert_buffer_async():
n1.query('OPTIMIZE TABLE dist_secure_buffer')
n1.query('SYSTEM FLUSH DISTRIBUTED ON CLUSTER secure dist_secure_from_buffer')
# Check user from which the INSERT on the remote node will be executed
#
# Incorrect example:
#
# {2c55669f-71ad-48fe-98fa-7b475b80718e} <Debug> executeQuery: (from 172.16.1.1:44636, user: ro) INSERT INTO default.data_from_buffer (key) VALUES
#
# Correct example:
#
# {2c55669f-71ad-48fe-98fa-7b475b80718e} <Debug> executeQuery: (from 0.0.0.0:0, user: ) INSERT INTO default.data_from_buffer (key) VALUES
#
assert n2.contains_in_log('executeQuery: (from 0.0.0.0:0, user: ) INSERT INTO default.data_from_buffer (key) VALUES')
assert int(n1.query('SELECT count() FROM dist_secure_from_buffer')) == 2
n1.query('TRUNCATE TABLE data_from_buffer ON CLUSTER secure')

View File

@ -250,6 +250,15 @@ def test_introspection():
assert instance.query("SHOW GRANTS", user='A') == TSV(["GRANT SELECT ON test.table TO A"])
assert instance.query("SHOW GRANTS", user='B') == TSV(["GRANT CREATE ON *.* TO B WITH GRANT OPTION"])
assert instance.query("SHOW GRANTS FOR ALL", user='A') == TSV(["GRANT SELECT ON test.table TO A"])
assert instance.query("SHOW GRANTS FOR ALL", user='B') == TSV(["GRANT CREATE ON *.* TO B WITH GRANT OPTION"])
assert instance.query("SHOW GRANTS FOR ALL") == TSV(["GRANT SELECT ON test.table TO A",
"GRANT CREATE ON *.* TO B WITH GRANT OPTION",
"GRANT ALL ON *.* TO default WITH GRANT OPTION"])
expected_error = "necessary to have grant SHOW USERS"
assert expected_error in instance.query_and_get_error("SHOW GRANTS FOR B", user='A')
expected_access1 = "CREATE USER A\n" \
"CREATE USER B\n" \
"CREATE USER default IDENTIFIED WITH plaintext_password SETTINGS PROFILE default"

View File

@ -0,0 +1,5 @@
1 aaa
2 bbb
3 ccc
4 ddd
4 4

View File

@ -0,0 +1,27 @@
DROP TABLE IF EXISTS t_async_insert_02193_1;
CREATE TABLE t_async_insert_02193_1 (id UInt32, s String) ENGINE = Memory;
INSERT INTO t_async_insert_02193_1 FORMAT CSV SETTINGS async_insert = 1
1,aaa
;
INSERT INTO t_async_insert_02193_1 FORMAT Values SETTINGS async_insert = 1 (2, 'bbb');
SET async_insert = 1;
INSERT INTO t_async_insert_02193_1 VALUES (3, 'ccc');
INSERT INTO t_async_insert_02193_1 FORMAT JSONEachRow {"id": 4, "s": "ddd"};
SELECT * FROM t_async_insert_02193_1 ORDER BY id;
SYSTEM FLUSH LOGS;
SELECT count(), sum(ProfileEvents['AsyncInsertQuery']) FROM system.query_log
WHERE
event_date >= yesterday() AND
type = 'QueryFinish' AND
current_database = currentDatabase() AND
query ILIKE 'INSERT INTO t_async_insert_02193_1%';
DROP TABLE IF EXISTS t_async_insert_02193_1;

View File

@ -0,0 +1,4 @@
1 aaa
2 bbb
3 ccc
4 ddd

View File

@ -0,0 +1,21 @@
#!/usr/bin/env bash
# Tags: long
CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh
. "$CUR_DIR"/../shell_config.sh
${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS t_async_insert_02193_2"
${CLICKHOUSE_CLIENT} -q "CREATE TABLE t_async_insert_02193_2 (id UInt32, s String) ENGINE = Memory"
${CLICKHOUSE_CLIENT} -q "INSERT INTO t_async_insert_02193_2 FORMAT CSV SETTINGS async_insert = 1 1,aaa"
${CLICKHOUSE_CLIENT} -q "INSERT INTO t_async_insert_02193_2 FORMAT Values SETTINGS async_insert = 1 (2, 'bbb')"
${CLICKHOUSE_CLIENT} -q "INSERT INTO t_async_insert_02193_2 VALUES (3, 'ccc')"
${CLICKHOUSE_CLIENT} -q 'INSERT INTO t_async_insert_02193_2 FORMAT JSONEachRow {"id": 4, "s": "ddd"}'
${CLICKHOUSE_CLIENT} -q "SELECT * FROM t_async_insert_02193_2 ORDER BY id"
${CLICKHOUSE_CLIENT} -q "TRUNCATE TABLE t_async_insert_02193_2"
${CLICKHOUSE_CLIENT} -q "DROP TABLE IF EXISTS t_async_insert_02193_2"

View File

@ -0,0 +1,4 @@
-- { echoOn }
SELECT * FROM data_02200 WHERE value = 1 SETTINGS use_skip_indexes=1, max_rows_to_read=1;
1 1
SELECT * FROM data_02200 WHERE value = 1 SETTINGS use_skip_indexes=0, max_rows_to_read=1; -- { serverError TOO_MANY_ROWS }

View File

@ -0,0 +1,14 @@
CREATE TABLE data_02200 (
key Int,
value Int,
INDEX idx value TYPE minmax GRANULARITY 1
)
Engine=MergeTree()
ORDER BY key
PARTITION BY key;
INSERT INTO data_02200 SELECT number, number FROM numbers(10);
-- { echoOn }
SELECT * FROM data_02200 WHERE value = 1 SETTINGS use_skip_indexes=1, max_rows_to_read=1;
SELECT * FROM data_02200 WHERE value = 1 SETTINGS use_skip_indexes=0, max_rows_to_read=1; -- { serverError TOO_MANY_ROWS }

View File

@ -0,0 +1,6 @@
-- { echoOn }
SELECT * FROM data_02201 FINAL WHERE value = 1 SETTINGS use_skip_indexes=0, use_skip_indexes_if_final=0, max_rows_to_read=1; -- { serverError TOO_MANY_ROWS }
SELECT * FROM data_02201 FINAL WHERE value = 1 SETTINGS use_skip_indexes=1, use_skip_indexes_if_final=0, max_rows_to_read=1; -- { serverError TOO_MANY_ROWS }
SELECT * FROM data_02201 FINAL WHERE value = 1 SETTINGS use_skip_indexes=0, use_skip_indexes_if_final=1, max_rows_to_read=1; -- { serverError TOO_MANY_ROWS }
SELECT * FROM data_02201 FINAL WHERE value = 1 SETTINGS use_skip_indexes=1, use_skip_indexes_if_final=1, max_rows_to_read=1;
1 1

View File

@ -0,0 +1,16 @@
CREATE TABLE data_02201 (
key Int,
value Int,
INDEX idx value TYPE minmax GRANULARITY 1
)
Engine=AggregatingMergeTree()
ORDER BY key
PARTITION BY key;
INSERT INTO data_02201 SELECT number, number FROM numbers(10);
-- { echoOn }
SELECT * FROM data_02201 FINAL WHERE value = 1 SETTINGS use_skip_indexes=0, use_skip_indexes_if_final=0, max_rows_to_read=1; -- { serverError TOO_MANY_ROWS }
SELECT * FROM data_02201 FINAL WHERE value = 1 SETTINGS use_skip_indexes=1, use_skip_indexes_if_final=0, max_rows_to_read=1; -- { serverError TOO_MANY_ROWS }
SELECT * FROM data_02201 FINAL WHERE value = 1 SETTINGS use_skip_indexes=0, use_skip_indexes_if_final=1, max_rows_to_read=1; -- { serverError TOO_MANY_ROWS }
SELECT * FROM data_02201 FINAL WHERE value = 1 SETTINGS use_skip_indexes=1, use_skip_indexes_if_final=1, max_rows_to_read=1;

View File

@ -0,0 +1,6 @@
-- { echoOn }
SELECT * FROM data_02201 FINAL WHERE value_max = 1 ORDER BY key, value_max SETTINGS use_skip_indexes=1, use_skip_indexes_if_final=0;
0 1
SELECT * FROM data_02201 FINAL WHERE value_max = 1 ORDER BY key, value_max SETTINGS use_skip_indexes=1, use_skip_indexes_if_final=1;
0 1
1 1

View File

@ -0,0 +1,19 @@
-- This tests will show the difference in data with use_skip_indexes_if_final and w/o
CREATE TABLE data_02201 (
key Int,
value_max SimpleAggregateFunction(max, Int),
INDEX idx value_max TYPE minmax GRANULARITY 1
)
Engine=AggregatingMergeTree()
ORDER BY key
PARTITION BY key;
SYSTEM STOP MERGES data_02201;
INSERT INTO data_02201 SELECT number, number FROM numbers(10);
INSERT INTO data_02201 SELECT number, number+1 FROM numbers(10);
-- { echoOn }
SELECT * FROM data_02201 FINAL WHERE value_max = 1 ORDER BY key, value_max SETTINGS use_skip_indexes=1, use_skip_indexes_if_final=0;
SELECT * FROM data_02201 FINAL WHERE value_max = 1 ORDER BY key, value_max SETTINGS use_skip_indexes=1, use_skip_indexes_if_final=1;

View File

@ -0,0 +1,3 @@
#!/usr/bin/clickhouse-local --queries-file
SELECT 1;

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh
. "$CUR_DIR"/../shell_config.sh
sed -i.bak "s!/usr/bin/clickhouse-local!$(command -v ${CLICKHOUSE_LOCAL})!" "${CUR_DIR}/02203_shebang"
"${CUR_DIR}/02203_shebang"

View File

@ -0,0 +1,20 @@
#!/usr/bin/expect -f
# Tags: no-fasttest
log_user 0
set timeout 60
match_max 100000
spawn clickhouse-local --progress --query "SELECT sum(number % 100000000 = 12345678 ? sleep(0.1) : 1) FROM numbers(1000000000)"
expect {
"▏" { exit 0 }
"▎" { exit 0 }
"▍" { exit 0 }
"▌" { exit 0 }
"▋" { exit 0 }
"▋" { exit 0 }
"▊" { exit 0 }
"▉" { exit 0 }
timeout { exit 1 }
}

View File

@ -1,3 +1,5 @@
#!/bin/bash
git tag --list | grep -P 'v.+-(stable|lts)' | sort -V | xargs git show --format='%ai' | awk '/^v/ { version = $1 } /^[0-9]+/ { if (version) { date = $1 } } { if (version && date) { print version "\t" date; version = ""; date = ""; } }' | tac
# refname:strip=2: default tag name when format is not set
# creatordate is always defined for all tags
git tag --list 'v*-lts' 'v*-stable' --format='%(refname:short) %(creatordate:short)' | sort -rV

View File

@ -1,56 +1,87 @@
v21.9.4.35-stable 2021-09-22
v21.9.3.30-stable 2021-09-16
v22.1.3.7-stable 2022-01-23
v22.1.2.2-stable 2022-01-19
v21.12.4.1-stable 2022-01-23
v21.12.3.32-stable 2021-12-27
v21.12.2.17-stable 2021-12-16
v21.11.11.1-stable 2022-01-23
v21.11.10.1-stable 2022-01-12
v21.11.9.1-stable 2021-12-27
v21.11.8.4-stable 2021-12-22
v21.11.7.9-stable 2021-12-15
v21.11.6.7-stable 2021-12-10
v21.11.5.33-stable 2021-12-02
v21.11.4.14-stable 2021-11-17
v21.11.3.6-stable 2021-11-11
v21.11.2.2-stable 2021-11-09
v21.10.6.2-stable 2022-01-24
v21.10.5.3-stable 2021-12-10
v21.10.4.26-stable 2021-12-02
v21.10.3.9-stable 2021-11-17
v21.10.2.15-stable 2021-10-18
v21.9.6.24-stable 2021-12-02
v21.9.5.16-stable 2021-10-19
v21.9.4.35-stable 2021-09-24
v21.9.3.30-stable 2021-09-17
v21.9.2.17-stable 2021-09-09
v21.8.8.29-lts 2021-09-28
v21.8.7.22-lts 2021-09-22
v21.8.6.15-lts 2021-09-16
v21.8.14.5-lts 2022-01-26
v21.8.13.6-lts 2021-12-27
v21.8.12.29-lts 2021-12-02
v21.8.11.4-lts 2021-11-17
v21.8.10.19-lts 2021-10-21
v21.8.9.13-lts 2021-10-19
v21.8.8.29-lts 2021-09-29
v21.8.7.22-lts 2021-09-24
v21.8.6.15-lts 2021-09-17
v21.8.5.7-lts 2021-09-02
v21.8.4.51-lts 2021-08-17
v21.8.4.51-lts 2021-08-18
v21.8.3.44-lts 2021-08-12
v21.7.11.3-stable 2021-09-23
v21.7.10.4-stable 2021-09-16
v21.7.11.3-stable 2021-09-24
v21.7.10.4-stable 2021-09-18
v21.7.9.7-stable 2021-09-02
v21.7.8.58-stable 2021-08-17
v21.7.7.47-stable 2021-08-09
v21.7.8.58-stable 2021-08-18
v21.7.7.47-stable 2021-08-10
v21.7.6.39-stable 2021-08-06
v21.7.5.29-stable 2021-07-28
v21.7.4.18-stable 2021-07-17
v21.7.3.14-stable 2021-07-13
v21.7.5.29-stable 2021-07-29
v21.7.4.18-stable 2021-07-19
v21.7.3.14-stable 2021-07-14
v21.7.2.7-stable 2021-07-09
v21.6.9.7-stable 2021-09-02
v21.6.8.62-stable 2021-07-13
v21.6.7.57-stable 2021-07-09
v21.6.6.51-stable 2021-07-02
v21.6.9.7-stable 2021-09-03
v21.6.8.62-stable 2021-07-16
v21.6.7.57-stable 2021-07-10
v21.6.6.51-stable 2021-07-04
v21.6.5.37-stable 2021-06-19
v21.6.4.26-stable 2021-06-11
v21.6.3.14-stable 2021-06-04
v21.6.3.14-stable 2021-06-05
v21.5.9.4-stable 2021-07-10
v21.5.8.21-stable 2021-07-02
v21.5.7.9-stable 2021-06-22
v21.5.6.6-stable 2021-05-29
v21.5.8.21-stable 2021-07-04
v21.5.7.9-stable 2021-06-23
v21.5.6.6-stable 2021-05-30
v21.5.5.12-stable 2021-05-20
v21.4.7.3-stable 2021-05-19
v21.4.6.55-stable 2021-04-30
v21.4.7.3-stable 2021-05-20
v21.4.6.55-stable 2021-05-01
v21.4.5.46-stable 2021-04-24
v21.4.4.30-stable 2021-04-16
v21.4.3.21-stable 2021-04-12
v21.3.17.2-lts 2021-09-16
v21.3.16.5-lts 2021-09-03
v21.3.20.1-lts 2022-01-26
v21.3.19.1-lts 2021-12-10
v21.3.18.4-lts 2021-10-21
v21.3.17.2-lts 2021-09-17
v21.3.16.5-lts 2021-09-04
v21.3.15.4-stable 2021-07-10
v21.3.14.1-lts 2021-07-01
v21.3.13.9-lts 2021-06-22
v21.3.12.2-lts 2021-05-25
v21.3.11.5-lts 2021-05-14
v21.3.10.1-lts 2021-05-09
v21.3.9.83-lts 2021-04-28
v21.3.14.1-lts 2021-07-04
v21.3.13.9-lts 2021-06-23
v21.3.12.2-lts 2021-05-26
v21.3.11.5-lts 2021-05-16
v21.3.10.1-lts 2021-05-10
v21.3.9.83-lts 2021-05-01
v21.3.8.76-lts 2021-04-24
v21.3.7.62-stable 2021-04-16
v21.3.7.62-stable 2021-04-17
v21.3.6.55-lts 2021-04-12
v21.3.5.42-lts 2021-04-07
v21.3.4.25-lts 2021-03-28
v21.3.3.14-lts 2021-03-19
v21.3.2.5-lts 2021-03-12
v21.2.10.48-stable 2021-04-16
v21.2.10.48-stable 2021-04-17
v21.2.9.41-stable 2021-04-12
v21.2.8.31-stable 2021-04-07
v21.2.7.11-stable 2021-03-28
@ -93,8 +124,8 @@ v20.9.5.5-stable 2020-11-13
v20.9.4.76-stable 2020-10-29
v20.9.3.45-stable 2020-10-09
v20.9.2.20-stable 2020-09-22
v20.8.19.4-stable 2021-07-10
v20.8.18.32-lts 2021-04-16
v20.8.19.4-stable 2021-07-11
v20.8.18.32-lts 2021-04-17
v20.8.17.25-lts 2021-04-08
v20.8.16.20-lts 2021-04-06
v20.8.15.11-lts 2021-04-01
@ -239,97 +270,104 @@ v19.9.2.4-stable 2019-06-24
v19.8.3.8-stable 2019-06-11
v19.7.5.29-stable 2019-07-05
v19.7.5.27-stable 2019-06-09
v19.7.3.9-stable 2019-05-05
v19.7.3.9-stable 2019-05-27
v19.6.3.18-stable 2019-06-15
v19.6.2.11-stable 2019-04-30
v19.5.4.22-stable 2019-04-30
v19.5.3.8-stable 2019-04-17
v19.6.2.11-stable 2019-05-14
v19.5.4.22-stable 2019-05-13
v19.5.3.8-stable 2019-04-18
v19.5.2.6-stable 2019-04-15
v19.4.5.35-stable 2019-05-05
v19.4.4.33-stable 2019-04-16
v19.4.3.11-stable 2019-04-01
v19.4.2.7-stable 2019-03-29
v19.4.5.35-stable 2019-05-13
v19.4.4.33-stable 2019-04-17
v19.4.3.11-stable 2019-04-02
v19.4.2.7-stable 2019-03-30
v19.4.1.3-stable 2019-03-19
v19.4.0.49-stable 2019-03-09
v19.3.9.12-stable 2019-04-01
v19.3.8.6-stable 2019-03-04
v19.3.7-stable 2019-03-11
v19.3.9.12-stable 2019-04-02
v19.3.8.6-stable 2019-03-19
v19.3.7-stable 2019-03-12
v19.3.6-stable 2019-03-02
v19.3.5-stable 2019-02-20
v19.3.4-stable 2019-02-15
v19.3.5-stable 2019-02-21
v19.3.4-stable 2019-02-16
v19.3.3-stable 2019-02-13
v19.1.16.79-stable 2019-03-22
v19.1.15.73-stable 2019-03-04
v19.1.16.79-stable 2019-04-02
v19.1.15.73-stable 2019-03-19
v19.1.14-stable 2019-03-14
v19.1.13-stable 2019-03-12
v19.1.10-stable 2019-03-03
v19.1.9-stable 2019-02-20
v19.1.8-stable 2019-02-15
v19.1.7-stable 2019-02-13
v19.1.9-stable 2019-02-21
v19.1.8-stable 2019-02-16
v19.1.7-stable 2019-02-15
v19.1.6-stable 2019-01-24
v19.1.5-stable 2019-01-22
v18.16.1-stable 2018-12-20
v18.16.0-stable 2018-12-14
v19.1.5-stable 2019-01-23
v18.16.1-stable 2018-12-21
v18.16.0-stable 2018-12-15
v18.14.19-stable 2018-12-19
v18.14.18-stable 2018-12-04
v18.14.17-stable 2018-11-29
v18.14.17-stable 2018-11-30
v18.14.15-stable 2018-11-21
v18.14.14-stable 2018-11-20
v18.14.13-stable 2018-11-07
v18.14.12-stable 2018-11-01
v18.14.11-stable 2018-10-26
v18.14.10-stable 2018-10-23
v18.14.14-stable 2018-11-21
v18.14.13-stable 2018-11-08
v18.14.12-stable 2018-11-02
v18.14.11-stable 2018-10-29
v18.14.10-stable 2018-10-24
v18.14.9-stable 2018-10-16
v18.14.8-stable 2018-10-13
v18.12.17-stable 2018-09-16
v18.12.14-stable 2018-09-13
v18.12.13-stable 2018-09-10
v1.1.54390-stable 2018-07-06
v1.1.54388-stable 2018-06-27
v18.12.13-stable 2018-09-11
v18.10.3-stable 2018-08-13
v18.6.0-stable 2018-08-01
v18.5.1-stable 2018-07-31
v18.4.0-stable 2018-07-28
v18.1.0-stable 2018-07-20
v1.1.54394-stable 2018-07-12
v1.1.54390-stable 2018-07-09
v1.1.54388-stable 2018-06-28
v1.1.54385-stable 2018-06-01
v1.1.54383-stable 2018-05-18
v1.1.54381-stable 2018-04-26
v1.1.54380-stable 2018-04-20
v1.1.54378-stable 2018-04-13
v1.1.54383-stable 2018-05-22
v1.1.54381-stable 2018-05-14
v1.1.54380-stable 2018-04-21
v1.1.54378-stable 2018-04-16
v1.1.54370-stable 2018-03-16
v1.1.54362-stable 2018-03-10
v1.1.54362-stable 2018-03-11
v1.1.54358-stable 2018-03-08
v1.1.54343-stable 2018-01-24
v1.1.54343-stable 2018-02-08
v1.1.54342-stable 2018-01-22
v1.1.54337-stable 2018-01-17
v1.1.54336-stable 2018-01-16
v1.1.54335-stable 2018-01-16
v1.1.54327-stable 2017-12-20
v1.1.54318-stable 2017-11-30
v1.1.54337-stable 2018-01-18
v1.1.54336-stable 2018-01-17
v1.1.54335-stable 2018-01-17
v1.1.54327-stable 2017-12-21
v1.1.54318-stable 2017-12-01
v1.1.54310-stable 2017-11-01
v1.1.54304-stable 2017-10-19
v1.1.54292-stable 2017-09-20
v1.1.54289-stable 2017-09-13
v1.1.54284-stable 2017-08-29
v1.1.54304-stable 2017-10-24
v1.1.54292-stable 2017-09-27
v1.1.54289-stable 2017-09-14
v1.1.54284-stable 2017-08-30
v1.1.54282-stable 2017-08-23
v1.1.54276-stable 2017-08-16
v1.1.54245-stable 2017-07-04
v1.1.54242-stable 2017-06-26
v1.1.54236-stable 2017-05-23
v1.1.54231-stable 2017-04-29
v1.1.54198-stable 2017-03-28
v1.1.54190-stable 2017-03-21
v1.1.54245-stable 2017-07-05
v1.1.54242-stable 2017-06-27
v1.1.54236-stable 2017-05-25
v1.1.54231-stable 2017-05-15
v1.1.54198-stable 2017-03-29
v1.1.54190-stable 2017-03-22
v1.1.54188-stable 2017-03-17
v1.1.54181-stable 2017-03-09
v1.1.54165-stable 2017-02-14
v1.1.54159-stable 2017-02-03
v1.1.54144-stable 2017-01-31
v1.1.54181-stable 2017-03-11
v1.1.54165-stable 2017-02-15
v1.1.54159-stable 2017-02-07
v1.1.54144-stable 2017-02-01
v1.1.54135-stable 2017-01-20
v1.1.54134-stable 2017-01-14
v1.1.54133-stable 2017-01-12
v1.1.54127-stable 2016-12-22
v1.1.54112-stable 2016-12-08
v1.1.54083-stable 2016-11-28
v1.1.54134-stable 2017-01-16
v1.1.54133-stable 2017-01-13
v1.1.54127-stable 2016-12-23
v1.1.54112-stable 2016-12-13
v1.1.54083-stable 2016-12-01
v1.1.54080-stable 2016-11-25
v1.1.54074-stable 2016-11-23
v1.1.54046-stable 2016-10-27
v1.1.54030-stable 2016-10-24
v1.1.54023-stable 2016-10-07
v1.1.54022-stable 2016-09-26
v1.1.54020-stable 2016-09-19
v1.1.54019-stable 2016-09-07
v1.1.54074-stable 2016-11-24
v1.1.54046-stable 2016-11-08
v1.1.54030-stable 2016-10-25
v1.1.54023-stable 2016-10-10
v1.1.54022-stable 2016-09-28
v1.1.54020-stable 2016-09-21
v1.1.54019-stable 2016-09-14
v1.1.54011-stable 2016-08-18

1 v21.9.4.35-stable v22.1.3.7-stable 2021-09-22 2022-01-23
2 v21.9.3.30-stable v22.1.2.2-stable 2021-09-16 2022-01-19
3 v21.12.4.1-stable 2022-01-23
4 v21.12.3.32-stable 2021-12-27
5 v21.12.2.17-stable 2021-12-16
6 v21.11.11.1-stable 2022-01-23
7 v21.11.10.1-stable 2022-01-12
8 v21.11.9.1-stable 2021-12-27
9 v21.11.8.4-stable 2021-12-22
10 v21.11.7.9-stable 2021-12-15
11 v21.11.6.7-stable 2021-12-10
12 v21.11.5.33-stable 2021-12-02
13 v21.11.4.14-stable 2021-11-17
14 v21.11.3.6-stable 2021-11-11
15 v21.11.2.2-stable 2021-11-09
16 v21.10.6.2-stable 2022-01-24
17 v21.10.5.3-stable 2021-12-10
18 v21.10.4.26-stable 2021-12-02
19 v21.10.3.9-stable 2021-11-17
20 v21.10.2.15-stable 2021-10-18
21 v21.9.6.24-stable 2021-12-02
22 v21.9.5.16-stable 2021-10-19
23 v21.9.4.35-stable 2021-09-24
24 v21.9.3.30-stable 2021-09-17
25 v21.9.2.17-stable v21.9.2.17-stable 2021-09-09 2021-09-09
26 v21.8.8.29-lts v21.8.14.5-lts 2021-09-28 2022-01-26
27 v21.8.7.22-lts v21.8.13.6-lts 2021-09-22 2021-12-27
28 v21.8.6.15-lts v21.8.12.29-lts 2021-09-16 2021-12-02
29 v21.8.11.4-lts 2021-11-17
30 v21.8.10.19-lts 2021-10-21
31 v21.8.9.13-lts 2021-10-19
32 v21.8.8.29-lts 2021-09-29
33 v21.8.7.22-lts 2021-09-24
34 v21.8.6.15-lts 2021-09-17
35 v21.8.5.7-lts v21.8.5.7-lts 2021-09-02 2021-09-02
36 v21.8.4.51-lts v21.8.4.51-lts 2021-08-17 2021-08-18
37 v21.8.3.44-lts v21.8.3.44-lts 2021-08-12 2021-08-12
38 v21.7.11.3-stable v21.7.11.3-stable 2021-09-23 2021-09-24
39 v21.7.10.4-stable v21.7.10.4-stable 2021-09-16 2021-09-18
40 v21.7.9.7-stable v21.7.9.7-stable 2021-09-02 2021-09-02
41 v21.7.8.58-stable v21.7.8.58-stable 2021-08-17 2021-08-18
42 v21.7.7.47-stable v21.7.7.47-stable 2021-08-09 2021-08-10
43 v21.7.6.39-stable v21.7.6.39-stable 2021-08-06 2021-08-06
44 v21.7.5.29-stable v21.7.5.29-stable 2021-07-28 2021-07-29
45 v21.7.4.18-stable v21.7.4.18-stable 2021-07-17 2021-07-19
46 v21.7.3.14-stable v21.7.3.14-stable 2021-07-13 2021-07-14
47 v21.7.2.7-stable v21.7.2.7-stable 2021-07-09 2021-07-09
48 v21.6.9.7-stable v21.6.9.7-stable 2021-09-02 2021-09-03
49 v21.6.8.62-stable v21.6.8.62-stable 2021-07-13 2021-07-16
50 v21.6.7.57-stable v21.6.7.57-stable 2021-07-09 2021-07-10
51 v21.6.6.51-stable v21.6.6.51-stable 2021-07-02 2021-07-04
52 v21.6.5.37-stable v21.6.5.37-stable 2021-06-19 2021-06-19
53 v21.6.4.26-stable v21.6.4.26-stable 2021-06-11 2021-06-11
54 v21.6.3.14-stable v21.6.3.14-stable 2021-06-04 2021-06-05
55 v21.5.9.4-stable v21.5.9.4-stable 2021-07-10 2021-07-10
56 v21.5.8.21-stable v21.5.8.21-stable 2021-07-02 2021-07-04
57 v21.5.7.9-stable v21.5.7.9-stable 2021-06-22 2021-06-23
58 v21.5.6.6-stable v21.5.6.6-stable 2021-05-29 2021-05-30
59 v21.5.5.12-stable v21.5.5.12-stable 2021-05-20 2021-05-20
60 v21.4.7.3-stable v21.4.7.3-stable 2021-05-19 2021-05-20
61 v21.4.6.55-stable v21.4.6.55-stable 2021-04-30 2021-05-01
62 v21.4.5.46-stable v21.4.5.46-stable 2021-04-24 2021-04-24
63 v21.4.4.30-stable v21.4.4.30-stable 2021-04-16 2021-04-16
64 v21.4.3.21-stable v21.4.3.21-stable 2021-04-12 2021-04-12
65 v21.3.17.2-lts v21.3.20.1-lts 2021-09-16 2022-01-26
66 v21.3.16.5-lts v21.3.19.1-lts 2021-09-03 2021-12-10
67 v21.3.18.4-lts 2021-10-21
68 v21.3.17.2-lts 2021-09-17
69 v21.3.16.5-lts 2021-09-04
70 v21.3.15.4-stable v21.3.15.4-stable 2021-07-10 2021-07-10
71 v21.3.14.1-lts v21.3.14.1-lts 2021-07-01 2021-07-04
72 v21.3.13.9-lts v21.3.13.9-lts 2021-06-22 2021-06-23
73 v21.3.12.2-lts v21.3.12.2-lts 2021-05-25 2021-05-26
74 v21.3.11.5-lts v21.3.11.5-lts 2021-05-14 2021-05-16
75 v21.3.10.1-lts v21.3.10.1-lts 2021-05-09 2021-05-10
76 v21.3.9.83-lts v21.3.9.83-lts 2021-04-28 2021-05-01
77 v21.3.8.76-lts v21.3.8.76-lts 2021-04-24 2021-04-24
78 v21.3.7.62-stable v21.3.7.62-stable 2021-04-16 2021-04-17
79 v21.3.6.55-lts v21.3.6.55-lts 2021-04-12 2021-04-12
80 v21.3.5.42-lts v21.3.5.42-lts 2021-04-07 2021-04-07
81 v21.3.4.25-lts v21.3.4.25-lts 2021-03-28 2021-03-28
82 v21.3.3.14-lts v21.3.3.14-lts 2021-03-19 2021-03-19
83 v21.3.2.5-lts v21.3.2.5-lts 2021-03-12 2021-03-12
84 v21.2.10.48-stable v21.2.10.48-stable 2021-04-16 2021-04-17
85 v21.2.9.41-stable v21.2.9.41-stable 2021-04-12 2021-04-12
86 v21.2.8.31-stable v21.2.8.31-stable 2021-04-07 2021-04-07
87 v21.2.7.11-stable v21.2.7.11-stable 2021-03-28 2021-03-28
124 v20.9.4.76-stable v20.9.4.76-stable 2020-10-29 2020-10-29
125 v20.9.3.45-stable v20.9.3.45-stable 2020-10-09 2020-10-09
126 v20.9.2.20-stable v20.9.2.20-stable 2020-09-22 2020-09-22
127 v20.8.19.4-stable v20.8.19.4-stable 2021-07-10 2021-07-11
128 v20.8.18.32-lts v20.8.18.32-lts 2021-04-16 2021-04-17
129 v20.8.17.25-lts v20.8.17.25-lts 2021-04-08 2021-04-08
130 v20.8.16.20-lts v20.8.16.20-lts 2021-04-06 2021-04-06
131 v20.8.15.11-lts v20.8.15.11-lts 2021-04-01 2021-04-01
270 v19.8.3.8-stable v19.8.3.8-stable 2019-06-11 2019-06-11
271 v19.7.5.29-stable v19.7.5.29-stable 2019-07-05 2019-07-05
272 v19.7.5.27-stable v19.7.5.27-stable 2019-06-09 2019-06-09
273 v19.7.3.9-stable v19.7.3.9-stable 2019-05-05 2019-05-27
274 v19.6.3.18-stable v19.6.3.18-stable 2019-06-15 2019-06-15
275 v19.6.2.11-stable v19.6.2.11-stable 2019-04-30 2019-05-14
276 v19.5.4.22-stable v19.5.4.22-stable 2019-04-30 2019-05-13
277 v19.5.3.8-stable v19.5.3.8-stable 2019-04-17 2019-04-18
278 v19.5.2.6-stable v19.5.2.6-stable 2019-04-15 2019-04-15
279 v19.4.5.35-stable v19.4.5.35-stable 2019-05-05 2019-05-13
280 v19.4.4.33-stable v19.4.4.33-stable 2019-04-16 2019-04-17
281 v19.4.3.11-stable v19.4.3.11-stable 2019-04-01 2019-04-02
282 v19.4.2.7-stable v19.4.2.7-stable 2019-03-29 2019-03-30
283 v19.4.1.3-stable v19.4.1.3-stable 2019-03-19 2019-03-19
284 v19.4.0.49-stable v19.4.0.49-stable 2019-03-09 2019-03-09
285 v19.3.9.12-stable v19.3.9.12-stable 2019-04-01 2019-04-02
286 v19.3.8.6-stable v19.3.8.6-stable 2019-03-04 2019-03-19
287 v19.3.7-stable v19.3.7-stable 2019-03-11 2019-03-12
288 v19.3.6-stable v19.3.6-stable 2019-03-02 2019-03-02
289 v19.3.5-stable v19.3.5-stable 2019-02-20 2019-02-21
290 v19.3.4-stable v19.3.4-stable 2019-02-15 2019-02-16
291 v19.3.3-stable v19.3.3-stable 2019-02-13 2019-02-13
292 v19.1.16.79-stable v19.1.16.79-stable 2019-03-22 2019-04-02
293 v19.1.15.73-stable v19.1.15.73-stable 2019-03-04 2019-03-19
294 v19.1.14-stable v19.1.14-stable 2019-03-14 2019-03-14
295 v19.1.13-stable v19.1.13-stable 2019-03-12 2019-03-12
296 v19.1.10-stable v19.1.10-stable 2019-03-03 2019-03-03
297 v19.1.9-stable v19.1.9-stable 2019-02-20 2019-02-21
298 v19.1.8-stable v19.1.8-stable 2019-02-15 2019-02-16
299 v19.1.7-stable v19.1.7-stable 2019-02-13 2019-02-15
300 v19.1.6-stable v19.1.6-stable 2019-01-24 2019-01-24
301 v19.1.5-stable v19.1.5-stable 2019-01-22 2019-01-23
302 v18.16.1-stable v18.16.1-stable 2018-12-20 2018-12-21
303 v18.16.0-stable v18.16.0-stable 2018-12-14 2018-12-15
304 v18.14.19-stable v18.14.19-stable 2018-12-19 2018-12-19
305 v18.14.18-stable v18.14.18-stable 2018-12-04 2018-12-04
306 v18.14.17-stable v18.14.17-stable 2018-11-29 2018-11-30
307 v18.14.15-stable v18.14.15-stable 2018-11-21 2018-11-21
308 v18.14.14-stable v18.14.14-stable 2018-11-20 2018-11-21
309 v18.14.13-stable v18.14.13-stable 2018-11-07 2018-11-08
310 v18.14.12-stable v18.14.12-stable 2018-11-01 2018-11-02
311 v18.14.11-stable v18.14.11-stable 2018-10-26 2018-10-29
312 v18.14.10-stable v18.14.10-stable 2018-10-23 2018-10-24
313 v18.14.9-stable v18.14.9-stable 2018-10-16 2018-10-16
314 v18.14.8-stable v18.14.8-stable 2018-10-13 2018-10-13
315 v18.12.17-stable v18.12.17-stable 2018-09-16 2018-09-16
316 v18.12.14-stable v18.12.14-stable 2018-09-13 2018-09-13
317 v18.12.13-stable v18.12.13-stable 2018-09-10 2018-09-11
318 v1.1.54390-stable v18.10.3-stable 2018-07-06 2018-08-13
319 v1.1.54388-stable v18.6.0-stable 2018-06-27 2018-08-01
320 v18.5.1-stable 2018-07-31
321 v18.4.0-stable 2018-07-28
322 v18.1.0-stable 2018-07-20
323 v1.1.54394-stable 2018-07-12
324 v1.1.54390-stable 2018-07-09
325 v1.1.54388-stable 2018-06-28
326 v1.1.54385-stable v1.1.54385-stable 2018-06-01 2018-06-01
327 v1.1.54383-stable v1.1.54383-stable 2018-05-18 2018-05-22
328 v1.1.54381-stable v1.1.54381-stable 2018-04-26 2018-05-14
329 v1.1.54380-stable v1.1.54380-stable 2018-04-20 2018-04-21
330 v1.1.54378-stable v1.1.54378-stable 2018-04-13 2018-04-16
331 v1.1.54370-stable v1.1.54370-stable 2018-03-16 2018-03-16
332 v1.1.54362-stable v1.1.54362-stable 2018-03-10 2018-03-11
333 v1.1.54358-stable v1.1.54358-stable 2018-03-08 2018-03-08
334 v1.1.54343-stable v1.1.54343-stable 2018-01-24 2018-02-08
335 v1.1.54342-stable v1.1.54342-stable 2018-01-22 2018-01-22
336 v1.1.54337-stable v1.1.54337-stable 2018-01-17 2018-01-18
337 v1.1.54336-stable v1.1.54336-stable 2018-01-16 2018-01-17
338 v1.1.54335-stable v1.1.54335-stable 2018-01-16 2018-01-17
339 v1.1.54327-stable v1.1.54327-stable 2017-12-20 2017-12-21
340 v1.1.54318-stable v1.1.54318-stable 2017-11-30 2017-12-01
341 v1.1.54310-stable v1.1.54310-stable 2017-11-01 2017-11-01
342 v1.1.54304-stable v1.1.54304-stable 2017-10-19 2017-10-24
343 v1.1.54292-stable v1.1.54292-stable 2017-09-20 2017-09-27
344 v1.1.54289-stable v1.1.54289-stable 2017-09-13 2017-09-14
345 v1.1.54284-stable v1.1.54284-stable 2017-08-29 2017-08-30
346 v1.1.54282-stable v1.1.54282-stable 2017-08-23 2017-08-23
347 v1.1.54276-stable v1.1.54276-stable 2017-08-16 2017-08-16
348 v1.1.54245-stable v1.1.54245-stable 2017-07-04 2017-07-05
349 v1.1.54242-stable v1.1.54242-stable 2017-06-26 2017-06-27
350 v1.1.54236-stable v1.1.54236-stable 2017-05-23 2017-05-25
351 v1.1.54231-stable v1.1.54231-stable 2017-04-29 2017-05-15
352 v1.1.54198-stable v1.1.54198-stable 2017-03-28 2017-03-29
353 v1.1.54190-stable v1.1.54190-stable 2017-03-21 2017-03-22
354 v1.1.54188-stable v1.1.54188-stable 2017-03-17 2017-03-17
355 v1.1.54181-stable v1.1.54181-stable 2017-03-09 2017-03-11
356 v1.1.54165-stable v1.1.54165-stable 2017-02-14 2017-02-15
357 v1.1.54159-stable v1.1.54159-stable 2017-02-03 2017-02-07
358 v1.1.54144-stable v1.1.54144-stable 2017-01-31 2017-02-01
359 v1.1.54135-stable v1.1.54135-stable 2017-01-20 2017-01-20
360 v1.1.54134-stable v1.1.54134-stable 2017-01-14 2017-01-16
361 v1.1.54133-stable v1.1.54133-stable 2017-01-12 2017-01-13
362 v1.1.54127-stable v1.1.54127-stable 2016-12-22 2016-12-23
363 v1.1.54112-stable v1.1.54112-stable 2016-12-08 2016-12-13
364 v1.1.54083-stable v1.1.54083-stable 2016-11-28 2016-12-01
365 v1.1.54080-stable v1.1.54080-stable 2016-11-25 2016-11-25
366 v1.1.54074-stable v1.1.54074-stable 2016-11-23 2016-11-24
367 v1.1.54046-stable v1.1.54046-stable 2016-10-27 2016-11-08
368 v1.1.54030-stable v1.1.54030-stable 2016-10-24 2016-10-25
369 v1.1.54023-stable v1.1.54023-stable 2016-10-07 2016-10-10
370 v1.1.54022-stable v1.1.54022-stable 2016-09-26 2016-09-28
371 v1.1.54020-stable v1.1.54020-stable 2016-09-19 2016-09-21
372 v1.1.54019-stable v1.1.54019-stable 2016-09-07 2016-09-14
373 v1.1.54011-stable 2016-08-18

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -9,6 +9,19 @@
<div class="row mb-8">
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
<a href="https://www.linkedin.com/in/manas-alekar-42b6a62a/" target="_blank" class="photo-frame mx-auto" rel="external nofollow">
<img src="/images/photos/manas-alekar.jpg">
</a>
<h3 class="display-4">
{{ _('Manas Alekar') }}
</h3>
<p class="font-lg text-muted mb-0 mx-auto w-75">
{{ _('Senior Cloud SWE') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
<a href="https://github.com/vitlibar" target="_blank" class="photo-frame mx-auto" rel="external nofollow">
<img src="/images/photos/vitaly-baranov.jpg">
</a>
@ -43,7 +56,7 @@
{{ _('Ivan Blinkov') }}
</h3>
<p class="font-lg text-muted mb-0 mx-auto w-75">
{{ _('VP, Product') }}
{{ _('VP, Technical Program Management') }}
</p>
</div>
@ -99,6 +112,19 @@
{{ _('Software Engineer') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
<a href="https://www.linkedin.com/in/martincholuj/" target="_blank" class="photo-frame mx-auto" rel="external nofollow">
<img src="/images/photos/martin-choluj.jpg">
</a>
<h3 class="display-4">
{{ _('Martin Choluj') }}
</h3>
<p class="font-lg text-muted mb-0 mx-auto w-75">
{{ _('Vice President, Security') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
@ -125,6 +151,19 @@
{{ _('Core SWE') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
<a href="https://www.linkedin.com/in/artur-filatenkov-5a51a8217/" target="_blank" class="photo-frame mx-auto" rel="external nofollow">
<img src="/images/photos/artur-filatenkov.jpg">
</a>
<h3 class="display-4">
{{ _('Artur Filatenkov') }}
</h3>
<p class="font-lg text-muted mb-0 mx-auto w-75">
{{ _('Associate Core Software Engineer') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
@ -138,6 +177,19 @@
{{ _('Senior Director, Business Technology') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
<div class="photo-frame mx-auto">
<img src="/images/photos/mikhail-fursov.jpg">
</div>
<h3 class="display-4">
{{ _('Mikhail Fursov') }}
</h3>
<p class="font-lg text-muted mb-0 mx-auto w-75">
{{ _('Principal UX/UI Engineer') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
@ -437,6 +489,19 @@
{{ _('Director, Global Learning') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
<a href="https://www.linkedin.com/in/rodriguezmarcelo/" target="_blank" class="photo-frame mx-auto" rel="external nofollow">
<img src="/images/photos/marcelo-rodriguez.jpg">
</a>
<h3 class="display-4">
{{ _('Marcelo Rodriguez') }}
</h3>
<p class="font-lg text-muted mb-0 mx-auto w-75">
{{ _('Sr Support Engineer') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
@ -476,6 +541,19 @@
{{ _('Site Reliability Engineer') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">
<a href="https://www.linkedin.com/in/bastian-spanneberg/" target="_blank" class="photo-frame mx-auto" rel="external nofollow">
<img src="/images/photos/bastian-spanneberg.jpg">
</a>
<h3 class="display-4">
{{ _('Bastian Spanneberg') }}
</h3>
<p class="font-lg text-muted mb-0 mx-auto w-75">
{{ _('Site Reliability Engineer') }}
</p>
</div>
<div class="col-xl-3 col-lg-4 col-md-6 mb-3 mb-md-8 text-center">