Skip to content

Commit

Permalink
[PLAT-2131]Platform: Addition of Default GFlags while GFlags updation
Browse files Browse the repository at this point in the history
Summary:
 - Refractor GFlags editing code
 - Consolidated default gflags at java code
 - Set default gflags every time we update the gflags conf file

Test Plan:
Verify Following operation works successfully on universe
  - Create universe
  - Configure read replica
  - TLS toggle
  - Certs rotate
  - Gflags updation
  - Edit universe
  - Remove node
  - Release Node
  - Add node
 - Start master on node
 - upgrade systemd

Also verified that user gflags remain after the above-mentioned operations.
Modified junit test cases.

Ran itest using regex: `.*test.*`
https://jenkins.dev.yugabyte.com/job/dev-itest-job/499/
The failures on the test report are not related to changes and are regression too.

Reviewers: hkandala, arnav, sb-yb, sanketh

Reviewed By: sanketh

Subscribers: jenkins-bot, yugaware

Differential Revision: https://phabricator.dev.yugabyte.com/D13896
  • Loading branch information
vipul-yb committed Dec 13, 2021
1 parent 8f0a8c2 commit 0a5e0d0
Show file tree
Hide file tree
Showing 20 changed files with 544 additions and 656 deletions.
5 changes: 0 additions & 5 deletions managed/devops/opscli/ybops/cloud/common/method.py
Original file line number Diff line number Diff line change
Expand Up @@ -642,8 +642,6 @@ def prepare(self):
choices=self.VALID_PROCESS_TYPES)
self.parser.add_argument('--extra_gflags', default=None)
self.parser.add_argument('--gflags', default=None)
self.parser.add_argument('--replace_gflags', action="store_true")
self.parser.add_argument('--add_default_gflags', default=None)
self.parser.add_argument('--gflags_to_remove', default=None)
self.parser.add_argument('--master_addresses_for_tserver')
self.parser.add_argument('--master_addresses_for_master')
Expand Down Expand Up @@ -742,9 +740,6 @@ def callback(self, args):
if args.package is not None:
self.extra_vars["package"] = args.package

if args.add_default_gflags is not None:
self.extra_vars["add_default_gflags"] = args.add_default_gflags.strip()

if args.extra_gflags is not None:
self.extra_vars["extra_gflags"] = json.loads(args.extra_gflags)

Expand Down
22 changes: 0 additions & 22 deletions managed/devops/roles/configure-cluster-server/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,26 +45,4 @@ yb_cores_dir: "{{ yb_home_dir }}/cores"
yb_conf_dir: "{{ yb_home_dir }}/{{ yb_process_type }}/conf"
yb_logs_dir: "{{ yb_home_dir }}/{{ yb_process_type }}/logs"
yb_conf_file: "{{ yb_conf_dir }}/server.conf"
common_gflags:
placement_cloud: "{{ placement_cloud }}"
placement_region: "{{ placement_region }}"
placement_zone: "{{ placement_zone }}"
max_log_size: "256"
process_specific_gflags:
master:
server_broadcast_addresses: "{% if server_broadcast_addresses is defined %}{{ server_broadcast_addresses }}:{{ master_rpc_port }}{% else %}{% endif %}"
fs_data_dirs: "{{ mount_points }}"
master_addresses: "{{ master_addresses_for_master | default() }}"
rpc_bind_addresses: "{{ private_ip }}:{{ master_rpc_port }}"
webserver_port: "{{ master_http_port }}"
webserver_interface: "{{ private_ip }}"
tserver:
server_broadcast_addresses: "{% if server_broadcast_addresses is defined %}{{ server_broadcast_addresses }}:{{ tserver_rpc_port }}{% else %}{% endif %}"
fs_data_dirs: "{{ mount_points }}"
rpc_bind_addresses: "{{ private_ip }}:{{ tserver_rpc_port }}"
tserver_master_addrs: "{{ master_addresses_for_tserver }}"
webserver_port: "{{ tserver_http_port }}"
webserver_interface: "{{ private_ip }}"
cql_proxy_bind_address: "{{ private_ip }}:{{ cql_proxy_rpc_port }}"
redis_proxy_bind_address: "{{ private_ip }}:{{ redis_proxy_rpc_port }}"
systemd_option: false
Original file line number Diff line number Diff line change
Expand Up @@ -35,63 +35,23 @@
group: "{{ user_name }}"
state: link

# Remove existing gflags present in conf file
- name: Configure | Remove {{ yb_process_type }} gflags
file:
path: "{{ yb_conf_file }}"
state: absent
when: replace_gflags is defined
tags:
- override_gflags

# Get the list of default gflags based on server type along with common gflags.
- set_fact:
_gflags: "{{ common_gflags | combine(process_specific_gflags[yb_process_type]) }}"
tags:
- override_gflags

# Combines the default gflags with extra gflags when defined.
- set_fact:
_gflags: "{{ _gflags | combine(dict(extra_gflags)) }}"
when: extra_gflags is defined
tags:
- override_gflags

# Delete the gflags from the server conf file.
- name: Configure | Delete {{ yb_process_type }} gflags
lineinfile:
dest: "{{ yb_conf_file }}"
regexp: "^--{{ item }}=(.*)"
state: absent
with_items: "{{ gflags_to_remove }}"
when: gflags_to_remove is defined
tags:
- override_gflags

# Get the final gflags list which contains default gflags with the user's
# applied gflags. This is required only during gflags upgradation task.
- name: Configure | Add Default {{ yb_process_type }} gflags
set_fact:
final_gflags: "{{ _gflags | combine(dict(gflags) | default({})) }}"
when: (add_default_gflags is defined) and (gflags is defined)
tags:
- override_gflags

# Get the final gflags list which contains the user's defined gflags only.
- name: Configure | Set final gflags if {{ yb_process_type }} gflags are present.
set_fact:
final_gflags: "{{ final_gflags | default(gflags) }}"
when: (add_default_gflags is not defined) and (gflags is defined)
tags:
- override_gflags

# Set the user defined gflags if present otherwise set's default gflags.
# Set the gflags in conf file
# gflags has greater precedence over extra_gflags
- name: Configure | Set {{ yb_process_type }} gflags
lineinfile:
dest: "{{ yb_conf_file }}"
regexp: "^--{{ item.key }}=(.*)"
line: "--{{item.key}}={{item.value}}"
create: yes
with_dict: "{{ final_gflags | default(_gflags) }}"
with_dict: "{{ extra_gflags | combine(gflags | default({})) }}"
tags:
- override_gflags

Expand Down Expand Up @@ -124,6 +84,14 @@
user: "yugabyte"
state: absent

- name: Stop exsisting running master
shell:
cmd: "sudo systemctl stop yb-master"

- name: Stop exsisting running tserver
shell:
cmd: "sudo systemctl stop yb-tserver"

# Systemd daemon-reload for yb-master and yb-tserver service files
- name: Perform daemon-reload for the new services
shell:
Expand All @@ -146,5 +114,7 @@
- name: Run yb-tserver.service to start the tserver
shell:
cmd: "sudo systemctl start yb-tserver"
tags: systemd_upgrade
tags:
- override_gflags
- systemd_upgrade
when: systemd_option
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,8 @@ public AnsibleConfigureServers.Params getAnsibleConfigureServerParams(
AnsibleConfigureServers.Params params = new AnsibleConfigureServers.Params();
UserIntent userIntent =
getUniverse().getUniverseDetails().getClusterByUuid(node.placementUuid).userIntent;
Map<String, String> gflags =
processType.equals(ServerType.MASTER) ? userIntent.masterGFlags : userIntent.tserverGFlags;
// Set the device information (numVolumes, volumeSize, etc.)
params.deviceInfo = userIntent.deviceInfo;
// Add the node name.
Expand Down Expand Up @@ -388,7 +390,7 @@ public AnsibleConfigureServers.Params getAnsibleConfigureServerParams(
params.type = type;
params.setProperty("processType", processType.toString());
params.setProperty("taskSubType", taskSubType.toString());

params.gflags = gflags;
if (userIntent.providerType.equals(CloudType.onprem)) {
params.instanceType = node.cloudInfo.instance_type;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,6 @@ public void run() {
createConfigureServerTasks(node, true /* isShell */)
.setSubTaskGroupType(SubTaskGroupType.InstallingSoftware);

// Set default gflags
addDefaultGFlags(cluster.userIntent);

// All necessary nodes are created. Data moving will coming soon.
createSetNodeStateTasks(node, NodeDetails.NodeState.ToJoinCluster)
.setSubTaskGroupType(SubTaskGroupType.Provisioning);
Expand All @@ -151,8 +148,9 @@ public void run() {
"Bringing up master for under replicated universe {} ({})",
universe.universeUUID,
universe.name);

// Set gflags for master.
createGFlagsOverrideTasks(node, ServerType.MASTER);
createGFlagsOverrideTasks(node, ServerType.MASTER, true /* isShell */);

// Start a shell master process.
createStartMasterTasks(node).setSubTaskGroupType(SubTaskGroupType.StartingNodeProcesses);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,6 @@ && taskParams().getPrimaryCluster().userIntent.enableYSQLAuth) {
// Override master flags (on primary cluster) and tserver flags as necessary.
createGFlagsOverrideTasks(primaryNodes, ServerType.MASTER);

// Set default gflags
addDefaultGFlags(primaryCluster.userIntent);
createGFlagsOverrideTasks(taskParams().nodeDetailsSet, ServerType.TSERVER);

// Get the new masters from the node list.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ public void run() {
writeUserIntentToUniverse(false);

for (Cluster cluster : taskParams().clusters) {
addDefaultGFlags(cluster.userIntent);
editCluster(
universe,
cluster,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,6 @@ public void run() {
// Set of processes to be started, note that in this case it is same as nodes provisioned.
Set<NodeDetails> newTservers = PlacementInfoUtil.getTserversToProvision(readOnlyNodes);

// Set default gflags
addDefaultGFlags(cluster.userIntent);
createGFlagsOverrideTasks(newTservers, ServerType.TSERVER);

// Start the tservers in the clusters.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,6 @@ public void run() {
createSetNodeStateTask(currentNode, NodeState.Starting)
.setSubTaskGroupType(SubTaskGroupType.StartingMasterProcess);

// Set default gflags.
addDefaultGFlags(taskParams().getClusterByUuid(currentNode.placementUuid).userIntent);

// Set gflags for master.
createGFlagsOverrideTasks(ImmutableList.of(currentNode), ServerType.MASTER);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -496,28 +496,17 @@ public void selectNumMastersAZ(PlacementInfo pi) {
}

public void createGFlagsOverrideTasks(Collection<NodeDetails> nodes, ServerType taskType) {
// Skip if no extra flags for MASTER in primary cluster.
if (taskType.equals(ServerType.MASTER)
&& (taskParams().getPrimaryCluster() == null
|| taskParams().getPrimaryCluster().userIntent.masterGFlags.isEmpty())) {
return;
}

// Skip if all clusters have no extra TSERVER flags. (No cluster has an extra TSERVER flag.)
if (taskType.equals(ServerType.TSERVER)
&& taskParams().clusters.stream().allMatch(c -> c.userIntent.tserverGFlags.isEmpty())) {
return;
}
createGFlagsOverrideTasks(nodes, taskType, false /* isShell */);
}

public void createGFlagsOverrideTasks(
Collection<NodeDetails> nodes, ServerType taskType, boolean isMasterInShellMode) {
SubTaskGroup subTaskGroup = new SubTaskGroup("AnsibleConfigureServersGFlags", executor);
for (NodeDetails node : nodes) {
UserIntent userIntent = taskParams().getClusterByUuid(node.placementUuid).userIntent;
Map<String, String> gflags =
taskType.equals(ServerType.MASTER) ? userIntent.masterGFlags : userIntent.tserverGFlags;
if (gflags == null || gflags.isEmpty()) {
continue;
}

Universe universe = Universe.getOrBadRequest(taskParams().universeUUID);
AnsibleConfigureServers.Params params = new AnsibleConfigureServers.Params();
// Set the device information (numVolumes, volumeSize, etc.)
params.deviceInfo = userIntent.deviceInfo;
Expand All @@ -528,6 +517,36 @@ && taskParams().clusters.stream().allMatch(c -> c.userIntent.tserverGFlags.isEmp
// Add the az uuid.
params.azUuid = node.azUuid;
params.placementUuid = node.placementUuid;
// Sets the isMaster field
params.isMaster = node.isMaster;
params.enableYSQL = userIntent.enableYSQL;
params.enableYCQL = userIntent.enableYCQL;
params.enableYCQLAuth = userIntent.enableYCQLAuth;
params.enableYSQLAuth = userIntent.enableYSQLAuth;

// Update gflags conf file for shell mode.
params.isMasterInShellMode = isMasterInShellMode;

// The software package to install for this cluster.
params.ybSoftwareVersion = userIntent.ybSoftwareVersion;
// Set the InstanceType
params.instanceType = node.cloudInfo.instance_type;
params.enableNodeToNodeEncrypt = userIntent.enableNodeToNodeEncrypt;
params.enableClientToNodeEncrypt = userIntent.enableClientToNodeEncrypt;
params.rootAndClientRootCASame = universe.getUniverseDetails().rootAndClientRootCASame;

params.allowInsecure = universe.getUniverseDetails().allowInsecure;
params.setTxnTableWaitCountFlag = universe.getUniverseDetails().setTxnTableWaitCountFlag;
params.rootCA = universe.getUniverseDetails().rootCA;
params.clientRootCA = universe.getUniverseDetails().clientRootCA;
params.enableYEDIS = userIntent.enableYEDIS;

// Development testing variable.
params.itestS3PackagePath = taskParams().itestS3PackagePath;

UUID custUUID = Customer.get(universe.customerId).uuid;
params.callhomeLevel = CustomerConfig.getCallhomeLevel(custUUID);

// Add task type
params.type = UpgradeTaskParams.UpgradeTaskType.GFlags;
params.setProperty("processType", taskType.toString());
Expand Down Expand Up @@ -858,7 +877,7 @@ public SubTaskGroup createConfigureServerTasks(
params.azUuid = node.azUuid;
params.placementUuid = node.placementUuid;
// Sets the isMaster field
params.isMaster = node.isMaster;
params.isMaster = isMaster;
params.enableYSQL = userIntent.enableYSQL;
params.enableYCQL = userIntent.enableYCQL;
params.enableYCQLAuth = userIntent.enableYCQLAuth;
Expand Down Expand Up @@ -895,8 +914,10 @@ public SubTaskGroup createConfigureServerTasks(
params.type = UpgradeTaskParams.UpgradeTaskType.GFlags;
if (isMaster) {
params.setProperty("processType", ServerType.MASTER.toString());
params.gflags = userIntent.masterGFlags;
} else {
params.setProperty("processType", ServerType.TSERVER.toString());
params.gflags = userIntent.tserverGFlags;
}
}
// Create the Ansible task to get the server info.
Expand Down Expand Up @@ -979,30 +1000,6 @@ public void verifyParams(UniverseOpType opType) {
}
}

/**
* Adds default gflags depending on settings in UserIntent. Currently contains only flags for
* TServers.
*/
protected void addDefaultGFlags(UserIntent userIntent) {
if (userIntent.enableYEDIS) {
userIntent.tserverGFlags.put(
"redis_proxy_webserver_port",
Integer.toString(taskParams().communicationPorts.redisServerHttpPort));
} else {
userIntent.tserverGFlags.put("start_redis_proxy", "false");
}
if (userIntent.enableYCQL) {
userIntent.tserverGFlags.put(
"cql_proxy_webserver_port",
Integer.toString(taskParams().communicationPorts.yqlServerHttpPort));
}
if (userIntent.enableYSQL) {
userIntent.tserverGFlags.put(
"pgsql_proxy_webserver_port",
Integer.toString(taskParams().communicationPorts.ysqlServerHttpPort));
}
}

/*
* Setup a configure task to update the masters list in the conf files of all
* servers.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
import com.yugabyte.yw.forms.UpgradeTaskParams.UpgradeTaskType;
import com.yugabyte.yw.models.AvailabilityZone;
import com.yugabyte.yw.models.CertificateInfo;
import com.yugabyte.yw.models.Customer;
import com.yugabyte.yw.models.CustomerConfig;
import com.yugabyte.yw.models.InstanceType;
import com.yugabyte.yw.models.Provider;
import com.yugabyte.yw.models.Region;
Expand Down Expand Up @@ -1158,6 +1160,7 @@ private AnsibleConfigureServers getConfigureTask(
UpgradeTaskType type,
UpgradeTaskSubType taskSubType) {
AnsibleConfigureServers.Params params = new AnsibleConfigureServers.Params();
Universe universe = Universe.getOrBadRequest(taskParams().universeUUID);
UserIntent userIntent =
Universe.getOrBadRequest(taskParams().universeUUID)
.getUniverseDetails()
Expand All @@ -1180,6 +1183,31 @@ private AnsibleConfigureServers getConfigureTask(
params.setProperty("processType", processType.toString());
params.setProperty("taskSubType", taskSubType.toString());

// Sets the isMaster field
params.isMaster = node.isMaster;
params.enableYSQL = userIntent.enableYSQL;
params.enableYCQL = userIntent.enableYCQL;
params.enableYCQLAuth = userIntent.enableYCQLAuth;
params.enableYSQLAuth = userIntent.enableYSQLAuth;

// The software package to install for this cluster.
params.ybSoftwareVersion = userIntent.ybSoftwareVersion;
// Set the InstanceType
params.instanceType = node.cloudInfo.instance_type;
params.enableNodeToNodeEncrypt = userIntent.enableNodeToNodeEncrypt;
params.enableClientToNodeEncrypt = userIntent.enableClientToNodeEncrypt;
params.rootAndClientRootCASame = universe.getUniverseDetails().rootAndClientRootCASame;

params.allowInsecure = universe.getUniverseDetails().allowInsecure;
params.setTxnTableWaitCountFlag = universe.getUniverseDetails().setTxnTableWaitCountFlag;
params.rootCA = universe.getUniverseDetails().rootCA;
params.clientRootCA = universe.getUniverseDetails().clientRootCA;
params.enableYEDIS = userIntent.enableYEDIS;
params.useSystemd = userIntent.useSystemd;

UUID custUUID = Customer.get(universe.customerId).uuid;
params.callhomeLevel = CustomerConfig.getCallhomeLevel(custUUID);

if (type == UpgradeTaskType.Software) {
params.ybSoftwareVersion = taskParams().ybSoftwareVersion;
} else if (type == UpgradeTaskType.GFlags) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,6 @@ public static class Params extends NodeTaskParams {

// For cron to systemd upgrades
public boolean isSystemdUpgrade = false;

// Add extra gflags while editing gflags
public boolean addDefaultGFlags = false;
}

@Override
Expand Down
Loading

0 comments on commit 0a5e0d0

Please sign in to comment.