Skip to content
This repository has been archived by the owner on Jun 24, 2021. It is now read-only.

Commit

Permalink
cherry-pick from master to 2.1 (#728)
Browse files Browse the repository at this point in the history
* Update OS version requirements (#663)

* Update OS version requirements

* Update operating system limits

* Update operating system limits

* Update operating system limits

* Set rolling update limits

* Liubo/check os version (#726)

* Fix OS check

* Fix OS check

* fix yaml format
  • Loading branch information
liubo0127 authored Apr 8, 2019
1 parent 17cac25 commit ab23321
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 3 deletions.
24 changes: 21 additions & 3 deletions roles/check_system_static/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,26 @@

- name: Preflight check - Linux OS family and distribution version
fail:
msg: "Red Hat Enterprise Linux/CentOS 6 is deprecated. Please use CentOS 7.3 and above. See https://github.com/pingcap/docs/blob/master/op-guide/recommendation.md"
when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version == '6'"
msg: "System versions lower than Red Hat Enterprise Linux / CentOS 7.3 have been deprecated. Please use CentOS 7.3 and above. See https://github.com/pingcap/docs/blob/master/op-guide/recommendation.md"
when:
- ansible_os_family == 'RedHat'
- ansible_distribution != 'Amazon'
- ansible_distribution_version < '7.3'

- name: Deploy epollexclusive script
copy: src="{{ script_dir }}/check/epollexclusive" dest="{{ deploy_dir }}/epollexclusive" mode=0755

- name: Preflight check - Check if the operating system supports EPOLLEXCLUSIVE
shell: "{{ deploy_dir }}/epollexclusive"
register: epollexclusive_check

- name: Clean epollexclusive script
file: path={{ deploy_dir }}/epollexclusive state=absent

- name: Preflight check - Fail when epollexclusive is unavailable
fail:
msg: "The current machine may be a docker virtual machine, and the corresponding physical machine operating system does not support epollexclusive"
when: epollexclusive_check.stdout.find("True") == -1

- name: Deploy check_cpufreq script
copy: src="{{ script_dir }}/check/check_cpufreq.py" dest="{{ deploy_dir }}/check_cpufreq.py" mode=0755
Expand All @@ -29,7 +47,7 @@

- name: Preflight check - Fail when CPU frequency governor is not set to performance mode
fail:
msg: To achieve maximum performance, it is recommended to set The CPU frequency governor to performance mode, see https://github.com/pingcap/docs/blob/master/op-guide/ansible-deployment.md#step-7-configure-the-cpufreq-governor-mode-on-the-target-machine
msg: "To achieve maximum performance, it is recommended to set The CPU frequency governor to performance mode, see https://github.com/pingcap/docs/blob/master/op-guide/ansible-deployment.md#step-7-configure-the-cpufreq-governor-mode-on-the-target-machine"
when:
- cpufreq_available_governors.stdout.find("performance") != -1
- cpufreq_current_governor.stdout.find("performance") == -1
Expand Down
16 changes: 16 additions & 0 deletions rolling_update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,22 @@
roles:
- check_config_dynamic

- name: Pre-check for rolling update
hosts: tidb_servers
any_errors_fatal: true
serial: 1
tags:
- always
tasks:
- shell: "{{ deploy_dir }}/bin/tidb-server -V"
register: current_version

- name: Check whether can perform rolling update
fail:
msg: "Rolling update from {{ current_version.stdout_lines[0].replace(' ','').split(':')[1] }} to {{ tidb_version }} is forbidden"
when:
- current_version.stdout_lines[0].replace(' ','').split(':')[1] <= "v2.0.1"
- tidb_version >= "v2.1.0" or tidb_version == "latest"

- name: rolling update PD cluster
hosts: pd_servers
Expand Down
Empty file modified scripts/check/check_cpufreq.py
100644 → 100755
Empty file.
100 changes: 100 additions & 0 deletions scripts/check/epoll_chk.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/*
*
* Copyright 2017 gRPC authors.
*
* 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.
*
*/

#include <errno.h>
#include <sys/eventfd.h>
#include <sys/epoll.h>
#include <unistd.h>
#include <stdio.h>

#ifndef EPOLLEXCLUSIVE
#define EPOLLEXCLUSIVE (1 << 28)
#endif

/* This polling engine is only relevant on linux kernels supporting epoll() */
bool grpc_is_epollexclusive_available(void) {
static bool logged_why_not = false;

int fd = epoll_create1(EPOLL_CLOEXEC);
if (fd < 0) {
if (!logged_why_not) {
printf(
"epoll_create1 failed with error: %d. Not using epollex polling "
"engine.",
fd);
logged_why_not = true;
}
return false;
}
int evfd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
if (evfd < 0) {
if (!logged_why_not) {
printf(
"eventfd failed with error: %d. Not using epollex polling "
"engine.",
fd);
logged_why_not = true;
}
close(fd);
return false;
}
struct epoll_event ev;
/* choose events that should cause an error on
EPOLLEXCLUSIVE enabled kernels - specifically the combination of
EPOLLONESHOT and EPOLLEXCLUSIVE */
ev.events = (uint32_t)(EPOLLET | EPOLLIN | EPOLLEXCLUSIVE | EPOLLONESHOT);
ev.data.ptr = NULL;
if (epoll_ctl(fd, EPOLL_CTL_ADD, evfd, &ev) != 0) {
if (errno != EINVAL) {
if (!logged_why_not) {
printf(
"epoll_ctl with EPOLLEXCLUSIVE | EPOLLONESHOT failed with error: "
"%d. Not using epollex polling engine.",
errno);
logged_why_not = true;
}
close(fd);
close(evfd);
return false;
}
} else {
if (!logged_why_not) {
printf(
"epoll_ctl with EPOLLEXCLUSIVE | EPOLLONESHOT succeeded. This is "
"evidence of no EPOLLEXCLUSIVE support. Not using "
"epollex polling engine.");
logged_why_not = true;
}
close(fd);
close(evfd);
return false;
}
close(evfd);
close(fd);
return true;
}

int main() {
if (grpc_is_epollexclusive_available()) {
printf("True: epollexclusive is available\n");
return 0;
} else {
printf("False: epollexclusive is NOT available\n");
return 1;
}
}
Binary file added scripts/check/epollexclusive
Binary file not shown.

0 comments on commit ab23321

Please sign in to comment.