mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Merge branch 'master' into pr-fix-concurrent-call-source-work
This commit is contained in:
commit
9b1e1b7ae9
@ -37,7 +37,6 @@ Checks: [
|
|||||||
'-cert-oop54-cpp',
|
'-cert-oop54-cpp',
|
||||||
'-cert-oop57-cpp',
|
'-cert-oop57-cpp',
|
||||||
|
|
||||||
'-clang-analyzer-optin.core.EnumCastOutOfRange', # https://github.com/abseil/abseil-cpp/issues/1667
|
|
||||||
'-clang-analyzer-optin.performance.Padding',
|
'-clang-analyzer-optin.performance.Padding',
|
||||||
|
|
||||||
'-clang-analyzer-unix.Malloc',
|
'-clang-analyzer-unix.Malloc',
|
||||||
|
@ -19,3 +19,7 @@ charset = utf-8
|
|||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
# Some SQL results have trailing whitespace which is removed by IDEs
|
||||||
|
[tests/queries/**.reference]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -2,3 +2,4 @@ contrib/* linguist-vendored
|
|||||||
*.h linguist-language=C++
|
*.h linguist-language=C++
|
||||||
tests/queries/0_stateless/data_json/* binary
|
tests/queries/0_stateless/data_json/* binary
|
||||||
tests/queries/0_stateless/*.reference -crlf
|
tests/queries/0_stateless/*.reference -crlf
|
||||||
|
src/Core/SettingsChangesHistory.cpp merge=union
|
||||||
|
20
.github/ISSUE_TEMPLATE/10_question.md
vendored
20
.github/ISSUE_TEMPLATE/10_question.md
vendored
@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Question
|
|
||||||
about: Ask a question about ClickHouse
|
|
||||||
title: ''
|
|
||||||
labels: question
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
> Make sure to check documentation https://clickhouse.com/docs/en/ first. If the question is concise and probably has a short answer, asking it in [community Slack](https://join.slack.com/t/clickhousedb/shared_invite/zt-1gh9ds7f4-PgDhJAaF8ad5RbWBAAjzFg) is probably the fastest way to find the answer. For more complicated questions, consider asking them on StackOverflow with "clickhouse" tag https://stackoverflow.com/questions/tagged/clickhouse
|
|
||||||
|
|
||||||
> If you still prefer GitHub issues, remove all this text and ask your question here.
|
|
||||||
|
|
||||||
**Company or project name**
|
|
||||||
|
|
||||||
Put your company name or project description here
|
|
||||||
|
|
||||||
**Question**
|
|
||||||
|
|
||||||
Your question
|
|
20
.github/ISSUE_TEMPLATE/10_question.yaml
vendored
Normal file
20
.github/ISSUE_TEMPLATE/10_question.yaml
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
name: Question
|
||||||
|
description: Ask a question about ClickHouse
|
||||||
|
labels: ["question"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
> Make sure to check documentation https://clickhouse.com/docs/en/ first. If the question is concise and probably has a short answer, asking it in [community Slack](https://join.slack.com/t/clickhousedb/shared_invite/zt-1gh9ds7f4-PgDhJAaF8ad5RbWBAAjzFg) is probably the fastest way to find the answer. For more complicated questions, consider asking them on StackOverflow with "clickhouse" tag https://stackoverflow.com/questions/tagged/clickhouse
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Company or project name
|
||||||
|
description: Put your company name or project description here.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Question
|
||||||
|
description: Please put your question here.
|
||||||
|
validations:
|
||||||
|
required: true
|
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
10
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -6,6 +6,7 @@ tests/ci/cancel_and_rerun_workflow_lambda/app.py
|
|||||||
-->
|
-->
|
||||||
### Changelog category (leave one):
|
### Changelog category (leave one):
|
||||||
- New Feature
|
- New Feature
|
||||||
|
- Experimental Feature
|
||||||
- Improvement
|
- Improvement
|
||||||
- Performance Improvement
|
- Performance Improvement
|
||||||
- Backward Incompatible Change
|
- Backward Incompatible Change
|
||||||
@ -48,21 +49,18 @@ At a minimum, the following information should be added (but add more as needed)
|
|||||||
- [ ] <!---ci_include_stateful--> Allow: Stateful tests
|
- [ ] <!---ci_include_stateful--> Allow: Stateful tests
|
||||||
- [ ] <!---ci_include_integration--> Allow: Integration Tests
|
- [ ] <!---ci_include_integration--> Allow: Integration Tests
|
||||||
- [ ] <!---ci_include_performance--> Allow: Performance tests
|
- [ ] <!---ci_include_performance--> Allow: Performance tests
|
||||||
- [ ] <!---ci_set_non_required--> Allow: All NOT Required Checks
|
- [ ] <!---ci_set_builds--> Allow: All Builds
|
||||||
- [ ] <!---batch_0_1--> Allow: batch 1, 2 for multi-batch jobs
|
- [ ] <!---batch_0_1--> Allow: batch 1, 2 for multi-batch jobs
|
||||||
- [ ] <!---batch_2_3--> Allow: batch 3, 4, 5, 6 for multi-batch jobs
|
- [ ] <!---batch_2_3--> Allow: batch 3, 4, 5, 6 for multi-batch jobs
|
||||||
---
|
---
|
||||||
- [ ] <!---ci_exclude_style--> Exclude: Style check
|
- [ ] <!---ci_exclude_style--> Exclude: Style check
|
||||||
- [ ] <!---ci_exclude_fast--> Exclude: Fast test
|
- [ ] <!---ci_exclude_fast--> Exclude: Fast test
|
||||||
- [ ] <!---ci_exclude_integration--> Exclude: Integration Tests
|
|
||||||
- [ ] <!---ci_exclude_stateless--> Exclude: Stateless tests
|
|
||||||
- [ ] <!---ci_exclude_stateful--> Exclude: Stateful tests
|
|
||||||
- [ ] <!---ci_exclude_performance--> Exclude: Performance tests
|
|
||||||
- [ ] <!---ci_exclude_asan--> Exclude: All with ASAN
|
- [ ] <!---ci_exclude_asan--> Exclude: All with ASAN
|
||||||
- [ ] <!---ci_exclude_aarch64--> Exclude: All with Aarch64
|
|
||||||
- [ ] <!---ci_exclude_tsan|msan|ubsan|coverage--> Exclude: All with TSAN, MSAN, UBSAN, Coverage
|
- [ ] <!---ci_exclude_tsan|msan|ubsan|coverage--> Exclude: All with TSAN, MSAN, UBSAN, Coverage
|
||||||
|
- [ ] <!---ci_exclude_aarch64|release|debug--> Exclude: All with aarch64, release, debug
|
||||||
---
|
---
|
||||||
- [ ] <!---do_not_test--> Do not test
|
- [ ] <!---do_not_test--> Do not test
|
||||||
|
- [ ] <!---woolen_wolfdog--> Woolen Wolfdog
|
||||||
- [ ] <!---upload_all--> Upload binaries for special builds
|
- [ ] <!---upload_all--> Upload binaries for special builds
|
||||||
- [ ] <!---no_merge_commit--> Disable merge-commit
|
- [ ] <!---no_merge_commit--> Disable merge-commit
|
||||||
- [ ] <!---no_ci_cache--> Disable CI cache
|
- [ ] <!---no_ci_cache--> Disable CI cache
|
||||||
|
1
.github/actionlint.yml
vendored
1
.github/actionlint.yml
vendored
@ -7,3 +7,4 @@ self-hosted-runner:
|
|||||||
- stress-tester
|
- stress-tester
|
||||||
- style-checker
|
- style-checker
|
||||||
- style-checker-aarch64
|
- style-checker-aarch64
|
||||||
|
- release-maker
|
||||||
|
57
.github/workflows/backport_branches.yml
vendored
57
.github/workflows/backport_branches.yml
vendored
@ -70,7 +70,7 @@ jobs:
|
|||||||
if: ${{ !failure() && !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: Compatibility check (amd64)
|
test_name: Compatibility check (release)
|
||||||
runner_type: style-checker
|
runner_type: style-checker
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
CompatibilityCheckAarch64:
|
CompatibilityCheckAarch64:
|
||||||
@ -159,33 +159,24 @@ jobs:
|
|||||||
############################################################################################
|
############################################################################################
|
||||||
##################################### BUILD REPORTER #######################################
|
##################################### BUILD REPORTER #######################################
|
||||||
############################################################################################
|
############################################################################################
|
||||||
BuilderReport:
|
Builds_Report:
|
||||||
# run report check for failed builds to indicate the CI error
|
# run report check for failed builds to indicate the CI error
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() && needs.RunConfig.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'Builds') }}
|
||||||
needs:
|
needs: [RunConfig, BuilderDebAarch64, BuilderDebAsan, BuilderDebDebug, BuilderDebRelease, BuilderDebTsan, BuilderBinDarwin, BuilderBinDarwinAarch64]
|
||||||
- RunConfig
|
runs-on: [self-hosted, style-checker-aarch64]
|
||||||
- BuilderDebAarch64
|
steps:
|
||||||
- BuilderDebAsan
|
- name: Check out repository code
|
||||||
- BuilderDebDebug
|
uses: ClickHouse/checkout@v1
|
||||||
- BuilderDebRelease
|
- name: Download reports
|
||||||
- BuilderDebTsan
|
run: |
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
python3 "$GITHUB_WORKSPACE/tests/ci/ci.py" --infile ${{ toJson(needs.RunConfig.outputs.data) }} --pre --job-name Builds
|
||||||
with:
|
- name: Builds report
|
||||||
test_name: ClickHouse build check
|
run: |
|
||||||
runner_type: style-checker-aarch64
|
cd "$GITHUB_WORKSPACE/tests/ci"
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
python3 ./build_report_check.py --reports package_release package_aarch64 package_asan package_tsan package_debug binary_darwin binary_darwin_aarch64
|
||||||
BuilderSpecialReport:
|
- name: Set status
|
||||||
# run report check for failed builds to indicate the CI error
|
run: |
|
||||||
if: ${{ !cancelled() }}
|
python3 "$GITHUB_WORKSPACE/tests/ci/ci.py" --infile ${{ toJson(needs.RunConfig.outputs.data) }} --post --job-name Builds
|
||||||
needs:
|
|
||||||
- RunConfig
|
|
||||||
- BuilderBinDarwin
|
|
||||||
- BuilderBinDarwinAarch64
|
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
|
||||||
with:
|
|
||||||
test_name: ClickHouse special build check
|
|
||||||
runner_type: style-checker-aarch64
|
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
|
||||||
############################################################################################
|
############################################################################################
|
||||||
#################################### INSTALL PACKAGES ######################################
|
#################################### INSTALL PACKAGES ######################################
|
||||||
############################################################################################
|
############################################################################################
|
||||||
@ -194,7 +185,7 @@ jobs:
|
|||||||
if: ${{ !failure() && !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: Install packages (amd64)
|
test_name: Install packages (release)
|
||||||
runner_type: style-checker
|
runner_type: style-checker
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
run_command: |
|
run_command: |
|
||||||
@ -204,7 +195,7 @@ jobs:
|
|||||||
if: ${{ !failure() && !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: Install packages (arm64)
|
test_name: Install packages (aarch64)
|
||||||
runner_type: style-checker-aarch64
|
runner_type: style-checker-aarch64
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
run_command: |
|
run_command: |
|
||||||
@ -256,8 +247,7 @@ jobs:
|
|||||||
FinishCheck:
|
FinishCheck:
|
||||||
if: ${{ !failure() && !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
needs:
|
needs:
|
||||||
- BuilderReport
|
- Builds_Report
|
||||||
- BuilderSpecialReport
|
|
||||||
- FunctionalStatelessTestAsan
|
- FunctionalStatelessTestAsan
|
||||||
- FunctionalStatefulTestDebug
|
- FunctionalStatefulTestDebug
|
||||||
- StressTestTsan
|
- StressTestTsan
|
||||||
@ -273,5 +263,8 @@ jobs:
|
|||||||
- name: Finish label
|
- name: Finish label
|
||||||
run: |
|
run: |
|
||||||
cd "$GITHUB_WORKSPACE/tests/ci"
|
cd "$GITHUB_WORKSPACE/tests/ci"
|
||||||
python3 finish_check.py
|
# update mergeable check
|
||||||
|
python3 merge_pr.py --set-ci-status --wf-status ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }}
|
||||||
|
# update overall ci report
|
||||||
|
python3 finish_check.py --wf-status ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }}
|
||||||
python3 merge_pr.py
|
python3 merge_pr.py
|
||||||
|
166
.github/workflows/create_release.yml
vendored
Normal file
166
.github/workflows/create_release.yml
vendored
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
name: CreateRelease
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: release
|
||||||
|
|
||||||
|
'on':
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
ref:
|
||||||
|
description: 'Git reference (branch or commit sha) from which to create the release'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
type:
|
||||||
|
description: 'The type of release: "new" for a new release or "patch" for a patch release'
|
||||||
|
required: true
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- patch
|
||||||
|
- new
|
||||||
|
dry-run:
|
||||||
|
description: 'Dry run'
|
||||||
|
required: false
|
||||||
|
default: true
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CreateRelease:
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.ROBOT_CLICKHOUSE_COMMIT_TOKEN }}
|
||||||
|
runs-on: [self-hosted, release-maker]
|
||||||
|
steps:
|
||||||
|
- name: DebugInfo
|
||||||
|
uses: hmarr/debug-action@f7318c783045ac39ed9bb497e22ce835fdafbfe6
|
||||||
|
- name: Set envs
|
||||||
|
# https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions#multiline-strings
|
||||||
|
run: |
|
||||||
|
cat >> "$GITHUB_ENV" << 'EOF'
|
||||||
|
ROBOT_CLICKHOUSE_SSH_KEY<<RCSK
|
||||||
|
${{secrets.ROBOT_CLICKHOUSE_SSH_KEY}}
|
||||||
|
RCSK
|
||||||
|
RELEASE_INFO_FILE=${{ runner.temp }}/release_info.json
|
||||||
|
EOF
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: ClickHouse/checkout@v1
|
||||||
|
with:
|
||||||
|
token: ${{secrets.ROBOT_CLICKHOUSE_COMMIT_TOKEN}}
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Prepare Release Info
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/create_release.py --prepare-release-info \
|
||||||
|
--ref ${{ inputs.ref }} --release-type ${{ inputs.type }} \
|
||||||
|
--outfile ${{ env.RELEASE_INFO_FILE }} ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
echo "::group::Release Info"
|
||||||
|
python3 -m json.tool "$RELEASE_INFO_FILE"
|
||||||
|
echo "::endgroup::"
|
||||||
|
release_tag=$(jq -r '.release_tag' "$RELEASE_INFO_FILE")
|
||||||
|
commit_sha=$(jq -r '.commit_sha' "$RELEASE_INFO_FILE")
|
||||||
|
echo "Release Tag: $release_tag"
|
||||||
|
echo "RELEASE_TAG=$release_tag" >> "$GITHUB_ENV"
|
||||||
|
echo "COMMIT_SHA=$commit_sha" >> "$GITHUB_ENV"
|
||||||
|
- name: Download All Release Artifacts
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/create_release.py --infile "$RELEASE_INFO_FILE" --download-packages ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Push Git Tag for the Release
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/create_release.py --push-release-tag --infile "$RELEASE_INFO_FILE" ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Push New Release Branch
|
||||||
|
if: ${{ inputs.type == 'new' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/create_release.py --push-new-release-branch --infile "$RELEASE_INFO_FILE" ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Bump CH Version and Update Contributors' List
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/create_release.py --create-bump-version-pr --infile "$RELEASE_INFO_FILE" ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Checkout master
|
||||||
|
run: |
|
||||||
|
git checkout master
|
||||||
|
- name: Bump Docker versions, Changelog, Security
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
[ "$(git branch --show-current)" != "master" ] && echo "not on the master" && exit 1
|
||||||
|
echo "List versions"
|
||||||
|
./utils/list-versions/list-versions.sh > ./utils/list-versions/version_date.tsv
|
||||||
|
echo "Update docker version"
|
||||||
|
./utils/list-versions/update-docker-version.sh
|
||||||
|
echo "Generate ChangeLog"
|
||||||
|
export CI=1
|
||||||
|
docker run -u "${UID}:${GID}" -e PYTHONUNBUFFERED=1 -e CI=1 --network=host \
|
||||||
|
--volume=".:/ClickHouse" clickhouse/style-test \
|
||||||
|
/ClickHouse/tests/ci/changelog.py -v --debug-helpers \
|
||||||
|
--gh-user-or-token="$GH_TOKEN" --jobs=5 \
|
||||||
|
--output="/ClickHouse/docs/changelogs/${{ env.RELEASE_TAG }}.md" ${{ env.RELEASE_TAG }}
|
||||||
|
git add ./docs/changelogs/${{ env.RELEASE_TAG }}.md
|
||||||
|
echo "Generate Security"
|
||||||
|
python3 ./utils/security-generator/generate_security.py > SECURITY.md
|
||||||
|
git diff HEAD
|
||||||
|
- name: Generate ChangeLog
|
||||||
|
if: ${{ inputs.type == 'patch' && ! inputs.dry-run }}
|
||||||
|
uses: peter-evans/create-pull-request@v6
|
||||||
|
with:
|
||||||
|
author: "robot-clickhouse <robot-clickhouse@users.noreply.github.com>"
|
||||||
|
token: ${{ secrets.ROBOT_CLICKHOUSE_COMMIT_TOKEN }}
|
||||||
|
committer: "robot-clickhouse <robot-clickhouse@users.noreply.github.com>"
|
||||||
|
commit-message: Update version_date.tsv and changelogs after ${{ env.RELEASE_TAG }}
|
||||||
|
branch: auto/${{ env.RELEASE_TAG }}
|
||||||
|
assignees: ${{ github.event.sender.login }} # assign the PR to the tag pusher
|
||||||
|
delete-branch: true
|
||||||
|
title: Update version_date.tsv and changelog after ${{ env.RELEASE_TAG }}
|
||||||
|
labels: do not test
|
||||||
|
body: |
|
||||||
|
Update version_date.tsv and changelogs after ${{ env.RELEASE_TAG }}
|
||||||
|
### Changelog category (leave one):
|
||||||
|
- Not for changelog (changelog entry is not required)
|
||||||
|
- name: Reset changes if Dry-run
|
||||||
|
if: ${{ inputs.dry-run }}
|
||||||
|
run: |
|
||||||
|
git reset --hard HEAD
|
||||||
|
- name: Checkout back to GITHUB_REF
|
||||||
|
run: |
|
||||||
|
git checkout "$GITHUB_REF_NAME"
|
||||||
|
- name: Create GH Release
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/create_release.py --create-gh-release \
|
||||||
|
--infile ${{ env.RELEASE_INFO_FILE }} ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
|
||||||
|
- name: Export TGZ Packages
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/artifactory.py --export-tgz --infile ${{ env.RELEASE_INFO_FILE }} ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Test TGZ Packages
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/artifactory.py --test-tgz --infile ${{ env.RELEASE_INFO_FILE }} ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Export RPM Packages
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/artifactory.py --export-rpm --infile ${{ env.RELEASE_INFO_FILE }} ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Test RPM Packages
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/artifactory.py --test-rpm --infile ${{ env.RELEASE_INFO_FILE }} ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Export Debian Packages
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/artifactory.py --export-debian --infile ${{ env.RELEASE_INFO_FILE }} ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Test Debian Packages
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
python3 ./tests/ci/artifactory.py --test-debian --infile ${{ env.RELEASE_INFO_FILE }} ${{ inputs.dry-run && '--dry-run' || '' }}
|
||||||
|
- name: Docker clickhouse/clickhouse-server building
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
cd "./tests/ci"
|
||||||
|
export CHECK_NAME="Docker server image"
|
||||||
|
python3 docker_server.py --release-type auto --version ${{ env.RELEASE_TAG }} --check-name "$CHECK_NAME" --sha ${{ env.COMMIT_SHA }} ${{ ! inputs.dry-run && '--push' || '' }}
|
||||||
|
- name: Docker clickhouse/clickhouse-keeper building
|
||||||
|
if: ${{ inputs.type == 'patch' }}
|
||||||
|
run: |
|
||||||
|
cd "./tests/ci"
|
||||||
|
export CHECK_NAME="Docker keeper image"
|
||||||
|
python3 docker_server.py --release-type auto --version ${{ env.RELEASE_TAG }} --check-name "$CHECK_NAME" --sha ${{ env.COMMIT_SHA }} ${{ ! inputs.dry-run && '--push' || '' }}
|
||||||
|
- name: Post Slack Message
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
echo Slack Message
|
25
.github/workflows/master.yml
vendored
25
.github/workflows/master.yml
vendored
@ -104,8 +104,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
stage: Tests_2
|
stage: Tests_2
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
# stage for jobs that do not prohibit merge
|
|
||||||
Tests_3:
|
Tests_3:
|
||||||
|
# Test_3 should not wait for Test_1/Test_2 and should not be blocked by them on master branch since all jobs need to run there.
|
||||||
needs: [RunConfig, Builds_1]
|
needs: [RunConfig, Builds_1]
|
||||||
if: ${{ !failure() && !cancelled() && contains(fromJson(needs.RunConfig.outputs.data).stages_data.stages_to_do, 'Tests_3') }}
|
if: ${{ !failure() && !cancelled() && contains(fromJson(needs.RunConfig.outputs.data).stages_data.stages_to_do, 'Tests_3') }}
|
||||||
uses: ./.github/workflows/reusable_test_stage.yml
|
uses: ./.github/workflows/reusable_test_stage.yml
|
||||||
@ -114,23 +114,14 @@ jobs:
|
|||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
|
|
||||||
################################# Reports #################################
|
################################# Reports #################################
|
||||||
# Reports should be run even if Builds_1/2 failed - put them separately in wf (not in Tests_1/2)
|
# Reports should run even if Builds_1/2 fail - run them separately, not in Tests_1/2/3
|
||||||
Builds_1_Report:
|
Builds_Report:
|
||||||
# run report check for failed builds to indicate the CI error
|
# run report check for failed builds to indicate the CI error
|
||||||
if: ${{ !cancelled() && needs.RunConfig.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'ClickHouse build check') }}
|
if: ${{ !cancelled() && needs.RunConfig.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'Builds') }}
|
||||||
needs: [RunConfig, Builds_1]
|
needs: [RunConfig, Builds_1, Builds_2]
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: ClickHouse build check
|
test_name: Builds
|
||||||
runner_type: style-checker-aarch64
|
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
|
||||||
Builds_2_Report:
|
|
||||||
# run report check for failed builds to indicate the CI error
|
|
||||||
if: ${{ !cancelled() && needs.RunConfig.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'ClickHouse special build check') }}
|
|
||||||
needs: [RunConfig, Builds_2]
|
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
|
||||||
with:
|
|
||||||
test_name: ClickHouse special build check
|
|
||||||
runner_type: style-checker-aarch64
|
runner_type: style-checker-aarch64
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
|
|
||||||
@ -164,7 +155,7 @@ jobs:
|
|||||||
|
|
||||||
FinishCheck:
|
FinishCheck:
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
needs: [RunConfig, Builds_1, Builds_2, Builds_1_Report, Builds_2_Report, Tests_1, Tests_2, Tests_3]
|
needs: [RunConfig, Builds_1, Builds_2, Builds_Report, Tests_1, Tests_2, Tests_3]
|
||||||
runs-on: [self-hosted, style-checker-aarch64]
|
runs-on: [self-hosted, style-checker-aarch64]
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
@ -172,4 +163,4 @@ jobs:
|
|||||||
- name: Finish label
|
- name: Finish label
|
||||||
run: |
|
run: |
|
||||||
cd "$GITHUB_WORKSPACE/tests/ci"
|
cd "$GITHUB_WORKSPACE/tests/ci"
|
||||||
python3 finish_check.py
|
python3 finish_check.py --wf-status ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }}
|
||||||
|
15
.github/workflows/merge_queue.yml
vendored
15
.github/workflows/merge_queue.yml
vendored
@ -96,20 +96,15 @@ jobs:
|
|||||||
stage: Tests_1
|
stage: Tests_1
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
|
|
||||||
################################# Stage Final #################################
|
CheckReadyForMerge:
|
||||||
#
|
if: ${{ !cancelled() && needs.StyleCheck.result == 'success' }}
|
||||||
FinishCheck:
|
# Test_2 or Test_3 must not have jobs required for Mergeable check
|
||||||
if: ${{ !failure() && !cancelled() }}
|
|
||||||
needs: [RunConfig, BuildDockers, StyleCheck, FastTest, Builds_1, Tests_1]
|
needs: [RunConfig, BuildDockers, StyleCheck, FastTest, Builds_1, Tests_1]
|
||||||
runs-on: [self-hosted, style-checker-aarch64]
|
runs-on: [self-hosted, style-checker-aarch64]
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: ClickHouse/checkout@v1
|
uses: ClickHouse/checkout@v1
|
||||||
- name: Check sync status
|
- name: Check and set merge status
|
||||||
run: |
|
run: |
|
||||||
cd "$GITHUB_WORKSPACE/tests/ci"
|
cd "$GITHUB_WORKSPACE/tests/ci"
|
||||||
python3 sync_pr.py --status
|
python3 merge_pr.py --set-ci-status --wf-status ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }}
|
||||||
- name: Finish label
|
|
||||||
run: |
|
|
||||||
cd "$GITHUB_WORKSPACE/tests/ci"
|
|
||||||
python3 finish_check.py ${{ (contains(needs.*.result, 'failure') && github.event_name == 'merge_group') && '--pipeline-failure' || '' }}
|
|
||||||
|
37
.github/workflows/pull_request.yml
vendored
37
.github/workflows/pull_request.yml
vendored
@ -126,16 +126,16 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
stage: Builds_2
|
stage: Builds_2
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
|
# stage for running non-required checks without being blocked by required checks (Test_1) if corresponding settings is selected
|
||||||
Tests_2:
|
Tests_2:
|
||||||
needs: [RunConfig, Builds_2]
|
needs: [RunConfig, Builds_1]
|
||||||
if: ${{ !failure() && !cancelled() && contains(fromJson(needs.RunConfig.outputs.data).stages_data.stages_to_do, 'Tests_2') }}
|
if: ${{ !failure() && !cancelled() && contains(fromJson(needs.RunConfig.outputs.data).stages_data.stages_to_do, 'Tests_2') }}
|
||||||
uses: ./.github/workflows/reusable_test_stage.yml
|
uses: ./.github/workflows/reusable_test_stage.yml
|
||||||
with:
|
with:
|
||||||
stage: Tests_2
|
stage: Tests_2
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
# stage for jobs that do not prohibit merge
|
|
||||||
Tests_3:
|
Tests_3:
|
||||||
needs: [RunConfig, Tests_1, Tests_2]
|
needs: [RunConfig, Builds_1, Tests_1]
|
||||||
if: ${{ !failure() && !cancelled() && contains(fromJson(needs.RunConfig.outputs.data).stages_data.stages_to_do, 'Tests_3') }}
|
if: ${{ !failure() && !cancelled() && contains(fromJson(needs.RunConfig.outputs.data).stages_data.stages_to_do, 'Tests_3') }}
|
||||||
uses: ./.github/workflows/reusable_test_stage.yml
|
uses: ./.github/workflows/reusable_test_stage.yml
|
||||||
with:
|
with:
|
||||||
@ -143,29 +143,21 @@ jobs:
|
|||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
|
|
||||||
################################# Reports #################################
|
################################# Reports #################################
|
||||||
# Reports should by run even if Builds_1/2 fail, so put them separately in wf (not in Tests_1/2)
|
# Reports should run even if Builds_1/2 fail - run them separately (not in Tests_1/2/3)
|
||||||
Builds_1_Report:
|
Builds_Report:
|
||||||
# run report check for failed builds to indicate the CI error
|
# run report check for failed builds to indicate the CI error
|
||||||
if: ${{ !cancelled() && needs.StyleCheck.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'ClickHouse build check') }}
|
if: ${{ !cancelled() && needs.RunConfig.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'Builds') }}
|
||||||
needs: [RunConfig, StyleCheck, Builds_1]
|
needs: [RunConfig, StyleCheck, Builds_1, Builds_2]
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: ClickHouse build check
|
test_name: Builds
|
||||||
runner_type: style-checker-aarch64
|
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
|
||||||
Builds_2_Report:
|
|
||||||
# run report check for failed builds to indicate the CI error
|
|
||||||
if: ${{ !cancelled() && needs.StyleCheck.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'ClickHouse special build check') }}
|
|
||||||
needs: [RunConfig, StyleCheck, Builds_2]
|
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
|
||||||
with:
|
|
||||||
test_name: ClickHouse special build check
|
|
||||||
runner_type: style-checker-aarch64
|
runner_type: style-checker-aarch64
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
|
|
||||||
CheckReadyForMerge:
|
CheckReadyForMerge:
|
||||||
if: ${{ !cancelled() && needs.StyleCheck.result == 'success' }}
|
if: ${{ !cancelled() && needs.StyleCheck.result == 'success' }}
|
||||||
needs: [RunConfig, BuildDockers, StyleCheck, FastTest, Builds_1, Builds_2, Builds_1_Report, Builds_2_Report, Tests_1, Tests_2]
|
# Test_2 or Test_3 must not have jobs required for Mergeable check
|
||||||
|
needs: [RunConfig, BuildDockers, StyleCheck, FastTest, Builds_1, Builds_2, Builds_Report, Tests_1]
|
||||||
runs-on: [self-hosted, style-checker-aarch64]
|
runs-on: [self-hosted, style-checker-aarch64]
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
@ -180,8 +172,8 @@ jobs:
|
|||||||
################################# Stage Final #################################
|
################################# Stage Final #################################
|
||||||
#
|
#
|
||||||
FinishCheck:
|
FinishCheck:
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
needs: [RunConfig, BuildDockers, StyleCheck, FastTest, Builds_1, Builds_2, Builds_1_Report, Builds_2_Report, Tests_1, Tests_2, Tests_3]
|
needs: [RunConfig, BuildDockers, StyleCheck, FastTest, Builds_1, Builds_2, Builds_Report, Tests_1, Tests_2, Tests_3]
|
||||||
runs-on: [self-hosted, style-checker-aarch64]
|
runs-on: [self-hosted, style-checker-aarch64]
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
@ -191,7 +183,7 @@ jobs:
|
|||||||
- name: Finish label
|
- name: Finish label
|
||||||
run: |
|
run: |
|
||||||
cd "$GITHUB_WORKSPACE/tests/ci"
|
cd "$GITHUB_WORKSPACE/tests/ci"
|
||||||
python3 finish_check.py
|
python3 finish_check.py --wf-status ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }}
|
||||||
|
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
###################################### JEPSEN TESTS #########################################
|
###################################### JEPSEN TESTS #########################################
|
||||||
@ -204,8 +196,7 @@ jobs:
|
|||||||
concurrency:
|
concurrency:
|
||||||
group: jepsen
|
group: jepsen
|
||||||
if: ${{ !failure() && !cancelled() && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'ClickHouse Keeper Jepsen') }}
|
if: ${{ !failure() && !cancelled() && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'ClickHouse Keeper Jepsen') }}
|
||||||
# jepsen needs binary_release build which is in Builds_2
|
needs: [RunConfig, Builds_1]
|
||||||
needs: [RunConfig, Builds_2]
|
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: ClickHouse Keeper Jepsen
|
test_name: ClickHouse Keeper Jepsen
|
||||||
|
59
.github/workflows/release_branches.yml
vendored
59
.github/workflows/release_branches.yml
vendored
@ -65,7 +65,7 @@ jobs:
|
|||||||
if: ${{ !failure() && !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: Compatibility check (amd64)
|
test_name: Compatibility check (release)
|
||||||
runner_type: style-checker
|
runner_type: style-checker
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
CompatibilityCheckAarch64:
|
CompatibilityCheckAarch64:
|
||||||
@ -176,35 +176,24 @@ jobs:
|
|||||||
############################################################################################
|
############################################################################################
|
||||||
##################################### BUILD REPORTER #######################################
|
##################################### BUILD REPORTER #######################################
|
||||||
############################################################################################
|
############################################################################################
|
||||||
BuilderReport:
|
Builds_Report:
|
||||||
# run report check for failed builds to indicate the CI error
|
# run report check for failed builds to indicate the CI error
|
||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() && needs.RunConfig.result == 'success' && contains(fromJson(needs.RunConfig.outputs.data).jobs_data.jobs_to_do, 'Builds') }}
|
||||||
needs:
|
needs: [RunConfig, BuilderDebRelease, BuilderDebAarch64, BuilderDebAsan, BuilderDebUBsan, BuilderDebMsan, BuilderDebTsan, BuilderDebDebug, BuilderBinDarwin, BuilderBinDarwinAarch64]
|
||||||
- RunConfig
|
runs-on: [self-hosted, style-checker-aarch64]
|
||||||
- BuilderDebRelease
|
steps:
|
||||||
- BuilderDebAarch64
|
- name: Check out repository code
|
||||||
- BuilderDebAsan
|
uses: ClickHouse/checkout@v1
|
||||||
- BuilderDebTsan
|
- name: Download reports
|
||||||
- BuilderDebUBsan
|
run: |
|
||||||
- BuilderDebMsan
|
python3 "$GITHUB_WORKSPACE/tests/ci/ci.py" --infile ${{ toJson(needs.RunConfig.outputs.data) }} --pre --job-name Builds
|
||||||
- BuilderDebDebug
|
- name: Builds report
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
run: |
|
||||||
with:
|
cd "$GITHUB_WORKSPACE/tests/ci"
|
||||||
test_name: ClickHouse build check
|
python3 ./build_report_check.py --reports package_release package_aarch64 package_asan package_msan package_ubsan package_tsan package_debug binary_darwin binary_darwin_aarch64
|
||||||
runner_type: style-checker-aarch64
|
- name: Set status
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
run: |
|
||||||
BuilderSpecialReport:
|
python3 "$GITHUB_WORKSPACE/tests/ci/ci.py" --infile ${{ toJson(needs.RunConfig.outputs.data) }} --post --job-name Builds
|
||||||
# run report check for failed builds to indicate the CI error
|
|
||||||
if: ${{ !cancelled() }}
|
|
||||||
needs:
|
|
||||||
- RunConfig
|
|
||||||
- BuilderBinDarwin
|
|
||||||
- BuilderBinDarwinAarch64
|
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
|
||||||
with:
|
|
||||||
test_name: ClickHouse special build check
|
|
||||||
runner_type: style-checker-aarch64
|
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
|
||||||
MarkReleaseReady:
|
MarkReleaseReady:
|
||||||
if: ${{ !failure() && !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
needs:
|
needs:
|
||||||
@ -244,7 +233,7 @@ jobs:
|
|||||||
if: ${{ !failure() && !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: Install packages (amd64)
|
test_name: Install packages (release)
|
||||||
runner_type: style-checker
|
runner_type: style-checker
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
run_command: |
|
run_command: |
|
||||||
@ -254,7 +243,7 @@ jobs:
|
|||||||
if: ${{ !failure() && !cancelled() }}
|
if: ${{ !failure() && !cancelled() }}
|
||||||
uses: ./.github/workflows/reusable_test.yml
|
uses: ./.github/workflows/reusable_test.yml
|
||||||
with:
|
with:
|
||||||
test_name: Install packages (arm64)
|
test_name: Install packages (aarch64)
|
||||||
runner_type: style-checker-aarch64
|
runner_type: style-checker-aarch64
|
||||||
data: ${{ needs.RunConfig.outputs.data }}
|
data: ${{ needs.RunConfig.outputs.data }}
|
||||||
run_command: |
|
run_command: |
|
||||||
@ -460,8 +449,7 @@ jobs:
|
|||||||
needs:
|
needs:
|
||||||
- DockerServerImage
|
- DockerServerImage
|
||||||
- DockerKeeperImage
|
- DockerKeeperImage
|
||||||
- BuilderReport
|
- Builds_Report
|
||||||
- BuilderSpecialReport
|
|
||||||
- MarkReleaseReady
|
- MarkReleaseReady
|
||||||
- FunctionalStatelessTestDebug
|
- FunctionalStatelessTestDebug
|
||||||
- FunctionalStatelessTestRelease
|
- FunctionalStatelessTestRelease
|
||||||
@ -496,4 +484,7 @@ jobs:
|
|||||||
- name: Finish label
|
- name: Finish label
|
||||||
run: |
|
run: |
|
||||||
cd "$GITHUB_WORKSPACE/tests/ci"
|
cd "$GITHUB_WORKSPACE/tests/ci"
|
||||||
python3 finish_check.py
|
# update mergeable check
|
||||||
|
python3 merge_pr.py --set-ci-status --wf-status ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }}
|
||||||
|
# update overall ci report
|
||||||
|
python3 finish_check.py --wf-status ${{ contains(needs.*.result, 'failure') && 'failure' || 'success' }}
|
||||||
|
5
.github/workflows/tags_stable.yml
vendored
5
.github/workflows/tags_stable.yml
vendored
@ -46,9 +46,10 @@ jobs:
|
|||||||
./utils/list-versions/list-versions.sh > ./utils/list-versions/version_date.tsv
|
./utils/list-versions/list-versions.sh > ./utils/list-versions/version_date.tsv
|
||||||
./utils/list-versions/update-docker-version.sh
|
./utils/list-versions/update-docker-version.sh
|
||||||
GID=$(id -g "${UID}")
|
GID=$(id -g "${UID}")
|
||||||
docker run -u "${UID}:${GID}" -e PYTHONUNBUFFERED=1 \
|
# --network=host and CI=1 are required for the S3 access from a container
|
||||||
|
docker run -u "${UID}:${GID}" -e PYTHONUNBUFFERED=1 -e CI=1 --network=host \
|
||||||
--volume="${GITHUB_WORKSPACE}:/ClickHouse" clickhouse/style-test \
|
--volume="${GITHUB_WORKSPACE}:/ClickHouse" clickhouse/style-test \
|
||||||
/ClickHouse/utils/changelog/changelog.py -v --debug-helpers \
|
/ClickHouse/tests/ci/changelog.py -v --debug-helpers \
|
||||||
--gh-user-or-token="$GITHUB_TOKEN" --jobs=5 \
|
--gh-user-or-token="$GITHUB_TOKEN" --jobs=5 \
|
||||||
--output="/ClickHouse/docs/changelogs/${GITHUB_TAG}.md" "${GITHUB_TAG}"
|
--output="/ClickHouse/docs/changelogs/${GITHUB_TAG}.md" "${GITHUB_TAG}"
|
||||||
git add "./docs/changelogs/${GITHUB_TAG}.md"
|
git add "./docs/changelogs/${GITHUB_TAG}.md"
|
||||||
|
8
.gitmodules
vendored
8
.gitmodules
vendored
@ -91,13 +91,13 @@
|
|||||||
[submodule "contrib/aws"]
|
[submodule "contrib/aws"]
|
||||||
path = contrib/aws
|
path = contrib/aws
|
||||||
url = https://github.com/ClickHouse/aws-sdk-cpp
|
url = https://github.com/ClickHouse/aws-sdk-cpp
|
||||||
[submodule "aws-c-event-stream"]
|
[submodule "contrib/aws-c-event-stream"]
|
||||||
path = contrib/aws-c-event-stream
|
path = contrib/aws-c-event-stream
|
||||||
url = https://github.com/awslabs/aws-c-event-stream
|
url = https://github.com/awslabs/aws-c-event-stream
|
||||||
[submodule "aws-c-common"]
|
[submodule "contrib/aws-c-common"]
|
||||||
path = contrib/aws-c-common
|
path = contrib/aws-c-common
|
||||||
url = https://github.com/awslabs/aws-c-common.git
|
url = https://github.com/awslabs/aws-c-common.git
|
||||||
[submodule "aws-checksums"]
|
[submodule "contrib/aws-checksums"]
|
||||||
path = contrib/aws-checksums
|
path = contrib/aws-checksums
|
||||||
url = https://github.com/awslabs/aws-checksums
|
url = https://github.com/awslabs/aws-checksums
|
||||||
[submodule "contrib/curl"]
|
[submodule "contrib/curl"]
|
||||||
@ -163,7 +163,7 @@
|
|||||||
url = https://github.com/xz-mirror/xz
|
url = https://github.com/xz-mirror/xz
|
||||||
[submodule "contrib/abseil-cpp"]
|
[submodule "contrib/abseil-cpp"]
|
||||||
path = contrib/abseil-cpp
|
path = contrib/abseil-cpp
|
||||||
url = https://github.com/abseil/abseil-cpp
|
url = https://github.com/ClickHouse/abseil-cpp.git
|
||||||
[submodule "contrib/dragonbox"]
|
[submodule "contrib/dragonbox"]
|
||||||
path = contrib/dragonbox
|
path = contrib/dragonbox
|
||||||
url = https://github.com/ClickHouse/dragonbox
|
url = https://github.com/ClickHouse/dragonbox
|
||||||
|
@ -13,5 +13,4 @@ rules:
|
|||||||
level: warning
|
level: warning
|
||||||
comments:
|
comments:
|
||||||
min-spaces-from-content: 1
|
min-spaces-from-content: 1
|
||||||
document-start:
|
document-start: disable
|
||||||
present: false
|
|
||||||
|
164
CHANGELOG.md
164
CHANGELOG.md
@ -1,4 +1,5 @@
|
|||||||
### Table of Contents
|
### Table of Contents
|
||||||
|
**[ClickHouse release v24.6, 2024-07-01](#246)**<br/>
|
||||||
**[ClickHouse release v24.5, 2024-05-30](#245)**<br/>
|
**[ClickHouse release v24.5, 2024-05-30](#245)**<br/>
|
||||||
**[ClickHouse release v24.4, 2024-04-30](#244)**<br/>
|
**[ClickHouse release v24.4, 2024-04-30](#244)**<br/>
|
||||||
**[ClickHouse release v24.3 LTS, 2024-03-26](#243)**<br/>
|
**[ClickHouse release v24.3 LTS, 2024-03-26](#243)**<br/>
|
||||||
@ -8,6 +9,169 @@
|
|||||||
|
|
||||||
# 2024 Changelog
|
# 2024 Changelog
|
||||||
|
|
||||||
|
### <a id="246"></a> ClickHouse release 24.6, 2024-07-01
|
||||||
|
|
||||||
|
#### Backward Incompatible Change
|
||||||
|
* Enable asynchronous load of databases and tables by default. See the `async_load_databases` in config.xml. While this change is fully compatible, it can introduce a difference in behavior. When `async_load_databases` is false, as in the previous versions, the server will not accept connections until all tables are loaded. When `async_load_databases` is true, as in the new version, the server can accept connections before all the tables are loaded. If a query is made to a table that is not yet loaded, it will wait for the table's loading, which can take considerable time. It can change the behavior of the server if it is part of a large distributed system under a load balancer. In the first case, the load balancer can get a connection refusal and quickly failover to another server. In the second case, the load balancer can connect to a server that is still loading the tables, and the query will have a higher latency. Moreover, if many queries accumulate in the waiting state, it can lead to a "thundering herd" problem when they start processing simultaneously. This can make a difference only for highly loaded distributed backends. You can set the value of `async_load_databases` to false to avoid this problem. [#57695](https://github.com/ClickHouse/ClickHouse/pull/57695) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Setting `replace_long_file_name_to_hash` is enabled by default for `MergeTree` tables. [#64457](https://github.com/ClickHouse/ClickHouse/pull/64457) ([Anton Popov](https://github.com/CurtizJ)). This setting is fully compatible, and no actions needed during upgrade. The new data format is supported from all versions starting from 23.9. After enabling this setting, you can no longer downgrade to a version 23.8 or older.
|
||||||
|
* Some invalid queries will fail earlier during parsing. Note: disabled the support for inline KQL expressions (the experimental Kusto language) when they are put into a `kql` table function without a string literal, e.g. `kql(garbage | trash)` instead of `kql('garbage | trash')` or `kql($$garbage | trash$$)`. This feature was introduced unintentionally and should not exist. [#61500](https://github.com/ClickHouse/ClickHouse/pull/61500) ([Alexey Milovidov](https://github.com/alexey-milovidov)).
|
||||||
|
* Rework parallel processing in `Ordered` mode of storage `S3Queue`. This PR is backward incompatible for Ordered mode if you used settings `s3queue_processing_threads_num` or `s3queue_total_shards_num`. Setting `s3queue_total_shards_num` is deleted, previously it was allowed to use only under `s3queue_allow_experimental_sharded_mode`, which is now deprecated. A new setting is added - `s3queue_buckets`. [#64349](https://github.com/ClickHouse/ClickHouse/pull/64349) ([Kseniia Sumarokova](https://github.com/kssenii)).
|
||||||
|
* New functions `snowflakeIDToDateTime`, `snowflakeIDToDateTime64`, `dateTimeToSnowflakeID`, and `dateTime64ToSnowflakeID` were added. Unlike the existing functions `snowflakeToDateTime`, `snowflakeToDateTime64`, `dateTimeToSnowflake`, and `dateTime64ToSnowflake`, the new functions are compatible with function `generateSnowflakeID`, i.e. they accept the snowflake IDs generated by `generateSnowflakeID` and produce snowflake IDs of the same type as `generateSnowflakeID` (i.e. `UInt64`). Furthermore, the new functions default to the UNIX epoch (aka. 1970-01-01), just like `generateSnowflakeID`. If necessary, a different epoch, e.g. Twitter's/X's epoch 2010-11-04 aka. 1288834974657 msec since UNIX epoch, can be passed. The old conversion functions are deprecated and will be removed after a transition period: to use them regardless, enable setting `allow_deprecated_snowflake_conversion_functions`. [#64948](https://github.com/ClickHouse/ClickHouse/pull/64948) ([Robert Schulze](https://github.com/rschu1ze)).
|
||||||
|
|
||||||
|
#### New Feature
|
||||||
|
* Allow to store named collections in ClickHouse Keeper. [#64574](https://github.com/ClickHouse/ClickHouse/pull/64574) ([Kseniia Sumarokova](https://github.com/kssenii)).
|
||||||
|
* Support empty tuples. [#55061](https://github.com/ClickHouse/ClickHouse/pull/55061) ([Amos Bird](https://github.com/amosbird)).
|
||||||
|
* Add Hilbert Curve encode and decode functions. [#60156](https://github.com/ClickHouse/ClickHouse/pull/60156) ([Artem Mustafin](https://github.com/Artemmm91)).
|
||||||
|
* Add support for index analysis over `hilbertEncode`. [#64662](https://github.com/ClickHouse/ClickHouse/pull/64662) ([Artem Mustafin](https://github.com/Artemmm91)).
|
||||||
|
* Added support for reading `LINESTRING` geometry in the WKT format using function `readWKTLineString`. [#62519](https://github.com/ClickHouse/ClickHouse/pull/62519) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)).
|
||||||
|
* Allow to attach parts from a different disk. [#63087](https://github.com/ClickHouse/ClickHouse/pull/63087) ([Unalian](https://github.com/Unalian)).
|
||||||
|
* Added new SQL functions `generateSnowflakeID` for generating Twitter-style Snowflake IDs. [#63577](https://github.com/ClickHouse/ClickHouse/pull/63577) ([Danila Puzov](https://github.com/kazalika)).
|
||||||
|
* Added `merge_workload` and `mutation_workload` settings to regulate how resources are utilized and shared between merges, mutations and other workloads. [#64061](https://github.com/ClickHouse/ClickHouse/pull/64061) ([Sergei Trifonov](https://github.com/serxa)).
|
||||||
|
* Add support for comparing `IPv4` and `IPv6` types using the `=` operator. [#64292](https://github.com/ClickHouse/ClickHouse/pull/64292) ([Francisco J. Jurado Moreno](https://github.com/Beetelbrox)).
|
||||||
|
* Support decimal arguments in binary math functions (pow, atan2, max2, min2, hypot). [#64582](https://github.com/ClickHouse/ClickHouse/pull/64582) ([Mikhail Gorshkov](https://github.com/mgorshkov)).
|
||||||
|
* Added SQL functions `parseReadableSize` (along with `OrNull` and `OrZero` variants). [#64742](https://github.com/ClickHouse/ClickHouse/pull/64742) ([Francisco J. Jurado Moreno](https://github.com/Beetelbrox)).
|
||||||
|
* Add server settings `max_table_num_to_throw` and `max_database_num_to_throw` to limit the number of databases or tables on `CREATE` queries. [#64781](https://github.com/ClickHouse/ClickHouse/pull/64781) ([Xu Jia](https://github.com/XuJia0210)).
|
||||||
|
* Add `_time` virtual column to file alike storages (s3/file/hdfs/url/azureBlobStorage). [#64947](https://github.com/ClickHouse/ClickHouse/pull/64947) ([Ilya Golshtein](https://github.com/ilejn)).
|
||||||
|
* Introduced new functions `base64URLEncode`, `base64URLDecode` and `tryBase64URLDecode`. [#64991](https://github.com/ClickHouse/ClickHouse/pull/64991) ([Mikhail Gorshkov](https://github.com/mgorshkov)).
|
||||||
|
* Add new function `editDistanceUTF8`, which calculates the [edit distance](https://en.wikipedia.org/wiki/Edit_distance) between two UTF8 strings. [#65269](https://github.com/ClickHouse/ClickHouse/pull/65269) ([LiuNeng](https://github.com/liuneng1994)).
|
||||||
|
* Add `http_response_headers` configuration to support custom response headers in custom HTTP handlers. [#63562](https://github.com/ClickHouse/ClickHouse/pull/63562) ([Grigorii](https://github.com/GSokol)).
|
||||||
|
* Added a new table function `loop` to support returning query results in an infinite loop. [#63452](https://github.com/ClickHouse/ClickHouse/pull/63452) ([Sariel](https://github.com/sarielwxm)). This is useful for testing.
|
||||||
|
* Introduced two additional columns in the `system.query_log`: `used_privileges` and `missing_privileges`. `used_privileges` is populated with the privileges that were checked during query execution, and `missing_privileges` contains required privileges that are missing. [#64597](https://github.com/ClickHouse/ClickHouse/pull/64597) ([Alexey Katsman](https://github.com/alexkats)).
|
||||||
|
* Added a setting `output_format_pretty_display_footer_column_names` which when enabled displays column names at the end of the table for long tables (50 rows by default), with the threshold value for minimum number of rows controlled by `output_format_pretty_display_footer_column_names_min_rows`. [#65144](https://github.com/ClickHouse/ClickHouse/pull/65144) ([Shaun Struwig](https://github.com/Blargian)).
|
||||||
|
|
||||||
|
#### Experimental Feature
|
||||||
|
* Introduce statistics of type "number of distinct values". [#59357](https://github.com/ClickHouse/ClickHouse/pull/59357) ([Han Fei](https://github.com/hanfei1991)).
|
||||||
|
* Support statistics with ReplicatedMergeTree. [#64934](https://github.com/ClickHouse/ClickHouse/pull/64934) ([Han Fei](https://github.com/hanfei1991)).
|
||||||
|
* If "replica group" is configured for a `Replicated` database, automatically create a cluster that includes replicas from all groups. [#64312](https://github.com/ClickHouse/ClickHouse/pull/64312) ([Alexander Tokmakov](https://github.com/tavplubix)).
|
||||||
|
* Add settings `parallel_replicas_custom_key_range_lower` and `parallel_replicas_custom_key_range_upper` to control how parallel replicas with dynamic shards parallelizes queries when using a range filter. [#64604](https://github.com/ClickHouse/ClickHouse/pull/64604) ([josh-hildred](https://github.com/josh-hildred)).
|
||||||
|
|
||||||
|
#### Performance Improvement
|
||||||
|
* Add the ability to reshuffle rows during insert to optimize for size without violating the order set by `PRIMARY KEY`. It's controlled by the setting `optimize_row_order` (off by default). [#63578](https://github.com/ClickHouse/ClickHouse/pull/63578) ([Igor Markelov](https://github.com/ElderlyPassionFruit)).
|
||||||
|
* Add a native parquet reader, which can read parquet binary to ClickHouse Columns directly. It's controlled by the setting `input_format_parquet_use_native_reader` (disabled by default). [#60361](https://github.com/ClickHouse/ClickHouse/pull/60361) ([ZhiHong Zhang](https://github.com/copperybean)).
|
||||||
|
* Support partial trivial count optimization when the query filter is able to select exact ranges from merge tree tables. [#60463](https://github.com/ClickHouse/ClickHouse/pull/60463) ([Amos Bird](https://github.com/amosbird)).
|
||||||
|
* Reduce max memory usage of multithreaded `INSERT`s by collecting chunks of multiple threads in a single transform. [#61047](https://github.com/ClickHouse/ClickHouse/pull/61047) ([Yarik Briukhovetskyi](https://github.com/yariks5s)).
|
||||||
|
* Reduce the memory usage when using Azure object storage by using fixed memory allocation, avoiding the allocation of an extra buffer. [#63160](https://github.com/ClickHouse/ClickHouse/pull/63160) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
|
||||||
|
* Reduce the number of virtual function calls in `ColumnNullable::size`. [#60556](https://github.com/ClickHouse/ClickHouse/pull/60556) ([HappenLee](https://github.com/HappenLee)).
|
||||||
|
* Speedup `splitByRegexp` when the regular expression argument is a single-character. [#62696](https://github.com/ClickHouse/ClickHouse/pull/62696) ([Robert Schulze](https://github.com/rschu1ze)).
|
||||||
|
* Speed up aggregation by 8-bit and 16-bit keys by keeping track of the min and max keys used. This allows to reduce the number of cells that need to be verified. [#62746](https://github.com/ClickHouse/ClickHouse/pull/62746) ([Jiebin Sun](https://github.com/jiebinn)).
|
||||||
|
* Optimize operator IN when the left hand side is `LowCardinality` and the right is a set of constants. [#64060](https://github.com/ClickHouse/ClickHouse/pull/64060) ([Zhiguo Zhou](https://github.com/ZhiguoZh)).
|
||||||
|
* Use a thread pool to initialize and destroy hash tables inside `ConcurrentHashJoin`. [#64241](https://github.com/ClickHouse/ClickHouse/pull/64241) ([Nikita Taranov](https://github.com/nickitat)).
|
||||||
|
* Optimized vertical merges in tables with sparse columns. [#64311](https://github.com/ClickHouse/ClickHouse/pull/64311) ([Anton Popov](https://github.com/CurtizJ)).
|
||||||
|
* Enabled prefetches of data from remote filesystem during vertical merges. It improves latency of vertical merges in tables with data stored on remote filesystem. [#64314](https://github.com/ClickHouse/ClickHouse/pull/64314) ([Anton Popov](https://github.com/CurtizJ)).
|
||||||
|
* Reduce redundant calls to `isDefault` of `ColumnSparse::filter` to improve performance. [#64426](https://github.com/ClickHouse/ClickHouse/pull/64426) ([Jiebin Sun](https://github.com/jiebinn)).
|
||||||
|
* Speedup `find_super_nodes` and `find_big_family` keeper-client commands by making multiple asynchronous getChildren requests. [#64628](https://github.com/ClickHouse/ClickHouse/pull/64628) ([Alexander Gololobov](https://github.com/davenger)).
|
||||||
|
* Improve function `least`/`greatest` for nullable numberic type arguments. [#64668](https://github.com/ClickHouse/ClickHouse/pull/64668) ([KevinyhZou](https://github.com/KevinyhZou)).
|
||||||
|
* Allow merging two consequent filtering steps of a query plan. This improves filter-push-down optimization if the filter condition can be pushed down from the parent step. [#64760](https://github.com/ClickHouse/ClickHouse/pull/64760) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Remove bad optimization in the vertical final implementation and re-enable vertical final algorithm by default. [#64783](https://github.com/ClickHouse/ClickHouse/pull/64783) ([Duc Canh Le](https://github.com/canhld94)).
|
||||||
|
* Remove ALIAS nodes from the filter expression. This slightly improves performance for queries with `PREWHERE` (with the new analyzer). [#64793](https://github.com/ClickHouse/ClickHouse/pull/64793) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Re-enable OpenSSL session caching. [#65111](https://github.com/ClickHouse/ClickHouse/pull/65111) ([Robert Schulze](https://github.com/rschu1ze)).
|
||||||
|
* Added settings to disable materialization of skip indexes and statistics on inserts (`materialize_skip_indexes_on_insert` and `materialize_statistics_on_insert`). [#64391](https://github.com/ClickHouse/ClickHouse/pull/64391) ([Anton Popov](https://github.com/CurtizJ)).
|
||||||
|
* Use the allocated memory size to calculate the row group size and reduce the peak memory of the parquet writer in the single-threaded mode. [#64424](https://github.com/ClickHouse/ClickHouse/pull/64424) ([LiuNeng](https://github.com/liuneng1994)).
|
||||||
|
* Improve the iterator of sparse column to reduce call of `size`. [#64497](https://github.com/ClickHouse/ClickHouse/pull/64497) ([Jiebin Sun](https://github.com/jiebinn)).
|
||||||
|
* Update condition to use server-side copy for backups to Azure blob storage. [#64518](https://github.com/ClickHouse/ClickHouse/pull/64518) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
|
||||||
|
* Optimized memory usage of vertical merges for tables with high number of skip indexes. [#64580](https://github.com/ClickHouse/ClickHouse/pull/64580) ([Anton Popov](https://github.com/CurtizJ)).
|
||||||
|
|
||||||
|
#### Improvement
|
||||||
|
* `SHOW CREATE TABLE` executed on top of system tables will now show the super handy comment unique for each table which will explain why this table is needed. [#63788](https://github.com/ClickHouse/ClickHouse/pull/63788) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)).
|
||||||
|
* The second argument (scale) of functions `round()`, `roundBankers()`, `floor()`, `ceil()` and `trunc()` can now be non-const. [#64798](https://github.com/ClickHouse/ClickHouse/pull/64798) ([Mikhail Gorshkov](https://github.com/mgorshkov)).
|
||||||
|
* Hot reload storage policy for `Distributed` tables when adding a new disk. [#58285](https://github.com/ClickHouse/ClickHouse/pull/58285) ([Duc Canh Le](https://github.com/canhld94)).
|
||||||
|
* Avoid possible deadlock during MergeTree index analysis when scheduling threads in a saturated service. [#59427](https://github.com/ClickHouse/ClickHouse/pull/59427) ([Sean Haynes](https://github.com/seandhaynes)).
|
||||||
|
* Several minor corner case fixes to S3 proxy support & tunneling. [#63427](https://github.com/ClickHouse/ClickHouse/pull/63427) ([Arthur Passos](https://github.com/arthurpassos)).
|
||||||
|
* Improve io_uring resubmit visibility. Rename profile event `IOUringSQEsResubmits` -> `IOUringSQEsResubmitsAsync` and add a new one `IOUringSQEsResubmitsSync`. [#63699](https://github.com/ClickHouse/ClickHouse/pull/63699) ([Tomer Shafir](https://github.com/tomershafir)).
|
||||||
|
* Added a new setting, `metadata_keep_free_space_bytes` to keep free space on the metadata storage disk. [#64128](https://github.com/ClickHouse/ClickHouse/pull/64128) ([MikhailBurdukov](https://github.com/MikhailBurdukov)).
|
||||||
|
* Add metrics to track the number of directories created and removed by the `plain_rewritable` metadata storage, and the number of entries in the local-to-remote in-memory map. [#64175](https://github.com/ClickHouse/ClickHouse/pull/64175) ([Julia Kartseva](https://github.com/jkartseva)).
|
||||||
|
* The query cache now considers identical queries with different settings as different. This increases robustness in cases where different settings (e.g. `limit` or `additional_table_filters`) would affect the query result. [#64205](https://github.com/ClickHouse/ClickHouse/pull/64205) ([Robert Schulze](https://github.com/rschu1ze)).
|
||||||
|
* Support the non standard error code `QpsLimitExceeded` in object storage as a retryable error. [#64225](https://github.com/ClickHouse/ClickHouse/pull/64225) ([Sema Checherinda](https://github.com/CheSema)).
|
||||||
|
* Forbid converting a MergeTree table to replicated if the zookeeper path for this table already exists. [#64244](https://github.com/ClickHouse/ClickHouse/pull/64244) ([Kirill](https://github.com/kirillgarbar)).
|
||||||
|
* Added a new setting `input_format_parquet_prefer_block_bytes` to control the average output block bytes, and modified the default value of `input_format_parquet_max_block_size` to 65409. [#64427](https://github.com/ClickHouse/ClickHouse/pull/64427) ([LiuNeng](https://github.com/liuneng1994)).
|
||||||
|
* Allow proxy to be bypassed for hosts specified in `no_proxy` env variable and ClickHouse proxy configuration. [#63314](https://github.com/ClickHouse/ClickHouse/pull/63314) ([Arthur Passos](https://github.com/arthurpassos)).
|
||||||
|
* Always start Keeper with sufficient amount of threads in global thread pool. [#64444](https://github.com/ClickHouse/ClickHouse/pull/64444) ([Duc Canh Le](https://github.com/canhld94)).
|
||||||
|
* Settings from the user's config don't affect merges and mutations for `MergeTree` on top of object storage. [#64456](https://github.com/ClickHouse/ClickHouse/pull/64456) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Support the non standard error code `TotalQpsLimitExceeded` in object storage as a retryable error. [#64520](https://github.com/ClickHouse/ClickHouse/pull/64520) ([Sema Checherinda](https://github.com/CheSema)).
|
||||||
|
* Updated Advanced Dashboard for both open-source and ClickHouse Cloud versions to include a chart for 'Maximum concurrent network connections'. [#64610](https://github.com/ClickHouse/ClickHouse/pull/64610) ([Thom O'Connor](https://github.com/thomoco)).
|
||||||
|
* Improve progress report on `zeros_mt` and `generateRandom`. [#64804](https://github.com/ClickHouse/ClickHouse/pull/64804) ([Raúl Marín](https://github.com/Algunenano)).
|
||||||
|
* Add an asynchronous metric `jemalloc.profile.active` to show whether sampling is currently active. This is an activation mechanism in addition to prof.active; both must be active for the calling thread to sample. [#64842](https://github.com/ClickHouse/ClickHouse/pull/64842) ([Unalian](https://github.com/Unalian)).
|
||||||
|
* Remove mark of `allow_experimental_join_condition` as important. This mark may have prevented distributed queries in a mixed versions cluster from being executed successfully. [#65008](https://github.com/ClickHouse/ClickHouse/pull/65008) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)).
|
||||||
|
* Added server Asynchronous metrics `DiskGetObjectThrottler*` and `DiskGetObjectThrottler*` reflecting request per second rate limit defined with `s3_max_get_rps` and `s3_max_put_rps` disk settings and currently available number of requests that could be sent without hitting throttling limit on the disk. Metrics are defined for every disk that has a configured limit. [#65050](https://github.com/ClickHouse/ClickHouse/pull/65050) ([Sergei Trifonov](https://github.com/serxa)).
|
||||||
|
* Initialize global trace collector for `Poco::ThreadPool` (needed for Keeper, etc). [#65239](https://github.com/ClickHouse/ClickHouse/pull/65239) ([Kseniia Sumarokova](https://github.com/kssenii)).
|
||||||
|
* Add a validation when creating a user with `bcrypt_hash`. [#65242](https://github.com/ClickHouse/ClickHouse/pull/65242) ([Raúl Marín](https://github.com/Algunenano)).
|
||||||
|
* Add profile events for number of rows read during/after `PREWHERE`. [#64198](https://github.com/ClickHouse/ClickHouse/pull/64198) ([Nikita Taranov](https://github.com/nickitat)).
|
||||||
|
* Print query in `EXPLAIN PLAN` with parallel replicas. [#64298](https://github.com/ClickHouse/ClickHouse/pull/64298) ([vdimir](https://github.com/vdimir)).
|
||||||
|
* Rename `allow_deprecated_functions` to `allow_deprecated_error_prone_window_functions`. [#64358](https://github.com/ClickHouse/ClickHouse/pull/64358) ([Raúl Marín](https://github.com/Algunenano)).
|
||||||
|
* Respect `max_read_buffer_size` setting for file descriptors as well in the `file` table function. [#64532](https://github.com/ClickHouse/ClickHouse/pull/64532) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
|
* Disable transactions for unsupported storages even for materialized views. [#64918](https://github.com/ClickHouse/ClickHouse/pull/64918) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Forbid `QUALIFY` clause in the old analyzer. The old analyzer ignored `QUALIFY`, so it could lead to unexpected data removal in mutations. [#65356](https://github.com/ClickHouse/ClickHouse/pull/65356) ([Dmitry Novik](https://github.com/novikd)).
|
||||||
|
|
||||||
|
#### Bug Fix (user-visible misbehavior in an official stable release)
|
||||||
|
* A bug in Apache ORC library was fixed: Fixed ORC statistics calculation, when writing, for unsigned types on all platforms and Int8 on ARM. [#64563](https://github.com/ClickHouse/ClickHouse/pull/64563) ([Michael Kolupaev](https://github.com/al13n321)).
|
||||||
|
* Returned back the behaviour of how ClickHouse works and interprets Tuples in CSV format. This change effectively reverts https://github.com/ClickHouse/ClickHouse/pull/60994 and makes it available only under a few settings: `output_format_csv_serialize_tuple_into_separate_columns`, `input_format_csv_deserialize_separate_columns_into_tuple` and `input_format_csv_try_infer_strings_from_quoted_tuples`. [#65170](https://github.com/ClickHouse/ClickHouse/pull/65170) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)).
|
||||||
|
* Fix a permission error where a user in a specific situation can escalate their privileges on the default database without necessary grants. [#64769](https://github.com/ClickHouse/ClickHouse/pull/64769) ([pufit](https://github.com/pufit)).
|
||||||
|
* Fix crash with UniqInjectiveFunctionsEliminationPass and uniqCombined. [#65188](https://github.com/ClickHouse/ClickHouse/pull/65188) ([Raúl Marín](https://github.com/Algunenano)).
|
||||||
|
* Fix a bug in ClickHouse Keeper that causes digest mismatch during closing session. [#65198](https://github.com/ClickHouse/ClickHouse/pull/65198) ([Aleksei Filatov](https://github.com/aalexfvk)).
|
||||||
|
* Use correct memory alignment for Distinct combinator. Previously, crash could happen because of invalid memory allocation when the combinator was used. [#65379](https://github.com/ClickHouse/ClickHouse/pull/65379) ([Antonio Andelic](https://github.com/antonio2368)).
|
||||||
|
* Fix crash with `DISTINCT` and window functions. [#64767](https://github.com/ClickHouse/ClickHouse/pull/64767) ([Igor Nikonov](https://github.com/devcrafter)).
|
||||||
|
* Fixed 'set' skip index not working with IN and indexHint(). [#62083](https://github.com/ClickHouse/ClickHouse/pull/62083) ([Michael Kolupaev](https://github.com/al13n321)).
|
||||||
|
* Support executing function during assignment of parameterized view value. [#63502](https://github.com/ClickHouse/ClickHouse/pull/63502) ([SmitaRKulkarni](https://github.com/SmitaRKulkarni)).
|
||||||
|
* Fixed parquet memory tracking. [#63584](https://github.com/ClickHouse/ClickHouse/pull/63584) ([Michael Kolupaev](https://github.com/al13n321)).
|
||||||
|
* Fixed reading of columns of type `Tuple(Map(LowCardinality(String), String), ...)`. [#63956](https://github.com/ClickHouse/ClickHouse/pull/63956) ([Anton Popov](https://github.com/CurtizJ)).
|
||||||
|
* Fix an `Cyclic aliases` error for cyclic aliases of different type (expression and function). [#63993](https://github.com/ClickHouse/ClickHouse/pull/63993) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* This fix will use a proper redefined context with the correct definer for each individual view in the query pipeline. [#64079](https://github.com/ClickHouse/ClickHouse/pull/64079) ([pufit](https://github.com/pufit)).
|
||||||
|
* Fix analyzer: "Not found column" error is fixed when using INTERPOLATE. [#64096](https://github.com/ClickHouse/ClickHouse/pull/64096) ([Yakov Olkhovskiy](https://github.com/yakov-olkhovskiy)).
|
||||||
|
* Fix creating backups to S3 buckets with different credentials from the disk containing the file. [#64153](https://github.com/ClickHouse/ClickHouse/pull/64153) ([Antonio Andelic](https://github.com/antonio2368)).
|
||||||
|
* The query cache now considers two identical queries against different databases as different. The previous behavior could be used to bypass missing privileges to read from a table. [#64199](https://github.com/ClickHouse/ClickHouse/pull/64199) ([Robert Schulze](https://github.com/rschu1ze)).
|
||||||
|
* Fix possible abort on uncaught exception in ~WriteBufferFromFileDescriptor in StatusFile. [#64206](https://github.com/ClickHouse/ClickHouse/pull/64206) ([Kruglov Pavel](https://github.com/Avogar)).
|
||||||
|
* Fix `duplicate alias` error for distributed queries with `ARRAY JOIN`. [#64226](https://github.com/ClickHouse/ClickHouse/pull/64226) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix unexpected accurateCast from string to integer. [#64255](https://github.com/ClickHouse/ClickHouse/pull/64255) ([wudidapaopao](https://github.com/wudidapaopao)).
|
||||||
|
* Fixed CNF simplification, in case any OR group contains mutually exclusive atoms. [#64256](https://github.com/ClickHouse/ClickHouse/pull/64256) ([Eduard Karacharov](https://github.com/korowa)).
|
||||||
|
* Fix Query Tree size validation. [#64377](https://github.com/ClickHouse/ClickHouse/pull/64377) ([Dmitry Novik](https://github.com/novikd)).
|
||||||
|
* Fix `Logical error: Bad cast` for `Buffer` table with `PREWHERE`. [#64388](https://github.com/ClickHouse/ClickHouse/pull/64388) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Prevent recursive logging in `blob_storage_log` when it's stored on object storage. [#64393](https://github.com/ClickHouse/ClickHouse/pull/64393) ([vdimir](https://github.com/vdimir)).
|
||||||
|
* Fixed `CREATE TABLE AS` queries for tables with default expressions. [#64455](https://github.com/ClickHouse/ClickHouse/pull/64455) ([Anton Popov](https://github.com/CurtizJ)).
|
||||||
|
* Fixed `optimize_read_in_order` behaviour for ORDER BY ... NULLS FIRST / LAST on tables with nullable keys. [#64483](https://github.com/ClickHouse/ClickHouse/pull/64483) ([Eduard Karacharov](https://github.com/korowa)).
|
||||||
|
* Fix the `Expression nodes list expected 1 projection names` and `Unknown expression or identifier` errors for queries with aliases to `GLOBAL IN.`. [#64517](https://github.com/ClickHouse/ClickHouse/pull/64517) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix an error `Cannot find column` in distributed queries with constant CTE in the `GROUP BY` key. [#64519](https://github.com/ClickHouse/ClickHouse/pull/64519) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix the crash loop when restoring from backup is blocked by creating an MV with a definer that hasn't been restored yet. [#64595](https://github.com/ClickHouse/ClickHouse/pull/64595) ([pufit](https://github.com/pufit)).
|
||||||
|
* Fix the output of function `formatDateTimeInJodaSyntax` when a formatter generates an uneven number of characters and the last character is `0`. For example, `SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')` now correctly returns `150` instead of previously `15`. [#64614](https://github.com/ClickHouse/ClickHouse/pull/64614) ([LiuNeng](https://github.com/liuneng1994)).
|
||||||
|
* Do not rewrite aggregation if `-If` combinator is already used. [#64638](https://github.com/ClickHouse/ClickHouse/pull/64638) ([Dmitry Novik](https://github.com/novikd)).
|
||||||
|
* Fix type inference for float (in case of small buffer, i.e. `--max_read_buffer_size 1`). [#64641](https://github.com/ClickHouse/ClickHouse/pull/64641) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
|
* Fix bug which could lead to non-working TTLs with expressions. [#64694](https://github.com/ClickHouse/ClickHouse/pull/64694) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Fix removing the `WHERE` and `PREWHERE` expressions, which are always true (for the new analyzer). [#64695](https://github.com/ClickHouse/ClickHouse/pull/64695) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fixed excessive part elimination by token-based text indexes (`ngrambf` , `full_text`) when filtering by result of `startsWith`, `endsWith`, `match`, `multiSearchAny`. [#64720](https://github.com/ClickHouse/ClickHouse/pull/64720) ([Eduard Karacharov](https://github.com/korowa)).
|
||||||
|
* Fixes incorrect behaviour of ANSI CSI escaping in the `UTF8::computeWidth` function. [#64756](https://github.com/ClickHouse/ClickHouse/pull/64756) ([Shaun Struwig](https://github.com/Blargian)).
|
||||||
|
* Fix a case of incorrect removal of `ORDER BY` / `LIMIT BY` across subqueries. [#64766](https://github.com/ClickHouse/ClickHouse/pull/64766) ([Raúl Marín](https://github.com/Algunenano)).
|
||||||
|
* Fix (experimental) unequal join with subqueries for sets which are in the mixed join conditions. [#64775](https://github.com/ClickHouse/ClickHouse/pull/64775) ([lgbo](https://github.com/lgbo-ustc)).
|
||||||
|
* Fix crash in a local cache over `plain_rewritable` disk. [#64778](https://github.com/ClickHouse/ClickHouse/pull/64778) ([Julia Kartseva](https://github.com/jkartseva)).
|
||||||
|
* Keeper fix: return correct value for `zk_latest_snapshot_size` in `mntr` command. [#64784](https://github.com/ClickHouse/ClickHouse/pull/64784) ([Antonio Andelic](https://github.com/antonio2368)).
|
||||||
|
* Fix `Cannot find column` in distributed query with `ARRAY JOIN` by `Nested` column. Fixes [#64755](https://github.com/ClickHouse/ClickHouse/issues/64755). [#64801](https://github.com/ClickHouse/ClickHouse/pull/64801) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix memory leak in slru cache policy. [#64803](https://github.com/ClickHouse/ClickHouse/pull/64803) ([Kseniia Sumarokova](https://github.com/kssenii)).
|
||||||
|
* Fixed possible incorrect memory tracking in several kinds of queries: queries that read any data from S3, queries via http protocol, asynchronous inserts. [#64844](https://github.com/ClickHouse/ClickHouse/pull/64844) ([Anton Popov](https://github.com/CurtizJ)).
|
||||||
|
* Fix the `Block structure mismatch` error for queries reading with `PREWHERE` from the materialized view when the materialized view has columns of different types than the source table. Fixes [#64611](https://github.com/ClickHouse/ClickHouse/issues/64611). [#64855](https://github.com/ClickHouse/ClickHouse/pull/64855) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix rare crash when table has TTL with subquery + database replicated + parallel replicas + analyzer. It's really rare, but please don't use TTLs with subqueries. [#64858](https://github.com/ClickHouse/ClickHouse/pull/64858) ([alesapin](https://github.com/alesapin)).
|
||||||
|
* Fix duplicating `Delete` events in `blob_storage_log` in case of large batch to delete. [#64924](https://github.com/ClickHouse/ClickHouse/pull/64924) ([vdimir](https://github.com/vdimir)).
|
||||||
|
* Fixed `Session moved to another server` error from [Zoo]Keeper that might happen after server startup when the config has includes from [Zoo]Keeper. [#64986](https://github.com/ClickHouse/ClickHouse/pull/64986) ([Alexander Tokmakov](https://github.com/tavplubix)).
|
||||||
|
* Fix `ALTER MODIFY COMMENT` query that was broken for parameterized VIEWs in https://github.com/ClickHouse/ClickHouse/pull/54211. [#65031](https://github.com/ClickHouse/ClickHouse/pull/65031) ([Nikolay Degterinsky](https://github.com/evillique)).
|
||||||
|
* Fix `host_id` in DatabaseReplicated when `cluster_secure_connection` parameter is enabled. Previously all the connections within the cluster created by DatabaseReplicated were not secure, even if the parameter was enabled. [#65054](https://github.com/ClickHouse/ClickHouse/pull/65054) ([Nikolay Degterinsky](https://github.com/evillique)).
|
||||||
|
* Fixing the `Not-ready Set` error after the `PREWHERE` optimization for StorageMerge. [#65057](https://github.com/ClickHouse/ClickHouse/pull/65057) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Avoid writing to finalized buffer in File-like storages. [#65063](https://github.com/ClickHouse/ClickHouse/pull/65063) ([Kruglov Pavel](https://github.com/Avogar)).
|
||||||
|
* Fix possible infinite query duration in case of cyclic aliases. Fixes [#64849](https://github.com/ClickHouse/ClickHouse/issues/64849). [#65081](https://github.com/ClickHouse/ClickHouse/pull/65081) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix the `Unknown expression identifier` error for remote queries with `INTERPOLATE (alias)` (new analyzer). Fixes [#64636](https://github.com/ClickHouse/ClickHouse/issues/64636). [#65090](https://github.com/ClickHouse/ClickHouse/pull/65090) ([Nikolai Kochetov](https://github.com/KochetovNicolai)).
|
||||||
|
* Fix pushing arithmetic operations out of aggregation. In the new analyzer, optimization was applied only once. [#65104](https://github.com/ClickHouse/ClickHouse/pull/65104) ([Dmitry Novik](https://github.com/novikd)).
|
||||||
|
* Fix aggregate function name rewriting in the new analyzer. [#65110](https://github.com/ClickHouse/ClickHouse/pull/65110) ([Dmitry Novik](https://github.com/novikd)).
|
||||||
|
* Respond with 5xx instead of 200 OK in case of receive timeout while reading (parts of) the request body from the client socket. [#65118](https://github.com/ClickHouse/ClickHouse/pull/65118) ([Julian Maicher](https://github.com/jmaicher)).
|
||||||
|
* Fix possible crash for hedged requests. [#65206](https://github.com/ClickHouse/ClickHouse/pull/65206) ([Azat Khuzhin](https://github.com/azat)).
|
||||||
|
* Fix the bug in Hashed and Hashed_Array dictionary short circuit evaluation, which may read uninitialized number, leading to various errors. [#65256](https://github.com/ClickHouse/ClickHouse/pull/65256) ([jsc0218](https://github.com/jsc0218)).
|
||||||
|
* This PR ensures that the type of the constant(IN operator's second parameter) is always visible during the IN operator's type conversion process. Otherwise, losing type information may cause some conversions to fail, such as the conversion from DateTime to Date. This fixes ([#64487](https://github.com/ClickHouse/ClickHouse/issues/64487)). [#65315](https://github.com/ClickHouse/ClickHouse/pull/65315) ([pn](https://github.com/chloro-pn)).
|
||||||
|
|
||||||
|
#### Build/Testing/Packaging Improvement
|
||||||
|
* Add support for LLVM XRay. [#64592](https://github.com/ClickHouse/ClickHouse/pull/64592) [#64837](https://github.com/ClickHouse/ClickHouse/pull/64837) ([Tomer Shafir](https://github.com/tomershafir)).
|
||||||
|
* Unite s3/hdfs/azure storage implementations into a single class working with IObjectStorage. Same for *Cluster, data lakes and Queue storages. [#59767](https://github.com/ClickHouse/ClickHouse/pull/59767) ([Kseniia Sumarokova](https://github.com/kssenii)).
|
||||||
|
* Refactor data part writer to remove dependencies on MergeTreeData and DataPart. [#63620](https://github.com/ClickHouse/ClickHouse/pull/63620) ([Alexander Gololobov](https://github.com/davenger)).
|
||||||
|
* Refactor `KeyCondition` and key analysis to improve PartitionPruner and trivial count optimization. This is separated from [#60463](https://github.com/ClickHouse/ClickHouse/issues/60463) . [#61459](https://github.com/ClickHouse/ClickHouse/pull/61459) ([Amos Bird](https://github.com/amosbird)).
|
||||||
|
* Introduce assertions to verify all functions are called with columns of the right size. [#63723](https://github.com/ClickHouse/ClickHouse/pull/63723) ([Raúl Marín](https://github.com/Algunenano)).
|
||||||
|
* Make `network` service be required when using the `rc` init script to start the ClickHouse server daemon. [#60650](https://github.com/ClickHouse/ClickHouse/pull/60650) ([Chun-Sheng, Li](https://github.com/peter279k)).
|
||||||
|
* Reduce the size of some slow tests. [#64387](https://github.com/ClickHouse/ClickHouse/pull/64387) [#64452](https://github.com/ClickHouse/ClickHouse/pull/64452) ([Raúl Marín](https://github.com/Algunenano)).
|
||||||
|
* Replay ZooKeeper logs using keeper-bench. [#62481](https://github.com/ClickHouse/ClickHouse/pull/62481) ([Antonio Andelic](https://github.com/antonio2368)).
|
||||||
|
|
||||||
### <a id="245"></a> ClickHouse release 24.5, 2024-05-30
|
### <a id="245"></a> ClickHouse release 24.5, 2024-05-30
|
||||||
|
|
||||||
#### Backward Incompatible Change
|
#### Backward Incompatible Change
|
||||||
|
@ -122,7 +122,7 @@ add_library(global-libs INTERFACE)
|
|||||||
|
|
||||||
include (cmake/sanitize.cmake)
|
include (cmake/sanitize.cmake)
|
||||||
|
|
||||||
include (cmake/instrument.cmake)
|
include (cmake/xray_instrumentation.cmake)
|
||||||
|
|
||||||
option(ENABLE_COLORED_BUILD "Enable colors in compiler output" ON)
|
option(ENABLE_COLORED_BUILD "Enable colors in compiler output" ON)
|
||||||
|
|
||||||
@ -319,7 +319,6 @@ endif()
|
|||||||
# Disable floating-point expression contraction in order to get consistent floating point calculation results across platforms
|
# Disable floating-point expression contraction in order to get consistent floating point calculation results across platforms
|
||||||
set (COMPILER_FLAGS "${COMPILER_FLAGS} -ffp-contract=off")
|
set (COMPILER_FLAGS "${COMPILER_FLAGS} -ffp-contract=off")
|
||||||
|
|
||||||
# Our built-in unwinder only supports DWARF version up to 4.
|
|
||||||
set (DEBUG_INFO_FLAGS "-g")
|
set (DEBUG_INFO_FLAGS "-g")
|
||||||
|
|
||||||
# Disable omit frame pointer compiler optimization using -fno-omit-frame-pointer
|
# Disable omit frame pointer compiler optimization using -fno-omit-frame-pointer
|
||||||
@ -333,15 +332,15 @@ endif()
|
|||||||
|
|
||||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_FLAGS} ${CMAKE_CXX_FLAGS_ADD}")
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_FLAGS} ${CMAKE_CXX_FLAGS_ADD}")
|
||||||
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 ${DEBUG_INFO_FLAGS} ${CMAKE_CXX_FLAGS_ADD}")
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 ${DEBUG_INFO_FLAGS} ${CMAKE_CXX_FLAGS_ADD}")
|
||||||
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 ${DEBUG_INFO_FLAGS} ${CMAKE_CXX_FLAGS_ADD}")
|
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og ${DEBUG_INFO_FLAGS} ${CMAKE_CXX_FLAGS_ADD}")
|
||||||
|
|
||||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMPILER_FLAGS} ${CMAKE_C_FLAGS_ADD}")
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMPILER_FLAGS} ${CMAKE_C_FLAGS_ADD}")
|
||||||
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 ${DEBUG_INFO_FLAGS} ${CMAKE_C_FLAGS_ADD}")
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 ${DEBUG_INFO_FLAGS} ${CMAKE_C_FLAGS_ADD}")
|
||||||
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 ${DEBUG_INFO_FLAGS} ${CMAKE_C_FLAGS_ADD}")
|
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Og ${DEBUG_INFO_FLAGS} ${CMAKE_C_FLAGS_ADD}")
|
||||||
|
|
||||||
set (CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${COMPILER_FLAGS} ${CMAKE_ASM_FLAGS_ADD}")
|
set (CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${COMPILER_FLAGS} ${CMAKE_ASM_FLAGS_ADD}")
|
||||||
set (CMAKE_ASM_FLAGS_RELWITHDEBINFO "${CMAKE_ASM_FLAGS_RELWITHDEBINFO} -O3 ${DEBUG_INFO_FLAGS} ${CMAKE_ASM_FLAGS_ADD}")
|
set (CMAKE_ASM_FLAGS_RELWITHDEBINFO "${CMAKE_ASM_FLAGS_RELWITHDEBINFO} -O3 ${DEBUG_INFO_FLAGS} ${CMAKE_ASM_FLAGS_ADD}")
|
||||||
set (CMAKE_ASM_FLAGS_DEBUG "${CMAKE_ASM_FLAGS_DEBUG} -O0 ${DEBUG_INFO_FLAGS} ${CMAKE_ASM_FLAGS_ADD}")
|
set (CMAKE_ASM_FLAGS_DEBUG "${CMAKE_ASM_FLAGS_DEBUG} -Og ${DEBUG_INFO_FLAGS} ${CMAKE_ASM_FLAGS_ADD}")
|
||||||
|
|
||||||
if (OS_DARWIN)
|
if (OS_DARWIN)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
||||||
@ -399,7 +398,7 @@ option (ENABLE_GWP_ASAN "Enable Gwp-Asan" ON)
|
|||||||
# but GWP-ASan also wants to use mmap frequently,
|
# but GWP-ASan also wants to use mmap frequently,
|
||||||
# and due to a large number of memory mappings,
|
# and due to a large number of memory mappings,
|
||||||
# it does not work together well.
|
# it does not work together well.
|
||||||
if ((NOT OS_LINUX AND NOT OS_ANDROID) OR (CMAKE_BUILD_TYPE_UC STREQUAL "DEBUG"))
|
if ((NOT OS_LINUX AND NOT OS_ANDROID) OR (CMAKE_BUILD_TYPE_UC STREQUAL "DEBUG") OR SANITIZE)
|
||||||
set(ENABLE_GWP_ASAN OFF)
|
set(ENABLE_GWP_ASAN OFF)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
10
README.md
10
README.md
@ -34,20 +34,16 @@ curl https://clickhouse.com/ | sh
|
|||||||
|
|
||||||
Every month we get together with the community (users, contributors, customers, those interested in learning more about ClickHouse) to discuss what is coming in the latest release. If you are interested in sharing what you've built on ClickHouse, let us know.
|
Every month we get together with the community (users, contributors, customers, those interested in learning more about ClickHouse) to discuss what is coming in the latest release. If you are interested in sharing what you've built on ClickHouse, let us know.
|
||||||
|
|
||||||
* [v24.5 Community Call](https://clickhouse.com/company/events/v24-5-community-release-call) - May 30
|
* [v24.7 Community Call](https://clickhouse.com/company/events/v24-7-community-release-call) - Jul 30
|
||||||
|
|
||||||
## Upcoming Events
|
## Upcoming Events
|
||||||
|
|
||||||
Keep an eye out for upcoming meetups and events around the world. Somewhere else you want us to be? Please feel free to reach out to tyler `<at>` clickhouse `<dot>` com. You can also peruse [ClickHouse Events](https://clickhouse.com/company/news-events) for a list of all upcoming trainings, meetups, speaking engagements, etc.
|
Keep an eye out for upcoming meetups and events around the world. Somewhere else you want us to be? Please feel free to reach out to tyler `<at>` clickhouse `<dot>` com. You can also peruse [ClickHouse Events](https://clickhouse.com/company/news-events) for a list of all upcoming trainings, meetups, speaking engagements, etc.
|
||||||
|
|
||||||
* [ClickHouse Happy Hour @ Tom's Watch Bar - Los Angeles](https://www.meetup.com/clickhouse-los-angeles-user-group/events/300740584/) - May 22
|
|
||||||
* [ClickHouse & Confluent Meetup in Dubai](https://www.meetup.com/clickhouse-dubai-meetup-group/events/299629189/) - May 28
|
|
||||||
* [ClickHouse Meetup in Stockholm](https://www.meetup.com/clickhouse-stockholm-user-group/events/299752651/) - Jun 3
|
|
||||||
* [ClickHouse Meetup @ Cloudflare - San Francisco](https://www.meetup.com/clickhouse-silicon-valley-meetup-group/events/300523061/) - Jun 4
|
|
||||||
* [ClickHouse (クリックハウス) Meetup Tokyo](https://www.meetup.com/clickhouse-tokyo-user-group/events/300798053/) - Jun 5
|
|
||||||
* [ClickHouse Meetup in Amsterdam](https://www.meetup.com/clickhouse-netherlands-user-group/events/300781068/) - Jun 27
|
|
||||||
* [ClickHouse Meetup in Paris](https://www.meetup.com/clickhouse-france-user-group/events/300783448/) - Jul 9
|
* [ClickHouse Meetup in Paris](https://www.meetup.com/clickhouse-france-user-group/events/300783448/) - Jul 9
|
||||||
|
* [ClickHouse Cloud - Live Update Call](https://clickhouse.com/company/events/202407-cloud-update-live) - Jul 9
|
||||||
* [ClickHouse Meetup @ Ramp - New York City](https://www.meetup.com/clickhouse-new-york-user-group/events/300595845/) - Jul 9
|
* [ClickHouse Meetup @ Ramp - New York City](https://www.meetup.com/clickhouse-new-york-user-group/events/300595845/) - Jul 9
|
||||||
|
* [AWS Summit in New York](https://clickhouse.com/company/events/2024-07-awssummit-nyc) - Jul 10
|
||||||
* [ClickHouse Meetup @ Klaviyo - Boston](https://www.meetup.com/clickhouse-boston-user-group/events/300907870) - Jul 11
|
* [ClickHouse Meetup @ Klaviyo - Boston](https://www.meetup.com/clickhouse-boston-user-group/events/300907870) - Jul 11
|
||||||
|
|
||||||
## Recent Recordings
|
## Recent Recordings
|
||||||
|
@ -14,12 +14,16 @@ The following versions of ClickHouse server are currently supported with securit
|
|||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
|:-|:-|
|
|:-|:-|
|
||||||
|
| 24.6 | ✔️ |
|
||||||
| 24.5 | ✔️ |
|
| 24.5 | ✔️ |
|
||||||
| 24.4 | ✔️ |
|
| 24.4 | ✔️ |
|
||||||
| 24.3 | ✔️ |
|
| 24.3 | ✔️ |
|
||||||
| 24.2 | ❌ |
|
| 24.2 | ❌ |
|
||||||
| 24.1 | ❌ |
|
| 24.1 | ❌ |
|
||||||
| 23.* | ❌ |
|
| 23.12 | ❌ |
|
||||||
|
| 23.11 | ❌ |
|
||||||
|
| 23.10 | ❌ |
|
||||||
|
| 23.9 | ❌ |
|
||||||
| 23.8 | ✔️ |
|
| 23.8 | ✔️ |
|
||||||
| 23.7 | ❌ |
|
| 23.7 | ❌ |
|
||||||
| 23.6 | ❌ |
|
| 23.6 | ❌ |
|
||||||
|
@ -32,7 +32,7 @@ constexpr void static_for(F && f)
|
|||||||
template <is_enum T>
|
template <is_enum T>
|
||||||
struct fmt::formatter<T> : fmt::formatter<std::string_view>
|
struct fmt::formatter<T> : fmt::formatter<std::string_view>
|
||||||
{
|
{
|
||||||
constexpr auto format(T value, auto& format_context)
|
constexpr auto format(T value, auto& format_context) const
|
||||||
{
|
{
|
||||||
return formatter<string_view>::format(magic_enum::enum_name(value), format_context);
|
return formatter<string_view>::format(magic_enum::enum_name(value), format_context);
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
#include <base/types.h>
|
#include <base/types.h>
|
||||||
#include <base/unaligned.h>
|
#include <base/unaligned.h>
|
||||||
#include <base/simd.h>
|
#include <base/simd.h>
|
||||||
|
#include <fmt/core.h>
|
||||||
|
#include <fmt/ostream.h>
|
||||||
|
|
||||||
#include <city.h>
|
#include <city.h>
|
||||||
|
|
||||||
@ -376,3 +378,5 @@ namespace PackedZeroTraits
|
|||||||
|
|
||||||
|
|
||||||
std::ostream & operator<<(std::ostream & os, const StringRef & str);
|
std::ostream & operator<<(std::ostream & os, const StringRef & str);
|
||||||
|
|
||||||
|
template<> struct fmt::formatter<StringRef> : fmt::ostream_formatter {};
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -108,6 +108,14 @@ struct make_unsigned // NOLINT(readability-identifier-naming)
|
|||||||
using type = std::make_unsigned_t<T>;
|
using type = std::make_unsigned_t<T>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <> struct make_unsigned<Int8> { using type = UInt8; };
|
||||||
|
template <> struct make_unsigned<UInt8> { using type = UInt8; };
|
||||||
|
template <> struct make_unsigned<Int16> { using type = UInt16; };
|
||||||
|
template <> struct make_unsigned<UInt16> { using type = UInt16; };
|
||||||
|
template <> struct make_unsigned<Int32> { using type = UInt32; };
|
||||||
|
template <> struct make_unsigned<UInt32> { using type = UInt32; };
|
||||||
|
template <> struct make_unsigned<Int64> { using type = UInt64; };
|
||||||
|
template <> struct make_unsigned<UInt64> { using type = UInt64; };
|
||||||
template <> struct make_unsigned<Int128> { using type = UInt128; };
|
template <> struct make_unsigned<Int128> { using type = UInt128; };
|
||||||
template <> struct make_unsigned<UInt128> { using type = UInt128; };
|
template <> struct make_unsigned<UInt128> { using type = UInt128; };
|
||||||
template <> struct make_unsigned<Int256> { using type = UInt256; };
|
template <> struct make_unsigned<Int256> { using type = UInt256; };
|
||||||
@ -121,6 +129,14 @@ struct make_signed // NOLINT(readability-identifier-naming)
|
|||||||
using type = std::make_signed_t<T>;
|
using type = std::make_signed_t<T>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <> struct make_signed<Int8> { using type = Int8; };
|
||||||
|
template <> struct make_signed<UInt8> { using type = Int8; };
|
||||||
|
template <> struct make_signed<Int16> { using type = Int16; };
|
||||||
|
template <> struct make_signed<UInt16> { using type = Int16; };
|
||||||
|
template <> struct make_signed<Int32> { using type = Int32; };
|
||||||
|
template <> struct make_signed<UInt32> { using type = Int32; };
|
||||||
|
template <> struct make_signed<Int64> { using type = Int64; };
|
||||||
|
template <> struct make_signed<UInt64> { using type = Int64; };
|
||||||
template <> struct make_signed<Int128> { using type = Int128; };
|
template <> struct make_signed<Int128> { using type = Int128; };
|
||||||
template <> struct make_signed<UInt128> { using type = Int128; };
|
template <> struct make_signed<UInt128> { using type = Int128; };
|
||||||
template <> struct make_signed<Int256> { using type = Int256; };
|
template <> struct make_signed<Int256> { using type = Int256; };
|
||||||
|
@ -6,6 +6,9 @@ namespace
|
|||||||
{
|
{
|
||||||
std::string getFQDNOrHostNameImpl()
|
std::string getFQDNOrHostNameImpl()
|
||||||
{
|
{
|
||||||
|
#if defined(OS_DARWIN)
|
||||||
|
return Poco::Net::DNS::hostName();
|
||||||
|
#else
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return Poco::Net::DNS::thisHost().name();
|
return Poco::Net::DNS::thisHost().name();
|
||||||
@ -14,6 +17,7 @@ namespace
|
|||||||
{
|
{
|
||||||
return Poco::Net::DNS::hostName();
|
return Poco::Net::DNS::hostName();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
9
base/base/isSharedPtrUnique.h
Normal file
9
base/base/isSharedPtrUnique.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
bool isSharedPtrUnique(const std::shared_ptr<T> & ptr)
|
||||||
|
{
|
||||||
|
return ptr.use_count() == 1;
|
||||||
|
}
|
@ -1,32 +1,3 @@
|
|||||||
// Based on https://github.com/amdn/itoa and combined with our optimizations
|
|
||||||
//
|
|
||||||
//=== itoa.cpp - Fast integer to ascii conversion --*- C++ -*-//
|
|
||||||
//
|
|
||||||
// The MIT License (MIT)
|
|
||||||
// Copyright (c) 2016 Arturo Martin-de-Nicolas
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
|
||||||
// in the Software without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included
|
|
||||||
// in all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
// SOFTWARE.
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
#include <cstddef>
|
|
||||||
#include <cstdint>
|
|
||||||
#include <cstring>
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <base/defines.h>
|
#include <base/defines.h>
|
||||||
#include <base/extended_types.h>
|
#include <base/extended_types.h>
|
||||||
@ -34,99 +5,15 @@
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
template <typename T>
|
ALWAYS_INLINE inline char * outOneDigit(char * p, uint8_t value)
|
||||||
ALWAYS_INLINE inline constexpr T pow10(size_t x)
|
|
||||||
{
|
|
||||||
return x ? 10 * pow10<T>(x - 1) : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Division by a power of 10 is implemented using a multiplicative inverse.
|
|
||||||
// This strength reduction is also done by optimizing compilers, but
|
|
||||||
// presently the fastest results are produced by using the values
|
|
||||||
// for the multiplication and the shift as given by the algorithm
|
|
||||||
// described by Agner Fog in "Optimizing Subroutines in Assembly Language"
|
|
||||||
//
|
|
||||||
// http://www.agner.org/optimize/optimizing_assembly.pdf
|
|
||||||
//
|
|
||||||
// "Integer division by a constant (all processors)
|
|
||||||
// A floating point number can be divided by a constant by multiplying
|
|
||||||
// with the reciprocal. If we want to do the same with integers, we have
|
|
||||||
// to scale the reciprocal by 2n and then shift the product to the right
|
|
||||||
// by n. There are various algorithms for finding a suitable value of n
|
|
||||||
// and compensating for rounding errors. The algorithm described below
|
|
||||||
// was invented by Terje Mathisen, Norway, and not published elsewhere."
|
|
||||||
|
|
||||||
/// Division by constant is performed by:
|
|
||||||
/// 1. Adding 1 if needed;
|
|
||||||
/// 2. Multiplying by another constant;
|
|
||||||
/// 3. Shifting right by another constant.
|
|
||||||
template <typename UInt, bool add_, UInt multiplier_, unsigned shift_>
|
|
||||||
struct Division
|
|
||||||
{
|
|
||||||
static constexpr bool add{add_};
|
|
||||||
static constexpr UInt multiplier{multiplier_};
|
|
||||||
static constexpr unsigned shift{shift_};
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Select a type with appropriate number of bytes from the list of types.
|
|
||||||
/// First parameter is the number of bytes requested. Then goes a list of types with 1, 2, 4, ... number of bytes.
|
|
||||||
/// Example: SelectType<4, uint8_t, uint16_t, uint32_t, uint64_t> will select uint32_t.
|
|
||||||
template <size_t N, typename T, typename... Ts>
|
|
||||||
struct SelectType
|
|
||||||
{
|
|
||||||
using Result = typename SelectType<N / 2, Ts...>::Result;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T, typename... Ts>
|
|
||||||
struct SelectType<1, T, Ts...>
|
|
||||||
{
|
|
||||||
using Result = T;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Division by 10^N where N is the size of the type.
|
|
||||||
template <size_t N>
|
|
||||||
using DivisionBy10PowN = typename SelectType<
|
|
||||||
N,
|
|
||||||
Division<uint8_t, false, 205U, 11>, /// divide by 10
|
|
||||||
Division<uint16_t, true, 41943U, 22>, /// divide by 100
|
|
||||||
Division<uint32_t, false, 3518437209U, 45>, /// divide by 10000
|
|
||||||
Division<uint64_t, false, 12379400392853802749ULL, 90> /// divide by 100000000
|
|
||||||
>::Result;
|
|
||||||
|
|
||||||
template <size_t N>
|
|
||||||
using UnsignedOfSize = typename SelectType<N, uint8_t, uint16_t, uint32_t, uint64_t, __uint128_t>::Result;
|
|
||||||
|
|
||||||
/// Holds the result of dividing an unsigned N-byte variable by 10^N resulting in
|
|
||||||
template <size_t N>
|
|
||||||
struct QuotientAndRemainder
|
|
||||||
{
|
|
||||||
UnsignedOfSize<N> quotient; // quotient with fewer than 2*N decimal digits
|
|
||||||
UnsignedOfSize<N / 2> remainder; // remainder with at most N decimal digits
|
|
||||||
};
|
|
||||||
|
|
||||||
template <size_t N>
|
|
||||||
QuotientAndRemainder<N> inline split(UnsignedOfSize<N> value)
|
|
||||||
{
|
|
||||||
constexpr DivisionBy10PowN<N> division;
|
|
||||||
|
|
||||||
UnsignedOfSize<N> quotient = (division.multiplier * (UnsignedOfSize<2 * N>(value) + division.add)) >> division.shift;
|
|
||||||
UnsignedOfSize<N / 2> remainder = static_cast<UnsignedOfSize<N / 2>>(value - quotient * pow10<UnsignedOfSize<N / 2>>(N));
|
|
||||||
|
|
||||||
return {quotient, remainder};
|
|
||||||
}
|
|
||||||
|
|
||||||
ALWAYS_INLINE inline char * outDigit(char * p, uint8_t value)
|
|
||||||
{
|
{
|
||||||
*p = '0' + value;
|
*p = '0' + value;
|
||||||
++p;
|
return p + 1;
|
||||||
return p;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Using a lookup table to convert binary numbers from 0 to 99
|
// Using a lookup table to convert binary numbers from 0 to 99
|
||||||
// into ascii characters as described by Andrei Alexandrescu in
|
// into ascii characters as described by Andrei Alexandrescu in
|
||||||
// https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920/
|
// https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920/
|
||||||
|
|
||||||
const char digits[201] = "00010203040506070809"
|
const char digits[201] = "00010203040506070809"
|
||||||
"10111213141516171819"
|
"10111213141516171819"
|
||||||
"20212223242526272829"
|
"20212223242526272829"
|
||||||
@ -137,7 +24,6 @@ const char digits[201] = "00010203040506070809"
|
|||||||
"70717273747576777879"
|
"70717273747576777879"
|
||||||
"80818283848586878889"
|
"80818283848586878889"
|
||||||
"90919293949596979899";
|
"90919293949596979899";
|
||||||
|
|
||||||
ALWAYS_INLINE inline char * outTwoDigits(char * p, uint8_t value)
|
ALWAYS_INLINE inline char * outTwoDigits(char * p, uint8_t value)
|
||||||
{
|
{
|
||||||
memcpy(p, &digits[value * 2], 2);
|
memcpy(p, &digits[value * 2], 2);
|
||||||
@ -145,153 +31,260 @@ ALWAYS_INLINE inline char * outTwoDigits(char * p, uint8_t value)
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace convert
|
namespace jeaiii
|
||||||
{
|
{
|
||||||
template <typename UInt, size_t N = sizeof(UInt)>
|
/*
|
||||||
char * head(char * p, UInt u);
|
MIT License
|
||||||
template <typename UInt, size_t N = sizeof(UInt)>
|
|
||||||
char * tail(char * p, UInt u);
|
|
||||||
|
|
||||||
//===----------------------------------------------------------===//
|
Copyright (c) 2022 James Edward Anhalt III - https://github.com/jeaiii/itoa
|
||||||
// head: find most significant digit, skip leading zeros
|
|
||||||
//===----------------------------------------------------------===//
|
|
||||||
|
|
||||||
// "x" contains quotient and remainder after division by 10^N
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// quotient is less than 10^N
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
template <size_t N>
|
in the Software without restriction, including without limitation the rights
|
||||||
ALWAYS_INLINE inline char * head(char * p, QuotientAndRemainder<N> x)
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
struct pair
|
||||||
{
|
{
|
||||||
p = head(p, UnsignedOfSize<N / 2>(x.quotient));
|
char dd[2];
|
||||||
p = tail(p, x.remainder);
|
constexpr pair(char c) : dd{c, '\0'} { } /// NOLINT(google-explicit-constructor)
|
||||||
return p;
|
constexpr pair(int n) : dd{"0123456789"[n / 10], "0123456789"[n % 10]} { } /// NOLINT(google-explicit-constructor)
|
||||||
}
|
};
|
||||||
|
|
||||||
// "u" is less than 10^2*N
|
constexpr struct
|
||||||
template <typename UInt, size_t N>
|
|
||||||
ALWAYS_INLINE inline char * head(char * p, UInt u)
|
|
||||||
{
|
{
|
||||||
return u < pow10<UnsignedOfSize<N>>(N) ? head(p, UnsignedOfSize<N / 2>(u)) : head<N>(p, split<N>(u));
|
pair dd[100]{
|
||||||
}
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, //
|
||||||
|
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, //
|
||||||
|
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, //
|
||||||
|
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, //
|
||||||
|
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, //
|
||||||
|
50, 51, 52, 53, 54, 55, 56, 57, 58, 59, //
|
||||||
|
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, //
|
||||||
|
70, 71, 72, 73, 74, 75, 76, 77, 78, 79, //
|
||||||
|
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, //
|
||||||
|
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, //
|
||||||
|
};
|
||||||
|
pair fd[100]{
|
||||||
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', //
|
||||||
|
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, //
|
||||||
|
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, //
|
||||||
|
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, //
|
||||||
|
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, //
|
||||||
|
50, 51, 52, 53, 54, 55, 56, 57, 58, 59, //
|
||||||
|
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, //
|
||||||
|
70, 71, 72, 73, 74, 75, 76, 77, 78, 79, //
|
||||||
|
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, //
|
||||||
|
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, //
|
||||||
|
};
|
||||||
|
} digits;
|
||||||
|
|
||||||
// recursion base case, selected when "u" is one byte
|
constexpr UInt64 mask24 = (UInt64(1) << 24) - 1;
|
||||||
template <>
|
constexpr UInt64 mask32 = (UInt64(1) << 32) - 1;
|
||||||
ALWAYS_INLINE inline char * head<UnsignedOfSize<1>, 1>(char * p, UnsignedOfSize<1> u)
|
constexpr UInt64 mask57 = (UInt64(1) << 57) - 1;
|
||||||
|
|
||||||
|
template <bool, class, class F>
|
||||||
|
struct _cond
|
||||||
{
|
{
|
||||||
return u < 10 ? outDigit(p, u) : outTwoDigits(p, u);
|
using type = F;
|
||||||
}
|
};
|
||||||
|
template <class T, class F>
|
||||||
//===----------------------------------------------------------===//
|
struct _cond<true, T, F>
|
||||||
// tail: produce all digits including leading zeros
|
|
||||||
//===----------------------------------------------------------===//
|
|
||||||
|
|
||||||
// recursive step, "u" is less than 10^2*N
|
|
||||||
template <typename UInt, size_t N>
|
|
||||||
ALWAYS_INLINE inline char * tail(char * p, UInt u)
|
|
||||||
{
|
{
|
||||||
QuotientAndRemainder<N> x = split<N>(u);
|
using type = T;
|
||||||
p = tail(p, UnsignedOfSize<N / 2>(x.quotient));
|
};
|
||||||
p = tail(p, x.remainder);
|
template <bool B, class T, class F>
|
||||||
return p;
|
using cond = typename _cond<B, T, F>::type;
|
||||||
}
|
|
||||||
|
|
||||||
// recursion base case, selected when "u" is one byte
|
template <class T>
|
||||||
template <>
|
inline ALWAYS_INLINE char * to_text_from_integer(char * b, T i)
|
||||||
ALWAYS_INLINE inline char * tail<UnsignedOfSize<1>, 1>(char * p, UnsignedOfSize<1> u)
|
|
||||||
{
|
{
|
||||||
return outTwoDigits(p, u);
|
constexpr auto q = sizeof(T);
|
||||||
}
|
using U = cond<q == 1, char8_t, cond<q <= sizeof(UInt16), UInt16, cond<q <= sizeof(UInt32), UInt32, UInt64>>>;
|
||||||
|
|
||||||
//===----------------------------------------------------------===//
|
// convert bool to int before test with unary + to silence warning if T happens to be bool
|
||||||
// large values are >= 10^2*N
|
U const n = +i < 0 ? *b++ = '-', U(0) - U(i) : U(i);
|
||||||
// where x contains quotient and remainder after division by 10^N
|
|
||||||
//===----------------------------------------------------------===//
|
|
||||||
template <size_t N>
|
|
||||||
ALWAYS_INLINE inline char * large(char * p, QuotientAndRemainder<N> x)
|
|
||||||
{
|
|
||||||
QuotientAndRemainder<N> y = split<N>(x.quotient);
|
|
||||||
p = head(p, UnsignedOfSize<N / 2>(y.quotient));
|
|
||||||
p = tail(p, y.remainder);
|
|
||||||
p = tail(p, x.remainder);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===----------------------------------------------------------===//
|
if (n < U(1e2))
|
||||||
// handle values of "u" that might be >= 10^2*N
|
{
|
||||||
// where N is the size of "u" in bytes
|
/// This is changed from the original jeaiii implementation
|
||||||
//===----------------------------------------------------------===//
|
/// For small numbers the extra branch to call outOneDigit() is worth it as it saves some instructions
|
||||||
template <typename UInt, size_t N = sizeof(UInt)>
|
/// and a memory access (no need to read digits.fd[n])
|
||||||
ALWAYS_INLINE inline char * uitoa(char * p, UInt u)
|
/// This is not true for pure random numbers, but that's not the common use case of a database
|
||||||
{
|
/// Original jeaii code
|
||||||
if (u < pow10<UnsignedOfSize<N>>(N))
|
// *reinterpret_cast<pair *>(b) = digits.fd[n];
|
||||||
return head(p, UnsignedOfSize<N / 2>(u));
|
// return n < 10 ? b + 1 : b + 2;
|
||||||
QuotientAndRemainder<N> x = split<N>(u);
|
return n < 10 ? outOneDigit(b, n) : outTwoDigits(b, n);
|
||||||
|
}
|
||||||
|
if (n < UInt32(1e6))
|
||||||
|
{
|
||||||
|
if (sizeof(U) == 1 || n < U(1e4))
|
||||||
|
{
|
||||||
|
auto f0 = UInt32(10 * (1 << 24) / 1e3 + 1) * n;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 24];
|
||||||
|
if constexpr (sizeof(U) == 1)
|
||||||
|
b -= 1;
|
||||||
|
else
|
||||||
|
b -= n < U(1e3);
|
||||||
|
auto f2 = (f0 & mask24) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 24];
|
||||||
|
return b + 4;
|
||||||
|
}
|
||||||
|
auto f0 = UInt64(10 * (1ull << 32ull) / 1e5 + 1) * n;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 32];
|
||||||
|
if constexpr (sizeof(U) == 2)
|
||||||
|
b -= 1;
|
||||||
|
else
|
||||||
|
b -= n < U(1e5);
|
||||||
|
auto f2 = (f0 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 32];
|
||||||
|
auto f4 = (f2 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 4) = digits.dd[f4 >> 32];
|
||||||
|
return b + 6;
|
||||||
|
}
|
||||||
|
if (sizeof(U) == 4 || n < UInt64(1ull << 32ull))
|
||||||
|
{
|
||||||
|
if (n < U(1e8))
|
||||||
|
{
|
||||||
|
auto f0 = UInt64(10 * (1ull << 48ull) / 1e7 + 1) * n >> 16;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 32];
|
||||||
|
b -= n < U(1e7);
|
||||||
|
auto f2 = (f0 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 32];
|
||||||
|
auto f4 = (f2 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 4) = digits.dd[f4 >> 32];
|
||||||
|
auto f6 = (f4 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 6) = digits.dd[f6 >> 32];
|
||||||
|
return b + 8;
|
||||||
|
}
|
||||||
|
auto f0 = UInt64(10 * (1ull << 57ull) / 1e9 + 1) * n;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 57];
|
||||||
|
b -= n < UInt32(1e9);
|
||||||
|
auto f2 = (f0 & mask57) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 57];
|
||||||
|
auto f4 = (f2 & mask57) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 4) = digits.dd[f4 >> 57];
|
||||||
|
auto f6 = (f4 & mask57) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 6) = digits.dd[f6 >> 57];
|
||||||
|
auto f8 = (f6 & mask57) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 8) = digits.dd[f8 >> 57];
|
||||||
|
return b + 10;
|
||||||
|
}
|
||||||
|
|
||||||
return u < pow10<UnsignedOfSize<N>>(2 * N) ? head<N>(p, x) : large<N>(p, x);
|
// if we get here U must be UInt64 but some compilers don't know that, so reassign n to a UInt64 to avoid warnings
|
||||||
}
|
UInt32 z = n % UInt32(1e8);
|
||||||
|
UInt64 u = n / UInt32(1e8);
|
||||||
|
|
||||||
// selected when "u" is one byte
|
if (u < UInt32(1e2))
|
||||||
template <>
|
{
|
||||||
ALWAYS_INLINE inline char * uitoa<UnsignedOfSize<1>, 1>(char * p, UnsignedOfSize<1> u)
|
// u can't be 1 digit (if u < 10 it would have been handled above as a 9 digit 32bit number)
|
||||||
{
|
*reinterpret_cast<pair *>(b) = digits.dd[u];
|
||||||
if (u < 10)
|
b += 2;
|
||||||
return outDigit(p, u);
|
}
|
||||||
else if (u < 100)
|
else if (u < UInt32(1e6))
|
||||||
return outTwoDigits(p, u);
|
{
|
||||||
|
if (u < UInt32(1e4))
|
||||||
|
{
|
||||||
|
auto f0 = UInt32(10 * (1 << 24) / 1e3 + 1) * u;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 24];
|
||||||
|
b -= u < UInt32(1e3);
|
||||||
|
auto f2 = (f0 & mask24) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 24];
|
||||||
|
b += 4;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto f0 = UInt64(10 * (1ull << 32ull) / 1e5 + 1) * u;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 32];
|
||||||
|
b -= u < UInt32(1e5);
|
||||||
|
auto f2 = (f0 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 32];
|
||||||
|
auto f4 = (f2 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 4) = digits.dd[f4 >> 32];
|
||||||
|
b += 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (u < UInt32(1e8))
|
||||||
|
{
|
||||||
|
auto f0 = UInt64(10 * (1ull << 48ull) / 1e7 + 1) * u >> 16;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 32];
|
||||||
|
b -= u < UInt32(1e7);
|
||||||
|
auto f2 = (f0 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 32];
|
||||||
|
auto f4 = (f2 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 4) = digits.dd[f4 >> 32];
|
||||||
|
auto f6 = (f4 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 6) = digits.dd[f6 >> 32];
|
||||||
|
b += 8;
|
||||||
|
}
|
||||||
|
else if (u < UInt64(1ull << 32ull))
|
||||||
|
{
|
||||||
|
auto f0 = UInt64(10 * (1ull << 57ull) / 1e9 + 1) * u;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 57];
|
||||||
|
b -= u < UInt32(1e9);
|
||||||
|
auto f2 = (f0 & mask57) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 57];
|
||||||
|
auto f4 = (f2 & mask57) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 4) = digits.dd[f4 >> 57];
|
||||||
|
auto f6 = (f4 & mask57) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 6) = digits.dd[f6 >> 57];
|
||||||
|
auto f8 = (f6 & mask57) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 8) = digits.dd[f8 >> 57];
|
||||||
|
b += 10;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p = outDigit(p, u / 100);
|
UInt32 y = u % UInt32(1e8);
|
||||||
p = outTwoDigits(p, u % 100);
|
u /= UInt32(1e8);
|
||||||
return p;
|
|
||||||
|
// u is 2, 3, or 4 digits (if u < 10 it would have been handled above)
|
||||||
|
if (u < UInt32(1e2))
|
||||||
|
{
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.dd[u];
|
||||||
|
b += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto f0 = UInt32(10 * (1 << 24) / 1e3 + 1) * u;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.fd[f0 >> 24];
|
||||||
|
b -= u < UInt32(1e3);
|
||||||
|
auto f2 = (f0 & mask24) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 24];
|
||||||
|
b += 4;
|
||||||
|
}
|
||||||
|
// do 8 digits
|
||||||
|
auto f0 = (UInt64((1ull << 48ull) / 1e6 + 1) * y >> 16) + 1;
|
||||||
|
*reinterpret_cast<pair *>(b) = digits.dd[f0 >> 32];
|
||||||
|
auto f2 = (f0 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 32];
|
||||||
|
auto f4 = (f2 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 4) = digits.dd[f4 >> 32];
|
||||||
|
auto f6 = (f4 & mask32) * 100;
|
||||||
|
*reinterpret_cast<pair *>(b + 6) = digits.dd[f6 >> 32];
|
||||||
|
b += 8;
|
||||||
}
|
}
|
||||||
}
|
// do 8 digits
|
||||||
|
auto f0 = (UInt64((1ull << 48ull) / 1e6 + 1) * z >> 16) + 1;
|
||||||
//===----------------------------------------------------------===//
|
*reinterpret_cast<pair *>(b) = digits.dd[f0 >> 32];
|
||||||
// handle unsigned and signed integral operands
|
auto f2 = (f0 & mask32) * 100;
|
||||||
//===----------------------------------------------------------===//
|
*reinterpret_cast<pair *>(b + 2) = digits.dd[f2 >> 32];
|
||||||
|
auto f4 = (f2 & mask32) * 100;
|
||||||
// itoa: handle unsigned integral operands (selected by SFINAE)
|
*reinterpret_cast<pair *>(b + 4) = digits.dd[f4 >> 32];
|
||||||
template <typename U>
|
auto f6 = (f4 & mask32) * 100;
|
||||||
requires(!std::is_signed_v<U> && std::is_integral_v<U>)
|
*reinterpret_cast<pair *>(b + 6) = digits.dd[f6 >> 32];
|
||||||
ALWAYS_INLINE inline char * itoa(U u, char * p)
|
return b + 8;
|
||||||
{
|
|
||||||
return convert::uitoa(p, u);
|
|
||||||
}
|
|
||||||
|
|
||||||
// itoa: handle signed integral operands (selected by SFINAE)
|
|
||||||
template <typename I, size_t N = sizeof(I)>
|
|
||||||
requires(std::is_signed_v<I> && std::is_integral_v<I>)
|
|
||||||
ALWAYS_INLINE inline char * itoa(I i, char * p)
|
|
||||||
{
|
|
||||||
// Need "mask" to be filled with a copy of the sign bit.
|
|
||||||
// If "i" is a negative value, then the result of "operator >>"
|
|
||||||
// is implementation-defined, though usually it is an arithmetic
|
|
||||||
// right shift that replicates the sign bit.
|
|
||||||
// Use a conditional expression to be portable,
|
|
||||||
// a good optimizing compiler generates an arithmetic right shift
|
|
||||||
// and avoids the conditional branch.
|
|
||||||
UnsignedOfSize<N> mask = i < 0 ? ~UnsignedOfSize<N>(0) : 0;
|
|
||||||
// Now get the absolute value of "i" and cast to unsigned type UnsignedOfSize<N>.
|
|
||||||
// Cannot use std::abs() because the result is undefined
|
|
||||||
// in 2's complement systems for the most-negative value.
|
|
||||||
// Want to avoid conditional branch for performance reasons since
|
|
||||||
// CPU branch prediction will be ineffective when negative values
|
|
||||||
// occur randomly.
|
|
||||||
// Let "u" be "i" cast to unsigned type UnsignedOfSize<N>.
|
|
||||||
// Subtract "u" from 2*u if "i" is positive or 0 if "i" is negative.
|
|
||||||
// This yields the absolute value with the desired type without
|
|
||||||
// using a conditional branch and without invoking undefined or
|
|
||||||
// implementation defined behavior:
|
|
||||||
UnsignedOfSize<N> u = ((2 * UnsignedOfSize<N>(i)) & ~mask) - UnsignedOfSize<N>(i);
|
|
||||||
// Unconditionally store a minus sign when producing digits
|
|
||||||
// in a forward direction and increment the pointer only if
|
|
||||||
// the value is in fact negative.
|
|
||||||
// This avoids a conditional branch and is safe because we will
|
|
||||||
// always produce at least one digit and it will overwrite the
|
|
||||||
// minus sign when the value is not negative.
|
|
||||||
*p = '-';
|
|
||||||
p += (mask & 1);
|
|
||||||
p = convert::uitoa(p, u);
|
|
||||||
return p;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,7 +296,7 @@ ALWAYS_INLINE inline char * writeUIntText(UInt128 _x, char * p)
|
|||||||
{
|
{
|
||||||
/// If we the highest 64bit item is empty, we can print just the lowest item as u64
|
/// If we the highest 64bit item is empty, we can print just the lowest item as u64
|
||||||
if (_x.items[UInt128::_impl::little(1)] == 0)
|
if (_x.items[UInt128::_impl::little(1)] == 0)
|
||||||
return convert::itoa(_x.items[UInt128::_impl::little(0)], p);
|
return jeaiii::to_text_from_integer(p, _x.items[UInt128::_impl::little(0)]);
|
||||||
|
|
||||||
/// Doing operations using __int128 is faster and we already rely on this feature
|
/// Doing operations using __int128 is faster and we already rely on this feature
|
||||||
using T = unsigned __int128;
|
using T = unsigned __int128;
|
||||||
@ -334,7 +327,7 @@ ALWAYS_INLINE inline char * writeUIntText(UInt128 _x, char * p)
|
|||||||
current_block += max_multiple_of_hundred_blocks;
|
current_block += max_multiple_of_hundred_blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
char * highest_part_print = convert::itoa(uint64_t(x), p);
|
char * highest_part_print = jeaiii::to_text_from_integer(p, uint64_t(x));
|
||||||
for (int i = 0; i < current_block; i++)
|
for (int i = 0; i < current_block; i++)
|
||||||
{
|
{
|
||||||
outTwoDigits(highest_part_print, two_values[current_block - 1 - i]);
|
outTwoDigits(highest_part_print, two_values[current_block - 1 - i]);
|
||||||
@ -450,12 +443,12 @@ ALWAYS_INLINE inline char * writeSIntText(T x, char * pos)
|
|||||||
|
|
||||||
char * itoa(UInt8 i, char * p)
|
char * itoa(UInt8 i, char * p)
|
||||||
{
|
{
|
||||||
return convert::itoa(uint8_t(i), p);
|
return jeaiii::to_text_from_integer(p, uint8_t(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
char * itoa(Int8 i, char * p)
|
char * itoa(Int8 i, char * p)
|
||||||
{
|
{
|
||||||
return convert::itoa(int8_t(i), p);
|
return jeaiii::to_text_from_integer(p, int8_t(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
char * itoa(UInt128 i, char * p)
|
char * itoa(UInt128 i, char * p)
|
||||||
@ -481,7 +474,7 @@ char * itoa(Int256 i, char * p)
|
|||||||
#define DEFAULT_ITOA(T) \
|
#define DEFAULT_ITOA(T) \
|
||||||
char * itoa(T i, char * p) \
|
char * itoa(T i, char * p) \
|
||||||
{ \
|
{ \
|
||||||
return convert::itoa(i, p); \
|
return jeaiii::to_text_from_integer(p, i); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FOR_MISSING_INTEGER_TYPES(M) \
|
#define FOR_MISSING_INTEGER_TYPES(M) \
|
||||||
|
@ -62,7 +62,7 @@ struct fmt::formatter<wide::integer<Bits, Signed>>
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename FormatContext>
|
template <typename FormatContext>
|
||||||
auto format(const wide::integer<Bits, Signed> & value, FormatContext & ctx)
|
auto format(const wide::integer<Bits, Signed> & value, FormatContext & ctx) const
|
||||||
{
|
{
|
||||||
return fmt::format_to(ctx.out(), "{}", to_string(value));
|
return fmt::format_to(ctx.out(), "{}", to_string(value));
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,6 @@
|
|||||||
#include <openssl/conf.h>
|
#include <openssl/conf.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __has_feature(address_sanitizer)
|
|
||||||
#include <sanitizer/lsan_interface.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using Poco::RandomInputStream;
|
using Poco::RandomInputStream;
|
||||||
using Poco::Thread;
|
using Poco::Thread;
|
||||||
@ -70,18 +67,12 @@ void OpenSSLInitializer::initialize()
|
|||||||
SSL_library_init();
|
SSL_library_init();
|
||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
OpenSSL_add_all_algorithms();
|
OpenSSL_add_all_algorithms();
|
||||||
|
|
||||||
char seed[SEEDSIZE];
|
char seed[SEEDSIZE];
|
||||||
RandomInputStream rnd;
|
RandomInputStream rnd;
|
||||||
rnd.read(seed, sizeof(seed));
|
rnd.read(seed, sizeof(seed));
|
||||||
{
|
RAND_seed(seed, SEEDSIZE);
|
||||||
# if __has_feature(address_sanitizer)
|
|
||||||
/// Leak sanitizer (part of address sanitizer) thinks that a few bytes of memory in OpenSSL are allocated during but never released.
|
|
||||||
__lsan::ScopedDisabler lsan_disabler;
|
|
||||||
#endif
|
|
||||||
RAND_seed(seed, SEEDSIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int nMutexes = CRYPTO_num_locks();
|
int nMutexes = CRYPTO_num_locks();
|
||||||
_mutexes = new Poco::FastMutex[nMutexes];
|
_mutexes = new Poco::FastMutex[nMutexes];
|
||||||
CRYPTO_set_locking_callback(&OpenSSLInitializer::lock);
|
CRYPTO_set_locking_callback(&OpenSSLInitializer::lock);
|
||||||
@ -89,8 +80,8 @@ void OpenSSLInitializer::initialize()
|
|||||||
// https://sourceforge.net/p/poco/bugs/110/
|
// https://sourceforge.net/p/poco/bugs/110/
|
||||||
//
|
//
|
||||||
// From http://www.openssl.org/docs/crypto/threads.html :
|
// From http://www.openssl.org/docs/crypto/threads.html :
|
||||||
// "If the application does not register such a callback using CRYPTO_THREADID_set_callback(),
|
// "If the application does not register such a callback using CRYPTO_THREADID_set_callback(),
|
||||||
// then a default implementation is used - on Windows and BeOS this uses the system's
|
// then a default implementation is used - on Windows and BeOS this uses the system's
|
||||||
// default thread identifying APIs"
|
// default thread identifying APIs"
|
||||||
CRYPTO_set_id_callback(&OpenSSLInitializer::id);
|
CRYPTO_set_id_callback(&OpenSSLInitializer::id);
|
||||||
CRYPTO_set_dynlock_create_callback(&OpenSSLInitializer::dynlockCreate);
|
CRYPTO_set_dynlock_create_callback(&OpenSSLInitializer::dynlockCreate);
|
||||||
@ -109,7 +100,7 @@ void OpenSSLInitializer::uninitialize()
|
|||||||
CRYPTO_set_locking_callback(0);
|
CRYPTO_set_locking_callback(0);
|
||||||
CRYPTO_set_id_callback(0);
|
CRYPTO_set_id_callback(0);
|
||||||
delete [] _mutexes;
|
delete [] _mutexes;
|
||||||
|
|
||||||
CONF_modules_free();
|
CONF_modules_free();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -213,6 +213,7 @@ target_compile_definitions (_poco_foundation
|
|||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories (_poco_foundation SYSTEM PUBLIC "include")
|
target_include_directories (_poco_foundation SYSTEM PUBLIC "include")
|
||||||
|
target_link_libraries (_poco_foundation PRIVATE clickhouse_common_io)
|
||||||
|
|
||||||
target_link_libraries (_poco_foundation
|
target_link_libraries (_poco_foundation
|
||||||
PRIVATE
|
PRIVATE
|
||||||
|
@ -232,7 +232,7 @@ void Foundation_API format(
|
|||||||
const Any & value10);
|
const Any & value10);
|
||||||
|
|
||||||
|
|
||||||
void Foundation_API format(std::string & result, const std::string & fmt, const std::vector<Any> & values);
|
void Foundation_API formatVector(std::string & result, const std::string & fmt, const std::vector<Any> & values);
|
||||||
/// Supports a variable number of arguments and is used by
|
/// Supports a variable number of arguments and is used by
|
||||||
/// all other variants of format().
|
/// all other variants of format().
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Poco/Channel.h"
|
#include "Poco/Channel.h"
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
#include "Poco/Foundation.h"
|
#include "Poco/Foundation.h"
|
||||||
#include "Poco/Timestamp.h"
|
#include "Poco/Timestamp.h"
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
#include "Poco/AtomicCounter.h"
|
#include "Poco/AtomicCounter.h"
|
||||||
#include "Poco/Foundation.h"
|
#include "Poco/Foundation.h"
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
|
|
||||||
|
|
||||||
namespace Poco
|
namespace Poco
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,13 @@ class Foundation_API ThreadPool
|
|||||||
/// from the pool.
|
/// from the pool.
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ThreadPool(int minCapacity = 2, int maxCapacity = 16, int idleTime = 60, int stackSize = POCO_THREAD_STACK_SIZE);
|
explicit ThreadPool(
|
||||||
|
int minCapacity = 2,
|
||||||
|
int maxCapacity = 16,
|
||||||
|
int idleTime = 60,
|
||||||
|
int stackSize = POCO_THREAD_STACK_SIZE,
|
||||||
|
size_t global_profiler_real_time_period_ns_ = 0,
|
||||||
|
size_t global_profiler_cpu_time_period_ns_ = 0);
|
||||||
/// Creates a thread pool with minCapacity threads.
|
/// Creates a thread pool with minCapacity threads.
|
||||||
/// If required, up to maxCapacity threads are created
|
/// If required, up to maxCapacity threads are created
|
||||||
/// a NoThreadAvailableException exception is thrown.
|
/// a NoThreadAvailableException exception is thrown.
|
||||||
@ -56,8 +62,14 @@ public:
|
|||||||
/// and more than minCapacity threads are running, the thread
|
/// and more than minCapacity threads are running, the thread
|
||||||
/// is killed. Threads are created with given stack size.
|
/// is killed. Threads are created with given stack size.
|
||||||
|
|
||||||
ThreadPool(
|
explicit ThreadPool(
|
||||||
const std::string & name, int minCapacity = 2, int maxCapacity = 16, int idleTime = 60, int stackSize = POCO_THREAD_STACK_SIZE);
|
const std::string & name,
|
||||||
|
int minCapacity = 2,
|
||||||
|
int maxCapacity = 16,
|
||||||
|
int idleTime = 60,
|
||||||
|
int stackSize = POCO_THREAD_STACK_SIZE,
|
||||||
|
size_t global_profiler_real_time_period_ns_ = 0,
|
||||||
|
size_t global_profiler_cpu_time_period_ns_ = 0);
|
||||||
/// Creates a thread pool with the given name and minCapacity threads.
|
/// Creates a thread pool with the given name and minCapacity threads.
|
||||||
/// If required, up to maxCapacity threads are created
|
/// If required, up to maxCapacity threads are created
|
||||||
/// a NoThreadAvailableException exception is thrown.
|
/// a NoThreadAvailableException exception is thrown.
|
||||||
@ -171,6 +183,8 @@ private:
|
|||||||
int _serial;
|
int _serial;
|
||||||
int _age;
|
int _age;
|
||||||
int _stackSize;
|
int _stackSize;
|
||||||
|
size_t _globalProfilerRealTimePeriodNs;
|
||||||
|
size_t _globalProfilerCPUTimePeriodNs;
|
||||||
ThreadVec _threads;
|
ThreadVec _threads;
|
||||||
mutable FastMutex _mutex;
|
mutable FastMutex _mutex;
|
||||||
};
|
};
|
||||||
|
@ -51,8 +51,8 @@ namespace
|
|||||||
}
|
}
|
||||||
if (width != 0) str.width(width);
|
if (width != 0) str.width(width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void parsePrec(std::ostream& str, std::string::const_iterator& itFmt, const std::string::const_iterator& endFmt)
|
void parsePrec(std::ostream& str, std::string::const_iterator& itFmt, const std::string::const_iterator& endFmt)
|
||||||
{
|
{
|
||||||
if (itFmt != endFmt && *itFmt == '.')
|
if (itFmt != endFmt && *itFmt == '.')
|
||||||
@ -67,7 +67,7 @@ namespace
|
|||||||
if (prec >= 0) str.precision(prec);
|
if (prec >= 0) str.precision(prec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char parseMod(std::string::const_iterator& itFmt, const std::string::const_iterator& endFmt)
|
char parseMod(std::string::const_iterator& itFmt, const std::string::const_iterator& endFmt)
|
||||||
{
|
{
|
||||||
char mod = 0;
|
char mod = 0;
|
||||||
@ -77,13 +77,13 @@ namespace
|
|||||||
{
|
{
|
||||||
case 'l':
|
case 'l':
|
||||||
case 'h':
|
case 'h':
|
||||||
case 'L':
|
case 'L':
|
||||||
case '?': mod = *itFmt++; break;
|
case '?': mod = *itFmt++; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t parseIndex(std::string::const_iterator& itFmt, const std::string::const_iterator& endFmt)
|
std::size_t parseIndex(std::string::const_iterator& itFmt, const std::string::const_iterator& endFmt)
|
||||||
{
|
{
|
||||||
int index = 0;
|
int index = 0;
|
||||||
@ -110,8 +110,8 @@ namespace
|
|||||||
case 'f': str << std::fixed; break;
|
case 'f': str << std::fixed; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void writeAnyInt(std::ostream& str, const Any& any)
|
void writeAnyInt(std::ostream& str, const Any& any)
|
||||||
{
|
{
|
||||||
if (any.type() == typeid(char))
|
if (any.type() == typeid(char))
|
||||||
@ -201,7 +201,7 @@ namespace
|
|||||||
str << RefAnyCast<std::string>(*itVal++);
|
str << RefAnyCast<std::string>(*itVal++);
|
||||||
break;
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
str << AnyCast<std::size_t>(*itVal++);
|
str << AnyCast<std::size_t>(*itVal++);
|
||||||
break;
|
break;
|
||||||
case 'I':
|
case 'I':
|
||||||
case 'D':
|
case 'D':
|
||||||
@ -303,7 +303,7 @@ void format(std::string& result, const std::string& fmt, const Any& value)
|
|||||||
{
|
{
|
||||||
std::vector<Any> args;
|
std::vector<Any> args;
|
||||||
args.push_back(value);
|
args.push_back(value);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
std::vector<Any> args;
|
std::vector<Any> args;
|
||||||
args.push_back(value1);
|
args.push_back(value1);
|
||||||
args.push_back(value2);
|
args.push_back(value2);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -322,7 +322,7 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
args.push_back(value1);
|
args.push_back(value1);
|
||||||
args.push_back(value2);
|
args.push_back(value2);
|
||||||
args.push_back(value3);
|
args.push_back(value3);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -333,7 +333,7 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
args.push_back(value2);
|
args.push_back(value2);
|
||||||
args.push_back(value3);
|
args.push_back(value3);
|
||||||
args.push_back(value4);
|
args.push_back(value4);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
args.push_back(value3);
|
args.push_back(value3);
|
||||||
args.push_back(value4);
|
args.push_back(value4);
|
||||||
args.push_back(value5);
|
args.push_back(value5);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -358,7 +358,7 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
args.push_back(value4);
|
args.push_back(value4);
|
||||||
args.push_back(value5);
|
args.push_back(value5);
|
||||||
args.push_back(value6);
|
args.push_back(value6);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -372,7 +372,7 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
args.push_back(value5);
|
args.push_back(value5);
|
||||||
args.push_back(value6);
|
args.push_back(value6);
|
||||||
args.push_back(value7);
|
args.push_back(value7);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -387,7 +387,7 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
args.push_back(value6);
|
args.push_back(value6);
|
||||||
args.push_back(value7);
|
args.push_back(value7);
|
||||||
args.push_back(value8);
|
args.push_back(value8);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -403,7 +403,7 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
args.push_back(value7);
|
args.push_back(value7);
|
||||||
args.push_back(value8);
|
args.push_back(value8);
|
||||||
args.push_back(value9);
|
args.push_back(value9);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -420,16 +420,16 @@ void format(std::string& result, const std::string& fmt, const Any& value1, cons
|
|||||||
args.push_back(value8);
|
args.push_back(value8);
|
||||||
args.push_back(value9);
|
args.push_back(value9);
|
||||||
args.push_back(value10);
|
args.push_back(value10);
|
||||||
format(result, fmt, args);
|
formatVector(result, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void format(std::string& result, const std::string& fmt, const std::vector<Any>& values)
|
void formatVector(std::string& result, const std::string& fmt, const std::vector<Any>& values)
|
||||||
{
|
{
|
||||||
std::string::const_iterator itFmt = fmt.begin();
|
std::string::const_iterator itFmt = fmt.begin();
|
||||||
std::string::const_iterator endFmt = fmt.end();
|
std::string::const_iterator endFmt = fmt.end();
|
||||||
std::vector<Any>::const_iterator itVal = values.begin();
|
std::vector<Any>::const_iterator itVal = values.begin();
|
||||||
std::vector<Any>::const_iterator endVal = values.end();
|
std::vector<Any>::const_iterator endVal = values.end();
|
||||||
while (itFmt != endFmt)
|
while (itFmt != endFmt)
|
||||||
{
|
{
|
||||||
switch (*itFmt)
|
switch (*itFmt)
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "Poco/ErrorHandler.h"
|
#include "Poco/ErrorHandler.h"
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
#include <Common/ThreadPool.h>
|
||||||
|
|
||||||
|
|
||||||
namespace Poco {
|
namespace Poco {
|
||||||
@ -28,7 +29,11 @@ namespace Poco {
|
|||||||
class PooledThread: public Runnable
|
class PooledThread: public Runnable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PooledThread(const std::string& name, int stackSize = POCO_THREAD_STACK_SIZE);
|
explicit PooledThread(
|
||||||
|
const std::string& name,
|
||||||
|
int stackSize = POCO_THREAD_STACK_SIZE,
|
||||||
|
size_t globalProfilerRealTimePeriodNs_ = 0,
|
||||||
|
size_t globalProfilerCPUTimePeriodNs_ = 0);
|
||||||
~PooledThread();
|
~PooledThread();
|
||||||
|
|
||||||
void start();
|
void start();
|
||||||
@ -51,16 +56,24 @@ private:
|
|||||||
Event _targetCompleted;
|
Event _targetCompleted;
|
||||||
Event _started;
|
Event _started;
|
||||||
FastMutex _mutex;
|
FastMutex _mutex;
|
||||||
|
size_t _globalProfilerRealTimePeriodNs;
|
||||||
|
size_t _globalProfilerCPUTimePeriodNs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
PooledThread::PooledThread(const std::string& name, int stackSize):
|
PooledThread::PooledThread(
|
||||||
_idle(true),
|
const std::string& name,
|
||||||
_idleTime(0),
|
int stackSize,
|
||||||
_pTarget(0),
|
size_t globalProfilerRealTimePeriodNs_,
|
||||||
_name(name),
|
size_t globalProfilerCPUTimePeriodNs_) :
|
||||||
|
_idle(true),
|
||||||
|
_idleTime(0),
|
||||||
|
_pTarget(0),
|
||||||
|
_name(name),
|
||||||
_thread(name),
|
_thread(name),
|
||||||
_targetCompleted(false)
|
_targetCompleted(false),
|
||||||
|
_globalProfilerRealTimePeriodNs(globalProfilerRealTimePeriodNs_),
|
||||||
|
_globalProfilerCPUTimePeriodNs(globalProfilerCPUTimePeriodNs_)
|
||||||
{
|
{
|
||||||
poco_assert_dbg (stackSize >= 0);
|
poco_assert_dbg (stackSize >= 0);
|
||||||
_thread.setStackSize(stackSize);
|
_thread.setStackSize(stackSize);
|
||||||
@ -83,7 +96,7 @@ void PooledThread::start()
|
|||||||
void PooledThread::start(Thread::Priority priority, Runnable& target)
|
void PooledThread::start(Thread::Priority priority, Runnable& target)
|
||||||
{
|
{
|
||||||
FastMutex::ScopedLock lock(_mutex);
|
FastMutex::ScopedLock lock(_mutex);
|
||||||
|
|
||||||
poco_assert (_pTarget == 0);
|
poco_assert (_pTarget == 0);
|
||||||
|
|
||||||
_pTarget = ⌖
|
_pTarget = ⌖
|
||||||
@ -109,7 +122,7 @@ void PooledThread::start(Thread::Priority priority, Runnable& target, const std:
|
|||||||
}
|
}
|
||||||
_thread.setName(fullName);
|
_thread.setName(fullName);
|
||||||
_thread.setPriority(priority);
|
_thread.setPriority(priority);
|
||||||
|
|
||||||
poco_assert (_pTarget == 0);
|
poco_assert (_pTarget == 0);
|
||||||
|
|
||||||
_pTarget = ⌖
|
_pTarget = ⌖
|
||||||
@ -145,7 +158,7 @@ void PooledThread::join()
|
|||||||
void PooledThread::activate()
|
void PooledThread::activate()
|
||||||
{
|
{
|
||||||
FastMutex::ScopedLock lock(_mutex);
|
FastMutex::ScopedLock lock(_mutex);
|
||||||
|
|
||||||
poco_assert (_idle);
|
poco_assert (_idle);
|
||||||
_idle = false;
|
_idle = false;
|
||||||
_targetCompleted.reset();
|
_targetCompleted.reset();
|
||||||
@ -155,7 +168,7 @@ void PooledThread::activate()
|
|||||||
void PooledThread::release()
|
void PooledThread::release()
|
||||||
{
|
{
|
||||||
const long JOIN_TIMEOUT = 10000;
|
const long JOIN_TIMEOUT = 10000;
|
||||||
|
|
||||||
_mutex.lock();
|
_mutex.lock();
|
||||||
_pTarget = 0;
|
_pTarget = 0;
|
||||||
_mutex.unlock();
|
_mutex.unlock();
|
||||||
@ -174,6 +187,10 @@ void PooledThread::release()
|
|||||||
|
|
||||||
void PooledThread::run()
|
void PooledThread::run()
|
||||||
{
|
{
|
||||||
|
DB::ThreadStatus thread_status;
|
||||||
|
if (unlikely(_globalProfilerRealTimePeriodNs != 0 || _globalProfilerCPUTimePeriodNs != 0))
|
||||||
|
thread_status.initGlobalProfiler(_globalProfilerRealTimePeriodNs, _globalProfilerCPUTimePeriodNs);
|
||||||
|
|
||||||
_started.set();
|
_started.set();
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -220,13 +237,17 @@ void PooledThread::run()
|
|||||||
ThreadPool::ThreadPool(int minCapacity,
|
ThreadPool::ThreadPool(int minCapacity,
|
||||||
int maxCapacity,
|
int maxCapacity,
|
||||||
int idleTime,
|
int idleTime,
|
||||||
int stackSize):
|
int stackSize,
|
||||||
_minCapacity(minCapacity),
|
size_t globalProfilerRealTimePeriodNs_,
|
||||||
_maxCapacity(maxCapacity),
|
size_t globalProfilerCPUTimePeriodNs_) :
|
||||||
|
_minCapacity(minCapacity),
|
||||||
|
_maxCapacity(maxCapacity),
|
||||||
_idleTime(idleTime),
|
_idleTime(idleTime),
|
||||||
_serial(0),
|
_serial(0),
|
||||||
_age(0),
|
_age(0),
|
||||||
_stackSize(stackSize)
|
_stackSize(stackSize),
|
||||||
|
_globalProfilerRealTimePeriodNs(globalProfilerRealTimePeriodNs_),
|
||||||
|
_globalProfilerCPUTimePeriodNs(globalProfilerCPUTimePeriodNs_)
|
||||||
{
|
{
|
||||||
poco_assert (minCapacity >= 1 && maxCapacity >= minCapacity && idleTime > 0);
|
poco_assert (minCapacity >= 1 && maxCapacity >= minCapacity && idleTime > 0);
|
||||||
|
|
||||||
@ -243,14 +264,18 @@ ThreadPool::ThreadPool(const std::string& name,
|
|||||||
int minCapacity,
|
int minCapacity,
|
||||||
int maxCapacity,
|
int maxCapacity,
|
||||||
int idleTime,
|
int idleTime,
|
||||||
int stackSize):
|
int stackSize,
|
||||||
|
size_t globalProfilerRealTimePeriodNs_,
|
||||||
|
size_t globalProfilerCPUTimePeriodNs_) :
|
||||||
_name(name),
|
_name(name),
|
||||||
_minCapacity(minCapacity),
|
_minCapacity(minCapacity),
|
||||||
_maxCapacity(maxCapacity),
|
_maxCapacity(maxCapacity),
|
||||||
_idleTime(idleTime),
|
_idleTime(idleTime),
|
||||||
_serial(0),
|
_serial(0),
|
||||||
_age(0),
|
_age(0),
|
||||||
_stackSize(stackSize)
|
_stackSize(stackSize),
|
||||||
|
_globalProfilerRealTimePeriodNs(globalProfilerRealTimePeriodNs_),
|
||||||
|
_globalProfilerCPUTimePeriodNs(globalProfilerCPUTimePeriodNs_)
|
||||||
{
|
{
|
||||||
poco_assert (minCapacity >= 1 && maxCapacity >= minCapacity && idleTime > 0);
|
poco_assert (minCapacity >= 1 && maxCapacity >= minCapacity && idleTime > 0);
|
||||||
|
|
||||||
@ -393,15 +418,15 @@ void ThreadPool::housekeep()
|
|||||||
ThreadVec activeThreads;
|
ThreadVec activeThreads;
|
||||||
idleThreads.reserve(_threads.size());
|
idleThreads.reserve(_threads.size());
|
||||||
activeThreads.reserve(_threads.size());
|
activeThreads.reserve(_threads.size());
|
||||||
|
|
||||||
for (ThreadVec::iterator it = _threads.begin(); it != _threads.end(); ++it)
|
for (ThreadVec::iterator it = _threads.begin(); it != _threads.end(); ++it)
|
||||||
{
|
{
|
||||||
if ((*it)->idle())
|
if ((*it)->idle())
|
||||||
{
|
{
|
||||||
if ((*it)->idleTime() < _idleTime)
|
if ((*it)->idleTime() < _idleTime)
|
||||||
idleThreads.push_back(*it);
|
idleThreads.push_back(*it);
|
||||||
else
|
else
|
||||||
expiredThreads.push_back(*it);
|
expiredThreads.push_back(*it);
|
||||||
}
|
}
|
||||||
else activeThreads.push_back(*it);
|
else activeThreads.push_back(*it);
|
||||||
}
|
}
|
||||||
@ -463,7 +488,7 @@ PooledThread* ThreadPool::createThread()
|
|||||||
{
|
{
|
||||||
std::ostringstream name;
|
std::ostringstream name;
|
||||||
name << _name << "[#" << ++_serial << "]";
|
name << _name << "[#" << ++_serial << "]";
|
||||||
return new PooledThread(name.str(), _stackSize);
|
return new PooledThread(name.str(), _stackSize, _globalProfilerRealTimePeriodNs, _globalProfilerCPUTimePeriodNs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -481,7 +506,7 @@ public:
|
|||||||
ThreadPool* pool()
|
ThreadPool* pool()
|
||||||
{
|
{
|
||||||
FastMutex::ScopedLock lock(_mutex);
|
FastMutex::ScopedLock lock(_mutex);
|
||||||
|
|
||||||
if (!_pPool)
|
if (!_pPool)
|
||||||
{
|
{
|
||||||
_pPool = new ThreadPool("default");
|
_pPool = new ThreadPool("default");
|
||||||
@ -490,7 +515,7 @@ public:
|
|||||||
}
|
}
|
||||||
return _pPool;
|
return _pPool;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ThreadPool* _pPool;
|
ThreadPool* _pPool;
|
||||||
FastMutex _mutex;
|
FastMutex _mutex;
|
||||||
|
@ -57,7 +57,7 @@ std::string ObjectId::toString(const std::string& fmt) const
|
|||||||
|
|
||||||
for (int i = 0; i < 12; ++i)
|
for (int i = 0; i < 12; ++i)
|
||||||
{
|
{
|
||||||
s += format(fmt, (unsigned int) _id[i]);
|
s += Poco::format(fmt, (unsigned int) _id[i]);
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
@ -43,9 +43,9 @@ namespace Poco {
|
|||||||
namespace MongoDB {
|
namespace MongoDB {
|
||||||
|
|
||||||
|
|
||||||
static const std::string keyCursor {"cursor"};
|
[[ maybe_unused ]] static const std::string keyCursor {"cursor"};
|
||||||
static const std::string keyFirstBatch {"firstBatch"};
|
[[ maybe_unused ]] static const std::string keyFirstBatch {"firstBatch"};
|
||||||
static const std::string keyNextBatch {"nextBatch"};
|
[[ maybe_unused ]] static const std::string keyNextBatch {"nextBatch"};
|
||||||
|
|
||||||
static Poco::Int64 cursorIdFromResponse(const MongoDB::Document& doc);
|
static Poco::Int64 cursorIdFromResponse(const MongoDB::Document& doc);
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ OpMsgMessage& OpMsgCursor::next(Connection& connection)
|
|||||||
connection.readResponse(_response);
|
connection.readResponse(_response);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
_response.clear();
|
_response.clear();
|
||||||
_query.setCursor(_cursorID, _batchSize);
|
_query.setCursor(_cursorID, _batchSize);
|
||||||
|
@ -79,7 +79,7 @@ namespace Net
|
|||||||
/// Returns the value of the first name-value pair with the given name.
|
/// Returns the value of the first name-value pair with the given name.
|
||||||
/// If no value with the given name has been found, the defaultValue is returned.
|
/// If no value with the given name has been found, the defaultValue is returned.
|
||||||
|
|
||||||
const std::vector<std::reference_wrapper<const std::string>> getAll(const std::string & name) const;
|
std::vector<std::string> getAll(const std::string & name) const;
|
||||||
/// Returns all values of all name-value pairs with the given name.
|
/// Returns all values of all name-value pairs with the given name.
|
||||||
///
|
///
|
||||||
/// Returns an empty vector if there are no name-value pairs with the given name.
|
/// Returns an empty vector if there are no name-value pairs with the given name.
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
#include "Poco/NumberFormatter.h"
|
#include "Poco/NumberFormatter.h"
|
||||||
#include "Poco/NumberParser.h"
|
#include "Poco/NumberParser.h"
|
||||||
#include "Poco/String.h"
|
#include "Poco/String.h"
|
||||||
|
#include <charconv>
|
||||||
#include <format>
|
#include <format>
|
||||||
|
|
||||||
|
|
||||||
using Poco::NumberFormatter;
|
using Poco::NumberFormatter;
|
||||||
using Poco::NumberParser;
|
using Poco::NumberParser;
|
||||||
using Poco::icompare;
|
using Poco::icompare;
|
||||||
@ -75,7 +75,7 @@ void HTTPMessage::setContentLength(std::streamsize length)
|
|||||||
erase(CONTENT_LENGTH);
|
erase(CONTENT_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::streamsize HTTPMessage::getContentLength() const
|
std::streamsize HTTPMessage::getContentLength() const
|
||||||
{
|
{
|
||||||
const std::string& contentLength = get(CONTENT_LENGTH, EMPTY);
|
const std::string& contentLength = get(CONTENT_LENGTH, EMPTY);
|
||||||
@ -98,7 +98,7 @@ void HTTPMessage::setContentLength64(Poco::Int64 length)
|
|||||||
erase(CONTENT_LENGTH);
|
erase(CONTENT_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Poco::Int64 HTTPMessage::getContentLength64() const
|
Poco::Int64 HTTPMessage::getContentLength64() const
|
||||||
{
|
{
|
||||||
const std::string& contentLength = get(CONTENT_LENGTH, EMPTY);
|
const std::string& contentLength = get(CONTENT_LENGTH, EMPTY);
|
||||||
@ -133,13 +133,13 @@ void HTTPMessage::setChunkedTransferEncoding(bool flag)
|
|||||||
setTransferEncoding(IDENTITY_TRANSFER_ENCODING);
|
setTransferEncoding(IDENTITY_TRANSFER_ENCODING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool HTTPMessage::getChunkedTransferEncoding() const
|
bool HTTPMessage::getChunkedTransferEncoding() const
|
||||||
{
|
{
|
||||||
return icompare(getTransferEncoding(), CHUNKED_TRANSFER_ENCODING) == 0;
|
return icompare(getTransferEncoding(), CHUNKED_TRANSFER_ENCODING) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void HTTPMessage::setContentType(const std::string& mediaType)
|
void HTTPMessage::setContentType(const std::string& mediaType)
|
||||||
{
|
{
|
||||||
if (mediaType.empty())
|
if (mediaType.empty())
|
||||||
@ -154,7 +154,7 @@ void HTTPMessage::setContentType(const MediaType& mediaType)
|
|||||||
setContentType(mediaType.toString());
|
setContentType(mediaType.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const std::string& HTTPMessage::getContentType() const
|
const std::string& HTTPMessage::getContentType() const
|
||||||
{
|
{
|
||||||
return get(CONTENT_TYPE, UNKNOWN_CONTENT_TYPE);
|
return get(CONTENT_TYPE, UNKNOWN_CONTENT_TYPE);
|
||||||
|
@ -102,9 +102,9 @@ const std::string& NameValueCollection::get(const std::string& name, const std::
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<std::reference_wrapper<const std::string>> NameValueCollection::getAll(const std::string& name) const
|
std::vector<std::string> NameValueCollection::getAll(const std::string& name) const
|
||||||
{
|
{
|
||||||
std::vector<std::reference_wrapper<const std::string>> values;
|
std::vector<std::string> values;
|
||||||
for (ConstIterator it = _map.find(name); it != _map.end(); it++)
|
for (ConstIterator it = _map.find(name); it != _map.end(); it++)
|
||||||
if (it->first == name)
|
if (it->first == name)
|
||||||
values.push_back(it->second);
|
values.push_back(it->second);
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#ifndef NetSSL_SSLManager_INCLUDED
|
#ifndef NetSSL_SSLManager_INCLUDED
|
||||||
#define NetSSL_SSLManager_INCLUDED
|
#define NetSSL_SSLManager_INCLUDED
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
#include "Poco/BasicEvent.h"
|
#include "Poco/BasicEvent.h"
|
||||||
@ -219,6 +220,13 @@ namespace Net
|
|||||||
/// Unless initializeClient() has been called, the first call to this method initializes the default Context
|
/// Unless initializeClient() has been called, the first call to this method initializes the default Context
|
||||||
/// from the application configuration.
|
/// from the application configuration.
|
||||||
|
|
||||||
|
Context::Ptr getCustomServerContext(const std::string & name);
|
||||||
|
/// Return custom Context used by the server.
|
||||||
|
|
||||||
|
Context::Ptr setCustomServerContext(const std::string & name, Context::Ptr ctx);
|
||||||
|
/// Set custom Context used by the server.
|
||||||
|
/// Return pointer on inserted Context or on old Context if exists.
|
||||||
|
|
||||||
PrivateKeyPassphraseHandlerPtr serverPassphraseHandler();
|
PrivateKeyPassphraseHandlerPtr serverPassphraseHandler();
|
||||||
/// Returns the configured passphrase handler of the server. If none is set, the method will create a default one
|
/// Returns the configured passphrase handler of the server. If none is set, the method will create a default one
|
||||||
/// from an application configuration.
|
/// from an application configuration.
|
||||||
@ -258,6 +266,40 @@ namespace Net
|
|||||||
static const std::string CFG_SERVER_PREFIX;
|
static const std::string CFG_SERVER_PREFIX;
|
||||||
static const std::string CFG_CLIENT_PREFIX;
|
static const std::string CFG_CLIENT_PREFIX;
|
||||||
|
|
||||||
|
static const std::string CFG_PRIV_KEY_FILE;
|
||||||
|
static const std::string CFG_CERTIFICATE_FILE;
|
||||||
|
static const std::string CFG_CA_LOCATION;
|
||||||
|
static const std::string CFG_VER_MODE;
|
||||||
|
static const Context::VerificationMode VAL_VER_MODE;
|
||||||
|
static const std::string CFG_VER_DEPTH;
|
||||||
|
static const int VAL_VER_DEPTH;
|
||||||
|
static const std::string CFG_ENABLE_DEFAULT_CA;
|
||||||
|
static const bool VAL_ENABLE_DEFAULT_CA;
|
||||||
|
static const std::string CFG_CIPHER_LIST;
|
||||||
|
static const std::string CFG_CYPHER_LIST; // for backwards compatibility
|
||||||
|
static const std::string VAL_CIPHER_LIST;
|
||||||
|
static const std::string CFG_PREFER_SERVER_CIPHERS;
|
||||||
|
static const std::string CFG_DELEGATE_HANDLER;
|
||||||
|
static const std::string VAL_DELEGATE_HANDLER;
|
||||||
|
static const std::string CFG_CERTIFICATE_HANDLER;
|
||||||
|
static const std::string VAL_CERTIFICATE_HANDLER;
|
||||||
|
static const std::string CFG_CACHE_SESSIONS;
|
||||||
|
static const std::string CFG_SESSION_ID_CONTEXT;
|
||||||
|
static const std::string CFG_SESSION_CACHE_SIZE;
|
||||||
|
static const std::string CFG_SESSION_TIMEOUT;
|
||||||
|
static const std::string CFG_EXTENDED_VERIFICATION;
|
||||||
|
static const std::string CFG_REQUIRE_TLSV1;
|
||||||
|
static const std::string CFG_REQUIRE_TLSV1_1;
|
||||||
|
static const std::string CFG_REQUIRE_TLSV1_2;
|
||||||
|
static const std::string CFG_DISABLE_PROTOCOLS;
|
||||||
|
static const std::string CFG_DH_PARAMS_FILE;
|
||||||
|
static const std::string CFG_ECDH_CURVE;
|
||||||
|
|
||||||
|
#ifdef OPENSSL_FIPS
|
||||||
|
static const std::string CFG_FIPS_MODE;
|
||||||
|
static const bool VAL_FIPS_MODE;
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static int verifyClientCallback(int ok, X509_STORE_CTX * pStore);
|
static int verifyClientCallback(int ok, X509_STORE_CTX * pStore);
|
||||||
/// The return value of this method defines how errors in
|
/// The return value of this method defines how errors in
|
||||||
@ -314,39 +356,7 @@ namespace Net
|
|||||||
InvalidCertificateHandlerPtr _ptrClientCertificateHandler;
|
InvalidCertificateHandlerPtr _ptrClientCertificateHandler;
|
||||||
Poco::FastMutex _mutex;
|
Poco::FastMutex _mutex;
|
||||||
|
|
||||||
static const std::string CFG_PRIV_KEY_FILE;
|
std::unordered_map<std::string, Context::Ptr> _mapPtrServerContexts;
|
||||||
static const std::string CFG_CERTIFICATE_FILE;
|
|
||||||
static const std::string CFG_CA_LOCATION;
|
|
||||||
static const std::string CFG_VER_MODE;
|
|
||||||
static const Context::VerificationMode VAL_VER_MODE;
|
|
||||||
static const std::string CFG_VER_DEPTH;
|
|
||||||
static const int VAL_VER_DEPTH;
|
|
||||||
static const std::string CFG_ENABLE_DEFAULT_CA;
|
|
||||||
static const bool VAL_ENABLE_DEFAULT_CA;
|
|
||||||
static const std::string CFG_CIPHER_LIST;
|
|
||||||
static const std::string CFG_CYPHER_LIST; // for backwards compatibility
|
|
||||||
static const std::string VAL_CIPHER_LIST;
|
|
||||||
static const std::string CFG_PREFER_SERVER_CIPHERS;
|
|
||||||
static const std::string CFG_DELEGATE_HANDLER;
|
|
||||||
static const std::string VAL_DELEGATE_HANDLER;
|
|
||||||
static const std::string CFG_CERTIFICATE_HANDLER;
|
|
||||||
static const std::string VAL_CERTIFICATE_HANDLER;
|
|
||||||
static const std::string CFG_CACHE_SESSIONS;
|
|
||||||
static const std::string CFG_SESSION_ID_CONTEXT;
|
|
||||||
static const std::string CFG_SESSION_CACHE_SIZE;
|
|
||||||
static const std::string CFG_SESSION_TIMEOUT;
|
|
||||||
static const std::string CFG_EXTENDED_VERIFICATION;
|
|
||||||
static const std::string CFG_REQUIRE_TLSV1;
|
|
||||||
static const std::string CFG_REQUIRE_TLSV1_1;
|
|
||||||
static const std::string CFG_REQUIRE_TLSV1_2;
|
|
||||||
static const std::string CFG_DISABLE_PROTOCOLS;
|
|
||||||
static const std::string CFG_DH_PARAMS_FILE;
|
|
||||||
static const std::string CFG_ECDH_CURVE;
|
|
||||||
|
|
||||||
#ifdef OPENSSL_FIPS
|
|
||||||
static const std::string CFG_FIPS_MODE;
|
|
||||||
static const bool VAL_FIPS_MODE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
friend class Poco::SingletonHolder<SSLManager>;
|
friend class Poco::SingletonHolder<SSLManager>;
|
||||||
friend class Context;
|
friend class Context;
|
||||||
|
@ -235,8 +235,6 @@ namespace Net
|
|||||||
/// Note that simply closing a socket is not sufficient
|
/// Note that simply closing a socket is not sufficient
|
||||||
/// to be able to re-use it again.
|
/// to be able to re-use it again.
|
||||||
|
|
||||||
Poco::Timespan getMaxTimeout();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SecureSocketImpl(const SecureSocketImpl &);
|
SecureSocketImpl(const SecureSocketImpl &);
|
||||||
SecureSocketImpl & operator=(const SecureSocketImpl &);
|
SecureSocketImpl & operator=(const SecureSocketImpl &);
|
||||||
@ -250,6 +248,9 @@ namespace Net
|
|||||||
Session::Ptr _pSession;
|
Session::Ptr _pSession;
|
||||||
|
|
||||||
friend class SecureStreamSocketImpl;
|
friend class SecureStreamSocketImpl;
|
||||||
|
|
||||||
|
Poco::Timespan getMaxTimeoutOrLimit();
|
||||||
|
//// Return max(send, receive) if non zero, otherwise maximum timeout
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -330,27 +330,26 @@ void SSLManager::initDefaultContext(bool server)
|
|||||||
else
|
else
|
||||||
_ptrDefaultClientContext->disableProtocols(disabledProtocols);
|
_ptrDefaultClientContext->disableProtocols(disabledProtocols);
|
||||||
|
|
||||||
/// Temporarily disabled during the transition from boringssl to OpenSSL due to tsan issues.
|
bool cacheSessions = config.getBool(prefix + CFG_CACHE_SESSIONS, false);
|
||||||
/// bool cacheSessions = config.getBool(prefix + CFG_CACHE_SESSIONS, false);
|
if (server)
|
||||||
/// if (server)
|
{
|
||||||
/// {
|
std::string sessionIdContext = config.getString(prefix + CFG_SESSION_ID_CONTEXT, config.getString("application.name", ""));
|
||||||
/// std::string sessionIdContext = config.getString(prefix + CFG_SESSION_ID_CONTEXT, config.getString("application.name", ""));
|
_ptrDefaultServerContext->enableSessionCache(cacheSessions, sessionIdContext);
|
||||||
/// _ptrDefaultServerContext->enableSessionCache(cacheSessions, sessionIdContext);
|
if (config.hasProperty(prefix + CFG_SESSION_CACHE_SIZE))
|
||||||
/// if (config.hasProperty(prefix + CFG_SESSION_CACHE_SIZE))
|
{
|
||||||
/// {
|
int cacheSize = config.getInt(prefix + CFG_SESSION_CACHE_SIZE);
|
||||||
/// int cacheSize = config.getInt(prefix + CFG_SESSION_CACHE_SIZE);
|
_ptrDefaultServerContext->setSessionCacheSize(cacheSize);
|
||||||
/// _ptrDefaultServerContext->setSessionCacheSize(cacheSize);
|
}
|
||||||
/// }
|
if (config.hasProperty(prefix + CFG_SESSION_TIMEOUT))
|
||||||
/// if (config.hasProperty(prefix + CFG_SESSION_TIMEOUT))
|
{
|
||||||
/// {
|
int timeout = config.getInt(prefix + CFG_SESSION_TIMEOUT);
|
||||||
/// int timeout = config.getInt(prefix + CFG_SESSION_TIMEOUT);
|
_ptrDefaultServerContext->setSessionTimeout(timeout);
|
||||||
/// _ptrDefaultServerContext->setSessionTimeout(timeout);
|
}
|
||||||
/// }
|
}
|
||||||
/// }
|
else
|
||||||
/// else
|
{
|
||||||
/// {
|
_ptrDefaultClientContext->enableSessionCache(cacheSessions);
|
||||||
/// _ptrDefaultClientContext->enableSessionCache(cacheSessions);
|
}
|
||||||
/// }
|
|
||||||
bool extendedVerification = config.getBool(prefix + CFG_EXTENDED_VERIFICATION, false);
|
bool extendedVerification = config.getBool(prefix + CFG_EXTENDED_VERIFICATION, false);
|
||||||
if (server)
|
if (server)
|
||||||
_ptrDefaultServerContext->enableExtendedCertificateVerification(extendedVerification);
|
_ptrDefaultServerContext->enableExtendedCertificateVerification(extendedVerification);
|
||||||
@ -429,6 +428,23 @@ void SSLManager::initCertificateHandler(bool server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Context::Ptr SSLManager::getCustomServerContext(const std::string & name)
|
||||||
|
{
|
||||||
|
Poco::FastMutex::ScopedLock lock(_mutex);
|
||||||
|
auto it = _mapPtrServerContexts.find(name);
|
||||||
|
if (it != _mapPtrServerContexts.end())
|
||||||
|
return it->second;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
Context::Ptr SSLManager::setCustomServerContext(const std::string & name, Context::Ptr ctx)
|
||||||
|
{
|
||||||
|
Poco::FastMutex::ScopedLock lock(_mutex);
|
||||||
|
ctx = _mapPtrServerContexts.insert({name, ctx}).first->second;
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Poco::Util::AbstractConfiguration& SSLManager::appConfig()
|
Poco::Util::AbstractConfiguration& SSLManager::appConfig()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -199,7 +199,7 @@ void SecureSocketImpl::connectSSL(bool performHandshake)
|
|||||||
if (performHandshake && _pSocket->getBlocking())
|
if (performHandshake && _pSocket->getBlocking())
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
Poco::Timespan remaining_time = getMaxTimeout();
|
Poco::Timespan remaining_time = getMaxTimeoutOrLimit();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
RemainingTimeCounter counter(remaining_time);
|
RemainingTimeCounter counter(remaining_time);
|
||||||
@ -302,7 +302,7 @@ int SecureSocketImpl::sendBytes(const void* buffer, int length, int flags)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Poco::Timespan remaining_time = getMaxTimeout();
|
Poco::Timespan remaining_time = getMaxTimeoutOrLimit();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
RemainingTimeCounter counter(remaining_time);
|
RemainingTimeCounter counter(remaining_time);
|
||||||
@ -338,7 +338,7 @@ int SecureSocketImpl::receiveBytes(void* buffer, int length, int flags)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Poco::Timespan remaining_time = getMaxTimeout();
|
Poco::Timespan remaining_time = getMaxTimeoutOrLimit();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
/// SSL record may consist of several TCP packets,
|
/// SSL record may consist of several TCP packets,
|
||||||
@ -372,7 +372,7 @@ int SecureSocketImpl::completeHandshake()
|
|||||||
poco_check_ptr (_pSSL);
|
poco_check_ptr (_pSSL);
|
||||||
|
|
||||||
int rc;
|
int rc;
|
||||||
Poco::Timespan remaining_time = getMaxTimeout();
|
Poco::Timespan remaining_time = getMaxTimeoutOrLimit();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
RemainingTimeCounter counter(remaining_time);
|
RemainingTimeCounter counter(remaining_time);
|
||||||
@ -453,18 +453,29 @@ X509* SecureSocketImpl::peerCertificate() const
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Poco::Timespan SecureSocketImpl::getMaxTimeout()
|
Poco::Timespan SecureSocketImpl::getMaxTimeoutOrLimit()
|
||||||
{
|
{
|
||||||
std::lock_guard<std::recursive_mutex> lock(_mutex);
|
std::lock_guard<std::recursive_mutex> lock(_mutex);
|
||||||
Poco::Timespan remaining_time = _pSocket->getReceiveTimeout();
|
Poco::Timespan remaining_time = _pSocket->getReceiveTimeout();
|
||||||
Poco::Timespan send_timeout = _pSocket->getSendTimeout();
|
Poco::Timespan send_timeout = _pSocket->getSendTimeout();
|
||||||
if (remaining_time < send_timeout)
|
if (remaining_time < send_timeout)
|
||||||
remaining_time = send_timeout;
|
remaining_time = send_timeout;
|
||||||
|
/// zero SO_SNDTIMEO/SO_RCVTIMEO works as no timeout, let's replicate this
|
||||||
|
///
|
||||||
|
/// NOTE: we cannot use INT64_MAX (std::numeric_limits<Poco::Timespan::TimeDiff>::max()),
|
||||||
|
/// since it will be later passed to poll() which accept int timeout, and
|
||||||
|
/// even though poll() accepts milliseconds and Timespan() accepts
|
||||||
|
/// microseconds, let's use smaller maximum value just to avoid some possible
|
||||||
|
/// issues, this should be enough anyway (it is ~24 days).
|
||||||
|
if (remaining_time == 0)
|
||||||
|
remaining_time = Poco::Timespan(std::numeric_limits<int>::max());
|
||||||
return remaining_time;
|
return remaining_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SecureSocketImpl::mustRetry(int rc, Poco::Timespan& remaining_time)
|
bool SecureSocketImpl::mustRetry(int rc, Poco::Timespan& remaining_time)
|
||||||
{
|
{
|
||||||
|
if (remaining_time == 0)
|
||||||
|
return false;
|
||||||
std::lock_guard<std::recursive_mutex> lock(_mutex);
|
std::lock_guard<std::recursive_mutex> lock(_mutex);
|
||||||
if (rc <= 0)
|
if (rc <= 0)
|
||||||
{
|
{
|
||||||
@ -475,9 +486,7 @@ bool SecureSocketImpl::mustRetry(int rc, Poco::Timespan& remaining_time)
|
|||||||
case SSL_ERROR_WANT_READ:
|
case SSL_ERROR_WANT_READ:
|
||||||
if (_pSocket->getBlocking())
|
if (_pSocket->getBlocking())
|
||||||
{
|
{
|
||||||
/// Level-triggered mode of epoll_wait is used, so if SSL_read don't read all available data from socket,
|
if (_pSocket->pollImpl(remaining_time, Poco::Net::Socket::SELECT_READ))
|
||||||
/// epoll_wait returns true without waiting for new data even if remaining_time == 0
|
|
||||||
if (_pSocket->pollImpl(remaining_time, Poco::Net::Socket::SELECT_READ) && remaining_time != 0)
|
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
throw Poco::TimeoutException();
|
throw Poco::TimeoutException();
|
||||||
@ -486,13 +495,15 @@ bool SecureSocketImpl::mustRetry(int rc, Poco::Timespan& remaining_time)
|
|||||||
case SSL_ERROR_WANT_WRITE:
|
case SSL_ERROR_WANT_WRITE:
|
||||||
if (_pSocket->getBlocking())
|
if (_pSocket->getBlocking())
|
||||||
{
|
{
|
||||||
/// The same as for SSL_ERROR_WANT_READ
|
if (_pSocket->pollImpl(remaining_time, Poco::Net::Socket::SELECT_WRITE))
|
||||||
if (_pSocket->pollImpl(remaining_time, Poco::Net::Socket::SELECT_WRITE) && remaining_time != 0)
|
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
throw Poco::TimeoutException();
|
throw Poco::TimeoutException();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
/// NOTE: POCO_EINTR is the same as SSL_ERROR_WANT_READ (at least in
|
||||||
|
/// OpenSSL), so this likely dead code, but let's leave it for
|
||||||
|
/// compatibility with other implementations
|
||||||
case SSL_ERROR_SYSCALL:
|
case SSL_ERROR_SYSCALL:
|
||||||
return socketError == POCO_EAGAIN || socketError == POCO_EINTR;
|
return socketError == POCO_EAGAIN || socketError == POCO_EINTR;
|
||||||
default:
|
default:
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# This variables autochanged by tests/ci/version_helper.py:
|
# This variables autochanged by tests/ci/version_helper.py:
|
||||||
|
|
||||||
# NOTE: has nothing common with DBMS_TCP_PROTOCOL_VERSION,
|
# NOTE: VERSION_REVISION has nothing common with DBMS_TCP_PROTOCOL_VERSION,
|
||||||
# only DBMS_TCP_PROTOCOL_VERSION should be incremented on protocol changes.
|
# only DBMS_TCP_PROTOCOL_VERSION should be incremented on protocol changes.
|
||||||
SET(VERSION_REVISION 54487)
|
SET(VERSION_REVISION 54488)
|
||||||
SET(VERSION_MAJOR 24)
|
SET(VERSION_MAJOR 24)
|
||||||
SET(VERSION_MINOR 6)
|
SET(VERSION_MINOR 7)
|
||||||
SET(VERSION_PATCH 1)
|
SET(VERSION_PATCH 1)
|
||||||
SET(VERSION_GITHASH 70a1d3a63d47f0be077d67b8deb907230fc7cfb0)
|
SET(VERSION_GITHASH aa023477a9265e403982fca5ee29a714db5133d9)
|
||||||
SET(VERSION_DESCRIBE v24.6.1.1-testing)
|
SET(VERSION_DESCRIBE v24.7.1.1-testing)
|
||||||
SET(VERSION_STRING 24.6.1.1)
|
SET(VERSION_STRING 24.7.1.1)
|
||||||
# end of autochange
|
# end of autochange
|
||||||
|
@ -84,5 +84,5 @@ if (CMAKE_CROSSCOMPILING)
|
|||||||
message (FATAL_ERROR "Trying to cross-compile to unsupported system: ${CMAKE_SYSTEM_NAME}!")
|
message (FATAL_ERROR "Trying to cross-compile to unsupported system: ${CMAKE_SYSTEM_NAME}!")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
message (STATUS "Cross-compiling for target: ${CMAKE_CXX_COMPILE_TARGET}")
|
message (STATUS "Cross-compiling for target: ${CMAKE_CXX_COMPILER_TARGET}")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -7,7 +7,7 @@ if (NOT ENABLE_XRAY)
|
|||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT (ARCH_AMD64 AND (OS_LINUX OR OS_FREEBSD)))
|
if (NOT (ARCH_AMD64 AND OS_LINUX))
|
||||||
message (STATUS "Not using LLVM XRay, only amd64 Linux or FreeBSD are supported")
|
message (STATUS "Not using LLVM XRay, only amd64 Linux or FreeBSD are supported")
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
2
contrib/CMakeLists.txt
vendored
2
contrib/CMakeLists.txt
vendored
@ -228,6 +228,8 @@ add_contrib (ulid-c-cmake ulid-c)
|
|||||||
|
|
||||||
add_contrib (libssh-cmake libssh)
|
add_contrib (libssh-cmake libssh)
|
||||||
|
|
||||||
|
add_contrib (prometheus-protobufs-cmake prometheus-protobufs prometheus-protobufs-gogo)
|
||||||
|
|
||||||
# Put all targets defined here and in subdirectories under "contrib/<immediate-subdir>" folders in GUI-based IDEs.
|
# Put all targets defined here and in subdirectories under "contrib/<immediate-subdir>" folders in GUI-based IDEs.
|
||||||
# Some of third-party projects may override CMAKE_FOLDER or FOLDER property of their targets, so they would not appear
|
# Some of third-party projects may override CMAKE_FOLDER or FOLDER property of their targets, so they would not appear
|
||||||
# in "contrib/..." as originally planned, so we workaround this by fixing FOLDER properties of all targets manually,
|
# in "contrib/..." as originally planned, so we workaround this by fixing FOLDER properties of all targets manually,
|
||||||
|
2
contrib/abseil-cpp
vendored
2
contrib/abseil-cpp
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 3bd86026c93da5a40006fd53403dff9d5f5e30e3
|
Subproject commit a3c4dd3e77f28b526efbb0eb394b72e29c633936
|
@ -1,6 +1,8 @@
|
|||||||
set(ABSL_ROOT_DIR "${ClickHouse_SOURCE_DIR}/contrib/abseil-cpp")
|
set(ABSL_ROOT_DIR "${ClickHouse_SOURCE_DIR}/contrib/abseil-cpp")
|
||||||
set(ABSL_COMMON_INCLUDE_DIRS "${ABSL_ROOT_DIR}")
|
set(ABSL_COMMON_INCLUDE_DIRS "${ABSL_ROOT_DIR}")
|
||||||
|
|
||||||
|
# This is a minimized version of the function definition in CMake/AbseilHelpers.cmake
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright 2017 The Abseil Authors.
|
# Copyright 2017 The Abseil Authors.
|
||||||
#
|
#
|
||||||
@ -16,7 +18,6 @@ set(ABSL_COMMON_INCLUDE_DIRS "${ABSL_ROOT_DIR}")
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
function(absl_cc_library)
|
function(absl_cc_library)
|
||||||
cmake_parse_arguments(ABSL_CC_LIB
|
cmake_parse_arguments(ABSL_CC_LIB
|
||||||
"DISABLE_INSTALL;PUBLIC;TESTONLY"
|
"DISABLE_INSTALL;PUBLIC;TESTONLY"
|
||||||
@ -76,6 +77,12 @@ function(absl_cc_library)
|
|||||||
add_library(absl::${ABSL_CC_LIB_NAME} ALIAS ${_NAME})
|
add_library(absl::${ABSL_CC_LIB_NAME} ALIAS ${_NAME})
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
# The following definitions are an amalgamation of the CMakeLists.txt files in absl/*/
|
||||||
|
# To refresh them when upgrading to a new version:
|
||||||
|
# - copy them over from upstream
|
||||||
|
# - remove calls of 'absl_cc_test'
|
||||||
|
# - remove calls of `absl_cc_library` that contain `TESTONLY`
|
||||||
|
# - append '${DIR}' to the file definitions
|
||||||
|
|
||||||
set(DIR ${ABSL_ROOT_DIR}/absl/algorithm)
|
set(DIR ${ABSL_ROOT_DIR}/absl/algorithm)
|
||||||
|
|
||||||
@ -102,12 +109,12 @@ absl_cc_library(
|
|||||||
absl::algorithm
|
absl::algorithm
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::meta
|
absl::meta
|
||||||
|
absl::nullability
|
||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
set(DIR ${ABSL_ROOT_DIR}/absl/base)
|
set(DIR ${ABSL_ROOT_DIR}/absl/base)
|
||||||
|
|
||||||
# Internal-only target, do not depend on directly.
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
atomic_hook
|
atomic_hook
|
||||||
@ -146,6 +153,18 @@ absl_cc_library(
|
|||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
absl_cc_library(
|
||||||
|
NAME
|
||||||
|
no_destructor
|
||||||
|
HDRS
|
||||||
|
"${DIR}/no_destructor.h"
|
||||||
|
DEPS
|
||||||
|
absl::config
|
||||||
|
absl::nullability
|
||||||
|
COPTS
|
||||||
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
)
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
nullability
|
nullability
|
||||||
@ -305,6 +324,8 @@ absl_cc_library(
|
|||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
LINKOPTS
|
LINKOPTS
|
||||||
${ABSL_DEFAULT_LINKOPTS}
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
|
$<$<BOOL:${LIBRT}>:-lrt>
|
||||||
|
$<$<BOOL:${MINGW}>:-ladvapi32>
|
||||||
DEPS
|
DEPS
|
||||||
absl::atomic_hook
|
absl::atomic_hook
|
||||||
absl::base_internal
|
absl::base_internal
|
||||||
@ -312,6 +333,7 @@ absl_cc_library(
|
|||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::dynamic_annotations
|
absl::dynamic_annotations
|
||||||
absl::log_severity
|
absl::log_severity
|
||||||
|
absl::nullability
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::spinlock_wait
|
absl::spinlock_wait
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
@ -357,6 +379,7 @@ absl_cc_library(
|
|||||||
absl::base
|
absl::base
|
||||||
absl::config
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
|
absl::nullability
|
||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -467,10 +490,11 @@ absl_cc_library(
|
|||||||
LINKOPTS
|
LINKOPTS
|
||||||
${ABSL_DEFAULT_LINKOPTS}
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
DEPS
|
DEPS
|
||||||
absl::container_common
|
|
||||||
absl::common_policy_traits
|
absl::common_policy_traits
|
||||||
absl::compare
|
absl::compare
|
||||||
absl::compressed_tuple
|
absl::compressed_tuple
|
||||||
|
absl::config
|
||||||
|
absl::container_common
|
||||||
absl::container_memory
|
absl::container_memory
|
||||||
absl::cord
|
absl::cord
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
@ -480,7 +504,6 @@ absl_cc_library(
|
|||||||
absl::strings
|
absl::strings
|
||||||
absl::throw_delegate
|
absl::throw_delegate
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
absl::utility
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Internal-only target, do not depend on directly.
|
# Internal-only target, do not depend on directly.
|
||||||
@ -523,7 +546,9 @@ absl_cc_library(
|
|||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
|
absl::base_internal
|
||||||
absl::compressed_tuple
|
absl::compressed_tuple
|
||||||
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::memory
|
absl::memory
|
||||||
absl::span
|
absl::span
|
||||||
@ -548,18 +573,6 @@ absl_cc_library(
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
# Internal-only target, do not depend on directly.
|
|
||||||
absl_cc_library(
|
|
||||||
NAME
|
|
||||||
counting_allocator
|
|
||||||
HDRS
|
|
||||||
"${DIR}/internal/counting_allocator.h"
|
|
||||||
COPTS
|
|
||||||
${ABSL_DEFAULT_COPTS}
|
|
||||||
DEPS
|
|
||||||
absl::config
|
|
||||||
)
|
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
flat_hash_map
|
flat_hash_map
|
||||||
@ -570,7 +583,7 @@ absl_cc_library(
|
|||||||
DEPS
|
DEPS
|
||||||
absl::container_memory
|
absl::container_memory
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::hash_function_defaults
|
absl::hash_container_defaults
|
||||||
absl::raw_hash_map
|
absl::raw_hash_map
|
||||||
absl::algorithm_container
|
absl::algorithm_container
|
||||||
absl::memory
|
absl::memory
|
||||||
@ -586,7 +599,7 @@ absl_cc_library(
|
|||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
absl::container_memory
|
absl::container_memory
|
||||||
absl::hash_function_defaults
|
absl::hash_container_defaults
|
||||||
absl::raw_hash_set
|
absl::raw_hash_set
|
||||||
absl::algorithm_container
|
absl::algorithm_container
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
@ -604,7 +617,7 @@ absl_cc_library(
|
|||||||
DEPS
|
DEPS
|
||||||
absl::container_memory
|
absl::container_memory
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::hash_function_defaults
|
absl::hash_container_defaults
|
||||||
absl::node_slot_policy
|
absl::node_slot_policy
|
||||||
absl::raw_hash_map
|
absl::raw_hash_map
|
||||||
absl::algorithm_container
|
absl::algorithm_container
|
||||||
@ -620,8 +633,9 @@ absl_cc_library(
|
|||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
|
absl::container_memory
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::hash_function_defaults
|
absl::hash_container_defaults
|
||||||
absl::node_slot_policy
|
absl::node_slot_policy
|
||||||
absl::raw_hash_set
|
absl::raw_hash_set
|
||||||
absl::algorithm_container
|
absl::algorithm_container
|
||||||
@ -629,6 +643,19 @@ absl_cc_library(
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
|
absl_cc_library(
|
||||||
|
NAME
|
||||||
|
hash_container_defaults
|
||||||
|
HDRS
|
||||||
|
"${DIR}/hash_container_defaults.h"
|
||||||
|
COPTS
|
||||||
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
DEPS
|
||||||
|
absl::config
|
||||||
|
absl::hash_function_defaults
|
||||||
|
PUBLIC
|
||||||
|
)
|
||||||
|
|
||||||
# Internal-only target, do not depend on directly.
|
# Internal-only target, do not depend on directly.
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
@ -655,9 +682,11 @@ absl_cc_library(
|
|||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
absl::config
|
absl::config
|
||||||
|
absl::container_common
|
||||||
absl::cord
|
absl::cord
|
||||||
absl::hash
|
absl::hash
|
||||||
absl::strings
|
absl::strings
|
||||||
|
absl::type_traits
|
||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -703,6 +732,7 @@ absl_cc_library(
|
|||||||
absl::base
|
absl::base
|
||||||
absl::config
|
absl::config
|
||||||
absl::exponential_biased
|
absl::exponential_biased
|
||||||
|
absl::no_destructor
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::sample_recorder
|
absl::sample_recorder
|
||||||
absl::synchronization
|
absl::synchronization
|
||||||
@ -756,7 +786,9 @@ absl_cc_library(
|
|||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
|
absl::config
|
||||||
absl::container_memory
|
absl::container_memory
|
||||||
|
absl::core_headers
|
||||||
absl::raw_hash_set
|
absl::raw_hash_set
|
||||||
absl::throw_delegate
|
absl::throw_delegate
|
||||||
PUBLIC
|
PUBLIC
|
||||||
@ -817,6 +849,7 @@ absl_cc_library(
|
|||||||
DEPS
|
DEPS
|
||||||
absl::config
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
|
absl::debugging_internal
|
||||||
absl::meta
|
absl::meta
|
||||||
absl::strings
|
absl::strings
|
||||||
absl::span
|
absl::span
|
||||||
@ -931,6 +964,7 @@ absl_cc_library(
|
|||||||
absl::crc32c
|
absl::crc32c
|
||||||
absl::config
|
absl::config
|
||||||
absl::strings
|
absl::strings
|
||||||
|
absl::no_destructor
|
||||||
)
|
)
|
||||||
|
|
||||||
set(DIR ${ABSL_ROOT_DIR}/absl/debugging)
|
set(DIR ${ABSL_ROOT_DIR}/absl/debugging)
|
||||||
@ -954,6 +988,8 @@ absl_cc_library(
|
|||||||
"${DIR}/stacktrace.cc"
|
"${DIR}/stacktrace.cc"
|
||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
LINKOPTS
|
||||||
|
$<$<BOOL:${EXECINFO_LIBRARY}>:${EXECINFO_LIBRARY}>
|
||||||
DEPS
|
DEPS
|
||||||
absl::debugging_internal
|
absl::debugging_internal
|
||||||
absl::config
|
absl::config
|
||||||
@ -980,6 +1016,7 @@ absl_cc_library(
|
|||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
LINKOPTS
|
LINKOPTS
|
||||||
${ABSL_DEFAULT_LINKOPTS}
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
|
$<$<BOOL:${MINGW}>:-ldbghelp>
|
||||||
DEPS
|
DEPS
|
||||||
absl::debugging_internal
|
absl::debugging_internal
|
||||||
absl::demangle_internal
|
absl::demangle_internal
|
||||||
@ -1058,8 +1095,10 @@ absl_cc_library(
|
|||||||
demangle_internal
|
demangle_internal
|
||||||
HDRS
|
HDRS
|
||||||
"${DIR}/internal/demangle.h"
|
"${DIR}/internal/demangle.h"
|
||||||
|
"${DIR}/internal/demangle_rust.h"
|
||||||
SRCS
|
SRCS
|
||||||
"${DIR}/internal/demangle.cc"
|
"${DIR}/internal/demangle.cc"
|
||||||
|
"${DIR}/internal/demangle_rust.cc"
|
||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
@ -1252,6 +1291,7 @@ absl_cc_library(
|
|||||||
absl::strings
|
absl::strings
|
||||||
absl::synchronization
|
absl::synchronization
|
||||||
absl::flat_hash_map
|
absl::flat_hash_map
|
||||||
|
absl::no_destructor
|
||||||
)
|
)
|
||||||
|
|
||||||
# Internal-only target, do not depend on directly.
|
# Internal-only target, do not depend on directly.
|
||||||
@ -1283,12 +1323,9 @@ absl_cc_library(
|
|||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
flags
|
flags
|
||||||
SRCS
|
|
||||||
"${DIR}/flag.cc"
|
|
||||||
HDRS
|
HDRS
|
||||||
"${DIR}/declare.h"
|
"${DIR}/declare.h"
|
||||||
"${DIR}/flag.h"
|
"${DIR}/flag.h"
|
||||||
"${DIR}/internal/flag_msvc.inc"
|
|
||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
LINKOPTS
|
LINKOPTS
|
||||||
@ -1299,7 +1336,6 @@ absl_cc_library(
|
|||||||
absl::flags_config
|
absl::flags_config
|
||||||
absl::flags_internal
|
absl::flags_internal
|
||||||
absl::flags_reflection
|
absl::flags_reflection
|
||||||
absl::base
|
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::strings
|
absl::strings
|
||||||
)
|
)
|
||||||
@ -1379,6 +1415,9 @@ absl_cc_library(
|
|||||||
absl::synchronization
|
absl::synchronization
|
||||||
)
|
)
|
||||||
|
|
||||||
|
############################################################################
|
||||||
|
# Unit tests in alphabetical order.
|
||||||
|
|
||||||
set(DIR ${ABSL_ROOT_DIR}/absl/functional)
|
set(DIR ${ABSL_ROOT_DIR}/absl/functional)
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
@ -1431,6 +1470,18 @@ absl_cc_library(
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
|
absl_cc_library(
|
||||||
|
NAME
|
||||||
|
overload
|
||||||
|
HDRS
|
||||||
|
"${DIR}/overload.h"
|
||||||
|
COPTS
|
||||||
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
DEPS
|
||||||
|
absl::meta
|
||||||
|
PUBLIC
|
||||||
|
)
|
||||||
|
|
||||||
set(DIR ${ABSL_ROOT_DIR}/absl/hash)
|
set(DIR ${ABSL_ROOT_DIR}/absl/hash)
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
@ -1640,6 +1691,7 @@ absl_cc_library(
|
|||||||
absl::log_internal_conditions
|
absl::log_internal_conditions
|
||||||
absl::log_internal_message
|
absl::log_internal_message
|
||||||
absl::log_internal_strip
|
absl::log_internal_strip
|
||||||
|
absl::absl_vlog_is_on
|
||||||
)
|
)
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
@ -1721,6 +1773,7 @@ absl_cc_library(
|
|||||||
absl::log_entry
|
absl::log_entry
|
||||||
absl::log_severity
|
absl::log_severity
|
||||||
absl::log_sink
|
absl::log_sink
|
||||||
|
absl::no_destructor
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::synchronization
|
absl::synchronization
|
||||||
absl::span
|
absl::span
|
||||||
@ -1771,6 +1824,7 @@ absl_cc_library(
|
|||||||
LINKOPTS
|
LINKOPTS
|
||||||
${ABSL_DEFAULT_LINKOPTS}
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
DEPS
|
DEPS
|
||||||
|
absl::core_headers
|
||||||
absl::log_internal_message
|
absl::log_internal_message
|
||||||
absl::log_internal_nullstream
|
absl::log_internal_nullstream
|
||||||
absl::log_severity
|
absl::log_severity
|
||||||
@ -1876,6 +1930,11 @@ absl_cc_library(
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Warning: Many linkers will strip the contents of this library because its
|
||||||
|
# symbols are only used in a global constructor. A workaround is for clients
|
||||||
|
# to link this using $<LINK_LIBRARY:WHOLE_ARCHIVE,absl::log_flags> instead of
|
||||||
|
# the plain absl::log_flags.
|
||||||
|
# TODO(b/320467376): Implement the equivalent of Bazel's alwayslink=True.
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
log_flags
|
log_flags
|
||||||
@ -1897,6 +1956,7 @@ absl_cc_library(
|
|||||||
absl::flags
|
absl::flags
|
||||||
absl::flags_marshalling
|
absl::flags_marshalling
|
||||||
absl::strings
|
absl::strings
|
||||||
|
absl::vlog_config_internal
|
||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -1919,6 +1979,7 @@ absl_cc_library(
|
|||||||
absl::log_severity
|
absl::log_severity
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::strings
|
absl::strings
|
||||||
|
absl::vlog_config_internal
|
||||||
)
|
)
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
@ -1952,6 +2013,7 @@ absl_cc_library(
|
|||||||
${ABSL_DEFAULT_LINKOPTS}
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
DEPS
|
DEPS
|
||||||
absl::log_internal_log_impl
|
absl::log_internal_log_impl
|
||||||
|
absl::vlog_is_on
|
||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -2064,21 +2126,75 @@ absl_cc_library(
|
|||||||
)
|
)
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
log_internal_fnmatch
|
vlog_config_internal
|
||||||
SRCS
|
SRCS
|
||||||
"${DIR}/internal/fnmatch.cc"
|
"${DIR}/internal/vlog_config.cc"
|
||||||
HDRS
|
HDRS
|
||||||
"${DIR}/internal/fnmatch.h"
|
"${DIR}/internal/vlog_config.h"
|
||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
LINKOPTS
|
LINKOPTS
|
||||||
${ABSL_DEFAULT_LINKOPTS}
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
DEPS
|
DEPS
|
||||||
absl::config
|
absl::base
|
||||||
absl::strings
|
absl::config
|
||||||
|
absl::core_headers
|
||||||
|
absl::log_internal_fnmatch
|
||||||
|
absl::memory
|
||||||
|
absl::no_destructor
|
||||||
|
absl::strings
|
||||||
|
absl::synchronization
|
||||||
|
absl::optional
|
||||||
)
|
)
|
||||||
|
|
||||||
|
absl_cc_library(
|
||||||
|
NAME
|
||||||
|
absl_vlog_is_on
|
||||||
|
COPTS
|
||||||
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
LINKOPTS
|
||||||
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
|
HDRS
|
||||||
|
"${DIR}/absl_vlog_is_on.h"
|
||||||
|
DEPS
|
||||||
|
absl::vlog_config_internal
|
||||||
|
absl::config
|
||||||
|
absl::core_headers
|
||||||
|
absl::strings
|
||||||
|
)
|
||||||
|
|
||||||
|
absl_cc_library(
|
||||||
|
NAME
|
||||||
|
vlog_is_on
|
||||||
|
COPTS
|
||||||
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
LINKOPTS
|
||||||
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
|
HDRS
|
||||||
|
"${DIR}/vlog_is_on.h"
|
||||||
|
DEPS
|
||||||
|
absl::absl_vlog_is_on
|
||||||
|
)
|
||||||
|
|
||||||
|
absl_cc_library(
|
||||||
|
NAME
|
||||||
|
log_internal_fnmatch
|
||||||
|
SRCS
|
||||||
|
"${DIR}/internal/fnmatch.cc"
|
||||||
|
HDRS
|
||||||
|
"${DIR}/internal/fnmatch.h"
|
||||||
|
COPTS
|
||||||
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
LINKOPTS
|
||||||
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
|
DEPS
|
||||||
|
absl::config
|
||||||
|
absl::strings
|
||||||
|
)
|
||||||
|
|
||||||
|
# Test targets
|
||||||
|
|
||||||
set(DIR ${ABSL_ROOT_DIR}/absl/memory)
|
set(DIR ${ABSL_ROOT_DIR}/absl/memory)
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
@ -2147,6 +2263,7 @@ absl_cc_library(
|
|||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
|
absl::compare
|
||||||
absl::config
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::bits
|
absl::bits
|
||||||
@ -2176,6 +2293,8 @@ absl_cc_library(
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(DIR ${ABSL_ROOT_DIR}/absl/profiling)
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
sample_recorder
|
sample_recorder
|
||||||
@ -2188,8 +2307,6 @@ absl_cc_library(
|
|||||||
absl::synchronization
|
absl::synchronization
|
||||||
)
|
)
|
||||||
|
|
||||||
set(DIR ${ABSL_ROOT_DIR}/absl/profiling)
|
|
||||||
|
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
exponential_biased
|
exponential_biased
|
||||||
@ -2265,6 +2382,7 @@ absl_cc_library(
|
|||||||
LINKOPTS
|
LINKOPTS
|
||||||
${ABSL_DEFAULT_LINKOPTS}
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
DEPS
|
DEPS
|
||||||
|
absl::config
|
||||||
absl::fast_type_id
|
absl::fast_type_id
|
||||||
absl::optional
|
absl::optional
|
||||||
)
|
)
|
||||||
@ -2336,11 +2454,13 @@ absl_cc_library(
|
|||||||
DEPS
|
DEPS
|
||||||
absl::config
|
absl::config
|
||||||
absl::inlined_vector
|
absl::inlined_vector
|
||||||
|
absl::nullability
|
||||||
absl::random_internal_pool_urbg
|
absl::random_internal_pool_urbg
|
||||||
absl::random_internal_salted_seed_seq
|
absl::random_internal_salted_seed_seq
|
||||||
absl::random_internal_seed_material
|
absl::random_internal_seed_material
|
||||||
absl::random_seed_gen_exception
|
absl::random_seed_gen_exception
|
||||||
absl::span
|
absl::span
|
||||||
|
absl::string_view
|
||||||
)
|
)
|
||||||
|
|
||||||
# Internal-only target, do not depend on directly.
|
# Internal-only target, do not depend on directly.
|
||||||
@ -2399,6 +2519,7 @@ absl_cc_library(
|
|||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
LINKOPTS
|
LINKOPTS
|
||||||
${ABSL_DEFAULT_LINKOPTS}
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
|
$<$<BOOL:${MINGW}>:-lbcrypt>
|
||||||
DEPS
|
DEPS
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::optional
|
absl::optional
|
||||||
@ -2658,6 +2779,29 @@ absl_cc_library(
|
|||||||
absl::config
|
absl::config
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Internal-only target, do not depend on directly.
|
||||||
|
absl_cc_library(
|
||||||
|
NAME
|
||||||
|
random_internal_distribution_test_util
|
||||||
|
SRCS
|
||||||
|
"${DIR}/internal/chi_square.cc"
|
||||||
|
"${DIR}/internal/distribution_test_util.cc"
|
||||||
|
HDRS
|
||||||
|
"${DIR}/internal/chi_square.h"
|
||||||
|
"${DIR}/internal/distribution_test_util.h"
|
||||||
|
COPTS
|
||||||
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
LINKOPTS
|
||||||
|
${ABSL_DEFAULT_LINKOPTS}
|
||||||
|
DEPS
|
||||||
|
absl::config
|
||||||
|
absl::core_headers
|
||||||
|
absl::raw_logging_internal
|
||||||
|
absl::strings
|
||||||
|
absl::str_format
|
||||||
|
absl::span
|
||||||
|
)
|
||||||
|
|
||||||
# Internal-only target, do not depend on directly.
|
# Internal-only target, do not depend on directly.
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
@ -2699,6 +2843,8 @@ absl_cc_library(
|
|||||||
absl::function_ref
|
absl::function_ref
|
||||||
absl::inlined_vector
|
absl::inlined_vector
|
||||||
absl::memory
|
absl::memory
|
||||||
|
absl::no_destructor
|
||||||
|
absl::nullability
|
||||||
absl::optional
|
absl::optional
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::span
|
absl::span
|
||||||
@ -2724,8 +2870,11 @@ absl_cc_library(
|
|||||||
absl::base
|
absl::base
|
||||||
absl::config
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
|
absl::has_ostream_operator
|
||||||
|
absl::nullability
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::status
|
absl::status
|
||||||
|
absl::str_format
|
||||||
absl::strings
|
absl::strings
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
absl::utility
|
absl::utility
|
||||||
@ -2748,6 +2897,7 @@ absl_cc_library(
|
|||||||
absl::base
|
absl::base
|
||||||
absl::config
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
|
absl::nullability
|
||||||
absl::throw_delegate
|
absl::throw_delegate
|
||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
@ -2762,6 +2912,7 @@ absl_cc_library(
|
|||||||
"${DIR}/has_absl_stringify.h"
|
"${DIR}/has_absl_stringify.h"
|
||||||
"${DIR}/internal/damerau_levenshtein_distance.h"
|
"${DIR}/internal/damerau_levenshtein_distance.h"
|
||||||
"${DIR}/internal/string_constant.h"
|
"${DIR}/internal/string_constant.h"
|
||||||
|
"${DIR}/internal/has_absl_stringify.h"
|
||||||
"${DIR}/match.h"
|
"${DIR}/match.h"
|
||||||
"${DIR}/numbers.h"
|
"${DIR}/numbers.h"
|
||||||
"${DIR}/str_cat.h"
|
"${DIR}/str_cat.h"
|
||||||
@ -2805,6 +2956,7 @@ absl_cc_library(
|
|||||||
absl::endian
|
absl::endian
|
||||||
absl::int128
|
absl::int128
|
||||||
absl::memory
|
absl::memory
|
||||||
|
absl::nullability
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::throw_delegate
|
absl::throw_delegate
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
@ -2824,6 +2976,18 @@ absl_cc_library(
|
|||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
|
absl_cc_library(
|
||||||
|
NAME
|
||||||
|
has_ostream_operator
|
||||||
|
HDRS
|
||||||
|
"${DIR}/has_ostream_operator.h"
|
||||||
|
COPTS
|
||||||
|
${ABSL_DEFAULT_COPTS}
|
||||||
|
DEPS
|
||||||
|
absl::config
|
||||||
|
PUBLIC
|
||||||
|
)
|
||||||
|
|
||||||
# Internal-only target, do not depend on directly.
|
# Internal-only target, do not depend on directly.
|
||||||
absl_cc_library(
|
absl_cc_library(
|
||||||
NAME
|
NAME
|
||||||
@ -2855,7 +3019,12 @@ absl_cc_library(
|
|||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
|
absl::config
|
||||||
|
absl::core_headers
|
||||||
|
absl::nullability
|
||||||
|
absl::span
|
||||||
absl::str_format_internal
|
absl::str_format_internal
|
||||||
|
absl::string_view
|
||||||
PUBLIC
|
PUBLIC
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -2886,6 +3055,7 @@ absl_cc_library(
|
|||||||
absl::strings
|
absl::strings
|
||||||
absl::config
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
|
absl::fixed_array
|
||||||
absl::inlined_vector
|
absl::inlined_vector
|
||||||
absl::numeric_representation
|
absl::numeric_representation
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
@ -2989,6 +3159,7 @@ absl_cc_library(
|
|||||||
DEPS
|
DEPS
|
||||||
absl::base
|
absl::base
|
||||||
absl::config
|
absl::config
|
||||||
|
absl::no_destructor
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::synchronization
|
absl::synchronization
|
||||||
)
|
)
|
||||||
@ -3079,6 +3250,7 @@ absl_cc_library(
|
|||||||
absl::endian
|
absl::endian
|
||||||
absl::function_ref
|
absl::function_ref
|
||||||
absl::inlined_vector
|
absl::inlined_vector
|
||||||
|
absl::nullability
|
||||||
absl::optional
|
absl::optional
|
||||||
absl::raw_logging_internal
|
absl::raw_logging_internal
|
||||||
absl::span
|
absl::span
|
||||||
@ -3246,6 +3418,8 @@ absl_cc_library(
|
|||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
Threads::Threads
|
Threads::Threads
|
||||||
|
# TODO(#1495): Use $<LINK_LIBRARY:FRAMEWORK,CoreFoundation> once our
|
||||||
|
# minimum CMake version >= 3.24
|
||||||
$<$<PLATFORM_ID:Darwin>:-Wl,-framework,CoreFoundation>
|
$<$<PLATFORM_ID:Darwin>:-Wl,-framework,CoreFoundation>
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -3286,8 +3460,8 @@ absl_cc_library(
|
|||||||
NAME
|
NAME
|
||||||
bad_any_cast_impl
|
bad_any_cast_impl
|
||||||
SRCS
|
SRCS
|
||||||
"${DIR}/bad_any_cast.h"
|
"${DIR}/bad_any_cast.h"
|
||||||
"${DIR}/bad_any_cast.cc"
|
"${DIR}/bad_any_cast.cc"
|
||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
@ -3307,6 +3481,7 @@ absl_cc_library(
|
|||||||
DEPS
|
DEPS
|
||||||
absl::algorithm
|
absl::algorithm
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
|
absl::nullability
|
||||||
absl::throw_delegate
|
absl::throw_delegate
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
PUBLIC
|
PUBLIC
|
||||||
@ -3327,6 +3502,7 @@ absl_cc_library(
|
|||||||
absl::config
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::memory
|
absl::memory
|
||||||
|
absl::nullability
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
absl::utility
|
absl::utility
|
||||||
PUBLIC
|
PUBLIC
|
||||||
@ -3389,6 +3565,7 @@ absl_cc_library(
|
|||||||
COPTS
|
COPTS
|
||||||
${ABSL_DEFAULT_COPTS}
|
${ABSL_DEFAULT_COPTS}
|
||||||
DEPS
|
DEPS
|
||||||
|
absl::config
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
PUBLIC
|
PUBLIC
|
||||||
|
2
contrib/avro
vendored
2
contrib/avro
vendored
@ -1 +1 @@
|
|||||||
Subproject commit d43acc84d3d455b016f847d6666fbc3cd27f16a9
|
Subproject commit 545e7002683cbc2198164d93088ac8e4955b4628
|
2
contrib/aws
vendored
2
contrib/aws
vendored
@ -1 +1 @@
|
|||||||
Subproject commit deeaa9e7c5fe690e3dacc4005d7ecfa7a66a32bb
|
Subproject commit 1c2946bfcb7f1e3ae0a858de0b59d4f1a7b4ccaf
|
@ -125,7 +125,7 @@ configure_file("${AWS_SDK_CORE_DIR}/include/aws/core/SDKConfig.h.in"
|
|||||||
"${CMAKE_CURRENT_BINARY_DIR}/include/aws/core/SDKConfig.h" @ONLY)
|
"${CMAKE_CURRENT_BINARY_DIR}/include/aws/core/SDKConfig.h" @ONLY)
|
||||||
|
|
||||||
aws_get_version(AWS_CRT_CPP_VERSION_MAJOR AWS_CRT_CPP_VERSION_MINOR AWS_CRT_CPP_VERSION_PATCH FULL_VERSION GIT_HASH)
|
aws_get_version(AWS_CRT_CPP_VERSION_MAJOR AWS_CRT_CPP_VERSION_MINOR AWS_CRT_CPP_VERSION_PATCH FULL_VERSION GIT_HASH)
|
||||||
configure_file("${AWS_CRT_DIR}/include/aws/crt/Config.h.in" "${AWS_CRT_DIR}/include/aws/crt/Config.h" @ONLY)
|
configure_file("${AWS_CRT_DIR}/include/aws/crt/Config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/include/aws/crt/Config.h" @ONLY)
|
||||||
|
|
||||||
list(APPEND AWS_SOURCES ${AWS_SDK_CORE_SRC} ${AWS_SDK_CORE_NET_SRC} ${AWS_SDK_CORE_PLATFORM_SRC})
|
list(APPEND AWS_SOURCES ${AWS_SDK_CORE_SRC} ${AWS_SDK_CORE_NET_SRC} ${AWS_SDK_CORE_PLATFORM_SRC})
|
||||||
|
|
||||||
|
2
contrib/azure
vendored
2
contrib/azure
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 6262a76ef4c4c330c84e58dd4f6f13f4e6230fcd
|
Subproject commit ea3e19a7be08519134c643177d56c7484dfec884
|
2
contrib/cld2
vendored
2
contrib/cld2
vendored
@ -1 +1 @@
|
|||||||
Subproject commit bc6d493a2f64ed1fc1c4c4b4294a542a04e04217
|
Subproject commit 217ba8b8805b41557faadaa47bb6e99f2242eea3
|
2
contrib/fmtlib
vendored
2
contrib/fmtlib
vendored
@ -1 +1 @@
|
|||||||
Subproject commit b6f4ceaed0a0a24ccf575fab6c56dd50ccf6f1a9
|
Subproject commit a33701196adfad74917046096bf5a2aa0ab0bb50
|
@ -13,7 +13,6 @@ set (SRCS
|
|||||||
${FMT_SOURCE_DIR}/include/fmt/core.h
|
${FMT_SOURCE_DIR}/include/fmt/core.h
|
||||||
${FMT_SOURCE_DIR}/include/fmt/format.h
|
${FMT_SOURCE_DIR}/include/fmt/format.h
|
||||||
${FMT_SOURCE_DIR}/include/fmt/format-inl.h
|
${FMT_SOURCE_DIR}/include/fmt/format-inl.h
|
||||||
${FMT_SOURCE_DIR}/include/fmt/locale.h
|
|
||||||
${FMT_SOURCE_DIR}/include/fmt/os.h
|
${FMT_SOURCE_DIR}/include/fmt/os.h
|
||||||
${FMT_SOURCE_DIR}/include/fmt/ostream.h
|
${FMT_SOURCE_DIR}/include/fmt/ostream.h
|
||||||
${FMT_SOURCE_DIR}/include/fmt/printf.h
|
${FMT_SOURCE_DIR}/include/fmt/printf.h
|
||||||
|
@ -157,15 +157,13 @@ function(protobuf_generate)
|
|||||||
|
|
||||||
set(_generated_srcs_all)
|
set(_generated_srcs_all)
|
||||||
foreach(_proto ${protobuf_generate_PROTOS})
|
foreach(_proto ${protobuf_generate_PROTOS})
|
||||||
get_filename_component(_abs_file ${_proto} ABSOLUTE)
|
# The protobuf compiler doesn't return paths to the files it generates so we have to calculate those paths here:
|
||||||
get_filename_component(_abs_dir ${_abs_file} DIRECTORY)
|
# _abs_file - absolute path to a .proto file,
|
||||||
get_filename_component(_basename ${_proto} NAME_WE)
|
# _possible_rel_dir - relative path to the .proto file from some import directory specified in Protobuf_IMPORT_DIRS,
|
||||||
file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir})
|
# _basename - filename of the .proto file (without path and without extenstion).
|
||||||
|
get_proto_absolute_path(_abs_file "${_proto}" ${_protobuf_include_path})
|
||||||
set(_possible_rel_dir)
|
get_proto_relative_path(_possible_rel_dir "${_abs_file}" ${_protobuf_include_path})
|
||||||
if (NOT protobuf_generate_APPEND_PATH)
|
get_filename_component(_basename "${_abs_file}" NAME_WE)
|
||||||
set(_possible_rel_dir ${_rel_dir}/)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(_generated_srcs)
|
set(_generated_srcs)
|
||||||
foreach(_ext ${protobuf_generate_GENERATE_EXTENSIONS})
|
foreach(_ext ${protobuf_generate_GENERATE_EXTENSIONS})
|
||||||
@ -173,7 +171,7 @@ function(protobuf_generate)
|
|||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
if(protobuf_generate_DESCRIPTORS AND protobuf_generate_LANGUAGE STREQUAL cpp)
|
if(protobuf_generate_DESCRIPTORS AND protobuf_generate_LANGUAGE STREQUAL cpp)
|
||||||
set(_descriptor_file "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.desc")
|
set(_descriptor_file "${protobuf_generate_PROTOC_OUT_DIR}/${_possible_rel_dir}${_basename}.desc")
|
||||||
set(_dll_desc_out "--descriptor_set_out=${_descriptor_file}")
|
set(_dll_desc_out "--descriptor_set_out=${_descriptor_file}")
|
||||||
list(APPEND _generated_srcs ${_descriptor_file})
|
list(APPEND _generated_srcs ${_descriptor_file})
|
||||||
endif()
|
endif()
|
||||||
@ -196,3 +194,36 @@ function(protobuf_generate)
|
|||||||
target_sources(${protobuf_generate_TARGET} PRIVATE ${_generated_srcs_all})
|
target_sources(${protobuf_generate_TARGET} PRIVATE ${_generated_srcs_all})
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
# Calculates the absolute path to a .proto file.
|
||||||
|
function(get_proto_absolute_path result proto)
|
||||||
|
cmake_path(IS_ABSOLUTE proto _is_abs_path)
|
||||||
|
if(_is_abs_path)
|
||||||
|
set(${result} "${proto}" PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
foreach(_include_dir ${ARGN})
|
||||||
|
if(EXISTS "${_include_dir}/${proto}")
|
||||||
|
set(${result} "${_include_dir}/${proto}" PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
message(SEND_ERROR "Not found protobuf ${proto} in Protobuf_IMPORT_DIRS: ${ARGN}")
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Calculates a relative path to a .proto file. The returned path is relative to one of include directories.
|
||||||
|
function(get_proto_relative_path result abs_path)
|
||||||
|
set(${result} "" PARENT_SCOPE)
|
||||||
|
get_filename_component(_abs_dir "${abs_path}" DIRECTORY)
|
||||||
|
foreach(_include_dir ${ARGN})
|
||||||
|
cmake_path(IS_PREFIX _include_dir "${_abs_dir}" _is_prefix)
|
||||||
|
if(_is_prefix)
|
||||||
|
file(RELATIVE_PATH _rel_dir "${_include_dir}" "${_abs_dir}")
|
||||||
|
if(NOT _rel_dir STREQUAL "")
|
||||||
|
set(${result} "${_rel_dir}/" PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
message(WARNING "Not found protobuf ${abs_path} in Protobuf_IMPORT_DIRS: ${ARGN}")
|
||||||
|
endfunction()
|
||||||
|
2
contrib/googletest
vendored
2
contrib/googletest
vendored
@ -1 +1 @@
|
|||||||
Subproject commit e47544ad31cb3ceecd04cc13e8fe556f8df9fe0b
|
Subproject commit a7f443b80b105f940225332ed3c31f2790092f47
|
2
contrib/grpc
vendored
2
contrib/grpc
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 77b2737a709d43d8c6895e3f03ca62b00bd9201c
|
Subproject commit f5b7fdc2dff09ada06dbf6c75df298fb40f898df
|
@ -5,7 +5,7 @@ else ()
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT ENABLE_ICU)
|
if (NOT ENABLE_ICU)
|
||||||
message(STATUS "Not using icu")
|
message(STATUS "Not using ICU")
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -34,7 +34,11 @@ if (OS_LINUX)
|
|||||||
# avoid spurious latencies and additional work associated with
|
# avoid spurious latencies and additional work associated with
|
||||||
# MADV_DONTNEED. See
|
# MADV_DONTNEED. See
|
||||||
# https://github.com/ClickHouse/ClickHouse/issues/11121 for motivation.
|
# https://github.com/ClickHouse/ClickHouse/issues/11121 for motivation.
|
||||||
set (JEMALLOC_CONFIG_MALLOC_CONF "percpu_arena:percpu,oversize_threshold:0,muzzy_decay_ms:0,dirty_decay_ms:5000")
|
if (CMAKE_BUILD_TYPE_UC STREQUAL "DEBUG")
|
||||||
|
set (JEMALLOC_CONFIG_MALLOC_CONF "percpu_arena:percpu,oversize_threshold:0,muzzy_decay_ms:0,dirty_decay_ms:5000")
|
||||||
|
else()
|
||||||
|
set (JEMALLOC_CONFIG_MALLOC_CONF "percpu_arena:percpu,oversize_threshold:0,muzzy_decay_ms:0,dirty_decay_ms:5000,prof:true,prof_active:false,background_thread:true")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set (JEMALLOC_CONFIG_MALLOC_CONF "oversize_threshold:0,muzzy_decay_ms:0,dirty_decay_ms:5000")
|
set (JEMALLOC_CONFIG_MALLOC_CONF "oversize_threshold:0,muzzy_decay_ms:0,dirty_decay_ms:5000")
|
||||||
endif()
|
endif()
|
||||||
@ -175,12 +179,19 @@ endif ()
|
|||||||
|
|
||||||
target_compile_definitions(_jemalloc PRIVATE -DJEMALLOC_PROF=1)
|
target_compile_definitions(_jemalloc PRIVATE -DJEMALLOC_PROF=1)
|
||||||
|
|
||||||
# jemalloc provides support for two different libunwind flavors: the original HP libunwind and the one coming with gcc / g++ / libstdc++.
|
# jemalloc provides support two unwind flavors:
|
||||||
# The latter is identified by `JEMALLOC_PROF_LIBGCC` and uses `_Unwind_Backtrace` method instead of `unw_backtrace`.
|
# - JEMALLOC_PROF_LIBUNWIND - unw_backtrace() - gnu libunwind (compatible with llvm libunwind)
|
||||||
# At the time ClickHouse uses LLVM libunwind which follows libgcc's way of backtracking.
|
# - JEMALLOC_PROF_LIBGCC - _Unwind_Backtrace() - the original HP libunwind and the one coming with gcc / g++ / libstdc++.
|
||||||
#
|
#
|
||||||
# ClickHouse has to provide `unw_backtrace` method by the means of [commit 8e2b31e](https://github.com/ClickHouse/libunwind/commit/8e2b31e766dd502f6df74909e04a7dbdf5182eb1).
|
# But for JEMALLOC_PROF_LIBGCC it also calls _Unwind_Backtrace() during
|
||||||
target_compile_definitions (_jemalloc PRIVATE -DJEMALLOC_PROF_LIBGCC=1)
|
# bootstraping of jemalloc, which may lead to deadlock, if the dlsym will do
|
||||||
|
# allocations somewhere (like glibc does prio 2.34, see [1]).
|
||||||
|
#
|
||||||
|
# [1]: https://sourceware.org/git/?p=glibc.git;a=commit;h=fada9018199c21c469ff0e731ef75c6020074ac9
|
||||||
|
#
|
||||||
|
# And since ClickHouse unwind already supports unw_backtrace() we can safely
|
||||||
|
# switch to it to avoid this deadlock.
|
||||||
|
target_compile_definitions (_jemalloc PRIVATE -DJEMALLOC_PROF_LIBUNWIND=1)
|
||||||
target_link_libraries (_jemalloc PRIVATE unwind)
|
target_link_libraries (_jemalloc PRIVATE unwind)
|
||||||
|
|
||||||
# for RTLD_NEXT
|
# for RTLD_NEXT
|
||||||
|
@ -54,7 +54,6 @@ set(SRCS
|
|||||||
"${LIBPQ_SOURCE_DIR}/port/pgstrcasecmp.c"
|
"${LIBPQ_SOURCE_DIR}/port/pgstrcasecmp.c"
|
||||||
"${LIBPQ_SOURCE_DIR}/port/thread.c"
|
"${LIBPQ_SOURCE_DIR}/port/thread.c"
|
||||||
"${LIBPQ_SOURCE_DIR}/port/path.c"
|
"${LIBPQ_SOURCE_DIR}/port/path.c"
|
||||||
"${LIBPQ_SOURCE_DIR}/port/explicit_bzero.c"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(_libpq ${SRCS})
|
add_library(_libpq ${SRCS})
|
||||||
|
2
contrib/llvm-project
vendored
2
contrib/llvm-project
vendored
@ -1 +1 @@
|
|||||||
Subproject commit d2142eed98046a47ff7112e3cc1e197c8a5cd80f
|
Subproject commit 2a8967b60cbe5bc2df253712bac343cc5263c5fc
|
2
contrib/mariadb-connector-c
vendored
2
contrib/mariadb-connector-c
vendored
@ -1 +1 @@
|
|||||||
Subproject commit e39608998f5f6944ece9ec61f48e9172ec1de660
|
Subproject commit d0a788c5b9fcaca2368d9233770d3ca91ea79f88
|
2
contrib/openssl
vendored
2
contrib/openssl
vendored
@ -1 +1 @@
|
|||||||
Subproject commit f7b8721dfc66abb147f24ca07b9c9d1d64f40f71
|
Subproject commit ee2bb8513b28bf86b35404dd17a0e29305ca9e08
|
2
contrib/orc
vendored
2
contrib/orc
vendored
@ -1 +1 @@
|
|||||||
Subproject commit e24f2c2a3ca0769c96704ab20ad6f512a83ea2ad
|
Subproject commit bcc025c09828c556f54cfbdf83a66b9acae7d17f
|
2
contrib/pocketfft
vendored
2
contrib/pocketfft
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 9efd4da52cf8d28d14531d14e43ad9d913807546
|
Subproject commit f4c1aa8aa9ce79ad39e80f2c9c41b92ead90fda3
|
34
contrib/prometheus-protobufs-cmake/CMakeLists.txt
Normal file
34
contrib/prometheus-protobufs-cmake/CMakeLists.txt
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
option(ENABLE_PROMETHEUS_PROTOBUFS "Enable Prometheus Protobufs" ${ENABLE_PROTOBUF})
|
||||||
|
|
||||||
|
if(NOT ENABLE_PROMETHEUS_PROTOBUFS)
|
||||||
|
message(STATUS "Not using prometheus-protobufs")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(Protobuf_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/google-protobuf/src")
|
||||||
|
set(Prometheus_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/prometheus-protobufs")
|
||||||
|
set(GogoProto_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/prometheus-protobufs-gogo")
|
||||||
|
|
||||||
|
# Protobuf_IMPORT_DIRS specify where the protobuf compiler will look for .proto files.
|
||||||
|
set(Old_Protobuf_IMPORT_DIRS ${Protobuf_IMPORT_DIRS})
|
||||||
|
list(APPEND Protobuf_IMPORT_DIRS "${Protobuf_INCLUDE_DIR}" "${Prometheus_INCLUDE_DIR}" "${GogoProto_INCLUDE_DIR}")
|
||||||
|
|
||||||
|
PROTOBUF_GENERATE_CPP(prometheus_protobufs_sources prometheus_protobufs_headers
|
||||||
|
"prompb/remote.proto"
|
||||||
|
"prompb/types.proto"
|
||||||
|
"gogoproto/gogo.proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(Protobuf_IMPORT_DIRS ${Old_Protobuf_IMPORT_DIRS})
|
||||||
|
|
||||||
|
# Ignore warnings while compiling protobuf-generated *.pb.h and *.pb.cpp files.
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
|
||||||
|
|
||||||
|
# Disable clang-tidy for protobuf-generated *.pb.h and *.pb.cpp files.
|
||||||
|
set (CMAKE_CXX_CLANG_TIDY "")
|
||||||
|
|
||||||
|
add_library(_prometheus_protobufs ${prometheus_protobufs_sources} ${prometheus_protobufs_headers})
|
||||||
|
target_include_directories(_prometheus_protobufs SYSTEM PUBLIC "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
target_link_libraries (_prometheus_protobufs PUBLIC ch_contrib::protobuf)
|
||||||
|
|
||||||
|
add_library (ch_contrib::prometheus_protobufs ALIAS _prometheus_protobufs)
|
35
contrib/prometheus-protobufs-gogo/LICENSE
Normal file
35
contrib/prometheus-protobufs-gogo/LICENSE
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
Copyright (c) 2022, The Cosmos SDK Authors. All rights reserved.
|
||||||
|
Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
||||||
|
|
||||||
|
Protocol Buffers for Go with Gadgets
|
||||||
|
|
||||||
|
Go support for Protocol Buffers - Google's data interchange format
|
||||||
|
|
||||||
|
Copyright 2010 The Go Authors. All rights reserved.
|
||||||
|
https://github.com/golang/protobuf
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
|
in the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
4
contrib/prometheus-protobufs-gogo/README
Normal file
4
contrib/prometheus-protobufs-gogo/README
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
File "gogoproto/gogo.proto" was downloaded from the "Protocol Buffers for Go with Gadgets" project:
|
||||||
|
https://github.com/cosmos/gogoproto/blob/main/gogoproto/gogo.proto
|
||||||
|
|
||||||
|
File "gogoproto/gogo.proto" is used in ClickHouse to compile prometheus protobufs.
|
145
contrib/prometheus-protobufs-gogo/gogoproto/gogo.proto
Normal file
145
contrib/prometheus-protobufs-gogo/gogoproto/gogo.proto
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
// Protocol Buffers for Go with Gadgets
|
||||||
|
//
|
||||||
|
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
||||||
|
// http://github.com/cosmos/gogoproto
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
syntax = "proto2";
|
||||||
|
package gogoproto;
|
||||||
|
|
||||||
|
import "google/protobuf/descriptor.proto";
|
||||||
|
|
||||||
|
option java_package = "com.google.protobuf";
|
||||||
|
option java_outer_classname = "GoGoProtos";
|
||||||
|
option go_package = "github.com/cosmos/gogoproto/gogoproto";
|
||||||
|
|
||||||
|
extend google.protobuf.EnumOptions {
|
||||||
|
optional bool goproto_enum_prefix = 62001;
|
||||||
|
optional bool goproto_enum_stringer = 62021;
|
||||||
|
optional bool enum_stringer = 62022;
|
||||||
|
optional string enum_customname = 62023;
|
||||||
|
optional bool enumdecl = 62024;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.EnumValueOptions {
|
||||||
|
optional string enumvalue_customname = 66001;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.FileOptions {
|
||||||
|
optional bool goproto_getters_all = 63001;
|
||||||
|
optional bool goproto_enum_prefix_all = 63002;
|
||||||
|
optional bool goproto_stringer_all = 63003;
|
||||||
|
optional bool verbose_equal_all = 63004;
|
||||||
|
optional bool face_all = 63005;
|
||||||
|
optional bool gostring_all = 63006;
|
||||||
|
optional bool populate_all = 63007;
|
||||||
|
optional bool stringer_all = 63008;
|
||||||
|
optional bool onlyone_all = 63009;
|
||||||
|
|
||||||
|
optional bool equal_all = 63013;
|
||||||
|
optional bool description_all = 63014;
|
||||||
|
optional bool testgen_all = 63015;
|
||||||
|
optional bool benchgen_all = 63016;
|
||||||
|
optional bool marshaler_all = 63017;
|
||||||
|
optional bool unmarshaler_all = 63018;
|
||||||
|
optional bool stable_marshaler_all = 63019;
|
||||||
|
|
||||||
|
optional bool sizer_all = 63020;
|
||||||
|
|
||||||
|
optional bool goproto_enum_stringer_all = 63021;
|
||||||
|
optional bool enum_stringer_all = 63022;
|
||||||
|
|
||||||
|
optional bool unsafe_marshaler_all = 63023;
|
||||||
|
optional bool unsafe_unmarshaler_all = 63024;
|
||||||
|
|
||||||
|
optional bool goproto_extensions_map_all = 63025;
|
||||||
|
optional bool goproto_unrecognized_all = 63026;
|
||||||
|
optional bool gogoproto_import = 63027;
|
||||||
|
optional bool protosizer_all = 63028;
|
||||||
|
optional bool compare_all = 63029;
|
||||||
|
optional bool typedecl_all = 63030;
|
||||||
|
optional bool enumdecl_all = 63031;
|
||||||
|
|
||||||
|
optional bool goproto_registration = 63032;
|
||||||
|
optional bool messagename_all = 63033;
|
||||||
|
|
||||||
|
optional bool goproto_sizecache_all = 63034;
|
||||||
|
optional bool goproto_unkeyed_all = 63035;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.MessageOptions {
|
||||||
|
optional bool goproto_getters = 64001;
|
||||||
|
optional bool goproto_stringer = 64003;
|
||||||
|
optional bool verbose_equal = 64004;
|
||||||
|
optional bool face = 64005;
|
||||||
|
optional bool gostring = 64006;
|
||||||
|
optional bool populate = 64007;
|
||||||
|
optional bool stringer = 67008;
|
||||||
|
optional bool onlyone = 64009;
|
||||||
|
|
||||||
|
optional bool equal = 64013;
|
||||||
|
optional bool description = 64014;
|
||||||
|
optional bool testgen = 64015;
|
||||||
|
optional bool benchgen = 64016;
|
||||||
|
optional bool marshaler = 64017;
|
||||||
|
optional bool unmarshaler = 64018;
|
||||||
|
optional bool stable_marshaler = 64019;
|
||||||
|
|
||||||
|
optional bool sizer = 64020;
|
||||||
|
|
||||||
|
optional bool unsafe_marshaler = 64023;
|
||||||
|
optional bool unsafe_unmarshaler = 64024;
|
||||||
|
|
||||||
|
optional bool goproto_extensions_map = 64025;
|
||||||
|
optional bool goproto_unrecognized = 64026;
|
||||||
|
|
||||||
|
optional bool protosizer = 64028;
|
||||||
|
optional bool compare = 64029;
|
||||||
|
|
||||||
|
optional bool typedecl = 64030;
|
||||||
|
|
||||||
|
optional bool messagename = 64033;
|
||||||
|
|
||||||
|
optional bool goproto_sizecache = 64034;
|
||||||
|
optional bool goproto_unkeyed = 64035;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.FieldOptions {
|
||||||
|
optional bool nullable = 65001;
|
||||||
|
optional bool embed = 65002;
|
||||||
|
optional string customtype = 65003;
|
||||||
|
optional string customname = 65004;
|
||||||
|
optional string jsontag = 65005;
|
||||||
|
optional string moretags = 65006;
|
||||||
|
optional string casttype = 65007;
|
||||||
|
optional string castkey = 65008;
|
||||||
|
optional string castvalue = 65009;
|
||||||
|
|
||||||
|
optional bool stdtime = 65010;
|
||||||
|
optional bool stdduration = 65011;
|
||||||
|
optional bool wktpointer = 65012;
|
||||||
|
|
||||||
|
optional string castrepeated = 65013;
|
||||||
|
}
|
201
contrib/prometheus-protobufs/LICENSE
Normal file
201
contrib/prometheus-protobufs/LICENSE
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
2
contrib/prometheus-protobufs/README
Normal file
2
contrib/prometheus-protobufs/README
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Files "prompb/remote.proto" and "prompb/types.proto" were downloaded from the Prometheus repository:
|
||||||
|
https://github.com/prometheus/prometheus/tree/main/prompb
|
88
contrib/prometheus-protobufs/prompb/remote.proto
Normal file
88
contrib/prometheus-protobufs/prompb/remote.proto
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// Copyright 2016 Prometheus Team
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
package prometheus;
|
||||||
|
|
||||||
|
option go_package = "prompb";
|
||||||
|
|
||||||
|
import "prompb/types.proto";
|
||||||
|
import "gogoproto/gogo.proto";
|
||||||
|
|
||||||
|
message WriteRequest {
|
||||||
|
repeated prometheus.TimeSeries timeseries = 1 [(gogoproto.nullable) = false];
|
||||||
|
// Cortex uses this field to determine the source of the write request.
|
||||||
|
// We reserve it to avoid any compatibility issues.
|
||||||
|
reserved 2;
|
||||||
|
repeated prometheus.MetricMetadata metadata = 3 [(gogoproto.nullable) = false];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadRequest represents a remote read request.
|
||||||
|
message ReadRequest {
|
||||||
|
repeated Query queries = 1;
|
||||||
|
|
||||||
|
enum ResponseType {
|
||||||
|
// Server will return a single ReadResponse message with matched series that includes list of raw samples.
|
||||||
|
// It's recommended to use streamed response types instead.
|
||||||
|
//
|
||||||
|
// Response headers:
|
||||||
|
// Content-Type: "application/x-protobuf"
|
||||||
|
// Content-Encoding: "snappy"
|
||||||
|
SAMPLES = 0;
|
||||||
|
// Server will stream a delimited ChunkedReadResponse message that
|
||||||
|
// contains XOR or HISTOGRAM(!) encoded chunks for a single series.
|
||||||
|
// Each message is following varint size and fixed size bigendian
|
||||||
|
// uint32 for CRC32 Castagnoli checksum.
|
||||||
|
//
|
||||||
|
// Response headers:
|
||||||
|
// Content-Type: "application/x-streamed-protobuf; proto=prometheus.ChunkedReadResponse"
|
||||||
|
// Content-Encoding: ""
|
||||||
|
STREAMED_XOR_CHUNKS = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// accepted_response_types allows negotiating the content type of the response.
|
||||||
|
//
|
||||||
|
// Response types are taken from the list in the FIFO order. If no response type in `accepted_response_types` is
|
||||||
|
// implemented by server, error is returned.
|
||||||
|
// For request that do not contain `accepted_response_types` field the SAMPLES response type will be used.
|
||||||
|
repeated ResponseType accepted_response_types = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadResponse is a response when response_type equals SAMPLES.
|
||||||
|
message ReadResponse {
|
||||||
|
// In same order as the request's queries.
|
||||||
|
repeated QueryResult results = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Query {
|
||||||
|
int64 start_timestamp_ms = 1;
|
||||||
|
int64 end_timestamp_ms = 2;
|
||||||
|
repeated prometheus.LabelMatcher matchers = 3;
|
||||||
|
prometheus.ReadHints hints = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message QueryResult {
|
||||||
|
// Samples within a time series must be ordered by time.
|
||||||
|
repeated prometheus.TimeSeries timeseries = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChunkedReadResponse is a response when response_type equals STREAMED_XOR_CHUNKS.
|
||||||
|
// We strictly stream full series after series, optionally split by time. This means that a single frame can contain
|
||||||
|
// partition of the single series, but once a new series is started to be streamed it means that no more chunks will
|
||||||
|
// be sent for previous one. Series are returned sorted in the same way TSDB block are internally.
|
||||||
|
message ChunkedReadResponse {
|
||||||
|
repeated prometheus.ChunkedSeries chunked_series = 1;
|
||||||
|
|
||||||
|
// query_index represents an index of the query from ReadRequest.queries these chunks relates to.
|
||||||
|
int64 query_index = 2;
|
||||||
|
}
|
187
contrib/prometheus-protobufs/prompb/types.proto
Normal file
187
contrib/prometheus-protobufs/prompb/types.proto
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
// Copyright 2017 Prometheus Team
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
package prometheus;
|
||||||
|
|
||||||
|
option go_package = "prompb";
|
||||||
|
|
||||||
|
import "gogoproto/gogo.proto";
|
||||||
|
|
||||||
|
message MetricMetadata {
|
||||||
|
enum MetricType {
|
||||||
|
UNKNOWN = 0;
|
||||||
|
COUNTER = 1;
|
||||||
|
GAUGE = 2;
|
||||||
|
HISTOGRAM = 3;
|
||||||
|
GAUGEHISTOGRAM = 4;
|
||||||
|
SUMMARY = 5;
|
||||||
|
INFO = 6;
|
||||||
|
STATESET = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Represents the metric type, these match the set from Prometheus.
|
||||||
|
// Refer to github.com/prometheus/common/model/metadata.go for details.
|
||||||
|
MetricType type = 1;
|
||||||
|
string metric_family_name = 2;
|
||||||
|
string help = 4;
|
||||||
|
string unit = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Sample {
|
||||||
|
double value = 1;
|
||||||
|
// timestamp is in ms format, see model/timestamp/timestamp.go for
|
||||||
|
// conversion from time.Time to Prometheus timestamp.
|
||||||
|
int64 timestamp = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Exemplar {
|
||||||
|
// Optional, can be empty.
|
||||||
|
repeated Label labels = 1 [(gogoproto.nullable) = false];
|
||||||
|
double value = 2;
|
||||||
|
// timestamp is in ms format, see model/timestamp/timestamp.go for
|
||||||
|
// conversion from time.Time to Prometheus timestamp.
|
||||||
|
int64 timestamp = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A native histogram, also known as a sparse histogram.
|
||||||
|
// Original design doc:
|
||||||
|
// https://docs.google.com/document/d/1cLNv3aufPZb3fNfaJgdaRBZsInZKKIHo9E6HinJVbpM/edit
|
||||||
|
// The appendix of this design doc also explains the concept of float
|
||||||
|
// histograms. This Histogram message can represent both, the usual
|
||||||
|
// integer histogram as well as a float histogram.
|
||||||
|
message Histogram {
|
||||||
|
enum ResetHint {
|
||||||
|
UNKNOWN = 0; // Need to test for a counter reset explicitly.
|
||||||
|
YES = 1; // This is the 1st histogram after a counter reset.
|
||||||
|
NO = 2; // There was no counter reset between this and the previous Histogram.
|
||||||
|
GAUGE = 3; // This is a gauge histogram where counter resets don't happen.
|
||||||
|
}
|
||||||
|
|
||||||
|
oneof count { // Count of observations in the histogram.
|
||||||
|
uint64 count_int = 1;
|
||||||
|
double count_float = 2;
|
||||||
|
}
|
||||||
|
double sum = 3; // Sum of observations in the histogram.
|
||||||
|
// The schema defines the bucket schema. Currently, valid numbers
|
||||||
|
// are -4 <= n <= 8. They are all for base-2 bucket schemas, where 1
|
||||||
|
// is a bucket boundary in each case, and then each power of two is
|
||||||
|
// divided into 2^n logarithmic buckets. Or in other words, each
|
||||||
|
// bucket boundary is the previous boundary times 2^(2^-n). In the
|
||||||
|
// future, more bucket schemas may be added using numbers < -4 or >
|
||||||
|
// 8.
|
||||||
|
sint32 schema = 4;
|
||||||
|
double zero_threshold = 5; // Breadth of the zero bucket.
|
||||||
|
oneof zero_count { // Count in zero bucket.
|
||||||
|
uint64 zero_count_int = 6;
|
||||||
|
double zero_count_float = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Negative Buckets.
|
||||||
|
repeated BucketSpan negative_spans = 8 [(gogoproto.nullable) = false];
|
||||||
|
// Use either "negative_deltas" or "negative_counts", the former for
|
||||||
|
// regular histograms with integer counts, the latter for float
|
||||||
|
// histograms.
|
||||||
|
repeated sint64 negative_deltas = 9; // Count delta of each bucket compared to previous one (or to zero for 1st bucket).
|
||||||
|
repeated double negative_counts = 10; // Absolute count of each bucket.
|
||||||
|
|
||||||
|
// Positive Buckets.
|
||||||
|
repeated BucketSpan positive_spans = 11 [(gogoproto.nullable) = false];
|
||||||
|
// Use either "positive_deltas" or "positive_counts", the former for
|
||||||
|
// regular histograms with integer counts, the latter for float
|
||||||
|
// histograms.
|
||||||
|
repeated sint64 positive_deltas = 12; // Count delta of each bucket compared to previous one (or to zero for 1st bucket).
|
||||||
|
repeated double positive_counts = 13; // Absolute count of each bucket.
|
||||||
|
|
||||||
|
ResetHint reset_hint = 14;
|
||||||
|
// timestamp is in ms format, see model/timestamp/timestamp.go for
|
||||||
|
// conversion from time.Time to Prometheus timestamp.
|
||||||
|
int64 timestamp = 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
// A BucketSpan defines a number of consecutive buckets with their
|
||||||
|
// offset. Logically, it would be more straightforward to include the
|
||||||
|
// bucket counts in the Span. However, the protobuf representation is
|
||||||
|
// more compact in the way the data is structured here (with all the
|
||||||
|
// buckets in a single array separate from the Spans).
|
||||||
|
message BucketSpan {
|
||||||
|
sint32 offset = 1; // Gap to previous span, or starting point for 1st span (which can be negative).
|
||||||
|
uint32 length = 2; // Length of consecutive buckets.
|
||||||
|
}
|
||||||
|
|
||||||
|
// TimeSeries represents samples and labels for a single time series.
|
||||||
|
message TimeSeries {
|
||||||
|
// For a timeseries to be valid, and for the samples and exemplars
|
||||||
|
// to be ingested by the remote system properly, the labels field is required.
|
||||||
|
repeated Label labels = 1 [(gogoproto.nullable) = false];
|
||||||
|
repeated Sample samples = 2 [(gogoproto.nullable) = false];
|
||||||
|
repeated Exemplar exemplars = 3 [(gogoproto.nullable) = false];
|
||||||
|
repeated Histogram histograms = 4 [(gogoproto.nullable) = false];
|
||||||
|
}
|
||||||
|
|
||||||
|
message Label {
|
||||||
|
string name = 1;
|
||||||
|
string value = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Labels {
|
||||||
|
repeated Label labels = 1 [(gogoproto.nullable) = false];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Matcher specifies a rule, which can match or set of labels or not.
|
||||||
|
message LabelMatcher {
|
||||||
|
enum Type {
|
||||||
|
EQ = 0;
|
||||||
|
NEQ = 1;
|
||||||
|
RE = 2;
|
||||||
|
NRE = 3;
|
||||||
|
}
|
||||||
|
Type type = 1;
|
||||||
|
string name = 2;
|
||||||
|
string value = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReadHints {
|
||||||
|
int64 step_ms = 1; // Query step size in milliseconds.
|
||||||
|
string func = 2; // String representation of surrounding function or aggregation.
|
||||||
|
int64 start_ms = 3; // Start time in milliseconds.
|
||||||
|
int64 end_ms = 4; // End time in milliseconds.
|
||||||
|
repeated string grouping = 5; // List of label names used in aggregation.
|
||||||
|
bool by = 6; // Indicate whether it is without or by.
|
||||||
|
int64 range_ms = 7; // Range vector selector range in milliseconds.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Chunk represents a TSDB chunk.
|
||||||
|
// Time range [min, max] is inclusive.
|
||||||
|
message Chunk {
|
||||||
|
int64 min_time_ms = 1;
|
||||||
|
int64 max_time_ms = 2;
|
||||||
|
|
||||||
|
// We require this to match chunkenc.Encoding.
|
||||||
|
enum Encoding {
|
||||||
|
UNKNOWN = 0;
|
||||||
|
XOR = 1;
|
||||||
|
HISTOGRAM = 2;
|
||||||
|
FLOAT_HISTOGRAM = 3;
|
||||||
|
}
|
||||||
|
Encoding type = 3;
|
||||||
|
bytes data = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChunkedSeries represents single, encoded time series.
|
||||||
|
message ChunkedSeries {
|
||||||
|
// Labels should be sorted.
|
||||||
|
repeated Label labels = 1 [(gogoproto.nullable) = false];
|
||||||
|
// Chunks will be in start time order and may overlap.
|
||||||
|
repeated Chunk chunks = 2 [(gogoproto.nullable) = false];
|
||||||
|
}
|
2
contrib/re2
vendored
2
contrib/re2
vendored
@ -1 +1 @@
|
|||||||
Subproject commit a807e8a3aac2cc33c77b7071efea54fcabe38e0c
|
Subproject commit 85dd7ad833a73095ecf3e3baea608ba051bbe2c7
|
@ -28,16 +28,20 @@ set(RE2_SOURCES
|
|||||||
add_library(_re2 ${RE2_SOURCES})
|
add_library(_re2 ${RE2_SOURCES})
|
||||||
target_include_directories(_re2 PUBLIC "${SRC_DIR}")
|
target_include_directories(_re2 PUBLIC "${SRC_DIR}")
|
||||||
target_link_libraries(_re2 PRIVATE
|
target_link_libraries(_re2 PRIVATE
|
||||||
|
absl::absl_check
|
||||||
|
absl::absl_log
|
||||||
absl::base
|
absl::base
|
||||||
absl::core_headers
|
absl::core_headers
|
||||||
absl::fixed_array
|
absl::fixed_array
|
||||||
|
absl::flags
|
||||||
absl::flat_hash_map
|
absl::flat_hash_map
|
||||||
absl::flat_hash_set
|
absl::flat_hash_set
|
||||||
|
absl::hash
|
||||||
absl::inlined_vector
|
absl::inlined_vector
|
||||||
absl::strings
|
|
||||||
absl::str_format
|
|
||||||
absl::synchronization
|
|
||||||
absl::optional
|
absl::optional
|
||||||
absl::span)
|
absl::span
|
||||||
|
absl::str_format
|
||||||
|
absl::strings
|
||||||
|
absl::synchronization)
|
||||||
|
|
||||||
add_library(ch_contrib::re2 ALIAS _re2)
|
add_library(ch_contrib::re2 ALIAS _re2)
|
||||||
|
2
contrib/rocksdb
vendored
2
contrib/rocksdb
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 3a0b80ca9d6eebb38fad7ea3f41dfc9db4f6a984
|
Subproject commit be366233921293bd07a84dc4ea6991858665f202
|
@ -1,24 +1,17 @@
|
|||||||
option (ENABLE_ROCKSDB "Enable rocksdb library" ${ENABLE_LIBRARIES})
|
option (ENABLE_ROCKSDB "Enable RocksDB" ${ENABLE_LIBRARIES})
|
||||||
|
|
||||||
if (NOT ENABLE_ROCKSDB)
|
if (NOT ENABLE_ROCKSDB)
|
||||||
message (STATUS "Not using rocksdb")
|
message (STATUS "Not using RocksDB")
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
## this file is extracted from `contrib/rocksdb/CMakeLists.txt`
|
# Always disable jemalloc for rocksdb by default because it introduces non-standard jemalloc APIs
|
||||||
set(ROCKSDB_SOURCE_DIR "${ClickHouse_SOURCE_DIR}/contrib/rocksdb")
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${ROCKSDB_SOURCE_DIR}/cmake/modules/")
|
|
||||||
|
|
||||||
set(PORTABLE ON)
|
|
||||||
## always disable jemalloc for rocksdb by default
|
|
||||||
## because it introduces non-standard jemalloc APIs
|
|
||||||
option(WITH_JEMALLOC "build with JeMalloc" OFF)
|
option(WITH_JEMALLOC "build with JeMalloc" OFF)
|
||||||
set(USE_SNAPPY OFF)
|
|
||||||
if (TARGET ch_contrib::snappy)
|
option(WITH_LIBURING "build with liburing" OFF) # TODO could try to enable this conditionally, depending on ClickHouse's ENABLE_LIBURING
|
||||||
set(USE_SNAPPY ON)
|
|
||||||
endif()
|
# ClickHouse cannot be compiled without snappy, lz4, zlib, zstd
|
||||||
option(WITH_SNAPPY "build with SNAPPY" ${USE_SNAPPY})
|
option(WITH_SNAPPY "build with SNAPPY" ON)
|
||||||
## lz4, zlib, zstd is enabled in ClickHouse by default
|
|
||||||
option(WITH_LZ4 "build with lz4" ON)
|
option(WITH_LZ4 "build with lz4" ON)
|
||||||
option(WITH_ZLIB "build with zlib" ON)
|
option(WITH_ZLIB "build with zlib" ON)
|
||||||
option(WITH_ZSTD "build with zstd" ON)
|
option(WITH_ZSTD "build with zstd" ON)
|
||||||
@ -26,78 +19,46 @@ option(WITH_ZSTD "build with zstd" ON)
|
|||||||
# third-party/folly is only validated to work on Linux and Windows for now.
|
# third-party/folly is only validated to work on Linux and Windows for now.
|
||||||
# So only turn it on there by default.
|
# So only turn it on there by default.
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux|Windows")
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux|Windows")
|
||||||
if(MSVC AND MSVC_VERSION LESS 1910)
|
option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" ON)
|
||||||
# Folly does not compile with MSVC older than VS2017
|
|
||||||
option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" OFF)
|
|
||||||
else()
|
|
||||||
option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" ON)
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" OFF)
|
option(WITH_FOLLY_DISTRIBUTED_MUTEX "build with folly::DistributedMutex" OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if( NOT DEFINED CMAKE_CXX_STANDARD )
|
if(WITH_SNAPPY)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
add_definitions(-DSNAPPY)
|
||||||
|
list(APPEND THIRDPARTY_LIBS ch_contrib::snappy)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(WITH_ZLIB)
|
||||||
option(WITH_XPRESS "build with windows built in compression" OFF)
|
add_definitions(-DZLIB)
|
||||||
include("${ROCKSDB_SOURCE_DIR}/thirdparty.inc")
|
list(APPEND THIRDPARTY_LIBS ch_contrib::zlib)
|
||||||
else()
|
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" AND NOT CMAKE_SYSTEM_NAME MATCHES "kFreeBSD")
|
|
||||||
# FreeBSD has jemalloc as default malloc
|
|
||||||
# but it does not have all the jemalloc files in include/...
|
|
||||||
set(WITH_JEMALLOC ON)
|
|
||||||
else()
|
|
||||||
if(WITH_JEMALLOC AND TARGET ch_contrib::jemalloc)
|
|
||||||
add_definitions(-DROCKSDB_JEMALLOC -DJEMALLOC_NO_DEMANGLE)
|
|
||||||
list(APPEND THIRDPARTY_LIBS ch_contrib::jemalloc)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_SNAPPY)
|
|
||||||
add_definitions(-DSNAPPY)
|
|
||||||
list(APPEND THIRDPARTY_LIBS ch_contrib::snappy)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_ZLIB)
|
|
||||||
add_definitions(-DZLIB)
|
|
||||||
list(APPEND THIRDPARTY_LIBS ch_contrib::zlib)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_LZ4)
|
|
||||||
add_definitions(-DLZ4)
|
|
||||||
list(APPEND THIRDPARTY_LIBS ch_contrib::lz4)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_ZSTD)
|
|
||||||
add_definitions(-DZSTD)
|
|
||||||
list(APPEND THIRDPARTY_LIBS ch_contrib::zstd)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
|
if(WITH_LZ4)
|
||||||
if(POWER9)
|
add_definitions(-DLZ4)
|
||||||
set(HAS_POWER9 1)
|
list(APPEND THIRDPARTY_LIBS ch_contrib::lz4)
|
||||||
set(HAS_ALTIVEC 1)
|
endif()
|
||||||
else()
|
|
||||||
set(HAS_POWER8 1)
|
|
||||||
set(HAS_ALTIVEC 1)
|
|
||||||
endif(POWER9)
|
|
||||||
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
|
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm64|ARM64")
|
if(WITH_ZSTD)
|
||||||
set(HAS_ARMV8_CRC 1)
|
add_definitions(-DZSTD)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function")
|
list(APPEND THIRDPARTY_LIBS ch_contrib::zstd)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function")
|
endif()
|
||||||
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm64|ARM64")
|
|
||||||
|
|
||||||
|
option(PORTABLE "build a portable binary" ON)
|
||||||
|
|
||||||
if(ENABLE_AVX2 AND ENABLE_PCLMULQDQ)
|
if(ENABLE_SSE42 AND ENABLE_PCLMULQDQ)
|
||||||
add_definitions(-DHAVE_SSE42)
|
add_definitions(-DHAVE_SSE42)
|
||||||
add_definitions(-DHAVE_PCLMUL)
|
add_definitions(-DHAVE_PCLMUL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|aarch64|AARCH64")
|
||||||
|
set (HAS_ARMV8_CRC 1)
|
||||||
|
# the original build descriptions set specific flags for ARM. These flags are already subsumed by ClickHouse's general
|
||||||
|
# ARM flags, see cmake/cpu_features.cmake
|
||||||
|
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function")
|
||||||
|
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crc+crypto -Wno-unused-function")
|
||||||
|
endif()
|
||||||
|
|
||||||
set (HAVE_THREAD_LOCAL 1)
|
set (HAVE_THREAD_LOCAL 1)
|
||||||
if(HAVE_THREAD_LOCAL)
|
if(HAVE_THREAD_LOCAL)
|
||||||
add_definitions(-DROCKSDB_SUPPORT_THREAD_LOCAL)
|
add_definitions(-DROCKSDB_SUPPORT_THREAD_LOCAL)
|
||||||
@ -107,8 +68,6 @@ if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
|||||||
add_definitions(-DOS_MACOSX)
|
add_definitions(-DOS_MACOSX)
|
||||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
add_definitions(-DOS_LINUX)
|
add_definitions(-DOS_LINUX)
|
||||||
elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
|
||||||
add_definitions(-DOS_SOLARIS)
|
|
||||||
elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
||||||
add_definitions(-DOS_FREEBSD)
|
add_definitions(-DOS_FREEBSD)
|
||||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
|
elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
|
||||||
@ -123,12 +82,10 @@ endif()
|
|||||||
|
|
||||||
if (OS_LINUX)
|
if (OS_LINUX)
|
||||||
add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT)
|
add_definitions(-DROCKSDB_SCHED_GETCPU_PRESENT)
|
||||||
add_definitions(-DROCKSDB_AUXV_SYSAUXV_PRESENT)
|
|
||||||
add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT)
|
add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT)
|
||||||
elseif (OS_FREEBSD)
|
|
||||||
add_definitions(-DROCKSDB_AUXV_SYSAUXV_PRESENT)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(ROCKSDB_SOURCE_DIR "${ClickHouse_SOURCE_DIR}/contrib/rocksdb")
|
||||||
|
|
||||||
include_directories(${ROCKSDB_SOURCE_DIR})
|
include_directories(${ROCKSDB_SOURCE_DIR})
|
||||||
include_directories("${ROCKSDB_SOURCE_DIR}/include")
|
include_directories("${ROCKSDB_SOURCE_DIR}/include")
|
||||||
@ -136,11 +93,11 @@ if(WITH_FOLLY_DISTRIBUTED_MUTEX)
|
|||||||
include_directories("${ROCKSDB_SOURCE_DIR}/third-party/folly")
|
include_directories("${ROCKSDB_SOURCE_DIR}/third-party/folly")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Main library source code
|
|
||||||
|
|
||||||
set(SOURCES
|
set(SOURCES
|
||||||
${ROCKSDB_SOURCE_DIR}/cache/cache.cc
|
${ROCKSDB_SOURCE_DIR}/cache/cache.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/cache/cache_entry_roles.cc
|
${ROCKSDB_SOURCE_DIR}/cache/cache_entry_roles.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/cache/cache_key.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/cache/cache_reservation_manager.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/cache/clock_cache.cc
|
${ROCKSDB_SOURCE_DIR}/cache/clock_cache.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/cache/lru_cache.cc
|
${ROCKSDB_SOURCE_DIR}/cache/lru_cache.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/cache/sharded_cache.cc
|
${ROCKSDB_SOURCE_DIR}/cache/sharded_cache.cc
|
||||||
@ -156,6 +113,7 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/db/blob/blob_log_format.cc
|
${ROCKSDB_SOURCE_DIR}/db/blob/blob_log_format.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/db/blob/blob_log_sequential_reader.cc
|
${ROCKSDB_SOURCE_DIR}/db/blob/blob_log_sequential_reader.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/db/blob/blob_log_writer.cc
|
${ROCKSDB_SOURCE_DIR}/db/blob/blob_log_writer.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/db/blob/prefetch_buffer_collection.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/db/builder.cc
|
${ROCKSDB_SOURCE_DIR}/db/builder.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/db/c.cc
|
${ROCKSDB_SOURCE_DIR}/db/c.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/db/column_family.cc
|
${ROCKSDB_SOURCE_DIR}/db/column_family.cc
|
||||||
@ -229,6 +187,7 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/env/file_system_tracer.cc
|
${ROCKSDB_SOURCE_DIR}/env/file_system_tracer.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/env/fs_remap.cc
|
${ROCKSDB_SOURCE_DIR}/env/fs_remap.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/env/mock_env.cc
|
${ROCKSDB_SOURCE_DIR}/env/mock_env.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/env/unique_id_gen.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/file/delete_scheduler.cc
|
${ROCKSDB_SOURCE_DIR}/file/delete_scheduler.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/file/file_prefetch_buffer.cc
|
${ROCKSDB_SOURCE_DIR}/file/file_prefetch_buffer.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/file/file_util.cc
|
${ROCKSDB_SOURCE_DIR}/file/file_util.cc
|
||||||
@ -247,6 +206,7 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/memory/concurrent_arena.cc
|
${ROCKSDB_SOURCE_DIR}/memory/concurrent_arena.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/memory/jemalloc_nodump_allocator.cc
|
${ROCKSDB_SOURCE_DIR}/memory/jemalloc_nodump_allocator.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/memory/memkind_kmem_allocator.cc
|
${ROCKSDB_SOURCE_DIR}/memory/memkind_kmem_allocator.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/memory/memory_allocator.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/memtable/alloc_tracker.cc
|
${ROCKSDB_SOURCE_DIR}/memtable/alloc_tracker.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/memtable/hash_linklist_rep.cc
|
${ROCKSDB_SOURCE_DIR}/memtable/hash_linklist_rep.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/memtable/hash_skiplist_rep.cc
|
${ROCKSDB_SOURCE_DIR}/memtable/hash_skiplist_rep.cc
|
||||||
@ -322,6 +282,7 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/table/table_factory.cc
|
${ROCKSDB_SOURCE_DIR}/table/table_factory.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/table/table_properties.cc
|
${ROCKSDB_SOURCE_DIR}/table/table_properties.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/table/two_level_iterator.cc
|
${ROCKSDB_SOURCE_DIR}/table/two_level_iterator.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/table/unique_id.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/test_util/sync_point.cc
|
${ROCKSDB_SOURCE_DIR}/test_util/sync_point.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/test_util/sync_point_impl.cc
|
${ROCKSDB_SOURCE_DIR}/test_util/sync_point_impl.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/test_util/testutil.cc
|
${ROCKSDB_SOURCE_DIR}/test_util/testutil.cc
|
||||||
@ -333,9 +294,12 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/tools/ldb_tool.cc
|
${ROCKSDB_SOURCE_DIR}/tools/ldb_tool.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/tools/sst_dump_tool.cc
|
${ROCKSDB_SOURCE_DIR}/tools/sst_dump_tool.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/tools/trace_analyzer_tool.cc
|
${ROCKSDB_SOURCE_DIR}/tools/trace_analyzer_tool.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/trace_replay/trace_replay.cc
|
|
||||||
${ROCKSDB_SOURCE_DIR}/trace_replay/block_cache_tracer.cc
|
${ROCKSDB_SOURCE_DIR}/trace_replay/block_cache_tracer.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/trace_replay/io_tracer.cc
|
${ROCKSDB_SOURCE_DIR}/trace_replay/io_tracer.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/trace_replay/trace_record_handler.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/trace_replay/trace_record_result.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/trace_replay/trace_record.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/trace_replay/trace_replay.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/util/coding.cc
|
${ROCKSDB_SOURCE_DIR}/util/coding.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/util/compaction_job_stats_impl.cc
|
${ROCKSDB_SOURCE_DIR}/util/compaction_job_stats_impl.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/util/comparator.cc
|
${ROCKSDB_SOURCE_DIR}/util/comparator.cc
|
||||||
@ -347,6 +311,7 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/util/murmurhash.cc
|
${ROCKSDB_SOURCE_DIR}/util/murmurhash.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/util/random.cc
|
${ROCKSDB_SOURCE_DIR}/util/random.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/util/rate_limiter.cc
|
${ROCKSDB_SOURCE_DIR}/util/rate_limiter.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/util/regex.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/util/ribbon_config.cc
|
${ROCKSDB_SOURCE_DIR}/util/ribbon_config.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/util/slice.cc
|
${ROCKSDB_SOURCE_DIR}/util/slice.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/util/file_checksum_helper.cc
|
${ROCKSDB_SOURCE_DIR}/util/file_checksum_helper.cc
|
||||||
@ -362,18 +327,23 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/utilities/blob_db/blob_db_impl_filesnapshot.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/blob_db/blob_db_impl_filesnapshot.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/blob_db/blob_dump_tool.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/blob_db/blob_dump_tool.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/blob_db/blob_file.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/blob_db/blob_file.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/utilities/cache_dump_load.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/utilities/cache_dump_load_impl.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/cassandra/cassandra_compaction_filter.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/cassandra/cassandra_compaction_filter.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/cassandra/format.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/cassandra/format.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/cassandra/merge_operator.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/cassandra/merge_operator.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/checkpoint/checkpoint_impl.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/checkpoint/checkpoint_impl.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/utilities/compaction_filters.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/debug.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/debug.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/env_mirror.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/env_mirror.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/env_timed.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/env_timed.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/fault_injection_env.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/fault_injection_env.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/fault_injection_fs.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/fault_injection_fs.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/utilities/fault_injection_secondary_cache.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/leveldb_options/leveldb_options.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/leveldb_options/leveldb_options.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/memory/memory_util.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/memory/memory_util.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/utilities/merge_operators.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/merge_operators/bytesxor.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/merge_operators/bytesxor.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/merge_operators/max.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/merge_operators/max.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/merge_operators/put.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/merge_operators/put.cc
|
||||||
@ -393,6 +363,7 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/utilities/simulator_cache/sim_cache.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/simulator_cache/sim_cache.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/table_properties_collectors/compact_on_deletion_collector.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/table_properties_collectors/compact_on_deletion_collector.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/trace/file_trace_reader_writer.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/trace/file_trace_reader_writer.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/utilities/trace/replayer_impl.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/lock_manager.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/lock_manager.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/point/point_lock_tracker.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/point/point_lock_tracker.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/point/point_lock_manager.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/point/point_lock_manager.cc
|
||||||
@ -411,6 +382,7 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/write_unprepared_txn.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/write_unprepared_txn.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/write_unprepared_txn_db.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/write_unprepared_txn_db.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/ttl/db_ttl_impl.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/ttl/db_ttl_impl.cc
|
||||||
|
${ROCKSDB_SOURCE_DIR}/utilities/wal_filter.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/write_batch_with_index/write_batch_with_index.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/write_batch_with_index/write_batch_with_index.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/write_batch_with_index/write_batch_with_index_internal.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/write_batch_with_index/write_batch_with_index_internal.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc
|
||||||
@ -425,7 +397,7 @@ set(SOURCES
|
|||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc
|
||||||
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/range/range_tree/lib/util/memarena.cc
|
${ROCKSDB_SOURCE_DIR}/utilities/transactions/lock/range/range_tree/lib/util/memarena.cc
|
||||||
rocksdb_build_version.cc)
|
build_version.cc) # generated by hand
|
||||||
|
|
||||||
if(ENABLE_SSE42 AND ENABLE_PCLMULQDQ)
|
if(ENABLE_SSE42 AND ENABLE_PCLMULQDQ)
|
||||||
set_source_files_properties(
|
set_source_files_properties(
|
||||||
@ -462,5 +434,6 @@ endif()
|
|||||||
add_library(_rocksdb ${SOURCES})
|
add_library(_rocksdb ${SOURCES})
|
||||||
add_library(ch_contrib::rocksdb ALIAS _rocksdb)
|
add_library(ch_contrib::rocksdb ALIAS _rocksdb)
|
||||||
target_link_libraries(_rocksdb PRIVATE ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
|
target_link_libraries(_rocksdb PRIVATE ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
|
||||||
|
|
||||||
# SYSTEM is required to overcome some issues
|
# SYSTEM is required to overcome some issues
|
||||||
target_include_directories(_rocksdb SYSTEM BEFORE INTERFACE "${ROCKSDB_SOURCE_DIR}/include")
|
target_include_directories(_rocksdb SYSTEM BEFORE INTERFACE "${ROCKSDB_SOURCE_DIR}/include")
|
||||||
|
2
contrib/s2geometry
vendored
2
contrib/s2geometry
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 0547c38371777a1c1c8be263a6f05c3bf71bb05b
|
Subproject commit 6522a40338d58752c2a4227a3fc2bc4107c73e43
|
@ -1,7 +1,7 @@
|
|||||||
option(ENABLE_S2_GEOMETRY "Enable S2 geometry library" ${ENABLE_LIBRARIES})
|
option(ENABLE_S2_GEOMETRY "Enable S2 Geometry" ${ENABLE_LIBRARIES})
|
||||||
|
|
||||||
if (NOT ENABLE_S2_GEOMETRY)
|
if (NOT ENABLE_S2_GEOMETRY)
|
||||||
message(STATUS "Not using S2 geometry")
|
message(STATUS "Not using S2 Geometry")
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -38,6 +38,7 @@ set(S2_SRCS
|
|||||||
"${S2_SOURCE_DIR}/s2/s2cell_index.cc"
|
"${S2_SOURCE_DIR}/s2/s2cell_index.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2cell_union.cc"
|
"${S2_SOURCE_DIR}/s2/s2cell_union.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2centroids.cc"
|
"${S2_SOURCE_DIR}/s2/s2centroids.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2chain_interpolation_query.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2closest_cell_query.cc"
|
"${S2_SOURCE_DIR}/s2/s2closest_cell_query.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2closest_edge_query.cc"
|
"${S2_SOURCE_DIR}/s2/s2closest_edge_query.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2closest_point_query.cc"
|
"${S2_SOURCE_DIR}/s2/s2closest_point_query.cc"
|
||||||
@ -46,6 +47,7 @@ set(S2_SRCS
|
|||||||
"${S2_SOURCE_DIR}/s2/s2coords.cc"
|
"${S2_SOURCE_DIR}/s2/s2coords.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2crossing_edge_query.cc"
|
"${S2_SOURCE_DIR}/s2/s2crossing_edge_query.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2debug.cc"
|
"${S2_SOURCE_DIR}/s2/s2debug.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2density_tree.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2earth.cc"
|
"${S2_SOURCE_DIR}/s2/s2earth.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2edge_clipping.cc"
|
"${S2_SOURCE_DIR}/s2/s2edge_clipping.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2edge_crosser.cc"
|
"${S2_SOURCE_DIR}/s2/s2edge_crosser.cc"
|
||||||
@ -53,8 +55,10 @@ set(S2_SRCS
|
|||||||
"${S2_SOURCE_DIR}/s2/s2edge_distances.cc"
|
"${S2_SOURCE_DIR}/s2/s2edge_distances.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2edge_tessellator.cc"
|
"${S2_SOURCE_DIR}/s2/s2edge_tessellator.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2error.cc"
|
"${S2_SOURCE_DIR}/s2/s2error.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2fractal.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2furthest_edge_query.cc"
|
"${S2_SOURCE_DIR}/s2/s2furthest_edge_query.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2hausdorff_distance_query.cc"
|
"${S2_SOURCE_DIR}/s2/s2hausdorff_distance_query.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2index_cell_data.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2latlng.cc"
|
"${S2_SOURCE_DIR}/s2/s2latlng.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2latlng_rect.cc"
|
"${S2_SOURCE_DIR}/s2/s2latlng_rect.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2latlng_rect_bounder.cc"
|
"${S2_SOURCE_DIR}/s2/s2latlng_rect_bounder.cc"
|
||||||
@ -63,10 +67,10 @@ set(S2_SRCS
|
|||||||
"${S2_SOURCE_DIR}/s2/s2lax_polyline_shape.cc"
|
"${S2_SOURCE_DIR}/s2/s2lax_polyline_shape.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2loop.cc"
|
"${S2_SOURCE_DIR}/s2/s2loop.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2loop_measures.cc"
|
"${S2_SOURCE_DIR}/s2/s2loop_measures.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2max_distance_targets.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2measures.cc"
|
"${S2_SOURCE_DIR}/s2/s2measures.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2memory_tracker.cc"
|
"${S2_SOURCE_DIR}/s2/s2memory_tracker.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2metrics.cc"
|
"${S2_SOURCE_DIR}/s2/s2metrics.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2max_distance_targets.cc"
|
|
||||||
"${S2_SOURCE_DIR}/s2/s2min_distance_targets.cc"
|
"${S2_SOURCE_DIR}/s2/s2min_distance_targets.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2padded_cell.cc"
|
"${S2_SOURCE_DIR}/s2/s2padded_cell.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2point_compression.cc"
|
"${S2_SOURCE_DIR}/s2/s2point_compression.cc"
|
||||||
@ -80,10 +84,11 @@ set(S2_SRCS
|
|||||||
"${S2_SOURCE_DIR}/s2/s2predicates.cc"
|
"${S2_SOURCE_DIR}/s2/s2predicates.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2projections.cc"
|
"${S2_SOURCE_DIR}/s2/s2projections.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2r2rect.cc"
|
"${S2_SOURCE_DIR}/s2/s2r2rect.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2region.cc"
|
"${S2_SOURCE_DIR}/s2/s2random.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2region_term_indexer.cc"
|
|
||||||
"${S2_SOURCE_DIR}/s2/s2region_coverer.cc"
|
"${S2_SOURCE_DIR}/s2/s2region_coverer.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2region_intersection.cc"
|
"${S2_SOURCE_DIR}/s2/s2region_intersection.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2region_sharder.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2region_term_indexer.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2region_union.cc"
|
"${S2_SOURCE_DIR}/s2/s2region_union.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2shape_index.cc"
|
"${S2_SOURCE_DIR}/s2/s2shape_index.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2shape_index_buffered_region.cc"
|
"${S2_SOURCE_DIR}/s2/s2shape_index_buffered_region.cc"
|
||||||
@ -94,9 +99,12 @@ set(S2_SRCS
|
|||||||
"${S2_SOURCE_DIR}/s2/s2shapeutil_coding.cc"
|
"${S2_SOURCE_DIR}/s2/s2shapeutil_coding.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2shapeutil_contains_brute_force.cc"
|
"${S2_SOURCE_DIR}/s2/s2shapeutil_contains_brute_force.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2shapeutil_conversion.cc"
|
"${S2_SOURCE_DIR}/s2/s2shapeutil_conversion.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2shapeutil_count_vertices.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2shapeutil_edge_iterator.cc"
|
"${S2_SOURCE_DIR}/s2/s2shapeutil_edge_iterator.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2shapeutil_edge_wrap.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2shapeutil_get_reference_point.cc"
|
"${S2_SOURCE_DIR}/s2/s2shapeutil_get_reference_point.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2shapeutil_visit_crossing_edge_pairs.cc"
|
"${S2_SOURCE_DIR}/s2/s2shapeutil_visit_crossing_edge_pairs.cc"
|
||||||
|
"${S2_SOURCE_DIR}/s2/s2testing.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2text_format.cc"
|
"${S2_SOURCE_DIR}/s2/s2text_format.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2wedge_relations.cc"
|
"${S2_SOURCE_DIR}/s2/s2wedge_relations.cc"
|
||||||
"${S2_SOURCE_DIR}/s2/s2winding_operation.cc"
|
"${S2_SOURCE_DIR}/s2/s2winding_operation.cc"
|
||||||
@ -140,6 +148,7 @@ target_link_libraries(_s2 PRIVATE
|
|||||||
absl::strings
|
absl::strings
|
||||||
absl::type_traits
|
absl::type_traits
|
||||||
absl::utility
|
absl::utility
|
||||||
|
absl::vlog_is_on
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(_s2 SYSTEM BEFORE PUBLIC "${S2_SOURCE_DIR}/")
|
target_include_directories(_s2 SYSTEM BEFORE PUBLIC "${S2_SOURCE_DIR}/")
|
||||||
|
2
contrib/sysroot
vendored
2
contrib/sysroot
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 39c4713334f9f156dbf508f548d510d9129a657c
|
Subproject commit cc385041b226d1fc28ead14dbab5d40a5f821dd8
|
2
contrib/vectorscan
vendored
2
contrib/vectorscan
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 38431d111781843741a781a57a6381a527d900a4
|
Subproject commit d29730e1cb9daaa66bda63426cdce83505d2c809
|
@ -1,11 +1,8 @@
|
|||||||
# We use vectorscan, a portable and API/ABI-compatible drop-in replacement for hyperscan.
|
# Vectorscan is drop-in replacement for Hyperscan.
|
||||||
|
|
||||||
if ((ARCH_AMD64 AND NOT NO_SSE3_OR_HIGHER) OR ARCH_AARCH64)
|
if ((ARCH_AMD64 AND NOT NO_SSE3_OR_HIGHER) OR ARCH_AARCH64)
|
||||||
option (ENABLE_VECTORSCAN "Enable vectorscan library" ${ENABLE_LIBRARIES})
|
option (ENABLE_VECTORSCAN "Enable vectorscan" ${ENABLE_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# TODO PPC should generally work but needs manual generation of ppc/config.h file on a PPC machine
|
|
||||||
|
|
||||||
if (NOT ENABLE_VECTORSCAN)
|
if (NOT ENABLE_VECTORSCAN)
|
||||||
message (STATUS "Not using vectorscan")
|
message (STATUS "Not using vectorscan")
|
||||||
return()
|
return()
|
||||||
@ -272,34 +269,24 @@ if (ARCH_AARCH64)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# TODO
|
|
||||||
# if (ARCH_PPC64LE)
|
|
||||||
# list(APPEND SRCS
|
|
||||||
# "${LIBRARY_DIR}/src/util/supervector/arch/ppc64el/impl.cpp"
|
|
||||||
# )
|
|
||||||
# endif()
|
|
||||||
|
|
||||||
add_library (_vectorscan ${SRCS})
|
add_library (_vectorscan ${SRCS})
|
||||||
|
|
||||||
target_compile_options (_vectorscan PRIVATE
|
|
||||||
-fno-sanitize=undefined # assume the library takes care of itself
|
|
||||||
-O2 -fno-strict-aliasing -fno-omit-frame-pointer -fvisibility=hidden # options from original build system
|
|
||||||
)
|
|
||||||
# library has too much debug information
|
# library has too much debug information
|
||||||
if (OMIT_HEAVY_DEBUG_SYMBOLS)
|
if (OMIT_HEAVY_DEBUG_SYMBOLS)
|
||||||
target_compile_options (_vectorscan PRIVATE -g0)
|
target_compile_options (_vectorscan PRIVATE -g0)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Include version header manually generated by running the original build system
|
target_include_directories (_vectorscan SYSTEM PUBLIC "${LIBRARY_DIR}/src")
|
||||||
target_include_directories (_vectorscan SYSTEM PRIVATE common)
|
|
||||||
|
# Makes the version header visible. It was generated by running the native build system manually.
|
||||||
|
# Please update whenever you update vectorscan.
|
||||||
|
target_include_directories (_vectorscan SYSTEM PUBLIC common)
|
||||||
|
|
||||||
# vectorscan inherited some patched in-source versions of boost headers to fix a bug in
|
# vectorscan inherited some patched in-source versions of boost headers to fix a bug in
|
||||||
# boost 1.69. This bug has been solved long ago but vectorscan's source code still
|
# boost 1.69. This bug has been solved long ago but vectorscan's source code still
|
||||||
# points to the patched versions, so include it here.
|
# points to the patched versions, so include it here.
|
||||||
target_include_directories (_vectorscan SYSTEM PRIVATE "${LIBRARY_DIR}/include")
|
target_include_directories (_vectorscan SYSTEM PRIVATE "${LIBRARY_DIR}/include")
|
||||||
|
|
||||||
target_include_directories (_vectorscan SYSTEM PUBLIC "${LIBRARY_DIR}/src")
|
|
||||||
|
|
||||||
# Include platform-specific config header generated by manually running the original build system
|
# Include platform-specific config header generated by manually running the original build system
|
||||||
# Please regenerate these files if you update vectorscan.
|
# Please regenerate these files if you update vectorscan.
|
||||||
|
|
||||||
|
@ -32,8 +32,12 @@
|
|||||||
/**
|
/**
|
||||||
* A version string to identify this release of Hyperscan.
|
* A version string to identify this release of Hyperscan.
|
||||||
*/
|
*/
|
||||||
#define HS_VERSION_STRING "5.4.7 2022-06-20"
|
#define HS_VERSION_STRING "5.4.11 2024-07-04"
|
||||||
|
|
||||||
#define HS_VERSION_32BIT ((5 << 24) | (1 << 16) | (7 << 8) | 0)
|
#define HS_VERSION_32BIT ((5 << 24) | (1 << 16) | (7 << 8) | 0)
|
||||||
|
|
||||||
|
#define HS_MAJOR 5
|
||||||
|
#define HS_MINOR 4
|
||||||
|
#define HS_PATCH 11
|
||||||
|
|
||||||
#endif /* HS_VERSION_H_C6428FAF8E3713 */
|
#endif /* HS_VERSION_H_C6428FAF8E3713 */
|
||||||
|
@ -41,8 +41,7 @@
|
|||||||
"docker/test/stateless": {
|
"docker/test/stateless": {
|
||||||
"name": "clickhouse/stateless-test",
|
"name": "clickhouse/stateless-test",
|
||||||
"dependent": [
|
"dependent": [
|
||||||
"docker/test/stateful",
|
"docker/test/stateful"
|
||||||
"docker/test/unit"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"docker/test/stateful": {
|
"docker/test/stateful": {
|
||||||
@ -122,15 +121,16 @@
|
|||||||
"docker/test/base": {
|
"docker/test/base": {
|
||||||
"name": "clickhouse/test-base",
|
"name": "clickhouse/test-base",
|
||||||
"dependent": [
|
"dependent": [
|
||||||
|
"docker/test/clickbench",
|
||||||
"docker/test/fuzzer",
|
"docker/test/fuzzer",
|
||||||
"docker/test/libfuzzer",
|
|
||||||
"docker/test/integration/base",
|
"docker/test/integration/base",
|
||||||
"docker/test/keeper-jepsen",
|
"docker/test/keeper-jepsen",
|
||||||
|
"docker/test/libfuzzer",
|
||||||
"docker/test/server-jepsen",
|
"docker/test/server-jepsen",
|
||||||
"docker/test/sqllogic",
|
"docker/test/sqllogic",
|
||||||
"docker/test/sqltest",
|
"docker/test/sqltest",
|
||||||
"docker/test/clickbench",
|
"docker/test/stateless",
|
||||||
"docker/test/stateless"
|
"docker/test/unit"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"docker/test/integration/kerberized_hadoop": {
|
"docker/test/integration/kerberized_hadoop": {
|
||||||
|
@ -34,7 +34,7 @@ RUN arch=${TARGETARCH:-amd64} \
|
|||||||
# lts / testing / prestable / etc
|
# lts / testing / prestable / etc
|
||||||
ARG REPO_CHANNEL="stable"
|
ARG REPO_CHANNEL="stable"
|
||||||
ARG REPOSITORY="https://packages.clickhouse.com/tgz/${REPO_CHANNEL}"
|
ARG REPOSITORY="https://packages.clickhouse.com/tgz/${REPO_CHANNEL}"
|
||||||
ARG VERSION="24.5.1.1763"
|
ARG VERSION="24.6.2.17"
|
||||||
ARG PACKAGES="clickhouse-keeper"
|
ARG PACKAGES="clickhouse-keeper"
|
||||||
ARG DIRECT_DOWNLOAD_URLS=""
|
ARG DIRECT_DOWNLOAD_URLS=""
|
||||||
|
|
||||||
|
@ -111,6 +111,7 @@ fi
|
|||||||
mv ./programs/clickhouse* /output || mv ./programs/*_fuzzer /output
|
mv ./programs/clickhouse* /output || mv ./programs/*_fuzzer /output
|
||||||
[ -x ./programs/self-extracting/clickhouse ] && mv ./programs/self-extracting/clickhouse /output
|
[ -x ./programs/self-extracting/clickhouse ] && mv ./programs/self-extracting/clickhouse /output
|
||||||
[ -x ./programs/self-extracting/clickhouse-stripped ] && mv ./programs/self-extracting/clickhouse-stripped /output
|
[ -x ./programs/self-extracting/clickhouse-stripped ] && mv ./programs/self-extracting/clickhouse-stripped /output
|
||||||
|
[ -x ./programs/self-extracting/clickhouse-keeper ] && mv ./programs/self-extracting/clickhouse-keeper /output
|
||||||
mv ./src/unit_tests_dbms /output ||: # may not exist for some binary builds
|
mv ./src/unit_tests_dbms /output ||: # may not exist for some binary builds
|
||||||
mv ./programs/*.dict ./programs/*.options ./programs/*_seed_corpus.zip /output ||: # libFuzzer oss-fuzz compatible infrastructure
|
mv ./programs/*.dict ./programs/*.options ./programs/*_seed_corpus.zip /output ||: # libFuzzer oss-fuzz compatible infrastructure
|
||||||
|
|
||||||
|
@ -276,10 +276,7 @@ def parse_env_variables(
|
|||||||
if is_release_build(debug_build, package_type, sanitizer, coverage):
|
if is_release_build(debug_build, package_type, sanitizer, coverage):
|
||||||
cmake_flags.append("-DSPLIT_DEBUG_SYMBOLS=ON")
|
cmake_flags.append("-DSPLIT_DEBUG_SYMBOLS=ON")
|
||||||
result.append("WITH_PERFORMANCE=1")
|
result.append("WITH_PERFORMANCE=1")
|
||||||
if is_cross_arm:
|
cmake_flags.append("-DBUILD_STANDALONE_KEEPER=1")
|
||||||
cmake_flags.append("-DBUILD_STANDALONE_KEEPER=1")
|
|
||||||
else:
|
|
||||||
result.append("BUILD_MUSL_KEEPER=1")
|
|
||||||
elif package_type == "fuzzers":
|
elif package_type == "fuzzers":
|
||||||
cmake_flags.append("-DENABLE_FUZZING=1")
|
cmake_flags.append("-DENABLE_FUZZING=1")
|
||||||
cmake_flags.append("-DENABLE_PROTOBUF=1")
|
cmake_flags.append("-DENABLE_PROTOBUF=1")
|
||||||
|
47
docker/reqgenerator.py
Normal file
47
docker/reqgenerator.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# To run this script you must install docker and piddeptree python package
|
||||||
|
#
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def build_docker_deps(image_name, imagedir):
|
||||||
|
cmd = f"""docker run --entrypoint "/bin/bash" {image_name} -c "pip install pipdeptree 2>/dev/null 1>/dev/null && pipdeptree --freeze --warn silence | sed 's/ \+//g' | sort | uniq" > {imagedir}/requirements.txt"""
|
||||||
|
subprocess.check_call(cmd, shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
def check_docker_file_install_with_pip(filepath):
|
||||||
|
image_name = None
|
||||||
|
with open(filepath, "r") as f:
|
||||||
|
for line in f:
|
||||||
|
if "docker build" in line:
|
||||||
|
arr = line.split(" ")
|
||||||
|
if len(arr) > 4:
|
||||||
|
image_name = arr[4]
|
||||||
|
if "pip3 install" in line or "pip install" in line:
|
||||||
|
return image_name, True
|
||||||
|
return image_name, False
|
||||||
|
|
||||||
|
|
||||||
|
def process_affected_images(images_dir):
|
||||||
|
for root, _dirs, files in os.walk(images_dir):
|
||||||
|
for f in files:
|
||||||
|
if f == "Dockerfile":
|
||||||
|
docker_file_path = os.path.join(root, f)
|
||||||
|
print("Checking image on path", docker_file_path)
|
||||||
|
image_name, has_pip = check_docker_file_install_with_pip(
|
||||||
|
docker_file_path
|
||||||
|
)
|
||||||
|
if has_pip:
|
||||||
|
print("Find pip in", image_name)
|
||||||
|
try:
|
||||||
|
build_docker_deps(image_name, root)
|
||||||
|
except Exception as ex:
|
||||||
|
print(ex)
|
||||||
|
else:
|
||||||
|
print("Pip not found in", docker_file_path)
|
||||||
|
|
||||||
|
|
||||||
|
process_affected_images(sys.argv[1])
|
@ -32,7 +32,7 @@ RUN arch=${TARGETARCH:-amd64} \
|
|||||||
# lts / testing / prestable / etc
|
# lts / testing / prestable / etc
|
||||||
ARG REPO_CHANNEL="stable"
|
ARG REPO_CHANNEL="stable"
|
||||||
ARG REPOSITORY="https://packages.clickhouse.com/tgz/${REPO_CHANNEL}"
|
ARG REPOSITORY="https://packages.clickhouse.com/tgz/${REPO_CHANNEL}"
|
||||||
ARG VERSION="24.5.1.1763"
|
ARG VERSION="24.6.2.17"
|
||||||
ARG PACKAGES="clickhouse-client clickhouse-server clickhouse-common-static"
|
ARG PACKAGES="clickhouse-client clickhouse-server clickhouse-common-static"
|
||||||
ARG DIRECT_DOWNLOAD_URLS=""
|
ARG DIRECT_DOWNLOAD_URLS=""
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ RUN sed -i "s|http://archive.ubuntu.com|${apt_archive}|g" /etc/apt/sources.list
|
|||||||
|
|
||||||
ARG REPO_CHANNEL="stable"
|
ARG REPO_CHANNEL="stable"
|
||||||
ARG REPOSITORY="deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb ${REPO_CHANNEL} main"
|
ARG REPOSITORY="deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb ${REPO_CHANNEL} main"
|
||||||
ARG VERSION="24.5.1.1763"
|
ARG VERSION="24.6.2.17"
|
||||||
ARG PACKAGES="clickhouse-client clickhouse-server clickhouse-common-static"
|
ARG PACKAGES="clickhouse-client clickhouse-server clickhouse-common-static"
|
||||||
|
|
||||||
#docker-official-library:off
|
#docker-official-library:off
|
||||||
|
@ -19,10 +19,7 @@ RUN apt-get update \
|
|||||||
odbcinst \
|
odbcinst \
|
||||||
psmisc \
|
psmisc \
|
||||||
python3 \
|
python3 \
|
||||||
python3-lxml \
|
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-requests \
|
|
||||||
python3-termcolor \
|
|
||||||
unixodbc \
|
unixodbc \
|
||||||
pv \
|
pv \
|
||||||
jq \
|
jq \
|
||||||
@ -31,7 +28,8 @@ RUN apt-get update \
|
|||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf /tmp/*
|
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf /tmp/*
|
||||||
|
|
||||||
RUN pip3 install numpy==1.26.3 scipy==1.12.0 pandas==1.5.3 Jinja2==3.1.3
|
COPY requirements.txt /
|
||||||
|
RUN pip3 install --no-cache-dir -r /requirements.txt
|
||||||
|
|
||||||
# This symlink is required by gcc to find the lld linker
|
# This symlink is required by gcc to find the lld linker
|
||||||
RUN ln -s /usr/bin/lld-${LLVM_VERSION} /usr/bin/ld.lld
|
RUN ln -s /usr/bin/lld-${LLVM_VERSION} /usr/bin/ld.lld
|
||||||
@ -39,6 +37,10 @@ RUN ln -s /usr/bin/lld-${LLVM_VERSION} /usr/bin/ld.lld
|
|||||||
# https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/-/commit/992e52c0b156a5ba9c6a8a54f8c4857ddd3d371d
|
# https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/-/commit/992e52c0b156a5ba9c6a8a54f8c4857ddd3d371d
|
||||||
RUN sed -i '/_IMPORT_CHECK_FILES_FOR_\(mlir-\|llvm-bolt\|merge-fdata\|MLIR\)/ {s|^|#|}' /usr/lib/llvm-${LLVM_VERSION}/lib/cmake/llvm/LLVMExports-*.cmake
|
RUN sed -i '/_IMPORT_CHECK_FILES_FOR_\(mlir-\|llvm-bolt\|merge-fdata\|MLIR\)/ {s|^|#|}' /usr/lib/llvm-${LLVM_VERSION}/lib/cmake/llvm/LLVMExports-*.cmake
|
||||||
|
|
||||||
|
# LLVM changes paths for compiler-rt libraries. For some reason clang-18.1.8 cannot catch up libraries from default install path.
|
||||||
|
# It's very dirty workaround, better to build compiler and LLVM ourself and use it. Details: https://github.com/llvm/llvm-project/issues/95792
|
||||||
|
RUN test ! -d /usr/lib/llvm-18/lib/clang/18/lib/x86_64-pc-linux-gnu || ln -s /usr/lib/llvm-18/lib/clang/18/lib/x86_64-pc-linux-gnu /usr/lib/llvm-18/lib/clang/18/lib/x86_64-unknown-linux-gnu
|
||||||
|
|
||||||
ARG CCACHE_VERSION=4.6.1
|
ARG CCACHE_VERSION=4.6.1
|
||||||
RUN mkdir /tmp/ccache \
|
RUN mkdir /tmp/ccache \
|
||||||
&& cd /tmp/ccache \
|
&& cd /tmp/ccache \
|
||||||
|
41
docker/test/fasttest/requirements.txt
Normal file
41
docker/test/fasttest/requirements.txt
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Jinja2==3.1.3
|
||||||
|
MarkupSafe==2.1.5
|
||||||
|
PyJWT==2.3.0
|
||||||
|
PyYAML==6.0.1
|
||||||
|
Pygments==2.11.2
|
||||||
|
SecretStorage==3.3.1
|
||||||
|
blinker==1.4
|
||||||
|
certifi==2020.6.20
|
||||||
|
chardet==4.0.0
|
||||||
|
cryptography==3.4.8
|
||||||
|
dbus-python==1.2.18
|
||||||
|
distro==1.7.0
|
||||||
|
httplib2==0.20.2
|
||||||
|
idna==3.3
|
||||||
|
importlib-metadata==4.6.4
|
||||||
|
jeepney==0.7.1
|
||||||
|
keyring==23.5.0
|
||||||
|
launchpadlib==1.10.16
|
||||||
|
lazr.restfulclient==0.14.4
|
||||||
|
lazr.uri==1.0.6
|
||||||
|
lxml==4.8.0
|
||||||
|
more-itertools==8.10.0
|
||||||
|
numpy==1.26.3
|
||||||
|
oauthlib==3.2.0
|
||||||
|
packaging==24.1
|
||||||
|
pandas==1.5.3
|
||||||
|
pip==24.1.1
|
||||||
|
pipdeptree==2.23.0
|
||||||
|
pyparsing==2.4.7
|
||||||
|
python-apt==2.4.0+ubuntu3
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
pytz==2024.1
|
||||||
|
requests==2.32.3
|
||||||
|
scipy==1.12.0
|
||||||
|
setuptools==59.6.0
|
||||||
|
six==1.16.0
|
||||||
|
termcolor==1.1.0
|
||||||
|
urllib3==1.26.5
|
||||||
|
wadllib==1.3.6
|
||||||
|
wheel==0.37.1
|
||||||
|
zipp==1.0.0
|
@ -84,6 +84,8 @@ function start_server
|
|||||||
echo "ClickHouse server pid '$server_pid' started and responded"
|
echo "ClickHouse server pid '$server_pid' started and responded"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export -f start_server
|
||||||
|
|
||||||
function clone_root
|
function clone_root
|
||||||
{
|
{
|
||||||
[ "$UID" -eq 0 ] && git config --global --add safe.directory "$FASTTEST_SOURCE"
|
[ "$UID" -eq 0 ] && git config --global --add safe.directory "$FASTTEST_SOURCE"
|
||||||
@ -254,6 +256,19 @@ function configure
|
|||||||
rm -f "$FASTTEST_DATA/config.d/secure_ports.xml"
|
rm -f "$FASTTEST_DATA/config.d/secure_ports.xml"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function timeout_with_logging() {
|
||||||
|
local exit_code=0
|
||||||
|
|
||||||
|
timeout -s TERM --preserve-status "${@}" || exit_code="${?}"
|
||||||
|
|
||||||
|
if [[ "${exit_code}" -eq "124" ]]
|
||||||
|
then
|
||||||
|
echo "The command 'timeout ${*}' has been killed by timeout"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $exit_code
|
||||||
|
}
|
||||||
|
|
||||||
function run_tests
|
function run_tests
|
||||||
{
|
{
|
||||||
clickhouse-server --version
|
clickhouse-server --version
|
||||||
@ -269,6 +284,11 @@ function run_tests
|
|||||||
NPROC=1
|
NPROC=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CLICKHOUSE_CONFIG_DIR=$FASTTEST_DATA
|
||||||
|
export CLICKHOUSE_CONFIG="$FASTTEST_DATA/config.xml"
|
||||||
|
export CLICKHOUSE_USER_FILES="$FASTTEST_DATA/user_files"
|
||||||
|
export CLICKHOUSE_SCHEMA_FILES="$FASTTEST_DATA/format_schemas"
|
||||||
|
|
||||||
local test_opts=(
|
local test_opts=(
|
||||||
--hung-check
|
--hung-check
|
||||||
--fast-tests-only
|
--fast-tests-only
|
||||||
@ -292,6 +312,8 @@ function run_tests
|
|||||||
clickhouse stop --pid-path "$FASTTEST_DATA"
|
clickhouse stop --pid-path "$FASTTEST_DATA"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export -f run_tests
|
||||||
|
|
||||||
case "$stage" in
|
case "$stage" in
|
||||||
"")
|
"")
|
||||||
ls -la
|
ls -la
|
||||||
@ -315,7 +337,7 @@ case "$stage" in
|
|||||||
configure 2>&1 | ts '%Y-%m-%d %H:%M:%S' | tee "$FASTTEST_OUTPUT/install_log.txt"
|
configure 2>&1 | ts '%Y-%m-%d %H:%M:%S' | tee "$FASTTEST_OUTPUT/install_log.txt"
|
||||||
;&
|
;&
|
||||||
"run_tests")
|
"run_tests")
|
||||||
run_tests
|
timeout_with_logging 35m bash -c run_tests ||:
|
||||||
/process_functional_tests_result.py --in-results-dir "$FASTTEST_OUTPUT/" \
|
/process_functional_tests_result.py --in-results-dir "$FASTTEST_OUTPUT/" \
|
||||||
--out-results-file "$FASTTEST_OUTPUT/test_results.tsv" \
|
--out-results-file "$FASTTEST_OUTPUT/test_results.tsv" \
|
||||||
--out-status-file "$FASTTEST_OUTPUT/check_status.tsv" || echo -e "failure\tCannot parse results" > "$FASTTEST_OUTPUT/check_status.tsv"
|
--out-status-file "$FASTTEST_OUTPUT/check_status.tsv" || echo -e "failure\tCannot parse results" > "$FASTTEST_OUTPUT/check_status.tsv"
|
||||||
|
@ -31,7 +31,8 @@ RUN apt-get update \
|
|||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf /tmp/*
|
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf /tmp/*
|
||||||
|
|
||||||
RUN pip3 install Jinja2
|
COPY requirements.txt /
|
||||||
|
RUN pip3 install --no-cache-dir -r /requirements.txt
|
||||||
|
|
||||||
COPY * /
|
COPY * /
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user